diff --git a/html/moodle2/CHANGES.txt b/html/moodle2/CHANGES.txt index 19cd5c1239..5bd214cc32 100755 --- a/html/moodle2/CHANGES.txt +++ b/html/moodle2/CHANGES.txt @@ -3,6 +3,15 @@ Release notes for Odissea (http://odissea.xtec.cat) More information on each of the fixes can be found in the project development home at https://github.com/projectestac/odissea/ +Changes 17.04.24 +--------------------------------------------------------------------------------------- +- Updated mod/hotpot +- Updated all related wiris plugins +- Updated LangPacks +- Added Vicens Vives modules: one course format, two blocks and a local (Trello #1331) +- Added H5P module (Trello #1571) + + Changes 17.03.28 --------------------------------------------------------------------------------------- - Moodle upgraded to from 3.1.5 (Trello #1553) diff --git a/html/moodle2/blocks/courses_vicensvives/README.md b/html/moodle2/blocks/courses_vicensvives/README.md new file mode 100644 index 0000000000..57e4a719c2 --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/README.md @@ -0,0 +1,105 @@ +Bloque de cursos Vicens Vives +============================= + +Bloque para listar, crear y actualizar cursos a partir de lubros importados del +web service de Vicens Vives. También permite configurar automáticamente el web +service de Moodle. + +Versiones de Moodle: 2.8, 2.9, 3.0, 3.1 + +Parámetros de configuración +--------------------------- + + * **URL API**: URL del web service de Vicens Vives. Por defecto es + `http://api.vicensvivesdigital.com/rest`. + * **Clave compartida**: Clave compartida con el Web Service de Vicens Vives + para obtener la información de los libros. + * **Secreto compartido**: Secreto compartido con el Web Service de Vicens Vives + para obtener la información de los libros. + * **Número de cursos**: Número de cursos que se muestra en el bloque. + * **Categoría para cursos**: Categoría por defecto para los cursos de libros de + Vicens Vives. + +Se muestra un aviso si hay algun error en conectar con el web service de Vicens +Vives o en configurar el web service de Moodle. + +Configuración del web service de Moodle +--------------------------------------- + +En guardar los parámetros de configuración se prepara Moodle para que desde +Vicens Vives puedan llamar al web service del plugin local. Se realizan los +pasos siguientes: + + * Se habilitan los web services en Moodle. + * Se habilita el protocolo REST. + * Se crea un usuario con username "wsvicensvives". + * Se crea un rol con nombre "Web Service Vicens Vives" y permisos para usar web + services REST y editar calificaciones. + * Se asigna el rol al usuario en contexto global. + * Se genera un token para el usuario en el servicio Vicens Vives. + * Se envía el token a Vicens Vives mediante una llamada a su web service. + +Cliente del web service de Vicens Vives +--------------------------------------- + +El fichero `lib/vicensvives.php` contiene la implementación del cliente del web +service de Vicens Vives. El cliente puede devolver una de los siguientes +errores: + + * Web service no configurado: falta configurar las credenciales (clave + compartida y secreto compartido). + * Fallo de autenticación: no se ha podido obtener un token de autenticación con + las credenciales configuradas. + * Credenciales ya usadas en otro sitio: Vicens Vives no permite usar las mismas + credenciales en más de una instancia de Moodle. + * Error desconocido: si el web service de Vicens Vives devuelve un tipo de + error no reconocido por el cliente. + +El token de autenticación se guarda en la base de datos. Si en hacer una llamada +el web service devuelve un error de token inexistente o caducado, se vuelve a +pedir uno nueo con las credenciales configuradas. + +El bloque de licencias también usa este cliente para llamar al web service. + +La API del web service está documentada en http://api.vicensvivesdigital.com/ + +Creación de cursos +------------------ + +El enlace "Crear un nuevo curso" del bloque permite crear un curso a partir de +un libro seleccionado de una lista de libros disponibles. + +El idnumber de los cursos creados tiene el formato `vv-BOOKID-N-SUBJECT`. BOOKID +es el ID del libro, N es un número secuencial para distinguir cursos creados a +partir del mismo libro, y SUBJECT es la materia del cursos: "mates", "lengua", +"naturales" o "sociales". Se asigna el formato de curso Vicens Vives a los +cursos. + +El libro tiene una estructura de tres niveles: unidades, secciones y +recursos/actividades. En Moodle cada unidad se crea como una sección, y cada +apartado se crea como una etiqueta y (opcionalmente) una actividad LTI. Cada +recurso/actividad se crea como una actividad LTI, excepto los enlaces que son +recursos URL. Los idnumber de las actividades contienen el ID del libro, el tipo +de elemento y el ID del elemento en el libro. + +En el libro | En Moodle | idnumber +------------|-----------|--------------------------- +Unit | Sección | BOOKID_unit_UNITID +Section | Etiqueta | BOOKID_lebel_SECTIONID + | LTI | BOOKID_section_SECTIONID +Question | LTI | BOOKID_question_QUESTIONID +Link | URL | BOOKID_link_LINKID +Document | LTI | BOOKID_document_DOCUMENTID + +La clase `courses_vicensvives_add_book` del fichero `locallib.php` implementa la +creación y actualización de cursos. Entre versiones diferentes de Moodle sólo +cambian los métodos `create_mod` y `set_num_sections`. + +Actualización de cursos +----------------------- + +El enlace "Ver cursos" muestra una lista de los cursos creados a partir de +libros importados. El botón "Actualizar" vuelve a importar el lubro y añade los +contenidos nuevas al curso (no actualiza los contenidos ya creados). Las +unidades, secciones y actividades se añaden ordenadas según su posición en el +libro. diff --git a/html/moodle2/blocks/courses_vicensvives/block_courses_vicensvives.php b/html/moodle2/blocks/courses_vicensvives/block_courses_vicensvives.php new file mode 100644 index 0000000000..4d215060ab --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/block_courses_vicensvives.php @@ -0,0 +1,112 @@ +. + +require_once($CFG->dirroot . '/course/lib.php'); + +class block_courses_vicensvives extends block_list { + + public function init() { + $this->title = get_string('pluginname', 'block_courses_vicensvives'); + } + + public function instance_allow_multiple() { + return false; + } + + public function has_config() { + return true; + } + + public function instance_config_save($data, $nolongerused = false) { + echo "esto no se cuando se ejecuta";die; + if (empty($data->quizid)) { + $data->quizid = $this->get_owning_quiz(); + } + parent::instance_config_save($data); + } + + public function get_content() { + global $CFG, $USER, $DB, $OUTPUT; + + if ($this->content !== null) { + return $this->content; + } + + $this->content = new stdClass; + $this->content->items = array(); + $this->content->icons = array(); + $this->content->footer = ''; + + $icon = $OUTPUT->pix_icon('i/course', ''); + + // Administradores. + if (is_siteadmin()) { + $text = get_string('show_courses', 'block_courses_vicensvives'); + $url = new moodle_url('/blocks/courses_vicensvives/courses.php'); + $this->content->items[] = html_writer::link($url, $text); + + $text = get_string('addcourse', 'block_courses_vicensvives'); + $url = new moodle_url('/blocks/courses_vicensvives/books.php'); + $this->content->items[] = html_writer::link($url, $text); + + return $this->content; + } + + // Profesores y gestores + $contextcat = context_coursecat::instance($CFG->block_courses_vicensvives_defaultcategory); + if (isloggedin() and !isguestuser()) { + $mycourses = enrol_get_my_courses(null, 'visible DESC, fullname ASC'); + if (!$mycourses and !has_capability('moodle/course:create', $contextcat)) { + return $this->content; + } + + // Filtrar mycourses con sólo los de VV. + $courses = $mycourses; + + $i = 0; + foreach ($courses as $course) { + // Falta filtrar VV. + $coursecontext = context_course::instance($course->id); // Eliminamos alumnos de esta manera. + if (has_capability('moodle/course:update', $coursecontext) and $i < $CFG->block_courses_vicensvives_maxcourses) { + $linkcss = $course->visible ? "" : " class=\"dimmed\" "; + $text = $icon . ' ' . format_string($course->shortname, true, array('context' => $coursecontext)); + $url = new moodle_url('/course/view.php', array('id' => $course->id)); + $attributes = array('class' => $course->visible ? '' : 'dimmed'); + $this->content->items[] = html_writer::link($url, $text, $attributes); + $i++; + } else if ($i >= $CFG->block_courses_vicensvives_maxcourses) { + $text = get_string('show_more', 'block_courses_vicensvives'); + $url = new moodle_url('/blocks/courses_vicensvives/courses.php'); + $this->content->items[] = html_writer::link($url, $text); + break; + } + } + + if (has_capability('moodle/course:create', $contextcat)) { + $text = get_string('addcourse', 'block_courses_vicensvives'); + $url = new moodle_url('/blocks/courses_vicensvives/books.php'); + $this->content->items[] = html_writer::link($url, $text); + } + + return $this->content; + } + + return $this->content; + } + +} + + diff --git a/html/moodle2/blocks/courses_vicensvives/books.php b/html/moodle2/blocks/courses_vicensvives/books.php new file mode 100644 index 0000000000..ed6cc7c8d8 --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/books.php @@ -0,0 +1,223 @@ +. + +require('../../config.php'); +require_once($CFG->dirroot.'/lib/resourcelib.php'); +require_once($CFG->dirroot.'/lib/tablelib.php'); +require_once($CFG->dirroot.'/blocks/courses_vicensvives/locallib.php'); + +function str_contains($haystack, $needle) { + // Normaliza el texto a carñacteres ASCII en mínuscula y sin espacios duplicados + $normalize = function($text) { + $text = core_text::specialtoascii($text); + $text = core_text::strtolower($text); + $text = preg_replace('/\s+/', ' ', trim($text)); + return $text; + }; + $haystack = $normalize($haystack); + $needle = $normalize($needle); + return core_text::strpos($haystack, $needle) !== false; +} + +require_login(null, false); + +$context = context_coursecat::instance($CFG->block_courses_vicensvives_defaultcategory); +require_capability('moodle/course:create', $context); + +$baseurl = new moodle_url('/blocks/courses_vicensvives/books.php'); + +$PAGE->set_context($context); +$PAGE->set_url($baseurl); +$PAGE->set_pagelayout('standard'); +$PAGE->set_title(get_string('books', 'block_courses_vicensvives')); +$PAGE->set_heading(get_string('books', 'block_courses_vicensvives')); + +$viewbooks = new moodle_url('/blocks/courses_vicensvives/books.php'); +$PAGE->navbar->add(get_string('blocks')); +$PAGE->navbar->add(get_string('pluginname', 'block_courses_vicensvives')); +$PAGE->navbar->add(get_string('books', 'block_courses_vicensvives'), $viewbooks); + +$ws = new vicensvives_ws(); + +$lang = $CFG->lang == 'ca' ? 'ca' : 'es'; + +try { + $levels = array(0 => ''); + foreach ($ws->levels($lang) as $level) { + $levels[$level->idLevel] = $level->shortname; + } + + $subjects = array(0 => ''); + foreach ($ws->subjects($lang) as $subject) { + $subjects[$subject->idSubject] = $subject->name; + } + + $allbooks = array(); + foreach ($ws->books() as $book) { + $allbooks[$book->idBook] = $book; + } + +} catch (vicensvives_ws_error $e) { + echo $OUTPUT->header(); + echo html_writer::tag('p', $e->getMessage(), array('class' => 'alert alert-error')); + echo $OUTPUT->footer(); + exit; +} + +if ($bookid = optional_param('create', false, PARAM_INT)) { + if (!isset($allbooks[$bookid])) { + redirect($baseurl); + } + + $book = $allbooks[$bookid]; + $customdata = array( + 'fullname' => $book->fullname, + 'subject' => isset($subjects[$book->idSubject]) ? $subjects[$book->idSubject] : '', + 'level' => isset($levels[$book->idLevel]) ? $levels[$book->idLevel] : '', + 'isbn' => $book->isbn, + ); + $formurl = new moodle_url($baseurl, array('create' => $bookid)); + $form = new \block_courses_vicensvives\create_form($formurl, $customdata, 'post'); + + if ($form->is_cancelled()) { + redirect($baseurl); + } else if ($data = $form->get_data()) { + $PAGE->set_pagelayout('base'); + echo $OUTPUT->header(); + echo $OUTPUT->heading(get_string('creatingcourse', 'block_courses_vicensvives') . ': ' . $book->fullname); + + @set_time_limit(0); + raise_memory_limit(MEMORY_HUGE); + + $progress = new progress_bar(); + $courseid = courses_vicensvives_add_book::create($bookid, $data->format, $progress); + + $errormsg = courses_vicensvives_add_book::enrol_user($courseid, $USER->id); + if ($errormsg) { + echo $OUTPUT->notification($errormsg, 'warning'); + } + + $urlcourse = new moodle_url('/course/view.php', array('id' => $courseid)); + $link = html_writer::link($urlcourse, get_string('gotocourse', 'block_courses_vicensvives')); + echo html_writer::div("($link)", 'continuebutton'); + + echo $OUTPUT->footer(); + } else { + echo $OUTPUT->header(); + $form->display(); + echo $OUTPUT->footer(); + } + + exit; +} + +$search = array( + 'fullname' => optional_param('fullname', '', PARAM_TEXT), + 'idsubject' => optional_param('idsubject', '', PARAM_INT), + 'idlevel' => optional_param('idlevel', '', PARAM_INT), + 'isbn' => optional_param('isbn', '', PARAM_TEXT), +); + +$customdata = array('levels' => $levels, 'subjects' => $subjects, 'search' => $search); +$form = new \block_courses_vicensvives\filter_form(null, $customdata, 'get'); + +if ($form->is_cancelled()) { + redirect($baseurl); +} + +$filteredbooks = array(); + +foreach ($allbooks as $book) { + if ($search['fullname'] and !str_contains($book->fullname, $search['fullname'])) { + continue; + } + if ($search['idsubject'] and $book->idSubject != $search['idsubject']) { + continue; + } + if ($search['idlevel'] and $book->idLevel != $search['idlevel']) { + continue; + } + if ($search['isbn'] and !str_contains($book->isbn, $search['isbn'])) { + continue; + } + $filteredbooks[$book->idBook] = $book; +} + + +echo $OUTPUT->header(); +echo $OUTPUT->heading(''); + +$form->display(); + +if ($filteredbooks) { + $a = array('total' => count($allbooks), 'found' => count($filteredbooks)); + $string = get_string('searchresult', 'block_courses_vicensvives', $a); +} else { + $string = get_string('searchempty', 'block_courses_vicensvives', count($allbooks)); +} +echo $OUTPUT->heading($string); + +$table = new flexible_table('vicensvives_books'); +$url = new moodle_url($baseurl, $search); +$table->define_baseurl($url); +$table->define_columns(array('name', 'subject', 'level', 'isbn', 'actions')); +$table->set_attribute('class', 'vicensvives_books'); +$table->column_class('actions', 'vicensvives_actions'); +$table->define_headers(array( + get_string('fullname', 'block_courses_vicensvives'), + get_string('subject', 'block_courses_vicensvives'), + get_string('level', 'block_courses_vicensvives'), + get_string('isbn', 'block_courses_vicensvives'), + get_string('actions', 'block_courses_vicensvives'), +)); +$table->sortable(true, 'name'); +$table->no_sorting('actions'); +$table->pagesize(50, count($filteredbooks)); +$table->setup(); + +$rows = array(); +foreach ($filteredbooks as $book) { + $row = new stdClass; + $row->name = $book->fullname; + $row->subject = isset($subjects[$book->idSubject]) ? $subjects[$book->idSubject] : ''; + $row->level = isset($levels[$book->idLevel]) ? $levels[$book->idLevel] : ''; + $row->isbn = $book->isbn; + $addurl = new moodle_url('/blocks/courses_vicensvives/books.php', array('create' => $book->idBook)); + $title = get_string('addcourse', 'block_courses_vicensvives'); + $icon = html_writer::empty_tag('img', array('src' => $OUTPUT->pix_url('t/addfile'), 'alt' => $title)); + $row->actions = html_writer::link($addurl, $icon, array('title' => $title)); + $rows[] = $row; +} + +// Ordenación +foreach ($table->get_sort_columns() as $column => $order) { + core_collator::asort_objects_by_property($rows, $column); + if ($order == SORT_DESC) { + $rows = array_reverse($rows); + } + break; // Ordenación sólo por el primer criterio +} + +// Paginación +$rows = array_slice($rows, $table->get_page_start(), $table->get_page_size()); + +foreach ($rows as $row) { + $table->add_data(array($row->name, $row->subject, $row->level, $row->isbn, $row->actions)); +} + +$table->finish_output(); + +echo $OUTPUT->footer(); diff --git a/html/moodle2/blocks/courses_vicensvives/classes/create_form.php b/html/moodle2/blocks/courses_vicensvives/classes/create_form.php new file mode 100644 index 0000000000..8453888ed0 --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/classes/create_form.php @@ -0,0 +1,63 @@ +. + +namespace block_courses_vicensvives; + +defined('MOODLE_INTERNAL') || die; + +require_once($CFG->dirroot.'/lib/formslib.php'); + +class create_form extends \moodleform { + + public function definition() { + global $CFG; + + $mform = $this->_form; + + $mform->addElement('header', 'addcourse', get_string('addcourse', 'block_courses_vicensvives')); + + $label = get_string('fullname', 'block_courses_vicensvives'); + $mform->addElement('static', 'fullname', $label, $this->_customdata['fullname']); + + $label = get_string('level', 'block_courses_vicensvives'); + $mform->addElement('static', 'level', $label, $this->_customdata['level']); + + $label = get_string('subject', 'block_courses_vicensvives'); + $mform->addElement('static', 'subject', $label, $this->_customdata['subject']); + + $label = get_string('isbn', 'block_courses_vicensvives'); + $mform->addElement('static', 'isbn', $label, $this->_customdata['isbn']); + + $options = array( + 'vv' => 'Vicens Vives', + 'topics' => get_string('standardformat', 'block_courses_vicensvives'), + ); + $mform->addElement('select', 'format', get_string('format', 'block_courses_vicensvives'), $options); + $mform->setType('format', PARAM_ALPHA); + + $text = get_string('createwarning', 'block_courses_vicensvives'); + $content = \html_writer::div($text, 'vicensvives_create_warning'); + $mform->addElement('static', 'warning', '', $content); + + $buttonarray = array(); + $label = get_string('create', 'block_courses_vicensvives'); + $buttonarray[] = $mform->createElement('submit', 'submitbutton', $label); + $label = get_string('cancel', 'block_courses_vicensvives'); + $buttonarray[] = $mform->createElement('cancel', 'cancel', $label);; + $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); + $mform->closeHeaderBefore('buttonar'); + } +} diff --git a/html/moodle2/blocks/courses_vicensvives/classes/event/webservice_called.php b/html/moodle2/blocks/courses_vicensvives/classes/event/webservice_called.php new file mode 100644 index 0000000000..0a95b0f0e9 --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/classes/event/webservice_called.php @@ -0,0 +1,54 @@ +. + +namespace block_courses_vicensvives\event; + +class webservice_called extends \core\event\base { + + protected function init() { + $this->data['crud'] = 'r'; + $this->data['edulevel'] = self::LEVEL_OTHER; + } + + public static function get_name() { + return get_string('webservicecalled', 'block_courses_vicensvives'); + } + + public function get_description() { + return 'Se ha llamado el webservice: ' . $this->get_info(); + } + + public function get_legacy_logdata() { + $info = $this->get_info(); + + if (strlen($info) > 255) { + $info = substr($info, 0, 252) . '...'; + } + + return array($this->courseid, 'vicensvives', 'webservice', $this->other['script'], $info); + } + + private function get_info() { + $method = strtoupper($this->other['method']); + $path = $this->other['path']; + $status = $this->other['status']; + $info = "$method $path => $status"; + if (!empty($this->other['message'])) { + $info .= ' ' . $this->other['message']; + } + return $info; + } +} diff --git a/html/moodle2/blocks/courses_vicensvives/classes/filter_form.php b/html/moodle2/blocks/courses_vicensvives/classes/filter_form.php new file mode 100644 index 0000000000..63c16204b7 --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/classes/filter_form.php @@ -0,0 +1,63 @@ +. + +namespace block_courses_vicensvives; + +defined('MOODLE_INTERNAL') || die; + +require_once($CFG->dirroot.'/lib/formslib.php'); + +class filter_form extends \moodleform { + + public function definition() { + global $CFG; + + $mform = $this->_form; + $levels = $this->_customdata['levels']; + $subjects = $this->_customdata['subjects']; + $search = $this->_customdata['search']; + + $mform->addElement('header', 'search', get_string('search')); + if (!$search['fullname'] and !$search['idsubject'] and !$search['idlevel'] and !$search['isbn']) { + $mform->setExpanded('search', false, true); + } + + $string = get_string('fullname', 'block_courses_vicensvives'); + $mform->addElement('text', 'fullname', $string); + $mform->setType('fullname', PARAM_TEXT); + $mform->setDefault('fullname', $search['fullname']); + + $string = get_string('subject', 'block_courses_vicensvives'); + $mform->addElement('select', 'idsubject', $string, $subjects); + $mform->setType('idsubject', PARAM_INT); + $mform->setDefault('idsubject', $search['idsubject']); + + $string = get_string('level', 'block_courses_vicensvives'); + $mform->addElement('select', 'idlevel', $string, $levels); + $mform->setType('idlevel', PARAM_INT); + $mform->setDefault('idlevel', $search['idlevel']); + + $string = get_string('isbn', 'block_courses_vicensvives'); + $mform->addElement('text', 'isbn', $string); + $mform->setType('isbn', PARAM_TEXT); + $mform->setDefault('isbn', $search['isbn']); + + $buttonarray = array(); + $buttonarray[] = &$mform->createElement('submit', 'search', get_string('search')); + $buttonarray[] = &$mform->createElement('cancel', 'reset', get_string('reset')); + $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); + } +} diff --git a/html/moodle2/blocks/courses_vicensvives/courses.php b/html/moodle2/blocks/courses_vicensvives/courses.php new file mode 100644 index 0000000000..59d835948f --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/courses.php @@ -0,0 +1,115 @@ +. + +require('../../config.php'); +require_once("$CFG->dirroot/blocks/courses_vicensvives/locallib.php"); + +if (!isloggedin() or isguestuser()) { + require_login(); +} +require_login(null, false); + +$returnurl = new moodle_url('/blocks/courses_vicensvives/courses.php'); +$PAGE->set_url($returnurl); + +$PAGE->set_context(context_system::instance()); + +$PAGE->set_pagelayout('standard'); + +$PAGE->set_title(get_string('courses', 'block_courses_vicensvives')); +$PAGE->set_heading(get_string('courses', 'block_courses_vicensvives')); + +$viewcourses = new moodle_url('/blocks/courses_vicensvives/courses.php'); +$PAGE->navbar->add(get_string('blocks')); +$PAGE->navbar->add(get_string('pluginname', 'block_courses_vicensvives')); +$PAGE->navbar->add(get_string('courses', 'block_courses_vicensvives'), $viewcourses); + +if ($courseid = optional_param('update', false, PARAM_INT)) { + $context = context_coursecat::instance($CFG->block_courses_vicensvives_defaultcategory); + require_capability('moodle/course:create', $context); + require_sesskey(); + + @set_time_limit(0); + raise_memory_limit(MEMORY_HUGE); + + $PAGE->set_pagelayout('base'); + echo $OUTPUT->header(); + + $coursename = format_string(get_course($courseid)->fullname); + echo $OUTPUT->heading(get_string('updateingcourse', 'block_courses_vicensvives') . ': ' . $coursename); + + $progress = new progress_bar(); + $updatedunits = courses_vicensvives_add_book::update($courseid , $progress); + + if ($updatedunits) { + echo $OUTPUT->heading(get_string('updatedunits', 'block_courses_vicensvives'), 4); + echo html_writer::start_tag('ul', array('class' => 'vicensives_newunits')); + foreach ($updatedunits as $unit) { + echo html_writer::tag('li', html_writer::tag('strong', $unit->label . '.') . ' ' . $unit->name); + } + echo html_writer::end_tag('ul'); + } else { + echo $OUTPUT->heading(get_string('noupdatedunits', 'block_courses_vicensvives'), 4); + } + + $urlcourse = new moodle_url('/course/view.php', array('id' => $courseid)); + $link = html_writer::link($urlcourse, get_string('gotocourse', 'block_courses_vicensvives')); + echo html_writer::div("($link)", 'continuebutton'); + + echo $OUTPUT->footer(); + + exit; +} + +$fields = 'id, format, fullname, visible, summary, summaryformat'; + +if (has_capability('moodle/course:update', context_system::instance())) { + $select = $DB->sql_like('idnumber', ':idnumber'); + $params = array('idnumber' => 'vv-%'); + $courses = $DB->get_records_select('course', $select, $params, 'sortorder', $fields); +} else { + $courses = array(); + foreach (enrol_get_my_courses($fields, 'visible DESC, fullname ASC') as $course) { + if (!preg_match('/^vv-/i', $course->idnumber)) { + continue; + } + $coursecontext = context_course::instance($course->id); + if ($course->visible or has_capability('moodle/course:viewhiddencourses', $coursecontext)) { + $courses[] = $course; + } + } +} + +if (!$courses) { + redirect($CFG->wwwroot, get_string('nohaycursos', 'block_courses_vicensvives'), 10); +} + +echo $OUTPUT->header(); + +$contextcat = context_coursecat::instance($CFG->block_courses_vicensvives_defaultcategory); +if (has_capability('moodle/course:create', $contextcat)) { + $url = new moodle_url('/blocks/courses_vicensvives/books.php'); + $text = get_string('addcourse', 'block_courses_vicensvives'); + echo $OUTPUT->single_button($url, $text); +} + +$renderer = $PAGE->get_renderer('block_courses_vicensvives'); + +foreach ($courses as $course) { + echo $renderer->course_info_box($course); +} + +echo $OUTPUT->footer(); diff --git a/html/moodle2/blocks/courses_vicensvives/db/access.php b/html/moodle2/blocks/courses_vicensvives/db/access.php new file mode 100644 index 0000000000..78bc5579cd --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/db/access.php @@ -0,0 +1,38 @@ +. + + +$capabilities = array( + + 'block/courses_vicensvives:myaddinstance' => array( + 'captype' => 'write', + 'contextlevel' => CONTEXT_SYSTEM, + 'archetypes' => array(), + 'clonepermissionsfrom' => 'moodle/my:manageblocks' + ), + + 'block/courses_vicensvives:addinstance' => array( + 'riskbitmask' => RISK_SPAM | RISK_XSS, + 'captype' => 'write', + 'contextlevel' => CONTEXT_BLOCK, + 'archetypes' => array( + 'editingteacher' => CAP_ALLOW, + 'manager' => CAP_ALLOW + ), + + 'clonepermissionsfrom' => 'moodle/site:manageblocks' + ), +); diff --git a/html/moodle2/blocks/courses_vicensvives/lang/ca/block_courses_vicensvives.php b/html/moodle2/blocks/courses_vicensvives/lang/ca/block_courses_vicensvives.php new file mode 100644 index 0000000000..f3ac416ba1 --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/lang/ca/block_courses_vicensvives.php @@ -0,0 +1,93 @@ +. + +$string['pluginname'] = 'Cursos Vicens Vives'; + +// Settings. +$string['apiurl'] = 'URL API'; +$string['sharekey'] = 'Clau compartida'; +$string['sharepass'] = 'Secret compartit'; + +$string['configapiurl'] = 'URL del servei web de Vicens Vives'; +$string['configsharekey'] = 'Clau compartida amb el servei web de Vicens Vives per obtenir la informació dels llibres.'; +$string['configsharepass'] = 'Secret compartit amb el servei web de Vicens Vives per obternir la informació dels llibres.'; + +$string['connectok'] = "La connexió amb Vicens Vives s'hi ha establert correctament"; +$string['connectfail'] = "La connexió amb Vicens Vives ha fallat; comprova'n les credencials"; + +$string['maxcourses'] = 'Nombre de cursos'; +$string['defaultcategory'] = 'Categoria per a cursos'; + +$string['configdefaultcategory'] = 'Categoria per defecte per als cursos de llibres de Vicens Vives.'; +$string['configmaxcourses'] = 'Nombre de cursos que es mostra en el bloc.'; + +$string['configmoodlews'] = 'Servei web de Moodle'; +$string['configmoodlewsdesc'] = 'Es configurarà el servei web de Moodle i se sincronitzarà el token amb Vicens Vives.'; + +// Errors +$string['wsnotconfigured'] = 'El servei web de Vicens Vives no està configurat.'; +$string['wsauthfailed'] = "Ha fallat l'autentificació amb el servei web de Vicens Vives. "; +$string['wsunknownerror'] = 'Hi ha hagut un error inesperat en connectar amb el servei web de Vicens Vives.'; +$string['wssitemismatch'] = "Les credencials (clau i secret compartit) ja s'estan utilitzant en una altra instal·lació de Moodle."; +$string['booknotfetched'] = "No s'hi ha pogut obtenir el llibre."; +$string['moodlewsnotinstalled'] = "El plugin del servei web de qualificacions no està instal·lat."; +$string['moodlewsnotenabled'] = "El servei web de qualificacions no està activat; es configurarà quan es desin els canvis."; + +// Contenido del bloque. +$string['show_more'] = 'Veure més...'; +$string['show_courses'] = 'Veure cursos'; + +// Páginas del bloque. +$string['courses'] = 'Cursos'; +$string['books'] = 'Llibres'; +$string['addcourse'] = 'Crear un curs nou'; +$string['nohaycursos'] = 'No hi ha cap curs per mostrar'; +$string['searchresult'] = '{$a->found} de {$a->total} llibres'; +$string['searchempty'] = '{$a} llibres'; +$string['standardformat'] = 'Estàndard de Moodle (per unitats)'; + +// Tabla libros +$string['fullname'] = 'Nom'; +$string['subject'] = 'Assignatura'; +$string['level'] = 'Nivell'; +$string['isbn'] = 'ISBN'; +$string['actions'] = 'Accions'; +$string['nobooksfound'] = "No s'hi han trobat llibres"; + +// Crear el curs. +$string['create'] = 'Crear'; +$string['format'] = 'Format'; +$string['cancel'] = 'Cancel·lar'; +$string['createwarning'] = 'Aquest procés pot trigar uns quants minuts.'; +$string['creatingcourse'] = 'Creant curs'; +$string['gotocourse'] = 'Anar al curs'; +$string['editingteachernotexist'] = "L'usuari no s'hi ha pogut matricular: El rol 'editingteacher' no existeix."; +$string['manualnotenable'] = "L'usuari no s'hi ha pogut matricular: La matrícula manual no està activada. "; +$string['nofetchbook'] = "No s'hi ha pogut obtenir el llibre"; +$string['nocreatecourse'] = "No s'hi ha pogut crear el curs"; +$string['nocreatestructure'] = "No s'hi ha pogut crear l'estructura del curs"; + +// Actualizar curso +$string['updateingcourse'] = 'Actualitzant curs'; +$string['updatedunits'] = 'Unitats afegides o actualitzades'; +$string['noupdatedunits'] = 'No hi ha actualitzacions per a aquest llibre.'; + +// Permisos +$string['courses_vicensvives:addinstance'] = 'Crear instància del bloc.'; +$string['courses_vicensvives:myaddinstance'] = 'Crear instància del bloc en my.'; + +// Event +$string['eventwebservicecalled'] = 'Servei web cridat'; diff --git a/html/moodle2/blocks/courses_vicensvives/lang/en/block_courses_vicensvives.php b/html/moodle2/blocks/courses_vicensvives/lang/en/block_courses_vicensvives.php new file mode 100644 index 0000000000..66696ec3f0 --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/lang/en/block_courses_vicensvives.php @@ -0,0 +1,93 @@ +. + +$string['pluginname'] = 'Courses Vicens Vives'; + +// Settings. +$string['apiurl'] = 'URL API'; +$string['sharekey'] = 'Clave compartida'; +$string['sharepass'] = 'Secreto compartido'; + +$string['configapiurl'] = 'URL del web service de Vicens Vives'; +$string['configsharekey'] = 'Clave compartida con el Web Service de Vicens Vives para obtener la información de los libros.'; +$string['configsharepass'] = 'Secreto compartido con el Web Service de Vicens Vives para obtener la información de los libros.'; + +$string['connectok'] = 'La conexión con Vicens Vives se ha establecido correctamente'; +$string['connectfail'] = 'La conexión con Vicens Vives ha fallado, comprueba las credenciales'; + +$string['maxcourses'] = 'Número de cursos'; +$string['defaultcategory'] = 'Categoría para cursos'; + +$string['configdefaultcategory'] = 'Categoría por defecto para los cursos de libros de Vicens Vives.'; +$string['configmaxcourses'] = 'Número de cursos que se muestra en el bloque.'; + +$string['configmoodlews'] = 'Web service de Moodle'; +$string['configmoodlewsdesc'] = 'Se configurará el web service de Moodle y se sincronizará el token con Vicens Vives.'; + +// Errors +$string['wsnotconfigured'] = 'El Web Service de Vicens Vives no está configurado.'; +$string['wsauthfailed'] = 'Ha fallado la autentificación con el Web Service de Vicens Vives.'; +$string['wsunknownerror'] = 'Se ha producido un error inesperado en conectar con el Web Service de Vicens Vives.'; +$string['wssitemismatch'] = 'Las credenciales (clave y secreto compartido) ya se están utilitzando en otra instalación de Moodle.'; +$string['booknotfetched'] = 'No se ha podido obtener el libro.'; +$string['moodlewsnotinstalled'] = 'El plugin del web service de calificaciones no está instalado.'; +$string['moodlewsnotenabled'] = 'El web service de calificaciones no está activado, se configurará en guardar los cambios.'; + +// Contenido del bloque. +$string['show_more'] = 'Ver más...'; +$string['show_courses'] = 'Ver cursos'; + +// Páginas del bloque. +$string['courses'] = 'Cursos'; +$string['books'] = 'Libros'; +$string['addcourse'] = 'Crear un nuevo curso'; +$string['nohaycursos'] = 'No hay cursos que mostrar'; +$string['searchresult'] = '{$a->found} de {$a->total} libros'; +$string['searchempty'] = '{$a} libros'; +$string['standardformat'] = 'Estándar de Moodle (por temas)'; + +// Tabla libros +$string['fullname'] = 'Nombre'; +$string['subject'] = 'Materia'; +$string['level'] = 'Nivel'; +$string['isbn'] = 'ISBN'; +$string['actions'] = 'Acciones'; +$string['nobooksfound'] = 'No se han encontrado libros'; + +// Crear el curs. +$string['create'] = 'Crear'; +$string['format'] = 'Formato'; +$string['cancel'] = 'Cancelar'; +$string['createwarning'] = 'Este proceso puede tardar unos minutos.'; +$string['creatingcourse'] = 'Creando curso'; +$string['gotocourse'] = 'Ir al curso'; +$string['editingteachernotexist'] = "No se ha podido matricular al usuario: El rol 'editingteacher' no existe."; +$string['manualnotenable'] = "No se ha podido matricular al usuario: La matriculación manual no está activada."; +$string['nofetchbook'] = 'No se ha podido obtener el libro'; +$string['nocreatecourse'] = 'Nos se ha podido crear el curso'; +$string['nocreatestructure'] = 'No se ha podido crear la estructura del curso'; + +// Actualizar curso +$string['updateingcourse'] = 'Actualizando curso'; +$string['updatedunits'] = 'Unidades añadidas o actualizadas'; +$string['noupdatedunits'] = 'No hay actualizaciones para este libro.'; + +// Permisos +$string['courses_vicensvives:addinstance'] = 'Crear instancia del bloque.'; +$string['courses_vicensvives:myaddinstance'] = 'Crear instancia del bloque en my.'; + +// Event +$string['eventwebservicecalled'] = 'Web service llamado'; diff --git a/html/moodle2/blocks/courses_vicensvives/lang/es/block_courses_vicensvives.php b/html/moodle2/blocks/courses_vicensvives/lang/es/block_courses_vicensvives.php new file mode 100644 index 0000000000..67ba644478 --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/lang/es/block_courses_vicensvives.php @@ -0,0 +1,93 @@ +. + +$string['pluginname'] = 'Cursos Vicens Vives'; + +// Settings. +$string['apiurl'] = 'URL API'; +$string['sharekey'] = 'Clave compartida'; +$string['sharepass'] = 'Secreto compartido'; + +$string['configapiurl'] = 'URL del web service de Vicens Vives'; +$string['configsharekey'] = 'Clave compartida con el web service de Vicens Vives para obtener la información de los libros.'; +$string['configsharepass'] = 'Secreto compartido con el web service de Vicens Vives para obtener la información de los libros.'; + +$string['connectok'] = 'La conexión con Vicens Vives se ha establecido correctamente'; +$string['connectfail'] = 'La conexión con Vicens Vives ha fallado, comprueba las credenciales'; + +$string['maxcourses'] = 'Número de cursos'; +$string['defaultcategory'] = 'Categoría para cursos'; + +$string['configdefaultcategory'] = 'Categoría por defecto para los cursos de libros de Vicens Vives.'; +$string['configmaxcourses'] = 'Número de cursos que se muestra en el bloque.'; + +$string['configmoodlews'] = 'Web service de Moodle'; +$string['configmoodlewsdesc'] = 'Se configurará el web service de Moodle y se sincronizará el token con Vicens Vives.'; + +// Errors +$string['wsnotconfigured'] = 'El web service de Vicens Vives no está configurado.'; +$string['wsauthfailed'] = 'Ha fallado la autentificación con el web service de Vicens Vives.'; +$string['wsunknownerror'] = 'Se ha producido un error inesperado al conectar con el web service de Vicens Vives.'; +$string['wssitemismatch'] = 'Las credenciales (clave y secreto compartido) ya se están utilitzando en otra instalación de Moodle.'; +$string['booknotfetched'] = 'No se ha podido obtener el libro.'; +$string['moodlewsnotinstalled'] = 'El plugin del web service de calificaciones no está instalado.'; +$string['moodlewsnotenabled'] = 'El web service de calificaciones no está activado; se configurará al guardar los cambios.'; + +// Contenido del bloque. +$string['show_more'] = 'Ver más...'; +$string['show_courses'] = 'Ver cursos'; + +// Páginas del bloque. +$string['courses'] = 'Cursos'; +$string['books'] = 'Libros'; +$string['addcourse'] = 'Crear un nuevo curso'; +$string['nohaycursos'] = 'No hay cursos que mostrar'; +$string['searchresult'] = '{$a->found} de {$a->total} libros'; +$string['searchempty'] = '{$a} libros'; +$string['standardformat'] = 'Estándar de Moodle (por temas)'; + +// Tabla libros +$string['fullname'] = 'Nombre'; +$string['subject'] = 'Asignatura'; +$string['level'] = 'Nivel'; +$string['isbn'] = 'ISBN'; +$string['actions'] = 'Acciones'; +$string['nobooksfound'] = 'No se han encontrado libros'; + +// Crear el curs. +$string['create'] = 'Crear'; +$string['format'] = 'Formato'; +$string['cancel'] = 'Cancelar'; +$string['createwarning'] = 'Este proceso puede tardar unos minutos.'; +$string['creatingcourse'] = 'Creando curso'; +$string['gotocourse'] = 'Ir al curso'; +$string['editingteachernotexist'] = "No se ha podido matricular al usuario: El rol 'editingteacher' no existe."; +$string['manualnotenable'] = "No se ha podido matricular al usuario: La matriculación manual no está activada."; +$string['nofetchbook'] = 'No se ha podido obtener el libro'; +$string['nocreatecourse'] = 'No se ha podido crear el curso'; +$string['nocreatestructure'] = 'No se ha podido crear la estructura del curso'; + +// Actualizar curso +$string['updateingcourse'] = 'Actualizando curso'; +$string['updatedunits'] = 'Unidades añadidas o actualizadas'; +$string['noupdatedunits'] = 'No hay actualizaciones para este libro.'; + +// Permisos +$string['courses_vicensvives:addinstance'] = 'Crear instancia del bloque.'; +$string['courses_vicensvives:myaddinstance'] = 'Crear instancia del bloque en my.'; + +// Event +$string['eventwebservicecalled'] = 'Web service llamado'; diff --git a/html/moodle2/blocks/courses_vicensvives/lib/vicensvives.php b/html/moodle2/blocks/courses_vicensvives/lib/vicensvives.php new file mode 100644 index 0000000000..d8d8e2de05 --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/lib/vicensvives.php @@ -0,0 +1,228 @@ +. + +class vicensvives_ws { + + const WS_URL = 'http://api.vicensvivesdigital.com/rest'; + + public static function configured() { + global $CFG; + + return !empty($CFG->vicensvives_sharekey) and !empty($CFG->vicensvives_sharepass); + } + + public function book($bookid) { + if (!$bookid) { + return null; + } + return $this->call('get', 'books/' . $bookid, array('lti_info' => "true")); + } + + public function books() { + $books = $this->call('get', 'books', array('own' => "true")) ?: array(); + + foreach ($books as $key => $book) { + if (empty($book->idBook)) { + unset($books[$key]); + } + $book->isbn = isset($book->isbn) ? $book->isbn : ''; + } + + return $books; + } + + public function levels($lang) { + $levels = $this->call('get', 'levels', array('lang' => $lang)) ?: array(); + foreach ($levels as $key => $level) { + if (empty($level->idLevel)) { + unset($levels[$key]); + } + } + return $levels; + } + + public function licenses($book=null, $activated=null) { + $params = array(); + if ($book !== null) { + $params['book'] = (int) $book; + } + if ($activated !== null) { + $params['activated'] = (bool) $activated; + } + return $this->call('get', 'licenses', $params); + } + + public function send_token($token) { + global $CFG; + $params = array( + 'url' => $CFG->wwwroot, + 'token' => $token, + 'identifier' => get_site_identifier(), + 'serviceEndpoint' => $CFG->wwwroot . '/webservice/rest/server.php', + ); + return (bool) $this->call('post', 'schools/moodle', $params); + } + + public function subjects($lang) { + $subjects = $this->call('get', 'subjects', array('lang' => $lang)) ?: array(); + foreach ($subjects as $key => $subject) { + if (empty($subject->idSubject)) { + unset($subjects[$key]); + } + } + return $subjects; + } + + private function call($method, $path, $params=null) { + global $CFG; + + if (empty($CFG->vicensvives_sharekey) or empty($CFG->vicensvives_sharepass)) { + throw new vicensvives_ws_error('wsnotconfigured'); + } + + if (empty($CFG->vicensvives_accesstoken)) { + $this->refresh_token(); + } + + list($status, $response) = $this->curl($method, $path, $params); + + // El token no existe o ha caducado + if ($status == 401 and isset($response->cod) and $response->cod == 401007) { + $this->refresh_token(); + list($status, $response) = $this->curl($method, $path, $params); + } + + // Credenciales ya usadas en otro sitio (schools/moodle) + if ($status == 401 and isset($response->cod) and $response->cod == 401025) { + throw new vicensvives_ws_error('wssitemismatch'); + } + + // Error desconocido + if ($status != 200) { + throw new vicensvives_ws_error('wsunknownerror'); + } + + return $response; + } + + private function curl($method, $path, $params=null, $auth=true) { + global $CFG; + + $url = !empty($CFG->vicensvives_apiurl) ? $CFG->vicensvives_apiurl : self::WS_URL; + $url .= '/' . $path; + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_VERBOSE, false); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible;)'); + + if ($method == 'post') { + curl_setopt($ch, CURLOPT_POST, true); + if ($params) { + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params, '', '&')); + } + } else if ($method == 'put') { + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); + if ($params) { + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params, '', '&')); + } + } else if ($method == 'delete') { + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); + } else { + if ($params) { + $url .= '?' . http_build_query($params, '', '&'); + } + } + + // Start the header. + $header = array(); + if ($auth) { + $header[] = 'Authorization: Bearer ' . $CFG->vicensvives_accesstoken; + } + + // La llamada schools/moodle requiere los parámetros en formato JSON + if ($path == 'schools/moodle') { + $json = json_encode($params); + $header[] = 'Content-Type: application/json'; + $header[] = 'Content-Length: ' . strlen($json); + curl_setopt($ch, CURLOPT_POSTFIELDS, $json); + } + + // Add header to curl. + curl_setopt($ch, CURLOPT_HTTPHEADER, $header); + + curl_setopt($ch, CURLOPT_URL, $url); + $response = json_decode(curl_exec($ch)); + $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + $this->log($method, $path, $params, $status, $response); + + return array($status, $response); + } + + private function log($method, $path, $params, $status, $response) { + global $PAGE, $SCRIPT; + + $data = array( + 'context' => $PAGE->context, + 'other' => array( + 'script' => $SCRIPT, + 'method' => $method, + 'path' => $path, + 'params' => $params, + 'status' => $status, + 'message' => !empty($response->msg) ? $response->msg : '', + ), + ); + + $event = \block_courses_vicensvives\event\webservice_called::create($data); + $event->trigger(); + } + + private function refresh_token() { + global $CFG; + + unset_config('vicensvives_accesstoken'); + + $params = array( + 'client_id' => $CFG->vicensvives_sharekey, + 'client_secret' => $CFG->vicensvives_sharepass, + 'grant_type' => 'client_credentials', + ); + + list($status, $response) = $this->curl('post', 'oauth', $params, false); + + if ($status == 200 and !empty($response->access_token)) { + set_config('vicensvives_accesstoken', $response->access_token); + } else if ($status == 401 and isset($response->cod) and $response->cod == 401001) { + throw new vicensvives_ws_error('wsauthfailed'); + } else { + throw new vicensvives_ws_error('wsunknownerror'); + } + } +} + +class vicensvives_ws_error extends moodle_exception { + public function __construct($errorcode, $a=null, $debuginfo=null) { + parent::__construct($errorcode, 'block_courses_vicensvives', '', $a, $debuginfo); + } +} + +function vicensvives_reset_token() { + unset_config('vicensvives_accesstoken'); +} diff --git a/html/moodle2/blocks/courses_vicensvives/locallib.php b/html/moodle2/blocks/courses_vicensvives/locallib.php new file mode 100644 index 0000000000..8d9e67cd1c --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/locallib.php @@ -0,0 +1,659 @@ +. + +require_once($CFG->dirroot.'/blocks/courses_vicensvives/lib/vicensvives.php'); +require_once($CFG->dirroot.'/course/lib.php'); +require_once($CFG->libdir.'/gradelib.php'); + +class courses_vicensvives_add_book { + + private $book; + private $progress; + private $current = 0; + private $total; + private $course; + private $updatedunits = array(); + + private function __construct($bookid, $course, progress_bar $progress) { + $this->course = $course; + $this->progress = $progress; + if ($this->progress) { + $this->progress->create(); + } + $ws = new vicensvives_ws(); + $this->book = $ws->book($bookid); + if (!$this->book) { + throw new moodle_exception('booknotfetched', 'block_courses_vicensvives'); + } + $this->total = $this->progress_total(!$course); + $this->update_progress(); + } + + public static function create($bookid, $format, progress_bar $progress=null) { + $addbook = new self($bookid, null, $progress); + $courseid = $addbook->create_course($format); + $addbook->create_course_content(); + return $courseid; + } + + public static function enrol_user($courseid, $userid) { + global $DB; + + if (!$role = $DB->get_record('role', array('shortname' => 'editingteacher'))) { + return get_string('editingteachernotexist', 'block_courses_vicensvives'); + } + + // Matriculación manual. + if (!enrol_is_enabled('manual')) { + return get_string('manualnotenable', 'block_courses_vicensvives'); + } + + $context = context_course::instance($courseid); + if (user_has_role_assignment($userid, $role->id, $context->id)) { + return; + } + + $manual = enrol_get_plugin('manual'); + $instances = enrol_get_instances($courseid, false); + foreach ($instances as $instance) { + if ($instance->enrol === 'manual') { + $manual->enrol_user($instance, $userid, $role->id); + break; + } + } + } + + public static function update($courseid, progress_bar $progress=null) { + global $DB; + + $course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST); + + $bookid = null; + preg_match('/^vv-(\d+)-/', $course->idnumber, $match); + if ($match) { + $bookid = (int) $match[1]; + } + + $addbook = new self($bookid, $course, $progress); + $addbook->create_course_content(); + + return $addbook->updatedunits; + } + + private function create_course($format) { + global $CFG, $DB; + + $courseobj = new stdClass(); + $courseobj->category = $CFG->block_courses_vicensvives_defaultcategory; + + // Asignación de un shortname y idnumber no utilitzados + for ($n = 1; true; $n++) { + $shortname = $this->book->shortname . '_' . $n; + $idnumber = 'vv-' . $this->book->idBook . '-' . $n . '-' . $this->book->subject; + $select = 'shortname = ? OR idnumber = ?'; + $params = array($shortname, $idnumber); + if (!$DB->record_exists_select('course', $select, $params)) { + break; + } + } + $courseobj->shortname = $shortname; + $courseobj->fullname = $this->book->fullname; + $courseobj->idnumber = $idnumber; + $courseobj->summary = $this->book->authors; + // Comprobar q existe el formato de curso personalizado para aplicarlo. + $courseobj->format = 'topics'; + $courseformats = get_plugin_list('format'); + if (isset($courseformats[$format])) { + $courseobj->format = $format; + } + // De esta manera no crearemos el foro de noticias. + $courseobj->newsitems = 0; + + $this->course = create_course($courseobj); + + $gradecategory = grade_category::fetch_course_category($this->course->id); + $gradecategory->aggregation = GRADE_AGGREGATE_MEAN; + $gradecategory->update(); + + $this->update_progress(); + + return $this->course->id; + } + + private function create_course_content() { + $coursegradecat = grade_category::fetch_course_category($this->course->id); + + $sectionnum = 1; + foreach ($this->book->units as $unit) { + $mods = $this->get_section_mods($unit); + + $sectionname = $unit->label . '. ' . $unit->name; + $section = $this->setup_section($sectionnum, $sectionname, $mods); + + $this->set_num_sections($sectionnum); + + $idnumber = $this->book->idBook . '_unit_' . $unit->id; + $gradecat = $this->setup_grade_category($coursegradecat, $idnumber, $section->name, $section->section, true); + + $this->update_progress(); + + $this->create_section_content($section, $unit, $mods, $gradecat); + $sectionnum++; + } + + rebuild_course_cache($this->course->id); + get_fast_modinfo($this->course); + grade_regrade_final_grades($this->course->id); + $this->update_progress(); + } + + // Esta función es diferente para cada versión de Moodle + private function create_mod($mod, $section) { + global $CFG, $DB; + + $fromform = new stdClass(); + $fromform->module = $DB->get_field('modules', 'id', array('name' => $mod['modname'])); + $fromform->modulename = $mod['modname']; + $fromform->visible = true; + $fromform->cmidnumber = $mod['idnumber']; + $fromform->name = $mod['name']; + $fromform->indent = $mod['indent']; + $fromform->intro = '-'; + $fromform->introformat = 0; + $fromform->availablefrom = 0; + $fromform->availableuntil = 0; + $fromform->showavailability = 0; + $fromform->conditiongradegroup = array(); + $fromform->conditionfieldgroup = array(); + $fromform->conditioncompletiongroup = array(); + $fromform->grade = $CFG->gradepointdefault; + + foreach ($mod['params'] as $key => $value) { + $fromform->$key = $value; + } + + courses_vicensvives_add_moduleinfo($fromform, $this->course, $section); + + return $fromform->coursemodule; + } + + private function create_section_content($section, $unit, $mods, $gradecat) { + global $DB; + + $roleid = $DB->get_field('role', 'id', array('shortname' => 'user')); + + $sequence = $section->sequence ? explode(',', $section->sequence) : array(); + $prevmod = null; + + foreach ($mods as $mod) { + $cm = $this->get_cm($mod, $section); + + if ($cm) { + // Actualizamos idnumber si ha cambiado (etiquetas y enlaces creadas con una versión anterior) + if ($cm->idnumber != $mod['idnumber']) { + $DB->set_field('course_modules', 'idnumber', $mod['idnumber'], array('id' => $cm->id)); + } + + $prevmod = $cm->id; + $sortgradeitem = false; + + } else { + $transaction = $DB->start_delegated_transaction(); + + // Nueva actividad + $cmid = $this->create_mod($mod, $section); + + // Añade a la sección + if ($prevmod) { + $index = array_search($prevmod, $sequence); + array_splice($sequence, $index + 1, 0, array($cmid)); + } else { + $sequence[] = $cmid; + } + $section->sequence = implode(',', $sequence); + $DB->set_field('course_sections', 'sequence', $section->sequence, array('id' => $section->id)); + + // Denegación del permiso de edición de la actividad + $context = context_module::instance($cmid); + assign_capability('moodle/course:manageactivities', CAP_PROHIBIT, $roleid, $context); + + $this->updatedunits[$unit->id] = $unit; + + $transaction->allow_commit(); + + $prevmod = $cmid; + $sortgradeitem = true; + } + + if (!empty($mod['gradecat'])) { + $index = array_search($prevmod, $sequence); + $prevcmids = array_slice($sequence, 0, $index); + $this->setup_grade_item($gradecat, $mod, $prevcmids, $sortgradeitem); + } + + $this->update_progress(); + } + } + + private function get_cm($mod, $section) { + global $DB; + + $conditions = array('course' => $this->course->id, 'idnumber' => $mod['idnumber']); + $cm = $DB->get_record('course_modules', $conditions); + if ($cm) { + return $cm; + } + + // Anteriormente las etiquetas no tenían idnumber asignado, buscamos la etiqueta por nombre. + if ($mod['modname'] == 'label') { + $sql = 'SELECT cm.* + FROM {course_modules} cm + JOIN {modules} m ON m.id = cm.module + JOIN {label} l ON l.id = cm.instance + WHERE cm.course = :course + AND cm.section = :section + AND m.name = :modname + AND l.name = :name'; + $params = array( + 'course' => $this->course->id, + 'section' => $section->id, + 'modname' => 'label', + 'name' => $mod['name'], + ); + $records = $DB->get_records_sql($sql, $params, 0, 1); + if ($records) { + return reset($records); + } + } + + // Anteriormente los enlaces tenían el idnumber con un formato diferente + if ($mod['modname'] == 'url') { + if (preg_match('/^.+_(link_.+)$/', $mod['idnumber'], $match)) { + $conditions = array('course' => $this->course->id, 'idnumber' => $match[1]); + $cm = $DB->get_record('course_modules', $conditions); + if ($cm) { + return $cm; + } + } + } + + return null; + } + + private function get_lti_mod($type, $element, $gradecat) { + $mod = array( + 'idnumber' => $this->book->idBook . '_' . $type . '_' . $element->id, + 'name' => $element->lti->activityName, + 'modname' => 'lti', + 'indent' => 1, + 'params' => array( + 'toolurl' => $element->lti->launchURL, + 'instructorchoicesendname' => true, + 'instructorchoicesendemailaddr' => true, + 'launchcontainer' => 4, // window + ), + 'gradecat' => null, + ); + if (isset($element->element->lti->activityDescription)) { + $mod['params']['intro'] = $element->lti->activityDescription; + } + if (isset($element->lti->consumerKey)) { + $mod['params']['resourcekey'] = $element->lti->consumerKey; + } + if (isset($element->lti->sharedSecret)) { + $mod['params']['password'] = $element->lti->sharedSecret; + } + if (isset($element->lti->customParameters)) { + $mod['params']['instructorcustomparameters'] = $element->lti->customParameters; + } + if (isset($element->lti->acceptGrades)) { + $mod['params']['instructorchoiceacceptgrades'] = (int) $element->lti->acceptGrades; + if ($element->lti->acceptGrades != 0) { + $mod['gradecat'] = $gradecat; + } + } + return $mod; + } + + private function get_section_mods($unit) { + $mods = array(); + $sectionnum = 0; + + foreach ($unit->sections as $section) { + $mods[] = array( + 'idnumber' => $this->book->idBook . '_label_' . $section->id, + 'name' => '', // Se generar a partir de la descripción + 'modname' => 'label', + 'indent' => 0, + 'params' => array( + 'intro' => html_writer::tag('h4', s($section->label) . '. ' . s($section->name)), + 'introformat' => FORMAT_HTML, + ), + 'gradecat' => null, + ); + + $gradecat = array( + 'idnumber' => $this->book->idBook . '_label_' . $section->id, + 'name' => s($section->label) . '. ' . s($section->name), + 'position' => $sectionnum, + ); + + if (!empty($section->lti)) { + $mods[] = $this->get_lti_mod('section', $section, $gradecat); + } + + if (!empty($section->questions)) { + foreach ($section->questions as $question) { + $mods[] = $this->get_lti_mod('question', $question, $gradecat); + } + } + if (!empty($section->links)) { + foreach ($section->links as $link) { + $mods[] = array( + 'idnumber' => $this->book->idBook . '_link_' . $link->id, + 'name' => $link->name, + 'modname' => 'url', + 'indent' => 1, + 'params' => array( + 'externalurl' => $link->url, + 'intro' => $link->summary, + 'display' => 0, + ), + 'gradecat' => null, + ); + } + } + if (!empty($section->documents)) { + foreach ($section->documents as $document) { + $mods[] = $this->get_lti_mod('document', $document, $gradecat); + } + } + + $sectionnum++; + } + + return $mods; + } + + private function progress_total($createcourse=true) { + $total = 1; // fetch book content + $total += ($createcourse ? 1 : 0); // create course + foreach ($this->book->units as $unit) { + $total++; // setup section + foreach ($unit->sections as $section) { + $total++; // section label + if (!empty($section->lti)) { + $total++; // section lti + } + $total += count($section->questions); + $total += count($section->links); + $total += count($section->documents); + } + } + $total++; // rebuild course cache + return $total; + } + + // Esta función es diferente para cada versión de Moodle + private function set_num_sections($sectionnum) { + global $DB; + + $conditions = array('courseid' => $this->course->id, 'sectionid' => 0, 'name' => 'numsections'); + $numsections = (int) $DB->get_field('course_format_options', 'value', $conditions); + if ($sectionnum > $numsections) { + $DB->set_field('course_format_options', 'value', $sectionnum, $conditions); + } + } + + private function setup_grade_category(grade_category $parent, $idnumber, $name, $position, $sort=false) { + // Obtien o crea la categoria + $params = array('courseid' => $parent->courseid, 'itemtype' => 'category', 'idnumber' => $idnumber); + $item = grade_item::fetch($params); + if ($item) { + $category = grade_category::fetch(array('id' => $item->iteminstance)); + if ($category->parent != $parent->id or $category->fullname != $name) { + $category->parent = $parent->id; + $category->fullname = $name; + $category->update(); + // Obtiene al grade_item actualizado + $item = $category->get_grade_item(); + $sort = true; + } + } else { + $params = array( + 'courseid' => $parent->courseid, + 'parent' => $parent->id, + 'fullname' => $name, + ); + $category = new grade_category($params, false); + $category->apply_default_settings(); + $category->apply_forced_settings(); + $category->aggregation = GRADE_AGGREGATE_MEAN; + $category->insert(); + $item = $category->get_grade_item(); + $item->idnumber = $idnumber; + $item->update(); + $sort = true; + } + + if ($sort) { + // Obtiene los grade_items de las categorías del mismo nivel y los ordena por sortorder + $categories = grade_category::fetch_all(array('parent' => $parent->id)); + $items = array(); + foreach ($categories as $c) { + $items[] = $c->get_grade_item(); + } + usort($items, function($a, $b) { + return $a->sortorder - $b->sortorder; + }); + + // Ordena la categoría + if (isset($items[$position]) and $items[$position]->id != $item->id) { + $item->move_after_sortorder($items[$position]->sortorder - 1); + } + } + + return $category; + } + + + private function setup_grade_item(grade_category $parent, $mod, $prevcmids, $sort=false) { + global $DB; + + $gradecat = $this->setup_grade_category($parent, $mod['gradecat']['idnumber'], $mod['gradecat']['name'], + $mod['gradecat']['position']); + + $params = array('courseid' => $gradecat->courseid, 'idnumber' => $mod['idnumber']); + $items = grade_item::fetch_all($params); + if (!$items) { + return; + } + + foreach ($items as $item) { + if ($item->categoryid != $gradecat->id) { + $item->categoryid = $gradecat->id; + $item->update(); + $sort = true; + } + } + + if (!$sort) { + return; + } + + usort($items, function($a, $b) { + return $a->sortorder - $b->sortorder; + }); + + list($sqlin, $params) = $DB->get_in_or_equal($prevcmids, SQL_PARAMS_NAMED); + $sql = "SELECT MAX(sortorder) + FROM {course_modules} cm + JOIN {modules} m ON m.id = cm.module + JOIN {grade_items} gi ON gi.iteminstance = cm.instance AND gi.itemmodule = m.name + WHERE cm.id $sqlin + AND gi.itemtype = :itemtype + AND gi.courseid = cm.course"; + $params['itemtype'] = 'mod'; + $sortorder = $DB->get_field_sql($sql, $params); + + if (!$sortorder) { + $sortorder = $gradecat->get_grade_item()->sortorder; + } + + foreach ($items as $item) { + if ($item->sortorder != $sortorder + 1) { + $item->move_after_sortorder($sortorder); + $sortorder = $item->sortorder; + } + } + } + + private function setup_section($sectionnum, $name, array $mods=null) { + global $DB; + + $section = null; + + // Búsqueda de la sección basada en los elementos ya creados + if ($mods) { + $idnumbers = array(); + foreach ($mods as $mod) { + $idnumbers[] = $mod['idnumber']; + } + + list($idnumbersql, $params) = $DB->get_in_or_equal($idnumbers, SQL_PARAMS_NAMED); + $sql = "SELECT s.* + FROM {course_modules} cm + JOIN {course_sections} s ON s.id = cm.section + WHERE cm.course = :courseid AND cm.idnumber $idnumbersql + ORDER BY s.section"; + $params['courseid'] = $this->course->id; + $sections = $DB->get_records_sql($sql, $params, 0, 1); + + if ($sections) { + $section = reset($sections); + } + } + + // No existe ningún elemento, buscamos la primera sección vacía + if (!$section) { + $sections = $DB->get_records('course_sections', array('course' => $this->course->id), 'section'); + $nextsectionnum = 1; + foreach ($sections as $section) { + $nextsectionnum = $section->section + 1; + if ($section->section > 0 and $section->sequence == '') { + break; + } + } + // Si no existe ninguna sección vacía, creamos una nueva + if (!$section or $section->section == 0 or $section->sequence != '') { + $section = new stdClass(); + $section->course = $this->course->id; + $section->section = $nextsectionnum; + $section->summary = ''; + $section->summaryformat = FORMAT_HTML; + $section->sequence = ''; + $section->id = $DB->insert_record('course_sections', $section); + } + } + + // Actualización del nombre de la sección + $section->name = $name; + $DB->set_field('course_sections', 'name', $name, array('id' => $section->id )); + + // Reordenación de las secciones + if ($sectionnum != $section->section) { + move_section_to($this->course, $section->section, $sectionnum); + return $DB->get_record('course_sections', array('id' => $section->id)); + } + + return $section; + } + + private function update_progress($msg='') { + $this->current++; + if ($this->progress) { + $this->progress->update($this->current, $this->total, $msg); + } + } +} + +// Función basa en add_moduleinfo, con estas diferencias: +// - Se pasa el objeto de la sección para evitar una consulta a la base de datos +// - Se ha eliminado código que procesa parámetros no utilitzados +// - Se guarda el campo "indent" +// - No se llama rebuild_course_cache (se llama una sola vez al final) +// - No se llama grade_regrade_final_grades (se llama una sola vez al final) +// - No añade el módulo a la sección (se hace posteriormente) +function courses_vicensvives_add_moduleinfo($moduleinfo, $course, $section) { + global $DB, $CFG; + + require_once("$CFG->dirroot/course/modlib.php"); + + // Attempt to include module library before we make any changes to DB. + include_modulelib($moduleinfo->modulename); + + $moduleinfo->course = $course->id; + $moduleinfo = set_moduleinfo_defaults($moduleinfo); + + $moduleinfo->groupmode = 0; // Do not set groupmode. + + // First add course_module record because we need the context. + $newcm = new stdClass(); + $newcm->course = $course->id; + $newcm->module = $moduleinfo->module; + $newcm->instance = 0; // Not known yet, will be updated later (this is similar to restore code). + $newcm->visible = $moduleinfo->visible; + $newcm->visibleold = $moduleinfo->visible; + if (isset($moduleinfo->cmidnumber)) { + $newcm->idnumber = $moduleinfo->cmidnumber; + } + $newcm->groupmode = $moduleinfo->groupmode; + $newcm->groupingid = $moduleinfo->groupingid; + $newcm->showdescription = 0; + $newcm->indent = $moduleinfo->indent; + + $newcm->added = time(); + $newcm->section = $section->id; + if (!$moduleinfo->coursemodule = $DB->insert_record("course_modules", $newcm)) { + print_error('cannotaddcoursemodule'); + } + + $addinstancefunction = $moduleinfo->modulename."_add_instance"; + try { + $returnfromfunc = $addinstancefunction($moduleinfo, null); + } catch (moodle_exception $e) { + $returnfromfunc = $e; + } + if (!$returnfromfunc or !is_number($returnfromfunc)) { + // Undo everything we can. This is not necessary for databases which + // support transactions, but improves consistency for other databases. + $modcontext = context_module::instance($moduleinfo->coursemodule); + context_helper::delete_instance(CONTEXT_MODULE, $moduleinfo->coursemodule); + $DB->delete_records('course_modules', array('id' => $moduleinfo->coursemodule)); + + if ($e instanceof moodle_exception) { + throw $e; + } else if (!is_number($returnfromfunc)) { + print_error('invalidfunction', '', course_get_url($course, $section->section)); + } else { + print_error('cannotaddnewmodule', '', course_get_url($course, $section->section), $moduleinfo->modulename); + } + } + + $moduleinfo->instance = $returnfromfunc; + + $DB->set_field('course_modules', 'instance', $returnfromfunc, array('id' => $moduleinfo->coursemodule)); +} diff --git a/html/moodle2/blocks/courses_vicensvives/renderer.php b/html/moodle2/blocks/courses_vicensvives/renderer.php new file mode 100644 index 0000000000..4895a62e05 --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/renderer.php @@ -0,0 +1,86 @@ +. + +class block_courses_vicensvives_renderer extends plugin_renderer_base { + + public function course_info_box($course) { + global $CFG; + + $output = ''; + + $context = context_course::instance($course->id); + + // Rewrite file URLs so that they are correct + $course->summary = file_rewrite_pluginfile_urls($course->summary, 'pluginfile.php', $context->id, 'course', 'summary', null); + + $output .= html_writer::start_tag('div', array('class' => 'vicensvives_course clearfix')); + $output .= html_writer::start_tag('div', array('class' => 'vicensvives_course_left')); + $output .= html_writer::start_tag('h3', array('class' => 'vicensvives_course_name')); + + $linkhref = new moodle_url('/course/view.php', array('id' => $course->id)); + + $linktext = format_string($course->fullname); + $linkparams = array('title' => get_string('entercourse')); + if (empty($course->visible)) { + $linkparams['class'] = 'dimmed'; + } + $output .= html_writer::link($linkhref, $linktext, $linkparams); + $output .= html_writer::end_tag('h3'); + + $output .= html_writer::start_tag('ul', array('class' => 'vicensvives_course_teachers')); + foreach ($this->get_course_contacts($course) as $userid => $coursecontact) { + $name = $coursecontact['rolename'].': '. + html_writer::link(new moodle_url('/user/view.php', + array('id' => $userid, 'course' => SITEID)), + $coursecontact['username']); + $output .= html_writer::tag('li', $name); + } + $output .= html_writer::end_tag('ul'); + + $output .= html_writer::end_tag('div'); // End of info div + + $context = context_coursecat::instance($CFG->block_courses_vicensvives_defaultcategory); + if (has_capability('moodle/course:create', $context)) { + $url = new moodle_url('/blocks/courses_vicensvives/courses.php', array('update' => $course->id)); + $label = get_string('update'); + $button = $this->single_button($url, $label); + $output .= html_writer::tag('div', $button, array('class' => 'vicensvives_course_right')); + } + + $output .= html_writer::start_tag('div', array('class' => 'vicensvives_course_right')); + $options = new stdClass(); + $options->noclean = true; + $options->para = false; + $options->overflowdiv = true; + if (!isset($course->summaryformat)) { + $course->summaryformat = FORMAT_MOODLE; + } + $output .= format_text($course->summary, $course->summaryformat, $options, $course->id); + $output .= html_writer::end_tag('div'); // End of summary div + + $output .= html_writer::end_tag('div'); // End of coursebox div + + return $output; + } + + // Esta función es diferente para cada versión de Moodle + private function get_course_contacts($course) { + global $CFG; + require_once($CFG->libdir. '/coursecatlib.php'); + $course = new course_in_list($course); + return $course->get_course_contacts(); + } +} diff --git a/html/moodle2/blocks/courses_vicensvives/settings.php b/html/moodle2/blocks/courses_vicensvives/settings.php new file mode 100644 index 0000000000..1d2a1598de --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/settings.php @@ -0,0 +1,55 @@ +. + +defined('MOODLE_INTERNAL') || die; + +require_once($CFG->dirroot.'/blocks/courses_vicensvives/lib/vicensvives.php'); + +global $DB; +if ($ADMIN->fulltree) { + + require_once($CFG->dirroot.'/blocks/courses_vicensvives/settingslib.php'); + require_once($CFG->dirroot.'/blocks/courses_vicensvives/lib/vicensvives.php'); + + $settings->add(new courses_vicensvives_setting_wscheck()); + + $setting = new admin_setting_configtext('vicensvives_apiurl', + get_string('apiurl', 'block_courses_vicensvives'), get_string('configapiurl', 'block_courses_vicensvives'), + vicensvives_ws::WS_URL, PARAM_URL); + $setting->set_updatedcallback('vicensvives_reset_token'); + $settings->add($setting); + + $setting = new admin_setting_configpasswordunmask('vicensvives_sharekey', + get_string('sharekey', 'block_courses_vicensvives'), get_string('configsharekey', 'block_courses_vicensvives'), ''); + $setting->set_updatedcallback('vicensvives_reset_token'); + $settings->add($setting); + + $setting = new admin_setting_configpasswordunmask('vicensvives_sharepass', + get_string('sharepass', 'block_courses_vicensvives'), get_string('configsharepass', 'block_courses_vicensvives'), ''); + $setting->set_updatedcallback('vicensvives_reset_token'); + $settings->add($setting); + + $selectnum = range(0, 100); + $settings->add( new admin_setting_configselect('block_courses_vicensvives_maxcourses', + get_string('maxcourses', 'block_courses_vicensvives'), + get_string('configmaxcourses', 'block_courses_vicensvives'), 10, $selectnum)); + + $settings->add(new admin_settings_coursecat_select('block_courses_vicensvives_defaultcategory', + get_string('defaultcategory', 'block_courses_vicensvives'), + get_string('configdefaultcategory', 'block_courses_vicensvives'), 1)); + + $settings->add(new courses_vicensvives_setting_moodlews()); +} diff --git a/html/moodle2/blocks/courses_vicensvives/settingslib.php b/html/moodle2/blocks/courses_vicensvives/settingslib.php new file mode 100644 index 0000000000..e98d150f6f --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/settingslib.php @@ -0,0 +1,282 @@ +. + +require_once($CFG->libdir.'/adminlib.php'); + +/** + * Parámetro falso para comprobar la configuración y mostrar errores. + */ +class courses_vicensvives_setting_wscheck extends admin_setting { + + private $error; + + public function __construct() { + parent::__construct('vicensvives_wscheck', '', '', null); + } + + public function get_setting() { + return true; + } + + public function write_setting($data) { + return ''; + } + + public function output_html($data, $query='') { + $errors = array(); + + // Comprueba la conexión con el web service de Vicens Vives + $ws = new vicensvives_ws(); + try { + $ws->books(); + } catch (vicensvives_ws_error $e) { + $errors[] = html_writer::tag('div', $e->getMessage(), array('class' => 'alert alert-error')); + } + + // Comprueba si el plugin local del web service está instalado + if (!courses_vicensvives_setting_moodlews::get_service()) { + $message = get_string('moodlewsnotinstalled', 'block_courses_vicensvives'); + $errors[] = html_writer::tag('div', $message, array('class' => 'alert alert-error')); + } + + $adminroot = admin_get_root(); + + if (!$errors) { + // Comprueba si el web service está configurado + if (!courses_vicensvives_setting_moodlews::is_enabled()) { + $message = get_string('moodlewsnotenabled', 'block_courses_vicensvives'); + $errors[] = html_writer::tag('div', $message, array('class' => 'alert alert-error')); + } + + // Comprueba si ha habido un error en enviar el token + if (array_key_exists('s__vicensvives_moodlews', $adminroot->errors)) { + $message = $adminroot->errors['s__vicensvives_moodlews']->error; + $errors[] = html_writer::tag('div', $message, array('class' => 'alert alert-error')); + } + } + + return implode('', $errors); + } +} + +/** + * Parámetro para configurar el web service de Moodle y enviar el token a Vicens Vives. + */ +class courses_vicensvives_setting_moodlews extends admin_setting { + + const USERNAME = 'wsvicensvives'; + const FIRSTNAME = 'Web Service'; + const LASTNAME = 'Vicens Vives'; + const SERVICE = 'local_wsvicensvives'; + const PROTOCOL = 'rest'; + const ROLESHORTNAME = 'wsvicensvives'; + const ROLENAME = 'Web Service Vicens Vives'; + + private static $capabilities = array( + 'webservice/rest:use', + 'moodle/grade:edit', + ); + + public function __construct() { + parent::__construct('vicensvives_moodlews', '', '', null); + } + + public function get_setting() { + $value = get_config($this->plugin, $this->name); + if ($value === false) { + // Parámetro no configurado (en instalar) + return null; + } + return true; + } + + public function output_html($data, $query='') { + $attributes = array('type' => 'hidden', 'name' => $this->get_full_name(), 'value' => '1'); + return html_writer::empty_tag('input', $attributes); + } + + public function write_setting($data) { + // Marcamos el parámetro como configurado + set_config($this->name, '1', $this->plugin); + + if (vicensvives_ws::configured() and self::get_service()) { + return self::enable(); + } + + return ''; + } + + public static function get_service() { + global $DB; + $conditions = array('component' => self::SERVICE); + return $DB->get_record('external_services', $conditions); + } + + public static function is_enabled() { + global $CFG; + + // Web services activados + if (empty($CFG->enablewebservices)) { + return false; + } + + // Protocolo REST + $protocols = explode(',', get_config('core', 'webserviceprotocols')); + if (!in_array(self::PROTOCOL, $protocols)) { + return false; + } + + // Servicio activado + $service = self::get_service(); + if (!$service or !$service->enabled) { + return false; + } + + // Usuario + $userid = self::get_user_id(); + if (!$userid) { + return false; + } + + // Rol + $roleid = self::get_role_id(); + if (!$roleid) { + return false; + } + $context = context_system::instance(); + $rolecaps = role_context_capabilities($roleid, $context); + foreach (self::$capabilities as $name) { + if (!isset($rolecaps[$name]) or $rolecaps[$name] != CAP_ALLOW) { + return false; + } + } + if (!user_has_role_assignment($userid, $roleid, $context->id)) { + return false; + } + + // Token + if (!self::get_token($service, $userid)) { + return false; + } + + return true; + } + + private static function enable() { + global $CFG, $DB, $USER; + + require_once("$CFG->dirroot/user/lib.php"); + + $context = context_system::instance(); + + // Web services activados + set_config('enablewebservices', true); + + // Protocolo REST + $protocols = explode(',', get_config('core', 'webserviceprotocols')); + if (!in_array(self::PROTOCOL, $protocols)) { + $protocols[] = self::PROTOCOL; + set_config('webserviceprotocols', trim(implode(',', $protocols), ',')); + } + + // Servicio + $service = self::get_service(); + if (!$service->enabled) { + $DB->set_field('external_services', 'enabled', 1, array('id' => $service->id)); + } + + // Usuario + $userid = self::get_user_id(); + if (!$userid) { + $user = new stdClass; + $user->username = self::USERNAME; + $user->firstname = self::FIRSTNAME; + $user->lastname = self::LASTNAME; + $user->mnethostid = $CFG->mnet_localhost_id; + $user->auth = 'webservice'; + $user->confirmed = true; + $userid = user_create_user($user, false); + } + + // Rol + $roleid = self::get_role_id(); + if (!$roleid) { + $roleid = create_role(self::ROLENAME, self::ROLESHORTNAME, ''); + set_role_contextlevels($roleid, array(CONTEXT_SYSTEM)); + } + foreach (self::$capabilities as $name) { + assign_capability($name, CAP_ALLOW, $roleid, $context, true); + } + $context->mark_dirty(); + role_assign($roleid, $userid, $context->id); + + // Token + $token = self::get_token($service, $userid); + + // Crea el token en activar + if (!$token) { + $token = md5(uniqid(rand(), 1)); + $record = new stdClass(); + $record->token = $token; + $record->tokentype = EXTERNAL_TOKEN_PERMANENT; + $record->userid = $userid; + $record->externalserviceid = $service->id; + $record->contextid = $context->id; + $record->creatorid = $USER->id; + $record->timecreated = time(); + $DB->insert_record('external_tokens', $record); + } + + // Emvía el token a Vicens Vives + try { + $ws = new vicensvives_ws(); + $ws->send_token($token); + } catch (vicensvives_ws_error $e) { + return $e->getMessage(); + } + + return ''; + } + + private static function get_role_id() { + global $DB; + $conditions = array('shortname' => self::ROLESHORTNAME); + return $DB->get_field('role', 'id', $conditions); + } + + private static function get_token($service, $userid) { + global $DB; + + $context = context_system::instance(); + $conditions = array( + 'tokentype' => EXTERNAL_TOKEN_PERMANENT, + 'userid' => $userid, + 'externalserviceid' => $service->id, + 'contextid' => $context->id, + ); + return $DB->get_field('external_tokens', 'token', $conditions); + } + + private static function get_user_id() { + global $CFG, $DB; + $conditions = array( + 'username' => self::USERNAME, + 'mnethostid' => $CFG->mnet_localhost_id, + 'deleted' => 0, + ); + return $DB->get_field('user', 'id', $conditions); + } +} diff --git a/html/moodle2/blocks/courses_vicensvives/styles.css b/html/moodle2/blocks/courses_vicensvives/styles.css new file mode 100644 index 0000000000..1a0b4f3354 --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/styles.css @@ -0,0 +1,65 @@ +.block_courses_vicensvives .footer { + margin-top: 5px; +} + +.vicensvives_courses { + padding: 20px; +} + +table.vicensvives_books { + width: 95%; +} + +table.vicensvives_books th { + text-align: left; +} + +table.vicensvives_books .vicensvives_actions { + text-align: center; +} + +ul.vicensives_newunits { + margin-left: 0; + list-style: none; +} + +.vicensvives_course { + margin: 15px 0; + border: 1px solid #DDD; + border-radius: 10px; +} + +.vicensvives_course_name { + margin: 3px 0; + text-align: left; +} + +.vicensvives_course_teachers { + list-style: none; + margin: 5px 0 0 0; + padding: 0; + font-size: 0.9em; +} + +.vicensvives_course_left { + float: left; + width: 40%; + margin: 5px; + font-size: 1em; +} + +.vicensvives_course_right { + float: right; + width: 55%; + margin: 5px; + font-size: 0.9em; +} + +#page-blocks-courses_vicensvives-addbook .progress .bar { + transition: none !important; +} + +.vicensvives_create_warning { + margin-top: 10px; + font-weight: bold; +} diff --git a/html/moodle2/blocks/courses_vicensvives/version.php b/html/moodle2/blocks/courses_vicensvives/version.php new file mode 100644 index 0000000000..3cae7a8593 --- /dev/null +++ b/html/moodle2/blocks/courses_vicensvives/version.php @@ -0,0 +1,21 @@ +. + +defined('MOODLE_INTERNAL') || die(); + +$plugin->version = 2016091500; // The current plugin version (Date: YYYYMMDDXX) +$plugin->requires = 2014111000; // Requires this Moodle version +$plugin->component = 'block_courses_vicensvives'; // Full name of the plugin (used for diagnostics) diff --git a/html/moodle2/blocks/licenses_vicensvives/README.md b/html/moodle2/blocks/licenses_vicensvives/README.md new file mode 100644 index 0000000000..b6d38a0243 --- /dev/null +++ b/html/moodle2/blocks/licenses_vicensvives/README.md @@ -0,0 +1,13 @@ +Bloque de licencias Vicens Vives +================================ + +Bloque que informa de las licencias disponibles y utilizadas. + +Dentro de un curso, el bloque muestra el número de licencias utilizadas y +disponibles para el libro del curso. Se muestran por separado las licencias para +profesores y estudiantes. + +El bloque incluye un enlace a una lista con la información de las licencias de +todos los libros. + +Versiones de Moodle: 2.8, 2.9, 3.0, 3.1 diff --git a/html/moodle2/blocks/licenses_vicensvives/block_licenses_vicensvives.php b/html/moodle2/blocks/licenses_vicensvives/block_licenses_vicensvives.php new file mode 100644 index 0000000000..0487ee77a3 --- /dev/null +++ b/html/moodle2/blocks/licenses_vicensvives/block_licenses_vicensvives.php @@ -0,0 +1,69 @@ +. + + +class block_licenses_vicensvives extends block_base { + + public function init() { + $this->title = get_string('pluginname', 'block_licenses_vicensvives'); + } + + public function instance_allow_multiple() { + return false; + } + + public function get_content() { + global $CFG, $COURSE; + + if ($this->content !== null) { + return $this->content; + } + + $this->content = new stdClass; + $this->content->text = ''; + $this->content->footer = ''; + + require_once("$CFG->dirroot/blocks/licenses_vicensvives/locallib.php"); + + $context = context_system::instance(); + + if (has_capability('moodle/course:update', $context)) { + $this->title = get_string('pluginname', 'block_licenses_vicensvives'); + if (preg_match('/^vv-([0-9]+)-/', $COURSE->idnumber, $match)) { + $idbook = (int) $match[1]; + try { + $licenses = vicensvives_count_licenses($idbook); + } catch (vicensvives_ws_error $e) { + $this->content->text = html_writer::tag('div', $e->getMessage(), array('class' => 'error alert alert-error')); + return $this->context; + } + if (isset($licenses[$idbook])) { + $count = $licenses[$idbook]; + $student = get_string('studentlicenses', 'block_licenses_vicensvives') . ': ' + . $count->studentactivated . ' / ' . $count->studenttotal; + $teacher = get_string('teacherlicenses', 'block_licenses_vicensvives') . ': ' + . $count->teacheractivated . ' / ' . $count->teachertotal; + $this->content->text .= $student . '
' . $teacher . '
'; + } + } + $url = new moodle_url('/blocks/licenses_vicensvives/licenses.php', array('course' => $COURSE->id)); + $text = get_string('showlicenses', 'block_licenses_vicensvives'); + $this->content->text .= html_writer::link($url, $text); + } + + return $this->content; + } +} diff --git a/html/moodle2/blocks/licenses_vicensvives/db/access.php b/html/moodle2/blocks/licenses_vicensvives/db/access.php new file mode 100644 index 0000000000..bacf1b9878 --- /dev/null +++ b/html/moodle2/blocks/licenses_vicensvives/db/access.php @@ -0,0 +1,37 @@ +. + +$capabilities = array( + + 'block/licenses_vicensvives:myaddinstance' => array( + 'captype' => 'write', + 'contextlevel' => CONTEXT_SYSTEM, + 'archetypes' => array(), + 'clonepermissionsfrom' => 'moodle/my:manageblocks' + ), + + 'block/licenses_vicensvives:addinstance' => array( + 'riskbitmask' => RISK_SPAM | RISK_XSS, + 'captype' => 'write', + 'contextlevel' => CONTEXT_BLOCK, + 'archetypes' => array( + 'editingteacher' => CAP_ALLOW, + 'manager' => CAP_ALLOW + ), + + 'clonepermissionsfrom' => 'moodle/site:manageblocks' + ), +); diff --git a/html/moodle2/blocks/licenses_vicensvives/lang/ca/block_licenses_vicensvives.php b/html/moodle2/blocks/licenses_vicensvives/lang/ca/block_licenses_vicensvives.php new file mode 100644 index 0000000000..dd1d32b8b4 --- /dev/null +++ b/html/moodle2/blocks/licenses_vicensvives/lang/ca/block_licenses_vicensvives.php @@ -0,0 +1,32 @@ +. + +$string['pluginname'] = 'Llicències Vicens Vives'; + +// Contenido del bloque. +$string['showlicenses'] = 'Veure llicències'; +$string['studentlicenses'] = 'Llicències estudiant'; +$string['teacherlicenses'] = 'Llicències professor'; +$string['activated'] = 'actives'; +$string['total'] = 'totals'; + +// Páginas del bloque. +$string['licenses'] = 'Llicències'; +$string['nohaylicencias'] = 'No hi ha cap llicència per mostrar'; + +// Permisos +$string['licenses_vicensvives:addinstance'] = 'Crear instància del bloc.'; +$string['licenses_vicensvives:myaddinstance'] = 'Crear instància del bloc en my.'; diff --git a/html/moodle2/blocks/licenses_vicensvives/lang/en/block_licenses_vicensvives.php b/html/moodle2/blocks/licenses_vicensvives/lang/en/block_licenses_vicensvives.php new file mode 100644 index 0000000000..628c76564d --- /dev/null +++ b/html/moodle2/blocks/licenses_vicensvives/lang/en/block_licenses_vicensvives.php @@ -0,0 +1,32 @@ +. + +$string['pluginname'] = 'Licenses Vicens Vives'; + +// Contenido del bloque. +$string['showlicenses'] = 'Show licenses'; +$string['studentlicenses'] = 'Student licenses'; +$string['teacherlicenses'] = 'Teacher licenses'; +$string['activated'] = 'active'; +$string['total'] = 'total'; + +// Páginas del bloque. +$string['licenses'] = 'Licenses'; +$string['nohaylicencias'] = 'There are no licenses to show'; + +// Permisos +$string['licenses_vicensvives:addinstance'] = 'Add block instance.'; +$string['licenses_vicensvives:myaddinstance'] = 'Add block instance into my.'; diff --git a/html/moodle2/blocks/licenses_vicensvives/lang/es/block_licenses_vicensvives.php b/html/moodle2/blocks/licenses_vicensvives/lang/es/block_licenses_vicensvives.php new file mode 100644 index 0000000000..912aaef401 --- /dev/null +++ b/html/moodle2/blocks/licenses_vicensvives/lang/es/block_licenses_vicensvives.php @@ -0,0 +1,32 @@ +. + +$string['pluginname'] = 'Licencias Vicens Vives'; + +// Contenido del bloque. +$string['showlicenses'] = 'Ver licencias'; +$string['studentlicenses'] = 'Licencias estudiante'; +$string['teacherlicenses'] = 'Licencias profesor'; +$string['activated'] = 'activas'; +$string['total'] = 'totales'; + +// Páginas del bloque. +$string['licenses'] = 'Licencias'; +$string['nohaylicencias'] = 'No hay licencias que mostrar'; + +// Permisos +$string['licenses_vicensvives:addinstance'] = 'Crear instancia del bloque.'; +$string['licenses_vicensvives:myaddinstance'] = 'Crear instancia del bloque en my.'; diff --git a/html/moodle2/blocks/licenses_vicensvives/licenses.php b/html/moodle2/blocks/licenses_vicensvives/licenses.php new file mode 100644 index 0000000000..62d4de42ba --- /dev/null +++ b/html/moodle2/blocks/licenses_vicensvives/licenses.php @@ -0,0 +1,163 @@ +. + +require('../../config.php'); + +require_once($CFG->dirroot.'/blocks/licenses_vicensvives/locallib.php'); +require_once($CFG->dirroot.'/lib/formslib.php'); +require_once($CFG->dirroot.'/lib/tablelib.php'); + +function str_contains($haystack, $needle) { + // Normaliza el texto a carñacteres ASCII en mínuscula y sin espacios duplicados + $normalize = function($text) { + $text = core_text::specialtoascii($text); + $text = core_text::strtolower($text); + $text = preg_replace('/\s+/', ' ', trim($text)); + return $text; + }; + $haystack = $normalize($haystack); + $needle = $normalize($needle); + return core_text::strpos($haystack, $needle) !== false; +} + +$courseid = optional_param('course', SITEID, PARAM_INT); + +require_login($courseid, false); + +require_capability('moodle/course:update', context_system::instance()); + +$baseurl = new moodle_url('/blocks/licenses_vicensvives/licenses.php', array('course' => $courseid)); + +$PAGE->set_url($baseurl); + +$PAGE->set_pagelayout('standard'); + +$PAGE->set_title(get_string('licenses', 'block_licenses_vicensvives')); +$PAGE->set_heading(get_string('licenses', 'block_licenses_vicensvives')); + +$PAGE->navbar->add(get_string('blocks')); +$PAGE->navbar->add(get_string('pluginname', 'block_licenses_vicensvives')); +$PAGE->navbar->add(get_string('licenses', 'block_licenses_vicensvives')); + +$ws = new vicensvives_ws(); + +$lang = $CFG->lang == 'ca' ? 'ca' : 'es'; + +$levels = array(0 => ''); +foreach ($ws->levels($lang) as $level) { + $levels[$level->idLevel] = $level->shortname; +} + +$subjects = array(0 => ''); +foreach ($ws->subjects($lang) as $subject) { + $subjects[$subject->idSubject] = $subject->name; +} + +$licenses = vicensvives_count_licenses(); +$allbooks = array(); + +foreach ($ws->books() as $book) { + if (isset($licenses[$book->idBook])) { + $allbooks[] = $book; + } +} + +$search = array( + 'fullname' => optional_param('fullname', '', PARAM_TEXT), + 'idsubject' => optional_param('idsubject', '', PARAM_INT), + 'idlevel' => optional_param('idlevel', '', PARAM_INT), + 'isbn' => optional_param('isbn', '', PARAM_TEXT), +); + +$customdata = array('levels' => $levels, 'subjects' => $subjects, 'search' => $search); +$form = new \block_courses_vicensvives\filter_form(null, $customdata, 'get'); + +if ($form->is_cancelled()) { + redirect($baseurl); +} + +$filteredbooks = array(); + +foreach ($allbooks as $book) { + if ($search['fullname'] and !str_contains($book->fullname, $search['fullname'])) { + continue; + } + if ($search['idsubject'] and $book->idSubject != $search['idsubject']) { + continue; + } + if ($search['idlevel'] and $book->idLevel != $search['idlevel']) { + continue; + } + if ($search['isbn'] and !str_contains($book->isbn, $search['isbn'])) { + continue; + } + $filteredbooks[$book->idBook] = $book; +} + +echo $OUTPUT->header(); +echo $OUTPUT->heading(''); + +$form->display(); + +if ($filteredbooks) { + $a = array('total' => count($allbooks), 'found' => count($filteredbooks)); + $string = get_string('searchresult', 'block_courses_vicensvives', $a); +} else { + $string = get_string('searchempty', 'block_courses_vicensvives', count($allbooks)); +} +echo $OUTPUT->heading($string); + +$table = new flexible_table('vicensvives_books'); +$url = new moodle_url($baseurl, $search); +$table->define_baseurl($url); +$table->define_columns(array('name', 'subject', 'level', 'isbn', 'student', 'teacher')); +$table->set_attribute('class', 'vicensvives_books'); +$table->column_class('actions', 'vicensvives_actions'); +$table->define_headers(array( + get_string('fullname', 'block_courses_vicensvives'), + get_string('subject', 'block_courses_vicensvives'), + get_string('level', 'block_courses_vicensvives'), + get_string('isbn', 'block_courses_vicensvives'), + get_string('studentlicenses', 'block_licenses_vicensvives') + . '
(' . get_string('activated', 'block_licenses_vicensvives') + . ' / ' . get_string('total', 'block_licenses_vicensvives') . ')', + get_string('teacherlicenses', 'block_licenses_vicensvives') + . '
(' . get_string('activated', 'block_licenses_vicensvives') + . ' / ' . get_string('total', 'block_licenses_vicensvives') . ')', +)); +$table->pagesize(50, count($filteredbooks)); +$table->setup(); + +// Ordenación +core_collator::asort_objects_by_property($filteredbooks, 'fullname'); + +// Paginación +$books = array_slice($filteredbooks, $table->get_page_start(), $table->get_page_size()); + +foreach ($books as $book) { + $table->add_data(array( + $book->fullname, + isset($subjects[$book->idSubject]) ? $subjects[$book->idSubject] : '', + isset($levels[$book->idLevel]) ? $levels[$book->idLevel] : '', + $book->isbn, + $licenses[$book->idBook]->studentactivated . ' / ' . $licenses[$book->idBook]->studenttotal, + $licenses[$book->idBook]->teacheractivated . ' / ' . $licenses[$book->idBook]->teachertotal, + )); +} + +$table->finish_output(); + +echo $OUTPUT->footer(); diff --git a/html/moodle2/blocks/licenses_vicensvives/locallib.php b/html/moodle2/blocks/licenses_vicensvives/locallib.php new file mode 100644 index 0000000000..68dc1f89a8 --- /dev/null +++ b/html/moodle2/blocks/licenses_vicensvives/locallib.php @@ -0,0 +1,42 @@ +. + +require_once("$CFG->dirroot/blocks/courses_vicensvives/lib/vicensvives.php"); + +function vicensvives_count_licenses($idbook=null) { + $result = array(); + $ws = new vicensvives_ws(); + + foreach ($ws->licenses($idbook) as $license) { + $idbook = $license->idBook; + if (!isset($result[$idbook])) { + $result[$idbook] = new stdClass; + $result[$idbook]->studenttotal = 0; + $result[$idbook]->studentactivated = 0; + $result[$idbook]->teachertotal = 0; + $result[$idbook]->teacheractivated = 0; + } + if ($license->userType == 'Student') { + $result[$idbook]->studenttotal++; + $result[$idbook]->studentactivated += (int) $license->activated; + } else if ($license->userType == 'Teacher') { + $result[$idbook]->teachertotal++; + $result[$idbook]->teacheractivated += (int) $license->activated; + } + } + + return $result; +} diff --git a/html/moodle2/blocks/licenses_vicensvives/styles.css b/html/moodle2/blocks/licenses_vicensvives/styles.css new file mode 100644 index 0000000000..f92df7c819 --- /dev/null +++ b/html/moodle2/blocks/licenses_vicensvives/styles.css @@ -0,0 +1,7 @@ +.block_licenses_vicensvives .footer { + margin-top: 5px; +} + +.block_licenses_vicensvives .error { + margin-bottom: 0; +} diff --git a/html/moodle2/blocks/licenses_vicensvives/version.php b/html/moodle2/blocks/licenses_vicensvives/version.php new file mode 100644 index 0000000000..96f3a7f0fa --- /dev/null +++ b/html/moodle2/blocks/licenses_vicensvives/version.php @@ -0,0 +1,24 @@ +. + +defined('MOODLE_INTERNAL') || die(); + +$plugin->version = 2016091500; +$plugin->requires = 2014111000; +$plugin->component = 'block_licenses_vicensvives'; +$plugin->dependencies = array( + 'block_courses_vicensvives' => 2016091500, +); diff --git a/html/moodle2/course/format/vv/README.md b/html/moodle2/course/format/vv/README.md new file mode 100644 index 0000000000..8624ee0c6f --- /dev/null +++ b/html/moodle2/course/format/vv/README.md @@ -0,0 +1,73 @@ +Formato de curso para Vicens Vives +================================== + +Formato de cursos basado en el formato por temas. Muestra la estructura del +curso organizada por temas, apartados y actividades. El tema gráfico tiene un +color asignado según la materia del curso. + +Los ficheros de Javscript (format.js) y CSS (styles.css) son iguales en todas +las versiones de Moodle. + +Versiones de Moodle: 2.8, 2.9, 3.0, 3.1 + +Estructura +---------- + +Las actividades se organizan en un árbol con tres niveles: temas, apartados y +actividades. La apartados no tienen equivalencia en Moodle, sólo son una forma +de agrupar actividades usando etiquetas como título y separador. Por ejemplo, un +tema de Moodle tiene las actividades siguientes: + +- Tema 1 + - Foro + - Etiqueta 1 + - Página 1 + - Tarea 1 + - Etiqueta 2 + - Página 2 + - Tarea 2 + - Etiqueta 3 + - Cuestionario 1 + +Se mostrará con esta estructura: + +- Tema 1 + - Foro + - Etiqueta 1 + - Página 1 + - Tarea 1 + - Etiqueta 2 + - Página 2 + - Tarea 2 + - Etiqueta 3 + - Cuestionario 1 + +Los temas y secciones están inicialmente colapsados. + +Numeración apartados +-------------------- + +Los apartados están numerados con un número o letra, que debe indicarse en el +nombre de la etiqueta con el formato "[X] Nombre de la etiqueta". La X es el +número o letra que se mostrará en el recuadro de la numeración. + +Color +----- + +Para determinar el color del tema gráfico se usa el campo idnumber del curso. +Este campo tiene el formato "vv-ID_BOOK-RANDOM-SUBJECT". El color depende del +SUBJECT, que puede ser puede ser "mates", "lengua", "naturales" o "sociales". + +Iconos +------ + +Las actividades de los libros importados tienen iconos personalizados. Se usa el +idnumber para determinar el icono de cada actividad. El idnumber debe contener +*unit*, *section*, *document*, *question* o *link*. Si el idnumber no cumple el +formato se muestra el icono estándar de la actividad. + +Mover actividades +----------------- + +No se muestra el botón para mover una actividad en las actividades importadas. +Las creadas manualmente se pueden mover normalmente. diff --git a/html/moodle2/course/format/vv/format.js b/html/moodle2/course/format/vv/format.js new file mode 100644 index 0000000000..54511c8004 --- /dev/null +++ b/html/moodle2/course/format/vv/format.js @@ -0,0 +1,61 @@ +(function(window) { + + $(document).ready(initBoxes); + + function initBoxes() { + $('.vv-sectionname').unbind('click'); + $('.vv-sectionname').bind('click', handleH3Pressed); + + $('.vv-subsectionname').unbind('click'); + $('.vv-subsectionname').bind('click', handleLiPressed); + + $('.vv-sectionname a, .vv-subsectionname a').click(function(event) { + event.stopPropagation(); + }); + + if (window.location.hash.match(/^#section-(\d+)$/)) { + var $section = $(window.location.hash); + var $sectionname = $section.children('.vv-sectionname'); + if ($section.length && $sectionname.length) { + $section.children('ul.vv-section').slideDown(); + $sectionname.addClass('vv-opened'); + $sectionname.attr('data-state','opened'); + } + } + } + + function handleH3Pressed() { + var state = $(this).attr('data-state'); + if (state === undefined) { + $(this).attr('data-state','closed'); + } + state = $(this).attr('data-state'); + if (state === 'opened') { + $(this).parent().find('> ul.vv-section').slideUp(); + $(this).removeClass('vv-opened'); + $(this).attr('data-state','closed'); + } else { + $(this).parent().find('> ul.vv-section').slideDown(); + $(this).addClass('vv-opened'); + $(this).attr('data-state','opened'); + } + } + + function handleLiPressed() { + var state = $(this).attr('data-state'); + if (state === undefined) { + $(this).attr('data-state','closed'); + } + state = $(this).attr('data-state'); + if (state === 'opened') { + $(this).parent().find('> ul.vv-subsection').slideUp(); + $(this).removeClass('vv-opened'); + $(this).attr('data-state','closed'); + } else { + $(this).parent().find('> ul.vv-subsection').slideDown(); + $(this).addClass('vv-opened'); + $(this).attr('data-state','opened'); + } + } + +})(this); diff --git a/html/moodle2/course/format/vv/format.php b/html/moodle2/course/format/vv/format.php new file mode 100644 index 0000000000..fbf0031fb4 --- /dev/null +++ b/html/moodle2/course/format/vv/format.php @@ -0,0 +1,37 @@ +. + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->libdir.'/filelib.php'); +require_once($CFG->libdir.'/completionlib.php'); + +$context = context_course::instance($course->id); + +if (($marker >= 0) && has_capability('moodle/course:setcurrentsection', $context) && confirm_sesskey()) { + $course->marker = $marker; + course_set_marker($course->id, $marker); +} + +// make sure all sections are created +$course = course_get_format($course)->get_course(); +course_create_sections_if_missing($course, range(0, $course->numsections)); + +$renderer = $PAGE->get_renderer('format_vv'); +$renderer->print_multiple_section_page($course, null, null, null, null); + +// Include course format js module +$PAGE->requires->js('/course/format/vv/format.js'); diff --git a/html/moodle2/course/format/vv/lang/ca/format_vv.php b/html/moodle2/course/format/vv/lang/ca/format_vv.php new file mode 100644 index 0000000000..1413c1a8bc --- /dev/null +++ b/html/moodle2/course/format/vv/lang/ca/format_vv.php @@ -0,0 +1,24 @@ +. + +$string['pluginname'] = 'Format Vicens Vives'; +$string['currentsection'] = 'Unitat actual'; +$string['hidefromothers'] = 'Ocultar unitat'; +$string['page-course-view-topics'] = 'Qualsevol pàgina principal de curs en format per unitats'; +$string['page-course-view-topics-x'] = 'Qualsevol pàgina de curs en format per unitats'; +$string['section0name'] = 'General'; +$string['sectionname'] = 'Unitat'; +$string['showfromothers'] = 'Mostrar unitat'; diff --git a/html/moodle2/course/format/vv/lang/en/format_vv.php b/html/moodle2/course/format/vv/lang/en/format_vv.php new file mode 100644 index 0000000000..44f05dccfa --- /dev/null +++ b/html/moodle2/course/format/vv/lang/en/format_vv.php @@ -0,0 +1,24 @@ +. + +$string['pluginname'] = 'Vicens Vives format'; +$string['currentsection'] = 'This unit'; +$string['sectionname'] = 'Unit'; +$string['section0name'] = 'General'; +$string['page-course-view-topics'] = 'Any course main page in units format'; +$string['page-course-view-topics-x'] = 'Any course page in units format'; +$string['hidefromothers'] = 'Hide units'; +$string['showfromothers'] = 'Show units'; diff --git a/html/moodle2/course/format/vv/lang/es/format_vv.php b/html/moodle2/course/format/vv/lang/es/format_vv.php new file mode 100644 index 0000000000..fd533d8430 --- /dev/null +++ b/html/moodle2/course/format/vv/lang/es/format_vv.php @@ -0,0 +1,24 @@ +. + +$string['pluginname'] = 'Formato Vicens Vives'; +$string['currentsection'] = 'Tema actual'; +$string['hidefromothers'] = 'Ocultar tema'; +$string['page-course-view-topics'] = 'Cualquier página principal de curso en formato por temas'; +$string['page-course-view-topics-x'] = 'Cualquier página de curso en formato por temas'; +$string['section0name'] = 'General'; +$string['sectionname'] = 'Tema'; +$string['showfromothers'] = 'Mostrar tema'; diff --git a/html/moodle2/course/format/vv/lib.php b/html/moodle2/course/format/vv/lib.php new file mode 100644 index 0000000000..6a8fb96191 --- /dev/null +++ b/html/moodle2/course/format/vv/lib.php @@ -0,0 +1,82 @@ +. + +require_once("{$CFG->dirroot}/course/format/topics/lib.php"); + +class format_vv extends format_topics { + + /** + * Returns the information about the ajax support in the given source format + * + * The returned object's property (boolean)capable indicates that + * the course format supports Moodle course ajax features. + * The property (array)testedbrowsers can be used as a parameter for {@link ajaxenabled()}. + * + * @return stdClass + */ + public function supports_ajax() { + $ajaxsupport = new stdClass(); + $ajaxsupport->capable = false; + $ajaxsupport->testedbrowsers = array(); + return $ajaxsupport; + } + + /** + * Definitions of the additional options that this course format uses for course + * + * Topics format uses the following options: + * - coursedisplay + * - numsections + * - hiddensections + * + * @param bool $foreditform + * @return array of options + */ + public function course_format_options($foreditform = false) { + $options = parent::course_format_options($foreditform); + unset($options['coursedisplay']); // This format is only single-page + unset($options['hiddensections']); // Hidden sections are always invisible + return $options; + } + + /** + * Allows course format to execute code on moodle_page::set_course() + * + * @param moodle_page $page instance of page calling set_course + */ + public function page_set_course(moodle_page $page) { + global $PAGE; + + if (!$PAGE->requires->is_head_done()) { + $PAGE->requires->jquery(); + } + } + + /** + * Returns the format options stored for this course or course section + * + * @param null|int|stdClass|section_info $section if null the course format options will be returned + * otherwise options for specified section will be returned. This can be either + * section object or relative section number (field course_sections.section) + * @return array + */ + public function get_format_options($section = null) { + $options = parent::get_format_options($section); + $options['coursedisplay'] = COURSE_DISPLAY_SINGLEPAGE; // This format is only single-page + $options['hiddensections'] = 1; // Hidden sections are always invisible + return $options; + } +} diff --git a/html/moodle2/course/format/vv/pix/arrow-hor.png b/html/moodle2/course/format/vv/pix/arrow-hor.png new file mode 100644 index 0000000000..79946b0117 Binary files /dev/null and b/html/moodle2/course/format/vv/pix/arrow-hor.png differ diff --git a/html/moodle2/course/format/vv/pix/arrow-ver.png b/html/moodle2/course/format/vv/pix/arrow-ver.png new file mode 100644 index 0000000000..708ab5b46a Binary files /dev/null and b/html/moodle2/course/format/vv/pix/arrow-ver.png differ diff --git a/html/moodle2/course/format/vv/pix/edubook.png b/html/moodle2/course/format/vv/pix/edubook.png new file mode 100644 index 0000000000..09054686f2 Binary files /dev/null and b/html/moodle2/course/format/vv/pix/edubook.png differ diff --git a/html/moodle2/course/format/vv/pix/edubook.svg b/html/moodle2/course/format/vv/pix/edubook.svg new file mode 100644 index 0000000000..1bc816dc48 --- /dev/null +++ b/html/moodle2/course/format/vv/pix/edubook.svg @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/html/moodle2/course/format/vv/pix/icon-activitat-B.png b/html/moodle2/course/format/vv/pix/icon-activitat-B.png new file mode 100644 index 0000000000..1606993a78 Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-activitat-B.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-activitat-G.png b/html/moodle2/course/format/vv/pix/icon-activitat-G.png new file mode 100644 index 0000000000..5f5111dfe2 Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-activitat-G.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-activitat-O.png b/html/moodle2/course/format/vv/pix/icon-activitat-O.png new file mode 100644 index 0000000000..fa6da2915e Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-activitat-O.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-activitat-R.png b/html/moodle2/course/format/vv/pix/icon-activitat-R.png new file mode 100644 index 0000000000..7d591c87b5 Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-activitat-R.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-apartat-B.png b/html/moodle2/course/format/vv/pix/icon-apartat-B.png new file mode 100644 index 0000000000..590deaaf9d Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-apartat-B.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-apartat-G.png b/html/moodle2/course/format/vv/pix/icon-apartat-G.png new file mode 100644 index 0000000000..bd4a385267 Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-apartat-G.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-apartat-O.png b/html/moodle2/course/format/vv/pix/icon-apartat-O.png new file mode 100644 index 0000000000..d6e176d104 Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-apartat-O.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-apartat-R.png b/html/moodle2/course/format/vv/pix/icon-apartat-R.png new file mode 100644 index 0000000000..42199769e5 Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-apartat-R.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-document-B.png b/html/moodle2/course/format/vv/pix/icon-document-B.png new file mode 100644 index 0000000000..7c2a179db9 Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-document-B.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-document-G.png b/html/moodle2/course/format/vv/pix/icon-document-G.png new file mode 100644 index 0000000000..b5be158bf3 Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-document-G.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-document-O.png b/html/moodle2/course/format/vv/pix/icon-document-O.png new file mode 100644 index 0000000000..2cf59e3e8f Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-document-O.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-document-R.png b/html/moodle2/course/format/vv/pix/icon-document-R.png new file mode 100644 index 0000000000..50302eb78c Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-document-R.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-link-B.png b/html/moodle2/course/format/vv/pix/icon-link-B.png new file mode 100644 index 0000000000..9070a8fbc9 Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-link-B.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-link-G.png b/html/moodle2/course/format/vv/pix/icon-link-G.png new file mode 100644 index 0000000000..6b5668956b Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-link-G.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-link-O.png b/html/moodle2/course/format/vv/pix/icon-link-O.png new file mode 100644 index 0000000000..0e91dbac32 Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-link-O.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-link-R.png b/html/moodle2/course/format/vv/pix/icon-link-R.png new file mode 100644 index 0000000000..6c2675255a Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-link-R.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-resum-B.png b/html/moodle2/course/format/vv/pix/icon-resum-B.png new file mode 100644 index 0000000000..2a85e026e1 Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-resum-B.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-resum-G.png b/html/moodle2/course/format/vv/pix/icon-resum-G.png new file mode 100644 index 0000000000..56714bc1e9 Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-resum-G.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-resum-O.png b/html/moodle2/course/format/vv/pix/icon-resum-O.png new file mode 100644 index 0000000000..fed39af9dc Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-resum-O.png differ diff --git a/html/moodle2/course/format/vv/pix/icon-resum-R.png b/html/moodle2/course/format/vv/pix/icon-resum-R.png new file mode 100644 index 0000000000..993f4b415d Binary files /dev/null and b/html/moodle2/course/format/vv/pix/icon-resum-R.png differ diff --git a/html/moodle2/course/format/vv/renderer.php b/html/moodle2/course/format/vv/renderer.php new file mode 100644 index 0000000000..9fe6ee1bd4 --- /dev/null +++ b/html/moodle2/course/format/vv/renderer.php @@ -0,0 +1,758 @@ +. + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->dirroot.'/course/format/topics/renderer.php'); +require_once($CFG->dirroot.'/course/renderer.php'); + +class format_vv_renderer extends format_topics_renderer { + + /** + * Constructor method, calls the parent constructor + * + * @param moodle_page $page + * @param string $target one of rendering target constants + */ + public function __construct(moodle_page $page, $target) { + parent::__construct($page, $target); + $this->courserenderer = $this->page->get_renderer('format_vv', 'course'); + } + + /** + * Generate the section title, wraps it in a link to the section page if page is to be displayed on a separate page + * + * @param stdClass $section The course_section entry from DB + * @param stdClass $course The course entry from DB + * @return string HTML to output. + */ + public function section_title($section, $course) { + $title = get_section_name($course, $section); + $url = course_get_url($course, $section->section, array('navigation' => true)); + if ($url) { + $title = html_writer::link($url, $title); + } + return $title; + } + + /** + * Generate the section title to be displayed on the section page, without a link + * + * @param stdClass $section The course_section entry from DB + * @param stdClass $course The course entry from DB + * @return string HTML to output. + */ + public function section_title_without_link($section, $course) { + return get_section_name($course, $section); + } + + /** + * Output the html for a multiple section page + * + * @param stdClass $course The course entry from DB + * @param array $sections (argument not used) + * @param array $mods (argument not used) + * @param array $modnames (argument not used) + * @param array $modnamesused (argument not used) + */ + public function print_multiple_section_page($course, $sections, $mods, $modnames, $modnamesused) { + global $PAGE; + + $modinfo = get_fast_modinfo($course); + $course = course_get_format($course)->get_course(); + + $context = context_course::instance($course->id); + + echo html_writer::start_tag('div', array('class' => 'vv-' . $this->get_book_type($course))); + $coursefullname = format_string($course->fullname, true, array('context' => $context)); + echo html_writer::tag('div', $coursefullname, array('class' => 'vv-title')); + + // Copy activity clipboard.. + echo $this->course_activity_clipboard($course, 0); + + // Now the list of sections.. + echo $this->start_section_list(); + + foreach ($modinfo->get_section_info_all() as $section => $thissection) { + if ($section == 0) { + // 0-section is displayed a little different then the others + if ($thissection->summary or !empty($modinfo->sections[0]) or $PAGE->user_is_editing()) { + echo $this->section_header($thissection, $course, false, 0); + echo $this->courserenderer->course_section_cm_list($course, $thissection, 0); + echo $this->courserenderer->course_section_add_cm_control($course, 0, 0); + echo $this->section_footer(); + } + continue; + } + if ($section > $course->numsections) { + // activities inside this section are 'orphaned', this section will be printed as 'stealth' below + continue; + } + // Show the section if the user is permitted to access it, OR if it's not available + // but there is some available info text which explains the reason & should display. + $showsection = $thissection->uservisible || + ($thissection->visible && !$thissection->available && + !empty($thissection->availableinfo)); + if (!$showsection) { + // If the hiddensections option is set to 'show hidden sections in collapsed + // form', then display the hidden section message - UNLESS the section is + // hidden by the availability system, which is set to hide the reason. + if (!$course->hiddensections && $thissection->available) { + echo $this->section_hidden($section, $course->id); + } + + continue; + } + + echo $this->section_header($thissection, $course, false, 0); + if ($thissection->uservisible) { + echo $this->courserenderer->course_section_cm_list($course, $thissection, 0); + echo $this->courserenderer->course_section_add_cm_control($course, $section, 0); + } + echo $this->section_footer(); + } + + if ($PAGE->user_is_editing() and has_capability('moodle/course:update', $context)) { + // Print stealth sections if present. + foreach ($modinfo->get_section_info_all() as $section => $thissection) { + if ($section <= $course->numsections or empty($modinfo->sections[$section])) { + // this is not stealth section or it is empty + continue; + } + echo $this->stealth_section_header($section); + echo $this->courserenderer->course_section_cm_list($course, $thissection, 0); + echo $this->stealth_section_footer(); + } + + echo $this->end_section_list(); + + echo html_writer::start_tag('div', array('id' => 'changenumsections', 'class' => 'mdl-right')); + + // Increase number of sections. + $straddsection = get_string('increasesections', 'moodle'); + $url = new moodle_url('/course/changenumsections.php', + array('courseid' => $course->id, + 'increase' => true, + 'sesskey' => sesskey())); + $icon = $this->output->pix_icon('t/switch_plus', $straddsection); + echo html_writer::link($url, $icon.get_accesshide($straddsection), array('class' => 'increase-sections')); + + if ($course->numsections > 0) { + // Reduce number of sections sections. + $strremovesection = get_string('reducesections', 'moodle'); + $url = new moodle_url('/course/changenumsections.php', + array('courseid' => $course->id, + 'increase' => false, + 'sesskey' => sesskey())); + $icon = $this->output->pix_icon('t/switch_minus', $strremovesection); + echo html_writer::link($url, $icon.get_accesshide($strremovesection), array('class' => 'reduce-sections')); + } + + echo html_writer::end_tag('div'); + } else { + echo $this->end_section_list(); + } + + echo html_writer::end_tag('div'); + } + + /** + * Generate the starting container html for a list of sections + * @return string HTML to output. + */ + protected function start_section_list() { + return html_writer::start_tag('ul', array('class' => 'vv-topics')); + } + + /** + * Generate the display of the header part of a section before + * course modules are included + * + * @param stdClass $section The course_section entry from DB + * @param stdClass $course The course entry from DB + * @param bool $onsectionpage true if being printed on a single-section page + * @param int $sectionreturn The section to return to after an action + * @return string HTML to output. + */ + protected function section_header($section, $course, $onsectionpage, $sectionreturn=null) { + global $PAGE; + + $o = ''; + $currenttext = ''; + $sectionstyle = ''; + + if ($section->section != 0) { + // Only in the non-general sections. + if (!$section->visible) { + $sectionstyle = ' hidden'; + } + } + + $o .= html_writer::start_tag('li', array('id' => 'section-'.$section->section, + 'class' => 'vv-section clearfix'.$sectionstyle, 'role' => 'region', + 'aria-label' => get_section_name($course, $section))); + + // When not on a section page, we display the section titles except the general section if null + $hasnamenotsecpg = (!$onsectionpage && ($section->section != 0 || !is_null($section->name))); + + // When on a section page, we only display the general section title, if title is not the default one + $hasnamesecpg = ($onsectionpage && ($section->section == 0 && !is_null($section->name))); + + $classes = ' accesshide'; + if ($hasnamenotsecpg || $hasnamesecpg) { + $classes = ''; + } + + $icons = html_writer::tag('span', '', array('class' => 'vv-icon-section')); + $icons .= html_writer::tag('span', '', array('class' => 'vv-icon-arrow')); + $edit = ''; + + $context = context_course::instance($course->id); + if ($PAGE->user_is_editing() && has_capability('moodle/course:update', $context)) { + $url = new moodle_url('/course/editsection.php', array('id' => $section->id, 'sr' => $sectionreturn)); + $edit .= html_writer::start_tag('span', array('class' => 'commands')); + if ($section->section != 0) { + $controls = $this->section_edit_controls($course, $section, $onsectionpage); + if (!empty($controls)) { + $edit .= implode('', $controls); + } + } + $edit .= html_writer::end_tag('span'); + } + + $title = $this->section_title($section, $course); + $o .= $this->output->heading($icons . $title . ' ' . $edit, 3, 'vv-sectionname' . $classes); + + $o .= $this->section_availability_message($section, + has_capability('moodle/course:viewhiddensections', $context)); + + return $o; + } + + + /** + * Generate the display of the footer part of a section + * + * @return string HTML to output. + */ + protected function section_footer() { + return html_writer::end_tag('li'); + } + + /** + * Generate the header html of a stealth section + * + * @param int $sectionno The section number in the coruse which is being dsiplayed + * @return string HTML to output. + */ + protected function stealth_section_header($sectionno) { + $o = ''; + $o .= html_writer::start_tag('li', array('id' => 'section-'.$sectionno, 'class' => 'section main clearfix orphaned hidden')); + $o .= $this->output->heading(get_string('orphanedactivitiesinsectionno', '', $sectionno), 3, 'sectionname'); + return $o; + } + + /** + * Generate footer html of a stealth section + * + * @return string HTML to output. + */ + protected function stealth_section_footer() { + return html_writer::end_tag('li'); + } + + /** + * Generate the edit controls of a section + * + * @param stdClass $course The course entry from DB + * @param stdClass $section The course_section entry from DB + * @param bool $onsectionpage true if being printed on a section page + * @return array of links with edit controls + */ + protected function section_edit_controls($course, $section, $onsectionpage = false) { + global $PAGE; + + if (!$PAGE->user_is_editing()) { + return array(); + } + + $coursecontext = context_course::instance($course->id); + + if ($onsectionpage) { + $baseurl = course_get_url($course, $section->section); + } else { + $baseurl = course_get_url($course); + } + $baseurl->param('sesskey', sesskey()); + + $controls = array(); + + $url = clone($baseurl); + if (has_capability('moodle/course:sectionvisibility', $coursecontext)) { + if ($section->visible) { // Show the hide/show eye. + $strhidefromothers = get_string('hidefromothers', 'format_'.$course->format); + $url->param('hide', $section->section); + $controls[] = html_writer::link($url, + html_writer::empty_tag('img', array('src' => $this->output->pix_url('i/hide'), + 'class' => 'icon hide', 'alt' => $strhidefromothers)), + array('title' => $strhidefromothers, 'class' => 'editing_showhide')); + } else { + $strshowfromothers = get_string('showfromothers', 'format_'.$course->format); + $url->param('show', $section->section); + $controls[] = html_writer::link($url, + html_writer::empty_tag('img', array('src' => $this->output->pix_url('i/show'), + 'class' => 'icon hide', 'alt' => $strshowfromothers)), + array('title' => $strshowfromothers, 'class' => 'editing_showhide')); + } + } + + return $controls; + } + + private function get_book_type($course) { + $subjects = array("mates", "lengua", "naturales", "sociales"); + $subject = substr($course->idnumber, strrpos($course->idnumber, '-') + 1); + if (!in_array($subject, $subjects)) { + return $subjects[0]; + } + return $subject; + } +} + +class format_vv_course_renderer extends core_course_renderer { + + /** + * Renders HTML to display a list of course modules in a course section + * Also displays "move here" controls in Javascript-disabled mode + * + * This function calls {@link core_course_renderer::course_section_cm()} + * + * @param stdClass $course course object + * @param int|stdClass|section_info $section relative section number or section object + * @param int $sectionreturn section number to return to + * @param int $displayoptions + * @return void + */ + public function course_section_cm_list($course, $section, $sectionreturn = null, $displayoptions = array()) { + global $USER; + + $output = ''; + $modinfo = get_fast_modinfo($course); + if (is_object($section)) { + $section = $modinfo->get_section_info($section->section); + } else { + $section = $modinfo->get_section_info($section); + } + $completioninfo = new completion_info($course); + + // check if we are currently in the process of moving a module with JavaScript disabled + $ismoving = $this->page->user_is_editing() && ismoving($course->id); + if ($ismoving) { + $movingpix = new pix_icon('movehere', get_string('movehere'), 'moodle', array('class' => 'movetarget')); + $strmovefull = strip_tags(get_string("movefull", "", "'$USER->activitycopyname'")); + } + + // Get the list of modules visible to user (excluding the module being moved if there is one) + $moduleshtml = array(); + if (!empty($modinfo->sections[$section->section])) { + foreach ($modinfo->sections[$section->section] as $modnumber) { + $mod = $modinfo->cms[$modnumber]; + + if ($ismoving and $mod->id == $USER->activitycopy) { + // do not display moving mod + continue; + } + + if ($modulehtml = $this->course_section_cm_list_item($course, + $completioninfo, $mod, $sectionreturn, $displayoptions)) { + $moduleshtml[$modnumber] = $modulehtml; + } + } + } + + $sectionoutput = ''; + if (!empty($moduleshtml) || $ismoving) { + $insubsection = false; + + foreach ($moduleshtml as $modnumber => $modulehtml) { + if ($ismoving) { + $movingurl = new moodle_url('/course/mod.php', array('moveto' => $modnumber, 'sesskey' => sesskey())); + $sectionoutput .= html_writer::tag('li', + html_writer::link($movingurl, $this->output->render($movingpix), array('title' => $strmovefull)), + array('class' => 'movehere vv-activity')); + } + + $mod = $modinfo->cms[$modnumber]; + if ($mod->modname == 'label') { + if ($insubsection) { + $sectionoutput .= html_writer::end_tag('ul'); + $sectionoutput .= html_writer::end_tag('li'); + } + $sectionoutput .= html_writer::start_tag('li', array('class' => 'vv-subsection')); + $sectionoutput .= $modulehtml; + $sectionoutput .= html_writer::start_tag('ul', array('class' => 'vv-subsection vv-hidden')); + $insubsection = true; + } else { + $sectionoutput .= $modulehtml; + } + } + + if ($ismoving) { + $movingurl = new moodle_url('/course/mod.php', array('movetosection' => $section->id, 'sesskey' => sesskey())); + $sectionoutput .= html_writer::tag('li', + html_writer::link($movingurl, $this->output->render($movingpix), array('title' => $strmovefull)), + array('class' => 'movehere vv-activity')); + } + + if ($insubsection) { + $sectionoutput .= html_writer::end_tag('ul'); + $sectionoutput .= html_writer::end_tag('li'); + } + } + + // Always output the section module list. + $class = 'vv-section img-text'; + if ($section->section > 0) { + $class .= ' vv-hidden'; + } + $output .= html_writer::tag('ul', $sectionoutput, array('class' => $class)); + + return $output; + } + + /** + * Renders HTML to display one course module for display within a section. + * + * This function calls: + * {@link core_course_renderer::course_section_cm()} + * + * @param stdClass $course + * @param completion_info $completioninfo + * @param cm_info $mod + * @param int|null $sectionreturn + * @param array $displayoptions + * @return String + */ + public function course_section_cm_list_item($course, &$completioninfo, cm_info $mod, $sectionreturn, $displayoptions = array()) { + $output = ''; + + if ($mod->modname == 'label') { + if (!$mod->uservisible) { + return; + } + + $labelname = $mod->name; + $labelnum = ' '; + if (preg_match('/^(\w{1,5})\.(.*)$/', trim($mod->name), $match)) { + $labelnum = $match[1]; + $labelname = trim($match[2]); + } + // Formato de versiones anteriores + if (preg_match('/^\[(\w+)\]( .*)$/', trim($mod->name), $match)) { + $labelnum = $match[1]; + $labelname = $match[2]; + } + + $icons = html_writer::tag('span', '', array('class' => 'vv-icon-arrow')); + $number = html_writer::tag('span', $labelnum, array('class' => 'vv-subsectionnum')); + $name = format_string($labelname); + + $modicons = ''; + if ($this->page->user_is_editing()) { + $modicons .= $this->get_cm_edit_actions($mod, $mod->indent, $sectionreturn); + $modicons .= $mod->afterediticons; + } + if (!empty($modicons)) { + $icons .= html_writer::span($modicons, 'actions'); + } + + return html_writer::tag('h4', $icons . $number . $name, array('class' => 'vv-subsectionname')); + } + + if ($modulehtml = $this->course_section_cm($course, $completioninfo, $mod, $sectionreturn, $displayoptions)) { + $modclasses = 'vv-activity ' . $mod->modname . ' modtype_' . $mod->modname . ' ' . $mod->extraclasses; + $output .= html_writer::tag('li', $modulehtml, array('class' => $modclasses, 'id' => 'module-' . $mod->id)); + } + return $output; + } + + /** + * Renders HTML to display one course module in a course section + * + * This includes link, content, availability, completion info and additional information + * that module type wants to display (i.e. number of unread forum posts) + * + * This function calls: + * {@link core_course_renderer::course_section_cm_name()} + * {@link cm_info::get_after_link()} + * {@link core_course_renderer::course_section_cm_text()} + * {@link core_course_renderer::course_section_cm_availability()} + * {@link core_course_renderer::course_section_cm_completion()} + * {@link course_get_cm_edit_actions()} + * {@link core_course_renderer::course_section_cm_edit_actions()} + * + * @param stdClass $course + * @param completion_info $completioninfo + * @param cm_info $mod + * @param int|null $sectionreturn + * @param array $displayoptions + * @return string + */ + public function course_section_cm($course, &$completioninfo, cm_info $mod, $sectionreturn, $displayoptions = array()) { + $output = ''; + // We return empty string (because course module will not be displayed at all) + // if: + // 1) The activity is not visible to users + // and + // 2) The 'availableinfo' is empty, i.e. the activity was + // hidden in a way that leaves no info, such as using the + // eye icon. + if (!$mod->uservisible && empty($mod->availableinfo)) { + return $output; + } + + $output .= html_writer::start_tag('div'); + + // Start a wrapper for the actual content to keep the indentation consistent + $output .= html_writer::start_tag('div'); + + $modicons = ''; + if ($this->page->user_is_editing()) { + $modicons .= $this->get_cm_edit_actions($mod, $mod->indent, $sectionreturn); + $modicons .= $mod->afterediticons; + } + + $modicons .= $this->course_section_cm_completion($course, $completioninfo, $mod, $displayoptions); + + if (!empty($modicons)) { + $output .= html_writer::span($modicons, 'actions'); + } + + // Display the link to the module (or do nothing if module has no url) + $cmname = $this->course_section_cm_name($mod, $displayoptions); + + if (!empty($cmname)) { + // Start the div for the activity title, excluding the edit icons. + $output .= html_writer::start_tag('div', array('class' => 'activityinstance')); + $output .= $cmname; + + // Module can put text after the link (e.g. forum unread) + $output .= $mod->afterlink; + + // Closing the tag which contains everything but edit icons. Content part of the module should not be part of this. + $output .= html_writer::end_tag('div'); // .activityinstance + } + + $output .= $this->course_section_cm_text($mod, $displayoptions); + + // show availability info (if module is not available) + $output .= $this->course_section_cm_availability($mod, $displayoptions); + + $output .= html_writer::end_tag('div'); + return $output; + } + + /** + * Returns the list of all editing actions that current user can perform on the module + * + * @param cm_info $mod The module to produce editing buttons for + * @param int $indent The current indenting (default -1 means no move left-right actions) + * @param int $sr The section to link back to (used for creating the links) + * @return string Output + */ + public function get_cm_edit_actions(cm_info $mod, $indent=-1, $sr=null) { + global $COURSE, $SITE; + + static $str; + + $output = ''; + + $coursecontext = context_course::instance($mod->course); + $modcontext = context_module::instance($mod->id); + + $editcaps = array('moodle/course:manageactivities', 'moodle/course:activityvisibility'); + + // No permission to edit anything. + if (!has_any_capability($editcaps, $modcontext)) { + return array(); + } + + $hasmanageactivities = has_capability('moodle/course:manageactivities', $modcontext); + + if (!isset($str)) { + $str = get_strings(array('delete', 'move', 'editsettings', 'hide', 'show'), 'moodle'); + } + + $baseurl = new moodle_url('/course/mod.php', array('sesskey' => sesskey())); + + if ($sr !== null) { + $baseurl->param('sr', $sr); + } + + // Move + if ($hasmanageactivities) { + if (!preg_match('/^\d+_(label|section|document|question|link)_\d+/', $mod->idnumber)) { + $output .= $this->output->action_link( + new moodle_url($baseurl, array('copy' => $mod->id)), '', null, array(), + new pix_icon('t/move', $str->move, 'moodle', array('class' => 'iconsmall', 'title' => $str->move)) + ); + } + } + + // Update. + if ($hasmanageactivities) { + $output .= $this->output->action_link( + new moodle_url($baseurl, array('update' => $mod->id)), '', null, array(), + new pix_icon('t/edit', $str->editsettings, 'moodle', array('class' => 'iconsmall', 'title' => $str->editsettings)) + ); + } + + // Hide/Show. + if (has_capability('moodle/course:activityvisibility', $modcontext)) { + if ($mod->visible) { + $output .= $this->output->action_link( + new moodle_url($baseurl, array('hide' => $mod->id)), '', null, array(), + new pix_icon('t/hide', $str->hide, 'moodle', array('class' => 'iconsmall', 'title' => $str->hide)) + ); + } else { + $output .= $this->output->action_link( + new moodle_url($baseurl, array('show' => $mod->id)), '', null, array(), + new pix_icon('t/show', $str->show, 'moodle', array('class' => 'iconsmall', 'title' => $str->show)) + ); + } + } + + // Delete. + if ($hasmanageactivities) { + $output .= $this->output->action_link( + new moodle_url($baseurl, array('delete' => $mod->id)), '', null, array(), + new pix_icon('t/delete', $str->delete, 'moodle', array('class' => 'iconsmall', 'title' => $str->delete)) + ); + } + + return $output; + } + + /** + * Renders html to display a name with the link to the course module on a course page + * + * If module is unavailable for user but still needs to be displayed + * in the list, just the name is returned without a link + * + * Note, that for course modules that never have separate pages (i.e. labels) + * this function return an empty string + * + * @param cm_info $mod + * @param array $displayoptions + * @return string + */ + public function course_section_cm_name(cm_info $mod, $displayoptions = array()) { + global $CFG; + $output = ''; + if (!$mod->uservisible && empty($mod->availableinfo)) { + // nothing to be displayed to the user + return $output; + } + if (!$mod->url) { + return $output; + } + + // Accessibility: for files get description via icon, this is very ugly hack! + $instancename = $mod->get_formatted_name(); + $altname = $mod->modfullname; + // Avoid unnecessary duplication: if e.g. a forum name already + // includes the word forum (or Forum, etc) then it is unhelpful + // to include that in the accessible description that is added. + if (false !== strpos(core_text::strtolower($instancename), + core_text::strtolower($altname))) { + $altname = ''; + } + // File type after name, for alphabetic lists (screen reader). + if ($altname) { + $altname = get_accesshide(' '.$altname); + } + + // For items which are hidden but available to current user + // ($mod->uservisible), we show those as dimmed only if the user has + // viewhiddenactivities, so that teachers see 'items which might not + // be available to some students' dimmed but students do not see 'item + // which is actually available to current student' dimmed. + $linkclasses = 'vv-activitylink'; + $accesstext = ''; + $textclasses = ''; + if ($mod->uservisible) { + $conditionalhidden = $this->is_cm_conditionally_hidden($mod); + $accessiblebutdim = (!$mod->visible || $conditionalhidden) && + has_capability('moodle/course:viewhiddenactivities', $mod->context); + if ($accessiblebutdim) { + $linkclasses .= ' dimmed'; + $textclasses .= ' dimmed_text'; + if ($conditionalhidden) { + $linkclasses .= ' conditionalhidden'; + $textclasses .= ' conditionalhidden'; + } + // Show accessibility note only if user can access the module himself. + $accesstext = get_accesshide(get_string('hiddenfromstudents').':'. $mod->modfullname); + } + } else { + $linkclasses .= ' dimmed'; + $textclasses .= ' dimmed_text'; + } + + // Get on-click attribute value if specified and decode the onclick - it + // has already been encoded for display (puke). + $onclick = htmlspecialchars_decode($mod->onclick, ENT_QUOTES); + + $groupinglabel = ''; + if (!empty($mod->groupingid) && has_capability('moodle/course:managegroups', context_course::instance($mod->course))) { + $groupings = groups_get_all_groupings($mod->course); + $groupinglabel = html_writer::tag('span', '('.format_string($groupings[$mod->groupingid]->name).')', + array('class' => 'groupinglabel '.$textclasses)); + } + + // Display link itself. + if (preg_match('/unit|section/', $mod->idnumber)) { + $icon = html_writer::tag('div', '', array('class' => 'vv-icon-book')); + } else if (preg_match('/document/', $mod->idnumber)) { + $icon = html_writer::tag('div', '', array('class' => 'vv-icon-document')); + } else if (preg_match('/question/', $mod->idnumber)) { + $icon = html_writer::tag('div', '', array('class' => 'vv-icon-activity')); + } else if (preg_match('/link/', $mod->idnumber)) { + $icon = html_writer::tag('div', '', array('class' => 'vv-icon-link')); + } else { + $attributes = array( + 'src' => $mod->get_icon_url(), + 'class' => 'iconlarge activityicon', + 'alt' => ' ', + 'role' => 'presentation', + ); + $icon = html_writer::empty_tag('img', $attributes); + } + + $activitylink = $icon . $accesstext . + html_writer::tag('span', $instancename . $altname, array('class' => 'instancename')); + if ($mod->uservisible) { + $output .= html_writer::link($mod->url, $activitylink, array('class' => $linkclasses, 'onclick' => $onclick)) . + $groupinglabel; + } else { + // We may be displaying this just in order to show information + // about visibility, without the actual link ($mod->uservisible) + $output .= html_writer::tag('div', $activitylink, array('class' => $textclasses)) . + $groupinglabel; + } + return $output; + } +} diff --git a/html/moodle2/course/format/vv/styles.css b/html/moodle2/course/format/vv/styles.css new file mode 100644 index 0000000000..62a6f5508f --- /dev/null +++ b/html/moodle2/course/format/vv/styles.css @@ -0,0 +1,315 @@ +.vv-hidden { + display: none; +} + +.vv-title { + padding: 0px 0px 0px 15px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + background-image: url([[pix:format_vv|edubook]]); + background-repeat: no-repeat; + background-size: 57px; + background-position: right center; + background-color: gray; + font-size: 22px; + color: #ffffff; + font-weight: 400; + letter-spacing: 0.025em; + line-height: 57px; + margin: 0; +} + +.vv-mates .vv-title { + background-color: #055FA8; +} + +.vv-lengua .vv-title { + background-color: #BC0A0A; +} + +.vv-naturales .vv-title { + background-color: #EF7625; +} + +.vv-sociales .vv-title { + background-color: #039403; +} + +.vv-topics { + font-family: 'helvetica', sans-serif; + font-weight: 400; + font-size: 16px; + margin-left: 0; + margin-top: 16px; + margin-right: 0; +} + +.vv-topics li { + list-style: none; +} + +h3.vv-sectionname { + text-align: left; + font-size: 18px; + line-height: 22px; + color: #000; + font-weight: 400; + border-bottom: 1px solid #CCC; + padding: 15px 0px 15px 15px; + margin: 0; + cursor: pointer; +} + +li.vv-section.hidden h3.vv-sectionname { + opacity: 0.5; +} + +.vv-icon-section { + float: left; + width: 30px; + height: 30px; + margin-right: 15px; + background-repeat: no-repeat; + background-position: 0px 0px; +} + +.vv-mates .vv-icon-section { + background-image: url([[pix:format_vv|icon-apartat-B]]); +} + +.vv-lengua .vv-icon-section { + background-image: url([[pix:format_vv|icon-apartat-R]]); +} + +.vv-naturales .vv-icon-section { + background-image: url([[pix:format_vv|icon-apartat-O]]); +} + +.vv-sociales .vv-icon-section { + background-image: url([[pix:format_vv|icon-apartat-G]]); +} + +.vv-icon-arrow { + float: right; + width: 11px; + height: 22px; + background-image: url([[pix:format_vv|arrow-ver]]); + background-repeat: no-repeat; + background-position: center; + margin-left: 10px; +} + +.vv-opened .vv-icon-arrow { + background-image: url([[pix:format_vv|arrow-hor]]); +} + +ul.vv-section { + counter-reset: subsection; + padding: 0; + margin: 0; +} + +li.vv-section.hidden { + display: block; + visibility: visible; +} + +li.vv-subsection { + border-bottom: 1px solid #CCC; + padding: 0; + color: #666; + color: #666; +} + +h4.vv-subsectionname { + text-align: left; + font-size: 16px; + font-weight: 400; + padding: 15px 0 15px 60px; + margin: 0; + cursor: pointer; +} + +h4.vv-subsectionname > div.no-overflow { + margin-right: 20px; +} + +h4.vv-subsectionname div.no-overflow > p:last-child { + margin-bottom: 0; +} + +.vv-subsectionnum { + float: left; + padding: 2px 6px; + min-width: 10px; + color: #FFF; + border-radius: 3px; + margin-right: 15px; + background-color: gray; + text-align: center; +} + +.vv-mates .vv-subsectionnum { + background-color: #055FA8; +} + +.vv-lengua .vv-subsectionnum { + background-color: #BC0A0A; +} + +.vv-naturales .vv-subsectionnum { + background-color: #EF7625; +} + +.vv-sociales .vv-subsectionnum { + background-color: #039403; +} + +ul.vv-subsection { + padding: 0; + margin: 0; + border-top: 1px solid #CCC; + margin-bottom: -1px; +} + +li.vv-activity { + padding: 15px 0 15px 90px; + border-bottom: 1px solid #CCC; +} + +a.vv-activitylink, +a.vv-activitylink:hover { + color: #666; + text-decoration: none; +} + +.img-text a.vv-activitylink:hover span { + text-decoration: none; +} + +li.vv-activity .contentafterlink { + clear: both; + margin-top: 15px; +} + +.vv-contentafterlink p { + margin: 0; +} + +.vv-topics .autocompletion, +.vv-topics form.togglecompletion { + float: right; +} + +.vv-topics .commands, +.vv-topics .actions { + float: right; +} + +.vv-topics .commands img.icon, +.vv-topics .actions img.iconsmall { + vertical-align: middle; + margin: 0 3px; + padding: 0; +} + +.vv-topics .commands a { + margin-left: 5px; +} + +.vv-topics .activityicon { + float: left; + width: 16px; + height: 16px; + margin-top: 2px; + margin-left: 10px; + margin-right: 19px; +} + +.vv-topics .activityicon.iconlarge { + width: 24px; + height: 24px; + margin-top: -2px; + margin-left: 6px; + margin-right: 15px; +} + +.vv-icon-activity, +.vv-icon-book, +.vv-icon-document, +.vv-icon-link { + float: left; + width: 35px; + height: 30px; + margin-top: -8px; + margin-right: 10px; + background-repeat: no-repeat; + background-position: center; +} + +.vv-mates .vv-icon-activity { + background-image: url([[pix:format_vv|icon-activitat-B]]); +} + +.vv-lengua .vv-icon-activity { + background-image: url([[pix:format_vv|icon-activitat-R]]); +} + +.vv-naturales .vv-icon-activity { + background-image: url([[pix:format_vv|icon-activitat-O]]); +} + +.vv-sociales .vv-icon-activity { + background-image: url([[pix:format_vv|icon-activitat-G]]); +} + +.vv-mates .vv-icon-book { + background-image: url([[pix:format_vv|icon-resum-B]]); +} + +.vv-lengua .vv-icon-book { + background-image: url([[pix:format_vv|icon-resum-R]]); +} + +.vv-naturales .vv-icon-book { + background-image: url([[pix:format_vv|icon-resum-O]]); +} + +.vv-sociales .vv-icon-book { + background-image: url([[pix:format_vv|icon-resum-G]]); +} + +.vv-mates .vv-icon-document { + background-image: url([[pix:format_vv|icon-document-B]]); +} + +.vv-lengua .vv-icon-document { + background-image: url([[pix:format_vv|icon-document-R]]); +} + +.vv-naturales .vv-icon-document { + background-image: url([[pix:format_vv|icon-document-O]]); +} + +.vv-sociales .vv-icon-document { + background-image: url([[pix:format_vv|icon-document-G]]); +} + +.vv-mates .vv-icon-link { + background-image: url([[pix:format_vv|icon-link-B]]); +} + +.vv-lengua .vv-icon-link { + background-image: url([[pix:format_vv|icon-link-R]]); +} + +.vv-naturales .vv-icon-link { + background-image: url([[pix:format_vv|icon-link-O]]); +} + +.vv-sociales .vv-icon-link { + background-image: url([[pix:format_vv|icon-link-G]]); +} diff --git a/html/moodle2/course/format/vv/version.php b/html/moodle2/course/format/vv/version.php new file mode 100644 index 0000000000..a44cedefb4 --- /dev/null +++ b/html/moodle2/course/format/vv/version.php @@ -0,0 +1,21 @@ +. + +defined('MOODLE_INTERNAL') || die(); + +$plugin->version = 2016091500; +$plugin->requires = 2014111000; +$plugin->component = 'format_vv'; diff --git a/html/moodle2/filter/wiris/README.md b/html/moodle2/filter/wiris/README.md index 8ee022fcaa..81500bbb2a 100644 --- a/html/moodle2/filter/wiris/README.md +++ b/html/moodle2/filter/wiris/README.md @@ -1,5 +1,6 @@ WIRIS plugin for Moodle ========== +[![Build Status](https://travis-ci.org/wiris/moodle-atto_wiris.svg?branch=master)](https://travis-ci.org/wiris/moodle-atto_wiris) Add a fully WYSIWYG editor for scientific expressions ([WIRIS EDITOR](http://www.wiris.com/editor)) and, optionally, an advanced calculator tool ([WIRIS CAS](http://www.wiris.com/cas)). Enabled editing to STEM related topics (Science, Technology, Engineering and Mathematics). diff --git a/html/moodle2/filter/wiris/VERSION b/html/moodle2/filter/wiris/VERSION index 39ae93370c..f18925ab6a 100644 --- a/html/moodle2/filter/wiris/VERSION +++ b/html/moodle2/filter/wiris/VERSION @@ -1 +1 @@ -4.1.1.1361 \ No newline at end of file +4.2.0.1364 \ No newline at end of file diff --git a/html/moodle2/filter/wiris/filter.php b/html/moodle2/filter/wiris/filter.php index 93a14a1087..d0ab6fa9ef 100644 --- a/html/moodle2/filter/wiris/filter.php +++ b/html/moodle2/filter/wiris/filter.php @@ -108,7 +108,7 @@ public function filter($text, array $options = array()) { } $prop['refererquery'] = $query; - + $prop['lang'] = current_language(); $prop['savemode'] = 'safeXml'; // ...safeXml filtering. $text = $textservice->filter($text, $prop); $prop['savemode'] = 'xml'; // ...xml filtering. diff --git a/html/moodle2/filter/wiris/filtersettings.php b/html/moodle2/filter/wiris/filtersettings.php index 26aa115219..d5ade48371 100644 --- a/html/moodle2/filter/wiris/filtersettings.php +++ b/html/moodle2/filter/wiris/filtersettings.php @@ -36,11 +36,10 @@ $editorplugininstalled = filter_wiris_pluginwrapper::get_wiris_plugin(); if (!empty($editorplugininstalled)) { - // Editor and CAS checkbox. + // Editor checkbox. $output = ''; $wirisplugin->begin(); $waseditorenabled = $wirisplugin->was_editor_enabled(); - $wascasenabled = $wirisplugin->was_cas_enabled(); $waschemeditorenabled = $wirisplugin->was_chem_editor_enabled(); $conf = $wirisplugin->get_instance()->getConfiguration(); $wirisplugin->end(); @@ -74,11 +73,6 @@ get_string('wirischemeditor', 'filter_wiris'), '', '0')); } - if ($wascasenabled) { - $settings->add(new admin_setting_configcheckbox('filter_wiris_cas_enable', - get_string('wiriscas', 'filter_wiris'), '', '0')); - } - } else { if (!get_config('filter_wiris', 'filter_standalone')) { $output = '

' . diff --git a/html/moodle2/filter/wiris/info.php b/html/moodle2/filter/wiris/info.php index 00d6c494a8..ac6fd89648 100644 --- a/html/moodle2/filter/wiris/info.php +++ b/html/moodle2/filter/wiris/info.php @@ -55,7 +55,7 @@ function wrs_createtablerow($testname, $reporttext, $solutionlink, $condition) { function get_current_editor_data() { global $CFG; - $data = []; + $data = array(); $tinyeditor = new tinymce_texteditor(); @@ -267,6 +267,8 @@ function check_if_wiris_button_are_in_tinymce_toolbar() { $condition = true; } else { $reporttext = 'WIRIS plugin filter and WIRIS plugin for '. $currenteditordata['plugin_name'] .' versions don\'t match'; + $reporttext .= "
" . "WIRIS Filter version = " . $filterversion; + $reporttext .= "
WIRIS Plugin for " . $currenteditordata['plugin_name'] . 'version = ' . $pluginversion; $condition = false; } @@ -302,13 +304,17 @@ function check_if_wiris_button_are_in_tinymce_toolbar() { $output = ''; echo get_string('textBeforeButton1', 'filter_wiris') . "
"; $link = 'integration/test.php'; -echo '
'; +$input = '
'; +echo $input; $wqversion = get_config('qtype_wq', 'version'); if (!empty($wqversion)) { echo get_string('textBeforeButton2', 'filter_wiris') . "
"; $link = '../../question/type/wq/info.php'; - echo '
'; + $input = '
'; + echo $input; } $output .= html_writer::end_tag('br'); $output .= html_writer::end_tag('p'); diff --git a/html/moodle2/filter/wiris/integration/lib/VERSION b/html/moodle2/filter/wiris/integration/lib/VERSION index 39ae93370c..f18925ab6a 100644 --- a/html/moodle2/filter/wiris/integration/lib/VERSION +++ b/html/moodle2/filter/wiris/integration/lib/VERSION @@ -1 +1 @@ -4.1.1.1361 \ No newline at end of file +4.2.0.1364 \ No newline at end of file diff --git a/html/moodle2/filter/wiris/integration/lib/com/wiris/plugin/web/PhpConfigurationUpdater.class.php b/html/moodle2/filter/wiris/integration/lib/com/wiris/plugin/web/PhpConfigurationUpdater.class.php index c016de2c33..78c518d35c 100644 --- a/html/moodle2/filter/wiris/integration/lib/com/wiris/plugin/web/PhpConfigurationUpdater.class.php +++ b/html/moodle2/filter/wiris/integration/lib/com/wiris/plugin/web/PhpConfigurationUpdater.class.php @@ -58,6 +58,7 @@ public function updateConfiguration(&$configuration) { $userAgent = null; $userAgent = new com_wiris_util_net_UserAgent(new com_wiris_system_service_HttpRequest()); if($userAgent->isIe()) { + $configuration[com_wiris_plugin_api_ConfigurationKeys::$IMAGE_FORMAT] = "png"; $configuration[com_wiris_plugin_api_ConfigurationKeys::$IMPROVE_PERFORMANCE] = "false"; } } diff --git a/html/moodle2/filter/wiris/integration/lib/com/wiris/system/Exception.class.php b/html/moodle2/filter/wiris/integration/lib/com/wiris/system/Exception.class.php new file mode 100644 index 0000000000..ad200f4c03 --- /dev/null +++ b/html/moodle2/filter/wiris/integration/lib/com/wiris/system/Exception.class.php @@ -0,0 +1,23 @@ +message = $message; + }} + public function getMessage() { + return $this->message; + } + public $message; + public function __call($m, $a) { + if(isset($this->$m) && is_callable($this->$m)) + return call_user_func_array($this->$m, $a); + else if(isset($this->dynamics[$m]) && is_callable($this->dynamics[$m])) + return call_user_func_array($this->dynamics[$m], $a); + else if('toString' == $m) + return $this->__toString(); + else + throw new HException('Unable to call '.$m.''); + } + function __toString() { return 'com.wiris.system.Exception'; } +} diff --git a/html/moodle2/filter/wiris/integration/lib/com/wiris/system/InputEx.class.php b/html/moodle2/filter/wiris/integration/lib/com/wiris/system/InputEx.class.php index 060ebccb53..75b5ed3234 100644 --- a/html/moodle2/filter/wiris/integration/lib/com/wiris/system/InputEx.class.php +++ b/html/moodle2/filter/wiris/integration/lib/com/wiris/system/InputEx.class.php @@ -9,5 +9,13 @@ static function readInt32_($a) { $ch4 = $a->readByte(); return ($ch1 << 8 | $ch2) << 16 | ($ch3 << 8 | $ch4); } + static function length_($a) { + $x = Reflect::field($a, "len"); + if($x !== null && Std::is($x, _hx_qtype("Int"))) { + return $x; + } else { + throw new HException("Not implemented!"); + } + } function __toString() { return 'com.wiris.system.InputEx'; } } diff --git a/html/moodle2/filter/wiris/integration/lib/com/wiris/system/Storage.class.php b/html/moodle2/filter/wiris/integration/lib/com/wiris/system/Storage.class.php index 205b824401..2fb7380a5a 100644 --- a/html/moodle2/filter/wiris/integration/lib/com/wiris/system/Storage.class.php +++ b/html/moodle2/filter/wiris/integration/lib/com/wiris/system/Storage.class.php @@ -127,6 +127,10 @@ static function setDirectorySeparator() { $sep = DIRECTORY_SEPARATOR; com_wiris_system_Storage::$directorySeparator = $sep; } + static function getCurrentPath() { + throw new HException("Not implemented!"); + return null; + } function __toString() { return $this->toString(); } } function com_wiris_system_Storage_0(&$this, &$path) { diff --git a/html/moodle2/filter/wiris/integration/lib/com/wiris/util/json/JSon.class.php b/html/moodle2/filter/wiris/integration/lib/com/wiris/util/json/JSon.class.php index 162de8ed27..1d04df0aa8 100644 --- a/html/moodle2/filter/wiris/integration/lib/com/wiris/util/json/JSon.class.php +++ b/html/moodle2/filter/wiris/integration/lib/com/wiris/util/json/JSon.class.php @@ -225,9 +225,9 @@ public function encodeInteger($sb, $i) { public function encodeString($sb, $s) { $s = str_replace("\\", "\\\\", $s); $s = str_replace("\"", "\\\"", $s); - $s = str_replace("\x0D", "\\\x0D", $s); - $s = str_replace("\x0A", "\\\x0A", $s); - $s = str_replace("\x09", "\\\x09", $s); + $s = str_replace("\x0D", "\\r", $s); + $s = str_replace("\x0A", "\\n", $s); + $s = str_replace("\x09", "\\t", $s); $sb->add("\""); $sb->add($s); $sb->add("\""); diff --git a/html/moodle2/filter/wiris/integration/lib/com/wiris/util/xml/WCharacterBase.class.php b/html/moodle2/filter/wiris/integration/lib/com/wiris/util/xml/WCharacterBase.class.php index a61265b4e7..12ad743ebc 100644 --- a/html/moodle2/filter/wiris/integration/lib/com/wiris/util/xml/WCharacterBase.class.php +++ b/html/moodle2/filter/wiris/integration/lib/com/wiris/util/xml/WCharacterBase.class.php @@ -120,7 +120,7 @@ static function isDigit($c) { return false; } static function isIdentifier($c) { - return com_wiris_util_xml_WCharacterBase::isLetter($c) || $c === 95; + return com_wiris_util_xml_WCharacterBase::isLetter($c) || com_wiris_util_xml_WCharacterBase::isCombiningCharacter($c) || $c === 95; } static function isLarge($c) { return com_wiris_util_xml_WCharacterBase::binarySearch(com_wiris_util_xml_WCharacterBase::$largeOps, $c); @@ -269,6 +269,9 @@ static function getNotNegated($c) { } return -1; } + static function isCombiningCharacter($c) { + return $c >= 768 && $c <= 879 || $c >= 6832 && $c <= 6911 || $c >= 7616 && $c <= 7679 && ($c >= 8400 && $c <= 8447) && ($c >= 65056 && $c <= 65071); + } static function isLetter($c) { if(com_wiris_util_xml_WCharacterBase::isDigit($c)) { return false; diff --git a/html/moodle2/filter/wiris/integration/lib/default-configuration.ini b/html/moodle2/filter/wiris/integration/lib/default-configuration.ini index 34f3f99a4b..131db52a06 100644 --- a/html/moodle2/filter/wiris/integration/lib/default-configuration.ini +++ b/html/moodle2/filter/wiris/integration/lib/default-configuration.ini @@ -25,7 +25,7 @@ wirischemeditorenabled = true wirisimageformat = svg # CAS -wiriscasenabled = true +wiriscasenabled = false wiriscascodebase = http://www.wiris.net/demo/wiris/wiris-codebase wiriscasarchive = wrs_net_%LANG.jar wiriscasclass = WirisApplet_net_%LANG diff --git a/html/moodle2/filter/wiris/lib.php b/html/moodle2/filter/wiris/lib.php index 0c94c79aea..4b2e598a61 100644 --- a/html/moodle2/filter/wiris/lib.php +++ b/html/moodle2/filter/wiris/lib.php @@ -128,7 +128,7 @@ function wrs_filterapplettojnlp($text) { $srcstart = strpos($appletcode, ' src="') + strlen(' src="'); $srcend = strpos($appletcode, '.png"', 0); $src = substr($appletcode, $srcstart, $srcend - $srcstart + 4); - $hreflink = 'http://www.wiris.net/demo/wiris/wiriscas.jnlp?session_id=' . $sessionid; + $hreflink = 'http://stateful.wiris.net/demo/wiris/wiriscas.jnlp?session_id=' . $sessionid; $output .= html_writer::start_tag('a', array('href' => $hreflink)); $img = ''; if (method_exists('html_writer', 'img')) { diff --git a/html/moodle2/filter/wiris/thirdpartylibs.xml b/html/moodle2/filter/wiris/thirdpartylibs.xml index 944806c056..15163d77b6 100644 --- a/html/moodle2/filter/wiris/thirdpartylibs.xml +++ b/html/moodle2/filter/wiris/thirdpartylibs.xml @@ -3,7 +3,7 @@ integration WIRIS PLUGIN Engine - 4.1.1.1361 + 4.2.0.1364 GPL 3.0+ diff --git a/html/moodle2/filter/wiris/version.php b/html/moodle2/filter/wiris/version.php index 545fdecbab..512f5d4c91 100644 --- a/html/moodle2/filter/wiris/version.php +++ b/html/moodle2/filter/wiris/version.php @@ -25,8 +25,8 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017030900; -$plugin->release = '4.1.1.1361'; +$plugin->version = 2017040600; +$plugin->release = '4.2.0.1364'; $plugin->requires = 2011120511; $plugin->maturity = MATURITY_STABLE; $plugin->component = 'filter_wiris'; diff --git a/html/moodle2/langpacks/ar/moodle.php b/html/moodle2/langpacks/ar/moodle.php index 71742a49d1..ca4fd0b3b8 100644 --- a/html/moodle2/langpacks/ar/moodle.php +++ b/html/moodle2/langpacks/ar/moodle.php @@ -921,6 +921,8 @@ $string['hidesection'] = 'إخفاء القسم {$a}'; $string['hidesettings'] = 'إخفاء الإعدادات'; $string['hideshowblocks'] = 'عرض أو إخفاء الكتل'; +$string['highlight'] = 'تسليط الضوء'; +$string['highlightoff'] = 'احذف تسليط الضوء'; $string['hits'] = 'نتائج'; $string['hitsoncourse'] = 'دخول إلى {$a->coursename} بواسطة {$a->username}'; $string['hitsoncoursetoday'] = 'نتائج اليوم في {$a->coursename} بواسطة {$a->username}'; @@ -1068,8 +1070,8 @@ $string['maximumshort'] = 'الحد الأقصى'; $string['maximumupload'] = 'الحجم الأقصى للتحميل'; $string['maximumupload_help'] = 'يحدد هذا الإعداد أكبر حجم للملف يمكن رفعه إلى المقرر، محدوداً بالإعدادات العامة للموقع التي تم وضعها من أحد مديري الموقع. تتضمن وحدات النشاط أيضًا إعداداً خاصًا بالحد الأقصى للملفات المرفوعة للمزيد من تقييد لحجم الملف.'; -$string['maxnumberweeks'] = 'الحد الأقصى لعدد الأقسام'; -$string['maxnumberweeks_desc'] = 'القيمة القصوى لعدد الأقسام في القائمة المنسدلة (تنطبق على بعض تنسيقات المقرر الدراسي فقط).'; +$string['maxnumberweeks'] = 'الحد الأقصى لعدد الاسابيع/المواضيع'; +$string['maxnumberweeks_desc'] = 'هذا يتحكم في الخيارات القصوى التي تظهر "عدد الاسابيع/المواضيع" في إعدادات المقرر الدراسي'; $string['maxnumcoursesincombo'] = 'تصفح {$a->numberofcourses}المقررات الدراسية.'; $string['maxsize'] = 'الحد الأقصى: {$a}'; $string['maxsizeandareasize'] = 'الحجم الأقصى للملفات الجديدة: {$a->size}, الحد العام: {$a->areasize}'; @@ -1282,7 +1284,7 @@ $string['noteusercannotrolldatesoncontext'] = 'ملاحظة: لقد تم تعطيل إداراج التواريخ عند استعادة النسخ الاحتياطي هذا وذلك لانه ليس لديك الصلاحيات المطلوب للقيام بذلك.'; $string['noteuserschangednonetocourse'] = 'ملاحظة: يتطلب إستراجاع مستخدمي المقرر الدراسي عند أعدت بيانت المستخدم (في الأنشطة، الملفات أو الرسائل). تم تغير هذا الاعداد لك'; -$string['nothingnew'] = 'لا توجد أنشطة حديثة'; +$string['nothingnew'] = 'لا يوجد إي انشطة حديثة'; $string['nothingtodisplay'] = 'لا يوجد شئ يعرض'; $string['notice'] = 'إشعار'; $string['noticenewerbackup'] = 'الملف الاحتياطي هذا تم إنشائه بمودل {$a->backuprelease} ({$a->backupversion})وهذا الاصدار من موادل هو أحدث من الأصدار المثبت لديك الآن {$a->backuprelease} ({$a->backupversion}). هذا قد يسبب بعض التعارضات لان توافق ملفات النسخ الاحتياطي لا يمكن ضمانها.'; @@ -1766,7 +1768,7 @@ $string['teacheronly'] = 'من أجل {$a} فقط'; $string['teacherroles'] = '{$a} أدوار'; $string['teachers'] = 'معلمون'; -$string['textediting'] = 'عند تحرير النصوص'; +$string['textediting'] = 'محرر النصوص'; $string['textediting_help'] = 'إذا تم اختيار محرر HTML مثل محرر diff --git a/html/moodle2/langpacks/ca/backup.php b/html/moodle2/langpacks/ca/backup.php index ee4002678a..7de4077dc5 100644 --- a/html/moodle2/langpacks/ca/backup.php +++ b/html/moodle2/langpacks/ca/backup.php @@ -273,7 +273,7 @@ $string['skipmodifdayshelp'] = 'Trieu ometre els cursos que no s\'hagin modificat des d\'un nombre de dies'; $string['skipmodifprev'] = 'Omet cursos no modificats des de la còpia de seguretat anterior'; $string['skipmodifprevhelp'] = 'Trieu ometre o no els cursos que no s\'hagin modificat des de la còpia de seguretat anterior. Cal que els registres estiguin habilitats per tal que funcioni.'; -$string['storagecourseandexternal'] = 'Àrea de còpies de seguretat del curs i el directori especificat'; +$string['storagecourseandexternal'] = 'Àrea de còpies de seguretat del curs i del directori especificat'; $string['storagecourseonly'] = 'Àrea de còpies de seguretat del curs'; $string['storageexternalonly'] = 'Directori de còpies de seguretat automàtiques especificat'; $string['timetaken'] = 'Temps emprat'; diff --git a/html/moodle2/langpacks/ca/badges.php b/html/moodle2/langpacks/ca/badges.php index 5aad9bf434..0d172d82d9 100644 --- a/html/moodle2/langpacks/ca/badges.php +++ b/html/moodle2/langpacks/ca/badges.php @@ -88,6 +88,7 @@ $string['backpackemail'] = 'Adreça de correu'; $string['backpackemail_help'] = 'Adreça electrònica associada a la vostra motxilla. Mentre esteu connectat, qualsevol insígnia guanyada en aquest lloc quedarà associada amb aquesta adreça electrònica.'; +$string['backpackemailverificationpending'] = 'Pendent de verificació'; $string['backpackimport'] = 'Configuració de la importació d\'insígnies'; $string['backpackimport_help'] = 'Un cop s\'hagi establert correctament la connexió amb la motxilla, les insígnies de la vostra motxilla es podran veure a la pàgina «Les meves insígnies» i a la del vostre perfil. diff --git a/html/moodle2/langpacks/ca/block.php b/html/moodle2/langpacks/ca/block.php index 938366c35d..36c45fe44e 100644 --- a/html/moodle2/langpacks/ca/block.php +++ b/html/moodle2/langpacks/ca/block.php @@ -56,7 +56,7 @@ $string['movingthisblockcancel'] = 'S\'està movent aquest bloc ({$a})'; $string['onthispage'] = 'En aquesta pàgina'; $string['pagetypes'] = 'Tipus de pàgina'; -$string['pagetypewarning'] = 'El tipus de pàgina especificat prèviament ja no es pot seleccionar. Trieu a sota el tipus de pàgina més apropiat.'; +$string['pagetypewarning'] = 'El tipus de pàgina especificat prèviament ja no es pot seleccionar. Trieu a sota el tipus de pàgina més adequat.'; $string['region'] = 'Regió'; $string['restrictpagetypes'] = 'Visualitza en aquests tipus de pàgines'; $string['showblock'] = 'Mostra el bloc {$a}'; diff --git a/html/moodle2/langpacks/ca/completion.php b/html/moodle2/langpacks/ca/completion.php index f95c788649..e8eda55bb3 100644 --- a/html/moodle2/langpacks/ca/completion.php +++ b/html/moodle2/langpacks/ca/completion.php @@ -59,7 +59,7 @@ $string['completionduration'] = 'Inscripció'; $string['completionenabled'] = 'Habilitada, control mitjançant compleció i paràmetres de l\'activitat'; $string['completionexpected'] = 'S\'espera que es completi el'; -$string['completionexpected_help'] = 'Aquest paràmetre especifica la data en què s\'espera que es completi l\'activitat. La data no es mostra a l\'estudiantat i sols es mostra a l\'informe de compleció d\'activitat.'; +$string['completionexpected_help'] = 'Aquest paràmetre especifica la data en què s\'espera que es completi l\'activitat. La data no es mostra als estudiants i sols es visualitza a l\'informe de compleció d\'activitat.'; $string['completion-fail'] = 'Completat (no s\'ha aconseguit assolir la qualificació)'; $string['completion_help'] = 'Si s\'habilita, es fa un seguiment de compleció de l\'activitat, de forma manual o de forma automàtica, sobre la base de certes condicions. Es poden configurar múltiples condicions. Si es fa així, l\'activitat només es considerarà completada quan es complisquen TOTES les condicions. diff --git a/html/moodle2/langpacks/ca/error.php b/html/moodle2/langpacks/ca/error.php index 5d1fea2094..f76fa3d274 100644 --- a/html/moodle2/langpacks/ca/error.php +++ b/html/moodle2/langpacks/ca/error.php @@ -49,7 +49,7 @@ $string['cannotcallusgetselecteduser'] = 'No podeu cridar user_selector::get_selected_user si multi select és cert.'; $string['cannotcreatebackupdir'] = 'No s\'ha pogut crear el directori de còpies de seguretat. Cal que l\'administrador del lloc assigni els permisos.'; $string['cannotcreatecategory'] = 'No s\'ha inserit la categoria'; -$string['cannotcreatedboninstall'] = '

No és pot crear la base de dades.

La base de dades especificada no existeix i l\'usuari que heu proporcionat no té permís per a crear-la.

+$string['cannotcreatedboninstall'] = '

No es pot crear la base de dades.

La base de dades especificada no existeix i l\'usuari que heu proporcionat no té permís per a crear-la.

L\'administrador del lloc hauria de verificar la configuració de la base de dades.

'; $string['cannotcreategroup'] = 'S\'ha produït un error en crear la categoria'; $string['cannotcreatelangbase'] = 'S\'ha produït un error. No s\'ha creat el directori base d\'idiomes.'; diff --git a/html/moodle2/langpacks/ca/form.php b/html/moodle2/langpacks/ca/form.php index 3c4a24652a..d9f0f363c9 100644 --- a/html/moodle2/langpacks/ca/form.php +++ b/html/moodle2/langpacks/ca/form.php @@ -67,6 +67,6 @@ $string['somefieldsrequired'] = 'Aquest formulari conté els camps obligatoris {$a}.'; $string['time'] = 'Temps'; $string['timeunit'] = 'Unitat de temps'; -$string['timing'] = 'Cronometratge'; +$string['timing'] = 'Temporització'; $string['unmaskpassword'] = 'Desemmascara'; $string['year'] = 'Any'; diff --git a/html/moodle2/langpacks/ca/geogebra.php b/html/moodle2/langpacks/ca/geogebra.php index 6e1bd20c78..545efb7f70 100644 --- a/html/moodle2/langpacks/ca/geogebra.php +++ b/html/moodle2/langpacks/ca/geogebra.php @@ -122,6 +122,7 @@ $string['showToolBarHelp'] = 'Mostra l\'ajuda de la barra d\'eines'; $string['status'] = 'Estat'; $string['submitandfinish'] = 'Entrega i acaba'; +$string['timing'] = 'Temporització'; $string['total'] = 'Total'; $string['unfinished'] = 'No finalitzat'; $string['ungraded'] = 'Sense qualificar'; diff --git a/html/moodle2/langpacks/ca/grades.php b/html/moodle2/langpacks/ca/grades.php index d4e20112ca..73b2e9ef05 100644 --- a/html/moodle2/langpacks/ca/grades.php +++ b/html/moodle2/langpacks/ca/grades.php @@ -111,7 +111,7 @@ $string['availableidnumbers'] = 'Números ID disponibles'; $string['average'] = 'Mitjana'; $string['averagesdecimalpoints'] = 'Decimals en les mitjanes de columnes'; -$string['averagesdecimalpoints_help'] = '

Especifica el nombre de decimals que es visualitzaran en la mitjana de cada columna. Si seleccioneu \'Hereta\' s\'utilitzarà el tipus de visualització de cada columna.

'; +$string['averagesdecimalpoints_help'] = '

Especifica el nombre de decimals que es visualitzaran en la mitjana de cada columna. Si seleccioneu «Hereta» s\'utilitzarà el tipus de visualització de cada columna.

'; $string['averagesdisplaytype'] = 'Tipus de visualització de les mitjanes de columnes'; $string['averagesdisplaytype_help'] = 'Aquest paràmetre determina si la mitjana es mostra com a valor real, percentatge o lletra. Si seleccioneu «Hereta» s\'utilitzarà el que estigui establert a la categoria o element de qualificació.'; $string['backupwithoutgradebook'] = 'La còpia de seguretat no conté la configuració del butlletí de qualificacions'; @@ -446,7 +446,7 @@ $string['letterreal'] = 'Lletra (real)'; $string['letters'] = 'Lletres'; $string['linkedactivity'] = 'Activitat vinculada'; -$string['linkedactivity_help'] = '

Especifica una activitat opcional vinculada a aquest element de competència. S\'utilitza per mesurar el rendiment de l\'estudiantat sobre la base de criteris no avaluats per la qualificació de l\'activitat.

'; +$string['linkedactivity_help'] = '

Especifica una activitat opcional vinculada a aquest element de competència. S\'utilitza per mesurar el rendiment de l\'estudiant sobre la base de criteris no avaluats per la qualificació de l\'activitat.

'; $string['linktoactivity'] = 'Enllaç a l\'activitat {$a->name}'; $string['lock'] = 'Bloca'; $string['locked'] = 'Blocat'; @@ -626,7 +626,7 @@ $string['rangesdecimalpoints'] = 'Decimals en les gammes'; $string['rangesdecimalpoints_help'] = '

Especifica el nombre de decimals que es mostren en cada element de la gamma. Aquest nombre es pot canviar després per a cada element de qualificació.

'; $string['rangesdisplaytype'] = 'Tipus de visualització de les gammes'; -$string['rangesdisplaytype_help'] = '

Especifica com visualitzar les gammes. Si seleccioneu Hereta, s\'utilitzarà el tipus de visualització de cada columna.

'; +$string['rangesdisplaytype_help'] = '

Especifica com es visualitzen les gammes. Si seleccioneu Hereta, s\'utilitzarà el tipus de visualització de cada columna.

'; $string['rank'] = 'Posició'; $string['rawpct'] = '% brut'; $string['real'] = 'Real'; @@ -703,8 +703,7 @@ * Mostra tots els elements ocults. Els noms dels elements de qualificació ocults es mostren, però les qualificacions resten ocultes. * Mostra només els elements «oculta fins». Els elements de qualificació amb una data «oculta fins» s\'oculten completament fins aquesta data. Després d\'aquesta data es mostrarà l\'element complet. * No mostris cap element ocult. Els elements de qualificació ocults s\'oculten completament.'; -$string['showhiddenuntilonly'] = 'Mostra només els elements "oculta -fins"'; +$string['showhiddenuntilonly'] = 'Mostra només els elements «oculta fins»'; $string['showingaggregatesonly'] = 'S\'estan mostrant només els agregats'; $string['showingfullmode'] = 'S\'està mostrant la vista completa'; $string['showinggradesonly'] = 'S\'estan mostrant només les qualificacions'; diff --git a/html/moodle2/langpacks/ca/hub.php b/html/moodle2/langpacks/ca/hub.php index 917087a75f..fbe214dd53 100644 --- a/html/moodle2/langpacks/ca/hub.php +++ b/html/moodle2/langpacks/ca/hub.php @@ -105,7 +105,7 @@ $string['forceunregister'] = 'Sí, suprimeix les dades del registre'; $string['forceunregisterconfirmation'] = 'El vostre lloc no pot arribar a {$a}. El concentrador deu haver caigut temporalment. A menys que estigueu segurs de voler continuar amb la supressió del registre a nivell local, si us plau cancel·leu-ho i torneu a intentar-ho més tard.'; $string['geolocation'] = 'Geolocalització'; -$string['geolocation_help'] = 'En un futur poden proporcionar-vos cerca basada en la geolocalització. Si voleu especificar la localització del vostre curs utilitzeu un valor de latitud/longitud aquí (ex: -31.947884,115.871285). Una forma de trobar això és utilitzar Google Maps.'; +$string['geolocation_help'] = 'En un futur poden proporcionar-vos cerques basades en la geolocalització. Si voleu especificar la localització del vostre curs, utilitzeu un valor de latitud/longitud aquí (p. ex.: -31.947884,115.871285). Una forma de trobar això és utilitzar Google Maps.'; $string['hub'] = 'Concentrador'; $string['imageurl'] = 'URL de la imatge'; $string['imageurl_help'] = 'Aquesta imatge es mostrarà al concentrador. Aquesta imatge ha d\'estar disponible al concentrador en qualsevol moment. La imatge hauria de tindre una mida màxima de {$a->width} X {$a->height}'; @@ -202,7 +202,7 @@ $string['siteemail'] = 'Adreça de correu electrònic'; $string['siteemail_help'] = 'Us cal proporcionar un correu electrònic a l\'administrador del concentrador perquè contacti amb vós. Això no s\'utilitzarà per a cap altre propòsit. És recomanable introduir un correu que reflecteixi la vostra posició (ex.: adminlloc@exemple.com ) i no directament un de personal.'; $string['sitegeolocation'] = 'Geolocalització'; -$string['sitegeolocation_help'] = 'En un futur podem proporcionar cerca basada en la geolocalització als concentradors. Si voleu especificar la localització del vostre lloc utilitzeu la latitud / longitud aquí (ex: -31.947884,115.871285). Una manera de trobar-la és utilitzar Google Maps.'; +$string['sitegeolocation_help'] = 'En un futur podem proporcionar cerques basades en la geolocalització als concentradors. Si voleu especificar la localització del vostre lloc, utilitzeu la latitud/longitud aquí (p. ex.: -31.947884,115.871285). Una manera de trobar-la és utilitzar Google Maps.'; $string['sitelang'] = 'Idioma'; $string['sitelang_help'] = 'L\'idioma del vostre lloc pot mostrar-se al llistat de llocs.'; $string['sitename'] = 'Nom'; diff --git a/html/moodle2/langpacks/ca/media.php b/html/moodle2/langpacks/ca/media.php index 3a1f4be00b..d6c7b4ebc5 100644 --- a/html/moodle2/langpacks/ca/media.php +++ b/html/moodle2/langpacks/ca/media.php @@ -28,10 +28,9 @@ $string['flashanimation'] = 'Animació Flash'; $string['flashanimation_desc'] = 'Fitxers amb extensió *.swf. Per raons de seguretat aquest filtre s\'utilitza només en textos de confiança.'; $string['flashvideo'] = 'Vídeo Flash'; -$string['flashvideo_desc'] = 'Fitxers amb extensió *.flv i *.f4v. Reprodueix clips de vídeo utilitzant Flowplayer, Es requereix el connector de Flash i javascript. Fa servir HTML 5 com alternativa de video si s\'han especificat diverses fonts.'; +$string['flashvideo_desc'] = 'Fitxers amb l\'extensió *.flv i *.f4v. Reprodueix clips de vídeo utilitzant Flowplayer. Es requereix el connector de Flash i JavaScript.'; $string['html5audio'] = 'HTML 5 audio'; -$string['html5audio_desc'] = 'Fitxers d\'audio amb extensió *.ogg, *.aac i altres. És només compatible amb les últimes versions dels navegadors, malauradament no existeix un format que sigui compatible amb tots els navegadors. -Una solució és especificar alternatives separades per # (per exemple: http://example.org/audio.aac#http://example.org/audio.aac#http://example.org/audio.mp3#), el reproductor QuickTime és utilitzat com a alternativa pels navegadors més antics, una alternativa pot ser qualsevol tipus d\'audio.'; +$string['html5audio_desc'] = 'Fitxers d\'àudio amb l\'extensió *.ogg, *.aac i *.mp3. S\'empren sobretot per a dispositius mòbils. (La compatibilitat del format depèn del navegador.)'; $string['html5video'] = 'HTML 5 vídeo'; $string['html5video_desc'] = 'Fitxers de vídeo amb extensió *.webm, *.m4v, *.ogv, *.mp4 i altres. És només compatible amb les últimes versions dels navegadors, malauradament no existeix un format que sigui compatible amb tots els navegadors. Una solució és especificar alternatives separades per # (per exemple: http://example.org/video.m4v#http://example.org/video.aac#http://example.org/video.ogv#d=640x480), el reproductor QuickTime és utilitzat com a alternativa pels navegadors més antics.'; diff --git a/html/moodle2/langpacks/ca/moodle.php b/html/moodle2/langpacks/ca/moodle.php index 16a40bf154..092f56bf4f 100644 --- a/html/moodle2/langpacks/ca/moodle.php +++ b/html/moodle2/langpacks/ca/moodle.php @@ -1369,19 +1369,19 @@ $string['numattempts'] = '{$a} intents d\'inici de sessió fallits'; $string['numberofcourses'] = 'Nombre de cursos'; $string['numberweeks'] = 'Nombre de temes/setmanes'; -$string['numday'] = 'dia {$a}'; +$string['numday'] = '{$a} dia'; $string['numdays'] = '{$a} dies'; $string['numhours'] = '{$a} hores'; $string['numletters'] = '{$a} cartes'; $string['numminutes'] = '{$a} minuts'; -$string['nummonth'] = 'mes {$a}'; +$string['nummonth'] = '{$a} mes'; $string['nummonths'] = '{$a} mesos'; $string['numseconds'] = '{$a} segons'; $string['numviews'] = '{$a} visualitzacions'; -$string['numweek'] = 'setmana {$a}'; +$string['numweek'] = '{$a} setmana'; $string['numweeks'] = '{$a} setmanes'; $string['numwords'] = '{$a} paraules'; -$string['numyear'] = 'any {$a}'; +$string['numyear'] = '{$a} any'; $string['numyears'] = '{$a} anys'; $string['ok'] = 'OK'; $string['oldpassword'] = 'Contrasenya actual'; diff --git a/html/moodle2/langpacks/ca/quiz.php b/html/moodle2/langpacks/ca/quiz.php index 9b22b6f9e1..285b7c48e9 100644 --- a/html/moodle2/langpacks/ca/quiz.php +++ b/html/moodle2/langpacks/ca/quiz.php @@ -25,7 +25,7 @@ defined('MOODLE_INTERNAL') || die(); -$string['accessnoticesheader'] = 'Podeu previsualitzar aquest qüestionari, però no podrieu contestar-lo perquè:'; +$string['accessnoticesheader'] = 'Podeu previsualitzar aquest qüestionari, però si fos un intent real no podríeu contestar-lo perquè:'; $string['action'] = 'Acció'; $string['activityoverview'] = 'Teniu qüestionaris per respondre'; $string['adaptive'] = 'Mode adaptatiu'; diff --git a/html/moodle2/langpacks/ca/search.php b/html/moodle2/langpacks/ca/search.php index d43ab9140d..1d8603f33b 100644 --- a/html/moodle2/langpacks/ca/search.php +++ b/html/moodle2/langpacks/ca/search.php @@ -55,6 +55,7 @@ $string['enteryoursearchquery'] = 'Introduïu la vostra cerca'; $string['errors'] = 'Errors'; $string['filesinindexdirectory'] = 'Fitxers en el directori índex'; +$string['filterheader'] = 'Filtre'; $string['globalsearch'] = 'Cerca global'; $string['globalsearchdisabled'] = 'No s\'ha habilitat la cerca global'; $string['invalidindexerror'] = 'El directori índex és buit o no conté un índex vàlid.'; @@ -62,13 +63,17 @@ $string['next'] = 'Següent'; $string['noindexmessage'] = 'Administradors: sembla que no existeix l\'índex de cerca. Si us plau'; $string['normalsearch'] = 'Cerca normal'; +$string['notitle'] = 'Sense títol'; $string['openedon'] = 'obert'; +$string['optimize'] = 'Optimitza'; $string['resultsreturnedfor'] = 'resultats per a'; $string['runindexer'] = 'Executa l\'indexador (real)'; $string['runindexertest'] = 'Executa la prova d\'indexació'; $string['score'] = 'Puntuació'; $string['search'] = 'Cerca'; +$string['searcharea'] = 'Àrea de cerca'; $string['searching'] = 'S\'està cercant en...'; +$string['search:mycourse'] = 'Els meus cursos'; $string['searchnotpermitted'] = 'No teniu permís per fer una cerca'; $string['seconds'] = 'segons'; $string['solutions'] = 'Solucions'; @@ -79,6 +84,7 @@ $string['title'] = 'Títol'; $string['tofetchtheseresults'] = 'obtenir aquests resultats'; $string['totalsize'] = 'Mida total'; +$string['totime'] = 'Modificat abans'; $string['type'] = 'Tipus'; $string['uncompleteindexingerror'] = 'La indexació no s\'ha completat amb èxit. Reinicieu-la.'; $string['versiontoolow'] = 'La cerca global requereix PHP 5.0.0 o superior'; diff --git a/html/moodle2/langpacks/ca/workshopform_numerrors.php b/html/moodle2/langpacks/ca/workshopform_numerrors.php index 70ad76fd95..d2c37babe6 100644 --- a/html/moodle2/langpacks/ca/workshopform_numerrors.php +++ b/html/moodle2/langpacks/ca/workshopform_numerrors.php @@ -41,5 +41,5 @@ $string['grademapping'] = 'Taula de mapatge de notes'; $string['maperror'] = 'El número ponderat d\'errors és menor o igual a'; $string['mapgrade'] = 'Puntuació de la tramesa'; -$string['percents'] = '{$a} %'; +$string['percents'] = '{$a}%'; $string['pluginname'] = 'Nombre d\'errors'; diff --git a/html/moodle2/langpacks/de/badges.php b/html/moodle2/langpacks/de/badges.php index 04af48c72e..84af5971bb 100644 --- a/html/moodle2/langpacks/de/badges.php +++ b/html/moodle2/langpacks/de/badges.php @@ -79,15 +79,34 @@ Die einzige URL, die für die Verifizierung benötigt wird, ist [website]/badges/assertion.php. Wenn Sie Ihre Firewall so konfigurieren, dass der Zugriff auf dieses Skript erlaubt ist, dann funktioniert die Verifizierung von Auszeichnungen.'; $string['backpackbadges'] = 'Sie haben {$a->totalbadges} Auszeichnung(en), die aus {$a->totalcollections} Sammlung(en) angezeigt werden. Backpack konfigurieren.'; +$string['backpackcannotsendverification'] = 'Eine Bestätigungsmitteilung konnte nicht gesendet werden.'; $string['backpackconnection'] = 'Verbindung zum Backpack'; +$string['backpackconnectioncancelattempt'] = 'Verwenden Sie zum Verbinden eine andere E-Mail-Adresse.'; +$string['backpackconnectionconnect'] = 'Zum Backpack verbinden'; $string['backpackconnection_help'] = 'Auf dieser Seite können Sie Verbindungen zu externen Backpack-Diensten konfigurieren. Eine Verbindung zu einem externen Backpack-Dienst ermöglicht es, externe Auszeichnungen in Moodle anzuzeigen und in Moodle erworbene Auszeichnungen in das externe Backpack zu exportieren. Derzeit wird nur der Backpack-Dienst Mozilla OpenBadges Backpack unterstützt. Sie müssen sich erst bei einem externen Backpack-Dienst anmelden, bevor sie die zugehörigen Verbindung in Moodle konfigurieren können.'; +$string['backpackconnectionresendemail'] = 'Bestätigungsmitteilung erneut senden'; +$string['backpackconnectionunexpectedresult'] = 'Problem bei der Backpack-Verbindung. Versuchen Sie es noch einmal.

Falls dieses Problem dauerhaft besteht, melden Sie sich beim Administrator der Website.'; $string['backpackdetails'] = 'Backpack konfigurieren'; $string['backpackemail'] = 'E-Mail-Adresse'; $string['backpackemail_help'] = 'E-Mail-Adresse, die mit Ihrem Backpack-Dienst verknüpft ist Wenn eine Verbindung zum Backpack-Dienst besteht, werden alle Auszeichnungen dieser Website an diese E-Mail-Adresse zugeordnet.'; +$string['backpackemailverificationpending'] = 'Bestätigung ausstehend'; +$string['backpackemailverifyemailbody'] = 'Hallo, + +unter Verwendung Ihrer E-Mail-Adresse wurde von \'{$a->sitename}\' eine neue Verbindung zu Ihrem OpenBadges-Backpack angefordert. Um die Verbindung zu prüfen und zu aktivieren, klicken Sie bitte auf den nachfolgenden Link. + +{$a->link} + +In den meisten E-Mail-Programmen sollte der Link blau und anklickbar sein. Falls das nicht funktioniert, kopieren Sie die Adresse vollständig und fügen Sie sie in die Adresszeile Ihres Webbrowsers ein. + +Wenn Sie Hilfe benötigen, wenden Sie sich an den Administrator der Website, {$a->admin}'; +$string['backpackemailverifyemailsubject'] = '{$a}: E-Mail-Bestätigung für OpenBadges-Backpack'; +$string['backpackemailverifypending'] = 'Eine Bestätigungsmitteilung wurde an {$a} versendet. Klicken Sie auf den Bestätigungslink in der E-Mail, um die Backpack-Verbindung zu aktivieren.'; +$string['backpackemailverifysuccess'] = 'Danke für die Bestätigung Ihrer E-Mail-Adresse. Sie sind jetzt mit Ihrem Backpack verbunden.'; +$string['backpackemailverifytokenmismatch'] = 'Der Token in dem von Ihnen angeklickten Link stimmt nicht mit dem gespeicherten Token überein. Prüfen Sie, ob Sie wirklich den Link in der aktuellsten E-Mail angeklickt haben.'; $string['backpackimport'] = 'Importeinstellungen'; $string['backpackimport_help'] = 'Wenn die Verbindung zum Backpack erfolgreich hergestellt ist, können Auszeichnungen aus Ihrem Backpack auf Ihrer Seite \'Meine Auszeichnungen\' und in Ihrem Nutzerprofil angezeigt werden. diff --git a/html/moodle2/langpacks/de/block_completion_progress.php b/html/moodle2/langpacks/de/block_completion_progress.php index b063629bd4..dca2961636 100644 --- a/html/moodle2/langpacks/de/block_completion_progress.php +++ b/html/moodle2/langpacks/de/block_completion_progress.php @@ -73,7 +73,7 @@ $string['how_selectactivities_works'] = 'Wie das Einbeziehen von Aktivitäten funktioniert'; $string['how_selectactivities_works_help'] = '

Um die Aktivitäten, die in die Leiste aufgenommen werden sollen, manuell auszuwählen, stellen Sie sicher, dass die Option "eingefügte Aktivitäten" auf "ausgewählte Aktivitäten" gesetzt ist.

Es können nur Aktivitäten mit aktiviertem Aktivitätsabschluss eingefügt werden.

Halten Sie die STRG-Taste gedrückt, um mehrere Aktivitäten auszuwählen.

'; $string['lastonline'] = 'Letzte im Kurs'; -$string['mouse_over_prompt'] = 'Fahren Sie für Mehr Infos mit der Maus über den Balken oder klicken einzelne Blöcke an.'; +$string['mouse_over_prompt'] = 'Fahren Sie für mehr Infos mit der Maus über den Balken oder klicken einzelne Blöcke an.'; $string['no_activities_config_message'] = 'Es gibt keine Aktivitäten oder Ressourcen mit Aktivitätsabschluss? Aktivieren Sie den Aktivitätsabschluss für Aktivitäten und Ressourcen, konfigurieren Sie anschließend diesen Block.'; $string['no_activities_message'] = 'Es werden keine Aktivitäten oder Ressourcen beobachtet? Stellen Sie dies in den Einstellungen ein.'; $string['no_blocks'] = 'Es ist kein Bearbeitungsstatus-Block für Ihre Kurse aktiviert.'; diff --git a/html/moodle2/langpacks/de/enrol_imsenterprise.php b/html/moodle2/langpacks/de/enrol_imsenterprise.php index 405e13c668..df74dea1a5 100644 --- a/html/moodle2/langpacks/de/enrol_imsenterprise.php +++ b/html/moodle2/langpacks/de/enrol_imsenterprise.php @@ -32,15 +32,15 @@ $string['coursesettings'] = 'Kurseinstellungen'; $string['createnewcategories'] = 'Neue (verborgene) Kurskategorien anlegen, wenn nicht in Moodle gefunden'; $string['createnewcategories_desc'] = 'Wenn das Element in der importierten Datei enthalten ist, wird es benutzt um einen Kurs einer Kurskategorie zuzuordnen, sofern der Kurs neu angelegt wird. Bereits bestehende Kurse werden dadurch NICHT verschoben. -Wenn keine Kategorie mit dem Namen existiert wird diese neu als verborgene Kategorie angelegt.'; +Wenn keine Kategorie mit dem Namen existiert, wird diese neu als verborgene Kategorie angelegt.'; $string['createnewcourses'] = 'Erstelle neue (verborgene) Kurse, wenn nicht in Moodle gefunden'; $string['createnewcourses_desc'] = 'Funktion: Das IMS-Einschreibungsplugin kann neue Kurse anlegen wenn es diese in der IMS Datei, nicht aber in der Moodle-Datenbank findet. Jeder neue Kurs wird so angelegt, dasser für Teilnehmer nicht verfügbar ist. '; $string['createnewusers'] = 'Erstelle neue Nutzerzugänge, wenn Nutzer noch nicht in Moodle registriert'; $string['createnewusers_desc'] = 'Die IMS Enterprise Einschreibungsdatei enthält in der Regel eine Liste von Teilnehmer/innen. Mit der Funktion kann für Personen, die noch nicht in Moodle registriert sind, ein Nutzerkonto angelegt werden. Teilnehmer/innen werden zunächst aufgrund der ID-Nummer und dann nach dem Anmeldenamen in Moodle gesucht. Aus dem IMS Enterprise Plugin werden keine Kennwörter importiert. Hierfür wird die Nutzung eines Authentifizierungsplugin empfohlen.'; $string['cronfrequency'] = 'Häufigkeit des Prozesses'; -$string['deleteusers'] = 'Nutzerzugänge löschen, wenn in IMS-Daten definiert'; -$string['deleteusers_desc'] = 'Funktion: Mitden IMS Enterprise Einschreibungsdaten kann mann auch Nutzeraccounts löschen wenn der "recstatus" auf auf \'3\' gesetzt wird. In Moodle wird der Datensatz des Nutzers dann nicht gelöscht, sondern der Flag auf gelöscht gesetzt.'; +$string['deleteusers'] = 'Nutzerzugänge löschen, falls so in IMS-Daten definiert'; +$string['deleteusers_desc'] = 'Funktion: Mit den IMS-Enterprise-Einschreibungsdaten kann man auch Nutzeraccounts löschen, indem der "recstatus" auf auf \'3\' gesetzt wird. In Moodle wird der Datensatz des Nutzers dann nicht gelöscht, sondern der Flag auf gelöscht gesetzt.'; $string['doitnow'] = 'IMS Enterprise Import jetzt durchführen'; $string['emptyattribute'] = 'Leer lassen'; $string['filelockedmail'] = 'Die Textdatei ({$a}), die für das IMS-Datei-basierte Kurs-Anmeldeverfahren genutzt wird, konnte vom Cron-Prozess nicht gelöscht werden. Das bedeutet normalerweise, dass die Dateirechte fehlerhaft sind. Bitte prüfen Sie die Rechte, damit Moodle die Datei löschen kann. Andernfalls wird der Vorgang immer wiederholt.'; @@ -73,11 +73,11 @@ $string['settingsummary'] = 'IMS Beschreibungs-Tag für die Kursbeschreibung'; $string['settingsummarydescription'] = 'Dies ist ein optionales Feld. Es kann auf Wunsch leer bleiben.'; $string['sourcedidfallback'] = '"sourcedid" statt "userid" für die Nutzer-ID verwenden, wenn das Feld "userid" nicht gefunden wird'; -$string['sourcedidfallback_desc'] = 'Im IMS Datensatz wird im Feld die dauerhafte persönliche ID -Bezeichnung des Nutzers aus dem Ursprungssystem hinterlegt. Das Feld ist ein zusätzliches Feld und enthält einen ID Code mit dem der Nutzer sich einloggen kann. Manchmal - jedoch nicht immer - sind die Einträge identisch. +$string['sourcedidfallback_desc'] = 'Im IMS Datensatz wird im -Feld die dauerhafte persönliche ID-Bezeichnung des Nutzers aus dem Ursprungssystem hinterlegt. Das -Feld ist ein zusätzliches Feld und enthält einen ID-Code, mit dem der Nutzer sich einloggen kann. Manchmal – jedoch nicht immer – sind die Einträge identisch. -Einige Nutzerverwaltungssysteme haben Probleme beim Export des Feldes. In solch einem Fall aktivieren Sie diese Einstellung, damit Moodle den Inhalt des Feldes als Moodle Nutzer-ID verwendet. Ist das nicht der Fall, lassen Sie die Funktion deaktiviert.'; +Einige Nutzerverwaltungssysteme haben Probleme beim Export des -Feldes. In solch einem Fall aktivieren Sie diese Einstellung, damit Moodle den Inhalt des Feldes als Moodle-Nutzer-ID verwendet. Ist das nicht der Fall, lassen Sie die Funktion deaktiviert.'; $string['truncatecoursecodes'] = 'Kurscode nach dieser Zeichenzahl abschneiden'; -$string['truncatecoursecodes_desc'] = 'Manchmal ist es gewünscht die Länge des Kurscodes zu verkürzen. Geben Sie dazu hier einen Wert ein, der die maximale Länge des Kurscodes bestimmt. Andernfalls lassen Sie das Feld leer.'; +$string['truncatecoursecodes_desc'] = 'Manchmal ist es gewünscht, die Länge des Kurscodes zu verkürzen. Geben Sie dazu hier einen Wert ein, der die maximale Länge des Kurscodes bestimmt. Andernfalls lassen Sie das Feld leer.'; $string['usecapitafix'] = 'Box anklicken, wenn "Großbuchstaben" verwendet werden (XML-Format ist fehlerhaft)'; $string['usecapitafix_desc'] = 'Nur für Nutzer des Teilnehmerverwaltungssystem CAPITA: Der XML Output von Capita enthält einen Fehler. Bei Verwendung von Capita sollte diese Einstellung deaktiviert sein.'; $string['usersettings'] = 'Nutzerdateneinstellungen'; diff --git a/html/moodle2/langpacks/de/folder.php b/html/moodle2/langpacks/de/folder.php index ab71ac865d..81cf6ac496 100644 --- a/html/moodle2/langpacks/de/folder.php +++ b/html/moodle2/langpacks/de/folder.php @@ -34,8 +34,8 @@ $string['displaypage'] = 'Auf separater Seite'; $string['dnduploadmakefolder'] = 'Dateien entpacken und Verzeichnisse anlegen'; $string['downloadfolder'] = 'Verzeichnis herunterladen'; -$string['eventallfilesdownloaded'] = 'ZIP-Archiv des Verzeichnisses heruntergeladen'; -$string['eventfolderupdated'] = 'Verzeichnis aktualisiert'; +$string['eventallfilesdownloaded'] = 'Verzeichnis wurde heruntergeladen'; +$string['eventfolderupdated'] = 'Verzeichnis wurde aktualisiert'; $string['folder:addinstance'] = 'Verzeichnis hinzufügen'; $string['foldercontent'] = 'Dateien und Unterverzeichnisse'; $string['folder:managefiles'] = 'Dateien im Verzeichnis verwalten'; @@ -53,7 +53,7 @@ $string['pluginadministration'] = 'Verzeichnis-Administration'; $string['pluginname'] = 'Verzeichnis'; $string['search:activity'] = 'Verzeichnis'; -$string['showdownloadfolder'] = 'Herunterladen von Verzeichnissen anzeigen'; +$string['showdownloadfolder'] = 'Taste \'Verzeichnis herunterladen\' anzeigen'; $string['showdownloadfolder_help'] = 'Wenn Sie für diese Option \'Ja\' wählen, wird eine Taste zum Herunterladen des Verzeichnisinhalts als ZIP-Archiv angezeigt.'; $string['showexpanded'] = 'Unterverzeichnisse aufgeklappt anzeigen'; $string['showexpanded_help'] = 'Wenn diese Option aktiviert ist, werden Unterverzeichnisse standardmäßig geöffnet dargestellt.'; diff --git a/html/moodle2/langpacks/de/hvp.php b/html/moodle2/langpacks/de/hvp.php new file mode 100644 index 0000000000..646c92ce4e --- /dev/null +++ b/html/moodle2/langpacks/de/hvp.php @@ -0,0 +1,245 @@ +. + +/** + * Strings for component 'hvp', language 'de', branch 'MOODLE_31_STABLE' + * + * @package hvp + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['action'] = 'Aktion'; +$string['addedandupdatelibraries'] = '{$a->%new} neue H5P-Bibliotheken hinzugefügt und {$a->%old} alte aktualisiert'; +$string['addednewlibraries'] = '{$a->%new} neue H5P-Bibliotheken hinzugefügt'; +$string['addlibraries'] = 'Bibliotheken hinzufügen'; +$string['ajaxfailed'] = 'Fehler beim Laden der Daten'; +$string['attribution'] = 'Namensnennung 4.0'; +$string['attributionnc'] = 'Namensnennung - nicht kommerziell 4.0'; +$string['attributionncnd'] = 'Namensnennung - nicht kommerziell - keine Bearbeitung 4.0'; +$string['attributionncsa'] = 'Namensnennung - nicht kommerziell - Weitergabe unter gleichen Bedingungen 4.0'; +$string['attributionnd'] = 'Namensnennung - keine Bearbeitung 4.0'; +$string['attributionsa'] = 'Namensnennung - Weitergabe unter gleichen Bedingungen 4.0'; +$string['author'] = 'Autor/in'; +$string['availableversion'] = 'Verfügbare Aktualisierung'; +$string['cancellabel'] = 'Abbrechen'; +$string['close'] = 'Schließen'; +$string['confirmdialogbody'] = 'Fortfahren? Dieser Vorgang kann nicht rückgängig gemacht werden.'; +$string['confirmdialogheader'] = 'Aktion bestätigen'; +$string['confirmlabel'] = 'Bestätigen'; +$string['contentchanged'] = 'Dieser Inhalt wurde seit Ihrer letzten Nutzung geändert.'; +$string['contentstatefrequency'] = 'Inhalte regelmäßig speichern'; +$string['contentstatefrequency_help'] = 'Sekunden. Wie häufig soll der Arbeitsfortschritt automatisch gesichert werden? Erhöhen Sie die Zahl, wenn Sie Vorgänge mit vielen Ajax-Anfragen haben.'; +$string['copyright'] = 'Nutzungsbedingungen'; +$string['copyrightinfo'] = 'Informationen zum Copyright'; +$string['copyrightstring'] = 'Copyright'; +$string['copyrighttitle'] = 'Informationen zum Urheberrecht für diesen Inhalt anzeigen'; +$string['couldnotcopy'] = 'Die Datei konnte nicht kopiert werden.'; +$string['couldnotsave'] = 'Die Datei konnte nicht gespeichert werden.'; +$string['create'] = 'Anlegen'; +$string['currentpage'] = 'Seite $current von $total'; +$string['currentversion'] = 'Gerade in Arbeit'; +$string['disablefileextensioncheck'] = 'Prüfung für Dateiendungen deaktivieren'; +$string['disablefileextensioncheckwarning'] = 'Achtung! Sobald die Prüfung für Dateiendungen deaktiviert ist, könnte dies ein Sicherheitsproblem darstellen, weil damit z.B. das Hochladen von PHP-Dateien erlaubt wird. Auf diese Weise könnte Ihre Website mit bösartigem Code angegriffen werden. Stellen Sie sicher, dass Sie genau wissen, was Sie hochladen.'; +$string['disablefullscreen'] = 'Vollbildschirm deaktivieren'; +$string['displayoptionalwaysshow'] = 'Immer anzeigen'; +$string['displayoptionauthoroff'] = 'Gesteuert durch Autor/in, standardmäßig aus'; +$string['displayoptionauthoron'] = 'Gesteuert durch Autor/in, standardmäßig an'; +$string['displayoptionnevershow'] = 'Nie anzeigen'; +$string['displayoptionpermissions'] = 'Nur anzeigen, wenn Nutzer/in das Recht zum H5P-Export hat.'; +$string['displayoptions'] = 'Anzeigeeinstellungen'; +$string['download'] = 'Herunterladen'; +$string['downloadandupdate'] = 'Herunterladen & Aktualisieren'; +$string['downloadtitle'] = 'Diesen Inhalt als H5P-Datei herunterladen.'; +$string['editor'] = 'Editor'; +$string['embed'] = 'Einbetten'; +$string['embedtitle'] = 'Einbett-Code für diesen Inhalt anzeigen'; +$string['empty'] = 'Keine Ergebnisse verfügbar'; +$string['enableabout'] = 'Taste \'Über H5P\''; +$string['enablecopyright'] = 'Taste Copyright'; +$string['enabledlrscontenttypes'] = 'LRS-abhängige Inhaltstypen aktivieren'; +$string['enabledlrscontenttypes_help'] = 'Diese Option legt fest, dass auch Inhaltstypen verwendet werden können, die von einem Learning Record Store (LRS) abhängig sind, um richtig zu funktionieren, wie z.B. der Inhaltstyp \'Questionnaire\'.'; +$string['enabledownload'] = 'Taste Herunterladen'; +$string['enableembed'] = 'Taste Einbetten'; +$string['enableframe'] = 'Aktionsleiste und Rahmen anzeigen'; +$string['enablejavascript'] = 'Sie müssen Javascript im Browser aktivieren!'; +$string['enablesavecontentstate'] = 'Inhaltsstatus speichern'; +$string['enablesavecontentstate_help'] = 'Der jeweilige Status für die interaktiven Inhalte wird für alle Nutzer/innen automatisch gesichert, so dass alle genau dort weitermachen können, wo sie aufgehört haben.'; +$string['externalcommunication'] = 'Externe Kommunikation'; +$string['externalcommunication_help'] = 'Für die Entwicklung von H5P ist es wichtig, anonyme Nutzungsdaten zu bekommen. Wenn diese Option deaktiviert ist, können keine H5P-Aktualisierungen geladen werden.. Informationen zu den übermittelten Daten finden Sie auf h5p.org.'; +$string['filenotimage'] = 'Die Datei ist kein Bild.'; +$string['filetypenotallowed'] = 'Der Dateityp ist nicht erlaubt.'; +$string['finished'] = 'Beendet'; +$string['fullscreen'] = 'Vollbildschirm'; +$string['gpl'] = 'General Public License v3'; +$string['h5pfile'] = 'H5P-Datei'; +$string['h5ptitle'] = 'Besuchen Sie H5P.org, um weitere coole Möglichkeiten kennenzulernen.'; +$string['hideadvanced'] = 'Erweiterungen verbergen'; +$string['hvp:addinstance'] = 'Neue H5P-Aktivität hinzufügen'; +$string['hvp:getcachedassets'] = 'H5P-Inhalte aus dem Cache holen'; +$string['hvp:getcontent'] = 'Inhalt der H5P-Datei im Kurs anzeigen'; +$string['hvp:getexport'] = 'H5P-Inhalt im Kurs als Datei exportieren'; +$string['hvp:restrictlibraries'] = 'H5P-Bibliothek beschränken'; +$string['hvp:savecontentuserdata'] = 'H5P-Nutzerdaten speichern'; +$string['hvp:saveresults'] = 'H5P-Ergebnis speichern'; +$string['hvp:updatelibraries'] = 'H5P-Bibliothek aktualisieren'; +$string['hvp:updatesavailable'] = 'Benachrichtigen, wenn H5P-Aktualisierungen verfügbar sind.'; +$string['hvp:userestrictedlibraries'] = 'Beschränkte H5P-Bibliotheken verwenden'; +$string['hvp:viewresults'] = 'Ergebnis für den H5P-Inhalt anzeigen'; +$string['installedlibraries'] = 'Installierte Bibliotheken'; +$string['intro'] = 'Beschreibung'; +$string['invalidaudioformat'] = 'Ungültiges Audioformate. Nur mp3 und wav sind erlaubt.'; +$string['invalidcontentfolder'] = 'Ungültiges Verzeichnis'; +$string['invalidfieldtype'] = 'Ungültiger Feldtyp'; +$string['invalidfile'] = 'Die Datei \'{$a->%filename}\' ist nicht erlaubt. Nur Dateien mit den folgenden Dateiendungen sind möglich: {$a->%files-allowed}.'; +$string['invalidimageformat'] = 'Ungültiges Bildformat (nur jpg, png oder gif)'; +$string['invalidlanguagefile'] = 'Ungültige Sprachdatei {$a->%file} in der Bibliothek {$a->%library}'; +$string['invalidlanguagefile2'] = 'Ungültige Sprachdatei {$a->%file} wurde in die Bibliothek {$a->%library} einbezogen.'; +$string['invalidlibrary'] = 'Die H5P-Bibliothek \'{$a->%library}\', die für den Inhalt verwendet wird, ist ungültig.'; +$string['invalidlibrarydata'] = 'Ungültige Daten für {$a->%property} in {$a->%library} bereitgestellt'; +$string['invalidlibrarydataboolean'] = 'Ungültige Daten für {$a->%property} in {$a->%library} bereitgestellt. Wahrheitswert erwartet.'; +$string['invalidlibraryname'] = 'Ungültiger Bibliotheksname: {$a->%name}'; +$string['invalidlibraryoption'] = 'Illegale Option {$a->%option} in {$a->%library}'; +$string['invalidlibraryproperty'] = 'Die Eigenschaft {$a->%property} in {$a->%library} kann nicht gelesen werden.'; +$string['invalidmainjson'] = 'Eine gültige Hauptdatei h5p.json fehlt.'; +$string['invalidmultiselectoption'] = 'Ungültige Auswahloption in der Mehrfachauswahl'; +$string['invalidparameters'] = 'Ungültige Parameter'; +$string['invalidselectoption'] = 'Ungültige Auswahloption in der Auswahl'; +$string['invalidsemanticsjson'] = 'Ungültige Datei semantics.json wurde in die Bibliothek {$a->%name} einbezogen.'; +$string['invalidsemanticstype'] = 'Interner H5P-Fehler: unbekannter Inhaltstyp \'{$a->@type}\' in der Semantik. Der Inhalt wird entfernt!'; +$string['invalidstring'] = 'Bereitgestellter Text ist passt nicht zu regexp in der Semantik. (value: \\"{$a->%value}\\", regexp: \\"{$a->%regexp}\\")'; +$string['invalidtoken'] = 'Ungültiges Sicherheitstoken'; +$string['invalidvideoformat'] = 'Ungültiges Videoformat (nur mp4 oder webm)'; +$string['javascriptloading'] = 'Auf Javascript warten ...'; +$string['libraries'] = 'H5P-Bibliotheken'; +$string['librarydirectoryerror'] = 'Der Name des Bibliotheksverzeichnisses muss machineName oder machineName-majorVersion.minorVersion (von library.json) lauten. (Verzeichnis: {$a->%directoryName}, machineName: {$a->%machineName}, majorVersion: {$a->%majorVersion}, minorVersion: {$a->%minorVersion})'; +$string['librarylistactions'] = 'Aktionen'; +$string['librarylistinstancedependencies'] = 'Instanzabhängigkeiten'; +$string['librarylistinstances'] = 'Instanzen'; +$string['librarylistlibrarydependencies'] = 'Bibliotheksabhängigkeiten'; +$string['librarylistrestricted'] = 'Eingeschränkt'; +$string['librarylisttitle'] = 'Name'; +$string['license'] = 'Lizenz'; +$string['loadingdata'] = 'Daten laden'; +$string['lookforupdates'] = 'H5P-Aktualisierungen suchen'; +$string['maximumgrade'] = 'Höchstbewertung'; +$string['maximumgradeerror'] = 'Geben Sie eine gültige positive Ganzzahl als Höchstpunktzahl für die Aktivität an.'; +$string['maxscore'] = 'Höchstwertung'; +$string['messageprovider:updates'] = 'Mitteilung für verfügbare H5P-Aktualisierungen'; +$string['missingcontentfolder'] = 'Ein gültiges Verzeichnis fehlt'; +$string['missingcontentuserdata'] = 'Fehler: Der Inhalt der Nutzerdaten konnte nicht gefunden werden'; +$string['missingcoreversion'] = 'Das System kann die Komponente \'{$a->%component}\' nicht aus dem Paket installieren, weil dafür eine neuere Version des H5P-Plugins notwendig ist. Die Website arbeitet momentan mit der Version {$a->%current}, notwendig ist die Version {$a->%required} oder höher. Sie sollten es nach einer Aktuallisierung noch einmal versuchen.'; +$string['missingdependency'] = 'Fehlende Abhängigkeit {$a->@dep} wird von {$a->@lib} benötigt.'; +$string['missingh5purl'] = 'Fehlende URL für H5P-Datei'; +$string['missinglibrary'] = 'Benötigte Bibliothek {$a->@library} fehlt'; +$string['missinglibraryfile'] = 'Die Datei \'{$a->%file}\' fehlt in der Bibliothek: \'{$a->%name}\''; +$string['missinglibraryjson'] = 'Die Datei library.json mit gültigem json-Format für die Bibliothek {$a->%name} konnte nicht gefunden werden'; +$string['missinglibraryproperty'] = 'Die benötigte Eigenschaft {$a->%property} fehlt in {$a->%library}'; +$string['missingmbstring'] = 'Die PHP Extension \'mbstring\' ist nicht geladen. Deswegen funktioniert H5P nicht richtig.'; +$string['missingparameters'] = 'Fehlende Parameter'; +$string['missinguploadpermissions'] = 'Hinweis: Die Bibliotheken mögen in der hochgeladenen Datei enthalten sein, aber Sie haben nicht die nötigen Rechte, um neue Bibliotheken hochzuladen. Bitte kontaktieren Sie dazu den Administrator.'; +$string['modulename'] = 'Interaktiver Inhalt'; +$string['modulename_help'] = 'Die H5P-Aktivität ermöglicht das Erstellen von interaktiven Inhalten wie interaktiven Videos, Fragebögen, Drag-and-Drop-Fragen, Multiple-Choice-Fragen, Präsentationen und vieles mehr. + +Zusätzlich zu den Funktionen als Autorentool für Rich Content, ermöglicht H5P es, H5P-Dateien zu importieren und exportieren, um Inhalte effektiv zu teilen und wiederzuverwenden. + +Nutzerinteraktionen und Punktzahlen werden mittels der xAPI verfolgt und sind über die Moodle-Bewertungen verfügbar. + +Interaktive H5P-Inhalte können durch das Hochladen einer H5P-Datei hinzugefügt werden. Sie können H5P-Dateien auf der Website h5p.org erstellen und herunterladen.'; +$string['modulenameplural'] = 'Interaktiver Inhalt'; +$string['nextpage'] = 'Nächste Seite'; +$string['nocontent'] = 'Die content.json-Datei konnte nicht gefunden oder analysiert werden'; +$string['nocopyright'] = 'Für diesen Inhalt sind keine Informationen zum Urheberrecht verfügbar.'; +$string['nodata'] = 'Es sind keine Daten vorhanden, die Ihren Kriterien entsprechen.'; +$string['noextension'] = 'Die hochgeladene Datei ist kein gültiges H5P-Paket (keine Dateiendung h5p).'; +$string['noh5ps'] = 'Für diesen Kurs ist kein interaktiver Inhalt verfügbar.'; +$string['nojson'] = 'Die Hauptdatei h5p.json ist nicht gültig.'; +$string['noparameters'] = 'Keine Parameter'; +$string['noparse'] = 'Die Hauptdatei h5p.json konnte nicht gelesen werden.'; +$string['nopermissiontorestrict'] = 'Sie haben nicht das Recht, Bibliotheken zu beschränken.'; +$string['nopermissiontosavecontentuserdata'] = 'Sie haben nicht das Recht, Nutzerdaten für diesen Inhalt zu speichern.'; +$string['nopermissiontosaveresult'] = 'Sie haben nicht das Recht, Ergebnisse für diesen Inhalt zu speichern.'; +$string['nopermissiontoupgrade'] = 'Sie haben nicht das Recht, Bibliotheken zu aktualisieren.'; +$string['nopermissiontoviewresult'] = 'Sie haben nicht das Recht, Ergebnisse für diesen Inhalt anzuzeigen.'; +$string['nosuchlibrary'] = 'Keine solche Bibliothek'; +$string['notapplicable'] = 'N/A'; +$string['nounzip'] = 'Die hochgeladene Datei ist kein gültiges HTML5-Paket (die Datei kann nicht entpackt werden)'; +$string['noziparchive'] = 'Ihre PHP-Version unterstützt nicht ZipArchive.'; +$string['onlyupdate'] = 'Nur vorhandene Bibliotheken aktualisieren'; +$string['options'] = 'Optionen'; +$string['pd'] = 'Public Domain'; +$string['pddl'] = 'Public Domain Dedication and Licence'; +$string['pdm'] = 'Public Domain Mark'; +$string['pluginadministration'] = 'H5P'; +$string['pluginname'] = 'H5P'; +$string['previouspage'] = 'Vorherige Seite'; +$string['removeoldlogentries'] = 'Alte H5P-Logdaten löschen'; +$string['removetmpfiles'] = 'Alte H5P-Temporärdateien löschen'; +$string['resizescript'] = 'Fügen Sie dieses Skript auf Ihrer Webseite ein, wenn Sie eine dynamische Größe von dem eingebetteten Inhalt möchten:'; +$string['score'] = 'Wertung'; +$string['search'] = 'Suchen'; +$string['settings'] = 'H5P-Einstellungen'; +$string['showadvanced'] = 'Erweitert anzeigen'; +$string['size'] = 'Größe'; +$string['source'] = 'Quelle'; +$string['startingover'] = 'Sie werden weitergeleitet.'; +$string['thumbnail'] = 'Vorschaubild'; +$string['title'] = 'Name'; +$string['unabletocreatedir'] = 'Verzeichnis konnte nicht angelegt werden.'; +$string['unabletodownloadh5p'] = 'H5P-Datei konnte nicht heruntergeladen werden.'; +$string['unabletogetfieldtype'] = 'Feldtyp konnte nicht ermittelt werden.'; +$string['undisclosed'] = 'Unbestimmt'; +$string['updatedlibraries'] = '{$a->%old} H5P-Bibliotheken aktualisiert'; +$string['updatelibraries'] = 'Alle Bibliotheken aktualisieren'; +$string['updatesavailable'] = 'Für Ihre H5P-Inhaltstypen sind Aktualisierungen verfügbar.'; +$string['updatesavailablemsgpt1'] = 'Für die auf Ihrer Website installierten H5P-Inhaltstypen sind Aktualisierungen verfügbar.'; +$string['updatesavailablemsgpt2'] = 'Gehen Sie auf die unten stehende Seite für weitere Anweisungen.'; +$string['updatesavailablemsgpt3'] = 'Die aktuelle Version ist von: {$a}'; +$string['updatesavailablemsgpt4'] = 'Sie arbeiten mit einer Version von: {$a}'; +$string['updatesavailabletitle'] = 'Neue H5P-Aktualisierungen sind verfügbar'; +$string['upgrade'] = 'H5P aktualisieren'; +$string['upgradebuttonlabel'] = 'Aktualisieren'; +$string['upgradedone'] = 'Sie haben erfolgreich {$a} Inhaltsinstanz(en) aktualisiert.'; +$string['upgradeerror'] = 'Fehler bei der Parameterverarbeitung:'; +$string['upgradeerrorcontent'] = 'Inhalt %id konnte nicht aktualisiert werden.'; +$string['upgradeerrordata'] = 'Daten für die Bibliothek %lib konten nicht geladen werden.'; +$string['upgradeerrorparamsbroken'] = 'Parameter sind beschädigt.'; +$string['upgradeerrorscript'] = 'Aktualisierungsscript für %lib konnte nicht geladen werden.'; +$string['upgradeheading'] = '{$a} Inhalt aktualiseren'; +$string['upgradeinprogress'] = 'Aktualisierung auf %ver ...'; +$string['upgradeinvalidtoken'] = 'Fehler: Ungültiges Sicherheitstoken!'; +$string['upgradelibrarycontent'] = 'Bibliotheksinhalt aktualisieren'; +$string['upgradelibrarymissing'] = 'Fehler: Ihre Bibliothek fehlt!'; +$string['upgrademessage'] = 'Sie sind dabei, {$a} Inhaltsinstanz(en) zu aktualisieren. Wählen Sie eine Aktualisierungsversion.'; +$string['upgradenoavailableupgrades'] = 'Keine Aktualisierung für diese Bibliothek verfügbar.'; +$string['upgradenothingtodo'] = 'Keine Inhaltsinstanz zum Aktualisieren'; +$string['upgradereturn'] = 'Zurück'; +$string['upload'] = 'Hochladen'; +$string['uploadlibraries'] = 'Bibliotheken hochladen'; +$string['usebuttonbelow'] = 'Sie können die Taste verwenden, um automatisch alle Ihre Inhaltstypen herunterzuladen und zu aktualisieren.'; +$string['user'] = 'Nutzer/in'; +$string['welcomecommunity'] = 'Wir hoffen, dass Sie H5P mögen und die wachsende Community unterstützen, indem Sie unsere forums}>Foren und den Chat gitter}>H5P at Gitter besuchen.'; +$string['welcomecontactus'] = 'Falls Sie ein Feedback geben möchten, nehmen Sie Kontakt mit uns auf. Wir nehmen jedes Feedback sehr ernst und arbeiten daran, H5P jeden Tag besser zu machen!'; +$string['welcomegettingstarted'] = 'Um mit H5P und Moodle einfach anzufangen, schauen Sie sich unser moodle_tutorial}>Tutorial an und laden Sie sich example_content}>Beispielinhalte als Anregungen von H5P.org herunter. Die am meisten nachgefragten Inhaltstypen wurden bereits installiert.'; +$string['welcomeheader'] = 'Willkommen in der Welt von H5P!'; +$string['whyupdatepart1'] = 'Sie können nachlesen, warum Aktualisierungen wichtig sind, wenn Sie die Seite H5P-Aktualisierungen aufrufen.'; +$string['whyupdatepart2'] = 'Die Seite listet außerdem auch die verschiedenen Änderungsprotokolle auf, wo Sie über die eingeführten neuen Funktionen und die behobenen Probleme nachlesen können.'; +$string['wrongversion'] = 'Die für diesen Inhalt verwendete Version der H5P-Bibliothek {$a->%machineName} ist ungültig. Der Inhalt benutzt {$a->%contentLibrary}, aber es sollte {$a->%semanticsLibrary} sein.'; +$string['year'] = 'Jahr'; +$string['years'] = 'Jahr(e)'; diff --git a/html/moodle2/langpacks/de/moodle.php b/html/moodle2/langpacks/de/moodle.php index 49af2f56a7..8e39fa840a 100644 --- a/html/moodle2/langpacks/de/moodle.php +++ b/html/moodle2/langpacks/de/moodle.php @@ -40,7 +40,7 @@ $string['activitymodules'] = 'Aktivitäten'; $string['activityreport'] = 'Aktivitäten'; $string['activityreports'] = 'Aktivitäten'; -$string['activityselect'] = 'Wählen Sie eine Aktivität aus, um sie zu verschieben'; +$string['activityselect'] = 'Wählen Sie diese Aktivität aus, um sie zu verschieben.'; $string['activitysince'] = 'Aktivität seit {$a}'; $string['activitytypetitle'] = '{$a->activity} - {$a->type}'; $string['activityweighted'] = 'Aktivitäten pro Nutzer/in'; @@ -84,7 +84,7 @@ $string['adminhelpassigncreators'] = 'Kursersteller/innen dürfen neue Kurse anlegen'; $string['adminhelpassignsiteroles'] = 'Definierte Rollen der Website auf ausgewählte Nutzer/innen anwenden'; $string['adminhelpassignstudents'] = 'Gehen Sie in einen Kurs und fügen Sie die Teilnehmer/innen über den Administrationsblock hinzu.'; -$string['adminhelpauthentication'] = 'Sie können interne Nutzerkonten oder externe Datenbanken verwenden'; +$string['adminhelpauthentication'] = 'Sie können interne Nutzerkonten oder externe Datenbanken verwenden.'; $string['adminhelpbackup'] = 'Datensicherung konfigurieren'; $string['adminhelpconfiguration'] = 'Aussehen und Aufbau der Website konfigurieren'; $string['adminhelpconfigvariables'] = 'Grundeinstellungen der Website konfigurieren'; @@ -176,7 +176,7 @@ $string['backup'] = 'Sicherung'; $string['backupactivehelp'] = 'Automatische Sicherungen aktivieren'; $string['backupcancelled'] = 'Sicherung abgebrochen'; -$string['backupcoursefileshelp'] = 'Wenn diese Option aktiviert ist, werden die Kursdateien in die automatische Sicherung einbezogen'; +$string['backupcoursefileshelp'] = 'Wenn diese Option aktiviert ist, werden die Kursdateien in die automatische Sicherung einbezogen.'; $string['backupdate'] = 'Sicherungsdatum'; $string['backupdatenew'] = '  {$a->TAG} ist jetzt {$a->weekday}, {$a->mday} {$a->month} {$a->year}
'; $string['backupdateold'] = '{$a->TAG} war {$a->weekday}, {$a->mday} {$a->month} {$a->year}'; @@ -207,7 +207,7 @@ $string['badges'] = 'Auszeichnungen'; $string['block'] = 'Block'; $string['blockconfiga'] = 'Block \'{$a}\' konfigurieren'; -$string['blockconfigbad'] = 'Dieser Block wurde nicht richtig implementiert, so dass die Konfigurationsseite nicht angezeigt werden kann'; +$string['blockconfigbad'] = 'Dieser Block wurde nicht richtig implementiert, so dass die Konfigurationsseite nicht angezeigt werden kann.'; $string['blocks'] = 'Blöcke'; $string['blocksaddedit'] = 'Blöcke hinzufügen/bearbeiten'; $string['blockseditoff'] = 'Blockbearbeitung ausschalten'; @@ -328,11 +328,11 @@ $string['coursecompletion'] = 'Kursabschluss'; $string['coursecompletions'] = 'Kursabschlüsse'; $string['coursecreators'] = 'Kursersteller/in'; -$string['coursecreatorsdescription'] = 'Kursersteller/innen dürfen neue Kurse anlegen'; +$string['coursecreatorsdescription'] = 'Kursersteller/innen dürfen neue Kurse anlegen.'; $string['coursedeleted'] = 'Gelöschter Kurs {$a}'; $string['coursedetails'] = 'Kursdetails'; $string['coursedisplay'] = 'Kursdarstellung'; -$string['coursedisplay_help'] = 'Diese Option legt fest, ob der Kurs auf einer Seite angezeigt oder über mehrere Seiten verteilt wird.'; +$string['coursedisplay_help'] = 'Diese Option legt fest, ob der Kurs auf einer Seite oder über mehrere Seiten verteilt angezeigt wird.'; $string['coursedisplay_multi'] = 'Nur ein Abschnitt pro Seite'; $string['coursedisplay_single'] = 'Alle Abschnitte auf einer Seite'; $string['courseextendednamedisplay'] = '{$a->shortname} {$a->fullname}'; @@ -345,7 +345,7 @@ $string['courseformats'] = 'Kursformate'; $string['courseformatudpate'] = 'Format aktualisieren'; $string['coursegrades'] = 'Kursbewertung'; -$string['coursehelpcategory'] = 'Kurse in der Kursliste positionieren und den Teilnehmer/innen das Auffinden erleichtern'; +$string['coursehelpcategory'] = 'Kurse in der Kursliste positionieren und den Teilnehmer/innen deren Auffinden erleichtern'; $string['coursehelpforce'] = 'Diese Option legt fest, ob der Gruppenmodus für alle Aktivitäten des Kurses vorgegeben wird.'; $string['coursehelpformat'] = 'Die Kurshauptseite wird in diesem Format angezeigt.'; $string['coursehelphiddensections'] = 'Verborgene Abschnitte können grau angedeutet oder ganz ausgeblendet werden.'; @@ -370,7 +370,7 @@ $string['courseoverviewgraph'] = 'Kursübersichtsgrafik'; $string['courseprofiles'] = 'Kursprofile'; $string['coursereasonforrejecting'] = 'Begründung für die Ablehnung des Kursantrages'; -$string['coursereasonforrejectingemail'] = 'Diese Mitteilung wird per E-Mail an die beantragende Person geschickt'; +$string['coursereasonforrejectingemail'] = 'Diese Mitteilung wird per E-Mail an die beantragende Person geschickt.'; $string['coursereject'] = 'Kursantrag ablehnen'; $string['courserejected'] = 'Der Kursantrag wurde abgelehnt. Eine Mitteilung wurde verschickt.'; $string['courserejectemail'] = 'Der Kursantrag wurde abgelehnt. Die Begründung lautet: @@ -382,7 +382,7 @@ $string['coursereports'] = 'Kursberichte'; $string['courserequest'] = 'Beantragung'; $string['courserequestdetails'] = 'Details zum beantragten Kurs'; -$string['courserequestfailed'] = 'Ihr Kursantrag konnte nicht gespeichert werden'; +$string['courserequestfailed'] = 'Ihr Kursantrag konnte nicht gespeichert werden.'; $string['courserequestintro'] = 'Mit diesem Formular wird die Einrichtung eines neuen Kurses beantragt.
Nur wenn alle Informationen eingetragen sind, kann der Antrag bearbeitet werden.'; $string['courserequestreason'] = 'Begründung des Kursantrags'; $string['courserequestsuccess'] = 'Ihr Kursantrag wurde gespeichert. In Kürze erhalten Sie per E-Mail eine Mitteilung mit einer Entscheidung.'; @@ -482,19 +482,19 @@ $string['deleteallratings'] = 'Alle Bewertungen löschen'; $string['deletecategory'] = 'Kursbereich {$a} löschen'; $string['deletecategorycheck'] = 'Sind Sie wirklich sicher, dass Sie diesen Kursbereich \'{$a}\' vollständig löschen wollen?
Alle Kurse werden in den übergeordneten Kursbereich (falls vorhanden) oder in den Kursbereich \'Verschiedenes\' verschoben.'; -$string['deletecategorycheck2'] = 'Wenn Sie diesen Kursbereich gelöschen, müssen Sie entscheiden, was mit den darin enthaltenen Kursen und Unterbereichen passieren soll.'; +$string['deletecategorycheck2'] = 'Wenn Sie diesen Kursbereich löschen, müssen Sie entscheiden, was mit den darin enthaltenen Kursen und Unterbereichen passieren soll.'; $string['deletecategoryempty'] = 'Dieser Kursbereich ist leer.'; $string['deletecheck'] = '{$a} löschen?'; $string['deletecheckfiles'] = 'Sind Sie wirklich sicher, dass Sie diese Dateien löschen möchten?'; $string['deletecheckfull'] = 'Möchten Sie wirklich das Nutzerkonto \'{$a}\' löschen, inklusive aller Einschreibungen, Aktivitäten und übrigen Daten?'; $string['deletechecktype'] = 'Möchten Sie \'{$a->type}\' wirklich löschen?'; $string['deletechecktypename'] = 'Möchten Sie das {$a->type}-Element \'{$a->name}\' wirklich löschen?'; -$string['deletecheckwarning'] = 'Sie sind dabei, diese Dateien zu löschen'; +$string['deletecheckwarning'] = 'Sie sind dabei, diese Dateien zu löschen.'; $string['deletecomment'] = 'Kommentar löschen'; $string['deletecommentbyon'] = 'Kommentar löschen, der von {$a->user} am {$a->time} gepostet wurde'; $string['deletecompletely'] = 'Vollständig löschen'; $string['deletecourse'] = 'Kurs löschen'; -$string['deletecoursecheck'] = 'Sind Sie sich wirklich sicher, dass Sie diesen Kurs und alle enthaltenen Daten löschen wollen?'; +$string['deletecoursecheck'] = 'Sind Sie sich wirklich sicher, dass Sie diesen Kurs und alle darin enthaltenen Daten löschen wollen?'; $string['deleted'] = 'Gelöscht'; $string['deletedactivity'] = '{$a} gelöscht'; $string['deletedcourse'] = '{$a} wurde gelöscht'; @@ -1269,7 +1269,7 @@ $string['next'] = 'Weiter'; $string['nextsection'] = 'Nächster Abschnitt'; $string['no'] = 'Nein'; -$string['noblockstoaddhere'] = 'Es gibt keine Blöcke, die Sie zu dieser Seite hinzufügen können'; +$string['noblockstoaddhere'] = 'Es gibt keine Blöcke, die Sie zu dieser Seite hinzufügen können.'; $string['nobody'] = 'Niemand'; $string['nochange'] = 'Keine Änderung'; $string['nocomments'] = 'Noch keine Kommentare'; @@ -1366,7 +1366,7 @@ $string['pagea'] = 'Seite {$a}'; $string['pageheaderconfigablock'] = 'Block in {$a->fullname} konfigurieren'; $string['pagepath'] = 'Seitenpfad'; -$string['pageshouldredirect'] = 'Die Weiterleitung sollte automatisch funktionieren - falls nichts passiert, klicken Sie bitte auf den nachfolgenden Link'; +$string['pageshouldredirect'] = 'Die Weiterleitung sollte automatisch funktionieren - falls nichts passiert, klicken Sie bitte auf den nachfolgenden Link.'; $string['parentcategory'] = 'Übergeordneter Kursbereich'; $string['parentcoursenotfound'] = 'Kurs nicht gefunden!'; $string['parentfolder'] = 'Übergeordnetes Verzeichnis'; @@ -1523,11 +1523,11 @@ $string['resourcedisplayopen'] = 'Öffnen'; $string['resourcedisplaypopup'] = 'Als Popup-Fenster'; $string['resources'] = 'Arbeitsmaterial'; -$string['resources_help'] = 'Arbeitsmaterialien ermöglichen es, nahezu jede Art von Webinhalten in Kursen zuverwenden.'; +$string['resources_help'] = 'Arbeitsmaterialien ermöglichen es, nahezu jede Art von Webinhalten in Kursen zu verwenden.'; $string['restore'] = 'Wiederherstellen'; $string['restorecancelled'] = 'Wiederherstellung abgebrochen'; $string['restorecannotassignroles'] = 'Bei der Wiederherstellung sollen Rollen zugewiesen werden, aber Sie sind dazu nicht berechtigt.'; -$string['restorecannotcreateorassignroles'] = 'Bei der Wiederherstellung sollen Rollen angelegt oder zugewiesen werden, aber Sie sind dazu nicht berechtigt.'; +$string['restorecannotcreateorassignroles'] = 'Bei der Wiederherstellung sollen Rollen angelegt oder zugewiesen werden, wozu Sie jedoch nicht nicht berechtigt sind.'; $string['restorecannotcreateuser'] = 'Bei der Wiederherstellung soll das Nutzerkonto \'{$a}\' aus der Sicherungsdatei angelegt werden, aber Sie sind dazu nicht berechtigt.'; $string['restorecannotoverrideperms'] = 'Bei der Wiederherstellung sollen Rechte geändert werden, aber Sie sind dazu nicht berechtigt.'; $string['restorecoursenow'] = 'Kurs wiederherstellen'; @@ -1550,7 +1550,7 @@ $string['roleassignments'] = 'Rollenzuweisungen'; $string['rolemappings'] = 'Rollenplanungen'; $string['rolerenaming'] = 'Umbenennen der Rolle'; -$string['rolerenaming_help'] = 'Mit dieser Option können die Namen der Rollen in Ihrem Kurs umbenannt werden. Wenn Sie z.B. \'Trainer/in\' in \'Dozent/in\' für den aktuellen Kurs umbenennen wollen, tragen Sie dies hier ein. Die Rollenberechtigungen werden durch das Umbenennen nicht verändert. Die geänderten Rollenbezeichnungen sind in der Nutzerliste und an anderen Stellen des Kurses zu sehen. Ist die umbenannte Rolle eine Kursverwalterrolle, dann wird der neue Rollenname ebenso in der Kursliste angezeigt.'; +$string['rolerenaming_help'] = 'Mit dieser Option können die Namen der Rollen in Ihrem Kurs umbenannt werden. Wenn Sie z.B. \'Trainer/in\' in \'Dozent/in\' für den aktuellen Kurs umbenennen wollen, tragen Sie dies hier ein. Die Rollenberechtigungen werden durch das Umbenennen nicht verändert. Die geänderten Rollenbezeichnungen sind in der Nutzerliste und an anderen Stellen des Kurses zu sehen. Ist die umbenannte Rolle eine Kursverwalterrolle, dann wird der neue Rollenname ebenso in der Kursliste angezeigt.'; $string['roles'] = 'Rollen'; $string['rss'] = 'RSS-Feeds'; $string['rssarticles'] = 'Zahl neuer RSS-Artikel'; @@ -1660,7 +1660,7 @@ $string['senddetails'] = 'Meine Daten per E-Mail zusenden'; $string['separate'] = 'Getrennt'; $string['separateandconnected'] = 'Anwendung von Einzelfakten oder ganzheitliche Wissensnutzung'; -$string['separateandconnectedinfo'] = 'Die Skala basiert oder Theorie von sachbezogenem, isoliertem und vernetztem beziehungsorientiertem Denken (Belenky). Die Theorie beschreibt zwei unterschiedliche Wege wie wir Lernen und Evaluieren können.
  • <Getrennt/isoliert Denkende versuchen so objektiv wie möglich zu bleiben und Gefühle und Emotionen nicht zu berücksichtigen. In einer Diskussion mit anderen verteidigen Sie ihre Ideen und analysieren logisch die Ideen der anderen, um darin Löcher zu finden.
  • Vernetzt, beziehungsorientiert Denkende sind sehr empfindsam gegenüber anderen Menschen. Sie sind gut trainiert, Empathie zu zeigen, anderen zuzuhören und Fragen zu stellen. Sie stellen eine Verbindung zu anderen her und können sich in deren Standpunkt hineinversetzen. Sie lernen durch den Austausch von Erfahrungen und das führt sie zu dem Wissen anderer Menschen.
'; +$string['separateandconnectedinfo'] = 'Die Skala basiert auf der Theorie von sachbezogenem, isoliertem und vernetztem, beziehungsorientiertem Denken (Belenky). Die Theorie beschreibt zwei unterschiedliche Wege, wie wir lernen und evaluieren können.
  • <Getrennt/isoliert Denkende versuchen so objektiv wie möglich zu bleiben und Gefühle und Emotionen nicht zu berücksichtigen. In einer Diskussion mit anderen verteidigen Sie ihre Ideen und analysieren logisch die Ideen der anderen, um darin Schwachstellen zu finden.
  • Vernetzt/beziehungsorientiert Denkende sind sehr empfindsam gegenüber anderen Menschen. Sie sind gut trainiert, Empathie zu zeigen, anderen zuzuhören und Fragen zu stellen. Sie stellen eine Verbindung zu anderen her und können sich in deren Standpunkt hineinversetzen. Sie lernen durch den Austausch von Erfahrungen und das führt sie zu dem Wissen anderer Menschen.
'; $string['servererror'] = 'Während der Kommunikation mit dem Server ist ein Fehler aufgetreten'; $string['serverlocaltime'] = 'Lokale Serverzeit'; $string['setcategorytheme'] = 'Kategoriedesign festlegen'; @@ -1680,7 +1680,7 @@ $string['showall'] = 'Alle {$a} anzeigen'; $string['showallcourses'] = 'Alle Kurse anzeigen'; $string['showallusers'] = 'Alle Nutzer/innen anzeigen'; -$string['showblockcourse'] = 'Liste der Kurse anzeigen, in der dieser Block genutzt wird'; +$string['showblockcourse'] = 'Liste der Kurse anzeigen, in denen dieser Block genutzt wird'; $string['showcategory'] = '{$a} anzeigen'; $string['showcomments'] = 'Kommentare sichtbar/verbergen'; $string['showcommentsnonjs'] = 'Kommentare anzeigen'; @@ -1697,7 +1697,7 @@ $string['showingacourses'] = 'Alle {$a} Kurse werden angezeigt'; $string['showingxofycourses'] = 'Die Kurse {$a->start} bis {$a->end} von {$a->total} werden angezeigt'; $string['showlistofcourses'] = 'Kursliste anzeigen'; -$string['showmodulecourse'] = 'Liste der Kurse anzeigen, in der diese Aktivität genutzt wird'; +$string['showmodulecourse'] = 'Liste der Kurse anzeigen, in denen diese Aktivität genutzt wird'; $string['showonly'] = 'Nur anzeigen'; $string['showperpage'] = '{$a} pro Seite anzeigen'; $string['showrecent'] = 'Neue Aktivitäten anzeigen'; @@ -1712,7 +1712,7 @@ $string['sitedefault'] = 'Grundeinstellung'; $string['siteerrors'] = 'Fehler der Website'; $string['sitefiles'] = 'Dateien'; -$string['sitefilesused'] = 'In diesem Kursen benutzte Dateien der Website'; +$string['sitefilesused'] = 'In diesem Kurs benutzte Dateien der Website'; $string['sitehome'] = 'Website-Start'; $string['sitelegacyfiles'] = 'Alte Kursdateien'; $string['sitelogs'] = 'Logdaten der Website'; @@ -1749,7 +1749,7 @@ $string['standard'] = 'standardmäßig'; $string['starpending'] = '([*] = Kursantrag in Bearbeitung)'; $string['startdate'] = 'Kursbeginn'; -$string['startdate_help'] = 'Wenn Sie im Kurs das Wochenformat benutzen, definiert die Einstellung den ersten Tag der ersten angezeigten Woche im Kurs dar. Die Einstellung legt auch fest, ab wann Aktivitätsberichte im Kurs erfasst werden. Wenn der Kurs zurückgesetzt und der Kursbeginn geändert wird, ändern sich auch die anderen Zeitangaben im Kurs in Abhängigkeit vom neuen Kursbeginn.'; +$string['startdate_help'] = 'Wenn Sie im Kurs das Wochenformat benutzen, definiert die Einstellung den ersten Tag der ersten angezeigten Woche im Kurs. Die Einstellung legt auch fest, ab wann Aktivitätsberichte im Kurs erfasst werden. Wenn der Kurs zurückgesetzt und der Kursbeginn geändert wird, ändern sich auch die anderen Zeitangaben im Kurs in Abhängigkeit vom neuen Kursbeginn.'; $string['startingfrom'] = 'Beginn ab'; $string['startsignup'] = 'Neuen Zugang anlegen?'; $string['state'] = 'Bundesland/Kanton'; @@ -1943,7 +1943,7 @@ $string['usernotconfirmed'] = '{$a} konnte nicht bestätigt werden'; $string['userpic'] = 'Nutzerbild'; $string['users'] = 'Nutzer/innen'; -$string['userselectorautoselectunique'] = 'Wenn nur ein/e Nutzer/in zur Suche passt, wähle diesen automatisch.'; +$string['userselectorautoselectunique'] = 'Wenn nur ein/e Nutzer/in den Suchkriterien entspricht, wähle diese/n automatisch.'; $string['userselectorpreserveselected'] = 'Verwerfe ausgewählte Nutzer/innen, wenn sie nicht mehr zur Suche passen.'; $string['userselectorsearchanywhere'] = 'Suchtext in den angezeigten Feldern finden'; $string['usersnew'] = 'Neue Nutzer/innen'; @@ -1986,7 +1986,7 @@ $string['whatforpage'] = 'Was möchten Sie mit diesem Text tun?'; $string['whattocallzip'] = 'Wie möchten Sie die ZIP-Datei benennen?'; $string['whattodo'] = 'Was ist zu tun'; -$string['windowclosing'] = 'Dieses Fenster sollte sich automatisch schließen - falls nicht, dann tun Sie es jetzt'; +$string['windowclosing'] = 'Dieses Fenster sollte sich automatisch schließen - falls nicht, tun Sie es bitte jetzt.'; $string['withchosenfiles'] = 'Mit ausgewählten Dateien'; $string['withdisablednote'] = '{$a} (deaktiviert)'; $string['withoutuserdata'] = 'Ohne Nutzerdaten'; @@ -2000,9 +2000,9 @@ $string['wordforstudents'] = 'Bezeichnung für Teilnehmer/innen'; $string['wordforstudentseg'] = 'z.B. Student/innen, Schüler/innen usw.'; $string['wordforteacher'] = 'Bezeichnung für Trainer/in'; -$string['wordforteachereg'] = 'z.B. Lehrer/in, Berater/in, Moderator/in usw.'; +$string['wordforteachereg'] = 'z.B. Trainer/in, Berater/in, Moderator/in usw.'; $string['wordforteachers'] = 'Bezeichnung für Trainer/innen'; -$string['wordforteacherseg'] = 'z.B. Lehrer/innen, Berater/innen, Moderator/innen usw.'; +$string['wordforteacherseg'] = 'z.B. Trainer/innen, Berater/innen, Moderator/innen usw.'; $string['writingblogsinfo'] = 'Bloginformationen werden geschrieben'; $string['writingcategoriesandquestions'] = 'Kategorien und Fragen schreiben'; $string['writingcoursedata'] = 'Kursdaten schreiben'; diff --git a/html/moodle2/langpacks/de/role.php b/html/moodle2/langpacks/de/role.php index 6c4c66c50d..8e6162c437 100644 --- a/html/moodle2/langpacks/de/role.php +++ b/html/moodle2/langpacks/de/role.php @@ -416,7 +416,7 @@ $string['tag:manage'] = 'Schlagwörter verwalten'; $string['thisnewrole'] = 'Diese neue Rolle'; $string['thisusersroles'] = 'Rollenzuweisungen'; -$string['unassignarole'] = 'Nicht zugewiesene Rolle {$a}'; +$string['unassignarole'] = 'Rollenzuweisung {$a} löschen'; $string['unassignconfirm'] = 'Wollen Sie wirklich Teilnehmer/in "{$a->user}" die Rolle "{$a->role}" entziehen?'; $string['unassignerror'] = 'Es ist ein Fehler während der Entfernung der Rolle {$a->role} des/r Nutzer/in {$a->user} aufgetreten.'; $string['user:changeownpassword'] = 'Eigenes Kennwort ändern'; diff --git a/html/moodle2/langpacks/de/scorm.php b/html/moodle2/langpacks/de/scorm.php index 89c1b33dcc..71ed0ffaf2 100644 --- a/html/moodle2/langpacks/de/scorm.php +++ b/html/moodle2/langpacks/de/scorm.php @@ -207,6 +207,7 @@ $string['location'] = 'Adresse anzeigen'; $string['masteryoverride'] = 'Status für die Punktzahlüberschreibung zum Bestehen'; $string['masteryoverridedesc'] = 'Diese Einstellung legt die Vorgabe für die Punktzahl zum Bestehen fest.'; +$string['masteryoverride_help'] = 'Wenn die Option aktiviert ist, wird der Status unter Einbeziehung des Raw-Score und des Master-Score neu berechnet und jeder Status überschrieben, der von SCORM (einschließlich "unvollständig") bereitgestellt wird. Voraussetzung ist dabei, dass ein Mastery-Score und ein Raw-Score gesetzt sind und das LMSFinish aufgerufen wird.'; $string['max'] = 'Höchstpunktzahl'; $string['maximumattempts'] = 'Zahl der Versuche'; $string['maximumattemptsdesc'] = 'Diese Einstellung legt die maximale Anzahl von Versuchen für eine Aktivität fest'; diff --git a/html/moodle2/langpacks/el/admin.php b/html/moodle2/langpacks/el/admin.php index c484dfd0c3..5909711b0b 100644 --- a/html/moodle2/langpacks/el/admin.php +++ b/html/moodle2/langpacks/el/admin.php @@ -384,13 +384,17 @@ $string['emailchangeconfirmation'] = 'Επιβεβαίωση αλλαγής διεύθυνσης ηλεκτρονικού ταχυδρομείου'; $string['emoticons'] = 'Emoticons'; $string['emptysettingvalue'] = 'Κενό'; +$string['enableblogs'] = 'Ενεργοποίηση ιστολογίων'; $string['enablecalendarexport'] = 'Ενεργοποίηση εξαγωγής ημερολογίου'; $string['enablecomments'] = 'Ενεργοποίηση σχολίων'; $string['enablecourserequests'] = 'Να επιτρέπονται οι αιτήσεις δημιουργίας μαθήματος'; +$string['enabled'] = 'Ενεργοποιημένο'; +$string['enabledevicedetection'] = 'Ενεργοποίηση ανίχνευσης συσκευής'; $string['enableglobalsearch'] = 'Ενεργοποίηση καθολικής αναζήτησης'; $string['enablemobilewebservice'] = 'Ενεργοποίηση κινητών διαδικτυακών υπηρεσιών'; $string['enablerecordcache'] = 'Ενεργοποίηση Record Cache'; $string['enablerssfeeds'] = 'Ενεργοποίηση RSS feeds'; +$string['enablesearchareas'] = 'Ενεργοποίηση περιοχών αναζήτησης'; $string['enablestats'] = 'Ενεργοποίηση στατιστικών'; $string['enabletrusttext'] = 'Ενεργοποίηση Trusted Content'; $string['enablewebservices'] = 'Ενεργοποίηση web services'; @@ -473,6 +477,7 @@ $string['htmlsettings'] = 'Ρυθμίσεις HTML'; $string['http'] = 'HTTP'; $string['httpsecurity'] = 'Ασφάλεια HTTP'; +$string['hubs'] = 'Κόμβοι'; $string['ignore'] = 'Αγνόηση'; $string['includemoduleuserdata'] = 'Συμπερίληψη των δεδομένων των χρηστών των αρθρωμάτων'; $string['incompatibleblocks'] = 'Μη-συμβατά μπλοκ'; @@ -524,6 +529,8 @@ $string['mediapluginmov'] = 'Ενεργοποίηση του φίλτρου .mov'; $string['mediapluginmp3'] = 'Ενεργοποίηση του φίλτρου .mp3'; $string['mediapluginmpg'] = 'Ενεργοποίηση του φίλτρου .mpg'; +$string['mediapluginogg'] = 'Ενεργοποίηση φίλτρου .ogg'; +$string['mediapluginogv'] = 'Ενεργοποίηση φίλτρου .ogv'; $string['mediapluginram'] = 'Ενεργοποίηση του φίλτρου .ram'; $string['mediapluginrm'] = 'Ενεργοποίηση του φίλτρου .rm'; $string['mediapluginrpm'] = 'Ενεργοποίηση του φίλτρου .rpm'; @@ -553,6 +560,8 @@ $string['mycoursesperpage'] = 'Αριθμός μαθημάτων'; $string['mymoodle'] = 'My Moodle'; $string['mymoodleredirect'] = 'Ανάγκασε τους χρήστες να χρησιμοποιήσουν το My Moodle'; +$string['navshowfrontpagemods'] = 'Εμφάνιση δραστηριοτήτων πρώτης σελίδας στην πλοήγηση'; +$string['navshowfrontpagemods_help'] = 'Αν ενεργοποιηθεί, οι δραστηριότητες της πρώτης σελίδας θα εμφανίζονται στην πλοήγηση κάτω από τις σελίδες του ιστοχώρου.'; $string['nobookmarksforuser'] = 'Δεν έχετε σελιδοδείκτες.'; $string['nodatabase'] = 'Δεν υπάρχει βάση δεδομένων'; $string['nomissingstrings'] = 'Δεν υπάρχουν strings που να λείπουν'; @@ -656,6 +665,7 @@ $string['registration'] = 'Εγγραφή'; $string['releasenoteslink'] = 'Για πληροφορίες σχετικά με αυτήν την έκδοση του Moodle, παρακαλώ δείτε εδώ: Release Notes'; $string['rememberusername'] = 'Να αποθηκευτεί το όνομα χρήστη'; +$string['requestcategoryselection'] = 'Ενεργοποίηση επιλογής κατηγορίας'; $string['requiredentrieschanged'] = ' ΣΗΜΑΝΤΙΚΟ- ΠΑΡΑΚΑΛΩ ΔΙΑΒΑΣΤΕ
(Αυτό το μήνυμα προειδοποίησης θα εμφανίζεται μόνο κατά τη διάρκεια αυτής της αναβάθμισης)
Εξαιτίας της διόρθωσης ενός σφάλματος, η συμπεριφορά δραστηριοτήτων της βάσης που χρησιμοποιούν τις ρυθμίσεις \'Απαιτούμενες καταχωρήσεις\' and \'Απαιτούμενες καταχωρήσεις πριν την προβολή των ρυθμίσεων\' θα αλλάξουν. Πιο λεπτομερής εξήγηση μπορεί να βρεθεί στο forum για το άρθρωμα βάσης δεδομένων. Η αναμενόμενη συμπεριφορά των ρυθμίσεων αυτών μπορεί επίσης να βρεθεί στο Moodle Docs.

Η αλλαγή αυτή επηρεάζει τις παρακάτω βάσεις στο σύστημά σας: (Παρακαλώ αποθηκεύστε τη λίστα αυτή τώρα και, μετά την αναβάθμιση, ελέγξτε ότι οι δραστηριότητες αυτές λειτουργούν όπως προτίθεται ο καθηγητής να λειτουργούν.)
{$a->text}
'; $string['requiremodintro'] = 'Απαιτείται περιγραφή δραστηριότητας'; @@ -676,6 +686,7 @@ $string['riskxssshort'] = 'XSS ρίσκο'; $string['roleswithexceptions'] = '{$a->roles} με {$a->exceptions}'; $string['rssglobaldisabled'] = 'Απενεργοποιημένο σε επίπεδο διακομιστή'; +$string['save'] = 'Αποθήκευση'; $string['savechanges'] = 'Αποθήκευση αλλαγών'; $string['search'] = 'Αναζήτηση'; $string['searchinsettings'] = 'Αναζήτηση στις ρυθμίσεις'; @@ -761,6 +772,7 @@ $string['upgradinglogs'] = 'Αναβάθμιση των αρχείων καταγραφής'; $string['upgradingversion'] = 'Αναβάθμιση στην επόμενη έκδοση'; $string['upwards'] = 'προς τα επάνω'; +$string['useblogassociations'] = 'Ενεργοποίηση συσχετίσεων'; $string['useexternalyui'] = 'Χρήση online βιβλιοθηκών YUI'; $string['user'] = 'Χρήστης'; $string['userbulk'] = 'Χοντρικές ενέργειες χρήστη'; diff --git a/html/moodle2/langpacks/el/assign.php b/html/moodle2/langpacks/el/assign.php index 611eb0db19..6074dabf4b 100644 --- a/html/moodle2/langpacks/el/assign.php +++ b/html/moodle2/langpacks/el/assign.php @@ -48,6 +48,7 @@ $string['assign:submit'] = 'Υποβολή εργασίας'; $string['assign:view'] = 'Προβολή εργασίας'; $string['assign:viewgrades'] = 'Προβολή Βαθμών'; +$string['attemptheading'] = 'Προσπάθεια {$a->attemptnumber}: {$a->submissionsummary}'; $string['attempthistory'] = 'Προηγούμενες προσπάθειες'; $string['attemptnumber'] = 'Αριθμός προσπάθειας'; $string['attemptreopenmethod'] = 'Να ξανανοίξουν οι προσπάθειες'; @@ -99,6 +100,7 @@ $string['eventsubmissionupdated'] = 'Η υποβολή ενημερώθηκε.'; $string['feedback'] = 'Επανατροφοδότηση'; $string['feedbacktypes'] = 'Τύποι ανατροφοδότησης'; +$string['filesubmissions'] = 'Υποβολές αρχείων'; $string['filter'] = 'Φίλτρο'; $string['filternone'] = 'Κανένα φίλτρο'; $string['filternotsubmitted'] = 'Δεν υποβλήθηκαν'; diff --git a/html/moodle2/langpacks/el/assignfeedback_file.php b/html/moodle2/langpacks/el/assignfeedback_file.php index d02214693b..49d136eddf 100644 --- a/html/moodle2/langpacks/el/assignfeedback_file.php +++ b/html/moodle2/langpacks/el/assignfeedback_file.php @@ -27,6 +27,7 @@ $string['configmaxbytes'] = 'Μέγιστο μέγεθος αρχείου'; $string['countfiles'] = '{$a} αρχεία'; +$string['default'] = 'Ενεργοποιημένο από προεπιλογή'; $string['enabled'] = 'Αρχείο ανατροφοδότησης'; $string['feedbackfileadded'] = 'Νέο αρχείο ανατροφοδότησης "{$a->filename}" για το μαθητή "{$a->student}"'; $string['feedbackfileupdated'] = 'Το αρχείο ανατροφοδότησης "{$a->filename}" ενημερώθηκε για τον εκπαιδευόμενο "{$a->student}"'; diff --git a/html/moodle2/langpacks/el/assignfeedback_offline.php b/html/moodle2/langpacks/el/assignfeedback_offline.php new file mode 100644 index 0000000000..8e1a84da64 --- /dev/null +++ b/html/moodle2/langpacks/el/assignfeedback_offline.php @@ -0,0 +1,28 @@ +. + +/** + * Strings for component 'assignfeedback_offline', language 'el', branch 'MOODLE_31_STABLE' + * + * @package assignfeedback_offline + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['default'] = 'Ενεργοποιημένο από προεπιλογή'; diff --git a/html/moodle2/langpacks/el/assignsubmission_comments.php b/html/moodle2/langpacks/el/assignsubmission_comments.php index 908abd50d9..5b31c0af57 100644 --- a/html/moodle2/langpacks/el/assignsubmission_comments.php +++ b/html/moodle2/langpacks/el/assignsubmission_comments.php @@ -25,5 +25,6 @@ defined('MOODLE_INTERNAL') || die(); +$string['default'] = 'Ενεργοποιημένο από προεπιλογή'; $string['enabled'] = 'Υποβολή σχολίων'; $string['pluginname'] = 'Υποβολή σχολίων'; diff --git a/html/moodle2/langpacks/el/assignsubmission_onlinetext.php b/html/moodle2/langpacks/el/assignsubmission_onlinetext.php index dd3caf3a7c..eb867f80f4 100644 --- a/html/moodle2/langpacks/el/assignsubmission_onlinetext.php +++ b/html/moodle2/langpacks/el/assignsubmission_onlinetext.php @@ -25,5 +25,7 @@ defined('MOODLE_INTERNAL') || die(); +$string['allowonlinetextsubmissions'] = 'Ενεργοποιημένο'; +$string['default'] = 'Ενεργοποιημένο από προεπιλογή'; $string['nosubmission'] = 'Δεν έχει υποβληθεί τίποτα για την εργασία αυτή'; $string['wordlimit'] = 'Όριο λέξεων'; diff --git a/html/moodle2/langpacks/el/atto_image.php b/html/moodle2/langpacks/el/atto_image.php index 3dcc0d9e53..370b059f8a 100644 --- a/html/moodle2/langpacks/el/atto_image.php +++ b/html/moodle2/langpacks/el/atto_image.php @@ -25,4 +25,6 @@ defined('MOODLE_INTERNAL') || die(); +$string['preview'] = 'Προεπισκόπηση'; +$string['saveimage'] = 'Αποθήκευση εικόνας'; $string['size'] = 'Μέγεθος'; diff --git a/html/moodle2/langpacks/el/backup.php b/html/moodle2/langpacks/el/backup.php index d09bb3063a..1fd1a25e30 100644 --- a/html/moodle2/langpacks/el/backup.php +++ b/html/moodle2/langpacks/el/backup.php @@ -33,19 +33,36 @@ $string['automatedbackupschedulehelp'] = 'Ημέρες λήψης αυτόματου αντιγράφου ασφαλείας'; $string['automatedbackupsinactive'] = 'Η προγραμματισμένη λήψη αντιγράφων ασφαλείας δεν έχει ενεργοποιηθεί από το διαχειριστή του ιστοχώρου'; $string['automatedbackupstatus'] = 'Κατάσταση λήψης αυτόματων αντιγράφων ασφαλείας'; +$string['automateddeletedays'] = 'Διαγραφή αντιγράφων ασφαλείας προγενέστερων από'; +$string['automatedmaxkept'] = 'Μέγιστος αριθμός αντιγράφων ασφαλείας που θα διατηρούνται'; +$string['automatedmaxkepthelp'] = 'Καθορίζει το μέγιστο αριθμό των πρόσφατων αυτόματων αντιγράφων ασφαλείας που πρέπει να διατηρούνται για κάθε μάθημα. Παλαιότερα αντίγραφα ασφαλείας θα διαγράφονται αυτόματα.'; +$string['automatedminkept'] = 'Ελάχιστος αριθμός αντιγράφων ασφαλείας που θα διατηρούνται'; +$string['automatedminkepthelp'] = 'Αν τα αντίγραφα ασφαλείας προγενέστερα από ένα συγκεκριμένο αριθμό ημερών έχουν διαγραφεί, μπορεί να συμβεί ένα ανενεργό μάθημα να βρεθεί χωρίς κανένα αντίγραφο ασφαλείας. Για να αποφευχθεί αυτό, θα πρέπει να καθοριστεί ένας ελάχιστος αριθμός αντιγράφων ασφαλείας που θα διατηρούνται.'; $string['automatedsettings'] = 'Ρυθμίσεις αυτόματων αντιγράφων ασφαλείας'; $string['automatedsetup'] = 'Ρύθμιση αυτόματων αντιγράφων ασφαλείας'; $string['automatedstorage'] = 'Αυτόματη αποθήκευση αντιγράφων ασφαλείας'; $string['automatedstoragehelp'] = 'Επιλέξτε την τοποθεσία που θέλετε να αποθηκεύονται τα αντίγραφα ασφαλείας όταν δημιουργούνται αυτόματα.'; +$string['backupactivity'] = 'Δραστηριότητα αντιγράφου ασφαλείας: {$a}'; +$string['backupcourse'] = 'Αντίγραφο ασφαλείας μαθήματος: {$a}'; $string['backupcoursedetails'] = 'Λεπτομέρειες μαθήματος'; +$string['backupcoursesection'] = 'Ενότητα: {$a}'; $string['backupcoursesections'] = 'Ενότητες του μαθήματος'; +$string['backupdate'] = 'Ημερομηνία λήψης'; $string['backupdetails'] = 'Λεπτομέρειες αντιγράφων ασφαλείας'; +$string['backupdetailsnonstandardinfo'] = 'Το επιλεγμένο αρχείο δεν είναι τυπικό αρχείο αντιγράφου ασφαλείας του Moodle. Η διαδικασία επαναφοράς θα προσπαθήσει να μετατρέψει το αρχείο αντιγράφου ασφαλείας σε τυποποιημένη μορφή και στη συνέχεια να το επαναφέρει.'; +$string['backupformat'] = 'Μορφή'; $string['backupformatunknown'] = 'Άγνωστη μορφή'; $string['backuplog'] = 'Τεχνικές πληροφορίες και προειδοποιήσεις'; +$string['backupmode'] = 'Λειτουργία'; $string['backupmode10'] = 'Γενικά'; $string['backupmode20'] = 'Εισαγωγή'; +$string['backupmode30'] = 'Κόμβος'; +$string['backupmode40'] = 'Ίδιος ιστοχώρος'; $string['backupmode50'] = 'Αυτοματοποιημένο'; +$string['backupmode60'] = 'Τροποποιημένο'; +$string['backupsection'] = 'Αντίγραφο ασφαλείας ενότητας μαθήματος: {$a}'; $string['backupsettings'] = 'Ρυθμίσεις αντιγράφων ασφαλείας'; +$string['backupsitedetails'] = 'Λεπτομέρειες ιστοχώρου'; $string['backupstage16action'] = 'Συνέχεια'; $string['backupstage1action'] = 'Επόμενο'; $string['backupstage2action'] = 'Επόμενο'; @@ -53,23 +70,40 @@ $string['backupstage8action'] = 'Συνέχεια'; $string['backuptype'] = 'Τύπος'; $string['backuptypeactivity'] = 'Δραστηριότητα'; +$string['backuptypecourse'] = 'Μάθημα'; +$string['backuptypesection'] = 'Ενότητα'; $string['backupversion'] = 'Έκδοση αντιγράφου ασφαλείας'; +$string['cannotfindassignablerole'] = 'Ο ρόλος {$a} στο αρχείο αντιγράφου ασφαλείας δεν μπορεί να αντιστοιχιστεί με κάποιο από τους ρόλους που έχετε τη δυνατότητα να αναθέσετε.'; +$string['choosefilefromactivitybackup'] = 'Περιοχή αντιγράφου ασφαλείας δραστηριότητας'; +$string['choosefilefromactivitybackup_help'] = 'Εδώ αποθηκεύονται αντίγραφα ασφαλείας που δημιουργούνται με χρήση των προεπιλεγμένων ρυθμίσεων.'; $string['choosefilefromautomatedbackup'] = 'Αυτόματη δημιουργία αντιγράφων ασφαλείας'; +$string['choosefilefromautomatedbackup_help'] = 'Περιέχει αντίγραφα ασφαλείας που δημιουργήθηκαν αυτόματα.'; $string['choosefilefromcoursebackup'] = 'Περιοχή αντιγράφων ασφαλείας μαθήματος'; $string['choosefilefromcoursebackup_help'] = 'Όταν χρησιμοποιούνται οι προεπιλεγμένες ρυθμίσεις για τα αντίγραφα ασφαλείας των μαθημάτων, τα αντίγραφα ασφαλείας θα αποθηκεύονται εδώ'; $string['choosefilefromuserbackup'] = 'Προσωπική περιοχή αντιγράφων ασφαλείας χρήστη'; $string['choosefilefromuserbackup_help'] = 'Όταν έχει σημειωθεί η επιλογή "Ανωνυμία πληροφοριών χρήστη" στα αντίγραφα ασφαλείας μαθημάτων, τα αντίγραφα ασφαλείας θα αποθηκεύονται εδώ'; $string['configgeneralactivities'] = 'Ορίζει την προεπιλογή για την συμπερίληψη των δραστηριοτήτων στα αντίγραφα ασφαλείας.'; $string['configgeneralanonymize'] = 'Αν ενεργοποιηθεί όλες οι πληροφορίες σχετικά με τους χρήστες θα είναι ανώνυμες από προεπιλογή.'; +$string['configgeneralbadges'] = 'Ορίζει την προεπιλογή για την συμπερίληψη κονκάρδων στα αντίγραφα ασφαλείας.'; $string['configgeneralblocks'] = 'Ορίζει την προεπιλογή για την συμπερίληψη των μπλοκ στα αντίγραφα ασφαλείας.'; $string['configgeneralcomments'] = 'Ορίζει την προεπιλογή για την συμπερίληψη των σχολίων στα αντίγραφα ασφαλείας.'; +$string['configgeneralfilters'] = 'Ορίζει την προεπιλογή για την συμπερίληψη φίλτρων στα αντίγραφα ασφαλείας.'; +$string['configgeneralgroups'] = 'Ορίζει την προεπιλογή για την συμπερίληψη ομάδων και ομαδοποιήσεων στα αντίγραφα ασφαλείας.'; $string['configgeneralhistories'] = 'Ορίζει την προεπιλογή για την συμπερίληψη του ιστορικού χρήστη εντός των αντιγράφων ασφαλείας.'; $string['configgenerallogs'] = 'Αν ενεργοποιηθεί οι αναφορές θα περιλαμβάνονται στα αντίγραφα ασφαλέιας από προεπιλογή.'; +$string['configgeneralquestionbank'] = 'Αν είναι ενεργοποιημένο η τράπεζα ερωτήσεων θα περιλαμβάνεται στα αντίγραφα ασφαλείας από προεπιλογή. ΣΗΜΕΙΩΣΗ: Η απενεργοποίηση αυτής της ρύθμισης θα απενεργοποιήσει τη δημιουργία αντιγράφων ασφαλείας δραστηριοτήτων που χρησιμοποιούν τράπεζα ερωτήσεων, όπως το κουίζ.'; $string['configgeneralroleassignments'] = 'Αν ενεργοποιηθεί από προεπιλογή θα δημιουργηθούν επίσης αντίγραφα ασφαλείας για τις αναθέσεις ρόλων.'; $string['configgeneralusers'] = 'Ορίζει την προεπιλογή για το αν περιλαμβάνονται οι χρήστες στα αντίγραφα ασφαλείας.'; $string['configgeneraluserscompletion'] = 'Αν ενεργοποιηθεί οι πληροφορίες ολοκλήρωσης ενός χρήστη θα περιλαμβάνονται στα αντίγραφα ασφαλείας από προεπιλογή.'; +$string['configloglifetime'] = 'Καθορίζει το χρονικό διάστημα που θέλετε να κρατήσετε πληροφορίες δημιουργίας αντιγράφων ασφαλείας. Τα αρχεία καταγραφής που είναι προγενέστερα αυτόυ του χρονικού διαστήματος θα διαγράφονται αυτόματα. Συνιστάται να διατηρείται αυτή η τιμήμικρές, επειδή οι πληροφορίες δημιουργίας αντιγράφων ασφαλείας καταγράφονται μπορεί να είναι τεράστιες.'; $string['confirmcancel'] = 'Ακύρωση αντιγράφου ασφαλείας'; +$string['confirmcancelno'] = 'Παραμονή'; +$string['confirmcancelquestion'] = 'Είστε βέβαιοι ότι θέλετε να κάνετε ακύρωση; Όλες οι πληροφορίες που έχετε εισάγει θα χαθούν.'; $string['confirmcancelyes'] = 'Ακύρωση'; +$string['confirmnewcoursecontinue'] = 'Προειδοποίηση νέου μαθήματος'; +$string['confirmnewcoursecontinuequestion'] = 'Ένα προσωρινό (κρυφό) μάθημα θα δημιουργηθεί από τη διαδικασία επαναφοράς μαθήματος. Για να ματαιώσετε την επαναφοράς πατήστε Ακύρωση. Μην κλείσετε το πρόγραμμα περιήγησης, κατά τη διαδικασία επαναφοράς.'; +$string['coursecategory'] = 'Κατηγορία που θα γίνει επαναφορά το μάθημα'; +$string['courseid'] = 'Αρχικό αναγνωριστικό'; $string['coursesettings'] = 'Ρυθμίσεις Μαθήματος'; $string['coursetitle'] = 'Τίτλος'; $string['currentstage1'] = 'Αρχικές ρυθμίσεις'; @@ -78,10 +112,24 @@ $string['currentstage4'] = 'Επιβεβαίωση και επανεξέταση'; $string['currentstage8'] = 'Εκτέλεση αντιγράφου ασφαλείας'; $string['enterasearch'] = 'Εισάγετε μια αναζήτηση'; +$string['error_block_for_module_not_found'] = 'Βρέθηκε ορφανό στιγμιότυπο μπλοκ (αναγνωριστικό: {$a->bid}) για το άρθρωμα αναγνωριστικό(id: {$a->mid}). Αυτό το μπλοκ δεν θα συμπεριληφθεί στο αντίγραφο ασφαλείας.'; +$string['errorcopyingbackupfile'] = 'Αποτυχία αντιγραφής του αρχείου αντιγράφου ασφαλεάις στον προσωρινό φάκελο πριν την επαναφορά.'; +$string['error_course_module_not_found'] = 'Βρέθηκε ορφανό άρθρωμα μαθήματος (αναγνωριστικό: {$a}). Αυτό το άρθρωμα δεν θα συμπεριληφθεί στο αντίγραφο ασφαλείας.'; $string['errorfilenamemustbezip'] = 'Το όνομα του αρχείου που εισάγετε πρέπει να είναι ένα αρχείο ZIP και να έχει την επέκταση .mbz'; +$string['errorfilenamerequired'] = 'Θα πρέπει να εισάγετε ένα έγκυρο όνομα αρχείου για το αντίγραφο ασφαλείας'; $string['errorinvalidformat'] = 'Άγνωστη μορφή αντιγράφου ασφαλείας'; +$string['errorinvalidformatinfo'] = 'Το επιλεγμένο αρχείο δεν είναι ένα έγκυρο αρχείο αντιγράφου ασφαλείας του Moodle και δεν είναι δυνατή η επαναφορά του.'; +$string['errorminbackup20version'] = 'Αυτό το αντίγραφο ασφαλείας έχει δημιουργηθεί με μία υπο ανάπτυξη έκδοση του Moodle δημιουργίας αντιγράφων ασφαλείας ({$a->backup}). Ελάχιστο απαιτούμενο είναι {$a->min}. Δεν είναι εφικτή η επαναφορά.'; +$string['errorrestorefrontpagebackup'] = 'Μπορείτε να επαναφέρετε μόνο αντίγραφα ασφαλείας πρώτης σελίδας στην πρώτη σελίδα'; $string['executionsuccess'] = 'Το αρχείο αντιγράφου ασφαλείας δημιουργήθηκε με επιτυχία.'; +$string['filealiasesrestorefailures'] = 'Αποτυχίες επαναφοράς ψευδώνυμων'; +$string['filealiasesrestorefailures_help'] = 'Τα ψευδώνυμα είναι συμβολικοί σύνδεσμοι σε άλλα αρχεία, συμπεριλαμβανομένων εκείνων που είναι αποθηκευμένα σε εξωτερικά αποθετήρια. Σε ορισμένες περιπτώσεις, το Moodle δεν μπορεί να τα επαναφέρει - για παράδειγμα, όταν η γίνεται επαναφορά του αντιγράφου ασφαλείας σε ένα άλλο ιστοχώρο ή όταν δεν υπάρχει το αναφερόμενο αρχείο.

+Περισσότερες λεπτομέρειες και η πραγματική αιτία της αποτυχίας μπορεί να βρεθεί στο αρχείο καταγραφής της επαναφοράς.'; +$string['filealiasesrestorefailuresinfo'] = 'Δεν είναι δυνατή η επαναφορά μερικών ψευδώνυμων που περιλαμβάνονται στο αρχείο αντιγράφου ασφαλείας. Η ακόλουθη λίστα περιέχει την αναμενόμενη θέση τους και το αρχείο προέλευσης που αναφέρονταν στον αρχικό ιστοχώρο.'; $string['filename'] = 'Όνομα αρχείου'; +$string['filereferencesincluded'] = 'Οι αναφορές του αρχείου σε εξωτερικό περιεχόμενο περιλαμβάνονται στο αρχείο αντιγράφου ασφαλείας. Αυτές δεν θα λειτουργούν αν το αντίγραφο ασφαλείας γίνει επεναφορά σε διαφορετικό ιστοχώρο.'; +$string['filereferencesnotsamesite'] = 'Το αρχείο αντιγράφου ασφαλείας είναι από διαφορετικό ιστοχώρο, και έτσι δεν είναι εφικτή η επαναφορά των αναφορών του αρχείου.'; +$string['filereferencessamesite'] = 'Το αρχείο αντιγράφου ασφαλείας είναι από αυτό το ιστοχώρο, και έτσι είναι εφικτή η επαναφορά των αναφορών του αρχείου.'; $string['generalactivities'] = 'Συμπεριέλαβε δραστηριότητες'; $string['generalanonymize'] = 'Ανωνυμία πληροφοριών'; $string['generalbackdefaults'] = 'Γενικές προεπιλογές αντιγράφων ασφαλείας'; @@ -98,33 +146,63 @@ $string['generalsettings'] = 'Γενικές ρυθμίσεις δημιουργίας αντιγράφων ασφαλείας'; $string['generalusers'] = 'Συμπεριέλαβε χρήστες'; $string['generaluserscompletion'] = 'Συμπεριέλαβε πληροφορίες ολοκλήρωσης ενός χρήστη'; +$string['hidetypes'] = 'Επιλογές απόκρυψης τύπων'; $string['importbackupstage16action'] = 'Συνέχεια'; $string['importbackupstage1action'] = 'Επόμενο'; $string['importbackupstage2action'] = 'Επόμενο'; +$string['importbackupstage4action'] = 'Εκτέλεση εισαγωγής'; $string['importbackupstage8action'] = 'Συνέχεια'; +$string['importcurrentstage0'] = 'Επιλογή μαθήματος'; $string['importcurrentstage1'] = 'Αρχικές ρυθμίσεις'; $string['importcurrentstage16'] = 'Ολοκλήρωση'; $string['importcurrentstage2'] = 'Ρυθμίσεις διάταξης'; $string['importcurrentstage4'] = 'Επιβεβαίωση και επανεξέταση'; $string['importcurrentstage8'] = 'Εκτελέστε την εισαγωγή'; $string['importfile'] = 'Εισαγωγή ενός αντιγράφου ασφαλείας'; +$string['importgeneralduplicateadminallowed'] = 'Να επιτρέπεται επίλυση σύγκρουση admin'; +$string['importgeneralduplicateadminallowed_desc'] = 'Αν ο ιστοχώρος έχει ένα λογαριασμό με όνομα χρήστη \'admin\', και γίνει προσπάθεια επαναφοράς ενός αρχείου αντιγράφου ασφαλείας που περιέχει ένα λογαριασμό με όνομα χρήστη \'admin\' θα προκληθεί σύγκρουση. Αν είναι ενεργοποιημένη αυτή η ρύθμιση, η σύγκρουση θα επιλυθεί με την αλλαγή του ονόματος χρήστη στο αρχείο αντιγράφου ασφαλείας σε \'admin_xyz\'.'; +$string['importgeneralmaxresults'] = 'Μέγιστος αριθμός μαθημάτων για εισαγωγή'; +$string['importgeneralmaxresults_desc'] = 'Ελέγχει τον αριθμό των μαθημάτων που απαριθμούνται στο πρώτο στάδιο της διαδικασίας εισαγωγής'; +$string['importgeneralsettings'] = 'Προεπιλογές γενικής εισαγωγής'; $string['importsuccess'] = 'Η εισαγωγή ολοκληρώθηκε. Κάντε κλικ στο κουμπί Συνέχεια για να επιστρέψετε στο μάθημα'; $string['includeactivities'] = 'Περιλαμβάνουν:'; $string['includeditems'] = 'Αντικείμενα που συμπεριλαμβάνονται:'; +$string['includefilereferences'] = 'Αναφορές αρχείου σε εξωτερικό περιεχόμενο'; +$string['includesection'] = 'Ενότητα {$a}'; $string['includeuserinfo'] = 'Δεδομένα χρήστη'; $string['jumptofinalstep'] = 'Μετάβαση στο τελικό στάδιο'; $string['locked'] = 'Κλειδωμένο'; +$string['lockedbyconfig'] = 'Η ρύθμιση αυτή έχει κλειδωθεί από τις προεπιλεγμένες ρυθμίσεις δημιουργίας αντιγράφων ασφαλείας'; +$string['lockedbyhierarchy'] = 'Κλειδωμένο από εξαρτήσεις'; +$string['lockedbypermission'] = 'Δεν έχετε επαρκή δικαιώματα για να αλλάξετε αυτή τη ρύθμιση'; +$string['loglifetime'] = 'Διατήρηση αρχείων καταγραφής για'; $string['managefiles'] = 'Διαχείριση αντιγράφων ασφαλείας'; +$string['missingfilesinpool'] = 'Δεν είναι δυνατή η αποθήκευση κάποιων αρχείων κατά τη δημιουργία αντιγράφου ασφαλείας, και έτσι δεν θα είναι εφικτή η επαναφορά τους.'; +$string['module'] = 'Άρθρωμα'; $string['moodleversion'] = 'Έκδοση Moodle'; +$string['morecoursesearchresults'] = 'Βρέθηκαν περισσότερα από {$a} μαθήματα, εμφάνιση {$a} πρώτων αποτελεσμάτων'; +$string['moreresults'] = 'Υπάρχουν πάρα πολλά αποτελέσματα, εισάγετε μια πιο συγκεκριμένη αναζήτηση.'; $string['nomatchingcourses'] = 'Δεν υπάρχουν μαθήματα για να εμφανίσετε'; +$string['norestoreoptions'] = 'Δεν υπάρχουν κατηγορίες ή υπάρχοντα μαθήματα για επαναφορά.'; +$string['originalwwwroot'] = 'URL αντιγράφου ασφαλείας'; $string['preparingdata'] = 'Προετοιμασία δεδομένων'; +$string['preparingui'] = 'Προετοιμασία εμφάνισης σελίδας'; $string['previousstage'] = 'Προηγούμενο'; +$string['qcategory2coursefallback'] = 'Η κατηγορία ερωτήσεων "{$a->name}", αρχικά στο πλαίσιο σύστημα / κατηγορία μαθημάτων στο αρχείο αντιγράφου ασφαλείας, θα δημιουργηθεί στο πλαίσιο μαθήματος κατά την επαναφορά'; +$string['qcategorycannotberestored'] = 'Δεν είναι δυνατή η δημιουργία της κατηγορίας ερωτήσεων "{$a->name}" κατά την επαναφορά'; +$string['question2coursefallback'] = 'Η κατηγορία ερωτήσεων "{$a->name}", αρχικά στο πλαίσιο σύστημα / κατηγορία μαθημάτων στο αρχείο αντιγράφου ασφαλείας, θα δημιουργηθεί στο πλαίσιο μαθήματος κατά την επαναφορά'; +$string['questionegorycannotberestored'] = 'Δεν είναι δυνατή η δημιουργία της κατηγορίας ερωτήσεων "{$a->name}" κατά την επαναφορά'; $string['restoreactivity'] = 'Δραστηριότητα επαναφοράς'; $string['restorecourse'] = 'Επαναφορά μαθήματος'; $string['restorecoursesettings'] = 'Ρυθμίσεις Μαθήματος'; +$string['restoreexecutionsuccess'] = 'Το μάθημα έγινε επαναφορά με επιτυχία, πατώντας το κουμπί Συνέχεια παρακάτω θα δείτε το μάθημα που έγινε επαναφορά.'; +$string['restorefileweremissing'] = 'Δεν είναι εφικτή η επαναφορά κάποιων αρχείων, διότι λείπουν από το αντίγραφο ασφαλείας.'; $string['restorenewcoursefullname'] = 'Νέο όνομα μαθήματος'; +$string['restorenewcourseshortname'] = 'Σύντομο όνομα νέου μαθήματος'; $string['restorenewcoursestartdate'] = 'Νέα ημερομηνία έναρξης'; +$string['restorerolemappings'] = 'Επαναφορά αντιστοιχήσεων ρόλων'; $string['restorerootsettings'] = 'Επαναφορά ρυθμίσεων'; +$string['restoresection'] = 'Επαναφορά ενότητας'; $string['restorestage1'] = 'Επιβεβαίωση'; $string['restorestage16'] = 'Ανασκόπηση'; $string['restorestage16action'] = 'Εκτέλεση επαναφοράς'; @@ -139,6 +217,8 @@ $string['restorestage64action'] = 'Συνέχεια'; $string['restorestage8'] = 'Σχήμα'; $string['restorestage8action'] = 'Επόμενο'; +$string['restoretarget'] = 'Επαναφορά στόχου'; +$string['restoretocourse'] = 'Επαναφορά στο μάθημα:'; $string['restoretocurrentcourse'] = 'Επαναφορά σε αυτό το μάθημα'; $string['restoretocurrentcourseadding'] = 'Συγχώνευση του μαθήματος από το αντίγραφο ασφαλείας σε αυτό το μάθημα'; $string['restoretocurrentcoursedeleting'] = 'Διαγραφή των περιεχομένων αυτού του μαθήματος και επαναφορά'; @@ -146,6 +226,8 @@ $string['restoretoexistingcourseadding'] = 'Συγχώνευση του μαθήματος από το αντίγραφο ασφαλείας στο υφιστάμενο μάθημα'; $string['restoretoexistingcoursedeleting'] = 'Διαγραφή των περιεχομένων του υφιστάμενου μαθήματος και επαναφορά'; $string['restoretonewcourse'] = 'Επαναφορά ως νέο μάθημα'; +$string['restoringcourse'] = 'Επαναφορά μαθήματος σε εξέλιξη'; +$string['restoringcourseshortname'] = 'επαναφορά'; $string['rootenrolmanual'] = 'Επαναφορά ως χειροκίνητες εγγραφές'; $string['rootsettingactivities'] = 'Συμπεριέλαβε δραστηριότητες'; $string['rootsettinganonymize'] = 'Ανωνυμία πληροφοριών χρήστη'; @@ -166,18 +248,30 @@ $string['rootsettingusers'] = 'Συμπερίληψη εγγεγραμμένων χρηστών'; $string['rootsettinguserscompletion'] = 'Συμπεριέλαβε λεπτομερειες ολοκλήρωσης χρήστη'; $string['sectionactivities'] = 'Δραστηριότητες'; +$string['sectioninc'] = 'Συμπεριλαμβάνονται στο αντίγραφο ασφαλείας (χωρίς πληροφορίες χρήστη)'; $string['sectionincanduser'] = 'Συμπεριλαμβάνονται στο αντίγραφο ασφαλείας μαζί με πληροφορίες χρήστη'; $string['selectacategory'] = 'Επιλογή μιας κατηγορίας'; $string['selectacourse'] = 'Επιλογή ενός μαθήματος'; $string['setting_course_fullname'] = 'Όνομα μαθήματος'; $string['setting_course_shortname'] = 'Σύντομο όνομα μαθήματος'; $string['setting_course_startdate'] = 'Ημερομηνία έναρξης μαθήματος'; +$string['setting_keep_groups_and_groupings'] = 'Διατήρηση τρέχοντων ομάδων και ομαδοποιήσεων'; +$string['setting_keep_roles_and_enrolments'] = 'Διατήρηση τρέχοντων ρόλων και εγγραφών'; +$string['setting_overwriteconf'] = 'Αντικατάσταση διαμόρφωσης μαθήματος'; $string['showtypes'] = 'Εμφάνιση επιλογών τύπου'; +$string['sitecourseformatwarning'] = 'Αυτό είναι ένα αντίγραφο ασφαλείας πρώτης σελίδας, σημειώστε ότι μπορέι να γίνει επαναφορά μόνο στην πρώτη σελίδα'; +$string['skiphidden'] = 'Παράβλεψη κρυφών μαθημάτων'; +$string['skiphiddenhelp'] = 'Επιλέξτε αν θα γίνει παράβλεψη ή όχι των κρυφών μαθημάτων'; +$string['skipmodifdays'] = 'Παράβλεψη μαθημάτων που δεν έχουν τροποποιηθεί από'; +$string['skipmodifdayshelp'] = 'Επιλέξτε αν θα γίνει παράβλεψη μαθημάτων που δεν έχουν τροποποιηθεί από έναν αριθμό ημερών'; +$string['skipmodifprev'] = 'Παράβλεψη μαθημάτων που δεν έχουν τροποποιηθεί από το προηγούμενο αντίγραφο ασφαλείας'; +$string['skipmodifprevhelp'] = 'Επιλέξτε αν θα γίνει παράβλεψη μαθημάτων που δεν έχουν τροποποιηθεί από την τελευταία αυτόματη λήψη αντιγράφου ασφαλείας. Αυτό απαιτεί να είναι ενεργοποιημένη η σύνδεση.'; $string['storagecourseandexternal'] = 'Περιοχή αρχείων αντιγράφων ασφαλείας μαθήματος και ο ορισμένος κατάλογος'; $string['storagecourseonly'] = 'Περιοχή αρχείων αντιγράφων ασφαλείας μαθήματος'; $string['storageexternalonly'] = 'Ορισμένος κατάλογος για αυτόματα αντίγραφα ασφαλείας'; $string['timetaken'] = 'Χρόνος που χρειάστηκε'; $string['title'] = 'Τίτλος'; +$string['totalcategorysearchresults'] = 'Σύνολο κατηγοριών: {$a}'; $string['totalcoursesearchresults'] = 'Σύνολο μαθημάτων: {$a}'; $string['unnamedsection'] = 'Ενότητα χωρίς όνομα'; $string['userinfo'] = 'Πληροφορίες χρήστη'; diff --git a/html/moodle2/langpacks/el/badges.php b/html/moodle2/langpacks/el/badges.php index 1fcc18eca8..0d74c063a0 100644 --- a/html/moodle2/langpacks/el/badges.php +++ b/html/moodle2/langpacks/el/badges.php @@ -28,5 +28,7 @@ $string['bmessage'] = 'Μήνυμα'; $string['boverview'] = 'Επισκόπηση'; $string['criteria_1'] = 'Ολοκλήρωση δραστηριότητας'; +$string['criteriasummary'] = 'Σύνοψη κριτηρίων'; $string['message'] = 'Σώμα μηνύματος'; +$string['save'] = 'Αποθήκευση'; $string['subject'] = 'Θέμα μηνύματος'; diff --git a/html/moodle2/langpacks/el/block.php b/html/moodle2/langpacks/el/block.php index c428498084..ea524f28ab 100644 --- a/html/moodle2/langpacks/el/block.php +++ b/html/moodle2/langpacks/el/block.php @@ -25,8 +25,13 @@ defined('MOODLE_INTERNAL') || die(); +$string['blocksettings'] = 'Ρυθμίσεις μπλοκ'; +$string['bracketfirst'] = '{$a} (πρώτο)'; +$string['bracketlast'] = '{$a} (τελευταίο)'; $string['configureblock'] = 'Ρύθμιση μπλοκ {$a}'; +$string['contexts'] = 'Πλαίσια σελίδας'; $string['createdat'] = 'Αρχική θέση μπλοκ'; +$string['createdat_help'] = 'Η αρχική θέση που δημιουργήθηκε το μπλοκ. Οι ρυθμίσεις του μπλοκ μπορεί να προκαλέσουν την εμφάνιση του σε άλλες θέσεις (πλαισία) μέσα στην αρχική θέση. Για παράδειγμα, ένα μπλοκ που δημιουργήθηκε σε μια σελίδα μαθήματος θα μπορούσε να εμφανιστεί σε δραστηριότητες εντός του εν λόγω μαθήματος. Ένα μπλοκ που δημιουργήθηκε στην πρώτη σελίδα μπορεί να εμφανίζεται σε όλο τον ιστοχώρο.'; $string['defaultregion'] = 'Προεπιλεγμένη περιοχή'; $string['defaultweight'] = 'Προεπιλεγμένη βαρύτητα'; $string['defaultweight_help'] = 'Η προεπιλεγμένη βαρύτητα σας επιτρέπει να επιλέξετε περίπου που θέλετε το μπλοκ να εμφανίζεται στην επιλεγμένη περιοχή, είτε στην κορυφή ή στο κάτω μέρος. Η τελική περιοχή υπολογίζεται από όλα τα μπλοκ στην εν λόγω περιοχή (για παράδειγμα, μόνο ένα μπλοκ μπορεί πραγματικά να είναι στην κορυφή). Η τιμή αυτή μπορεί να παρακαμφθεί σε συγκεκριμένες σελίδες, εάν απαιτείται.'; @@ -38,10 +43,15 @@ $string['moveblock'] = 'Μετακίνηση μπλοκ {$a}'; $string['moveblockafter'] = 'Μετακίνηση μπλοκ μετά το μπλοκ {$a}'; $string['moveblockbefore'] = 'Μετακίνηση μπλοκ πριν από το μπλοκ {$a}'; +$string['moveblockinregion'] = 'Μετακίνηση μπλοκ στην περιοχή {$a}'; +$string['movingthisblockcancel'] = 'Μετακίνηση του μπλοκ ({$a})'; $string['onthispage'] = 'Σε αυτή τη σελίδα'; $string['pagetypes'] = 'Τύποι σελίδας'; $string['region'] = 'Περιοχή'; $string['showblock'] = 'Εμφάνιση μπλοκ {$a}'; +$string['showonentiresite'] = 'Εμφάνιση σε όλο τον ιστοχώρο'; +$string['showonfrontpageandsubs'] = 'Εμφάνιση στην πρώτη σελίδα και σε οποιαδήποτε σελίδα προστεθεί στην πρώτη σελίδα'; +$string['showonfrontpageonly'] = 'Εμφάνιση στην πρώτη σελίδα μόνο'; $string['subpages'] = 'Επιλέξτε σελίδες'; $string['visible'] = 'Ορατός'; $string['weight'] = 'Βάρος'; diff --git a/html/moodle2/langpacks/el/block_community.php b/html/moodle2/langpacks/el/block_community.php index 5aad78fae0..5af2468300 100644 --- a/html/moodle2/langpacks/el/block_community.php +++ b/html/moodle2/langpacks/el/block_community.php @@ -27,15 +27,91 @@ $string['activities'] = 'Δραστηριότητες'; $string['add'] = 'Προσθήκη'; +$string['addcommunitycourse'] = 'Προσθήκη μαθήματος κοινότητας'; +$string['addcourse'] = 'Αναζήτηση'; +$string['addedtoblock'] = 'Έχει προστεθεί ένας σύνδεσμος σε αυτό το μάθημα στο μπλοκ εύρεση κοινότητας'; +$string['additionalcoursedesc'] = '{$a->lang} Δημιουργός: {$a->creatorname} - Εκδότης: {$a->publishername} - Θέμα: {$a->subject} +- Ακροατήριο: {$a->audience} - Εκπαιδευτικό επίπεδο: {$a->educationallevel} - Άδεια: {$a->license}'; +$string['addtocommunityblock'] = 'Αποθήκευση συνδέσμου σε αυτό το μάθημα'; +$string['audience'] = 'Σχεδιασμένο για'; +$string['audience_help'] = 'Τι είδους μάθημα ψάχνετε; Όπως παραδοσιακά μαθήματα που προορίζονται για τους μαθητές, μπορείτε να ψάξετε για κοινότητες Εκπαιδευτικών ή Διαχειριστών Moodle'; $string['blocks'] = 'Μπλοκ'; +$string['cannotselecttopsubject'] = 'Αδυναμία επιλογής επιπέδου κορυφαίου θέματος'; $string['comments'] = 'Σχόλια ({$a})'; +$string['community:addinstance'] = 'Προσθήκη νέου μπλοκ εύρεση κοινότητας'; +$string['community:myaddinstance'] = 'Προσθήκη νέου μπλοκ εύρεση κοινότητας στη σελίδα Η αρχική μου'; +$string['contentinfo'] = 'Θέμα: {$a->subject} - Audience: {$a->audience} - Εκπαιδευτικό επίπεδο: {$a->educationallevel}'; +$string['continue'] = 'Συνέχεια'; +$string['contributors'] = '- Συνεισφέροντες: {$a}'; $string['coursedesc'] = 'Περιγραφή'; +$string['courselang'] = 'Γλώσσα'; $string['coursename'] = 'Όνομα'; +$string['courses'] = 'Μαθήματα'; +$string['coverage'] = 'Ετικέτες: {$a}'; +$string['donotrestore'] = 'Όχι'; +$string['dorestore'] = 'Ναι'; $string['download'] = 'Μεταφόρτωση'; +$string['downloadable'] = 'μαθήματα που μπορώ να κατεβάσω'; +$string['downloadablecourses'] = 'Μαθήματα που μπορούν να γίνουν μεταφόρτωση'; +$string['downloadconfirmed'] = 'Το αντίγραφο ασφαλείας έχει αποθηκευτεί στα προσωπικά σας αρχεία {$a}'; +$string['downloaded'] = '...τελείωσε.'; +$string['downloadingcourse'] = 'Μεταφόρτωση μαθήματος'; +$string['downloadingsize'] = 'Παρακαλώ περιμένετε όσο κατεβαίνει το μάθημα ({$a->total}Mb)...'; +$string['downloadtemplate'] = 'Δημιουργία μαθήματος από πρότυπο'; +$string['educationallevel'] = 'Εκπαιδευτικό επίπεδο'; +$string['educationallevel_help'] = 'Τι μορφωτικό επίπεδο ψάχνετε; Στην περίπτωση κοινοτήτων εκπαιδευτικών, το επίπεδο αυτό περιγράφει το επίπεδο που διδάσκουν.'; +$string['enroldownload'] = 'Εύρεση'; +$string['enroldownload_help'] = 'Μερικά μαθήματα που περιλαμβάνονται στο επιλεγμένο κόμβο διαφημίζονται, προκειμένου να έλθουν άτομα και να λάβουν μέρος σε αυτά στον αρχικό ιστοχώρο. + +Άλλα είναι πρότυπα μαθημάτων που παρέχονται για να μπορείτε να τα κατεβάσετε και να χρησιμοποιήσετε στο δικό σας ιστοχώρο Moodle.'; +$string['enrollable'] = 'μαθήματα που μπορώ να εγγραφώ'; +$string['enrollablecourses'] = 'Μαθήματα που μπορούν να γίνουν εγγραφές'; +$string['errorcourselisting'] = 'Προέκυψε σφάλμα κατά την ανάκτηση της λίστα μαθημάτων από τον επιλεγμένο κόμβο, παρακαλώ προσπαθήστε ξανά αργότερα. ({$a})'; +$string['errorhublisting'] = 'Προέκυψε σφάλμα κατά την ανάκτηση της λίστα κόμβων από το Moodle.org, προσπαθήστε ξανά αργότερα. ({$a})'; +$string['fileinfo'] = 'Γλώσσα: {$a->lang} - Άδεια: {$a->license} - Ώρα ενημέρωσης: {$a->timeupdated}'; +$string['hideall'] = 'Απόκρυψη κόμβων'; +$string['hub'] = 'κόμβος'; +$string['hubnottrusted'] = 'Μη έμπιστο'; +$string['hubtrusted'] = 'Αυτός είναι έμπιστος κόμβος από το Moodle.org'; +$string['install'] = 'Εγκατάσταση'; +$string['keywords'] = 'Λέξεις κλειδιά'; +$string['keywords_help'] = 'Μπορείτε να αναζητήσετε μαθήματα που περιέχουν συγκεκριμένο κείμενο στο όνομα, στην περιγραφή και σε άλλα πεδία της βάσης δεδομένων'; +$string['langdesc'] = 'Γλώσσα: {$a} -'; +$string['language'] = 'Γλώσσα'; +$string['language_help'] = 'Μπορείτε να αναζητήσετε μαθήματα σε συγκεκριμένη γλώσσα.'; +$string['licence'] = 'Άδεια'; +$string['licence_help'] = 'Μπορείτε να αναζητήσετε μαθήματα που έχουν λάβει άδεια με ένα συγκεκριμένο τρόπο.'; +$string['moredetails'] = 'Περισσότερες λεπτομέρειες'; +$string['mycommunities'] = 'Οι κοινότητες μου:'; $string['next'] = 'Επόμενο >>>'; $string['nocomments'] = 'Χωρίς Σχόλια'; +$string['nocourse'] = 'Δεν βρέθηκαν μαθήματα'; $string['noratings'] = 'Χωρίς βαθμολόγηση'; $string['operation'] = 'Λειτουργία'; +$string['orderby'] = 'Ταξινόμηση ανά'; +$string['orderbyeldest'] = 'Παλαιότερα'; +$string['orderby_help'] = 'Η σειρά που εμφανίζονται τα αποτελέσματα αναζήτησης.'; $string['orderbyname'] = 'Όνομα'; +$string['orderbynewest'] = 'Νεότερα'; +$string['orderbypublisher'] = 'Εκδότης'; +$string['orderbyratingaverage'] = 'Βαθμολόγηση'; +$string['outcomes'] = 'Αποτελέσματα: {$a}'; $string['pluginname'] = 'Εύρεση κοινότητας'; +$string['rateandcomment'] = 'Βαθμολόγηση και σχόλια'; +$string['rating'] = 'Βαθμολόγηση'; +$string['removecommunitycourse'] = 'Αφαίρεση μαθήματος κοινότητας'; $string['restorecourse'] = 'Επαναφορά μαθήματος'; +$string['restorecourseinfo'] = 'Επαναφορά του μαθήματος;'; +$string['screenshots'] = 'Στιγμιότυπα'; +$string['search'] = 'Αναζήτηση'; +$string['searchcommunitycourse'] = 'Αναζήτηση μαθήματος κοινότητας'; +$string['searchcourse'] = 'Αναζήτηση μαθήματος κοινότητας'; +$string['selecthub'] = 'Επιλογή κόμβου'; +$string['selecthub_help'] = 'Επιλέξτε τον κόμβο από όπου θα αναζητήσετε τα μαθήματα.'; +$string['showall'] = 'Εμφάνιση όλων των κόμβων'; +$string['sites'] = 'Ιστοχώροι'; +$string['subject'] = 'Θέμα'; +$string['subject_help'] = 'Για να περιορίσετε την αναζήτηση μαθημάτων για ένα συγκεκριμένο θέμα, επιλέξτε ένα από τη λίστα.'; +$string['userinfo'] = 'Δημιουργός: {$a->creatorname} - Εκδότης: {$a->publishername}'; +$string['visitdemo'] = 'Δείτε το δοκιμαστικό'; +$string['visitsite'] = 'Δείτε τον ιστοχώρο'; diff --git a/html/moodle2/langpacks/el/block_course_list.php b/html/moodle2/langpacks/el/block_course_list.php index cae871bdf5..f82aefcf18 100644 --- a/html/moodle2/langpacks/el/block_course_list.php +++ b/html/moodle2/langpacks/el/block_course_list.php @@ -29,6 +29,8 @@ $string['allcourses'] = 'Οι διαχειριστές βλέπουν όλα τα μαθήματα'; $string['configadminview'] = 'Τι να βλέπει ο διαχειριστής στο μπλοκ της λίστας των μαθημάτων;'; $string['confighideallcourseslink'] = 'Απόκρυψη του συνδέσμου "όλα τα μαθήματα" στο κάτω μέρος του μπλοκ. Αυτό δεν επηρεάζει τη διαχειριστική προβολή'; +$string['course_list:addinstance'] = 'Προσθήκη νέου μπλοκ νέα μαθήματα'; +$string['course_list:myaddinstance'] = 'Προσθήκη νέου μπλοκ νέα μαθήματα στη σελίδα Η αρχική μου'; $string['hideallcourseslink'] = 'Απόκρυψη του συνδέσμου "όλα τα μαθήματα"'; $string['owncourses'] = 'Οι διαχειριστές βλέπουν μόνο τα δικά τους μαθήματα'; $string['pluginname'] = 'Λίστα Μαθημάτων'; diff --git a/html/moodle2/langpacks/el/block_course_summary.php b/html/moodle2/langpacks/el/block_course_summary.php index 60d2f9d12b..5ab90d5ed5 100644 --- a/html/moodle2/langpacks/el/block_course_summary.php +++ b/html/moodle2/langpacks/el/block_course_summary.php @@ -26,4 +26,5 @@ defined('MOODLE_INTERNAL') || die(); $string['coursesummary'] = 'Περιγραφή μαθήματος'; +$string['course_summary:addinstance'] = 'Προσθήκη νέου μπλοκ σύνοψης μαθήματος/ιστοχώρου'; $string['pluginname'] = 'Περιγραφή σελίδας'; diff --git a/html/moodle2/langpacks/el/calendar.php b/html/moodle2/langpacks/el/calendar.php index b167ef75f7..1ca33862a0 100644 --- a/html/moodle2/langpacks/el/calendar.php +++ b/html/moodle2/langpacks/el/calendar.php @@ -46,6 +46,7 @@ $string['courseevent'] = 'Γεγονός μαθήματος'; $string['courseevents'] = 'Γεγονότα μαθήματος'; $string['courses'] = 'Μαθήματα'; +$string['customexport'] = 'Προσαρμοσμένο εύρος ({$a->timestart} - {$a->timeend})'; $string['daily'] = 'Καθημερινά'; $string['dayviewfor'] = 'Ημερήσια προβολή για:'; $string['dayviewtitle'] = 'Ημερήσια προβολή: {$a}'; @@ -62,6 +63,7 @@ $string['erroraddingevent'] = 'Αποτυχία να προσθέσετε το γεγονός'; $string['errorbadsubscription'] = 'Δεν βρέθηκε συνδρομή στο ημερολόγιο'; $string['errorbeforecoursestart'] = 'Το γεγονός δεν μπορεί να οριστεί πριν την έναρξη του μαθήματος'; +$string['errorcannotimport'] = 'Δεν είναι δυνατή ο ορισμός μιας συνδρομής στο ημερολόγιο αυτή τη στιγμή.'; $string['errorinvaliddate'] = 'Μη έγκυρη ημερομηνία'; $string['errorinvalidicalurl'] = 'Η συγκεκριμένη διεύθυνση URL iCal είναι άκυρη.'; $string['errorinvalidminutes'] = 'Προσδιορίστε την διάρκεια σε λεπτά δίνοντας έναν αριθμό από το 1 ως το 999.'; @@ -69,6 +71,9 @@ $string['errornodescription'] = 'Η περιγραφή απαιτείται'; $string['errornoeventname'] = 'Το όνομα απαιτείται'; $string['errorrequiredurlorfile'] = 'Είτε μια διεύθυνση URL ή ένα αρχείο είναι υποχρεωτικό για να εισαγάγετε ένα ημερολόγιο.'; +$string['errorrrule'] = 'Ο κανόνας προβιβασμού είναι λάθος'; +$string['errorrruleday'] = 'Ο κανόνας έχει μια μη έγκυρη παράμετρο'; +$string['errorrrulefreq'] = 'Ο κανόνας έχει μια μη έγκυρη παράμετρο συχνότητας'; $string['eventcalendareventcreated'] = 'Το ημερολογιακό γεγονός δημιουργήθηκε'; $string['eventcalendareventdeleted'] = 'Το ημερολογιακό γεγονός διαγράφηκε'; $string['eventcalendareventupdated'] = 'Το ημερολογιακό γεγονός ενημερώθηκε'; @@ -121,6 +126,7 @@ $string['importfrominstructions'] = 'Παρακαλώ δώστε μια διεύθυνση URL για ένα απομακρυσμένο ημερολόγιο, ή ανεβάστε ένα αρχείο.'; $string['importfromurl'] = 'Ημερολόγιο URL'; $string['invalidtimedurationminutes'] = 'Η διάρκεια σε λεπτά που έχετε εισάγει δεν είναι έγκυρη. Παρακαλώ εισάγετε την διάρκεια σε λεπτά μεγαλύτερη από 0 ή επιλέξτε Όχι διάρκεια.'; +$string['invalidtimedurationuntil'] = 'Η ημερομηνία και η ώρα που επιλέξατε για διάρκεια έως είναι προγενέστερη από την ώρα έναρξης του γεγονότος. Παρακαλώ διορθώστε πριν προχωρήσετε.'; $string['iwanttoexport'] = 'Θέλω να εξάγω το ημερολόγιο σε άλλο πρόγραμμα'; $string['managesubscriptions'] = 'Διαχείριση συνδρομών'; $string['manyevents'] = '{$a} γεγονότα'; @@ -143,12 +149,15 @@ $string['preferences_available'] = 'Οι προσωπικές σας προτιμήσεις'; $string['preferredcalendar'] = 'Προτεινόμενο ημερολόγιο'; $string['pref_lookahead'] = 'Προεπισκόπηση επικείμενων γεγονότων'; +$string['pref_lookahead_help'] = 'Ορίζει το (μέγιστο) αριθμό ημερών στο μέλλον που θα ξεκινήσεις ένα γεγονός προκειμένου να εμφανιστεί ως επερχόμενο γεγονός. Γεγονότα που ξεκινούν πέρα από αυτό δεν θα εμφανίζονται ως επικείμενα. Παρακαλώ σημειώστε ότι δεν υπάρχει καμία εγγύηση ότι όλα τα γεγονότα που ξεκινούν σε αυτό το το χρονικό πλαίσιο θα εμφανιστούν. Αν υπάρχουν πάρα πολλά (πάνω από την προτίμηση "Μέγιστος αριθμός επικείμενων γεγονότων"), τότε τα πιο μακρινά γεγονότα δεν θα εμφανίζονται.'; $string['pref_maxevents'] = 'Μέγιστο πλήθος επικείμενων γεγονότων'; $string['pref_maxevents_help'] = 'Εδώ ορίζεται ο μέγιστος αριθμός επικείμενων γεγονότων που μπορούν να εμφανιστούν. Αν επιλέξετε μεγάλο αριθμό γεγονότων, τότε υπάρχει περίπτωση να χρησιμοποιηθεί μεγάλο μέρος της οθόνης σας για την εμφάνισή τους.'; $string['pref_persistflt'] = 'Αποθήκευση ρυθμίσεων φίλτρου'; $string['pref_persistflt_help'] = 'Αν είναι ενεργοποιημένο, τότε το Moodle θα θυμάται τις τελευταίες ρυθμίσεις φίλτρου για την περίπτωση σας και θα τις επαναφέρει αυτόματα κάθε φορά που θα συνδέεστε.'; $string['pref_startwday'] = 'Πρώτη μέρα εβδομάδας'; +$string['pref_startwday_help'] = 'Οι εβδομάδες στο ημερολόγιο θα εμφανίζονται ως αρχής γενομένης από την ημέρα που θα επιλέξετε εδώ.'; $string['pref_timeformat'] = 'Μορφή εμφάνισης ώρας'; +$string['pref_timeformat_help'] = 'Μπορείτε να επιλέξετε να δείτε την ώρα σε 12 ή 24 ωρη μορφή. Αν επιλέξετε "προεπιλογή", τότε η μορφή θα επιλεγεί αυτόματα ανάλογα με τη γλώσσα που χρησιμοποιείτε στον ιστοχώρο.'; $string['quickdownloadcalendar'] = 'Συνδρομή στο ημερολόγιο'; $string['recentupcoming'] = 'Πρόσφατα και επικείμενα'; $string['repeatedevents'] = 'Επαναλαμβανόμενα γεγονότα'; @@ -168,7 +177,10 @@ $string['siteevents'] = 'Γεγονότα ιστοχώρου'; $string['spanningevents'] = 'Γεγονότα σε εξέλιξη'; $string['subscriptionname'] = 'Όνομα ημερολογίου'; +$string['subscriptionremoved'] = 'Η συνδρομή στο ημερολόγιο {$a} αφαιρέθηκε'; $string['subscriptions'] = 'Συνδρομές'; +$string['subscriptionupdated'] = 'Η συνδρομή στο ημερολόγιο {$a} ενημερώθηκε'; +$string['subsource'] = 'Πηγή γεγονότος: {$a->name}'; $string['sun'] = 'Κυρ'; $string['sunday'] = 'Κυριακή'; $string['thu'] = 'Πεμ'; diff --git a/html/moodle2/langpacks/el/cohort.php b/html/moodle2/langpacks/el/cohort.php index 545104b8a5..3053da40c2 100644 --- a/html/moodle2/langpacks/el/cohort.php +++ b/html/moodle2/langpacks/el/cohort.php @@ -34,4 +34,5 @@ $string['idnumber'] = 'ID ομάδας χρηστών'; $string['memberscount'] = 'Μέγεθος ομάδων χρηστών'; $string['name'] = 'Όνομα'; +$string['preview'] = 'Προεπισκόπηση'; $string['visible'] = 'Ορατό'; diff --git a/html/moodle2/langpacks/el/data.php b/html/moodle2/langpacks/el/data.php index 71d38a067a..bbbe246296 100644 --- a/html/moodle2/langpacks/el/data.php +++ b/html/moodle2/langpacks/el/data.php @@ -277,6 +277,7 @@ $string['optionaldescription'] = 'Μικρή περιγραφή (προαιρετικό)'; $string['optionalfilename'] = 'Όνομα αρχείου (προαιρετικό)'; $string['other'] = 'Άλλο'; +$string['overrwritedesc'] = 'Αντικατάσταση προκαθορισμένου αν υπάρχει ήδη'; $string['overwrite'] = 'Επικάλυψη'; $string['overwritesettings'] = 'Επικάλυψη τρέχουσας ρύθμισης'; $string['pagesize'] = 'Καταχωρήσεις ανά σελίδα'; diff --git a/html/moodle2/langpacks/el/datafield_file.php b/html/moodle2/langpacks/el/datafield_file.php new file mode 100644 index 0000000000..3a129cf237 --- /dev/null +++ b/html/moodle2/langpacks/el/datafield_file.php @@ -0,0 +1,28 @@ +. + +/** + * Strings for component 'datafield_file', language 'el', branch 'MOODLE_31_STABLE' + * + * @package datafield_file + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['pluginname'] = 'Αρχείο'; diff --git a/html/moodle2/langpacks/el/enrol_flatfile.php b/html/moodle2/langpacks/el/enrol_flatfile.php index 8046bc2a21..35c453bf71 100644 --- a/html/moodle2/langpacks/el/enrol_flatfile.php +++ b/html/moodle2/langpacks/el/enrol_flatfile.php @@ -25,6 +25,7 @@ defined('MOODLE_INTERNAL') || die(); +$string['encoding'] = 'Κωδικοποίηση αρχείου'; $string['filelockedmail'] = 'Το αρχείο κειμένου που χρησιμοποιείτε για εγγραφές βασισμένες σε αρχεία ({$a}) δεν μπορεί να διαγραφεί από την διαδικασία cron. Αυτό συνήθως σημαίνει ότι τα δικαιώματα σε αυτήν είναι λάθος. Παρακαλώ διορθώστε τα δικαιώματα ώστε το ΠΗΛΕΑΣ να διαγράψει το αρχείο αυτό, ειδάλλως ίσως να εκτελείται επανειλημμένα.'; $string['filelockedmailsubject'] = 'Σημαντικό σφάλμα: Αρχείο εγγραφής'; $string['location'] = 'Τοποθεσία αρχείου'; diff --git a/html/moodle2/langpacks/el/enrol_ldap.php b/html/moodle2/langpacks/el/enrol_ldap.php index 87f704c488..603bff9af2 100644 --- a/html/moodle2/langpacks/el/enrol_ldap.php +++ b/html/moodle2/langpacks/el/enrol_ldap.php @@ -38,8 +38,10 @@ $string['course_settings'] = 'Ρυθμίσεις εγγραφής σε μάθημα'; $string['course_shortname'] = 'Προαιρετικό: Το πεδίο LDAP για τη λήψη του σύντομου ονόματος.'; $string['course_summary'] = 'Προαιρετικό: Το πεδίο LDAP για τη λήψη της περίληψης.'; +$string['course_summary_key'] = 'Σύνοψη'; $string['editlock'] = 'Κλείδωμα τιμής'; $string['enrolname'] = 'LDAP'; +$string['enroluserenable'] = 'Ενεργοποιημένη εγγραφή για το χρήστη \'{$a->user_username}\''; $string['general_options'] = 'Γενικές επιλογές'; $string['host_url'] = 'Ορίστε τον κεντρικό υπολογιστή LDAP host σε μορφή URL όπως \'ldap://ldap.myorg.com/\' ή \'ldaps://ldap.myorg.com/\''; diff --git a/html/moodle2/langpacks/el/error.php b/html/moodle2/langpacks/el/error.php index 45820528d0..affa3ee926 100644 --- a/html/moodle2/langpacks/el/error.php +++ b/html/moodle2/langpacks/el/error.php @@ -238,6 +238,7 @@ $string['invalidcategory'] = 'Λανθασμένη κατηγορία!'; $string['invalidcategoryid'] = 'Λανθασμένο id κατηγορίας!'; $string['invalidcomment'] = 'Το σχόλιο είναι λανθασμένο'; +$string['invalidcomponent'] = 'Μη έγκυρο όνομα συστατικού'; $string['invalidconfirmdata'] = 'Μη έγκυρα δεδομένα επιβεβαίωσης'; $string['invalidcontext'] = 'Μη έγκυρο πλαίσιο'; $string['invalidcourse'] = 'Μη έγκυρο μάθημα'; diff --git a/html/moodle2/langpacks/el/gradeimport_direct.php b/html/moodle2/langpacks/el/gradeimport_direct.php new file mode 100644 index 0000000000..04e7b58f35 --- /dev/null +++ b/html/moodle2/langpacks/el/gradeimport_direct.php @@ -0,0 +1,29 @@ +. + +/** + * Strings for component 'gradeimport_direct', language 'el', branch 'MOODLE_31_STABLE' + * + * @package gradeimport_direct + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['direct:view'] = 'Εισαγωγή βαθμών από CSV'; +$string['pluginname'] = 'Επικόλληση από Φύλλο εργασίας'; diff --git a/html/moodle2/langpacks/el/gradeimport_xml.php b/html/moodle2/langpacks/el/gradeimport_xml.php index b4ff3602c1..b32d32d7d6 100644 --- a/html/moodle2/langpacks/el/gradeimport_xml.php +++ b/html/moodle2/langpacks/el/gradeimport_xml.php @@ -32,7 +32,9 @@ $string['errincorrectidnumber'] = 'Σφάλμα - λανθασμένος αναγνωριστικός αριθμός'; $string['errincorrectuseridnumber'] = 'Σφάλμα - ο αναγνωριστικός αριθμός \'{$a}\' από το αρχείο εισαγωγής δεν αντιστοιχεί σε κάποιον χρήστη.'; $string['error'] = 'Συνέβησαν σφάλματα'; +$string['errorduringimport'] = 'Προέκυψε σφάλμα κατα την εισαγωγή: {$a}'; $string['fileurl'] = 'Τοποθεσία απομακρυσμένου αρχείου'; +$string['importxml'] = 'Εισαγωγή XML'; $string['pluginname'] = 'Αρχείο XML'; $string['xml:publish'] = 'Δημοσίευση εισαγωγής βαθμών από αρχείο XML'; $string['xml:view'] = 'Εισαγωγή βαθμών από αρχείο XML'; diff --git a/html/moodle2/langpacks/el/gradereport_grader.php b/html/moodle2/langpacks/el/gradereport_grader.php index fafc34acc7..3ab9f38bce 100644 --- a/html/moodle2/langpacks/el/gradereport_grader.php +++ b/html/moodle2/langpacks/el/gradereport_grader.php @@ -26,6 +26,8 @@ defined('MOODLE_INTERNAL') || die(); $string['ajaxchoosescale'] = 'Επιλέξτε'; +$string['ajaxerror'] = 'Σφάλμα'; +$string['ajaxfailedupdate'] = 'Δεν είναι εφικτή η ενημέρωση [1] από [2]'; $string['grader:manage'] = 'Διαχείριση της αναφοράς βαθμολογητή'; $string['grader:view'] = 'Εμφάνιση της αναφοράς βαθμολογητή'; $string['pluginname'] = 'Αναφορά βαθμολογητή'; diff --git a/html/moodle2/langpacks/el/gradereport_history.php b/html/moodle2/langpacks/el/gradereport_history.php index 3f12bfdc93..12d396a336 100644 --- a/html/moodle2/langpacks/el/gradereport_history.php +++ b/html/moodle2/langpacks/el/gradereport_history.php @@ -25,4 +25,9 @@ defined('MOODLE_INTERNAL') || die(); +$string['foundnusers'] = 'Βρέθηκαν {$a} χρήστες'; +$string['foundoneuser'] = 'Βρέθηκε 1 χρήστης'; +$string['grader'] = 'Βαθμολογητής'; $string['preferences'] = 'Προτιμήσεις ιστορικού βαθμού'; +$string['selectedusers'] = 'Επιλεγμένοι χρήστες'; +$string['source'] = 'Πηγή'; diff --git a/html/moodle2/langpacks/el/gradereport_singleview.php b/html/moodle2/langpacks/el/gradereport_singleview.php new file mode 100644 index 0000000000..2f7b2dd6bb --- /dev/null +++ b/html/moodle2/langpacks/el/gradereport_singleview.php @@ -0,0 +1,30 @@ +. + +/** + * Strings for component 'gradereport_singleview', language 'el', branch 'MOODLE_31_STABLE' + * + * @package gradereport_singleview + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['bulklegend'] = 'Μαζική εισαγωγή'; +$string['bulkperform'] = 'Εκτέλεση μαζικής εισαγωγής'; +$string['save'] = 'Αποθήκευση'; diff --git a/html/moodle2/langpacks/el/gradereport_user.php b/html/moodle2/langpacks/el/gradereport_user.php index c3a32f5444..681e5df76c 100644 --- a/html/moodle2/langpacks/el/gradereport_user.php +++ b/html/moodle2/langpacks/el/gradereport_user.php @@ -25,5 +25,6 @@ defined('MOODLE_INTERNAL') || die(); +$string['otheruser'] = 'Χρήστης'; $string['pluginname'] = 'Αναφορά χρήστη'; $string['user:view'] = 'Εμφάνιση της δικής σας αναφοράς χρήστη'; diff --git a/html/moodle2/langpacks/el/grading.php b/html/moodle2/langpacks/el/grading.php index 1b2516d12f..a2350fc1b9 100644 --- a/html/moodle2/langpacks/el/grading.php +++ b/html/moodle2/langpacks/el/grading.php @@ -28,3 +28,4 @@ $string['changeactivemethod'] = 'Αλλαγή ενεργής μεθόδου βαθμολόγησης σε'; $string['gradingmethod'] = 'Μέθοδος βαθμολόγησης'; $string['gradingmethods'] = 'Μέθοδοι βαθμολόγησης'; +$string['templatesource'] = 'Τοποθεσία: {$a->component} ({$a->area})'; diff --git a/html/moodle2/langpacks/el/gradingform_guide.php b/html/moodle2/langpacks/el/gradingform_guide.php index 20aee10848..afd13660c0 100644 --- a/html/moodle2/langpacks/el/gradingform_guide.php +++ b/html/moodle2/langpacks/el/gradingform_guide.php @@ -25,5 +25,15 @@ defined('MOODLE_INTERNAL') || die(); +$string['backtoediting'] = 'Επιστροφή στην επεξεργασίας'; +$string['clicktoedit'] = 'Πατήστε για επεξεργασία'; +$string['comment'] = 'Σχόλιο'; $string['comments'] = 'Συχνά χρησιμοποιούμενα σχόλια'; +$string['commentsdelete'] = 'Διαγραφή σχολίου'; +$string['criterion'] = 'Όνομα κριτηρίου'; +$string['criteriondelete'] = 'Διαγραφή κριτηρίου'; +$string['criterionempty'] = 'Πατήστε για επεξεργασία κριτηρίου'; +$string['criterionname'] = 'Όνομα κριτηρίου'; +$string['description'] = 'Περιγραφή'; +$string['name'] = 'Όνομα'; $string['regradeoption1'] = 'Σημείωση για αναβαθμολόγηση'; diff --git a/html/moodle2/langpacks/el/hvp.php b/html/moodle2/langpacks/el/hvp.php new file mode 100644 index 0000000000..bf372b311f --- /dev/null +++ b/html/moodle2/langpacks/el/hvp.php @@ -0,0 +1,31 @@ +. + +/** + * Strings for component 'hvp', language 'el', branch 'MOODLE_31_STABLE' + * + * @package hvp + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['cancellabel'] = 'Ακύρωση'; +$string['filenotimage'] = 'Το αρχείο δεν είναι εικόνα.'; +$string['librarylisttitle'] = 'Τίτλος'; +$string['title'] = 'Τίτλος'; diff --git a/html/moodle2/langpacks/el/lesson.php b/html/moodle2/langpacks/el/lesson.php index f17b02b2f1..447ce65c01 100644 --- a/html/moodle2/langpacks/el/lesson.php +++ b/html/moodle2/langpacks/el/lesson.php @@ -193,6 +193,7 @@ $string['emailgradedessays'] = 'Αποστολή με ηλεκτρονικό ταχυδρομείο τις βαθμολογημένες εκθέσεις'; $string['emailsuccess'] = 'Τα μηνύματα ηλεκτρονικού ταχυδρομείου στάλθηκαν με επιτυχία'; $string['emptypassword'] = 'Ο κωδικός πρόσβασης δεν μπορεί να είναι κενός'; +$string['enabled'] = 'Ενεργοποιημένο'; $string['endofbranch'] = 'Τέλος διακλάδωσης'; $string['endofclustertitle'] = 'Τέλος συστοιχίας'; $string['endoflesson'] = 'Τέλος ενότητας'; diff --git a/html/moodle2/langpacks/el/lti.php b/html/moodle2/langpacks/el/lti.php index b149da2e86..e37e752865 100644 --- a/html/moodle2/langpacks/el/lti.php +++ b/html/moodle2/langpacks/el/lti.php @@ -26,4 +26,6 @@ defined('MOODLE_INTERNAL') || die(); $string['basiclti_in_new_window'] = 'Η δραστηριότητα έχει ανοίξει σε νέο παράθυρο'; +$string['cancel'] = 'Ακύρωση'; +$string['cancelled'] = 'Ακυρώθηκε'; $string['submissions'] = 'Υποβολές'; diff --git a/html/moodle2/langpacks/el/message.php b/html/moodle2/langpacks/el/message.php index a7b5df6fed..b1b20e503f 100644 --- a/html/moodle2/langpacks/el/message.php +++ b/html/moodle2/langpacks/el/message.php @@ -52,6 +52,7 @@ $string['emailmessages'] = 'Αποστολή ηλεκτρονικού ταχυδρομείου όταν δεν είμαι συνδεδεμένος/η'; $string['emailtagline'] = 'Αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου είναι αντίγραφο του μηνύματος που σας στάλθηκε στις από "{$a->sitename}". Πατήστε στο {$a->url} για να απαντήσετε.'; $string['emptysearchstring'] = 'Πρέπει να ψάξετε για κάτι'; +$string['enabled'] = 'Ενεργοποιημένο'; $string['errorcallingprocessor'] = 'Σφάλμα κατά την κλήση του ορισμένου επεξεργαστή'; $string['eventmessagesent'] = 'Το μήνυμα σταλθηκε'; $string['forced'] = 'Επιβάλλεται'; diff --git a/html/moodle2/langpacks/el/moodle.php b/html/moodle2/langpacks/el/moodle.php index 47cac26c0d..9061ae70d5 100644 --- a/html/moodle2/langpacks/el/moodle.php +++ b/html/moodle2/langpacks/el/moodle.php @@ -202,6 +202,7 @@ $string['backuptakealook'] = 'Παρακαλώ δείτε τα αρχεία καταγραφής των αντιγράφων ασφαλείας: {$a}'; $string['backupuserfileshelp'] = 'Να συμπεριλαμβάνονται τα αρχεία των χρηστών στα αυτόματα αντίγραφα ασφαλείας'; $string['backupversion'] = 'Έκδοση αντίγραφου ασφαλείας'; +$string['badges'] = 'Κονκάρδες'; $string['block'] = 'Μπλοκ'; $string['blockconfiga'] = 'Ρύθμιση ενός {$a} μπλοκ'; $string['blockconfigbad'] = 'Αυτό το μπλοκ δεν έχει ρυθμιστεί σωστά και δεν παρέχει διεπαφή ρυθμίσεων.'; @@ -269,6 +270,7 @@ $string['collapse'] = 'Σύμπτυξη'; $string['collapseall'] = 'Σύμπτυξη όλων'; $string['collapsecategory'] = 'Σύμπτυξη {$a}'; +$string['commentincontext'] = 'Εύρεση του σχολίου στα συμφραζόμενα'; $string['comments'] = 'Σχόλια'; $string['commentscount'] = 'Σχόλια ({$a})'; $string['commentsnotenabled'] = 'Τα σχόλια δεν είναι ενεργοποιημένα'; @@ -337,6 +339,7 @@ $string['coursedisplay_multi'] = 'Παρουσίαση ενός θέματος ανά σελίδα'; $string['coursedisplay_single'] = 'Εμφάνιση όλων των τμημάτων σε μία σελίδα'; $string['coursefiles'] = 'Αρχεία μαθήματος'; +$string['coursefilesedit'] = 'Επεξεργασία κληρονομημένων αρχείων μαθήματος'; $string['coursefileswarning'] = 'Τα αρχεία του μαθήματος είναι παλιά.'; $string['coursefileswarning_help'] = 'Τα αρχεία του μαθήματος είναι παλαιότερα από το Moodle 2.0, παρακαλούμε όπως χρησιμοποιήσετε εξωτερικές πηγές όπου είναι δυνατόν.'; $string['courseformatdata'] = 'Διαμόρφωση δεδομένων μαθήματος'; @@ -360,6 +363,8 @@ $string['coursenotaccessible'] = 'Σε αυτό το μάθημα δεν επιτρέπονται επισκέπτες'; $string['courseoverview'] = 'Σύνοψη του μαθήματος'; $string['courseoverviewfiles'] = 'Περίληψη αρχείων μαθήματος'; +$string['courseoverviewfilesext'] = 'Επεκτάσεις αρχείων σύνοψης μαθήματος'; +$string['courseoverviewfileslimit'] = 'Όριο αρχείων σύνοψης μαθήματος'; $string['courseoverviewgraph'] = 'Γράφημα επισκόπησης του μαθήματος'; $string['courseprofiles'] = 'Προφίλ μαθήματος'; $string['coursereasonforrejecting'] = 'Οι λόγοι για τους οποίους απορρίπτετε αυτό το αίτημα'; @@ -556,6 +561,7 @@ $string['editorresettodefaults'] = 'Αρχικές ρυθμίσεις'; $string['editorsettings'] = 'Ρυθμίσεις του επεξεργαστή κειμένου'; $string['editorshortcutkeys'] = 'Επεξεργαστής πλήκτρων συντόμευσης'; +$string['editsection'] = 'Επεξεργασία ενότητας'; $string['editsectionname'] = 'Επεξεργασία τίτλου τομέα'; $string['editsettings'] = 'Επεξεργασία ρυθμίσεων'; $string['editsummary'] = 'Επεξεργασία της σύνοψης'; @@ -564,6 +570,8 @@ $string['edittitle'] = 'Επεξεργασία τίτλου'; $string['edituser'] = 'Επεξεργασία των λογαριασμών των χρηστών'; $string['edulevel'] = 'Όλα τα γεγονότα'; +$string['edulevelother'] = 'Άλλο'; +$string['edulevelparticipating'] = 'Συμμετοχή'; $string['edulevelteacher'] = 'Διδασκαλία'; $string['email'] = 'Διεύθυνση ηλεκτρονικού ταχυδρομείου'; $string['emailactive'] = 'Το email ενεργοποιήθηκε'; @@ -688,13 +696,18 @@ $string['errorwhenconfirming'] = 'Δεν έχει γίνει η επιβεβαίωση ακόμα γιατί προκλήθηκε σφάλμα. Αν βρεθήκατε εδώ πατώντας ένα σύνδεσμο σε email, βεβαιωθείτε ότι η γραμμή του συνδέσμου δεν ήταν σπασμένη ή διακεκομμένη. Πιθανώς να χρειαστεί να κολλήσετε μόνοι σας το σύνδεσμο.'; $string['eventcommentcreated'] = 'Το σχόλιο δημιουργήθηκε'; $string['eventcommentdeleted'] = 'Το σχόλιο διαγράφηκε'; +$string['eventcommentsviewed'] = 'Προβολή σχολίων'; +$string['eventcontentviewed'] = 'Προβολή περιεχομένου'; $string['eventcoursecategorycreated'] = 'Η κατηγορία δημιουργήθηκε'; $string['eventcoursecategorydeleted'] = 'Η κατηγορία διαγράφηκε'; $string['eventcoursecategoryupdated'] = 'Η κατηγορία ενημερώθηκε'; +$string['eventcoursecontentdeleted'] = 'Το περιεχόμενο του μαθήματος έχει διαγραφεί'; $string['eventcoursecreated'] = 'Το μάθημα δημιουργήθηκε'; $string['eventcoursedeleted'] = 'Το μάθημα διαγράφηκε'; +$string['eventcoursemoduleviewed'] = 'Προβολή αρθρώματος μαθήματος'; $string['eventcourserestored'] = 'Το μάθημα ανακτήθηκε'; $string['eventcourseupdated'] = 'Το μάθημα ενημερώθηκε'; +$string['eventcourseviewed'] = 'Προβολή μαθήματος'; $string['eventemailfailed'] = 'Η αποστολή email απέτυχε'; $string['eventname'] = 'Όνομα γεγονότος'; $string['eventunknownlogged'] = 'Άγνωστο γεγονός'; @@ -713,7 +726,9 @@ $string['existingcreators'] = 'Υπάρχοντες δημιουργοί μαθημάτων'; $string['existingstudents'] = 'Εγγεγραμμένοι φοιτητές'; $string['existingteachers'] = 'Υπάρχοντες διδάσκοντες'; +$string['expand'] = 'Ανάπτυξη'; $string['expandall'] = 'Ανάπτυξη όλων'; +$string['expandcategory'] = 'Ανάπτυξη {$a}'; $string['explanation'] = 'Επεξήγηση'; $string['extendenrol'] = 'Επέκταση περιόδου εγγραφών'; $string['extendperiod'] = 'Επέκταση περιόδου'; @@ -784,6 +799,7 @@ $string['frontpagecategorycombo'] = 'Λίστα συνδυασμού'; $string['frontpagecategorynames'] = 'Εμφάνιση μιας λίστας κατηγοριών'; $string['frontpagecourselist'] = 'Εμφάνιση μιας λίστας μαθημάτων'; +$string['frontpagecoursesearch'] = 'Πλαίσιο αναζήτησης μαθήματος'; $string['frontpagedescription'] = 'Περιγραφή της αρχικής σελίδας'; $string['frontpagedescriptionhelp'] = 'Αυτή η περιγραφή θα προβάλλεται στην πρώτη σελίδα.'; $string['frontpageformat'] = 'Μορφή της αρχικής σελίδας'; @@ -1088,11 +1104,14 @@ $string['moduleintro'] = 'Περιγραφή'; $string['modulesetup'] = 'Ρύθμιση των πινάκων του αρθρώματος'; $string['modulesuccess'] = '{$a} έχουν ρυθμιστεί σωστά'; +$string['month'] = 'Μήνα'; +$string['months'] = 'Μήνες'; $string['moodledocs'] = 'Αρχεία βοήθειας'; $string['moodledocslink'] = 'Αρχεία βοήθειας για αυτήν τη σελίδα'; $string['moodleversion'] = 'Έκδοση του Moodle'; $string['more'] = 'περισσότερα'; $string['morehelp'] = 'Περισσότερη βοήθεια'; +$string['moreinfo'] = 'Περισσότερες πληροφορίες'; $string['moreinformation'] = 'Περισσότερες πληροφορίες για αυτό το λάθος'; $string['moreprofileinfoneeded'] = 'Παρακαλώ γράψτε κάτι για τον εαυτό σας'; $string['mostrecently'] = 'πιο πρόσφατα'; @@ -1101,6 +1120,7 @@ $string['movecategoryto'] = 'Μετακίνηση του τμήματος στο:'; $string['movecontentstoanothercategory'] = 'Μετακίνηση περιεχομένωνμ σε άλλη κατηγορία'; $string['movecoursemodule'] = 'Μετακίνησε πόρο'; +$string['movecoursesection'] = 'Μετακίνηση ενότητας'; $string['movecourseto'] = 'Μετακίνηση μαθήματος σε:'; $string['movedown'] = 'Μετακίνηση κάτω'; $string['movefilestohere'] = 'Μετακίνηση αρχείων εδώ'; diff --git a/html/moodle2/langpacks/el/page.php b/html/moodle2/langpacks/el/page.php index 849f7a7683..b712c04812 100644 --- a/html/moodle2/langpacks/el/page.php +++ b/html/moodle2/langpacks/el/page.php @@ -36,7 +36,9 @@ $string['page:addinstance'] = 'Προσθήκη νέου πόρου σελίδας'; $string['page:view'] = 'Εμφάνιση περιεχομένου σελίδας'; $string['pluginname'] = 'Σελίδα'; +$string['popupheight'] = 'Ύψος αναδυόμενου παράθυρου (σε εικονοστοιχεία)'; $string['popupheightexplain'] = 'Καθορίζει το προεπιλεγμένο ύψος του αναδυόμενου παράθυρου.'; +$string['popupwidth'] = 'Πλάτος αναδυόμενου παράθυρου (σε εικονοστοιχεία)'; $string['popupwidthexplain'] = 'Καθορίζει το προεπιλεγμένο πλάτος του αναδυόμενου παράθυρου.'; $string['printintro'] = 'Εμφάνιση περιγραφής σελίδας'; $string['printintroexplain'] = 'Εμφάνιση περιγραφής σελίδας πάνω από το περιεχόμενο;'; diff --git a/html/moodle2/langpacks/el/pagetype.php b/html/moodle2/langpacks/el/pagetype.php index d4daa54d78..09e39d986a 100644 --- a/html/moodle2/langpacks/el/pagetype.php +++ b/html/moodle2/langpacks/el/pagetype.php @@ -26,3 +26,4 @@ defined('MOODLE_INTERNAL') || die(); $string['page-my-index'] = 'Η αρχική μου σελίδα'; +$string['page-site-index'] = 'Η πρώτη σελίδα μόνο'; diff --git a/html/moodle2/langpacks/el/plugin.php b/html/moodle2/langpacks/el/plugin.php index ad9100085b..da3a63769c 100644 --- a/html/moodle2/langpacks/el/plugin.php +++ b/html/moodle2/langpacks/el/plugin.php @@ -71,4 +71,5 @@ $string['type_theme_plural'] = 'Θέματα'; $string['type_webservice_plural'] = 'Πρωτόκολλα webservice'; $string['uninstall'] = 'Απεγκατάσταση'; +$string['validationmsg_componentmatch'] = 'Πλήρες όνομα συστατικού'; $string['version'] = 'Έκδοση'; diff --git a/html/moodle2/langpacks/el/qtype_ddimageortext.php b/html/moodle2/langpacks/el/qtype_ddimageortext.php index 4da9dc27b6..c6bdbcf5e4 100644 --- a/html/moodle2/langpacks/el/qtype_ddimageortext.php +++ b/html/moodle2/langpacks/el/qtype_ddimageortext.php @@ -26,3 +26,4 @@ defined('MOODLE_INTERNAL') || die(); $string['correctansweris'] = 'Η σωστή απάντηση είναι: {$a}'; +$string['previewareaheader'] = 'Προεπισκόπηση'; diff --git a/html/moodle2/langpacks/el/qtype_ddmarker.php b/html/moodle2/langpacks/el/qtype_ddmarker.php index c77aab4534..00e887c05e 100644 --- a/html/moodle2/langpacks/el/qtype_ddmarker.php +++ b/html/moodle2/langpacks/el/qtype_ddmarker.php @@ -26,3 +26,4 @@ defined('MOODLE_INTERNAL') || die(); $string['correctansweris'] = 'Η σωστή απάντηση είναι: {$a}'; +$string['previewareaheader'] = 'Προεπισκόπηση'; diff --git a/html/moodle2/langpacks/el/question.php b/html/moodle2/langpacks/el/question.php index a10e31bb17..bf7f2299f5 100644 --- a/html/moodle2/langpacks/el/question.php +++ b/html/moodle2/langpacks/el/question.php @@ -309,6 +309,9 @@ $string['specificfeedback'] = 'Ειδική ανάδραση'; $string['submit'] = 'Υποβολή'; $string['submitted'] = 'Υποβολή: {$a}'; +$string['technicalinfoquestionsummary'] = 'Σύνοψη ερώτησης: {$a}'; +$string['technicalinforesponsesummary'] = 'Σύνοψη απάντησης: {$a}'; +$string['technicalinforightsummary'] = 'Σύνοψη σωστής απάντησης: {$a}'; $string['tofilecategory'] = 'Εγγραφή κατηγορίας σε αρχείο'; $string['tofilecontext'] = 'Εγγραφή πλαισίου σε αρχείο'; $string['uninstallqtype'] = 'Απεγκατάσταση αυτού του τύπου ερώτησης.'; diff --git a/html/moodle2/langpacks/el/questionnaire.php b/html/moodle2/langpacks/el/questionnaire.php index c6a1240913..5b1528a6a8 100644 --- a/html/moodle2/langpacks/el/questionnaire.php +++ b/html/moodle2/langpacks/el/questionnaire.php @@ -39,6 +39,7 @@ $string['modulenameplural'] = 'Ερωτηματολόγια'; $string['pluginadministration'] = 'Διαχείριση ερωτηματολογίου'; $string['pluginname'] = 'Ερωτηματολόγιο'; +$string['preview_label'] = 'Προεπισκόπηση'; $string['preview_questionnaire'] = 'Προεπισκόπηση Ερωτηματολογίου'; $string['questionnaire:addinstance'] = 'Προσθήκη νέου ερωτηματολογίου'; $string['questionnaireadministration'] = 'Διαχείριση Ερωτηματολογίου'; @@ -51,4 +52,5 @@ $string['resume'] = 'Αποθήκευση/Συνέχιση απαντήσεων'; $string['sectiontext'] = 'Ετικέτα'; $string['submitsurvey'] = 'Υποβολή ερωτηματολογίου'; +$string['summary'] = 'Σύνοψη'; $string['title'] = 'Τίτλος'; diff --git a/html/moodle2/langpacks/el/quiz_responses.php b/html/moodle2/langpacks/el/quiz_responses.php index 1e5d49b14b..e332876fe9 100644 --- a/html/moodle2/langpacks/el/quiz_responses.php +++ b/html/moodle2/langpacks/el/quiz_responses.php @@ -36,3 +36,6 @@ $string['responsesreport'] = 'Αναφορά απαντήσεων'; $string['responsestitle'] = 'Αναλυτικές απαντήσεις'; $string['rightanswerx'] = 'Σωστή απάντηση {$a}'; +$string['summaryofquestiontext'] = 'Σύνοψη ερώτησης'; +$string['summaryofresponse'] = 'Σύνοψη απάντησης που δόθηκε'; +$string['summaryofrightanswer'] = 'Σύνοψη σωστής απάντησης'; diff --git a/html/moodle2/langpacks/el/report_eventlist.php b/html/moodle2/langpacks/el/report_eventlist.php new file mode 100644 index 0000000000..8f9cdc6228 --- /dev/null +++ b/html/moodle2/langpacks/el/report_eventlist.php @@ -0,0 +1,28 @@ +. + +/** + * Strings for component 'report_eventlist', language 'el', branch 'MOODLE_31_STABLE' + * + * @package report_eventlist + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['component'] = 'Συστατικό'; diff --git a/html/moodle2/langpacks/el/report_log.php b/html/moodle2/langpacks/el/report_log.php index c866352f8e..624c9da383 100644 --- a/html/moodle2/langpacks/el/report_log.php +++ b/html/moodle2/langpacks/el/report_log.php @@ -25,6 +25,7 @@ defined('MOODLE_INTERNAL') || die(); +$string['eventcomponent'] = 'Συστατικό'; $string['eventrelatedfullnameuser'] = 'Χρήστης που επηρεάζεται'; $string['log:view'] = 'Προβολη αρχείων καταγραφής μαθήματος'; $string['log:viewtoday'] = 'Προβολή σημερινών αρχείων καταγραφής'; diff --git a/html/moodle2/langpacks/el/report_loglive.php b/html/moodle2/langpacks/el/report_loglive.php index 1ad52a37b8..1f5d85ae7f 100644 --- a/html/moodle2/langpacks/el/report_loglive.php +++ b/html/moodle2/langpacks/el/report_loglive.php @@ -25,6 +25,7 @@ defined('MOODLE_INTERNAL') || die(); +$string['eventcomponent'] = 'Συστατικό'; $string['eventrelatedfullnameuser'] = 'Χρήστης που επηρεάζεται'; $string['livelogs'] = 'Αρχεία καταγραφής της τελευταίας ώρας'; $string['pluginname'] = 'Ενεργά αρχεία καταγραφής'; diff --git a/html/moodle2/langpacks/el/report_outline.php b/html/moodle2/langpacks/el/report_outline.php index 9d8b605f6f..e02aba941b 100644 --- a/html/moodle2/langpacks/el/report_outline.php +++ b/html/moodle2/langpacks/el/report_outline.php @@ -27,3 +27,4 @@ $string['neverseen'] = 'Ποτέ δεν εμφανίστηκαν'; $string['outline:view'] = 'Προβολή αναφοράς δραστηριότητας μαθήματος'; +$string['pluginname'] = 'Αναφορά δραστηριοτήτων'; diff --git a/html/moodle2/langpacks/el/report_performance.php b/html/moodle2/langpacks/el/report_performance.php index 1500b9debf..6db71e4a58 100644 --- a/html/moodle2/langpacks/el/report_performance.php +++ b/html/moodle2/langpacks/el/report_performance.php @@ -25,4 +25,5 @@ defined('MOODLE_INTERNAL') || die(); +$string['enabled'] = 'Ενεργοποιημένο'; $string['morehelp'] = 'περισσότερη βοήθεια'; diff --git a/html/moodle2/langpacks/el/repository.php b/html/moodle2/langpacks/el/repository.php index 3be922b376..d761a40d49 100644 --- a/html/moodle2/langpacks/el/repository.php +++ b/html/moodle2/langpacks/el/repository.php @@ -33,6 +33,7 @@ $string['allowexternallinks'] = 'Επιτρέπονται εξωτερικοί σύνδεσμοι'; $string['areacategoryintro'] = 'Εισαγωγή στην κατηγορία'; $string['areacourseintro'] = 'Εισαγωγή στο μάθημα'; +$string['areacourseoverviewfiles'] = 'Αρχεία σύνοψης μαθήματος'; $string['arearoot'] = 'Σύστημα'; $string['areauserdraft'] = 'Προσχέδια'; $string['areauserpersonal'] = 'Προσωπικά'; @@ -109,6 +110,8 @@ $string['on'] = 'Ενεργοποιημένο και ορατό'; $string['openpicker'] = 'Επιλέξτε ένα αρχείο...'; $string['operation'] = 'Λειτουργία'; +$string['overwrite'] = 'Αντικατάσταση'; +$string['overwriteall'] = 'Αντικατάσταση όλων'; $string['personalrepositories'] = 'Προσωπικοί χώροι αποθήκευσης'; $string['plugin'] = 'Υπομονάδες λογισμικού χώρου αποθήκευσης'; $string['pluginname'] = 'Όνομα πρόσθετης λειτουργίας χώρου αποθήκευσης'; diff --git a/html/moodle2/langpacks/el/repository_equella.php b/html/moodle2/langpacks/el/repository_equella.php new file mode 100644 index 0000000000..d8859d6c41 --- /dev/null +++ b/html/moodle2/langpacks/el/repository_equella.php @@ -0,0 +1,28 @@ +. + +/** + * Strings for component 'repository_equella', language 'el', branch 'MOODLE_31_STABLE' + * + * @package repository_equella + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['restrictionitemsonly'] = 'Σύνοψη αντικειμένων μόνο'; diff --git a/html/moodle2/langpacks/el/resource.php b/html/moodle2/langpacks/el/resource.php index 6633559aca..e5a04eab94 100644 --- a/html/moodle2/langpacks/el/resource.php +++ b/html/moodle2/langpacks/el/resource.php @@ -25,6 +25,8 @@ defined('MOODLE_INTERNAL') || die(); +$string['clicktodownload'] = 'Πατήστε στο σύνδεσμο {$a} για να κατεβάσετε το αρχείο.'; +$string['clicktoopen2'] = 'Πατήστε στο σύνδεσμο {$a} για να δείτε το αρχείο.'; $string['configdisplayoptions'] = 'Επιλέξτε όλες τις επιλογές που θα πρέπει να είναι διαθέσιμες, οι υπάρχουσες ρυθμίσεις δεν τροποποιούνται. Κρατήστε πατημένο το πλήκτρο CTRL για να επιλέξετε πολλαπλά πεδία.'; $string['configframesize'] = 'Όταν μια ιστοσελίδα ή ένα φορτωμένο αρχείο εμφανίζεται μέσα σε πλαίσιο, αυτή η τιμή είναι το μέγεθος (σε εικονοστοιχεία) του πλαισίου στην κορυφή (που περιέχει την πλοήγηση).'; $string['configparametersettings'] = 'Αυτό ορίζει την προκαθορισμένη τιμή για τις ρυθμίσεις Παραμέτρων στην φόρμα όταν προστίθενται νέες πηγές. Μετά την πρώτη φορά, αυτό γίνεται προσωπική επιλογή του κάθε χρήστη.'; @@ -43,22 +45,56 @@ $string['displayselect'] = 'Εμφάνιση'; $string['displayselectexplain'] = 'Επιλέξτε τύπο εμφάνισης, δυστυχώς δεν είναι όλοι οι τύποι κατάλληλοι για όλα τα αρχεία.'; $string['displayselect_help'] = 'Η ρύθμιση αυτή, μαζί με τον τύπο αρχείου και κατά πόσον ο περιηγητής επιτρέπει την ενσωμάτωση, καθορίζει πως θα εμφανίζεται το αρχείο. Οι επιλογές περιλαμβάνουν: * Αυτόματο - Η καλύτερη επιλογή εμφάνισης για τον τύπο αρχείου είναι να επιλεγεί αυτόματα * Ενσωμάτωση -Το αρχείο εμφανίζεται μέσα στη σελίδα κάτω από τη μπάρα πλοήγησης μαζί με την περιγραφή του αρχείου και οποιοδήποτε μπλοκ * Επιβολή κατεβάσματος αρχείου - Ζητείται από το χρήστη να κατεβάσει το αρχείο * Ανοιχτό - Μόνο το αρχείο εμφανίζεται στο παράθυρο του περιηγητή * Σε αναδυόμενο παράθυρο - Το αρχείο εμφανίζεται σε ένα νέο παράθυρο του περιηγητή χωρίς μενού ή γραμμή διευθύνσεων * Σε πλαίσιο - Το αρχείο εμφανίζεται μέσα σε ένα πλαίσιο κάτω από τη μπάρα πλοήγησης και την περιγραφή αρχείου * Νέο παράθυρο - Το αρχείο εμφανίζεται σε ένα νέο παράθυρο περιηγητή με μενού και γραμμή διευθύνσεων'; +$string['dnduploadresource'] = 'Δημιουργία πηγής πληροφόρισης'; $string['encryptedcode'] = 'Κρυπτογραφημένος Κώδικας'; +$string['filenotfound'] = 'Το αρχείο δεν βρέθηκε'; $string['filterfiles'] = 'Χρήση φίλτρων για το περιεχόμενο αρχείου'; $string['filterfilesexplain'] = 'Επιλέξτε τύπο φιλτραρίσματος για το περιεχόμενο του αρχείου, παρακαλώ σημειώστε ότι αυτό μπορεί να προκαλέσει προβλήματα για ορισμένες Flash και Java εφαρμογές. Παρακαλώ βεβαιωθείτε ότι όλα τα αρχεία κειμένου είναι σε κωδικοποίηση UTF-8.'; $string['filtername'] = 'Αυτόματη σύνδεση ονομάτων πηγών'; $string['forcedownload'] = 'Επιβολή κατεβάσματος αρχείου'; $string['framesize'] = 'Μέγεθος πλαισίου'; +$string['legacyfiles'] = 'Μετάπτωση από παλαιότερο αρχείο μαθήματος'; +$string['legacyfilesactive'] = 'Ενεργό'; +$string['legacyfilesdone'] = 'Τελείωσε'; +$string['modifieddate'] = 'Τροποποιήθηκε {$a}'; $string['modulename'] = 'Πηγή πληροφοριών'; +$string['modulename_help'] = 'Το άρθρωμα πηγή πληροφοριών επιτρέπει σε έναν διδάσκοντα να παρέχει ένα αρχείο ως πόρος του μαθήματος. Όπου είναι δυνατόν, το αρχείο θα εμφανιστεί στη διεπαφή του μαθήματος, διαφορετικά θα ζητηθεί από τους μαθητές να το κατεβάσουν. Το αρχείο μπορεί να περιλαμβάνει συνοδευτικά αρχεία, για παράδειγμα, μια σελίδα HTML μπορεί να έχει ενσωματωμένες εικόνες ή Flash αντικείμενα.

+Σημειώστε ότι οι μαθητές πρέπει να έχουν το κατάλληλο λογισμικό στους υπολογιστές τους για να ανοίξουν το αρχείο.

+Ένα αρχείο μπορεί να χρησιμοποιηθεί

+* Για το διαμοιρασμό παρουσιάσειων στην τάξη
+* Για να συμπεριλάβετε μια μίνι ιστοσελίδα ως πόρο του μαθήματος
+* Για να παρέχει προσχέδια αρχείων συγκεκριμένων προγραμμάτων λογισμικού (π.χ. Photoshop .psd), έτσι ώστε οι μαθητές να μπορούν να τα επεξεργαστούν και να τα υποβάλουν προς αξιολόγηση'; $string['modulenameplural'] = 'Πηγές πληροφοριών'; +$string['notmigrated'] = 'Αυτός ο τύπος κληρονομιά πόρων ({$ a}) δεν είχε ακόμη μεταναστεύσει, συγγνώμη.'; +$string['optionsheader'] = 'Επιλογές εμφάνισης'; +$string['page-mod-resource-x'] = 'Οποιαδήποτε σελίδα του αρθρώματος πηγή πληροφοριών'; +$string['pluginadministration'] = 'Διαχείριση αρθρώματος πηγή πληροφοριών'; $string['pluginname'] = 'Πηγή πληροφοριών'; +$string['popupheight'] = 'Ύψος αναδυόμενου παραθύρου (σε εικονοστοιχεία)'; $string['popupheightexplain'] = 'Καθορίζει το προεπιλεγμένο ύψος του αναδυόμενου παράθυρου.'; $string['popupresource'] = 'Αυτή η πηγή θα εμφανιστεί αυτόματα σε αναδυόμενο παράθυρο.'; $string['popupresourcelink'] = 'Εάν αυτό δε συμβεί, πατήστε εδώ: {$a}'; +$string['popupwidth'] = 'Πλάτος αναδυόμενου παραθύρου (σε εικονοστοιχεία)'; $string['popupwidthexplain'] = 'Καθορίζει το προεπιλεγμένο πλάτος του αναδυόμενου παράθυρου.'; $string['printintro'] = 'Έμφάνιση περιγραφής πηγής'; $string['printintroexplain'] = 'Εμφάνιση περιγραφής πηγής κάτω από το περιεχόμενο; Ορισμένοι τύποι εμφάνισης μπορεί να μην εμφανίζουν την περιγραφή, ακόμα και αν έχει ενεργοποιηθεί.'; $string['resource:addinstance'] = 'Προσθήκη νέου πόρου'; +$string['resourcecontent'] = 'Αρχεία και υπο-φάκελοι'; $string['resource:exportresource'] = 'Export resource'; $string['resource:view'] = 'Προβολή πηγής'; $string['search:activity'] = 'Πηγή πληροφοριών'; +$string['selectmainfile'] = 'Παρακαλώ επιλέξτε το βασικό αρχείο πατώντας το εικονίδιο δίπλα από το όνομα αρχείου.'; +$string['showdate'] = 'Εμφάνιση ημερομηνίας μεταφόρτωσης/τροποποίησης'; +$string['showdate_desc'] = 'Εμφάνιση ημερομηνίας μεταφόρτωσης/τροποποίησης στη σελίδα μαθήματος;'; +$string['showdate_help'] = 'Εμφανίζει την ημερομηνία μεταφόρτωσης/τροποποίησης δίπλα από τους συνδέσμους στο αρχείο.

+Αν υπάρχουν πολλαπλά αρχεία σε αυτό τον πόρο, θα εμφανιστεί η ημερομηνία μεταφόρτωσης/τροποποίησης του αρχείου εκκίνησης.'; +$string['showsize'] = 'Εμφάνιση μεγέθους'; +$string['showsize_desc'] = 'Εμφάνιση μεγέθους αρχείου στη σελίδα μαθήματος;'; +$string['showsize_help'] = 'Εμφανίζει το μέγεθος του αρχείου δίπλα από τους συνδέσμους στο αρχείο.

+Αν υπάρχουν πολλαπλά αρχεία σε αυτό τον πόρο, θα εμφανιστεί το συνολικό μέγεθος όλων των αρχείων.'; +$string['showtype'] = 'Εμφάνιση τύπου'; +$string['showtype_desc'] = 'Εμφάνιση τύπου αρχείου (π.χ. \'αρχείο Word\') στη σελίδα μαθήματος;'; +$string['showtype_help'] = 'Εμφανίζει τον τύπο του αρχείου, όπως \'αρχείο Word\', δίπλα από τους συνδέσμους στο αρχείο.

+Αν υπάρχουν πολλαπλά αρχεία σε αυτό τον πόρο, θα εμφανιστεί το συνολικό μέγεθος όλων των αρχείων.

+Αν ο τύπος αρχείου δεν είναι γνώριμος στο σύστημα, δεν θα εμφανιστεί.'; +$string['uploadeddate'] = 'Μεταφορτώθηκε {$a}'; diff --git a/html/moodle2/langpacks/el/role.php b/html/moodle2/langpacks/el/role.php index 0591b3663a..3a752cdf16 100644 --- a/html/moodle2/langpacks/el/role.php +++ b/html/moodle2/langpacks/el/role.php @@ -118,6 +118,7 @@ $string['comment:view'] = 'Ανάγνωση σχολίων'; $string['community:add'] = 'Χρήση του μπλοκ της κοινότητας για αναζήτηση κόμβων και εύρεση μαθημάτων'; $string['community:download'] = 'Κατέβασμα μαθήματος από το μπλοκ της κοινότητας'; +$string['confirmunassignno'] = 'Ακύρωση'; $string['context'] = 'Πλαίσιο'; $string['course:activityvisibility'] = 'Προβολή/απόκρυψη δραστηριοτήτων'; $string['course:bulkmessaging'] = 'Αποστολή ενός μηνύματος σε πολλούς παραλήπτες'; diff --git a/html/moodle2/langpacks/el/tag.php b/html/moodle2/langpacks/el/tag.php index b93dfe90c4..8347b0bd3b 100644 --- a/html/moodle2/langpacks/el/tag.php +++ b/html/moodle2/langpacks/el/tag.php @@ -30,6 +30,7 @@ $string['addtagtomyinterests'] = 'Προσθήκη του "{$a}" στα ενδιαφέροντά μου'; $string['changename'] = 'Αλλαγή ονόματος ετικέτας'; $string['changetype'] = 'Αλλαγή τύπου ετικέτας'; +$string['component'] = 'Συστατικό'; $string['count'] = 'Αριθμός'; $string['coursetags'] = 'Ετικέτες μαθήματος'; $string['delete'] = 'Διαγραφή'; @@ -71,6 +72,7 @@ $string['showingfirsttags'] = 'Προβάλλονται οι {$a} περισσότερο δημοφιλείς ετικέτες'; $string['tag'] = 'Ετικέτα'; $string['tagarea_course_modules'] = 'Δραστηριότητες και πόροι'; +$string['tagareaenabled'] = 'Ενεργοποιημένο'; $string['tagarea_user'] = 'Ενδιαφέροντα χρήστη'; $string['tagdescription'] = 'Περιγραφή ετικέτας'; $string['taggedwith'] = 'σχετικό με "{$a}"'; diff --git a/html/moodle2/langpacks/el/tool_customlang.php b/html/moodle2/langpacks/el/tool_customlang.php index b0a8581847..bfe4e3c4c7 100644 --- a/html/moodle2/langpacks/el/tool_customlang.php +++ b/html/moodle2/langpacks/el/tool_customlang.php @@ -25,5 +25,6 @@ defined('MOODLE_INTERNAL') || die(); +$string['headingcomponent'] = 'Συστατικό'; $string['markuptodate'] = 'σημείωση ως ενημερωμένο'; $string['pluginname'] = 'Γλωσσική προσαρμογή'; diff --git a/html/moodle2/langpacks/el/tool_filetypes.php b/html/moodle2/langpacks/el/tool_filetypes.php index cc06d581f2..4fd5e5cfa4 100644 --- a/html/moodle2/langpacks/el/tool_filetypes.php +++ b/html/moodle2/langpacks/el/tool_filetypes.php @@ -26,3 +26,4 @@ defined('MOODLE_INTERNAL') || die(); $string['addfiletypes'] = 'Προσθήκη νέου τύπου αρχείου'; +$string['pluginname'] = 'Τύποι αρχείου'; diff --git a/html/moodle2/langpacks/el/tool_lp.php b/html/moodle2/langpacks/el/tool_lp.php index f525a80491..059713c579 100644 --- a/html/moodle2/langpacks/el/tool_lp.php +++ b/html/moodle2/langpacks/el/tool_lp.php @@ -29,3 +29,5 @@ $string['competencyoutcome_complete'] = 'σημείωση ως ολοκληρωμένο'; $string['competencyoutcome_none'] = 'Κανένα'; $string['uponcoursemodulecompletion'] = 'Με την ολοκλήρωση δραστηριότητας:'; +$string['userevidencefiles'] = 'Αρχεία'; +$string['userevidencesummary'] = 'Σύνοψη'; diff --git a/html/moodle2/langpacks/el/tool_messageinbound.php b/html/moodle2/langpacks/el/tool_messageinbound.php new file mode 100644 index 0000000000..868413bfe8 --- /dev/null +++ b/html/moodle2/langpacks/el/tool_messageinbound.php @@ -0,0 +1,29 @@ +. + +/** + * Strings for component 'tool_messageinbound', language 'el', branch 'MOODLE_31_STABLE' + * + * @package tool_messageinbound + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['component'] = 'Συστατικό'; +$string['enabled'] = 'Ενεργοποιημένο'; diff --git a/html/moodle2/langpacks/el/tool_profiling.php b/html/moodle2/langpacks/el/tool_profiling.php new file mode 100644 index 0000000000..e3567c6a4d --- /dev/null +++ b/html/moodle2/langpacks/el/tool_profiling.php @@ -0,0 +1,29 @@ +. + +/** + * Strings for component 'tool_profiling', language 'el', branch 'MOODLE_31_STABLE' + * + * @package tool_profiling + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['lastrunof'] = 'Σύνοψη τελευταίας εκτέλεσης {$a}'; +$string['summaryof'] = 'Σύνοψη {$a}'; diff --git a/html/moodle2/langpacks/el/tool_task.php b/html/moodle2/langpacks/el/tool_task.php new file mode 100644 index 0000000000..dc1a75e58b --- /dev/null +++ b/html/moodle2/langpacks/el/tool_task.php @@ -0,0 +1,28 @@ +. + +/** + * Strings for component 'tool_task', language 'el', branch 'MOODLE_31_STABLE' + * + * @package tool_task + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['component'] = 'Συστατικό'; diff --git a/html/moodle2/langpacks/el/tool_templatelibrary.php b/html/moodle2/langpacks/el/tool_templatelibrary.php new file mode 100644 index 0000000000..7a7ae92723 --- /dev/null +++ b/html/moodle2/langpacks/el/tool_templatelibrary.php @@ -0,0 +1,29 @@ +. + +/** + * Strings for component 'tool_templatelibrary', language 'el', branch 'MOODLE_31_STABLE' + * + * @package tool_templatelibrary + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['all'] = 'Όλα τα συστατικά'; +$string['component'] = 'Συστατικό'; diff --git a/html/moodle2/langpacks/el/tool_uploadcourse.php b/html/moodle2/langpacks/el/tool_uploadcourse.php index f2db93190c..97e3d204eb 100644 --- a/html/moodle2/langpacks/el/tool_uploadcourse.php +++ b/html/moodle2/langpacks/el/tool_uploadcourse.php @@ -25,4 +25,18 @@ defined('MOODLE_INTERNAL') || die(); +$string['coursefile'] = 'Αρχείο'; +$string['csvdelimiter'] = 'Διαχωριστικό CSV'; +$string['csvdelimiter_help'] = 'Διαχωριστικό αρχείου CSV.'; +$string['encoding'] = 'Κωδικοποίηση'; +$string['encoding_help'] = 'Κωδικοποίηση αρχείου CSV.'; +$string['importoptions'] = 'Επιλογές εισαγωγής'; $string['invalidcourseformat'] = 'Μη έγκυρος τύπος μαθήματος'; +$string['mode'] = 'Τρόπος ανεβάσματος'; +$string['preview'] = 'Προεπισκόπηση'; +$string['rowpreviewnum'] = 'Προεπισκόπηση γραμμών'; +$string['updatemode'] = 'Τρόπος ενημέρωσης'; +$string['updatemodedoessettonothing'] = 'Ο τρόπος ενημέρωσης δεν επιτρέπει την ενημέρωση'; +$string['uploadcourses'] = 'Ανέβασμα μαθημάτων'; +$string['uploadcoursespreview'] = 'Προεπισκόπηση μαθημάτων που ανέβηκαν'; +$string['uploadcoursesresult'] = 'Αποτελέσματα μαθημάτων που ανέβηκαν'; diff --git a/html/moodle2/langpacks/el/url.php b/html/moodle2/langpacks/el/url.php index cd00c5cb27..b205f930fd 100644 --- a/html/moodle2/langpacks/el/url.php +++ b/html/moodle2/langpacks/el/url.php @@ -34,7 +34,9 @@ $string['displayselect'] = 'Εμφάνιση'; $string['externalurl'] = 'Εξωτερικό URL'; $string['framesize'] = 'Ύψος πλαισίου'; +$string['popupheight'] = 'Ύψος αναδυόμενου παραθύρου (σε εικονοστοιχεία)'; $string['popupheightexplain'] = 'Καθορίζει το προεπιλεγμένο ύψος του αναδυόμενου παράθυρου.'; +$string['popupwidth'] = 'Πλάτος αναδυόμενου παραθύρου (σε εικονοστοιχεία)'; $string['popupwidthexplain'] = 'Καθορίζει το προεπιλεγμένο πλάτος του αναδυόμενου παράθυρου.'; $string['printintro'] = 'Εμφάνιση περιγραφής URL'; $string['rolesinparams'] = 'Συμπεριλάβετε τα ονόματα ρόλων στις παραμέτρους'; diff --git a/html/moodle2/langpacks/el/wiki.php b/html/moodle2/langpacks/el/wiki.php index 22088b658c..5e61ee6ce3 100644 --- a/html/moodle2/langpacks/el/wiki.php +++ b/html/moodle2/langpacks/el/wiki.php @@ -31,6 +31,7 @@ $string['defaultformat'] = 'Προεπιλεγμένη μορφή'; $string['defaultformat_help'] = 'Αυτή η ρύθμιση καθορίζει την προεπιλεγμένη μορφή που θα χρησιμοποιείται κατά την επεξεργασία των wiki σελίδων. * HTML - Ο επεξεργαστής HTML είναι διαθέσιμος * Creole - Μια συνηθισμένη γλώσσα σήμανσης για το wiki για την οποία μια μικρή μόνο γραμμή εργαλείων επεξεργασίας είναι διαθέσιμη * Nwiki - όπως η Mediawiki γλώσσα σήμανσης χρησιμοποιείται για την συνεισφορά στην Nwiki ενότητα'; $string['diff'] = 'Διαφ'; +$string['files'] = 'Αρχεία'; $string['filtername'] = 'Αυτόματη σύνδεση σελίδων wiki'; $string['firstpagetitle'] = 'Όνομα πρώτης σελίδας'; $string['firstpagetitle_help'] = 'Ο τίτλος από την πρώτη σελίδα του wiki.'; diff --git a/html/moodle2/langpacks/el/workshop.php b/html/moodle2/langpacks/el/workshop.php index 47fc432057..541a548df0 100644 --- a/html/moodle2/langpacks/el/workshop.php +++ b/html/moodle2/langpacks/el/workshop.php @@ -64,8 +64,11 @@ $string['nosubmissions'] = 'Δεν υπάρχουν υποβολές για αυτό το εργαστήριο'; $string['noworkshops'] = 'Δεν υπάρχουν εργαστήρια στο μάθημα'; $string['noyoursubmission'] = 'Δεν έχετε υποβάλει την εργασία σας ακόμα'; +$string['overallfeedbackmode_1'] = 'Ενεργοποιημένο και προαιρετικό'; +$string['overallfeedbackmode_2'] = 'Ενεργοποιημένο και απαιτούμενο'; $string['pluginadministration'] = 'Διαχείριση εργαστηρίου'; $string['pluginname'] = 'Εργαστήριο'; +$string['previewassessmentform'] = 'Προεπισκόπηση'; $string['reassess'] = 'Επανεξέταση'; $string['recentassessments'] = 'Εργασίες εργαστηρίου:'; $string['recentsubmissions'] = 'Υποβολές εργαστηρίου'; diff --git a/html/moodle2/langpacks/en/auth_googleoauth2.php b/html/moodle2/langpacks/en/auth_googleoauth2.php index a1a8cd6b6c..dd1254fb81 100644 --- a/html/moodle2/langpacks/en/auth_googleoauth2.php +++ b/html/moodle2/langpacks/en/auth_googleoauth2.php @@ -46,9 +46,7 @@
Site URL: {$a->siteurl}
App domains: {$a->sitedomain}
Valid OAuth redirect URIs: {$a->callbackurl} -
WARNING: Facebook recently changed the API. It is not working for newly created API key. For example we know it is broken from Facebook API 2.8 -and it is working up to Facebook API 2.2. We didn\'t test Facebook API 2.3, 2.4, 2.5, 2.6 and 2.7. To summarize if you don\'t have already an old Facebook API key, -then it is guarantee that Facebook won\'t work in this login. Please look at plugin alternatives or wait for the next plugin big update (not planned yet).'; +
'; $string['auth_facebookclientid_key'] = 'Facebook App ID'; $string['auth_facebookclientsecret'] = ''; $string['auth_facebookclientsecret_key'] = 'Facebook App secret'; @@ -123,6 +121,7 @@ $string['pluginname'] = 'Oauth2'; $string['signinwithanaccount'] = 'Log in with {$a}'; $string['stattitle'] = 'Login statistics for the last {$a->periodindays} days (starting from the plugin installation/upgrade time)'; -$string['supportmaintenance'] = 'To support the maintenance of this plugin, login to the Moodle.org plugin page and click \'Add to my favourites\'. Thanks!'; +$string['supportmaintenance'] = 'Starting from Moodle 3.3, Oauth2 will be supported in Moodle core. We highly encourage you to upgrade to Moodle 3.3 and use the Oauth2 core authentication plugin(s). This plugin is not used by the maintainer so when a critical bug arise you need to rely on the community to find a fix. A similar problem occuring on Moodle core is very likely to be resolved much faster by Moodle HQ. +Please understand you are using a third party plugin to manage your users authentication. When problems occurs with an authentication plugin they are never minor.'; $string['unknownfirstname'] = 'Unknown Firstname'; $string['unknownlastname'] = 'Unknown Lastname'; diff --git a/html/moodle2/langpacks/en/hvp.php b/html/moodle2/langpacks/en/hvp.php new file mode 100644 index 0000000000..7ad7d5b93f --- /dev/null +++ b/html/moodle2/langpacks/en/hvp.php @@ -0,0 +1,271 @@ +. + +/** + * Strings for component 'hvp', language 'en', branch 'MOODLE_31_STABLE' + * + * @package hvp + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['action'] = 'Action'; +$string['addedandupdatelibraries'] = 'Added {$a->%new} new H5P libraries and updated {$a->%old} old.'; +$string['addednewlibraries'] = 'Added {$a->%new} new H5P libraries.'; +$string['addlibraries'] = 'Add libraries'; +$string['ajaxfailed'] = 'Failed to load data.'; +$string['attribution'] = 'Attribution 4.0'; +$string['attributionnc'] = 'Attribution-NonCommercial 4.0'; +$string['attributionncnd'] = 'Attribution-NonCommercial-NoDerivs 4.0'; +$string['attributionncsa'] = 'Attribution-NonCommercial-ShareAlike 4.0'; +$string['attributionnd'] = 'Attribution-NoDerivs 4.0'; +$string['attributionsa'] = 'Attribution-ShareAlike 4.0'; +$string['author'] = 'Author'; +$string['cancellabel'] = 'Cancel'; +$string['close'] = 'Close'; +$string['confirmdialogbody'] = 'Please confirm that you wish to proceed. This action is not reversible.'; +$string['confirmdialogheader'] = 'Confirm action'; +$string['confirmlabel'] = 'Confirm'; +$string['contentchanged'] = 'This content has changed since you last used it.'; +$string['contentstatefrequency'] = 'Save content state frequency'; +$string['contentstatefrequency_help'] = 'In seconds, how often do you wish the user to auto save their progress. Increase this number if you\'re having issues with many ajax requests'; +$string['contenttypecacheheader'] = 'Content Type Cache'; +$string['copyright'] = 'Rights of use'; +$string['copyrightinfo'] = 'Copyright information'; +$string['copyrightstring'] = 'Copyright'; +$string['copyrighttitle'] = 'View copyright information for this content.'; +$string['couldnotcopy'] = 'Could not copy file.'; +$string['couldnotsave'] = 'Could not save file.'; +$string['create'] = 'Create'; +$string['ctcachebuttonlabel'] = 'Update content type cache'; +$string['ctcacheconnectionfailed'] = 'Couldn\'t communicate with the H5P Hub. Please try again later.'; +$string['ctcachedescription'] = 'Making sure the content type cache is up to date will ensure that you can view, download and use the latest libraries. This is different from updating the libraries themselves.'; +$string['ctcachelastupdatelabel'] = 'Last update'; +$string['ctcacheneverupdated'] = 'Never'; +$string['ctcachenolibraries'] = 'No content types were received from the H5P Hub. Please try again later.'; +$string['ctcachesuccess'] = 'Library cache was successfully updated!'; +$string['ctcachetaskname'] = 'Update content type cache'; +$string['currentpage'] = 'Page $current of $total'; +$string['disablefileextensioncheck'] = 'Disable file extension check'; +$string['disablefileextensioncheckwarning'] = 'Warning! Disabling the file extension check may have security implications as it allows for uploading of php files. That in turn could make it possible for attackers to execute malicious code on your site. Please make sure you know exactly what you\'re uploading.'; +$string['disablefullscreen'] = 'Disable fullscreen'; +$string['disablehubconfirmationmsg'] = 'Do you still want to enable the hub ?'; +$string['disablehubdescription'] = 'It\'s strongly encouraged to keep this option enabled. The H5P Hub provides an easy interface for getting new content types and keeping existing content types up to date. In the future, it will also make it easier to share and reuse content. If this option is disabled you\'ll have to install and update content types through file upload forms.'; +$string['displayoptionalwaysshow'] = 'Always show'; +$string['displayoptionauthoroff'] = 'Controlled by author, default is off'; +$string['displayoptionauthoron'] = 'Controlled by author, default is on'; +$string['displayoptionnevershow'] = 'Never show'; +$string['displayoptionpermissions'] = 'Show only if user has permissions to export H5P'; +$string['displayoptions'] = 'Display Options'; +$string['download'] = 'Download'; +$string['downloadfailed'] = 'Downloading the requested library failed.'; +$string['downloadtitle'] = 'Download this content as a H5P file.'; +$string['editor'] = 'Editor'; +$string['embed'] = 'Embed'; +$string['embedtitle'] = 'View the embed code for this content.'; +$string['empty'] = 'No results available'; +$string['enableabout'] = 'About H5P button'; +$string['enablecopyright'] = 'Copyright button'; +$string['enabledlrscontenttypes'] = 'Enable LRS dependent content types'; +$string['enabledlrscontenttypes_help'] = 'Makes it possible to use content types that rely upon a Learning Record Store to function properly, like the Questionnaire content type.'; +$string['enabledownload'] = 'Download button'; +$string['enableembed'] = 'Embed button'; +$string['enableframe'] = 'Display action bar and frame'; +$string['enablehublabel'] = 'Use H5P Hub'; +$string['enablejavascript'] = 'Please enable JavaScript.'; +$string['enablesavecontentstate'] = 'Save content state'; +$string['enablesavecontentstate_help'] = 'Automatically save the current state of interactive content for each user. This means that the user may pick up where he left off.'; +$string['failedtodownloadh5p'] = 'Failed to download the requested H5P.'; +$string['filenotfoundonserver'] = 'File not found on server. Check file upload settings.'; +$string['filenotimage'] = 'File is not an image.'; +$string['filetypenotallowed'] = 'File type isn\'t allowed.'; +$string['finished'] = 'Finished'; +$string['fullscreen'] = 'Fullscreen'; +$string['gpl'] = 'General Public License v3'; +$string['h5pfile'] = 'H5P File'; +$string['h5ptitle'] = 'Visit H5P.org to check out more cool content.'; +$string['hide'] = 'Hide'; +$string['hideadvanced'] = 'Hide advanced'; +$string['hubcommunicationdisabled'] = 'H5P hub communication has been disabled because one or more H5P requirements failed.'; +$string['hubisdisabled'] = 'The hub is disabled. You can re-enable it in the H5P settings.'; +$string['hubisdisableduploadlibraries'] = 'The H5P Hub has been disabled until this problem can be resolved. You may still upload libraries through the "H5P Libraries" page.'; +$string['hubsettingsheader'] = 'Content Types'; +$string['hvp:addinstance'] = 'Add a new H5P Activity'; +$string['hvp:getcachedassets'] = 'Get cached H5P content assets'; +$string['hvp:getcontent'] = 'Get/view content of H5P file in course'; +$string['hvp:getexport'] = 'Get export file from H5P in course'; +$string['hvp:installrecommendedh5plibraries'] = 'Install recommended H5P libraries'; +$string['hvp:restrictlibraries'] = 'Restrict a H5P library'; +$string['hvp:savecontentuserdata'] = 'Save H5P content user data'; +$string['hvp:saveresults'] = 'Save result for H5P content'; +$string['hvp:updatelibraries'] = 'Update the version of an H5P library'; +$string['hvp:userestrictedlibraries'] = 'Use restricted H5P libraries'; +$string['hvp:viewresults'] = 'View result for H5P content'; +$string['installdenied'] = 'You do not have permission to install content types. Contact the administrator of your site.'; +$string['installedlibraries'] = 'Installed libraries'; +$string['intro'] = 'Introduction'; +$string['invalidaudioformat'] = 'Invalid audio file format. Use mp3 or wav.'; +$string['invalidcontentfolder'] = 'Invalid content folder'; +$string['invalidcontenttype'] = 'The chosen content type is invalid.'; +$string['invalidfieldtype'] = 'Invalid field type.'; +$string['invalidfile'] = 'File "{$a->%filename}" not allowed. Only files with the following extensions are allowed: {$a->%files-allowed}.'; +$string['invalidh5ppost'] = 'Could not get posted H5P.'; +$string['invalidimageformat'] = 'Invalid image file format. Use jpg, png or gif.'; +$string['invalidlanguagefile'] = 'Invalid language file {$a->%file} in library {$a->%library}'; +$string['invalidlanguagefile2'] = 'Invalid language file {$a->%languageFile} has been included in the library {$a->%name}'; +$string['invalidlibrary'] = 'The H5P library {$a->%library} used in the content is not valid'; +$string['invalidlibrarydata'] = 'Invalid data provided for {$a->%property} in {$a->%library}'; +$string['invalidlibrarydataboolean'] = 'Invalid data provided for {$a->%property} in {$a->%library}. Boolean expected.'; +$string['invalidlibraryname'] = 'Invalid library name: {$a->%name}'; +$string['invalidlibraryoption'] = 'Illegal option {$a->%option} in {$a->%library}'; +$string['invalidlibraryproperty'] = 'Can\'t read the property {$a->%property} in {$a->%library}'; +$string['invalidmainjson'] = 'A valid main h5p.json file is missing'; +$string['invalidmultiselectoption'] = 'Invalid selected option in multi-select.'; +$string['invalidparameters'] = 'Invalid Parameters'; +$string['invalidselectoption'] = 'Invalid selected option in select.'; +$string['invalidsemanticsjson'] = 'Invalid semantics.json file has been included in the library {$a->%name}'; +$string['invalidsemanticstype'] = 'H5P internal error: unknown content type "{$a->@type}" in semantics. Removing content!'; +$string['invalidstring'] = 'Provided string is not valid according to regexp in semantics. (value: \\"{$a->%value}\\", regexp: \\"{$a->%regexp}\\")'; +$string['invalidtoken'] = 'Invalid security token.'; +$string['invalidvideoformat'] = 'Invalid video file format. Use mp4 or webm.'; +$string['javascriptloading'] = 'Waiting for JavaScript...'; +$string['libraries'] = 'H5P Libraries'; +$string['librarydirectoryerror'] = 'Library directory name must match machineName or machineName-majorVersion.minorVersion (from library.json). (Directory: {$a->%directoryName} , machineName: {$a->%machineName}, majorVersion: {$a->%majorVersion}, minorVersion: {$a->%minorVersion})'; +$string['librarylistactions'] = 'Actions'; +$string['librarylistinstancedependencies'] = 'Instance dependencies'; +$string['librarylistinstances'] = 'Instances'; +$string['librarylistlibrarydependencies'] = 'Library dependencies'; +$string['librarylistrestricted'] = 'Restricted'; +$string['librarylisttitle'] = 'Title'; +$string['license'] = 'License'; +$string['loadingdata'] = 'Loading data.'; +$string['lookforupdates'] = 'Look for H5P updates'; +$string['maximumgrade'] = 'Maximum grade'; +$string['maximumgradeerror'] = 'Please enter a valid positive integer as the max points available for this activity'; +$string['maxpostsizetoosmall'] = 'Your PHP max post size is quite small. With your current setup, you may not upload files larger than {$a->%number} MB. This might be a problem when trying to upload H5Ps, images and videos. Please consider to increase it to more than 5MB'; +$string['maxscore'] = 'Maximum Score'; +$string['maxuploadsizetoosmall'] = 'Your PHP max upload size is quite small. With your current setup, you may not upload files larger than {$a->%number} MB. This might be a problem when trying to upload H5Ps, images and videos. Please consider to increase it to more than 5MB.'; +$string['missingcontentfolder'] = 'A valid content folder is missing'; +$string['missingcontentuserdata'] = 'Error: Could not find content user data'; +$string['missingcoreversion'] = 'The system was unable to install the {$a->%component} component from the package, it requires a newer version of the H5P plugin. This site is currently running version {$a->%current}, whereas the required version is {$a->%required} or higher. You should consider upgrading and then try again.'; +$string['missingdependency'] = 'Missing dependency {$a->@dep} required by {$a->@lib}.'; +$string['missinglibrary'] = 'Missing required library {$a->@library}'; +$string['missinglibraryfile'] = 'The file "{$a->%file}" is missing from library: "{$a->%name}"'; +$string['missinglibraryjson'] = 'Could not find library.json file with valid json format for library {$a->%name}'; +$string['missinglibraryproperty'] = 'The required property {$a->%property} is missing from {$a->%library}'; +$string['missingmbstring'] = 'The mbstring PHP extension is not loaded. H5P need this to function properly'; +$string['missingparameters'] = 'Missing parameters'; +$string['missinguploadpermissions'] = 'Note that the libraries may exist in the file you uploaded, but you\'re not allowed to upload new libraries. Contact the site administrator about this.'; +$string['modulename'] = 'Interactive Content'; +$string['modulename_help'] = 'The H5P activity module enables you to create interactive content such as Interactive Videos, Question Sets, Drag and Drop Questions, Multi-Choice Questions, Presentations and much more. + +In addition to being an authoring tool for rich content, H5P enables you to import and export H5P files for effective reuse and sharing of content. + +User interactions and scores are tracked using xAPI and are available through the Moodle Gradebook. + +You add interactive H5P content by uploading a .h5p file. You can create and download .h5p files on h5p.org'; +$string['modulename_link'] = 'https://h5p.org/moodle-more-help'; +$string['modulenameplural'] = 'Interactive Content'; +$string['nextpage'] = 'Next page'; +$string['nocontent'] = 'Could not find or parse the content.json file'; +$string['nocontenttype'] = 'No content type was specified.'; +$string['nocopyright'] = 'No copyright information available for this content.'; +$string['nodata'] = 'There\'s no data available that matches your criteria.'; +$string['noextension'] = 'The file you uploaded is not a valid HTML5 Package (It does not have the .h5p file extension)'; +$string['noh5ps'] = 'There\'s no interactive content available for this course.'; +$string['nojson'] = 'The main h5p.json file is not valid'; +$string['noparameters'] = 'No parameters'; +$string['noparse'] = 'Could not parse the main h5p.json file'; +$string['nopermissiontorestrict'] = 'You do not have permission to restrict libraries.'; +$string['nopermissiontosavecontentuserdata'] = 'You do not have permission to save content user data.'; +$string['nopermissiontosaveresult'] = 'You do not have permission to save result for this content.'; +$string['nopermissiontoupgrade'] = 'You do not have permission to upgrade libraries.'; +$string['nopermissiontoviewresult'] = 'You do not have permission to view results for this content.'; +$string['nosuchlibrary'] = 'No such library'; +$string['notapplicable'] = 'N/A'; +$string['nounzip'] = 'The file you uploaded is not a valid HTML5 Package (We are unable to unzip it)'; +$string['nowriteaccess'] = 'A problem with the server write access was detected. Please make sure that your server can write to your data folder.'; +$string['noziparchive'] = 'Your PHP version does not support ZipArchive.'; +$string['oldphpversion'] = 'Your PHP version is outdated. H5P requires version 5.2 to function properly. Version 5.6 or later is recommended.'; +$string['onlyupdate'] = 'Only update existing libraries'; +$string['options'] = 'Options'; +$string['pd'] = 'Public Domain'; +$string['pddl'] = 'Public Domain Dedication and Licence'; +$string['pdm'] = 'Public Domain Mark'; +$string['pluginadministration'] = 'H5P'; +$string['pluginname'] = 'H5P'; +$string['postmessagerequired'] = 'A post message is required to access the given endpoint'; +$string['previouspage'] = 'Previous page'; +$string['removeoldlogentries'] = 'Remove old H5P log entries'; +$string['removetmpfiles'] = 'Remove old H5P temporary files'; +$string['resizescript'] = 'Include this script on your website if you want dynamic sizing of the embedded content:'; +$string['reveal'] = 'Reveal'; +$string['reviseserversetupandretry'] = 'When you have revised your server setup you may re-enable H5P hub communication in H5P Settings.'; +$string['score'] = 'Score'; +$string['search'] = 'Search'; +$string['sendusagestatistics'] = 'Contribute usage statistics'; +$string['sendusagestatistics_help'] = 'Usage statistics numbers will automatically be reported to help the developers better understand how H5P is used and to determine potential areas of improvement.'; +$string['settings'] = 'H5P Settings'; +$string['showadvanced'] = 'Show advanced'; +$string['sitecouldnotberegistered'] = 'Site could not be registered with the hub. Please contact your site administrator.'; +$string['sitekey'] = 'Site Key'; +$string['sitekeydescription'] = 'The site key is a secret that uniquely identifies this site with the Hub.'; +$string['sitekeyregistered'] = 'You have been provided a unique key that identifies you with the Hub when receiving new updates. The key is available for viewing in the "H5P Settings" page.'; +$string['size'] = 'Size'; +$string['source'] = 'Source'; +$string['sslnotenabled'] = 'Your server does not have SSL enabled. SSL should be enabled to ensure a secure connection with the H5P hub.'; +$string['startingover'] = 'You\'ll be starting over.'; +$string['successfullyregisteredwithhub'] = 'Your site was successfully registered with the H5P Hub.'; +$string['thumbnail'] = 'Thumbnail'; +$string['title'] = 'Title'; +$string['unabletocreatedir'] = 'Unable to create directory.'; +$string['unabletogetfieldtype'] = 'Unable to get field type.'; +$string['undisclosed'] = 'Undisclosed'; +$string['updatedlibraries'] = 'Updated {$a->%old} H5P libraries.'; +$string['updatelibraries'] = 'Update All Libraries'; +$string['upgrade'] = 'Upgrade H5P'; +$string['upgradebuttonlabel'] = 'Upgrade'; +$string['upgradedone'] = 'You have successfully upgraded {$a} content instance(s).'; +$string['upgradeerror'] = 'An error occurred while processing parameters:'; +$string['upgradeerrorcontent'] = 'Could not upgrade content %id:'; +$string['upgradeerrordata'] = 'Could not load data for library %lib.'; +$string['upgradeerrorparamsbroken'] = 'Parameters are broken.'; +$string['upgradeerrorscript'] = 'Could not load upgrades script for %lib.'; +$string['upgradeheading'] = 'Upgrade {$a} content'; +$string['upgradeinprogress'] = 'Upgrading to %ver...'; +$string['upgradeinvalidtoken'] = 'Error: Invalid security token!'; +$string['upgradelibrarycontent'] = 'Upgrade library content'; +$string['upgradelibrarymissing'] = 'Error: Your library is missing!'; +$string['upgrademessage'] = 'You are about to upgrade {$a} content instance(s). Please select upgrade version.'; +$string['upgradenoavailableupgrades'] = 'There are no available upgrades for this library.'; +$string['upgradenothingtodo'] = 'There\'s no content instances to upgrade.'; +$string['upgradereturn'] = 'Return'; +$string['upload'] = 'Upload'; +$string['uploadlibraries'] = 'Upload Libraries'; +$string['uploadsizelargerthanpostsize'] = 'Your PHP max upload size is bigger than your max post size. This is known to cause issues in some installations.'; +$string['user'] = 'User'; +$string['validatingh5pfailed'] = 'Validating h5p package failed.'; +$string['validationfailed'] = 'The requested H5P was not valid'; +$string['welcomecommunity'] = 'We hope you will enjoy H5P and get engaged in our growing community through our forums}>forums and chat room gitter}>H5P at Gitter'; +$string['welcomecontactus'] = 'If you have any feedback, don\'t hesitate to contact us. We take feedback very seriously and are dedicated to making H5P better every day!'; +$string['welcomegettingstarted'] = 'To get started with H5P and Moodle take a look at our moodle_tutorial}>tutorial and check out the example_content}>example content at H5P.org for inspiration.'; +$string['welcomeheader'] = 'Welcome to the world of H5P!'; +$string['wrongversion'] = 'The version of the H5P library {$a->%machineName} used in this content is not valid. Content contains {$a->%contentLibrary}, but it should be {$a->%semanticsLibrary}.'; +$string['year'] = 'Year'; +$string['years'] = 'Year(s)'; diff --git a/html/moodle2/langpacks/en/label.php b/html/moodle2/langpacks/en/label.php index 4f8f5702f3..f41dc1b638 100644 --- a/html/moodle2/langpacks/en/label.php +++ b/html/moodle2/langpacks/en/label.php @@ -31,7 +31,7 @@ $string['dndmedia'] = 'Media drag and drop'; $string['dndresizeheight'] = 'Resize drag and drop height'; $string['dndresizewidth'] = 'Resize drag and drop width'; -$string['dnduploadlabel'] = 'Add image to course page'; +$string['dnduploadlabel'] = 'Add media to course page'; $string['dnduploadlabeltext'] = 'Add a label to the course page'; $string['label:addinstance'] = 'Add a new label'; $string['labeltext'] = 'Label text'; diff --git a/html/moodle2/langpacks/en/tool_xmldb.php b/html/moodle2/langpacks/en/tool_xmldb.php index 5ed2dfbd94..d01ddefc13 100644 --- a/html/moodle2/langpacks/en/tool_xmldb.php +++ b/html/moodle2/langpacks/en/tool_xmldb.php @@ -59,7 +59,7 @@ This functionality doesn\'t perform any action against the DB (just reads from it), so can be safely executed at any moment.'; $string['confirmcheckforeignkeys'] = 'This functionality will search for potential violations of the foreign keys defined in the install.xml definitions. (Moodle does not currently generate actual foreign key constraints in the database, which is why invalid data may be present.) -It\'s highly recommended to be running the latest (+ version) available of your Moodle release before executing the search of missing indexes. +It\'s highly recommended to be running the latest (+ version) available of your Moodle release before executing the search for potential violations of the foreign keys. This functionality doesn\'t perform any action against the DB (just reads from it), so can be safely executed at any moment.'; $string['confirmcheckindexes'] = 'This functionality will search for potential missing indexes in your Moodle server, generating (but not executing!) automatically the needed SQL statements to keep everything updated. diff --git a/html/moodle2/langpacks/es/admin.php b/html/moodle2/langpacks/es/admin.php index e2c7864a3e..de0b5d9139 100644 --- a/html/moodle2/langpacks/es/admin.php +++ b/html/moodle2/langpacks/es/admin.php @@ -588,6 +588,7 @@ $string['ignore'] = 'Ignorar'; $string['includemoduleuserdata'] = 'Incluir datos del usuario del módulo'; $string['incompatibleblocks'] = 'Bloques imcompatibles'; +$string['incompleteunicodesupport'] = 'La configuración actual de MySQL o MariaDB está usando \'utf8\'. Este set de caracteres no soporta caracteres de 4 byte los cuales incluyen algunos emoji. Si intenta usar esos caracteres finalizará con un error al actualizar una fila, y toda la información que esté siendo enviada a la base de datos se perderá. Por favor considere cambiar la configuración a \'utf8mb4\'. Mire la documentación para más información.'; $string['indexdata'] = 'Indexar datos'; $string['installhijacked'] = 'La instalación debe finalizarse desde la misma dirección IP original'; $string['installsessionerror'] = 'No se puede inicializar sesión de PHP, por favor, verifique que su navegador acepta \'cookies\'.'; @@ -1078,6 +1079,7 @@ $string['unoconvwarning'] = 'La versión de unoconv que tienes instaladas no está soportada. La aplicación de evaluación de tareas de Moodle requiere la versión 0.7 o superior.'; $string['unsettheme'] = 'Desmarcar tema'; $string['unsupported'] = 'No admitido'; +$string['unsupporteddbfileformat'] = 'Su base de datos tiene tablas que están usando Antelope como sistema de ficheros. Para un soporte completo de UTF-8 en MySQL y MariaDB requiere Barracuda como sistema de ficheros. Por favor convierta las tablas al sistema de ficheros Barracuda. Mire la documentación Administración vía línea de comandos para ver los detalles de alguna herramienta para convertir las tablas de InnoDB a Barracuda.'; $string['unsupporteddbfilepertable'] = 'Para el soporte completo de UTF-8 en MySQL y MariaDB se requiere cambiar la opción de MySQL \'innodb_file_per_table\' a \'ON\'. Mira la documentación para más detalles.'; $string['unsupporteddblargeprefix'] = 'Para el soporte completo de UTF-8 en MySQL y MariaDB se requiere cambiar la opción de MySQL \'innodb_large_prefix\' a \'ON\'. Mira la documentación para más detalles.'; $string['unsupporteddbstorageengine'] = 'El motor de almacenamiento de base de datos que se utiliza ya no es compatible.'; diff --git a/html/moodle2/langpacks/es/assign.php b/html/moodle2/langpacks/es/assign.php index 851025e834..88501dedef 100644 --- a/html/moodle2/langpacks/es/assign.php +++ b/html/moodle2/langpacks/es/assign.php @@ -167,6 +167,7 @@ $string['eventgradingtableviewed'] = 'Visualización de las Calificaciones'; $string['eventidentitiesrevealed'] = 'Se han revelado las identidades.'; $string['eventmarkerupdated'] = 'El evaluador asignado ha sido actualizado'; +$string['eventrevealidentitiesconfirmationpageviewed'] = 'Página de confirmación de revelación de identidades vista.'; $string['eventstatementaccepted'] = 'El usuario ha aceptado la declaración del envío.'; $string['eventsubmissionconfirmationformviewed'] = 'Formulario de confirmación de entrega visto.'; $string['eventsubmissioncreated'] = 'Entrega creada.'; @@ -371,6 +372,7 @@ $string['settings'] = 'Parámetros de la tarea'; $string['showrecentsubmissions'] = 'Mostrar entregas recientes'; $string['status'] = 'Estado'; +$string['studentnotificationworkflowstateerror'] = 'El estado del flujo de trabajo debe estar marcado como \'Publicado\' para notificar a los estudiantes.'; $string['submission'] = 'Entrega'; $string['submissioncopiedhtml'] = 'Se ha realizado una copia de sus envíos previos de la tarea \'{$a->assignment}\'

Puede ver el estado de sus tareas enviadas.'; $string['submissioncopiedsmall'] = 'Se han copiado sus envíos previos de la tarea {$a->assignment}'; @@ -386,6 +388,7 @@ $string['submissionempty'] = 'No se ha presentado nada.'; $string['submissionlog'] = 'Estudiante: {$a->fullname}, Estado: {$a->status}'; $string['submissionmodified'] = 'Tienes datos de envío existentes. Por favor sal de esta página e inténtalo de nuevo.'; +$string['submissionmodifiedgroup'] = 'El envío ha sido modificado por alguien. Por favor sal de esta página e inténtalo de nuevo.'; $string['submissionnotcopiedinvalidstatus'] = 'El envío no se ha copiado porque ha sido editado desde que se volvió a abrir.'; $string['submissionnoteditable'] = 'El estudiante no puede editar esta entrega'; $string['submissionnotready'] = 'Esta tarea no está lista para enviar.'; @@ -450,6 +453,7 @@ $string['timemodified'] = 'Última modificación'; $string['timeremaining'] = 'Tiempo restante'; $string['timeremainingcolon'] = 'Tiempo restante: {$a}'; +$string['togglezoom'] = 'Ampliar/reducir la región'; $string['ungroupedusers'] = 'Si se activa la configuración "se requiere formar parte de un grupo para realizar la entrega" se evitará que los usuarios no asignados a lo sgrupos realicen entregas.'; $string['unlimitedattempts'] = 'Ilimitado'; $string['unlimitedattemptsallowed'] = 'Se permiten intentos ilimitados'; diff --git a/html/moodle2/langpacks/es/assignfeedback_editpdf.php b/html/moodle2/langpacks/es/assignfeedback_editpdf.php index 48c2fbf35b..101e02e052 100644 --- a/html/moodle2/langpacks/es/assignfeedback_editpdf.php +++ b/html/moodle2/langpacks/es/assignfeedback_editpdf.php @@ -68,6 +68,7 @@ $string['pagenumber'] = 'Página {$a}'; $string['pagexofy'] = 'Página {$a->page} de {$a->total}'; $string['pathtogspathdesc'] = 'Por favor tenga en cuenta que la anotación de PDF requiere que la ruta de ghostscript sea especificada en {$a}.'; +$string['pathtounoconvpathdesc'] = 'Por favor tenga cuenta que comentar un PDF requiere que la ruta a unoconv se establezca en {$a}'; $string['pen'] = 'Pluma'; $string['pluginname'] = 'Anotación PDF'; $string['preparesubmissionsforannotation'] = 'Preparar los envíos para la anotación'; diff --git a/html/moodle2/langpacks/es/atto_charmap.php b/html/moodle2/langpacks/es/atto_charmap.php index ca528d0806..e941115099 100644 --- a/html/moodle2/langpacks/es/atto_charmap.php +++ b/html/moodle2/langpacks/es/atto_charmap.php @@ -29,8 +29,11 @@ $string['aacute_caps'] = 'A - acute'; $string['acircumflex'] = 'a - circunflejo'; $string['acircumflex_caps'] = 'A - circunflejo'; +$string['acuteaccent'] = 'acento agudo'; $string['adiaeresis'] = 'a - diéresis'; $string['adiaeresis_caps'] = 'A - diéresis'; +$string['alpha'] = 'alfa'; +$string['alpha_caps'] = 'Alfa'; $string['asteriskoperator'] = 'operador asterisco'; $string['atilde'] = 'a - tilde'; $string['atilde_caps'] = 'A - tilde'; @@ -48,15 +51,18 @@ $string['delta_caps'] = 'Delta'; $string['diaeresis'] = 'diéresis'; $string['diameter'] = 'diámetro'; +$string['divisionsign'] = 'símbolo de división'; $string['eacute'] = 'e - aguda'; $string['eacute_caps'] = 'E - aguda'; $string['ecircumflex'] = 'e - circunflejo'; $string['ecircumflex_caps'] = 'E - circunflejo'; $string['ediaeresis'] = 'e - diéresis'; $string['ediaeresis_caps'] = 'E - diéresis'; +$string['elementof'] = 'elemento de'; $string['epsilon'] = 'epsilon'; $string['epsilon_caps'] = 'Epsilon'; $string['eurosign'] = 'símbolo del euro'; +$string['forall'] = 'para todos'; $string['greaterthanorequalto'] = 'mayor o igual que'; $string['greaterthansign'] = 'símbolo mayor que'; $string['infinity'] = 'infinito'; diff --git a/html/moodle2/langpacks/es/auth_ldap.php b/html/moodle2/langpacks/es/auth_ldap.php index 2bd0e1d02f..e507a3f80f 100644 --- a/html/moodle2/langpacks/es/auth_ldap.php +++ b/html/moodle2/langpacks/es/auth_ldap.php @@ -83,6 +83,8 @@ $string['auth_ldap_search_sub'] = 'Ponga el valor <> 0 si quiere buscar usuarios desde subcontextos.'; $string['auth_ldap_search_sub_key'] = 'Buscar subcontextos'; $string['auth_ldap_server_settings'] = 'Ajustes de servidor LDAP'; +$string['auth_ldap_suspended_attribute'] = 'Opcional: Cuando se proporciona este atributo, será usado para activar/suspender la cuenta local del usuario.'; +$string['auth_ldap_suspended_attribute_key'] = 'Atributo suspendido'; $string['auth_ldap_unsupportedusertype'] = 'auth: ldap user_create() no admite el tipo de usuario seleccionado: usertype: {$a}'; $string['auth_ldap_update_userinfo'] = 'Actualizar información del usuario (nombre, apellido, dirección..) desde LDAP a Moodle. Mire en /auth/ldap/attr_mappings.php para información de mapeado'; $string['auth_ldap_user_attribute'] = 'El atributo usado para nombrar/buscar usuarios. Normalmente \'cn\'.'; diff --git a/html/moodle2/langpacks/es/backup.php b/html/moodle2/langpacks/es/backup.php index a47c1da161..003b689697 100644 --- a/html/moodle2/langpacks/es/backup.php +++ b/html/moodle2/langpacks/es/backup.php @@ -118,6 +118,7 @@ $string['currentstage8'] = 'Ejecutar copia de seguridad'; $string['enterasearch'] = 'Introduzca un criterio de búsqueda'; $string['error_block_for_module_not_found'] = 'Encontrada instancia de bloque huérfano (id: {$a->bid}) para el módulo del curso (id: {$a->mid}) Este bloque no se copiará'; +$string['errorcopyingbackupfile'] = 'Fallo al copiar el fichero de copia de seguridad al directorio temporal antes de restaurar.'; $string['error_course_module_not_found'] = 'Encontrado módulo de curso huérfano (id: {$a}). Este modulo no se copiará'; $string['errorfilenamemustbezip'] = 'El nombre que se introduzca debe ser un archivo ZIP y con la extensión MBZ'; $string['errorfilenamerequired'] = 'Debe introducir un nombre de archivo válido para esta copia de seguridad'; diff --git a/html/moodle2/langpacks/es/block_lp.php b/html/moodle2/langpacks/es/block_lp.php index 7ffa810f17..858ba61dce 100644 --- a/html/moodle2/langpacks/es/block_lp.php +++ b/html/moodle2/langpacks/es/block_lp.php @@ -27,3 +27,10 @@ $string['competenciestoreview'] = 'Competencias a elavuar'; $string['lp:addinstance'] = 'Añadir un nuevo bloque de planes de aprendizaje'; +$string['lp:myaddinstance'] = 'Añadir un nuevo bloque de plan de aprendizaje al Área personal'; +$string['myplans'] = 'Mis planes'; +$string['noactiveplans'] = 'No hay planes activos hasta el momento.'; +$string['planstoreview'] = 'Planes para revisar'; +$string['pluginname'] = 'Planes de aprendizaje'; +$string['viewmore'] = 'Ver más...'; +$string['viewotherplans'] = 'Ver otros planes...'; diff --git a/html/moodle2/langpacks/es/block_tags.php b/html/moodle2/langpacks/es/block_tags.php index 2eccf58288..5743fdc6d9 100644 --- a/html/moodle2/langpacks/es/block_tags.php +++ b/html/moodle2/langpacks/es/block_tags.php @@ -27,6 +27,8 @@ $string['add'] = 'Añadir'; $string['alltags'] = 'Todas las marcas:'; +$string['anycollection'] = 'Cualquiera'; +$string['anytype'] = 'Todo'; $string['arrowtitle'] = 'Hacer clic para escribir el texto sugerido (letras grises)'; $string['configtitle'] = 'Título del bloque'; $string['coursetags'] = 'Marcas de curso:'; @@ -66,10 +68,14 @@ $string['notagsyet'] = 'Aún no hay marcas'; $string['please'] = 'Por favor'; $string['pluginname'] = 'Marcas'; +$string['recursivecontext'] = 'Incluir contextos hijos'; $string['select'] = 'Seleccionar...'; $string['showcoursetags'] = 'Mostrar las marcas del curso'; $string['showcoursetagsdef'] = 'Mostrar las características de marcado en el bloque de marcas, permitiendo a los estudiantes marcar cursos.'; +$string['standardonly'] = 'Sólo estándar'; $string['suggestedtagthisunit'] = 'Marca (tag) sugerida para este curso:'; +$string['tagcollection'] = 'Colección de la etiqueta'; +$string['taggeditemscontext_help'] = 'Puede limitar la nube de etiquetas a las etiquetas presentes en la categoría de curso, curso o módulo'; $string['tags'] = 'marcas'; $string['tags:addinstance'] = 'Añadir un nuevo bloque de marcas'; $string['tags:myaddinstance'] = 'Añadir un nuevo bloque de marcas al Área personal'; diff --git a/html/moodle2/langpacks/es/book.php b/html/moodle2/langpacks/es/book.php index c17f76caba..4b37595a0a 100644 --- a/html/moodle2/langpacks/es/book.php +++ b/html/moodle2/langpacks/es/book.php @@ -85,6 +85,7 @@ $string['page-mod-book-x'] = 'Cualquier página del módulo Libro'; $string['pluginadministration'] = 'Administración del Libro'; $string['pluginname'] = 'Libro'; +$string['search:chapter'] = 'Libro - capítulos'; $string['showchapter'] = 'Mostrar capítulo "{$a}"'; $string['subchapter'] = 'Subcapítulo'; $string['subchapternotice'] = '(Disponible una vez que el primer capítulo se haya creado)'; diff --git a/html/moodle2/langpacks/es/cache.php b/html/moodle2/langpacks/es/cache.php index 298ff1ab68..4d6c2cd962 100644 --- a/html/moodle2/langpacks/es/cache.php +++ b/html/moodle2/langpacks/es/cache.php @@ -58,6 +58,9 @@ $string['cachedef_repositories'] = 'Datos de repositorios'; $string['cachedef_string'] = 'Caché de cadenas de idioma'; $string['cachedef_suspended_userids'] = 'Listado de usuarios suspendidos por curso'; +$string['cachedef_tagindexbuilder'] = 'Resultados de la búsqueda de elementos etiquetados'; +$string['cachedef_tags'] = 'Etiquetas de colecciones y áreas'; +$string['cachedef_temp_tables'] = 'Tabla temporal de caché'; $string['cachedef_userselections'] = 'Información empleada para mantener las selecciones del usuario en Moodle'; $string['cachedef_yuimodules'] = 'Definiciones de módulos YUI'; $string['cachelock_file_default'] = 'Bloqueo de archivo por defecto'; diff --git a/html/moodle2/langpacks/es/cachestore_memcached.php b/html/moodle2/langpacks/es/cachestore_memcached.php index 6d9e865d99..47e034ea29 100644 --- a/html/moodle2/langpacks/es/cachestore_memcached.php +++ b/html/moodle2/langpacks/es/cachestore_memcached.php @@ -25,6 +25,7 @@ defined('MOODLE_INTERNAL') || die(); +$string['bufferwrites'] = 'Escritura de búfer'; $string['bufferwrites_help'] = 'Habilita o deshabilita un periférico de Entrada/Salida (E/S). Habilitar E/S obliga a los comandos de almacenamiento a "cargar" en lugar de ser enviados. Cualquier acción que recupere información causa que esta carga se envíe a una conexión remota. Cerrar o terminar la conexión también hará que los datos cargados se envíen a una conexión remota.'; $string['clustered'] = 'Habilitar servidores agrupados'; $string['clusteredheader'] = 'Separar servidores'; @@ -39,6 +40,7 @@ $string['hash_hsieh'] = 'Hsieh'; $string['hash_md5'] = 'MD5'; $string['hash_murmur'] = 'Murmur'; +$string['isshared'] = 'Caché compartida'; $string['pluginname'] = 'Memcached'; $string['prefix'] = 'Clave de prefijo'; $string['prefix_help'] = 'Esto se puede utilizar para crear un "dominio" para sus claves de posición, permitiendo crear múltiples sistemas de almacenaje memcached en una única instalación memcached. No debe contener más de 16 caracteres para evitar problemas de longitud de clave.'; diff --git a/html/moodle2/langpacks/es/cachestore_mongodb.php b/html/moodle2/langpacks/es/cachestore_mongodb.php index b07ca511b4..175245fea5 100644 --- a/html/moodle2/langpacks/es/cachestore_mongodb.php +++ b/html/moodle2/langpacks/es/cachestore_mongodb.php @@ -39,3 +39,5 @@ $string['testserver_desc'] = 'Esta es la cadena de caracteres para la conexión con el servidor de prueba que desea utilizar. Los servidores de prueba son totalmente opcionales, y especificando un servidor de prueba puede ejecutar pruebas PHPUnit para este entorno y ejecutar pruebas de rendimiento.'; $string['username'] = 'Nombre de usuario'; $string['username_help'] = 'El nombre de usuario que se utilizará al realizar una conexión.'; +$string['usesafe'] = 'Uso seguro'; +$string['usesafevalue'] = 'Usar valor seguro'; diff --git a/html/moodle2/langpacks/es/chat.php b/html/moodle2/langpacks/es/chat.php index 829d604208..c3818a4533 100644 --- a/html/moodle2/langpacks/es/chat.php +++ b/html/moodle2/langpacks/es/chat.php @@ -126,6 +126,7 @@ $string['repeatweekly'] = 'A la misma hora todas las semanas'; $string['saidto'] = 'dicho a'; $string['savemessages'] = 'Guardar sesiones pasadas'; +$string['search:activity'] = 'Chat - información de actividad'; $string['seesession'] = 'Ver esta sesión'; $string['send'] = 'Enviar'; $string['sending'] = 'Enviando'; diff --git a/html/moodle2/langpacks/es/choice.php b/html/moodle2/langpacks/es/choice.php index 4c2e847d5f..bca44599ab 100644 --- a/html/moodle2/langpacks/es/choice.php +++ b/html/moodle2/langpacks/es/choice.php @@ -50,13 +50,16 @@ $string['choicesaved'] = 'Su elección ha sido guardada'; $string['choicetext'] = 'Pregunta a responder'; $string['chooseaction'] = 'Elija una acción ...'; +$string['closebeforeopen'] = 'Has especificado una fecha de cierre previa a la de la fecha de apertura.'; $string['completionsubmit'] = 'Mostrar como completada cuando el usuario selecciona una opción'; $string['description'] = 'Descripción'; $string['displayhorizontal'] = 'Mostrar horizontalmente'; $string['displaymode'] = 'Modo de visualización de las opciones'; $string['displayvertical'] = 'Mostrar verticalmente'; $string['eventanswercreated'] = 'Consulta respondida'; +$string['eventanswerdeleted'] = 'Consulta borrada'; $string['eventanswerupdated'] = 'Consulta actualizada'; +$string['eventreportdownloaded'] = 'Informe de selección descargado'; $string['eventreportviewed'] = 'Informe de Consulta visto'; $string['expired'] = 'Lo sentimos, esta actividad se cerró el {$a} y ya no está disponible'; $string['full'] = '(Lleno)'; diff --git a/html/moodle2/langpacks/es/cohort.php b/html/moodle2/langpacks/es/cohort.php index f638983cdf..621c3a324c 100644 --- a/html/moodle2/langpacks/es/cohort.php +++ b/html/moodle2/langpacks/es/cohort.php @@ -52,6 +52,8 @@ $string['displayedrows'] = '{$a->displayed} filas mostradas de {$a->total}.'; $string['duplicateidnumber'] = 'Ya existe una cohorte con el mismo número ID'; $string['editcohort'] = 'Editar cohorte'; +$string['editcohortidnumber'] = 'Editar ID de la cohorte'; +$string['editcohortname'] = 'Editar nombre de la cohorte'; $string['eventcohortcreated'] = 'Cohorte creada'; $string['eventcohortdeleted'] = 'Cohorte eliminada'; $string['eventcohortmemberadded'] = 'Usuario añadido a una cohorte'; @@ -63,6 +65,8 @@ $string['name'] = 'Nombre'; $string['namecolumnmissing'] = 'Existe algún problema con el formato del fichero CSV. Por favor comprueba que incluye el nombre de las columnas.'; $string['namefieldempty'] = 'El nombre del campo no puede quedar vacío'; +$string['newidnumberfor'] = 'Nuevo número ID para la cohorte {$a}'; +$string['newnamefor'] = 'Nuevo nombre para la cohorte {$a}'; $string['nocomponent'] = 'Creada manualmente'; $string['potusers'] = 'Usuarios potenciales'; $string['potusersmatching'] = 'Usuarios potenciales coincidentes'; diff --git a/html/moodle2/langpacks/es/competency.php b/html/moodle2/langpacks/es/competency.php index 0fbecdd0f1..f62132e613 100644 --- a/html/moodle2/langpacks/es/competency.php +++ b/html/moodle2/langpacks/es/competency.php @@ -69,13 +69,18 @@ $string['eventplanreopened'] = 'Plan de aprendizaje reabierto.'; $string['eventplanreviewrequestcancelled'] = 'Solicitud de revisión del plan de aprendizaje cancelada.'; $string['eventplanreviewrequested'] = 'Revisión del plan de aprendizaje solicitada.'; +$string['evidence_coursecompleted'] = 'El curso \'{$a}\' ha sido completado.'; +$string['evidence_coursemodulecompleted'] = 'La actividad \'{$a}\' ha sido completada.'; +$string['invalidtaxonomy'] = 'Taxonomía inválida: {$a}'; $string['planstatusactive'] = 'Activo'; $string['planstatuscomplete'] = 'Completado'; $string['planstatusdraft'] = 'Borrador'; $string['planstatusinreview'] = 'En revisión'; $string['planstatuswaitingforreview'] = 'Esperando revisión'; +$string['taxonomy_behaviour'] = 'Comportamiento'; $string['taxonomy_competency'] = 'Competencia'; $string['taxonomy_concept'] = 'Concepto'; +$string['taxonomy_domain'] = 'Dominio'; $string['taxonomy_indicator'] = 'Indicador'; $string['taxonomy_level'] = 'Nivel'; $string['taxonomy_outcome'] = 'Resultado de aprendizaje'; diff --git a/html/moodle2/langpacks/es/data.php b/html/moodle2/langpacks/es/data.php index 4be7307346..0a72b57988 100644 --- a/html/moodle2/langpacks/es/data.php +++ b/html/moodle2/langpacks/es/data.php @@ -52,6 +52,7 @@

Los botones tienen el siguiente formato: ##somebutton##

En la plantilla actual sólo pueden usarse las marcas que están en la lista de "Marcas disponibles".

'; $string['availabletodate'] = 'Disponible hasta'; +$string['availabletodatevalidation'] = 'La fecha de disponibilidad de fin no puede ser previa a la fecha de disponibilidad de comienzo.'; $string['blank'] = 'En blanco'; $string['buttons'] = 'Acciones'; $string['bynameondate'] = 'por {$a->name} - {$a->date}'; @@ -127,6 +128,7 @@ $string['defaultfielddelimiter'] = '(el valor por defecto es la coma)'; $string['defaultfieldenclosure'] = '(el valor por defecto es ninguno)'; $string['defaultsortfield'] = 'Campo de ordenación por defecto'; +$string['delcheck'] = 'Checkbox de borrado masivo'; $string['delete'] = 'Eliminar'; $string['deleteallentries'] = 'Eliminar todas las entradas'; $string['deletecomment'] = '¿Está seguro de que desea eliminar este comentario?'; @@ -363,6 +365,7 @@ $string['savesuccess'] = 'Guardado con éxito. Su ajuste previo estará ahora disponible en todo el sitio.'; $string['savetemplate'] = 'Guardar plantilla'; $string['search'] = 'Buscar'; +$string['search:activity'] = 'Base de datos - información de actividad'; $string['selectedrequired'] = 'Se requieren todos los seleccionados'; $string['showall'] = 'Mostrar todas las entradas'; $string['single'] = 'Ver uno por uno'; diff --git a/html/moodle2/langpacks/es/enrol_database.php b/html/moodle2/langpacks/es/enrol_database.php index 3e2c912475..4c29d0f45f 100644 --- a/html/moodle2/langpacks/es/enrol_database.php +++ b/html/moodle2/langpacks/es/enrol_database.php @@ -25,6 +25,7 @@ defined('MOODLE_INTERNAL') || die(); +$string['database:config'] = 'Configurar instancias de matriculación en la base de datos'; $string['database:unenrol'] = 'Dar de baja usuarios suspendidos'; $string['dbencoding'] = 'Codificación de base de datos'; $string['dbhost'] = 'Host de la base de datos'; diff --git a/html/moodle2/langpacks/es/enrol_flatfile.php b/html/moodle2/langpacks/es/enrol_flatfile.php index 5f50e7355d..2e3672e583 100644 --- a/html/moodle2/langpacks/es/enrol_flatfile.php +++ b/html/moodle2/langpacks/es/enrol_flatfile.php @@ -31,6 +31,7 @@ $string['filelockedmail'] = 'El fichero de texto empleado en matriculaciones basadas en archivo ({$a}) no puede ser eliminado por el proceso de \'cron\'. Esto generalmente significa que los permisos son erróneos. Por favor, corrija los permisos para que Moodle puede eliminar el archivo, de lo contrario, podría ser procesado en varias ocasiones.'; $string['filelockedmailsubject'] = 'Error importante: Archivo de matriculación'; $string['flatfile:manage'] = 'Gestionar manualmente la matriculación de usuario'; +$string['flatfilesync'] = 'Sincronización de fichero plano de matrículas'; $string['flatfile:unenrol'] = 'Dar de baja usuarios del curso manualmente'; $string['location'] = 'Ubicación del archivo'; $string['location_desc'] = 'Especifique la ruta completa al archivo de matriculaciones. El archivo se borra automáticamente después del proceso.'; diff --git a/html/moodle2/langpacks/es/enrol_imsenterprise.php b/html/moodle2/langpacks/es/enrol_imsenterprise.php index 2df32f691b..ea2c341349 100644 --- a/html/moodle2/langpacks/es/enrol_imsenterprise.php +++ b/html/moodle2/langpacks/es/enrol_imsenterprise.php @@ -55,6 +55,8 @@ $string['fixcaseusernames'] = 'Cambie los nombres de usuario a minúsculas'; $string['ignore'] = 'Ignorar'; $string['importimsfile'] = 'Importar archivo IMS Enterprise'; +$string['imsenterprise:config'] = 'Configuración de instancias de matriculación de IMS Enterprise'; +$string['imsenterprisecrontask'] = 'Procesamiento de fichero de matriculación'; $string['imsrolesdescription'] = 'La especificación IMS Enterprise incluye 8 distintos tipos de rol. Por favor, seleccione cómo quiere que se le asignen en Moodle, incluyendo si alguno debe ser omitido.'; $string['location'] = 'Ubicación del archivo'; $string['logtolocation'] = 'Ubicación del archivo \'log\' de salida (déjelo en blanco si no hay registro)'; diff --git a/html/moodle2/langpacks/es/enrol_mnet.php b/html/moodle2/langpacks/es/enrol_mnet.php index c0d45e4ee2..9f14638d86 100644 --- a/html/moodle2/langpacks/es/enrol_mnet.php +++ b/html/moodle2/langpacks/es/enrol_mnet.php @@ -28,6 +28,7 @@ $string['error_multiplehost'] = 'Algunos ejemplo de la extensión de matriculación MNet ya existen en este equipo. Sólo está permitida una instancia por servidor y/o una instancia para \'Todos los servidores\'.'; $string['instancename'] = 'Nombre del método de matriculación'; $string['instancename_help'] = 'Puede cambiar opcionalmente el nombre de esta instancia del método de matriculación MNet. Si deja este campo vacío se usará el nombre de la instancia por defecto, que contiene el nombre del servidor remoto y el rol asignado para sus usuarios.'; +$string['mnet:config'] = 'Configurar instancias de matriculación de MNet'; $string['mnet_enrol_description'] = 'Publique este servicio para permitir a los administradores de {$a} matricular a sus estudiantes en los cursos que usted ha creado en su servidor.
  • Dependencia: Usted debe asimismo suscribirse al servicio SSO (Proveedor de Identidad) en {$a}.
  • Dependencia: Debe también subscribirse al servicio SSO (Proveedor de Identidad) en {$a}.

Suscríbase a este servicio para poder matricular a sus estudiantes en los cursos de {$a}.
  • Dependencia: Debe también publicar el servicio SSO (Proveedor de Identidad) en {$a}.
  • Dependencia: Debe también suscribirse al servicio SSO (Proveedor de Identidad) en {$a}.

'; $string['mnet_enrol_name'] = 'Servicio remoto de matriculación'; $string['pluginname'] = 'Matriculaciones remotas MNet'; diff --git a/html/moodle2/langpacks/es/error.php b/html/moodle2/langpacks/es/error.php index cc0f10c847..da5108c6f3 100644 --- a/html/moodle2/langpacks/es/error.php +++ b/html/moodle2/langpacks/es/error.php @@ -258,6 +258,7 @@ $string['generalexceptionmessage'] = 'Excepción - {$a}'; $string['gradecantregrade'] = 'Ha ocurrido un error durante el cálculo de las calificaciones: {$a}'; $string['gradepubdisable'] = 'Publicación de calificaciones deshabilitada'; +$string['gradesneedregrading'] = 'Las calificaciones de este curso necesitan ser recalculadas'; $string['groupalready'] = 'El usuario ya pertence al grupo {$a}'; $string['groupexistforcourse'] = 'En este curso ya hay un grupo "{$a}".'; $string['groupexistforcoursewithidnumber'] = '{$a->problemgroup}: El grupo "{$a->name}" con un idnumber "{$a->idnumber}" ya existe en este curso'; @@ -303,6 +304,7 @@ $string['invalidconfirmdata'] = 'La confirmación de los datos no es válida'; $string['invalidcontext'] = 'Contexto no válido'; $string['invalidcourse'] = 'Curso no válido'; +$string['invalidcourseformat'] = 'Formato de curso inválido'; $string['invalidcourseid'] = 'Está intentando usar una ID de curso no válida'; $string['invalidcourselevel'] = 'Nivel de contexto incorrecto'; $string['invalidcoursemodule'] = 'ID de módulo de curso no válida'; diff --git a/html/moodle2/langpacks/es/feedback.php b/html/moodle2/langpacks/es/feedback.php index d13b5e92a4..f56086e709 100644 --- a/html/moodle2/langpacks/es/feedback.php +++ b/html/moodle2/langpacks/es/feedback.php @@ -68,6 +68,7 @@ $string['delete_entry'] = 'Borrar entrada'; $string['delete_item'] = 'Borrar pregunta'; $string['delete_old_items'] = 'Borrar ítems antiguos'; +$string['delete_pagebreak'] = 'Borrar salto de página'; $string['delete_template'] = 'Borrar plantilla'; $string['delete_templates'] = 'Borrar plantilla...'; $string['depending'] = 'Dependencias'; @@ -88,6 +89,7 @@ $string['dependvalue'] = 'Depende del valor'; $string['description'] = 'Descripción'; $string['do_not_analyse_empty_submits'] = 'No analizar envíos vacíos'; +$string['downloadresponseas'] = 'Descargar todas las respuestas como:'; $string['dropdown'] = 'Opción múltiple (sólo una respuesta - lista desplegable)'; $string['dropdownlist'] = 'Opción múltiple - una respuesta (desplegable)'; $string['dropdownrated'] = 'Lista desplegable (clasificada)'; @@ -112,6 +114,7 @@ $string['feedback:addinstance'] = 'Añadir una nueva encuesta'; $string['feedbackclose'] = 'Permitir respuestas a'; $string['feedback:complete'] = 'Cumplimente la encuesta'; +$string['feedbackcompleted'] = '{$a->username} ha completado {$a->feedbackname}'; $string['feedback:createprivatetemplate'] = 'Crear plantilla privada'; $string['feedback:createpublictemplate'] = 'Crear plantilla pública'; $string['feedback:deletesubmissions'] = 'Eliminar envíos completados'; @@ -143,6 +146,7 @@ $string['item_label'] = 'Etiqueta'; $string['item_name'] = 'Pregunta'; $string['label'] = 'Etiqueta'; +$string['labelcontents'] = 'Contenidos'; $string['line_values'] = 'Clasificación'; $string['mapcourse'] = 'Asignar encuesta a cursos'; $string['mapcourse_help'] = 'Por defecto, los formularios de encuesta creados en su página de inicio están disponibles en todo el sitio y aparecerá en todos los cursos utilizando el bloque de encuestas. Puede forzar que el formulario de encuestas se visualice haciendo que sea un bloque fijo o puede limitar los cursos en los que se mostrará el formulario de encuesta mediante su asignación a cursos específicos.'; @@ -151,10 +155,12 @@ $string['mapcourses'] = 'Asignar encuesta a cursos'; $string['mapcourses_help'] = 'Una vez seleccionados los cursos correspondientes a partir de la búsqueda, es posible asociarlos con esta encuesta utilizando el mapeo. Para seleccionar varios cursos mantenga pulsada la tecla Ctrl mientras hace clic en los nombres de los cursos. Se puede quitar la asociación de un curso a una encuesta en cualquier momento.'; $string['mappedcourses'] = 'Cursos asignados'; +$string['mappingchanged'] = 'El mapeo del curso ha cambiado'; $string['max_args_exceeded'] = 'Se admite un máximo de 6 argumentos; demasiados argumentos para'; $string['maximal'] = 'máximo'; $string['messageprovider:message'] = 'Recordatorio de encuesta'; $string['messageprovider:submission'] = 'Notificaciones de encuesta'; +$string['minimal'] = 'mínimo'; $string['mode'] = 'Modo'; $string['modulename'] = 'Encuesta'; $string['modulename_help'] = 'El módulo de actividad Encuesta permite que un profesor pueda crear una encuesta personalizada para obtener la opinión de los participantes utilizando una variedad de tipos de pregunta, como opción múltiple, sí/no o texto. @@ -193,6 +199,7 @@ $string['no_templates_available_yet'] = 'No hay plantillas disponibles'; $string['not_selected'] = 'No seleccionada'; $string['not_started'] = 'no comenzado'; +$string['numberoutofrange'] = 'Número fuera de rango'; $string['numeric'] = 'Respuesta numérica'; $string['numeric_range_from'] = 'Rango desde'; $string['numeric_range_to'] = 'Rango hasta'; @@ -238,6 +245,7 @@ $string['save_item'] = 'Guardar pregunta'; $string['saving_failed'] = 'No se pudo guardar'; $string['saving_failed_because_missing_or_false_values'] = 'No se pudo guardar debido a valores ausentes o falsos'; +$string['search:activity'] = 'Retroalimentación - información de actividad'; $string['search_course'] = 'Buscar curso'; $string['searchcourses'] = 'Buscar cursos'; $string['searchcourses_help'] = 'Buscar el código o el nombre del (los) curso(s) que desea asociar con esta encuesta.'; @@ -261,6 +269,7 @@ $string['switch_item_to_not_required'] = 'cambiar a: respuesta no obligatoria'; $string['switch_item_to_required'] = 'cambiar a: respuesta obligatoria'; $string['template'] = 'Plantilla'; +$string['template_deleted'] = 'Plantilla borrada'; $string['templates'] = 'Plantillas'; $string['template_saved'] = 'Plantilla guardada'; $string['textarea'] = 'Respuesta de texto larga'; diff --git a/html/moodle2/langpacks/es/folder.php b/html/moodle2/langpacks/es/folder.php index 1a58355a39..1d6ed9c225 100644 --- a/html/moodle2/langpacks/es/folder.php +++ b/html/moodle2/langpacks/es/folder.php @@ -34,11 +34,14 @@ $string['displaypage'] = 'Mostrar en una página diferente'; $string['dnduploadmakefolder'] = 'Descomprimir archivo y crear carpeta'; $string['downloadfolder'] = 'Descargar carpeta'; +$string['eventallfilesdownloaded'] = 'Directorio descargado en formato Zip'; $string['eventfolderupdated'] = 'Carpeta actualizada'; $string['folder:addinstance'] = 'Añadir una nueva carpeta'; $string['foldercontent'] = 'Archivos y subcarpetas'; $string['folder:managefiles'] = 'Gestionar archivos en el recurso carpeta'; $string['folder:view'] = 'Ver el contenido de la carpeta'; +$string['maxsizetodownload'] = 'Tamaño máximo de descarga del directorio (MB)'; +$string['maxsizetodownload_help'] = 'El tamaño máximo del directorio para su descarga. Si está establecido a cero, el tamaño del directorio es ilimitado.'; $string['modulename'] = 'Carpeta'; $string['modulename_help'] = 'El recurso Carpeta permite al profesor mostrar un grupo de archivos relacionados dentro de una única carpeta. Se puede subir un archivo comprimido (zip) que se descomprimirá (unzip) posteriormente para mostrar su contenido, o bien, se puede crear una carpeta vacía y subir los archivos dentro de ella. diff --git a/html/moodle2/langpacks/es/format_weeks.php b/html/moodle2/langpacks/es/format_weeks.php index 035a6392c4..a212127fba 100644 --- a/html/moodle2/langpacks/es/format_weeks.php +++ b/html/moodle2/langpacks/es/format_weeks.php @@ -28,7 +28,9 @@ $string['currentsection'] = 'Semana actual'; $string['deletesection'] = 'Borrar semana'; $string['editsection'] = 'Editar semana'; +$string['editsectionname'] = 'Editar nombre de la semana'; $string['hidefromothers'] = 'Ocultar semana'; +$string['newsectionname'] = 'Nuevo nombre para la semana {$a}'; $string['page-course-view-weeks'] = 'Cualquier página principal de curso en formato semanal'; $string['page-course-view-weeks-x'] = 'Cualquier página de curso en formato semanal'; $string['pluginname'] = 'Formato semanal'; diff --git a/html/moodle2/langpacks/es/glossary.php b/html/moodle2/langpacks/es/glossary.php index 20d4abd172..f3ddb0b6d1 100644 --- a/html/moodle2/langpacks/es/glossary.php +++ b/html/moodle2/langpacks/es/glossary.php @@ -66,6 +66,7 @@ $string['author'] = 'autor'; $string['authorview'] = 'Vista por Autor'; $string['back'] = 'Volver'; +$string['cachedef_concepts'] = 'Concepto de vinculación'; $string['cantinsertcat'] = 'No se puede insertar la categoría'; $string['cantinsertrec'] = 'No se puede insertar el registro'; $string['cantinsertrel'] = 'No se puede insertar la relación registro-categoría'; @@ -91,6 +92,7 @@ $string['cnfsortkey'] = 'Seleccione la clave de organización por defecto.'; $string['cnfsortorder'] = 'Seleccione el orden por defecto.'; $string['cnfstudentcanpost'] = 'Define si por defecto los estudiantes pueden o no colocar entradas'; +$string['cnftabs'] = 'Seleccionar las pestañas visibles para este formato de glosario'; $string['comment'] = 'Comentario'; $string['commentdeleted'] = 'Se ha borrado el comentario.'; $string['comments'] = 'Comentarios'; @@ -127,6 +129,7 @@ información encontrada en el archivo importado y luego las entradas serán añadidas al mismo. '; +$string['disapprove'] = 'Deshacer aprobación'; $string['displayformat'] = 'Formato de visualización de entradas'; $string['displayformatcontinuous'] = 'Continuo sin autor'; $string['displayformatdefault'] = 'Por defecto la misma que el formato de visualización'; @@ -330,6 +333,8 @@
  • Sin autor: Con esta opción, los datos generados no incluirán el nombre del autor en cada artículo. '; +$string['search:activity'] = 'Glosario - información de actividad'; +$string['search:entry'] = 'Glosario - entradas'; $string['searchindefinition'] = '¿Buscar en conceptos y definiciones?'; $string['secondaryglossary'] = 'Glosario secundario'; $string['showall'] = 'Mostrar enlace \'TODAS\''; diff --git a/html/moodle2/langpacks/es/gradereport_user.php b/html/moodle2/langpacks/es/gradereport_user.php index 8532b2805b..4aa696e5be 100644 --- a/html/moodle2/langpacks/es/gradereport_user.php +++ b/html/moodle2/langpacks/es/gradereport_user.php @@ -26,6 +26,9 @@ defined('MOODLE_INTERNAL') || die(); $string['eventgradereportviewed'] = 'Informe de notas de usuario visto'; +$string['myself'] = 'Yo mismo'; +$string['otheruser'] = 'Usuario'; $string['pluginname'] = 'Usuario'; $string['tablesummary'] = 'La tabla está ordenada como una lista de elementos que incluye categorías y notas. Cuando los elementos pertenecen a una categoría se indica.'; $string['user:view'] = 'Ver su propio informe de calificación'; +$string['viewas'] = 'Ver informe como'; diff --git a/html/moodle2/langpacks/es/grades.php b/html/moodle2/langpacks/es/grades.php index f564ba80d1..34c8d54ed2 100644 --- a/html/moodle2/langpacks/es/grades.php +++ b/html/moodle2/langpacks/es/grades.php @@ -298,6 +298,7 @@ $string['gradeexportdecimalpoints_desc'] = 'Número de decimales a mostrar en el archivo exportado. Puede pasarse por alto durante la exportación.'; $string['gradeexportdisplaytype'] = 'Forma de mostrar exportación de calificaciones'; $string['gradeexportdisplaytype_desc'] = 'Las calificaciones pueden mostrarse como calificaciones reales, como porcentajes (en relación a las calificaciones mínima y máxima) o como letras (A, B, C, &c.) durante la exportación. Puede pasarse por alto durante la exportación.'; +$string['gradeexportdisplaytypes'] = 'Mostrar tipos de exportación de calificaciones'; $string['gradeexportuserprofilefields'] = 'Campos de perfil de usuario en exportación de calificaciones'; $string['gradeexportuserprofilefields_desc'] = 'Incluir estos campos de perfil de usuario en la exportación de calificaciones, separados por comas.'; $string['gradeforstudent'] = '{$a->student}
    {$a->item}$a->feedback'; @@ -491,8 +492,12 @@ $string['missingscale'] = 'La escala debe estar seleccionada'; $string['mode'] = 'Moda'; $string['modgrade'] = 'Calificación'; +$string['modgradecantchangegradetype'] = 'No puedes cambiar el tipo, ya que hay calificaciones para este elemento.'; $string['modgradecantchangegradetypemsg'] = 'Algunas calificaciones ya se han adjudicado, por lo que el tipo de calificación no se puede cambiar. Si desea cambiar la calificación máxima, primero debe elegir si desea o no recalcular el valor de las calificaciones existentes.'; +$string['modgradecantchangegradetyporscalemsg'] = 'Algunas calificaciones han sido premiadas, de modo que el tipo y la escala no pueden ser cambiados.'; +$string['modgradecantchangescale'] = 'No puedes cambiar la escala, ya que hay calificaciones existentes para este elemento.'; $string['modgradecategorycantchangegradetypemsg'] = 'Esta categoría tiene asociados items de calificación que han sido sobreescritos. Por lo tanto algunas calificaciones ya han sido asignadas, por lo que el tipo de calificación no puede ser variado. Si desea cambiar el valor máximo de la calificación, primero debe elegir entre recalcular o no las calificaciones existentes.'; +$string['modgradedonotmodify'] = 'No modificar calificaciones existentes.'; $string['modgradeerrorbadpoint'] = 'Valor de calificación no válido. Debe ser un número entero entre 1 y {$a}'; $string['modgradeerrorbadscale'] = 'Escala no válida. Por favor, asegúrese de seleccionar una escala de las incluidas abajo.'; $string['modgrade_help'] = 'Seleccione el tipo de calificación que desea utilizar para esta actividad. Si elige "escala", a continuación podrá elegirla de una lista desplegable. Si prefiere "puntuación", podrá elegir la puntuación máxima para esta actividad.'; diff --git a/html/moodle2/langpacks/es/gradingform_guide.php b/html/moodle2/langpacks/es/gradingform_guide.php index bc1936da5c..1439d368a7 100644 --- a/html/moodle2/langpacks/es/gradingform_guide.php +++ b/html/moodle2/langpacks/es/gradingform_guide.php @@ -32,6 +32,7 @@ $string['clicktocopy'] = 'Pulsar para copiar este texto en la retroalimentación del criterio'; $string['clicktoedit'] = 'Pulsar para editar'; $string['clicktoeditname'] = 'Pulsar para editar criterio'; +$string['comment'] = 'Comentario'; $string['comments'] = 'Comentarios predefinidos'; $string['commentsdelete'] = 'Borrar comentario'; $string['commentsempty'] = 'Pulsar para editar el comentario'; @@ -49,6 +50,7 @@ $string['description'] = 'Descripción'; $string['descriptionmarkers'] = 'Descripción para los evaluadores'; $string['descriptionstudents'] = 'Descripción para los estudiantes'; +$string['err_maxscoreisnegative'] = 'La nota máxima no es válida, los valores negativos no están permitidos'; $string['err_maxscorenotnumeric'] = 'La puntuación máxima del criterio debe ser numérica'; $string['err_nocomment'] = 'El comentario no puede dejarse en blanco'; $string['err_nodescription'] = 'La descripción para los estudiantes no puede dejarse en blanco'; @@ -56,6 +58,7 @@ $string['err_nomaxscore'] = 'La puntuación máxima del criterio no puede dejarse en blanco'; $string['err_noshortname'] = 'El nombre del criterio no puede dejarse en blanco'; $string['err_scoreinvalid'] = 'La puntuación dada a {$a->criterianame} no es válida, la puntuación máxima es: {$a->maxscore}'; +$string['err_scoreisnegative'] = 'La puntuación dada a \'{$a->criterianame}\' no es válida, los valores negativos no están permitidos.'; $string['err_shortnametoolong'] = 'El criterio para establecer un nombre obliga a incluir menos de 256 caracteres'; $string['gradingof'] = 'Calificando {$a}'; $string['guidemappingexplained'] = 'ADVERTENCIA: Esta guía de evaluación puede puntuarse como máximo hasta {$a->maxscore} puntos, pero la puntuación máxima establecida para la actividad es de {$a->modulegrade} puntos. @@ -66,6 +69,7 @@ $string['guidestatus'] = 'Estado actual de la guía de evaluación'; $string['hidemarkerdesc'] = 'Ocultar las descripciones de los criterios de puntuación'; $string['hidestudentdesc'] = 'Ocultar las descripciones del criterio para el estudiante'; +$string['insertcomment'] = 'Insertar el comentario usado con más frecuencia'; $string['maxscore'] = 'Puntuación máxima'; $string['name'] = 'Nombre'; $string['needregrademessage'] = 'La definición de la guía de evaluación fue cambiada posteriormente a que este alumno fuera calificado. El alumno no verá esta guía de calificación hasta que usted valide la guía de evaluación y actualice la calificación.'; diff --git a/html/moodle2/langpacks/es/gradingform_rubric.php b/html/moodle2/langpacks/es/gradingform_rubric.php index 65397cc008..b24867dc20 100644 --- a/html/moodle2/langpacks/es/gradingform_rubric.php +++ b/html/moodle2/langpacks/es/gradingform_rubric.php @@ -46,7 +46,9 @@ $string['err_scoreformat'] = 'El número de puntos para cada nivel debe ser un número válido no negativo'; $string['err_totalscore'] = 'El número máximo de puntos posibles cuando se califica por rúbricas debe ser mayor que cero'; $string['gradingof'] = 'Calificando {$a}'; -$string['leveldelete'] = 'Eliminar nivel'; +$string['level'] = 'Nivel {$a->definition}, {$a->score} puntos.'; +$string['leveldefinition'] = 'Nivel {$a} de definición'; +$string['leveldelete'] = 'Eliminar nivel {$a}'; $string['levelempty'] = 'Clic para editar el nivel'; $string['name'] = 'Nombre'; $string['needregrademessage'] = 'La definición de la rúbrica fue cambiada después de que este estudiante hubiera sido calificado. El estudiante no puede ver esta rúbrica hasta que usted la verifique y actualice la calificación.'; diff --git a/html/moodle2/langpacks/es/group.php b/html/moodle2/langpacks/es/group.php index efbc196731..aaebbad5ba 100644 --- a/html/moodle2/langpacks/es/group.php +++ b/html/moodle2/langpacks/es/group.php @@ -73,6 +73,7 @@ $string['eventgroupdeleted'] = 'Grupo eliminado'; $string['eventgroupingcreated'] = 'Grupo creado'; $string['eventgroupingdeleted'] = 'Grupo eliminado'; +$string['eventgroupinggroupassigned'] = 'Grupo asignado para agrupar'; $string['eventgroupingupdated'] = 'Grupo actualizado'; $string['eventgroupmemberadded'] = 'Miembro del grupo añadido'; $string['eventgroupmemberremoved'] = 'Miembro del grupo eliminado'; @@ -145,6 +146,8 @@ * El primer registro contiene una lista de nombres de campos que definen el formato del resto del archivo * Es obligatorio el campo de grupo * Son opcionales los campos descripción, clave de matriculación, fotografía, fotografiá oculta'; +$string['includeonlyactiveenrol'] = 'Incluir únicamente matriculas activas'; +$string['includeonlyactiveenrol_help'] = 'Si está activado, los usuarios suspendidos no serán incluidos en los grupos.'; $string['javascriptrequired'] = 'Esta página requiere que Javascript esté activado.'; $string['members'] = 'Miembros por grupo'; $string['membersofselectedgroup'] = 'Miembros de:'; @@ -185,6 +188,7 @@

    Cuando acabe de cambiar su imagen es posible que no vea el cambio; si eso sucede actualice la página (oprimiendo F5 o el botón actualizar).'; $string['noallocation'] = 'No asignación'; +$string['nogroup'] = 'Sin grupo'; $string['nogrouping'] = 'No agrupar'; $string['nogroups'] = 'Aún no se han formado grupos en este curso'; $string['nogroupsassigned'] = 'No hay grupos asignados'; @@ -192,6 +196,7 @@ $string['nosmallgroups'] = 'Evitar el último grupo pequeño'; $string['notingroup'] = 'Ignorar usuarios en grupos'; $string['notingrouping'] = '[Fuera de un agrupamiento]'; +$string['notingrouplist'] = '[En ningún grupo]'; $string['nousersinrole'] = 'No existen usuarios disponibles en el rol seleccionado'; $string['number'] = 'Número de grupos o miembros por grupo'; $string['numgroups'] = 'Número de grupos'; diff --git a/html/moodle2/langpacks/es/hvp.php b/html/moodle2/langpacks/es/hvp.php new file mode 100644 index 0000000000..08c16af50f --- /dev/null +++ b/html/moodle2/langpacks/es/hvp.php @@ -0,0 +1,34 @@ +. + +/** + * Strings for component 'hvp', language 'es', branch 'MOODLE_31_STABLE' + * + * @package hvp + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['user'] = 'Usuario'; +$string['welcomegettingstarted'] = 'Para empezar con H5P y Moodle échale un vistazo a nuestro moodle_tutorial}>tutorial y revisa el example_content}>contenido de ejemplo en H5P.org para que te sirva de guía.
    ¡Para su comodidad ya se han instalado los contenidos más populares!'; +$string['welcomeheader'] = '¡Bienvenido al mundo de H5P!'; +$string['whyupdatepart1'] = 'Puedes leer sobre por qué es importante actualizar y los beneficios de hacerlo en la página Porqué actualizar H5P'; +$string['whyupdatepart2'] = 'La página también lista los diferentes cambios, donde puedes leer sobre las nuevas características introducidas y los problemas que se han solucionado.'; +$string['year'] = 'Año'; +$string['years'] = 'Año(s)'; diff --git a/html/moodle2/langpacks/es/imscp.php b/html/moodle2/langpacks/es/imscp.php index b88c9d2845..391d4cd298 100644 --- a/html/moodle2/langpacks/es/imscp.php +++ b/html/moodle2/langpacks/es/imscp.php @@ -41,4 +41,5 @@ $string['page-mod-imscp-x'] = 'Cualquier página del módulo Paquete de contenidos IMS'; $string['pluginadministration'] = 'Administración IMSCP'; $string['pluginname'] = 'Paquete de contenidos IMS'; +$string['search:activity'] = 'Paquete de contenido IMS - información del recurso'; $string['toc'] = 'TOC'; diff --git a/html/moodle2/langpacks/es/lesson.php b/html/moodle2/langpacks/es/lesson.php index 19feca2132..869c1e29b3 100644 --- a/html/moodle2/langpacks/es/lesson.php +++ b/html/moodle2/langpacks/es/lesson.php @@ -125,6 +125,7 @@ $string['configmediaclose'] = 'Muestra un botón de cierre en el marco de la ventana emergente generada por un archivo multimedia vinculado'; $string['configmediaheight'] = 'Establece la altura de la ventana emergente para mostrar un archivo multimedia enlazado'; $string['configmediawidth'] = 'Establece el ancho de la ventana emergente para mostrar un archivo multimedia enlazado.'; +$string['configpassword_desc'] = 'Si se requiere una contraseña para acceder a la lección.'; $string['configslideshowbgcolor'] = 'Color de fondo para la presentación de diapositivas si está habilitado'; $string['configslideshowheight'] = 'Establece la altura de la presentación de diapositivas si está habilitado'; $string['configslideshowwidth'] = 'Establece el ancho de la presentación de diapositivas si está habilitado'; @@ -506,6 +507,7 @@ $string['score'] = 'Puntuación'; $string['score_help'] = 'La puntuación solo se utiliza cuando está habilitada la puntuación personalizada. Se puede conceder un valor de puntos numéricos a cada respuesta (positivo o negativo).'; $string['scores'] = 'Puntuaciones'; +$string['search:activity'] = 'Lección - información de actividad'; $string['secondpluswrong'] = 'No. ¿Desea probar de nuevo?'; $string['selectaqtype'] = 'Seleccione un tipo de pregunta'; $string['shortanswer'] = 'Respuesta corta'; @@ -549,6 +551,7 @@ $string['timespentminutes'] = 'Tiempo empleado (minutos)'; $string['timetaken'] = 'Tiempo empleado'; $string['topscorestitle'] = '{$a} puntuaciones más altas.'; +$string['totalpagesviewedheader'] = 'Número de páginas vistas'; $string['true'] = 'Verdadero'; $string['truefalse'] = 'Verdadero/Falso'; $string['unabledtosavefile'] = 'El archivo que ha subido no se ha podido guardar'; diff --git a/html/moodle2/langpacks/es/local_mobile.php b/html/moodle2/langpacks/es/local_mobile.php index c1522b5d85..75b3d0710f 100644 --- a/html/moodle2/langpacks/es/local_mobile.php +++ b/html/moodle2/langpacks/es/local_mobile.php @@ -25,10 +25,17 @@ defined('MOODLE_INTERNAL') || die(); +$string['allowpermissions'] = 'conceder permisos al rol de Usuario Autenticado'; +$string['allowpermissionsdescription'] = 'Editar el rol Usuario Autenticado y permitir la capacidad moodle/webservice:createtoken'; $string['cannotcreatetoken'] = 'La generación automática de token no está disponible para los administradores del sitio (deben crear una manualmente en el sitio)'; $string['checkpluginconfiguration'] = 'Comprobar configuración del plugin'; +$string['clickheretolaunchtheapp'] = 'Por favor, haz clic aquí si la aplicación no se abre automáticamente'; +$string['customlangstrings'] = 'Cadenas de lenguaje personalizadas'; +$string['custommenuitems'] = 'Elementos de menú personalizados'; +$string['disabledfeatures'] = 'Características desactivadas'; $string['enableadditionalservice'] = 'Habilitar el servicio de características adicionales Moodle Mobile'; $string['enableadditionalservicedescription'] = 'Este servicio debe estar habilitado.'; +$string['forcelogout'] = 'Forzar el cierre de sesión'; $string['local_mobiledescription'] = 'Extensión que amplía las características del servicio móvil'; $string['local_mobilesettings'] = 'Ajustes'; $string['local_mobiletypeoflogin'] = 'Elija el tipo de inicio de sesión'; @@ -37,5 +44,8 @@ $string['loginintheapp'] = 'A través de la app'; $string['logininthebrowser'] = 'A través de una ventana del navegador (para los conectores SSO)'; $string['loginintheinappbrowser'] = 'Mediante un navegador empotrado (para plugins SSO)'; +$string['mainmenu'] = 'Menú principal'; +$string['mobilefeatures'] = 'Características en el móvil'; $string['pluginname'] = 'Características adicionales de Moodle Mobile'; $string['pluginnotenabledorconfigured'] = 'La extensión local de Moodle Mobile debe estar habilitada y configurda a fin de poder ejecutar la aplicación'; +$string['remoteaddons'] = 'Extensiones remotas'; diff --git a/html/moodle2/langpacks/es/logstore_database.php b/html/moodle2/langpacks/es/logstore_database.php index 71ad5d46a5..603e590218 100644 --- a/html/moodle2/langpacks/es/logstore_database.php +++ b/html/moodle2/langpacks/es/logstore_database.php @@ -32,6 +32,7 @@ $string['databasepersist'] = 'Conexiones persistentes a la base de datos'; $string['databaseschema'] = 'Esquema de la base datos'; $string['databasesettings'] = 'Configuración de la base de datos'; +$string['databasesettings_help'] = 'Detalles de conexión para el log externo de la base de datos: {$a}'; $string['databasetable'] = 'Tabla de base de datos'; $string['filters'] = 'Filtrar registros'; $string['filters_help'] = 'Habilitar filtros que excluyan el registro de algunas acciones.'; diff --git a/html/moodle2/langpacks/es/logstore_legacy.php b/html/moodle2/langpacks/es/logstore_legacy.php index d6a671de09..4faba4a07c 100644 --- a/html/moodle2/langpacks/es/logstore_legacy.php +++ b/html/moodle2/langpacks/es/logstore_legacy.php @@ -26,3 +26,5 @@ defined('MOODLE_INTERNAL') || die(); $string['pluginname'] = 'Log heredado'; +$string['pluginname_desc'] = 'Un plugin de log que guarde las entradas del log en la tabla de log heredada.'; +$string['taskcleanup'] = 'Limpieza de la tabla heredada de log'; diff --git a/html/moodle2/langpacks/es/lti.php b/html/moodle2/langpacks/es/lti.php index cf31cf15f6..4d7fd52e34 100644 --- a/html/moodle2/langpacks/es/lti.php +++ b/html/moodle2/langpacks/es/lti.php @@ -40,6 +40,7 @@ Tenga en cuenta que este ajuste puede estar invalidado en la configuración de la herramienta.'; $string['action'] = 'Acción'; $string['activate'] = 'Activar'; +$string['activatetoadddescription'] = 'Necesitarás activar esta herramienta antes de que puedas añadir una descripción.'; $string['active'] = 'Activar'; $string['activity'] = 'Actividad'; $string['addnewapp'] = 'Habilitar aplicación externa'; @@ -80,8 +81,10 @@ $string['configtypes'] = 'Habilitar aplicaciones LTI'; $string['configured'] = 'Configurado'; $string['confirmtoolactivation'] = 'Esta seguro que desea activar la siguiente herramienta?'; +$string['courseactivitiesorresources'] = 'Actividades o recursos del curso'; $string['courseid'] = 'Número ID del Curso'; $string['courseinformation'] = 'Información del curso'; +$string['courselink'] = 'Ir al curso'; $string['coursemisconf'] = 'El curso está mal configurado'; $string['course_tool_types'] = 'Tipos de herramientas del curso'; $string['createdon'] = 'Creado el'; @@ -126,6 +129,7 @@ $string['donotaccept'] = 'No acepte'; $string['donotallow'] = 'No permita que'; $string['duplicateregurl'] = 'Esta URL de registro ya está en uso'; +$string['editdescription'] = 'Clic aquí para dar una descripción a la herramienta'; $string['edittype'] = 'Editar la configuración de la herramienta externa'; $string['embed'] = 'Incrustar'; $string['embed_no_blocks'] = 'Incrustar, sin bloques'; @@ -155,6 +159,7 @@ * **Borrar** - Elimina el tipo de herramienta del curso seleccionado.'; $string['external_tool_types'] = 'Tipos de herramientas externas'; $string['failedtoconnect'] = 'Moodle fue incapaz de comunicarse con el sistema "{$a}"'; +$string['failedtocreatetooltype'] = 'Error al crear la nueva herramienta. Por favor comprueba la URL y prueba de nuevo.'; $string['filter_basiclti_configlink'] = 'Configure sus sitios preferidos y sus contraseñas'; $string['filter_basiclti_password'] = 'La contraseña es obligatoria'; $string['filterconfig'] = 'Administración LTI'; @@ -192,6 +197,7 @@ $string['launch_url_help'] = 'La URL de inicio indica la dirección web de la Herramienta Externa y puede contener información adicional. Si no está seguro que ruta introducir, por favor consulte al proveedor de la misma para más información. Si ha seleccionado un tipo de herramienta específico, puede no ser necesario especificar una URL de inicio. Si el enlace se utiliza sólo para poner en marcha el sistema del proveedor y no para ir a un recurso específico, es probable que esto sea así.'; +$string['leaveblank'] = 'Déjalo en blanco si no lo necesitas'; $string['lti'] = 'LTI'; $string['lti:addcoursetool'] = 'Calificar actividades LTI'; $string['lti:addinstance'] = 'Añadir una nueva actividad LTI'; @@ -222,6 +228,7 @@ **Pendiente** Estos proveedores no han sido configurados por el administrador. Los docentes podrán usar herramientas de ese proveedor si disponen de una clave de usuario y clave compartida o si no se requieren. **Rechazado** Estos proveedores están marcados como no disponibles en el sitio Moodle. Los docentes podrán usar herramientas de ese proveedor si disponen de una clave de usuario y clave compartida o si no se requieren.'; +$string['manage_external_tools'] = 'Administrar herramientas'; $string['manage_tool_proxies'] = 'Administrar registros de la herramienta externa'; $string['manage_tools'] = 'Administrar tipos de herramienta externa'; $string['miscellaneous'] = ''; @@ -249,23 +256,49 @@ $string['no_lti_configured'] = 'No existen herramientas externas activas configuradas.'; $string['no_lti_pending'] = 'No existen herramientas externas pendientes.'; $string['no_lti_rejected'] = 'No existen herramientas externas rechazadas.'; +$string['noltis'] = 'No hay instancias de herramientas externas'; +$string['no_lti_tools'] = 'No hay herramientas externas configuradas.'; +$string['noprofileservice'] = 'Servicio del perfil no encontrado'; $string['noservers'] = 'No se han encontrado servidores'; +$string['no_tp_accepted'] = 'No hay registros aceptados de herramientas externas.'; +$string['no_tp_cancelled'] = 'No hay registros cancelados de herramientas externas.'; +$string['no_tp_pending'] = 'No hay registros pendientes de herramientas externas.'; +$string['no_tp_rejected'] = 'No hay registros rechazados de herramientas externas.'; $string['noviewusers'] = 'No se encontraron usuarios con permiso para utilizar esta herramienta'; $string['optionalsettings'] = 'Ajustes opcionales'; +$string['organization'] = 'Detalles de la organización'; +$string['organizationdescr'] = 'Descripción de la organización'; +$string['organizationid'] = 'ID de organización'; +$string['organizationurl'] = 'URL de la organización'; +$string['organizationurl_help'] = 'La URL base de esta instancia de Moodle. + +Si se deja este campo vacío, un valor por defecto será usado basado en la configuración de este sitio.'; $string['pagesize'] = 'Entregas mostradas por página'; +$string['parameter'] = 'Parámetros de la herramienta'; $string['pending'] = 'Pendiente'; +$string['pluginadministration'] = 'Administración de herramientas externas'; $string['pluginname'] = 'LTI'; $string['preferheight'] = 'Altura recomendada'; $string['preferwidth'] = 'Ancho recomendado'; $string['press_to_submit'] = 'Pulsar para comenzar esta actividad'; $string['privacy'] = 'Privacidad'; $string['quickgrade'] = 'Permitir calificación rápida'; +$string['redirect'] = 'Serás redirigido en unos segundos. Si no eres redirigido, presiona el botón.'; $string['register'] = 'Registro'; +$string['registertype'] = 'Configurar una nueva herramienta externa de registro'; +$string['registrationname'] = 'Nombre del proveedor de la herramienta'; +$string['registrationname_help'] = 'Inserta el nombre del proveedor de la herramienta que está siendo registrada.'; +$string['registration_options'] = 'Opciones de registro'; +$string['registrationurl'] = 'URL de registro'; +$string['reject'] = 'Rechazar'; $string['rejected'] = 'Rechazado'; $string['resource'] = 'Recurso'; $string['resourcekey'] = 'Clave de cliente'; $string['resourcekey_admin'] = 'Clave de cliente'; $string['resourceurl'] = 'URL del recurso'; +$string['return_to_course'] = 'Clic aquí para volver al curso.'; +$string['saveallfeedback'] = 'Guardar toda mi retroalimentación'; +$string['search:activity'] = 'Herramienta externa - información de actividad'; $string['send'] = 'Enviar'; $string['services'] = 'Servicios'; $string['setupoptions'] = 'Opciones de configuración'; @@ -273,23 +306,47 @@ $string['share_email_admin'] = 'Compartir el e-mail del usuario con la herramienta'; $string['share_name'] = 'Compartir el nombre del usuario con la herramienta'; $string['share_name_admin'] = 'Compartir el nombre del usuario con la herramienta'; +$string['share_roster'] = 'Permitir acceder a la herramienta a la lista de este curso'; +$string['share_roster_admin'] = 'La herramienta puede acceder a la lista del curso'; +$string['show_in_course_lti1'] = 'Configuración del uso de la herramienta'; +$string['show_in_course_lti2'] = 'Configuración del uso de la herramienta'; +$string['show_in_course_preconfigured'] = 'Mostrar como una herramienta preconfigurada cuando se añade una herramienta externa'; $string['size'] = 'Parámetros de tamaño'; $string['submission'] = 'Entrega'; $string['submissions'] = 'Envíos'; $string['submissionsfor'] = 'Entregas para {$a}'; +$string['subplugintype_ltiresource'] = 'Recurso del servicio LTI'; +$string['subplugintype_ltiresource_plural'] = 'Recursos del servicio LTI'; $string['subplugintype_ltiservice'] = 'Servicio LTI'; $string['subplugintype_ltiservice_plural'] = 'Servicios LTI'; $string['subplugintype_ltisource'] = 'Fuente LTI'; $string['subplugintype_ltisource_plural'] = 'Fuentes LTI'; +$string['successfullycreatedtooltype'] = 'Se ha creado una nueva herramienta con éxito!'; +$string['toggle_debug_data'] = 'Activar información de desarrollo'; $string['tool_config_not_found'] = 'No se encuentra la configuración de herramienta para este URL'; +$string['tooldescription'] = 'Descripción de la herramienta'; +$string['toolisbeingused'] = 'Esta herramienta ha sido usada {$a} veces'; +$string['toolisnotbeingused'] = 'Esta herramienta aún no ha sido usada'; $string['toolproxy'] = 'Registros de herramienta externa'; $string['toolproxyregistration'] = 'Registro de herramienta externa'; $string['toolregistration'] = 'Registro de herramienta externa'; $string['tool_settings'] = 'Ajustes de la herramienta'; $string['toolsetup'] = 'Registro de herramienta externa'; +$string['tooltypeadded'] = 'Se ha añadido la herramienta preconfigurada'; +$string['tooltypedeleted'] = 'Se ha borrado la herramienta preconfigurada'; +$string['tooltypenotdeleted'] = 'No se ha podido borrar la herramienta preconfigurada'; +$string['tooltypes'] = 'Herramientas'; +$string['tooltypeupdated'] = 'Se ha actualizado la herramienta preoconfigurada'; +$string['toolurlplaceholder'] = 'URL de la herramienta...'; $string['typename'] = 'Nombre de la herramienta'; $string['types'] = 'Tipos'; +$string['unabletocreatetooltype'] = 'No se ha podido crear la herramienta'; +$string['unabletofindtooltype'] = 'No se ha podido encontrar la herramienta {$a->id}'; +$string['unknownstate'] = 'Estado desconocido'; $string['update'] = 'Actualización'; +$string['useraccountinformation'] = 'Información de la cuenta del usuario'; +$string['userpersonalinformation'] = 'Información personal del usuario'; +$string['using_tool_cartridge'] = 'Usando herramienta cartridge'; $string['using_tool_configuration'] = 'Usar configuración de herramienta:'; $string['validurl'] = 'Una URL válida debe empezar con http(s)://'; $string['viewsubmissions'] = 'Ver entregas y pantalla de calificaciones'; diff --git a/html/moodle2/langpacks/es/message_airnotifier.php b/html/moodle2/langpacks/es/message_airnotifier.php new file mode 100644 index 0000000000..8123fa1e3a --- /dev/null +++ b/html/moodle2/langpacks/es/message_airnotifier.php @@ -0,0 +1,31 @@ +. + +/** + * Strings for component 'message_airnotifier', language 'es', branch 'MOODLE_31_STABLE' + * + * @package message_airnotifier + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['airnotifier:managedevice'] = 'Administrar dispositivos'; +$string['requestaccesskey'] = 'Solicitar clave de acceso'; +$string['showhide'] = 'Activar/Desactivar el servicio'; +$string['unknowndevice'] = 'Dispositivo desconocido'; diff --git a/html/moodle2/langpacks/es/message_email.php b/html/moodle2/langpacks/es/message_email.php index 11a2776216..9d826c3bcc 100644 --- a/html/moodle2/langpacks/es/message_email.php +++ b/html/moodle2/langpacks/es/message_email.php @@ -32,17 +32,20 @@ $string['configmailnewline'] = 'Caracteres de línea nueva usados en los mensajes de correo electrónico. CRLF es necesario de acuerdo RFC 822bis; algunos servidores realizan una conversión automática desde LF a CRLF, en tanto que otros realizan una conversión incorrecta de CRLF a CRCRLF y, finalmente, otros rechazarn los correos con LF vacío (qmail, por ejemplo). Intente modificar este ajuste si tiene problemas con correos sin entregar o con nuevas líneas dobles.'; $string['confignoreplyaddress'] = 'A veces los emails son enviados por el usuario (e.g., mensajes a un foro). La dirección email especificada aquí se usará como dirección "De" en aquellos casos en que los receptores no puedan replicar directamente al usuario (e.g., cuando un usuario elige mantener oculta su dirección).'; $string['configsitemailcharset'] = 'Todos los emails generados por su sitio se enviarán en el juego de caracteres que aquí se especifique. En cualquier caso, cada usuario individual podrá ajustar esta opción si está habilitado el siguiente ajuste.'; +$string['configsmtpauthtype'] = 'Esto activa el tipo de autenticación para usar en un servidor smtp.'; $string['configsmtphosts'] = 'Escriba el nombre completo de uno o más servidores SMTP locales que Moodle usará para enviar correo (e.g., \'mail.a.com\' o \'mail.a.com;mail.b.com\'). Si lo deja en blanco, Moodle usará el método PHP por defecto para enviar correo.'; $string['configsmtpmaxbulk'] = 'Número máximo de mensajes enviados por sesión SMTP. La agrupación de mensajes puede agilizar el envío de emails. Valores inferiores a 2 fuerzan la creación de una nueva sesión SMTP para cada email.'; $string['configsmtpsecure'] = 'Si el servidor SMTP requiere conexión segura, especifique el tipo correcto de protocolo.'; $string['configsmtpuser'] = 'Si antes ha especificado un servidor SMTP, y el servidor requiere identificación, escriba aquí el nombre de usuario y la contraseña.'; $string['email'] = 'Enviar notificaciones email a'; +$string['emailonlyfromnoreplyaddress'] = '¿Enviar siempre el email desde la dirección de no-responder?'; $string['ifemailleftempty'] = 'Dejar vacío para enviar avisos a {$a}'; $string['mailnewline'] = 'Caracteres de línea nueva en correo electrónico'; $string['none'] = 'Ninguno'; $string['noreplyaddress'] = 'Dirección \'no-reply\''; $string['pluginname'] = 'Email'; $string['sitemailcharset'] = 'Conjunto de caracteres'; +$string['smtpauthtype'] = 'Tipo de autenticación SMTP'; $string['smtphosts'] = 'Servidores SMTP'; $string['smtpmaxbulk'] = 'Límite de sesión SMTP'; $string['smtppass'] = 'Contraseña SMTP'; diff --git a/html/moodle2/langpacks/es/moodle.php b/html/moodle2/langpacks/es/moodle.php index 8fa3787f2b..f88d5a15af 100644 --- a/html/moodle2/langpacks/es/moodle.php +++ b/html/moodle2/langpacks/es/moodle.php @@ -25,72 +25,72 @@ defined('MOODLE_INTERNAL') || die(); -$string['abouttobeinstalled'] = 'a punto de ser instalado'; +$string['abouttobeinstalled'] = 'a ser instalados'; $string['action'] = 'Acción'; -$string['actionchoice'] = '¿Qué quiere hacer con el archivo \'{$a}\'?'; +$string['actionchoice'] = '¿Qué desea hacer con el archivo \'{$a}\'?'; $string['actions'] = 'Acciones'; $string['active'] = 'Activo'; $string['activeusers'] = 'Usuarios activos'; $string['activities'] = 'Actividades'; -$string['activities_help'] = 'Las actividades (tales como foros, cuestionarios y wikis) posibilitan agregar contenidos interactivos al curso'; +$string['activities_help'] = 'Actividades como foros, exámenes y wikis habilitan el contenido interactivo a ser agregado al curso.'; $string['activity'] = 'Actividad'; $string['activityclipboard'] = 'Moviendo esta actividad: {$a}'; -$string['activityiscurrentlyhidden'] = 'Lo sentimos, esta actividad está oculta'; +$string['activityiscurrentlyhidden'] = 'Lo sentimos, esta actividad está actualmente oculta'; $string['activitymodule'] = 'Módulo de Actividad'; -$string['activitymodules'] = 'Módulos de actividad'; -$string['activityreport'] = 'Informe de actividades'; -$string['activityreports'] = 'Informes de actividad'; -$string['activityselect'] = 'Seleccionar esta actividad para moverla'; +$string['activitymodules'] = 'Módulos de Actividad'; +$string['activityreport'] = 'Reporte de Actividad'; +$string['activityreports'] = 'Reportes de Actividad'; +$string['activityselect'] = 'Seleccione esta actividad para moverse a otro lugar'; $string['activitysince'] = 'Actividad desde {$a}'; $string['activitytypetitle'] = '{$a->activity} - {$a->type}'; $string['activityweighted'] = 'Actividad por usuario'; $string['add'] = 'Agregar'; -$string['addactivity'] = 'Agrega una actividad...'; +$string['addactivity'] = 'Agregar una actividad ...'; $string['addactivitytosection'] = 'Añade una actividad a la sección \'{$a}\''; -$string['addadmin'] = 'Agrega un administrador'; -$string['addblock'] = 'Agrega un bloque'; -$string['addcomment'] = 'Agrega un comentario...'; -$string['addcountertousername'] = 'Crea un usuario agregando un número al nombre de usuario'; -$string['addcreator'] = 'Agrega un creador de curso'; -$string['adddots'] = 'Agrega...'; +$string['addadmin'] = 'Agregar administrador'; +$string['addblock'] = 'Agregar un bloque'; +$string['addcomment'] = 'Agregar un comentario ...'; +$string['addcountertousername'] = 'Crea el usuario al agregar número al nombre de usuario'; +$string['addcreator'] = 'Agregar creador de curso'; +$string['adddots'] = 'Agregar ...'; $string['added'] = 'Agregado {$a}'; -$string['addedrecip'] = 'Agregado nuevo receptor {$a}'; -$string['addedrecips'] = 'Agregados nuevos receptores {$a}'; +$string['addedrecip'] = 'Nuevo {$a} recipiente agregado'; +$string['addedrecips'] = 'Agregados {$a} nuevos recipientes'; $string['addedtogroup'] = 'Agregado al grupo "{$a}"'; $string['addedtogroupnot'] = 'No agregado al grupo "{$a}"'; $string['addedtogroupnotenrolled'] = 'No agregado al grupo "{$a}" porque no está matriculado en el curso'; -$string['addfilehere'] = 'Añada archivo(s) aquí'; +$string['addfilehere'] = 'Agregar archivos aquí'; $string['addinganew'] = 'Agregando un nuevo {$a}'; $string['addinganewto'] = 'Agregando un nuevo {$a->what} a {$a->to}'; -$string['addingdatatoexisting'] = 'Agregando información'; +$string['addingdatatoexisting'] = 'Agregandos datos a los datos existentes'; $string['additionalnames'] = 'Nombres adicionales'; -$string['addlinkhere'] = 'Añada el enlace aquí'; -$string['addnewcategory'] = 'Agrega otra categoría'; -$string['addnewcourse'] = 'Agrega otro curso'; -$string['addnewuser'] = 'Agregar un usuario'; -$string['addnousersrecip'] = 'Agrega nuevos destinatarios a la lista {$a}'; -$string['addpagehere'] = 'Añade texto aquí'; -$string['addresource'] = 'Agrega un recurso...'; -$string['addresourceoractivity'] = 'Añade una actividad o un recurso'; -$string['addresourcetosection'] = 'Añade un recurso a la sección \'{$a}\''; +$string['addlinkhere'] = 'Agregar enlace aquí'; +$string['addnewcategory'] = 'Crear nueva categoría'; +$string['addnewcourse'] = 'Crear un nuevo curso'; +$string['addnewuser'] = 'Crear un nuevo usuario'; +$string['addnousersrecip'] = 'Agregue usuarios que no han accedido a este {$a} a lista de recipientes'; +$string['addpagehere'] = 'Añada texto aquí'; +$string['addresource'] = 'Agregue un recurso ...'; +$string['addresourceoractivity'] = 'Agregue una actividad o recurso'; +$string['addresourcetosection'] = 'Agregue un recurso a la sección \'{$a}\''; $string['address'] = 'Dirección'; -$string['addressedto'] = 'Hasta'; -$string['addstudent'] = 'Agrega un estudiante'; -$string['addsubcategory'] = 'Agrega una subcategoría'; -$string['addteacher'] = 'Agrega un profesor'; -$string['admin'] = 'Admin'; -$string['adminhelpaddnewuser'] = 'Crear manualmente una nueva cuenta de usuario'; -$string['adminhelpassignadmins'] = 'Los administradores pueden hacer cualquier cosa en cualquier parte del sitio'; -$string['adminhelpassigncreators'] = 'Los creadores pueden crear nuevos cursos'; -$string['adminhelpassignsiteroles'] = 'Aplicar roles definidos de sitio a usuarios específicos'; -$string['adminhelpassignstudents'] = 'Ir a un curso y agregar estudiantes desde el menú Administración'; -$string['adminhelpauthentication'] = 'Puede utilizar cuentas internas o bases de datos externas'; -$string['adminhelpbackup'] = 'Configurar las copias de seguridad automáticas'; -$string['adminhelpconfiguration'] = 'Configurar la apariencia y el funcionamiento general del sitio'; -$string['adminhelpconfigvariables'] = 'Configurar variables que inciden en la operación general del sitio'; -$string['adminhelpcourses'] = 'Definir cursos y categorías y asignarles personas'; -$string['adminhelpeditorsettings'] = 'Definir ajustes básicos del editor HTML'; -$string['adminhelpedituser'] = 'Navegar por la lista de usuarios y editar cualquiera de ellos'; +$string['addressedto'] = 'A'; +$string['addstudent'] = 'Agregar estudiante'; +$string['addsubcategory'] = 'Agregar categoría'; +$string['addteacher'] = 'Agregar profesor'; +$string['admin'] = 'Administrador'; +$string['adminhelpaddnewuser'] = 'Para crear manualmente una nueva cuenta de usuario'; +$string['adminhelpassignadmins'] = 'Los administradores puede hacer lo que sea e ir a cualquier lugar del sitio'; +$string['adminhelpassigncreators'] = 'Los creadores de cursos pueden crear nuevos cursos'; +$string['adminhelpassignsiteroles'] = 'Aplicar roles de sitio definidos a usuarios específicos'; +$string['adminhelpassignstudents'] = 'Entra al curso y agrega estudiantes desde el menú administrativo del curso'; +$string['adminhelpauthentication'] = 'Puede usar cuentas de usuarios internas o cuentas de usuarios alojadas en bases de datos externas'; +$string['adminhelpbackup'] = 'Configure respaldos automáticos y programe la tarea de respaldo'; +$string['adminhelpconfiguration'] = 'Configure cómo el sitio se ve y trabaja'; +$string['adminhelpconfigvariables'] = 'Configure variables que afectan la operación general del sitio'; +$string['adminhelpcourses'] = 'Defina cursos y categorías y asigne personas a ellos, edite los cursos pendientes'; +$string['adminhelpeditorsettings'] = 'Defina configuraciones básicas para el editor HTML'; +$string['adminhelpedituser'] = 'Examine la lista de cuentas de usuarios y edite alguno de ellos'; $string['adminhelpenvironment'] = 'Compruebe si su servidor se ajusta a los requerimientos de instalación actuales y futuros.'; $string['adminhelpfailurelogs'] = 'Revisar registros de accesos fallidos'; $string['adminhelplanguage'] = 'Revisar y editar el presente idioma'; diff --git a/html/moodle2/langpacks/es/plugin.php b/html/moodle2/langpacks/es/plugin.php index 4830b1200f..ba1b0d306f 100644 --- a/html/moodle2/langpacks/es/plugin.php +++ b/html/moodle2/langpacks/es/plugin.php @@ -104,6 +104,8 @@ $string['status_uptodate'] = 'Instalado'; $string['supportedmoodleversions'] = 'Versiones de Moodle soportadas'; $string['systemname'] = 'Identificador'; +$string['type_antivirus'] = 'Extensión de Antivirus'; +$string['type_antivirus_plural'] = 'Extensiones de antivirus'; $string['type_auth'] = 'Método de identificación'; $string['type_auth_plural'] = 'Extensiones de identificación'; $string['type_availability'] = 'Restricciones disponibles'; @@ -118,6 +120,8 @@ $string['type_calendartype_plural'] = 'Tipos de calendario'; $string['type_coursereport'] = 'Informe de curso'; $string['type_coursereport_plural'] = 'Informes del curso'; +$string['type_dataformat'] = 'Formato de datos'; +$string['type_dataformat_plural'] = 'Formatos de datos'; $string['type_editor'] = 'Editor'; $string['type_editor_plural'] = 'Editores'; $string['type_enrol'] = 'Método de matriculación'; @@ -158,6 +162,8 @@ $string['type_report_plural'] = 'Informes'; $string['type_repository'] = 'Repositorio'; $string['type_repository_plural'] = 'Repositorios'; +$string['type_search'] = 'Motor de búsqueda'; +$string['type_search_plural'] = 'Motores de búsqueda'; $string['type_theme'] = 'Tema'; $string['type_theme_plural'] = 'Temas'; $string['type_tool'] = 'Herramienta de Administración'; diff --git a/html/moodle2/langpacks/es/portfolio_boxnet.php b/html/moodle2/langpacks/es/portfolio_boxnet.php index 813de14afe..5d5b66d702 100644 --- a/html/moodle2/langpacks/es/portfolio_boxnet.php +++ b/html/moodle2/langpacks/es/portfolio_boxnet.php @@ -25,10 +25,14 @@ defined('MOODLE_INTERNAL') || die(); +$string['clientid'] = 'ID del cliente'; +$string['clientsecret'] = 'Clave secreta del cliente'; $string['existingfolder'] = 'Carpeta existente para incluir archivo(s)'; $string['folderclash'] = 'La carpeta que intenta crear ya existe'; $string['foldercreatefailed'] = 'No se pudo crear la carpeta de destino en box.net'; $string['folderlistfailed'] = 'No se ha podido recuperar una lista de carpetas de box.net'; +$string['missinghttps'] = 'Se requiere HTTPS'; +$string['missingoauthkeys'] = 'ID del cliente y clave secreta no encontradas'; $string['newfolder'] = 'Nueva carpeta para guardar archivos'; $string['noauthtoken'] = 'No se ha podido recuperar una ficha de autenticación para usar en esta sesión'; $string['notarget'] = 'Debe especificar una carpeta existente o una carpeta nueva a la que subir el archivo'; diff --git a/html/moodle2/langpacks/es/portfolio_googledocs.php b/html/moodle2/langpacks/es/portfolio_googledocs.php index 4d21746948..0c76f38a78 100644 --- a/html/moodle2/langpacks/es/portfolio_googledocs.php +++ b/html/moodle2/langpacks/es/portfolio_googledocs.php @@ -25,7 +25,10 @@ defined('MOODLE_INTERNAL') || die(); +$string['clientid'] = 'ID del cliente'; +$string['nooauthcredentials'] = 'Se requieren las credenciales de OAuth.'; $string['nosessiontoken'] = 'No existe ficha de sesión que impida exportar a google.'; $string['oauthinfo'] = '

    Para utilizar este plugin, debe registrar su sitio en Google, como se describe en la documentación Google OAuth 2.0 setup.

    Como parte del proceso de registro, tendrá que introducir la siguiente URL como "Authorized Redirect URIs \':

    {$a->callbackurl}

    Una vez registrado, se le proporcionará un ID de cliente y el secreto que se puede utilizar para configurar los plugins de Google Drive y Picasa.

    '; $string['pluginname'] = 'Google Drive'; +$string['secret'] = 'Secreta'; $string['sendfailed'] = 'No se ha podido transferir el archivo {$a} a google'; diff --git a/html/moodle2/langpacks/es/portfolio_picasa.php b/html/moodle2/langpacks/es/portfolio_picasa.php index 211251f973..0e0fdc2643 100644 --- a/html/moodle2/langpacks/es/portfolio_picasa.php +++ b/html/moodle2/langpacks/es/portfolio_picasa.php @@ -25,7 +25,9 @@ defined('MOODLE_INTERNAL') || die(); +$string['clientid'] = 'ID del cliente'; $string['noauthtoken'] = 'No se ha recibido de google una ficha de autenticación. Por favor, asegúrese de que está permitiendo que moodle acceda a su cuenta en google'; +$string['nooauthcredentials'] = 'Se requieren las credenciales de OAuth.'; $string['oauthinfo'] = '

    Para utilizar este plugin, debe registrar su sitio en Google, como se describe en la documentación Google OAuth 2.0 setup.

    Como parte del proceso de registro, tendrá que introducir la siguiente URL como "Authorized Redirect URIs \':

    {$a->callbackurl}

    Una vez registrado, se le proporcionará un ID de cliente y el secreto que se puede utilizar para configurar los plugins de Google Drive y Picasa.

    '; $string['pluginname'] = 'Picasa'; $string['sendfailed'] = 'No se ha podido transferir el archivo {$a} a Picasa'; diff --git a/html/moodle2/langpacks/es/qbehaviour_deferredcbm.php b/html/moodle2/langpacks/es/qbehaviour_deferredcbm.php index bb44e25865..8fd83b6856 100644 --- a/html/moodle2/langpacks/es/qbehaviour_deferredcbm.php +++ b/html/moodle2/langpacks/es/qbehaviour_deferredcbm.php @@ -42,3 +42,4 @@ $string['judgementsummary'] = 'Respuestas: {$a->responses}. Precisión: {$a->fraction}. (Rango óptimo {$a->idealrangelow} a {$a->idealrangehigh}). Usted estuvo {$a->judgement} usando éste nivel de certeza.'; $string['noquestions'] = 'No hay respuestas'; $string['pluginname'] = 'Retroalimentación diferida con CBM'; +$string['weightx'] = 'Peso {$a}'; diff --git a/html/moodle2/langpacks/es/qformat_blackboard_six.php b/html/moodle2/langpacks/es/qformat_blackboard_six.php index ec3b0f2779..f00955a48d 100644 --- a/html/moodle2/langpacks/es/qformat_blackboard_six.php +++ b/html/moodle2/langpacks/es/qformat_blackboard_six.php @@ -25,5 +25,10 @@ defined('MOODLE_INTERNAL') || die(); +$string['defaultname'] = 'Pregunta importada {$a}'; +$string['errormanifest'] = 'Error mientras se parseaba el documento manifest de IMS.'; +$string['imagenotfound'] = 'La imagen con la ruta {$a} no se ha encontrado en la importación.'; +$string['importedcategory'] = 'Categoría importada {$a}'; +$string['importnotext'] = 'Pregunta no encontrada en el archivo XML'; $string['pluginname'] = 'Blackboard V6+'; $string['pluginname_help'] = 'El formato Blackboard V6+ permite importar via fichero zip las preguntas guardadas en el formato de exportación Blackboard. El soporte para Blackboard versiones 6 y 7 es limitado.'; diff --git a/html/moodle2/langpacks/es/qtype_calculated.php b/html/moodle2/langpacks/es/qtype_calculated.php index be4ac08518..a21e9bb9b3 100644 --- a/html/moodle2/langpacks/es/qtype_calculated.php +++ b/html/moodle2/langpacks/es/qtype_calculated.php @@ -32,6 +32,7 @@ $string['answerformula'] = 'Fórmula para respuesta {$a}'; $string['answerhdr'] = 'Respuesta'; $string['answerstoleranceparam'] = 'Parámetros de tolerancia en las respuestas'; +$string['answerwithtolerance'] = '{$a->answer} (±{$a->tolerance} {$a->tolerancetype})'; $string['anyvalue'] = 'Cualquier valor'; $string['atleastoneanswer'] = 'Necesita proporcionar al menos una respuesta.'; $string['atleastonerealdataset'] = 'Debe haber por lo menos un conjunto de datos reales en el enunciado de la pregunta'; @@ -51,6 +52,7 @@ $string['decimals'] = 'Con {$a}'; $string['deleteitem'] = 'Eliminar ítem'; $string['deletelastitem'] = 'Eliminar último ítem'; +$string['distributionoption'] = 'Seleccionar opción de distribución'; $string['editdatasets'] = 'Editar el conjunto de datos de os comodines'; $string['editdatasets_help'] = 'Los valores comodín se pueden crear mediante la introducción de un número en cada campo "comodín" y clic en el botón añadir. Para generar automáticamente 10 o más valores, seleccione el número de valores necesarios antes de hacer clic en el botón añadir. Una "distribución uniforme" significa que cualquier valor entre los límites establecidos tiene la misma probabilidad de que se genere; una "distribución log-uniforme" significa que los valores situados hacia el límite inferior tienen más probabilidad.'; $string['existingcategory1'] = 'usará un conjunto de datos compartidos ya existente'; @@ -72,6 +74,7 @@ $string['itemtoadd'] = 'Item para agregar'; $string['keptcategory1'] = 'usará el mismo conjunto de datos compartidos que antes'; $string['keptlocal1'] = 'usará el mismo conjunto de datos privado que antes'; +$string['lengthoption'] = 'Seleccionar la opción de longitud'; $string['loguniform'] = 'Log-uniforme'; $string['makecopynextpage'] = 'Página siguiente (nueva pregunta)'; $string['mandatoryhdr'] = 'Hay comodines obligatorios en las respuestas'; @@ -83,7 +86,11 @@ $string['missingquestiontext'] = 'No se encuentra el enunciado de la pregunta'; $string['mustenteraformulaorstar'] = 'Debe introducir una fórmual o un asterisco \'*\''; $string['newcategory1'] = 'usará un nuevo conjunto de datos compartido'; +$string['newcategory2'] = 'Un archivo de un nuevo conjunto de archivos que sólo será utilizado por otras preguntas en esta categoría.'; +$string['newcategory3'] = 'Un enlace de un nuevo conjunto de enlaces que sólo será utilizado por otras preguntas en esta categoría.'; $string['newlocal1'] = 'usará un nuevo conjunto de datos privado'; +$string['newlocal2'] = 'Un archivo de un nuevo conjunto de archivos que sólo serán utilizados por esta pregunta'; +$string['newlocal3'] = 'Un enlace de un nuevo conjunto de enlaces que sólo serán utilizados por esta pregunta'; $string['newsetwildcardvalues'] = 'nueva(s) serie(s) de valores para el comodín'; $string['nextitemtoadd'] = 'Siguiente \'Item a agregar\''; $string['nextpage'] = 'Siguiente Página'; diff --git a/html/moodle2/langpacks/es/qtype_ddimageortext.php b/html/moodle2/langpacks/es/qtype_ddimageortext.php index dcec17605e..76e3773a6e 100644 --- a/html/moodle2/langpacks/es/qtype_ddimageortext.php +++ b/html/moodle2/langpacks/es/qtype_ddimageortext.php @@ -27,6 +27,7 @@ $string['answer'] = 'Respuesta'; $string['bgimage'] = 'Imagen de fondo'; +$string['blank'] = 'vacío'; $string['correctansweris'] = 'La respuesta correcta es: {$a}'; $string['draggableimage'] = 'Imagen arrastrable'; $string['draggableitem'] = 'Elemento arrastrable'; @@ -34,6 +35,11 @@ $string['draggableitems'] = 'Elementos arrastrables'; $string['draggableitemtype'] = 'Tipo'; $string['draggableword'] = 'Texto arrastrable'; +$string['dropbackground'] = 'Imagen de fondo para arrastrar los marcadores dentro de este'; +$string['dropzone'] = 'Dejar caer la zona {$a}'; +$string['dropzoneheader'] = 'Dejar caer las zonas'; +$string['formerror_disallowedtags'] = 'Lo sentimos, las etiquetas HTML no están permitidas en el texto arrastrable.'; +$string['formerror_nofile'] = 'Necesita subir o seleccionar un archivo para usarlo aquí.'; $string['formerror_notintxleft'] = 'La coordenada x debe ser un entero'; $string['formerror_notintytop'] = 'La coordenada y debe ser un entero'; $string['infinite'] = 'Ilimitado'; @@ -44,6 +50,9 @@ $string['previewareaheader'] = 'Vista Previa'; $string['previewareamessage'] = 'Seleccione una imagen de fondo, especifique los elementos que se pueden arrastrar y defina las zonas de colocación sobre las que deben ser arrastrados.'; $string['refresh'] = 'Refrescar vista previa'; +$string['summarisechoice'] = '{$a->no}. {$a->text}'; $string['summarisechoiceno'] = 'Elemento {$a}'; +$string['summariseplace'] = '{$a->no}. {$a->text}'; +$string['summariseplaceno'] = 'Dejar caer la zona {$a}'; $string['xleft'] = 'Izquierda'; $string['ytop'] = 'Arriba'; diff --git a/html/moodle2/langpacks/es/qtype_ddmarker.php b/html/moodle2/langpacks/es/qtype_ddmarker.php index ee08da6765..555babb3b0 100644 --- a/html/moodle2/langpacks/es/qtype_ddmarker.php +++ b/html/moodle2/langpacks/es/qtype_ddmarker.php @@ -25,7 +25,38 @@ defined('MOODLE_INTERNAL') || die(); +$string['alttext'] = 'Texto alternativo'; +$string['answer'] = 'Respuesta'; +$string['bgimage'] = 'Imagen de fondo'; +$string['coords'] = 'Coordenadas'; +$string['correctansweris'] = 'La respuesta correcta es: {$a}'; +$string['draggableimage'] = 'Imagen arrastrable'; +$string['draggableitem'] = 'Elemento arrastrable'; +$string['draggableitemheader'] = 'Elemento arrastrable {$a}'; +$string['draggableitemtype'] = 'Tipo'; +$string['draggableword'] = 'Texto arrastrable'; +$string['dropbackground'] = 'Imagen de fondo para arrastrar marcadores dentro de este'; +$string['dropzone'] = 'Dejar caer la zona {$a}'; +$string['dropzoneheader'] = 'Dejar caer las zonas'; +$string['dropzones'] = 'Dejar caer las zonas'; $string['formerror_nobgimage'] = 'Debe seleccionar una imagen para ser utilizada como fondo para la zona de arrastrar y soltar.'; +$string['infinite'] = 'Infinito'; +$string['marker'] = 'Marcador'; +$string['marker_n'] = 'Marcador {no}'; +$string['markers'] = 'Marcadores'; +$string['noofdrags'] = 'Número'; $string['pluginname'] = 'Arrastrar y soltar marcadores'; $string['pluginnameadding'] = 'Añadiendo arrastrar y soltar marcadores'; $string['pluginnameediting'] = 'Editando arrastrar y soltar marcadores'; +$string['previewareaheader'] = 'Previsualizar'; +$string['refresh'] = 'Refrescar previsualización'; +$string['shape'] = 'Forma'; +$string['shape_circle'] = 'Círculo'; +$string['shape_circle_lowercase'] = 'círculo'; +$string['shape_polygon'] = 'Polígono'; +$string['shape_polygon_lowercase'] = 'polígono'; +$string['shape_rectangle'] = 'Rectángulo'; +$string['shape_rectangle_lowercase'] = 'rectángulo'; +$string['summariseplace'] = '{$a->no}. {$a->text}'; +$string['summariseplaceno'] = 'Dejar caer la zona {$a}'; +$string['ytop'] = 'Arriba'; diff --git a/html/moodle2/langpacks/es/qtype_ddwtos.php b/html/moodle2/langpacks/es/qtype_ddwtos.php index 6f14c39316..f68b96083e 100644 --- a/html/moodle2/langpacks/es/qtype_ddwtos.php +++ b/html/moodle2/langpacks/es/qtype_ddwtos.php @@ -27,7 +27,9 @@ $string['addmorechoiceblanks'] = 'Espacios en blanco para {no} más opciones'; $string['answer'] = 'Respuesta'; +$string['blank'] = 'vacío'; $string['correctansweris'] = 'La respuesta correcta es: {$a}'; +$string['infinite'] = 'Ilimitado'; $string['pleaseputananswerineachbox'] = 'Por favor, ponga una respuesta en cada caja.'; $string['pluginname'] = 'Arrastrar y soltar sobre texto'; $string['pluginnameadding'] = 'Añadiendo arrastrar y soltar sobre texto'; diff --git a/html/moodle2/langpacks/es/question.php b/html/moodle2/langpacks/es/question.php index 8e11f40ea3..f83a49d747 100644 --- a/html/moodle2/langpacks/es/question.php +++ b/html/moodle2/langpacks/es/question.php @@ -413,6 +413,7 @@ $string['submit'] = 'Enviar'; $string['submitandfinish'] = 'Enviar y terminar'; $string['submitted'] = 'Enviar: {$a}'; +$string['tagarea_question'] = 'Preguntas'; $string['technicalinfo'] = 'Información técnica'; $string['technicalinfo_help'] = 'Esta información técnica probablemente solo le sea útil a los desarrolladores que trabajan en nuevos tipos de preguntas. Tambén podría serle útil a quienes tratan de diagnosticar problemas con las preguntas.'; $string['technicalinfomaxfraction'] = 'Fracción máxima: {$a}'; diff --git a/html/moodle2/langpacks/es/quiz.php b/html/moodle2/langpacks/es/quiz.php index 64e51a2832..7d764fc6ab 100644 --- a/html/moodle2/langpacks/es/quiz.php +++ b/html/moodle2/langpacks/es/quiz.php @@ -330,11 +330,14 @@ $string['eventattemptreviewed'] = 'Intento del cuestionario revisado'; $string['eventattemptsummaryviewed'] = 'Resumen del intento de cuestionario visualizado'; $string['eventattemptviewed'] = 'Intento de cuestionario visualizado'; +$string['eventeditpageviewed'] = 'Página de edición del cuestionario visitada'; $string['eventoverridecreated'] = 'Anular cuestionario creado'; +$string['eventquestionmanuallygraded'] = 'Pregunta calificada manualmente'; $string['eventquizattemptabandoned'] = 'Intento abandonado'; $string['eventquizattemptstarted'] = 'Ha comenzado el intento'; $string['eventquizattemptsubmitted'] = 'Intento enviado'; $string['eventquizattempttimelimitexceeded'] = 'Limite de intentos excedido'; +$string['eventreportviewed'] = 'Informe de cuestionario visto'; $string['everynquestions'] = 'Cada {$a} preguntas'; $string['everyquestion'] = 'Cada pregunta'; $string['everythingon'] = 'Todo activado'; @@ -409,6 +412,7 @@

    La calificación final es la obtenida en el intento más reciente.'; $string['gradesdeleted'] = 'Eliminadas calificaciones del cuestionario'; $string['gradesofar'] = '{$a->method}: {$a->mygrade} / {$a->quizgrade}.'; +$string['gradetopassmustbeset'] = 'La nota para aprobar no puede ser cero, este cuestionario tiene como método establecido una calificación para aprobar. Por favor establezca un número que no sea cero.'; $string['gradingdetails'] = 'Puntos para este envío: {$a->raw}/{$a->max}.'; $string['gradingdetailsadjustment'] = 'Con las penalizaciones previas da como resultado @@ -467,6 +471,7 @@ $string['loadingquestionsfailed'] = 'Fallo en la carga de preguntas: {$a}'; $string['makecopy'] = 'Guardar como nueva pregunta'; $string['managetypes'] = 'Gestionar tipos de preguntas y servidores'; +$string['manualgradequestion'] = 'Pregunta calificada manualmente {$a->question} en {$a->quiz} por {$a->user}'; $string['manualgrading'] = 'Calificación'; $string['mark'] = 'Enviar'; $string['markall'] = 'Enviar página'; @@ -476,6 +481,7 @@ $string['matchanswer'] = 'Respuesta emparejada'; $string['matchanswerno'] = 'Respuesta emparejada {$a}'; $string['max'] = 'Máx'; +$string['maxmark'] = 'Nota máxima'; $string['messageprovider:attempt_overdue'] = 'Advertencia cuando su intento de resolver el cuestionario se retrase'; $string['messageprovider:confirmation'] = 'Confirmación de su envío del cuestionario'; $string['messageprovider:submission'] = 'Notificación del envío de cuestionarios'; @@ -653,6 +659,7 @@ $string['questionbehaviour'] = 'Comportamiento de las preguntas'; $string['questioncats'] = 'Categorías de pregunta'; $string['questiondeleted'] = 'Esta pregunta ha sido eliminada. Por favor, contacte con su profesor'; +$string['questiondependencyadd'] = 'Sin restricción cuando la pregunta {$a->thisq} se pueda intentar - Clic aquí para cambiarlo'; $string['questiondependencyfree'] = 'Sin restricciones para esta pregunta'; $string['questiondependencyremove'] = 'No se pueden realizar intentos en la pregunta {$a->thisq} hasta que se haya completado la pregunta {$a->previousq} anterior • Haga clic para cambiar'; $string['questiondependsonprevious'] = 'No se pueden realizar intentos en esta pregunta hasta que se haya completado la pregunta anterior.'; @@ -792,6 +799,7 @@ $string['reviewnever'] = 'No permitir revisión'; $string['reviewofattempt'] = 'Revisión del intento {$a}'; $string['reviewofpreview'] = 'Revisión de la vista previa'; +$string['reviewofquestion'] = 'Revisión de la pregunta {$a->question} en {$a->quiz} por {$a->user}'; $string['reviewopen'] = 'Más tarde, mientras el cuestionario está aún abierto'; $string['reviewoptions'] = 'Los estudiantes pueden revisar'; $string['reviewoptionsheading'] = 'Revisar opciones'; @@ -826,6 +834,7 @@ $string['savingnewmaximumgrade'] = 'Guardando la nueva calificación máxima'; $string['score'] = 'Puntuación bruta'; $string['scores'] = 'Puntuaciones -'; +$string['search:activity'] = 'Examen - información de actividad'; $string['sectionheadingedit'] = 'Editar cabecera \'{$a}\''; $string['sectionheadingremove'] = 'Borrar cabecera \'{$a}\''; $string['seequestions'] = '(Vea las preguntas)'; diff --git a/html/moodle2/langpacks/es/quiz_statistics.php b/html/moodle2/langpacks/es/quiz_statistics.php index a69201b4a8..9f51fdd1c0 100644 --- a/html/moodle2/langpacks/es/quiz_statistics.php +++ b/html/moodle2/langpacks/es/quiz_statistics.php @@ -41,7 +41,9 @@ $string['backtoquizreport'] = 'Volver a la página principal del informe de estadísticas.'; $string['calculatefrom'] = 'Calcular estadísticas de'; $string['cic'] = 'Coeficiente de consistentia interna (para {$a})'; +$string['completestatsfilename'] = 'completestats'; $string['count'] = 'Número'; +$string['counttryno'] = 'Recuento de intentos {$a}'; $string['coursename'] = 'Nombre del curso'; $string['detailedanalysis'] = 'Análisis más detallado de las respuestas a esta pregunta'; $string['discrimination_index'] = 'Índice de Discriminación'; @@ -68,7 +70,9 @@ $string['lastattempts'] = 'últimos intentos'; $string['lastattemptsavg'] = 'Calificación media de los últimos intentos'; $string['lastcalculated'] = 'Último cálculo realizado hace {$a->lastcalculated}. Se han realizado {$a->count} desde entonces.'; +$string['maximumfacility'] = 'Facilidad máxima'; $string['median'] = 'Calificación media (de {$a})'; +$string['minimumfacility'] = 'Facilidad mínima'; $string['modelresponse'] = 'Respuesta modelo'; $string['nameforvariant'] = 'Variante {$a->variant} de {$a->name}'; $string['negcovar'] = 'Covarianza negativa de la calificación con la calificación de los intentos totales'; @@ -82,6 +86,7 @@ $string['questionname'] = 'Nombre de la pregunta'; $string['questionnumber'] = 'Q#'; $string['questionstatistics'] = 'Estadísticas de la pregunta'; +$string['questionstatsfilename'] = 'questionstats'; $string['questiontype'] = 'Tipo de pregunta'; $string['quizinformation'] = 'Información sobre el cuestionario'; $string['quizname'] = 'Nombre del cuestionario'; diff --git a/html/moodle2/langpacks/es/report_backups.php b/html/moodle2/langpacks/es/report_backups.php index 4fe6d6d3d6..4314206ce2 100644 --- a/html/moodle2/langpacks/es/report_backups.php +++ b/html/moodle2/langpacks/es/report_backups.php @@ -25,4 +25,9 @@ defined('MOODLE_INTERNAL') || die(); +$string['backupofcourselogs'] = 'Copias de seguridad del log {$a}'; +$string['logsofbackupexecutedon'] = 'Logs de la copia de seguridad ejecutado {$a}'; +$string['nobackupsfound'] = 'No se ha encontrado copias de seguridad.'; $string['pluginname'] = 'Informe de copias de seguridad'; +$string['strftimetime'] = '%I:%M:%S %p'; +$string['viewlogs'] = 'Ver logs'; diff --git a/html/moodle2/langpacks/es/report_eventlist.php b/html/moodle2/langpacks/es/report_eventlist.php new file mode 100644 index 0000000000..e0c5cb58ff --- /dev/null +++ b/html/moodle2/langpacks/es/report_eventlist.php @@ -0,0 +1,61 @@ +. + +/** + * Strings for component 'report_eventlist', language 'es', branch 'MOODLE_31_STABLE' + * + * @package report_eventlist + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['abstractclass'] = 'Clase abstracta'; +$string['action'] = 'Acción'; +$string['affectedtable'] = 'Tabla afectada'; +$string['all'] = 'Todo'; +$string['clear'] = 'Limpio'; +$string['component'] = 'Componente'; +$string['create'] = 'crear'; +$string['crud'] = 'Tipo de consulta a la base de datos'; +$string['delete'] = 'borrar'; +$string['details'] = 'Detalles'; +$string['dname'] = 'Nombre'; +$string['edulevel'] = 'Nivel de educación'; +$string['errorinvaliddirectory'] = 'El directorio de eventos no existe o es inválido'; +$string['errorinvalidevent'] = 'El evento proporcionado no es un evento válido'; +$string['eventcode'] = 'Código del evento'; +$string['eventexplanation'] = 'Descripción del evento'; +$string['eventname'] = 'Nombre del evento'; +$string['filter'] = 'Filtro'; +$string['legacyevent'] = 'Evento heredado'; +$string['name'] = 'Nombre'; +$string['objecttable'] = 'Tabla de objeto'; +$string['other'] = 'Otro'; +$string['othereventparameters'] = 'Otros parámetros de eventos'; +$string['otherinformation'] = 'Otra información:'; +$string['parentevent'] = 'Evento padre'; +$string['participating'] = 'Participando'; +$string['pluginname'] = 'Listado de eventos'; +$string['read'] = 'leer'; +$string['relatedobservers'] = 'Extensiones observando este evento'; +$string['since'] = 'Desde'; +$string['teaching'] = 'Enseñando'; +$string['typedeclaration'] = 'Otros parámetros del evento'; +$string['update'] = 'actualizar'; +$string['yes'] = 'sí'; diff --git a/html/moodle2/langpacks/es/report_outline.php b/html/moodle2/langpacks/es/report_outline.php index 79e9d98fea..b57179154c 100644 --- a/html/moodle2/langpacks/es/report_outline.php +++ b/html/moodle2/langpacks/es/report_outline.php @@ -25,7 +25,9 @@ defined('MOODLE_INTERNAL') || die(); +$string['eventactivityreportviewed'] = 'Informe de actividad visto'; $string['neverseen'] = 'Nunca visto'; +$string['numviews'] = '{$a->numviews} por {$a->distinctusers} usuarios'; $string['outline:view'] = 'Ver informe de actividad del curso'; $string['page-report-outline-index'] = ''; $string['pluginname'] = 'Actividad del curso'; diff --git a/html/moodle2/langpacks/es/report_participation.php b/html/moodle2/langpacks/es/report_participation.php index 4fcd397d90..f8b72a62ee 100644 --- a/html/moodle2/langpacks/es/report_participation.php +++ b/html/moodle2/langpacks/es/report_participation.php @@ -25,6 +25,7 @@ defined('MOODLE_INTERNAL') || die(); +$string['eventreportviewed'] = 'Informe de participación visto'; $string['page-report-participation-index'] = 'Informe de participación en el curso'; $string['page-report-participation-x'] = 'Informe de participación en el curso'; $string['participation:view'] = 'Ver informe de participación en el curso'; diff --git a/html/moodle2/langpacks/es/report_questioninstances.php b/html/moodle2/langpacks/es/report_questioninstances.php index 95cdfded0a..c8f8c0b497 100644 --- a/html/moodle2/langpacks/es/report_questioninstances.php +++ b/html/moodle2/langpacks/es/report_questioninstances.php @@ -26,6 +26,7 @@ defined('MOODLE_INTERNAL') || die(); $string['editquestionshere'] = 'Editar preguntas en este contexto'; +$string['eventreportviewed'] = 'Informe visto'; $string['getreport'] = 'Obtener el informe'; $string['hiddenquestions'] = 'Ocultos'; $string['intro'] = 'Este informe presenta todos los contextos en el sitema donde hay preguntas de un tipo concreto.'; diff --git a/html/moodle2/langpacks/es/report_security.php b/html/moodle2/langpacks/es/report_security.php index 6703bfd307..d92b89ec8f 100644 --- a/html/moodle2/langpacks/es/report_security.php +++ b/html/moodle2/langpacks/es/report_security.php @@ -111,6 +111,9 @@ $string['check_unsecuredataroot_name'] = 'Directorio dataroot inseguro'; $string['check_unsecuredataroot_ok'] = 'El directorio de datos (normalmente /moodledata) no debe ser accesible desde la web'; $string['check_unsecuredataroot_warning'] = '!Su directorio dataroot {$a} ¡ está en el lugar equivocado y puede estar expuesto a la web!'; +$string['check_webcron_name'] = 'Cron web'; +$string['check_webcron_ok'] = 'Los usuarios anónimos no pueden acceder al cron.'; +$string['check_webcron_warning'] = 'Los usuarios anónimos pueden acceder al cron.'; $string['configuration'] = 'Configuración'; $string['description'] = 'Descripción'; $string['details'] = 'Detalles'; diff --git a/html/moodle2/langpacks/es/report_stats.php b/html/moodle2/langpacks/es/report_stats.php index 542369a092..e839cea7af 100644 --- a/html/moodle2/langpacks/es/report_stats.php +++ b/html/moodle2/langpacks/es/report_stats.php @@ -25,6 +25,9 @@ defined('MOODLE_INTERNAL') || die(); +$string['eventreportviewed'] = 'Informe de estadísticas visto'; +$string['eventuserreportviewed'] = 'Informe de estadísticas de usuarios visto'; +$string['nocapability'] = 'No se puede acceder al informe de estadísticas del usuario'; $string['page-report-stats-index'] = 'Informe de estadísticas del curso'; $string['page-report-stats-user'] = 'Informe de estadísticas del usuario'; $string['page-report-stats-x'] = 'Cualquier informe de estadísticas'; diff --git a/html/moodle2/langpacks/es/report_usersessions.php b/html/moodle2/langpacks/es/report_usersessions.php index 980835ebd1..3119baca0d 100644 --- a/html/moodle2/langpacks/es/report_usersessions.php +++ b/html/moodle2/langpacks/es/report_usersessions.php @@ -27,5 +27,6 @@ $string['mysessions'] = 'Mis sesiones activas'; $string['navigationlink'] = 'Sesiones del navegador'; +$string['pluginname'] = 'Informe de sesiones del usuario'; $string['thissession'] = 'Sesión actual'; $string['usersessions:manageownsessions'] = 'Gestionar mis sesiones del navegador'; diff --git a/html/moodle2/langpacks/es/repository_areafiles.php b/html/moodle2/langpacks/es/repository_areafiles.php index 8d4e776be8..fae6d68f99 100644 --- a/html/moodle2/langpacks/es/repository_areafiles.php +++ b/html/moodle2/langpacks/es/repository_areafiles.php @@ -28,3 +28,4 @@ $string['areafiles:view'] = 'Ver repositorio Archivos incrustados'; $string['configplugin'] = 'Configuración del repositorio Archivos incrustados'; $string['pluginname'] = 'Archivos incrustados'; +$string['pluginname_help'] = 'Ficheros adjuntos en el editor de texto actual'; diff --git a/html/moodle2/langpacks/es/repository_boxnet.php b/html/moodle2/langpacks/es/repository_boxnet.php index 1109b80605..0c76588df8 100644 --- a/html/moodle2/langpacks/es/repository_boxnet.php +++ b/html/moodle2/langpacks/es/repository_boxnet.php @@ -27,6 +27,8 @@ $string['apikey'] = 'Clave de API'; $string['boxnet:view'] = 'Mostrar el repositorio Box.net'; +$string['clientid'] = 'ID del cliente'; +$string['clientsecret'] = 'Clave secreta del cliente'; $string['configplugin'] = 'Configuración de Box.net'; $string['information'] = 'Obtener una clave de API desde la página de desarrolladores Box.net para su sitio Moodle.'; $string['invalidpassword'] = 'Contraseña incorrecta'; diff --git a/html/moodle2/langpacks/es/resource.php b/html/moodle2/langpacks/es/resource.php index 6109523c37..4fe6223cca 100644 --- a/html/moodle2/langpacks/es/resource.php +++ b/html/moodle2/langpacks/es/resource.php @@ -90,7 +90,10 @@ $string['printintroexplain'] = '¿Mostrar la descripción del recurso debajo del contenido? Algunos tipos de visualización pueden no mostrar la descripción incluso aunque esté activada esa opción.'; $string['resource:addinstance'] = 'Añadir un nuevo recurso'; $string['resourcecontent'] = 'Archivos y subcarpetas'; +$string['resourcedetails_sizedate'] = '{$a->size} {$a->date}'; $string['resourcedetails_sizetype'] = '{$a->size} {$a->type}'; +$string['resourcedetails_sizetypedate'] = '{$a->size} {$a->type} {$a->date}'; +$string['resourcedetails_typedate'] = '{$a->type} {$a->date}'; $string['resource:exportresource'] = 'Exportar recurso'; $string['resource:view'] = 'Ver recurso'; $string['search:activity'] = 'Archivo'; @@ -107,3 +110,4 @@ Si hay varios archivos en el recurso, se muestra el tipo del archivo inicial. Si el tipo de archivo es desconocido para el sistema, no se muestra.'; +$string['uploadeddate'] = 'Subido {$a}'; diff --git a/html/moodle2/langpacks/es/scorm.php b/html/moodle2/langpacks/es/scorm.php index 51d5032350..8e5bb9c87e 100644 --- a/html/moodle2/langpacks/es/scorm.php +++ b/html/moodle2/langpacks/es/scorm.php @@ -213,6 +213,7 @@ $string['lastattemptlockdesc'] = 'Esta preferencia fija el valor por defecto para el bloqueo después de ajustar el intento final'; $string['lastattemptlock_help'] = 'Si se activa, al estudiante se le impide el lanzamiento del reproductor SCORM después de haber utilizado todos los intentos que tenía asignados.'; $string['location'] = 'Mostrar la barra de ubicación'; +$string['masteryoverridedesc'] = 'Esta preferencia establece el valor por defecto de la nota mínima para aprobar sobrescribiendo el valor establecido.'; $string['max'] = 'Calificación máxima'; $string['maximumattempts'] = 'Número de intentos'; $string['maximumattemptsdesc'] = 'Esta preferencia fija el valor por defecto sobre el número máximo de intentos en una actividad'; @@ -352,6 +353,7 @@ $string['scorm:viewreport'] = 'Ver informes'; $string['scorm:viewscores'] = 'Ver puntuaciones'; $string['scrollbars'] = 'Permitir desplazamiento de la ventana'; +$string['search:activity'] = 'Paquete SCORM - información de actividad'; $string['selectall'] = 'Seleccionar todo'; $string['selectnone'] = 'Deseleccionar todo'; $string['show'] = 'Mostrar'; @@ -381,6 +383,7 @@ $string['trackcorrectcount'] = 'Conteo correcto'; $string['trackcorrectcount_help'] = 'Número de resultados correctos para la pregunta'; $string['trackid'] = 'ID'; +$string['trackid_help'] = 'Este es el identificador establecido por tu paquete SCORM para esta pregunta,'; $string['trackingloose'] = 'ATENCIÓN: ¡Los datos de rastreo de este paquete se perderán!'; $string['tracklatency'] = 'Latencia'; $string['tracklatency_help'] = 'Tiempo transucrrido entre el momento en que la se puso a disposición del alumno la interacción para respoder y el momento de la primera respuesta'; @@ -399,6 +402,7 @@ $string['tracktime'] = 'Hora'; $string['tracktime_help'] = 'Hora en la que se inició el intento'; $string['tracktype'] = 'Tipo'; +$string['tracktype_help'] = 'El tipo de pregunta, por ejemplo "selección" o "respuesta corta".'; $string['trackweight'] = 'Peso'; $string['trackweight_help'] = 'Peso asigando al elemento'; $string['type'] = 'Tipo'; @@ -410,6 +414,7 @@ $string['unziperror'] = 'Ha ocurrido un error durante la descompresión del paquete'; $string['updatefreq'] = 'Actualizar frecuencia automáticamente'; $string['updatefreqdesc'] = 'Esta preferencia fija el valor por defecto sobre la frecuencia de actualización automática de una actividad'; +$string['updatefreq_error'] = 'La frecuencia de auto-actualización únicamente puede ser establecida si el paquete está hospedado externamente'; $string['updatefreq_help'] = 'Esto permite descargar y actualizar automáticamente el paquete externo'; $string['validateascorm'] = 'Validar un paquete SCORM'; $string['validation'] = 'Resultado de la validación'; diff --git a/html/moodle2/langpacks/es/survey.php b/html/moodle2/langpacks/es/survey.php index 27324db79b..a4087d7835 100644 --- a/html/moodle2/langpacks/es/survey.php +++ b/html/moodle2/langpacks/es/survey.php @@ -200,6 +200,10 @@ $string['downloadresults'] = 'Descargar resultados'; $string['downloadtext'] = 'Descargar como texto'; $string['editingasurvey'] = 'Editando encuesta'; +$string['errorunabletosavenotes'] = 'Ha ocurrido un error mientras se guardaban tus notas.'; +$string['eventreportdownloaded'] = 'Informe de encuesta descargado'; +$string['eventreportviewed'] = 'Informe de encuesta visto'; +$string['eventresponsesubmitted'] = 'Respuesta a la encuesta enviada'; $string['guestsnotallowed'] = 'Los invitados no pueden participar en las encuestas'; $string['howlong'] = '¿Cuánto tiempo le llevó completar esta encuesta?'; $string['howlongoptions'] = 'menos de 1 min., 1-2 min., 2-3 min., 3-4 min., 4-5 min., 5-10 min., más de 10 minutos.'; @@ -237,11 +241,13 @@ $string['scaleagree5'] = 'en total desacuerdo, un poco en desacuerdo, ni de acuerdo ni en desacuerdo, un poco de acuerdo, totalmente de acuerdo'; $string['scales'] = 'Escalas'; $string['scaletimes5'] = 'Casi nunca, Rara vez, Alguna vez, A menudo, Casi siempre'; +$string['search:activity'] = 'Encuesta - información de actividad'; $string['seemoredetail'] = 'Haga clic aquí para ver más detalles'; $string['selectedquestions'] = 'Preguntas seleccionadas de una escala, todos los estudiantes'; $string['summary'] = 'Resumen'; $string['survey:addinstance'] = 'Añadir una nueva encuesta'; $string['surveycompleted'] = 'Usted ha completado esta encuesta. La gráfica inferior le muestra sus resultados comparados con el promedio de la clase.'; +$string['surveycompletednograph'] = 'Has completado esta encuesta.'; $string['survey:download'] = 'Descargar respuestas'; $string['surveygraph'] = 'Gráfico de la encuesta'; $string['surveyname'] = 'Nombre de la encuesta'; diff --git a/html/moodle2/langpacks/es/theme_more.php b/html/moodle2/langpacks/es/theme_more.php index e5caaf726a..94aefafaca 100644 --- a/html/moodle2/langpacks/es/theme_more.php +++ b/html/moodle2/langpacks/es/theme_more.php @@ -68,5 +68,6 @@ $string['region-side-pre'] = 'Izquierda'; $string['secondarybackground'] = 'Color secundario de fondo de página'; $string['secondarybackground_desc'] = 'El color de fondo de cualquier contenido secundario, tal como los bloques.'; +$string['smalllogo'] = 'Logo pequeño'; $string['textcolor'] = 'Color del texto'; $string['textcolor_desc'] = 'Color del texto'; diff --git a/html/moodle2/langpacks/es/tool_capability.php b/html/moodle2/langpacks/es/tool_capability.php index e916c3f382..a3a55b7466 100644 --- a/html/moodle2/langpacks/es/tool_capability.php +++ b/html/moodle2/langpacks/es/tool_capability.php @@ -29,6 +29,7 @@ $string['capabilityreport'] = 'Visión general de la capacidad'; $string['changeoverrides'] = 'Cambiar anulaciones en este contexto'; $string['changeroles'] = 'Cambiar definiciones de rol'; +$string['eventreportviewed'] = 'Informe visto'; $string['forroles'] = 'Para los roles {$a}'; $string['getreport'] = 'Obtener el informe'; $string['intro'] = 'Este informe muestra para cada permiso concreto qué acción se permite realizar a cada rol (o grupo de roles), y dónde se ha sobreescrito el permiso.'; diff --git a/html/moodle2/langpacks/es/tool_cohortroles.php b/html/moodle2/langpacks/es/tool_cohortroles.php new file mode 100644 index 0000000000..bec593d123 --- /dev/null +++ b/html/moodle2/langpacks/es/tool_cohortroles.php @@ -0,0 +1,29 @@ +. + +/** + * Strings for component 'tool_cohortroles', language 'es', branch 'MOODLE_31_STABLE' + * + * @package tool_cohortroles + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['assign'] = 'Tarea'; +$string['selectrole'] = 'Seleccionar rol'; diff --git a/html/moodle2/langpacks/es/tool_filetypes.php b/html/moodle2/langpacks/es/tool_filetypes.php index 4710cd919c..d075aa6723 100644 --- a/html/moodle2/langpacks/es/tool_filetypes.php +++ b/html/moodle2/langpacks/es/tool_filetypes.php @@ -27,6 +27,10 @@ $string['corestring'] = 'Cadena de idioma alternativa'; $string['corestring_help'] = 'Esta configuración puede ser utilizada para seleccionar una cadena de idioma diferente desde el fichero idioma principal mimetypes.php. Generalmente debe ser dejado en blanco. Para tipos personalizados, utilice el campo descripción.'; +$string['deletea'] = 'Borrar {$a}'; +$string['description'] = 'Descripción personalizada'; +$string['descriptiontype'] = 'Tipo de descripción'; +$string['descriptiontype_custom'] = 'Descripción personalizada especificada en este formulario'; $string['descriptiontype_default'] = 'Por defecto (tipo MIME o la cadena de idioma correspondiente si está disponible)'; $string['descriptiontype_help'] = 'Existen tres formas posibles de indicar una descripción. @@ -34,12 +38,22 @@ * Puedes especificar una descripción personalizada en este formulario. * Puedes especificar el nombre de una cadena de idioma en mimetypes.php para ser utilizada en vez del tipo MIME.'; $string['descriptiontype_lang'] = 'Cadena de idioma alternativa (desde mimetypes.php)'; +$string['displaydescription'] = 'Descripción'; +$string['editfiletypes'] = 'Editar un tipo de fichero existente'; +$string['emptylist'] = 'No hay tipos de ficheros definidos'; +$string['error_extension'] = 'La extensión del fichero {$a} ya existe o es inválida. Las extensiones de ficheros deben ser únicas y no deben contener caracteres especiales.'; $string['error_notfound'] = 'El tipo de fichero con extensión {$a} no puede ser hallado.'; $string['extension'] = 'Extensión'; +$string['extension_help'] = 'Nombre de la extensión del fichero sin el punto, e.g. ‘mobi’'; +$string['groups'] = 'Tipos de grupos'; +$string['icon'] = 'Archivo de icono'; $string['mimetype'] = 'tipo MIME'; $string['pluginname'] = 'Tipos de fichero'; +$string['revert'] = 'Restaurar {$a} a los ajustes por defecto de Moodle'; +$string['revert_confirmation'] = '¿Está seguro de que quiere restaurar .{$a} a los ajustes por defecto de Moodle, descartando sus cambios?'; $string['revertfiletype'] = 'Restaura un tipo de fichero'; $string['source'] = 'Tipo'; +$string['source_custom'] = 'Personalizado'; $string['source_deleted'] = 'Borrado'; $string['source_modified'] = 'Modificado'; $string['source_standard'] = 'Estándar'; diff --git a/html/moodle2/langpacks/es/tool_generator.php b/html/moodle2/langpacks/es/tool_generator.php index 81c61dbf1b..189a3ddfa7 100644 --- a/html/moodle2/langpacks/es/tool_generator.php +++ b/html/moodle2/langpacks/es/tool_generator.php @@ -26,5 +26,44 @@ defined('MOODLE_INTERNAL') || die(); $string['bigfile'] = 'Fichero grande {$a}'; +$string['coursesize_0'] = 'XS (~10KB; creado en ~1 segundo)'; +$string['coursesize_1'] = 'S (~10MB; creado en ~30 segundos)'; +$string['coursewithoutusers'] = 'El curso seleccionado no tiene usuarios'; +$string['createcourse'] = 'Crear curso'; +$string['creating'] = 'Creando curso'; +$string['done'] = 'hecho ({$a}s)'; +$string['downloadusersfile'] = 'Descargar fichero de usuarios'; $string['error_noforumdiscussions'] = 'El curso seleccionado no contiene foros de discusión'; +$string['error_noforuminstances'] = 'El curso seleccionado no contiene instancias de foros'; +$string['error_noforumreplies'] = 'El curso seleccionado no contiene respuestas al foro'; +$string['error_nonexistingcourse'] = 'El curso especificado no existe'; +$string['error_nopageinstances'] = 'El curso seleccionado no contiene instancias de página'; +$string['error_notdebugging'] = 'No disponible en este servidor porque la depuración no está configurada a DESARROLLADOR'; +$string['fullname'] = 'Curso de test: {$a->size}'; +$string['notenoughusers'] = 'El curso seleccionado no tiene suficientes usuarios'; $string['pluginname'] = 'Generador de cursos aleatorio'; +$string['progress_checkaccounts'] = 'Comprobando cuentas de usuario ({$a})'; +$string['progress_coursecompleted'] = 'Curso completado ({$a}s)'; +$string['progress_createaccounts'] = 'Creando cuenta de usuarios ({$a->from} - {$a->to})'; +$string['progress_createassignments'] = 'Creando tareas ({$a})'; +$string['progress_createbigfiles'] = 'Creando ficheros grandes ({$a})'; +$string['progress_createcourse'] = 'Creando curso {$a}'; +$string['progress_createforum'] = 'Creando foro ({$a} posts)'; +$string['progress_createpages'] = 'Creando páginas ({$a})'; +$string['progress_createsmallfiles'] = 'Creando archivos pequeños ({$a})'; +$string['progress_enrol'] = 'Matriculando usuarios en el curso ({$a})'; +$string['progress_sitecompleted'] = 'Sitio completado ({$a}s)'; +$string['shortsize_0'] = 'XS'; +$string['shortsize_1'] = 'S'; +$string['shortsize_2'] = 'M'; +$string['shortsize_3'] = 'L'; +$string['shortsize_4'] = 'L'; +$string['shortsize_5'] = 'XXL'; +$string['sitesize_0'] = 'XS (~10MB; 3 cursos, creados en ~30 segundos)'; +$string['sitesize_1'] = 'S (~50MB; 8 cursos, creados en ~2 minutos)'; +$string['sitesize_2'] = 'M (~200MB; 73 cursos, creados en ~10 minutos)'; +$string['sitesize_3'] = 'L (~1\'5GB; 277 cursos, creados en ~1\'5 horas)'; +$string['sitesize_4'] = 'XL (~10GB; 1065 cursos, creados en ~5 horas)'; +$string['sitesize_5'] = 'XXL (~20GB; 4177 cursos, creados en ~10 horas)'; +$string['size'] = 'Tamaño del curso'; +$string['smallfiles'] = 'Ficheros pequeños'; diff --git a/html/moodle2/langpacks/es/tool_replace.php b/html/moodle2/langpacks/es/tool_replace.php index f726fc74dd..51e40929b3 100644 --- a/html/moodle2/langpacks/es/tool_replace.php +++ b/html/moodle2/langpacks/es/tool_replace.php @@ -25,5 +25,13 @@ defined('MOODLE_INTERNAL') || die(); +$string['disclaimer'] = 'Entiendo los riesgos de esta operación'; +$string['doit'] = '¡Sí, hazlo!'; +$string['invalidcharacter'] = 'Se encontraron caracteres no válidos en el texto de búsqueda o reemplazo.'; $string['notifyfinished'] = '...finalizado'; +$string['notifyrebuilding'] = 'Reconstruyendo la caché del curso...'; +$string['notimplemented'] = 'Lo sentimos, esta característica no está implementada en el controlador de tu base de datos.'; +$string['pageheader'] = 'Buscar y reemplazar texto en toda la base de datos'; $string['pluginname'] = 'Búsqueda y sustitución en Base de Datos'; +$string['replacewith'] = 'Reemplazar con esta cadena de texto'; +$string['searchwholedb'] = 'Buscar en toda la base de datos'; diff --git a/html/moodle2/langpacks/es/tool_spamcleaner.php b/html/moodle2/langpacks/es/tool_spamcleaner.php index d3dfc95ad4..5c431b7531 100644 --- a/html/moodle2/langpacks/es/tool_spamcleaner.php +++ b/html/moodle2/langpacks/es/tool_spamcleaner.php @@ -37,6 +37,7 @@ $string['spameg'] = 'e.g., casino, porno, xxx'; $string['spamfromblog'] = 'Del mensaje del blog:'; $string['spaminvalidresult'] = 'Resultado desconocido pero no válido'; +$string['spamkeyword'] = 'Palabra clave'; $string['spamoperation'] = 'Operación'; $string['spamresult'] = 'Resultado de la búsqueda de perfiles del usuario que contienen:'; $string['spamsearch'] = 'Buscar por estas palabras clave'; diff --git a/html/moodle2/langpacks/es/tool_task.php b/html/moodle2/langpacks/es/tool_task.php new file mode 100644 index 0000000000..992f888ad5 --- /dev/null +++ b/html/moodle2/langpacks/es/tool_task.php @@ -0,0 +1,47 @@ +. + +/** + * Strings for component 'tool_task', language 'es', branch 'MOODLE_31_STABLE' + * + * @package tool_task + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['asap'] = 'Tan pronto como sea posible'; +$string['blocking'] = 'Bloqueando'; +$string['component'] = 'Componente'; +$string['corecomponent'] = 'Núcleo'; +$string['default'] = 'Por defecto'; +$string['disabled'] = 'Deshabilitado'; +$string['edittaskschedule'] = 'Editar tarea programada: {$a}'; +$string['faildelay'] = 'Retardo del fallo'; +$string['lastruntime'] = 'Último arranque'; +$string['nextruntime'] = 'Siguiente arranque'; +$string['plugindisabled'] = 'Plugin deshabilitado'; +$string['pluginname'] = 'Configuración de la tarea programada'; +$string['resettasktodefaults'] = 'Restablecer la configuración de la tarea programada a por defecto'; +$string['scheduledtasks'] = 'Tareas programadas'; +$string['taskdisabled'] = 'Tareas deshabilitadas'; +$string['taskscheduleday'] = 'Día'; +$string['taskscheduledayofweek'] = 'Día de la semana'; +$string['taskschedulehour'] = 'Hora'; +$string['taskscheduleminute'] = 'Minuto'; +$string['taskschedulemonth'] = 'Mes'; diff --git a/html/moodle2/langpacks/es/tool_uploaduser.php b/html/moodle2/langpacks/es/tool_uploaduser.php index 1c592e3810..475e9cbf9b 100644 --- a/html/moodle2/langpacks/es/tool_uploaduser.php +++ b/html/moodle2/langpacks/es/tool_uploaduser.php @@ -28,16 +28,19 @@ $string['allowdeletes'] = 'Permitir eliminar'; $string['allowrenames'] = 'Permitir renombrar'; $string['allowsuspends'] = 'Permitir suspensión y activación de cuentas'; +$string['assignedsysrole'] = 'Sistema asignado en el sistema {$a}'; $string['csvdelimiter'] = 'Delimitador CSV'; $string['defaultvalues'] = 'Valores por defecto'; $string['deleteerrors'] = 'Eliminar errores'; $string['encoding'] = 'Codificación'; +$string['errormnetadd'] = 'No se puede añadir usuarios externos'; $string['errors'] = 'Errores'; $string['nochanges'] = 'Sin cambios'; $string['pluginname'] = 'Subida de usuario'; $string['renameerrors'] = 'Errores de renombrado'; $string['requiredtemplate'] = 'Exigido. Puede utilizar sintaxis de plantilla aquí (%l = lastname, %f = firstname, %u = username). Consulte la ayuda para ver detalles y ejemplos.'; $string['rowpreviewnum'] = 'Previsualizar filas'; +$string['unassignedsysrole'] = 'Quitado rol en el sistema {$a}'; $string['uploadpicture_baduserfield'] = 'El atributo de usuario especificado no es válido. Por favor, inténtelo de nuevo.'; $string['uploadpicture_cannotmovezip'] = 'No se puede mover el archivo zip a un directorio temporal.'; $string['uploadpicture_cannotprocessdir'] = 'No se pueden procesar ficheros descomprimidos.'; @@ -61,6 +64,7 @@ * Los nombres de campo necesarios son username, password, firstname, lastname, email'; $string['uploaduserspreview'] = 'Previsualizar subida de usuarios'; $string['uploadusersresult'] = 'Resultados de subida de usuarios'; +$string['uploaduser:uploaduserpictures'] = 'Subir foto del usuario'; $string['useraccountupdated'] = 'Usuario actualizado'; $string['useraccountuptodate'] = 'Usuario hasta hoy'; $string['userdeleted'] = 'Usuario eliminado'; diff --git a/html/moodle2/langpacks/es/tool_xmldb.php b/html/moodle2/langpacks/es/tool_xmldb.php index 7fa9e8018c..0bf5f8612b 100644 --- a/html/moodle2/langpacks/es/tool_xmldb.php +++ b/html/moodle2/langpacks/es/tool_xmldb.php @@ -40,6 +40,8 @@ $string['check_foreign_keys'] = 'Buscar violaciones de la clave externa'; $string['checkindexes'] = 'Comprobar índices'; $string['check_indexes'] = 'Buscar índices BD ausentes'; +$string['checkoraclesemantics'] = 'Comprobar la semántica'; +$string['check_oracle_semantics'] = 'Buscar longitud de semántica incorrecta'; $string['completelogbelow'] = '(ver abajo el registro completo de la búsqueda)'; $string['confirmcheckbigints'] = 'Esta funcionalidad buscará potential wrong integer fields en su servidor Moodle, generando (¡pero no ejecutando!) automáticamente las acciones SQL necesarias para tener todos los enteros de su base de datos adecuadamente definidos.

    Una vez generados, puede copiarlas y ejecutarlas con seguridad en su interfaz SQL preferida (no olvide hacer una copia de seguridad de sus datos antes de hacerlo).

    Se recomienda ejecutar la última (+) versión de Moodle disponible (1.8, 1.9, 2.x ...) antes de llevar a cabo la búsqueda de enteros erróneos.

    Esta funcionalidad no ejecuta ninguna acción contra la BD (únicamente la lee), de modo que puede ser realizada con seguridad en cualquier momento.'; @@ -70,7 +72,10 @@ $string['down'] = 'Abajo'; $string['duplicate'] = 'Duplicar'; $string['duplicatefieldname'] = 'Ya existe otro campo con ese nombre'; +$string['duplicatefieldsused'] = 'Duplicar campos usados'; +$string['duplicateindexname'] = 'Duplicar nombre del índice'; $string['duplicatekeyname'] = 'Ya existe otra clave con ese nombre'; +$string['duplicatetablename'] = 'Existe otra tabla con ese nombre'; $string['edit'] = 'Edición'; $string['edit_field'] = 'Editar campo'; $string['edit_field_save'] = 'Guardar campo'; @@ -88,7 +93,9 @@ $string['fieldnameempty'] = 'Nombre del campo vacío'; $string['fields'] = 'Campos'; $string['fieldsnotintable'] = 'El campo no existe en la tabla'; +$string['fieldsusedinindex'] = 'Este campo es usado como índice'; $string['fieldsusedinkey'] = 'Este campo se usa como clave.'; +$string['filemodifiedoutfromeditor'] = 'Atención: El archivo se ha modificado localmente usando el editor de XMLDB. Guardar sobrescribirá los cambios locales.'; $string['filenotwriteable'] = 'Archivo no escribible'; $string['fkviolationdetails'] = 'La clave externa {$a->keyname} en la tabla {$a->tablename} es violada por {$a->numviolations} de un total de {$a->numrows} filas.'; $string['float2numbernote'] = 'Aviso: A pesar de que los campos "float" tienen apoyo 100% de XMLDB, se recomienda migrar a "número" de campos en su lugar.'; @@ -98,10 +105,15 @@ $string['generate_documentation'] = 'Documentación'; $string['gotolastused'] = 'Ir al último archivo usado'; $string['incorrectfieldname'] = 'Nombre incorrecto'; +$string['incorrectindexname'] = 'Nombre de índice incorrecto'; +$string['incorrectkeyname'] = 'Nombre incorrecto de clave'; +$string['incorrecttablename'] = 'Nombre incorrecto de tabla'; $string['index'] = 'Índice'; $string['indexes'] = 'Índices'; +$string['indexnameempty'] = 'El nombre del índice está vacío'; $string['integerincorrectlength'] = 'Longitud incorrecta del campo integer'; $string['key'] = 'Clave'; +$string['keynameempty'] = 'El nombre de la clave no puede estar vacío'; $string['keys'] = 'Claves'; $string['listreservedwords'] = 'Lista de palabras reservadas
    (se utiliza para mantener XMLDB_reserved_words actualizado)'; $string['load'] = 'Cargar'; @@ -172,6 +184,7 @@ $string['wrongints'] = 'Se han encontrado enteros erróneos'; $string['wronglengthforenum'] = 'Longitud incorrecta del campo enum'; $string['wrongnumberofreffields'] = 'Número incorrecto de campos de referencia'; +$string['wrongoraclesemantics'] = 'Se ha encontrado semántica incorrecta de Oracle BYTE'; $string['wrongreservedwords'] = 'Palabras reservadas en uso
    (note que los nombres de la tabla no son importantes si se usa $CFG->prefix)'; $string['yesmissingindexesfound'] = 'En su BD se han encontrado algunos índices ausentes. Aquí puede ver los detalles, así como los comandos SQL a ejecutar con su interfaz SQL favorita para crearlos.

    Una vez que lo haya hecho, es muy recomendable que ejecute de nuevo esta utilidad para comprobar que no se encuentran más índices ausentes.'; $string['yeswrongdefaultsfound'] = 'En su base de datos se han encontrado algunos valores por defecto inconsistentes. Aquí se presentan los detalles y las acciones SQL que deben ejecutarse en su interfaz SQL favorita para crearlos (no olvide hacer una copia de seguridad de sus datos).

    Una vez realizado, se recomienda ejecutar de nuevo esta utilidad para comprobar que no se encuentran más valores por defecto inconsistentes.'; diff --git a/html/moodle2/langpacks/es/workshopform_accumulative.php b/html/moodle2/langpacks/es/workshopform_accumulative.php index d53271ff36..5b92a8fb43 100644 --- a/html/moodle2/langpacks/es/workshopform_accumulative.php +++ b/html/moodle2/langpacks/es/workshopform_accumulative.php @@ -29,8 +29,10 @@ $string['addmoredimensions'] = 'Espacios en blanco para {$a} aspectos más'; $string['correct'] = 'Correcto'; $string['dimensioncomment'] = 'Comentario'; +$string['dimensioncommentfor'] = 'Comentario para {$a}'; $string['dimensiondescription'] = 'Descripción'; $string['dimensiongrade'] = 'Calificación'; +$string['dimensiongradefor'] = 'Calificación para {$a}'; $string['dimensionmaxgrade'] = 'Mejor calificación posible / Escala a utilizar'; $string['dimensionnumber'] = 'Aspecto {$a}'; $string['dimensionweight'] = 'Ponderación'; diff --git a/html/moodle2/langpacks/es/workshopform_comments.php b/html/moodle2/langpacks/es/workshopform_comments.php index 3e25ed7fcd..94f19a439f 100644 --- a/html/moodle2/langpacks/es/workshopform_comments.php +++ b/html/moodle2/langpacks/es/workshopform_comments.php @@ -27,6 +27,7 @@ $string['addmoredimensions'] = 'Espacios en blanco para {$a} aspectos más'; $string['dimensioncomment'] = 'Comentario'; +$string['dimensioncommentfor'] = 'Comentario para {$a}'; $string['dimensiondescription'] = 'Descripción'; $string['dimensionnumber'] = 'Aspecto {$a}'; $string['pluginname'] = 'Comentarios'; diff --git a/html/moodle2/langpacks/es/workshopform_numerrors.php b/html/moodle2/langpacks/es/workshopform_numerrors.php index 2c6509e775..72de417a18 100644 --- a/html/moodle2/langpacks/es/workshopform_numerrors.php +++ b/html/moodle2/langpacks/es/workshopform_numerrors.php @@ -29,6 +29,7 @@ $string['configgrade0'] = 'Palabra por defecto que describe la evaluación negativa de una afirmación.'; $string['configgrade1'] = 'Palabra por defecto que describe la evaluación positiva de una afirmación.'; $string['dimensioncomment'] = 'Comentario'; +$string['dimensioncommentfor'] = 'Comentario para {$a}'; $string['dimensiondescription'] = 'Descripción'; $string['dimensiongrade'] = 'Calificación'; $string['dimensionnumber'] = 'Afirmación {$a}'; diff --git a/html/moodle2/langpacks/eu/admin.php b/html/moodle2/langpacks/eu/admin.php index 07cedd713c..5b8c095dc3 100644 --- a/html/moodle2/langpacks/eu/admin.php +++ b/html/moodle2/langpacks/eu/admin.php @@ -29,7 +29,8 @@ $string['accounts'] = 'Kontuak'; $string['addcategory'] = 'Gehitu kategoria'; $string['additionalhtml'] = 'HTML osagarria'; -$string['additionalhtmlfooter'] = 'GORPUTZA itxi baino lehen'; +$string['additionalhtml_desc'] = 'Ezarpen hauek nahi dituzun orri guztietan HTML kodea zehazteko modua emango dizute. Orriaren HEAD etiketaren barruan gehituko den HTMLa ezarri ahal duzu, BODY etiketa zabaldutakoan edo BODY etiketa itxitakoan.
    Hau egiteak orri bakoitzean goiburu edo orripeko pertsonalizatuak gehitzeko modua eskaintzen dizu, edo, aukeratutako itxura gorabehera, Google Analytics bezalako zerbitzuetarako euskarria gehitzeko oso modu errazean.'; +$string['additionalhtmlfooter'] = 'BODY itxi baino lehen'; $string['additionalhtmlfooter_desc'] = 'Edukia orri bakoitzean gehituko da BODY etiketa itxi baino lehen.'; $string['additionalhtmlhead'] = 'Goiburuaren barruan'; $string['additionalhtmlhead_desc'] = 'Edukia orri bakoitzean gehituko da HEAD etiketaren amaieran.'; @@ -92,12 +93,15 @@ $string['cachejs'] = 'Javascript-en cachea'; $string['cachejs_help'] = 'Cache-an gordetzeak eta Javascript bihurtzeak orria kargatzea izugarri hobetzen dute. Hau gomendagarria da lanean ari diren guneentzat. Garatzaileek ezarpen hau desgaitu nahiko dute, ziurrenik.'; $string['cacherequest'] = 'Eskatu cachea'; +$string['cacherequesthelp'] = 'Erabiltzaile-cache espezifikoa, eskaria osatzen denean iraungitzen dena. Biltegiratze estatikoa erabiltzen ari garenean eremuak ordezkatzeko diseinatua.'; $string['cachesession'] = 'Saio-cachea'; +$string['cachesessionhelp'] = 'Erabiltzaile-cache espezifikoa, erabiltzailearen saioa amaitzen denean iraungitzen dena. Saioaren gainkarga arintzeko diseinatua.'; $string['cachesettings'] = 'Cachearen ezarpenak'; $string['caching'] = 'Cachean gordetzea'; $string['calendarexportsalt'] = 'Egutegia esportatzeko eraldaketa'; $string['calendarsettings'] = 'Egutegia'; $string['calendartype'] = 'Egutegi-mota'; +$string['calendartype_desc'] = 'Aukera ezazu berezko egutegi-mota bat gune osorako. Ezarpen honek salbuespenak izan ditzake ikastaroaren ezarpenen bidez edo erabiltzaileek beren profiletan zehaztutakoaren bidez.'; $string['calendar_weekend'] = 'Asteburuko egunak'; $string['cannotdeletemodfilter'] = 'Ezin duzu \'{$a->filter}\' desinstalatu \'{$a->module}\' moduluaren zati bat baita.'; $string['cannotuninstall'] = '{$a} ezin da desinstalatu.'; @@ -181,6 +185,7 @@ $string['configeditordictionary'] = 'Balore hau erabiliko da zuzentzaile ortografikoak erabiltzaileen hizkuntzako hiztegia ez baldin badu.'; $string['configeditorfontlist'] = 'Editoreari ateratzen zaion menuaren zerrendan agertuko diren letra-motak aukeratu.'; $string['configemailchangeconfirmation'] = 'Erabiltzaileek profiletan posta elektronikoaren helbidea aldatzen dutenean, beharrezko da baieztatzea.'; +$string['configenableblogs'] = 'Ezarpen honek guneko erabiltzaile guztiei bloga izateko modua ematen die.'; $string['configenablecalendarexport'] = 'Gaitu egutegiak esportatzea eta harpidetzea.'; $string['configenablecomments'] = 'Iruzkinak gaitu'; $string['configenablecourserequests'] = 'Edozein erabiltzailek ikastaro bat sortzeko eska dezala ahalbidetzen du.'; @@ -233,6 +238,7 @@ $string['configmaxconsecutiveidentchars'] = 'Pasahitzak ezin ditu jarrian zenbaki honek adierazten duen kopurua baino karaktere berdin gehiago izan. Erabili 0 hau ekiditeko.'; $string['configmaxeditingtime'] = 'Aukera honek zehazten du erabiltzaileen epea foroetara bidalitako mezuak editatzeko, egunkariaren feed-backa, etab. Normalean 30 minutu epe egokia izaten da.'; $string['configmaxevents'] = 'Aurreikusitako ekitaldiak'; +$string['configmaxusersperpage'] = 'Guneko hasiera-orrian erabiltzaile-hautatzailean erakutsiko den gehieneko erabiltzaile-kopura ikastaroetan, kohorteetan, web-zerbitzuetan eta abarrean.'; $string['configmessaging'] = 'Guneko erabiltzaileen arteko mezularitza-sistema indarrean jarri nahi al duzu?'; $string['configmessagingdeletereadnotificationsdelay'] = 'Irakurritako jakinarazpenak ezaba daitezke espazioa aurrezteko. Irakurri ondoren, zenbat denbora pasatu behar da ezabatzeko?'; $string['configmessaginghidereadnotifications'] = 'Mezuen historia ikusten ari zarenean, ezkutatu irakurritako jakinarazpenak, foroetako ekarpenak, adibidez.'; @@ -552,6 +558,7 @@ $string['log'] = 'Agerraldiak'; $string['logguests'] = 'Gonbidatuen sarbidearen erregistroa'; $string['loginhttps'] = 'Erabili HTTPS saioa hasteko'; +$string['loginpasswordautocomplete_help'] = 'Gaituz gero, erabiltzaileek ezin izango dute pasahitza beren nabigatzailean gorde.'; $string['loglifetime'] = 'Mantendu erregistroak tarte honetan:'; $string['longtimewarning'] = 'Mesedez, kontuan hartu prozesu hau oso luzea izan daitekeela.'; $string['maintenancemode'] = 'Mantenu-moduan'; @@ -856,12 +863,13 @@ $string['taskcheckforupdates'] = 'Egiaztatu eguneraketak'; $string['taskcontextcleanup'] = 'Garbitu testuinguruak'; $string['taskcreatecontexts'] = 'Sortu falta diren testuinguruak'; +$string['taskdeleteincompleteusers'] = 'Ezabatu osatu gabeko erabiltzaieak'; $string['taskdeleteunconfirmedusers'] = 'Ezabatu kontua egiaztatu gabeko erabiltzaileak'; $string['taskregistrationcron'] = 'Gunearen erregistroa'; $string['themedesignermode'] = 'Itxurak diseinatzeko modua'; $string['themelist'] = 'Itxuren zerrenda'; $string['themenoselected'] = 'Ez da itxura aukeratu'; -$string['themeresetcaches'] = 'Itxuren cache-ak garbitu'; +$string['themeresetcaches'] = 'Garbitu itxuren cache-ak'; $string['themeselect'] = 'Aldatu itxura'; $string['themeselector'] = 'Itxura-hautatzailea'; $string['themesettings'] = 'Itxuraren ezarpenak'; @@ -872,7 +880,7 @@ $string['timezone'] = 'Berezko ordutegi-eremua'; $string['timezoneforced'] = 'Aukera hau gunearen administratzaileak behartu egin du'; $string['timezoneinvalid'] = 'Ordutegi-eremu baliogabea "{$a}"'; -$string['timezoneisforcedto'] = 'Erabiltzaile guztiak erabiltzera behartu'; +$string['timezoneisforcedto'] = 'Behartu erabiltzaile guztiak erabiltzera'; $string['timezonenotforced'] = 'Erabiltzaileek ordutegi-eremua aukera dezakete'; $string['timezonephpdefault'] = 'Berezko PHP ordutegi-eremua ({$a})'; $string['timezoneserver'] = 'Zerbitzariaren ordutegi-eremua ({$a}) ({$a})'; @@ -883,6 +891,7 @@ $string['unbookmarkthispage'] = 'Desmarkatu orri hau'; $string['unicoderequired'] = 'Datu guztiak Unicode (UTF-8)-n gorde behar dituzu. Instalazio berriak berez Unicode karaktere-multzoa duten datu-baseetan exekutatu beharko lirateke. Eguneraketa bat egiten ari bazara, UTF-8rako migrazio-prozesua egin beharko zenuke (begiratu horretarako Kudeaketa-orria)'; $string['uninstallplugin'] = 'Desinstalatu'; +$string['unsettheme'] = 'Kendu itxura'; $string['unsupported'] = 'Onartu gabea'; $string['unsupportedphpversion7'] = 'Ez da PHP 7 bertsioa onartzen.'; $string['unsupportedphpversion71'] = 'Ez da PHP 7 bertsioa onartzen.'; diff --git a/html/moodle2/langpacks/eu/atto_charmap.php b/html/moodle2/langpacks/eu/atto_charmap.php index 157d015f32..51a7d3d42d 100644 --- a/html/moodle2/langpacks/eu/atto_charmap.php +++ b/html/moodle2/langpacks/eu/atto_charmap.php @@ -43,11 +43,18 @@ $string['ampersand'] = '& et ikurra'; $string['angle'] = 'angelua'; $string['approximatelyequalto'] = 'gutxi gora behera honen berdina'; +$string['aringabove'] = 'a - goi uztaia'; +$string['aringabove_caps'] = 'A - goi uztaia'; $string['asteriskoperator'] = 'asteriskoa eragiketarako'; $string['atilde'] = 'a - tildeduna'; $string['atilde_caps'] = 'A - tildeduna'; +$string['backwarddifference'] = 'atzekoz aurrerako ezberdintasuna'; $string['beta'] = 'beta'; $string['beta_caps'] = 'Beta'; +$string['blackclubsuit'] = 'hirusta beltza'; +$string['blackdiamondsuit'] = 'diamante beltza'; +$string['blackheartsuit'] = 'bihotz beltza'; +$string['blackspadesuit'] = 'pika beltza'; $string['brokenbar'] = 'barra bertikala'; $string['bullet'] = 'Buleta'; $string['carriagereturn'] = 'orga-itzulera'; @@ -72,6 +79,7 @@ $string['divisionsign'] = 'zatiketa ikurra'; $string['dotoperator'] = 'puntu operatzailea'; $string['doubledagger'] = 'ezpata bikoitza'; +$string['doublelow9quotationmark'] = 'behe-kakotx bikoitzak'; $string['downwardsarrow'] = 'beherako gezia'; $string['downwardsdoublearrow'] = 'beherako gezi bikoitza'; $string['eacute'] = 'e - agudoa'; @@ -123,6 +131,7 @@ $string['infinity'] = 'infinitoa'; $string['insertcharacter'] = 'Txertatu karakterea'; $string['integral'] = 'integrala'; +$string['interrobang'] = 'galde-harridura'; $string['intersection'] = 'intersekzioa'; $string['invertedexclamationmark'] = 'goitik beherako harridura marka'; $string['iota'] = 'iota'; @@ -132,9 +141,10 @@ $string['lambda'] = 'lambda'; $string['lambda_caps'] = 'Lambda'; $string['leftceiling'] = 'Ezkerreko sabaia'; +$string['leftdoublequotationmark'] = 'ezker-kakotx bikoitza'; $string['leftfloor'] = 'Ezkerreko zorua'; -$string['leftpointinganglebracket'] = 'punta ezkerretarako parentesia'; -$string['leftpointingguillemet'] = 'punta ezkerretarako parentesi bikoitza'; +$string['leftpointinganglebracket'] = 'puntadun ezkerretarako parentesia'; +$string['leftpointingguillemet'] = 'ezkerretarako puntadun parentesi bikoitza'; $string['leftrightarrow'] = 'ezker-eskuin gezia'; $string['leftrightdoublearrow'] = 'ezker- eskuin gezi bikoitza'; $string['leftsinglequotationmark'] = 'ezkerreko kakotxa arrunta'; @@ -210,7 +220,11 @@ $string['rho'] = 'rho'; $string['rho_caps'] = 'Rho'; $string['rightceiling'] = 'Eskuineko sabaia'; +$string['rightdoublequotationmark'] = 'eskuin-kakotx bikoitza'; $string['rightfloor'] = 'Eskuineko zorua'; +$string['rightpointinganglebracket'] = 'puntadun eskuinetarako parentesia'; +$string['rightpointingguillemet'] = 'ezkerretarako puntadun parentesi bikoitza'; +$string['rightsinglequotationmark'] = 'ezker kakotxa'; $string['righttoleftmark'] = 'eskuinetik ezkerretara marka'; $string['rightwardsarrow'] = 'eskuinerako gezia'; $string['rightwardsdoublearrow'] = 'eskuinerako gezi bikoitza'; @@ -222,6 +236,9 @@ $string['sigma'] = 'sigma'; $string['sigma_caps'] = 'Sigma'; $string['similarto'] = 'honen antzekoa'; +$string['singleleftpointinganglequotationmark'] = 'ezker puntadun-kakotxa'; +$string['singlelow9quotationmark'] = 'behe-kakotxa'; +$string['singlerightpointinganglequotationmark'] = 'eskuin puntadun-kakotxa'; $string['smalltilde'] = 'tilde txikia'; $string['softhyphen'] = 'silabak banatzeko gidoia'; $string['squareroot'] = 'erro karratua'; diff --git a/html/moodle2/langpacks/eu/atto_table.php b/html/moodle2/langpacks/eu/atto_table.php index 0242a7f311..d1795472f2 100644 --- a/html/moodle2/langpacks/eu/atto_table.php +++ b/html/moodle2/langpacks/eu/atto_table.php @@ -27,7 +27,10 @@ $string['addcolumnafter'] = 'Txertatu zutabea ondoren'; $string['addrowafter'] = 'Txertatu errenkada ondoren'; +$string['all'] = 'Gelaxka bakoitzaren inguruan'; $string['allowbackgroundcolour'] = 'Baimendu atzeko planoaren kolorea'; +$string['allowborder'] = 'Baimendu ertzen estiloak'; +$string['allowborder_desc'] = 'Gaituz gero, taulen eta gelaxken ertzen estiloa pertsonalizatu daiteke.'; $string['allowwidth'] = 'Baimendu zabalera'; $string['appearance'] = 'Itxura'; $string['backgroundcolour'] = 'Atzeko planoaren kolorea'; @@ -37,10 +40,13 @@ $string['borderstyles'] = 'Ertzen estiloa'; $string['both'] = 'Biak'; $string['caption'] = 'Epigrafea'; +$string['captionposition'] = 'Epigrafeen kokapena'; $string['columns'] = 'Zutabeak'; $string['createtable'] = 'Sortu taula'; +$string['dashed'] = 'Marratxoekin'; $string['deletecolumn'] = 'Ezabatu zutabea'; $string['deleterow'] = 'Ezabatu errenkada'; +$string['dotted'] = 'Puntutxoekin'; $string['edittable'] = 'Editatu taula'; $string['headers'] = 'Gaitu izenburuak zehaztea'; $string['movecolumnleft'] = 'Mugitu zutabea ezkerrera'; @@ -51,8 +57,12 @@ $string['none'] = 'Bat ere ez'; $string['numberofcolumns'] = 'Zutabe-kopurua'; $string['numberofrows'] = 'Errenkada-kopurua'; +$string['outer'] = 'Taularen inguruan'; $string['pluginname'] = 'Taula'; $string['rows'] = 'Errenkadak'; $string['settings'] = 'Taularen ezarpenak'; +$string['solid'] = 'Solidoa'; +$string['themedefault'] = 'Berezko itxura'; $string['transparent'] = 'Gardena'; $string['updatetable'] = 'Eguneratu taula'; +$string['width'] = 'Taularen zabalera (ehunekoetan)'; diff --git a/html/moodle2/langpacks/eu/auth.php b/html/moodle2/langpacks/eu/auth.php index 3414b88e53..d090f97f8d 100644 --- a/html/moodle2/langpacks/eu/auth.php +++ b/html/moodle2/langpacks/eu/auth.php @@ -35,7 +35,7 @@ $string['auth_changepasswordurl_expl'] = 'Beren {$a} pasahitza galdu duten erabiltzaileak zein URL helbidera bidaliko dituzun zehaztu. Pasahitz aldaketa orri estandar erabili orrian Ez aukeratu.'; $string['auth_changingemailaddress'] = 'E-posta helbidea {$a->oldemail}-tik {$a->newemail}-ra aldatzeko eskaera egin duzu. Segurtasunagatik, e-posta mezua ari gara bidaltzen helbide berrira benetan zurea dela ziurtatzeko. Mezu honetan bidali dizugun URL-a ireki bezain pronto eguneratuko da e-posta helbidea.'; $string['auth_common_settings'] = 'Ezarpen komunak'; -$string['auth_data_mapping'] = 'Datuen mapa'; +$string['auth_data_mapping'] = 'Datuen lotura'; $string['authenticationoptions'] = 'Autentifikazio-aukerak'; $string['auth_fieldlock'] = 'Balorea bloketau'; $string['auth_fieldlock_expl'] = '

    Balorea blokeatu: Ezarriz gero, Moodle-ko erabiltzaile eta kudeatzaileek ezingo dute eremua zuzenean editatu. Aukeratu hau hautatu datu horiek kanpoko autentifikazio-sisteman badituzu.

    '; diff --git a/html/moodle2/langpacks/eu/auth_cas.php b/html/moodle2/langpacks/eu/auth_cas.php index c3c83b7864..dfdedf1d62 100644 --- a/html/moodle2/langpacks/eu/auth_cas.php +++ b/html/moodle2/langpacks/eu/auth_cas.php @@ -41,6 +41,7 @@ $string['auth_cas_changepasswordurl'] = 'Pasahitza aldatzeko URLa'; $string['auth_cas_create_user'] = 'Aktibatu hau Moodle-ren datu-basean CASen bidez onartutako erabiltzaileak erantsi nahi badituzu. Bestela, Moodle-ren datu-basean honez gero dauden erabiltzaileek soilik izango dute sarbidea.'; $string['auth_cas_create_user_key'] = 'Sortu erabiltzailea'; +$string['auth_cas_curl_ssl_version'] = 'Erabil beharreko SSL bertsioa (2 edo 3). Berez PHP bera saiatuko da hautematen, batzuetan eskuz zehaztu behar den arren.'; $string['auth_cas_curl_ssl_version_default'] = 'Berezkoa'; $string['auth_cas_curl_ssl_version_key'] = 'cURL SSL bertsioa'; $string['auth_cas_curl_ssl_version_SSLv2'] = 'SSLv2'; @@ -59,6 +60,8 @@ $string['auth_cas_logincas'] = 'Konexio seguruaren sarbidea'; $string['auth_cas_logoutcas'] = 'Aukeratu \'bai\' CASetik irten nahi baduzu Moodle-n saioa amaitutakoan'; $string['auth_cas_logoutcas_key'] = 'CASen saioa amaitzeko aukera'; +$string['auth_cas_logout_return_url'] = 'Eman CAS erabiltzaileak saioa amaitzean bideratzeko erabiliko den URLa.
    Hutsik utziz gero, erabiltzaileak Moodle-k bideratzen dituen lekura bideratuko ditu'; +$string['auth_cas_logout_return_url_key'] = 'Saioa amaitzean erabili beharreko ordezko URLa.'; $string['auth_cas_multiauth'] = 'Aukeratu \'bai\' autentifikazio anitza izan nahi baduzu, (CAS + beste autentifikazioa)'; $string['auth_cas_multiauth_key'] = 'Autentifikazio anitza'; $string['auth_casnotinstalled'] = 'Ezin da CAS autentifikazioa erabili. PHP LDAP modulua ez dago instalatuta.'; @@ -73,3 +76,4 @@ $string['CASform'] = 'Autentifikaziorako modua'; $string['noldapserver'] = 'Ez dago CAS-erako konfiguratutako LDAP zerbitzaririk! Sinkronizazioa desgaituta.'; $string['pluginname'] = 'CAS zerbitzaria (SSO)'; +$string['synctask'] = 'CAS erabiltzaileen sinkronizazio-lana'; diff --git a/html/moodle2/langpacks/eu/auth_db.php b/html/moodle2/langpacks/eu/auth_db.php index 937daa9eec..f9102aa925 100644 --- a/html/moodle2/langpacks/eu/auth_db.php +++ b/html/moodle2/langpacks/eu/auth_db.php @@ -28,6 +28,7 @@ $string['auth_dbcantconnect'] = 'Ezin izan da zehaztutako autentifikaziorako datu-basearekin konektatu'; $string['auth_dbchangepasswordurl_key'] = 'Pasahitza aldatzeko URLa'; $string['auth_dbdebugauthdb'] = 'ADOdb garbitu'; +$string['auth_dbdebugauthdbhelp'] = 'Araztu ADOdb konexioa kanpoko datu-basera - erabili orri hutsa jasotzen baduzu saioa hastean. Ez erabili lanean ari diren guneetan!'; $string['auth_dbdeleteuser'] = '{$a->name} id {$a->id} erabiltzailea ezabatuta'; $string['auth_dbdeleteusererror'] = 'Eorrea {$a} erabiltzailea ezabatzean'; $string['auth_dbdescription'] = 'Metodo honek kanpoko datu-base taula bat erabiltzen du emandako erabiltzaile-izen eta pasahitz bat baliozkoa den egiaztatzeko. kontua berria bada, beste eremuetako informazioa ere zeharka kopiatu daiteke Moddlen.'; @@ -41,6 +42,7 @@ $string['auth_dbhost'] = 'Datu-base zerbitzaria ostatzen duen ordenagailua. Erabili sistemako DSN sarrera bat ODBC erabiliz gero.'; $string['auth_dbhost_key'] = 'Ostalaria'; $string['auth_dbinsertuser'] = '{$a->name} id {$a->id} erabiltzailea txertatuta'; +$string['auth_dbinsertuserduplicate'] = 'Errorea {$a->username} erabiltzailea sartzean - erabiltzaile-izen hori duen erabiltzailea dagoeneko sortuta dago \'{$a->auth}\' gehigarriaren bitartez.'; $string['auth_dbinsertusererror'] = 'Errorea {$a} erabiltzailea txertatzean'; $string['auth_dbname'] = 'Datu-basearen izena. Hutsik utzi ODBC DSN bat erabiliz gero.'; $string['auth_dbname_key'] = 'Datu-basearen izena'; @@ -50,10 +52,13 @@ $string['auth_dbpasstype_key'] = 'Pasahitzaren formatua'; $string['auth_dbreviveduser'] = '{$a->name} id {$a->id} erabiltzailea berreskuratuta'; $string['auth_dbrevivedusererror'] = 'Errorea {$a} erabiltzailea berreskuratzean'; +$string['auth_dbsaltedcrypt'] = 'Zifratu zentzu-bakarreko hash metodoa erabiliz.'; $string['auth_dbsetupsql'] = 'SQL ezarpen-komandoa'; +$string['auth_dbsetupsqlhelp'] = 'Datu-basearen konfigurazio berezirako SQL komandoa, maiz komunikazio kodifikazioa konfiguratzeko erabilia - MySQL eta PostgreSQLrako adibidea: SET NAMES \'utf8\''; $string['auth_dbsuspenduser'] = 'Kontua etendako erabiltzailea ({$a->name}) eta IDa {$a->id}'; $string['auth_dbsuspendusererror'] = 'Errorea {$a} erabiltzailea suspenditzean'; -$string['auth_dbsybasequoting'] = 'Sybase-ren aipuak (quotes) erabili'; +$string['auth_dbsybasequoting'] = 'Erabili sybase kakotxak (quotes)'; +$string['auth_dbsybasequotinghelp'] = 'Sybase motako kakotx sinpleen ihesbdea - beharezkoa Oracle, MS SQL eta beste datu-base batzuetan. Ez erabil MySQL-rentzat!'; $string['auth_dbtable'] = 'Taularen izena datu-basean'; $string['auth_dbtable_key'] = 'Taula'; $string['auth_dbtype'] = 'Datu-base mota (Ikus ADOdb documentation xehetasun gahiagorako)'; diff --git a/html/moodle2/langpacks/eu/auth_ldap.php b/html/moodle2/langpacks/eu/auth_ldap.php index 2d26d6387d..fc429eaf9e 100644 --- a/html/moodle2/langpacks/eu/auth_ldap.php +++ b/html/moodle2/langpacks/eu/auth_ldap.php @@ -28,7 +28,7 @@ $string['auth_ldap_ad_create_req'] = 'Ezin da sortu kontu berria Active Directory-n. Ziurtatu lan honetarako baldintza guztiak betetzen dituzula (LDAPS konexioa, eskubide egokiak dituen erabiltzailea,e.a.).'; $string['auth_ldap_attrcreators'] = 'Talde edo testuinguru zerrenda, zeinetako partaideek atributuak sortzeko baimena duten. Banatu taldeak \',\' erabilita. Orokorrean, honelako zerbait: \'cn=teachers,ou=staff,o=myorg\''; $string['auth_ldap_attrcreators_key'] = 'Atributu-sortzaileak'; -$string['auth_ldap_auth_user_create_key'] = 'Erabiltzaileak kanpotik sortu'; +$string['auth_ldap_auth_user_create_key'] = 'Sortu erabiltzaileak kanpotik'; $string['auth_ldap_bind_dn'] = 'Erabiltzaileak bilatzeko bind-user erabili nahi baduzu, hemen zehaztu. Honen antzeko zerbait: \'cn=ldapuser,ou=public,o=org\''; $string['auth_ldap_bind_dn_key'] = 'Izen gorena'; $string['auth_ldap_bind_pw'] = 'bind-user erabiltzailearen pasahitza.'; @@ -50,10 +50,10 @@ $string['auth_ldap_expireattr_desc'] = 'Aukerakoa: Pasahitzaren kaduzitatea metatzen duen ldap atributua indargabetzen du.'; $string['auth_ldap_expireattr_key'] = 'Iraungitze-atributua'; $string['auth_ldapextrafields'] = '

    Eremu hauek aukerazkoak dira. Moodle erabiltzaile eremu batzuk hemen zehaztutako LDAP eremuetako informazioz betetzea aukeratu dezakezu.

    Zurian uzten badituzu, ez da ezer transferituko LDAP-tik eta Moodlek lehenetsitako balioak erabiliko dira ordez.

    Edozein kasutan, erabiltzaileak eremu guzti hauek editatzeko gaitasuna izango du behin saioa hasita.

    '; -$string['auth_ldap_graceattr_desc'] = 'Aukerazkoa: Sarrera librearen atributua indargabetzen du'; -$string['auth_ldap_gracelogin_key'] = 'Sarrera librearen atributua'; -$string['auth_ldap_gracelogins_desc'] = 'LDAP sarrera askeko euskarria indartu. Pasahitza iraungitakoan, erabiltzailea sarbide askeko kontua zerora iritsi arte sar daiteke. Aukera hau aktibatuz gero sarbide askeko mezua erakutsiko da, pasahitza kadukatu bada.'; -$string['auth_ldap_gracelogins_key'] = 'Sarrera libreak'; +$string['auth_ldap_graceattr_desc'] = 'Aukerazkoa: Graziazko sarreren atributua indargabetzen du'; +$string['auth_ldap_gracelogin_key'] = 'Graziazko sarreren atributua'; +$string['auth_ldap_gracelogins_desc'] = 'Gaitu LDAP graziazko sarreren euskarria. Pasahitza iraungitakoan, erabiltzailea graziazko sarreren kontua zerora iritsi arte sar daiteke. Aukera hau aktibatuz gero graziazko sarreren mezua erakutsiko da, pasahitza iraungitu bada.'; +$string['auth_ldap_gracelogins_key'] = 'Graziazko sarrerak'; $string['auth_ldap_groupecreators'] = 'Taldeak sortzeko baimena duten kideak dauden talde edo testuinguru-zerrenda. Taldeak \',\'-z banatu. Adibidez, honelako zerbait: \'cn=irakasleak,ou=administrazioa,o=nireerakundea\''; $string['auth_ldap_groupecreators_key'] = 'Talde sortzaileak'; $string['auth_ldap_host_url'] = 'LDAP ostatua URL bidez zehaztu, adibidez \'ldap://ldap.zerbitzaria.com/\' edo \'ldaps://ldap.zerbitzaria.com/\'. Banatu zerbitzariak \';\' erabiliz hutsegiteen aurkako babesa gehitzeko.'; @@ -82,13 +82,15 @@ $string['auth_ldap_search_sub'] = 'Bilatu erabiltzaileak azpitestuinguruetan.'; $string['auth_ldap_search_sub_key'] = 'Bilatu azpitestuinguruetan'; $string['auth_ldap_server_settings'] = 'LDAP zerbitzariaren ezarpenak'; +$string['auth_ldap_suspended_attribute'] = 'Aukerakoa: Atributu hau zehazten bada lokalki sortutako erabiltzaile-kontuak gaitzeko edo eteteko erabiliko da.'; +$string['auth_ldap_suspended_attribute_key'] = 'Etenda atributua'; $string['auth_ldap_unsupportedusertype'] = 'auth: ldap user_create()-k ez du onartzen aukeratutako erabiltzaile-mota: {$a}'; -$string['auth_ldap_update_userinfo'] = 'Erabiltzaile informazioa (izena, abizena, helbidea..) LDAP-tik Moodle-ra eguneratu. /auth/ldap/attr_mappings.php fitxategian begira ezazu mapa informazioa'; +$string['auth_ldap_update_userinfo'] = 'Eguneratu erabiltzaile informazioa (izena, abizena, helbidea..) LDAP-tik Moodle-ra. Zehaztu "Datuen lotura" ezarpenak behar duzun moduan.'; $string['auth_ldap_user_attribute'] = 'Erbiltzaileak izendatzeko edo bilatzeko atributua. \'cn\' izan ohi da.'; $string['auth_ldap_user_attribute_key'] = 'Erabiltzailearen atributuak'; $string['auth_ldap_user_exists'] = 'LDAP erabiltze-izen hau lehendik ere badago'; -$string['auth_ldap_user_settings'] = 'Erabiltzailearen bilaketaren ezarpenak'; -$string['auth_ldap_user_type'] = 'Erabiltzaileak LDAPen nola gordeko diren aukeratu. Ezarpen honek sarbidearen kaduzitateak, sarbide askeek eta erabiltzaileen sorrerak nola funtzionatuko duten zehazten du.'; +$string['auth_ldap_user_settings'] = 'Erabiltzaileen bilaketaren ezarpenak'; +$string['auth_ldap_user_type'] = 'Aukeratu erabiltzaileak LDAPen nola gordeko diren. Ezarpen honek sarbidearen iraungitzea, graziazko sarrerak eta erabiltzaileen sorrerak ere nola funtzionatuko duten zehazten du.'; $string['auth_ldap_user_type_key'] = 'Erabiltzaile-mota'; $string['auth_ldap_usertypeundefined'] = 'config.user_type ez dago definituta edo ldap_expirationtime2unix funtzioak ez du onartzen aukeratutako mota!'; $string['auth_ldap_usertypeundefined2'] = 'config.user_type ez dago definituta edo ldap_unixi2expirationtime funtzioak ez du onartzen aukeratutako mota!'; @@ -98,7 +100,13 @@ $string['auth_ntlmsso_enabled'] = 'Bai ezarri Single Sign On NTLM domeinuan saiatzeko. Oharra: bestelako ezarpen behar du web zerbitzarian funtzionatzeko, begiratu http://docs.moodle.org/en/NTLM_authentication'; $string['auth_ntlmsso_enabled_key'] = 'Gaitu'; $string['auth_ntlmsso_ie_fastpath'] = 'Ezarri NTLM SSO sarbide azkarra gaitzeko (hainbat pausu aurreratzen ditu erabiltzailearen nabigatzailea MS Internet Explorer bada).'; +$string['auth_ntlmsso_ie_fastpath_attempt'] = 'Saiatu NTLM nabigatzaile guztiekin'; $string['auth_ntlmsso_ie_fastpath_key'] = 'MS IE bide azkarra?'; +$string['auth_ntlmsso_ie_fastpath_yesattempt'] = 'Bai, saiatu NTLM nabigatzaile guztiekin'; +$string['auth_ntlmsso_ie_fastpath_yesform'] = 'Bai, beste nabigatzile guztiek saioa hasteko formulario estandarra erabiltzen dute.'; +$string['auth_ntlmsso_maybeinvalidformat'] = 'Ezin izan da erabiltzailea atera REMOTE_USER goiburutik. Konfiguratutako formatua egokia da?'; +$string['auth_ntlmsso_missing_username'] = 'Gutxienez %username% eremua zehaztu behar duzu urruneko erabiltzaile formatuan.'; +$string['auth_ntlmsso_remoteuserformat'] = '\'Autentifikazio-mota\' eremuan \'NTLM\' aukera baduzu, urruneko erabiltzaile-formatua zehaztu dezakezu hemen. Hutsik utziz gero, berezko DOMEINUA\\erabiltzailea formatua erabiliko da. Aukerazko %domain% hitz-gakoa erabili dezakezu domeinua no agertzen den zehazteko, eta derrigorrezko %username% hitz-gakoa erabiltzaiea non agertzen den zehazteko.

    Asko zabaldutako formatu batzuk %domain%\\%username% (MS Windows-eko berezkoa), %domain%/%username%, %domain%+%username% eta soilik %username% dira (domeinuko atalik ez badago).'; $string['auth_ntlmsso_remoteuserformat_key'] = 'Urrutiko erailtzaile-izenaren formatua'; $string['auth_ntlmsso_subnet'] = 'Ezarrita, SSO saiatuko da azpi-sare honetako bezeroekin bakarrik. Formatua: xxx.xxx.xxx.xxx/bitmask. subnet bat baino gehiago balego \',\' bitartez bereiztu (koma).'; $string['auth_ntlmsso_subnet_key'] = 'Azpisarea'; @@ -109,9 +117,12 @@ $string['didntfindexpiretime'] = 'password_expire-k() ez du iraungitze-data aurkitu.'; $string['didntgetusersfromldap'] = 'Ez da erabiltzailerik lortu LDAPetik. -- errorea? -- irteten'; $string['gotcountrecordsfromldap'] = 'Lortu {$a} erregistroa(k) LDAP-etik'; +$string['morethanoneuser'] = 'Arraroa da! LDAPen erabiltzaile bat baino gehiago aurkitu dira. Lehena bakarrik erabiliko da.'; $string['needbcmath'] = 'BCMath luzapena behar duzu graziazko sarbidea erabiltzeko Active Directory-rekin'; $string['needmbstring'] = 'mbstring luzapena behar duzu Active Directory-n pasahitzak aldatzeko.'; +$string['nodnforusername'] = 'Errorea user_update_password()-en. Ez dago DN-rik hurrengorako: {$a->username}'; $string['noemail'] = 'E-posta bat bidali nahi izan dizugu baina ezin!'; +$string['notcalledfromserver'] = 'Ez litzateke web zerbitzaritik deituko beharko!'; $string['noupdatestobedone'] = 'Ez dago egiteko eguneraketarik'; $string['nouserentriestoremove'] = 'Ez dago ezabatzeko erabiltzaile-sarrerarik'; $string['nouserentriestorevive'] = 'Ez dago berreskuratzeko erabiltzaile-sarrerarik'; @@ -120,10 +131,25 @@ $string['ntlmsso_failed'] = 'Kale egin du saio-hasiera automatikoak, jo normal sartzeko orrira...'; $string['ntlmsso_isdisabled'] = 'NTLM SSO desgaituta dago.'; $string['ntlmsso_unknowntype'] = 'ntlmsso mota ezezaguna!'; +$string['pagedresultsnotsupp'] = 'LDAPeko orrikako emaitzak ez dira onartzen (zure PHP bertsioak onartzen ez dituelako, Moodle LDAP protokoloaren 2 bertsioa erabiltzeko konfiguratu duzulako edo Moodle-k ezin duelako LDAP zerbitzariarekin kontaktatu orrikako emaitzak onartzen dituen egiaztatzeko.'; +$string['pagesize'] = 'Ziurtatu ezazu balio hau zure LDAP zerbitzariren emaitza-sortaren gehienezko tamaina (query bakar batek bueltatu dezakeen gehienezko erregistro kopurua) baino txikiagoa dela'; $string['pagesize_key'] = 'Orriaren tamaina'; $string['pluginname'] = 'LDAP zerbitzaria'; $string['pluginnotenabled'] = 'Plugina ez dago gaituta'; +$string['renamingnotallowed'] = 'Erabiltzaileen berrizendatzea ez da onartzen LDAPen.'; +$string['rootdseerror'] = 'Errore Active Directory-ko rootDSE-a kontsultatzean'; +$string['start_tls'] = 'Erabili LDAPeko zerbitzu normala (389 ataka) TLS zifraketarekin'; $string['start_tls_key'] = 'Erabili TLS'; +$string['synctask'] = 'LDAP erabiltzaileen sinkronizazio-lana'; +$string['updatepasserror'] = 'Errorea user_update_password()-en. Errore-kodea: {$a->errno}; Errorearen mezua: {$a->errstring}'; +$string['updatepasserrorexpire'] = 'Errorea user_update_password()-en pasahitzaren iraungitze-data irakurtzean. Errore-kodea: {$a->errno}; Errorearen mezua: {$a->errstring}'; +$string['updatepasserrorexpiregrace'] = 'Errorea user_update_password()-en pasahitzaren iraungitze-data edota graziazko sarrerak (gracelogins) aldatzean. Errore-kodea: {$a->errno}; Errorearen mezua: {$a->errstring}'; +$string['updateremfail'] = 'Errorea LDAP erregistroa eguneratzean. Errore-kodea: {$a->errno}; Errorearen mezua: {$a->errstring}
    ({$a->key}) giltza - Moodle-ko balio zaharra: \'{$a->ouvalue}\' balio berria: \'{$a->nuvalue}\''; +$string['updateremfailamb'] = 'Errorea gertatu da LDAP eguneratzean {$a->key} eremu anbiguoarekin; Moodle-ko balio zaharra: \'{$a->ouvalue}\' balio berria: \'{$a->nuvalue}\''; +$string['updateusernotfound'] = 'Ezin da erabiltzailea aurkitu kanpotik eguneratzean. Xehetasunak jarraian: bilaketaren oinarria: \'{$a->userdn}\'; bilaketa-iragazkia \'(objectClass=*)\'; bilaketa-atributuak: {$a->attribs}'; +$string['useracctctrlerror'] = 'Errorea {$a}-(r)entzako userAccountControl eskuratzean'; +$string['user_activatenotsupportusertype'] = 'auth: LDAPeko user_activate()-ek ez du erabiltzaile-mota hau onartzen: {$a}'; +$string['user_disablenotsupportusertype'] = 'auth: LDAPeko user_activate()-ek ez du erabiltzaile-mota hau onartzen: {$a}'; $string['userentriestoadd'] = 'Gehitzeko erabiltzaile-sarrerak: {$a}'; $string['userentriestoremove'] = 'Ezabatzeko erabiltzaile-sarrerak: {$a}'; $string['userentriestorevive'] = 'Berreskuratzeko erabiltzaile-sarrerak: {$a}'; diff --git a/html/moodle2/langpacks/eu/auth_manual.php b/html/moodle2/langpacks/eu/auth_manual.php index aa50ea0bc7..53c62885cc 100644 --- a/html/moodle2/langpacks/eu/auth_manual.php +++ b/html/moodle2/langpacks/eu/auth_manual.php @@ -26,7 +26,11 @@ defined('MOODLE_INTERNAL') || die(); $string['auth_manualdescription'] = 'Metodo honek erabiltzaileen sorrera automatizatua ahalbidetzen du. Erabiltzaile guztiak kudeatzaileak sortu behar ditu.'; +$string['expiration'] = 'Gaitu pasahitzen iraungitzea'; +$string['expiration_desc'] = 'Gaitu pasahitzak denbora baten ondoren iraungitzea.'; $string['expiration_warning'] = 'Jakinarazpenen ataria'; +$string['expiration_warning_desc'] = 'Pasahitza iraungitu aurretiko egun kopurua jakinarazpena bidaltzeko.'; $string['passwdexpire_settings'] = 'Pasahitzaren iraungitzerako ezarpenak'; $string['passwdexpiretime'] = 'Pasahitzaren iraupena'; +$string['passwdexpiretime_desc'] = 'Pasahitza baliozkoa den denbora-tartea.'; $string['pluginname'] = 'Eskuzko kontuak'; diff --git a/html/moodle2/langpacks/eu/auth_shibboleth.php b/html/moodle2/langpacks/eu/auth_shibboleth.php index fa4f662318..06069f2d18 100644 --- a/html/moodle2/langpacks/eu/auth_shibboleth.php +++ b/html/moodle2/langpacks/eu/auth_shibboleth.php @@ -26,13 +26,16 @@ defined('MOODLE_INTERNAL') || die(); $string['auth_shib_auth_method'] = 'Autentifikazio-metodoaren izena'; -$string['auth_shibbolethdescription'] = 'Metodo honen bidez Shibboleth zerbitzari batera konekta zaitezke kontu berriak sortu eta konprobatzeko'; +$string['auth_shib_auth_method_description'] = 'Eman Shibboleth autentifikazio-metodoarentzako zure erabiltzaileei ezaguna egingo zaien izen bat. Hau zure Shibboleth federazioaren izena izan daiteke, ad. SWITCHaai Login, InCommon Login edo antzeko bat.'; +$string['auth_shibbolethdescription'] = 'Metodo honen bidez Shibboleth zerbitzari batera konektatu zaitezke kontu berriak sortu eta konprobatzeko.
    Ziurtatu ezazu Shibboleth-eko IRAKUR NAZAZU dokumentua irakurri duzula Moodle-n Shibboleth konfiguratzen jakiteko.'; $string['auth_shibboleth_errormsg'] = 'Mesedez, aukera ezazu zein erakundetakoa zaren!'; $string['auth_shibboleth_login'] = 'Shibboleth sarbidea'; $string['auth_shibboleth_login_long'] = 'Saioa hasi Moodle-n Shibboleth-en bidez'; $string['auth_shibboleth_manual_login'] = 'Eskuzko sarbidea'; $string['auth_shibboleth_select_member'] = 'Ni hemengo kidea naiz:'; +$string['auth_shibboleth_select_organization'] = 'Shibboleth bidezko autentifikaziorako, mesedez aukeratu zure erakundea menuan:'; $string['auth_shib_changepasswordurl'] = 'Pasahitza aldatzeko URLa'; +$string['auth_shib_contact_administrator'] = 'Zerrendako erakundeekin inolako loturarik ez baduzu eta zerbitzari honetako ikastaro baterako sarbide behar baduzu, mesedez jarri harremanetan guneko Moodle kudeatzailearekin.'; $string['auth_shib_convert_data'] = 'Datuen aldaketarako APIa'; $string['auth_shib_convert_data_description'] = 'API hau aurrerago Shibboleth-ek emandako datuak aldatzeko erabil dezakezu. README irakurri argibide gehigarriak ikusteko.'; $string['auth_shib_convert_data_warning'] = 'Fitxategirik ez dago, edo zerbitzariaren prozesuak ezin du irakurri.'; diff --git a/html/moodle2/langpacks/eu/backup.php b/html/moodle2/langpacks/eu/backup.php index bf0d2f8882..132f964b05 100644 --- a/html/moodle2/langpacks/eu/backup.php +++ b/html/moodle2/langpacks/eu/backup.php @@ -205,7 +205,7 @@ $string['restorenewcoursefullname'] = 'Ikastaro berriaren izena'; $string['restorenewcourseshortname'] = 'Ikastaro berriaren izen laburra'; $string['restorenewcoursestartdate'] = 'Hasiera-data berria'; -$string['restorerolemappings'] = 'Berreskuratu rolen mapak'; +$string['restorerolemappings'] = 'Berreskuratu rolen loturak'; $string['restorerootsettings'] = 'Berreskuratu ezarpenak'; $string['restoresection'] = 'Berreskuratu atala'; $string['restorestage1'] = 'Baieztatu'; diff --git a/html/moodle2/langpacks/eu/badges.php b/html/moodle2/langpacks/eu/badges.php index a325988ba6..0180c63e44 100644 --- a/html/moodle2/langpacks/eu/badges.php +++ b/html/moodle2/langpacks/eu/badges.php @@ -84,13 +84,19 @@ Egiaztatzeko beharrezko den URL bakarra [zure-gunearen-urla]/badges/assertion.php, da eta fitxategi horretarako kanpoko sarbidea baimentzeko firewall-a aldatu ahal baduzu, dominek egiaztapenak funtzionatu egingo du.'; $string['backpackbadges'] = '{$a->totalbadges} domina duzu {$a->totalcollections} bildumatatik erakutsiak. Aldatu motxilaren ezarpenak.'; +$string['backpackcannotsendverification'] = 'Ezin da bidali egiaztapenerako e-posta'; $string['backpackconnection'] = 'Motxilarako konexioa'; +$string['backpackconnectionconnect'] = 'Konektatu motxilara'; $string['backpackconnection_help'] = 'Orri honek kanpoko motxila-hornitzaile baterako konexioa konfiguratzeko aukera ematen dizu. Motxila batera konektatzeak kanpoko dominak gune honetan erakusteko aukera ematen dizu eta bertan irabazitako dominak zeure motxilara igotzea. Une honetan, OpenBadges Mozilla Motxila baino ez da bateragarria. Izena eman behar da orri honetan motxilarako konexioa konfiguratzen saiatzen hasi aurretik motxila-zerbitzua izateko.'; +$string['backpackconnectionresendemail'] = 'Berriz bidali egiaztapenerako e-posta'; +$string['backpackconnectionunexpectedresult'] = 'Arazoa gertatu da motxilarekin konektatzean. Saiatu berriz.

    Arazoa konpondu ezean, jar zaitez harremanetan sistemako kudeatzailearekin.'; $string['backpackdetails'] = 'Motxilaren ezarpenak'; $string['backpackemail'] = 'E-posta helbidea'; $string['backpackemail_help'] = 'Zure motxilarekin lotutako e-posta helbidea. Konektatuta zauden bitartean, gune honetan irabazitako dominak e-posta helbide honekin lotuko dira.'; +$string['backpackemailverificationpending'] = 'Egiaztapena falta da'; +$string['backpackemailverifyemailsubject'] = '{$a}: OpenBadges-en motxilarako e-posta bidezko egiaztapena'; $string['backpackimport'] = 'Domina inportatzeko ezarpenak'; $string['backpackimport_help'] = 'Motxilarako konexio egokia ezarri ondoren, zure motxilako dominak zure dominen orrian eta zure profil-orrian ikusi ahal izango dira. diff --git a/html/moodle2/langpacks/eu/block_myprofile.php b/html/moodle2/langpacks/eu/block_myprofile.php index b8b79f63e4..76803e126c 100644 --- a/html/moodle2/langpacks/eu/block_myprofile.php +++ b/html/moodle2/langpacks/eu/block_myprofile.php @@ -39,7 +39,7 @@ $string['display_lastip'] = 'Azken IPa erakutsi'; $string['display_msn'] = 'MSN erakutsi'; $string['display_phone1'] = 'Erakutsi telefonoa'; -$string['display_phone2'] = 'Erakutsi mugikorra'; +$string['display_phone2'] = 'Erakutsi telefono mugikorra'; $string['display_picture'] = 'Irudia erakutsi'; $string['display_skype'] = 'Skype erakutsi'; $string['display_un'] = 'Izena erakutsi'; diff --git a/html/moodle2/langpacks/eu/cache.php b/html/moodle2/langpacks/eu/cache.php index b9afd62e9e..88f005b31f 100644 --- a/html/moodle2/langpacks/eu/cache.php +++ b/html/moodle2/langpacks/eu/cache.php @@ -45,6 +45,7 @@ $string['cachedef_langmenu'] = 'ESkura dauden hizkuntzen zerrenda'; $string['cachedef_locking'] = 'Blokeatzen'; $string['cachedef_questiondata'] = 'Galdera-definizioak'; +$string['cachedef_suspended_userids'] = 'Kontua etenda duten erabiltzaile-zerrenda ikastaroko'; $string['cachedef_yuimodules'] = 'YUI moduluen definizioak'; $string['cachestores'] = 'Cache-biltegiak'; $string['component'] = 'Osagaia'; @@ -54,7 +55,7 @@ $string['deletestore'] = 'Ezabatu biltegia'; $string['deletestoreconfirmation'] = 'Ziur al zaude "{$a}" biltegia ezabatu nahi duzula?'; $string['deletestoresuccess'] = 'Ondo ezabatu da cache-biltegia'; -$string['editmappings'] = 'Editatu mapaketak'; +$string['editmappings'] = 'Editatu loturak'; $string['editsharing'] = 'Editatu partekatzea'; $string['editstore'] = 'Editatu biltegia'; $string['editstoresuccess'] = 'Ondo editatu da cache-biltegia.'; diff --git a/html/moodle2/langpacks/eu/data.php b/html/moodle2/langpacks/eu/data.php index 23b951c923..07d488d48d 100644 --- a/html/moodle2/langpacks/eu/data.php +++ b/html/moodle2/langpacks/eu/data.php @@ -173,7 +173,7 @@ $string['fieldheightlistview'] = 'Altuera zerrenda-ikuspegian'; $string['fieldheightsingleview'] = 'Altuera ikuspegi xumean'; $string['fieldids'] = 'Eremuak'; -$string['fieldmappings'] = 'Eremu mapeoak'; +$string['fieldmappings'] = 'Eremu-loturak'; $string['fieldmappings_help'] = '

    Menu honek datuak aldez aurretik dagoen datu-base batetik hartzeko aukera ematen dizu. Datua eremu batean mantentzeko, eremu berriarekin lotu behar duzu, eta bertan agertuko da datua. Zuri ere utzi ahal da eremu bat, diff --git a/html/moodle2/langpacks/eu/enrol_category.php b/html/moodle2/langpacks/eu/enrol_category.php index aaa05001ab..b5cd216b3e 100644 --- a/html/moodle2/langpacks/eu/enrol_category.php +++ b/html/moodle2/langpacks/eu/enrol_category.php @@ -25,5 +25,7 @@ defined('MOODLE_INTERNAL') || die(); +$string['category:config'] = 'Konfiguratu kategoria-matrikulazio instantziak'; $string['category:synchronised'] = 'Rol-esleipen sinkronizatuak ikastaro-matrikulaziorako'; $string['pluginname'] = 'Kategoria-matrikulazioak'; +$string['pluginname_desc'] = 'Kategoria-matrikulazioko gehigarria ikastaro-kategorietan rol esleipenak egitea ahalbidetzen duen konponbidea zaharkitua da. Honen ordez kohorte bidezko sinkronizazioa erabiltzea gomendatzen da.'; diff --git a/html/moodle2/langpacks/eu/enrol_cohort.php b/html/moodle2/langpacks/eu/enrol_cohort.php index a34a9e7e77..cf8a071a3e 100644 --- a/html/moodle2/langpacks/eu/enrol_cohort.php +++ b/html/moodle2/langpacks/eu/enrol_cohort.php @@ -30,6 +30,7 @@ $string['cohort:config'] = 'Kohorteen instantziak konfiguratu'; $string['cohort:unenrol'] = 'Desmatrikulatu kontua etenda duten erabiltzaileak'; $string['creategroup'] = 'Sortu beste talde bat'; +$string['defaultgroupnametext'] = '{$a->name} kohortea {$a->increment}'; $string['instanceexists'] = 'Kohortea dagoeneko sinkronizatu da aukeratutako rolarekin'; $string['pluginname'] = 'Sinkronizatu kohortea'; $string['pluginname_desc'] = 'Kohorteak matrikulatzeko pluginak kohorte jakin bateko partaideak ikastaroko partaideekin sinkronizatzen ditu.'; diff --git a/html/moodle2/langpacks/eu/enrol_database.php b/html/moodle2/langpacks/eu/enrol_database.php index 79c0b0fd57..b7d21af9fc 100644 --- a/html/moodle2/langpacks/eu/enrol_database.php +++ b/html/moodle2/langpacks/eu/enrol_database.php @@ -25,36 +25,54 @@ defined('MOODLE_INTERNAL') || die(); +$string['database:config'] = 'Konfiguratu datu-base bidezko matrikulazio instantziak'; $string['database:unenrol'] = 'Desmatrikulatu kontua etenda duten erabiltzaileak'; $string['dbencoding'] = 'Datu-basearen kodifikazioa'; $string['dbhost'] = 'Datu-basearen ostalaria'; $string['dbhost_desc'] = 'Idatzi datu-basearen zerbitzariaren IPa edo izena. Erabili sistemako DSN sarrera bat ODBC erabiliz gero.'; $string['dbname'] = 'Datu-basearen izena'; +$string['dbname_desc'] = 'Utzi hutsik datu-base ostalarian DSN izena erabiliz gero.'; $string['dbpass'] = 'Datu-basearen pasahitza'; $string['dbsetupsql'] = 'Datu-basea konfiguratzeko komandoa'; +$string['dbsetupsql_desc'] = 'Datu-basearen konfigurazio berezirako SQL komandoa, maiz komunikazio kodifikazioa konfiguratzeko erabilia - MySQL eta PostgreSQLrako adibidea: SET NAMES \'utf8\''; +$string['dbsybasequoting'] = 'Erabili sybase kakotxak (quotes)'; +$string['dbsybasequoting_desc'] = 'Sybase motako kakotx sinpleen ihesbdea - beharezkoa Oracle, MS SQL eta beste datu-base batzuetan. Ez erabil MySQL-rentzat!'; $string['dbtype'] = 'Datu-basearen kontrolatzailea'; +$string['dbtype_desc'] = 'ADOdb datu-basearen kontrolatzailearen izena, kanpoko datu-baseko motore-mota.'; $string['dbuser'] = 'Datu-basearen erabiltzailea'; $string['debugdb'] = 'Araztu ADOdb'; +$string['debugdb_desc'] = 'Araztu ADOdb konexioa kanpoko datu-basera - erabili orri hutsa jasotzen baduzu saioa hastean. Ez erabili lanean ari diren guneetan!'; $string['defaultcategory'] = 'Ikastaro berrien berezko kategoria'; +$string['defaultcategory_desc'] = 'Berezko kategoria automatikoi sortutako ikastaroentzako. Kategoria IDa zehazten edo aurkitzen ez denean erabiliko da.'; $string['defaultrole'] = 'Berezko rola'; +$string['defaultrole_desc'] = 'Berez esleituko den rola, kanpoko datu-basean rolik zehazten ez denean.'; $string['ignorehiddencourses'] = 'Baztertu ezkutuko ikastaroak'; +$string['ignorehiddencourses_desc'] = 'Gaituz gero erabiltzaileak ez dira ikastaroetan matrikulatuko ikastaroak ikasleentzako ezkutuan badaude.'; $string['localcategoryfield'] = 'Lokaleko kategoriaren eremua'; $string['localcoursefield'] = 'Lokaleko ikastaroaren eremua'; $string['localrolefield'] = 'Lokaleko rolaren eremua'; $string['localuserfield'] = 'Lokaleko erabiltzailearen eremua'; $string['newcoursecategory'] = 'Ikastaro-kategoria berriaren eremua'; -$string['newcoursefullname'] = 'Ikastaro berriaren izen luzerako eremua'; -$string['newcourseidnumber'] = 'Ikastaro berriaren ID zenbakirako eremua'; -$string['newcourseshortname'] = 'Ikastaro berriaren izen laburrerako eremua'; +$string['newcoursefullname'] = 'Ikastaro berriaren izen luzeraren eremua'; +$string['newcourseidnumber'] = 'Ikastaro berriaren ID zenbakiaren eremua'; +$string['newcourseshortname'] = 'Ikastaro berriaren izen laburraren eremua'; $string['newcoursetable'] = 'Urrutiko ikastaro berrien taula'; +$string['newcoursetable_desc'] = 'Zehaztu automatikoki sortu beharreko ikastaroen zerrenda duen taularen izena. Hutsik utziz gero ez da ikastarorik sortuko.'; $string['pluginname'] = 'Kanpoko datu-basea'; +$string['pluginname_desc'] = 'Kanpoko datu-base bat erabili dezakezu (ia edozein motatakoa) zure matrikulazioak kudeatzeko. Suposatu egiten da zure kanpoko datu-baseak gutxienez ikastaroaren IDa duen eremua eta erabiltzailearen IDa duen eremua dituela. Eremu hauek datu-base lokaleko ikastaro eta erabiltzaileen tauletan zuk aukeratutako eremuekin konparatuko dira.'; $string['remotecoursefield'] = 'Urrutiko ikastaroen eremua'; $string['remotecoursefield_desc'] = 'Ikastaroen taulan sarrerak parekatzeko erabiltzen den eremuaren izena urrutiko taulan.'; $string['remoteenroltable'] = 'Urrutiko erabiltzaileen matrikulaziorako taula'; +$string['remoteenroltable_desc'] = 'Zehaztu erabiltzaileen matrikulazioen zerrenda duen taularen izena. Hutsik utziz gero ez da matrikulaziorik sinkronizatuko.'; +$string['remoteotheruserfield'] = 'Urrutiko Beste Erabiltzailea eremua'; +$string['remoteotheruserfield_desc'] = '"Beste Erabiltzaileak" rol esleipena markatzeko urruneko taulan erabiliko den eremuaren izena.'; $string['remoterolefield'] = 'Urrutiko rolaren eremua'; $string['remoterolefield_desc'] = 'Rolen taulan sarrerak parekatzeko erabiltzen den eremuaren izena urrutiko taulan.'; $string['remoteuserfield'] = 'Urrutiko erabiltzailearen eremua'; $string['remoteuserfield_desc'] = 'Erabiltzaileen taulan sarrerak parekatzeko erabiltzen den eremuaren izena urrutiko taulan.'; $string['settingsheaderdb'] = 'Kanpoko datu-basearen konexioa'; +$string['settingsheaderlocal'] = 'Eremu lokalen lotura'; $string['settingsheadernewcourses'] = 'Ikastaro berrien sorkuntza'; +$string['settingsheaderremote'] = 'Urruneko rolen sinkronizazioa'; $string['templatecourse'] = 'Ikastaro berrien txantiloia'; +$string['templatecourse_desc'] = 'Aukerakoa: automatikoki sortutako ikastaroek ezarpenak ikastaro-txantiloi batetik kopiatu ditzakete. Idatzi hemen ikastaro-txantiloiaren izen laburra.'; diff --git a/html/moodle2/langpacks/eu/enrol_flatfile.php b/html/moodle2/langpacks/eu/enrol_flatfile.php index 201e3fdb6c..697b6a9598 100644 --- a/html/moodle2/langpacks/eu/enrol_flatfile.php +++ b/html/moodle2/langpacks/eu/enrol_flatfile.php @@ -25,10 +25,41 @@ defined('MOODLE_INTERNAL') || die(); +$string['encoding'] = 'Fitxategien kodifikazioa'; $string['expiredaction_help'] = 'Aukeratu matrikulazioa iraungitzean exekutatuko den ekintza. Mesedez kontuan izan hainbat erabiltzaile-datu eta ezarpen ezabatuak izango direla ikastarotik desmatrikulatzean.'; $string['filelockedmail'] = 'Cron prozesuak ezin du ezabatu matrikulazioak egiteko ({$a}) fitxategian oinarriturik erabiltzen ari zaren testu-fitxategia. Normalean honen zergatia zure baimenak desegokiak izatean datza. Baimenak ezar itzazu Moodle-k fitxategia ezabatu ahal izateko, mesedez. Bestela, prozesua errepikatu egingo da.'; $string['filelockedmailsubject'] = 'Errore larria: Matrikulazio-fitxategia'; $string['flatfile:manage'] = 'Kudeatu erabiltzaileen matrikulazioak eskuz'; +$string['flatfilesync'] = 'Testu-soileko fitxategi bidezko sinkronizazioa'; $string['flatfile:unenrol'] = 'Desmatrikulatu erabiltzaileak ikastarotik eskuz'; $string['location'] = 'Fitxategiaren kokapena'; -$string['pluginname'] = 'Flat fitxategia (CSV)'; +$string['location_desc'] = 'Zehaztu matrikulazio-fitxategiaren helbide osoa. Fitxategi hau automatikoki ezabatzen da prozesatu ondoren.'; +$string['mapping'] = 'Testu-soileko fitxategiko rolen lotura'; +$string['messageprovider:flatfile_enrolment'] = 'Testu-soileko fitxategiko matrikulazio-meuzak.'; +$string['notifyadmin'] = 'Jakinarazi kudeatzaileari'; +$string['notifyenrolled'] = 'Jakinarazi matrikulatutako erabiltzaileei'; +$string['notifyenroller'] = 'Jakinarazi matrikulazioen arduradunari'; +$string['pluginname'] = 'Testu-soileko fitxategia (CSV)'; +$string['pluginname_desc'] = 'Metodo honek zehazten duzun helbideko formatu bereziko testu-fitxategiak modu errepikakorrean egiaztatu eta prozesatuko ditu. +Fitxategia errenkada bakoitzean komaz banatutako 4 edo 6 eremu dituela suposatuko da: + + operation, role, user idnumber, course idnumber [, starttime [, endtime]] + +eremuok balio hauek izan ditzakete: + +* operation - add | del +* role - student | teacher | teacheredit +* user idnumber - erabiltzaile taulako ID zenbakia +* course idnumber - ierabiltzaile taulako ID zenbakia +* starttime - hasiera data (Unix-eko epoch-etik igarotako segunduak) - aukeakoa +* endtime - bukaera data (Unix-eko epoch-etik igarotako segunduak) - aukeakoa + +Honen moduko zerbait izan daiteke: +

    +add, student, 5, CF101
    +add, teacher, 6, CF101
    +add, teacheredit, 7, CF101
    +del, student, 8, CF101
    +del, student, 17, CF101
    +add, student, 21, CF101, 1091115000, 1091215000
    +
    '; diff --git a/html/moodle2/langpacks/eu/enrol_ldap.php b/html/moodle2/langpacks/eu/enrol_ldap.php index 8d409072ba..ba86676e1d 100644 --- a/html/moodle2/langpacks/eu/enrol_ldap.php +++ b/html/moodle2/langpacks/eu/enrol_ldap.php @@ -27,21 +27,29 @@ $string['assignrole'] = '\'{$a->role_shortname}\' rola esleitzen \'{$a->user_username}\' erabiltzaileari \'{$a->course_shortname}\' ikastaroan (id {$a->course_id})'; $string['assignrolefailed'] = 'Kale egin du \'{$a->role_shortname}\' rola esleitzean \'{$a->user_username}\' erabiltzaileari \'{$a->course_shortname}\' ikastaroan (id {$a->course_id})'; -$string['autocreate'] = '

    Era automatikoan sor daitezke ikastaroak oraindik ere Moodlen existitzen ez den ikastaro batean matrikulazioak badaude.

    Ikastaro sorrera automatikoa erabiltzen baduzu, gomendagarria da baimen hauek rol garrantzitsuenei ezgaitzea: moodle/course:changeidnumber, moodle/course:changeshortname, moodle/course:changefullname eta moodle/course:changesummary. Horrela, goian aipatutako lau ikastaro eremuak aldatzea debekatuko da (ID number, shortname, fullname eta summary).

    '; +$string['autocreate'] = '

    Ikastaroak era automatikoan sor daitezke oraindik ere Moodle-n existitzen ez den ikastaro batean matrikulazioak badaude.

    Ikastaro sorrera automatikoa erabiltzen baduzu, gomendagarria da baimen hauek rol garrantzitsuenei ezgaitzea: moodle/course:changeidnumber, moodle/course:changeshortname, moodle/course:changefullname eta moodle/course:changesummary. Horrela, goian aipatutako lau ikastaro eremuak aldatzea debekatuko da (ID zenbakia, izen laburra, izen osoa eta laburpena).

    '; $string['autocreate_key'] = 'Sortu automatikoki'; -$string['autocreation_settings'] = 'Ikastaroak era automatikoak sortzeko zehaztasunak'; -$string['bind_dn'] = 'Erabiltzaileak bilatzeko \'bin-user\' erabili nahi baduzu, zehaztu hemen. Horrelako zerbait \'cn=ldapuser,ou=public,o=org\''; -$string['bind_pw'] = '\'Bind-user\'rentzako pasahitza'; +$string['autocreation_settings'] = 'Ikastaroak era automatikoan sortzeko zehaztasunak'; +$string['autoupdate_settings'] = 'Ikastaroak era automatikoan eguneratzeko zehaztasunak'; +$string['bind_dn'] = 'Erabiltzaileak bilatzeko \'bind-user\' bat erabili nahi baduzu, zehaztu hemen. Horrelako zerbait \'cn=ldapuser,ou=public,o=org\''; +$string['bind_dn_key'] = '\'Bind-user\'aren izen gorena (distinguished name)'; +$string['bind_pw'] = '\'Bind-user\'aren pasahitza'; $string['bind_pw_key'] = 'Pasahitza'; $string['bind_settings'] = 'Bind ezarpenak'; +$string['cannotcreatecourse'] = 'Ezin izan da ikastaroa sortu: LDAP erregistroan beharrezko datuak falta dira!'; +$string['cannotupdatecourse'] = 'Ezin izan da ikastaroa eguneratu: LDAP erregistroan beharrezko datuak falta dira! Ikastaroaren ID zenbakia: \'{$a->idnumber}\''; +$string['cannotupdatecourse_duplicateshortname'] = 'Ezin izan da ikastaroa eguneratu: Bikoiztutako izen laburra. Albo batera utzi da \'{$a->idnumber}\' ID zenbakia duen ikastaroa...'; $string['category'] = 'Era automatikoan sortutako ikastaroetarako kategoria'; $string['category_key'] = 'Kategoria'; $string['contexts'] = 'LDAP kontestuak'; +$string['couldnotfinduser'] = 'Ezin izan da \'{$a}\' erabiltzailea aurkitu, alde batera utzi da'; $string['course_fullname'] = 'Aukerakoa: LDAP eremua zeinetatik lortuko den izen osoa.'; $string['course_fullname_key'] = 'Izen osoa'; $string['course_fullname_updateonsync_key'] = 'Egunearatu izen osoa'; $string['course_idnumber'] = 'Identikatzaile bakarraren mapa LADPn, ohikoena cn edo uid. Balorea blokeatzea gomendatzen da ikastaroa sortzeko era automatikoa erabiltzen ari bada.'; $string['course_idnumber_key'] = 'ID zenbakia'; +$string['coursenotexistskip'] = '\'{$a}\' ikastaroa ez da existitzen eta sorrera automatikoa desgaituta dago, alde batera utzi da'; +$string['course_search_sub'] = 'Bilatu taldetako partaidetza azpitestuinguruetan'; $string['course_search_sub_key'] = 'Bilatu azpitestuinguruak'; $string['course_settings'] = 'Ikastaroan matrikulatzeko ezarpenak'; $string['course_shortname'] = 'Aukerakoa: LDAP eremua zeinetatik lortuko den izen laburra.'; @@ -50,39 +58,72 @@ $string['course_summary'] = 'Aukerakoa: LDAP eremua zeinetatik lortuko den laburpena.'; $string['course_summary_key'] = 'Laburpena'; $string['course_summary_updateonsync_key'] = 'Eguneratu laburpena'; +$string['courseupdated'] = '\'{$a->idnumber}\' ID zenbakia duen ikastaroa ondo eguneratu da.'; +$string['courseupdateskipped'] = '\'{$a->idnumber}\' ID zenbakia duen ikastaroak ez du eguneratzerik behar. Alde batera utzi da...'; +$string['createcourseextid'] = 'SORTU existitzen ez den \'{$a->courseextid}\' ikastaroan matrikulatutako erabiltzailea'; +$string['createnotcourseextid'] = 'Erabiltzailea existitzen ez den \'{$a->courseextid}\' ikastaroan matrikulatuta dago'; $string['creatingcourse'] = '\'{$a}\' ikastaroa sortzen...'; +$string['duplicateshortname'] = 'Errorea ikastaroa sortzean. Bikoiztutako izen laburra. Alde batera utzi da \'{$a->idnumber}\' ID zenbakia duen iakstaroa...'; $string['editlock'] = 'Balorea blokeatu'; +$string['emptyenrolment'] = 'Hutsik \'{$a->course_shortname}\' ikastaroaren \'{$a->role_shortname}\' rolaren matrikulazioa'; $string['enrolname'] = 'LDAP'; $string['enroluser'] = 'Matrikulatu \'{$a->user_username}\' erabiltzailea \'{$a->course_shortname}\' ikastaroan (id {$a->course_id})'; -$string['extremovedsuspend'] = 'Desgaitutako matrikulazioa \'{$a->user_username}\' erabiltzailearentzat \'{$a->course_shortname}\' ikastaroan (id {$a->course_id})'; +$string['enroluserenable'] = '\'{$a->user_username}\' erabiltzailea \'{$a->course_shortname}\' (id {$a->course_id}) ikastaroan matrikulatu da.'; +$string['explodegroupusertypenotsupported'] = 'ldap_explode_group()-ek ez du erabiltzaile-mota hau onartzen: {$a}'; +$string['extcourseidinvalid'] = 'Ikastaroaren kanpoko IDa ez da baliozkoa!'; +$string['extremovedsuspend'] = 'Matrikulazioa desgaitu da \'{$a->user_username}\' erabiltzailearentzat \'{$a->course_shortname}\' ikastaroan (id {$a->course_id})'; +$string['extremovedsuspendnoroles'] = 'Matrikulazioa desgaitu da eta rolak ezabatu zaizkio \'{$a->user_username}\' erabiltzailearentzat \'{$a->course_shortname}\' ikastaroan (id {$a->course_id})'; $string['extremovedunenrol'] = 'Desmatrikulatu \'{$a->user_username}\' erabiltzailea \'{$a->course_shortname}\' ikastarotik (id {$a->course_id})'; $string['failed'] = 'Kale egin du!'; $string['general_options'] = 'Aukera orokorrak'; +$string['group_memberofattribute'] = 'Erabiltzailea zein taldeko kide den zehazten duen atributuaren izena (ad. memberOf, groupMembership, etab.)'; +$string['group_memberofattribute_key'] = '\'Member of\' atributua'; $string['host_url'] = 'Zehaztu LDAP hosta URL formatuan, adib. \'ldap://ldap.myorg.com/\' edo \'ldaps://ldap.myorg.com/\''; $string['host_url_key'] = 'Ostalariaren URLa'; +$string['idnumber_attribute'] = 'Taldetako partaidetzak izen gorenak baditu (distinguished names), zehaztu LDAP autentifikazio ezarpenetako erabiltzailearen \'ID zenbakia\' eremuarekin lotutako atributu berdina.'; $string['idnumber_attribute_key'] = 'Atributuaren ID zenbakia'; +$string['ldap_encoding'] = 'Zehaztu LDAP zerbitzariak erabiltzen duen kodifikazioa. Ziuraski utf-8, MS AD v2-k berez cp1252, cp1250 eta antzeko kodifikazioak erabiltzen ditu.'; $string['ldap_encoding_key'] = 'LDAP kodifikazioa'; $string['ldap:manage'] = 'Kudeatu LDAP matrikulaziorako instantziak'; $string['memberattribute'] = 'LDAP kide-ezaugarria'; +$string['memberattribute_isdn'] = 'Taldetako partaidetzak izen gorenak baditu (distinguished names), hemen zehaztu beharko duzu. Hala izanez gero, atal honetako beste ezarpenak ere konfiguratu beharko dituzu.'; +$string['memberattribute_isdn_key'] = '\'Member\' atributuak \'dn\' erabiltzen du'; $string['nested_groups'] = 'Habiaratutako taldeak (adib. taldeen taldeak) matrikulaziorako?'; $string['nested_groups_key'] = 'Habiaratutako taldeak'; $string['nested_groups_settings'] = 'Habiaratutako taldeen ezarpenak'; +$string['nosuchrole'] = 'Hurrengo rola ez da existitzen: \'{$a}\''; $string['objectclass'] = 'Ikastaroak bilatzeko erabilitako objectClass. Ohikoena \'posixGroup\'.'; $string['objectclass_key'] = 'Objektu-mota'; $string['ok'] = 'ONDO!'; +$string['opt_deref'] = 'Taldetako partaidetzak izen gorenak baditu (distinguished names), zehaztu bilaketetan alias-ak nola kudeatuko diren. Aukeratu hurengo balioetako bat: \'Ez\' (LDAP_DEREF_NEVER) edo \'Bai\' (LDAP_DEREF_ALWAYS)'; +$string['opt_deref_key'] = 'Erreferentziazko ezizenak'; +$string['phpldap_noextension'] = 'Dirudienez PHPko LDAP modulua ez dago instalatuta. Mesedez ziurtatu instalatuta eta gaituta dagoela matrikulazio gehigarri hau erabili nahi baduzu'; $string['pluginname'] = 'LDAP matrikulak'; -$string['pluginname_desc'] = '

    LDAP zerbitzaria erabil dezakezu matrikulazioak kontrolatzeko. Suposatu egiten da zure LDAP arbolak ikastaroetarako taldeak dituztela eta hauetako talde edo ikastaro bakoitzak ikasleei erreferentzia egiten dieten matrikulazio-sarrerak dituztela.

    Suposatu egiten da ikastaroak talde bezala daudela definituta LDAPn, talde bakoitzak erabiltzailearen identifikazio bakarra duten hainbat matrikulazio-eremu dituelarik (member edo memberUid).

    LDAP matrikulazioa erabiltzeko, erabiltzaileek balio duen \'idnumber\'eremua izan behardute. LDAP taldeek \'idnumber\' hori izan behar dute erabiltzaile-eremuetan erabiltzailea ikastaro batean matrikulatu ahal izateko. Ondo funtzionatuko du dagoeneko LDAP Autentifikazioa erabiltzen baduzu.

    Matrikulazioak eguneratu egingo dira erabiltzailea idenfikatzen denean. Kontsulta ezazu enrol/ldap/enrol_ldap_sync.php.

    +$string['pluginname_desc'] = '

    LDAP zerbitzaria erabil dezakezu matrikulazioak kontrolatzeko. Suposatu egiten da zure LDAP arbolak ikastaroetarako taldeak dituela eta hauetako talde edo ikastaro bakoitzak ikasleei erreferentzia egiten dieten matrikulazio-sarrerak dituztela.

    Suposatu egiten da ikastaroak talde bezala daudela definituta LDAPen, talde bakoitzak erabiltzailea identifikazio bakarra duten hainbat matrikulazio-eremu dituelarik (member edo memberUid).

    LDAP matrikulazioa erabiltzeko, erabiltzaileek balio duen ID zenbakia eremua izan behardute. LDAP taldeek \'idnumber\' hori izan behar dute erabiltzaile-eremuetan erabiltzailea ikastaro batean matrikulatu ahal izateko. Ondo funtzionatuko du dagoeneko LDAP Autentifikazioa erabiltzen baduzu.

    Matrikulazioak eguneratu egingo dira erabiltzailea idenfikatzen denean. Kontsulta ezazu enrol/ldap/enrol_ldap_sync.php.

    Plugin hau LDAPn talde berriak agertzen direnean ikastaro berriak era automatikoan sortzeko ere zehaztu ahal da.

    '; $string['pluginnotenabled'] = 'Plugina ez dago gaituta!'; -$string['roles'] = 'Rolen mapa'; +$string['role_mapping'] = '

    LDAP bidez esleitu nahi duzun rol bakoitzeko, zehaztu beharko duzu non dagoen kokatuta rol horren ikastaroetako taldeetako testuinguruen zerrenda. Banadu testuinguruak \';\' karakterea erabilz.

    Zure LDAP zerbitzariak taldeetako kideak gordetzeko erabiltzen duen atributua ere zehaztu beharko duzu. Normalean \'member\' edo \'memberUid\'

    '; +$string['role_mapping_attribute'] = 'LDAP \'member\' atributua {$a}-(r)entzat'; +$string['role_mapping_context'] = 'LDAP testuinguruak {$a}-(r)entzat'; +$string['role_mapping_key'] = 'Lotu rolak LDAPetik'; +$string['roles'] = 'Rolen lotura'; $string['server_settings'] = 'LDAP zerbitzariaren ezarpenak'; +$string['synccourserole'] = '== \'{$a->idnumber}\' ikastaroaren \'{$a->role_shortname}\' rola sinkronizatzen'; $string['template'] = 'Aukerakoa: era automatikoan sortutako ikastaroak ikastaro-txantiloi batetik kopia ditzakete beren zehaztasunak.'; $string['template_key'] = 'Itxura'; +$string['unassignrole'] = '\'{$a->user_username}\' erabiltzaileari \'{$a->role_shortname}\' rola kentzen \'{$a->course_shortname}\' ikastarotik (id {$a->course_id})'; +$string['unassignrolefailed'] = 'Errorea \'{$a->user_username}\' erabiltzaileari \'{$a->role_shortname}\' rola kentzean \'{$a->course_shortname}\' ikastarotik (id {$a->course_id})'; +$string['unassignroleid'] = '\'{$a->user_id}\' erabiltzaileari \'{$a->role_id}\' IDko rola kentzen'; $string['updatelocal'] = 'Datu lokalak eguneratu'; +$string['user_attribute'] = 'Taldetako partaidetzak izen gorenak baditu (distinguished names), zehaztu erabiltzaileak izendatzeko/bilatzeko erabiliko den atributua. Autentifikaziorako LDAP erabiltzen baduzu, balio hau LDAPeko autentifikazio ezarpenetako \'ID zenbakia\' eremuan lotutakoaren berdina izan beharko luke.'; $string['user_attribute_key'] = 'Atributuaren ID zenbakia'; +$string['user_contexts'] = 'Taldetako partaidetzak izen gorenak baditu (distinguished names), zehaztu erabiltzaileak dauden testuinguruen zerrenda. Banandu testuinguru ezberdinak \';\' karakterea erabilita. Adibidez: \'ou=users,o=org; ou=others,o=org\''; $string['user_contexts_key'] = 'Testuinguruak'; +$string['user_search_sub'] = 'Taldetako partaidetzak izen gorenak baditu (distinguished names), zehaztu azpitestuinguruetan ere erabiltzaileak bilatuko ote diren.'; $string['user_search_sub_key'] = 'Bilatu azpitestuinguruak'; +$string['user_settings'] = 'Erabiltzaileen bilaketaren ezarpenak'; +$string['user_type'] = 'Taldeetako partaidetzak izen gorenak baditu (distinguished names), zehaztu LDAPean erabiltzaileak gordetzen diren modua'; $string['user_type_key'] = 'Erabiltzaile-mota'; $string['version'] = 'Zerbitzariak erabiltzen duen LDAP protokoloaren bertsioa'; $string['version_key'] = 'Bertsioa'; diff --git a/html/moodle2/langpacks/eu/enrol_mnet.php b/html/moodle2/langpacks/eu/enrol_mnet.php index c572c60130..6f71e415f8 100644 --- a/html/moodle2/langpacks/eu/enrol_mnet.php +++ b/html/moodle2/langpacks/eu/enrol_mnet.php @@ -29,6 +29,7 @@ $string['mnet_enrol_description'] = 'Publika ezazu zerbitzu hau {$a}-ko kudeatzaileei zuk zure zerbitzarian sortu dituzun ikastaroetan matrikulatzen uzteko.
    • Dependentzia: Era berean, SSO zerbitzuan (Zerbitzu-hornitzailea) harpidetu beharko duzu hemen: {$a}.
    • Dependentzia: Era berean, SSO zerbitzuan (Nortasun-hornitzailea) harpidetu beharko duzu hemen: {$a}.

    Harpidetu zerbitzu honetan zure ikasleak {$a}-ko ikastaroetan matrikulatu ahal izateko.
    • Dependentzia: Era berean, SSO zerbitzuan (Zerbitzu-hornitzailea) harpidetu beharko duzu hemen: {$a}.
    • Dependentzia: Era berean, SSO zerbitzua (Zerbitzu-hornitzailea) publikatu beharko duzu hemen: {$a}.

    '; $string['mnet_enrol_name'] = 'Urrutiko matrikulazio-zerbitzua'; $string['pluginname'] = 'Moodle sareko urrutiko matrikulazioak'; +$string['pluginname_desc'] = 'Baimendu urrutiko MNet ostalaria beren erabiltzaileak gure ikastaroetan matrikulatzeko.'; $string['remotesubscriber'] = 'Urrutiko ostalaria'; $string['remotesubscribersall'] = 'Ostalari guztiak'; $string['roleforremoteusers'] = 'Erabiltzaileentzako rola'; diff --git a/html/moodle2/langpacks/eu/error.php b/html/moodle2/langpacks/eu/error.php index 0ec888d701..1cae02c725 100644 --- a/html/moodle2/langpacks/eu/error.php +++ b/html/moodle2/langpacks/eu/error.php @@ -27,6 +27,7 @@ $string['alreadyloggedin'] = 'Dagoeneko {$a} gisa identifikatuta zaude, beste erabiltzaile bat bezala identifikatzeko lehenik irten egin behar duzu.'; $string['authnotexisting'] = 'Autorizazio-plugina ez da existitzen'; +$string['backupcontainexternal'] = 'Segurtasun-fitxategi honek lokalean konfiguratuta ez dauden kanpoko Moodle sarerako ostalariak ditu.'; $string['backuptablefail'] = 'Segurtasun-kopiaren taulak EZ dira ondo sortu!'; $string['blockcannotconfig'] = 'Bloke honek ez ditu ezarpen orokorrak onartzen '; $string['blockcannotinistantiate'] = 'Arazoa bloke-objektuaren instantzia egitean'; @@ -48,6 +49,9 @@ $string['cannotcallusgetselecteduser'] = 'Ezin duzu user_selector::get_selected_user deitu aukera anitzekoa egia bada.'; $string['cannotcreatebackupdir'] = 'Ezin da backupdata karpeta sortu. Guneko kudeatzaileak fitxategien baimenak ezarri behar ditu'; $string['cannotcreatecategory'] = 'Kategoria ez da txertatu'; +$string['cannotcreatedboninstall'] = '

    Ezin da datu-basea sortu.

    +

    Zehaztutako datu-basea ez da existitzen eta adierazitako erabiltzaileak ez du baimenik datu-basea sortzeko.

    +

    Guneko kudeatzaileak datu-basearen konfigurazioa egiaztatu behar du.

    '; $string['cannotcreategroup'] = 'Errorea taldea sortzean'; $string['cannotcreatelangbase'] = 'Errorea: ezin izan da oinarrizko hizkuntza-direktorioa sortu'; $string['cannotcreatelangdir'] = 'Ezin da hizkuntza-direktorioa sortu'; @@ -71,7 +75,7 @@ $string['cannotdownloadcomponents'] = 'Ezin dira osagaiak jaitsi'; $string['cannotdownloadlanguageupdatelist'] = 'Ezin da download.moodle.org-tik eguneratzeko hizkuntza-zerrenda jaitsi'; $string['cannotdownloadzipfile'] = 'Ezin da ZIP fitxategia jaitsi'; -$string['cannoteditcomment'] = 'Iruzkin hau ez da zuk editatzekoa!'; +$string['cannoteditcomment'] = 'Iruzkin hau ez da zurea eta ezin duzu editatu!'; $string['cannoteditcommentexpired'] = 'Ezin duzu hau editatu. Denbora amaitu egin da!'; $string['cannoteditpostorblog'] = 'Ezin duzu mezurik bidali edo bloga editatu'; $string['cannoteditsiteform'] = 'Ezin duzu guneko ikastaroa editatu formulario hau erabilita'; @@ -90,6 +94,7 @@ $string['cannotfindlang'] = 'Ezin da "{$a}" hizkuntza-paketea aurkitu!'; $string['cannotfindteacher'] = 'Ezin da irakaslea aurkitu'; $string['cannotfinduser'] = 'Ezin da "{$a}" erabiltzaile-izena aurkitu'; +$string['cannotgeoplugin'] = 'Ezin da geoPlugin-en zerbitzarira konektatu (http://www.geoplugin.com). Mesedez, egiaztatu proxy-ren ezarpenak, edo hobeto, instala ezazu MaxMind GeoLite City-ren datu-fitxategia.'; $string['cannotgetblock'] = 'Ezin da blokerik berreskuratu datu-basetik'; $string['cannotgetcats'] = 'Ezin da lortu kategoria-erregistrorik'; $string['cannotgetdata'] = 'Ezin da daturik lortu'; @@ -107,6 +112,7 @@ $string['cannotmigratedatacomments'] = 'Ezin dira iruzkinak migratu datuen modulutik'; $string['cannotmodulename'] = 'Ezin dira datuen moduluaren iruzkunak migratu'; $string['cannotmovecategory'] = 'Ezin da kategoria mugitu'; +$string['cannotmovecourses'] = 'Ezin dira ikastaroak daudeneko kategoriatik beste batera mugitu.'; $string['cannotmoverolewithid'] = 'Ezin da {$a} ID-a duen rola mugitu'; $string['cannotopencsv'] = 'Ezin da CSV fitxategia zabaldu'; $string['cannotopenfile'] = 'Ezin da fitxategia zabaldu ({$a})'; diff --git a/html/moodle2/langpacks/eu/feedback.php b/html/moodle2/langpacks/eu/feedback.php index c59fe187b4..6feac0a597 100644 --- a/html/moodle2/langpacks/eu/feedback.php +++ b/html/moodle2/langpacks/eu/feedback.php @@ -59,6 +59,7 @@ $string['completed_feedbacks'] = 'Bidalitako erantzunak'; $string['complete_the_form'] = 'Erantzun galderei...'; $string['completionsubmit'] = 'Ikusi osatutzat feedbacka bidaltzen bada'; +$string['configallowfullanonymous'] = '\'Bai\' aukeratuz gero, erabiltzaileek inkesta osatu ahal izango dute hasiera-orrian, saioa hasi gabe ere.'; $string['confirmdeleteentry'] = 'Ziur al zaude sarrera hau ezabatu nahi duzula?'; $string['confirmdeleteitem'] = 'Ziur al zaude elementu hau ezabatu nahi duzula?'; $string['confirmdeletetemplate'] = 'Ziur al zaude txantiloi hau ezabatu nahi duzula?'; diff --git a/html/moodle2/langpacks/eu/filter_mathjaxloader.php b/html/moodle2/langpacks/eu/filter_mathjaxloader.php index 740690e7b4..20d100fdfe 100644 --- a/html/moodle2/langpacks/eu/filter_mathjaxloader.php +++ b/html/moodle2/langpacks/eu/filter_mathjaxloader.php @@ -25,8 +25,22 @@ defined('MOODLE_INTERNAL') || die(); +$string['additionaldelimiters'] = 'Ekuazioen bereizle gehigarriak'; +$string['additionaldelimiters_help'] = 'MathJax iragazkiak karaktere bereizleen arteko testua ekuazio gisa erakusten ditu. + +Onartutako karaktere bereizleak hemen gehi daitezke (AsciiMath-ek adibidez ` erabiltzen du). Bereizleak karaketere anitzekoak izan daitezke, eta bereizle anitzak koma bidez bana daitezke.'; $string['filtername'] = 'MathJax'; $string['httpsurl'] = 'HTTPS MathJax URL'; $string['httpurl'] = 'HTTPS MathJax URL'; $string['localinstall'] = 'MathJax-en instalazio lokala'; +$string['localinstall_help'] = 'MathJax-en berezko konfigurazioak MathJax-en CDN bertsioa erabiltzen du, baina MathJax lokalki instala daitezke behar izanez gero. + +Hau erabilgarria izan daiteke banda-zabalera aurrezteko edota proxy lokalen murrizketak saihesteko. + +MathJax-en instalazio lokala erabiltzeko, lehenik eta behin MathJax liburutegi osoa jaitsi http://www.mathjax.org/ helbidetik. Ondoren instala ezazu web-zerbitzari batean. Eta bukatzeko MathJax iragazkiaren httpurl edota httpsurl ezarpenetan MathJax.js lokalaren URLak konfigura itzazu.'; $string['mathjaxsettings'] = 'MathJax-en ezarpenak'; +$string['mathjaxsettings_desc'] = 'MathJax-en berezko konfigurazioa egokia izan beharko litzateke erabiltzaile gehienentzat, baina MathJax oso konfiguragarria da eta hemen MathJax estandarraren edozein konfigurazio aukera gehi daitezke.'; +$string['texfiltercompatibility'] = 'TeX iragazkiaren bateragarritasuna'; +$string['texfiltercompatibility_help'] = 'MathJax iragazkia TeX idazketaren iragazkiaren ordezko gisa erabil daiteke. + +TeX idazketak onartzen dituen bereizle guztiak onartzeko MathJax ekuazio guztiak testuarekin batera erakusteko konfiguratuko da.'; diff --git a/html/moodle2/langpacks/eu/filter_tex.php b/html/moodle2/langpacks/eu/filter_tex.php index 08cc090c64..8ff74a1c23 100644 --- a/html/moodle2/langpacks/eu/filter_tex.php +++ b/html/moodle2/langpacks/eu/filter_tex.php @@ -35,4 +35,5 @@ $string['pathdvisvgm'] = 'dvisvgm bitarrerako bidea'; $string['pathlatex'] = 'latex bitarrerako bidea'; $string['pathmimetex'] = 'mimetex bitarrarako bidea'; +$string['pathmimetexdesc'] = 'Moodle-k bere mimetex bitarra erabiliko du baliozkoa den beste helbide bat zehazten ez bada.'; $string['source'] = 'TeX iturburua'; diff --git a/html/moodle2/langpacks/eu/filter_urltolink.php b/html/moodle2/langpacks/eu/filter_urltolink.php index ac90e80134..a6144df36a 100644 --- a/html/moodle2/langpacks/eu/filter_urltolink.php +++ b/html/moodle2/langpacks/eu/filter_urltolink.php @@ -26,6 +26,7 @@ defined('MOODLE_INTERNAL') || die(); $string['embedimages'] = 'Enbotatutako irudiak'; +$string['embedimages_desc'] = 'Irudien URLak irudiekin ordezkatu aukeratutako testu formatuan.'; $string['filtername'] = 'URLak esteka eta irudi bihurtu'; $string['settingformats'] = 'Aplikatu formatuei'; $string['settingformats_desc'] = 'Iragazkia bakarrik aplikatuko da jatorrizko testua aukeratutako formatuetako batean txertatu bada.'; diff --git a/html/moodle2/langpacks/eu/gradeimport_xml.php b/html/moodle2/langpacks/eu/gradeimport_xml.php index 447b364d79..b26c3eb2ea 100644 --- a/html/moodle2/langpacks/eu/gradeimport_xml.php +++ b/html/moodle2/langpacks/eu/gradeimport_xml.php @@ -26,11 +26,11 @@ defined('MOODLE_INTERNAL') || die(); $string['errbadxmlformat'] = 'Errorea: okerreko XML formatua'; -$string['errduplicategradeidnumber'] = 'Errorea: ikastaroan \'{$a}\' id zenbakia duten bi kalifikazio-elementu daude. Ezinezkoa da hori.'; -$string['errduplicateidnumber'] = 'Errorea: id zenbakia bikoiztuta'; -$string['errincorrectgradeidnumber'] = 'Errorea: inportatutako fitxategiko \'{$a}\' id zenbakia ez dago inongo kalifikazio-elementutan.'; -$string['errincorrectidnumber'] = 'Errorea: okerreko id zenbakia'; -$string['errincorrectuseridnumber'] = 'Errorea: inportatutako fitxategiko \'{$a}\' id zenbakia ez dago inongo erabiltzailetan.'; +$string['errduplicategradeidnumber'] = 'Errorea: ikastaroan \'{$a}\' ID zenbakia duten bi kalifikazio-elementu daude. Ezinezkoa da hori.'; +$string['errduplicateidnumber'] = 'Errorea: ID zenbakia bikoiztuta'; +$string['errincorrectgradeidnumber'] = 'Errorea: inportatutako fitxategiko \'{$a}\' ID zenbakia ez dago inongo kalifikazio-elementutan.'; +$string['errincorrectidnumber'] = 'Errorea: okerreko ID zenbakia'; +$string['errincorrectuseridnumber'] = 'Errorea: inportatutako fitxategiko \'{$a}\' ID zenbakia ez dago inongo erabiltzailetan.'; $string['error'] = 'Erroreak gertatzen ari dira'; $string['errorduringimport'] = 'Errorea gertatu da inportatzean: {$a}'; $string['fileurl'] = 'Urritiko fitxategiaren URL-a'; diff --git a/html/moodle2/langpacks/eu/grades.php b/html/moodle2/langpacks/eu/grades.php index 9f6bd67d6f..eb1b1ac2b8 100644 --- a/html/moodle2/langpacks/eu/grades.php +++ b/html/moodle2/langpacks/eu/grades.php @@ -36,7 +36,7 @@ $string['addoutcome'] = 'Gehitu ikas-emaitza'; $string['addoutcomeitem'] = 'Gehitu ikas-emaitza elementua'; $string['addscale'] = 'Gehitu eskala'; -$string['adjustedweight'] = 'Pisu doitua'; +$string['adjustedweight'] = 'Pisua doitu da'; $string['aggregateextracreditmean'] = 'Kalifikazioen batez bestekoa (aparteko kredituekin)'; $string['aggregatemax'] = 'Kalifikazio altuena'; $string['aggregatemean'] = 'Kalifikazioen batez bestekoa'; @@ -51,30 +51,22 @@ $string['aggregateoutcomes'] = 'Ikas-emaitzak agregazioan sartu'; $string['aggregateoutcomes_help'] = 'Gaituta, ikas-emaitzak agregazioan sartzen dira. Honen ondorioz, kategoriako guztirakoa espero ez zena izan daiteke.'; $string['aggregatesonly'] = 'Aldatu agregatutakoetara bakarrik'; +$string['aggregatesubcatsupgradedgrades'] = 'Oharra: "Agregazioan azpikategoriak sartu" agregazio-metodoaren ezarpena ezabatu da eguneraketa egitearekin batera. Aurretik "Agregazioan azpikategoriak sartu" ikastaro honetan erabiltzen zenez, gomendagarria da aldaketa honek kalifikazio-liburuan izandako eragina aztertzea.'; $string['aggregatesum'] = 'Naturala'; $string['aggregateweightedmean'] = 'Kalifikazioen batez besteko ponderatua'; $string['aggregateweightedmean2'] = 'Kalifikazioen batez besteko ponderatu sinplea'; $string['aggregation'] = 'Agregazioa'; $string['aggregationcoef'] = 'Agregazio-koefizientea'; $string['aggregationcoefextra'] = 'Aparteko kreditua'; -$string['aggregationcoefextra_help'] = 'Agregazioa \'Naturala\' edo \'Batez besteko ponderatu sinplea\' bada eta aparteko kredituen laukitxoa markatuta badago, kalifikazio-elementuaren gehienezko kalifikazioa ez zaio batuko kategoriaren gehienezko kalifikazioari. Ondorioz, ezin izango da gehienezko kalifikazioa lortu kategorian ez badu elementu guztietan gehienezko kalifikazioa lortzen. +$string['aggregationcoefextra_help'] = 'Agregazioa \'naturala\' edo \'batez besteko ponderatu sinplea\' bada eta aparteko kredituen laukitxoa markatuta badago, kalifikazio-elementuaren gehienezko kalifikazioa ez zaio batuko kategoriaren gehienezko kalifikazioari. Ondorioz, posiblea izango da kategorian gehienezko kalifikazioa lortzea kalifikazio-elementu guztietan gehienezko kalifikazioa lortu gabe. Guneko kudeatzaileak gehienezko kalifikaziotik gorako kalifikazioak gaitu baditu gehienezko kalifikaziotik gorako kalifikazioak ere egon daitezke. -Agregazioa \'Kalifikazioen batez bestekoa (aparteko kredituekin)\' bada eta aparteko kredituak zerotik gorako balorea ezarrita badu, aparteko kreditu horrekin biderkatuko da kalifikazioa, media kalkulatu ondorengo guztirakoari gehitu aurretik.'; +Agregazioa kalifikazioen \'batez bestekoa (aparteko kredituekin)\' bada eta aparteko kredituak zerotik gorako balorea ezarrita badu, aparteko kreditu horrekin biderkatuko da kalifikazioa, media kalkulatu ondorengo guztirakoari gehitu aurretik.'; $string['aggregationcoefextra_link'] = 'kalifikazioa/agregazioa'; $string['aggregationcoefextrasum'] = 'Aparteko kreditua'; $string['aggregationcoefextrasumabbr'] = '+'; $string['aggregationcoefextrasum_help'] = 'Aparteko kredituen laukitxoa markatuta badago, kalifikazio-elementuaren gehienezko kalifikazioa ez zaio batuko kategoriaren gehienezko kalifikazioari, eta beraz ezin izango da lortu gehienezko kalifikazioa (edo gehienezko kalifikaziotik gora, guneko kudeatzaileak gaitu badu) kategorian ez badu gehienezko kalifikazioa elementu guztietan.'; $string['aggregationcoefextraweight'] = 'Aparteko kredituen pisua'; -$string['aggregationcoefextraweight_help'] = '

    0tik gorako balore batek kalifikazio-elementu honen kalifikazioa Aparteko kreditu gisa erabiliko du agregazioan zehar. Zenbaki horrekin biderkatuko da kalifikazioaren balorea kalifikazio guztien batuketari gaineratu aurretik, baina elementua ez da kontuan hartiko zatiketan. Adibidez:

    - -
      -
    • 1. elementua 0tik 100era bitartean kalifikatzen da eta bere "Aparteko kreditua"ren balorea 2 ezarri da
    • -
    • 2. elementua 0tik 100era bitartean kalifikazten da eta bere "Aparteko kreditua"ren balorea 0.0000-tik ezkerretara dago
    • -
    • 3. elementua 0tik 100era bitartean kalifikazten da eta bere "Aparteko kreditua"ren balorea 0.0000-tik ezkerretara dago
    • -
    • 3 elementuak daude 1. Kategorian eta agregazio-estrategia "Kalifikazioen media (aparteko kredituekin)" da
    • -
    • Ikasle batez 20ko kalifikazioa du 1. elementuan, 40koa 2. elementuan eta 70ekoa 3. elementuan
    • -
    • Ikasleak 1. Kategorian izango duen guztirakoa 95/100 izango da horrela lortuta: 20*2 + (40 + 70)/2 = 95
    • -
    '; +$string['aggregationcoefextraweight_help'] = 'Aparteko kredituen pisuan 0tik gorako balio bat zehaztuz gero, kalifikazioak aparteko kredituen moduan erabiltzen da agregazioa egitean. Zenbaki horrekin biderkatuko da kalifikazioaren balorea kalifikazio guztien batuketari gaineratu aurretik.'; $string['aggregationcoefweight'] = 'Elementuaren pisua'; $string['aggregationcoefweight_help'] = 'Elementuaren pisua kategoriaren agregazioan erabiltzen da kategoria bereko beste kalifikazio-elementuekin alderatuta elementu horrek duen garrantzia nabarmentzeko.'; $string['aggregationcoefweight_link'] = 'kalifikazioa/agregazioa'; @@ -85,7 +77,7 @@ * Kalifikazio baxuena * Kalifikazio altuena * Kalifikazioen moda - Sarrien agertzen den kalifikazioa -* Kalifikazioen batuketa - Kalifikazio balore guztien batuketa, eskala bidezko kalifikazioak alde batera utzita.'; +* Naturala - Kalifikazio balore guztien batuketa, eskala bidezko kalifikazioak alde batera utzita.'; $string['aggregationhintdropped'] = '(Kokatua)'; $string['aggregationhintexcluded'] = '(Baztertua)'; $string['aggregationhintextra'] = '(Aparteko kreditua)'; @@ -193,6 +185,7 @@ $string['enableoutcomes'] = 'Ikas-emaitzak gaitu'; $string['enableoutcomes_help'] = 'Gaituz gero, helburuekin lotutako elementuak eskala bat edo gehiago erabilita kalifikatu ahal izango dira.'; $string['encoding'] = 'Kodifikazioa'; +$string['encoding_help'] = 'Aukeratu datuetarako karaktere-kodifikazioa. (Kodifikazio estandarra UTF-8 da.) Nahastu eta kodifikazio okerra aukeratzen bada, datuen inportazioa aurreikustean ohartuko zara.'; $string['errorcalculationbroken'] = 'Ziur aski erreferentzia zirkularra edo kalkulu-formula okerra'; $string['errorcalculationnoequal'] = 'Formulak berdin sinboloarekin hasi behar du (=1+2)'; $string['errorcalculationunknown'] = 'Formula baliogabea'; @@ -239,6 +232,7 @@ $string['fixedstudents'] = 'Ikasleen zutabe finkoa'; $string['fixedstudents_help'] = 'Ikasleen zutabea kalifikatzailearen txostenean finkatzen du, kalifikazioak horizontalean lerratuz.'; $string['forceimport'] = 'Behartu inportatzea'; +$string['forceimport_help'] = 'Behartu kalifikazioak inportatzea, fitxategia esportatu ondoren kalifikazioak eguneratuak izan badira ere.'; $string['forceoff'] = 'Behartu: Off'; $string['forceon'] = 'Behartu: On'; $string['forelementtypes'] = 'aukeratutako {$a}-(r)entzat'; @@ -248,8 +242,14 @@ $string['generalsettings'] = 'Ezarpen orokorrak'; $string['grade'] = 'Kalifikazioa'; $string['gradeadministration'] = 'Kalifikazioen kudeaketa'; +$string['gradealreadyupdated'] = '{$a} kalifikazio ez dira inportatu fitxategiko kalifikazioak kalifikazio-liburuan daudenak baino zaharragoak direlako. Hala ere inportazioarekin aurrera egiteko, erabili behartu kalifikazioak inportatzea aukera.'; $string['gradeanalysis'] = 'Kalifikazio-analisia'; $string['gradebook'] = 'Kalifikazio-liburua'; +$string['gradebookcalculationsfixbutton'] = 'Onartu kalifikazioen aldaketak eta konpondu kalkulu-erroreak'; +$string['gradebookcalculationsuptodate'] = 'Kalifikazio-liburuko kalkuluak eguneratuta daude. Agian orria eguneratu beharko duzu aldaketak ikusi ahal izateko.'; +$string['gradebookcalculationswarning'] = 'Oharra: Errore batzuk atzeman dira kalifikazio-liburuko kalifikazioak kalkulatzean. Zure ikastaroa oraindik ez bada hasi edo abian badago, gomendagarria da erroreak beheko botoian sakatuta konpontzea, nahiz eta horrek kalifikazio batzuk aldatzea suposa dezakeen. Zure ikastaroa dagoeneko bukatu bada eta kalifikazioak bidali badira, ziur aski ez duzu arazo hau konpondu nahiko. + +Bertsio berriagoa {$a->currentversion} da; zuk kalifikazio-liburuaren {$a->gradebookversion} bertsioa erabiltzen ari za. Aldaketen zerrenda bat ikusi dezakezu Kalifikazio-liburuaren kalkuluen aldaketetan.'; $string['gradebookhiddenerror'] = 'Kalifikazio-liburua konfiguratuta dago ikasleei ezer ez erakusteko.'; $string['gradebookhistories'] = 'Kalifikazioen historiak'; $string['gradebooksetup'] = 'Kalifikazio-liburuaren ezarpenak'; @@ -280,6 +280,7 @@ $string['gradeexportuserprofilefields'] = 'Erabiltzailearen profilaren eremuak kalifikazioen esportazioan'; $string['gradeexportuserprofilefields_desc'] = 'Sartu erabiltzailearen profilaren eremuak kalifikazioen esportazioan, komaz banatuta.'; $string['gradeforstudent'] = '{$a->student}
    {$a->item}{$a->feedback}'; +$string['gradegrademinmax'] = 'Hasierako gutxieneko eta gehienezko kalifikazioak'; $string['gradehelp'] = 'Kalifikazioei buruzko laguntza'; $string['gradehistorylifetime'] = 'Kalifikazio-historiaren iraupena'; $string['gradehistorylifetime_help'] = 'Lotutako kalifikazio-tauletan izandako aldaketen historiala zenbat denboraz mantendu nahi duzun zehazten du. Ahal beste mantentzea gomendatzen da. Funtzionamendu-arazoak edo datu-basean espazio txikia baduzu, saiatu balore txikiagoa ipintzen.'; @@ -292,6 +293,7 @@ $string['gradeitemislocked'] = 'Kalifikazio hau blokeatuta dago kalifikazio-liburuan. Jarduera honen kalifikazioetan egindako aldaketak ez dira kopiatuko kalifikazio-liburuan desblokeatu arte.'; $string['gradeitemlocked'] = 'Kalifikazioa blokeatu da'; $string['gradeitemmembersselected'] = 'Kalifikaziotik kanpo daudenak'; +$string['gradeitemminmax'] = 'Gutxieneko eta gehienezko kalifikazioak kalifikazio-elementuaren ezarpenetan zehaztuta dagoen eran.'; $string['gradeitemnonmembers'] = 'Kalifikazioan daudenak'; $string['gradeitemremovemembers'] = 'Kalifikazioan sartu'; $string['gradeitems'] = 'Kalifikazio-elementuak'; @@ -300,6 +302,7 @@ $string['gradeletter'] = 'Kalifikazio-letra'; $string['gradeletter_help'] = 'Kalifikazio-letrak kalifikazio-tarteak adierazteko erabiltzen diren letrak, A, B, C,... edo hitzak dira, adibidez, Ezin hobea, Ikaragarria, Nahikoa,...'; $string['gradeletternote'] = 'Kalifikazio-letra bat ezabatzeko, bakarrik letra horren
    hiru testu-eremuetako bat hustu eta aldaketa gorde.'; +$string['gradeletteroverridden'] = 'Berezko kalifikazio-letrak salbuespena dago une honetan.'; $string['gradeletters'] = 'Kalifikazio-letrak'; $string['gradelocked'] = 'Kalifikazioa blokeatuta dago'; $string['gradelong'] = '{$a->grade} / {$a->max}'; @@ -339,7 +342,9 @@ * Testua - Feecback-a bakarrik Balorea eta eskala motako kalifikazioak bakarrik agrega daitezke. Jarduera baten kalifikaziorako kalifikazio-mota jardueraren ezerpenek orrian aukeratzen da.'; +$string['gradevaluetoobig'] = 'Kalifikazioren batek gehienez baimendutako {$a} balioa baino balio handiagoa du.'; $string['gradeview'] = 'Ikusi kalifikazioa'; +$string['gradewasmodifiedduringediting'] = '{$a->username}-(r)en {$a->itemname}-(r)entzat sartutako kalifikazioa alde batera utzi da beste norbaitek orain dela gutxiago eguneratu duelako.'; $string['gradeweighthelp'] = 'Kalifikazioen pisuari buruzko laguntza'; $string['groupavg'] = 'Taldearen batez bestekoa'; $string['hidden'] = 'Ezkutuan'; @@ -362,6 +367,7 @@ $string['hidequickfeedback'] = 'Feedback azkarra ezkutatu'; $string['hideranges'] = 'Ibiltartea ezkutatu'; $string['hidetotalifhiddenitems'] = 'Ezkutatu guztirakoak ezkutuko elementuak baldin badituzte.'; +$string['hidetotalifhiddenitems_help'] = 'Ezarpen honek zehazten du ezkutuan dauden kalifikazio-elementuen denerakoak ikasleei erakutsiko zaizkien edo gidoiarekin (-) ordezkatuko diren. Erakutsiz gero, denerakoa ezkutuan dauden elementuak kontuan izanda edo kontuan hartu gabe kalkulatuko den zehaz daiteke.'; $string['hidetotalshowexhiddenitems'] = 'Erakutsi guztirakoak ezkutuko elementuak baztertuta'; $string['hidetotalshowinchiddenitems'] = 'Erakutsi guztirakoak ezkutuko elementuak barne'; $string['hideverbose'] = 'Ezkutatu {$a->category} {$a->itemmodule} {$a->itemname}'; @@ -373,13 +379,24 @@ $string['ignore'] = 'Baztertu'; $string['import'] = 'Inportatu'; $string['importcsv'] = 'inportatu CSV'; +$string['importcsv_help'] = 'Kalifikazioak CSV fitxategiak erabiliz inporta daitezke hurrengo formatua erabilita: + +* Errenkada bakoitzak erregistro bana izango du +* Erregistro bakoitzak datu multzoak izango ditu, komaz edo beste bereizle batez bananduta. +* Lehen erregistroak eremuen izenen zerrenda izango du, fitxategiko beste erregistroen formatua zehaztuko duena +* Erabiltzailea identifikatuko duen eremu bat beharrezkoa da - erabiltzaile-izena, ID zenbakia edo e-posta helbidea + +Formatu egokia duen fitxategi bat lortu daitek aurretik kalifkazio batzuk esportatuta. Fitxategi hori gero editatu eta CSV formatuarekin gorde daiteke.'; $string['importcustom'] = 'Inportatu pertsonalizatutako ikas-emaitza bezala (ikastaro honetan baino ez)'; +$string['importerror'] = 'Errorea gertatu da, script honi ez zaio deitu parametro egokiekin.'; $string['importfailed'] = 'Inportatzeak kale egin du. Ez da daturik inportatu.'; $string['importfeedback'] = 'Inportatu feedbacka'; $string['importfile'] = 'Inportatu fitxategia'; $string['importfilemissing'] = 'Ez da fitxategirik jaso; jo atzera formulariora eta ziurtatu balio duen fitxategia igo duzula.'; $string['importfrom'] = 'Inportatu hemendik:'; +$string['importoutcomenofile'] = 'Igotako fitxategia hutsik dago edo kaltetuta dago. Mesedez egiaztatu fitxategi onargarria dela. Errorea {$a} lerroan aurkitu da; hau gerta daiteke datuen errenkadak lehen errenkadaren (goiburua) zutabe-kopuruarekin bat ez etortzeagatik edo inportatutako fitxategiak espero ziren goiburuak faltan dituelako. Begiratu esportatutako fitxategi bat goiburu egoki baten adibidea ikusteko.'; $string['importoutcomes'] = 'Inportatu ikas-emaitzak'; +$string['importoutcomes_help'] = 'Ikas-emaitzak CSV fitxategi bat erabiliz inporta daitezke, esportatutako ikas-emaitzen CSV fitxategi baten formatua erabilita.'; $string['importoutcomesuccess'] = 'Inportatutako ikas-emaitza ({$a->name}) #{$a->id} ID-arekin'; $string['importplugins'] = 'inportatu pluginak'; $string['importpreview'] = 'Inportatu aurrebista'; @@ -396,6 +413,7 @@ $string['incorrectminmax'] = 'Gutxienenekoak gehienekoak baino txikiagoa izan behar du.'; $string['inherit'] = 'Heredatu'; $string['intersectioninfo'] = 'Ikaslea/Kalifikazioaren informazioa'; +$string['invalidgradeexporteddate'] = 'Esportazio-datak ez du balio duela urtebete baino gehiagokoa delako, etorkizunekoa delako, edo formatu baliogabea duelako.'; $string['item'] = 'Elementua'; $string['iteminfo'] = 'Elementuaren informazioa'; $string['iteminfo_help'] = 'Elementuari buruzko informazioa sartzeko eremua. Bertan sartutako testua ez da beste inon agertuko.'; @@ -415,9 +433,11 @@ $string['letterreal'] = 'Letra (erreala)'; $string['letters'] = 'Letrak'; $string['linkedactivity'] = 'Estekatutako jarduera'; +$string['linkedactivity_help'] = 'Ezarpen honek ikas-emaitzari estekatutako jarduera bat zehazten du. Ikasleen errendimendua neurtzeko erabil daiteke, jardueraren ebaluazioa kontuan hartu gabeko irizpideak erabilita.'; $string['linktoactivity'] = 'Esteka {$a->name} jarduerara'; $string['lock'] = 'Blokeatu'; $string['locked'] = 'Blokeatuta'; +$string['locked_help'] = 'Markatuz gero, kalifikazioak ezingo dira automatikoki eguneratu lotutako jardueratik.'; $string['locktime'] = 'Blokeatu honen ondoren'; $string['locktimedate'] = 'Blokeatu honen ondoren: {$a}'; $string['lockverbose'] = 'Blokeatu {$a->category} {$a->itemmodule} {$a->itemname}'; @@ -425,8 +445,11 @@ $string['lowgradeletter'] = 'Baxua'; $string['manualitem'] = 'Eskuzko elementua'; $string['mapfrom'] = 'Mapa hemendik'; -$string['mappings'] = 'Kalifikazio-elementuen mapeoa'; +$string['mapfrom_help'] = 'Aukeratu erabiltzailea identifikatzen duen datua duen kalkulu-orriko zutabea, hala nola erabiltzaile-izena, erabiltzailearen IDa edo e-posta helbidea.'; +$string['mappings'] = 'Kalifikazio-elementuen lotura'; +$string['mappings_help'] = 'Kalkulu-orriko kalifikazio-zutabe bakoitzeko, aukeratu dagokion kalifikazio-elementua kalifikazioak bertara inportatzeko.'; $string['mapto'] = 'Mapa hona'; +$string['mapto_help'] = 'Aukeratu \'Mapa hemendik\' aukeran hautatutako datu identifikatzaile berdina.'; $string['max'] = 'Altuena'; $string['maxgrade'] = 'Gehien. Kal.'; $string['meanall'] = 'Kalifikazio guztiak'; @@ -436,11 +459,41 @@ $string['median'] = 'Ertaina'; $string['min'] = 'Baxuena'; $string['minimum_show'] = 'Erakutsi gutxieneko kalifikazioa'; +$string['minimum_show_help'] = 'Gutxieneko kalifikazioa kalifikazioak eta pisuak kalkulatzeko erabiltzen da. Ez bada erakusten, gutxieneko kalifikazioa zero izango da berez eta ezingo da editatu.'; +$string['minmaxtouse'] = 'Kalkuluetan erabilitako gutxieneko eta gehienezko kalifikazioak'; +$string['minmaxtouse_desc'] = 'Ezarpen honek zehazten du hasierako gutxieneko eta gehienezko kalifikazioak erabiliko diren edo kalifikazio-elementu bakoitzean zehaztuko diren kalifikazio-liburuan erakutsiko diren kalifikazioak kalkulatzean. Aukera hau erabilera gutxiko uneetan aldatzea gomendatzen da, hori egitean kalifikazio guztiak berriz kalkulatuko direlako eta horrek zerbitzariaren karga igo dezakeelako.'; +$string['minmaxtouse_help'] = 'Ezarpen honek zehazten du hasierako gutxieneko eta gehienezko kalifikazioak erabiliko diren edo kalifikazio-elementu bakoitzean zehaztuko diren kalifikazio-liburuan erakutsiko diren kalifikazioak kalkulatzean.'; +$string['minmaxupgradedgrades'] = 'Oharra: Kalifikazio batzuk aldatu dira erakutsitako kalifikazioak kalkulatzean erabiltzen diren gutxieneko eta gehienezko kalifikazioak aldatzean sortutako kalifikazio-liburuaren ahultasun bat konpontzeko.'; +$string['minmaxupgradefixbutton'] = 'Konpondu ahultasunak'; +$string['minmaxupgradewarning'] = 'Oharra: Ahultasun bat aurkitu da kalifikazio batzuetan kalifikazioak kalkulatzean erabiltzen diren gutxieneko eta gehienezko kalifikazioak aldatzearen ondorioz. Ahultasun hori konpontzeko beheko botoian klik egitea gomendatzen da, nahiz eta honek kalifikazio batzuk aldatuko dituen arren.'; +$string['missingitemtypeoreid'] = 'Array gakoa (itemtype edo eid) falta da grade_edit_tree_column_select::get_item_cell($item, $params)-ren bigarren parametroan'; $string['missingscale'] = 'Eskala aukeratu beha da'; $string['mode'] = 'Modua'; $string['modgrade'] = 'Kalifikazioa'; +$string['modgradecantchangegradetype'] = 'Ezin duzu mota aldatu, dagoeneko elementu honentzako kalifikazioak daudelako.'; +$string['modgradecantchangegradetypemsg'] = 'Kalifikazio batzuk dagoeneko esleitu dira, eta ondorioz ezin da kalifikazio-mota aldatu. Gehienezko kalifikazioa aldatu nahi baduzu, aurretik existitzen diren kalifikazioak berriz eskalatu nahi dituzun aukeratu behar duzu.'; +$string['modgradecantchangegradetyporscalemsg'] = 'Kalifikazio batzuk dagoeneko esleitu dira, eta ondorioz ezin dira mota eta eskala aldatu.'; +$string['modgradecantchangeratingmaxgrade'] = 'Ezin duzu gehienezko kalifikazioa aldatu puntuazioak dituen jarduerarentzat dagoeneko kalifikazioak daudenean.'; +$string['modgradecantchangescale'] = 'Ezin duzu eskala aldatu, elementu honentzat dagoeneko kalifikazioak daudelako.'; +$string['modgradecategorycantchangegradetypemsg'] = 'Kategoria honekin lotuta dauden kalifikazioa baliogabetuak izan dira. Dagoeneko kalifikazio batzuk esleitu direnez, kalifikazio-mota ezin da aldatu. Gehienezko kalifikazioa aldatu nahi baduzu, aurretik existitzen diren kalifikazioak berriz eskalatu nahi dituzun aukeratu behar duzu.'; +$string['modgradecategorycantchangegradetyporscalemsg'] = 'Kategoria honekin lotuta dauden kalifikazioak baliogabetuak izan dira. Dagoeneko kalifikazio batzuk esleitu direnez, kalifikazio-mota ezin da aldatu.'; +$string['modgradecategoryrescalegrades'] = 'Berriz eskalatu baliogabetutako kalifikazioak'; +$string['modgradecategoryrescalegrades_help'] = 'Kalifikazio-liburuko elementu baten gehienezko kalifikazioa aldatzean zehaztu behar duzu dagoeneko existitzen diren ehunekoak ere aldatu beharko diren edo ez. + +\'Bai\' aukeratuz gero, existitzen diren baliogabetutako kalifikazio guztiak berriz eskalatuak izango dira kalifikazio-ehunekoak mantendu ahal izateko. + +Adibidez, \'Bai\' aukeratuz gero, elementu baten gehienezko kalifikazio 10etik 20ra aldatzeak 10/6 (%60) kalifikazio bat berriz eskalatzea eta 20/12 (%60) izatea suposatuko du. \'Ez\' aukeratuz gero, kalifikazioa ez da aldatuko, eta beraz eskuz aldatu beharko dira puntuazioak egokiak direla bermatzeko.'; $string['modgradedonotmodify'] = 'Ez aldatu ezarrita dauden kalifikazioak'; +$string['modgradeerrorbadpoint'] = 'Kalifikazio balio baliogabea. 1 eta {$a} arteko zenbaki oso bat izan behar da.'; +$string['modgradeerrorbadscale'] = 'Eskala baliogabea aukeratu da. Mesedez ziurtatu beheko aukeretatik hautatzen duzula.'; +$string['modgrade_help'] = 'Aukeratu jarduera honetan erabiliko den kalifikazio-mota. "Eskala" aukeratuz gero, ondoren zabaltzen den "eskala" menuan bat aukeratu beharko duzu.'; $string['modgrademaxgrade'] = 'Gehieneko kalifikazioa'; +$string['modgraderescalegrades'] = 'Berriz eskalatu existitzen diren kalifikazioak'; +$string['modgraderescalegrades_help'] = 'Kalifikazio-elementu baten gehienezko kalifikazioa aldatzen duzunean zehaztu behar duzu existitzen diren kalifikazioen ehunekoak ere aldatuko diren edo ez. + +\'Bai\' aukeratuz gero existitzen diren kalifikazioak berriz eskalatuko dira ehunekoa aldatu ez dadin. + +Adibidez, \'Bai\' aukeratuz gero, elementu baten gehienezko kalifikazio 10etik 20ra aldatzeak 10/6 (%60) kalifikazio bat berriz eskalatzea eta 20/12 (%60) izatea suposatuko du. \'Ez\' aukeratuz gero, kalifikazioa 10/6 (%60) izatetik 20/6 (%30) izatera pasakoda, eta beraz eskuz aldatu beharko dira puntuazioak egokiak direla bermatzeko.'; $string['modgradetype'] = 'Mota'; $string['modgradetypenone'] = 'Bat ere ez'; $string['modgradetypepoint'] = 'Puntuazioa'; @@ -451,6 +504,9 @@ $string['multfactor'] = 'Biderkatzailea'; $string['multfactor_help'] = 'Kalifikazio-elementu honen kalifikazio guztiak zein faktorerekin biderkatuko diren, beti ere kalifikazio maximoa gainditu gabe. Adibidez, biderkatzailea 2 bada eta kalifikazio maximoa 100, 50etik beherako balioak bikoiztuko dira eta hortik gorakoak 100 baliora aldatuko dira.'; $string['multfactorvalue'] = 'Biderkatzailearen balorea {$a}rako'; +$string['mustchooserescaleyesorno'] = 'Existitzen diren kalifikazioak berriz eskalatu edo ez aukeratu behar duzu.'; +$string['mygrades'] = 'Erabiltzailearen menuko kalifikazioen esteka'; +$string['mygrades_desc'] = 'Ezarpen honek erabiltzailearen menutik kanpoko kalifikazio-liburu bat estekatzea baimentzen du.'; $string['mypreferences'] = 'Nire hobespenak'; $string['myreportpreferences'] = 'Nire txostenaren hobespenak'; $string['navmethod'] = 'Nabigazio-metodoa'; @@ -474,6 +530,7 @@ $string['nonweightedpct'] = '% ez neurtua'; $string['nooutcome'] = 'Ez dago ikas-emaitzarik'; $string['nooutcomes'] = 'Ikas-emaitzak ikastaroko ikas-emaitza batekin lotuta egon behar du, baina ikastaro honetan ez dago ikas-emaitzarik. Gehitu nahi al duzu bat?'; +$string['nopermissiontoresetweights'] = 'Ez duzu pisuak berrabiarazteko baimenik.'; $string['nopublish'] = 'Ez argitaratu'; $string['noreports'] = 'Ez zaude matrikulatuta hemen, ez zara irakaslea gune honetako ikastaroetan.'; $string['norolesdefined'] = 'Definitu gabeko rolak hemen: Kudeaketa > Kalifikazioak > Ezarpen orokorrak > Kalifikatutako rolak'; @@ -513,8 +570,15 @@ $string['outcomestandard_help'] = 'Gune osoan, ikastaro guztietan, dago eskuragarri edozein ikas-emaitza estandar.'; $string['overallaverage'] = 'Batez besteko orokorra'; $string['overridden'] = 'Baliogabetuak'; +$string['overridden_help'] = 'Markatuz gero, aurrerantzean kalifikazioa ezingo da lotutako jardueratik aldatu ahalko. + +Kalifikazioa kalifikazio-txostenean editatzen denean, baliogabetutako laukitxoa automatikoki markatuko da. Halere, desmarkatu ahal da lotutako jardueratik kalifikazioa aldatzeko aukera izateko.'; $string['overriddennotice'] = 'Jarduera honetako zure azken kalifikazioa eskuz egokitu da.'; +$string['overridecat'] = 'Baimendu kategoria-kalifikazioak eskuz baliogabetzea.'; +$string['overridecat_help'] = 'Ezarpen hau desgaituz gero erabiltzaileek ezingo dituzte kategoria-kalifikazioak baliogabetu.'; $string['overridesitedefaultgradedisplaytype'] = 'Baliogabetu gunearen berezko baloreak'; +$string['overridesitedefaultgradedisplaytype_help'] = 'Markatuz gero, ikastaroko kalifikazio-letrak eta mugak ezarri daitezke, guneko berezkoak erabili beharrean.'; +$string['overrideweightofa'] = 'Baliogabetu {$a}-(r)en pisua'; $string['parentcategory'] = 'Goragoko kategoria'; $string['pctoftotalgrade'] = '% kalifikazio orokorretik'; $string['percent'] = 'Portzentajea'; @@ -526,6 +590,7 @@ $string['percentshort'] = '%'; $string['plusfactor'] = 'Konpentsatu'; $string['plusfactor_help'] = 'Konpentsazioa kalifikazio-elementu honen kalifikazio guztiei gehituko zaien zenbakia da, biderkatzailea aplikatu ondoren.'; +$string['plusfactorvalue'] = 'Konpentsatu {$a}-(r)en balioa'; $string['points'] = 'puntuak'; $string['pointsascending'] = 'Puntuak gorantz sailkatu'; $string['pointsdescending'] = 'Puntuak beherantz ordenatu'; @@ -550,16 +615,21 @@ $string['rangesdecimalpoints'] = 'Hamartarrak erakutsi ibiltarteetan'; $string['rangesdecimalpoints_help'] = 'Kalifikazio zutabe baten gainean erakutsi beharreko hamartarren kopurua. Elementua kalifikatuta anula daiteke ezarpen hau.'; $string['rangesdisplaytype'] = 'Ibiltartea erakusteko modua'; +$string['rangesdisplaytype_help'] = 'Ezarpen honek ibiltartea nola erakutsiko diren zehazten du: benetako kalifikazioak, ehunekoak edo letrak, edo kategoriaren edo kalifikazio-elemetuarena (heredatutakoa).'; $string['rank'] = 'Sailkapena'; $string['rawpct'] = '% gordina'; $string['real'] = 'Erreala'; $string['realletter'] = 'Erreala (letra)'; $string['realpercentage'] = 'Erreala (portzentajea)'; $string['recalculatinggrades'] = 'Kalifikazioak berriz kalkulatu'; +$string['recovergradesdefault'] = 'Berreskuratu kalifikazioen berezkoak'; +$string['recovergradesdefault_help'] = 'Berez berreskuratu kalifikazio zaharrak ikasle bat ikastaro batean berriz matrikulatzean.'; $string['refreshpreview'] = 'Freskatu aurreikuspena'; $string['regradeanyway'] = 'Kalifikatu berriz hala ere'; $string['removeallcoursegrades'] = 'Kalifikazio guztiak ezabatu'; +$string['removeallcoursegrades_help'] = 'Markatuz gero, kalifikazio-liburura eskuz gehitutako kalifikazio-elementu guztiak ezabatuko dira, baliogabetutakoak, kanpoan utzitako, ezkutatutako eta blokeatutako kalifikazioak euren kalifikazio eta datuekin batera. Soilik jarduerekin lotutako kalifikazio-elementuak mantenduko dira.'; $string['removeallcourseitems'] = 'Elementu eta kategoria guztiak ezabatu'; +$string['removeallcourseitems_help'] = 'Markatuz gero, kalifikazio-liburura eskuz gehitutako kategoriak eta kalifikazio-elementu guztiak ezabatuko dira, baliogabetutakoak, kanpoan utzitako, ezkutatutako eta blokeatutako kalifikazioak euren kalifikazio eta datuekin batera. Soilik jarduerekin lotutako kalifikazio-elementuak mantenduko dira.'; $string['report'] = 'Txostena'; $string['reportdefault'] = 'Berezko ezarpena ({$a})'; $string['reportplugins'] = 'Txostenetarako plugin-ak'; @@ -569,6 +639,7 @@ $string['resetweightsshort'] = 'Berrabiarazi pisuak'; $string['respectingcurrentdata'] = 'Egungo ezarpenak ez dira aldatu'; $string['rowpreviewnum'] = 'Zutabeak aurreikusi'; +$string['rowpreviewnum_help'] = 'Inportatzera doazen datuak aurreikusi daitezke inportazioa konfirmatu aurretik. Ezarpen honek zenbat errenkada aurreikusiko diren zehazten du.'; $string['savechanges'] = 'Gorde aldaketak'; $string['savepreferences'] = 'Hobespenak gorde'; $string['scaleconfirmdelete'] = 'Ziur al zaude "{$a}" eskala ezabatu nahi duzula?'; @@ -579,12 +650,13 @@ $string['selectauser'] = 'Aukeratu erabiltzaile bat'; $string['selectdestination'] = 'Aukeratu helbidea honentzat: {$a}'; $string['separator'] = 'Bereizlea'; +$string['separator_help'] = 'Aukeratu CSV fitxategian erabiliko den bereizlea. (Normalean koma bat izaten da.)'; $string['sepcolon'] = 'Bi puntu'; $string['sepcomma'] = 'Koma'; $string['sepsemicolon'] = 'Puntu eta koma'; $string['septab'] = 'Tabuladorea'; $string['setcategories'] = 'Ezarri kategoriak'; -$string['setcategorieserror'] = 'Neurketak esleitu aurretik ikastaroko kategoriak ezarri behar dituzu.'; +$string['setcategorieserror'] = 'Pisuak esleitu aurretik ikastaroko kategoriak ezarri behar dituzu.'; $string['setgradeletters'] = 'Letraz kalifikatu'; $string['setpreferences'] = 'Hobespenak'; $string['setting'] = 'Ezarpena'; @@ -595,11 +667,16 @@ $string['showallhidden'] = 'Erakutsi ezkutukoak'; $string['showallstudents'] = 'Ikasle guztiak erakutsi'; $string['showanalysisicon'] = 'Erakutsi kalifikazio-analisiaren ikonoa'; +$string['showanalysisicon_desc'] = 'Berez kalifikazio-analisiaren ikonoa erakutsi edo ez. Jarduera-moduluak baimentzen badu, kalifikazio-analisiaren ikonoak kalifikazioaren eta nola lortu duenaren azalpen zehatzagoa erakusten duen orri bat estekatuko du'; +$string['showanalysisicon_help'] = 'Jarduera-moduluak baimentzen badu, kalifikazio-analisiaren ikonoak kalifikazioaren eta nola lortu duenaren azalpen zehatzagoa erakusten duen orri bat estekatuko du'; $string['showaverage'] = 'Erakutsi batez bestekoa'; +$string['showaverage_help'] = 'Batez bestearen zutabea erakustea edo ez. Kontuan izan parte hartzaileek besteen kalifikazioak kalkulatu ahalko dituztela batez bestekoa kalifikazio kopuru txikiekin kalkulatuak badira. Errendimendu arrazoiengatik, batez bestekoa gutxi gorabeherakoa izango da ezkutuko elementuen menpe badago.'; $string['showaverages'] = 'Batez bestekoak erakutsi'; $string['showaverages_help'] = 'Gaituta, kalifikatzailearen txostenean kategoria eta elementu bakoitzerako batez bestekoa erakusten dituen beste lerro bat erakusten du.'; $string['showcalculations'] = 'Kalkuluak erakutsi'; $string['showcalculations_help'] = 'Gaituz gero, editatzean kalkulagailu baten ikonoa agertzen da kalifikazio-elementu edo kategoria bakoitzaren ondoan elementua kalkulatua delako adierazlea erakutsiz.'; +$string['showcontributiontocoursetotal'] = 'Erakutsi ikastaroaren denerako ekarpena'; +$string['showcontributiontocoursetotal_help'] = 'Kalifikazio-elementu bakoitzak ikastaroaren denera egiten dion ekarpenaren ehunekoa (ponderazioak aplikatu ondoren) duen zutabea erakustea edo ez.'; $string['showeyecons'] = 'Erakutsi ikonoak erakutsi/ezkutatu'; $string['showeyecons_help'] = 'Kalifikazio bakoitzaren ondoan erakutsi/ezkutatu ikonoa erakutsi ala ez (erabiltzaileak ikus dezakeen kontrolatzeko).'; $string['showfeedback'] = 'Erakutsi feedbacka'; @@ -608,7 +685,13 @@ $string['showgrade_help'] = 'Kalifikazioen zutabea erakutsi?'; $string['showgroups'] = 'Taldeak erakutsi'; $string['showhiddenitems'] = 'Erakutsi ezkutuko elementuak'; -$string['showhiddenuntilonly'] = 'Noiz arte ezkutuan bakarrik'; +$string['showhiddenitems_help'] = 'Ezkutuan dauden kalifikazio-elementuak guztiz ezkutuan edo izenak ikusgai eta kalifikazioak ezkutuan egongo diren. + +* Erakutsi ezkutuko elementuak - Ezkutuan dauden kalifikazioen izenak ikusgai daude baina ikasleen kalifikazioak ezkutuan. +* Ezkutuan data heldu arte - "ezkutuan data heldu arte" zehaztuta duten kalifikazio-elementua guztiz ezkutuan dago data heldu arte, eta ondoren elementua guztiz erakutsiko da. +* Ez erakutsi - Ezkutuan dauden elementuak guztiz ezkutuan daude.'; +$string['showhiddenuntilonly'] = 'Ezkutuan data heldu arte'; +$string['showingaggregatesonly'] = 'Erakutsi batez bestekoak bakarrik'; $string['showingfullmode'] = 'Ikuspegi osoa erakusten'; $string['showinggradesonly'] = 'Kalifikazioak bakarrik erakusten'; $string['showlettergrade'] = 'Erakutsi kalifikazio-letrak'; @@ -620,9 +703,13 @@ $string['shownumberofgrades'] = 'Erakutsi kalifikazio-kopurua batez bestekoetan'; $string['shownumberofgrades_help'] = '

    Media bakoitzaren atzean parentesi artean media kalkulatzeko erabili den kalifikazio-kopurua erakutsi ala ez, adibidez 45 (34).

    '; $string['showonlyactiveenrol'] = 'Erakutsi bakarrik matrikula aktiboak'; +$string['showonlyactiveenrol_help'] = 'Ezarpen honek zehazten du kalifikazio-txostenean matrikulatutako erabiltzaile aktiboak soilik erakutsiko diren edo ez. Gaituz gero, kontua etenda duten erabiltzaileak ez dira kalifikazio-liburuan erakutsiko.'; $string['showpercentage'] = 'Erakutsi portzentajea'; $string['showpercentage_help'] = 'Erakutsi ehunekoaren balorea kalifikazio-elementu bakoitzerako?'; $string['showquickfeedback'] = 'Erakutsi feedback azkarra'; +$string['showquickfeedback_help'] = 'Gaitzu gero, edizioa aktibatuta dagoenean, kalifikazio bakoitzarekin batera feedback-aren testurako puntutxoak dituen laukia agertuko da, kalifikazio anitzen feedback-ak batera editatzeko aukera emanda. Aldaketak gorde eta nabarmentzen dira eguneratu botoian klik egitean. + +Kontuan izan feedback-a kalifikazio txostenean editatzen direnean baliogabetuta egotearen etiketa jarriko zaio, eta horrek esan nahi du ondoren ezingo dela lotutako jardueratik aldatu.'; $string['showrange'] = 'Erakutsi ibilarteak'; $string['showrange_help'] = 'Ibilarteen zutabea erakutsi?'; $string['showranges'] = 'Ibiltarteak erakutsi'; @@ -633,7 +720,7 @@ $string['showuserimage_help'] = 'Kalfikatzailearen txostenean izenaren ondoren erabiltzailearen profilaren irudia erakutsi ala ez'; $string['showverbose'] = 'Erakutsi {$a->category} {$a->itemmodule} {$a->itemname}'; $string['showweight'] = 'Erakutsi ponderazioak'; -$string['showweight_help'] = 'Kalifikazio pisuaren zutabea erakutsi?'; +$string['showweight_help'] = 'Kalifikazio-pisuaren zutabea erakutsi?'; $string['simpleview'] = 'Ikuspegi sinplea'; $string['singleview'] = 'Ikuspegi sinplea ondokoarentzat: {$a}'; $string['sitewide'] = 'Gune osoa'; @@ -648,9 +735,11 @@ $string['student'] = 'Ikaslea'; $string['studentsperpage'] = 'Ikasleak orriko'; $string['studentsperpage_help'] = 'Orriko erakutsi beharreko ikasle-kopurua kalifikatzailearen txostenean'; +$string['studentsperpagereduced'] = 'Orri bakoitzeko ikasle kopurua {$a->originalstudentsperpage}-tik {$a->studentsperpage}-ra murriztu da. Pentsatu ezazu PHP-ren max_input_vars ezarpena {$a->maxinputvars}-tik gora ezartzea.'; $string['subcategory'] = 'Ohiko kategoria'; $string['submissions'] = 'Bidalketak'; $string['submittedon'] = 'Bidalita: {$a}'; +$string['sumofgradesupgradedgrades'] = 'Oharra: "Kalifikazioen batura" agregazio-metodoa "Naturala" izatera pasa da eguneraketa egitearekin batera. Aurretik ikastaro honetan "Kalifikazioen batura" erabiltzen zenez, kalifikazio-liburuan aldaketa honen eragina berrikustea gomendatzen da.'; $string['switchtofullview'] = 'Aldatu ikuspegi osora'; $string['switchtosimpleview'] = 'Aldatu ikuspegi sinplera'; $string['tabs'] = 'Tabuladoreak'; @@ -667,11 +756,15 @@ $string['typevalue'] = 'Balorea'; $string['uncategorised'] = 'Kategorizatu gabea'; $string['unchangedgrade'] = 'Kalifikazioa ez da aldatu'; +$string['unenrolledusersinimport'] = 'Inportazio honek une honetan ikastaroan matrikulatua ez dauden hurrengo ikasle hauen kalifikazioak barne zituen: {$a}'; $string['unlimitedgrades'] = 'Mugarik gabeko kalifikazioak'; +$string['unlimitedgrades_help'] = 'Berez, kalifikazioak kalifikazio-elementuaren gutxieneko eta gehienezko balioek mugatzen dituzte. Ezarpen hau gaituz gero, muga hori kentzen da, eta kalifikazio-liburuan %100etik gorako kalifikazioak sartzea ahalbidetzen du.'; $string['unlock'] = 'Desblokeatu'; $string['unlockverbose'] = 'Desblokeatu {$a->category} {$a->itemmodule} {$a->itemname}'; $string['unused'] = 'Erabili gabea'; $string['updatedgradesonly'] = 'Kalifikazio berriak edo eguneratutakoak baino ez esportatu'; +$string['upgradedgradeshidemessage'] = 'Baztertu jakinarazpena'; +$string['upgradedminmaxrevertmessage'] = 'Desegin aldaketak'; $string['uploadgrades'] = 'Kalifikazioak igo'; $string['useadvanced'] = 'Funtzio aurreratuak erabili'; $string['usedcourses'] = 'Erabilitako ikastaroak'; @@ -680,26 +773,35 @@ $string['usenoscale'] = 'Ez erabili eskala'; $string['usepercent'] = 'Portzentajea erabili'; $string['user'] = 'Erabiltzailea'; +$string['userenrolmentsuspended'] = 'Erabiltzaile-matrikulazioa eten da.'; $string['userfields_show'] = 'Erakutsi erabiltzailearen eremuak'; +$string['userfields_show_help'] = 'Erakutsi e-posta helbidearen moduko erabiltzaile eremu gehigarriak kalifikazio-txostenean. Erakutsiko diren eremu zehatzak gune mailako showuseridentity ezarpenak kontrolatzen du.'; $string['usergrade'] = 'Erabiltzailea {$a->fullname} ({$a->useridnumber}) elementu honetan {$a->gradeidnumber}'; $string['userid'] = 'Erabiltzailearen IDa'; $string['useridnumberwarning'] = 'ID zenbakia ez duten erabiltzaileak baztertuta daude esportaziotik. Era beran, ezin dira inportatu'; +$string['usermappingerror'] = 'Errorea erabiltzaile-loturan: Ez da aurkitu {$a->field} eremuan "{$a->value}" balioa duen erabiltzailerik.'; $string['usermappingerrorcurrentgroup'] = 'Erabiltzailea ez da talde honetako partaidea.'; +$string['usermappingerrorusernotfound'] = 'Errorea erabiltzaile-loturan: Ez da erabiltzailea aurkitu.'; $string['userpreferences'] = 'Erabiltzailearen hobespenak'; $string['useweighted'] = 'Erabili ponderatua'; -$string['verbosescales'] = 'Ahozko eskalak'; +$string['verbosescales'] = 'Hitzen bidezko eskalak'; +$string['verbosescales_help'] = 'Hitzen bidezko eskalek zenbakien ordez hitzak erabiltzen dituzte. \'Bai\' aukeratu zenbakizko eta hitzen bidezko inportatzera bazoaz. \'Ez\' aukeratu zenbakizko eskalak soilik inportatzera bazoaz.'; $string['viewbygroup'] = 'Taldea'; $string['viewgrades'] = 'Ikusi kalifikazioak'; $string['weight'] = 'Pisua'; -$string['weightcourse'] = 'Ponderatu gabeko kalifikazioak erabili ikastarorako'; +$string['weightcourse'] = 'Ponderatutako kalifikazioak erabili ikastarorako'; $string['weightedascending'] = 'Neurtutako portzentajearen arabera gorantz sailkatu'; $string['weighteddescending'] = 'Neurtutako portzentajearen arabera beherantz sailkatu'; -$string['weightedpct'] = '% neurtua'; -$string['weightedpctcontribution'] = 'ekarpen % neurtua'; +$string['weightedpct'] = '% ponderatua'; +$string['weightedpctcontribution'] = 'ekarpenaren pisuaren %a'; +$string['weight_help'] = 'Ikastaroko kategoria batean elementuen balio erlatiboa zehazteko erabiltzen den balioa.'; $string['weightofa'] = '{$a}-ren pisua'; $string['weightorextracredit'] = 'Pisua edo aparteko kreditua'; +$string['weightoverride'] = 'pisua doitzea'; +$string['weightoverride_help'] = 'Desmarkatu aukera hau kalifikazio-elementu baten pisua automatikoki kalkulatutako baliora berrabiarazteko. Aukera hau markatuta pisua automatiko doitzea saihestuko duzu.'; $string['weights'] = 'Pisuak'; -$string['weightsedit'] = 'Editatu pisua eta aparteko kreditua'; +$string['weightsadjusted'] = 'Zure pisuak guztira 100 izateko egokitu dira.'; +$string['weightsedit'] = 'Editatu pisuak eta aparteko kredituak'; $string['weightuc'] = 'Kalkulatutako pisua'; $string['writinggradebookinfo'] = 'Kalifikazio-liburuaren ezarpenak idazten'; $string['xml'] = 'XML'; diff --git a/html/moodle2/langpacks/eu/gradingform_rubric.php b/html/moodle2/langpacks/eu/gradingform_rubric.php index c1faebe361..67060108b9 100644 --- a/html/moodle2/langpacks/eu/gradingform_rubric.php +++ b/html/moodle2/langpacks/eu/gradingform_rubric.php @@ -61,7 +61,7 @@ $string['regradeoption1'] = 'Markatu berriz kalifikatzeko'; $string['restoredfromdraft'] = 'OHARRA: pertsona hau kalifikatzeko azken saiakera ez da ondo gorde, beraz, zirriborro-kalifikazioak berreskuratu dira. Aldaketa hauek bertan behera utzi nahi badituzu, erabili azpiko \'Utzi\' botoia.'; $string['rubric'] = 'Errubrika'; -$string['rubricmapping'] = 'Puntuazioetatik kalifikazioetara mapaketa egiteko arauak'; +$string['rubricmapping'] = 'Puntuazioetatik kalifikazioetara lotura egiteko arauak'; $string['rubricmappingexplained'] = 'Errubrika honentzako gutxieneko untuazioa {$a->minscore} puntu da, eta moduluan erabilgarria den gutxieneko kalifikaziora bihurtuko da (eskalarik erabiltzen ez bada, zero izango da). Gehieneko puntuazioa {$a->maxscore} puntu da, eta gehieneko kalifikaziora bihurtuko da.
    Erdiko puntuazioak era berean eraldatuko dira, eta erabilgarria den gertukoen baliora biribilduko da.
    diff --git a/html/moodle2/langpacks/eu/hub.php b/html/moodle2/langpacks/eu/hub.php index ab1bfd49d5..fe670f13ac 100644 --- a/html/moodle2/langpacks/eu/hub.php +++ b/html/moodle2/langpacks/eu/hub.php @@ -206,6 +206,7 @@ $string['siteprivacypublished'] = 'Gunearen izena baino ez argitaratu'; $string['siteregistrationcontact'] = 'Kontakturako formularioa'; $string['siteregistrationemail'] = 'E-posta bidezko jakinarazpenak'; +$string['siteregistrationemail_help'] = 'Aukera hau gaituz gero, bilguneko kudeatzaileak kontu garrantzitsuen berri emateko e-posta bidaltzeko modua izango du, segurtasun-kontuei buruz adibidez.'; $string['siteregistrationupdated'] = 'Gunearen erregistroa eguneratu da'; $string['siterelease'] = 'Moodle-ren ezaugarriak'; $string['siterelease_help'] = 'Gune honen Moodle-ren ezaugarriak'; @@ -213,6 +214,7 @@ $string['siteupdatesend'] = 'Bilguneetako erregistroaren eguneraketa amaituta.'; $string['siteupdatesstart'] = 'Bilguneetako erregistroaren eguneraketa hasi da...'; $string['siteurl'] = 'Gunearen URLa'; +$string['siteurl_help'] = 'URL hau gunearen helbidea da. Pribatutasun-ezerpenek jendeak guneko helbidea ikustea baimenduz gero, URL hau erabiliko da horretarako.'; $string['siteversion'] = 'Moodle bertsioa'; $string['siteversion_help'] = 'Gune honen Moodle-ren bertsioa.'; $string['specifichubregistrationdetail'] = 'Zeure gunea beste bilgune batzuetan ere erregistra dezakezu'; diff --git a/html/moodle2/langpacks/eu/journal.php b/html/moodle2/langpacks/eu/journal.php index 6871919b51..1cae266db1 100644 --- a/html/moodle2/langpacks/eu/journal.php +++ b/html/moodle2/langpacks/eu/journal.php @@ -35,7 +35,8 @@ $string['entries'] = 'Sarrerak'; $string['entry'] = 'Sarrera'; $string['evententriesviewed'] = 'Egunkari-sarrerak ikusi dira'; -$string['evententryupdated'] = 'Egunakari-sarrera eguneratu da'; +$string['evententrycreated'] = 'Egunkari-sarrera sortu da'; +$string['evententryupdated'] = 'Egunkari-sarrera eguneratu da'; $string['eventfeedbackupdated'] = 'Egunkariaren feedbacka eguneratu da'; $string['eventjournalcreated'] = 'Egunkaria sortu da'; $string['eventjournaldeleted'] = 'Egunkaria ezabatu da'; @@ -62,6 +63,8 @@ $string['nodeadline'] = 'Betik zabalik'; $string['noentriesmanagers'] = 'Ez dago irakaslerik'; $string['noentry'] = 'Sarrerarik ez'; +$string['noratinggiven'] = 'Ez da kalifkaziorik eman'; +$string['notopenuntil'] = 'Egunkaria ez da zabalduko ondoko datara arte:'; $string['notstarted'] = 'Oraindik ez duzu egunkari hau hasi'; $string['pluginadministration'] = 'Egunkariaren kudeaketa'; $string['pluginname'] = 'Egunkaria'; diff --git a/html/moodle2/langpacks/eu/lesson.php b/html/moodle2/langpacks/eu/lesson.php index a4a36e28d0..21a9bff399 100644 --- a/html/moodle2/langpacks/eu/lesson.php +++ b/html/moodle2/langpacks/eu/lesson.php @@ -50,6 +50,7 @@ $string['addedcluster'] = 'Clusterra gehitu da'; $string['addedendofcluster'] = 'Cluster-bukaera gehitu da'; $string['addendofcluster'] = 'Gehitu cluster-bukaera'; +$string['additionalattemptsremaining'] = 'Osatua, berriz ere egin dezakezu saiakera ikasgai honetan'; $string['addnewgroupoverride'] = 'Gehitu talde-salbuespena'; $string['addnewuseroverride'] = 'Gehitu erabiltzaile-salbuespena'; $string['addpage'] = 'Gehitu orria'; @@ -77,7 +78,7 @@ $string['cannotfindfirstpage'] = 'Ezin da lehenengo orria aurkitu'; $string['cannotfindgrade'] = 'Ezin da kalifikazioa aurkitu'; $string['cannotfindnewestgrade'] = 'Errorea: ezin da azken kalifikazioa aurkitu'; -$string['cannotfindnextpage'] = 'Ikasgaiaren segurtasun-kopia: Hurrengo orria ez da aurkitu!'; +$string['cannotfindnextpage'] = 'Ikasgaiaren laguntza: ez da hurrengo orria aurkitu!'; $string['cannotfindpagerecord'] = 'Gehitu adarraren bukaera: ez da orriaren erregistroa aurkitu'; $string['cannotfindpages'] = 'Ezin dira Ikasgaiaren orriak aurkitu'; $string['cannotfindpagetitle'] = 'Baieztatu ezabaketa: ez da orriaren izenburua aurkitu'; @@ -87,26 +88,32 @@ $string['cannotfinduser'] = 'Errorea: ezin dira erabiltzaileak aurkitu'; $string['canretake'] = '{$a} (e)k ikasgaia berriz har dezan baimendu'; $string['casesensitive'] = 'Erabili esapide erregularrak'; -$string['casesensitive_help'] = 'Laukian klik egin erantzunen analisian esapide erregularrak erabiltzeko.'; +$string['casesensitive_help'] = 'Laukian klik egin erantzunen analisian adierazpen erregularrak erabiltzeko.'; $string['checkbranchtable'] = 'Egiaztatu eduki-orria'; -$string['checkedthisone'] = 'hau egiaztatu da.'; +$string['checkedthisone'] = 'Hau egiaztatu da.'; $string['checknavigation'] = 'Egiaztatu nabigazioa'; $string['checkquestion'] = 'Egiaztatu galdera'; $string['classstats'] = 'Taldeko estatistikak'; -$string['clicktodownload'] = 'Klik egin ondoko estekan fitxategia jaisteko'; +$string['clicktodownload'] = 'Klik egin ondoko estekan fitxategia jaisteko.'; $string['clicktopost'] = 'Zure kalifikazioa puntuazio onenen zerrendara bidaltzeko hemen klik egin.'; +$string['closebeforeopen'] = 'Ezin da ikasgaia eguneratu. Ezarri duzun itxiera-data hasiera-data baino lehenagokoa da.'; $string['cluster'] = 'Clusterra'; -$string['clusterjump'] = 'Cluster batean ez ikusitako galdera'; +$string['clusterjump'] = 'Cluster batean ikusi gabeko galdera'; $string['clustertitle'] = 'Clusterra'; $string['collapsed'] = 'Tolestua'; $string['comments'] = 'Zure iruzkinak'; $string['completed'] = 'Osatuta'; -$string['completederror'] = 'Ikasgaia osatu'; +$string['completederror'] = 'Osatu ikasgaia'; $string['completethefollowingconditions'] = 'Jarraitzeko, baldintza hauek bete beharko dituzu {$a} ikasgaian.'; +$string['completionendreached'] = 'Derrigorrezkoa da amaierara heltzea'; +$string['completionendreached_desc'] = 'Ikasleak ikasgaiaren amaierara heldu behar du jarduera hau osatutzat emateko'; +$string['completiontimespent'] = 'Ikasleak jarduera hau egin du gutxienez ondoko denbora-tartean'; +$string['completiontimespentgroup'] = 'Eman beharreko denbora'; $string['conditionsfordependency'] = 'Menpekotasun-baldintza(k)'; $string['configactionaftercorrectanswer'] = 'Erantzun zuzen baten ondoren berezko ekintza'; $string['configmaxanswers'] = 'Lehenetsitako gehienezko erantzun-kopurua orriko'; $string['configmaxhighscores'] = 'Erakutsi beharreko puntuazio altuen kopurua'; +$string['configpassword_desc'] = 'Ea pasahitza behar den ikasgaira sartzeko.'; $string['configslideshowbgcolor'] = 'Diapositiba-aurkezpenaren atzeko kolorea, gaituta egonez gero'; $string['configslideshowheight'] = 'Diapositiba-aurkezpenaren altuera zehazten du, gaituta egonez gero'; $string['configslideshowwidth'] = 'Diapositiba-aurkezpenaren zabalera zehazten du, gaituta egonez gero'; @@ -125,7 +132,7 @@ $string['customscoring_help'] = 'Gaituz gero, erantzun bakoitzari zenbakizko kalifikazioa eman ahal zaio (positiboa edo negatiboa).'; $string['deadline'] = 'Amaiera-data'; $string['defaultessayresponse'] = 'Zure entsegua irakasleak kalifikatuko du.'; -$string['deleteallattempts'] = 'Ikasgaiaren saiakera guztiak ezabatu'; +$string['deleteallattempts'] = 'Ezabatu ikasgaiaren saiakera guztiak'; $string['deletedefaults'] = 'Lehenetsitako {$a} x ikasgai ezabatu da'; $string['deletedpage'] = 'Orria ezabatu da'; $string['deletepagenamed'] = 'Ezabatu orria: {$a}'; @@ -152,7 +159,7 @@ $string['displayscorewithoutessays'] = 'Zure puntuazioa hau da: {$a->score} (gehienezkoa hau zen: {$a->grade}).'; $string['edit'] = 'Editatu'; $string['editingquestionpage'] = '{$a} galdera-orria editatzen'; -$string['editlessonsettings'] = 'Ikasgai honen ezarpenak editatu'; +$string['editlessonsettings'] = 'Editatu ikasgaiaren ezarpenak'; $string['editoverride'] = 'Editatu salbuespena'; $string['editpage'] = 'Editatu orriaren edukiak'; $string['editpagecontent'] = 'Editatu orriaren edukiak'; @@ -168,7 +175,7 @@ $string['endoflesson'] = 'Ikasgaiaren bukaera'; $string['enteredthis'] = 'hau sartuta.'; $string['entername'] = 'Puntuazio onenen zerrendarako goitizena idatzi'; -$string['enterpassword'] = 'Pasahitza idatzi, mesedez:'; +$string['enterpassword'] = 'Idatzi pasahitza, mesedez:'; $string['eolstudentoutoftime'] = 'Kontuz: Ikasgai hau egiteko finkatu zen denbora-epea gainditu duzu. Agian zure azken erantzuna ez da kontuan hartu epea amaitu ondoren eman baduzu.'; $string['eolstudentoutoftimenoanswers'] = 'Ez duzu erantzunik eman. Ikasgai honetan 0 puntu lortu duzu.'; $string['essay'] = 'Entsegua'; @@ -177,17 +184,20 @@ $string['essayresponses'] = 'Entseguaren erantzunak'; $string['essays'] = 'Entseguak'; $string['essayscore'] = 'Entseguaren puntuazioa'; +$string['eventcontentpageviewed'] = 'Eduki-orria ikusi da'; $string['eventessayassessed'] = 'Entsegua ebaluatu da'; $string['eventessayattemptviewed'] = 'Entsegu-saiakera ikusi da'; $string['eventhighscoreadded'] = 'Gehieneko puntuazioa gehitu da'; $string['eventhighscoresviewed'] = 'Gehieneko puntuazioa ikusi da'; $string['eventlessonended'] = 'Ikasgaia amaitu da'; +$string['eventlessonrestarted'] = 'Ikasi berriz hasi da'; $string['eventlessonstarted'] = 'Ikasgaia hasi da'; $string['eventoverridecreated'] = 'Ikasgairako salbuespena sortu da'; $string['eventoverridedeleted'] = 'Ikasgairako salbuespena ezabatu da'; $string['eventoverrideupdated'] = 'Ikasgairako salbuespena eguneratu da'; $string['eventpagecreated'] = 'Orria sortu da'; $string['eventpagedeleted'] = 'Orria ezabatu da'; +$string['eventpagemoved'] = 'Orria mugitu da'; $string['eventpageupdated'] = 'Orria eguneratu da'; $string['eventquestionanswered'] = 'Galdera erantzun da'; $string['eventquestionviewed'] = 'Galdera ikusi da'; @@ -210,12 +220,9 @@ $string['gradeoptions'] = 'Kalifikazio-aukerak'; $string['groupoverrides'] = 'Talde-salbuespenak'; $string['groupoverridesdeleted'] = 'Talde-salbuespenak ezabatu dira'; -$string['handlingofretakes'] = 'Saiakera berrien erabilera'; -$string['handlingofretakes_help'] = '

    Errepikapenen erabilera

    - -

    Ikasleei ikasgaia errepikatzeko edo berriz hartzeko aukera ematen zaienean, irakasleak ikaslearen azken kalifikazioa zein den erabaki ahal izango du aukera honekin, kalifikazio-orrian, adibidez. Media, lehenengoa edo ikasgaian egindako saiakera eta errepikapen guztien artean lortutako kalifikazio onena izan daiteke.

    - -

    Edozein unetan alda dezakezu aukera hau.

    '; +$string['groupsnone'] = 'Ez dago talderik ikastaro honetan'; +$string['handlingofretakes'] = 'Saiakera errepikatuen erabilera'; +$string['handlingofretakes_help'] = 'Ikasgaia berriz egitea baimenduz gero, ezarpen honek zehazten du ikasgaiaren kalifikazioa saiakera guztien arteko media ala altuena izango den.'; $string['havenotgradedyet'] = 'Oraindik ez kalifikatua.'; $string['here'] = 'hemen'; $string['highscore'] = 'Puntuazio altua'; @@ -224,11 +231,13 @@ $string['importcount'] = '{$a} galderak inportatzen'; $string['importquestions'] = 'Inportatu galderak'; $string['importquestions_help'] = 'Funtzio honek testu-fitxategietatik hainbat formatutako galderak inportatzeko aukera ematen du.'; +$string['inactiveoverridehelp'] = '* Ikaslea ez dago talde egokian edo ez du rol egokirik ikasgaia ikusi edo egiteko'; $string['insertedpage'] = 'Txertatutako orria'; $string['invalidfile'] = 'Fitxategi baliogabea'; $string['invalidid'] = 'Ez da modulu edo ikasgaiaren ID gainditu ikastaroan'; $string['invalidlessonid'] = 'Ikasgaiaren IDa ez da zuzena'; -$string['invalidpageid'] = 'Orriaren IDak ez du balio'; +$string['invalidoverrideid'] = 'Salbuespenaren ID baliogabea'; +$string['invalidpageid'] = 'Orriaren ID baliogabea'; $string['jump'] = 'Jauzia'; $string['jumps'] = 'Jauziak'; $string['jumps_help'] = 'Erantzun (galderetarako) edo deskribapen (eduki-orrietarako) bakoitzak dagokion jauzia du. Jauzia erlatiboa izan daiteke, horri hau edo hurrengo orria, adibidez, edo erabatekoa, ikasgaiko orrietako bat zehaztuta.'; @@ -241,10 +250,10 @@ $string['lessonclosed'] = 'Ikasgai hau {$a} egunean itxi zen.'; $string['lessoncloses'] = 'Ikasgaia ixten da'; $string['lessoncloseson'] = 'Ikasgaia data honetan itxiko da: {$a}'; -$string['lesson:edit'] = 'Ikasgaia-jarduera editatu'; +$string['lesson:edit'] = 'Editatu ikasgaia'; $string['lessonformating'] = 'Ikasgaia formateatzen'; $string['lesson:grade'] = 'Kalifikatu ikasgaiaren entsegu motako galderak'; -$string['lesson:manage'] = 'Ikasgaia-jarduera kudeatu'; +$string['lesson:manage'] = 'Kudeatu ikasgaia'; $string['lesson:manageoverrides'] = 'Kudeatu Ikasgairako salbuespenak'; $string['lessonmenu'] = 'Ikasgaiaren menua'; $string['lessonname'] = 'Ikasgaia: {$a}'; @@ -279,7 +288,7 @@ $string['messageprovider:graded_essay'] = 'Ikasgaiaren entsegu motako galdera ebaluatu izanaren jakinarazpena'; $string['minimumnumberofquestions'] = 'Gutxienezko galdera-kopurua'; $string['minimumnumberofquestions_help'] = 'Ezarpen honek zehazten du jardueraren kalifikazioa kalkulatzeko erabiliko den gutxieneko galdera-kopurua.'; -$string['missingname'] = 'Mesedez, idatzi ezizena'; +$string['missingname'] = 'Mesedez, idatzi goitizena'; $string['modattempts'] = 'Baimendu ikaslearen berrikuspena'; $string['modattempts_help'] = 'Gaituz gero, ikasleek ikasgaian zehar nagiba dezakete eta berriz hasierara itzuli.'; $string['modattemptsnoteacher'] = 'Ikaslearen berrikuspena soilik ikasleen eskura dago.'; @@ -295,8 +304,8 @@ * Bereizitako birpasorako ariketak egiteko, birpasorako galdera-multzo ezberdinekin, aurreko galderei erantzundakoaren araberakoak.'; $string['modulenameplural'] = 'Ikasgaiak'; $string['move'] = 'Mugitu orria'; -$string['movedpage'] = 'Mugitutatako orria'; -$string['movepagehere'] = 'Orria hona mugitu'; +$string['movedpage'] = 'Orria mugitu da'; +$string['movepagehere'] = 'Mugitu orria hona'; $string['movepagenamed'] = 'Mugitu orria: {$a}'; $string['moving'] = 'Orria mugitzen: {$a}'; $string['multianswer'] = 'Erantzun anitza'; @@ -310,6 +319,7 @@ $string['noanswer'] = 'Galdera batek edo gehiagok ez du erantzunik. Mesedez, joan atzera eta osatu.'; $string['noattemptrecordsfound'] = 'Ez da saiakeren erregistrorik aurkitu. Kalifikaziorik gabe'; $string['nobranchtablefound'] = 'Ez da eduki-orririk aurkitu'; +$string['noclose'] = 'Ez dago itxiera-datarik'; $string['nocommentyet'] = 'Iruzkinik ez oraindik.'; $string['nocoursemods'] = 'Ez da jarduerarik aurkitu'; $string['nocredit'] = 'Ez duzu krediturik'; @@ -317,12 +327,15 @@ $string['noessayquestionsfound'] = 'Ikasgai honetan ez da entsegu-galderarik aurkitu.'; $string['nohighscores'] = 'Ez dago gehinezko puntuaziorik'; $string['nolessonattempts'] = 'Ez da ikasgai hau praktikatzeko saiakerarik egin.'; +$string['nolessonattemptsgroup'] = '{$a} taldeko partaideek ez dute saiakerarik egin ikasgai honetan.'; $string['none'] = 'Bat ere ez'; $string['nooneansweredcorrectly'] = 'Inork ez du ondo erantzun.'; $string['nooneansweredthisquestion'] = 'Inork ez du galdera hau erantzun.'; -$string['noonecheckedthis'] = 'Inork ez du hau konprobatu.'; +$string['noonecheckedthis'] = 'Inork ez du hau egiaztatu.'; $string['nooneenteredthis'] = 'Inork ez du hau sartu.'; -$string['noonehasanswered'] = 'Inork ez du entsegu-galderarik oraingoz erantzun.'; +$string['noonehasanswered'] = 'Inork ez dio entsegu-galderari oraingoz erantzun.'; +$string['noonehasansweredgroup'] = 'Hemengo Inork ({$a}) ez dio entsegu-galderari oraingoz erantzun.'; +$string['noopen'] = 'Ez dago zabaltzeko datarik'; $string['noretake'] = 'Ezin duzu ikasgai hau berriz hasi.'; $string['normal'] = 'Normala - jarraitu ikasgaiaren ibilbidea'; $string['notcompleted'] = 'Ez osatua'; @@ -331,6 +344,7 @@ $string['nothighscore'] = 'Ez da finkatu {$a} puntuazio altuenen zerrenda.'; $string['notitle'] = 'Izenbururik gabe'; $string['numberofcorrectanswers'] = 'Erantzun zuzenen kopurua: {$a}'; +$string['numberofcorrectanswersheader'] = 'Erantzun zuzenen kopurua'; $string['numberofcorrectmatches'] = 'Ondo osatutako bikoteen kopurua: {$a}'; $string['numberofpagestoshow'] = 'Erakutsi beharreko orriak'; $string['numberofpagestoshow_help'] = 'Erakutsi beharreko orri-kopurua (Txartelak) Balore hau Txartel erako ikasgaietan bakarrik (Flash Card) @@ -340,6 +354,7 @@ Orri/Txartel kopuru hori erakutsita ikasgaiaren amaiera etorriko da eta ikasleak lortutako kalifikazioa erakutsiko da. Emandako balorea ikasgaiaren orri-kopurua baino altuagoa bada, orri guztiak erakutsiko dira.'; $string['numberofpagesviewed'] = 'Erantzundako galdera-kopurua: {$a}'; +$string['numberofpagesviewedheader'] = 'Erantzundako galdera-kopura'; $string['numberofpagesviewednotice'] = 'Erantzundako galdera-kopurua: {$a->nquestions}; (Gutxienez, {$a->minquestions} erantzun beharko zenituzke).'; $string['numerical'] = 'Zenbakizkoa'; $string['ongoing'] = 'Erakutsi metatutako puntuazioa'; @@ -367,6 +382,7 @@ $string['page-mod-lesson-edit'] = 'Editatu ikasgaiaren orria'; $string['page-mod-lesson-view'] = 'Ikusi edo aurreikusi ikasgaiaren orria'; $string['page-mod-lesson-x'] = 'Ikasgaiaren edozein orri'; +$string['pageresponses'] = 'Orriaren erantzunak'; $string['pages'] = 'Orriak'; $string['pagetitle'] = 'Orriaren izenburua'; $string['password'] = 'Pasahitza'; @@ -450,12 +466,15 @@ $string['thatsthewronganswer'] = 'Hauxe da erantzun okerra'; $string['thefollowingpagesjumptothispage'] = 'Orri hauek honetarako jauzia dute'; $string['thispage'] = 'Orri hau'; +$string['timeisup'] = 'Denbora amaitu da'; $string['timelimit'] = 'Denbora-muga'; +$string['timelimitwarning'] = '{$a} duzu ikasgai amaitzeko'; $string['timeremaining'] = 'Geratzen den denbora'; -$string['timespenterror'] = 'Ikasgai honi gutxienez {$a} minutu dedikatu'; -$string['timespentminutes'] = 'Dedikatutako denbora (minututan)'; +$string['timespenterror'] = 'Eman gutxienez {$a} minutu Ikasgai honi'; +$string['timespentminutes'] = 'Emandako denbora (minututan)'; $string['timetaken'] = 'Erabilitako denbora'; $string['topscorestitle'] = '{$a} puntuazio altuenak'; +$string['totalpagesviewedheader'] = 'Ikusitako orri-kopurua'; $string['true'] = 'Egia'; $string['truefalse'] = 'Egia/gezurra'; $string['unabledtosavefile'] = 'Igotako fitxategia ezin izan da gorde'; @@ -470,10 +489,11 @@ $string['usepassword_help'] = 'Gaituta, ikasgaia eskuratzeko pasahitza eskatuko da.'; $string['useroverrides'] = 'Erabiltzaile-salbuespenak'; $string['useroverridesdeleted'] = 'Erabiltzaile-salbuespenak ezabatu dira'; +$string['usersnone'] = 'Ikasleek ez dute ikasgai honetarako sarbiderik'; $string['viewgrades'] = 'Ikusi kalifikazioak'; -$string['viewhighscores'] = 'Puntuazio altuenen zerrenda ikusi.'; +$string['viewhighscores'] = 'Ikusi puntuazio altuenen zerrenda'; $string['viewreports'] = '{$a->attempts} saiakera {$a->student} (e)k osatuta'; -$string['viewreports2'] = 'Osatutako {$a} saiakera ikusi'; +$string['viewreports2'] = 'Ikusi osatutako {$a} saiakera'; $string['warning'] = 'Kontuz'; $string['welldone'] = 'Ederki!'; $string['whatdofirst'] = 'Nondik hasi nahi duzu?'; diff --git a/html/moodle2/langpacks/eu/lti.php b/html/moodle2/langpacks/eu/lti.php index 410f88b980..54273535d1 100644 --- a/html/moodle2/langpacks/eu/lti.php +++ b/html/moodle2/langpacks/eu/lti.php @@ -182,6 +182,7 @@ $string['privacy'] = 'Pribatutasuna'; $string['quickgrade'] = 'Baimendu kalifikazio azkarra'; $string['register'] = 'Erregistratu'; +$string['registrationname'] = 'Tresna-hornitzailearen izena'; $string['registration_options'] = 'Erregistrorako aukerak'; $string['registrationurl'] = 'Erregistrorako URLa'; $string['reject'] = 'Ez onartu'; @@ -215,6 +216,7 @@ $string['subplugintype_ltisource_plural'] = 'LTIren iturburuak'; $string['successfullycreatedtooltype'] = 'Ondo sortu da tresna!'; $string['tooldescription'] = 'Tresnaren deskribapena'; +$string['toolisbeingused'] = 'Tresna {$a} aldiz erabili da'; $string['toolisnotbeingused'] = 'Tresn hau ez da oraindik erabili'; $string['toolproxy'] = 'Kanpoko tresnen erregistroak'; $string['toolproxyregistration'] = 'Kanpoko tresnen erregistroa'; diff --git a/html/moodle2/langpacks/eu/mnet.php b/html/moodle2/langpacks/eu/mnet.php index 7a918f64c0..efbc1c522d 100644 --- a/html/moodle2/langpacks/eu/mnet.php +++ b/html/moodle2/langpacks/eu/mnet.php @@ -177,6 +177,7 @@ $string['showremote'] = 'Erakutsi urrutiko erabiltzaileak'; $string['ssl_acl_allow'] = 'SSO ACL: Baimendu \'{$a->user}\' erabiltzailea hemendik: \'{$a->host}\''; $string['ssl_acl_deny'] = 'SSO ACL: Ukatu \'{$a->user}\' erabiltzailea hemendik: \'{$a->host}\''; +$string['sslverification'] = 'SSL egiaztapena'; $string['ssoaccesscontrol'] = 'SSO sarbide-kontrola'; $string['strict'] = 'Zorrotza'; $string['subscribe'] = 'Harpidetu'; @@ -193,6 +194,7 @@ $string['unknown'] = 'Ezezaguna'; $string['unknownerror'] = 'Errore ezezaguna gertatu da negoziazioan zehar.'; $string['usercannotchangepassword'] = 'Ezin duzu pasahitza hemen aldatu urrutiko erabiltzailea baitzara.'; +$string['usersareonline'] = 'Abisua: zerbitzari honetako {$a} erabiltzaile une honetan zure gunean daude.'; $string['verifysignature-error'] = 'Kale egin du sinadura egiaztatzean. Errorea gertatu da.'; $string['verifysignature-invalid'] = 'Kale egin du sinadura egiaztatzean. Badirudi ez duzula zeuk sinatu.'; $string['version'] = 'Bertsioa'; diff --git a/html/moodle2/langpacks/eu/moodle.php b/html/moodle2/langpacks/eu/moodle.php index 0c422d4f09..5b463216ab 100644 --- a/html/moodle2/langpacks/eu/moodle.php +++ b/html/moodle2/langpacks/eu/moodle.php @@ -330,7 +330,7 @@ $string['coursecreators'] = 'Ikastaro-sortzailea'; $string['coursecreatorsdescription'] = 'Ikastaro sortzaileek ikastaro berriak sor ditzakete.'; $string['coursedeleted'] = '{$a} ikastaroa ezabatuta'; -$string['coursedetails'] = 'Ikastaroaren xehetasunak'; +$string['coursedetails'] = 'Ikastaro-xehetasunak'; $string['coursedisplay'] = 'Ikastaroaren diseinua'; $string['coursedisplay_help'] = 'Aukera honek ezartzen du ikastaro osoa orri bakarrean erakusten den ala hainbat orritan banatzen den.'; $string['coursedisplay_multi'] = 'Erakutsi atal bat orriko'; @@ -1553,7 +1553,7 @@ $string['revert'] = 'Lehengora itzuli'; $string['role'] = 'Rola'; $string['roleassignments'] = 'Rol-esleipenak'; -$string['rolemappings'] = 'Rolen mapak'; +$string['rolemappings'] = 'Rolen loturak'; $string['rolerenaming'] = 'Rolei izena aldatu'; $string['rolerenaming_help'] = '

    Ikastaroan erabiltzen diren rolei izena aldatzeko aukera emango dizu ezarpen honek. Adibidez, "Irakaslea"ri "Laguntzailea" edo "Tutorea" ipini nahi izango diozu. Erakusten den izena aldatzen da bakarrik, azpiko rol-baimenei ez die eragingo. diff --git a/html/moodle2/langpacks/eu/plugin.php b/html/moodle2/langpacks/eu/plugin.php index af4e832dfd..5d68dfd3a1 100644 --- a/html/moodle2/langpacks/eu/plugin.php +++ b/html/moodle2/langpacks/eu/plugin.php @@ -60,6 +60,7 @@ $string['overviewupdatable'] = 'Eskura dauden eguneraketak'; $string['packagesdownloading'] = '{$a} jaisten'; $string['plugincheckall'] = 'Plugin guztiak'; +$string['plugincheckattention'] = 'Pluginek zure arreta eskatzen dute'; $string['plugindisable'] = 'Desgaitu'; $string['plugindisabled'] = 'Desgaituta'; $string['pluginenable'] = 'Gaitu'; @@ -147,14 +148,17 @@ $string['type_webservice'] = 'Web-zerbitzuen protokoloa'; $string['type_webservice_plural'] = 'Web-zerbitzuen protokoloak'; $string['uninstall'] = 'Desinstalatu'; +$string['uninstallextraconfirmenrol'] = '{$a->enrolments} erabiltzaile matrikulatuta daude'; $string['uninstalling'] = '{$a->name} desinstalatzen'; $string['updateavailable'] = 'Bada bertsio berri bat eskura {$a}!'; $string['updateavailable_moreinfo'] = 'Informazio gehiago...'; $string['updateavailable_release'] = 'Bertsioa: {$a}'; $string['validationmsg_componentmatch'] = 'Osagaiaren izen osoa'; +$string['validationmsglevel_debug'] = 'Araztu'; $string['validationmsglevel_error'] = 'Errorea'; $string['validationmsglevel_info'] = 'Ados'; $string['validationmsglevel_warning'] = 'Oharra'; +$string['validationmsg_missinglangenfile'] = 'Ez da ingelesaren hizkuntza-fitxategia aurkitu'; $string['validationmsg_missingversionphp'] = 'version.php fitxategia ez da aurkitu'; $string['validationmsg_pluginversion'] = 'Pluginaren bertsioa'; $string['validationmsg_requiresmoodle'] = 'Behar den Moodle bertsioa'; diff --git a/html/moodle2/langpacks/eu/qtype_ddwtos.php b/html/moodle2/langpacks/eu/qtype_ddwtos.php index fc7c2d0809..e0baa62d11 100644 --- a/html/moodle2/langpacks/eu/qtype_ddwtos.php +++ b/html/moodle2/langpacks/eu/qtype_ddwtos.php @@ -30,6 +30,7 @@ $string['blank'] = 'hutsik'; $string['correctansweris'] = 'Erantzun zuzena ondokoa da: {$a}'; $string['infinite'] = 'Mugarik gabea'; +$string['pleaseputananswerineachbox'] = 'Mesedez, eman erantzuna lauki bakoitzean'; $string['pluginname'] = 'Hartu eta eraman testura'; $string['pluginnameadding'] = 'Hartu eta eraman testura motako galdera gehitzen'; $string['pluginnameediting'] = 'Hartu eta eraman testura motako galdera editatzen'; diff --git a/html/moodle2/langpacks/eu/qtype_essay.php b/html/moodle2/langpacks/eu/qtype_essay.php index 4213c04ed2..c0bbb1b706 100644 --- a/html/moodle2/langpacks/eu/qtype_essay.php +++ b/html/moodle2/langpacks/eu/qtype_essay.php @@ -45,7 +45,7 @@ $string['pluginnameediting'] = 'Entsegu motako galdera editatzen '; $string['pluginname_help'] = 'Galderari erantzuteko (irudi bat izan dezakeena) ikasleak paragrafo bat edo bi dituen testua idatzi behar du. Galdera hauei ez zaie kalifikazioa ezarriko irakasleak berrikusi eta eskuz kalifikatu arte.'; $string['pluginnamesummary'] = 'Pare bat esaldi edo paragrafoko erantzuna ematen uzten du. Hauek eskuz kalifikatu behar dira.'; -$string['responsefieldlines'] = 'Erantzuteko koadroaren tamaina'; +$string['responsefieldlines'] = 'Erantzuteko laukiaren tamaina'; $string['responseformat'] = 'Ebazpenaren formatua'; $string['responseisrequired'] = 'Beharrezkoa da ikasleak testua idaztea'; $string['responsenotrequired'] = 'Testu-sarrera aukerakoa da'; diff --git a/html/moodle2/langpacks/eu/quiz_grading.php b/html/moodle2/langpacks/eu/quiz_grading.php index 02f559e43a..067722e01e 100644 --- a/html/moodle2/langpacks/eu/quiz_grading.php +++ b/html/moodle2/langpacks/eu/quiz_grading.php @@ -60,7 +60,7 @@ $string['gradingreport'] = 'Eskuzko kalifikazioaren txostena'; $string['gradingungraded'] = 'Kalifikatu gabeko {$a} saiakera'; $string['gradinguser'] = 'Saiakerak honentzat: {$a}'; -$string['grading:viewidnumber'] = 'Ikusi ikasleen id zenbakiak kalifikatu birtean'; +$string['grading:viewidnumber'] = 'Ikusi ikasleen ID zenbakiak kalifikatu birtean'; $string['grading:viewstudentnames'] = 'Ikusi ikasleen izenak kalifikatu bitartean'; $string['hideautomaticallygraded'] = 'Ezkutatu automatikoki kalifikatutako galderak'; $string['inprogress'] = 'Ari da'; diff --git a/html/moodle2/langpacks/eu/report_security.php b/html/moodle2/langpacks/eu/report_security.php index 6cd0b98345..4a855a01e8 100644 --- a/html/moodle2/langpacks/eu/report_security.php +++ b/html/moodle2/langpacks/eu/report_security.php @@ -37,6 +37,8 @@ $string['check_defaultuserrole_ok'] = 'Autentifikatutako erabiltzaile-rolaren definizioa ONDO dago.'; $string['check_displayerrors_name'] = 'PHP erroreak erakustea'; $string['check_displayerrors_ok'] = 'PHP erroreak erakustea desgaituta.'; +$string['check_emailchangeconfirmation_error'] = 'Erabiltzaileek edozein posta-helbide sar dezakete.'; +$string['check_emailchangeconfirmation_info'] = 'Erabiltzaileek baimendutako domeinuetako posta-helbideak sar ditzakete.'; $string['check_emailchangeconfirmation_name'] = 'E-posta aldaketaren baieztatzea'; $string['check_emailchangeconfirmation_ok'] = 'E-postaren aldaketaren baieztatzea erabiltzaile-profilean'; $string['check_embed_error'] = 'Nahi beste objektu enbotatu ahal izatea gaituta - hau oso arriskutsua izan daiteke zerbitzari gehienentzat'; @@ -60,6 +62,7 @@ $string['check_mediafilterswf_ok'] = 'Flash media iragazkia ez dago gaituta.'; $string['check_noauth_name'] = 'Autentifikatu gabe'; $string['check_noauth_ok'] = '"Autentifikatu gabe" plugina desgaituta dago.'; +$string['check_openprofiles_error'] = 'Edozeinek ikus ditzake erabiltzaileen profilak saioa hasi gabe ere.'; $string['check_openprofiles_name'] = 'Zabaldu erabiltzaileen profilak'; $string['check_openprofiles_ok'] = 'Erabiltzaileen profilak ikusi ahal izateko, beharrezkoa da saioa hastea.'; $string['check_passwordpolicy_error'] = 'Pasahitzen politika ez da ezarri.'; diff --git a/html/moodle2/langpacks/eu/repository.php b/html/moodle2/langpacks/eu/repository.php index 1fa42e5723..ac98641851 100644 --- a/html/moodle2/langpacks/eu/repository.php +++ b/html/moodle2/langpacks/eu/repository.php @@ -114,6 +114,7 @@ $string['filenotnull'] = 'Fitxategi bat aukeratu behar duzu igotzeko.'; $string['filepicker'] = 'Fitxategi-hautatzailea'; $string['filesaved'] = 'Fitxategia gorde egin da'; +$string['filesizenull'] = 'Ezin da fitxategiaren tamaina zehaztu'; $string['folderexists'] = 'Karpetaren izena dagoeneko erabilita dago. Mesedez, erabili beste izen bat'; $string['foldernotfound'] = 'Ez da karpeta aurkitu'; $string['getfile'] = 'Aukeratu fitxategi hau'; diff --git a/html/moodle2/langpacks/eu/role.php b/html/moodle2/langpacks/eu/role.php index 261b910100..ff3b98b3f0 100644 --- a/html/moodle2/langpacks/eu/role.php +++ b/html/moodle2/langpacks/eu/role.php @@ -376,6 +376,7 @@ $string['site:approvecourse'] = 'Ikastaroak sortzeko baimena eman'; $string['site:backup'] = 'Ikastaroen segurtasun-kopiak egin'; $string['site:config'] = 'Gunearen konfigurazioa aldatu'; +$string['site:deleteanymessage'] = 'Guneko edozein mezu ezabatu'; $string['site:doanything'] = 'Edozertarako baimena'; $string['site:doclinks'] = 'Gunetik kanpoko dokumentuetarako estekak erakutsi'; $string['site:forcelanguage'] = 'Baliogabetu ikastaroko hizkuntza'; diff --git a/html/moodle2/langpacks/eu/search.php b/html/moodle2/langpacks/eu/search.php index 4a94fb1a13..2d2a99d40e 100644 --- a/html/moodle2/langpacks/eu/search.php +++ b/html/moodle2/langpacks/eu/search.php @@ -70,11 +70,13 @@ $string['normalsearch'] = 'Bilaketa normala'; $string['notitle'] = 'Izenbururik ez'; $string['openedon'] = 'irekia noiz:'; +$string['optimize'] = 'Optimizatu'; $string['resultsreturnedfor'] = 'lortutako emaitzak honetarako:'; $string['runindexer'] = 'Abiarazi indexatzailea (erreala)'; $string['runindexertest'] = 'Abiarazi indexatzailaren proba'; $string['score'] = 'Puntuazioa'; $string['search'] = 'Bilatu'; +$string['searcharea'] = 'Bilaketa-eremua'; $string['searching'] = 'Bilatzen hemen:'; $string['search:mycourse'] = 'Nire ikastaroak'; $string['searchnotpermitted'] = 'Ez duzu bilaketa egiteko baimenik'; diff --git a/html/moodle2/langpacks/eu/tag.php b/html/moodle2/langpacks/eu/tag.php index ad01357816..98dceed366 100644 --- a/html/moodle2/langpacks/eu/tag.php +++ b/html/moodle2/langpacks/eu/tag.php @@ -63,6 +63,7 @@ $string['eventtagremoved'] = 'Etiketa ezabatu da elementutik'; $string['eventtagunflagged'] = 'Etiketa ez-markatua'; $string['eventtagupdated'] = 'Etiketa eguneratu da'; +$string['exclusivemode'] = 'Erakutsi bakarrik hemen etiketatutakoak: {$a->tagarea}'; $string['flag'] = 'Markatu'; $string['flagasinappropriate'] = 'Ezegoki markatu'; $string['flagged'] = 'Etiketa markatu da'; @@ -111,6 +112,7 @@ $string['selecttag'] = 'Aukeratu {$a} etiketa'; $string['settypedefault'] = 'Ezabatu etiketa estandarretatik'; $string['settypeofficial'] = 'Egin ofizial'; +$string['showingfirsttags'] = 'Etiketa ospetsuenak {$a} erakusten'; $string['standardforce'] = 'Behartu'; $string['standardhide'] = 'Ez iradoki'; $string['standardsuggest'] = 'Iradoki'; diff --git a/html/moodle2/langpacks/eu/tool_generator.php b/html/moodle2/langpacks/eu/tool_generator.php index f8480a61ae..ce37aa7f89 100644 --- a/html/moodle2/langpacks/eu/tool_generator.php +++ b/html/moodle2/langpacks/eu/tool_generator.php @@ -36,6 +36,7 @@ $string['createcourse'] = 'Sortu ikastaroa'; $string['creating'] = 'Ikastaroa sotzen'; $string['done'] = '({$a}) eginda'; +$string['downloadusersfile'] = 'Deskargatu erabiltzaile-fitxategia'; $string['error_noforumreplies'] = 'Aukeratutako ikastaroak ez du foro-erantzunik'; $string['error_nonexistingcourse'] = 'Zehaztutako ikastaroa ez da existitzen.'; $string['maketestcourse'] = 'Sortu probetarako ikastaroa'; @@ -63,3 +64,4 @@ $string['sitesize_5'] = 'XXL (~20GB; 4177 ikastaro, ~10 ordutan sortuak)'; $string['size'] = 'Ikastaroaren tamaina'; $string['smallfiles'] = 'Fitxategi txikiak'; +$string['updateuserspassword'] = 'Eguneratu ikastaroko erabiltzaileen pasahitza'; diff --git a/html/moodle2/langpacks/eu/tool_lp.php b/html/moodle2/langpacks/eu/tool_lp.php index a3f2839e8f..b969db4ee0 100644 --- a/html/moodle2/langpacks/eu/tool_lp.php +++ b/html/moodle2/langpacks/eu/tool_lp.php @@ -64,6 +64,7 @@ $string['configurecoursecompetencysettings'] = 'Konfiguratu ikastaroko gaitasunak'; $string['configurescale'] = 'Konfiguratu eskalak'; $string['coursecompetencies'] = 'Ikastaroko gaitasunak'; +$string['coursecompetencyratingsarepushedtouserplans'] = 'Ikastaro honetan gaitasunen kalifikazioek ikasketa-planak berehala eguneratzen dituzte.'; $string['coursesusingthiscompetency'] = 'Gaitasun honetara estekatutako ikastaroak'; $string['createlearningplans'] = 'Sortu ikasketa-planak'; $string['createplans'] = 'Sortu ikasketa-planak'; @@ -110,6 +111,7 @@ $string['managecompetenciesandframeworks'] = 'Kudeatu gaitasunak eta markoak'; $string['modcompetencies'] = 'Ikastaroko gaitasunak'; $string['modcompetencies_help'] = 'Jarduera honi estekatutako ikastaroko gaitasunak'; +$string['movecompetencyframework'] = 'Mugitu gaitasun-markoa'; $string['myplans'] = 'Nire ikasketa-planak'; $string['nfiles'] = '{$a} fitxategi'; $string['noactivities'] = 'Ez dago jarduerarik'; diff --git a/html/moodle2/langpacks/eu/webservice.php b/html/moodle2/langpacks/eu/webservice.php index 525f91fb7b..dd08f9b34d 100644 --- a/html/moodle2/langpacks/eu/webservice.php +++ b/html/moodle2/langpacks/eu/webservice.php @@ -122,11 +122,13 @@ $string['selectspecificuserdescription'] = 'Web-zerbitzuetako erabiltzailea baimendutako erabiltzaile gisa gehitu behar duzu.'; $string['service'] = 'Zerbitzua'; $string['servicename'] = 'Zerbitzuaren izena'; +$string['servicenotavailable'] = 'Web-zerbitzua ez dago eskuragarri (ez da existitzen edo agian desgaituta dago)'; $string['servicesbuiltin'] = 'Barne dauden zerbitzuak'; $string['servicescustom'] = 'Pertsonalizatu zerbitzuak'; $string['serviceusers'] = 'Baimendutako erabiltzaileak '; $string['serviceusersettings'] = 'Erabiltzailearen ezarpenak'; $string['serviceusersmatching'] = 'Bat datozen baimendun erabiltzaileak'; +$string['serviceuserssettings'] = 'Aldatu ezarpenak baimendutako erabiltzaileei'; $string['step'] = 'Urratsa'; $string['supplyinfo'] = 'Xehetasun gehiago'; $string['testclient'] = 'Web-zerbitzuetarako proba-bezeroa'; diff --git a/html/moodle2/langpacks/eu/workshop.php b/html/moodle2/langpacks/eu/workshop.php index 04f78c3448..9db26502c0 100644 --- a/html/moodle2/langpacks/eu/workshop.php +++ b/html/moodle2/langpacks/eu/workshop.php @@ -107,7 +107,7 @@ $string['editingsubmission'] = 'Bidalketa editatzen'; $string['editsubmission'] = 'Bidalketa editatu'; $string['err_multiplesubmissions'] = 'Formulario hau bete bitartean bidalketaren beste bertsio bat gorde da. Erabiltzaile bakoitzak bidalketa bakarra egin dezake.'; -$string['err_removegrademappings'] = 'Ezin dira ezabatu erabili gabeko kalifikazio-mapeoak'; +$string['err_removegrademappings'] = 'Ezin dira ezabatu erabili gabeko kalifikazio-loturak'; $string['err_unknownfileextension'] = 'Fitxategi-luzapen ezezaguna: {$a}'; $string['err_wrongfileextension'] = 'Fitxategi batzuk ({$a->wrongfiles}) ezin dira igo. Soilik {$a->whitelist} fitxategi-luzapenak onartzen dira.'; $string['evaluategradeswait'] = 'Mesedez, itxaron ebaluazioak ebaluatu eta kalifikazioak kalkulatu arte'; diff --git a/html/moodle2/langpacks/eu/workshopform_numerrors.php b/html/moodle2/langpacks/eu/workshopform_numerrors.php index ef47fffd28..0ddc90805b 100644 --- a/html/moodle2/langpacks/eu/workshopform_numerrors.php +++ b/html/moodle2/langpacks/eu/workshopform_numerrors.php @@ -38,7 +38,7 @@ $string['grade0default'] = 'Ez'; $string['grade1'] = 'Arrakasta izendatzeko hitza'; $string['grade1default'] = 'Bai'; -$string['grademapping'] = 'Kalifikazioaren eskema-taula'; +$string['grademapping'] = 'Kalifikazioen lotura-taula'; $string['maperror'] = 'Garrantzia duten errore kopurua berdina edo txikiagoa da'; $string['mapgrade'] = 'Bidalketaren kalifikazioa'; $string['percents'] = '% {$a}'; diff --git a/html/moodle2/langpacks/fr/admin.php b/html/moodle2/langpacks/fr/admin.php index d4f42d9a90..6dfb68613a 100644 --- a/html/moodle2/langpacks/fr/admin.php +++ b/html/moodle2/langpacks/fr/admin.php @@ -645,9 +645,10 @@ {$a->link} -Ce lien devrait être affiché sous la forme d\'un lien en bleu que vous pouvez cliquer directement. Si cela ne fonctionne pas, copiez l\'adresse et collez-la dans le champ de l\'URL en haut de la fenêtre de votre navigateur. +Dans la plupart des logiciels de courriel, cette adresse devrait apparaître comme un lien de couleur bleue qu\'il vous suffit de cliquer. Si cela ne fonctionne pas, copiez ce lien et collez-le dans la barre d\'adresse de votre navigateur web. -Si vous avez besoin d\'aide, veuillez contacter l\'administrateur du serveur {$a->admin}.'; +Si vous avez besoin d\'aide, veuillez contacter l\'administrateur du site, +{$a->admin}'; $string['lockoutemailsubject'] = 'Votre compte sur {$a} a été bloqué'; $string['lockouterrorunlock'] = 'Information de déblocage du compte non valide.'; $string['lockoutthreshold'] = 'Limite pour blocage de compte'; diff --git a/html/moodle2/langpacks/fr/auth_db.php b/html/moodle2/langpacks/fr/auth_db.php index c6c88d1ce3..636a94219e 100644 --- a/html/moodle2/langpacks/fr/auth_db.php +++ b/html/moodle2/langpacks/fr/auth_db.php @@ -45,7 +45,7 @@ $string['auth_dbinsertuserduplicate'] = 'Erreur lors de l\'insertion de l\'utilisateur {$a->username}. Cet utilisateur a déjà été créé via le plugin « {$a->auth} ».'; $string['auth_dbinsertusererror'] = 'Erreur lors de l\'insertion de l\'utilisateur {$a}'; $string['auth_dbname'] = 'Nom de la base de données. À ne pas renseigner si vous utiliser un DSN ODBC.'; -$string['auth_dbname_key'] = 'Nom BDD'; +$string['auth_dbname_key'] = 'Nom de la base de données'; $string['auth_dbpass'] = 'Mot de passe pour ce compte'; $string['auth_dbpass_key'] = 'Mot de passe'; $string['auth_dbpasstype'] = '

    Indiquez le type de hachage utilisé pour le champ mot de passe. L\'algorithme MD5 est utile pour une utilisation conjointe avec d\'autres applications Web telles que PostNuke.

    Utilisez « Interne » si vous voulez que la base de données externe gère les noms d\'utilisateur et les adresses de courriel, mais que Moodle gère les mots de passe. Dans ce cas, la base de données externe doit comprendre un champ contenant une adresse de courriel, et vous devez lancer régulièrement les scripts admin/cron.php et auth/db/auth_db_sync_users.php. Moodle enverra alors par courriel un mot de passe temporaire aux nouveaux utilisateurs.

    '; @@ -65,7 +65,7 @@ $string['auth_dbtype_key'] = 'Base de données'; $string['auth_dbupdatinguser'] = 'Modification de l\'utilisateur {$a->name} id {$a->id}'; $string['auth_dbuser'] = 'Compte avec accès en lecture à la base de données'; -$string['auth_dbuser_key'] = 'Utilisateur BDD'; +$string['auth_dbuser_key'] = 'Utilisateur de la base de données'; $string['auth_dbusernotexist'] = 'Impossible de modifier l\'utilisateur {$a}, qui n\'existe pas'; $string['auth_dbuserstoadd'] = 'Enregistrements utilisateurs à ajouter : {$a}'; $string['auth_dbuserstoremove'] = 'Enregistrements utilisateurs à supprimer : {$a}'; diff --git a/html/moodle2/langpacks/fr/auth_mnet.php b/html/moodle2/langpacks/fr/auth_mnet.php index 66859b3b0d..8b874a6095 100644 --- a/html/moodle2/langpacks/fr/auth_mnet.php +++ b/html/moodle2/langpacks/fr/auth_mnet.php @@ -32,7 +32,7 @@ $string['auth_mnet_rpc_negotiation_timeout'] = 'Délai en secondes pour l\'authentification par transport XMLRPC.'; $string['auto_add_remote_users'] = 'Ajouter automatiquement les utilisateurs distants'; $string['pluginname'] = 'Authentification MNet'; -$string['rpc_negotiation_timeout'] = 'Délai de négociation RPC échu'; +$string['rpc_negotiation_timeout'] = 'Délai d\'échéance de négociation RPC'; $string['sso_idp_description'] = 'La publication de ce service permet à vos utilisateurs d\'utiliser le site {$a} sans devoir s\'y reconnecter.
    • Dépendance : vous devez aussi vous abonner au service SSO (fournisseur de service) sur {$a}.

    L\'abonnement à ce service permet à des utilisateurs authentifiés par le serveur {$a} d\'accéder à votre site sans devoir se reconnecter.
    • Dépendance : vous devez aussi publier le service SSO (fournisseur de service) de {$a}.

    '; $string['sso_idp_name'] = 'SSO (fournisseur d\'identité)'; $string['sso_mnet_login_refused'] = 'L\'utilisateur {$a->user} n\'est pas autorisé à se connecter depuis {$a->host}.'; diff --git a/html/moodle2/langpacks/fr/badges.php b/html/moodle2/langpacks/fr/badges.php index 762c8d54f2..63d8b7fdf1 100644 --- a/html/moodle2/langpacks/fr/badges.php +++ b/html/moodle2/langpacks/fr/badges.php @@ -80,13 +80,35 @@ La seule URL requise pour la vérification est /badges/assertion.php. Si vous pouvez donc modifier les réglages de votre pare-feu pour permettre l\'accès externe à ce fichier, la vérification des badges fonctionnera.'; $string['backpackbadges'] = 'Vous avez {$a->totalbadges} badge(s) affichés de {$a->totalcollections} collection(s). Modifier les réglages du sac à badges.'; +$string['backpackcannotsendverification'] = 'Impossible d\'envoyer le courriel de vérification'; $string['backpackconnection'] = 'Connexion de sac à badges'; +$string['backpackconnectioncancelattempt'] = 'Se connecter avec une adresse de courriel différente'; +$string['backpackconnectionconnect'] = 'Se connecter au sac à badges'; $string['backpackconnection_help'] = 'Cette page vous permet de mettre en place une connexion vers un fournisseur de sac à badges externe. Une telle connexion vous permet d\'afficher des badges externes sur ce site et de copier les badges obtenus ici dans votre sac à badges. Actuellement, seul le sac à badges Mozilla OpenBadges Backpack est supporté. Vous devez vous abonner à un tel service avant de mettre en place une connexion sur cette page.'; +$string['backpackconnectionresendemail'] = 'Envoyer à nouveau le courriel de vérification'; +$string['backpackconnectionunexpectedresult'] = 'Un problème est survenu lors du contact avec le sac à badges. Veuillez ressayer.

    Si ce problème persiste, contactez l\'administrateur de votre plateforme.'; $string['backpackdetails'] = 'Réglages du sac à badges'; $string['backpackemail'] = 'Adresse de courriel'; $string['backpackemail_help'] = 'Adresse de courriel associée à votre sac à badges. Lorsque vous êtes connecté, tous les badges reçus sur ce site seront associés à cette adresse de courriel.'; +$string['backpackemailverificationpending'] = 'Vérification en attente'; +$string['backpackemailverifyemailbody'] = 'Bonjour, + +Une connexion à votre sac à badges OpenBadges a été demandée depuis « {$a->sitename} » au moyen de votre adresse de courriel. + +Pour confirmer cette demande et activer la connexion à votre sac à badges, veuillez cliquer sur le lien ci-dessous. + +{$a->link} + +Dans la plupart des logiciels de courriel, cette adresse devrait apparaître comme un lien de couleur bleue qu\'il vous suffit de cliquer. Si cela ne fonctionne pas, copiez ce lien et collez-le dans la barre d\'adresse de votre navigateur web. + +Si vous avez besoin d\'aide, veuillez contacter l\'administrateur du site, +{$a->admin}'; +$string['backpackemailverifyemailsubject'] = '{$a} : vérification de courriel sac à badges OpenBadges'; +$string['backpackemailverifypending'] = 'Un message de vérification a été envoyé à l\'adresse {$a}. Cliquez sur le lien de vérification de ce message pour activer la connexion à votre sac à badge.'; +$string['backpackemailverifysuccess'] = 'Votre adresse de courriel a été vérifiée. Vous êtes désormais connecté à votre sac à badges.'; +$string['backpackemailverifytokenmismatch'] = 'Le jeton dans le lien que vous avez cliqué ne correspond pas au jeton enregistré. Assurez-vous de cliquer sur le lien indiqué dans le courriel le plus récent que vous avez reçu.'; $string['backpackimport'] = 'Réglages d\'importation de badges'; $string['backpackimport_help'] = 'Une fois établie la connexion à votre sac à badges, les badges de votre sac à badges peuvent être affichés sur votre page de badges et sur votre page de profil. diff --git a/html/moodle2/langpacks/fr/calendar.php b/html/moodle2/langpacks/fr/calendar.php index bd743bbde8..40e6d00643 100644 --- a/html/moodle2/langpacks/fr/calendar.php +++ b/html/moodle2/langpacks/fr/calendar.php @@ -64,6 +64,9 @@ $string['errorbadsubscription'] = 'Abonnement au calendrier introuvable'; $string['errorbeforecoursestart'] = 'Impossible de fixer un événement avant le début du cours'; $string['errorcannotimport'] = 'Vous ne pouvez pas configurer d\'abonnement au calendrier en ce moment.'; +$string['errorhasuntilandcount'] = 'Soit UNTIL, soit COUNT doit être mentionné dans une règle de récurrence, mais pas les deux termes à la fois dans une même règle.'; +$string['errorinvalidbydayprefix'] = 'Des valeurs entières précédant une règle BYDAY ne peuvent être présentes que pour les règles MONTHLY ou YEARLY.'; +$string['errorinvalidbydaysuffix'] = 'Les valeurs valides pour le jour de la semaine dans une règle BYDAY sont MO, TU, WE, TH, FR, SA et SU.'; $string['errorinvalidbyhour'] = 'Les valeurs valides pour la règle BYHOUR sont 0 à 59.'; $string['errorinvalidbyminute'] = 'Les valeurs valides pour la règle BYMINUTE sont 0 à 59.'; $string['errorinvalidbymonth'] = 'Les valeurs valides pour la règle BYMONTH sont 1 à 12.'; @@ -77,8 +80,10 @@ $string['errorinvalidinterval'] = 'La valeur pour la règle INTERVAL doit être un entier positif.'; $string['errorinvalidminutes'] = 'Indiquez une durée en minutes (un nombre entre 1 et 999).'; $string['errorinvalidrepeats'] = 'Indiquez un nombre d\'événements (un nombre entre 1 et 99).'; +$string['errormustbeusedwithotherbyrule'] = 'La règle BYSETPOS ne doit être utilisée qu\'en compagnie d\'une autre partie de règle BYxxx.'; $string['errornodescription'] = 'Une description est requise'; $string['errornoeventname'] = 'Le nom est requis'; +$string['errornonyearlyfreqwithbyweekno'] = 'La règle BYWEEKNO n\'est valide que pour les règles YEARLY.'; $string['errorrequiredurlorfile'] = 'Une URL ou un fichier sont nécessaires pour importer un calendrier.'; $string['errorrrule'] = 'La règle de récurrence transmise semble incorrecte'; $string['errorrruleday'] = 'La règle de récurrence a un paramètre de jour non valide'; diff --git a/html/moodle2/langpacks/fr/error.php b/html/moodle2/langpacks/fr/error.php index 2f93cc4c36..880ebbe53c 100644 --- a/html/moodle2/langpacks/fr/error.php +++ b/html/moodle2/langpacks/fr/error.php @@ -375,8 +375,8 @@ $string['maxbytes'] = 'Le fichier dépasse la taille maximale permise.'; $string['maxbytesfile'] = 'La taille du fichier {$a->file} est trop grande. La taille maximale d\'un fichier à déposer est de {$a->size}.'; $string['messagingdisable'] = 'La messagerie est désactivée sur ce site'; -$string['mimetexisnotexist'] = 'Votre serveur n\'est pas configurer que faire tourner mimeTeX. Veuillez télécharger le programme approprié à votre plateforme sur http://moodle.org/download/mimetex/, ou les sources en C du programme ici http://www.forkosh.com/mimetex.zip, les compiler et placer le programme dans le dossier moodle/filter/tex/'; -$string['mimetexnotexecutable'] = 'Votre programme mimetex n\'est pas exécutable !'; +$string['mimetexisnotexist'] = 'Votre serveur n\'est pas configuré pour lancer mimeTeX. Veuillez télécharger le programme approprié à votre plateforme sur http://moodle.org/download/mimetex/, ou les sources en C du programme ici http://www.forkosh.com/mimetex.zip, les compiler et placer le programme dans le dossier moodle/filter/tex/'; +$string['mimetexnotexecutable'] = 'Votre programme mimetex n\'est pas exécutable !'; $string['missingfield'] = 'Le champ « {$a} » est manquant'; $string['missingkeyinsql'] = 'Erreur : paramètre « {$a} » manquant dans la requête'; $string['missing_moodle_backup_xml_file'] = 'Fichier de sauvegarde XML manquant : {$a}'; diff --git a/html/moodle2/langpacks/fr/hvp.php b/html/moodle2/langpacks/fr/hvp.php new file mode 100644 index 0000000000..9ccc29613d --- /dev/null +++ b/html/moodle2/langpacks/fr/hvp.php @@ -0,0 +1,148 @@ +. + +/** + * Strings for component 'hvp', language 'fr', branch 'MOODLE_31_STABLE' + * + * @package hvp + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['action'] = 'Action'; +$string['addedandupdatelibraries'] = 'Ajouter {$a->%new} de nouvelles bibliothèques H5P et mettre à jour {$a->%old} les anciennes.'; +$string['addednewlibraries'] = 'Ajouter {$a->%new} de nouvelles bibliothèques H5P.'; +$string['addlibraries'] = 'Ajouter des bibliothèques.'; +$string['ajaxfailed'] = 'Échec du téléchargement des données.'; +$string['attribution'] = 'Attribution 4.0'; +$string['author'] = 'Auteur'; +$string['availableversion'] = 'Mise à jour disponible'; +$string['cancellabel'] = 'Annuler'; +$string['close'] = 'Fermer'; +$string['confirmdialogbody'] = 'Merci de confirmer que vous voulez continuer. Cette action est irréversible.'; +$string['confirmdialogheader'] = 'Confirmer l\'action'; +$string['confirmlabel'] = 'Confirmer'; +$string['contentchanged'] = 'Ce contenu a changé depuis votre dernière utilisation.'; +$string['contentstatefrequency_help'] = 'En secondes, à quelle fréquence souhaitez-vous que les utilisateurs enregistrent leurs progrès. Augmentez ce nombre si vous rencontrez des problèmes avec les requêtes ajax.'; +$string['copyright'] = 'Droits d\'utilisation'; +$string['copyrightinfo'] = 'Informations sur le copyright'; +$string['copyrightstring'] = 'Copyright'; +$string['copyrighttitle'] = 'Voir les informations du copyright pour ce contenu.'; +$string['couldnotcopy'] = 'Le fichier n\'a pas pu être copié.'; +$string['couldnotsave'] = 'Le fichier n\'a pas pu être sauvegardé.'; +$string['create'] = 'Créer'; +$string['currentpage'] = 'Page $current de $total'; +$string['disablefileextensioncheck'] = 'Désactiver la vérification de l\'extension du fichier'; +$string['disablefileextensioncheckwarning'] = 'Attention ! Désactiver la vérification de l\'extension du fichier peut entrainer des problèmes de sécurité car cela autorise le dépôt de fichiers php. Par conséquent, des personnes mal intentionnées pourraient exécuter du code sur votre site. Veuillez vous assurer que vous connaissez le contenu de tout ce que vous déposez.'; +$string['disablefullscreen'] = 'Désactiver le plein écran'; +$string['displayoptions'] = 'Afficher les options'; +$string['download'] = 'Télécharger'; +$string['downloadandupdate'] = 'Télécharger et mettre à jour'; +$string['downloadtitle'] = 'Télécharger ce contenu comme un fichier H5P.'; +$string['editor'] = 'Éditeur'; +$string['empty'] = 'Pas de résultats disponibles'; +$string['enableabout'] = 'À propos du bouton H5P'; +$string['enabledownload'] = 'Bouton de téléchargement'; +$string['enableframe'] = 'Afficher la barre d\'action et le cadre'; +$string['enablejavascript'] = 'Veuillez activer le JavaScript.'; +$string['enablesavecontentstate_help'] = 'Enregistrer automatiquement l\'état actuel du contenu interactif pour chaque utilisateur. Cela veut dire que l\'utilisateur pourra reprendre où il s\'est arrêté.'; +$string['filenotimage'] = 'Le fichier n\'est pas une image.'; +$string['filetypenotallowed'] = 'Ce type de fichier n\'est pas autorisé.'; +$string['finished'] = 'Terminé'; +$string['fullscreen'] = 'Plein écran'; +$string['h5pfile'] = 'Fichier H5P'; +$string['h5ptitle'] = 'Visitez H5P.org pour consulter plus de contenus sympas.'; +$string['hvp:addinstance'] = 'Ajouter une nouvelle activité H5P'; +$string['hvp:restrictlibraries'] = 'Restreindre une bibliothèque H5P.'; +$string['hvp:savecontentuserdata'] = 'Enregistrer les données d\'utilisateurs du contenu H5P'; +$string['hvp:updatelibraries'] = 'Mettre à jour la version d\'une bibliothèque H5P.'; +$string['hvp:updatesavailable'] = 'Recevoir des notifications lorsqu\'une nouvelle version d\'H5P est disponible.'; +$string['hvp:userestrictedlibraries'] = 'Utiliser des bibliothèques H5P restreintes'; +$string['hvp:viewresults'] = 'Voir le résultat du contenu H5P'; +$string['installedlibraries'] = 'Installer des bibliothèques'; +$string['intro'] = 'Introduction'; +$string['invalidaudioformat'] = 'Format du fichier audio non valide. Utilisez mp3 ou wav.'; +$string['invalidcontentfolder'] = 'Contenu du dossier non valide.'; +$string['invalidfieldtype'] = 'Type de champ non valide.'; +$string['invalidfile'] = 'Fichier « {$a->%filename} » non autorisé. Seuls les fichiers avec les extensions suivantes sont autorisés : {$a->%files-allowed}.'; +$string['invalidimageformat'] = 'Format de l\'image non valide. Utilisez jpg, png ou gif.'; +$string['invalidlanguagefile'] = 'Fichier de langue non valide {$a->%file} dans la bibliothèque {$a->%library}'; +$string['invalidlanguagefile2'] = 'Un fichier de langue non valide {$a->%languageFile} a été ajouté dans la bibliothèque {$a->%name}'; +$string['invalidlibrary'] = 'Bibliothèque non valide'; +$string['invalidlibraryname'] = 'Nom de bibliothèque non valide : {$a->%name}'; +$string['invalidlibraryproperty'] = 'Impossible de lire les propriétés {$a->%property} de {$a->%library}'; +$string['invalidparameters'] = 'Paramètres non valides'; +$string['invalidvideoformat'] = 'Format de la vidéo non valide. Utilisez mp4 ou webm.'; +$string['javascriptloading'] = 'En attente du Javascript...'; +$string['libraries'] = 'Bibliothèques H5P'; +$string['librarylistactions'] = 'Actions'; +$string['librarylistinstances'] = 'Instances'; +$string['librarylistlibrarydependencies'] = 'Dépendances entre les bibliothèques'; +$string['librarylistrestricted'] = 'Restreint'; +$string['librarylisttitle'] = 'Titre'; +$string['license'] = 'Licence'; +$string['loadingdata'] = 'Chargement des données.'; +$string['lookforupdates'] = 'Rechercher des mises à jour'; +$string['maxscore'] = 'Score maximum'; +$string['messageprovider:updates'] = 'Notifications des mises à jour d\'H5P disponibles'; +$string['missinglibrary'] = 'Bibliothèque requise manquante {$a->@library}'; +$string['missinglibraryfile'] = 'Le fichier « {$a->%file} » est manquant dans la bibliothèque : « {$a->%name} »'; +$string['missingparameters'] = 'Paramètres manquants'; +$string['missinguploadpermissions'] = 'Veuillez noter que les bibliothèques peuvent exister dans le fichier que vous avez téléchargé, mais vous n\'êtes pas autorisé à télécharger de nouvelles bibliothèques. Contactez l\'administrateur du site.'; +$string['modulename'] = 'Contenu interactif'; +$string['modulenameplural'] = 'Contenu interactif'; +$string['nextpage'] = 'Page suivante'; +$string['nocopyright'] = 'Aucune information sur le copyright de ce contenu n\'est disponible.'; +$string['nodata'] = 'Il n\'y a pas de données disponibles correspondant à vos critères.'; +$string['noh5ps'] = 'Il n\'y a pas de contenu interactif disponible pour ce cours.'; +$string['nojson'] = 'Le fichier h5p.json principal n\'est pas valide'; +$string['noparameters'] = 'Pas de paramètres'; +$string['nopermissiontorestrict'] = 'Vous n\'avez pas les droits pour restreindre des bibliothèques.'; +$string['nopermissiontosavecontentuserdata'] = ''; +$string['nopermissiontosaveresult'] = 'Vous n\'avez pas les droits pour enregistrer les résultats de ce contenu.'; +$string['nopermissiontoupgrade'] = 'Vous n\'avez pas les droits pour mettre à jour les bibliothèques.'; +$string['nopermissiontoviewresult'] = 'Vous n\'avez pas les droits pour voir les résultats de ce contenu.'; +$string['nosuchlibrary'] = 'Cette bibliothèque n\'existe pas'; +$string['notapplicable'] = 'N/A'; +$string['noziparchive'] = 'Votre version de PHP ne supporte pas ZipArchive.'; +$string['onlyupdate'] = 'Mettre à jour les bibliothèques existantes uniquement.'; +$string['options'] = 'Options'; +$string['pluginadministration'] = 'H5P'; +$string['pluginname'] = 'H5P'; +$string['previouspage'] = 'Page précédente'; +$string['search'] = 'Rechercher'; +$string['settings'] = 'Paramètres H5P'; +$string['size'] = 'Taille'; +$string['source'] = 'Source'; +$string['startingover'] = 'Vous allez recommencer depuis le début.'; +$string['title'] = 'Titre'; +$string['unabletodownloadh5p'] = 'Autoriser le téléchargement d\'un fichier H5P'; +$string['updatedlibraries'] = 'Bibliothèques H5P {$a->%old} mises à jour.'; +$string['updatelibraries'] = 'Mettre à jour toutes les bibliothèques'; +$string['updatesavailable'] = 'Des mises à jour sont disponibles pour vos contenus H5P.'; +$string['updatesavailablemsgpt1'] = 'Des mises à jour sont disponibles pour les contenus H5P que vous avez installés sur votre site Moodle.'; +$string['updatesavailabletitle'] = 'De nouvelles mises à jour de H5P sont disponibles'; +$string['upgradereturn'] = 'Retour'; +$string['upload'] = 'Déposer'; +$string['uploadlibraries'] = 'Déposer des bibliothèques'; +$string['user'] = 'Utilisateur'; +$string['welcomeheader'] = 'Bienvenue dans le monde d\'H5P !'; +$string['whyupdatepart1'] = 'Vous pouvez lire pourquoi il est important de faire les mises à jour et leurs avantages sur la page suivante : Why Update H5P.'; +$string['year'] = 'Année'; +$string['years'] = 'Année(s)'; diff --git a/html/moodle2/langpacks/fr/moodle.php b/html/moodle2/langpacks/fr/moodle.php index 8b02a79103..dfc2010078 100644 --- a/html/moodle2/langpacks/fr/moodle.php +++ b/html/moodle2/langpacks/fr/moodle.php @@ -599,11 +599,11 @@ La création d\'un compte pour {$a->sitename} a été demandée en utilisant votre adresse de courriel. Pour confirmer votre enregistrement, veuillez visiter la page web suivante : - {$a->link} +{$a->link} -Dans la plupart des logiciels de courriel, cette adresse est un lien actif qu\'il vous suffit de cliquer. Si cela ne fonctionne pas, copiez ce lien (qui peut être coupé sur deux lignes) et collez-le dans la barre d\'adresse de votre navigateur web. +Dans la plupart des logiciels de courriel, cette adresse devrait apparaître comme un lien de couleur bleue qu\'il vous suffit de cliquer. Si cela ne fonctionne pas, copiez ce lien et collez-le dans la barre d\'adresse de votre navigateur web. -Si vous avez besoin d\'aide, veuillez contacter l\'administrateur du site. +Si vous avez besoin d\'aide, veuillez contacter l\'administrateur du site, {$a->admin}'; $string['emailconfirmationsubject'] = '{$a} : confirmation de l\'ouverture du compte'; $string['emailconfirmsent'] = '

    Un message vous a été envoyé à l\'adresse de courriel {$a}.

    Il contient les instructions pour terminer votre enregistrement.

    Si vous rencontrez des difficultés, veuillez contacter l\'administrateur du site.

    '; @@ -641,9 +641,10 @@ {$a->link} -Dans la plupart des logiciels de messagerie, cette adresse devrait apparaître comme un lien de couleur bleue qu\'il vous suffit de cliquer. Si cela ne fonctionne pas, copiez ce lien et collez-le dans la barre d\'adresse de votre navigateur web. +Dans la plupart des logiciels de courriel, cette adresse devrait apparaître comme un lien de couleur bleue qu\'il vous suffit de cliquer. Si cela ne fonctionne pas, copiez ce lien et collez-le dans la barre d\'adresse de votre navigateur web. -Si vous avez besoin d\'aide, veuillez contacter l\'administrateur du site, {$a->admin}'; +Si vous avez besoin d\'aide, veuillez contacter l\'administrateur du site, +{$a->admin}'; $string['emailpasswordchangeinfodisabled'] = 'Bonjour {$a->firstname}, Quelqu\'un (probablement vous) a demandé un nouveau mot de passe pour votre compte sur « {$a->sitename} ». @@ -663,9 +664,10 @@ {$a->link} -Dans la plupart des logiciels de messagerie, cette adresse devrait apparaître comme un lien de couleur bleue qu\'il vous suffit de cliquer. Si cela ne fonctionne pas, copiez ce lien et collez-le dans la barre d\'adresse de votre navigateur web. +Dans la plupart des logiciels de courriel, cette adresse devrait apparaître comme un lien de couleur bleue qu\'il vous suffit de cliquer. Si cela ne fonctionne pas, copiez ce lien et collez-le dans la barre d\'adresse de votre navigateur web. -Si vous avez besoin d\'aide, veuillez contacter l\'administrateur du site, {$a->admin}'; +Si vous avez besoin d\'aide, veuillez contacter l\'administrateur du site, +{$a->admin}'; $string['emailpasswordconfirmationsubject'] = '{$a} : confirmation du changement de mot de passe'; $string['emailpasswordconfirmmaybesent'] = '

    Si vous avez fourni un nom d\'utilisateur ou une adresse de courriel corrects, un message vous a été envoyé par courriel.

    Ce message contient de simples instructions pour confirmer et terminer cette procédure de modification de mot de passe. Si vous n\'arrivez toujours pas à vous connecter, veuillez contacter l\'administrateur du site.

    '; $string['emailpasswordconfirmnoemail'] = '

    Le compte utilisateur indiqué n\'a pas d\'adresse de courriel.

    @@ -1184,7 +1186,7 @@ $string['newpassword'] = 'Nouveau mot de passe'; $string['newpasswordfromlost'] = 'Attention ! Votre Mot de passe actuel vous a été envoyé dans le deuxième des deux courriels envoyés durant le processus de récupération de mot de passe. Veuillez vous assurer que vous avez bien reçu votre mot de passe de remplacement avant de continuer sur cette page.'; $string['newpassword_help'] = 'Saisissez un nouveau mot de passe ou laissez vide pour conserver le mot de passe actuel.'; -$string['newpasswordtext'] = 'Bonjour {$a->firstname}, +$string['newpasswordtext'] = 'Bonjour, Le mot de passe de votre compte sur « {$a->sitename} » a été remplacé par un nouveau mot de passe temporaire. @@ -1196,7 +1198,7 @@ Merci de visiter cette page afin de changer de mot de passe : {$a->link} -Dans la plupart des logiciels de messagerie, cette adresse devrait apparaître comme un lien de couleur bleue qu\'il vous suffit de cliquer. Si cela ne fonctionne pas, copiez ce lien et collez-le dans la barre d\'adresse de votre navigateur web. +Dans la plupart des logiciels de courriel, cette adresse devrait apparaître comme un lien de couleur bleue qu\'il vous suffit de cliquer. Si cela ne fonctionne pas, copiez ce lien et collez-le dans la barre d\'adresse de votre navigateur web. Si vous avez besoin d\'aide, veuillez contacter l\'administrateur du site {$a->sitename}, {$a->signoff}'; @@ -1213,7 +1215,7 @@ Un nouveau compte a été créé pour vous sur le site « {$a->sitename} » et un mot de passe temporaire vous a été délivré. -Les informations nécessaires à votre connexion sont maintenant : +Les informations nécessaires à votre connexion sont maintenant : nom d\'utilisateur : {$a->username} mot de passe : {$a->newpassword} @@ -1222,7 +1224,7 @@ Pour commencer à travailler sur « {$a->sitename} », veuillez vous connecter en cliquant sur le lien ci-dessous. {$a->link} -Dans la plupart des logiciels de messagerie, cette adresse devrait apparaître comme un lien de couleur bleue qu\'il vous suffit de cliquer. Si cela ne fonctionne pas, copiez ce lien et collez-le dans la barre d\'adresse de votre navigateur web. +Dans la plupart des logiciels de courriel, cette adresse devrait apparaître comme un lien de couleur bleue qu\'il vous suffit de cliquer. Si cela ne fonctionne pas, copiez ce lien et collez-le dans la barre d\'adresse de votre navigateur web. Si vous avez besoin d\'aide, veuillez contacter l\'administrateur du site {$a->sitename}, {$a->signoff}'; diff --git a/html/moodle2/langpacks/it/admin.php b/html/moodle2/langpacks/it/admin.php index 63a7bdcebb..e3d9b14b4e 100644 --- a/html/moodle2/langpacks/it/admin.php +++ b/html/moodle2/langpacks/it/admin.php @@ -796,7 +796,7 @@ $string['pathtodot_help'] = 'Percorso assoluto per l\'eseguibile dot, del tipo /usr/bin/dot. Per generare grafici a partire dai file DOT, è necessario installare l\'eseguibile dot e configurare il percorso. Da notare che per il momento dot è usato solamente per le funzioni di profilazione presenti in Moodle (Sviluppo->Profilazione)'; $string['pathtodu'] = 'Percorso per du'; $string['pathtogs'] = 'Percorso per ghostscript'; -$string['pathtogs_help'] = 'Generalmente su installazioni Linux è possibile usare \'/usr/bin/gs. Su Windows probabilmente è possibile usare \'c:gsbingswin32c.exe\'. Accertarsi che non ci siano spazi nel percorso, nel caso copiare i file \'gswin32c.exe\' e \'gsdll32.dll\' in una cartella il cui percorso è privo di spazi.'; +$string['pathtogs_help'] = 'Generalmente su installazioni Linux è possibile usare \'/usr/bin/gs. Su Windows probabilmente è possibile usare \'\'c:\\gs\\bin\\gswin32c.exe\'. Accertarsi che non ci siano spazi nel percorso, nel caso copiare i file \'gswin32c.exe\' e \'gsdll32.dll\' in una cartella il cui percorso è privo di spazi.'; $string['pathtopgdump'] = 'Percorso per pg_dump'; $string['pathtopgdumpdesc'] = 'E\' nescessario solo se hai più di un pg_dump sul sistema (per esempio hai più versioni di postgresql installate)'; $string['pathtopgdumpinvalid'] = 'Percorso non valido per pg_dump - percorso errato o non eseguibile'; diff --git a/html/moodle2/langpacks/it/hvp.php b/html/moodle2/langpacks/it/hvp.php new file mode 100644 index 0000000000..f1cd32b8aa --- /dev/null +++ b/html/moodle2/langpacks/it/hvp.php @@ -0,0 +1,216 @@ +. + +/** + * Strings for component 'hvp', language 'it', branch 'MOODLE_31_STABLE' + * + * @package hvp + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['action'] = 'Azione'; +$string['addedandupdatelibraries'] = '{$a->%new} nuove librerie H5P e {$a->%old} librerie aggiornate.'; +$string['addednewlibraries'] = '{$a->%new} nuove librerie H5P aggiunte.'; +$string['addlibraries'] = 'Aggiungi librerie'; +$string['ajaxfailed'] = 'Caricamento di dati fallito.'; +$string['attribution'] = 'Attribuzione 4.0'; +$string['attributionnc'] = 'Attribuzione-Non Commerciale 4.0'; +$string['attributionncnd'] = 'Attribuzione-Non Commerciale-Non opere derivate 4.0'; +$string['attributionncsa'] = 'Attribuzione-Non Commerciale-Condividi allo stesso modo 4.0'; +$string['attributionnd'] = 'Attribuzione-Non Opere Derivate 4.0'; +$string['attributionsa'] = 'Attribuzione-Condividi allo stesso modo 4.0'; +$string['author'] = 'Autore'; +$string['availableversion'] = 'Aggiornamento disponibile'; +$string['cancellabel'] = 'Annulla'; +$string['close'] = 'Chiudi'; +$string['confirmdialogbody'] = 'Per favore confermare che desideri procedere. Questa azione non è reversibile.'; +$string['confirmdialogheader'] = 'Conferma azione'; +$string['confirmlabel'] = 'Conferma'; +$string['contentchanged'] = 'Questo contenuto è stato modificato dall\'ultima volta che l\'hai utilizzato.'; +$string['contentstatefrequency'] = 'Frequenza di salvataggio dello stato del contenuto'; +$string['contentstatefrequency_help'] = 'Indicare in secondi, quanto spesso desideri che l\'utente possa effettuare il salvataggio automatico del suo progresso. Aumenta il numero di secondi se hai problemi con molte richieste ajax'; +$string['copyright'] = 'Diritti di utilizzo'; +$string['copyrightinfo'] = 'Informazioni sul Copyright'; +$string['copyrightstring'] = 'Copyright'; +$string['copyrighttitle'] = 'Visualizza informazioni sul copyright per questo contenuto.'; +$string['couldnotcopy'] = 'Impossibile copiare il file.'; +$string['couldnotsave'] = 'Impossibile salvare il file.'; +$string['create'] = 'Crea'; +$string['currentpage'] = 'Pagina $current di $total'; +$string['currentversion'] = 'Stai eseguendo'; +$string['disablefileextensioncheck'] = 'Disabilita il controllo dell\'estensione dei file'; +$string['disablefileextensioncheckwarning'] = 'Attenzione! Disabilitando il controllo dell\'estensione dei file si potrebbe verificare problemi dato che viene consentito il caricamento di file php. Questo potrebbe consentire a persone ostili di eseguire codice malevole nel tuo sito. Per favore verifica attentamente ciò che stai caricando.'; +$string['disablefullscreen'] = 'Disabilita schermo intero'; +$string['displayoptions'] = 'Visualizza opzioni'; +$string['download'] = 'Scarica'; +$string['downloadandupdate'] = 'Scarica e Aggiorna'; +$string['downloadtitle'] = 'Scarica questo contenuto come file H5P.'; +$string['editor'] = 'Editor'; +$string['embed'] = 'Incorpora'; +$string['embedtitle'] = 'Visualizza il codice incorporato per questo contenuto.'; +$string['empty'] = 'Nessun risultato disponibile'; +$string['enableabout'] = 'Pulsante informazioni su H5P'; +$string['enablecopyright'] = 'Pulsante Copyright'; +$string['enabledownload'] = 'Pulsante download'; +$string['enableembed'] = 'Pulsante per incorporare'; +$string['enableframe'] = 'Mostra action bar e frame'; +$string['enablejavascript'] = 'Per favore abilita JavaScript.'; +$string['enablesavecontentstate'] = 'Salva lo stato del contenuto'; +$string['enablesavecontentstate_help'] = 'Salva automaticamente lo stato attuale del contenuto interattivo per ogni utente. Questo permette all\'utente di ritornare al punto in cui ha interrotto la navigazione.'; +$string['externalcommunication'] = 'Comunicazione esterna'; +$string['externalcommunication_help'] = 'Aiuta lo sviluppo di H5P contribuendo con l\'invio di dati anonimi sull\'uso di H5P. Disabilitando questa opzione, impedirai al tuo sito di ricevere gli aggiornamenti più recenti di H5P.Per sapere di più su quali dati sono inviati, vai su h5p.org.'; +$string['filenotimage'] = 'Il file non è un\'immagine.'; +$string['filetypenotallowed'] = 'Tipo di file non consentito.'; +$string['finished'] = 'Completato'; +$string['fullscreen'] = 'Abilita schermo intero'; +$string['gpl'] = 'General Public License v3'; +$string['h5pfile'] = 'File H5P'; +$string['h5ptitle'] = 'Vai su H5P.org per dare un\'occhiata a ulteriori contenuti.'; +$string['hideadvanced'] = 'Nascondi avanzate'; +$string['hvp:addinstance'] = 'Aggiungere una nuova attività H5P'; +$string['hvp:getcachedassets'] = 'Ottieni le risorse dei contenuti h5p memorizzate in cache'; +$string['hvp:getcontent'] = 'Ottieni/visualizza il contenuto del file H5P nel corso'; +$string['hvp:restrictlibraries'] = 'Limita l\'uso di una libreria H5P'; +$string['hvp:savecontentuserdata'] = 'Salva i dati dell\'utente del contenuto H5P'; +$string['hvp:saveresults'] = 'Salva il risultato del contenuto H5P'; +$string['hvp:updatelibraries'] = 'Aggiorna la versione di una libreria H5P'; +$string['hvp:updatesavailable'] = 'Ricevi notifiche degli aggiornamenti disponibili di H5P'; +$string['hvp:userestrictedlibraries'] = 'Utilizza le librerie H5P soggette a restrizioni'; +$string['hvp:viewresults'] = 'Visualizza il risultato del contenuto H5P'; +$string['installedlibraries'] = 'Librerie installate'; +$string['intro'] = 'Introduzione'; +$string['invalidaudioformat'] = 'Formato file audio non valido. Usare mp3 o wav.'; +$string['invalidcontentfolder'] = 'Contenuto della cartella non valido'; +$string['invalidfieldtype'] = 'Tipo di campo non valido.'; +$string['invalidfile'] = '"{$a->%filename}" file non consentito. Sono consentiti solamente file con le seguenti estensioni: {$a->%files-allowed}.'; +$string['invalidimageformat'] = 'Formato del file immagine non valido. Usare jpg, png o gif.'; +$string['invalidlibrary'] = 'Libreria non valida'; +$string['invalidlibraryname'] = 'Nome della libreria non valida: {$a->%name}'; +$string['invalidlibraryoption'] = 'Opzione illegale {$a->%option} in {$a->%library}'; +$string['invalidlibraryproperty'] = 'Impossibile leggere la proprietà {$a->%property} in {$a->%library}'; +$string['invalidmainjson'] = 'Manca un file principale h5p.json valido'; +$string['invalidparameters'] = 'Parametro non valido'; +$string['invalidsemanticsjson'] = 'Un file semantics.json non valido è stato incluso nella libreria {$a->%name}'; +$string['invalidsemanticstype'] = 'Errore interno H5P: tipo di contenuto sconosciuto "{$a->@type}" in semantics. Contenuto in eliminazione!'; +$string['invalidstring'] = 'La stringa inserita non è valida secondo l\'espressione regolare in semantics. (valore: "{$a->%value}", espressione regolare: "{$a->%regexp}")'; +$string['invalidvideoformat'] = 'Formato file video non valido. Usare mp4 o webm.'; +$string['javascriptloading'] = 'Caricamento di JavaScript...'; +$string['libraries'] = 'Librerie H5P'; +$string['librarylistactions'] = 'Azioni'; +$string['librarylistinstancedependencies'] = 'Dipendenze dell\'istanza'; +$string['librarylistinstances'] = 'Istanza'; +$string['librarylistlibrarydependencies'] = 'Dipendenze della libreria'; +$string['librarylistrestricted'] = 'Limitata'; +$string['librarylisttitle'] = 'Titolo'; +$string['license'] = 'Licenza'; +$string['loadingdata'] = 'Dati in caricamento.'; +$string['lookforupdates'] = 'Cerca aggiornamenti di H5P'; +$string['maxscore'] = 'Punteggio massimo'; +$string['messageprovider:updates'] = 'Notifica di aggiornamenti disponibili per H5P'; +$string['missingcontentfolder'] = 'Manca una cartella valida di contenuto'; +$string['missingcontentuserdata'] = 'Errore: impossibile trovare dati dell\'utente'; +$string['missingcoreversion'] = 'Il sistema non ha potuto installare il componente {$a->%component} pacchetto perché richiedere una versione più aggiornata del plugin H5P. Il sito attualmente sta utilizzando la versione {$a->%current}, mentre la versione richiesta è {$a->%required} o superiore. Dovresti aggiornare e riprovare nuovamente.'; +$string['missingdependency'] = 'Manca la dipendenza {$a->@dep} richiesta da {$a->@lib}.'; +$string['missingh5purl'] = 'Manca l\'URL per il file H5P'; +$string['missinglibrary'] = 'Manca la libreria obbligatoria {$a->@library}'; +$string['missinglibraryfile'] = 'Manca il file "{$a->%file}" dalla libreria: "{$a->%name}"'; +$string['missinglibraryjson'] = 'Impossibile trovare il file library.json in un formato json valido per la libreria {$a->%name}'; +$string['missinglibraryproperty'] = 'La proprietà obbligatoria {$a->%property} manca da {$a->%library}'; +$string['missingparameters'] = 'Parametri mancanti'; +$string['modulename'] = 'Contenuto Interattivo'; +$string['modulename_help'] = 'L\'attività H5P consente di creare contenuto interattivo come Video interattivi, +insiemi di domande, domande di tipo Drag and Drop, domande a scelta multipla, Presentazioni e molto altro. + +Oltre ad essere uno strumento per la creazione di contenuto, +H5P consente di riutilizzare e condividere contenuto +grazie alla possibilità di importare ed esportare files in formato H5P. + +Le interazioni con l\'utente e le valutazioni sono tracciate utilizzando xAPI +e sono rese disponibili nel Registro Valutatore di Moodle. + +E\' possibile aggiungere contenuto H5P effettuando l\'upload di un file .h5p. +E\' possibile creare e scaricare file .h5p su h5p.org'; +$string['modulename_link'] = 'https://h5p.org/moodle-more-help'; +$string['modulenameplural'] = 'Contenuto interattivo'; +$string['nextpage'] = 'Pagina successiva'; +$string['nocontent'] = 'Non è stato possibile analizzare il file content.json'; +$string['nocopyright'] = 'Nessuna informazione sul copyright disponibile per questo contenuto.'; +$string['noextension'] = 'Il file caricato non è un pacchetto HTML5 valido (il file non ha l\'estensione .h5p)'; +$string['noh5ps'] = 'Nessun contenuto interattivo disponibile in questo corso.'; +$string['nojson'] = 'Il file h5p.json principale non è valido'; +$string['noparameters'] = 'Nessun parametro'; +$string['noparse'] = 'Non è stato possibile analizzare il file h5p.json principale'; +$string['nopermissiontorestrict'] = 'Non hai i privilegi per limitare le librerie.'; +$string['nopermissiontosavecontentuserdata'] = 'Non hai i privilegi per salvare i dati dell\'utente del contenuto H5P.'; +$string['nopermissiontosaveresult'] = 'Non hai i privilegi per salvare i risultati di questo contenuto.'; +$string['nopermissiontoupgrade'] = 'Non hai i privilegi per eseguire l\'aggiornamento delle librerie.'; +$string['nopermissiontoviewresult'] = 'Non hai i privilegi per visualizzare i risultati di questo contenuto.'; +$string['nosuchlibrary'] = 'Libreria non esistente'; +$string['notapplicable'] = 'N/D'; +$string['nounzip'] = 'Il file caricato non è un pacchetto HTML5 valido (non è stato possibile scompattarlo)'; +$string['noziparchive'] = 'La tua versione di PHP non supporta ZipArchive.'; +$string['onlyupdate'] = 'Aggiorna solo le librerie esistenti'; +$string['options'] = 'Opzioni'; +$string['pd'] = 'Pubblico Dominio'; +$string['pluginadministration'] = 'H5P'; +$string['pluginname'] = 'H5P'; +$string['previouspage'] = 'Pagina precedente'; +$string['removeoldlogentries'] = 'Rimuovi vecchi log di H5P'; +$string['removetmpfiles'] = 'Rimuovi vecchi file temporanei di H5P'; +$string['resizescript'] = 'Includi questo script nel tuo sito se desideri il ridimensionamento dinamico del contenuto incorporato:'; +$string['score'] = 'Punteggio'; +$string['search'] = 'Cerca'; +$string['settings'] = 'Impostazioni H5P'; +$string['showadvanced'] = 'Mostra avanzate'; +$string['size'] = 'Dimensione'; +$string['source'] = 'Fonte'; +$string['startingover'] = 'Ricomincia da capo.'; +$string['thumbnail'] = 'Anteprima'; +$string['title'] = 'Titolo'; +$string['unabletocreatedir'] = 'Impossibile creare la directory.'; +$string['unabletodownloadh5p'] = 'Impossibile scaricare il file H5P'; +$string['unabletogetfieldtype'] = 'Impossibile ottenere il tipo di campo.'; +$string['updatedlibraries'] = '{$a->%old} librerie H5P aggiornate.'; +$string['updatelibraries'] = 'Aggiorna tutte le Librerie'; +$string['updatesavailable'] = 'Ci sono aggiornamenti disponibili per i tuoi tipi di contenuto H5P.'; +$string['updatesavailablemsgpt1'] = 'Ci sono aggiornamenti disponibili per i tipi di contenuto H5P che hai installato nel tuo Moodle.'; +$string['updatesavailablemsgpt3'] = 'L\'ultimo aggiornamento è stato pubblicato il: {$a}'; +$string['updatesavailabletitle'] = 'Nuovi aggiornamenti H5P disponibili'; +$string['upgrade'] = 'Aggiorna H5P'; +$string['upgradebuttonlabel'] = 'Aggiorna'; +$string['upgradedone'] = 'Hai correttamente aggiornato {$a} istanza(e) di contenuto.'; +$string['upgradeerrorcontent'] = 'Impossibile aggiornare il contenuto %id:'; +$string['upgradeerrordata'] = 'Impossibile caricare i dati per la libreria %lib.'; +$string['upgradeheading'] = 'Aggiorna {$a} contenuto'; +$string['upgradeinprogress'] = 'Aggiornamento alla versione %ver...'; +$string['upgrademessage'] = 'Stai per effettuare l\'aggiornamento di {$a} istanza/e di contenuto. Prego selezionare la versione dell\'aggiornamento.'; +$string['upgradenoavailableupgrades'] = 'Non ci sono aggiornamenti per questa libreria.'; +$string['upgradenothingtodo'] = 'Non ci sono istanze di contenuto da aggiornare.'; +$string['upgradereturn'] = 'Ritorna'; +$string['upload'] = 'Carica'; +$string['uploadlibraries'] = 'Carica librerie'; +$string['usebuttonbelow'] = 'Puoi utilizzare il pulsante qui sotto per scaricare automaticamente e aggiornare tutti i tuoi tipi di contenuto.'; +$string['user'] = 'Utente'; +$string['welcomecommunity'] = 'Ci auguriamo che H5P ti piaccia e di coinvolgerti nella nostra comunità attraverso i nostri forums}>forum e chat gitter}>H5P su Gitter'; +$string['welcomecontactus'] = 'Non esitare a contattarci per inviarci un tuo feedback. Prendiamo molto seriamente i feedback e ci dedichiamo a migliorare H5P ogni giorno!'; +$string['welcomegettingstarted'] = 'Prima di iniziare con H5P e Moodle dai un\'occhiata al nostro moodle_tutorial}>tutorial e ai nostri example_content}>esempi di contenuto suH5P.org per trovare l\'ispirazione.
    I contenuti più popolari sono già stati installati per tua comodità!'; +$string['welcomeheader'] = 'Benvenuto nel mondo H5P!'; +$string['year'] = 'Anno'; +$string['years'] = 'Anno/i'; diff --git a/html/moodle2/langpacks/ja/admin.php b/html/moodle2/langpacks/ja/admin.php index 3f396d1313..27f57700cb 100644 --- a/html/moodle2/langpacks/ja/admin.php +++ b/html/moodle2/langpacks/ja/admin.php @@ -650,7 +650,7 @@ {$a->link} -ほとんどのメールプログラムでは、あなたがクリックできる青いリンクとして表示されているはずです。クリックできない場合、あなたのブラウザウィンドウのアドレス欄にアドレスをコピー&ペーストしてください。 +ほとんどのメールプログラムでは、あなたがクリックできる青いリンクとして表示されているはずです。クリックできない場合、あなたのウェブブラウザウィンドウのアドレス欄にアドレスをコピー&ペーストしてください。 分からない場合、サイト管理者 ( {$a->admin}) にご連絡ください。'; $string['lockoutemailsubject'] = '{$a} のあなたのアカウントはロックアウトされました。'; diff --git a/html/moodle2/langpacks/ja/assign.php b/html/moodle2/langpacks/ja/assign.php index 20e94bf20e..678b8a1c6c 100644 --- a/html/moodle2/langpacks/ja/assign.php +++ b/html/moodle2/langpacks/ja/assign.php @@ -78,7 +78,7 @@ $string['attempthistory'] = '前回の提出'; $string['attemptnumber'] = '提出回数'; $string['attemptreopenmethod'] = '提出再オープン'; -$string['attemptreopenmethod_help'] = '学生の提出をどのように再オープンするか決定します。利用可能なオプションは下記のとおりです: +$string['attemptreopenmethod_help'] = '学生の提出をどのように再オープンするか決定します。利用可能なオプションは以下のとおりです:
    • なし - 学生の提出を再オープンすることはできません。
    • 手動 - 学生の提出は教師により再オープンすることができます。
    • diff --git a/html/moodle2/langpacks/ja/data.php b/html/moodle2/langpacks/ja/data.php index c3c520445a..8d3bf2aae5 100644 --- a/html/moodle2/langpacks/ja/data.php +++ b/html/moodle2/langpacks/ja/data.php @@ -352,18 +352,18 @@ $string['timemodified'] = '修正日時'; $string['todatabase'] = '>> データベース'; $string['type'] = 'フィールドタイプ'; -$string['undefinedprocessactionmethod'] = 'アクション「 {$a} 」を処理するためのメソッドがData_Presetに定義されていません。'; +$string['undefinedprocessactionmethod'] = 'アクション「 {$a} 」を処理するためのアクションメソッドがData_Presetに定義されていません。'; $string['unsupportedexport'] = '({$a->fieldtype}) をエクスポートできません。'; $string['updatefield'] = '既存のフィールドを更新します。'; $string['uploadfile'] = 'ファイルをアップロードする'; $string['uploadrecords'] = 'ファイルからエントリをアップロードする'; -$string['uploadrecords_help'] = 'エントリはテキストファイル経由でアップロードすることができます。ファイルのフォーマットは下記のとおりです: +$string['uploadrecords_help'] = 'テキストファイルによりエントリをアップロードすることができます。ファイルのフォーマットは以下のとおりです: * それぞれの行には1レコードを含みます。 * それぞれのレコードはカンマ (または他のデリミタ) で区切られた一連のデータです。 * 最初のレコードにはファイル内の残りのレコードを定義するフィールド名一覧を含みます。 -フィールドエンクロージャはレコード内のフィールド囲む文字です。通常、設定する必要はありません。'; +フィールド囲み文字はレコード内のフィールドを囲む文字です。通常、設定する必要はありません。'; $string['url'] = 'URL'; $string['usedate'] = '検索に含む'; $string['usestandard'] = 'プリセットを使用する'; diff --git a/html/moodle2/langpacks/ja/feedback.php b/html/moodle2/langpacks/ja/feedback.php index 1947f7c923..6edc508ebf 100644 --- a/html/moodle2/langpacks/ja/feedback.php +++ b/html/moodle2/langpacks/ja/feedback.php @@ -37,7 +37,7 @@ $string['anonymous_user'] = '匿名ユーザ'; $string['append_new_items'] = '新しいアイテムを追加する'; $string['autonumbering'] = '問題の自動番号付け'; -$string['autonumbering_help'] = 'それぞれの質問に対して自動ナンバリングを有効または無効にします。'; +$string['autonumbering_help'] = 'それぞれの質問の自動ナンバリングを有効または無効にします。'; $string['average'] = '平均'; $string['bold'] = '太字'; $string['calendarend'] = 'フィードバック {$a} 終了'; @@ -110,7 +110,7 @@ $string['edit_item'] = '質問を編集する'; $string['edit_items'] = '質問を編集する'; $string['email_notification'] = '送信通知を有効にする'; -$string['email_notification_help'] = 'この設定を有効にした場合、フィードバック送信に関して教師にメール通知されます。'; +$string['email_notification_help'] = 'この設定を有効にした場合、フィードバック送信に関して教師に通知されます。'; $string['emailteachermail'] = '{$a->username} がフィードバック活動「 {$a->feedback} 」を完了しました。 あなたはここで閲覧することができます: @@ -142,7 +142,7 @@ $string['feedback:viewreports'] = 'レポートを表示する'; $string['file'] = 'ファイル'; $string['filter_by_course'] = 'コースでフィルタする'; -$string['handling_error'] = 'フィードバック処理中にエラーが発生しました。'; +$string['handling_error'] = 'フィードバックモジュール処理中にエラーが発生しました。'; $string['hide_no_select_option'] = '「未選択」オプションを隠す'; $string['horizontal'] = '水平'; $string['importfromthisfile'] = 'このファイルからインポートする'; @@ -159,8 +159,8 @@ $string['labelcontents'] = 'コンテンツ'; $string['line_values'] = '評定'; $string['mapcourse'] = 'コースにフィードバックをマップする'; -$string['mapcourse_help'] = 'デフォルトではあなたのMoodleメインページで作成したフィードバックフォームはサイト全体およびすべてのコースにフィードバックブロックを設置することで利用することができます。あなたはフィードバックをスティッキーブロックにすることで強制的に表示することもできます。また、特定のコースにマッピングすることでフィードバックフォームが表示されるコースを制限することもできます。'; -$string['mapcourseinfo'] = 'このフィードバックはフィードバックブロックを使用してサイト全体で利用することができます。フィードバックをコースにマップすることにより、このフィードバックを利用できるコースを制限することができます。コースを検索して、このフィードバックをマップしてください。'; +$string['mapcourse_help'] = 'デフォルトではあなたのホームページで作成したフィードバックフォームはサイト全体およびすべてのコースにフィードバックブロックを設置することで利用することができます。あなたはフィードバックをスティッキーブロックにすることで強制的に表示することもできます。また、特定のコースにマッピングすることでフィードバックフォームが表示されるコースを制限することもできます。'; +$string['mapcourseinfo'] = 'このフィードバックはフィードバックブロックを使用してサイト全体で利用することができます。フィードバックをコースにマップすることにより、このフィードバックを利用できるコースを制限することができます。コースを検索してこのフィードバックをマップしてください。'; $string['mapcoursenone'] = 'マップされたコースはありません。このフィードバックはすべてのコースで利用できます。'; $string['mapcourses'] = 'フィードバックをコースにマップする'; $string['mapcourses_help'] = 'あなたの検索結果からコースを選択した後、コースにマップすることで選択したコースとこのフィードバックを関連付けることができます。Ctrlキーを押しながら複数のコースを選択することも、Shiftキーを押しながら一連のコースを選択することもできます。コースに関連付けたフィードバックはいつでも関連付けを解除することができます。'; @@ -173,9 +173,9 @@ $string['minimal'] = '最小'; $string['mode'] = 'モード'; $string['modulename'] = 'フィードバック'; -$string['modulename_help'] = 'フィードバック活動モジュールにおいて、教師は多肢選択、○/×またはテキスト入力を含む様々な質問タイプを使用して参加者からフィードバックを収集することのできる独自調査を作成することができます。 +$string['modulename_help'] = 'フィードバック活動モジュールにおいて教師は多肢選択、○/×またはテキスト入力を含む様々な質問タイプを使用して参加者からフィードバックを収集することのできる独自調査を作成することができます。 -必要であればフィードバック回等を匿名にすることができます。そして、結果を学生すべてに表示、または教師のみに閲覧制限することができます。サイトフロントページのフィードバックは非ログインユーザにより入力させることもできます。 +必要であればフィードバック回等を匿名にすることができます。そして、結果を学生すべてに表示または教師のみに閲覧制限することができます。サイトフロントページのフィードバックは非ログインユーザにより入力させることもできます。 フィードバック活動は下記のように使用することができます: @@ -255,11 +255,11 @@ $string['save_entries'] = 'あなたの回答を送信する'; $string['save_item'] = '質問を保存する'; $string['saving_failed'] = '保存に失敗しました。'; -$string['saving_failed_because_missing_or_false_values'] = '値が入力されていないか、正しくないため、保存に失敗しました。'; +$string['saving_failed_because_missing_or_false_values'] = '値が入力されていないか正しくないため、保存に失敗しました。'; $string['search:activity'] = 'フィードバック - 活動情報'; $string['search_course'] = 'コースを検索する'; $string['searchcourses'] = 'コースを検索する'; -$string['searchcourses_help'] = 'あなたがこのフィードバックに関連付けたいコースのコードまたは名称を使用して検索してください。'; +$string['searchcourses_help'] = 'あなたがこのフィードバックに関連付けたいコースのコードまたは名称を検索してください。'; $string['selected_dump'] = '選択された$SESSION変数のインデックスは以下にダンプされます:'; $string['send'] = '送信'; $string['send_message'] = 'メッセージを送信する'; @@ -300,4 +300,4 @@ $string['using_templates'] = 'テンプレートを使用する'; $string['vertical'] = '垂直'; $string['viewcompleted'] = '完了済みフィードバック'; -$string['viewcompleted_help'] = 'あなたはコースまたは質問により検索することのできる完了済みフィードバックフォームを閲覧することができます。フィードバックの回答はExcelにエクスポートすることができます。'; +$string['viewcompleted_help'] = 'あなたはコースまたは質問により検索することのできる完了済みフィードバックフォームを表示することができます。フィードバックの回答はExcelにエクスポートすることができます。'; diff --git a/html/moodle2/langpacks/ja/folder.php b/html/moodle2/langpacks/ja/folder.php index edb659c86e..6599f046fe 100644 --- a/html/moodle2/langpacks/ja/folder.php +++ b/html/moodle2/langpacks/ja/folder.php @@ -26,8 +26,8 @@ defined('MOODLE_INTERNAL') || die(); $string['contentheader'] = 'コンテンツ'; -$string['display'] = 'フォルダコンテンツの表示'; -$string['display_help'] = 'あなたがコースページでのフォルダコンテンツ表示を選択した場合、別ページへのリンクは表示されません。「コースページに説明を表示する」がチェックされた場合のみ、説明が表示されます。
      この場合、参加者の閲覧動作が記録されないことに留意してください。'; +$string['display'] = 'フォルダコンテンツを表示する'; +$string['display_help'] = 'あなたがコースページでのフォルダコンテンツ表示を選択した場合、別ページへのリンクは表示されません。「コースページに説明を表示する」がチェックされた場合のみ説明が表示されます。
      この場合、参加者の閲覧動作が記録されないことに留意してください。'; $string['displayinline'] = 'コースページにインライン表示する'; $string['displaypage'] = '別ページに表示する'; $string['dnduploadmakefolder'] = 'ファイルを展開してフォルダを作成する'; @@ -41,12 +41,12 @@ $string['maxsizetodownload'] = '最大フォルダダウンロードサイズ (MB)'; $string['maxsizetodownload_help'] = 'ZIPファイルとしてダウンロードできるフォルダの最大サイズです。ゼロに設定された場合、フォルダサイズに制限はありません。'; $string['modulename'] = 'フォルダ'; -$string['modulename_help'] = 'フォルダモジュールにおいて、コースページでのスクロールを減らすために教師は多くの関連ファイルを単一のフォルダ内に表示することができます。ZIP圧縮したフォルダを表示のためにアップロードおよび展開または空のフォルダを作成して、その中にファイルをアップロードすることができます。 +$string['modulename_help'] = 'フォルダモジュールにおいてコースページでのスクロールを減らすために教師は多くの関連ファイルを単一のフォルダ内に表示することができます。ZIP圧縮したフォルダを表示のためにアップロードおよび展開または空のフォルダを作成してその中にファイルをアップロードすることができます。 -フォルダは下記のように使用することができます: +フォルダは以下のように使用することができます: * 例えば過去のPDF版の試験問題または学生プロジェクトで使用するイメージコレクションのように1つのテーマに関する一連のファイル用として -* コースページ内の教師に共有アップロードスペースを提供するため (教師のみ閲覧できるようフォルダの非表示にする)'; +* コースページ内の教師に共有アップロードスペースを提供するため (教師のみ閲覧できるようフォルダを非表示にする)'; $string['modulenameplural'] = 'フォルダ'; $string['noautocompletioninline'] = '活動閲覧による自動完了は「コースページにインライン表示する」オプションと同時に選択することはできません。'; $string['page-mod-folder-view'] = 'フォルダモジュールメインページ'; diff --git a/html/moodle2/langpacks/ja/group.php b/html/moodle2/langpacks/ja/group.php index 69dbd5ef33..b9e974f9a2 100644 --- a/html/moodle2/langpacks/ja/group.php +++ b/html/moodle2/langpacks/ja/group.php @@ -133,7 +133,7 @@ $string['grouptemplate'] = 'グループ @'; $string['hidepicture'] = '画像を隠す'; $string['importgroups'] = 'グループをインポートする'; -$string['importgroups_help'] = 'テキストファイル経由でグループをインポートすることができます。ファイルのフォーマットは下記のとおりです: +$string['importgroups_help'] = 'テキストファイル経由でグループをインポートすることができます。ファイルのフォーマットは以下のとおりです: * それぞれの行に1レコードを記述してください。 * それぞれのレコードはカンマ区切りのデータです。 diff --git a/html/moodle2/langpacks/ja/hvp.php b/html/moodle2/langpacks/ja/hvp.php new file mode 100644 index 0000000000..42d4076e66 --- /dev/null +++ b/html/moodle2/langpacks/ja/hvp.php @@ -0,0 +1,227 @@ +. + +/** + * Strings for component 'hvp', language 'ja', branch 'MOODLE_31_STABLE' + * + * @package hvp + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['action'] = '操作'; +$string['addedandupdatelibraries'] = '新しい {$a->%new} 個のH5Pライブラリが追加され古い {$a->%old} 個は更新されました。'; +$string['addednewlibraries'] = '新しい {$a->%new} 個のH5Pライブラリが追加されました。'; +$string['addlibraries'] = 'ライブラリを追加'; +$string['ajaxfailed'] = 'データの読み込みに失敗しました。'; +$string['attribution'] = '表示 4.0'; +$string['attributionnc'] = '表示 - 非営利 4.0'; +$string['attributionncnd'] = '表示 - 改変禁止 - 非営利 4.0'; +$string['attributionncsa'] = '表示 - 非営利 - 継承 4.0'; +$string['attributionnd'] = '表示 - 改変禁止 4.0'; +$string['attributionsa'] = '表示 - 継承 4.0'; +$string['author'] = '作者'; +$string['cancellabel'] = 'キャンセル'; +$string['close'] = '閉じる'; +$string['confirmdialogbody'] = '本当に続けても良ろしいですか? この操作は取り消せません。'; +$string['confirmdialogheader'] = '操作の確認'; +$string['confirmlabel'] = '確認'; +$string['contentchanged'] = 'このコンテンツは、最後に使用してから変更されています。'; +$string['contentstatefrequency'] = 'コンテンツの状態を保存する頻度'; +$string['contentstatefrequency_help'] = '何秒ほどの間隔でユーザの進捗を自動保存させますか。もしajaxの要求が多すぎて問題があるのであれば、この数値を増やしてください。'; +$string['copyright'] = '使用権'; +$string['copyrightinfo'] = '著作権情報'; +$string['copyrightstring'] = '著作権'; +$string['copyrighttitle'] = 'このコンテンツの著作権情報をみる。'; +$string['couldnotcopy'] = 'ファイルをコピーできませんでした。'; +$string['couldnotsave'] = 'ファイルを保存できませんでした。'; +$string['create'] = '作成'; +$string['currentpage'] = '$current ページ, 全 $total ページ中'; +$string['disablefileextensioncheck'] = 'ファイル拡張子のチェックを無効にする'; +$string['disablefileextensioncheckwarning'] = '警告! ファイル拡張子のチェックを無効にすると、phpファイルのアップロードを許可するセキュリティ上の影響があります。 その結果、攻撃者があなたのサイト上で悪意のあるコードを実行することが可能になります。 あなたがアップロードするものが何かを確実に確認するよう心がけてください。'; +$string['disablefullscreen'] = 'フルスクリーンを無効にする'; +$string['displayoptionalwaysshow'] = '常に表示'; +$string['displayoptionauthoroff'] = '作者により操作される, デフォルトはoff'; +$string['displayoptionauthoron'] = '作者により操作される, デフォルトはon'; +$string['displayoptionnevershow'] = '常に非表示'; +$string['displayoptionpermissions'] = 'ユーザがH5Pのエクスポートを許可した場合にのみ表示'; +$string['displayoptions'] = '表示オプション'; +$string['download'] = 'ダウンロード'; +$string['downloadtitle'] = 'このコンテンツをH5Pファイルとしてダウンロード。'; +$string['editor'] = 'エディタ'; +$string['embed'] = '埋め込み'; +$string['embedtitle'] = 'このコンテンツの埋め込みコードをみる。'; +$string['empty'] = '結果がありません'; +$string['enableabout'] = 'H5Pボタンについて'; +$string['enablecopyright'] = '著作権ボタン'; +$string['enabledlrscontenttypes'] = 'LRSに依存するコンテンツタイプを有効にする'; +$string['enabledlrscontenttypes_help'] = 'アンケート(Questionnaire)コンテンツタイプのように、Learning Record Storeの機能に正しく依存するコンテンツタイプを利用可能にする。'; +$string['enabledownload'] = 'ダウンロードボタン'; +$string['enableembed'] = '埋め込みボタン'; +$string['enableframe'] = '操作バーと枠を表示'; +$string['enablejavascript'] = 'javascriptを有効にしてください。'; +$string['enablesavecontentstate'] = 'コンテンツの状態を保存'; +$string['enablesavecontentstate_help'] = 'それぞれのユーザのインタラクティブコンテンツの、現在のコンテンツの状態を自動的に保存します。 これによりユーザは中断したところから再開できます。'; +$string['filenotimage'] = 'ファイルは画像ではありません。'; +$string['filetypenotallowed'] = 'ファイルタイプが許可されていません。'; +$string['finished'] = '完了'; +$string['fullscreen'] = 'フルスクリーン'; +$string['gpl'] = '一般公衆利用許諾書 v3'; +$string['h5pfile'] = 'H5Pファイル'; +$string['h5ptitle'] = 'よりクールなコンテンツをみつけるためにH5P.orgにアクセスする。'; +$string['hideadvanced'] = '拡張要素を隠す'; +$string['hvp:addinstance'] = '新しいH5P活動を追加'; +$string['hvp:getcachedassets'] = 'キャシュされたH5Pコンテンツアセットを取得'; +$string['hvp:getcontent'] = 'コース内のH5Pファイルのコンテンツを取得/表示'; +$string['hvp:getexport'] = 'コース内のH5Pから出力ファイルを取得'; +$string['hvp:restrictlibraries'] = 'H5Pライブラリを制限'; +$string['hvp:savecontentuserdata'] = 'H5Pコンテンツのユーザデータを保存'; +$string['hvp:saveresults'] = 'H5Pコンテンツの結果を保存'; +$string['hvp:updatelibraries'] = 'H5Pライブラリのバージョンを更新'; +$string['hvp:userestrictedlibraries'] = '制限されたH5Pライブラリを使用'; +$string['hvp:viewresults'] = 'H5Pコンテンツの結果を表示'; +$string['installedlibraries'] = 'インストールされたライブラリ'; +$string['intro'] = '説明'; +$string['invalidaudioformat'] = '無効なオーディオファイル形式です。 mp3またはwavを使用してください。'; +$string['invalidcontentfolder'] = '無効なコンテンツフォルダ'; +$string['invalidfieldtype'] = '無効なフィールドタイプ'; +$string['invalidfile'] = 'ファイル "{$a->%filename}" は許可されていません。以下の拡張子のファイルのみ許可されています: {$a->%files-allowed} 。'; +$string['invalidimageformat'] = '無効な画像ファイル形式です。 jpg, pngまたはgifを使用してください。'; +$string['invalidlanguagefile'] = 'ライブラリ {$a->%library} 内の無効な言語ファイル {$a->%file}'; +$string['invalidlanguagefile2'] = '無効な言語ファイル {$a->%languageFile} が、ライブラリ {$a->%name} に含まれています。'; +$string['invalidlibrary'] = '無効なライブラリ'; +$string['invalidlibrarydata'] = '{$a->%library} 内の {$a->%property} 用に提供された無効なデータ'; +$string['invalidlibrarydataboolean'] = '{$a->%library} 内の {$a->%property} 用に提供された無効なデータ。 ブーリアンである必要があります。'; +$string['invalidlibraryname'] = '無効なライブラリ名: {$a->%name}'; +$string['invalidlibraryoption'] = '{$a->%library} 内の不正なオプション {$a->%option}'; +$string['invalidlibraryproperty'] = '{$a->%library} 内のプロパティ {$a->%property} が読み取りできません。'; +$string['invalidmainjson'] = '有効なメインのh5p.jsonファイルがありません'; +$string['invalidmultiselectoption'] = '多肢選択での無効な選択オプションです。'; +$string['invalidparameters'] = '無効なパラメータ'; +$string['invalidselectoption'] = '選択中の無効な選択オプション。'; +$string['invalidsemanticsjson'] = '無効なsemantics.jsonファイルがライブラリ {$a->%name} に含まれています。'; +$string['invalidsemanticstype'] = 'H5P 内部エラー: セマンティックス内の不明なコンテンツタイプ "{$a->@type}" 。 コンテンツを削除中!'; +$string['invalidstring'] = '与えられた文字列はセマンティックス内の正規表現に照らして有効ではありません: (値: "{$a->%value}", 正規表現: "{$a->%regexp}")'; +$string['invalidtoken'] = '無効なセキュリティトークン。'; +$string['invalidvideoformat'] = '無効なビデオファイル形式です。 mp4またはwebmを使用してください。'; +$string['javascriptloading'] = 'JavaScriptを待っています...'; +$string['libraries'] = 'H5Pライブラリ'; +$string['librarydirectoryerror'] = 'ライブラリのディレクトリ名は machineName または machineName-majorVersion.minorVersion (library.jsonから)に一致しなければなりません。 (Directory: {$a->%directoryName} , machineName: {$a->%machineName}, majorVersion: {$a->%majorVersion}, minorVersion: {$a->%minorVersion})'; +$string['librarylistactions'] = '操作'; +$string['librarylistinstancedependencies'] = 'インスタンス依存'; +$string['librarylistinstances'] = 'インスタンス'; +$string['librarylistlibrarydependencies'] = 'ライブラリ依存'; +$string['librarylistrestricted'] = '制限付き'; +$string['librarylisttitle'] = 'タイトル'; +$string['license'] = 'ライセンス'; +$string['loadingdata'] = 'データの読み込み中。'; +$string['lookforupdates'] = 'H5Pアップデートを探す'; +$string['maximumgrade'] = '最大評点'; +$string['maximumgradeerror'] = 'この活動用に用いられる最大評点として、有効な正の整数を入力してください。'; +$string['maxscore'] = '最大評点'; +$string['missingcontentfolder'] = '有効なコンテンツのフォルダがありません。'; +$string['missingcontentuserdata'] = 'エラー: コンテンツのユーザデータが見つかりません'; +$string['missingcoreversion'] = 'システムは {$a->%component} コンポーネントをパッケージからインストールできませんでした。 新しいバージョンのH5Pプラグラインが必要です。 このサイトは現在バージョン {$a->%current} が動作中です。 一方、必要なバージョンは {$a->%required} 以上です。 アップグレードし、再度お試しください。'; +$string['missingdependency'] = '{$a->@lib} に必要な依存 {$a->@dep} が不足。'; +$string['missinglibrary'] = '必要なライブラリ {$a->@library} が不足'; +$string['missinglibraryfile'] = 'ライブラリ: "{$a->%name}" でファイル"{$a->%file}"が不足'; +$string['missinglibraryjson'] = 'ライブラリ {$a->%name} 用の有効なjsonフォーマットのlibrary.json ファイルが見つかりませんでした'; +$string['missinglibraryproperty'] = '必要なプロパティプロパティ {$a->%property} が {$a->%library}にありません'; +$string['missingmbstring'] = 'mbstring PHP拡張が読み込めません。H5Pはこれが正しく機能する必要があります。'; +$string['missingparameters'] = 'パラメータ不足'; +$string['missinguploadpermissions'] = 'アップロードしたファイル内にライブラリが存在していることに注意してください。'; +$string['modulename'] = 'インタラクティブコンテンツ'; +$string['modulename_help'] = 'H5P活動モジュールでは、インタラクティブビデオ, 問題集, ドラッグ&ドロップの問題, 多肢選択の問題, プレゼンテーションなどの、インタラクティブなコンテンツを作成することが可能です。 + +さらに、リッチコンテンツの編集ツールとして、H5Pファイルをインポートしたりエクスポートしたりして、コンテンツの効果的な再利用と共有を可能にします。 + +ユーザのインタラクションと点数はxAPIをつかって追跡され、Moodleの評定表を通して利用可能です。 + +.h5pファイルをアップロードすることでインタラクティブなH5Pコンテンツを 追加することができます。 h5p.orgのサイト上で作成して .h5pファイルをダウンロードすることができます。'; +$string['modulenameplural'] = 'インタラクティブコンテンツ'; +$string['nextpage'] = '次のページ'; +$string['nocontent'] = 'content.jsonファイルを見つけたり解析したりできませんでした'; +$string['nocopyright'] = 'このコンテンツの著作権情報がありません。'; +$string['nodata'] = 'あなたのクライテリアに一致するデータがありません。'; +$string['noextension'] = 'あなたがアップロードしたファイルは有効なHTML5パッケージではありません(.h5pファイル拡張子がありません)'; +$string['noh5ps'] = 'このコースにはインタラクティブコンテンツがありません。'; +$string['nojson'] = 'メインのh5p.jsonファイルが有効ではありません'; +$string['noparameters'] = 'パラメータがありません'; +$string['noparse'] = 'メインのh5p.jsonファイルを解析できませんでした。'; +$string['nopermissiontorestrict'] = 'あなたにはライブラリを制限するパーミッションがありません。'; +$string['nopermissiontosavecontentuserdata'] = 'あなたにはコンテンツのユーザデータを保存するパーミッションがありません。'; +$string['nopermissiontosaveresult'] = 'あなたにはこのコンテンツの結果を保存するパーミッションがありません。'; +$string['nopermissiontoupgrade'] = 'あなたにはライブラリをアップグレードするパーミッションがありません。'; +$string['nopermissiontoviewresult'] = 'あなたにはこのコンテンツの結果を見るパーミッションがありません。'; +$string['nosuchlibrary'] = 'そのようなライブラリはありません'; +$string['notapplicable'] = 'N/A'; +$string['nounzip'] = 'あなたがアップロードしたファイルは有効なHTML5パッケージではありません(ZIPファイルを解凍できません)'; +$string['noziparchive'] = 'あなたのPHP のバージョンでは、Zipアーカイブをサポートしていません。'; +$string['onlyupdate'] = '既存のライブラリのみを更新'; +$string['options'] = 'オプション'; +$string['pd'] = 'パブリックドメイン'; +$string['pddl'] = 'Public Domain Dedication and Licence'; +$string['pdm'] = 'パブリックドメインマーク'; +$string['pluginadministration'] = 'H5P'; +$string['pluginname'] = 'H5P'; +$string['previouspage'] = '前のページ'; +$string['removeoldlogentries'] = '古いH5Pのログエントリを削除'; +$string['removetmpfiles'] = '古いH5Pの一時ファイルを削除'; +$string['resizescript'] = 'もし、埋め込みコンテンツに対して、動的なサイズ変更をしたい場合には、あなたのウェブサイト上にこのスクリプトを含めてください:'; +$string['score'] = '点数'; +$string['search'] = '検索'; +$string['settings'] = 'H5P設定'; +$string['showadvanced'] = '拡張要素を表示する'; +$string['size'] = 'サイズ'; +$string['source'] = 'ソース'; +$string['startingover'] = '最初からやり直す。'; +$string['thumbnail'] = 'サムネール'; +$string['title'] = 'タイトル'; +$string['unabletocreatedir'] = 'ディレクトリの作成ができません。'; +$string['unabletogetfieldtype'] = 'フィールドタイプが取得できません。'; +$string['undisclosed'] = '未公開'; +$string['updatedlibraries'] = '{$a->%old} H5P ライブラリが更新されました。'; +$string['updatelibraries'] = 'すべてのライブラリが更新されました。'; +$string['upgrade'] = 'H5Pをアップグレード'; +$string['upgradebuttonlabel'] = 'アップグレード'; +$string['upgradedone'] = '{$a} 個のコンテンツインスタンスのアップグレードに成功しました。'; +$string['upgradeerror'] = 'パラメータを処理中にエラーが発生しました:'; +$string['upgradeerrorcontent'] = 'コンテンツ %id をアップグレードできませんでした。:'; +$string['upgradeerrordata'] = 'ライブラリ %lib のデータを読み込めませんでした。'; +$string['upgradeerrorparamsbroken'] = 'パラメータが壊れています。'; +$string['upgradeerrorscript'] = '%lib 用のアップグレードスクリプトを読み込めませんでした。'; +$string['upgradeheading'] = '{$a} 個のコンテンツをアップグレード'; +$string['upgradeinprogress'] = '%ver にアップグレード中...'; +$string['upgradeinvalidtoken'] = 'エラー: 無効なセキュリティトークン!'; +$string['upgradelibrarycontent'] = 'ライブラリコンテンツをアップグレード'; +$string['upgradelibrarymissing'] = 'エラー: あなたのライブラリがありません!'; +$string['upgrademessage'] = '{$a} 個のコンテンツインスタンスをアップグレードしようとしています。 アップグレードのバージョンを選択してください。'; +$string['upgradenoavailableupgrades'] = 'このライブラリ用のアップグレードがありません。'; +$string['upgradenothingtodo'] = 'アップグレードするコンテンツインスタンスがありません。'; +$string['upgradereturn'] = '戻る'; +$string['upload'] = 'アップロード'; +$string['uploadlibraries'] = 'ライブラリをアップロード'; +$string['user'] = 'ユーザ'; +$string['welcomecommunity'] = 'H5Pをお楽しみいただき、forums}>フォーラム やチャットルーム gitter}>H5P at Gitter を通して、成長を続けるコミュニティに寄与されることを願っています。'; +$string['welcomecontactus'] = '何かフィードバックがありましたら、お気軽に お問い合わせください。私たちはフィードバックを非常に真剣に受け止め、毎日H5Pをより良くすることに専念しています!'; +$string['welcomegettingstarted'] = 'H5PとMoodleを使い始めるには、 moodle_tutorial}>チュートリアル をご覧ください。そして、インスピレーションを得るために H5P.orgの example_content}>コンテンツ例 をご覧ください。
      人気のあるコンテンツタイプを簡単にインストールすることができます。'; +$string['welcomeheader'] = 'H5Pの正解へようこそ!'; +$string['wrongversion'] = 'このコンテンツで使用されているH5Pライブラリ {$a->%machineName} のバージョンは無効です。コンテンツには {$a->%contentLibrary} が含まれていますが、 {$a->%semanticsLibrary} である必要があります。'; +$string['year'] = '年'; +$string['years'] = '年(間)'; diff --git a/html/moodle2/langpacks/ja/moodle.php b/html/moodle2/langpacks/ja/moodle.php index 9ceeb11b10..d8cd476040 100644 --- a/html/moodle2/langpacks/ja/moodle.php +++ b/html/moodle2/langpacks/ja/moodle.php @@ -373,7 +373,7 @@ $string['coursereasonforrejectingemail'] = 'これは申請者にメール送信されます。'; $string['coursereject'] = 'コースリクエストを拒否する'; $string['courserejected'] = 'コースは拒否され、申請者に通知メールが送信されました。'; -$string['courserejectemail'] = '申し訳ございません、あなたがリクエストしたコースは拒否されました。拒否理由は下記のとおりです: +$string['courserejectemail'] = '申し訳ございません、あなたがリクエストしたコースは拒否されました。拒否理由は以下のとおりです: {$a}'; $string['courserejectreason'] = 'あなたがこのコースを拒否する理由の概要
      (この内容は申請者にメール送信されます)'; @@ -595,7 +595,7 @@ $string['emailalreadysent'] = 'パスワードリセットメールはすでに送信されています。あなたのメールを確認してください。'; $string['emailcharset'] = 'メール文字コード'; $string['emailconfirm'] = 'アカウントの確定'; -$string['emailconfirmation'] = 'こんにちは {$a->firstname} さん +$string['emailconfirmation'] = '{$a->firstname} さん 「 {$a->sitename} 」であなたのメールアドレスによる新しいアカウントの作成が依頼されました。 @@ -603,11 +603,9 @@ {$a->link} -ほとんどのメールプログラムでは上記部分はクリックできるよう青色にリンク表示されています。 +ほとんどのメールプログラムではあなたがクリックできる青いリンクとして表示されているはずです。クリックできない場合、あなたのウェブブラウザウィンドウのアドレス欄にアドレスをコピー&ペーストしてください。 -動作しない場合はコピー&ペーストを使ってウェブブラウザ上部のアドレス欄にこのアドレスを入力してください。 - -お分かりにならない場合はサイト管理者 {$a->admin} にご連絡ください。'; +分からない場合、サイト管理者 ( {$a->admin}) にご連絡ください。'; $string['emailconfirmationsubject'] = '{$a}: アカウントの確定'; $string['emailconfirmsent'] = '

      あなたの {$a} のメールアドレス宛にメールが送信されました。

      メールには登録を確認するための簡単な説明が記載されています。

      @@ -638,7 +636,7 @@ $string['emailnotallowed'] = 'これらのドメインのメールアドレスは許可されていません ({$a})'; $string['emailnotfound'] = 'データベース内にメールアドレスが見つかりませんでした。'; $string['emailonlyallowed'] = 'このメールアドレスは許可されている次のドメインに入っていません ({$a})'; -$string['emailpasswordchangeinfo'] = 'こんにちは {$a->firstname} さん +$string['emailpasswordchangeinfo'] = '{$a->firstname} さん 誰か (恐らくあなた) が、「 {$a->sitename} 」 のアカウントで新しいパスワードを請求しました。 @@ -646,11 +644,9 @@ {$a->link} -ほとんどのメールプログラムでは上記部分はクリックできるよう青色にリンク表示されています。 - -動作しない場合はコピー&ペーストを使ってウェブブラウザ上部のアドレス欄にこのアドレスを入力してください。 +ほとんどのメールプログラムではあなたがクリックできる青いリンクとして表示されているはずです。クリックできない場合、あなたのウェブブラウザウィンドウのアドレス欄にアドレスをコピー&ペーストしてください。 -お分かりにならない場合はサイト管理者 {$a->admin} にご連絡ください。'; +分からない場合、サイト管理者 ( {$a->admin}) にご連絡ください。'; $string['emailpasswordchangeinfodisabled'] = 'こんにちは {$a->firstname} さん 誰か (恐らくあなた) が、「 {$a->sitename} 」 のアカウントで新しいパスワードを請求しました。 @@ -662,19 +658,17 @@ 残念ですが、このサイトではパスワードをリセットすることができません。サイト管理者 {$a->admin} にご連絡ください。'; $string['emailpasswordchangeinfosubject'] = '{$a}: パスワード変更情報'; -$string['emailpasswordconfirmation'] = 'こんにちは {$a->firstname} さん +$string['emailpasswordconfirmation'] = '{$a->firstname} さん -誰か (恐らくあなた) が、「 {$a->sitename} 」 のアカウントで新しいパスワードを請求しました。 +誰か (恐らくあなた) が「 {$a->sitename} 」 のアカウントで新しいパスワードを請求しました。 新しいパスワード請求を確認して、新たなパスワードをメールであなた宛に送信するために下記のページをご覧ください: {$a->link} -ほとんどのメールプログラムでは、上記部分はクリックできるよう青色にリンク表示されています。 - -動作しない場合は、コピー&ペーストを使ってウェブブラウザ上部のアドレス欄に、このアドレスを入力してください。 +ほとんどのメールプログラムではあなたがクリックできる青いリンクとして表示されているはずです。クリックできない場合、あなたのウェブブラウザウィンドウのアドレス欄にアドレスをコピー&ペーストしてください。 -お分かりにならない場合は、サイト管理者 {$a->admin} にご連絡ください。'; +分からない場合、サイト管理者 ( {$a->admin}) にご連絡ください。'; $string['emailpasswordconfirmationsubject'] = '{$a}: パスワード変更確認'; $string['emailpasswordconfirmmaybesent'] = '

      正しいユーザ名またはメールアドレスを入力した場合、あなたにメールが送信されています。

      送信されたメールには、パスワードの変更を確認および完了するため、簡単な説明が記載されています。パスワード変更作業が難しい場合、サイト管理者にご連絡ください。

      '; @@ -1047,7 +1041,7 @@ $string['maincoursepage'] = 'メインコースページ'; $string['makeafolder'] = 'フォルダを作成する'; $string['makeeditable'] = '「 {$a} 」をサーバ上 (例 apache) で編集可能にした場合、あなたはこのファイルを直接このページで編集することができます。'; -$string['makethismyhome'] = 'このページをマイデフォルトホームページにする'; +$string['makethismyhome'] = 'このページを私のデフォルトホームページにする'; $string['manageblocks'] = 'ブロック'; $string['managecategorythis'] = 'このカテゴリを管理する'; $string['managecourses'] = 'コースを管理する'; @@ -1198,11 +1192,11 @@ $string['newpassword'] = '新しいパスワード'; $string['newpasswordfromlost'] = '注意: 喪失パスワードリカバリ処理の一環として送信される2通のメールの2番目に、あなたの現在のパスワードが送信されます。この画面を続ける前に、あなたの新しいパスワードが記載されたメールを受信したことを確認してください。'; $string['newpassword_help'] = '新しいパスワードを入力、または現在のパスワードを使用する場合は空白にしてください。'; -$string['newpasswordtext'] = 'こんにちは {$a->firstname} さん +$string['newpasswordtext'] = '{$a->firstname} さん 「 {$a->sitename} 」のパスワードリセットおよび仮パスワードの作成が完了しました。 -あなたのログイン情報は下記のとおりです。 +あなたのログイン情報は以下のとおりです。 ユーザ名: username: {$a->username} パスワード: password: {$a->newpassword} @@ -1210,7 +1204,7 @@ {$a->link} -ほとんどのメールプログラムでは、上記部分はクリックできるよう青色にリンク表示されています。動作しない場合は、コピー&ペーストを使ってウェブブラウザ上部のアドレス欄に、このアドレスを入力してください。 +ほとんどのメールプログラムではあなたがクリックできる青いリンクとして表示されているはずです。クリックできない場合、あなたのウェブブラウザウィンドウのアドレス欄にアドレスをコピー&ペーストしてください。 「 {$a->sitename} 」の管理者よりご挨拶でした。 {$a->signoff}'; @@ -1223,18 +1217,18 @@ $string['newsitemsnumber_help'] = 'この設定ではコースページの最新ニュースブロックに何件の最新項目を表示するか設定します。ゼロを設定した場合、最新ニュースブロックは表示されません。'; $string['newuser'] = '新しいユーザ'; $string['newusernewpasswordsubj'] = '新しいユーザアカウント'; -$string['newusernewpasswordtext'] = 'こんにちは {$a->firstname} さん +$string['newusernewpasswordtext'] = '{$a->firstname} さん -あなたの新しいアカウントが「 {$a->sitename} 」に作成され、新しい一時的なパスワードが発行されました。 +あなたの新しいアカウントが「 {$a->sitename} 」に作成されて新しい一時パスワードが発行されました。 -あなたの現在のログイン情報は下記のとおりです: +あなたの現在のログイン情報は以下のとおりです: ユーザ名: {$a->username} パスワード: {$a->newpassword} (最初にログインしたときにパスワードを変更してください) {$a->sitename} で作業を始めるには {$a->link} にログインしてください。 -ほとんどのメールプログラムでは、上記部分はクリックできるよう青色にリンク表示されています。動作しない場合は、コピー&ペーストを使ってウェブブラウザ上部のアドレス欄に、このアドレスを入力してください。 +ほとんどのメールプログラムではあなたがクリックできる青いリンクとして表示されているはずです。クリックできない場合、あなたのウェブブラウザウィンドウのアドレス欄にアドレスをコピー&ペーストしてください。 「 {$a->sitename} 」の管理者よりご挨拶でした。 {$a->signoff}'; @@ -1272,7 +1266,7 @@ $string['norecentactivity'] = '最近の活動はありません。'; $string['noreplybouncemessage'] = 'あなたはno-replyメールアドレスに返信しました。フォーラムの投稿に返信したい場合、メール返信する代わりにフォーラム {$a} で返信を投稿してください。 -あなたのメール本文は下記のとおりです:'; +あなたのメール本文は以下のとおりです:'; $string['noreplybouncesubject'] = '{$a} -宛先不明メール'; $string['noreplyname'] = 'このメールアドレス宛に返信しないでください'; $string['noresetrecord'] = 'リセットリクエストのレコードがありません。新しいパスワードリセットリクエストを実行してください。'; diff --git a/html/moodle2/langpacks/ja/portfolio.php b/html/moodle2/langpacks/ja/portfolio.php index 7edb736dab..bc50160ced 100644 --- a/html/moodle2/langpacks/ja/portfolio.php +++ b/html/moodle2/langpacks/ja/portfolio.php @@ -93,7 +93,7 @@ 設定が正しくないため、いくつかのポートフォリオプラグインが自動的に無効にされました。これは現在のところ、ユーザがこれらのポートフォリオにコンテンツをエクスポートできないことを意味します。 -無効にされたポートフォリオインスタンスのリストは下記のとおりです: +無効にされたポートフォリオインスタンスのリストは以下のとおりです: {$a->textlist} diff --git a/html/moodle2/langpacks/ja/qbehaviour_deferredcbm.php b/html/moodle2/langpacks/ja/qbehaviour_deferredcbm.php index aa56bd7bd9..6132d17964 100644 --- a/html/moodle2/langpacks/ja/qbehaviour_deferredcbm.php +++ b/html/moodle2/langpacks/ja/qbehaviour_deferredcbm.php @@ -43,7 +43,7 @@ $string['certainty-1'] = '分かりません'; $string['certainty2'] = 'C=2 (中間: >67%)'; $string['certainty3'] = 'C=3 (かなり確か: >80%)'; -$string['certainty_help'] = '確信度ベースの評定の場合、あなたの答えがどのくらい信頼できるか指定する必要があります。利用可能なレベルは下記のとおりです: +$string['certainty_help'] = '確信度ベースの評定の場合、あなたの答えがどのくらい信頼できるか指定する必要があります。利用可能なレベルは以下のとおりです: 確信度レベル | C=1 (不確か) | C=2 (中間) | C=3 (かなり確か) ------------------- | ------------ | --------- | ---------------- diff --git a/html/moodle2/langpacks/ja/quiz.php b/html/moodle2/langpacks/ja/quiz.php index ac7589bfbc..d60cf71d0d 100644 --- a/html/moodle2/langpacks/ja/quiz.php +++ b/html/moodle2/langpacks/ja/quiz.php @@ -271,7 +271,7 @@ $string['editcatquestions'] = 'カテゴリ問題を編集する'; $string['editingquestion'] = '問題の編集'; $string['editingquiz'] = '小テストの編集'; -$string['editingquiz_help'] = '小テスト作成におけるメインコンセプトは下記のとおりです: +$string['editingquiz_help'] = '小テスト作成におけるメインコンセプトは以下のとおりです: * 小テストは1ページまたはそれ以上のページに問題を含みます。 * 問題バンクにはすべての問題がカテゴリにより整理されて保存されます。 diff --git a/html/moodle2/langpacks/ja/repository_skydrive.php b/html/moodle2/langpacks/ja/repository_skydrive.php index 01e7eb3816..4c9e1e6a05 100644 --- a/html/moodle2/langpacks/ja/repository_skydrive.php +++ b/html/moodle2/langpacks/ja/repository_skydrive.php @@ -28,9 +28,9 @@ $string['cachedef_foldername'] = 'フォルダ名キャッシュ'; $string['clientid'] = 'クライアントID'; $string['configplugin'] = 'Microsoft OneDriveを設定する'; -$string['oauthinfo'] = '

      このプラグインを使用するためには、あなたのサイトをMicrosoftに登録する必要があります。

      +$string['oauthinfo'] = '

      このプラグインを使用するためには、あなたのサイトをMicrosoftに登録する必要があります。

      -

      登録処理の一環として、あなたは「リダイレクトドメイン」として、次のURLを入力する必要があります:

      +

      登録処理の一環として、あなたは「リダイレクトドメイン」として次のURLを入力する必要があります:

      {$a->callbackurl}

      diff --git a/html/moodle2/langpacks/ja/tool_messageinbound.php b/html/moodle2/langpacks/ja/tool_messageinbound.php index 21b798c7d8..e77d4795e8 100644 --- a/html/moodle2/langpacks/ja/tool_messageinbound.php +++ b/html/moodle2/langpacks/ja/tool_messageinbound.php @@ -73,11 +73,11 @@ $string['messageinboundmailboxconfiguration_desc'] = 'ユーザがメッセージを送信する場合、「address+data@example.com」 のようなフォーマットで生成されたアドレスに送ります。信頼できるアドレスをMoodleから生成するには通常あなたが「@」記号の前に使用するアドレス、および「@」記号の後に使用するドメインを分けて指定してください。例えば例のメールボックス名は「address」、そしてメールドメインは「example.com」となります。この目的のためにあなたは専用のメールアカウントを使用すべきです。'; $string['messageprocessingerror'] = 'あなたは最近Moodleに件名「 {$a->subject} 」のメールを送信しましたが、残念なことに、処理されませんでした。 -エラー詳細は下記のとおりです。 +エラー詳細は以下のとおりです。 {$a->error}'; -$string['messageprocessingerrorhtml'] = '

      あなたは最近Moodleに件名「 {$a->subject} 」のメールを送信しましたが、残念なことに、処理されませんでした。

      -

      エラー詳細は下記のとおりです。

      +$string['messageprocessingerrorhtml'] = '

      あなたは最近Moodleに件名「 {$a->subject} 」のメールを送信しましたが、残念なことに処理されませんでした。

      +

      エラー詳細は以下のとおりです。

      {$a->error}

      '; $string['messageprocessingfailed'] = 'あなたが送信した件名「 {$a->subject} 」のメールを処理できませんでした。エラーメッセージは次のとおりです: {$a->message}'; $string['messageprocessingfailedunknown'] = 'あなたが送信した件名「 {$a->subject} 」のメールを処理できませんでした。詳細情報に関して、あなたのシステム管理者にご連絡ください。'; diff --git a/html/moodle2/langpacks/ja/tool_uploadcourse.php b/html/moodle2/langpacks/ja/tool_uploadcourse.php index ef19711f4c..904762a184 100644 --- a/html/moodle2/langpacks/ja/tool_uploadcourse.php +++ b/html/moodle2/langpacks/ja/tool_uploadcourse.php @@ -120,7 +120,7 @@ $string['updatewithdataonly'] = 'CSVデータのみで更新する'; $string['updatewithdataordefaults'] = 'CSVデータおよびデフォルトで更新する'; $string['uploadcourses'] = 'コースをアップロードする'; -$string['uploadcourses_help'] = 'コースはテキストファイル経由でアップロードすることができます。ファイルのフォーマットは下記のとおりです: +$string['uploadcourses_help'] = 'コースはテキストファイル経由でアップロードすることができます。ファイルのフォーマットは以下のとおりです: * ファイルのそれぞれの行に1レコードを含みます。 * それぞれのレコードはカンマ (または他のデリミタ) で区切られた一連のデータです。 diff --git a/html/moodle2/langpacks/ja/tool_xmldb.php b/html/moodle2/langpacks/ja/tool_xmldb.php index 62518a2ba1..cbec998fec 100644 --- a/html/moodle2/langpacks/ja/tool_xmldb.php +++ b/html/moodle2/langpacks/ja/tool_xmldb.php @@ -57,9 +57,9 @@ 矛盾したデフォルト値の調査を実行する前、あなたのMoodleリリースを最新のもの (+バージョン) にバージョンアップすることを強くお勧めします。 この機能はDBに対していかなる処理も実行しません (読むだけです)。そのため、いつでも安全に実行することが可能です。'; -$string['confirmcheckforeignkeys'] = 'この機能はinstall.xml定義で定義された外部キーに関して潜在的な違反を調査します (現在、Moodleはデータベースに制約された外部キーを生成しないため、無効なデータが存在する可能性があります)。 +$string['confirmcheckforeignkeys'] = 'この機能はinstall.xml定義で定義された外部キーの潜在的な違反を調査します (現在、Moodleはデータベースに制約された外部キーを生成しないため、無効なデータが存在する可能性があります)。 -不明なインデックス調査を実行する前、あなたのMoodleリリースを最新のもの (+バージョン) にバージョンアップすることを強くお勧めします。 +外部キーの潜在的な違反調査を実行する前にあなたのMoodleリリースを最新 (+バージョン) にすることを強くお勧めします。 この機能はDBに対していかなる処理も実行しません (読むだけです)。そのため、いつでも安全に実行することが可能です。'; $string['confirmcheckindexes'] = 'この機能は、あなたのMoodleサーバで潜在的に不明なインデックスを調査し、すべてを最新の状態にするためのSQL文を自動的に生成します (実行ではありません!)。 diff --git a/html/moodle2/langpacks/nl/admin.php b/html/moodle2/langpacks/nl/admin.php index 8b5dbaa7d9..c0f2f77e54 100644 --- a/html/moodle2/langpacks/nl/admin.php +++ b/html/moodle2/langpacks/nl/admin.php @@ -693,7 +693,7 @@ $string['maxeditingtime'] = 'Maximale tijd om berichten te bewerken'; $string['maxtimelimit'] = 'Maximum tijdslimiet'; $string['maxtimelimit_desc'] = 'Geef hier een waarde in seconden om de PHP uitvoertijd die Moodle toestaat zonder dat er iets getoond wordt op het scherm. 0 betekent dat de standaardbeperkingen gebruikt worden. Als je een front-endserver hebt met zijn eigen tijdslimiet, zet deze waarde dan lager, zodat je PHP-fouten in de logs krijgt. Niet van toepassing op CLI-scripts.'; -$string['maxusersperpage'] = 'Maximaal aantal gebruikers per pagian'; +$string['maxusersperpage'] = 'Maximaal aantal gebruikers per pagina'; $string['mbstringrecommended'] = 'Als je site andere talen dan die uit de Latin1 tekenset gebruikt, dan is het installeren van de optionele MBSTRING library ten zeerste aangeraden om de performantie van de site te verhogen.'; $string['mediapluginavi'] = 'Gebruik .avi-filter'; $string['mediapluginflv'] = 'Gebruik .flv-filter'; @@ -749,7 +749,7 @@ $string['navexpandmycourses'] = 'Toon mijn cursussen uitgeklapt op mijn startpagina'; $string['navexpandmycourses_desc'] = 'Indien ingeschakeld, worden de cursussen uitgeklapt getoond in het navigatieblok op je startpagina.'; $string['navigationupgrade'] = 'Deze upgrade introduceert twee nieuwe navigatieblokken die volgende blokken zal vervangen: Beheer, cursussen, activiteiten en deelnemers. Als je op deze blokken speciale rechten had toegepast, dan moet je controleren of alles wel werkt zoals je wil.'; -$string['navshowallcourses'] = 'Toon alle curssusen'; +$string['navshowallcourses'] = 'Toon alle cursussen'; $string['navshowcategories'] = 'Toon cursuscategorieën'; $string['navshowfrontpagemods'] = 'Toon startpagina-activiteiten in de navigatie'; $string['navshowfrontpagemods_help'] = 'Indien ingeschakeld worden activiteiten op de startpagina getoond in de navigatie onder site pagina\'s'; diff --git a/html/moodle2/langpacks/nl/hvp.php b/html/moodle2/langpacks/nl/hvp.php new file mode 100644 index 0000000000..c393cd4ddb --- /dev/null +++ b/html/moodle2/langpacks/nl/hvp.php @@ -0,0 +1,245 @@ +. + +/** + * Strings for component 'hvp', language 'nl', branch 'MOODLE_31_STABLE' + * + * @package hvp + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['action'] = 'Handeling'; +$string['addedandupdatelibraries'] = '{$a->%new} nieuwe H5P bibliotheken toegevoegd en {$a->%old} bijgewerkt.'; +$string['addednewlibraries'] = '{$a->%new} nieuwe H5P bibliotheken toegevoegd.'; +$string['addlibraries'] = 'Bibliotheken toevoegen'; +$string['ajaxfailed'] = 'Gegevens laden mislukt.'; +$string['attribution'] = 'Naamsvermelding 4.0'; +$string['attributionnc'] = 'Naamsvermelding-NietCommercieel 4.0'; +$string['attributionncnd'] = 'Naamsvermelding-NietCommercieel-GeenAfgeleideWerken 4.0'; +$string['attributionncsa'] = 'Naamsvermelding-NietCommercieel-GelijkDelen 4.0'; +$string['attributionnd'] = 'Naamsvermelding-GeenAfgeleideWerken 4.0'; +$string['attributionsa'] = 'Naamsvermelding-GelijkDelen 4.0'; +$string['author'] = 'Auteur'; +$string['availableversion'] = 'Beschikbare update'; +$string['cancellabel'] = 'Annuleren'; +$string['close'] = 'Sluiten'; +$string['confirmdialogbody'] = 'Bevestig dat je wilt doorgaan. Deze actie kan niet worden teruggedraaid.'; +$string['confirmdialogheader'] = 'Handeling bevestigen'; +$string['confirmlabel'] = 'Bevestigen'; +$string['contentchanged'] = 'Deze inhoud is gewijzigd sinds de laatste keer dat je hem hebt gebruikt.'; +$string['contentstatefrequency'] = 'Frequentie van opslaan van de inhoud'; +$string['contentstatefrequency_help'] = 'In seconden, hoe vaak je wilt dat de gebruiker zijn werk automatisch opslaat. Verhoog deze waarde als er problemen zijn met Ajax-verzoeken.'; +$string['copyright'] = 'Rechten van gebruik'; +$string['copyrightinfo'] = 'Copyrightinformatie'; +$string['copyrightstring'] = 'Copyright'; +$string['copyrighttitle'] = 'Bekijk de copyrightinformatie voor deze content.'; +$string['couldnotcopy'] = 'Kan bestand niet kopiëren.'; +$string['couldnotsave'] = 'Kan bestand niet opslaan.'; +$string['create'] = 'Maak'; +$string['currentpage'] = 'Pagina $current van $total'; +$string['currentversion'] = 'Huidige versie'; +$string['disablefileextensioncheck'] = 'Bestandsextensie controleren uitschakelen'; +$string['disablefileextensioncheckwarning'] = 'Waarschuwing! Het uitschakelen van het controleren bestandsextensies kan gevolgen hebben voor de beveiliging omdat hierdoor php bestanden kunnen worden geüploaded. Dat kan ervoor zorgen dat hackers kwaadaardige code kunnen uitvoeren op je site. Zorg ervoor dat je weet wat je uploadt.'; +$string['disablefullscreen'] = 'Volledig scherm uitschakelen'; +$string['displayoptionalwaysshow'] = 'Altijd tonen'; +$string['displayoptionauthoroff'] = 'Gecontroleerd door auteur, standaard uitgeschakeld'; +$string['displayoptionauthoron'] = 'Gecontroleerd door auteur, standaard ingeschakeld'; +$string['displayoptionnevershow'] = 'Nooit tonen'; +$string['displayoptionpermissions'] = 'Alleen tonen wanneer de gebruiker permissie heeft H5P te exporteren'; +$string['displayoptions'] = 'Weergaveopties'; +$string['download'] = 'Downloaden'; +$string['downloadandupdate'] = 'Downloaden & Updaten'; +$string['downloadtitle'] = 'Deze inhoud downloaden als H5P bestand.'; +$string['editor'] = 'Editor'; +$string['embed'] = 'Inbedden'; +$string['embedtitle'] = 'Bekijk de inbedcode voor deze inhoud.'; +$string['empty'] = 'Geen resultaten beschikbaar'; +$string['enableabout'] = 'Over H5P knop'; +$string['enablecopyright'] = 'Copyright knop'; +$string['enabledlrscontenttypes'] = 'LRS afhankelijke inhoudstypes inschakelen'; +$string['enabledlrscontenttypes_help'] = 'Dit maakt het mogelijk inhoudstypes te gebruiken die voor correcte werking afhankelijk zijn van een Learning Record Store, zoals het inhoudstype Vragenlijst.'; +$string['enabledownload'] = 'Download-knop'; +$string['enableembed'] = 'Inbedden-knop'; +$string['enableframe'] = 'Toon activiteitenbalk en frame'; +$string['enablejavascript'] = 'JavaScript moet ingeschakeld zijn.'; +$string['enablesavecontentstate'] = 'Inhoudstoestand opslaan'; +$string['enablesavecontentstate_help'] = 'Automatisch de huidige toestand van interactieve inhoud opslaan voor iedere gebruiker. Dit betekent dat de gebruiker kan verdergaan waar hij was.'; +$string['externalcommunication'] = 'Externe communicatie'; +$string['externalcommunication_help'] = 'Draag bij aan de ontwikkeling van H5P door anonieme gebruiksgegevens aan te leveren. Dit uitschakelen zorgt ervoor dat je site de nieuwste H5P updates niet meer ophaalt. Lees hier welke gegevens verzameld worden op h5p.org.'; +$string['filenotimage'] = 'Bestand is geen afbeelding'; +$string['filetypenotallowed'] = 'Bestand is niet toegestaan'; +$string['finished'] = 'Klaar'; +$string['fullscreen'] = 'Volledig scherm'; +$string['gpl'] = 'General Public License v3'; +$string['h5pfile'] = 'H5P bestand'; +$string['h5ptitle'] = 'Ga naar H5P.org om nog meer coole inhoud te ontdekken.'; +$string['hideadvanced'] = 'Geavanceerd verbergen'; +$string['hvp:addinstance'] = 'Een nieuwe H5P activiteit toevoegen'; +$string['hvp:getcachedassets'] = 'Gecachet H5P inhoud ophalen'; +$string['hvp:getcontent'] = 'Inhoud van H5P bestand in cursus ophalen/bekijken'; +$string['hvp:getexport'] = 'Exportbestand van H5P in cursus ophalen'; +$string['hvp:restrictlibraries'] = 'Een H5P bibliotheek beperken'; +$string['hvp:savecontentuserdata'] = 'H5P inhoud gebruikersgegevens opslaan'; +$string['hvp:saveresults'] = 'Resultaat opslaan voor H5P inhoud'; +$string['hvp:updatelibraries'] = 'De versie van een H5P bibliotheek updaten'; +$string['hvp:updatesavailable'] = 'Bericht ontvangen wanneer er H5P updates beschikbaar zijn'; +$string['hvp:userestrictedlibraries'] = 'Gebruik beperkte H5P bibliotheken'; +$string['hvp:viewresults'] = 'Resultaat bekijken voor H5P inhoud'; +$string['installedlibraries'] = 'Geïnstalleerde bibliotheken'; +$string['intro'] = 'Introductie'; +$string['invalidaudioformat'] = 'Ongeldig audiobestandsformat. Gebruik mp3 of wav.'; +$string['invalidcontentfolder'] = 'Ongeldige inhoudsmap'; +$string['invalidfieldtype'] = 'Ongeldig veldtype'; +$string['invalidfile'] = 'Bestand "{a->%filename}" is niet toegestaan. Alleen bestanden met de volgende extensies zijn toegestaan: {$a-%files-allowed}.'; +$string['invalidimageformat'] = 'Ongeldig afbeeldingsbestandsformat. Gebruik jpg, png of gif.'; +$string['invalidlanguagefile'] = 'Ongeldig taalbestand {$a->%file} in library {$a->%library}'; +$string['invalidlanguagefile2'] = 'Ongeldig taalbestand {$a->%languageFile} is toegevoegd aan de library {$a->%name}'; +$string['invalidlibrary'] = 'De H5P bibliotheek {$a->library} gebruikt in de content is ongeldig'; +$string['invalidlibrarydata'] = 'Ongeldige data voor {$a->%property} in {$a-%library}'; +$string['invalidlibrarydataboolean'] = 'Ongeldige data voor {$a->%property} in {$a-%library}. Boolean werd verwacht.'; +$string['invalidlibraryname'] = 'Ongeldige bibliotheeknaam: {$a->%name}'; +$string['invalidlibraryoption'] = 'Ongeldige optie {$a-%option} in {$a->%library}'; +$string['invalidlibraryproperty'] = 'Kan eigenschap {$a->%property} in {$a->%library} niet lezen'; +$string['invalidmainjson'] = 'Een geldig h5p.json hoofdbestand ontbreekt'; +$string['invalidmultiselectoption'] = 'Ongeldige geselecteerde optie in multi-select.'; +$string['invalidparameters'] = 'Ongeldige parameters'; +$string['invalidselectoption'] = 'Ongeldige gekozen optie in select.'; +$string['invalidsemanticsjson'] = 'Ongeldig semantics.json bestand is opgenomen in de library {$a->%name}'; +$string['invalidsemanticstype'] = 'Interne H5P fout: onbekend inhoudstype "{$a->@type}" in semantics. Verwijder inhoud!'; +$string['invalidstring'] = 'Geleverde string is niet geldig volgens regexp in semantics. (waarde: "{$a->%value}", regexp: \\"{$a->%regexp}"\\)'; +$string['invalidtoken'] = 'Ongeldig beveiligingstoken.'; +$string['invalidvideoformat'] = 'Ongeldig videobestandsformat. Gebruik mp4 of webm.'; +$string['javascriptloading'] = 'Wachten op JavaScript...'; +$string['libraries'] = 'H5P bibliotheken'; +$string['librarydirectoryerror'] = 'De naam van de bibliothekenmap moet overeenkomen met machineName of machineName-majorVersion.minorVersion (uit library.json). (Directory: {$a->%directoryName}, machineName: {$a->%machineName}, majorVersion: {$a->%majorVersion}, minorVersion: {$a->%minorVersion})'; +$string['librarylistactions'] = 'Handelingen'; +$string['librarylistinstancedependencies'] = 'Afhankelijkheden van instantie'; +$string['librarylistinstances'] = 'Instanties'; +$string['librarylistlibrarydependencies'] = 'Afhankelijkheden van bibliotheek'; +$string['librarylistrestricted'] = 'Beperkt'; +$string['librarylisttitle'] = 'Titel'; +$string['license'] = 'Licentie'; +$string['loadingdata'] = 'Gegevens laden.'; +$string['lookforupdates'] = 'Zoek H5P updates'; +$string['maximumgrade'] = 'Maximaal cijfer'; +$string['maximumgradeerror'] = 'Voor een geldige positief heel getal in als maximale punten voor deze activiteit'; +$string['maxscore'] = 'Maximum score'; +$string['messageprovider:updates'] = 'Melding van beschikbare H5P updates'; +$string['missingcontentfolder'] = 'Een geldige inhoudsmap ontbreekt'; +$string['missingcontentuserdata'] = 'Fout: Kan geen inhoudsgebruikersdata vinden'; +$string['missingcoreversion'] = 'Het systeem kon het onderdeel {$a->%component} van het pakket niet installeren. Er is een nieuwere versie van de H5P plugin vereist. Deze site draait momenteel versie {$a-%current}, terwijl de vereiste versie {$a->%required} of hoger is. Gelieve te upgraden en probeer het daarna opnieuw.'; +$string['missingdependency'] = 'Ontbrekende afhankelijkheid {$a->@dep} vereist door {$a->@lib}.'; +$string['missingh5purl'] = 'Ontbrekende URL voor H5P bestand'; +$string['missinglibrary'] = 'Ontbrekende vereiste bibliotheek {$a->@library}'; +$string['missinglibraryfile'] = 'Het bestand "{$a->%file}" ontbreekt in bibliotheek: "{$a->%name}"'; +$string['missinglibraryjson'] = 'Kan bestand library.json met geldig json format voor bibliotheek {$a->%name} niet vinden'; +$string['missinglibraryproperty'] = 'De vereiste eigenschap {$a->%property} ontbreekt in {$a->%library}'; +$string['missingmbstring'] = 'De mbstring PHP extensie is niet geladen. H5P heeft deze nodig om correct te functioneren'; +$string['missingparameters'] = 'Ontbrekende parameters'; +$string['missinguploadpermissions'] = 'Let erop dat de bibliotheken kunnen bestaan in het bestand dat je hebt geüpload, maar dat je geen nieuwe bibliotheken mag uploaden. Neem hiervoor contact op met de sitebeheerder.'; +$string['modulename'] = 'Interactieve inhoud'; +$string['modulename_help'] = 'Met de H5P activiteitenmodule maak je interactieve inhoud zoals bijvoorbeeld Interactieve Video, Question Sets, Drag and Drop vragen, Multiple Choice vragen, Presentaties en nog veel meer. + +Niet alleen is H5P een authoring tool voor rijke inhoud, maar kun je er ook H5P bestanden mee importeren en exporteren om inhoud eenvoudig te kunnen delen en hergebruiken. + +Gebruikersinteracties en scores worden opgeslagen met behulp van xAPI en zijn beschikbaar via het Moodle Cijferboek. + +Je kunt interactieve H5P-inhoud toevoegen door een .h5p bestand te uploaden. Je kunt .h5p bestanden maken en downloaden op H5P.org.'; +$string['modulenameplural'] = 'Interactieve inhoud'; +$string['nextpage'] = 'Volgende pagina'; +$string['nocontent'] = 'Kan het bestand content.json niet vinden of parsen.'; +$string['nocopyright'] = 'Er is geen copyrightinformatie beschikbaar voor deze inhoud.'; +$string['nodata'] = 'Er is geen data beschikbaar die overeenkomt met jouw criteria.'; +$string['noextension'] = 'Het bestand dat je hebt geüpload is geen geldig HTML5 pakket (het heeft niet de .h5p bestandsextensie)'; +$string['noh5ps'] = 'Er is geen interactieve inhoud beschikbaar voor deze cursus.'; +$string['nojson'] = 'Het hoofdbestand h5p.json is niet geldig'; +$string['noparameters'] = 'Geen parameters'; +$string['noparse'] = 'Kan het hoofdbestand h5p.json niet parsen.'; +$string['nopermissiontorestrict'] = 'Je hebt geen toestemming om bibliotheken te beperken.'; +$string['nopermissiontosavecontentuserdata'] = 'Je hebt geen toestemming om gebruikersdata van inhoud op te slaan.'; +$string['nopermissiontosaveresult'] = 'Je hebt geen toestemming om resultaten voor deze cinhoud op te slaan.'; +$string['nopermissiontoupgrade'] = 'Je hebt geen toestemming om bibliotheken te upgraden.'; +$string['nopermissiontoviewresult'] = 'Je hebt geen toestemming om de resultaten voor deze inhoud te bekijken.'; +$string['nosuchlibrary'] = 'Er is geen bibliotheek met die naam'; +$string['notapplicable'] = 'N.v.t.'; +$string['nounzip'] = 'Het bestand dat je hebt geüpload is geen geldig HTML5 pakket (We kunnen het niet unzippen)'; +$string['noziparchive'] = 'Je PHP versie ondersteunt ZipArchive niet.'; +$string['onlyupdate'] = 'Alleen bestaande bibliotheken updaten'; +$string['options'] = 'Opties'; +$string['pd'] = 'Publiek domein'; +$string['pddl'] = 'Publiek domein toewijzing en licentie'; +$string['pdm'] = 'Publiek domein merkteken'; +$string['pluginadministration'] = 'H5P'; +$string['pluginname'] = 'H5P'; +$string['previouspage'] = 'Vorige pagina'; +$string['removeoldlogentries'] = 'Oude H5P log entries verwijderen'; +$string['removetmpfiles'] = 'Oude tijdelijke H5P bestanden verwijderen'; +$string['resizescript'] = 'Neem dit script op je website op als je wilt dat de weergave van de inhoud zich aanpast aan de schermgrootte;'; +$string['score'] = 'Score'; +$string['search'] = 'Zoeken'; +$string['settings'] = 'H5P Instellingen'; +$string['showadvanced'] = 'Toon geavanceerd'; +$string['size'] = 'Grootte'; +$string['source'] = 'Bron'; +$string['startingover'] = 'Je zult opnieuw beginnen.'; +$string['thumbnail'] = 'Miniatuur'; +$string['title'] = 'Titel'; +$string['unabletocreatedir'] = 'Kon directory niet aanmaken'; +$string['unabletodownloadh5p'] = 'Kon H5P bestand niet downloaden'; +$string['unabletogetfieldtype'] = 'Kon veldtype niet ophalen'; +$string['undisclosed'] = 'Niet onthuld'; +$string['updatedlibraries'] = '{$a->%old} H5P bibliotheken geüpdatet.'; +$string['updatelibraries'] = 'Alle bibliotheken updaten.'; +$string['updatesavailable'] = 'Er zijn updates beschikbaar voor je H5P-inhoudstypes.'; +$string['updatesavailablemsgpt1'] = 'Er zijn updates beschikbaar voor de H5P-inhoudstypes die je hebt geïnstalleerd op je Moodle site.'; +$string['updatesavailablemsgpt2'] = 'Ga naar de pagina via de link hieronder voor verdere instructies.'; +$string['updatesavailablemsgpt3'] = 'De laatste update is gereleased op: {$a}'; +$string['updatesavailablemsgpt4'] = 'Je draait een versie van: {$a}'; +$string['updatesavailabletitle'] = 'Er zijn nieuwe H5P upgrades beschikbaar'; +$string['upgrade'] = 'H5P upgraden'; +$string['upgradebuttonlabel'] = 'Upgraden'; +$string['upgradedone'] = 'Je hebt succesvol {$a} inhoudsinstanties geüpgraded.'; +$string['upgradeerror'] = 'Er is een fout opgetreden bij het verwerken van de parameters:'; +$string['upgradeerrorcontent'] = 'Kan inhoud %id niet upgraden:'; +$string['upgradeerrordata'] = 'Kan geen data laden van bibliotheek %lib.'; +$string['upgradeerrorparamsbroken'] = 'Parameters verbroken.'; +$string['upgradeerrorscript'] = 'Kan geen upgrades script laden voor %lib.'; +$string['upgradeheading'] = '{$a} inhoud upgraden'; +$string['upgradeinprogress'] = 'Upgraden naar %ver...'; +$string['upgradeinvalidtoken'] = 'Fout: Ongeldig beveiligingstoken'; +$string['upgradelibrarycontent'] = 'Bibliotheekinhoud upgraden'; +$string['upgradelibrarymissing'] = 'Fout: Je bibliotheek ontbreekt!'; +$string['upgrademessage'] = 'Je gaat {$a} inhoudsinstantie(s) upgraden. Selecteer upgrade-versie.'; +$string['upgradenoavailableupgrades'] = 'Er zijn geen upgrades beschikbaar voor deze bibliotheek.'; +$string['upgradenothingtodo'] = 'Er zijn geen inhoudsinstanties om te upgraden.'; +$string['upgradereturn'] = 'Terug'; +$string['upload'] = 'Uploaden'; +$string['uploadlibraries'] = 'Bibliotheken uploaden'; +$string['usebuttonbelow'] = 'Je kunt deze knop gebruiken om automatisch al je inhoudstypes te downloaden en upgraden.'; +$string['user'] = 'Gebruiker'; +$string['welcomecommunity'] = 'We hopen dat je H5P met plezier gebruikt en betrokken raakt bij onze almaar groeiende community via onze forums}>forums en chatroom gitter}H5P op Gitter'; +$string['welcomecontactus'] = 'Als je feedback hebt, aarzel dan niet op contact met ons op te nemen. Wij nemen feedback erg serieus en gaan ervoor H5P iedere dag beter te maken!'; +$string['welcomegettingstarted'] = 'Neem om te beginnen met H5P en Moodle een kijkje bij onze moodle_tutorial}>tutorial en bekijk de example_content}>voorbeelden op H5P.org voor inspiratie.
      De populairste inhoudstypes zijn al voor je geïnstalleerd!'; +$string['welcomeheader'] = 'Welkom in de wereld van H5P!'; +$string['whyupdatepart1'] = 'Je kunt lezen over waarom het belangrijk is te updaten en de voordelen ervan op de pagina Why Update H5P.'; +$string['whyupdatepart2'] = 'Op deze pagina vind je ook changelogs, waar je kunt lezen over de nieuw geïntroduceerde features en de issues die zijn opgelost.'; +$string['wrongversion'] = 'De versie van de H5P bibliotheek {$a->%machineName} gebruikt in deze content is niet geldig. De content bevat {$a->%contentLibrary}, maar dit zou {$a->%semanticsLibrary} moeten zijn.'; +$string['year'] = 'Jaar'; +$string['years'] = 'Jaar'; diff --git a/html/moodle2/langpacks/nl/moodle.php b/html/moodle2/langpacks/nl/moodle.php index 0fc0bbf240..864645c459 100644 --- a/html/moodle2/langpacks/nl/moodle.php +++ b/html/moodle2/langpacks/nl/moodle.php @@ -1109,7 +1109,7 @@ $string['messageprovider:notices_help'] = 'Dit zijn opmerkingen die interessant zijn voor een beheerder.'; $string['messageselect'] = 'Selecteer deze gebruiker om berichten te ontvangen'; $string['messageselectadd'] = 'Stuur bericht'; -$string['middlename'] = 'Middennaam'; +$string['middlename'] = 'Middelnaam'; $string['migratinggrades'] = 'Cijfers aan het migreren'; $string['min'] = 'minuut'; $string['mins'] = 'minuten'; diff --git a/html/moodle2/langpacks/nl/questionnaire.php b/html/moodle2/langpacks/nl/questionnaire.php index be545df6b5..10f1493b2c 100644 --- a/html/moodle2/langpacks/nl/questionnaire.php +++ b/html/moodle2/langpacks/nl/questionnaire.php @@ -263,6 +263,7 @@ $string['notavail'] = 'Deze enquête is nog niet beschikbaar. Probeer later nog eens.'; $string['noteligible'] = 'Je mag deze enquête niet invullen'; $string['notemplatesurveys'] = 'Geen sjabloonenquêtes'; +$string['notenoughscaleitems'] = 'Je moet een minimumwaarde van 2 items op de schaal invoeren!'; $string['notopen'] = 'Deze enquête start pas op {$a}.'; $string['notrequired'] = 'Antwoord is niet vereist'; $string['not_started'] = 'niet begonnen'; @@ -272,15 +273,20 @@ $string['numberofdecimaldigits'] = 'Aantal decimalen'; $string['numberscaleitems'] = 'Aantal schaalitems'; $string['numeric'] = 'Nummeriek'; +$string['numeric_help'] = 'Gebruik dit vraagtype wanneer je verwacht dat het antwoord een correct geformatteerd getal is.'; $string['of'] = 'van'; $string['opendate'] = 'Gebruik startdatum'; $string['option'] = 'optie {$a}'; $string['optionalname'] = 'Vraagnaam'; +$string['optionalname_help'] = 'De vraagnaam wordt alleen gebruikt wanneer je antwoorden exporteert naar CSV/Excel format. Als je nooit naar CSV exporteert, hoef je je geen zorgen te maken om vraagnamen. Als je regelmatig gegevens van enquêtes wilt exporteren naar CSV, kun je de vragen op twee manieren namen geven.'; $string['or'] = '- OF -'; $string['order_ascending'] = 'Oplopende volgorde'; $string['order_default'] = 'Bekijk standaardvolgorde'; $string['order_descending'] = 'Aflopende volgorde'; $string['orderresponses'] = 'Rangschik antwoorden'; +$string['osgood'] = 'Osgood'; +$string['other'] = 'Overige:'; +$string['otherempty'] = 'Als je deze keuze aanvinkt, moet je wat tekst in het tekstvak invoeren!'; $string['overviewnumresplog'] = 'antwoorden'; $string['overviewnumresplog1'] = 'antwoord'; $string['overviewnumrespvw'] = 'antwoorden'; @@ -289,22 +295,41 @@ $string['page'] = 'Pagina'; $string['pageof'] = 'Pagina {$a->page} van {$a->totpages}'; $string['participant'] = 'Deelnemer'; +$string['pleasecomplete'] = 'Gelieve deze keuze in te vullen.'; $string['pluginadministration'] = 'Enquêtebeheer'; $string['pluginname'] = 'Enquête'; $string['position'] = 'positie'; $string['possibleanswers'] = 'Mogelijke antwoorden'; +$string['posteddata'] = 'Pagina bereikt met geplaatste gegevens:'; +$string['previewing'] = 'Enquête voorvertonen'; +$string['preview_label'] = 'Voorvertoning'; +$string['preview_questionnaire'] = 'Voorvertoning enquête'; $string['previous'] = 'Vorige'; $string['previouspage'] = 'Vorige pagina'; +$string['print'] = 'Dit antwoord afdrukken'; +$string['printblank'] = 'Blanco afdrukken'; +$string['printblanktooltip'] = 'Opent printervriendelijk venster met blanco Enquête'; +$string['printtooltip'] = 'Opent printervriendelijk venster met huidig Antwoord'; $string['private'] = 'Privaat'; $string['public'] = 'Publiek'; +$string['publiccopy'] = 'Kopie:'; +$string['publicoriginal'] = 'Origineel:'; $string['qtype'] = 'Type'; +$string['qtypedaily'] = 'dagelijks beantwoorden'; +$string['qtypemonthly'] = 'maandelijks beantwoorden'; $string['qtypeonce'] = 'antwoord één keer'; $string['qtypeunlimited'] = 'meerdere keren antwoorden'; +$string['qtypeweekly'] = 'wekelijks beantwoorden'; +$string['questionnaire:addinstance'] = 'Voeg een nieuwe enquête toe'; +$string['questionnaireadministration'] = 'Enquêtebeheer'; +$string['questionnairecloses'] = 'Enquête sluit'; $string['questionnaire:copysurveys'] = 'Kopieer sjabloon- en private enquêtes'; $string['questionnaire:createpublic'] = 'Creëer openbare enquêtes'; $string['questionnaire:createtemplates'] = 'Creëer sjabloonenquêtes'; $string['questionnaire:deleteresponses'] = 'Verwijder ieder antwoord'; $string['questionnaire:downloadresponses'] = 'Download antwoorden in een CSV bestand'; +$string['questionnaire:editquestions'] = 'Creëer en bewerk enquêtevragen'; +$string['questionnaire:manage'] = 'Creëer en bewerk enquêtes'; $string['questionnaire:message'] = 'Een bericht naar non-respondenten sturen'; $string['questionnaireopens'] = 'Enquête wordt geopend'; $string['questionnaire:preview'] = 'Enquêtes voorvertonen'; @@ -322,6 +347,7 @@ $string['questiontypes'] = 'Vraagtypes'; $string['questiontypes_help'] = 'Zie de Moodle Documentatie hieronder'; $string['radiobuttons'] = 'Radio Buttons'; +$string['radiobuttons_help'] = 'In dit vraagtype moet de respondent één van de geboden keuzes selecteren.'; $string['rank'] = 'Rangschik'; $string['ratescale'] = 'Beoordeel (schaal 1 - 5)'; $string['ratescale_help'] = 'Zie de Moodle Documentatie hieronder'; @@ -363,15 +389,21 @@ $string['return'] = 'Terug'; $string['save'] = 'Bewaar'; $string['saveasnew'] = 'Opslaan als nieuwe vraag'; +$string['savedbutnotsubmitted'] = 'Deze enquête is opgeslagen maar nog niet ingestuurd.'; $string['savedprogress'] = 'Je voortgang is opgeslagen. Je kunt op ieder moment terugkeren om deze enquête te voltooien.'; $string['saveeditedquestion'] = 'Vraag {$a} opslaan'; $string['savesettings'] = 'Instellingen opslaan'; $string['section'] = 'Beschrijving'; $string['sectionbreak'] = '----- Pagina-einde -----'; $string['sectionbreak_help'] = '----- Pagina-einde -----'; +$string['sectionsnotset'] = 'Je moet tenminste EEN vraag per sectie selecteren!
      Niet geselecteerde sectie(s): {$a}'; $string['sectiontext'] = 'Label'; +$string['sectiontext_help'] = 'Dit is geen vraag maar een korte tekst die wordt getoond om een reeks vragen in te leiden.'; +$string['selecttheme'] = 'Selecteer een thema (css) om met deze enquête te gebruiken.'; $string['send'] = 'Verzenden'; $string['sendemail'] = 'E-mail verzenden'; +$string['sendemail_help'] = 'Dit verstuurt een kopie van elke inzending naar gespecificeerde e-mailadres(sen). Je kunt meer dan één adres invoeren door deze met een komma te scheiden. +Leeg laten'; $string['send_message'] = 'Bericht verzenden aan geselecteerde gebruikers'; $string['send_message_to'] = 'Bericht verzenden aan:'; $string['settings'] = 'Instellingen'; @@ -381,14 +413,35 @@ $string['strfdate'] = '%d/%m/%Y'; $string['strfdateformatcsv'] = 'd/m/Y H:i:s'; $string['subject'] = 'Onderwerp'; +$string['submitoptions'] = 'Instuuropties'; +$string['submitpreview'] = 'Voorvertoning insturen'; +$string['submitpreviewcorrect'] = 'Deze inzending zou geaccepteerd worden als correct ingevuld.'; $string['submitsurvey'] = 'Stuur enquête in'; +$string['submitted'] = 'Ingestuurd op:'; $string['subtitle'] = 'Ondertitel'; +$string['subtitle_help'] = 'Ondertitel van deze enquête. Verschijnt alleen onder de titel op de eerste pagina.'; +$string['summary'] = 'Samenvatting'; +$string['surveynotexists'] = 'enquête bestaat niet.'; +$string['surveyowner'] = 'Je moet eigenaar van de enquête zijn om deze handeling uit te voeren.'; $string['surveyresponse'] = 'Antwoorden van de enquête'; $string['template'] = 'Sjabloon'; $string['templatenotviewable'] = 'Sjabloon-enquêtes niet zichtbaar'; +$string['text'] = 'Vraagtekst'; +$string['textareacolumns'] = 'Kolommen tekstvak'; +$string['textarearows'] = 'Rijen tekstvak'; +$string['textbox'] = 'Tekstvak'; +$string['textdownloadoptions'] = 'Opties voor tekst downloaden (CSV)'; +$string['thank_head'] = 'Dank je wel voor het invullen van deze enquête.'; $string['theme'] = 'Thema'; +$string['thismonth'] = 'deze maand'; +$string['thisresponse'] = 'Dit antwoord'; +$string['thisweek'] = 'deze week'; $string['title'] = 'Titel'; +$string['title_help'] = 'Titel van deze enquête, die boven iedere pagina zal verschijnen. Standaard is de titel ingesteld op de naam van de enquête, maar je kunt dit naar de eigen voorkeur aanpassen.'; +$string['today'] = 'vandaag'; +$string['total'] = 'Totaal'; $string['type'] = 'Type'; +$string['undefinedquestiontype'] = 'Niet gedefinieerd vraagtype!'; $string['unknown'] = 'Onbekend'; $string['unknownaction'] = 'Onbekende enquête actie gespecificeerd...'; $string['url'] = 'Bevestigings-URL'; diff --git a/html/moodle2/langpacks/ru/hvp.php b/html/moodle2/langpacks/ru/hvp.php new file mode 100644 index 0000000000..87d1f047a5 --- /dev/null +++ b/html/moodle2/langpacks/ru/hvp.php @@ -0,0 +1,89 @@ +. + +/** + * Strings for component 'hvp', language 'ru', branch 'MOODLE_31_STABLE' + * + * @package hvp + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['action'] = 'Действие'; +$string['addednewlibraries'] = 'Добавлены новые библиотеки H5P ({$a->%new}).'; +$string['addlibraries'] = 'Добавить библиотеки'; +$string['ajaxfailed'] = 'Не удалось загрузить данные.'; +$string['author'] = 'Автор'; +$string['cancellabel'] = 'Отмена'; +$string['close'] = 'Закрыть'; +$string['confirmdialogbody'] = 'Пожалуйста, подтвердите, что вы хотите продолжить. Это действие необратимо.'; +$string['confirmdialogheader'] = 'Подтвердите действие'; +$string['confirmlabel'] = 'Подтвердить'; +$string['contentchanged'] = 'Этот контент был изменен с момента его последнего использования.'; +$string['copyright'] = 'Права на использование'; +$string['copyrightinfo'] = 'Информация об авторских правах'; +$string['copyrightstring'] = 'Авторское право'; +$string['copyrighttitle'] = 'Просмотр информации об авторских правах на этот контент.'; +$string['create'] = 'Создать'; +$string['disablefullscreen'] = 'Отключить полноэкранный режим'; +$string['displayoptionalwaysshow'] = 'Всегда показывать'; +$string['displayoptionnevershow'] = 'Никогда не показывать'; +$string['download'] = 'Скачать'; +$string['enableabout'] = 'Кнопка «О сервисе H5P»'; +$string['enablecopyright'] = 'Кнопка «Авторское право»'; +$string['enabledownload'] = 'Кнопка «Скачать»'; +$string['filenotimage'] = 'Файл не является изображением'; +$string['fullscreen'] = 'Полный экран'; +$string['h5pfile'] = 'Файл H5P'; +$string['hvp:addinstance'] = 'Добавлять новый элемент H5P'; +$string['intro'] = 'Введение'; +$string['invalidparameters'] = 'Недопустимые параметры'; +$string['invalidvideoformat'] = 'Неверный формат видеофайла. Используйте mp4 или webm.'; +$string['libraries'] = 'Библиотеки H5P'; +$string['librarylistactions'] = 'Действия'; +$string['librarylisttitle'] = 'Название'; +$string['license'] = 'Лицензия'; +$string['lookforupdates'] = 'Искать обновления H5P'; +$string['maxscore'] = 'Максимальная оценка'; +$string['missingparameters'] = 'Недостающие параметры'; +$string['modulename'] = 'Интерактивный контент'; +$string['modulenameplural'] = 'Интреактивный контент'; +$string['nextpage'] = 'Следующая страница'; +$string['noparameters'] = 'Нет параметров'; +$string['nosuchlibrary'] = 'Нет такой библиотеки'; +$string['notapplicable'] = 'Недоступно'; +$string['options'] = 'Опции'; +$string['previouspage'] = 'Предыдущая страница'; +$string['score'] = 'Оценка'; +$string['search'] = 'Поиск'; +$string['settings'] = 'Настройки H5P'; +$string['size'] = 'Размер'; +$string['source'] = 'Источник'; +$string['thumbnail'] = 'Миниатюра'; +$string['title'] = 'Заголовок'; +$string['unabletocreatedir'] = 'Не удается создать каталог.'; +$string['updatelibraries'] = 'Обновить все библиотеки'; +$string['upgrade'] = 'Обновить H5P'; +$string['upgradebuttonlabel'] = 'Обновить'; +$string['upgradelibrarycontent'] = 'Обновить содержимое библиотеки'; +$string['upgradereturn'] = 'Вернуть'; +$string['upload'] = 'Загрузить'; +$string['uploadlibraries'] = 'Загрузить библиотеки'; +$string['user'] = 'Пользователь'; +$string['welcomeheader'] = 'Добро пожаловать в мир H5P!'; diff --git a/html/moodle2/langpacks/zh_cn/tool_lp.php b/html/moodle2/langpacks/zh_cn/tool_lp.php index a1d6b1ba1b..7dac473ac8 100644 --- a/html/moodle2/langpacks/zh_cn/tool_lp.php +++ b/html/moodle2/langpacks/zh_cn/tool_lp.php @@ -25,11 +25,17 @@ defined('MOODLE_INTERNAL') || die(); +$string['actions'] = '操作'; $string['activities'] = '活动'; $string['addcohorts'] = '增加群'; $string['addcohortstosync'] = '增群到同步'; +$string['addcompetency'] = '添加能力'; $string['addcoursecompetencies'] = '为课程添加能力'; +$string['addcrossreferencedcompetency'] = '添加交叉能力'; +$string['addnewcompetency'] = '创建能力'; +$string['addnewplan'] = '常见学习计划'; $string['addnewtemplate'] = '添加新的学习计划模板'; +$string['addnewuserevidence'] = '创建证书'; $string['addtemplatecompetencies'] = '学习计划模板中添加能力'; $string['assigncohorts'] = '分配群'; $string['cohortssyncedtotemplate'] = '群同步到该学习计划模板'; diff --git a/html/moodle2/lib/editor/atto/plugins/wiris/README.md b/html/moodle2/lib/editor/atto/plugins/wiris/README.md index f0fa739314..f129fff676 100644 --- a/html/moodle2/lib/editor/atto/plugins/wiris/README.md +++ b/html/moodle2/lib/editor/atto/plugins/wiris/README.md @@ -1,5 +1,6 @@ WIRIS plugin for Moodle ========== +[![Build Status](https://travis-ci.org/wiris/moodle-atto_wiris.svg?branch=master)](https://travis-ci.org/wiris/moodle-atto_wiris) Add a fully WYSIWYG editor for scientific expressions ([WIRIS EDITOR](http://www.wiris.com/editor)) and, optionally, an advanced calculator tool ([WIRIS CAS](http://www.wiris.com/cas)). Enabled editing to STEM related topics (Science, Technology, Engineering and Mathematics). diff --git a/html/moodle2/lib/editor/atto/plugins/wiris/VERSION b/html/moodle2/lib/editor/atto/plugins/wiris/VERSION index 0f42559b43..bd1955476d 100644 --- a/html/moodle2/lib/editor/atto/plugins/wiris/VERSION +++ b/html/moodle2/lib/editor/atto/plugins/wiris/VERSION @@ -1 +1 @@ -4.1.1.1361 +4.2.0.1364 diff --git a/html/moodle2/lib/editor/atto/plugins/wiris/core/core.js b/html/moodle2/lib/editor/atto/plugins/wiris/core/core.js index 72a30dbf32..3430ceb194 100644 --- a/html/moodle2/lib/editor/atto/plugins/wiris/core/core.js +++ b/html/moodle2/lib/editor/atto/plugins/wiris/core/core.js @@ -21,6 +21,32 @@ wrs_addEvent(window, 'message', function (e) { } }); +/** + * Fires an element event. + * @param {object} element element where event should be fired. + * @param {string} event event to fire. + * @ignore + */ +function wrs_fireEvent(element, event) { + if (document.createEvent){ + var eventObject = document.createEvent('HTMLEvents'); + eventObject.initEvent(event, true, true); + return !element.dispatchEvent(eventObject); + } + + var eventObject = document.createEventObject(); + return element.fireEvent('on' + event, eventObject) +} + +wrs_addEvent(window, 'mouseup', function (e) { + if (typeof(_wrs_modalWindow) !== 'undefined' && _wrs_modalWindow != null) { + if (_wrs_modalWindow.properties.state != "maximized") { + _wrs_modalWindow.overlayDiv.style.display = 'none'; + } + wrs_fireEvent(_wrs_modalWindow.iframe.contentDocument, 'mouseup'); + } +}); + // Vars. var _wrs_currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf('/') + 1); var _wrs_editMode = typeof _wrs_editMode != 'undefined' ? _wrs_editMode : undefined; @@ -32,7 +58,7 @@ var _wrs_range; // LaTex client cache. var _wrs_int_LatexCache = {}; -// Accessible client cache +// Accessible client cache. var _wrs_int_AccessibleCache = {}; var _wrs_xmlCharacters = { @@ -259,7 +285,7 @@ function wrs_addClass(element, className) { * @ignore */ function wrs_containsClass(element, className) { - if (!('className' in element)) { + if (element == null || !('className' in element)) { return false; } @@ -786,23 +812,6 @@ function wrs_endParseSaveMode(code) { return code; } -/** - * Fires an element event. - * @param {object} element element where event should be fired. - * @param {string} event event to fire. - * @ignore - */ -function wrs_fireEvent(element, event) { - if (document.createEvent){ - var eventObject = document.createEvent('HTMLEvents'); - eventObject.initEvent(event, true, true); - return !element.dispatchEvent(eventObject); - } - - var eventObject = document.createEventObject(); - return element.fireEvent('on' + event, eventObject) -} - /** * Gets the formula mathml or CAS appletCode using its image hash code. * @param {string} variableName Variable to send on POST query to the server. @@ -1706,11 +1715,6 @@ function wrs_mathmlEncode(input) { input = input.split(_wrs_xmlCharacters.ampersand).join(_wrs_safeXmlCharacters.ampersand); input = input.split(_wrs_xmlCharacters.quote).join(_wrs_safeXmlCharacters.quote); - // Transform ="<" --> "<". - // Transform =">" --> ">". - // input = input.split("=" + _wrs_safeXmlCharacters.doubleQuote + _wrs_safeXmlCharacters.tagOpener + _wrs_safeXmlCharacters.doubleQuote).join("=" + _wrs_safeXmlCharacters.doubleQuote + "<" + _wrs_safeXmlCharacters.doubleQuote); - // input = input.split("=" + _wrs_safeXmlCharacters.doubleQuote + _wrs_safeXmlCharacters.tagCloser + _wrs_safeXmlCharacters.doubleQuote).join("=" + _wrs_safeXmlCharacters.doubleQuote + ">" + _wrs_safeXmlCharacters.doubleQuote); - return input; } @@ -1935,6 +1939,7 @@ function wrs_mathmlToImgObject(creator, mathml, wirisProperties, language) { } data['mml'] = mathml; + data['lang'] = language; if (_wrs_conf_setSize) { // Request metrics of the generated image. @@ -1963,7 +1968,7 @@ function wrs_mathmlToImgObject(creator, mathml, wirisProperties, language) { imgObject.setAttribute('data-custom-editor', mathmlSubstring); } - // Performance enabled + // Performance enabled. if (_wrs_conf_wirisPluginPerformance && (_wrs_conf_saveMode == 'xml' || _wrs_conf_saveMode == 'safeXml')) { var result = JSON.parse(wrs_createShowImageSrc(mathml, data, language)); @@ -2120,7 +2125,12 @@ function wrs_openEditorWindow(language, target, isIframe) { _wrs_temporalRange = null; if (target) { - var selectedItem = wrs_getSelectedItem(target, isIframe); + var selectedItem; + if (typeof wrs_int_getSelectedItem != 'undefined') { + selectedItem = wrs_int_getSelectedItem(target, isIframe); + } else { + selectedItem = wrs_getSelectedItem(target, isIframe); + } if (selectedItem != null) { if (selectedItem.caretPosition === undefined) { @@ -2186,7 +2196,7 @@ function wrs_openEditorWindow(language, target, isIframe) { var fileref = document.createElement("link"); fileref.setAttribute("rel", "stylesheet"); fileref.setAttribute("type", "text/css"); - fileref.setAttribute("href", window.parent._wrs_conf_path + '/core/modal.css'); + fileref.setAttribute("href", wrs_concatenateUrl(window.parent._wrs_conf_path, '/core/modal.css')); document.getElementsByTagName("head")[0].appendChild(fileref); _wrs_css_loaded = true; } @@ -2412,13 +2422,13 @@ wrs_PluginEvent.prototype.preventDefault = function () { } /** - * Fires one WIRIS event + * Fires WIRIS plugin event listeners * @param {String} eventName event name * @param {Object} e event properties * @return {bool} false if event has been prevented. * @ignore */ -function wrs_fireEvent(eventName, e) { +function wrs_fireEventListeners(eventName, e) { for (var i = 0; i < wrs_pluginListeners.length && !e.cancelled; ++i) { if (wrs_pluginListeners[i][eventName]) { // Calling listener. @@ -2447,6 +2457,8 @@ function wrs_updateFormula(focusElement, windowTarget, mathml, wirisProperties, // - editMode (read only) // - wirisProperties // - language (read only). + + editMode = editMode !== null ? editMode : _wrs_editMode; var e = new wrs_PluginEvent(); e.mathml = mathml; @@ -2463,7 +2475,7 @@ function wrs_updateFormula(focusElement, windowTarget, mathml, wirisProperties, e.language = language; e.editMode = editMode; - if (wrs_fireEvent('onBeforeFormulaInsertion', e)) { + if (wrs_fireEventListeners('onBeforeFormulaInsertion', e)) { return; } @@ -2494,7 +2506,7 @@ function wrs_updateFormula(focusElement, windowTarget, mathml, wirisProperties, wrs_insertElementOnSelection(e.node, focusElement, windowTarget); } - if (wrs_fireEvent('onAfterFormulaInsertion', e)) { + if (wrs_fireEventListeners('onAfterFormulaInsertion', e)) { return; } } @@ -2609,11 +2621,11 @@ function wrs_fixAfterResize(img) { if (_wrs_conf_setSize) { if (img.src.indexOf("data:image") != -1) { if (_wrs_conf_imageFormat == 'svg') { - // data:image/svg+xml;charset=utf8, = 32 + // ...data:image/svg+xml;charset=utf8, = 32. var svg = wrs_urldecode(img.src.substring(32, img.src.length)) wrs_setImgSize(img, svg, true); } else { - // data:image/png;base64, == 22 + // ...data:image/png;base64, == 22. var base64 = img.src.substring(22,img.src.length); wrs_setImgSize(img, base64, true); } @@ -2658,6 +2670,10 @@ function wrs_loadConfiguration() { document.getElementsByTagName('head')[0].appendChild(script); // Asynchronous load of configuration. } +function wrs_concatenateUrl(path1, path2) { + return (path1 + path2).replace(/([^:]\/)\/+/g, "$1"); +} + var _wrs_conf_core_loaded = true; if (typeof _wrs_conf_configuration_loaded == 'undefined') { @@ -2684,7 +2700,7 @@ function wrs_createModalWindow() { var fileref = document.createElement("link"); fileref.setAttribute("rel", "stylesheet"); fileref.setAttribute("type", "text/css"); - fileref.setAttribute("href", window.parent._wrs_conf_path + '/core/modal.css'); + fileref.setAttribute("href", wrs_concatenateUrl(window.parent._wrs_conf_path, '/core/modal.css')); document.getElementsByTagName("head")[0].appendChild(fileref); _wrs_css_loaded = true; } @@ -4032,21 +4048,18 @@ function ModalWindow(path, editorAttributes) { attributes['class'] = 'wrs_modal_close_button'; attributes['title'] = 'Close'; var closeModalDiv = wrs_createElement('div', attributes); - // closeModalDiv.innerHTML = '×'; this.closeDiv = closeModalDiv; attributes = {}; attributes['class'] = 'wrs_modal_stack_button'; attributes['title'] = 'Full-screen'; var stackModalDiv = wrs_createElement('div', attributes); - // stackModalDiv.innerHTML = '/'; this.stackDiv = stackModalDiv; attributes = {}; attributes['class'] = 'wrs_modal_minimize_button'; attributes['title'] = 'Minimise'; var minimizeModalDiv = wrs_createElement('div', attributes); - // minimizeModalDiv.innerHTML = "_"; this.minimizeDiv = minimizeModalDiv; attributes = {}; @@ -4078,6 +4091,12 @@ ModalWindow.prototype.create = function() { this.titleBardDiv.appendChild(this.titleDiv); this.iframeContainer.appendChild(this.iframe); + wrs_addEvent(this.overlayDiv, 'mouseup', function (e) { + if (typeof(_wrs_modalWindow) !== 'undefined' && _wrs_modalWindow != null) { + wrs_fireEvent(_wrs_modalWindow.iframe.contentDocument, 'mouseup'); + } + }); + if (!this.deviceProperties['isMobile'] && !this.deviceProperties['isAndroid'] && !this.deviceProperties['isIOS']) { this.containerDiv.appendChild(this.titleBardDiv); } @@ -4161,7 +4180,7 @@ ModalWindow.prototype.close = function() { this.properties.open = false; wrs_int_disableCustomEditors(); document.getElementsByClassName('wrs_modal_iframe')[0].contentWindow._wrs_modalWindowProperties.editor.setMathML(''); - // Properties to initial state + // Properties to initial state. this.properties.state = ''; this.properties.previousState = ''; } @@ -4241,6 +4260,8 @@ ModalWindow.prototype.stackModalWindow = function () { this.containerDiv.style.left = null; this.containerDiv.style.position = null; + this.overlayDiv.style.background = "rgba(0,0,0,0)"; + this.stackDiv.title = "Full-screen"; var modalWidth = parseInt(this.properties.iframeAttributes['width']); @@ -4251,6 +4272,7 @@ ModalWindow.prototype.stackModalWindow = function () { this.iframe.style.height = (parseInt(300) + 3) + 'px'; this.iframe.style.margin = '6px'; this.removeClass('wrs_maximized'); + this.minimizeDiv.title = "Minimise"; this.removeClass('wrs_minimized'); this.addClass('wrs_stack'); } @@ -4271,6 +4293,8 @@ ModalWindow.prototype.minimizeModalWindow = function() { this.containerDiv.style.left = null; this.containerDiv.style.top = null; this.containerDiv.style.position = null; + this.overlayDiv.style.background = "rgba(0,0,0,0)"; + this.minimizeDiv.title = "Maximise"; if (wrs_containsClass(this.overlayDiv, 'wrs_stack')) { this.removeClass('wrs_stack'); @@ -4301,6 +4325,7 @@ ModalWindow.prototype.maximizeModalWindow = function() { this.iframe.style.margin = '6px'; this.removeClass('wrs_drag'); if (wrs_containsClass(this.overlayDiv, 'wrs_minimized')) { + this.minimizeDiv.title = "Minimise"; this.removeClass('wrs_minimized'); } else if (wrs_containsClass(this.overlayDiv, 'wrs_stack')) { this.containerDiv.style.left = null; @@ -4308,6 +4333,8 @@ ModalWindow.prototype.maximizeModalWindow = function() { this.removeClass('wrs_stack'); } this.stackDiv.title = "Exit full-screen"; + this.overlayDiv.style.background = "rgba(0,0,0,0.8)"; + this.overlayDiv.style.display = ''; this.addClass('wrs_maximized'); } @@ -4324,6 +4351,7 @@ ModalWindow.prototype.addListeners = function() { wrs_addEvent(window, 'mouseup', this.stopDrag.bind(this)); wrs_addEvent(document, 'mouseup', this.stopDrag.bind(this)); wrs_addEvent(this.iframe.contentWindow, 'mouseup', this.stopDrag.bind(this)); + wrs_addEvent(this.iframe.contentWindow, 'mousedown', this.setOverlayDiv.bind(this)); wrs_addEvent(document.body, 'mousemove', this.drag.bind(this)); } @@ -4351,7 +4379,7 @@ ModalWindow.prototype.removeListeners = function() { * @ignore */ ModalWindow.prototype.eventClient = function(ev) { - if (typeof(ev.clientX) == 'undefined') { + if (typeof(ev.clientX) == 'undefined' && ev.changedTouches) { var client = { X : ev.changedTouches[0].clientX, Y : ev.changedTouches[0].clientY @@ -4366,6 +4394,17 @@ ModalWindow.prototype.eventClient = function(ev) { } } + +/** + * Set the overlay div display + * + * @param {event} ev touchstart or mousedown event. + * @ignore + */ +ModalWindow.prototype.setOverlayDiv = function(ev) { + this.overlayDiv.style.display = ''; +} + /** * Start drag function: set the object _wrs_dragDataObject with the draggable object offsets coordinates. * when drag starts (on touchstart or mousedown events). @@ -4402,8 +4441,8 @@ ModalWindow.prototype.drag = function(ev) { if(this.dragDataObject) { ev.preventDefault(); ev = ev || event; - this.containerDiv.style.left = this.eventClient(ev).X - this.dragDataObject.x + "px"; - this.containerDiv.style.top = this.eventClient(ev).Y - this.dragDataObject.y + "px"; + this.containerDiv.style.left = this.eventClient(ev).X - this.dragDataObject.x + window.pageXOffset + "px"; + this.containerDiv.style.top = this.eventClient(ev).Y - this.dragDataObject.y + window.pageYOffset + "px"; this.containerDiv.style.position = 'absolute'; this.containerDiv.style.bottom = null; wrs_removeClass(this.containerDiv, 'wrs_stack'); @@ -4417,6 +4456,16 @@ ModalWindow.prototype.drag = function(ev) { * @ignore */ ModalWindow.prototype.stopDrag = function(ev) { + this.containerDiv.style.position = 'fixed'; + // Due to we have multiple events that call this function, we need only to execute the next modifiers one time, + // when the user stops to drag and dragDataObject is not null (the object to drag is attached). + if (this.dragDataObject) { + // Fixed position makes the coords relative to the main window. So that, we need to transform + // the absolute coords to relative removing the scroll. + this.containerDiv.style.left = parseInt(this.containerDiv.style.left) - window.pageXOffset + "px"; + this.containerDiv.style.top = parseInt(this.containerDiv.style.top) - window.pageYOffset + "px"; + } + this.containerDiv.style.bottom = null; wrs_addClass(this.containerDiv, 'wrs_drag'); this.dragDataObject = null; } diff --git a/html/moodle2/lib/editor/atto/plugins/wiris/core/editor.css b/html/moodle2/lib/editor/atto/plugins/wiris/core/editor.css index aae34966b5..4582658b98 100644 --- a/html/moodle2/lib/editor/atto/plugins/wiris/core/editor.css +++ b/html/moodle2/lib/editor/atto/plugins/wiris/core/editor.css @@ -109,7 +109,7 @@ and (orientation : landscape) { } } -/*iPhone 5*/ +/*iPhone5*/ @media only screen and (min-device-width : 320px) and (max-device-width : 568px) diff --git a/html/moodle2/lib/editor/atto/plugins/wiris/core/editor.js b/html/moodle2/lib/editor/atto/plugins/wiris/core/editor.js index 41632868df..0111797921 100644 --- a/html/moodle2/lib/editor/atto/plugins/wiris/core/editor.js +++ b/html/moodle2/lib/editor/atto/plugins/wiris/core/editor.js @@ -239,8 +239,6 @@ var _wrs_isNewElement; // Unfortunately we need this variabels as global variabl editor = new com.wiris.jsEditor.JsEditor('editor', null); } _wrs_modalWindowProperties.editor = editor; - // getMethod(null, 'wrs_editorLoaded', [editor], function(editorLoaded){ - // }); var ua = navigator.userAgent.toLowerCase(); var isAndroid = ua.indexOf("android") > -1; @@ -277,7 +275,7 @@ var _wrs_isNewElement; // Unfortunately we need this variabels as global variabl } if (isIOS) { - // Editor and controls container + // Editor and controls container. var editorAndControlsContainer = document.getElementById('container'); editorAndControlsContainer.className += ' wrs_container wrs_modalIos'; } @@ -323,7 +321,7 @@ var _wrs_isNewElement; // Unfortunately we need this variabels as global variabl mathml = wrs_mathmlEntities(mathml); // Apply a parse. } - getMethod(null, 'wrs_int_updateFormula', [mathml, _wrs_editMode, queryParams['lang']], function(){ + getMethod(null, 'wrs_int_updateFormula', [mathml, null, queryParams['lang']], function(){ _wrs_closeFunction(); }); diff --git a/html/moodle2/lib/editor/atto/plugins/wiris/core/modal.css b/html/moodle2/lib/editor/atto/plugins/wiris/core/modal.css index 47c5e12226..c3540c619c 100644 --- a/html/moodle2/lib/editor/atto/plugins/wiris/core/modal.css +++ b/html/moodle2/lib/editor/atto/plugins/wiris/core/modal.css @@ -1,10 +1,4 @@ -/*body.wrs_modal_open { - overflow: hidden; - position: fixed; -} -*/ .wrs_modal_overlay { - /*overflow: scroll;*/ position: fixed; font-family: arial, sans-serif; top: 0; @@ -15,24 +9,18 @@ z-index: 99998; opacity:0.65; pointer-events: auto; - /*-webkit-transition: opacity 400ms ease-in; - -moz-transition: opacity 400ms ease-in; - transition: opacity 400ms ease-in;*/ } .wrs_modal_overlay.wrs_maximized{ } .wrs_modal_overlay.wrs_minimized { - display: none; } .wrs_modal_overlay.wrs_stack { - display: none; } .wrs_modal_overlay.wrs_modal_ios { - /*position: inherit;*/ } .wrs_modal_overlay.wrs_modal_ios.moodle { @@ -159,7 +147,6 @@ .wrs_modal_title_bar { display : block; background-color: #778e9a; - /*cursor: pointer;*/ } .wrs_modal_dialogContainer { @@ -191,7 +178,6 @@ margin-right: 10px; } .wrs_modal_dialogContainer.wrs_modal_desktop.wrs_minimized.wrs_drag { - /*bottom: auto;*/ } .wrs_modal_dialogContainer.wrs_modal_desktop.wrs_stack { diff --git a/html/moodle2/lib/editor/atto/plugins/wiris/db/install.php b/html/moodle2/lib/editor/atto/plugins/wiris/db/install.php index c13b4d7940..5861031954 100644 --- a/html/moodle2/lib/editor/atto/plugins/wiris/db/install.php +++ b/html/moodle2/lib/editor/atto/plugins/wiris/db/install.php @@ -23,6 +23,8 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +defined('MOODLE_INTERNAL') || die(); + /** * Enable WIRIS plugin buttons on installation. */ diff --git a/html/moodle2/lib/editor/atto/plugins/wiris/db/uninstall.php b/html/moodle2/lib/editor/atto/plugins/wiris/db/uninstall.php index 408ecdb276..cc95442f1b 100644 --- a/html/moodle2/lib/editor/atto/plugins/wiris/db/uninstall.php +++ b/html/moodle2/lib/editor/atto/plugins/wiris/db/uninstall.php @@ -23,6 +23,8 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +defined('MOODLE_INTERNAL') || die(); + function xmldb_atto_wiris_uninstall() { // Remove 'wiris' from the toolbar editor_atto config variable. $toolbar = get_config('editor_atto', 'toolbar'); diff --git a/html/moodle2/lib/editor/atto/plugins/wiris/lib.php b/html/moodle2/lib/editor/atto/plugins/wiris/lib.php index 2ebd46790d..2f98f09194 100644 --- a/html/moodle2/lib/editor/atto/plugins/wiris/lib.php +++ b/html/moodle2/lib/editor/atto/plugins/wiris/lib.php @@ -23,6 +23,8 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +defined('MOODLE_INTERNAL') || die(); + /** * Initialise the js strings required for this module. */ diff --git a/html/moodle2/lib/editor/atto/plugins/wiris/version.php b/html/moodle2/lib/editor/atto/plugins/wiris/version.php index 82e671a4b8..88f25d493c 100644 --- a/html/moodle2/lib/editor/atto/plugins/wiris/version.php +++ b/html/moodle2/lib/editor/atto/plugins/wiris/version.php @@ -25,9 +25,9 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017030900; -$plugin->release = '4.1.1.1361'; +$plugin->version = 2017040600; +$plugin->release = '4.2.0.1364'; $plugin->requires = 2014050800; $plugin->component = 'atto_wiris'; -$plugin->dependencies = array ('filter_wiris' => 2017030900); +$plugin->dependencies = array ('filter_wiris' => 2017040600); $plugin->maturity = MATURITY_STABLE; diff --git a/html/moodle2/lib/editor/atto/plugins/wiris/wirisplugin-generic.js b/html/moodle2/lib/editor/atto/plugins/wiris/wirisplugin-generic.js index f3d5f992ed..d8ed60f31e 100644 --- a/html/moodle2/lib/editor/atto/plugins/wiris/wirisplugin-generic.js +++ b/html/moodle2/lib/editor/atto/plugins/wiris/wirisplugin-generic.js @@ -47,14 +47,17 @@ var _wrs_int_directionality = ''; // Custom Editors. var _wrs_int_customEditors = {chemistry : {name: 'Chemistry', toolbar : 'chemistry', icon : 'chem.png', enabled : false, confVariable : '_wrs_conf_chemEnabled', title: 'WIRIS EDITOR chemistry'}} -if (navigator.userLanguage) { - _wrs_int_langCode = navigator.userLanguage; -} -else if (navigator.language) { - _wrs_int_langCode = navigator.language.substring(0, 2); -} -else { - _wrs_int_langCode = 'en'; + +if (typeof _wrs_int_langCode == 'undefined') { + if (navigator.userLanguage) { + _wrs_int_langCode = navigator.userLanguage; + } + else if (navigator.language) { + _wrs_int_langCode = navigator.language.substring(0, 2); + } + else { + _wrs_int_langCode = 'en'; + } } // Including core.js. diff --git a/html/moodle2/lib/editor/atto/plugins/wiris/yui/build/moodle-atto_wiris-button/moodle-atto_wiris-button-debug.js b/html/moodle2/lib/editor/atto/plugins/wiris/yui/build/moodle-atto_wiris-button/moodle-atto_wiris-button-debug.js index 4671e89bf6..f682febb45 100644 --- a/html/moodle2/lib/editor/atto/plugins/wiris/yui/build/moodle-atto_wiris-button/moodle-atto_wiris-button-debug.js +++ b/html/moodle2/lib/editor/atto/plugins/wiris/yui/build/moodle-atto_wiris-button/moodle-atto_wiris-button-debug.js @@ -62,7 +62,7 @@ Y.namespace('M.atto_wiris').Button = Y.Base.create('button', Y.M.editor_atto.Edi // Editor popup OK callback. window.wrs_int_updateFormula = function(mathml, editMode) { var editable = window._wrs_int_currentPlugin.get('host').editor.getDOMNode(); - wrs_updateFormula(editable, window, mathml, null, editMode); + wrs_updateFormula(editable, window, mathml, null, editMode, _wrs_int_currentPlugin._lang); window._wrs_int_currentPlugin.markUpdated(); window._wrs_int_currentPlugin._updateEditorImgHandlers(); }; diff --git a/html/moodle2/lib/editor/atto/plugins/wiris/yui/build/moodle-atto_wiris-button/moodle-atto_wiris-button-min.js b/html/moodle2/lib/editor/atto/plugins/wiris/yui/build/moodle-atto_wiris-button/moodle-atto_wiris-button-min.js index 400e6fb9d8..0c1f3f8b88 100644 --- a/html/moodle2/lib/editor/atto/plugins/wiris/yui/build/moodle-atto_wiris-button/moodle-atto_wiris-button-min.js +++ b/html/moodle2/lib/editor/atto/plugins/wiris/yui/build/moodle-atto_wiris-button/moodle-atto_wiris-button-min.js @@ -1 +1 @@ -YUI.add("moodle-atto_wiris-button",function(e,t){e.namespace("M.atto_wiris").Button=e.Base.create("button",e.M.editor_atto.EditorPlugin,[],{_lang:"en",initializer:function(t){this._lang=t.lang,window._wrs_int_langCode=t.lang,window.wrs_int_notifyWindowClosed=function(){window._wrs_int_popup=null,window._wrs_temporalImage=null,window._wrs_isNewElement=!0},window.wrs_int_updateFormula=function(e,t){var n=window._wrs_int_currentPlugin.get("host").editor.getDOMNode();wrs_updateFormula(n,window,e,null,t),window._wrs_int_currentPlugin.markUpdated(),window._wrs_int_currentPlugin._updateEditorImgHandlers()},window.wrs_int_updateCAS=function(e,t,n,r){var i=window._wrs_int_currentPlugin.get("host").editor.getDOMNode();wrs_updateCAS(i,window,e,t,n,r),window._wrs_int_currentPlugin.markUpdated(),window._wrs_int_currentPlugin._updateCasImgHandlers()},window._wrs_int_conf_file=M.cfg.wwwroot+"/filter/wiris/integration/configurationjs.php",window._wrs_int_conf_path=M.cfg.wwwroot+"/lib/editor/atto/plugins/wiris",window._wrs_int_conf_async=!0,window._wrs_int_popup=window._wrs_int_popup||null,window._wrs_int_coreLoading=window._wrs_int_coreLoading||!1,window._wrs_int_path=window._wrs_int_conf_file.split("/"),window._wrs_int_path.pop(),window._wrs_int_path=window._wrs_int_path.join("/"),window._wrs_int_path=window._wrs_int_path.indexOf("/")===0||window._wrs_int_path.indexOf("http")===0?window._wrs_int_path:window._wrs_int_conf_path+"/"+window._wrs_int_path,window._wrs_isMoodle24=!0,window._wrs_int_customEditors={chemistry:{name:"Chemistry",toolbar:"chemistry",icon:"chem.gif",enabled:!1,confVariable:"_wrs_conf_chemEnabled",title:"WIRIS EDITOR chemistry"}},window._wrs_int_coreLoading||(window._wrs_int_coreLoading=!0,e.Get.js(window._wrs_int_conf_path+"/core/core.js",function(e){e}));var n=this.get("host"),r=this;window._wrs_int_currentPlugin=this,n.on("change",function(){r._unparseContent()}),n._wirisUpdateFromTextArea=n.updateFromTextArea,n.updateFromTextArea=function(){n._wirisUpdateFromTextArea(),r._parseContent()},this._parseContent(),this._addButtons()},_addButtons:function(){if(window._wrs_conf_plugin_loaded){window._wrs_conf_editorEnabled&&this.addButton({title:"wiris_editor_title",buttonName:"wiris_editor",icon:"formula",iconComponent:"atto_wiris",callback:this._editorButton}),window[_wrs_int_customEditors.chemistry.confVariable]&&this.addButton({title:"wiris_chem_editor_title",buttonName:"wiris_chem_editor",icon:"chem",iconComponent:"atto_wiris",callback:this._chemEditorButton}),window._wrs_conf_CASEnabled&&this.addButton({title:"wiris_cas_title",buttonName:"wiris_cas",icon:"cas",iconComponent:"atto_wiris",callback:this._casButton});var t=this.get("host");t.plugins.collapse&&t.plugins.collapse._setVisibility(t.plugins.collapse.buttons.collapse)}else e.later(50,this,this._addButtons)},_editorButton:function(){if(_wrs_int_popup)_wrs_int_popup.focus();else{var e=this.get("host");_wrs_int_currentPlugin=this,_wrs_int_popup=wrs_openEditorWindow(this._lang,e.editor.getDOMNode(),!1)}},_chemEditorButton:function(){if(_wrs_int_popup)_wrs_int_popup.focus();else{var e=this.get("host");_wrs_int_currentPlugin=this,wrs_int_enableCustomEditor("chemistry"),_wrs_int_popup=wrs_openEditorWindow(this._lang,e.editor.getDOMNode(),!1)}},_casButton:function(){if(_wrs_int_popup)_wrs_int_popup.focus();else{var e=this.get("host");_wrs_int_currentPlugin=this,_wrs_int_popup=wrs_openCASWindow(e.editor.getDOMNode(),!1,this._lang)}},_parseContent:function(){if(window._wrs_conf_plugin_loaded){var t=this.get("host"),n=t.editor.get("innerHTML");n=wrs_initParse(n,this._lang),t.editor.set("innerHTML",n),this.markUpdated(),this._updateCasImgHandlers(),this._updateEditorImgHandlers()}else e.later(50,this,this._parseContent)},_unparseContent:function(){if(window._wrs_conf_plugin_loaded){var t=this.get("host"),n=t.textarea.get("value");n=wrs_endParse(n,null,this._lang),t.textarea.set("value",n)}else e.later(50,this,this._unparseContent)},_handleElementDoubleclick:function(e,t,n){if(t.dataset.mathml){n.stopPropagation(),window._wrs_temporalImage=t,window._wrs_isNewElement=!1;var r=window._wrs_temporalImage.getAttribute("data-custom-editor");typeof r!="undefined"&&r&&window[_wrs_int_customEditors[r].confVariable]&&wrs_int_enableCustomEditor(r),window._wrs_int_currentPlugin._editorButton()}},_handleCasDoubleClick:function(e){window._wrs_temporalImage=e.currentTarget.getDOMNode(),window._wrs_isNewElement=!1,this._casButton(),e.stopPropagation()},_updateEditorImgHandlers:function(){wrs_addElementEvents(this.get("host").editor.getDOMNode(),this._handleElementDoubleclick)},_updateCasImgHandlers:function(){this.editor.all("img.Wiriscas").each(function(e){e.detachAll("dblclick"),e.on("dblclick",this._handleCasDoubleClick,this)},this)}})},"@VERSION@",{requires:["moodle-editor_atto-plugin","get"]}); +YUI.add("moodle-atto_wiris-button",function(e,t){e.namespace("M.atto_wiris").Button=e.Base.create("button",e.M.editor_atto.EditorPlugin,[],{_lang:"en",initializer:function(t){this._lang=t.lang,window._wrs_int_langCode=t.lang,window.wrs_int_notifyWindowClosed=function(){window._wrs_int_popup=null,window._wrs_temporalImage=null,window._wrs_isNewElement=!0},window.wrs_int_updateFormula=function(e,t){var n=window._wrs_int_currentPlugin.get("host").editor.getDOMNode();wrs_updateFormula(n,window,e,null,t,_wrs_int_currentPlugin._lang),window._wrs_int_currentPlugin.markUpdated(),window._wrs_int_currentPlugin._updateEditorImgHandlers()},window.wrs_int_updateCAS=function(e,t,n,r){var i=window._wrs_int_currentPlugin.get("host").editor.getDOMNode();wrs_updateCAS(i,window,e,t,n,r),window._wrs_int_currentPlugin.markUpdated(),window._wrs_int_currentPlugin._updateCasImgHandlers()},window._wrs_int_conf_file=M.cfg.wwwroot+"/filter/wiris/integration/configurationjs.php",window._wrs_int_conf_path=M.cfg.wwwroot+"/lib/editor/atto/plugins/wiris",window._wrs_int_conf_async=!0,window._wrs_int_popup=window._wrs_int_popup||null,window._wrs_int_coreLoading=window._wrs_int_coreLoading||!1,window._wrs_int_path=window._wrs_int_conf_file.split("/"),window._wrs_int_path.pop(),window._wrs_int_path=window._wrs_int_path.join("/"),window._wrs_int_path=window._wrs_int_path.indexOf("/")===0||window._wrs_int_path.indexOf("http")===0?window._wrs_int_path:window._wrs_int_conf_path+"/"+window._wrs_int_path,window._wrs_isMoodle24=!0,window._wrs_int_customEditors={chemistry:{name:"Chemistry",toolbar:"chemistry",icon:"chem.gif",enabled:!1,confVariable:"_wrs_conf_chemEnabled",title:"WIRIS EDITOR chemistry"}},window._wrs_int_coreLoading||(window._wrs_int_coreLoading=!0,e.Get.js(window._wrs_int_conf_path+"/core/core.js",function(e){e}));var n=this.get("host"),r=this;window._wrs_int_currentPlugin=this,n.on("change",function(){r._unparseContent()}),n._wirisUpdateFromTextArea=n.updateFromTextArea,n.updateFromTextArea=function(){n._wirisUpdateFromTextArea(),r._parseContent()},this._parseContent(),this._addButtons()},_addButtons:function(){if(window._wrs_conf_plugin_loaded){window._wrs_conf_editorEnabled&&this.addButton({title:"wiris_editor_title",buttonName:"wiris_editor",icon:"formula",iconComponent:"atto_wiris",callback:this._editorButton}),window[_wrs_int_customEditors.chemistry.confVariable]&&this.addButton({title:"wiris_chem_editor_title",buttonName:"wiris_chem_editor",icon:"chem",iconComponent:"atto_wiris",callback:this._chemEditorButton}),window._wrs_conf_CASEnabled&&this.addButton({title:"wiris_cas_title",buttonName:"wiris_cas",icon:"cas",iconComponent:"atto_wiris",callback:this._casButton});var t=this.get("host");t.plugins.collapse&&t.plugins.collapse._setVisibility(t.plugins.collapse.buttons.collapse)}else e.later(50,this,this._addButtons)},_editorButton:function(){if(_wrs_int_popup)_wrs_int_popup.focus();else{var e=this.get("host");_wrs_int_currentPlugin=this,_wrs_int_popup=wrs_openEditorWindow(this._lang,e.editor.getDOMNode(),!1)}},_chemEditorButton:function(){if(_wrs_int_popup)_wrs_int_popup.focus();else{var e=this.get("host");_wrs_int_currentPlugin=this,wrs_int_enableCustomEditor("chemistry"),_wrs_int_popup=wrs_openEditorWindow(this._lang,e.editor.getDOMNode(),!1)}},_casButton:function(){if(_wrs_int_popup)_wrs_int_popup.focus();else{var e=this.get("host");_wrs_int_currentPlugin=this,_wrs_int_popup=wrs_openCASWindow(e.editor.getDOMNode(),!1,this._lang)}},_parseContent:function(){if(window._wrs_conf_plugin_loaded){var t=this.get("host"),n=t.editor.get("innerHTML");n=wrs_initParse(n,this._lang),t.editor.set("innerHTML",n),this.markUpdated(),this._updateCasImgHandlers(),this._updateEditorImgHandlers()}else e.later(50,this,this._parseContent)},_unparseContent:function(){if(window._wrs_conf_plugin_loaded){var t=this.get("host"),n=t.textarea.get("value");n=wrs_endParse(n,null,this._lang),t.textarea.set("value",n)}else e.later(50,this,this._unparseContent)},_handleElementDoubleclick:function(e,t,n){if(t.dataset.mathml){n.stopPropagation(),window._wrs_temporalImage=t,window._wrs_isNewElement=!1;var r=window._wrs_temporalImage.getAttribute("data-custom-editor");typeof r!="undefined"&&r&&window[_wrs_int_customEditors[r].confVariable]&&wrs_int_enableCustomEditor(r),window._wrs_int_currentPlugin._editorButton()}},_handleCasDoubleClick:function(e){window._wrs_temporalImage=e.currentTarget.getDOMNode(),window._wrs_isNewElement=!1,this._casButton(),e.stopPropagation()},_updateEditorImgHandlers:function(){wrs_addElementEvents(this.get("host").editor.getDOMNode(),this._handleElementDoubleclick)},_updateCasImgHandlers:function(){this.editor.all("img.Wiriscas").each(function(e){e.detachAll("dblclick"),e.on("dblclick",this._handleCasDoubleClick,this)},this)}})},"@VERSION@",{requires:["moodle-editor_atto-plugin","get"]}); diff --git a/html/moodle2/lib/editor/atto/plugins/wiris/yui/build/moodle-atto_wiris-button/moodle-atto_wiris-button.js b/html/moodle2/lib/editor/atto/plugins/wiris/yui/build/moodle-atto_wiris-button/moodle-atto_wiris-button.js index d87163d7dd..5e0563c1b1 100644 --- a/html/moodle2/lib/editor/atto/plugins/wiris/yui/build/moodle-atto_wiris-button/moodle-atto_wiris-button.js +++ b/html/moodle2/lib/editor/atto/plugins/wiris/yui/build/moodle-atto_wiris-button/moodle-atto_wiris-button.js @@ -62,7 +62,7 @@ Y.namespace('M.atto_wiris').Button = Y.Base.create('button', Y.M.editor_atto.Edi // Editor popup OK callback. window.wrs_int_updateFormula = function(mathml, editMode) { var editable = window._wrs_int_currentPlugin.get('host').editor.getDOMNode(); - wrs_updateFormula(editable, window, mathml, null, editMode); + wrs_updateFormula(editable, window, mathml, null, editMode, _wrs_int_currentPlugin._lang); window._wrs_int_currentPlugin.markUpdated(); window._wrs_int_currentPlugin._updateEditorImgHandlers(); }; diff --git a/html/moodle2/lib/editor/atto/plugins/wiris/yui/src/button/js/button.js b/html/moodle2/lib/editor/atto/plugins/wiris/yui/src/button/js/button.js index 504a5319ce..a5721f2bb9 100644 --- a/html/moodle2/lib/editor/atto/plugins/wiris/yui/src/button/js/button.js +++ b/html/moodle2/lib/editor/atto/plugins/wiris/yui/src/button/js/button.js @@ -60,7 +60,7 @@ Y.namespace('M.atto_wiris').Button = Y.Base.create('button', Y.M.editor_atto.Edi // Editor popup OK callback. window.wrs_int_updateFormula = function(mathml, editMode) { var editable = window._wrs_int_currentPlugin.get('host').editor.getDOMNode(); - wrs_updateFormula(editable, window, mathml, null, editMode); + wrs_updateFormula(editable, window, mathml, null, editMode, _wrs_int_currentPlugin._lang); window._wrs_int_currentPlugin.markUpdated(); window._wrs_int_currentPlugin._updateEditorImgHandlers(); }; diff --git a/html/moodle2/local/defaults.php b/html/moodle2/local/defaults.php index 0e970c96c0..7992bd63d3 100644 --- a/html/moodle2/local/defaults.php +++ b/html/moodle2/local/defaults.php @@ -38,4 +38,8 @@ $defaults['backup']['import_general_duplicate_admin_allowed'] = 1; $defaults['core_competency']['enabled'] = 0; $defaults['core_competency']['pushcourseratingstouserplans'] = 1; -$defaults['assignsubmission_file']['maxfiles'] = 10; \ No newline at end of file +$defaults['assignsubmission_file']['maxfiles'] = 10; +$defaults['mod_hvp']['enable_save_content_state'] = 1; +$defaults['mod_hvp']['export'] = 4; +$defaults['mod_hvp']['copyright'] = 0; +$defaults['mod_hvp']['icon'] = 0; diff --git a/html/moodle2/local/wsvicensvives/README.md b/html/moodle2/local/wsvicensvives/README.md new file mode 100755 index 0000000000..3d96c24af5 --- /dev/null +++ b/html/moodle2/local/wsvicensvives/README.md @@ -0,0 +1,10 @@ +Web service Vicens Vives +======================== + +Plugin local que implementa un web service para modificar las calificaciones de +las actividades LTI. + +El bloque de cursos Vicens Vives permite la configuración automática del web +service. + +Versiones de Moodle: 2.3, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0 y 3.1 diff --git a/html/moodle2/local/wsvicensvives/db/services.php b/html/moodle2/local/wsvicensvives/db/services.php new file mode 100644 index 0000000000..b380bd75c7 --- /dev/null +++ b/html/moodle2/local/wsvicensvives/db/services.php @@ -0,0 +1,35 @@ +. + +// We defined the web service functions to install. +$functions = array( + 'local_wsvicensvives_get_lti_grade' => array( + 'classname' => 'local_wsvicensvives_external', + 'methodname' => 'get_lti_grade', + 'classpath' => 'local/wsvicensvives/externallib.php', + 'description' => 'Get LTI grade in a course for one user', + 'type' => 'read', + ) +); + +// We define the services to install as pre-build services. A pre-build service is not editable by administrator. +$services = array( + 'Vicens Vives Services' => array( + 'functions' => array('local_wsvicensvives_get_lti_grade'), + 'restrictedusers' => 0, + 'enabled' => 1, + ) +); diff --git a/html/moodle2/local/wsvicensvives/externallib.php b/html/moodle2/local/wsvicensvives/externallib.php new file mode 100644 index 0000000000..826f1908b6 --- /dev/null +++ b/html/moodle2/local/wsvicensvives/externallib.php @@ -0,0 +1,167 @@ +. + +class local_wsvicensvives_external extends external_api { + + /** + * Returns description of grades parameters + * @return get_lti_grade_parameters + */ + public static function get_lti_grade_parameters() { + return new external_function_parameters( + array( + 'courseid' => new external_value(PARAM_INT, 'Course ID'), + 'userid' => new external_value(PARAM_INT, 'User ID'), + 'ltiidnumber' => new external_value(PARAM_TEXT, 'LTI ID'), + 'grade' => new external_value(PARAM_FLOAT, 'Grade'), + ) + ); + } + + /** + * return grades data + * @param integer $courseid identificador del curso + * @param integer $userid identificador del usuario + * @param string $ltiidnumber identificador del LTI + * @return object nota del LTI del usuario + */ + public static function get_lti_grade($courseid, $userid, $ltiidnumber, $grade) { + global $DB, $USER, $CFG; + + // Parameter validation. + // REQUIRED. + $params = self::validate_parameters(self::get_lti_grade_parameters(), + array( + 'courseid' => $courseid, + 'userid' => $userid, + 'ltiidnumber' => $ltiidnumber, + 'grade' => $grade, + ) + ); + if (!$course = $DB->get_record('course', array('id' => $courseid))) { + throw new moodle_exception('notexistcourse'); + } + /* Para 2.6. + if (!$course = get_course($courseid)) { + throw new moodle_exception('notexistcourse'); + } + */ + $user = new stdClass(); + if (!$user = $DB->get_record('user', array('id' => $userid))) { + throw new moodle_exception('notexistuser'); + } + + /* Para 2.6. + if (!$user = core_user::get_user($userid, 'id', MUST_EXIST)) { + throw new moodle_exception('notexistuser'); + } + */ + + // Context validation. + $context = context_course::instance($course->id); + + // Capability checking. + if (!has_capability('moodle/grade:edit', $context)) { + throw new moodle_exception('nopermissions', '', '', get_string('grade:edit', 'role')); + } + + $sql = "SELECT DISTINCT e.courseid + FROM {enrol} e + ,{user_enrolments} ue + ,{course} c + WHERE c.id = ? + AND ue.enrolid = e.id + AND ue.userid = ? + AND e.courseid = c.id"; + if (!$exist = $DB->get_records_sql($sql, array($course->id, $user->id))) { + throw new moodle_exception('usernotenroled'); + } + + // Nota en la base de datos... + // Obtener. + $ltisql = "SELECT l.*, cm.idnumber ". + "FROM {lti} l inner join {course_modules} cm ON cm.instance = l.id AND cm.module = ". + "(SELECT id FROM {modules} where name = 'lti') ". + "WHERE cm.course = ? and cm.idnumber = ?"; + if (!$ltiinstance = $DB->get_record_sql($ltisql, array($courseid, $ltiidnumber))) { + throw new moodle_exception('ltinotexist'); + } + + $gradesql = "SELECT gg.* ". + "FROM {grade_grades} gg INNER JOIN {grade_items} gi on gg.itemid = gi.id ". + "WHERE gi.iteminstance = ? AND gg.userid = ?"; + $create = 0; + if (!$gradeobj = $DB->get_record_sql($gradesql, array($ltiinstance->id, $userid))) { + // Buscamos el ITEM. + if (!$gradeitem = $DB->get_record('grade_items', array('iteminstance' => $ltiinstance->id))) { + // Crear el item para evaluaciones en el gradebook, partiendo del global del curso. + $gradeitem = $DB->get_record('grade_items', array('courseid' => $courseid, 'itemtype' => 'course')); + unset($gradeitem->id); + $gradeitem->categoryid = $gradeitem->iteminstance; + $gradeitem->itemname = $ltiinstance->name; + $gradeitem->itemtype = 'mod'; + $gradeitem->itemmodule = 'lti'; + $gradeitem->iteminstance = $ltiinstance->id; + $gradeitem->itemnumber = 0; + $gradeitem->idnumber = $ltiinstance->idnumber; + $gradeitem->sortorder = $gradeitem->sortorder + 1; + $gradeitem->timecreated = time(); + $gradeitem->timemodified = time(); + $gradeitem->id = $DB->insert_record('grade_items', $gradeitem); + } + $create = 1; + // Crear Grade a partir del Item. + $gradeobj = new stdClass(); + $gradeobj->itemid = $gradeitem->id; + $gradeobj->userid = $userid; + $gradeobj->rawgrade = ''; + $gradeobj->rawgrademax = $gradeitem->grademax; + $gradeobj->rawgrademin = $gradeitem->grademin; + $gradeobj->rawscaleid = $gradeitem->scaleid; + $gradeobj->usermodified = $USER->id; + $gradeobj->hidden = 0; + $gradeobj->locked = 0; + $gradeobj->locktime = 0; + $gradeobj->exported = 0; + $gradeobj->excluded = 0; + $gradeobj->feedback = ''; + $gradeobj->feedbackformat = 0; + $gradeobj->information = ''; + $gradeobj->informationformat = ''; + $gradeobj->timecreated = time(); + } + $gradeobj->finalgrade = $grade; + $gradeobj->overridden = time(); + $gradeobj->timemodified = time(); + + if ($create) { + if ($gradeobj->id = $DB->insert_record('grade_grades', $gradeobj)) { + return true; + } + return false; + } + return $DB->update_record('grade_grades', $gradeobj); + } + + /** + * Returns description of grades result value + * @return grades description + */ + + public static function get_lti_grade_returns() { + return new external_value(PARAM_BOOL, 'status'); + } +} diff --git a/html/moodle2/local/wsvicensvives/lang/en/local_wsvicensvives.php b/html/moodle2/local/wsvicensvives/lang/en/local_wsvicensvives.php new file mode 100644 index 0000000000..0aa8e78ac3 --- /dev/null +++ b/html/moodle2/local/wsvicensvives/lang/en/local_wsvicensvives.php @@ -0,0 +1,17 @@ +. + +$string['pluginname'] = 'Web service Vicens Vives'; diff --git a/html/moodle2/local/wsvicensvives/version.php b/html/moodle2/local/wsvicensvives/version.php new file mode 100644 index 0000000000..7232edc2a0 --- /dev/null +++ b/html/moodle2/local/wsvicensvives/version.php @@ -0,0 +1,19 @@ +. + +$plugin->version = 2016070700; +$plugin->requires = 2012062500; +$plugin->component = 'local_wsvicensvives'; diff --git a/html/moodle2/mod/hotpot/attempt/hp/6/jmatch/renderer.php b/html/moodle2/mod/hotpot/attempt/hp/6/jmatch/renderer.php index 3dff69072a..da5d7cc859 100644 --- a/html/moodle2/mod/hotpot/attempt/hp/6/jmatch/renderer.php +++ b/html/moodle2/mod/hotpot/attempt/hp/6/jmatch/renderer.php @@ -362,9 +362,7 @@ function fix_title_rottmeier_JMemori() { if (preg_match($search, $this->bodycontent, $matches)) { $title = $this->get_title(); if ($this->hotpot->can_manage()) { - $url = new moodle_url('/course/modedit.php', array('update' => $this->hotpot->cm->id, 'return' => 1, 'sesskey' => sesskey())); - $img = html_writer::empty_tag('img', array('src' => $this->pix_url('t/edit'))); - $title .= html_writer::link($url, $img); + $title .= $this->modedit_icon($this->hotpot); } $replace = $matches[1].$title.$matches[3]; $this->bodycontent = str_replace($matches[0], $replace, $this->bodycontent); diff --git a/html/moodle2/mod/hotpot/attempt/hp/6/jmix/xml/v6/plus/deluxe/class.php b/html/moodle2/mod/hotpot/attempt/hp/6/jmix/xml/v6/plus/deluxe/class.php deleted file mode 100644 index 53273182c0..0000000000 --- a/html/moodle2/mod/hotpot/attempt/hp/6/jmix/xml/v6/plus/deluxe/class.php +++ /dev/null @@ -1,104 +0,0 @@ -. - -/** - * mod/hotpot/attempt/hp/6/jmix/xml/v6/plus/deluxe/class.php - * - * @package mod-hotpot - * @copyright 2010 Gordon Bateson - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -/** - * hotpot_output_hp_6_jmix_xml_v6_plus_deluxe - * - * @copyright 2010 Gordon Bateson - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @since Moodle 2.0 - */ -class hotpot_output_hp_6_jmix_xml_v6_plus_deluxe extends hotpot_output_hp_6_jmix_xml_v6_plus { -// constructor function - - /** - * hotpot_output_hp_6_jmix_xml_v6_plus_deluxe - * - * @param xxx $quiz (passed by reference) - */ - function hotpot_output_hp_6_jmix_xml_v6_plus_deluxe(&$quiz) { - parent::hotpot_output_hp_6_jmix_xml_v6_plus($quiz); - - // prepend templates for this output format - array_unshift($this->templatesfolders, 'mod/hotpot/output/hp/6/jmix/xml/v6/plus/deluxe/templates'); - } - - /** - * fix_bodycontent_DragAndDrop - */ - function fix_bodycontent_DragAndDrop() { - // user-string-1: prefix (optional) - // user-string-2: suffix (optional) - $prefix = trim($this->expand_UserDefined1()); - $suffix = trim($this->expand_UserDefined2()); - parent::fix_bodycontent_DragAndDrop($prefix, $suffix); - } - - /** - * fix_js_StartUp_DragAndDrop_DragArea - * - * @param xxx $substr (passed by reference) - */ - function fix_js_StartUp_DragAndDrop_DragArea(&$substr) { - // fix LeftCol (=left side of drag area) - $search = '/LeftColPos = [^;]+;/'; - $replace = "LeftColPos = getOffset(document.getElementById('CheckButtonDiv'),'Left') + 20;"; - $substr = preg_replace($search, $replace, $substr, 1); - - // fix DivWidth (=width of drag area) - $search = '/DivWidth = [^;]+;/'; - $replace = "DivWidth = getOffset(document.getElementById('CheckButtonDiv'),'Width') - 40;"; - $substr = preg_replace($search, $replace, $substr, 1); - - // fix DragTop (=top side of drag area) - $search = '/DragTop = [^;]+;/'; - $replace = "DragTop = getOffset(document.getElementById('CheckButtonDiv'),'Bottom') + 10;"; - $substr = preg_replace($search, $replace, $substr, 1); - } - - /** - * expand_SegmentArray - * - * @return xxx - */ - function expand_SegmentArray() { - // user-string-3: (optional) - // distractor words: words, delimited, by, commas, like, this - // phrases: (one phrase) [another phrase] {yet another phrase} - if ($value = $this->expand_UserDefined3()) { - if (preg_match('/^(\()|(\[)|(\{).*(?(1)\)|(?(2)\]|(?(3)\})))$/', $value)) { - $search = '/\s*\\'.substr($value, -1).'\s*\\'.substr($value, 0, 1).'\s*/'; - $more_values = preg_split($search, substr($value, 1, -1)); - } else { - $more_values = preg_split('/\s*,\s*/', trim($value)); - } - } else { - $more_values = array(); - } - return parent::expand_SegmentArray($more_values); - } -} diff --git a/html/moodle2/mod/hotpot/attempt/renderer.php b/html/moodle2/mod/hotpot/attempt/renderer.php index 7129c638c7..903401fda9 100644 --- a/html/moodle2/mod/hotpot/attempt/renderer.php +++ b/html/moodle2/mod/hotpot/attempt/renderer.php @@ -512,11 +512,11 @@ function print_frameset() { if (empty($CFG->hotpot_lockframe)) { $lock_frameset = ''; - $lock_top = ''; + $lock_top = ''; $lock_main = ''; } else { $lock_frameset = ' border="0" frameborder="0" framespacing="0"'; - $lock_top = ' noresize="noresize" scrolling="no"'; + $lock_top = ' noresize="noresize" scrolling="no"'; $lock_main = ' noresize="noresize"'; } @@ -534,7 +534,7 @@ function print_frameset() { echo ''.$title.''."\n"; echo ''."\n"; echo ''."\n"; - echo ''."\n"; + echo ''."\n"; echo ''."\n"; echo ''."\n"; echo '<p>'.get_string('framesetinfo').'</p>'."\n"; diff --git a/html/moodle2/mod/hotpot/lib.php b/html/moodle2/mod/hotpot/lib.php index 48ce5fc8af..914cc09ff1 100644 --- a/html/moodle2/mod/hotpot/lib.php +++ b/html/moodle2/mod/hotpot/lib.php @@ -816,8 +816,13 @@ function hotpot_print_recent_mod_activity($activity, $courseid, $detail, $modnam $row->cells[] = $cell; // activity icon and link to activity - $src = $OUTPUT->pix_url('icon', $activity->type); - $img = html_writer::tag('img', array('src'=>$src, 'class'=>'icon', $alt=>$activity->name)); + if (method_exists($OUTPUT, 'image_icon')) { + // Moodle >= 3.3 + $img = $OUTPUT->image_icon('icon', $modnames[$activity->type], $activity->type); + } else { + // Moodle <= 3.2 + $img = $OUTPUT->pix_icon('icon', $modnames[$activity->type], $activity->type); + } // link to activity $href = new moodle_url('/mod/hotpot/view.php', array('id' => $activity->cmid)); diff --git a/html/moodle2/mod/hotpot/renderer.php b/html/moodle2/mod/hotpot/renderer.php index 8846d56f2b..02af1fbf2b 100644 --- a/html/moodle2/mod/hotpot/renderer.php +++ b/html/moodle2/mod/hotpot/renderer.php @@ -257,13 +257,16 @@ public function heading($hotpot) { /** * modedit_icon * - * @global object $hotpot - * @return string + * @param $hotpot + * @return xxx + * @todo Finish documenting this function */ public function modedit_icon($hotpot) { - $params = array('update' => $hotpot->cm->id, 'return' => 1, 'sesskey' => sesskey()); + $params = array('update' => $hotpot->cm->id, + 'return' => 1, + 'sesskey' => sesskey()); $url = new moodle_url('/course/modedit.php', $params); - $img = html_writer::empty_tag('img', array('src' => $this->pix_url('t/edit'))); + $img = $this->pix_icon('t/edit', get_string('edit')); return ' '.html_writer::link($url, $img); } diff --git a/html/moodle2/mod/hotpot/version.php b/html/moodle2/mod/hotpot/version.php index dc8cee1021..1969c32c2a 100644 --- a/html/moodle2/mod/hotpot/version.php +++ b/html/moodle2/mod/hotpot/version.php @@ -41,8 +41,8 @@ $plugin->component = 'mod_hotpot'; $plugin->maturity = MATURITY_STABLE; // ALPHA=50, BETA=100, RC=150, STABLE=200 $plugin->requires = 2010112400; // Moodle 2.0 -$plugin->release = '2017-03-22 (02)'; -$plugin->version = 2017032202; +$plugin->release = '2017-04-17 (06)'; +$plugin->version = 2017041706; if (isset($CFG->yui3version) && version_compare($CFG->yui3version, '3.15.0') < 0) { $module = clone($plugin); // Moodle <= 2.6 diff --git a/html/moodle2/mod/hotpot/x.txt b/html/moodle2/mod/hotpot/x.txt deleted file mode 100644 index 3389becc6f..0000000000 --- a/html/moodle2/mod/hotpot/x.txt +++ /dev/null @@ -1,2396 +0,0 @@ -diff --git a/attempt/hp/6/jcloze/renderer.php b/attempt/hp/6/jcloze/renderer.php -index a45ee8e..3bb60a7 100644 ---- a/attempt/hp/6/jcloze/renderer.php -+++ b/attempt/hp/6/jcloze/renderer.php -@@ -24,17 +24,20 @@ - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -+/** Prevent direct access to this script */ - defined('MOODLE_INTERNAL') || die(); - --// get parent class -+/** Include required files */ - require_once($CFG->dirroot.'/mod/hotpot/attempt/hp/6/renderer.php'); - - /** - * mod_hotpot_attempt_hp_6_jcloze_renderer - * -- * @copyright 2010 Gordon Bateson -- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later -- * @since Moodle 2.0 -+ * @copyright 2010 Gordon Bateson (gordon.bateson@gmail.com) -+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later -+ * @since Moodle 2.0 -+ * @package mod -+ * @subpackage hotpot - */ - class mod_hotpot_attempt_hp_6_jcloze_renderer extends mod_hotpot_attempt_hp_6_renderer { - public $icon = 'pix/f/jcl.gif'; -@@ -44,7 +47,7 @@ class mod_hotpot_attempt_hp_6_jcloze_renderer extends mod_hotpot_attempt_hp_6_re - public $templatestrings = 'PreloadImageList'; - - // Glossary autolinking settings -- public $headcontent_strings = 'Feedback|Correct|Incorrect|GiveHint|YourScoreIs|Guesses|(?:I\[\d+\]\[1\]\[\d+\]\[2\])'; -+ public $headcontent_strings = 'Feedback|Correct|Incorrect|GiveHint|YourScoreIs|Guesses|(?:I\[\d+\]\[[12]\])'; - public $headcontent_arrays = ''; - - /** -@@ -135,7 +138,6 @@ class mod_hotpot_attempt_hp_6_jcloze_renderer extends mod_hotpot_attempt_hp_6_re - // ClueNum : JCross (has its own fix function) - // so it is safest to refer to it using "ShowClue.arguments[0]" - -- - // intercept Clues - if ($pos = strpos($substr, '{')) { - $insert = "\n" -diff --git a/attempt/hp/6/jcloze/xml/findit/b/templates/jcloze6.js_ b/attempt/hp/6/jcloze/xml/findit/b/templates/jcloze6.js_ -index 8650368..7bdf4a2 100644 ---- a/attempt/hp/6/jcloze/xml/findit/b/templates/jcloze6.js_ -+++ b/attempt/hp/6/jcloze/xml/findit/b/templates/jcloze6.js_ -@@ -140,7 +140,7 @@ function Markup_Text(Node){ - case 'span' : - if (Node.childNodes[x].attributes.length > 0){ - if ((Node.childNodes[x].getAttribute('id').substr(0, 7) != 'GapSpan')){ -- Node.replaceNode(Markup_Text(Node.childNodes[x]), Node.childNodes[x]); -+ Node.replaceChild(Markup_Text(Node.childNodes[x]), Node.childNodes[x]); - } - } - break; -diff --git a/attempt/hp/6/jcross/renderer.php b/attempt/hp/6/jcross/renderer.php -index e987989..b275827 100644 ---- a/attempt/hp/6/jcross/renderer.php -+++ b/attempt/hp/6/jcross/renderer.php -@@ -19,22 +19,27 @@ - * Render an attempt at a HotPot quiz - * Output format: hp_6_jcross - * -- * @package mod-hotpot -- * @copyright 2010 Gordon Bateson <gordon.bateson@gmail.com> -- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later -+ * @package mod -+ * @subpackage hotpot -+ * @copyright 2010 Gordon Bateson (gordon.bateson@gmail.com) -+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later -+ * @since Moodle 2.0 - */ - -+/** Prevent direct access to this script */ - defined('MOODLE_INTERNAL') || die(); - --// get parent class -+/** Include required files */ - require_once($CFG->dirroot.'/mod/hotpot/attempt/hp/6/renderer.php'); - - /** - * mod_hotpot_attempt_hp_6_jcross_renderer - * -- * @copyright 2010 Gordon Bateson -- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later -- * @since Moodle 2.0 -+ * @copyright 2010 Gordon Bateson (gordon.bateson@gmail.com) -+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later -+ * @since Moodle 2.0 -+ * @package mod -+ * @subpackage hotpot - */ - class mod_hotpot_attempt_hp_6_jcross_renderer extends mod_hotpot_attempt_hp_6_renderer { - public $icon = 'pix/f/jcw.gif'; -diff --git a/attempt/hp/6/jmatch/jmatch.js b/attempt/hp/6/jmatch/jmatch.js -index d37b8b6..c5a1a6e 100644 ---- a/attempt/hp/6/jmatch/jmatch.js -+++ b/attempt/hp/6/jmatch/jmatch.js -@@ -121,29 +121,29 @@ function JMatch(sendallclicks, ajax) { - } - } else if (window.Status) { - // v6 (=plain old select elements) -- var obj = document.getElementById(Status[q][2]); -- if (obj) { // not correct yet -- if (getCorrect) { -- var k = GetKeyFromSelect(obj); // HP function -- var i_max = obj.options.length; -- for (var i=0; i<i_max; i++) { -- if (obj.options[i].value==k) { -+ var obj = document.getElementById(Status[q][2]); -+ if (obj) { // not correct yet -+ if (getCorrect) { -+ var k = GetKeyFromSelect(obj); // HP function -+ var i_max = obj.options.length; -+ for (var i=0; i<i_max; i++) { -+ if (obj.options[i].value==k) { - break; - } -- } -- if (i>=i_max) { -+ } -+ if (i>=i_max) { - i = 0; // shouldn't happen - } -- } else { -- // get current guess, if any -- var i = obj.selectedIndex; -- } -- if (i) { -+ } else { -+ // get current guess, if any -+ var i = obj.selectedIndex; -+ } -+ if (i) { - rhs = obj.options[i].innerHTML; - } -- } else { // correct -+ } else { // correct - rhs = GetTextFromNodeN(document.getElementById('Questions'), 'RightItem', q); -- } -+ } - } - return rhs; - } -diff --git a/attempt/hp/6/jquiz/renderer.php b/attempt/hp/6/jquiz/renderer.php -index 9749014..9297d43 100644 ---- a/attempt/hp/6/jquiz/renderer.php -+++ b/attempt/hp/6/jquiz/renderer.php -@@ -86,8 +86,11 @@ class mod_hotpot_attempt_hp_6_jquiz_renderer extends mod_hotpot_attempt_hp_6_ren - function fix_headcontent() { - if ($pos = strrpos($this->headcontent, '</style>')) { - $insert = '' -- .'ol.QuizQuestions{'."\n" -- .' margin-bottom:0px;'."\n" -+ .'#'.$this->themecontainer.' ol.QuizQuestions{'."\n" -+ .' margin-bottom: 0px;'."\n" -+ .'}'."\n" -+ .'#'.$this->themecontainer.' li.QuizQuestion{'."\n" -+ .' overflow: auto;'."\n" - .'}'."\n" - ; - $this->headcontent = substr_replace($this->headcontent, $insert, $pos, 0); -diff --git a/attempt/hp/6/renderer.php b/attempt/hp/6/renderer.php -index 88fcf3c..f9dad27 100644 ---- a/attempt/hp/6/renderer.php -+++ b/attempt/hp/6/renderer.php -@@ -19,22 +19,27 @@ - * Render an attempt at a HotPot quiz - * Output format: hp_6 - * -- * @package mod-hotpot -- * @copyright 2010 Gordon Bateson <gordon.bateson@gmail.com> -- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later -+ * @package mod -+ * @subpackage hotpot -+ * @copyright 2010 Gordon Bateson (gordon.bateson@gmail.com) -+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later -+ * @since Moodle 2.0 - */ - -+/** Prevent direct access to this script */ - defined('MOODLE_INTERNAL') || die(); - --// get parent class -+/** Include required files */ - require_once($CFG->dirroot.'/mod/hotpot/attempt/hp/renderer.php'); - - /** - * mod_hotpot_attempt_hp_6_renderer - * -- * @copyright 2010 Gordon Bateson -- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later -- * @since Moodle 2.0 -+ * @copyright 2010 Gordon Bateson (gordon.bateson@gmail.com) -+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later -+ * @since Moodle 2.0 -+ * @package mod -+ * @subpackage hotpot - */ - class mod_hotpot_attempt_hp_6_renderer extends mod_hotpot_attempt_hp_renderer { - -@@ -361,11 +366,11 @@ class mod_hotpot_attempt_hp_6_renderer extends mod_hotpot_attempt_hp_renderer { - ." switch (type){\n" - ." case 'Width':\n" - ." case 'Height':\n" -- ." return eval('(obj.offset'+type+'||0)');\n" -+ ." return (obj['offset'+type]||0);\n" - ."\n" - ." case 'Top':\n" - ." case 'Left':\n" -- ." return eval('(obj.offset'+type+'||0) + getOffset(obj.offsetParent, type)');\n" -+ ." return (obj['offset'+type]||0) + getOffset(obj.offsetParent, type);\n" - ."\n" - ." case 'Right':\n" - ." return getOffset(obj, 'Left') + getOffset(obj, 'Width');\n" -@@ -962,6 +967,7 @@ class mod_hotpot_attempt_hp_6_renderer extends mod_hotpot_attempt_hp_renderer { - /** - * fix_js_HideFeedback - * -+ * @uses $CFG - * @param xxx $str (passed by reference) - * @param xxx $start - * @param xxx $length -@@ -1713,9 +1719,8 @@ class mod_hotpot_attempt_hp_6_renderer extends mod_hotpot_attempt_hp_renderer { - $search = '/\\\\u([0-9a-f]{4})/i'; - $str = $this->filter_text_to_utf8($str, $search); - -- // convert html entities -- $search = '/&#x([0-9a-f]+);/i'; -- $str = $this->filter_text_to_utf8($str, $search); -+ // convert dec, hex and named entities to unicode chars -+ $str = hotpot_textlib('entities_to_utf8', $str, true); - - // fix relative urls - $str = $this->fix_relativeurls($str); -diff --git a/attempt/hp/feedback.js b/attempt/hp/feedback.js -index b49b460..aa4b5ae 100644 ---- a/attempt/hp/feedback.js -+++ b/attempt/hp/feedback.js -@@ -38,78 +38,78 @@ - * hpFeedback - */ - function hpFeedback() { -- if (FEEDBACK[0]) { -- var url = ''; -- var html = ''; -- if (FEEDBACK[1] && FEEDBACK[2]) { // formmail -- html += '<html><body>' -- + '<form action="' + FEEDBACK[0] + '" method="POST">' -- + '<table border="0">' -- + '<tr><th valign="top" align="right">' + FEEDBACK[7] + ':</th><td>' + document.title + '</td></tr>' -- + '<tr><th valign="top" align="right">' + FEEDBACK[8] + ': </th><td>' -- ; -- if (typeof(FEEDBACK[1])=='string') { -- html += FEEDBACK[1] + hpHiddenField('recipient', FEEDBACK[1], ',', true); -- } else if (typeof(FEEDBACK[1])=='object') { -- var i_max = FEEDBACK[1].length; -- if (i_max==1) { // one teacher -- html += FEEDBACK[1][0][0] + hpHiddenField('recipient', FEEDBACK[1][0][0]+' &lt;'+FEEDBACK[1][0][1]+'&gt;', ',', true); -- } else if (i_max>1) { // several teachers -- html += '<select name="recipient">'; -- for (var i=0; i<i_max; i++) { -- html += '<option value="'+FEEDBACK[1][i][1]+'">' + FEEDBACK[1][i][0] + '</option>'; -- } -- html += '</select>'; -- } -- } -- html += '</td></tr>' -- + '<tr><th valign="top" align="right">' + FEEDBACK[9] + ':</th>' -- + '<td><TEXTAREA name="message" rows="10" cols="40"></TEXTAREA></td></tr>' -- + '<tr><td>&nbsp;</td><td><input type="submit" value="' + FEEDBACK[6] + '">' -- + hpHiddenField('realname', FEEDBACK[2], ',', true) -- + hpHiddenField('email', FEEDBACK[3], ',', true) -- + hpHiddenField('subject', document.title, ',', true) -- + hpHiddenField('title', document.title, ',', true) -- + hpHiddenField('return_link_title', FEEDBACK[10], ',', true) -- + hpHiddenField('return_link_url', 'javascript:self.close()', ',', true) -- + '</td></tr></table></form></body></html>' -- ; -- } else if (FEEDBACK[1]) { // url only -- if (typeof(FEEDBACK[1])=='object') { -- var i_max = FEEDBACK[1].length; -- if (i_max>1) { // several teachers -- html += '<html><body>' -- + '<form action="' + FEEDBACK[0] + '" method="POST" onsubmit="this.action+=this.recipient.options[this.recipient.selectedIndex].value">' -- + '<table border="0">' -- + '<tr><th valign="top" align="right">' + FEEDBACK[7] + ':</th><td>' + document.title + '</td></tr>' -- + '<tr><th valign="top" align="right">' + FEEDBACK[8] + ': </th><td>' -- ; -- html += '<select name="recipient">'; -- for (var i=0; i<i_max; i++) { -- html += '<option value="'+FEEDBACK[1][i][1]+'">' + FEEDBACK[1][i][0] + '</option>'; -- } -- html += '</select>'; -- html += '</td></tr>' -- + '<tr><td>&nbsp;</td><td><input type="submit" value="' + FEEDBACK[6] + '">' -- + '</td></tr></table></form></body></html>' -- ; -- } else if (i_max==1) { // one teacher -- url = FEEDBACK[0] + FEEDBACK[1][0][1]; -- } -- } else if (typeof(FEEDBACK[1])=='string') { -- url = FEEDBACK[0] + FEEDBACK[1]; -- } -- } else { -- url = FEEDBACK[0]; -- } -- if (url || html) { -- var w = openWindow(url, 'feedback', FEEDBACK[4], FEEDBACK[5], 'RESIZABLE,SCROLLBARS', html); -- if (! w) { -- // unable to open popup window -+ if (FEEDBACK[0]) { -+ var url = ''; -+ var html = ''; -+ if (FEEDBACK[1] && FEEDBACK[2]) { // formmail -+ html += '<html><body>' -+ + '<form action="' + FEEDBACK[0] + '" method="POST">' -+ + '<table border="0">' -+ + '<tr><th valign="top" align="right">' + FEEDBACK[7] + ':</th><td>' + document.title + '</td></tr>' -+ + '<tr><th valign="top" align="right">' + FEEDBACK[8] + ': </th><td>' -+ ; -+ if (typeof(FEEDBACK[1])=='string') { -+ html += FEEDBACK[1] + hpHiddenField('recipient', FEEDBACK[1], ',', true); -+ } else if (typeof(FEEDBACK[1])=='object') { -+ var i_max = FEEDBACK[1].length; -+ if (i_max==1) { // one teacher -+ html += FEEDBACK[1][0][0] + hpHiddenField('recipient', FEEDBACK[1][0][0]+' &lt;'+FEEDBACK[1][0][1]+'&gt;', ',', true); -+ } else if (i_max>1) { // several teachers -+ html += '<select name="recipient">'; -+ for (var i=0; i<i_max; i++) { -+ html += '<option value="'+FEEDBACK[1][i][1]+'">' + FEEDBACK[1][i][0] + '</option>'; -+ } -+ html += '</select>'; -+ } -+ } -+ html += '</td></tr>' -+ + '<tr><th valign="top" align="right">' + FEEDBACK[9] + ':</th>' -+ + '<td><TEXTAREA name="message" rows="10" cols="40"></TEXTAREA></td></tr>' -+ + '<tr><td>&nbsp;</td><td><input type="submit" value="' + FEEDBACK[6] + '">' -+ + hpHiddenField('realname', FEEDBACK[2], ',', true) -+ + hpHiddenField('email', FEEDBACK[3], ',', true) -+ + hpHiddenField('subject', document.title, ',', true) -+ + hpHiddenField('title', document.title, ',', true) -+ + hpHiddenField('return_link_title', FEEDBACK[10], ',', true) -+ + hpHiddenField('return_link_url', 'javascript:self.close()', ',', true) -+ + '</td></tr></table></form></body></html>' -+ ; -+ } else if (FEEDBACK[1]) { // url only -+ if (typeof(FEEDBACK[1])=='object') { -+ var i_max = FEEDBACK[1].length; -+ if (i_max>1) { // several teachers -+ html += '<html><body>' -+ + '<form action="' + FEEDBACK[0] + '" method="POST" onsubmit="this.action+=this.recipient.options[this.recipient.selectedIndex].value">' -+ + '<table border="0">' -+ + '<tr><th valign="top" align="right">' + FEEDBACK[7] + ':</th><td>' + document.title + '</td></tr>' -+ + '<tr><th valign="top" align="right">' + FEEDBACK[8] + ': </th><td>' -+ ; -+ html += '<select name="recipient">'; -+ for (var i=0; i<i_max; i++) { -+ html += '<option value="'+FEEDBACK[1][i][1]+'">' + FEEDBACK[1][i][0] + '</option>'; -+ } -+ html += '</select>'; -+ html += '</td></tr>' -+ + '<tr><td>&nbsp;</td><td><input type="submit" value="' + FEEDBACK[6] + '">' -+ + '</td></tr></table></form></body></html>' -+ ; -+ } else if (i_max==1) { // one teacher -+ url = FEEDBACK[0] + FEEDBACK[1][0][1]; -+ } -+ } else if (typeof(FEEDBACK[1])=='string') { -+ url = FEEDBACK[0] + FEEDBACK[1]; -+ } -+ } else { -+ url = FEEDBACK[0]; -+ } -+ if (url || html) { -+ var w = openWindow(url, 'feedback', FEEDBACK[4], FEEDBACK[5], 'RESIZABLE,SCROLLBARS', html); -+ if (! w) { -+ // unable to open popup window - alert('Please enable pop-up windows on your browser'); -- } -- } -- } -+ } -+ } -+ } - } - - /** -@@ -137,57 +137,57 @@ function hpHiddenField(name, value, comma, forceHTML) { - * @return xxx - */ - function openWindow(url, name, width, height, attributes, html) { -- // set height, width and attributes -- if (window.screen && width && height) { -- var W = screen.availWidth; -- var H = screen.availHeight; -- width = Math.min(width, W); -- height = Math.min(height, H); -- attributes = '' -- + (attributes ? (attributes+',') : '') -- + 'WIDTH='+width+',HEIGHT='+height -- ; -- } -- // create global hpWindows object, if necessary -- if (! window.hpWindows) window.hpWindows = new Array(); -- // initialize window object -- var w = null; -- // has a window with this name been opened before? -- if (name && hpWindows[name]) { -- // http://www.webreference.com/js/tutorial1/exist.html -- if (hpWindows[name].open && ! hpWindows[name].closed) { -- w = hpWindows[name]; -- w.focus(); -- } else { -- hpWindows[name] = null; -- } -- } -- // check window is not already open -- if (w==null) { -- // workaround for "Access is denied" errors in IE when offline -- // based on an idea seen at http://www.devshed.com/Client_Side/JavaScript/Mini_FAQ -- var ie_offline = (document.all && location.protocol=='file:'); -- // try and open the new window -- w = window.open((ie_offline ? '' : url), name, attributes); -- // check window opened OK (user may have prevented popups) -- if (w) { -- // center the window -- if (window.screen && width && height) { -- w.moveTo((W-width)/2, (H-height)/2); -- } -- // add content, if required -- if (html) { -- with (w.document) { -- clear(); -- open(); -- write(html); -- close(); -- } -- } else if (url && ie_offline) { -- w.location = url; -- } -- if (name) hpWindows[name] = w; -- } -- } -- return w; -+ // set height, width and attributes -+ if (window.screen && width && height) { -+ var W = screen.availWidth; -+ var H = screen.availHeight; -+ width = Math.min(width, W); -+ height = Math.min(height, H); -+ attributes = '' -+ + (attributes ? (attributes+',') : '') -+ + 'WIDTH='+width+',HEIGHT='+height -+ ; -+ } -+ // create global hpWindows object, if necessary -+ if (! window.hpWindows) window.hpWindows = new Array(); -+ // initialize window object -+ var w = null; -+ // has a window with this name been opened before? -+ if (name && hpWindows[name]) { -+ // http://www.webreference.com/js/tutorial1/exist.html -+ if (hpWindows[name].open && ! hpWindows[name].closed) { -+ w = hpWindows[name]; -+ w.focus(); -+ } else { -+ hpWindows[name] = null; -+ } -+ } -+ // check window is not already open -+ if (w==null) { -+ // workaround for "Access is denied" errors in IE when offline -+ // based on an idea seen at http://www.devshed.com/Client_Side/JavaScript/Mini_FAQ -+ var ie_offline = (document.all && location.protocol=='file:'); -+ // try and open the new window -+ w = window.open((ie_offline ? '' : url), name, attributes); -+ // check window opened OK (user may have prevented popups) -+ if (w) { -+ // center the window -+ if (window.screen && width && height) { -+ w.moveTo((W-width)/2, (H-height)/2); -+ } -+ // add content, if required -+ if (html) { -+ with (w.document) { -+ clear(); -+ open(); -+ write(html); -+ close(); -+ } -+ } else if (url && ie_offline) { -+ w.location = url; -+ } -+ if (name) hpWindows[name] = w; -+ } -+ } -+ return w; - } -diff --git a/attempt/hp/hp.js b/attempt/hp/hp.js -index 65427f9..fcc284c 100644 ---- a/attempt/hp/hp.js -+++ b/attempt/hp/hp.js -@@ -425,19 +425,19 @@ function hpQuizAttempt() { - this.getFormElementValue = function (obj) { - var v = ''; // value - var t = obj.type; -- if (t=='text' || t=='textarea' || t=='password' || t=='hidden') { -- v = obj.value; -+ if (t=='text' || t=='textarea' || t=='password' || t=='hidden') { -+ v = obj.value; - } else if (t=='radio' || t=='checkbox') { -- if (obj.checked) { -+ if (obj.checked) { - v = obj.value; - } - } else if (t=='select-one' || t=='select-multiple') { -- var i_max = obj.options.length; -- for (var i=0; i<i_max; i++) { -- if (obj.options[i].selected) { -- v += (v=='' ? '' : ',') + obj.options[i].value; -- } -- } -+ var i_max = obj.options.length; -+ for (var i=0; i<i_max; i++) { -+ if (obj.options[i].selected) { -+ v += (v=='' ? '' : ',') + obj.options[i].value; -+ } -+ } - } else if (t=='button' || t=='reset' || t=='submit') { - // do nothing - } else { -@@ -750,11 +750,11 @@ function hpField(name, value) { - * @return function - */ - function HP_fix_function(fnc) { -- if (typeof(fnc)=='function') { -- return fnc; -- } else { -- return new Function('event', fnc); -- } -+ if (typeof(fnc)=='function') { -+ return fnc; -+ } else { -+ return new Function('event', fnc); -+ } - } - - /** -@@ -768,22 +768,15 @@ function HP_fix_event(evt, obj) { - var i = 0; - var evts = new Array(); - -- if ('onmousedown' in obj) { -- switch (evt) { -- case 'tap' : evts[i++] = 'click'; break; -- case 'touchstart' : evts[i++] = 'mousedown'; break; -- case 'touchmove' : evts[i++] = 'mousemove'; break; -- case 'touchend' : evts[i++] = 'mouseup'; break; -- } -- } -- -- if ('ontouchstart' in obj) { -- switch (evt) { -- case 'click' : evts[i++] = 'tap'; break; -- case 'mousedown' : evts[i++] = 'touchstart'; break; -- case 'mousemove' : evts[i++] = 'touchmove'; break; -- case 'mouseup' : evts[i++] = 'touchend'; break; -- } -+ switch (evt) { -+ case 'click' : if ('ontap' in obj) evts[i++] = 'tap'; break; -+ case 'mousedown' : if ('ontouchstart' in obj) evts[i++] = 'touchstart'; break; -+ case 'mousemove' : if ('ontouchmove' in obj) evts[i++] = 'touchmove'; break; -+ case 'mouseup' : if ('ontouchend' in obj) evts[i++] = 'touchend'; break; -+ case 'tap' : if ('onclick' in obj) evts[i++] = 'click'; break; -+ case 'touchend' : if ('onmouseup' in obj) evts[i++] = 'mouseup'; break; -+ case 'touchmove' : if ('onmousemove' in obj) evts[i++] = 'mousemove'; break; -+ case 'touchstart' : if ('onmousedown' in obj) evts[i++] = 'mousedown'; break; - } - - var onevent = 'on' + evt; -@@ -806,15 +799,15 @@ function HP_fix_event(evt, obj) { - function HP_add_listener(obj, evt, fnc, useCapture) { - - // convert fnc to Function, if necessary -- fnc = HP_fix_function(fnc); -+ fnc = HP_fix_function(fnc); - - // convert mouse <=> touch events -- var evts = HP_fix_event(evt, obj); -+ var evts = HP_fix_event(evt, obj); - - // add event handler(s) -- var i_max = evts.length; -- for (var i=0; i<i_max; i++) { -- evt = evts[i]; -+ var i_max = evts.length; -+ for (var i=0; i<i_max; i++) { -+ evt = evts[i]; - - // transfer object's old event handler (if any) - var onevent = 'on' + evt; -@@ -841,7 +834,7 @@ function HP_add_listener(obj, evt, fnc, useCapture) { - obj[onevent] = new Function('HP_handle_event(this, \"'+onevent+'\")'); - } - } -- } -+ } - } - - /** -@@ -856,15 +849,15 @@ function HP_add_listener(obj, evt, fnc, useCapture) { - function HP_remove_listener(obj, evt, fnc, useCapture) { - - // convert fnc to Function, if necessary -- fnc = HP_fix_function(fnc); -+ fnc = HP_fix_function(fnc); - - // convert mouse <=> touch events -- var evts = HP_fix_event(evt, obj); -+ var evts = HP_fix_event(evt, obj); - - // remove event handler(s) -- var i_max = evts.length; -- for (var i=0; i<i_max; i++) { -- evt = evts[i]; -+ var i_max = evts.length; -+ for (var i=0; i<i_max; i++) { -+ evt = evts[i]; - - var onevent = 'on' + evt; - if (obj.removeEventListener) { -@@ -879,7 +872,7 @@ function HP_remove_listener(obj, evt, fnc, useCapture) { - } - } - } -- } -+ } - } - - /** -@@ -890,12 +883,12 @@ function HP_remove_listener(obj, evt, fnc, useCapture) { - * @return void, but may execute event handler - */ - function HP_handle_event(obj, onevent) { -- if (obj.evts[onevent]) { -- var i_max = obj.evts[onevent].length -- for (var i=0; i<i_max; i++) { -- obj.evts[onevent][i](); -- } -- } -+ if (obj.evts[onevent]) { -+ var i_max = obj.evts[onevent].length -+ for (var i=0; i<i_max; i++) { -+ obj.evts[onevent][i](); -+ } -+ } - } - - /** -@@ -905,15 +898,15 @@ function HP_handle_event(obj, onevent) { - * @return may return false (older browsers) - */ - function HP_disable_event(evt) { -- if (evt==null) { -- evt = window.event; -- } -- if (evt.preventDefault) { -- evt.preventDefault(); -- } else { // IE <= 8 -- evt.returnValue = false; -- } -- return false; -+ if (evt==null) { -+ evt = window.event; -+ } -+ if (evt.preventDefault) { -+ evt.preventDefault(); -+ } else { // IE <= 8 -+ evt.returnValue = false; -+ } -+ return false; - } - - /////////////////////////////////////////// -diff --git a/attempt/html/renderer.php b/attempt/html/renderer.php -index 2817ac1..50367b4 100644 ---- a/attempt/html/renderer.php -+++ b/attempt/html/renderer.php -@@ -304,7 +304,7 @@ class mod_hotpot_attempt_html_renderer extends mod_hotpot_attempt_renderer { - // prepare form parameters and attributes - $params = array( - 'id' => $this->hotpot->create_attempt(), -- $this->scorefield => '0', 'detail' => '0', 'status' => '0', -+ $this->scorefield => '0', 'detail' => '0', 'status' => hotpot::STATUS_COMPLETED, - 'starttime' => '0', 'endtime' => '0', 'redirect' => '1', - ); - -diff --git a/db/install.xml b/db/install.xml -index e73ba01..12207d2 100644 ---- a/db/install.xml -+++ b/db/install.xml -@@ -52,7 +52,10 @@ - <FIELD NAME="clickreporting" TYPE="int" LENGTH="4" NOTNULL="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="gradeweighting" NEXT="discarddetails"/> - <FIELD NAME="discarddetails" TYPE="int" LENGTH="2" NOTNULL="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="clickreporting" NEXT="timecreated"/> - <FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="discarddetails" NEXT="timemodified"/> -- <FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="timecreated"/> -+ <FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="timecreated" NEXT="completionmingrade"/> -+ <FIELD NAME="completionmingrade" TYPE="number" LENGTH="6" NOTNULL="true" DEFAULT="0.00" SEQUENCE="false" DECIMALS="2" PREVIOUS="timemodified" NEXT="completionpass"/> -+ <FIELD NAME="completionpass" TYPE="int" LENGTH="1" NOTNULL="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="completionmingrade" NEXT="completioncompleted"/> -+ <FIELD NAME="completioncompleted" TYPE="int" LENGTH="1" NOTNULL="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="completionpass"/> - </FIELDS> - <KEYS> - <KEY NAME="primary" TYPE="primary" FIELDS="id"/> -diff --git a/db/upgrade.php b/db/upgrade.php -index 3c4c3f8..9955d20 100644 ---- a/db/upgrade.php -+++ b/db/upgrade.php -@@ -527,7 +527,9 @@ function xmldb_hotpot_upgrade($oldversion) { - // anyway we must do this check, so that create_file_from_xxx() does not abort - } else if ($url) { - // file is on an external url - unusual ?! -- $file = false; // $fs->create_file_from_url($file_record, $url); -+ $file = $fs->create_file_from_url($file_record, $url); -+ } else if ($file = xmldb_hotpot_locate_externalfile($modulecontext->id, 'mod_hotpot', 'sourcefile', 0, $old_filepath, $old_filename)) { -+ // file exists in external repository - great ! - } else if ($file = $fs->get_file_by_hash($filehash)) { - // $file has already been migrated to Moodle's file system - // this is the route we expect most people to come :-) -@@ -961,7 +963,27 @@ function xmldb_hotpot_upgrade($oldversion) { - upgrade_mod_savepoint(true, "$newversion", 'hotpot'); - } - -- $newversion = 2015021162; -+ $newversion = 2015102678; -+ if ($oldversion < $newversion) { -+ // add custom completion fields for TaskChain module -+ $table = new xmldb_table('hotpot'); -+ $fields = array( -+ new xmldb_field('completionmingrade', XMLDB_TYPE_FLOAT, '6,2', null, XMLDB_NOTNULL, null, 0.00, 'timemodified'), -+ new xmldb_field('completionpass', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, 0, 'completionmingrade'), -+ new xmldb_field('completioncompleted', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, 0, 'completionpass') -+ ); -+ foreach ($fields as $field) { -+ xmldb_hotpot_fix_previous_field($dbman, $table, $field); -+ if ($dbman->field_exists($table, $field)) { -+ $dbman->change_field_type($table, $field); -+ } else { -+ $dbman->add_field($table, $field); -+ } -+ } -+ upgrade_mod_savepoint(true, "$newversion", 'hotpot'); -+ } -+ -+ $newversion = 2015102879; - if ($oldversion < $newversion) { - $empty_cache = true; - upgrade_mod_savepoint(true, "$newversion", 'hotpot'); -@@ -974,6 +996,145 @@ function xmldb_hotpot_upgrade($oldversion) { - return true; - } - -+function xmldb_hotpot_locate_externalfile($contextid, $component, $filearea, $itemid, $filepath, $filename) { -+ global $CFG, $DB; -+ -+ if (! class_exists('repository')) { -+ return false; // Moodle <= 2.2 has no repositories -+ } -+ -+ static $repositories = null; -+ if ($repositories===null) { -+ $exclude_types = array('recent', 'upload', 'user', 'areafiles'); -+ $repositories = repository::get_instances(); -+ foreach (array_keys($repositories) as $id) { -+ if (method_exists($repositories[$id], 'get_typename')) { -+ $type = $repositories[$id]->get_typename(); -+ } else { -+ $type = $repositories[$id]->options['type']; -+ } -+ if (in_array($type, $exclude_types)) { -+ unset($repositories[$id]); -+ } -+ } -+ // ensure upgraderunning is set -+ if (empty($CFG->upgraderunning)) { -+ $CFG->upgraderunning = null; -+ } -+ } -+ -+ // get file storage -+ $fs = get_file_storage(); -+ -+ // the following types repository use encoded params -+ $encoded_types = array('user', 'areafiles', 'coursefiles'); -+ -+ foreach ($repositories as $id => $repository) { -+ -+ // "filesystem" path is in plain text, others are encoded -+ if (method_exists($repositories[$id], 'get_typename')) { -+ $type = $repositories[$id]->get_typename(); -+ } else { -+ $type = $repositories[$id]->options['type']; -+ } -+ $encodepath = in_array($type, $encoded_types); -+ -+ // save $root_path, because it may get messed up by -+ // $repository->get_listing($path), if $path is non-existant -+ if (method_exists($repository, 'get_rootpath')) { -+ $root_path = $repository->get_rootpath(); -+ } else if (isset($repository->root_path)) { -+ $root_path = $repository->root_path; -+ } else { -+ $root_path = false; -+ } -+ -+ // get repository type -+ switch (true) { -+ case isset($repository->options['type']): -+ $type = $repository->options['type']; -+ break; -+ case isset($repository->instance->typeid): -+ $type = repository::get_type_by_id($repository->instance->typeid); -+ $type = $type->get_typename(); -+ break; -+ default: -+ $type = ''; // shouldn't happen !! -+ } -+ -+ $path = $filepath; -+ $source = trim($filepath.$filename, '/'); -+ -+ // setup $params for path encoding, if necessary -+ $params = array(); -+ if ($encodepath) { -+ $listing = $repository->get_listing(); -+ switch (true) { -+ case isset($listing['list'][0]['source']): $param = 'source'; break; // file -+ case isset($listing['list'][0]['path']): $param = 'path'; break; // dir -+ default: return false; // shouldn't happen !! -+ } -+ $params = file_storage::unpack_reference($listing['list'][0][$param], true); -+ -+ $params['filepath'] = '/'.$path.($path=='' ? '' : '/'); -+ $params['filename'] = '.'; // "." signifies a directory -+ $path = file_storage::pack_reference($params); -+ } -+ -+ // reset $repository->root_path (filesystem repository only) -+ if ($root_path) { -+ $repository->root_path = $root_path; -+ } -+ -+ // unset upgraderunning because it can cause get_listing() to fail -+ $upgraderunning = $CFG->upgraderunning; -+ $CFG->upgraderunning = null; -+ -+ // Note: we use "@" to suppress warnings in case $path does not exist -+ $listing = @$repository->get_listing($path); -+ -+ // restore upgraderunning flag -+ $CFG->upgraderunning = $upgraderunning; -+ -+ // check each file to see if it is the one we want -+ foreach ($listing['list'] as $file) { -+ -+ switch (true) { -+ case isset($file['source']): $param = 'source'; break; // file -+ case isset($file['path']): $param = 'path'; break; // dir -+ default: continue; // shouldn't happen !! -+ } -+ -+ if ($encodepath) { -+ $file[$param] = file_storage::unpack_reference($file[$param]); -+ $file[$param] = trim($file[$param]['filepath'], '/').'/'.$file[$param]['filename']; -+ } -+ -+ if ($file[$param]==$source) { -+ -+ if ($encodepath) { -+ $params['filename'] = $filename; -+ $source = file_storage::pack_reference($params); -+ } -+ -+ $file_record = array( -+ 'contextid' => $contextid, 'component' => $component, 'filearea' => $filearea, -+ 'sortorder' => 0, 'itemid' => 0, 'filepath' => $filepath, 'filename' => $filename -+ ); -+ -+ if ($file = $fs->create_file_from_reference($file_record, $id, $source)) { -+ return $file; -+ } -+ -+ break; // try another repository -+ } -+ } -+ } -+ -+ // external file not found (or found but not created) -+ return false; -+} -+ - /** - * xmldb_hotpot_move_file - * -diff --git a/lang/en/hotpot.php b/lang/en/hotpot.php -index 52fcc3d..f0b438d 100644 ---- a/lang/en/hotpot.php -+++ b/lang/en/hotpot.php -@@ -55,7 +55,7 @@ $string['configbodystyles'] = 'By default, Moodle theme styles will override Hot - $string['configenablecache'] = 'Maintaining a cache of HotPot quizzes can dramatically speed up the delivery of quizzes to the students.'; - $string['configenablecron'] = 'Specify the hours in your time zone at which the HotPot cron script may run'; - $string['configenablemymoodle'] = 'This settings controls whether HotPots are listed on the MyMoodle page or not'; --$string['configenableobfuscate'] = 'Obfuscating the javascript code to insert media players makes it more difficult to determine the media file name and guess what the file contains.'; -+$string['configenableobfuscate'] = 'Obfuscating the text strings and URLs in javascript code makes it more difficult to guess answers by viewing the source of the HTML page in the browser.'; - $string['configenableswf'] = 'Allow embedding of SWF files in HotPot activities. If enabled, this setting overrides filter_mediaplugin_enable_swf.'; - $string['configfile'] = 'Configuration file'; - $string['configframeheight'] = 'When a quiz is displayed within a frame, this value is the height (in pixels) of the top frame which contains the Moodle navigation bar.'; -@@ -140,6 +140,10 @@ $string['clicktrailreport'] = 'Click trails'; - $string['closed'] = 'This activity has closed'; - $string['clues'] = 'Clues'; - $string['completed'] = 'Completed'; -+$string['completioncompleted'] = 'Require completed status'; -+$string['completionmingrade'] = 'Require minimum grade'; -+$string['completionpass'] = 'Require passing grade'; -+$string['completionwarning'] = 'These fields are disabled if the grade limit for this activity is "No grade" or the grade weighting is "No weighting"'; - $string['confirmdeleteattempts'] = 'Do you really want to delete these attempts?'; - $string['confirmstop'] = 'Are you sure you want to navigate away from this page?'; - $string['correct'] = 'Correct'; -@@ -154,8 +158,8 @@ $string['delay2summary'] = 'Time delay between later attempts'; - $string['delay3'] = 'Delay 3'; - $string['delay3_help'] = 'The setting specifies the delay between finishing the quiz and returning control of the display to Moodle. - --**Use specific time (in seconds)** --: control will be returned to Moodle after the specified number of seconds. -+**Use specific delay** -+: control will be returned to Moodle after the specified delay. - - **Use settings in source/template file** - : control will be returned to Moodle after the number of seconds specified in the source file or the template files for this output format. -@@ -169,7 +173,7 @@ $string['delay3_help'] = 'The setting specifies the delay between finishing the - Note, the quiz results are always returned to Moodle immediately the quiz is completed or abandoned, regardless of this setting.'; - $string['delay3afterok'] = 'Wait till student clicks OK'; - $string['delay3disable'] = 'Do not continue automatically'; --$string['delay3specific'] = 'Use specific time (in seconds)'; -+$string['delay3specific'] = 'Use specific delay'; - $string['delay3summary'] = 'Time delay at the end of the quiz'; - $string['delay3template'] = 'Use settings in source/template file'; - $string['deleteallattempts'] = 'Delete all attempts'; -@@ -179,7 +183,7 @@ $string['duration'] = 'Duration'; - $string['enablecache'] = 'Enable HotPot cache'; - $string['enablecron'] = 'Enable HotPot cron'; - $string['enablemymoodle'] = 'Show HotPots on MyMoodle'; --$string['enableobfuscate'] = 'Enable obfuscation of media player code'; -+$string['enableobfuscate'] = 'Enable obfuscation of text and media players'; - $string['enableswf'] = 'Allow embedding of SWF files in HotPot activities'; - $string['entry_attempts'] = 'Attempts'; - $string['entry_dates'] = 'Dates'; -@@ -419,14 +423,16 @@ $string['outputformat_help'] = 'The output format specifies how the content will - The output formats that are available depend on the type of the source file. Some types of source file have just one output format, while other types of source file have several output formats. - - The "best" setting will display the content using the optimal output format for the student\'s browser.'; -+$string['outputformat_hp_6_jcloze_html_findit_a'] = 'FindIt (a) from html'; -+$string['outputformat_hp_6_jcloze_html_findit_b'] = 'FindIt (b) from html'; - $string['outputformat_hp_6_jcloze_html'] = 'JCloze (v6) from html'; - $string['outputformat_hp_6_jcloze_xml_anctscan'] = 'ANCT-Scan from HP6 JCloze xml'; - $string['outputformat_hp_6_jcloze_xml_dropdown'] = 'DropDown from HP6 JCloze xml'; - $string['outputformat_hp_6_jcloze_xml_findit_a'] = 'FindIt (a) from HP6 JCloze xml'; - $string['outputformat_hp_6_jcloze_xml_findit_b'] = 'FindIt (b) from HP6 JCloze xml'; - $string['outputformat_hp_6_jcloze_xml_jgloss'] = 'JGloss from HP6 JCloze xml'; --$string['outputformat_hp_6_jcloze_xml_v6'] = 'JCloze (v6) from HP6 xml'; - $string['outputformat_hp_6_jcloze_xml_v6_autoadvance'] = 'JCloze (v6) from HP6 xml (Auto-advance)'; -+$string['outputformat_hp_6_jcloze_xml_v6'] = 'JCloze (v6) from HP6 xml'; - $string['outputformat_hp_6_jcross_html'] = 'JCross (v6) from html'; - $string['outputformat_hp_6_jcross_xml_v6'] = 'JCross (v6) from xml'; - $string['outputformat_hp_6_jmatch_html'] = 'JMatch (v6) from html'; -diff --git a/lib.php b/lib.php -index f27eb8e..1c4cdc2 100644 ---- a/lib.php -+++ b/lib.php -@@ -51,12 +51,12 @@ function hotpot_supports($feature) { - // they are not all defined in Moodle 2.0, so we - // check each one is defined before trying to use it - $constants = array( -- 'FEATURE_ADVANCED_GRADING' => true, // default=false -+ 'FEATURE_ADVANCED_GRADING' => false, - 'FEATURE_BACKUP_MOODLE2' => true, // default=false - 'FEATURE_COMMENT' => true, -- 'FEATURE_COMPLETION_HAS_RULES' => false, // requires "hotpot_get_completion_state()" -+ 'FEATURE_COMPLETION_HAS_RULES' => true, - 'FEATURE_COMPLETION_TRACKS_VIEWS' => true, -- 'FEATURE_CONTROLS_GRADE_VISIBILITY' => true, -+ 'FEATURE_CONTROLS_GRADE_VISIBILITY' => false, - 'FEATURE_GRADE_HAS_GRADE' => true, // default=false - 'FEATURE_GRADE_OUTCOMES' => true, - 'FEATURE_GROUPINGS' => true, // default=false -@@ -1468,8 +1468,8 @@ function hotpot_pluginfile_externalfile($context, $component, $filearea, $filepa - $maindirname = dirname($mainreference); - $encodepath = false; - break; -- case 'user': - case 'coursefiles': -+ case 'user': - $params = file_storage::unpack_reference($mainreference, true); - $maindirname = $params['filepath']; - $encodepath = true; -@@ -1545,14 +1545,7 @@ function hotpot_pluginfile_externalfile($context, $component, $filearea, $filepa - default: return false; // shouldn't happen !! - } - $params = $listing['list'][0][$param]; -- switch ($type) { -- case 'user': -- $params = json_decode(base64_decode($params), true); -- break; -- case 'coursefiles': -- $params = file_storage::unpack_reference($params, true); -- break; -- } -+ $params = json_decode(base64_decode($params), true); - } - - foreach ($paths as $path => $source) { -@@ -1564,14 +1557,7 @@ function hotpot_pluginfile_externalfile($context, $component, $filearea, $filepa - if ($encodepath) { - $params['filepath'] = '/'.$path.($path=='' ? '' : '/'); - $params['filename'] = '.'; // "." signifies a directory -- switch ($type) { -- case 'user': -- $path = base64_encode(json_encode($params)); -- break; -- case 'coursefiles': -- $path = file_storage::pack_reference($params); -- break; -- } -+ $path = base64_encode(json_encode($params)); - } - - $listing = $repository->get_listing($path); -@@ -1584,14 +1570,7 @@ function hotpot_pluginfile_externalfile($context, $component, $filearea, $filepa - } - - if ($encodepath) { -- switch ($type) { -- case 'user': -- $file[$param] = json_decode(base64_decode($file[$param]), true); -- break; -- case 'coursefiles': -- $file[$param] = file_storage::unpack_reference($file[$param]); -- break; -- } -+ $file[$param] = json_decode(base64_decode($file[$param]), true); - $file[$param] = trim($file[$param]['filepath'], '/').'/'.$file[$param]['filename']; - } - -@@ -1637,14 +1616,7 @@ function hotpot_pluginfile_dirpath_exists($dirpath, $repository, $type, $encodep - if ($encodepath) { - $params['filepath'] = '/'.$dirpath.($dirpath=='' ? '' : '/'); - $params['filename'] = '.'; // "." signifies a directory -- switch ($type) { -- case 'user': -- $dirpath = base64_encode(json_encode($params)); -- break; -- case 'coursefiles': -- $dirpath = file_storage::pack_reference($params); -- break; -- } -+ $dirpath = base64_encode(json_encode($params)); - } - - $exists = false; -@@ -2231,7 +2203,7 @@ function hotpot_add_to_log($courseid, $module, $action, $url='', $info='', $cmid - * @param bool $type Type of comparison (or/and; can be used as return value if no conditions) - * @return bool True if completed, false if not, $type if conditions not set - */ --function hotpot_get_completion_state($course, $cm, $userid, $type) { -+function hotpot_get_completion_state_old($course, $cm, $userid, $type) { - global $CFG, $DB; - require_once($CFG->dirroot.'/mod/hotpot/locallib.php'); - $params = array('hotpotid' => $cm->instance, -@@ -2239,3 +2211,77 @@ function hotpot_get_completion_state($course, $cm, $userid, $type) { - 'status' => hotpot::STATUS_COMPLETED); - return $DB->record_exists('hotpot_attempts', $params); - } -+/** -+ * Obtains the automatic completion state for this hotpot -+ * based on the conditions in hotpot settings. -+ * -+ * @param object $course record from "course" table -+ * @param object $cm record from "course_modules" table -+ * @param integer $userid id from "user" table -+ * @param bool $type of comparison (or/and; used as return value if there are no conditions) -+ * @return mixed TRUE if completed, FALSE if not, or $type if no conditions are set -+ */ -+function hotpot_get_completion_state($course, $cm, $userid, $type) { -+ global $CFG, $DB; -+ -+ // set default return $state -+ $state = $type; -+ -+ // get the hotpot record -+ if ($hotpot = $DB->get_record('hotpot', array('id' => $cm->instance))) { -+ -+ // get grade, if necessary -+ $grade = false; -+ if ($hotpot->completionmingrade || $hotpot->completionpass) { -+ require_once($CFG->dirroot.'/lib/gradelib.php'); -+ $params = array('courseid' => $course->id, -+ 'itemtype' => 'mod', -+ 'itemmodule' => 'hotpot', -+ 'iteminstance' => $cm->instance); -+ if ($grade_item = grade_item::fetch($params)) { -+ $grades = grade_grade::fetch_users_grades($grade_item, array($userid), false); -+ if (isset($grades[$userid])) { -+ $grade = $grades[$userid]; -+ } -+ unset($grades); -+ } -+ unset($grade_item); -+ } -+ -+ // the HotPot completion conditions -+ $conditions = array('completionmingrade', -+ 'completionpass', -+ 'completioncompleted'); -+ -+ foreach ($conditions as $condition) { -+ if (empty($hotpot->$condition)) { -+ continue; -+ } -+ switch ($condition) { -+ case 'completionmingrade': -+ $state = ($grade && $grade->finalgrade >= $hotpot->completionmingrade); -+ break; -+ case 'completionpass': -+ $state = ($grade && $grade->is_passed()); -+ break; -+ case 'completioncompleted': -+ $params = array('id' => $cm->instance, -+ 'userid' => $userid, -+ 'status' => $hotpot->$condition); -+ $state = $DB->record_exists('hotpot_attempts', $params); -+ break; -+ -+ } -+ // finish early if possible -+ if ($type==COMPLETION_AND && $state==false) { -+ return false; -+ } -+ if ($type==COMPLETION_OR && $state) { -+ return true; -+ } -+ } -+ } -+ -+ return $state; -+} -+ -diff --git a/locallib.php b/locallib.php -index 3ab6806..3b09cb2 100644 ---- a/locallib.php -+++ b/locallib.php -@@ -2074,7 +2074,14 @@ class hotpot { - continue; // skip labels - } - if ($found || $cm->id==$id) { -- if (coursemodule_visible_for_user($cm)) { -+ if (class_exists('\core_availability\info_module')) { -+ // Moodle >= 2.7 -+ $is_visible = \core_availability\info_module::is_user_visible($cm); -+ } else { -+ // Moodle <= 2.6 -+ $is_visible = coursemodule_visible_for_user($cm); -+ } -+ if ($is_visible) { - return $cm; - } - if ($cm->id==$id) { -diff --git a/mediafilter/ufo.js b/mediafilter/ufo.js -index 6ee6664..99e5a30 100644 ---- a/mediafilter/ufo.js -+++ b/mediafilter/ufo.js -@@ -1,383 +1,383 @@ --/* Unobtrusive Flash Objects (UFO) v3.22 <http://www.bobbyvandersluis.com/ufo/> -- Copyright 2005-2007 Bobby van der Sluis -- This software is licensed under the CC-GNU LGPL <http://creativecommons.org/licenses/LGPL/2.1/> -+/* Unobtrusive Flash Objects (UFO) v3.22 <http://www.bobbyvandersluis.com/ufo/> -+ Copyright 2005-2007 Bobby van der Sluis -+ This software is licensed under the CC-GNU LGPL <http://creativecommons.org/licenses/LGPL/2.1/> - - CONTAINS MINOR CHANGE FOR MOODLE (bottom code for MDL-9825) - */ - - var UFO = { -- req: ["movie", "width", "height", "majorversion", "build"], -- opt: ["play", "loop", "menu", "quality", "scale", "salign", "wmode", "bgcolor", "base", "flashvars", "devicefont", "allowscriptaccess", "seamlesstabbing", "allowfullscreen", "allownetworking"], -- optAtt: ["id", "name", "align"], -- optExc: ["swliveconnect"], -- ximovie: "ufo.swf", -- xiwidth: "215", -- xiheight: "138", -- ua: navigator.userAgent.toLowerCase(), -- pluginType: "", -- fv: [0,0], -- foList: [], -+ req: ["movie", "width", "height", "majorversion", "build"], -+ opt: ["play", "loop", "menu", "quality", "scale", "salign", "wmode", "bgcolor", "base", "flashvars", "devicefont", "allowscriptaccess", "seamlesstabbing", "allowfullscreen", "allownetworking"], -+ optAtt: ["id", "name", "align"], -+ optExc: ["swliveconnect"], -+ ximovie: "ufo.swf", -+ xiwidth: "215", -+ xiheight: "138", -+ ua: navigator.userAgent.toLowerCase(), -+ pluginType: "", -+ fv: [0,0], -+ foList: [], - -- /** -- * create -- * -- * @param xxx FO -- * @param xxx id -- */ -- create: function(FO, id) { -- if (!UFO.uaHas("w3cdom") || UFO.uaHas("ieMac")) return; -- UFO.getFlashVersion(); -- UFO.foList[id] = UFO.updateFO(FO); -- UFO.createCSS("#" + id, "visibility:hidden;"); -- UFO.domLoad(id); -- }, -+ /** -+ * create -+ * -+ * @param xxx FO -+ * @param xxx id -+ */ -+ create: function(FO, id) { -+ if (!UFO.uaHas("w3cdom") || UFO.uaHas("ieMac")) return; -+ UFO.getFlashVersion(); -+ UFO.foList[id] = UFO.updateFO(FO); -+ UFO.createCSS("#" + id, "visibility:hidden;"); -+ UFO.domLoad(id); -+ }, - -- /** -- * updateFO -- * -- * @param xxx FO -- * @return xxx -- */ -- updateFO: function(FO) { -- if (typeof FO.xi != "undefined" && FO.xi == "true") { -- if (typeof FO.ximovie == "undefined") FO.ximovie = UFO.ximovie; -- if (typeof FO.xiwidth == "undefined") FO.xiwidth = UFO.xiwidth; -- if (typeof FO.xiheight == "undefined") FO.xiheight = UFO.xiheight; -- } -- FO.mainCalled = false; -- return FO; -- }, -+ /** -+ * updateFO -+ * -+ * @param xxx FO -+ * @return xxx -+ */ -+ updateFO: function(FO) { -+ if (typeof FO.xi != "undefined" && FO.xi == "true") { -+ if (typeof FO.ximovie == "undefined") FO.ximovie = UFO.ximovie; -+ if (typeof FO.xiwidth == "undefined") FO.xiwidth = UFO.xiwidth; -+ if (typeof FO.xiheight == "undefined") FO.xiheight = UFO.xiheight; -+ } -+ FO.mainCalled = false; -+ return FO; -+ }, - -- /** -- * domLoad -- * -- * @param xxx id -- */ -- domLoad: function(id) { -- var _t = setInterval(function() { -- if ((document.getElementsByTagName("body")[0] != null || document.body != null) && document.getElementById(id) != null) { -- UFO.main(id); -- clearInterval(_t); -- } -- }, 250); -- if (typeof document.addEventListener != "undefined") { -- document.addEventListener("DOMContentLoaded", function() { UFO.main(id); clearInterval(_t); } , null); // Gecko, Opera 9+ -- } -- }, -+ /** -+ * domLoad -+ * -+ * @param xxx id -+ */ -+ domLoad: function(id) { -+ var _t = setInterval(function() { -+ if ((document.getElementsByTagName("body")[0] != null || document.body != null) && document.getElementById(id) != null) { -+ UFO.main(id); -+ clearInterval(_t); -+ } -+ }, 250); -+ if (typeof document.addEventListener != "undefined") { -+ document.addEventListener("DOMContentLoaded", function() { UFO.main(id); clearInterval(_t); } , null); // Gecko, Opera 9+ -+ } -+ }, - -- /** -- * main -- * -- * @param xxx id -- */ -- main: function(id) { -- if (! document.getElementById(id)) { -- if(!window.gdb)window.gdb=!confirm("Oops, document.getElementById("+id+") not found"); -- return; -- } -- var _fo = UFO.foList[id]; -- if (_fo.mainCalled) return; -- UFO.foList[id].mainCalled = true; -- document.getElementById(id).style.visibility = "hidden"; -- if (UFO.hasRequired(id)) { -- if (UFO.hasFlashVersion(parseInt(_fo.majorversion, 10), parseInt(_fo.build, 10))) { -- if (typeof _fo.setcontainercss != "undefined" && _fo.setcontainercss == "true") UFO.setContainerCSS(id); -- UFO.writeSWF(id); -- } -- else if (_fo.xi == "true" && UFO.hasFlashVersion(6, 65)) { -- UFO.createDialog(id); -- } -- } -- document.getElementById(id).style.visibility = "visible"; -- }, -+ /** -+ * main -+ * -+ * @param xxx id -+ */ -+ main: function(id) { -+ if (! document.getElementById(id)) { -+ if(!window.gdb)window.gdb=!confirm("Oops, document.getElementById("+id+") not found"); -+ return; -+ } -+ var _fo = UFO.foList[id]; -+ if (_fo.mainCalled) return; -+ UFO.foList[id].mainCalled = true; -+ document.getElementById(id).style.visibility = "hidden"; -+ if (UFO.hasRequired(id)) { -+ if (UFO.hasFlashVersion(parseInt(_fo.majorversion, 10), parseInt(_fo.build, 10))) { -+ if (typeof _fo.setcontainercss != "undefined" && _fo.setcontainercss == "true") UFO.setContainerCSS(id); -+ UFO.writeSWF(id); -+ } -+ else if (_fo.xi == "true" && UFO.hasFlashVersion(6, 65)) { -+ UFO.createDialog(id); -+ } -+ } -+ document.getElementById(id).style.visibility = "visible"; -+ }, - -- /** -- * createCSS -- * -- * @param xxx selector -- * @param xxx declaration -- */ -- createCSS: function(selector, declaration) { -- var _h = document.getElementsByTagName("head")[0]; -- var _s = UFO.createElement("style"); -- if (!UFO.uaHas("ieWin")) _s.appendChild(document.createTextNode(selector + " {" + declaration + "}")); // bugs in IE/Win -- _s.setAttribute("type", "text/css"); -- _s.setAttribute("media", "screen"); -- _h.appendChild(_s); -- if (UFO.uaHas("ieWin") && document.styleSheets && document.styleSheets.length > 0) { -- var _ls = document.styleSheets[document.styleSheets.length - 1]; -- if (typeof _ls.addRule == "object") _ls.addRule(selector, declaration); -- } -- }, -+ /** -+ * createCSS -+ * -+ * @param xxx selector -+ * @param xxx declaration -+ */ -+ createCSS: function(selector, declaration) { -+ var _h = document.getElementsByTagName("head")[0]; -+ var _s = UFO.createElement("style"); -+ if (!UFO.uaHas("ieWin")) _s.appendChild(document.createTextNode(selector + " {" + declaration + "}")); // bugs in IE/Win -+ _s.setAttribute("type", "text/css"); -+ _s.setAttribute("media", "screen"); -+ _h.appendChild(_s); -+ if (UFO.uaHas("ieWin") && document.styleSheets && document.styleSheets.length > 0) { -+ var _ls = document.styleSheets[document.styleSheets.length - 1]; -+ if (typeof _ls.addRule == "object") _ls.addRule(selector, declaration); -+ } -+ }, - -- /** -- * setContainerCSS -- * -- * @param xxx id -- */ -- setContainerCSS: function(id) { -- var _fo = UFO.foList[id]; -- var _w = /%/.test(_fo.width) ? "" : "px"; -- var _h = /%/.test(_fo.height) ? "" : "px"; -- UFO.createCSS("#" + id, "width:" + _fo.width + _w +"; height:" + _fo.height + _h +";"); -- if (_fo.width == "100%") { -- UFO.createCSS("body", "margin-left:0; margin-right:0; padding-left:0; padding-right:0;"); -- } -- if (_fo.height == "100%") { -- UFO.createCSS("html", "height:100%; overflow:hidden;"); -- UFO.createCSS("body", "margin-top:0; margin-bottom:0; padding-top:0; padding-bottom:0; height:100%;"); -- } -- }, -+ /** -+ * setContainerCSS -+ * -+ * @param xxx id -+ */ -+ setContainerCSS: function(id) { -+ var _fo = UFO.foList[id]; -+ var _w = /%/.test(_fo.width) ? "" : "px"; -+ var _h = /%/.test(_fo.height) ? "" : "px"; -+ UFO.createCSS("#" + id, "width:" + _fo.width + _w +"; height:" + _fo.height + _h +";"); -+ if (_fo.width == "100%") { -+ UFO.createCSS("body", "margin-left:0; margin-right:0; padding-left:0; padding-right:0;"); -+ } -+ if (_fo.height == "100%") { -+ UFO.createCSS("html", "height:100%; overflow:hidden;"); -+ UFO.createCSS("body", "margin-top:0; margin-bottom:0; padding-top:0; padding-bottom:0; height:100%;"); -+ } -+ }, - -- /** -- * createElement -- * -- * @param xxx el -- * @return xxx -- */ -- createElement: function(el) { -- return (UFO.uaHas("xml") && typeof document.createElementNS != "undefined") ? document.createElementNS("http://www.w3.org/1999/xhtml", el) : document.createElement(el); -- }, -+ /** -+ * createElement -+ * -+ * @param xxx el -+ * @return xxx -+ */ -+ createElement: function(el) { -+ return (UFO.uaHas("xml") && typeof document.createElementNS != "undefined") ? document.createElementNS("http://www.w3.org/1999/xhtml", el) : document.createElement(el); -+ }, - -- /** -- * createObjParam -- * -- * @param xxx el -- * @param xxx aName -- * @param xxx aValue -- */ -- createObjParam: function(el, aName, aValue) { -- var _p = UFO.createElement("param"); -- _p.setAttribute("name", aName); -- _p.setAttribute("value", aValue); -- el.appendChild(_p); -- }, -+ /** -+ * createObjParam -+ * -+ * @param xxx el -+ * @param xxx aName -+ * @param xxx aValue -+ */ -+ createObjParam: function(el, aName, aValue) { -+ var _p = UFO.createElement("param"); -+ _p.setAttribute("name", aName); -+ _p.setAttribute("value", aValue); -+ el.appendChild(_p); -+ }, - -- /** -- * uaHas -- * -- * @param xxx ft -- * @return xxx -- */ -- uaHas: function(ft) { -- var _u = UFO.ua; -- switch(ft) { -- case "w3cdom": -- return (typeof document.getElementById != "undefined" && typeof document.getElementsByTagName != "undefined" && (typeof document.createElement != "undefined" || typeof document.createElementNS != "undefined")); -- case "xml": -- var _m = document.getElementsByTagName("meta"); -- var _l = _m.length; -- for (var i = 0; i < _l; i++) { -- if (/content-type/i.test(_m[i].getAttribute("http-equiv")) && /xml/i.test(_m[i].getAttribute("content"))) return true; -- } -- return false; -- case "ieMac": -- return /msie/.test(_u) && !/opera/.test(_u) && /mac/.test(_u); -- case "ieWin": -- return /msie/.test(_u) && !/opera/.test(_u) && /win/.test(_u); -- case "gecko": -- return /gecko/.test(_u) && !/applewebkit/.test(_u); -- case "opera": -- return /opera/.test(_u); -- case "safari": -- return /applewebkit/.test(_u); -- default: -- return false; -- } -- }, -+ /** -+ * uaHas -+ * -+ * @param xxx ft -+ * @return xxx -+ */ -+ uaHas: function(ft) { -+ var _u = UFO.ua; -+ switch(ft) { -+ case "w3cdom": -+ return (typeof document.getElementById != "undefined" && typeof document.getElementsByTagName != "undefined" && (typeof document.createElement != "undefined" || typeof document.createElementNS != "undefined")); -+ case "xml": -+ var _m = document.getElementsByTagName("meta"); -+ var _l = _m.length; -+ for (var i = 0; i < _l; i++) { -+ if (/content-type/i.test(_m[i].getAttribute("http-equiv")) && /xml/i.test(_m[i].getAttribute("content"))) return true; -+ } -+ return false; -+ case "ieMac": -+ return /msie/.test(_u) && !/opera/.test(_u) && /mac/.test(_u); -+ case "ieWin": -+ return /msie/.test(_u) && !/opera/.test(_u) && /win/.test(_u); -+ case "gecko": -+ return /gecko/.test(_u) && !/applewebkit/.test(_u); -+ case "opera": -+ return /opera/.test(_u); -+ case "safari": -+ return /applewebkit/.test(_u); -+ default: -+ return false; -+ } -+ }, - -- /** -- * getFlashVersion -- */ -- getFlashVersion: function() { -- if (UFO.fv[0] != 0) return; -- if (navigator.plugins && typeof navigator.plugins["Shockwave Flash"] == "object") { -- UFO.pluginType = "npapi"; -- var _d = navigator.plugins["Shockwave Flash"].description; -- if (typeof _d != "undefined") { -- _d = _d.replace(/^.*\s+(\S+\s+\S+$)/, "$1"); -- var _m = parseInt(_d.replace(/^(.*)\..*$/, "$1"), 10); -- var _r = /r/.test(_d) ? parseInt(_d.replace(/^.*r(.*)$/, "$1"), 10) : 0; -- UFO.fv = [_m, _r]; -- } -- } -- else if (window.ActiveXObject) { -- UFO.pluginType = "ax"; -- try { // avoid fp 6 crashes -- var _a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); -- } -- catch(e) { -- try { -- var _a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); -- UFO.fv = [6, 0]; -- _a.AllowScriptAccess = "always"; // throws if fp < 6.47 -- } -- catch(e) { -- if (UFO.fv[0] == 6) return; -- } -- try { -- var _a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); -- } -- catch(e) {} -- } -- if (typeof _a == "object") { -- var _d = _a.GetVariable("$version"); // bugs in fp 6.21/6.23 -- if (typeof _d != "undefined") { -- _d = _d.replace(/^\S+\s+(.*)$/, "$1").split(","); -- UFO.fv = [parseInt(_d[0], 10), parseInt(_d[2], 10)]; -- } -- } -- } -- }, -+ /** -+ * getFlashVersion -+ */ -+ getFlashVersion: function() { -+ if (UFO.fv[0] != 0) return; -+ if (navigator.plugins && typeof navigator.plugins["Shockwave Flash"] == "object") { -+ UFO.pluginType = "npapi"; -+ var _d = navigator.plugins["Shockwave Flash"].description; -+ if (typeof _d != "undefined") { -+ _d = _d.replace(/^.*\s+(\S+\s+\S+$)/, "$1"); -+ var _m = parseInt(_d.replace(/^(.*)\..*$/, "$1"), 10); -+ var _r = /r/.test(_d) ? parseInt(_d.replace(/^.*r(.*)$/, "$1"), 10) : 0; -+ UFO.fv = [_m, _r]; -+ } -+ } -+ else if (window.ActiveXObject) { -+ UFO.pluginType = "ax"; -+ try { // avoid fp 6 crashes -+ var _a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); -+ } -+ catch(e) { -+ try { -+ var _a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); -+ UFO.fv = [6, 0]; -+ _a.AllowScriptAccess = "always"; // throws if fp < 6.47 -+ } -+ catch(e) { -+ if (UFO.fv[0] == 6) return; -+ } -+ try { -+ var _a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); -+ } -+ catch(e) {} -+ } -+ if (typeof _a == "object") { -+ var _d = _a.GetVariable("$version"); // bugs in fp 6.21/6.23 -+ if (typeof _d != "undefined") { -+ _d = _d.replace(/^\S+\s+(.*)$/, "$1").split(","); -+ UFO.fv = [parseInt(_d[0], 10), parseInt(_d[2], 10)]; -+ } -+ } -+ } -+ }, - -- /** -- * hasRequired -- * -- * @param xxx id -- * @return xxx -- */ -- hasRequired: function(id) { -- var _l = UFO.req.length; -- for (var i = 0; i < _l; i++) { -- if (typeof UFO.foList[id][UFO.req[i]] == "undefined") return false; -- } -- return true; -- }, -+ /** -+ * hasRequired -+ * -+ * @param xxx id -+ * @return xxx -+ */ -+ hasRequired: function(id) { -+ var _l = UFO.req.length; -+ for (var i = 0; i < _l; i++) { -+ if (typeof UFO.foList[id][UFO.req[i]] == "undefined") return false; -+ } -+ return true; -+ }, - -- /** -- * hasFlashVersion -- * -- * @param xxx major -- * @param xxx release -- * @return xxx -- */ -- hasFlashVersion: function(major, release) { -- return (UFO.fv[0] > major || (UFO.fv[0] == major && UFO.fv[1] >= release)) ? true : false; -- }, -+ /** -+ * hasFlashVersion -+ * -+ * @param xxx major -+ * @param xxx release -+ * @return xxx -+ */ -+ hasFlashVersion: function(major, release) { -+ return (UFO.fv[0] > major || (UFO.fv[0] == major && UFO.fv[1] >= release)) ? true : false; -+ }, - -- /** -- * writeSWF -- * -- * @param xxx id -- */ -- writeSWF: function(id) { -- var _fo = UFO.foList[id]; -- var _e = document.getElementById(id); -- if (UFO.pluginType == "npapi") { -- if (UFO.uaHas("gecko") || UFO.uaHas("xml")) { -- while(_e.hasChildNodes()) { -- _e.removeChild(_e.firstChild); -- } -- var _obj = UFO.createElement("object"); -- _obj.setAttribute("type", "application/x-shockwave-flash"); -- _obj.setAttribute("data", _fo.movie); -- _obj.setAttribute("width", _fo.width); -- _obj.setAttribute("height", _fo.height); -- var _l = UFO.optAtt.length; -- for (var i = 0; i < _l; i++) { -- if (typeof _fo[UFO.optAtt[i]] != "undefined") _obj.setAttribute(UFO.optAtt[i], _fo[UFO.optAtt[i]]); -- } -- var _o = UFO.opt.concat(UFO.optExc); -- var _l = _o.length; -- for (var i = 0; i < _l; i++) { -- if (typeof _fo[_o[i]] != "undefined") UFO.createObjParam(_obj, _o[i], _fo[_o[i]]); -- } -- _e.appendChild(_obj); -- } -- else { -- var _emb = ""; -- var _o = UFO.opt.concat(UFO.optAtt).concat(UFO.optExc); -- var _l = _o.length; -- for (var i = 0; i < _l; i++) { -- if (typeof _fo[_o[i]] != "undefined") _emb += ' ' + _o[i] + '="' + _fo[_o[i]] + '"'; -- } -- _e.innerHTML = '<embed type="application/x-shockwave-flash" src="' + _fo.movie + '" width="' + _fo.width + '" height="' + _fo.height + '" pluginspage="http://www.macromedia.com/go/getflashplayer"' + _emb + '></embed>'; -- } -- } -- else if (UFO.pluginType == "ax") { -- var _objAtt = ""; -- var _l = UFO.optAtt.length; -- for (var i = 0; i < _l; i++) { -- if (typeof _fo[UFO.optAtt[i]] != "undefined") _objAtt += ' ' + UFO.optAtt[i] + '="' + _fo[UFO.optAtt[i]] + '"'; -- } -- var _objPar = ""; -- var _l = UFO.opt.length; -- for (var i = 0; i < _l; i++) { -- if (typeof _fo[UFO.opt[i]] != "undefined") _objPar += '<param name="' + UFO.opt[i] + '" value="' + _fo[UFO.opt[i]] + '" />'; -- } -- var _p = window.location.protocol == "https:" ? "https:" : "http:"; -- _e.innerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + _objAtt + ' width="' + _fo.width + '" height="' + _fo.height + '" codebase="' + _p + '//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' + _fo.majorversion + ',0,' + _fo.build + ',0"><param name="movie" value="' + _fo.movie + '" />' + _objPar + '</object>'; -- } -- }, -+ /** -+ * writeSWF -+ * -+ * @param xxx id -+ */ -+ writeSWF: function(id) { -+ var _fo = UFO.foList[id]; -+ var _e = document.getElementById(id); -+ if (UFO.pluginType == "npapi") { -+ if (UFO.uaHas("gecko") || UFO.uaHas("xml")) { -+ while(_e.hasChildNodes()) { -+ _e.removeChild(_e.firstChild); -+ } -+ var _obj = UFO.createElement("object"); -+ _obj.setAttribute("type", "application/x-shockwave-flash"); -+ _obj.setAttribute("data", _fo.movie); -+ _obj.setAttribute("width", _fo.width); -+ _obj.setAttribute("height", _fo.height); -+ var _l = UFO.optAtt.length; -+ for (var i = 0; i < _l; i++) { -+ if (typeof _fo[UFO.optAtt[i]] != "undefined") _obj.setAttribute(UFO.optAtt[i], _fo[UFO.optAtt[i]]); -+ } -+ var _o = UFO.opt.concat(UFO.optExc); -+ var _l = _o.length; -+ for (var i = 0; i < _l; i++) { -+ if (typeof _fo[_o[i]] != "undefined") UFO.createObjParam(_obj, _o[i], _fo[_o[i]]); -+ } -+ _e.appendChild(_obj); -+ } -+ else { -+ var _emb = ""; -+ var _o = UFO.opt.concat(UFO.optAtt).concat(UFO.optExc); -+ var _l = _o.length; -+ for (var i = 0; i < _l; i++) { -+ if (typeof _fo[_o[i]] != "undefined") _emb += ' ' + _o[i] + '="' + _fo[_o[i]] + '"'; -+ } -+ _e.innerHTML = '<embed type="application/x-shockwave-flash" src="' + _fo.movie + '" width="' + _fo.width + '" height="' + _fo.height + '" pluginspage="http://www.macromedia.com/go/getflashplayer"' + _emb + '></embed>'; -+ } -+ } -+ else if (UFO.pluginType == "ax") { -+ var _objAtt = ""; -+ var _l = UFO.optAtt.length; -+ for (var i = 0; i < _l; i++) { -+ if (typeof _fo[UFO.optAtt[i]] != "undefined") _objAtt += ' ' + UFO.optAtt[i] + '="' + _fo[UFO.optAtt[i]] + '"'; -+ } -+ var _objPar = ""; -+ var _l = UFO.opt.length; -+ for (var i = 0; i < _l; i++) { -+ if (typeof _fo[UFO.opt[i]] != "undefined") _objPar += '<param name="' + UFO.opt[i] + '" value="' + _fo[UFO.opt[i]] + '" />'; -+ } -+ var _p = window.location.protocol == "https:" ? "https:" : "http:"; -+ _e.innerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + _objAtt + ' width="' + _fo.width + '" height="' + _fo.height + '" codebase="' + _p + '//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' + _fo.majorversion + ',0,' + _fo.build + ',0"><param name="movie" value="' + _fo.movie + '" />' + _objPar + '</object>'; -+ } -+ }, - -- /** -- * createDialog -- * -- * @param xxx id -- */ -- createDialog: function(id) { -- var _fo = UFO.foList[id]; -- UFO.createCSS("html", "height:100%; overflow:hidden;"); -- UFO.createCSS("body", "height:100%; overflow:hidden;"); -- UFO.createCSS("#xi-con", "position:absolute; left:0; top:0; z-index:1000; width:100%; height:100%; background-color:#fff; filter:alpha(opacity:75); opacity:0.75;"); -- UFO.createCSS("#xi-dia", "position:absolute; left:50%; top:50%; margin-left: -" + Math.round(parseInt(_fo.xiwidth, 10) / 2) + "px; margin-top: -" + Math.round(parseInt(_fo.xiheight, 10) / 2) + "px; width:" + _fo.xiwidth + "px; height:" + _fo.xiheight + "px;"); -- var _b = document.getElementsByTagName("body")[0]; -- var _c = UFO.createElement("div"); -- _c.setAttribute("id", "xi-con"); -- var _d = UFO.createElement("div"); -- _d.setAttribute("id", "xi-dia"); -- _c.appendChild(_d); -- _b.appendChild(_c); -- var _mmu = window.location; -- if (UFO.uaHas("xml") && UFO.uaHas("safari")) { -- var _mmd = document.getElementsByTagName("title")[0].firstChild.nodeValue = document.getElementsByTagName("title")[0].firstChild.nodeValue.slice(0, 47) + " - Flash Player Installation"; -- } -- else { -- var _mmd = document.title = document.title.slice(0, 47) + " - Flash Player Installation"; -- } -- var _mmp = UFO.pluginType == "ax" ? "ActiveX" : "PlugIn"; -- var _uc = typeof _fo.xiurlcancel != "undefined" ? "&xiUrlCancel=" + _fo.xiurlcancel : ""; -- var _uf = typeof _fo.xiurlfailed != "undefined" ? "&xiUrlFailed=" + _fo.xiurlfailed : ""; -- UFO.foList["xi-dia"] = { movie:_fo.ximovie, width:_fo.xiwidth, height:_fo.xiheight, majorversion:"6", build:"65", flashvars:"MMredirectURL=" + _mmu + "&MMplayerType=" + _mmp + "&MMdoctitle=" + _mmd + _uc + _uf }; -- UFO.writeSWF("xi-dia"); -- }, -+ /** -+ * createDialog -+ * -+ * @param xxx id -+ */ -+ createDialog: function(id) { -+ var _fo = UFO.foList[id]; -+ UFO.createCSS("html", "height:100%; overflow:hidden;"); -+ UFO.createCSS("body", "height:100%; overflow:hidden;"); -+ UFO.createCSS("#xi-con", "position:absolute; left:0; top:0; z-index:1000; width:100%; height:100%; background-color:#fff; filter:alpha(opacity:75); opacity:0.75;"); -+ UFO.createCSS("#xi-dia", "position:absolute; left:50%; top:50%; margin-left: -" + Math.round(parseInt(_fo.xiwidth, 10) / 2) + "px; margin-top: -" + Math.round(parseInt(_fo.xiheight, 10) / 2) + "px; width:" + _fo.xiwidth + "px; height:" + _fo.xiheight + "px;"); -+ var _b = document.getElementsByTagName("body")[0]; -+ var _c = UFO.createElement("div"); -+ _c.setAttribute("id", "xi-con"); -+ var _d = UFO.createElement("div"); -+ _d.setAttribute("id", "xi-dia"); -+ _c.appendChild(_d); -+ _b.appendChild(_c); -+ var _mmu = window.location; -+ if (UFO.uaHas("xml") && UFO.uaHas("safari")) { -+ var _mmd = document.getElementsByTagName("title")[0].firstChild.nodeValue = document.getElementsByTagName("title")[0].firstChild.nodeValue.slice(0, 47) + " - Flash Player Installation"; -+ } -+ else { -+ var _mmd = document.title = document.title.slice(0, 47) + " - Flash Player Installation"; -+ } -+ var _mmp = UFO.pluginType == "ax" ? "ActiveX" : "PlugIn"; -+ var _uc = typeof _fo.xiurlcancel != "undefined" ? "&xiUrlCancel=" + _fo.xiurlcancel : ""; -+ var _uf = typeof _fo.xiurlfailed != "undefined" ? "&xiUrlFailed=" + _fo.xiurlfailed : ""; -+ UFO.foList["xi-dia"] = { movie:_fo.ximovie, width:_fo.xiwidth, height:_fo.xiheight, majorversion:"6", build:"65", flashvars:"MMredirectURL=" + _mmu + "&MMplayerType=" + _mmp + "&MMdoctitle=" + _mmd + _uc + _uf }; -+ UFO.writeSWF("xi-dia"); -+ }, - -- /** -- * expressInstallCallback -- */ -- expressInstallCallback: function() { -- var _b = document.getElementsByTagName("body")[0]; -- var _c = document.getElementById("xi-con"); -- _b.removeChild(_c); -- UFO.createCSS("body", "height:auto; overflow:auto;"); -- UFO.createCSS("html", "height:auto; overflow:auto;"); -- }, -+ /** -+ * expressInstallCallback -+ */ -+ expressInstallCallback: function() { -+ var _b = document.getElementsByTagName("body")[0]; -+ var _c = document.getElementById("xi-con"); -+ _b.removeChild(_c); -+ UFO.createCSS("body", "height:auto; overflow:auto;"); -+ UFO.createCSS("html", "height:auto; overflow:auto;"); -+ }, - -- /** -- * cleanupIELeaks -- */ -- cleanupIELeaks: function() { -- var _o = document.getElementsByTagName("object"); -- var _l = _o.length -- for (var i = 0; i < _l; i++) { -- _o[i].style.display = "none"; -+ /** -+ * cleanupIELeaks -+ */ -+ cleanupIELeaks: function() { -+ var _o = document.getElementsByTagName("object"); -+ var _l = _o.length -+ for (var i = 0; i < _l; i++) { -+ _o[i].style.display = "none"; - var j = 0; -- for (var x in _o[i]) { -+ for (var x in _o[i]) { - j++; -- if (typeof _o[i][x] == "function") { -- _o[i][x] = null; -- } -+ if (typeof _o[i][x] == "function") { -+ _o[i][x] = null; -+ } - if (j > 1000) { - // something is wrong, probably infinite loop caused by embedded html file - // see MDL-9825 - break; -- } -- } -- } -- } -+ } -+ } -+ } -+ } - - }; - - if (typeof window.attachEvent != "undefined" && UFO.uaHas("ieWin")) { -- window.attachEvent("onunload", UFO.cleanupIELeaks); -+ window.attachEvent("onunload", UFO.cleanupIELeaks); - } -diff --git a/mod_form.php b/mod_form.php -index 1e1b5a9..ff3950b 100644 ---- a/mod_form.php -+++ b/mod_form.php -@@ -797,4 +797,81 @@ class mod_hotpot_mod_form extends moodleform_mod { - - return $errors; - } -+ -+ /** -+ * Display module-specific activity completion rules. -+ * Part of the API defined by moodleform_mod -+ * @return array Array of string IDs of added items, empty array if none -+ */ -+ public function add_completion_rules() { -+ $mform = $this->_form; -+ -+ // array of elements names to be returned by this method -+ $names = array(); -+ -+ // these fields will be disabled if gradelimit x gradeweighting = 0 -+ $disablednames = array('completionusegrade'); -+ -+ // add "minimum grade" completion condition -+ $name = 'completionmingrade'; -+ $label = get_string($name, 'hotpot'); -+ if (empty($this->current->$name)) { -+ $value = 0.0; -+ } else { -+ $value = floatval($this->current->$name); -+ } -+ $group = array(); -+ $group[] = &$mform->createElement('checkbox', $name.'disabled', '', $label); -+ $group[] = &$mform->createElement('static', $name.'space', '', ' &nbsp; '); -+ $group[] = &$mform->createElement('text', $name, '', array('size' => 3)); -+ $mform->addGroup($group, $name.'group', '', '', false); -+ $mform->setType($name, PARAM_FLOAT); -+ $mform->setDefault($name, 0.00); -+ $mform->setType($name.'disabled', PARAM_INT); -+ $mform->setDefault($name.'disabled', empty($value) ? 0 : 1); -+ $mform->disabledIf($name, $name.'disabled', 'notchecked'); -+ $names[] = $name.'group'; -+ $disablednames[] = $name.'group'; -+ -+ // add "grade passed" completion condition -+ $name = 'completionpass'; -+ $label = get_string($name, 'hotpot'); -+ $mform->addElement('checkbox', $name, '', $label); -+ $mform->setType($name, PARAM_INT); -+ $mform->setDefault($name, 0); -+ $names[] = $name; -+ $disablednames[] = $name; -+ -+ // add "status completed" completion condition -+ $name = 'completioncompleted'; -+ $label = get_string($name, 'hotpot'); -+ $mform->addElement('checkbox', $name, '', $label); -+ $mform->setType($name, PARAM_INT); -+ $mform->setDefault($name, 0); -+ $names[] = $name; -+ // no need to disable this field :-) -+ -+ // disable grade conditions, if necessary -+ foreach ($disablednames as $name) { -+ if ($mform->elementExists($name)) { -+ $mform->disabledIf($name, 'gradeweighting', 'eq', 0); -+ } -+ } -+ -+ return $names; -+ } -+ -+ /** -+ * Called during validation. Indicates whether a module-specific completion rule is selected. -+ * -+ * @param array $data Input data (not yet validated) -+ * @return bool True if one or more rules is enabled, false if none are. -+ */ -+ public function completion_rule_enabled($data) { -+ if (empty($data['completiongradepassed']) && empty($data['completioncompletedcompleted']) && empty($data['completionmingrade'])) { -+ return false; -+ } else { -+ return true; -+ } -+ } - } -diff --git a/settings.php b/settings.php -index a1724b7..4785ff4 100644 ---- a/settings.php -+++ b/settings.php -@@ -48,7 +48,15 @@ $settings->add( - ); - - // restrict cron job to certain hours of the day (default=never) --$timezone = get_user_timezone_offset(); -+if (class_exists('core_date') && method_exists('core_date', 'get_user_timezone')) { -+ // Moodle >= 2.9 -+ $timezone = core_date::get_user_timezone(99); -+ $datetime = new DateTime('now', new DateTimeZone($timezone)); -+ $timezone = ($datetime->getOffset() - dst_offset_on(time(), $timezone)) / (3600.0); -+} else { -+ // Moodle <= 2.8 -+ $timezone = get_user_timezone_offset(); -+} - if (abs($timezone) > 13) { - $timezone = 0; - } else if ($timezone>0) { -@@ -105,4 +113,4 @@ $setting = new admin_setting_configtext('hotpot_maxeventlength', get_string('max - $setting->set_updatedcallback('hotpot_refresh_events'); - $settings->add($setting); - --unset($i, $link, $options, $setting, $str, $timezone, $url); -+unset($i, $link, $options, $setting, $str, $timezone, $datetime, $url); -diff --git a/source/class.php b/source/class.php -index 33d15fa..11a07d7 100644 ---- a/source/class.php -+++ b/source/class.php -@@ -789,14 +789,37 @@ class hotpot_source { - - /** - * compact_filecontents -+ * -+ * @param array $tags (optional, default=null) specific tags to remove comments from -+ * @todo Finish documenting this function - */ -- function compact_filecontents() { -+ public function compact_filecontents($tags=null) { - if (isset($this->filecontents)) { -+ if ($tags) { -+ $callback = array($this, 'compact_filecontents_callback'); -+ foreach ($tags as $tag) { -+ $search = '/(?<=<'.$tag.'>).*(?=<\/'.$tag.'>)/is'; -+ $this->filecontents = preg_replace_callback($search, $callback, $this->filecontents); -+ } -+ } - $this->filecontents = preg_replace('/(?<=>)'.'\s+'.'(?=<)/s', '', $this->filecontents); - } - } - - /** -+ * compact_filecontents_callback -+ * -+ * @todo Finish documenting this function -+ */ -+ public function compact_filecontents_callback($match) { -+ $search = array( -+ '/\/\/[^\n\r]*/', // single line js comments -+ '/\/\*.*?\*\//s', // multiline comments (js and css) -+ ); -+ return preg_replace($search, '', $match[0]); -+ } -+ -+ /** - * get_sibling_filecontents - * - * @param xxx $filename -diff --git a/source/hp/class.php b/source/hp/class.php -index e8d13cb..b8eb02f 100644 ---- a/source/hp/class.php -+++ b/source/hp/class.php -@@ -16,25 +16,29 @@ - // along with Moodle. If not, see <http://www.gnu.org/licenses/>. - - /** -- * Class to represent the source of a HotPot quiz -- * Source type: hp -+ * mod/hotpot/source/hp/class.php - * -- * @package mod-hotpot -- * @copyright 2010 Gordon Bateson <gordon.bateson@gmail.com> -- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later -+ * @package mod -+ * @subpackage hotpot -+ * @copyright 2010 Gordon Bateson (gordon.bateson@gmail.com) -+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later -+ * @since Moodle 2.0 - */ - -+/** Prevent direct access to this script */ - defined('MOODLE_INTERNAL') || die(); - --// get parent class -+/** Include required files */ - require_once($CFG->dirroot.'/mod/hotpot/source/class.php'); - - /** - * hotpot_source_hp - * -- * @copyright 2010 Gordon Bateson -- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later -- * @since Moodle 2.0 -+ * @copyright 2010 Gordon Bateson (gordon.bateson@gmail.com) -+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later -+ * @since Moodle 2.0 -+ * @package mod -+ * @subpackage hotpot - */ - class hotpot_source_hp extends hotpot_source { - public $xml; // an array containing the xml tree for hp xml files -@@ -43,6 +47,44 @@ class hotpot_source_hp extends hotpot_source { - public $hbs_software; // hotpot or textoys - public $hbs_quiztype; // jcloze, jcross, jmatch, jmix, jquiz, quandary, rhubarb, sequitur - -+ // encode a string for javascript -+ public $javascript_replace_pairs = array( -+ // backslashes and quotes -+ '\\'=>'\\\\', "'"=>"\\'", '"'=>'\\"', -+ // newlines (win = "\r\n", mac="\r", linux/unix="\n") -+ "\r\n"=>'\\n', "\r"=>'\\n', "\n"=>'\\n', -+ // other (closing tag is for XHTML compliance) -+ "\0"=>'\\0', '</'=>'<\\/' -+ ); -+ -+ // unicode characters can be detected by checking the hex value of a character -+ // 00 - 7F : ascii char (roman alphabet + punctuation) -+ // 80 - BF : byte 2, 3 or 4 of a unicode char -+ // C0 - DF : 1st byte of 2-byte char -+ // E0 - EF : 1st byte of 3-byte char -+ // F0 - FF : 1st byte of 4-byte char -+ // if the string doesn't match any of the above, it might be -+ // 80 - FF : single-byte, non-ascii char -+ public $search_unicode_chars = '/[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}|[\x00-\xff]/'; -+ -+ // array used to figure what number to decrement from character order value -+ // according to number of characters used to map unicode to ascii by utf-8 -+ public $utf8_decrement = array( -+ 1 => 0, -+ 2 => 192, -+ 3 => 224, -+ 4 => 240 -+ ); -+ -+ // the number of bits to shift each character by -+ public $utf8_shift = array( -+ 1 => array(0=>0), -+ 2 => array(0=>6, 1=>0), -+ 3 => array(0=>12, 1=>6, 2=>0), -+ 4 => array(0=>18, 1=>12, 2=>6, 3=>0) -+ ); -+ -+ - /** - * is_html - * -@@ -333,18 +375,20 @@ class hotpot_source_hp extends hotpot_source { - $this->compact_filecontents(); - $this->pre_xmlize_filecontents(); - -+ // define root of XML tree -+ $this->xml_root = $this->hbs_software.'-'.$this->hbs_quiztype.'-file'; -+ -+ // convert to XML tree using xmlize() - if (! $this->xml = xmlize($this->filecontents, 0)) { - debugging('Could not parse XML file: '.$this->filepath); -- } -- -- $this->xml_root = $this->hbs_software.'-'.$this->hbs_quiztype.'-file'; -- if (! array_key_exists($this->xml_root, $this->xml)) { -+ } else if (! array_key_exists($this->xml_root, $this->xml)) { - debugging('Could not find XML root node: '.$this->xml_root); - } - -- if (isset($this->config) && $this->config->get_filecontents()) { -+ // merge config settings, if necessary -+ if (isset($this->config) && $this->config && $this->config->get_filecontents()) { - -- $this->config->compact_filecontents(); -+ $this->config->compact_filecontents(array('header-code')); - $xml = xmlize($this->config->filecontents, 0); - - $config_file = $this->hbs_software.'-config-file'; -@@ -390,12 +434,8 @@ class hotpot_source_hp extends hotpot_source { - $search = '/&(?!(?:[a-zA-Z]+|#[0-9]+|#x[0-9a-fA-F]+);)/'; - $this->filecontents = preg_replace($search, '&amp;', $this->filecontents); - -- //$this->filecontents = $hotpot_textlib('utf8_to_entities', $this->filecontents); -- // unfortunately textlib does not convert single-byte non-ascii chars -- // i.e. "Latin-1 Supplement" e.g. latin small letter with acute (&#237;) -- - // unicode characters can be detected by checking the hex value of a character -- // 00 - 7F : ascii char (roman alphabet + punctuation) -+ // 00 - 7F : ascii char (control chars + roman alphabet + punctuation) - // 80 - BF : byte 2, 3 or 4 of a unicode char - // C0 - DF : 1st byte of 2-byte char - // E0 - EF : 1st byte of 3-byte char -@@ -408,39 +448,27 @@ class hotpot_source_hp extends hotpot_source { - '[\x80-\xff]'.'/'; - $callback = array($this, 'utf8_char_to_html_entity'); - $this->filecontents = preg_replace_callback($search, $callback, $this->filecontents); -+ -+ // the following control characters are not allowed in XML -+ // and need to be removed because they will break xmlize() -+ // basically this is the range 00-1F and the delete key 7F -+ // but excluding tab 09, newline 0A and carriage return 0D -+ $search = '/[\x00-\x08\x0b-\x0c\x0e-\x1f\x7f]/'; -+ $this->filecontents = preg_replace($search, '', $this->filecontents); - } - } - - function utf8_char_to_html_entity($char, $ampersand='&') { - // thanks to: http://www.zend.com/codex.php?id=835&single=1 -- - if (is_array($char)) { - $char = $char[0]; - } -- -- // array used to figure what number to decrement from character order value -- // according to number of characters used to map unicode to ascii by utf-8 -- static $HOTPOT_UTF8_DECREMENT = array( -- 1 => 0, -- 2 => 192, -- 3 => 224, -- 4 => 240 -- ); -- -- // the number of bits to shift each character by -- static $HOTPOT_UTF8_SHIFT = array( -- 1 => array(0=>0), -- 2 => array(0=>6, 1=>0), -- 3 => array(0=>12, 1=>6, 2=>0), -- 4 => array(0=>18, 1=>12, 2=>6, 3=>0) -- ); -- - $dec = 0; - $len = strlen($char); - for ($pos=0; $pos<$len; $pos++) { - $ord = ord ($char{$pos}); -- $ord -= ($pos ? 128 : $HOTPOT_UTF8_DECREMENT[$len]); -- $dec += ($ord << $HOTPOT_UTF8_SHIFT[$len][$pos]); -+ $ord -= ($pos ? 128 : $this->utf8_decrement[$len]); -+ $dec += ($ord << $this->utf8_shift[$len][$pos]); - } - - return $ampersand.'#x'.sprintf('%04X', $dec).';'; -@@ -449,9 +477,11 @@ class hotpot_source_hp extends hotpot_source { - /** - * xml_value - * -+ * @uses $CFG - * @param xxx $tags - * @param xxx $more_tags (optional, default=null) - * @param xxx $default (optional, default='') -+ * @param xxx $nl2br (optional, default=true) - * @return xxx - */ - function xml_value($tags, $more_tags=null, $default='', $nl2br=true) { -@@ -479,7 +509,7 @@ class hotpot_source_hp extends hotpot_source { - if (! is_array($value)) { - return null; - } -- if(! array_key_exists($tag, $value)) { -+ if (! array_key_exists($tag, $value)) { - return null; - } - $value = $value[$tag]; -@@ -527,6 +557,10 @@ class hotpot_source_hp extends hotpot_source { - $callback = array($this, 'xml_value_nl2br'); - $value = preg_replace_callback($search, $callback, $value); - } -+ -+ // encode unicode characters as HTML entities -+ // (in particular, accented charaters that have not been encoded by HP) -+ $value = hotpot_textlib('utf8_to_entities', $value); - } - return $value; - } -@@ -585,7 +619,7 @@ class hotpot_source_hp extends hotpot_source { - * - * @param xxx $tags - * @param xxx $more_tags (optional, default=null) -- * @param xxx $default (optional, default='') -+ * @param xxx $default (optional, default=0) - * @return xxx - */ - function xml_value_int($tags, $more_tags=null, $default=0) { -@@ -603,7 +637,8 @@ class hotpot_source_hp extends hotpot_source { - * @param xxx $tags - * @param xxx $more_tags (optional, default=null) - * @param xxx $default (optional, default='') -- * @param xxx $convert_to_unicode (optional, default=false) -+ * @param xxx $nl2br (optional, default=true) -+ * @param xxx $convert_to_unicode (optional, default=true) - * @return xxx - */ - function xml_value_js($tags, $more_tags=null, $default='', $nl2br=true, $convert_to_unicode=true) { -@@ -619,31 +654,17 @@ class hotpot_source_hp extends hotpot_source { - * @return xxx - */ - function js_value_safe($str, $convert_to_unicode=false) { -- // encode a string for javascript -- static $replace_pairs = array( -- // backslashes and quotes -- '\\'=>'\\\\', "'"=>"\\'", '"'=>'\\"', -- // newlines (win = "\r\n", mac="\r", linux/unix="\n") -- "\r\n"=>'\\n', "\r"=>'\\n', "\n"=>'\\n', -- // other (closing tag is for XHTML compliance) -- "\0"=>'\\0', '</'=>'<\\/' -- ); -- -- // convert unicode chars to html entities, if required -- // Note that this will also decode named entities such as &apos; and &quot; -- // so we have to put "strtr()" AFTER this call to textlib::utf8_to_entities() -- if ($convert_to_unicode) { -- $str = hotpot_textlib('utf8_to_entities', $str, false, true); -- } -- -- $str = strtr($str, $replace_pairs); -+ global $CFG; - -- // convert (hex and decimal) html entities to javascript unicode, if required -- if ($convert_to_unicode) { -- $search = '/&#x([0-9A-F]+);/i'; -+ if ($convert_to_unicode && $CFG->hotpot_enableobfuscate) { -+ // convert ALL chars to Javascript unicode - $callback = array($this, 'js_unicode_char'); -- $str = preg_replace_callback($search, $callback, $str); -+ $str = preg_replace_callback($this->search_unicode_chars, $callback, $str); -+ } else { -+ // escape backslashes, quotes, etc -+ $str = strtr($str, $this->javascript_replace_pairs); - } -+ - return $str; - } - -@@ -654,7 +675,10 @@ class hotpot_source_hp extends hotpot_source { - * @return xxx - */ - function js_unicode_char($match) { -- return sprintf('\\u%04s', $match[1]); -+ $num = $match[0]; // the UTF-8 char -+ $num = hotpot_textlib('utf8ord', $num); -+ $num = strtoupper(dechex($num)); -+ return sprintf('\\u%04s', $num); - } - - /** -diff --git a/version.php b/version.php -index 924fbd8..c52a598 100644 ---- a/version.php -+++ b/version.php -@@ -29,7 +29,19 @@ - // prevent direct access to this script - defined('MOODLE_INTERNAL') || die(); - --if (floatval($GLOBALS['CFG']->release) <= 2.6) { -+if (empty($CFG)) { -+ global $CFG; -+} -+ -+if (isset($CFG->release)) { -+ $moodle_26 = version_compare($CFG->release, '2.6.99', '<='); -+} else if (isset($CFG->yui3version)) { -+ $moodle_26 = version_compare($CFG->yui3version, '3.13.99', '<='); -+} else { -+ $moodle_26 = false; -+} -+ -+if ($moodle_26) { - $plugin = new stdClass(); - } - -@@ -37,9 +49,9 @@ $plugin->cron = 0; - $plugin->component = 'mod_hotpot'; - $plugin->maturity = MATURITY_STABLE; // ALPHA=50, BETA=100, RC=150, STABLE=200 - $plugin->requires = 2010112400; // Moodle 2.0 --$plugin->release = '2015.02.11 (62)'; --$plugin->version = 2015021162; -+$plugin->release = '2015-10-28 (79)'; -+$plugin->version = 2015102879; - --if (floatval($GLOBALS['CFG']->release) <= 2.6) { -+if ($moodle_26) { - $module = clone($plugin); - } -\ No newline at end of file diff --git a/html/moodle2/mod/hvp/.travis.yml b/html/moodle2/mod/hvp/.travis.yml new file mode 100755 index 0000000000..f333457a11 --- /dev/null +++ b/html/moodle2/mod/hvp/.travis.yml @@ -0,0 +1,41 @@ +language: php + +sudo: false + +cache: + directories: + - $HOME/.composer/cache + +php: + - 5.6 + - 7.0 + +env: + global: + - MOODLE_BRANCH=MOODLE_30_STABLE + - IGNORE_PATHS=library + matrix: + - DB=pgsql + - DB=mysqli + +before_install: + - phpenv config-rm xdebug.ini + - cd ../.. + - composer selfupdate + - composer create-project -n --no-dev moodlerooms/moodle-plugin-ci ci ^1 + - export PATH="$(cd ci/bin; pwd):$(cd ci/vendor/bin; pwd):$PATH" + +install: + - moodle-plugin-ci install + +script: + - moodle-plugin-ci phplint + - moodle-plugin-ci phpcpd + - moodle-plugin-ci phpmd + - moodle-plugin-ci codechecker + - moodle-plugin-ci csslint + - moodle-plugin-ci shifter + - moodle-plugin-ci jshint + - moodle-plugin-ci validate + - moodle-plugin-ci phpunit + - moodle-plugin-ci behat \ No newline at end of file diff --git a/html/moodle2/mod/hvp/LICENSE b/html/moodle2/mod/hvp/LICENSE new file mode 100755 index 0000000000..ece019f0a2 --- /dev/null +++ b/html/moodle2/mod/hvp/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/> + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {description} + Copyright (C) {year} {fullname} + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + {signature of Ty Coon}, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. + diff --git a/html/moodle2/mod/hvp/README.md b/html/moodle2/mod/hvp/README.md new file mode 100755 index 0000000000..289ba8e53d --- /dev/null +++ b/html/moodle2/mod/hvp/README.md @@ -0,0 +1,75 @@ +# H5P Moodle Plugin + +This is the 1.0-rc version of the H5P plugin for Moodle. That means that this +version is feature complete but you might encounter bugs or issues that will +not be present in the final version. + +Create and add rich content inside your LMS for free. Some examples of what you +get with H5P are Interactive Video, Quizzes, Collage and Timeline. + +## Description + +One of the great benefits with using H5P is that it gives you access to lots of +different [interactive content types](https://h5p.org/content-types-and-applications). + +Another great benefit with H5P is that it allows you to easily share and reuse +content. To reuse content, you just download the H5P you would like to edit and +make your changes – e.g. translate to a new language or adjust it to a new +situation. + +H5P is: + +* Open Source +* Free to Use +* HTML5 +* Responsive + +The H5P community is actively contributing to improve H5P. Updates and new +features are continuously made available on the community portal +[H5P.org](https://h5p.org). + +View our [setup for Moodle](https://h5p.org/moodle) to get information on how +to get started with H5P. + +## Install + +### Beta Version +If you can't wait for the final release or simply wish to help test the plugin, +you can download the beta version. +Here is an example. Remember to replace the version number with the latest from +the [releases](https://github.com/h5p/h5p-moodle-plugin/releases) page: +``` +git clone --branch 1.0-rc.2 https://github.com/h5p/h5p-moodle-plugin.git hvp && cd hvp && git submodule update --init +``` + +It's not recommended to download the tag/version from the +[releases](https://github.com/h5p/h5p-moodle-plugin/releases) page as you would +also have to download the appropriate version of +[h5p-php-library](https://github.com/h5p/h5p-php-library/releases) and +[h5p-editor-php-library](https://github.com/h5p/h5p-php-library/releases) to +put inside the `library` and `editor` folders. + +### Development Version +Warning! Using the development version may cause strange bugs, so do not use it +for production! + +Inside your `moodle/mod` folder you run the following command: +``` +git clone https://github.com/h5p/h5p-moodle-plugin.git hvp && cd hvp && git submodule update --init +``` + +### Enabling The Plugin +In Moodle, go to administrator -> plugin overview, and press 'Update database'. + +## Settings + +Settings can be found at: Site Administration -> Plugins -> Activity Modules -> H5P + +## Contributing + +Feel free to contribute by: +* Submitting translations +* Testing and creating issues. But remember to check if the issues is already +reported before creating a new one. Perhaps you can contribute to an already +existing issue? +* Solving issues and submitting code through Pull Requests. diff --git a/html/moodle2/mod/hvp/ajax.php b/html/moodle2/mod/hvp/ajax.php new file mode 100755 index 0000000000..1268df2469 --- /dev/null +++ b/html/moodle2/mod/hvp/ajax.php @@ -0,0 +1,262 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * Responsible for handling AJAX requests related to H5P. + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +define('AJAX_SCRIPT', true); +require(__DIR__ . '/../../config.php'); +require_once("locallib.php"); + +$action = required_param('action', PARAM_ALPHA); +switch($action) { + + /* + * Handle user data reporting + * + * Type: HTTP POST + * + * Parameters: + * - content_id + * - data_type + * - sub_content_id + */ + case 'contentsuserdata': + \mod_hvp\content_user_data::handle_ajax(); + break; + + /* + * Handle restricting H5P libraries + * + * Type: HTTP GET + * + * Parameters: + * - library_id + * - restrict (0 or 1) + * - token + */ + case 'restrictlibrary': + + // Check permissions + $context = \context_system::instance(); + if (!has_capability('mod/hvp:restrictlibraries', $context)) { + \H5PCore::ajaxError(get_string('nopermissiontorestrict', 'hvp')); + http_response_code(403); + break; + } + + $library_id = required_param('library_id', PARAM_INT); + $restrict = required_param('restrict', PARAM_INT); + + if (!\H5PCore::validToken('library_' . $library_id, required_param('token', PARAM_RAW))) { + \H5PCore::ajaxError(get_string('invalidtoken', 'hvp')); + exit; + } + + hvp_restrict_library($library_id, $restrict); + header('Cache-Control: no-cache'); + header('Content-Type: application/json'); + echo json_encode(array( + 'url' => (new moodle_url('/mod/hvp/ajax.php', array( + 'action' => 'restrict_library', + 'token' => \H5PCore::createToken('library_' . $library_id), + 'restrict' => ($restrict === '1' ? 0 : 1), + 'library_id' => $library_id + )))->out(false))); + break; + + /* + * Collecting data needed by H5P content upgrade + * + * Type: HTTP GET + * + * Parameters: + * - library (Format: /<machine-name>/<major-version>/<minor-version>) + */ + case 'getlibrarydataforupgrade': + + // Check permissions + $context = \context_system::instance(); + if (!has_capability('mod/hvp:updatelibraries', $context)) { + \H5PCore::ajaxError(get_string('nopermissiontoupgrade', 'hvp')); + http_response_code(403); + break; + } + + $library = required_param('library', PARAM_TEXT); + $library = explode('/', substr($library, 1)); + + if (count($library) !== 3) { + http_response_code(422); + return; + } + + $library = hvp_get_library_upgrade_info($library[0], $library[1], $library[2]); + + header('Cache-Control: no-cache'); + header('Content-Type: application/json'); + print json_encode($library); + + break; + + /* + * Saving upgraded content, and returning next batch to process + * + * Type: HTTP POST + * + * Parameters: + * - library_id + */ + case 'libraryupgradeprogress': + // Check upgrade permissions + $context = \context_system::instance(); + if (!has_capability('mod/hvp:updatelibraries', $context)) { + \H5PCore::ajaxError(get_string('nopermissiontoupgrade', 'hvp')); + http_response_code(403); + break; + } + + // Because of a confirmed bug in PHP, filter_input(INPUT_SERVER, ...) will return null on some versions of FCGI/PHP (5.4 and probably older versions as well), ref. https://bugs.php.net/bug.php?id=49184 + if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $library_id = required_param('library_id', PARAM_INT); + $out = hvp_content_upgrade_progress($library_id); + header('Cache-Control: no-cache'); + header('Content-Type: application/json'); + print json_encode($out); + } else { + // Only allow POST. + http_response_code(405); + } + break; + + /* + * Handle set finished / storing grades + * + * Type: HTTP GET + * + * Parameters: + * - contentId + * - score + * - maxScore + */ + case 'setfinished': + \mod_hvp\user_grades::handle_ajax(); + break; + + /* + * Provide data for results view + * + * Type: HTTP GET + * + * Parameters: + * int content_id + * int offset + * int limit + * int sortBy + * int sortDir + * string[] filters + */ + case 'results': + $results = new \mod_hvp\results(); + $results->print_results(); + break; + + /* + * Load list of libraries or details for library. + * + * Parameters: + * string machineName + * int majorVersion + * int minorVersion + */ + case 'libraries': + /// Get parameters + $name = optional_param('machineName', '', PARAM_TEXT); + $major = optional_param('majorVersion', 0, PARAM_INT); + $minor = optional_param('minorVersion', 0, PARAM_INT); + + $editor = \mod_hvp\framework::instance('editor'); + + header('Cache-Control: no-cache'); + header('Content-type: application/json'); + + if (!empty($name)) { + print $editor->getLibraryData($name, $major, $minor, \mod_hvp\framework::get_language()); + new \mod_hvp\event( + 'library', NULL, + NULL, NULL, + $name, $major . '.' . $minor + ); + } + else { + print $editor->getLibraries(); + } + + break; + + /* + * Handle file upload through the editor. + * + * Parameters: + * int contentId + * int contextId + */ + case 'files': + global $DB; + // TODO: Check permissions + + if (!\H5PCore::validToken('editorajax', required_param('token', PARAM_RAW))) { + \H5PCore::ajaxError(get_string('invalidtoken', 'hvp')); + exit; + } + + // Get Content ID and Context ID for upload + $contentid = required_param('contentId', PARAM_INT); + $contextid = required_param('contextId', PARAM_INT); + + // Create file + $file = new H5peditorFile(\mod_hvp\framework::instance('interface')); + if (!$file->isLoaded()) { + H5PCore::ajaxError(get_string('filenotfound', 'hvp')); + break; + } + + // Make sure file is valid + if ($file->validate()) { + $core = \mod_hvp\framework::instance('core'); + // Save the valid file + $file_id = $core->fs->saveFile($file, $contentid, $contextid); + + // Track temporary files for later cleanup + $DB->insert_record_raw('hvp_tmpfiles', array( + 'id' => $file_id + ), false, false, true); + } + + $file->printResult(); + break; + + /* + * Throw error if AJAX isnt handeled + */ + default: + throw new coding_exception('Unhandled AJAX'); + break; +} diff --git a/html/moodle2/mod/hvp/autoloader.php b/html/moodle2/mod/hvp/autoloader.php new file mode 100755 index 0000000000..48dd8e2cb8 --- /dev/null +++ b/html/moodle2/mod/hvp/autoloader.php @@ -0,0 +1,58 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +defined('MOODLE_INTERNAL') || die(); + +/** + * A simple autoloader which makes it easy to load classes when you need them. + * + * @param string $class name + */ +function hvp_autoloader($class) { + global $CFG; + static $classmap; + if (!isset($classmap)) { + $classmap = array( + // Core. + 'H5PCore' => 'library/h5p.classes.php', + 'H5PFrameworkInterface' => 'library/h5p.classes.php', + 'H5PContentValidator' => 'library/h5p.classes.php', + 'H5PValidator' => 'library/h5p.classes.php', + 'H5PStorage' => 'library/h5p.classes.php', + 'H5PExport' => 'library/h5p.classes.php', + 'H5PDevelopment' => 'library/h5p-development.class.php', + 'H5PFileStorage' => 'library/h5p-file-storage.interface.php', + 'H5PDefaultStorage' => 'library/h5p-default-storage.class.php', + 'H5PEventBase' => 'library/h5p-event-base.class.php', + + // Editor. + 'H5peditor' => 'editor/h5peditor.class.php', + 'H5peditorFile' => 'editor/h5peditor-file.class.php', + 'H5peditorStorage' => 'editor/h5peditor-storage.interface.php', + + // Plugin specific classes are loaded by Moodle. + ); + } + + if (isset($classmap[$class])) { + require_once($CFG->dirroot . '/mod/hvp/' . $classmap[$class]); + } +} +spl_autoload_register('hvp_autoloader'); diff --git a/html/moodle2/mod/hvp/backup/moodle2/backup_hvp_activity_task.class.php b/html/moodle2/mod/hvp/backup/moodle2/backup_hvp_activity_task.class.php new file mode 100755 index 0000000000..bb94018710 --- /dev/null +++ b/html/moodle2/mod/hvp/backup/moodle2/backup_hvp_activity_task.class.php @@ -0,0 +1,81 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * Defines backup_hvp_activity_task class + * + * @package mod_hvp + * @category backup + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->dirroot . '/mod/hvp/backup/moodle2/backup_hvp_stepslib.php'); + +/** + * Provides the steps to perform one complete backup of a H5P instance + */ +class backup_hvp_activity_task extends backup_activity_task { + + /** + * No specific settings for this activity + */ + protected function define_my_settings() { + } + + /** + * Defines a backup step to store the instance data in the hvp.xml file + */ + protected function define_my_steps() { + $this->add_step(new backup_hvp_activity_structure_step('hvp_structure', 'hvp.xml')); + + // Ideally this step would only run once per backup, unfortunately, the + // nature of the backup system does not allow for activities to have + // shared resources. + $this->add_step(new backup_hvp_libraries_structure_step('hvp_libraries', 'hvp_libraries.xml')); + + // One suggestion for increasing performance would be to only add the + // libraries to one activity, but then that would have to be restored + // before the other activities. + + // Another suggestion is to reduce the is to reduce the size of the XML + // by reading the data from JSON again after restoring. + } + + /** + * Encodes URLs to the index.php and view.php scripts + * + * @param string $content some HTML text that eventually contains URLs to the activity instance scripts + * @return string the content with the URLs encoded + */ + static public function encode_content_links($content) { + global $CFG; + + $base = preg_quote($CFG->wwwroot,"/"); + + // Link to the list of glossaries + $search="/(".$base."\/mod\/hvp\/index.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@HVPINDEX*$2@$', $content); + + // Link to hvp view by moduleid + $search="/(".$base."\/mod\/hvp\/view.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@HVPVIEWBYID*$2@$', $content); + + return $content; + } +} diff --git a/html/moodle2/mod/hvp/backup/moodle2/backup_hvp_stepslib.php b/html/moodle2/mod/hvp/backup/moodle2/backup_hvp_stepslib.php new file mode 100755 index 0000000000..f8f644ea93 --- /dev/null +++ b/html/moodle2/mod/hvp/backup/moodle2/backup_hvp_stepslib.php @@ -0,0 +1,181 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * Defines backup structure steps for both hvp content and hvp libraries. + * + * @package mod_hvp + * @category backup + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +/** + * Define the complete hvp structure for backup, with file and id annotations + */ +class backup_hvp_activity_structure_step extends backup_activity_structure_step { + + protected function define_structure() { + + // To know if we are including userinfo + $userinfo = $this->get_setting_value('userinfo'); + + // Define each element separated + $hvp = new backup_nested_element('hvp', array('id'), array( + 'name', + 'machine_name', + 'major_version', + 'minor_version', + 'intro', + 'introformat', + 'json_content', + 'embed_type', + 'disable', + 'content_type', + 'author', + 'license', + 'meta_keywords', + 'meta_description', + 'slug', + 'timecreated', + 'timemodified' + )); + + // User data + $content_user_data_entries = new backup_nested_element('content_user_data'); + $content_user_data = new backup_nested_element('entry', array( + 'user_id', // Annotated + 'sub_content_id' + ), array( + 'data_id', + 'data', + 'preloaded', + 'delete_on_content_change', + )); + + // Build the tree + + $hvp->add_child($content_user_data_entries); + $content_user_data_entries->add_child($content_user_data); + + // Define sources + + // Uses library name and version instead of main_library_id. + $hvp->set_source_sql('SELECT h.id, hl.machine_name, + hl.major_version, + hl.minor_version, + h.name, h.intro, h.introformat, h.json_content, + h.embed_type, h.disable, h.content_type, h.author, + h.license, h.meta_keywords, h.meta_description, + h.slug, h.timecreated, h.timemodified + FROM {hvp} h + JOIN {hvp_libraries} hl ON hl.id = h.main_library_id + WHERE h.id = ?', array(backup::VAR_ACTIVITYID)); + + // All the rest of elements only happen if we are including user info + if ($userinfo) { + $content_user_data->set_source_table('hvp_content_user_data', array('hvp_id' => backup::VAR_PARENTID)); + } + + // Define id annotations + $content_user_data->annotate_ids('user', 'user_id'); + // In an ideal world we would use the main_library_id and annotate that + // but since we cannot know the required dependencies of the content + // without parsing json_content and crawling the libraries_libraries + // (library dependencies) table it's much easier to just include all + // installed libraries. + + // Define file annotations + $hvp->annotate_files('mod_hvp', 'intro', null, null); + $hvp->annotate_files('mod_hvp', 'content', null, null); + + // Return the root element (hvp), wrapped into standard activity structure + return $this->prepare_activity_structure($hvp); + } +} + +/** + * Structure step in charge of constructing the hvp_libraries.xml file for + * all the H5P libraries. + */ +class backup_hvp_libraries_structure_step extends backup_structure_step { + + protected function define_structure() { + + // Define each element separate. + + // Libraries + $libraries = new backup_nested_element('hvp_libraries'); + $library = new backup_nested_element('library', array('id'), array( + 'title', + 'machine_name', + 'major_version', + 'minor_version', + 'patch_version', + 'runnable', + 'fullscreen', + 'embed_types', + 'preloaded_js', + 'preloaded_css', + 'drop_library_css', + 'semantics', + 'restricted', + 'tutorial_url' + )); + + // Library translations + $translations = new backup_nested_element('translations'); + $translation = new backup_nested_element('translation', array( + 'language_code' + ), array( + 'language_json' + )); + + // Library dependencies + $dependencies = new backup_nested_element('dependencies'); + $dependency = new backup_nested_element('dependency', array( + 'required_library_id' + ), array( + 'dependency_type' + )); + + // Build the tree + $libraries->add_child($library); + + $library->add_child($translations); + $translations->add_child($translation); + + $library->add_child($dependencies); + $dependencies->add_child($dependency); + + // Define sources + + $library->set_source_table('hvp_libraries', array()); + + $translation->set_source_table('hvp_libraries_languages', array('library_id' => backup::VAR_PARENTID)); + + $dependency->set_source_table('hvp_libraries_libraries', array('library_id' => backup::VAR_PARENTID)); + + // Define file annotations + $context = \context_system::instance(); + $library->annotate_files('mod_hvp', 'libraries', null, $context->id); + + // Return root element + return $libraries; + } +} diff --git a/html/moodle2/mod/hvp/backup/moodle2/restore_hvp_activity_task.class.php b/html/moodle2/mod/hvp/backup/moodle2/restore_hvp_activity_task.class.php new file mode 100755 index 0000000000..ac50a775ee --- /dev/null +++ b/html/moodle2/mod/hvp/backup/moodle2/restore_hvp_activity_task.class.php @@ -0,0 +1,112 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * Describe how H5P activites are to be restored from backup + * + * @package mod_hvp + * @category backup + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->dirroot . '/mod/hvp/backup/moodle2/restore_hvp_stepslib.php'); // Because it exists (must). + +/** + * hvp restore task that provides all the settings and steps to perform one + * complete restore of the activity + */ +class restore_hvp_activity_task extends restore_activity_task { + + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity. + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // Add H5P libraries + $this->add_step(new restore_hvp_libraries_structure_step('hvp_structure', 'hvp_libraries.xml')); + + // Add H5P content + $this->add_step(new restore_hvp_activity_structure_step('hvp_structure', 'hvp.xml')); + } + + /** + * Define the contents in the activity that must be + * processed by the link decoder + */ + static public function define_decode_contents() { + $contents = array(); + + $contents[] = new restore_decode_content('hvp', array('intro'), 'hvp'); + + return $contents; + } + + /** + * Define the decoding rules for links belonging + * to the activity to be executed by the link decoder + */ + static public function define_decode_rules() { + $rules = array(); + + $rules[] = new restore_decode_rule('HVPVIEWBYID', '/mod/hvp/view.php?id=$1', 'course_module'); + $rules[] = new restore_decode_rule('HVPINDEX', '/mod/hvp/index.php?id=$1', 'course'); + + return $rules; + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * hvp logs. It must return one array + * of {@link restore_log_rule} objects + */ + static public function define_restore_log_rules() { + $rules = array(); + + $rules[] = new restore_log_rule('hvp', 'add', 'view.php?id={course_module}', '{hvp}'); + $rules[] = new restore_log_rule('hvp', 'update', 'view.php?id={course_module}', '{hvp}'); + $rules[] = new restore_log_rule('hvp', 'view', 'view.php?id={course_module}', '{hvp}'); + + return $rules; + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * course logs. It must return one array + * of {@link restore_log_rule} objects + * + * Note this rules are applied when restoring course logs + * by the restore final task, but are defined here at + * activity level. All them are rules not linked to any module instance (cmid = 0) + */ + static public function define_restore_log_rules_for_course() { + $rules = array(); + + $rules[] = new restore_log_rule('hvp', 'view all', 'index.php?id={course}', null); + + return $rules; + } +} diff --git a/html/moodle2/mod/hvp/backup/moodle2/restore_hvp_stepslib.php b/html/moodle2/mod/hvp/backup/moodle2/restore_hvp_stepslib.php new file mode 100755 index 0000000000..751eaaf06c --- /dev/null +++ b/html/moodle2/mod/hvp/backup/moodle2/restore_hvp_stepslib.php @@ -0,0 +1,255 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * Restore structure step for both hvp content and hvp libraries + * + * @package mod_hvp + * @category backup + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/** + * Structure step to restore one H5P activity + */ +class restore_hvp_activity_structure_step extends restore_activity_structure_step { + + protected function define_structure() { + $paths = array(); + $userinfo = $this->get_setting_value('userinfo'); + + // Restore activities + $paths[] = new restore_path_element('hvp', '/activity/hvp'); + + if ($userinfo) { + // Restore content state + $paths[] = new restore_path_element('content_user_data', '/activity/hvp/content_user_data/entry'); + } + + // Return the paths wrapped into standard activity structure + return $this->prepare_activity_structure($paths); + } + + protected function process_hvp($data) { + global $DB; + + $data = (object) $data; + $data->course = $this->get_courseid(); + $data->main_library_id = \restore_hvp_libraries_structure_step::get_library_id($data); + + $data->timecreated = $this->apply_date_offset($data->timecreated); + $data->timemodified = $this->apply_date_offset($data->timemodified); + + // insert the hvp record + $newitemid = $DB->insert_record('hvp', $data); + // immediately after inserting "activity" record, call this + $this->apply_activity_instance($newitemid); + } + + protected function process_content_user_data($data) { + global $DB; + + $data = (object) $data; + $data->user_id = $this->get_mappingid('user', $data->user_id); + $data->hvp_id = $this->get_new_parentid('hvp'); + + $DB->insert_record('hvp_content_user_data', $data); + } + + protected function after_execute() { + // Add files for intro field + $this->add_related_files('mod_hvp', 'intro', null); + + // Add hvp related files + $this->add_related_files('mod_hvp', 'content', 'hvp'); + } +} + +/** + * Structure step to restore H5P libraries + */ +class restore_hvp_libraries_structure_step extends restore_activity_structure_step { + + protected function define_structure() { + $paths = array(); + + // Restore libraries first + $paths[] = new restore_path_element('hvp_library', '/hvp_libraries/library'); + + // Add translations + $paths[] = new restore_path_element('hvp_library_translation', '/hvp_libraries/library/translations/translation'); + + // and dependencies + $paths[] = new restore_path_element('hvp_library_dependency', '/hvp_libraries/library/dependencies/dependency'); + + // Return the paths wrapped into standard activity structure + return $this->prepare_activity_structure($paths); + } + + protected function process_hvp_library($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + unset($data->id); + + $libraryid = self::get_library_id($data); + if (!$libraryid) { + // There is no updating of libraries. If an older patch version exists + // on the site that one will be used instead of the new one in the backup. + // This is due to the default behavior when files are restored in Moodle. + + // Restore library + $libraryid = $DB->insert_record('hvp_libraries', $data); + + // Update libraries cache + self::get_library_id($data, $libraryid); + } + + // Keep track of libraries for translations and dependencies + $this->set_mapping('hvp_library', $oldid, $libraryid); + + // Update any dependencies that require this library + $this->update_missing_dependencies($oldid, $libraryid); + } + + protected function process_hvp_library_translation($data) { + global $DB; + + $data = (object) $data; + $data->library_id = $this->get_new_parentid('hvp_library'); + + // check that translations doesnt exists + $translation = $DB->get_record_sql( + 'SELECT id + FROM {hvp_libraries_languages} + WHERE library_id = ? + AND language_code = ?', + array($data->library_id, + $data->language_code) + ); + + if (empty($translation)) { + // only restore translations if library has been restored + $newitemid = $DB->insert_record('hvp_libraries_languages', $data); + } + } + + protected function process_hvp_library_dependency($data) { + global $DB; + + $data = (object) $data; + $data->library_id = $this->get_new_parentid('hvp_library'); + + $new_required_library_id = $this->get_mappingid('hvp_library', $data->required_library_id); + if ($new_required_library_id) { + $data->required_library_id = $new_required_library_id; + + // check that the dependency doesn't exists + $dependency = $DB->get_record_sql( + 'SELECT id + FROM {hvp_libraries_libraries} + WHERE library_id = ? + AND required_library_id = ?', + array($data->library_id, + $data->required_library_id) + ); + if (empty($dependency)) { + $DB->insert_record('hvp_libraries_libraries', $data); + } + } + else { + // The required dependency hasn't been restored yet. We need to add this dependency later. + $this->update_missing_dependencies($data->required_library_id, null, $data); + } + } + + protected function after_execute() { + // Add files for libraries + $context = \context_system::instance(); + $this->add_related_files('mod_hvp', 'libraries', null, $context->id); + } + + /** + * Cache to reduce queries. + */ + public static function get_library_id(&$library, $set = null) { + static $keytoid; + global $DB; + + $key = $library->machine_name . ' ' . $library->major_version . '.' . $library->minor_version; + if (is_null($keytoid)) { + $keytoid = array(); + } + if ($set !== null) { + $keytoid[$key] = $set; + } + elseif (!isset($keytoid[$key])) { + $lib = $DB->get_record_sql( + 'SELECT id + FROM {hvp_libraries} + WHERE machine_name = ? + AND major_version = ? + AND minor_version = ?', + array($library->machine_name, + $library->major_version, + $library->minor_version) + ); + + // Non existing = false + $keytoid[$key] = (empty($lib) ? false : $lib->id); + } + + return $keytoid[$key]; + } + + /** + * Keep track of missing dependencies since libraries aren't inserted + * in any special order + */ + private function update_missing_dependencies($oldid, $newid, $setmissing = null) { + static $missingdeps; + global $DB; + + if (is_null($missingdeps)) { + $missingdeps = array(); + } + + if ($setmissing !== null) { + $missingdeps[$oldid][] = $setmissing; + } + elseif (isset($missingdeps[$oldid])) { + foreach ($missingdeps[$oldid] as $missingdep) { + $missingdep->required_library_id = $newid; + + // check that the dependency doesn't exists + $dependency = $DB->get_record_sql( + 'SELECT id + FROM {hvp_libraries_libraries} + WHERE library_id = ? + AND required_library_id = ?', + array($missingdep->library_id, + $missingdep->required_library_id) + ); + if (empty($dependency)) { + $DB->insert_record('hvp_libraries_libraries', $missingdep); + } + } + unset($missingdeps[$oldid]); + } + } +} diff --git a/html/moodle2/mod/hvp/classes/content_user_data.php b/html/moodle2/mod/hvp/classes/content_user_data.php new file mode 100755 index 0000000000..67a5e1ec74 --- /dev/null +++ b/html/moodle2/mod/hvp/classes/content_user_data.php @@ -0,0 +1,219 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * The mod_hvp content user data. + * + * @package mod_hvp + * @since Moodle 2.7 + * @copyright 2016 Joubel AS + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_hvp; + +/** + * Class content_user_data handles user data and corresponding db operations. + * + * @package mod_hvp + */ +class content_user_data { + + /** + * Retrieves ajax parameters for content and update or delete + * user data depending on params. + * + * @throws \coding_exception + */ + public static function handle_ajax() { + global $DB; + + // Query String Parameters. + $content_id = required_param('content_id', PARAM_INT); + $data_id = required_param('data_type', PARAM_RAW); + $sub_content_id = required_param('sub_content_id', PARAM_INT); + + // Form Data. + $data = optional_param('data', null, PARAM_RAW); + $pre_load = optional_param('preload', null, PARAM_INT); + $invalidate = optional_param('invalidate', null, PARAM_INT); + + if ($content_id === null || $data_id === null || $sub_content_id === null) { + \H5PCore::ajaxError(get_string('missingparameters', 'hvp')); + exit; // Missing parameters. + } + + // Saving data + if ($data !== NULL && $pre_load !== NULL && $invalidate !== NULL) { + + // Validate token + if (!\H5PCore::validToken('contentuserdata', required_param('token', PARAM_RAW))) { + \H5PCore::ajaxError(get_string('invalidtoken', 'hvp')); + exit; + } + + // Use context id if supplied + $context_id = optional_param('contextId', null, PARAM_INT); + if ($context_id) { + $context = \context::instance_by_id($context_id); + } + else { // Otherwise try to find it from content id + $context = \context_course::instance($DB->get_field('hvp', 'course', array('id' => $content_id))); + } + + // Check permissions + if (!has_capability('mod/hvp:savecontentuserdata', $context)) { + \H5PCore::ajaxError(get_string('nopermissiontosavecontentuserdata', 'hvp')); + http_response_code(403); + exit; + } + + if ($data === '0') { + // Delete user data. + self::delete_user_data($content_id, $sub_content_id, $data_id); + } else { + // Save user data. + self::save_user_data($content_id, $sub_content_id, $data_id, $pre_load, $invalidate, $data); + } + \H5PCore::ajaxSuccess(); + } + else { + // Fetch user data + $user_data = self::get_user_data($content_id, $sub_content_id, $data_id); + + if ($user_data === false) { + // Did not find data, return nothing + \H5PCore::ajaxSuccess(); + } + else { + // Found data, return encoded data + \H5PCore::ajaxSuccess($user_data->data); + } + } + exit; + } + + /** + * Get user data for content. + * + * @param $content_id + * @param $sub_content_id + * @param $data_id + * + * @return mixed + */ + public static function get_user_data($content_id, $sub_content_id, $data_id) { + global $DB, $USER; + + $result = $DB->get_record('hvp_content_user_data', array( + 'user_id' => $USER->id, + 'hvp_id' => $content_id, + 'sub_content_id' => $sub_content_id, + 'data_id' => $data_id + ) + ); + + return $result; + } + + /** + * Save user data for specific content in database. + * + * @param $content_id + * @param $sub_content_id + * @param $data_id + * @param $pre_load + * @param $invalidate + * @param $data + */ + public static function save_user_data($content_id, $sub_content_id, $data_id, $pre_load, $invalidate, $data) { + global $DB, $USER; + + // Determine if we should update or insert. + $update = self::get_user_data($content_id, $sub_content_id, $data_id); + + // Wash values to ensure 0 or 1. + $pre_load = ($pre_load === '0' || $pre_load === 0) ? 0 : 1; + $invalidate = ($invalidate === '0' || $invalidate === 0) ? 0 : 1; + + // New data to be inserted. + $new_data = (object)array( + 'user_id' => $USER->id, + 'hvp_id' => $content_id, + 'sub_content_id' => $sub_content_id, + 'data_id' => $data_id, + 'data' => $data, + 'preloaded' => $pre_load, + 'delete_on_content_change' => $invalidate + ); + + // Does not exist. + if ($update === false) { + // Insert new data. + $DB->insert_record('hvp_content_user_data', $new_data); + } else { + // Get old data id. + $new_data->id = $update->id; + + // Update old data. + $DB->update_record('hvp_content_user_data', $new_data); + } + } + + /** + * Delete user data with specific content from database + * + * @param $content_id + * @param $sub_content_id + * @param $data_id + */ + public static function delete_user_data($content_id, $sub_content_id, $data_id) { + global $DB, $USER; + + $DB->delete_records('hvp_content_user_data', array( + 'user_id' => $USER->id, + 'hvp_id' => $content_id, + 'sub_content_id' => $sub_content_id, + 'data_id' => $data_id + )); + } + + /** + * Load user data for specific content + * + * @param $content_id + * @return mixed User data for specific content if found, else NULL + */ + public static function load_pre_loaded_user_data($content_id) { + global $DB, $USER; + + $pre_loaded_user_data = array(); + + $results = $DB->get_records('hvp_content_user_data', array( + 'user_id' => $USER->id, + 'hvp_id' => $content_id, + 'sub_content_id' => 0, + 'preloaded' => 1 + )); + + // Get data for data ids + foreach ($results as $content_user_data) { + $pre_loaded_user_data[$content_user_data->data_id] = $content_user_data->data; + } + + return $pre_loaded_user_data; + } +} diff --git a/html/moodle2/mod/hvp/classes/editor_framework.php b/html/moodle2/mod/hvp/classes/editor_framework.php new file mode 100755 index 0000000000..afcc0d1102 --- /dev/null +++ b/html/moodle2/mod/hvp/classes/editor_framework.php @@ -0,0 +1,231 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * \mod_hvp\framework class + * + * @package mod_hvp + * @copyright 2016 Joubel AS + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_hvp; + +defined('MOODLE_INTERNAL') || die(); + +require_once __DIR__ . '/../autoloader.php'; + +/** + * Moodle's implementation of the H5P Editor framework interface. + * Makes it possible for the editor's core library to communicate with the + * database used by Moodle. + * + * @package mod_hvp + * @copyright 2016 Joubel AS + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class editor_framework implements \H5peditorStorage { + + /** + * Load language file(JSON) from database. + * This is used to translate the editor fields(title, description etc.) + * + * @param string $name The machine readable name of the library(content type) + * @param int $major Major part of version number + * @param int $minor Minor part of version number + * @param string $lang Language code + * @return string Translation in JSON format + */ + public function getLanguage($name, $major, $minor, $lang) { + global $DB; + + // Load translation field from DB + return $DB->get_field_sql( + "SELECT hlt.language_json + FROM {hvp_libraries_languages} hlt + JOIN {hvp_libraries} hl ON hl.id = hlt.library_id + WHERE hl.machine_name = ? + AND hl.major_version = ? + AND hl.minor_version = ? + AND hlt.language_code = ? + ", array( + $name, + $major, + $minor, + $lang + ) + ); + } + + /** + * "Callback" for mark the given file as a permanent file. + * Used when saving content that has new uploaded files. + * + * @param int $fileid + */ + public function keepFile($fileid) { + global $DB; + + // Remove from tmpfiles + $DB->delete_records('hvp_tmpfiles', array( + 'id' => $fileid + )); + } + + /** + * Decides which content types the editor should have. + * + * Two usecases: + * 1. No input, will list all the available content types. + * 2. Libraries supported are specified, load additional data and verify + * that the content types are available. Used by e.g. the Presentation Tool + * Editor that already knows which content types are supported in its + * slides. + * + * @param array $libraries List of library names + version to load info for + * @return array List of all libraries loaded + */ + public function getLibraries($libraries = null) { + global $DB; + + $context_id = required_param('contextId', PARAM_RAW); + $super_user = has_capability('mod/hvp:userestrictedlibraries', + \context::instance_by_id($context_id)); + + if ($libraries !== null) { + // Get details for the specified libraries only. + $librarieswithdetails = array(); + foreach ($libraries as $library) { + // Look for library + $details = $DB->get_record_sql( + "SELECT title, + runnable, + restricted, + tutorial_url + FROM {hvp_libraries} + WHERE machine_name = ? + AND major_version = ? + AND minor_version = ? + AND semantics IS NOT NULL + ", array( + $library->name, + $library->majorVersion, + $library->minorVersion + ) + ); + if ($details) { + // Library found, add details to list + $library->tutorialUrl = $details->tutorial_url; + $library->title = $details->title; + $library->runnable = $details->runnable; + $library->restricted = $super_user ? false : ($details->restricted === '1' ? true : false); + $librarieswithdetails[] = $library; + } + } + + // Done, return list with library details + return $librarieswithdetails; + } + + // Load all libraries + $libraries = array(); + $librariesresult = $DB->get_records_sql( + "SELECT id, + machine_name AS name, + title, + major_version, + minor_version, + tutorial_url, + restricted + FROM {hvp_libraries} + WHERE runnable = 1 + AND semantics IS NOT NULL + ORDER BY title" + ); + foreach ($librariesresult as $library) { + // Remove unique index + unset($library->id); + + // Convert snakes to camels + $library->majorVersion = (int) $library->major_version; + unset($library->major_version); + $library->minorVersion = (int) $library->minor_version; + unset($library->minor_version); + if (!empty($library->tutorial_url)) { + $library->tutorialUrl = $library->tutorial_url; + } + unset($library->tutorial_url); + + // Make sure we only display the newest version of a library. + foreach ($libraries as $key => $existinglibrary) { + if ($library->name === $existinglibrary->name) { + // Found library with same name, check versions + if ( ( $library->majorVersion === $existinglibrary->majorVersion && + $library->minorVersion > $existinglibrary->minorVersion ) || + ( $library->majorVersion > $existinglibrary->majorVersion ) ) { + // This is a newer version + $existinglibrary->isOld = true; + } + else { + // This is an older version + $library->isOld = true; + } + } + } + + // Check to see if content type should be restricted + $library->restricted = $super_user ? false : ($library->restricted === '1' ? true : false); + + // Add new library + $libraries[] = $library; + } + return $libraries; + } + + /** + * Allow for other plugins to decide which styles and scripts are attached. + * This is useful for adding and/or modifing the functionality and look of + * the content types. + * + * @param array $files + * List of files as objects with path and version as properties + * @param array $libraries + * List of libraries indexed by machineName with objects as values. The objects + * have majorVersion and minorVersion as properties. + */ + public function alterLibraryFiles(&$files, $libraries) { + global $PAGE; + + // Refactor dependency list + $libraryList = array(); + foreach ($libraries as $dependency) { + $libraryList[$dependency['machineName']] = array( + 'majorVersion' => $dependency['majorVersion'], + 'minorVersion' => $dependency['minorVersion'] + ); + } + + $contextId = required_param('contextId', PARAM_INT); + $context = \context::instance_by_id($contextId); + + $PAGE->set_context($context); + $renderer = $PAGE->get_renderer('mod_hvp'); + + $embedType = 'editor'; + $renderer->hvp_alter_scripts($files['scripts'], $libraryList, $embedType); + $renderer->hvp_alter_styles($files['styles'], $libraryList, $embedType); + } +} diff --git a/html/moodle2/mod/hvp/classes/event.php b/html/moodle2/mod/hvp/classes/event.php new file mode 100755 index 0000000000..e6c32219db --- /dev/null +++ b/html/moodle2/mod/hvp/classes/event.php @@ -0,0 +1,104 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * The mod_hvp event logger, makes it easy to track events throughout + * the H5P system. + * + * @package mod_hvp + * @copyright 2016 Joubel AS + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_hvp; +defined('MOODLE_INTERNAL') || die(); + +class event extends \H5PEventBase { + private $user; + + /** + * Adds event type, h5p library and timestamp to event before saving it. + * + * @param string $type Name of event type + * @param string $sub_type Name of event sub type + * @param string $content_id Identifier for content affected by the event + * @param string $content_title Content title (makes it easier to know which content was deleted etc.) + * @param string $library_name Name of the library affected by the event + * @param string $library_version Library version + */ + function __construct($type, $sub_type = NULL, $content_id = NULL, $content_title = NULL, $library_name = NULL, $library_version = NULL) { + global $USER; + + // Track the who initiated the event + $this->user = $USER->id; + + parent::__construct($type, $sub_type, $content_id, $content_title, $library_name, $library_version); + } + + /** + * Store the event. + * + * @return int Event ID + */ + protected function save() { + global $DB; + + // Get data in array format without NULL values + $data = $this->getDataArray(); + + // Add user + $data['user_id'] = $this->user; + + return $DB->insert_record('hvp_events', $data); + } + + /** + * Count the number of events. + */ + protected function saveStats() { + global $DB; + $type = $this->type . ' ' . $this->sub_type; + + // Grab current counter to check if it exists + $id = $DB->get_field_sql( + "SELECT id + FROM {hvp_counters} + WHERE type = ? + AND library_name = ? + AND library_version = ?", + array($type, $this->library_name, $this->library_version) + ); + + if ($id === false) { + // No counter found, insert new one + $DB->insert_record('hvp_counters', array( + 'type' => $type, + 'library_name' => $this->library_name, + 'library_version' => $this->library_version, + 'num' => 1 + )); + } + else { + // Update num+1 + $DB->execute( + "UPDATE {hvp_counters} + SET num = num + 1 + WHERE id = ?", + array($id) + ); + } + } +} diff --git a/html/moodle2/mod/hvp/classes/event/course_module_instance_list_viewed.php b/html/moodle2/mod/hvp/classes/event/course_module_instance_list_viewed.php new file mode 100755 index 0000000000..beba3de593 --- /dev/null +++ b/html/moodle2/mod/hvp/classes/event/course_module_instance_list_viewed.php @@ -0,0 +1,39 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * The mod_hvp instance list viewed event. + * + * @package mod_hvp + * @copyright @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_hvp\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * The mod_hvp instance list viewed event class. + * + * @package mod_hvp + * @copyright @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class course_module_instance_list_viewed extends \core\event\course_module_instance_list_viewed +{ + // No code required here as the parent class handles it all. +} diff --git a/html/moodle2/mod/hvp/classes/event/course_module_viewed.php b/html/moodle2/mod/hvp/classes/event/course_module_viewed.php new file mode 100755 index 0000000000..221af7c0ae --- /dev/null +++ b/html/moodle2/mod/hvp/classes/event/course_module_viewed.php @@ -0,0 +1,48 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * The mod_hvp course module viewed event. + * + * @package mod_hvp + * @copyright @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_hvp\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * The mod_hvp course module viewed event class. + * + * @package mod_hvp + * @copyright @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class course_module_viewed extends \core\event\course_module_viewed +{ + + /** + * Set basic properties for the event. + */ + protected function init() + { + $this->data['objecttable'] = 'hvp'; + $this->data['crud'] = 'r'; + $this->data['edulevel'] = self::LEVEL_PARTICIPATING; + } +} diff --git a/html/moodle2/mod/hvp/classes/file_storage.php b/html/moodle2/mod/hvp/classes/file_storage.php new file mode 100755 index 0000000000..9810fa3bcc --- /dev/null +++ b/html/moodle2/mod/hvp/classes/file_storage.php @@ -0,0 +1,629 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * The mod_hvp file storage + * + * @package mod_hvp + * @copyright 2016 Joubel AS + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_hvp; +defined('MOODLE_INTERNAL') || die(); +require_once($CFG->dirroot . '/mod/hvp/library/h5p-file-storage.interface.php'); + +/** + * The mod_hvp file storage class. + * + * @package mod_hvp + * @since Moodle 2.7 + * @copyright 2016 Joubel AS + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class file_storage implements \H5PFileStorage { + + /** + * Store the library folder. + * + * @param array $library + * Library properties + */ + public function saveLibrary($library) { + // Libraries are stored in a system context. + $context = \context_system::instance(); + $options = array( + 'contextid' => $context->id, + 'component' => 'mod_hvp', + 'filearea' => 'libraries', + 'itemid' => 0, + 'filepath' => '/' . \H5PCore::libraryToString($library, true) . '/', + ); + + // Remove any old existing library files. + self::deleteFileTree($context->id, $options['filearea'], $options['filepath']); + + // Move library folder. + self::readFileTree($library['uploadDirectory'], $options); + } + + /** + * Store the content folder. + * + * @param string $source + * Path on file system to content directory. + * @param array $content + * Content properties + */ + public function saveContent($source, $content) { + // Remove any old content. + $this->deleteContent($content); + + // Contents are stored in a course context. + $context = \context_module::instance($content['coursemodule']); + $options = array( + 'contextid' => $context->id, + 'component' => 'mod_hvp', + 'filearea' => 'content', + 'itemid' => $content['id'], + 'filepath' => '/', + ); + + // Move content folder. + self::readFileTree($source, $options); + } + + /** + * Remove content folder. + * + * @param array $content + * Content properties + */ + public function deleteContent($content) { + $context = \context_module::instance($content['coursemodule']); + self::deleteFileTree($context->id, 'content', '/', $content['id']); + } + + /** + * Creates a stored copy of the content folder. + * + * @param string $id + * Path on file system to content directory. + * @param int $newId + * What makes this content unique. + */ + public function cloneContent($id, $newId) { + // Not implemented in Moodle. + } + + /** + * Get path to a new unique tmp folder. + * + * @return string Path + */ + public function getTmpPath() { + global $CFG; + + return $CFG->tempdir . uniqid('/hvp-'); + } + + /** + * Fetch content folder and save in target directory. + * + * @param int $id + * Content identifier + * @param string $target + * Where the content folder will be saved + */ + public function exportContent($id, $target) { + $cm = \get_coursemodule_from_instance('hvp', $id); + $context = \context_module::instance($cm->id); + self::exportFileTree($target, $context->id, 'content', '/', $id); + } + + /** + * Fetch library folder and save in target directory. + * + * @param array $library + * Library properties + * @param string $target + * Where the library folder will be saved + */ + public function exportLibrary($library, $target) { + $folder = \H5PCore::libraryToString($library, true); + $context = \context_system::instance(); + self::exportFileTree("{$target}/{$folder}", $context->id, 'libraries', "/{$folder}/"); + } + + /** + * Save export in file system + * + * @param string $source + * Path on file system to temporary export file. + * @param string $filename + * Name of export file. + */ + public function saveExport($source, $filename) { + global $COURSE; + + // Remove old export. + $this->deleteExport($filename); + + // Create record. + $context = \context_course::instance($COURSE->id); + $record = array( + 'contextid' => $context->id, + 'component' => 'mod_hvp', + 'filearea' => 'exports', + 'itemid' => 0, + 'filepath' => '/', + 'filename' => $filename + ); + + // Store new export. + $fs = get_file_storage(); + $fs->create_file_from_pathname($record, $source); + } + + /** + * Get file object for given export file. + * + * @param string $filename + * @return stdClass Moodle file object + */ + private function getExportFile($filename) { + global $COURSE; + $context = \context_course::instance($COURSE->id); + + // Check if file exists. + $fs = get_file_storage(); + return $fs->get_file($context->id, 'mod_hvp', 'exports', 0, '/', $filename); + } + + /** + * Removes given export file + * + * @param string $filename + */ + public function deleteExport($filename) { + $file = $this->getExportFile($filename); + if ($file) { + // Remove old export. + $file->delete(); + } + } + + /** + * Check if the given export file exists + * + * @param string $filename + * @return boolean + */ + public function hasExport($filename) { + return !! $this->getExportFile($filename); + } + + /** + * Will concatenate all JavaScrips and Stylesheets into two files in order + * to improve page performance. + * + * @param array $files + * A set of all the assets required for content to display + * @param string $key + * Hashed key for cached asset + */ + public function cacheAssets(&$files, $key) { + $context = \context_system::instance(); + $fs = get_file_storage(); + + foreach ($files as $type => $assets) { + if (empty($assets)) { + continue; + } + + $content = ''; + foreach ($assets as $asset) { + // Find location of asset. + $location = array(); + preg_match('/^\/(libraries|development)(.+\/)([^\/]+)$/', $asset->path, $location); + + // Locate file. + $file = $fs->get_file($context->id, 'mod_hvp', $location[1], 0, $location[2], $location[3]); + + // Get file content and concatenate. + if ($type === 'scripts') { + $content .= $file->get_content() . ";\n"; + } else { + // Rewrite relative URLs used inside stylesheets. + $content .= preg_replace_callback( + '/url\([\'"]?([^"\')]+)[\'"]?\)/i', + function ($matches) use ($location) { + if (preg_match("/^(data:|([a-z0-9]+:)?\/)/i", $matches[1]) === 1) { + return $matches[0]; // Not relative, skip. + } + return 'url("../' . $location[1] . $location[2] . $matches[1] . '")'; + }, + $file->get_content()) . "\n"; + } + } + + // Create new file for cached assets. + $ext = ($type === 'scripts' ? 'js' : 'css'); + $fileinfo = array( + 'contextid' => $context->id, + 'component' => 'mod_hvp', + 'filearea' => 'cachedassets', + 'itemid' => 0, + 'filepath' => '/', + 'filename' => "{$key}.{$ext}" + ); + + // Store concatenated content. + $fs->create_file_from_string($fileinfo, $content); + $files[$type] = array((object) array( + 'path' => "/cachedassets/{$key}.{$ext}", + 'version' => '' + )); + } + } + + /** + * Will check if there are cache assets available for content. + * + * @param string $key + * Hashed key for cached asset + * @return array + */ + public function getCachedAssets($key) { + $context = \context_system::instance(); + $fs = get_file_storage(); + + $files = array(); + + $js = $fs->get_file($context->id, 'mod_hvp', 'cachedassets', 0, '/', "{$key}.js"); + if ($js) { + $files['scripts'] = array((object) array( + 'path' => "/cachedassets/{$key}.js", + 'version' => '' + )); + } + + $css = $fs->get_file($context->id, 'mod_hvp', 'cachedassets', 0, '/', "{$key}.css"); + if ($css) { + $files['styles'] = array((object) array( + 'path' => "/cachedassets/{$key}.css", + 'version' => '' + )); + } + + return empty($files) ? null : $files; + } + + /** + * Remove the aggregated cache files. + * + * @param array $keys + * The hash keys of removed files + */ + public function deleteCachedAssets($keys) { + $context = \context_system::instance(); + $fs = get_file_storage(); + + foreach ($keys as $hash) { + foreach (array('js', 'css') as $type) { + $cachedasset = $fs->get_file($context->id, 'mod_hvp', 'cachedassets', 0, '/', "{$hash}.{$type}"); + if ($cachedasset) { + $cachedasset->delete(); + } + } + } + } + + /** + * Read file content of given file and then return it. + * + * @param string $file_path + * @return string + */ + public function getContent($file_path) { + // Grab context and file storage + $context = \context_system::instance(); + $fs = get_file_storage(); + + // Find location of file + $location = array(); + preg_match('/^\/(libraries|development|cachedassets)(.*\/)([^\/]+)$/', $file_path, $location); + + // Locate file + $file = $fs->get_file($context->id, 'mod_hvp', $location[1], 0, $location[2], $location[3]); + + // Return content + return $file->get_content(); + } + + /** + * Save files uploaded through the editor. + * + * @param \H5peditorFile $file + * @param int $contentid + * @param \stdClass $context Course Context ID + */ + public function saveFile($file, $contentid, $contextid = null) { + if ($contentid !== 0) { + // Grab cm context + $cm = \get_coursemodule_from_instance('hvp', $contentid); + $context = \context_module::instance($cm->id); + $contextid = $context->id; + } + + // Files not yet related to any activities are stored in a course context + // (These are temporary files and should not be part of backups.) + + $record = array( + 'contextid' => $contextid, + 'component' => 'mod_hvp', + 'filearea' => $contentid === 0 ? 'editor' : 'content', + 'itemid' => $contentid, + 'filepath' => '/' . $file->getType() . 's/', + 'filename' => $file->getName() + ); + $fs = get_file_storage(); + $filedata = $file->getData(); + if ($filedata) { + $stored_file = $fs->create_file_from_string($record, $filedata); + } + else { + $stored_file = $fs->create_file_from_pathname($record, $_FILES['file']['tmp_name']); + } + + return $stored_file->get_id(); + } + + /** + * Copy a file from another content or editor tmp dir. + * Used when copy pasting content in H5P. + * + * @param string $file path + name + * @param string|int $fromid Content ID or 'editor' string + * @param stdClass $tocontent Target Content + */ + public function cloneContentFile($file, $fromid, $tocontent) { + // Determine source file area and item id + $sourcefilearea = ($fromid === 'editor' ? $fromid : 'content'); + $sourceitemid = ($fromid === 'editor' ? 0 : $fromid); + + // Check to see if source exist + $sourcefile = $this->getFile($sourcefilearea, $sourceitemid, $file); + if ($sourcefile === false) { + return; // Nothing to copy from + } + + // Check to make sure source doesn't exist already + if ($this->getFile('content', $tocontent, $file) !== false) { + return; // File exists, no need to copy + } + + // Grab context for CM + $context = \context_module::instance($tocontent->coursemodule); + + // Create new file record + $record = array( + 'contextid' => $context->id, + 'component' => 'mod_hvp', + 'filearea' => 'content', + 'itemid' => $tocontent->id, + 'filepath' => $this->getFilepath($file), + 'filename' => $this->getFilename($file) + ); + $fs = get_file_storage(); + $fs->create_file_from_storedfile($record, $sourcefile); + } + + /** + * Checks to see if content has the given file. + * Used when saving content. + * + * @param string $file path + name + * @param stdClass $content + * @return string|int File ID or NULL if not found + */ + public function getContentFile($file, $content) { + $file = $this->getFile('content', $content, $file); + return ($file === false ? null : $file->get_id()); + } + + /** + * Remove content files that are no longer used. + * Used when saving content. + * + * @param string $file path + name + * @param stdClass $content + */ + public function removeContentFile($file, $content) { + $file = $this->getFile('content', $content, $file); + if ($file !== false) { + $file->delete(); + } + } + + /** + * Copies files from tmp folder to Moodle storage. + * + * @param string $source + * Path to source directory + * @param array $options + * For Moodle's file record + * @throws \Exception Unable to copy + */ + private static function readFileTree($source, $options) { + $dir = opendir($source); + if ($dir === false) { + trigger_error('Unable to open directory ' . $source, E_USER_WARNING); + throw new \Exception('unabletocopy'); + } + + while (false !== ($file = readdir($dir))) { + if (($file != '.') && ($file != '..') && $file != '.git' && $file != '.gitignore') { + if (is_dir($source . DIRECTORY_SEPARATOR . $file)) { + $suboptions = $options; + $suboptions['filepath'] .= $file . '/'; + self::readFileTree($source . '/' . $file, $suboptions); + } else { + $record = $options; + $record['filename'] = $file; + $fs = get_file_storage(); + $fs->create_file_from_pathname($record, $source . '/' . $file); + } + } + } + closedir($dir); + } + + /** + * Copies files from Moodle storage to temporary folder. + * + * @param string $target + * Path to temporary folder + * @param int $contextid + * Moodle context where the files are found + * @param string $filearea + * Moodle file area + * @param string $filepath + * Moodle file path + * @param int $itemid + * Optional Moodle item ID + */ + private static function exportFileTree($target, $contextid, $filearea, $filepath, $itemid = 0) { + // Make sure target folder exists. + if (!file_exists($target)) { + mkdir($target, 0777, true); + } + + // Read source files. + $fs = get_file_storage(); + $files = $fs->get_directory_files($contextid, 'mod_hvp', $filearea, $itemid, $filepath, true); + + foreach ($files as $file) { + // Correct target path for file. + $path = $target . str_replace($filepath, '/', $file->get_filepath()); + + if ($file->is_directory()) { + // Create directory. + $path = rtrim($path, '/'); + if (!file_exists($path)) { + mkdir($path, 0777, true); + } + } else { + // Copy file. + $file->copy_content_to($path . $file->get_filename()); + } + } + } + + /** + * Recursive removal of given filepath. + * + * @param int $contextid + * @param string $filearea + * @param string $filepath + * @param int $itemid + */ + private static function deleteFileTree($contextid, $filearea, $filepath, $itemid = 0) { + $fs = get_file_storage(); + if ($filepath === '/') { + // Remove complete file area. + $fs->delete_area_files($contextid, 'mod_hvp', $filearea, $itemid); + return; + } + + // Look up files and remove. + $files = $fs->get_directory_files($contextid, 'mod_hvp', $filearea, $itemid, $filepath, true); + foreach ($files as $file) { + $file->delete(); + } + + // Remove root dir. + $file = $fs->get_file($contextid, 'mod_hvp', $filearea, $itemid, $filepath, '.'); + if ($file) { + $file->delete(); + } + } + + /** + * Help make it easy to load content files. + * + * @param string $filearea + * @param int|stdClass $itemid + * @param string $file path + name + */ + private function getFile($filearea, $itemid, $file) { + global $COURSE; + + if ($filearea === 'editor') { + // Use Course context + $context = \context_course::instance($COURSE->id); + } + elseif (is_object($itemid)) { + // Grab CM context from item + $context = \context_module::instance($itemid->coursemodule); + $itemid = $itemid->id; + } + else { + // Use item ID to find CM context + $cm = \get_coursemodule_from_instance('hvp', $itemid); + $context = \context_module::instance($cm->id); + } + + // Load file + $fs = get_file_storage(); + return $fs->get_file($context->id, 'mod_hvp', $filearea, $itemid, $this->getFilepath($file), $this->getFilename($file)); + } + + /** + * Extract Moodle compatible filepath + * + * @param string $file + * @return string With slashes + */ + private function getFilepath($file) { + return '/' . dirname($file) . '/'; + } + + /** + * Extract filename from filepath string + * + * @param string $file + * @return string Without slashes + */ + private function getFilename($file) { + return basename($file); + } + + /** + * Checks if a file exists + * + * @method fileExists + * @param string $filearea [description] + * @param string $filepath [description] + * @param string $filename [description] + * @return boolean + */ + public static function fileExists($contextid, $filearea, $filepath, $filename) { + // Check if file exists. + $fs = get_file_storage(); + return ($fs->get_file($contextid, 'mod_hvp', $filearea, 0, $filepath, $filename) !== false); + } +} diff --git a/html/moodle2/mod/hvp/classes/framework.php b/html/moodle2/mod/hvp/classes/framework.php new file mode 100755 index 0000000000..ef237ede89 --- /dev/null +++ b/html/moodle2/mod/hvp/classes/framework.php @@ -0,0 +1,1258 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * \mod_hvp\framework class + * + * @package mod_hvp + * @copyright 2016 Joubel AS + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_hvp; + +defined('MOODLE_INTERNAL') || die(); + +require_once __DIR__ . '/../autoloader.php'; +require_once($CFG->libdir . '/filelib.php'); + +/** + * Moodle's implementation of the H5P framework interface. + * + * @package mod_hvp + * @copyright 2016 Joubel AS + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class framework implements \H5PFrameworkInterface { + + /** + * Get type of hvp instance + * + * @param string $type Type of hvp instance to get + * @return \H5PContentValidator|\H5PCore|\H5PMoodle|\H5PStorage|\H5PValidator + */ + public static function instance($type = null) { + global $CFG; + static $interface, $core, $editor, $editorinterface; + + if (!isset($interface)) { + $interface = new \mod_hvp\framework(); + + $fs = new \mod_hvp\file_storage(); + + $context = \context_system::instance(); + $url = "{$CFG->httpswwwroot}/pluginfile.php/{$context->id}/mod_hvp"; + + $language = self::get_language(); + + $export = !(isset($CFG->mod_hvp_export) && $CFG->mod_hvp_export === '0'); + + $core = new \H5PCore($interface, $fs, $url, $language, $export); + $core->aggregateAssets = !(isset($CFG->mod_hvp_aggregate_assets) && $CFG->mod_hvp_aggregate_assets === '0'); + } + + switch ($type) { + case 'validator': + return new \H5PValidator($interface, $core); + case 'storage': + return new \H5PStorage($interface, $core); + case 'contentvalidator': + return new \H5PContentValidator($interface, $core); + case 'interface': + return $interface; + case 'editor': + if (empty($editorinterface)) { + $editorinterface = new \mod_hvp\editor_framework(); + } + if (empty($editor)) { + $editor = new \H5peditor($core, $editorinterface); + } + return $editor; + case 'core': + default: + return $core; + } + } + + /** + * Get current H5P language code. + * + * @return string Language Code + */ + public static function get_language() { + static $map; + + if (empty($map)) { + // Create mapping for "converting" language codes + $map = array( + 'no' => 'nb' + ); + } + + // Get current language in Moodle + $language = str_replace('_', '-', strtolower(\current_language())); + + // Try to map + return isset($map[$language]) ? $map[$language] : $language; + } + + /** + * Make it easy to download and install H5P libraries. + * + * @param boolean $onlyupdate Prevent install of new libraries + * @return string|null Error or null if everything's OK. + */ + public static function downloadH5pLibraries($onlyupdate = false) { + global $CFG; + + $update_available = \get_config('mod_hvp', 'update_available'); + $current_update = \get_config('mod_hvp', 'current_update'); + if ($update_available === $current_update) { + // Prevent re-submission of forms/action + return null; + } + + // URL for file to download + $download_url = \get_config('mod_hvp', 'update_available_path'); + if (!$download_url) { + return get_string('missingh5purl', 'hvp'); + } + + // Generate local tmp file path + $local_folder = $CFG->tempdir . uniqid('/hvp-'); + $local_file = $local_folder . '.h5p'; + + if (!\download_file_content($download_url, null, null, false, 300, 20, false, $local_file)) { + return get_string('unabletodownloadh5p', 'hvp'); + } + + // Add folder and file paths to H5P Core + $interface = \mod_hvp\framework::instance('interface'); + $interface->getUploadedH5pFolderPath($local_folder); + $interface->getUploadedH5pPath($local_file); + + // Validate package + $h5pValidator = \mod_hvp\framework::instance('validator'); + if (!$h5pValidator->isValidPackage(true, $onlyupdate)) { + @unlink($local_file); + $messages = \mod_hvp\framework::messages('error'); + return implode('<br/>', $messages); + } + + // Install H5P file into Moodle + $storage = \mod_hvp\framework::instance('storage'); + $storage->savePackage(null, null, true); + \set_config('current_update', $update_available, 'mod_hvp'); + + return null; + } + + /** + * Implements getPlatformInfo + */ + public function getPlatformInfo() { + global $CFG; + + return array( + 'name' => 'Moodle', + 'version' => $CFG->version, + 'h5pVersion' => get_component_version('mod_hvp'), + ); + } + + /** + * Implements fetchExternalData + * + * @param string $url Url starting with http(s):// + * @return bool|null|\stdClass|string Data object if successful fetch + */ + public function fetchExternalData($url, $data = null) { + $response = download_file_content($url, null, $data); + return ($response === false ? null : $response); + } + + /** + * Implements setLibraryTutorialUrl + * + * Set the tutorial URL for a library. All versions of the library is set + * + * @param string $library_name + * @param string $url + */ + public function setLibraryTutorialUrl($library_name, $url) { + global $DB; + + $DB->execute("UPDATE {hvp_libraries} SET tutorial_url = ? WHERE machine_name = ?", array($url, $library_name)); + } + + /** + * Implements setErrorMessage + * + * @param string $message translated error message + */ + public function setErrorMessage($message) { + if ($message !== null) { + self::messages('error', $message); + } + } + + /** + * Implements setInfoMessage + */ + public function setInfoMessage($message) { + if ($message !== null) { + self::messages('info', $message); + } + } + + /** + * Store messages until they can be printed to the current user + * + * @param string $type Type of messages, e.g. 'info' or 'error' + * @param string $newMessage Optional + * @return array Array of stored messages + */ + public static function messages($type, $newMessage = null) { + static $m = 'mod_hvp_messages'; + + if ($newMessage === null) { + // Return and reset messages + $messages = isset($_SESSION[$m][$type]) ? $_SESSION[$m][$type] : array(); + unset($_SESSION[$m][$type]); + if (empty($_SESSION[$m])) { + unset($_SESSION[$m]); + } + return $messages; + } + + $_SESSION[$m][$type][] = $newMessage; + } + + /** + * Simple print of given messages. + * + * @param string $type One of error|info + * @param array $messages + */ + public static function printMessages($type, $messages) { + global $OUTPUT; + foreach ($messages as $message) { + print $OUTPUT->notification($message, ($type === 'error' ? 'notifyproblem' : 'notifymessage')); + } + } + + /** + * Implements t + */ + public function t($message, $replacements = array()) { + static $translations_map; + + if (empty($translations_map)) { + // Create mapping + $translations_map = [ + 'Your PHP version does not support ZipArchive.' => 'noziparchive', + 'The file you uploaded is not a valid HTML5 Package (It does not have the .h5p file extension)' => 'noextension', + 'The file you uploaded is not a valid HTML5 Package (We are unable to unzip it)' => 'nounzip', + 'Could not parse the main h5p.json file' => 'noparse', + 'The main h5p.json file is not valid' => 'nojson', + 'Invalid content folder' => 'invalidcontentfolder', + 'Could not find or parse the content.json file' => 'nocontent', + 'Library directory name must match machineName or machineName-majorVersion.minorVersion (from library.json). (Directory: %directoryName , machineName: %machineName, majorVersion: %majorVersion, minorVersion: %minorVersion)' => 'librarydirectoryerror', + 'A valid content folder is missing' => 'missingcontentfolder', + 'A valid main h5p.json file is missing' => 'invalidmainjson', + 'Missing required library @library' => 'missinglibrary', + "Note that the libraries may exist in the file you uploaded, but you're not allowed to upload new libraries. Contact the site administrator about this." => 'missinguploadpermissions', + 'Invalid library name: %name' => 'invalidlibraryname', + 'Could not find library.json file with valid json format for library %name' => 'missinglibraryjson', + 'Invalid semantics.json file has been included in the library %name' => 'invalidsemanticsjson', + 'Invalid language file %file in library %library' => 'invalidlanguagefile', + 'Invalid language file %languageFile has been included in the library %name' => 'invalidlanguagefile2', + 'The file "%file" is missing from library: "%name"' => 'missinglibraryfile', + 'The system was unable to install the <em>%component</em> component from the package, it requires a newer version of the H5P plugin. This site is currently running version %current, whereas the required version is %required or higher. You should consider upgrading and then try again.' => 'missingcoreversion', + "Invalid data provided for %property in %library. Boolean expected." => 'invalidlibrarydataboolean', + "Invalid data provided for %property in %library" => 'invalidlibrarydata', + "Can't read the property %property in %library" => 'invalidlibraryproperty', + 'The required property %property is missing from %library' => 'missinglibraryproperty', + 'Illegal option %option in %library' => 'invalidlibraryoption', + 'Added %new new H5P libraries and updated %old old.' => 'addedandupdatelibraries', + 'Added %new new H5P libraries.' => 'addednewlibraries', + 'Updated %old H5P libraries.' => 'updatedlibraries', + 'Missing dependency @dep required by @lib.' => 'missingdependency', + 'Provided string is not valid according to regexp in semantics. (value: \"%value\", regexp: \"%regexp\")' => 'invalidstring', + 'File "%filename" not allowed. Only files with the following extensions are allowed: %files-allowed.' => 'invalidfile', + 'Invalid selected option in multi-select.' => 'invalidmultiselectoption', + 'Invalid selected option in select.' => 'invalidselectoption', + 'H5P internal error: unknown content type "@type" in semantics. Removing content!' => 'invalidsemanticstype', + 'Copyright information' => 'copyrightinfo', + 'Title' => 'title', + 'Author' => 'author', + 'Year(s)' => 'years', + 'Source' => 'source', + 'License' => 'license', + 'Undisclosed' => 'undisclosed', + 'Attribution 4.0' => 'attribution', + 'Attribution-ShareAlike 4.0' => 'attributionsa', + 'Attribution-NoDerivs 4.0' => 'attributionnd', + 'Attribution-NonCommercial 4.0' => 'attributionnc', + 'Attribution-NonCommercial-ShareAlike 4.0' => 'attributionncsa', + 'Attribution-NonCommercial-NoDerivs 4.0' => 'attributionncnd', + 'General Public License v3' => 'gpl', + 'Public Domain' => 'pd', + 'Public Domain Dedication and Licence' => 'pddl', + 'Public Domain Mark' => 'pdm', + 'Copyright' => 'copyrightstring', + 'Unable to create directory.' => 'unabletocreatedir', + 'Unable to get field type.' => 'unabletogetfieldtype', + "File type isn't allowed." => 'filetypenotallowed', + 'Invalid field type.' => 'invalidfieldtype', + 'Invalid image file format. Use jpg, png or gif.' => 'invalidimageformat', + 'File is not an image.' => 'filenotimage', + 'Invalid audio file format. Use mp3 or wav.' => 'invalidaudioformat', + 'Invalid video file format. Use mp4 or webm.' => 'invalidvideoformat', + 'Could not save file.' => 'couldnotsave', + 'Could not copy file.' => 'couldnotcopy', + 'The mbstring PHP extension is not loaded. H5P need this to function properly' => 'missingmbstring', + 'The version of the H5P library %machineName used in this content is not valid. Content contains %contentLibrary, but it should be %semanticsLibrary.' => 'wrongversion', + 'The H5P library %library used in the content is not valid' => 'invalidlibrary' + ]; + } + + return get_string($translations_map[$message], 'hvp', $replacements); + } + + /** + * Implements getH5PPath + */ + public function getH5pPath() { + global $CFG; + + return $CFG->dirroot . '/mod/hvp/files'; + } + + /** + * Implements getUploadedH5PFolderPath + */ + public function getUploadedH5pFolderPath($setPath = null) { + static $path; + + if ($setPath !== null) { + $path = $setPath; + } + + if (!isset($path)) { + throw new \coding_exception('Using getUploadedH5pFolderPath() before path is set'); + } + + return $path; + } + + /** + * Implements getUploadedH5PPath + */ + public function getUploadedH5pPath($setPath = null) { + static $path; + + if ($setPath !== null) { + $path = $setPath; + } + + if (!isset($path)) { + throw new \coding_exception('Using getUploadedH5pPath() before path is set'); + } + + return $path; + } + + /** + * Implements loadLibraries + */ + public function loadLibraries() { + global $DB; + + $results = $DB->get_records_sql( + "SELECT id, machine_name, title, major_version, minor_version, + patch_version, runnable, restricted + FROM {hvp_libraries} + ORDER BY title ASC, major_version ASC, minor_version ASC"); + + $libraries = array(); + foreach ($results as $library) { + $libraries[$library->machine_name][] = $library; + } + + return $libraries; + } + + /** + * Implements setUnsupportedLibraries. + */ + public function setUnsupportedLibraries($libraries) { + // Not supported + } + + /** + * Implements getUnsupportedLibraries. + */ + public function getUnsupportedLibraries() { + // Not supported + } + + /** + * Implements getAdminUrl. + */ + public function getAdminUrl() { + // Not supported + } + + /** + * Implements getLibraryId + */ + public function getLibraryId($machineName, $majorVersion = null, $minorVersion = null) { + global $DB; + + // Look for specific library + $sql_where = 'WHERE machine_name = ?'; + $sql_args = array($machineName); + + if ($majorVersion !== null) { + // Look for major version + $sql_where .= ' AND major_version = ?'; + $sql_args[] = $majorVersion; + if ($minorVersion !== null) { + // Look for minor version + $sql_where .= ' AND minor_version = ?'; + $sql_args[] = $minorVersion; + } + } + + // Get the lastest version which matches the input parameters + $libraries = $DB->get_records_sql(" + SELECT id + FROM {hvp_libraries} + {$sql_where} + ORDER BY major_version DESC, + minor_version DESC, + patch_version DESC + ", $sql_args, 0, 1); + if ($libraries) { + $library = reset($libraries); + return $library ? $library->id : false; + } + else { + return false; + } + } + + /** + * Implements isPatchedLibrary + */ + public function isPatchedLibrary($library) { + global $DB, $CFG; + + if (isset($CFG->mod_hvp_dev) && $CFG->mod_hvp_dev) { + // Makes sure libraries are updated, patch version does not matter. + return true; + } + + $operator = $this->isInDevMode() ? '<=' : '<'; + $library = $DB->get_record_sql( + 'SELECT id + FROM {hvp_libraries} + WHERE machine_name = ? + AND major_version = ? + AND minor_version = ? + AND patch_version ' . $operator . ' ?', + array($library['machineName'], + $library['majorVersion'], + $library['minorVersion'], + $library['patchVersion']) + ); + + return $library ? true : false; + } + + /** + * Implements isInDevMode + */ + public function isInDevMode() { + return false; // Not supported (Files in moodle not editable) + } + + /** + * Implements mayUpdateLibraries + */ + public function mayUpdateLibraries($allow = false) { + static $override; + + // Allow overriding the permission check. Needed when installing + // since caps hasn't been set. + if ($allow) { + $override = true; + } + if ($override) { + return true; + } + + // Check permissions + $context = \context_system::instance(); + if (!has_capability('mod/hvp:updatelibraries', $context)) { + return false; + } + + return true; + } + + /** + * Implements getLibraryUsage + * + * Get number of content/nodes using a library, and the number of + * dependencies to other libraries + * + * @param int $id + * @param boolean $skipContent Optional. Set as TRUE to get number of content instances for library. + * @return array The array contains two elements, keyed by 'content' and 'libraries'. + * Each element contains a number + */ + public function getLibraryUsage($id, $skipContent = false) { + global $DB; + + if ($skipContent) { + $content = -1; + } + else { + $content = intval($DB->get_field_sql( + "SELECT COUNT(distinct c.id) + FROM {hvp_libraries} l + JOIN {hvp_contents_libraries} cl ON l.id = cl.library_id + JOIN {hvp} c ON cl.hvp_id = c.id + WHERE l.id = ?", array($id) + )); + } + + $libraries = intval($DB->get_field_sql( + "SELECT COUNT(*) + FROM {hvp_libraries_libraries} + WHERE required_library_id = ?", array($id) + )); + + return array( + 'content' => $content, + 'libraries' => $libraries, + ); + } + + /** + * Implements getLibraryContentCount + */ + public function getLibraryContentCount() { + global $DB; + $contentCount = array(); + + // Count content using the same content type + $res = $DB->get_records_sql( + "SELECT c.main_library_id, + l.machine_name, + l.major_version, + l.minor_version, + c.count + FROM (SELECT main_library_id, + count(id) as count + FROM {hvp} + GROUP BY main_library_id) c, + {hvp_libraries} l + WHERE c.main_library_id = l.id" + ); + + // Extract results + foreach($res as $lib) { + $contentCount["{$lib->machine_name} {$lib->major_version}.{$lib->minor_version}"] = $lib->count; + } + + return $contentCount; + } + + /** + * Implements saveLibraryData + */ + public function saveLibraryData(&$libraryData, $new = true) { + global $DB; + + // Some special properties needs some checking and converting before they can be saved. + $preloadedJs = $this->pathsToCsv($libraryData, 'preloadedJs'); + $preloadedCss = $this->pathsToCsv($libraryData, 'preloadedCss'); + $dropLibraryCss = ''; + + if (isset($libraryData['dropLibraryCss'])) { + $libs = array(); + foreach ($libraryData['dropLibraryCss'] as $lib) { + $libs[] = $lib['machineName']; + } + $dropLibraryCss = implode(', ', $libs); + } + + $embedTypes = ''; + if (isset($libraryData['embedTypes'])) { + $embedTypes = implode(', ', $libraryData['embedTypes']); + } + if (!isset($libraryData['semantics'])) { + $libraryData['semantics'] = ''; + } + if (!isset($libraryData['fullscreen'])) { + $libraryData['fullscreen'] = 0; + } + // TODO: Can we move the above code to H5PCore? It's the same for multiple + // implementations. Perhaps core can update the data objects before calling + // this function? + // I think maybe it's best to do this when classes are created for + // library, content, etc. + + $library = (object) array( + 'title' => $libraryData['title'], + 'machine_name' => $libraryData['machineName'], + 'major_version' => $libraryData['majorVersion'], + 'minor_version' => $libraryData['minorVersion'], + 'patch_version' => $libraryData['patchVersion'], + 'runnable' => $libraryData['runnable'], + 'fullscreen' => $libraryData['fullscreen'], + 'embed_types' => $embedTypes, + 'preloaded_js' => $preloadedJs, + 'preloaded_css' => $preloadedCss, + 'drop_library_css' => $dropLibraryCss, + 'semantics' => $libraryData['semantics'], + ); + + if ($new) { + // Create new library and keep track of id + $library->id = $DB->insert_record('hvp_libraries', $library); + $libraryData['libraryId'] = $library->id; + } + else { + // Update library data + $library->id = $libraryData['libraryId']; + + // Save library data + $DB->update_record('hvp_libraries', (object) $library); + + // Remove old dependencies + $this->deleteLibraryDependencies($libraryData['libraryId']); + } + + // Log library successfully installed/upgraded + new \mod_hvp\event( + 'library', ($new ? 'create' : 'update'), + NULL, NULL, + $library->machine_name, $library->major_version . '.' . $library->minor_version + ); + + // Update library translations + $DB->delete_records('hvp_libraries_languages', array('library_id' => $libraryData['libraryId'])); + if (isset($libraryData['language'])) { + foreach ($libraryData['language'] as $languageCode => $languageJson) { + $DB->insert_record('hvp_libraries_languages', array( + 'library_id' => $libraryData['libraryId'], + 'language_code' => $languageCode, + 'language_json' => $languageJson, + )); + } + } + } + + /** + * Convert list of file paths to csv + * + * @param array $libraryData + * Library data as found in library.json files + * @param string $key + * Key that should be found in $libraryData + * @return string + * file paths separated by ', ' + */ + private function pathsToCsv($libraryData, $key) { + // TODO: Move to core? + if (isset($libraryData[$key])) { + $paths = array(); + foreach ($libraryData[$key] as $file) { + $paths[] = $file['path']; + } + return implode(', ', $paths); + } + return ''; + } + + /** + * Implements lockDependencyStorage + */ + public function lockDependencyStorage() { + // Library development mode not supported + } + + /** + * Implements unlockDependencyStorage + */ + public function unlockDependencyStorage() { + // Library development mode not supported + } + + /** + * Implements deleteLibrary + */ + public function deleteLibrary($library) { + global $DB; + + // Delete library files + \H5PCore::deleteFileTree($this->getH5pPath() . '/libraries/' . $library->name . '-' . $library->major_version . '.' . $library->minor_version); + + // Remove library data from database + $DB->delete('hvp_libraries_libraries', array('library_id' => $library->id)); + $DB->delete('hvp_libraries_languages', array('library_id' => $library->id)); + $DB->delete('hvp_libraries', array('id' => $library->id)); + } + + /** + * Implements saveLibraryDependencies + */ + public function saveLibraryDependencies($libraryId, $dependencies, $dependency_type) { + global $DB; + + foreach ($dependencies as $dependency) { + // Find dependency library. + $dependencyLibrary = $DB->get_record('hvp_libraries', array( + 'machine_name' => $dependency['machineName'], + 'major_version' => $dependency['majorVersion'], + 'minor_version' => $dependency['minorVersion'] + )); + + // Create relation. + $DB->insert_record('hvp_libraries_libraries', array( + 'library_id' => $libraryId, + 'required_library_id' => $dependencyLibrary->id, + 'dependency_type' => $dependency_type + )); + } + } + + /** + * Implements updateContent + * + * Inserts or updates H5P content. + * + * @param array $content + * An associative array containing: + * - id: The content id + * - params: The content in json format + * - library: An associative array containing: + * - libraryId: The id of the main library for this content + * @param int $contentMainId + * Main id for the content if this is a system that supports versioning + * + * @return bool|int + */ + public function updateContent($content, $contentMainId = null) { + global $DB; + + if (!isset($content['disable'])) { + $content['disable'] = \H5PCore::DISABLE_NONE; + } + + $data = array( + 'name' => $content['name'], + 'course' => $content['course'], + 'intro' => $content['intro'], + 'introformat' => $content['introformat'], + 'json_content' => $content['params'], + 'embed_type' => 'div', + 'main_library_id' => $content['library']['libraryId'], + 'filtered' => '', + 'disable' => $content['disable'], + 'timemodified' => time() + ); + + if (!isset($content['id'])) { + $data['slug'] = ''; + $data['timecreated'] = $data['timemodified']; + $event_type = 'create'; + $id = $DB->insert_record('hvp', $data); + } + else { + $data['id'] = $content['id']; + $DB->update_record('hvp', $data); + $event_type = 'update'; + $id = $data['id']; + } + + // Log content create/update/upload + if (!empty($content['uploaded'])) { + $event_type .= ' upload'; + } + new \mod_hvp\event( + 'content', $event_type, + $id, $content['name'], + $content['library']['machineName'], + $content['library']['majorVersion'] . '.' . $content['library']['minorVersion'] + ); + + return $id; + } + + /** + * Implements insertContent + */ + public function insertContent($content, $contentMainId = null) { + return $this->updateContent($content); + } + + /** + * Implements resetContentUserData + */ + public function resetContentUserData($contentId) { + global $DB; + + // Reset user data for this content + $DB->execute("UPDATE {hvp_content_user_data} + SET data = 'RESET' + WHERE hvp_id = ? + AND delete_on_content_change = 1", + array($contentId)); + } + + /** + * Implements getWhitelist + */ + public function getWhitelist($isLibrary, $defaultContentWhitelist, $defaultLibraryWhitelist) { + return $defaultContentWhitelist . ($isLibrary ? ' ' . $defaultLibraryWhitelist : ''); + } + + /** + * Implements copyLibraryUsage + */ + public function copyLibraryUsage($contentId, $copyFromId, $contentMainId = null) { + global $DB; + + $libraryUsage = $DB->get_record('hvp_contents_libraries', array( + 'id' => $copyFromId + )); + + $libraryUsage->id = $contentId; + $DB->insert_record_raw('hvp_contents_libraries', (array)$libraryUsage, false, false, true); + + // TODO: This must be verified at a later time. + // Currently in Moodle copyLibraryUsage() will never be called. + } + + /** + * Implements loadLibrarySemantics + */ + public function loadLibrarySemantics($name, $majorVersion, $minorVersion) { + global $DB; + + $semantics = $DB->get_field_sql( + "SELECT semantics + FROM {hvp_libraries} + WHERE machine_name = ? + AND major_version = ? + AND minor_version = ?", + array($name, $majorVersion, $minorVersion)); + + return ($semantics === false ? null : $semantics); + } + + /** + * Implements alterLibrarySemantics + */ + public function alterLibrarySemantics(&$semantics, $name, $majorVersion, $minorVersion) { + global $PAGE; + + $contextId = optional_param('contextId', null, PARAM_INT); + if (isset($contextId)) { + $context = \context::instance_by_id($contextId); + $PAGE->set_context($context); + } + + $renderer = $PAGE->get_renderer('mod_hvp'); + $renderer->hvp_alter_semantics($semantics, $name, $majorVersion, $minorVersion); + } + + /** + * Implements loadContent + */ + public function loadContent($id) { + global $DB; + + $data = $DB->get_record_sql( + "SELECT hc.id + , hc.name + , hc.intro + , hc.introformat + , hc.json_content + , hc.filtered + , hc.slug + , hc.embed_type + , hc.disable + , hl.id AS library_id + , hl.machine_name + , hl.major_version + , hl.minor_version + , hl.embed_types + , hl.fullscreen + FROM {hvp} hc + JOIN {hvp_libraries} hl ON hl.id = hc.main_library_id + WHERE hc.id = ?", array($id)); + + // Return NULL if not found + if ($data === false) { + return null; + } + + // Some databases do not support camelCase, so we need to manually + // map the values to the camelCase names used by the H5P core. + $content = array( + 'id' => $data->id, + 'title' => $data->name, + 'intro' => $data->intro, + 'introformat' => $data->introformat, + 'params' => $data->json_content, + 'filtered' => $data->filtered, + 'slug' => $data->slug, + 'embedType' => $data->embed_type, + 'disable' => $data->disable, + 'libraryId' => $data->library_id, + 'libraryName' => $data->machine_name, + 'libraryMajorVersion' => $data->major_version, + 'libraryMinorVersion' => $data->minor_version, + 'libraryEmbedTypes' => $data->embed_types, + 'libraryFullscreen' => $data->fullscreen, + ); + + return $content; + } + + /** + * Implements loadContentDependencies + */ + public function loadContentDependencies($id, $type = null) { + global $DB; + + $query = "SELECT hcl.id AS unidepid + , hl.id + , hl.machine_name + , hl.major_version + , hl.minor_version + , hl.patch_version + , hl.preloaded_css + , hl.preloaded_js + , hcl.drop_css + , hcl.dependency_type + FROM {hvp_contents_libraries} hcl + JOIN {hvp_libraries} hl ON hcl.library_id = hl.id + WHERE hcl.hvp_id = ?"; + $queryArgs = array($id); + + if ($type !== null) { + $query .= " AND hcl.dependency_type = ?"; + $queryArgs[] = $type; + } + + $query .= " ORDER BY hcl.weight"; + $data = $DB->get_records_sql($query, $queryArgs); + + $dependencies = array(); + foreach ($data as $dependency) { + unset($dependency->unidepid); + $dependencies[$dependency->machine_name] = \H5PCore::snakeToCamel($dependency); + } + + return $dependencies; + } + + /** + * Implements getOption(). + */ + public function getOption($name, $default = false) { + $value = get_config('mod_hvp', $name); + if ($value === false) { + return $default; + } + return $value; + } + + /** + * Implements setOption(). + */ + public function setOption($name, $value) { + set_config($name, $value, 'mod_hvp'); + } + + /** + * Implements updateContentFields(). + */ + public function updateContentFields($id, $fields) { + global $DB; + + $content = new \stdClass(); + $content->id = $id; + + foreach ($fields as $name => $value) { + $content->$name = $value; + } + + $DB->update_record('hvp', $content); + } + + /** + * Implements deleteLibraryDependencies + */ + public function deleteLibraryDependencies($libraryId) { + global $DB; + + $DB->delete_records('hvp_libraries_libraries', array('library_id' => $libraryId)); + } + + /** + * Implements deleteContentData + */ + public function deleteContentData($contentId) { + global $DB; + + // Remove content + $DB->delete_records('hvp', array('id' => $contentId)); + + // Remove content library dependencies + $this->deleteLibraryUsage($contentId); + + // Remove user data for content + $DB->delete_records('hvp_content_user_data', array('hvp_id' => $contentId)); + } + + /** + * Implements deleteLibraryUsage + */ + public function deleteLibraryUsage($contentId) { + global $DB; + + $DB->delete_records('hvp_contents_libraries', array('hvp_id' => $contentId)); + } + + /** + * Implements saveLibraryUsage + */ + public function saveLibraryUsage($contentId, $librariesInUse) { + global $DB; + + $dropLibraryCssList = array(); + foreach ($librariesInUse as $dependency) { + if (!empty($dependency['library']['dropLibraryCss'])) { + $dropLibraryCssList = array_merge($dropLibraryCssList, explode(', ', $dependency['library']['dropLibraryCss'])); + } + } + // TODO: Consider moving the above code to core. Same for all impl. + + foreach ($librariesInUse as $dependency) { + $dropCss = in_array($dependency['library']['machineName'], $dropLibraryCssList) ? 1 : 0; + $DB->insert_record('hvp_contents_libraries', array( + 'hvp_id' => $contentId, + 'library_id' => $dependency['library']['libraryId'], + 'dependency_type' => $dependency['type'], + 'drop_css' => $dropCss, + 'weight' => $dependency['weight'] + )); + } + } + + /** + * Implements loadLibrary + */ + public function loadLibrary($machineName, $majorVersion, $minorVersion) { + global $DB; + + $library = $DB->get_record('hvp_libraries', array( + 'machine_name' => $machineName, + 'major_version' => $majorVersion, + 'minor_version' => $minorVersion + )); + + $libraryData = array( + 'libraryId' => $library->id, + 'machineName' => $library->machine_name, + 'title' => $library->title, + 'majorVersion' => $library->major_version, + 'minorVersion' => $library->minor_version, + 'patchVersion' => $library->patch_version, + 'embedTypes' => $library->embed_types, + 'preloadedJs' => $library->preloaded_js, + 'preloadedCss' => $library->preloaded_css, + 'dropLibraryCss' => $library->drop_library_css, + 'fullscreen' => $library->fullscreen, + 'runnable' => $library->runnable, + 'semantics' => $library->semantics, + 'restricted' => $library->restricted + ); + + $dependencies = $DB->get_records_sql( + 'SELECT hl.id, hl.machine_name, hl.major_version, hl.minor_version, hll.dependency_type + FROM {hvp_libraries_libraries} hll + JOIN {hvp_libraries} hl ON hll.required_library_id = hl.id + WHERE hll.library_id = ?', array($library->id)); + foreach ($dependencies as $dependency) { + $libraryData[$dependency->dependency_type . 'Dependencies'][] = array( + 'machineName' => $dependency->machine_name, + 'majorVersion' => $dependency->major_version, + 'minorVersion' => $dependency->minor_version + ); + } + + return $libraryData; + } + + /** + * Implements clearFilteredParameters(). + */ + public function clearFilteredParameters($library_id) { + global $DB; + + $DB->execute("UPDATE {hvp} SET filtered = NULL WHERE main_library_id = ?", array($library_id)); + } + + /** + * Implements getNumNotFiltered(). + */ + public function getNumNotFiltered() { + global $DB; + + return (int) $DB->get_field_sql( + "SELECT COUNT(id) + FROM {hvp} + WHERE " . $DB->sql_compare_text('filtered') . " = ''"); + } + + /** + * Implements getNumContent(). + */ + public function getNumContent($library_id) { + global $DB; + + return (int) $DB->get_field_sql( + "SELECT COUNT(id) FROM {hvp} WHERE main_library_id = ?", + array($library_id)); + } + + /** + * Implements isContentSlugAvailable + */ + public function isContentSlugAvailable($slug) { + global $DB; + + return !$DB->get_field_sql("SELECT slug FROM {hvp} WHERE slug = ?", array($slug)); + } + + /** + * Implements saveCachedAssets + */ + public function saveCachedAssets($key, $libraries) { + global $DB; + + foreach ($libraries as $library) { + $cachedAsset = (object) array( + 'library_id' => $library['id'], + 'hash' => $key + ); + $DB->insert_record('hvp_libraries_cachedassets', $cachedAsset); + } + } + + /** + * Implements deleteCachedAssets + */ + public function deleteCachedAssets($library_id) { + global $DB; + + // Get all the keys so we can remove the files + $results = $DB->get_records_sql( + 'SELECT hash + FROM {hvp_libraries_cachedassets} + WHERE library_id = ?', + array($library_id)); + + // Remove all invalid keys + $hashes = array(); + foreach ($results as $key) { + $hashes[] = $key->hash; + $DB->delete_records('hvp_libraries_cachedassets', array('hash' => $key->hash)); + } + + return $hashes; + } + + /** + * Implements getLibraryStats + */ + public function getLibraryStats($type) { + global $DB; + $count = array(); + + // Get the counts for the given type of event + $records = $DB->get_records_sql( + "SELECT id, + library_name AS name, + library_version AS version, + num + FROM {hvp_counters} + WHERE type = ?", + array($type)); + + // Extract num from records + foreach($records as $library) { + $count[$library->name . ' ' . $library->version] = $library->num; + } + + return $count; + } + + /** + * Implements getNumAuthors + */ + public function getNumAuthors() { + global $DB; + + // Get number of unique courses using H5P + return intval($DB->get_field_sql( + "SELECT COUNT(DISTINCT course) + FROM {hvp}" + )); + } + + /** + * Implements afterExportCreated + */ + public function afterExportCreated() { + } + + /** + * Implements hasPermission + * @method hasPermission + * @param [H5PPermission] $permission + * @param [int] $contentId + * @return boolean + */ + public function hasPermission($permission, $content_id = NULL) { + switch ($permission) { + case \H5PPermission::DOWNLOAD_H5P: + global $DB; + $context = \context_course::instance($DB->get_field('hvp', 'course', array('id' => $content_id))); + return has_capability('mod/hvp:getexport', $context); + } + return FALSE; + } +} diff --git a/html/moodle2/mod/hvp/classes/results.php b/html/moodle2/mod/hvp/classes/results.php new file mode 100755 index 0000000000..d209a86dac --- /dev/null +++ b/html/moodle2/mod/hvp/classes/results.php @@ -0,0 +1,319 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * The mod_hvp file storage + * + * @package mod_hvp + * @copyright 2016 Joubel AS + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_hvp; +defined('MOODLE_INTERNAL') || die(); + +/** + * The mod_hvp file storage class. + * + * @package mod_hvp + * @since Moodle 2.7 + * @copyright 2016 Joubel AS + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class results { + + // Type specific inputs + protected $content_id; + + // Generic result inputs + protected $offset, $limit, $orderBy, $orderDir, $filters; + + /** + * Start handling results by filtering input parameters. + */ + function __construct() { + $this->filter_input(); + } + + /** + * Filter and load input parameters + * + * @throws \coding_exception + */ + protected function filter_input() { + // Type specifc + $this->content_id = optional_param('content_id', 0, PARAM_INT); + + // Used to handle pagination + $this->offset = optional_param('offset', 0, PARAM_INT); + + // Max number of items to display on one page + $this->limit = optional_param('limit', 20, PARAM_INT); + if ($this->limit > 100) { + // Avoid wrong usage + throw new \coding_exception('limit to high'); + } + + // Field to order by + $this->orderBy = optional_param('sortBy', 0, PARAM_INT); + + // Direction to order in + $this->orderDir = optional_param('sortDir', 0, PARAM_INT); + + // List of fields to filter results on + $this->filters = optional_param_array('filters', array(), PARAM_RAW_TRIMMED); + } + + /** + * Print results data + */ + public function print_results() { + global $DB; + + // Check permission + $course = $DB->get_field('hvp', 'course', array('id' => $this->content_id)); + $context = \context_course::instance($course); + if (!has_capability('mod/hvp:viewresults', $context)) { + \H5PCore::ajaxError(get_string('nopermissiontoviewresult', 'hvp')); + http_response_code(403); + exit; + } + + $results = $this->get_results(); + + // Make data readable for humans + $rows = array(); + foreach ($results as $result) { + $rows[] = array( + \html_writer::link( + new \moodle_url('/user/view.php', array( + 'id' => $result->user_id, + 'course' => $course + )), + \fullname($result) + ), + $result->rawgrade === null ? '—' : (int) $result->rawgrade, + $result->rawgrade === null ? '—' : (int) $result->rawgrademax, + empty($result->timemodified) ? '—' : date('Y/m/d – H:i', $result->timemodified) + ); + } + + // Print + header('Cache-Control: no-cache'); + header('Content-type: application/json'); + print json_encode(array( + 'num' => $this->get_results_num(), + 'rows' => $rows + )); + } + + /** + * Builds the SQL query required to retrieve results for the given + * interactive content. + * + * @throws \coding_exception + * @return array + */ + protected function get_results() { + // Add extra fields, joins and where for the different result lists + if ($this->content_id !== 0) { + list($fields, $join, $where, $order, $args) = $this->get_content_sql(); + } + else { + throw new \coding_exception('missing content_id'); + } + + // Build where statement + $where[] = "i.itemtype = 'mod'"; + $where[] = "i.itemmodule = 'hvp'"; + $where = 'WHERE ' . implode(' AND ', $where); + + // Order results by the select column and direction + $order[] = 'g.rawgrade'; + $order[] = 'g.rawgrademax'; + $order[] = 'g.timemodified'; + $order_by = $this->get_order_sql($order); + + // Get from statement + $from = $this->get_from_sql(); + + // Execute query and get results + return $this->get_sql_results(" + SELECT g.id, + {$fields} + g.rawgrade, + g.rawgrademax, + g.timemodified + {$from} + {$join} + {$where} + {$order_by} + ", $args, + $this->offset, + $this->limit); + } + + /** + * Build and execute the query needed to tell the number of total results. + * This is used to create pagination. + * + * @return int + */ + protected function get_results_num() { + global $DB; + + list($fields, $join, $where, $order, $args) = $this->get_content_sql(); + $where[] = "i.itemtype = 'mod'"; + $where[] = "i.itemmodule = 'hvp'"; + $where = 'WHERE ' . implode(' AND ', $where); + $from = $this->get_from_sql(); + + return (int) $DB->get_field_sql("SELECT COUNT(i.id) {$from} {$join} {$where}", $args); + } + + /** + * Builds the order part of the SQL query. + * + * @param array $fields Fields allowed to order by + * @throws \coding_exception + * @return string + */ + protected function get_order_sql($fields) { + // Make sure selected order field is valid + if (!isset($fields[$this->orderBy])) { + throw new \coding_exception('invalid order field'); + } + + // Find selected sortable field + $field = $fields[$this->orderBy]; + + if (is_object($field)) { + // Some fields are reverse sorted by default, e.g. text fields. + // This feels more natural for the humans. + if (!empty($field->reverse)) { + $this->orderDir = !$this->orderDir; + } + + $field = $field->name; + } + + $dir = ($this->orderDir ? 'ASC' : 'DESC'); + if ($field === 'u.firstname') { + // Order by all user name fields + $field = implode(" {$dir}, ", self::get_ordered_user_name_fields()); + } + + return "ORDER BY {$field} {$dir}"; + } + + /** + * Get from part of the SQL query. + * + * @return string + */ + protected function get_from_sql() { + return " FROM {grade_items} i JOIN {grade_grades} g ON i.id = g.itemid"; + } + + /** + * Get all user name fields in display order. + * + * @param string $prefix Optional table prefix to prepend to all fields + * @return array + */ + public static function get_ordered_user_name_fields($prefix = 'u.') { + static $ordered; + + if (empty($ordered)) { + $available = \get_all_user_name_fields(); + $displayname = \fullname((object)$available); + if (empty($displayname)) { + $ordered = array("{$prefix}firstname", "{$prefix}lastname"); + } + else { + // Find fields in order + $matches = array(); + preg_match_all('/' . implode('|', $available) . '/', $displayname, $matches); + $ordered = $matches[0]; + foreach ($ordered as $index => $value) { + $ordered[$index] = "{$prefix}{$value}"; + } + } + } + + return $ordered; + } + + /** + * Get the different parts needed to create the SQL for getting results + * belonging to a specifc content. + * (An alternative to this could be getting all the results for a + * specified user.) + * + * @return array $fields, $join, $where, $order, $args + */ + protected function get_content_sql() { + global $DB; + + $usernamefields = implode(', ', self::get_ordered_user_name_fields()); + $fields = " u.id AS user_id, {$usernamefields}, "; + $join = " LEFT JOIN {user} u ON u.id = g.userid"; + $where = array("i.iteminstance = ?"); + $args = array($this->content_id); + + if (isset($this->filters[0])) { + $keywordswhere = array(); + + // Split up keywords using whitespace and comma + foreach (preg_split("/[\s,]+/", $this->filters[0]) as $keyword) { + // Search all user name fields + $usernamewhere = array(); + foreach (self::get_ordered_user_name_fields() as $usernamefield) { + $usernamewhere[] = $DB->sql_like($usernamefield, '?', false); + $args[] = '%' . $keyword . '%'; + } + + // Add user name fields where to keywords where + if (!empty($usernamewhere)) { + $keywordswhere[] = '(' . implode(' OR ', $usernamewhere) . ')'; + } + } + + // Add keywords where to SQL where + if (!empty($keywordswhere)) { + $where[] = '(' . implode(' AND ', $keywordswhere) . ')'; + } + } + $order = array((object) array( + 'name' => 'u.firstname', + 'reverse' => true + )); + + return array($fields, $join, $where, $order, $args); + } + + /** + * Execute given query and return any results + * + * @param string $query + * @param array $args Used for placeholders + * @return array + */ + protected function get_sql_results($query, $args, $limitfrom = 0, $limitnum = 0) { + global $DB; + return $DB->get_records_sql($query, $args, $limitfrom, $limitnum); + } +} diff --git a/html/moodle2/mod/hvp/classes/task/look_for_updates.php b/html/moodle2/mod/hvp/classes/task/look_for_updates.php new file mode 100755 index 0000000000..0567aeecf6 --- /dev/null +++ b/html/moodle2/mod/hvp/classes/task/look_for_updates.php @@ -0,0 +1,88 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * Defines the task which looks for H5P updates. + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_hvp\task; + +defined('MOODLE_INTERNAL') || die(); + +/** + * The mod_hvp look for updates task class + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class look_for_updates extends \core\task\scheduled_task { + public function get_name() { + return get_string('lookforupdates', 'mod_hvp'); + } + + public function execute() { + global $USER; + + // Check to make sure external communications hasn't been disabled + $extcom = !!get_config('mod_hvp', 'external_communication'); + $extcomnotify = !!get_config('mod_hvp', 'external_communication_notify'); + if ($extcom || !$extcomnotify) { + $core = \mod_hvp\framework::instance(); + $core->fetchLibrariesMetadata(!$extcom); + set_config('external_communication_notify', $extcom ? false : time(), 'mod_hvp'); + + // Notify admin if there are updates available! + $update_available = \get_config('mod_hvp', 'update_available'); + $current_update = \get_config('mod_hvp', 'current_update'); + $admin_notified = \get_config('mod_hvp', 'admin_notified'); + if ($admin_notified !== $update_available && // Admin has not been notified about this update + $update_available !== false && + $current_update !== false && + $current_update < $update_available) { // New update is available + + // Send message + $updatesurl = new \moodle_url('/mod/hvp/library_list.php'); + $message = new \stdClass(); + $message->component = 'mod_hvp'; + $message->name = 'updates'; + $message->userfrom = $USER; + $message->userto = get_admin(); + $message->subject = get_string('updatesavailabletitle', 'mod_hvp'); + $message->fullmessage = get_string('updatesavailablemsgpt1', 'mod_hvp') . ' ' . + get_string('updatesavailablemsgpt2', 'mod_hvp') . "\n\n" . + get_string('updatesavailablemsgpt3', 'mod_hvp', date('Y-m-d', $update_available)) . "\n" . + get_string('updatesavailablemsgpt4', 'mod_hvp', date('Y-m-d', $current_update)) . "\n\n" . + $updatesurl; + $message->fullmessageformat = FORMAT_PLAIN; + $message->fullmessagehtml = '<p>' . get_string('updatesavailablemsgpt1', 'mod_hvp') . '<br/>' . + get_string('updatesavailablemsgpt2', 'mod_hvp') . '</p>' . + '<p>' . get_string('updatesavailablemsgpt3', 'mod_hvp', '<b>' . date('Y-m-d', $update_available) . '</b>') . '<br/>' . + get_string('updatesavailablemsgpt4', 'mod_hvp', '<b>' . date('Y-m-d', $current_update) . '</b>') . '</p>' . + '<a href="' . $updatesurl . '" target="_blank">' . $updatesurl . '</a>'; + $message->smallmessage = ''; + $message->notification = 1; + message_send($message); + + // Keep track of which version we've notfied about + \set_config('admin_notified', $update_available, 'mod_hvp'); + } + } + } +} diff --git a/html/moodle2/mod/hvp/classes/task/remove_old_log_entries.php b/html/moodle2/mod/hvp/classes/task/remove_old_log_entries.php new file mode 100755 index 0000000000..f8cd4f1339 --- /dev/null +++ b/html/moodle2/mod/hvp/classes/task/remove_old_log_entries.php @@ -0,0 +1,47 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * Defines the task which looks for H5P updates. + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_hvp\task; + +defined('MOODLE_INTERNAL') || die(); + +/** + * The mod_hvp look for updates task class + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class remove_old_log_entries extends \core\task\scheduled_task { + public function get_name() { + return get_string('removeoldlogentries', 'mod_hvp'); + } + + public function execute() { + global $DB; + + require_once __DIR__ . '/../../autoloader.php'; + $older_than = (time() - \H5PEventBase::$log_time); + $DB->execute("DELETE FROM {hvp_events} WHERE created_at < {$older_than}"); + } +} diff --git a/html/moodle2/mod/hvp/classes/task/remove_tmpfiles.php b/html/moodle2/mod/hvp/classes/task/remove_tmpfiles.php new file mode 100755 index 0000000000..896617646c --- /dev/null +++ b/html/moodle2/mod/hvp/classes/task/remove_tmpfiles.php @@ -0,0 +1,63 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * Defines the task which removes old tmp files + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_hvp\task; + +defined('MOODLE_INTERNAL') || die(); + +/** + * The mod_hvp look for updates task class + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class remove_tmpfiles extends \core\task\scheduled_task { + public function get_name() { + return get_string('removetmpfiles', 'mod_hvp'); + } + + public function execute() { + global $DB; + $tmpfiles = $DB->get_records_sql( + "SELECT f.id + FROM {hvp_tmpfiles} tf + JOIN {files} f ON f.id = tf.id + WHERE f.timecreated < ?", + array(time() - 86400) + ); + if (empty($tmpfiles)) { + return; // Nothing to clean up + } + + $fs = get_file_storage(); + foreach ($tmpfiles as $tmpfile) { + // Delete file + $file = $fs->get_file_by_id($tmpfile->id); + $file->delete(); + + // Remove tmpfile entry + $DB->delete_records('hvp_tmpfiles', array('id' => $tmpfile->id)) ; + } + } +} diff --git a/html/moodle2/mod/hvp/classes/update_libraries_form.php b/html/moodle2/mod/hvp/classes/update_libraries_form.php new file mode 100755 index 0000000000..b3fafe9071 --- /dev/null +++ b/html/moodle2/mod/hvp/classes/update_libraries_form.php @@ -0,0 +1,100 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * \mod_hvp\update_libraries_form class + * + * @package mod_hvp + * @copyright 2016 Joubel AS + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_hvp; +defined('MOODLE_INTERNAL') || die(); + +// Load moodleform class +require_once("$CFG->libdir/formslib.php"); + +/** + * Form for automatically downloading and installing updates. + * + * @package mod_hvp + * @copyright 2016 Joubel AS + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class update_libraries_form extends \moodleform { + + /** + * Define form elements + */ + public function definition() { + global $CFG, $OUTPUT; + + // Get form + $mform = $this->_form; + + // Add intro text + $mform->addElement('static', 'h5pintromsg', '', get_string('updatesavailable', 'hvp')); + $mform->addElement('static', 'h5pwhyupdatemsg', '', get_string('whyupdatepart1', 'hvp', 'href="https://h5p.org/why-update" target="_blank"') . '<br/>' . + get_string('whyupdatepart2', 'hvp')); + + // Inform about current version + $current_update = \get_config('mod_hvp', 'current_update'); + if ($current_update !== false && $current_update > 1) { + $mform->addElement('static', 'h5pcurrentversionmsg', get_string('currentversion', 'hvp'), date('Y-m-d', $current_update)); + } + + // Inform about available version + $update_available = \get_config('mod_hvp', 'update_available'); + $mform->addElement('static', 'h5pavailableversionmsg', get_string('availableversion', 'hvp'), date('Y-m-d', $update_available)); + + // Further instrcutions + $mform->addElement('static', 'h5pusebuttonbelowmsg', '', get_string('usebuttonbelow', 'hvp')); + + // Upload button + $this->add_action_buttons(false, get_string('downloadandupdate', 'hvp')); + } + + /** + * Preprocess incoming data + * + * @param array $default_values default values for form + */ + function data_preprocessing(&$default_values) { + + } + + /** + * Validate incoming data + * + * @param array $data array of ("fieldname"=>value) of submitted data + * @param array $files array of uploaded files "element_name"=>tmp_file_path + * @return array of "element_name"=>"error_description" if there are errors, + * or an empty array if everything is OK (true allowed for backwards compatibility too). + */ + function validation($data, $files) { + global $CFG; + require_once($CFG->libdir . '/filelib.php'); + $errors = array(); + + $error = \mod_hvp\framework::downloadH5pLibraries(true); + if ($error !== null) { + $errors['h5pintromsg'] = $error; + } + + return $errors; + } +} diff --git a/html/moodle2/mod/hvp/classes/upload_libraries_form.php b/html/moodle2/mod/hvp/classes/upload_libraries_form.php new file mode 100755 index 0000000000..5fc2a5b2f2 --- /dev/null +++ b/html/moodle2/mod/hvp/classes/upload_libraries_form.php @@ -0,0 +1,123 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * \mod_hvp\upload_libraries_form class + * + * @package mod_hvp + * @copyright 2016 Joubel AS + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_hvp; + +defined('MOODLE_INTERNAL') || die(); + +// Load moodleform class +require_once("$CFG->libdir/formslib.php"); + +/** + * Form to upload new H5P libraries and upgrade existing once + * + * @package mod_hvp + * @copyright 2016 Joubel AS + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class upload_libraries_form extends \moodleform { + + /** + * Define form elements + */ + public function definition() { + global $CFG, $OUTPUT; + + // Get form + $mform = $this->_form; + + // Add File Picker + $mform->addElement('filepicker', 'h5pfile', get_string('h5pfile', 'hvp'), null, + array('maxbytes' => $CFG->maxbytes, 'accepted_types' => '*.h5p')); + + // Add options + $mform->addElement('checkbox', 'onlyupdate', get_string('options', 'hvp'), get_string('onlyupdate', 'hvp'), array('group' => 1)); + $mform->setType('onlyupdate', PARAM_BOOL); + $mform->setDefault('onlyupdate', false); + + $mform->addElement('checkbox', 'disablefileextensioncheck', '', get_string('disablefileextensioncheck', 'hvp'), array('group' => 1)); + $mform->setType('disablefileextensioncheck', PARAM_BOOL); + $mform->setDefault('disablefileextensioncheck', false); + $mform->addElement('static', '', '', $OUTPUT->notification(get_string('disablefileextensioncheckwarning', 'hvp'), 'notifymessage')); + + // Upload button + $this->add_action_buttons(false, get_string('upload', 'hvp')); + } + + /** + * Preprocess incoming data + * + * @param array $default_values default values for form + */ + function data_preprocessing(&$default_values) { + // Aaah.. we meet again h5pfile! + $draftitemid = file_get_submitted_draft_itemid('h5pfile'); + file_prepare_draft_area($draftitemid, $this->context->id, 'mod_hvp', 'package', 0); + $default_values['h5pfile'] = $draftitemid; + } + + /** + * Validate incoming data + * + * @param array $data array of ("fieldname"=>value) of submitted data + * @param array $files array of uploaded files "element_name"=>tmp_file_path + * @return array of "element_name"=>"error_description" if there are errors, + * or an empty array if everything is OK (true allowed for backwards compatibility too). + */ + function validation($data, $files) { + global $CFG; + $errors = array(); + + // Check for file + if (empty($data['h5pfile'])) { + $errors['h5pfile'] = get_string('required'); + return $errors; + } + + $files = $this->get_draft_files('h5pfile'); + if (count($files) < 1) { + $errors['h5pfile'] = get_string('required'); + return $errors; + } + + // Add file so that core framework can find it + $file = reset($files); + $interface = \mod_hvp\framework::instance('interface'); + + $path = $CFG->tempdir . uniqid('/hvp-'); + $interface->getUploadedH5pFolderPath($path); + $path .= '.h5p'; + $interface->getUploadedH5pPath($path); + $file->copy_content_to($path); + + // Validate package + $h5pValidator = \mod_hvp\framework::instance('validator'); + if (!$h5pValidator->isValidPackage(true, isset($data['onlyupdate']))) { + $infomessages = implode('<br/>', \mod_hvp\framework::messages('info')); + $errormessages = implode('<br/>', \mod_hvp\framework::messages('error')); + $errors['h5pfile'] = ($errormessages ? $errormessages . '<br/>' : '') . $infomessages; + } + return $errors; + } +} diff --git a/html/moodle2/mod/hvp/classes/user_grades.php b/html/moodle2/mod/hvp/classes/user_grades.php new file mode 100755 index 0000000000..a91e36021f --- /dev/null +++ b/html/moodle2/mod/hvp/classes/user_grades.php @@ -0,0 +1,84 @@ +<?php + +/** + * The mod_hvp user grades + * + * @package mod_hvp + * @copyright 2016 Joubel AS + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +namespace mod_hvp; +require(__DIR__ . '/../lib.php'); + +/** + * Handles grade storage for users + * @package mod_hvp + */ +class user_grades { + + public static function handle_ajax() { + global $DB, $USER; + + if (!\H5PCore::validToken('result', required_param('token', PARAM_RAW))) { + \H5PCore::ajaxError(get_string('invalidtoken', 'hvp')); + exit; + } + + // Content parameters + $content_id = required_param('contentId', PARAM_INT); + $score = required_param('score', PARAM_INT); + $max_score = required_param('maxScore', PARAM_INT); + + // Time values not usable by gradebook + // $opened = required_param('opened', PARAM_INT); + // $finished = required_param('finished', PARAM_INT); + + // Get hvp data from contentId + $hvp = $DB->get_record('hvp', array('id' => $content_id)); + + // Check permissions + $context = \context_course::instance($hvp->course); + if (!has_capability('mod/hvp:saveresults', $context)) { + \H5PCore::ajaxError(get_string('nopermissiontosaveresult', 'hvp')); + http_response_code(403); + exit; + } + + // Create grade object and set grades + $grade = (object) array( + 'userid' => $USER->id + ); + + // Get course module id from db, required for grade item + $cm_id_sql = "SELECT cm.id, h.name + FROM {course_modules} cm, {hvp} h, {modules} m + WHERE cm.instance = h.id AND h.id = ? AND m.name = 'hvp' AND m.id = cm.module"; + $result = $DB->get_record_sql($cm_id_sql, array($content_id)); + + // Set grade using Gradebook API + $hvp->cmidnumber = $result->id; + $hvp->name = $result->name; + $hvp->rawgrade = $score; + $hvp->rawgrademax = $max_score; + hvp_grade_item_update($hvp, $grade); + + // Get content info for log + $content = $DB->get_record_sql( + "SELECT c.name AS title, l.machine_name AS name, l.major_version, l.minor_version + FROM {hvp} c + JOIN {hvp_libraries} l ON l.id = c.main_library_id + WHERE c.id = ?", + array($content_id) + ); + + // Log view + new \mod_hvp\event( + 'results', 'set', + $content_id, $content->title, + $content->name, $content->major_version . '.' . $content->minor_version + ); + + \H5PCore::ajaxSuccess(); + exit; + } +} diff --git a/html/moodle2/mod/hvp/dataviews.js b/html/moodle2/mod/hvp/dataviews.js new file mode 100755 index 0000000000..6acc1d6866 --- /dev/null +++ b/html/moodle2/mod/hvp/dataviews.js @@ -0,0 +1,42 @@ +(function ($) { + + /** + * Creates a new dataview. + * + * @private + * @param {object} dataView Structure + * @param {string} dataView.source AJAX URL for data view + * @param {object[]} dataView.headers Header text and props + * @param {boolean[]} dataView.filters Which fields to allow filtering for + * @param {object} dataView.order Default order by and direction + * @param {object} dataView.l10n Translations + * @param {Element} wrapper Where in the DOM should the dataview be appended + * @param {function} loaded Callback for when the dataview is ready + */ + var createDataView = function (dataView, wrapper, loaded) { + new H5PDataView( + wrapper, + dataView.source, + dataView.headers, + dataView.l10n, + undefined, + dataView.filters, + loaded, + dataView.order + ); + }; + + // Create data views when page is done loading. + $(document).ready(function () { + for (var id in H5PIntegration.dataViews) { + if (!H5PIntegration.dataViews.hasOwnProperty(id)) { + continue; + } + + var wrapper = $('#' + id).get(0); + if (wrapper !== undefined) { + createDataView(H5PIntegration.dataViews[id], wrapper); + } + } + }); +})(H5P.jQuery); diff --git a/html/moodle2/mod/hvp/db/access.php b/html/moodle2/mod/hvp/db/access.php new file mode 100755 index 0000000000..a658f9b682 --- /dev/null +++ b/html/moodle2/mod/hvp/db/access.php @@ -0,0 +1,145 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * Capability definitions for the hvp module. + * + * Available archetypes: + * manager + * coursecreator + * editingteacher + * teacher + * student + * guest + * user + * frontpage + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$capabilities = array( + + 'mod/hvp:addinstance' => array( + 'riskbitmask' => RISK_XSS, + 'captype' => 'write', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => array( + 'editingteacher' => CAP_ALLOW, + 'manager' => CAP_ALLOW + ), + 'clonepermissionsfrom' => 'moodle/course:manageactivities' + ), + + 'mod/hvp:restrictlibraries' => array( + 'captype' => 'write', + 'contextlevel' => CONTEXT_MODULE, + 'archetypes' => array( + ) + ), + + 'mod/hvp:updatelibraries' => array( + 'captype' => 'write', + 'contextlevel' => CONTEXT_MODULE, + 'archetypes' => array( + ) + ), + + 'mod/hvp:userestrictedlibraries' => array( + 'captype' => 'write', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => array( + 'manager' => CAP_ALLOW + ) + ), + + 'mod/hvp:savecontentuserdata' => array( + 'captype' => 'write', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => array( + 'manager' => CAP_ALLOW, + 'editingteacher' => CAP_ALLOW, + 'teacher' => CAP_ALLOW, + 'student' => CAP_ALLOW + ) + ), + + 'mod/hvp:saveresults' => array( + 'captype' => 'write', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => array( + 'manager' => CAP_ALLOW, + 'editingteacher' => CAP_ALLOW, + 'teacher' => CAP_ALLOW, + 'student' => CAP_ALLOW + ) + ), + + 'mod/hvp:viewresults' => array( + 'captype' => 'write', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => array( + 'manager' => CAP_ALLOW, + 'editingteacher' => CAP_ALLOW, + 'teacher' => CAP_ALLOW, + 'student' => CAP_ALLOW + ) + ), + + 'mod/hvp:getcachedassets' => array( + 'captype' => 'read', + 'contextlevel' => CONTEXT_SYSTEM, + 'archetypes' => array( + 'manager' => CAP_ALLOW, + 'editingteacher' => CAP_ALLOW, + 'teacher' => CAP_ALLOW, + 'student' => CAP_ALLOW, + 'user' => CAP_ALLOW, + 'guest' => CAP_ALLOW + ) + ), + + 'mod/hvp:getcontent' => array( + 'captype' => 'read', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => array( + 'manager' => CAP_ALLOW, + 'editingteacher' => CAP_ALLOW, + 'teacher' => CAP_ALLOW, + 'student' => CAP_ALLOW + ) + ), + + 'mod/hvp:getexport' => array( + 'captype' => 'read', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => array( + 'manager' => CAP_ALLOW, + 'editingteacher' => CAP_ALLOW, + 'teacher' => CAP_ALLOW + ) + ), + + 'mod/hvp:updatesavailable' => array( + 'captype' => 'read', + 'contextlevel' => CONTEXT_SYSTEM, + 'archetypes' => array( + ) + ), +); diff --git a/html/moodle2/mod/hvp/db/install.php b/html/moodle2/mod/hvp/db/install.php new file mode 100755 index 0000000000..03617b5c23 --- /dev/null +++ b/html/moodle2/mod/hvp/db/install.php @@ -0,0 +1,43 @@ +<?php + +function xmldb_hvp_install() { + + // Try to install all the default content types + require_once(__DIR__ . '/../autoloader.php'); + + // Override permission check for the install process, since caps hasn't + // been set yet. + $interface = \mod_hvp\framework::instance('interface'); + $interface->mayUpdateLibraries(true); + + // Fetch info about library updates + $core = \mod_hvp\framework::instance('core'); + $core->fetchLibrariesMetadata(); + + // Download default libraries and try to install + $error = \mod_hvp\framework::downloadH5pLibraries(); + if ($error !== null) { + \mod_hvp\framework::messages('error', $error); + } + + // Print any messages + echo '<h3>' . get_string('welcomeheader', 'hvp') . '</h3>' . + '<p>' . + get_string('welcomegettingstarted', 'hvp', array( + 'moodle_tutorial' => 'href="https://h5p.org/moodle" target="_blank"', + 'example_content' => 'href="https://h5p.org/content-types-and-applications" target="_blank"' + )) . + '</p>' . + '<p>' . + get_string('welcomecommunity', 'hvp', array( + 'forums' => 'href="https://h5p.org/forum" target="_blank"', + 'gitter' => 'href="https://gitter.im/h5p/CommunityChat" target="_blank"' + )) . + '</p>' . + '<p>' . get_string('welcomecontactus', 'hvp', + 'href="https://h5p.org/contact" target="_blank"') . + '</p>'; + + \mod_hvp\framework::printMessages('info', \mod_hvp\framework::messages('info')); + \mod_hvp\framework::printMessages('error', \mod_hvp\framework::messages('error')); +} diff --git a/html/moodle2/mod/hvp/db/install.xml b/html/moodle2/mod/hvp/db/install.xml new file mode 100755 index 0000000000..ea1092c47a --- /dev/null +++ b/html/moodle2/mod/hvp/db/install.xml @@ -0,0 +1,163 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<XMLDB PATH="mod/hvp/db" VERSION="20160113" COMMENT="XMLDB file for Moodle mod/hvp" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd" +> + <TABLES> + <TABLE NAME="hvp" COMMENT="Activity data"> + <FIELDS> + <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/> + <FIELD NAME="course" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/> + <FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="intro" TYPE="text" NOTNULL="false" SEQUENCE="false"/> + <FIELD NAME="introformat" TYPE="int" LENGTH="4" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/> + <FIELD NAME="json_content" TYPE="text" NOTNULL="true" SEQUENCE="false" COMMENT="The content in json format"/> + <FIELD NAME="embed_type" TYPE="char" LENGTH="127" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="disable" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/> + <FIELD NAME="main_library_id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false" COMMENT="The library we first instanciate for this node"/> + <FIELD NAME="content_type" TYPE="char" LENGTH="127" NOTNULL="false" SEQUENCE="false" COMMENT="Content type as defined in h5p.json"/> + <FIELD NAME="author" TYPE="char" LENGTH="127" NOTNULL="false" SEQUENCE="false" COMMENT="Author as defined in h5p.json"/> + <FIELD NAME="license" TYPE="char" LENGTH="7" NOTNULL="false" SEQUENCE="false" COMMENT="License as defined in h5p.json"/> + <FIELD NAME="meta_keywords" TYPE="text" NOTNULL="false" SEQUENCE="false" COMMENT="Keywords as defined in h5p.json"/> + <FIELD NAME="meta_description" TYPE="text" NOTNULL="false" SEQUENCE="false" COMMENT="Meta description as defined in h5p.json"/> + <FIELD NAME="filtered" TYPE="text" NOTNULL="false" SEQUENCE="false" COMMENT="Filtered version of json_content"/> + <FIELD NAME="slug" TYPE="char" NOTNULL="true" SEQUENCE="false" COMMENT="Human readable content identifier that is unique"/> + <FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/> + <FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/> + </FIELDS> + <KEYS> + <KEY NAME="primary" TYPE="primary" FIELDS="id"/> + </KEYS> + </TABLE> + <TABLE NAME="hvp_content_user_data" COMMENT="Stores user data about the content"> + <FIELDS> + <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/> + <FIELD NAME="user_id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false" COMMENT="Id for the user answering this H5P"/> + <FIELD NAME="hvp_id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false" COMMENT="Id of hvp content in the 'hvp' table"/> + <FIELD NAME="sub_content_id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false" COMMENT="Subcontent id of hvp content, 0 if this is not subcontent"/> + <FIELD NAME="data_id" TYPE="char" LENGTH="127" NOTNULL="false" SEQUENCE="false" COMMENT="The data type identifier"/> + <FIELD NAME="data" TYPE="text" NOTNULL="false" SEQUENCE="false" COMMENT="The actual user data that was stored."/> + <FIELD NAME="preloaded" TYPE="int" LENGTH="1" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="delete_on_content_change" TYPE="int" LENGTH="1" NOTNULL="true" SEQUENCE="false"/> + </FIELDS> + <KEYS> + <KEY NAME="primary" TYPE="primary" FIELDS="id"/> + </KEYS> + </TABLE> + <TABLE NAME="hvp_libraries" COMMENT="Stores information about libraries."> + <FIELDS> + <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true" COMMENT="Primary Key: The id of the library"/> + <FIELD NAME="machine_name" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" COMMENT="The library machine name"/> + <FIELD NAME="title" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" COMMENT="The human readable name of this library"/> + <FIELD NAME="major_version" TYPE="int" LENGTH="4" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="minor_version" TYPE="int" LENGTH="4" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="patch_version" TYPE="int" LENGTH="4" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="runnable" TYPE="int" LENGTH="1" NOTNULL="true" SEQUENCE="false" COMMENT="Can this library be started by the module? i.e. not a dependency."/> + <FIELD NAME="fullscreen" TYPE="int" LENGTH="1" NOTNULL="true" DEFAULT="0" SEQUENCE="false" COMMENT="Display fullscreen button"/> + <FIELD NAME="embed_types" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="preloaded_js" TYPE="text" NOTNULL="false" SEQUENCE="false" COMMENT="Comma separated list of scripts to load."/> + <FIELD NAME="preloaded_css" TYPE="text" NOTNULL="false" SEQUENCE="false" COMMENT="Comma separated list of stylesheets to load."/> + <FIELD NAME="drop_library_css" TYPE="text" NOTNULL="false" SEQUENCE="false" COMMENT="List of libraries that should not have CSS included if this library is used. Comma separated list."/> + <FIELD NAME="semantics" TYPE="text" NOTNULL="true" SEQUENCE="false" COMMENT="The semantics definition in json format"/> + <FIELD NAME="restricted" TYPE="int" LENGTH="1" NOTNULL="true" DEFAULT="0" SEQUENCE="false" COMMENT="Restricts the ability to create new content using this library"/> + <FIELD NAME="tutorial_url" TYPE="char" LENGTH="1000" NOTNULL="false" SEQUENCE="false" COMMENT="URL to a tutorial for this library"/> + </FIELDS> + <KEYS> + <KEY NAME="primary" TYPE="primary" FIELDS="id"/> + </KEYS> + <INDEXES> + <INDEX NAME="meta" UNIQUE="false" FIELDS="machine_name, major_version, minor_version, patch_version, runnable"/> + </INDEXES> + </TABLE> + <TABLE NAME="hvp_libraries_libraries" COMMENT="Library dependencies"> + <FIELDS> + <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/> + <FIELD NAME="library_id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false" COMMENT="Primary Key: The id of a H5P library."/> + <FIELD NAME="required_library_id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false" COMMENT="The dependency to load"/> + <FIELD NAME="dependency_type" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" COMMENT="'preloaded, dynamic, or editor'"/> + </FIELDS> + <KEYS> + <KEY NAME="primary" TYPE="primary" FIELDS="id"/> + </KEYS> + </TABLE> + <TABLE NAME="hvp_libraries_languages" COMMENT="Translations for libraries"> + <FIELDS> + <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/> + <FIELD NAME="library_id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="language_code" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="language_json" TYPE="text" NOTNULL="true" SEQUENCE="false" COMMENT="The translations defined in json format"/> + </FIELDS> + <KEYS> + <KEY NAME="primary" TYPE="primary" FIELDS="id"/> + </KEYS> + </TABLE> + <TABLE NAME="hvp_libraries_cachedassets" COMMENT="Use to know which caches to clear when a library is updated"> + <FIELDS> + <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/> + <FIELD NAME="library_id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="hash" TYPE="char" LENGTH="64" NOTNULL="true" SEQUENCE="false"/> + </FIELDS> + <KEYS> + <KEY NAME="primary" TYPE="primary" FIELDS="id"/> + </KEYS> + <INDEXES> + <INDEX NAME="relation" UNIQUE="true" FIELDS="library_id, hash"/> + </INDEXES> + </TABLE> + <TABLE NAME="hvp_contents_libraries" COMMENT="Store which library is used in which content."> + <FIELDS> + <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/> + <FIELD NAME="hvp_id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false" COMMENT="Identifier for a content found from the 'hvp' table"/> + <FIELD NAME="library_id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false" COMMENT="The identifier of a H5P library this content uses"/> + <FIELD NAME="dependency_type" TYPE="char" LENGTH="10" NOTNULL="true" SEQUENCE="false" COMMENT="dynamic, preloaded or editor"/> + <FIELD NAME="drop_css" TYPE="int" LENGTH="1" NOTNULL="true" SEQUENCE="false" COMMENT="1 if the preloaded css from the dependency is to be excluded"/> + <FIELD NAME="weight" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false" COMMENT="Determines the order in which the preloaded libraries will be loaded"/> + </FIELDS> + <KEYS> + <KEY NAME="primary" TYPE="primary" FIELDS="id"/> + </KEYS> + <INDEXES> + <INDEX NAME="meta" UNIQUE="false" FIELDS="drop_css"/> + </INDEXES> + </TABLE> + <TABLE NAME="hvp_events" COMMENT="Keep track of logged H5P events"> + <FIELDS> + <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/> + <FIELD NAME="user_id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="created_at" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="type" TYPE="char" LENGTH="63" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="sub_type" TYPE="char" LENGTH="63" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="content_id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="content_title" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="library_name" TYPE="char" LENGTH="127" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="library_version" TYPE="char" LENGTH="31" NOTNULL="true" SEQUENCE="false"/> + </FIELDS> + <KEYS> + <KEY NAME="primary" TYPE="primary" FIELDS="id"/> + </KEYS> + </TABLE> + <TABLE NAME="hvp_tmpfiles" COMMENT="Keep track of files uploaded before content is saved"> + <FIELDS> + <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/> + </FIELDS> + <KEYS> + <KEY NAME="primary" TYPE="primary" FIELDS="id"/> + </KEYS> + </TABLE> + <TABLE NAME="hvp_counters" COMMENT="A set of global counters to keep track of H5P usage"> + <FIELDS> + <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/> + <FIELD NAME="type" TYPE="char" LENGTH="63" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="library_name" TYPE="char" LENGTH="127" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="library_version" TYPE="char" LENGTH="31" NOTNULL="true" SEQUENCE="false"/> + <FIELD NAME="num" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/> + </FIELDS> + <KEYS> + <KEY NAME="primary" TYPE="primary" FIELDS="id"/> + </KEYS> + <INDEXES> + <INDEX NAME="realkey" UNIQUE="false" FIELDS="type, library_name, library_version"/> + </INDEXES> + </TABLE> + </TABLES> +</XMLDB> diff --git a/html/moodle2/mod/hvp/db/messages.php b/html/moodle2/mod/hvp/db/messages.php new file mode 100755 index 0000000000..5d3cd82f1b --- /dev/null +++ b/html/moodle2/mod/hvp/db/messages.php @@ -0,0 +1,31 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * Defines message providers (types of message sent) + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$messageproviders = array( + // Notify admin that content type updates are available + 'updates' => array( + 'capability' => 'mod/hvp:updatesavailable' + ), +); diff --git a/html/moodle2/mod/hvp/db/tasks.php b/html/moodle2/mod/hvp/db/tasks.php new file mode 100755 index 0000000000..668477d966 --- /dev/null +++ b/html/moodle2/mod/hvp/db/tasks.php @@ -0,0 +1,54 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * Defines the task which looks for H5P updates. + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$tasks = array( + array( + 'classname' => 'mod_hvp\task\look_for_updates', + 'blocking' => 0, + 'minute' => 'R', + 'hour' => 'R', + 'day' => '*', + 'dayofweek' => '*', + 'month' => '*' + ), + array( + 'classname' => 'mod_hvp\task\remove_tmpfiles', + 'blocking' => 0, + 'minute' => 'R', + 'hour' => 'R', + 'day' => '*', + 'dayofweek' => '*', + 'month' => '*' + ), + array( + 'classname' => 'mod_hvp\task\remove_old_log_entries', + 'blocking' => 0, + 'minute' => 'R', + 'hour' => 'R', + 'day' => '*', + 'dayofweek' => '*', + 'month' => '*' + ) +); diff --git a/html/moodle2/mod/hvp/db/upgrade.php b/html/moodle2/mod/hvp/db/upgrade.php new file mode 100755 index 0000000000..97011aed32 --- /dev/null +++ b/html/moodle2/mod/hvp/db/upgrade.php @@ -0,0 +1,194 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * Upgrade definitions for the hvp module. + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/** + * Hvp module upgrade function. + * + * @param string $oldversion The version we are upgrading from + * @return bool Success + */ +function xmldb_hvp_upgrade($oldversion) { + global $CFG, $DB; + + $dbman = $DB->get_manager(); + + if ($oldversion < 2016011300) { + + $table = new xmldb_table('hvp'); + + // Define field timecreated to be added to hvp. + $timecreated = new xmldb_field('timecreated', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'slug'); + + // Conditionally launch add field timecreated. + if (!$dbman->field_exists($table, $timecreated)) { + $dbman->add_field($table, $timecreated); + } + + // Define field timemodified to be added to hvp. + $timemodified = new xmldb_field('timemodified', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'timecreated'); + + // Conditionally launch add field timemodified. + if (!$dbman->field_exists($table, $timemodified)) { + $dbman->add_field($table, $timemodified); + } + + // Hvp savepoint reached. + upgrade_mod_savepoint(true, 2016011300, 'hvp'); + } + + if ($oldversion < 2016042500) { + // Define table hvp_tmpfiles to be created. + $table = new xmldb_table('hvp_tmpfiles'); + + // Adding fields to table hvp_tmpfiles. + $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null); + + // Adding keys to table hvp_tmpfiles. + $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); + + // Conditionally launch create table for hvp_tmpfiles. + if (!$dbman->table_exists($table)) { + $dbman->create_table($table); + } + + // Hvp savepoint reached. + upgrade_mod_savepoint(true, 2016042500, 'hvp'); + } + + if ($oldversion < 2016050600) { + + // Define table hvp_events to be created. + $table = new xmldb_table('hvp_events'); + + // Adding fields to table hvp_events. + $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null); + $table->add_field('user_id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null); + $table->add_field('created_at', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null); + $table->add_field('type', XMLDB_TYPE_CHAR, '63', null, XMLDB_NOTNULL, null, null); + $table->add_field('sub_type', XMLDB_TYPE_CHAR, '63', null, XMLDB_NOTNULL, null, null); + $table->add_field('content_id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null); + $table->add_field('content_title', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null); + $table->add_field('library_name', XMLDB_TYPE_CHAR, '127', null, XMLDB_NOTNULL, null, null); + $table->add_field('library_version', XMLDB_TYPE_CHAR, '31', null, XMLDB_NOTNULL, null, null); + + // Adding keys to table hvp_events. + $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); + + // Conditionally launch create table for hvp_events. + if (!$dbman->table_exists($table)) { + $dbman->create_table($table); + } + + // Define table hvp_counters to be created. + $table = new xmldb_table('hvp_counters'); + + // Adding fields to table hvp_counters. + $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null); + $table->add_field('type', XMLDB_TYPE_CHAR, '63', null, XMLDB_NOTNULL, null, null); + $table->add_field('library_name', XMLDB_TYPE_CHAR, '127', null, XMLDB_NOTNULL, null, null); + $table->add_field('library_version', XMLDB_TYPE_CHAR, '31', null, XMLDB_NOTNULL, null, null); + $table->add_field('num', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null); + + // Adding keys to table hvp_counters. + $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); + + // Adding indexes to table hvp_counters. + $table->add_index('realkey', XMLDB_INDEX_NOTUNIQUE, array('type', 'library_name', 'library_version')); + + // Conditionally launch create table for hvp_counters. + if (!$dbman->table_exists($table)) { + $dbman->create_table($table); + } + + // Hvp savepoint reached. + upgrade_mod_savepoint(true, 2016050600, 'hvp'); + } + + if ($oldversion < 2016051000) { + + $table = new xmldb_table('hvp'); + + // Define field timecreated to be added to hvp. + $intro = new xmldb_field('intro', XMLDB_TYPE_TEXT, null, null, null, null, null, 'name'); + + // Conditionally launch add field timecreated. + if (!$dbman->field_exists($table, $intro)) { + $dbman->add_field($table, $intro); + } + + // Define field timemodified to be added to hvp. + $introformat = new xmldb_field('introformat', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, '0', 'intro'); + + // Conditionally launch add field timemodified. + if (!$dbman->field_exists($table, $introformat)) { + $dbman->add_field($table, $introformat); + } + + // Hvp savepoint reached. + upgrade_mod_savepoint(true, 2016051000, 'hvp'); + } + + if ($oldversion < 2016110100) { + + // Change context of activity files from COURSE to MODULE. + + $filearea = 'content'; + $component = 'mod_hvp'; + + // Find activity ID and correct context ID + $hvpsresult = $DB->get_records_sql( + "SELECT f.id AS fileid, f.itemid, c.id, f.filepath, f.filename, f.pathnamehash + FROM {files} f + JOIN {course_modules} cm ON f.itemid = cm.instance + JOIN {modules} md ON md.id = cm.module + JOIN {context} c ON c.instanceid = cm.id + WHERE md.name = 'hvp' + AND f.filearea = 'content' + AND c.contextlevel = " . CONTEXT_MODULE + ); + + foreach ($hvpsresult as $hvp) { + // Need to re-hash pathname after changing context + $pathnamehash = file_storage::get_pathname_hash($hvp->id, $component, $filearea, $hvp->itemid, $hvp->filepath, $hvp->filename); + + // Double check that hash doesn't exist (avoid duplicate entries) + if (!$DB->get_field_sql("SELECT contextid FROM {files} WHERE pathnamehash = '{$pathnamehash}'")) { + // Update context ID and pathname hash for files + $DB->execute("UPDATE {files} SET contextid = {$hvp->id}, pathnamehash = '{$pathnamehash}' WHERE pathnamehash = '{$hvp->pathnamehash}'"); + } + } + + // Hvp savepoint reached. + upgrade_mod_savepoint(true, 2016110100, 'hvp'); + } + + if ($oldversion < 2016122800) { + \mod_hvp\framework::messages('info', '<span style="font-weight: bold;">Upgrade your H5P content types!</span> Old content types will still work, but the authoring tool will look and feel much better if you <a href="https://h5p.org/update-all-content-types">upgrade the content types</a>.'); + \mod_hvp\framework::printMessages('info', \mod_hvp\framework::messages('info')); + + upgrade_mod_savepoint(true, 2016122800, 'hvp'); + } + + return true; +} diff --git a/html/moodle2/mod/hvp/editor.js b/html/moodle2/mod/hvp/editor.js new file mode 100755 index 0000000000..bbeddf3596 --- /dev/null +++ b/html/moodle2/mod/hvp/editor.js @@ -0,0 +1,22 @@ +(function ($) { + function getRow ($el) { + return $el.closest('.fitem'); + } + + function init () { + var $editor = $('.h5p-editor'); + var $fileField = $('input[name="h5pfile"]'); + + H5PEditor.init( + $('#mform1'), + $('input[name="h5paction"]'), + getRow($fileField), + getRow($editor), + $editor, + $('input[name="h5plibrary"]'), + $('input[name="h5pparams"]') + ); + } + + $(document).ready(init); +})(H5P.jQuery); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/README.md b/html/moodle2/mod/hvp/editor/README.md new file mode 100755 index 0000000000..ad3b5fb64f --- /dev/null +++ b/html/moodle2/mod/hvp/editor/README.md @@ -0,0 +1,8 @@ +H5P Editor PHP Library +========== + +A general library that is supposed to be used in most PHP implementations of H5P. + +## License + +All code is licensed under MIT License \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/CHANGES.md b/html/moodle2/mod/hvp/editor/ckeditor/CHANGES.md new file mode 100755 index 0000000000..e780b7f1d2 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/CHANGES.md @@ -0,0 +1,960 @@ +CKEditor 4 Changelog +==================== + +## CKEditor 4.5.3 + +New Features: + +* [#13501](http://dev.ckeditor.com/ticket/13501): Added the [`config.fileTools_defaultFileName`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fileTools_defaultFileName) option to allow setting a default filen ame for paste uploads. +* [#13603](http://dev.ckeditor.com/ticket/13603): Added support for uploading dropped BMP images. + +Fixed Issues: + +* [#13590](http://dev.ckeditor.com/ticket/13590): Fixed: Various issues related to the [Paste from Word](http://ckeditor.com/addon/pastefromword) feature. Fixes also: + * [#11215](http://dev.ckeditor.com/ticket/11215), + * [#8780](http://dev.ckeditor.com/ticket/8780), + * [#12762](http://dev.ckeditor.com/ticket/12762). +* [#13386](http://dev.ckeditor.com/ticket/13386): [Edge] Fixed: Issues with selecting and editing images. +* [#13568](http://dev.ckeditor.com/ticket/13568): Fixed: The [`editor.getSelectedHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSelectedHtml) method returns invalid results for entire content selection. +* [#13453](http://dev.ckeditor.com/ticket/13453): Fixed: Drag&drop of entire editor content throws an error. +* [#13465](http://dev.ckeditor.com/ticket/13465): Fixed: Error is thrown and the widget is lost on drag&drop if it is the only content of the editor. +* [#13414](http://dev.ckeditor.com/ticket/13414): Fixed: Content auto paragraphing in a nested editable despite editor configuration. +* [#13429](http://dev.ckeditor.com/ticket/13429): Fixed: Incorrect selection after content insertion by the [Auto Embed](http://ckeditor.com/addon/autoembed) plugin. +* [#13388](http://dev.ckeditor.com/ticket/13388): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) integration with [Undo](http://ckeditor.com/addon/undo) is broken. + +Other Changes: + +* [#13637](https://dev.ckeditor.com/ticket/13637): Several icons were refactored. +* Updated [Bender.js](https://github.com/benderjs/benderjs) to 0.3.0 and introduced the ability to run tests via HTTPs ([#13265](https://dev.ckeditor.com/ticket/13265)). + +## CKEditor 4.5.2 + +Fixed Issues: + +* [#13609](http://dev.ckeditor.com/ticket/13609): [Edge] Fixed: The browser crashes when switching to the source mode. Thanks to [Andrew Williams and Mark Smeed](http://webxsolution.com/)! +* [PR#201](https://github.com/ckeditor/ckeditor-dev/pull/201): Fixed: Buttons in the toolbar configurator cause form submission. Thanks to [colemanw](https://github.com/colemanw)! +* [#13422](http://dev.ckeditor.com/ticket/13422): Fixed: A monospaced font should be used in the `<textarea>` element storing editor configuration in the toolbar configurator. +* [#13494](http://dev.ckeditor.com/ticket/13494): Fixed: Error thrown in the toolbar configurator if plugin requirements are not met. +* [#13409](http://dev.ckeditor.com/ticket/13409): Fixed: List elements incorrectly merged when pressing *Backspace* or *Delete*. +* [#13434](http://dev.ckeditor.com/ticket/13434): Fixed: Dialog state indicator broken in Right–To–Left environments. +* [#13460](http://dev.ckeditor.com/ticket/13460): [IE8] Fixed: Copying inline widgets is broken when [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_acf) is disabled. +* [#13495](http://dev.ckeditor.com/ticket/13495): [Firefox, IE] Fixed: Text is not word-wrapped in the Paste dialog window. +* [#13528](http://dev.ckeditor.com/ticket/13528): [Firefox@Windows] Fixed: Content copied from Microsoft Word and other external applications is pasted as a plain text. Removed the `CKEDITOR.plugins.clipboard.isHtmlInExternalDataTransfer` property as the check must be dynamic. +* [#13583](http://dev.ckeditor.com/ticket/13583): Fixed: [`DataTransfer.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.clipboard.dataTransfer-method-getData) should work consistently in all browsers and should not strip valuable content. Fixed pasting tables from Microsoft Excel on Chrome. +* [#13468](http://dev.ckeditor.com/ticket/13468): [IE] Fixed: Binding drag&drop `dataTransfer` does not work if `text` data was set in the meantime. +* [#13451](http://dev.ckeditor.com/ticket/13451): [IE8-9] Fixed: One drag&drop operation may affect following ones. +* [#13184](http://dev.ckeditor.com/ticket/13184): Fixed: Web page reloaded after a drop on editor UI. +* [#13129](http://dev.ckeditor.com/ticket/13129) Fixed: Block widget blurred after a drop followed by an undo. +* [#13397](http://dev.ckeditor.com/ticket/13397): Fixed: Drag&drop of a widget inside its nested widget crashes the editor. +* [#13385](http://dev.ckeditor.com/ticket/13385): Fixed: [`editor.getSnapshot()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSnapshot) may return a non-string value. +* [#13419](http://dev.ckeditor.com/ticket/13419): Fixed: The [Auto Link](http://ckeditor.com/addon/autolink) plugin does not encode double quotes in URLs. +* [#13420](http://dev.ckeditor.com/ticket/13420): Fixed: The [Auto Embed](http://ckeditor.com/addon/autoembed) plugin ignores encoded characters in URL parameters. +* [#13410](http://dev.ckeditor.com/ticket/13410): Fixed: Error thrown in the [Auto Embed](http://ckeditor.com/addon/autoembed) plugin when undoing right after pasting a link. +* [#13566](http://dev.ckeditor.com/ticket/13566): Fixed: Suppressed notifications in the [Media Embed Base](http://ckeditor.com/addon/embedbase) plugin. +* [#11616](http://dev.ckeditor.com/ticket/11616): [Chrome] Fixed: Resizing the editor while it is not displayed breaks the editable. Fixes also [#9160](http://dev.ckeditor.com/ticket/9160) and [#9715](http://dev.ckeditor.com/ticket/9715). +* [#11376](http://dev.ckeditor.com/ticket/11376): [IE11] Fixed: Loss of text when pasting bulleted lists from Microsoft Word. +* [#13143](http://dev.ckeditor.com/ticket/13143): [Edge] Fixed: Focus lost when opening the panel. +* [#13387](http://dev.ckeditor.com/ticket/13387): [Edge] Fixed: "Permission denied" error thrown when loading the editor with developer tools open. +* [#13574](http://dev.ckeditor.com/ticket/13574): [Edge] Fixed: "Permission denied" error thrown when opening editor dialog windows. +* [#13441](http://dev.ckeditor.com/ticket/13441): [Edge] Fixed: The [Clipboard](http://ckeditor.com/addon/clipboard) plugin breaks the state of [Undo](http://ckeditor.com/addon/undo) commands after a paste. +* [#13554](http://dev.ckeditor.com/ticket/13554): [Edge] Fixed: Paste dialog's iframe does not receive focus on show. +* [#13440](http://dev.ckeditor.com/ticket/13440): [Edge] Fixed: Unable to paste a widget. + +Other Changes: + +* [#13421](http://dev.ckeditor.com/ticket/13421): UX improvements to notifications in the [Auto Embed](http://ckeditor.com/addon/autoembed) plugin. + +## CKEditor 4.5.1 + +Fixed Issues: + +* [#13486](http://dev.ckeditor.com/ticket/13486): Fixed: The [Upload Image](http://ckeditor.com/addon/uploadimage) plugin should log an error, not throw an error when upload URL is not set. + +## CKEditor 4.5 + +New Features: + +* [#13304](http://dev.ckeditor.com/ticket/13304): Added support for passing DOM elements to [`config.sharedSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-sharedSpaces). Thanks to [Undergrounder](https://github.com/Undergrounder)! +* [#13215](http://dev.ckeditor.com/ticket/13215): Added ability to cancel fetching a resource by the Embed plugins. +* [#13213](http://dev.ckeditor.com/ticket/13213): Added the [`dialog#setState()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog-method-setState) method and used it in the [Embed](http://ckeditor.com/addon/embed) dialog to indicate that a resource is being loaded. +* [#13337](http://dev.ckeditor.com/ticket/13337): Added the [`repository.onWidget()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-onWidget) method &mdash; a convenient way to listen to [widget](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) events through the [repository](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository). +* [#13214](http://dev.ckeditor.com/ticket/13214): Added support for pasting links that convert into embeddable resources on the fly. + +Fixed Issues: + +* [#13334](http://dev.ckeditor.com/ticket/13334): Fixed: Error after nesting widgets and playing with undo/redo. +* [#13118](http://dev.ckeditor.com/ticket/13118): Fixed: The [`editor.getSelectedHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSelectedHtml) method throws an error when called in the source mode. +* [#13158](http://dev.ckeditor.com/ticket/13158): Fixed: Error after canceling a dialog when creating a widget. +* [#13197](http://dev.ckeditor.com/ticket/13197): Fixed: Linked inline [Enhanced Image](http://ckeditor.com/addon/image2) alignment class is not transferred to the widget wrapper. +* [#13199](http://dev.ckeditor.com/ticket/13199): Fixed: [Semantic Embed](http://ckeditor.com/addon/embedsemantic) does not support widget classes. +* [#13003](http://dev.ckeditor.com/ticket/13003): Fixed: Anchors are uploaded when moving them by drag and drop. +* [#13032](http://dev.ckeditor.com/ticket/13032): Fixed: When upload is done, notification update should be marked as important. +* [#13300](http://dev.ckeditor.com/ticket/13300): Fixed: The `internalCommit` argument in the [Image](http://ckeditor.com/addon/image) dialog seems to be never used. +* [#13036](http://dev.ckeditor.com/ticket/13036): Fixed: Notifications are moved 10px to the right. +* [#13280](http://dev.ckeditor.com/ticket/13280): [IE8] Fixed: Undo after inline widget drag&drop throws an error. +* [#13186](http://dev.ckeditor.com/ticket/13186): Fixed: Content dropped into a nested editable is not filtered by [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_acf). +* [#13140](http://dev.ckeditor.com/ticket/13140): Fixed: Error thrown when dropping a block widget right after itself. +* [#13176](http://dev.ckeditor.com/ticket/13176): [IE8] Fixed: Errors on drag&drop of embed widgets. +* [#13015](http://dev.ckeditor.com/ticket/13015): Fixed: Dropping an image file on [Enhanced Image](http://ckeditor.com/addon/image2) causes a page reload. +* [#13080](http://dev.ckeditor.com/ticket/13080): Fixed: Ugly notification shown when the response contains HTML content. +* [#13011](http://dev.ckeditor.com/ticket/13011): [IE8] Fixed: Anchors are duplicated on drag&drop in specific locations. +* [#13105](http://dev.ckeditor.com/ticket/13105): Fixed: Various issues related to [`CKEDITOR.tools.htmlEncode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlEncode) and [`CKEDITOR.tools.htmlDecode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlDecode) methods. +* [#11976](http://dev.ckeditor.com/ticket/11976): [Chrome] Fixed: Copy&paste and drag&drop lists from Microsoft Word. +* [#13128](http://dev.ckeditor.com/ticket/13128): Fixed: Various issues with cloning element IDs: + * Fixed the default behavior of [`range.cloneContents()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-cloneContents) and [`range.extractContents()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-extractContents) methods which now clone IDs similarly to their native counterparts. + * Added `cloneId` arguments to the above methods, [`range.splitBlock()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-splitBlock) and [`element.breakParent()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-breakParent). Mind the default values and special behavior in the `extractContents()` method! + * Fixed issues where IDs were lost on copy&paste and drag&drop. +* Toolbar configurators: + * [#13185](http://dev.ckeditor.com/ticket/13185): Fixed: Wrong position of the suggestion box if there is not enough space below the caret. + * [#13138](http://dev.ckeditor.com/ticket/13138): Fixed: The "Toggle empty elements" button label is unclear. + * [#13136](http://dev.ckeditor.com/ticket/13136): Fixed: Autocompleter is far too intrusive. + * [#13133](http://dev.ckeditor.com/ticket/13133): Fixed: Tab leaves the editor. + * [#13173](http://dev.ckeditor.com/ticket/13173): Fixed: [`config.removeButtons`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-removeButtons) is ignored by the advanced toolbar configurator. + +Other Changes: + +* [#13119](http://dev.ckeditor.com/ticket/13119): Improved compatibility of editor skins ([Moono](http://ckeditor.com/addon/moono) and [Kama](http://ckeditor.com/addon/kama)) with external web page style sheets. +* Toolbar configurators: + * [#13147](http://dev.ckeditor.com/ticket/13147): Added buttons to the sticky toolbar. + * [#13207](http://dev.ckeditor.com/ticket/13207): Used modal window to display toolbar configurator help. +* [#13316](http://dev.ckeditor.com/ticket/13316): Made [`CKEDITOR.env.isCompatible`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-isCompatible) a blacklist rather than a whitelist. More about the change in the [Browser Compatibility](http://docs.ckeditor.com/#!/guide/dev_browsers) guide. +* [#13398](http://dev.ckeditor.com/ticket/13398): Renamed `CKEDITOR.fileTools.UploadsRepository` to [`CKEDITOR.fileTools.UploadRepository`](http://docs.ckeditor.com/#!/api/CKEDITOR.fileTools.uploadRepository) and changed all related properties. +* [#13279](http://dev.ckeditor.com/ticket/13279): Reviewed CSS vendor prefixes. +* [#13454](http://dev.ckeditor.com/ticket/13454): Removed unused `lang.image.alertUrl` token from the [Image](http://ckeditor.com/addon/image) plugin. + +## CKEditor 4.5 Beta + +New Features: + +* Clipboard (copy&paste, drag&drop) and file uploading features and improvements ([#11437](http://dev.ckeditor.com/ticket/11437)). + + * Major features: + * Support for dropping and pasting files into the editor was introduced. Through a set of new facades for native APIs it is now possible to easily intercept and process inserted files. + * [File upload tools](http://docs.ckeditor.com/#!/api/CKEDITOR.fileTools) were introduced in order to simplify controlling the loading, uploading and handling server response, properly handle [new upload configuration](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-uploadUrl) options, etc. + * [Upload Image](http://ckeditor.com/addon/uploadimage) widget was introduced to upload dropped images. A base class for the [upload widget](http://docs.ckeditor.com/#!/api/CKEDITOR.fileTools.uploadWidgetDefinition) was exposed, too, to make it simple to create new types of upload widgets which can handle any type of dropped file, show the upload progress and update the content when the process is done. It also handles editing and undo/redo operations when a file is being uploaded and integrates with the [notification aggregator](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.notificationAggregator) to show progress and success or error. + * All drag and drop operations were integrated with the editor. All dropped content is passed through the [`editor#paste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-paste) event and a set of new editor events was introduced &mdash; [`dragstart`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-dragstart), [`drop`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-drop), [`dragend`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-dragend). + * The [Data Transfer](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.clipboard.dataTransfer) facade was introduced to unify access to data in various types and files. [Data Transfer](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.clipboard.dataTransfer) is now always available in the [`editor#paste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-paste) event. + * Switched from the pastebin to using the native clipboard access whenever possible. This solved many issues related to pastebin such as unnecessary scrolling or data loss. Additionally, on copy and cut from the editor the clipboard data is set. Therefore, on paste the editor has access to clean data, undisturbed by the browsers. + * Drag and drop of inline and block widgets was integrated with the standard clipboard APIs. By listening to drag events you will thus be notified about widgets, too. This opens a possibility to filter pasted and dropped widgets. + * The [`editor#paste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-paste) event can have the `range` parameter so it is possible to change the paste position in the listener or paste in the not selectable position. Also the [`editor.insertHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertHtml) method now accepts `range` as an additional parameter. + * [#11621](http://dev.ckeditor.com/ticket/11621): A configurable [paste filter](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFilter) was introduced. The filter is by default turned to `'semantic-content'` on Webkit and Blink for all pasted content coming from external sources because of the low quality of HTML that these engines put into the clipboard. Internal and cross-editor paste is safe due to the change explained in the previous point. + + * Other changes and related fixes: + * [#12095](http://dev.ckeditor.com/ticket/12095): On drag and copy of widgets [the same method](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSelectedHtml) is used to get selected HTML as in the normal case. Thanks to that styles applied to inline widgets are not lost. + * [#11219](http://dev.ckeditor.com/ticket/11219): Fixed: Dragging a [captioned image](http://ckeditor.com/addon/image2) does not fire the [`editor#paste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-paste) event. + * [#9554](http://dev.ckeditor.com/ticket/9554): [Webkit Mac] Fixed: Editor scrolls on paste. + * [#9898](http://dev.ckeditor.com/ticket/9898): [Webkit&Divarea] Fixed: Pasting causes undesirable scrolling. + * [#11993](http://dev.ckeditor.com/ticket/11993): [Chrome] Fixed: Pasting content scrolls the document. + * [#12613](http://dev.ckeditor.com/ticket/12613): Show the user that they can not drop on editor UI (toolbar, bottom bar). + * [#12851](http://dev.ckeditor.com/ticket/12851): [Blink/Webkit] Fixed: Formatting disappears when pasting content into cells. + * [#12914](http://dev.ckeditor.com/ticket/12914): Fixed: Copy/Paste of table broken in `div`-based editor. + + * Browser support.<br>Browser support for related features varies significantly (see http://caniuse.com/clipboard). + * File APIs needed to operate and file upload is not supported in Internet Explorer 9 and below. + * Only Chrome and Safari on Mac OS support setting custom data items in the clipboard, so currently it is possible to recognize the origin of the copied content in these browsers only. All drag and drop operations can be identified thanks to the new Data Transfer facade. + * No Internet Explorer browser supports the standard clipboard API which results in small glitches like where only plain text can be dropped from outside the editor. Thanks to the new Data Transfer facade, internal and cross-editor drag and drop supports the full range of data. + * Direct access to clipboard could only be implemented in Chrome, Safari on Mac OS, Opera and Firefox. In other browsers the pastebin must still be used. + +* [#12875](http://dev.ckeditor.com/ticket/12875): Samples and toolbar configuration tools. + * The old set of samples shipped with every CKEditor package was replaced with a shiny new single-page sample. This change concluded a long term plan which started from introducing the [CKEditor SDK](http://sdk.ckeditor.com/) and [CKEditor Functionality Overview](http://docs.ckeditor.com/#!/guide/dev_features) section in the documentation which essentially redefined the old samples. + * Toolbar configurators with live previews were introduced. They will be shipped with every CKEditor package and are meant to help in configuring toolbar layouts. + +* [#10925](http://dev.ckeditor.com/ticket/10925): The [Media Embed](http://ckeditor.com/addon/embed) and [Semantic Media Embed](http://ckeditor.com/addon/embedsemantic) plugins were introduced. Read more about the new features in the [Embedding Content](http://docs.ckeditor.com/#!/guide/dev_media_embed) article. +* [#10931](http://dev.ckeditor.com/ticket/10931): Added support for nesting widgets. It is now possible to insert one widget into another widget's nested editable. Note that unless nested editable's [allowed content](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.nestedEditable.definition-property-allowedContent) is defined precisely, starting from CKEditor 4.5 some widget buttons may become enabled. This feature is not supported in IE8. Included issues: + * [#12018](http://dev.ckeditor.com/ticket/12018): Fixed and reviewed: Nested widgets garbage collection. + * [#12024](http://dev.ckeditor.com/ticket/12024): [Firefox] Fixed: Outline is extended to the left by unpositioned drag handlers. + * [#12006](http://dev.ckeditor.com/ticket/12006): Fixed: Drag and drop of nested block widgets. + * [#12008](http://dev.ckeditor.com/ticket/12008): Fixed various cases of inserting a single non-editable element using the [`editor.insertHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertHtml) method. Fixes pasting a widget with a nested editable inside another widget's nested editable. + +* Notification system: + * [#11580](http://dev.ckeditor.com/ticket/11580): Introduced the [notification system](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.notification). + * [#12810](http://dev.ckeditor.com/ticket/12810): Introduced a [notification aggregator](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.notificationAggregator) for the [notification system](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.notification) which simplifies displaying progress of many concurrent tasks. +* [#11636](http://dev.ckeditor.com/ticket/11636): Introduced new, UX-focused, methods for getting selected HTML and deleting it &mdash; [`editor.getSelectedHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSelectedHtml) and [`editor.deleteSelectedHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSelectedHtml). +* [#12416](http://dev.ckeditor.com/ticket/12416): Added the [`widget.definition.upcastPriority`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-upcastPriority) property which gives more control over widget upcasting order to the widget author. +* [#12036](http://dev.ckeditor.com/ticket/12036): Initialize the editor in [read-only](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) mode when the `<textarea>` element has a `readonly` attribute. +* [#11905](http://dev.ckeditor.com/ticket/11905): The [`resize` event](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-resize) passes the current dimensions in its data. +* [#12126](http://dev.ckeditor.com/ticket/12126): Introduced [`config.image_prefillDimensions`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image_prefillDimensions) and [`config.image2_prefillDimensions`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_prefillDimensions) to make pre-filling `width` and `height` configurable for the [Enhanced Image](http://ckeditor.com/addon/image2). +* [#12746](http://dev.ckeditor.com/ticket/12746): Added a new configuration option to hide the [Enhanced Image](http://ckeditor.com/addon/image2) resizer. +* [#12150](http://dev.ckeditor.com/ticket/12150): Exposed the [`getNestedEditable()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-static-method-getNestedEditable) and `is*` [widget helper](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) functions (see the static methods). +* [#12448](http://dev.ckeditor.com/ticket/12448): Introduced the [`editable.insertHtmlIntoRange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertHtmlIntoRange) method. +* [#12143](http://dev.ckeditor.com/ticket/12143): Added the [`config.floatSpacePreferRight`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-floatSpacePreferRight) configuration option that switches the alignment of the floating toolbar. Thanks to [InvisibleBacon](http://github.com/InvisibleBacon)! +* [#10986](http://dev.ckeditor.com/ticket/10986): Added support for changing dialog input and textarea text directions by using the *Shift+Alt+Home/End* keystrokes. The direction is stored in the value of the input by prepending the [`\u202A`](http://unicode.org/cldr/utility/character.jsp?a=202A) or [`\u202B`](http://unicode.org/cldr/utility/character.jsp?a=202B) marker to it. Read more in the [documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog.definition.textInput-property-bidi). Thanks to [edithkk](https://github.com/edithkk)! +* [#12770](http://dev.ckeditor.com/ticket/12770): Added support for passing [widget](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget)'s startup data as a widget command's argument. Thanks to [Rebrov Boris](https://github.com/zipp3r) and [Tieme van Veen](https://github.com/tiemevanveen)! +* [#11583](http://dev.ckeditor.com/ticket/11583): Added support for the HTML5 `required` attribute in various form elements. Thanks to [Steven Busse](https://github.com/sbusse)! + +Changes: + +* [#12858](http://dev.ckeditor.com/ticket/12858): Basic [Spartan](http://blogs.windows.com/bloggingwindows/2015/03/30/introducing-project-spartan-the-new-browser-built-for-windows-10/) browser compatibility. Full compatibility will be introduced later, because at the moment Spartan is still too unstable to be used for tests and we see many changes from version to version. +* [#12948](http://dev.ckeditor.com/ticket/12948): The [`config.mathJaxLibrary`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-mathJaxLib) option does not default to the MathJax CDN any more. It needs to be configured to enable the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin now. +* [#13069](http://dev.ckeditor.com/ticket/13069): Fixed inconsistencies between [`editable.insertHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElement) and [`editable.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElement) when the `range` parameter is used. Now, the `editor.insertElement()` method works on a higher level, which means that it saves undo snapshots and sets the selection after insertion. Use the [`editable.insertElementIntoRange()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElementIntoRange) method directly for the pre 4.5 behavior of `editable.insertElement()`. +* [#12870](http://dev.ckeditor.com/ticket/12870): Use [`editor.showNotification()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-showNotification) instead of `alert()` directly whenever possible. When the [Notification plugin](http://ckeditor.com/addon/notification) is loaded, the notification system is used automatically. Otherwise, the native `alert()` is displayed. +* [#8024](http://dev.ckeditor.com/ticket/8024): Swapped behavior of the Split Cell Vertically and Horizontally features of the [Table Tools](http://ckeditor.com/addon/tabletools) plugin to be more intuitive. Thanks to [kevinisagit](https://github.com/kevinisagit)! +* [#10903](http://dev.ckeditor.com/ticket/10903): Performance improvements for the [`dom.element.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-addClass), [`dom.element.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-removeClass) and [`dom.element.hasClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-hasClass) methods. Note: The previous implementation allowed passing multiple classes to `addClass()` although it was only a side effect of that implementation. The new implementation does not allow this. +* [#11856](http://dev.ckeditor.com/ticket/11856): The jQuery adapter throws a meaningful error if CKEditor or jQuery are not loaded. + +Fixed issues: + +* [#11586](http://dev.ckeditor.com/ticket/11586): Fixed: [`range.cloneContents()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-cloneContents) should not change the DOM in order not to affect selection. +* [#12148](http://dev.ckeditor.com/ticket/12148): Fixed: [`dom.element.getChild()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-getChild) should not modify a passed array. +* [#12503](http://dev.ckeditor.com/ticket/12503): [Blink/Webkit] Fixed: Incorrect result of Select All and *Backspace* or *Delete*. +* [#13001](http://dev.ckeditor.com/ticket/13001): [Firefox] Fixed: The `<br />` filler is placed in the wrong position by the [`range.fixBlock()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-fixBlock) method due to quirky Firefox behavior. +* [#13101](http://dev.ckeditor.com/ticket/13101): [IE8] Fixed: Colons are prepended to HTML5 element names when cloning them. + +## CKEditor 4.4.8 + +**Security Updates:** + +* Fixed XSS vulnerability in the HTML parser reported by [Dheeraj Joshi](https://twitter.com/dheerajhere) and [Prem Kumar](https://twitter.com/iAmPr3m). + + Issue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode. + +**An upgrade is highly recommended!** + +Fixed Issues: + +* [#12899](http://dev.ckeditor.com/ticket/12899): Fixed: Corrected wrong tag ending for horizontal box definition in the [Dialog User Interface](http://ckeditor.com/addon/dialogui) plugin. Thanks to [mizafish](https://github.com/mizafish)! +* [#13254](http://dev.ckeditor.com/ticket/13254): Fixed: Cannot outdent block after indent when using the [Div Editing Area](http://ckeditor.com/addon/divarea) plugin. Thanks to [Jonathan Cottrill](https://github.com/jcttrll)! +* [#13268](http://dev.ckeditor.com/ticket/13268): Fixed: Documentation for [`CKEDITOR.dom.text`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.text) is incorrect. Thanks to [Ben Kiefer](https://github.com/benkiefer)! +* [#12739](http://dev.ckeditor.com/ticket/12739): Fixed: Link loses inline styles when edited without the [Advanced Tab for Dialogs](http://ckeditor.com/addon/dialogadvtab) plugin. Thanks to [Віталій Крутько](https://github.com/asmforce)! +* [#13292](http://dev.ckeditor.com/ticket/13292): Fixed: Protection pattern does not work in attribute in self-closing elements with no space before `/>`. Thanks to [Віталій Крутько](https://github.com/asmforce)! +* [PR#192](https://github.com/ckeditor/ckeditor-dev/pull/192): Fixed: Variable name typo in the [Dialog User Interface](http://ckeditor.com/addon/dialogui) plugin which caused [`CKEDITOR.ui.dialog.radio`](http://docs.ckeditor.com/#!/api/CKEDITOR.ui.dialog.radio) validation to not work. Thanks to [Florian Ludwig](https://github.com/FlorianLudwig)! +* [#13232](http://dev.ckeditor.com/ticket/13232): [Safari] Fixed: The [`element.appendText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-appendText) method does not work properly for empty elements. +* [#13233](http://dev.ckeditor.com/ticket/13233): Fixed: [HTMLDataProcessor](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor) can process `foo:href` attributes. +* [#12796](http://dev.ckeditor.com/ticket/12796): Fixed: The [Indent List](http://ckeditor.com/addon/indentlist) plugin unwraps parent `<li>` elements. Thanks to [Andrew Stucki](https://github.com/andrewstucki)! +* [#12885](http://dev.ckeditor.com/ticket/12885): Added missing [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) parameter documentation. +* [#11982](http://dev.ckeditor.com/ticket/11982): Fixed: Bullet added in a wrong position after the *Enter* key is pressed in a nested list. +* [#13027](http://dev.ckeditor.com/ticket/13027): Fixed: Keyboard navigation in dialog windows with multiple tabs not following IBM CI 162 instructions or [ARIA Authoring Practices](http://www.w3.org/TR/2013/WD-wai-aria-practices-20130307/#tabpanel). +* [#12256](http://dev.ckeditor.com/ticket/12256): Fixed: Basic styles classes are lost when pasting from Microsoft Word if [basic styles](http://ckeditor.com/addon/basicstyles) were configured to use classes. +* [#12729](http://dev.ckeditor.com/ticket/12729): Fixed: Incorrect structure created when merging a block into a list item on *Backspace* and *Delete*. +* [#13031](http://dev.ckeditor.com/ticket/13031): [Firefox] Fixed: No more line breaks in source view since Firefox 36. +* [#13131](http://dev.ckeditor.com/ticket/13131): Fixed: The [Code Snippet](http://ckeditor.com/addon/codesnippet) plugin cannot be used without the [IFrame Editing Area](http://ckeditor.com/addon/wysiwygarea) plugin. +* [#9086](http://dev.ckeditor.com/ticket/9086): Fixed: Invalid ARIA property used on paste area `<iframe>`. +* [#13164](http://dev.ckeditor.com/ticket/13164): Fixed: Error when inserting a hidden field. +* [#13155](http://dev.ckeditor.com/ticket/13155): Fixed: Incorrect [Line Utilities](http://ckeditor.com/addon/lineutils) positioning when `<body>` has a margin. +* [#13351](http://dev.ckeditor.com/ticket/13351): Fixed: Link lost when editing a linked image with the Link tab disabled. This also fixed a bug when inserting an image into a fully selected link would throw an error ([#12847](https://dev.ckeditor.com/ticket/12847)). +* [#13344](http://dev.ckeditor.com/ticket/13344): [WebKit/Blink] Fixed: It is possible to remove or change editor content in [read-only mode](http://docs.ckeditor.com/#!/guide/dev_readonly). + +Other Changes: + +* [#12844](http://dev.ckeditor.com/ticket/12844) and [#13103](http://dev.ckeditor.com/ticket/13103): Upgraded the [testing environment](http://docs.ckeditor.com/#!/guide/dev_tests) to [Bender.js](https://github.com/benderjs/benderjs) `0.2.3`. +* [#12930](http://dev.ckeditor.com/ticket/12930): Because of licensing issues, `truncated-mathjax/` is now removed from the `tests/` directory. Now `bender.config.mathJaxLibPath` must be configured manually in order to run [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin tests. +* [#13266](http://dev.ckeditor.com/ticket/13266): Added more shades of gray in the [Color Dialog](http://ckeditor.com/addon/colordialog) window. Thanks to [mizafish](https://github.com/mizafish)! + + +## CKEditor 4.4.7 + +Fixed Issues: + +* [#12825](http://dev.ckeditor.com/ticket/12825): Fixed: Preventing the [Table Resize](http://ckeditor.com/addon/tableresize) plugin from operating on elements outside the editor. Thanks to [Paul Martin](https://github.com/Paul-Martin)! +* [#12157](http://dev.ckeditor.com/ticket/12157): Fixed: Lost text formatting on pressing *Tab* when the [`config.tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces) configuration option value was greater than zero. +* [#12777](http://dev.ckeditor.com/ticket/12777): Fixed: The `table-layout` CSS property should be reset by skins. Thanks to [vita10gy](https://github.com/vita10gy)! +* [#12812](http://dev.ckeditor.com/ticket/12812): Fixed: An uncaught security exception is thrown when [Line Utilities](http://ckeditor.com/addon/lineutils) are used in an inline editor loaded in a cross-domain `iframe`. Thanks to [Vitaliy Zurian](https://github.com/thecatontheflat)! +* [#12735](http://dev.ckeditor.com/ticket/12735): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) should only apply when outputting data. +* [#10032](http://dev.ckeditor.com/ticket/10032): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) filter is executed for every paste after using the button. +* [#12597](http://dev.ckeditor.com/ticket/12597): [Blink/WebKit] Fixed: Multi-byte Japanese characters entry not working properly after *Shift+Enter*. +* [#12387](http://dev.ckeditor.com/ticket/12387): Fixed: An error is thrown if a skin does not have the [`chameleon`](http://docs.ckeditor.com/#!/api/CKEDITOR.skin-method-chameleon) property defined and [`config.uiColor`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-uiColor) is defined. +* [#12747](http://dev.ckeditor.com/ticket/12747): [IE8-10] Fixed: Opening a drop-down for a specific selection when the editor is maximized results in incorrect drop-down panel position. +* [#12850](http://dev.ckeditor.com/ticket/12850): [IEQM] Fixed: An error is thrown after focusing the editor. + +## CKEditor 4.4.6 + +**Security Updates:** + +* Fixed XSS vulnerability in the HTML parser reported by [Maco Cortes](https://www.facebook.com/Maaacoooo). + + Issue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode. + +**An upgrade is highly recommended!** + +New Features: + +* [#12501](http://dev.ckeditor.com/ticket/12501): Allowed dashes in element names in the [string format of allowed content rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules-section-string-format). +* [#12550](http://dev.ckeditor.com/ticket/12550): Added the `<main>` element to the [`CKEDITOR.dtd`](http://docs.ckeditor.com/#!/api/CKEDITOR.dtd). + +Fixed Issues: + +* [#12506](http://dev.ckeditor.com/ticket/12506): [Safari] Fixed: Cannot paste into inline editor if the page has `user-select: none` style. Thanks to [shaohua](https://github.com/shaohua)! +* [#12683](http://dev.ckeditor.com/ticket/12683): Fixed: [Filter](http://docs.ckeditor.com/#!/guide/dev_acf) fails to remove custom tags. Thanks to [timselier](https://github.com/timselier)! +* [#12489](http://dev.ckeditor.com/ticket/12489) and [#12491](http://dev.ckeditor.com/ticket/12491): Fixed: Various issues related to restoring the selection after performing operations on filler character. See the [fixed cases](http://dev.ckeditor.com/ticket/12491#comment:4). +* [#12621](http://dev.ckeditor.com/ticket/12621): Fixed: Cannot remove inline styles (bold, italic, etc.) in empty lines. +* [#12630](http://dev.ckeditor.com/ticket/12630): [Chrome] Fixed: Selection is placed outside the paragraph when the [New Page](http://ckeditor.com/addon/newpage) button is clicked. This patch significantly simplified the way how the initial selection (a selection after the content of the editable is overwritten) is being fixed. That might have fixed many related scenarios in all browsers. +* [#11647](http://dev.ckeditor.com/ticket/11647): Fixed: The [`editor.blur`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-blur) event is not fired on first blur after initializing the inline editor on an already focused element. +* [#12601](http://dev.ckeditor.com/ticket/12601): Fixed: [Strikethrough](http://ckeditor.com/addon/basicstyles) button tooltip spelling. +* [#12546](http://dev.ckeditor.com/ticket/12546): Fixed: The Preview tab in the [Document Properties](http://ckeditor.com/addon/docprops) dialog window is always disabled. +* [#12300](http://dev.ckeditor.com/ticket/12300): Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event fired on first navigation key press after typing. +* [#12141](http://dev.ckeditor.com/ticket/12141): Fixed: List items are lost when indenting a list item with content wrapped with a block element. +* [#12515](http://dev.ckeditor.com/ticket/12515): Fixed: Cursor is in the wrong position when undoing after adding an image and typing some text. +* [#12484](http://dev.ckeditor.com/ticket/12484): [Blink/WebKit] Fixed: DOM is changed outside the editor area in a certain case. +* [#12688](http://dev.ckeditor.com/ticket/12688): Improved the tests of the [styles system](http://docs.ckeditor.com/#!/api/CKEDITOR.style) and fixed two minor issues. +* [#12403](http://dev.ckeditor.com/ticket/12403): Fixed: Changing the [font](http://ckeditor.com/addon/font) style should not lead to nesting it in the previous style element. +* [#12609](http://dev.ckeditor.com/ticket/12609): Fixed: Incorrect `config.magicline_putEverywhere` name used for a [Magic Line](http://ckeditor.com/addon/magicline) all-encompassing [`config.magicline_everywhere`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-magicline_everywhere) configuration option. + + +## CKEditor 4.4.5 + +New Features: + +* [#12279](http://dev.ckeditor.com/ticket/12279): Added a possibility to pass a custom evaluator to [`node.getAscendant()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.node-method-getAscendant). + +Fixed Issues: + +* [#12423](http://dev.ckeditor.com/ticket/12423): [Safari7.1+] Fixed: *Enter* key moved cursor to a strange position. +* [#12381](http://dev.ckeditor.com/ticket/12381): [iOS] Fixed: Selection issue. Thanks to [Remiremi](https://github.com/Remiremi)! +* [#10804](http://dev.ckeditor.com/ticket/10804): Fixed: `CKEDITOR_GETURL` is not used with some plugins where it should be used. Thanks to [Thomas Andraschko](https://github.com/tandraschko)! +* [#9137](http://dev.ckeditor.com/ticket/9137): Fixed: The `<base>` tag is not created when `<head>` has an attribute. Thanks to [naoki.fujikawa](https://github.com/naoki-fujikawa)! +* [#12377](http://dev.ckeditor.com/ticket/12377): Fixed: Errors thrown in the [Image](http://ckeditor.com/addon/image) plugin when removing preview from the dialog window definition. Thanks to [Axinet](https://github.com/Axinet)! +* [#12162](http://dev.ckeditor.com/ticket/12162): Fixed: Auto paragraphing and *Enter* key in nested editables. +* [#12315](http://dev.ckeditor.com/ticket/12315): Fixed: Marked [`config.autoParagraph`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoParagraph) as deprecated. +* [#12113](http://dev.ckeditor.com/ticket/12113): Fixed: A [code snippet](http://ckeditor.com/addon/codesnippet) should be presented in the [elements path](http://ckeditor.com/addon/elementspath) as "code snippet" (translatable). +* [#12311](http://dev.ckeditor.com/ticket/12311): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) should also remove `<cite>` elements. +* [#12261](http://dev.ckeditor.com/ticket/12261): Fixed: Filter has to be destroyed and removed from [`CKEDITOR.filter.instances`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-static-property-instances) on editor destroy. +* [#12398](http://dev.ckeditor.com/ticket/12398): Fixed: [Maximize](http://ckeditor.com/addon/maximize) does not work on an instance without a [title](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title). +* [#12097](http://dev.ckeditor.com/ticket/12097): Fixed: JAWS not reading the number of options correctly in the [Text Color and Background Color](http://ckeditor.com/addon/colorbutton) button menu. +* [#12411](http://dev.ckeditor.com/ticket/12411): Fixed: [Page Break](http://ckeditor.com/addon/pagebreak) used directly in the editable breaks the editor. +* [#12354](http://dev.ckeditor.com/ticket/12354): Fixed: Various issues in undo manager when holding keys. +* [#12324](http://dev.ckeditor.com/ticket/12324): [IE8] Fixed: Undo steps are not recorded when changing the caret position by clicking below the body. +* [#12332](http://dev.ckeditor.com/ticket/12332): Fixed: Lowered DOM events listeners' priorities in undo manager in order to avoid ambiguity. +* [#12402](http://dev.ckeditor.com/ticket/12402): [Blink] Fixed: Workaround for Blink bug with `document.title` which breaks updating title in the full HTML mode. +* [#12338](http://dev.ckeditor.com/ticket/12338): Fixed: The CKEditor package contains unoptimized images. + + +## CKEditor 4.4.4 + +Fixed Issues: + +* [#12268](http://dev.ckeditor.com/ticket/12268): Cleanup of [UI Color](http://ckeditor.com/addon/uicolor) YUI styles. Thanks to [CasherWest](https://github.com/CasherWest)! +* [#12263](http://dev.ckeditor.com/ticket/12263): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) filter does not properly normalize semicolons style text. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! +* [#12243](http://dev.ckeditor.com/ticket/12243): Fixed: Text formatting lost when pasting from Word. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! +* [#111739](http://dev.ckeditor.com/ticket/11739): Fixed: `keypress` listeners should not be used in the undo manager. A complete rewrite of keyboard handling in the undo manager was made. Numerous smaller issues were fixed, among others: + * [#10926](http://dev.ckeditor.com/ticket/10926): [Chrome@Android] Fixed: Typing does not record snapshots and does not fire the [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. + * [#11611](http://dev.ckeditor.com/ticket/11611): [Firefox] Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event is fired when pressing Arrow keys. + * [#12219](http://dev.ckeditor.com/ticket/12219): [Safari] Fixed: Some modifications of the [`UndoManager.locked`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-property-locked) property violate strict mode in the [Undo](http://ckeditor.com/addon/undo) plugin. +* [#10916](http://dev.ckeditor.com/ticket/10916): Fixed: [Magic Line](http://ckeditor.com/addon/magicline) icon in Right-To-Left environments. +* [#11970](http://dev.ckeditor.com/ticket/11970): [IE] Fixed: CKEditor `paste` event is not fired when pasting with *Shift+Ins*. +* [#12111](http://dev.ckeditor.com/ticket/12111): Fixed: Linked image attributes are not read when opening the image dialog window by doubleclicking. +* [#10030](http://dev.ckeditor.com/ticket/10030): [IE] Fixed: Prevented "Unspecified Error" thrown in various cases when IE8-9 does not allow access to `document.activeElement`. +* [#12273](http://dev.ckeditor.com/ticket/12273): Fixed: Applying block style in a description list breaks it. +* [#12218](http://dev.ckeditor.com/ticket/12218): Fixed: Minor syntax issue in CSS files. +* [#12178](http://dev.ckeditor.com/ticket/12178): [Blink/WebKit] Fixed: Iterator does not return the block if the selection is located at the end of it. +* [#12185](http://dev.ckeditor.com/ticket/12185): [IE9QM] Fixed: Error thrown when moving the mouse over focused editor's scrollbar. +* [#12215](http://dev.ckeditor.com/ticket/12215): Fixed: Basepath resolution does not recognize semicolon as a query separator. +* [#12135](http://dev.ckeditor.com/ticket/12135): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) does not work on widgets. +* [#12298](http://dev.ckeditor.com/ticket/12298): [IE11] Fixed: Clicking below `<body>` in Compatibility Mode will no longer reset selection to the first line. +* [#12204](http://dev.ckeditor.com/ticket/12204): Fixed: Editor's voice label is not affected by [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title). +* [#11915](http://dev.ckeditor.com/ticket/11915): Fixed: With [SCAYT](http://ckeditor.com/addon/scayt) enabled, cursor moves to the beginning of the first highlighted, misspelled word after typing or pasting into the editor. +* [SCAYT](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/69): Fixed: Error thrown in the console after enabling [SCAYT](http://ckeditor.com/addon/scayt) and trying to add a new image. + + +Other Changes: + +* [#12296](http://dev.ckeditor.com/ticket/12296): Merged `benderjs-ckeditor` into the main CKEditor repository. + +## CKEditor 4.4.3 + +**Security Updates:** + +* Fixed XSS vulnerability in the Preview plugin reported by Mario Heiderich of [Cure53](https://cure53.de/). + +**An upgrade is highly recommended!** + +New Features: + +* [#12164](http://dev.ckeditor.com/ticket/12164): Added the "Justify" option to the "Horizontal Alignment" drop-down in the Table Cell Properties dialog window. + +Fixed Issues: + +* [#12110](http://dev.ckeditor.com/ticket/12110): Fixed: Editor crash after deleting a table. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! +* [#11897](http://dev.ckeditor.com/ticket/11897): Fixed: *Enter* key used in an empty list item creates a new line instead of breaking the list. Thanks to [noam-si](https://github.com/noam-si)! +* [#12140](http://dev.ckeditor.com/ticket/12140): Fixed: Double-clicking linked widgets opens two dialog windows. +* [#12132](http://dev.ckeditor.com/ticket/12132): Fixed: Image is inserted with `width` and `height` styles even when they are not allowed. +* [#9317](http://dev.ckeditor.com/ticket/9317): [IE] Fixed: [`config.disableObjectResizing`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-disableObjectResizing) does not work on IE. **Note**: We were not able to fix this issue on IE11+ because necessary events stopped working. See a [last resort workaround](http://dev.ckeditor.com/ticket/9317#comment:16) and make sure to [support our complaint to Microsoft](https://connect.microsoft.com/IE/feedback/details/742593/please-respect-execcommand-enableobjectresizing-in-contenteditable-elements). +* [#9638](http://dev.ckeditor.com/ticket/9638): Fixed: There should be no information about accessibility help available under the *Alt+0* keyboard shortcut if the [Accessibility Help](http://ckeditor.com/addon/a11yhelp) plugin is not available. +* [#8117](http://dev.ckeditor.com/ticket/8117) and [#9186](http://dev.ckeditor.com/ticket/9186): Fixed: In HTML5 `<meta>` tags should be allowed everywhere, including inside the `<body>` element. +* [#10422](http://dev.ckeditor.com/ticket/10422): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) not working properly if a function is specified. + +## CKEditor 4.4.2 + +Important Notes: + +* The CKEditor testing environment is now publicly available. Read more about how to set up the environment and execute tests in the [CKEditor Testing Environment](http://docs.ckeditor.com/#!/guide/dev_tests) guide. + Please note that the [`tests/`](https://github.com/ckeditor/ckeditor-dev/tree/master/tests) directory which contains editor tests is not available in release packages. It can only be found in the development version of CKEditor on [GitHub](https://github.com/ckeditor/ckeditor-dev/). + +New Features: + +* [#11909](http://dev.ckeditor.com/ticket/11909): Introduced a parameter to prevent the [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) method from recording undo snapshots. + +Fixed Issues: + +* [#11757](http://dev.ckeditor.com/ticket/11757): Fixed: Imperfections in the [Moono](http://ckeditor.com/addon/moono) skin. Thanks to [danyaPostfactum](https://github.com/danyaPostfactum)! +* [#10091](http://dev.ckeditor.com/ticket/10091): Blockquote should be treated like an object by the styles system. Thanks to [dan-james-deeson](https://github.com/dan-james-deeson)! +* [#11478](http://dev.ckeditor.com/ticket/11478): Fixed: Issue with passing jQuery objects to [adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) configuration. +* [#10867](http://dev.ckeditor.com/ticket/10867): Fixed: Issue with setting encoded URI as image link. +* [#11983](http://dev.ckeditor.com/ticket/11983): Fixed: Clicking a nested widget does not focus it. Additionally, performance of the [`widget.repository.getByElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-getByElement) method was improved. +* [#12000](http://dev.ckeditor.com/ticket/12000): Fixed: Nested widgets should be initialized on [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) and [`nestedEditable.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.nestedEditable-method-setData). +* [#12022](http://dev.ckeditor.com/ticket/12022): Fixed: Outer widget's drag handler is not created at all if it has any nested widgets inside. +* [#11960](http://dev.ckeditor.com/ticket/11960): [Blink/WebKit] Fixed: The caret should be scrolled into view on *Backspace* and *Delete* (covers only the merging blocks case). +* [#11306](http://dev.ckeditor.com/ticket/11306): [OSX][Blink/WebKit] Fixed: No widget entries in the context menu on widget right-click. +* [#11957](http://dev.ckeditor.com/ticket/11957): Fixed: Alignment labels in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window are not translated. +* [#11980](http://dev.ckeditor.com/ticket/11980): [Blink/WebKit] Fixed: `<span>` elements created when joining adjacent elements (non-collapsed selection). +* [#12009](http://dev.ckeditor.com/ticket/12009): [Nested widgets] Integration with the [Magic Line](http://ckeditor.com/addon/magicline) plugin. +* [#11387](http://dev.ckeditor.com/ticket/11387): Fixed: `role="radiogroup"` should be applied only to radio inputs' container. +* [#7975](http://dev.ckeditor.com/ticket/7975): [IE8] Fixed: Errors when trying to select an empty table cell. +* [#11947](http://dev.ckeditor.com/ticket/11947): [Firefox+IE11] Fixed: *Shift+Enter* in lists produces two line breaks. +* [#11972](http://dev.ckeditor.com/ticket/11972): Fixed: Feature detection in the [`element.setText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-setText) method should not trigger the layout engine. +* [#7634](http://dev.ckeditor.com/ticket/7634): Fixed: The [Flash Dialog](http://ckeditor.com/addon/flash) plugin omits the `allowFullScreen` parameter in the editor data if set to `true`. +* [#11910](http://dev.ckeditor.com/ticket/11910): Fixed: [Enhanced Image](http://ckeditor.com/addon/image2) does not take [`config.baseHref`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-baseHref) into account when updating image dimensions. +* [#11753](http://dev.ckeditor.com/ticket/11753): Fixed: Wrong [`checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method value after focusing or blurring a widget. +* [#11830](http://dev.ckeditor.com/ticket/11830): Fixed: Impossible to pass some arguments to [CKBuilder](https://github.com/ckeditor/ckbuilder) when using the `/dev/builder/build.sh` script. +* [#11945](http://dev.ckeditor.com/ticket/11945): Fixed: [Form Elements](http://ckeditor.com/addon/forms) plugin should not change a core method. +* [#11384](http://dev.ckeditor.com/ticket/11384): [IE9+] Fixed: `IndexSizeError` thrown when pasting into a non-empty selection anchored in one text node. + +## CKEditor 4.4.1 + +New Features: + +* [#9661](http://dev.ckeditor.com/ticket/9661): Added the option to [configure](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-linkJavaScriptLinksAllowed) anchor tags with JavaScript code in the `href` attribute. + +Fixed Issues: + +* [#11861](http://dev.ckeditor.com/ticket/11861): [WebKit/Blink] Fixed: Span elements created while joining adjacent elements. **Note:** This patch only covers cases when *Backspace* or *Delete* is pressed on a collapsed (empty) selection. The remaining case, with a non-empty selection, will be fixed in the next release. +* [#10714](http://dev.ckeditor.com/ticket/10714): [iOS] Fixed: Selection and drop-downs are broken if a touch event listener is used due to a [WebKit bug](https://bugs.webkit.org/show_bug.cgi?id=128924). Thanks to [Arty Gus](https://github.com/artygus)! +* [#11911](http://dev.ckeditor.com/ticket/11911): Fixed setting the `dir` attribute for a preloaded language in [CKEDITOR.lang](http://docs.ckeditor.com/#!/api/CKEDITOR.lang). Thanks to [Akash Mohapatra](https://github.com/akashmohapatra)! +* [#11926](http://dev.ckeditor.com/ticket/11926): Fixed: [Code Snippet](http://ckeditor.com/addon/codesnippet) does not decode HTML entities when loading code from the `<code>` element. +* [#11223](http://dev.ckeditor.com/ticket/11223): Fixed: Issue when [Protected Source](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-protectedSource) was not working in the `<title>` element. +* [#11859](http://dev.ckeditor.com/ticket/11859): Fixed: Removed the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin dependency from the [Code Snippet](http://ckeditor.com/addon/codesnippet) sample. +* [#11754](http://dev.ckeditor.com/ticket/11754): [Chrome] Fixed: Infinite loop when content includes not closed attributes. +* [#11848](http://dev.ckeditor.com/ticket/11848): [IE] Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) throwing an exception when there was no selection in the editor. +* [#11801](http://dev.ckeditor.com/ticket/11801): Fixed: Editor anchors unavailable when linking the [Enhanced Image](http://ckeditor.com/addon/image2) widget. +* [#11626](http://dev.ckeditor.com/ticket/11626): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) sets invalid column width. +* [#11872](http://dev.ckeditor.com/ticket/11872): Made [`element.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-addClass) chainable symmetrically to [`element.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-removeClass). +* [#11813](http://dev.ckeditor.com/ticket/11813): Fixed: Link lost while pasting a captioned image and restoring an undo snapshot ([Enhanced Image](http://ckeditor.com/addon/image2)). +* [#11814](http://dev.ckeditor.com/ticket/11814): Fixed: _Link_ and _Unlink_ entries persistently displayed in the [Enhanced Image](http://ckeditor.com/addon/image2) context menu. +* [#11839](http://dev.ckeditor.com/ticket/11839): [IE9] Fixed: The caret jumps out of the editable area when resizing the editor in the source mode. +* [#11822](http://dev.ckeditor.com/ticket/11822): [WebKit] Fixed: Editing anchors by double-click is broken in some cases. +* [#11823](http://dev.ckeditor.com/ticket/11823): [IE8] Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) throws an error over scrollbar. +* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: It is not possible to change the language back to _Not set_ in the [Code Snippet](http://ckeditor.com/addon/codesnippet) dialog window. +* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: [Filter](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied inside elements with the `contenteditable` attribute set to `true`. +* [#11798](http://dev.ckeditor.com/ticket/11798): Fixed: Inserting a non-editable element inside a table cell breaks the table. +* [#11793](http://dev.ckeditor.com/ticket/11793): Fixed: Drop-down is not "on" when clicking it while the editor is blurred. +* [#11850](http://dev.ckeditor.com/ticket/11850): Fixed: Fake objects with the `contenteditable` attribute set to `false` are not downcasted properly. +* [#11811](http://dev.ckeditor.com/ticket/11811): Fixed: Widget's data is not encoded correctly when passed to an attribute. +* [#11777](http://dev.ckeditor.com/ticket/11777): Fixed encoding ampersand in the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin. +* [#11880](http://dev.ckeditor.com/ticket/11880): [IE8-9] Fixed: Linked image has a default thick border. + +Other Changes: + +* [#11807](http://dev.ckeditor.com/ticket/11807): Updated jQuery version used in the sample to 1.11.0 and tested CKEditor jQuery Adapter with version 1.11.0 and 2.1.0. +* [#9504](http://dev.ckeditor.com/ticket/9504): Stopped using deprecated `attribute.specified` in all browsers except Internet Explorer. +* [#11809](http://dev.ckeditor.com/ticket/11809): Changed tab size in `<pre>` to 4 spaces. + +## CKEditor 4.4 + +**Important Notes:** + +* Marked the [`editor.beforePaste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-beforePaste) event as deprecated. +* The default class of captioned images has changed to `image` (was: `caption`). Please note that once edited in CKEditor 4.4+, all existing images of the `caption` class (`<figure class="caption">`) will be [filtered out](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) unless the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option is set to `caption`. For backward compatibility (i.e. when upgrading), it is highly recommended to use this setting, which also helps prevent CSS conflicts, etc. This does not apply to new CKEditor integrations. +* Widgets without defined buttons are no longer registered automatically to the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). Before CKEditor 4.4 widgets were registered to the ACF which was an incorrect behavior ([#11567](http://dev.ckeditor.com/ticket/11567)). This change should not have any impact on standard scenarios, but if your button does not execute the widget command, you need to set [`allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-allowedContent) and [`requiredContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-requiredContent) properties for it manually, because the editor will not be able to find them. +* The [Show Borders](http://ckeditor.com/addon/showborders) plugin was added to the Standard installation package in order to ensure that unstyled tables are still visible for the user ([#11665](http://dev.ckeditor.com/ticket/11665)). +* Since CKEditor 4.4 the editor instance should be passed to [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) methods to ensure full compatibility with other features (e.g. applying styles to widgets requires that). We ensured backward compatibility though, so the [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) will work even when the editor instance is not provided. + +New Features: + +* [#11297](http://dev.ckeditor.com/ticket/11297): Styles can now be applied to widgets. The definition of a style which can be applied to a specific widget must contain two additional properties &mdash; `type` and `widget`. Read more in the [Widget Styles](http://docs.ckeditor.com/#!/guide/dev_styles-section-widget-styles) section of the "Syles Drop-down" guide. Note that by default, widgets support only classes and no other attributes or styles. Related changes and features: + * Introduced the [`CKEDITOR.style.addCustomHandler()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-static-method-addCustomHandler) method for registering custom style handlers. + * The [`CKEDITOR.style.apply()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-apply) and [`CKEDITOR.style.remove()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-remove) methods are now called with an editor instance instead of the document so they can be reused by the [`CKEDITOR.editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) and [`CKEDITOR.editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) methods. Backward compatibility was preserved, but from CKEditor 4.4 it is highly recommended to pass an editor instead of a document to these methods. + * Many new methods and properties were introduced in the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) to make the handling of styles by widgets fully customizable. See: [`widget.definition.styleableElements`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleableElements), [`widget.definition.styleToAllowedContentRule`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleToAllowedContentRules), [`widget.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-addClass), [`widget.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeClass), [`widget.getClasses()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-getClasses), [`widget.hasClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-hasClass), [`widget.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-applyStyle), [`widget.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeStyle), [`widget.checkStyleActive()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-checkStyleActive). + * Integration with the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) required an introduction of the [`CKEDITOR.style.toAllowedContent()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-toAllowedContentRules) method which can be implemented by the custom style handler and if exists, it is used by the [`CKEDITOR.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter) to translate a style to [allowed content rules](http://docs.ckeditor.com/#!/api/CKEDITOR.filter.allowedContentRules). +* [#11300](http://dev.ckeditor.com/ticket/11300): Various changes in the [Enhanced Image](http://ckeditor.com/addon/image2) plugin: + * Introduced the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option to configure the class of captioned images. + * Introduced the [`config.image2_alignClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_alignClasses) option to configure the way images are aligned with CSS classes. + If this setting is defined, the editor produces classes instead of inline styles for aligned images. + * Default image caption can be translated (customized) with the `editor.lang.image2.captionPlaceholder` string. +* [#11341](http://dev.ckeditor.com/ticket/11341): [Enhanced Image](http://ckeditor.com/addon/image2) plugin: It is now possible to add a link to any image type. +* [#10202](http://dev.ckeditor.com/ticket/10202): Introduced wildcard support in the [Allowed Content Rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) format. +* [#10276](http://dev.ckeditor.com/ticket/10276): Introduced blacklisting in the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). +* [#10480](http://dev.ckeditor.com/ticket/10480): Introduced code snippets with code highlighting. There are two versions available so far &mdash; the default [Code Snippet](http://ckeditor.com/addon/codesnippet) which uses the [highlight.js](http://highlightjs.org) library and the [Code Snippet GeSHi](http://ckeditor.com/addon/codesnippetgeshi) which uses the [GeSHi](http://qbnz.com/highlighter/) library. +* [#11737](http://dev.ckeditor.com/ticket/11737): Introduced an option to prevent [filtering](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) of an element that matches custom criteria (see [`filter.addElementCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-method-addElementCallback)). +* [#11532](http://dev.ckeditor.com/ticket/11532): Introduced the [`editor.addContentsCss()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addContentsCss) method that can be used for [adding custom CSS files](http://docs.ckeditor.com/#!/guide/plugin_sdk_styles). +* [#11536](http://dev.ckeditor.com/ticket/11536): Added the [`CKEDITOR.tools.htmlDecode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlDecode) method for decoding HTML entities. +* [#11225](http://dev.ckeditor.com/ticket/11225): Introduced the [`CKEDITOR.tools.transparentImageData`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-property-transparentImageData) property which contains transparent image data to be used in CSS or as image source. + +Other Changes: + +* [#11377](http://dev.ckeditor.com/ticket/11377): Unified internal representation of empty anchors using the [fake objects](http://ckeditor.com/addon/fakeobjects). +* [#11422](http://dev.ckeditor.com/ticket/11422): Removed Firefox 3.x, Internet Explorer 6 and Opera 12.x leftovers in code. +* [#5217](http://dev.ckeditor.com/ticket/5217): Setting data (including switching between modes) creates a new undo snapshot. Besides that: + * Introduced the [`editable.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-property-status) property. + * Introduced a new `forceUpdate` option for the [`editor.lockSnapshot`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-lockSnapshot) event. + * Fixed: Selection not being unlocked in inline editor after setting data ([#11500](http://dev.ckeditor.com/ticket/11500)). +* The [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin was updated to the latest version. + +Fixed Issues: + +* [#10190](http://dev.ckeditor.com/ticket/10190): Fixed: Removing block style with [`editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) should result in a paragraph and not a div. +* [#11727](http://dev.ckeditor.com/ticket/11727): Fixed: The editor tries to select a non-editable image which was clicked. + +## CKEditor 4.3.5 + +New Features: + +* Added new translation: Tatar. + +Fixed Issues: + +* [#11677](http://dev.ckeditor.com/ticket/11677): Fixed: Undo/Redo keystrokes are blocked in the source mode. +* [#11717](http://dev.ckeditor.com/ticket/11717): [Document Properties](http://ckeditor.com/addon/docprops) plugin requires the [Color Dialog](http://ckeditor.com/addon/colordialog) plugin to work. + +## CKEditor 4.3.4 + +Fixed Issues: + +* [#11597](http://dev.ckeditor.com/ticket/11597): [IE11] Fixed: Error thrown when trying to open the [preview](http://ckeditor.com/addon/preview) using the keyboard. +* [#11544](http://dev.ckeditor.com/ticket/11544): [Placeholders](http://ckeditor.com/addon/placeholder) will no longer be upcasted in parents not accepting `<span>` elements. +* [#8663](http://dev.ckeditor.com/ticket/8663): Fixed [`element.renameNode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-renameNode) not clearing the [`element.getName()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-getName) cache. +* [#11574](http://dev.ckeditor.com/ticket/11574): Fixed: *Backspace* destroying the DOM structure if an inline editable is placed in a list item. +* [#11603](http://dev.ckeditor.com/ticket/11603): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) attaches to tables outside the editable. +* [#9205](http://dev.ckeditor.com/ticket/9205), [#7805](http://dev.ckeditor.com/ticket/7805), [#8216](http://dev.ckeditor.com/ticket/8216): Fixed: `{cke_protected_1}` appearing in data in various cases where HTML comments are placed next to `"` or `'`. +* [#11635](http://dev.ckeditor.com/ticket/11635): Fixed: Some attributes are not protected before the content is passed through the fix bin. +* [#11660](http://dev.ckeditor.com/ticket/11660): [IE] Fixed: Table content is lost when some extra markup is inside the table. +* [#11641](http://dev.ckeditor.com/ticket/11641): Fixed: Switching between modes in the classic editor removes content styles for the inline editor. +* [#11568](http://dev.ckeditor.com/ticket/11568): Fixed: [Styles](http://ckeditor.com/addon/stylescombo) drop-down list is not enabled on selection change. + +## CKEditor 4.3.3 + +Fixed Issues: + +* [#11500](http://dev.ckeditor.com/ticket/11500): [WebKit/Blink] Fixed: Selection lost when setting data in another inline editor. Additionally, [`selection.removeAllRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-removeAllRanges) is now scoped to selection's [root](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-property-root). +* [#11104](http://dev.ckeditor.com/ticket/11104): [IE] Fixed: Various issues with scrolling and selection when focusing widgets. +* [#11487](http://dev.ckeditor.com/ticket/11487): Moving mouse over the [Enhanced Image](http://ckeditor.com/addon/image2) widget will no longer change the value returned by the [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method. +* [#8673](http://dev.ckeditor.com/ticket/8673): [WebKit] Fixed: Cannot select and remove the [Page Break](http://ckeditor.com/addon/pagebreak). +* [#11413](http://dev.ckeditor.com/ticket/11413): Fixed: Incorrect [`editor.execCommand()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand) behavior. +* [#11438](http://dev.ckeditor.com/ticket/11438): Splitting table cells vertically is no longer changing table structure. +* [#8899](http://dev.ckeditor.com/ticket/8899): Fixed: Links in the [About CKEditor](http://ckeditor.com/addon/about) dialog window now open in a new browser window or tab. +* [#11490](http://dev.ckeditor.com/ticket/11490): Fixed: [Menu button](http://ckeditor.com/addon/menubutton) panel not showing in the source mode. +* [#11417](http://dev.ckeditor.com/ticket/11417): The [`widget.doubleclick`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-event-doubleclick) event is not canceled anymore after editing was triggered. +* [#11253](http://dev.ckeditor.com/ticket/11253): [IE] Fixed: Clipped upload button in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. +* [#11359](http://dev.ckeditor.com/ticket/11359): Standardized the way anchors are discovered by the [Link](http://ckeditor.com/addon/link) plugin. +* [#11058](http://dev.ckeditor.com/ticket/11058): [IE8] Fixed: Error when deleting a table row. +* [#11508](http://dev.ckeditor.com/ticket/11508): Fixed: [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor) discovering protected attributes within other attributes' values. +* [#11533](http://dev.ckeditor.com/ticket/11533): Widgets: Avoid recurring upcasts if the DOM structure was modified during an upcast. +* [#11400](http://dev.ckeditor.com/ticket/11400): Fixed: The [`domObject.removeAllListeners()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.domObject-method-removeAllListeners) method does not remove custom listeners completely. +* [#11493](http://dev.ckeditor.com/ticket/11493): Fixed: The [`selection.getRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-getRanges) method does not override cached ranges when used with the `onlyEditables` argument. +* [#11390](http://dev.ckeditor.com/ticket/11390): [IE] All [XML](http://ckeditor.com/addon/xml) plugin [methods](http://docs.ckeditor.com/#!/api/CKEDITOR.xml) now work in IE10+. +* [#11542](http://dev.ckeditor.com/ticket/11542): [IE11] Fixed: Blurry toolbar icons when Right-to-Left UI language is set. +* [#11504](http://dev.ckeditor.com/ticket/11504): Fixed: When [`config.fullPage`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fullPage) is set to `true`, entities are not encoded in editor output. +* [#11004](http://dev.ckeditor.com/ticket/11004): Integrated [Enhanced Image](http://ckeditor.com/addon/image2) dialog window with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). +* [#11439](http://dev.ckeditor.com/ticket/11439): Fixed: Properties get cloned in the Cell Properties dialog window if multiple cells are selected. + +## CKEditor 4.3.2 + +Fixed Issues: + +* [#11331](http://dev.ckeditor.com/ticket/11331): A menu button will have a changed label when selected instead of using the `aria-pressed` attribute. +* [#11177](http://dev.ckeditor.com/ticket/11177): Widget drag handler improvements: + * [#11176](http://dev.ckeditor.com/ticket/11176): Fixed: Initial position is not updated when the widget data object is empty. + * [#11001](http://dev.ckeditor.com/ticket/11001): Fixed: Multiple synchronous layout recalculations are caused by initial drag handler positioning causing performance issues. + * [#11161](http://dev.ckeditor.com/ticket/11161): Fixed: Drag handler is not repositioned in various situations. + * [#11281](http://dev.ckeditor.com/ticket/11281): Fixed: Drag handler and mask are duplicated after widget reinitialization. +* [#11207](http://dev.ckeditor.com/ticket/11207): [Firefox] Fixed: Misplaced [Enhanced Image](http://ckeditor.com/addon/image2) resizer in the inline editor. +* [#11102](http://dev.ckeditor.com/ticket/11102): `CKEDITOR.template` improvements: + * [#11102](http://dev.ckeditor.com/ticket/11102): Added newline character support. + * [#11216](http://dev.ckeditor.com/ticket/11216): Added "\\'" substring support. +* [#11121](http://dev.ckeditor.com/ticket/11121): [Firefox] Fixed: High Contrast mode is enabled when the editor is loaded in a hidden iframe. +* [#11350](http://dev.ckeditor.com/ticket/11350): The default value of [`config.contentsCss`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-contentsCss) is affected by [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl). +* [#11097](http://dev.ckeditor.com/ticket/11097): Improved the [Autogrow](http://ckeditor.com/addon/autogrow) plugin performance when dealing with very big tables. +* [#11290](http://dev.ckeditor.com/ticket/11290): Removed redundant code in the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin. +* [#11133](http://dev.ckeditor.com/ticket/11133): [Page Break](http://ckeditor.com/addon/pagebreak) becomes editable if pasted. +* [#11126](http://dev.ckeditor.com/ticket/11126): Fixed: Native Undo executed once the bottom of the snapshot stack is reached. +* [#11131](http://dev.ckeditor.com/ticket/11131): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Error thrown when switching to source mode if the selection was in widget's nested editable. +* [#11139](http://dev.ckeditor.com/ticket/11139): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Elements Path is not cleared after switching to source mode. +* [#10778](http://dev.ckeditor.com/ticket/10778): Fixed a bug with range enlargement. The range no longer expands to visible whitespace. +* [#11146](http://dev.ckeditor.com/ticket/11146): [IE] Fixed: Preview window switches Internet Explorer to Quirks Mode. +* [#10762](http://dev.ckeditor.com/ticket/10762): [IE] Fixed: JavaScript code displayed in preview window's URL bar. +* [#11186](http://dev.ckeditor.com/ticket/11186): Introduced the [`widgets.repository.addUpcastCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-addUpcastCallback) method that allows to block upcasting given element to a widget. +* [#11307](http://dev.ckeditor.com/ticket/11307): Fixed: Paste as Plain Text conflict with the [MooTools](http://mootools.net) library. +* [#11140](http://dev.ckeditor.com/ticket/11140): [IE11] Fixed: Anchors are not draggable. +* [#11379](http://dev.ckeditor.com/ticket/11379): Changed default contents `line-height` to unitless values to avoid huge text overlapping (like in [#9696](http://dev.ckeditor.com/ticket/9696)). +* [#10787](http://dev.ckeditor.com/ticket/10787): [Firefox] Fixed: Broken replacement of text while pasting into `div`-based editor. +* [#10884](http://dev.ckeditor.com/ticket/10884): Widgets integration with the [Show Blocks](http://ckeditor.com/addon/showblocks) plugin. +* [#11021](http://dev.ckeditor.com/ticket/11021): Fixed: An error thrown when selecting entire editable contents while fake selection is on. +* [#11086](http://dev.ckeditor.com/ticket/11086): [IE8] Re-enable inline widgets drag&drop in Internet Explorer 8. +* [#11372](http://dev.ckeditor.com/ticket/11372): Widgets: Special characters encoded twice in nested editables. +* [#10068](http://dev.ckeditor.com/ticket/10068): Fixed: Support for protocol-relative URLs. +* [#11283](http://dev.ckeditor.com/ticket/11283): [Enhanced Image](http://ckeditor.com/addon/image2): A `<div>` element with `text-align: center` and an image inside is not recognised correctly. +* [#11196](http://dev.ckeditor.com/ticket/11196): [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp): Allowed additional keyboard button labels to be translated in the dialog window. + +## CKEditor 4.3.1 + +**Important Notes:** + +* To match the naming convention, the `language` button is now `Language` ([#11201](http://dev.ckeditor.com/ticket/11201)). +* [Enhanced Image](http://ckeditor.com/addon/image2) button, context menu, command, and icon names match those of the [Image](http://ckeditor.com/addon/image) plugin ([#11222](http://dev.ckeditor.com/ticket/11222)). + +Fixed Issues: + +* [#11244](http://dev.ckeditor.com/ticket/11244): Changed: The [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method now fires the [`widget.repository.checkWidgets`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-event-checkWidgets) event, so from CKEditor 4.3.1 it is preferred to use the method rather than fire the event. +* [#11171](http://dev.ckeditor.com/ticket/11171): Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) and [`editor.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText) methods do not call the [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method. +* [#11085](http://dev.ckeditor.com/ticket/11085): [IE8] Replaced preview generated by the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget with a placeholder. +* [#11044](http://dev.ckeditor.com/ticket/11044): Enhanced WAI-ARIA support for the [Language](http://ckeditor.com/addon/language) plugin drop-down menu. +* [#11075](http://dev.ckeditor.com/ticket/11075): With drop-down menu button focused, pressing the *Down Arrow* key will now open the menu and focus its first option. +* [#11165](http://dev.ckeditor.com/ticket/11165): Fixed: The [File Browser](http://ckeditor.com/addon/filebrowser) plugin cannot be removed from the editor. +* [#11159](http://dev.ckeditor.com/ticket/11159): [IE9-10] [Enhanced Image](http://ckeditor.com/addon/image2): Fixed buggy discovery of image dimensions. +* [#11101](http://dev.ckeditor.com/ticket/11101): Drop-down lists no longer break when given double quotes. +* [#11077](http://dev.ckeditor.com/ticket/11077): [Enhanced Image](http://ckeditor.com/addon/image2): Empty undo step recorded when resizing the image. +* [#10853](http://dev.ckeditor.com/ticket/10853): [Enhanced Image](http://ckeditor.com/addon/image2): Widget has paragraph wrapper when de-captioning unaligned image. +* [#11198](http://dev.ckeditor.com/ticket/11198): Widgets: Drag handler is not fully visible when an inline widget is in a heading. +* [#11132](http://dev.ckeditor.com/ticket/11132): [Firefox] Fixed: Caret is lost after drag and drop of an inline widget. +* [#11182](http://dev.ckeditor.com/ticket/11182): [IE10-11] Fixed: Editor crashes (IE11) or works with minor issues (IE10) if a page is loaded in Quirks Mode. See [`env.quirks`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-quirks) for more details. +* [#11204](http://dev.ckeditor.com/ticket/11204): Added `figure` and `figcaption` styles to the `contents.css` file so [Enhanced Image](http://ckeditor.com/addon/image2) looks nicer. +* [#11202](http://dev.ckeditor.com/ticket/11202): Fixed: No newline in [BBCode](http://ckeditor.com/addon/bbcode) mode. +* [#10890](http://dev.ckeditor.com/ticket/10890): Fixed: Error thrown when pressing the *Delete* key in a list item. +* [#10055](http://dev.ckeditor.com/ticket/10055): [IE8-10] Fixed: *Delete* pressed on a selected image causes the browser to go back. +* [#11183](http://dev.ckeditor.com/ticket/11183): Fixed: Inserting a horizontal rule or a table in multiple row selection causes a browser crash. Additionally, the [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) method does not insert the element into every range of a selection any more. +* [#11042](http://dev.ckeditor.com/ticket/11042): Fixed: Selection made on an element containing a non-editable element was not auto faked. +* [#11125](http://dev.ckeditor.com/ticket/11125): Fixed: Keyboard navigation through menu and drop-down items will now cycle. +* [#11011](http://dev.ckeditor.com/ticket/11011): Fixed: The [`editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) method removes attributes from nested elements. +* [#11179](http://dev.ckeditor.com/ticket/11179): Fixed: [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy) does not cleanup content generated by the [Table Resize](http://ckeditor.com/addon/tableresize) plugin for inline editors. +* [#11237](http://dev.ckeditor.com/ticket/11237): Fixed: Table border attribute value is deleted when pasting content from Microsoft Word. +* [#11250](http://dev.ckeditor.com/ticket/11250): Fixed: HTML entities inside the `<textarea>` element are not encoded. +* [#11260](http://dev.ckeditor.com/ticket/11260): Fixed: Initially disabled buttons are not read by JAWS as disabled. +* [#11200](http://dev.ckeditor.com/ticket/11200): Added [Clipboard](http://ckeditor.com/addon/clipboard) plugin as a dependency for [Widget](http://ckeditor.com/addon/widget) to fix drag and drop. + +## CKEditor 4.3 + +New Features: + +* [#10612](http://dev.ckeditor.com/ticket/10612): Internet Explorer 11 support. +* [#10869](http://dev.ckeditor.com/ticket/10869): Widgets: Added better integration with the [Elements Path](http://ckeditor.com/addon/elementspath) plugin. +* [#10886](http://dev.ckeditor.com/ticket/10886): Widgets: Added tooltip to the drag handle. +* [#10933](http://dev.ckeditor.com/ticket/10933): Widgets: Introduced drag and drop of block widgets with the [Line Utilities](http://ckeditor.com/addon/lineutils) plugin. +* [#10936](http://dev.ckeditor.com/ticket/10936): Widget System changes for easier integration with other dialog systems. +* [#10895](http://dev.ckeditor.com/ticket/10895): [Enhanced Image](http://ckeditor.com/addon/image2): Added file browser integration. +* [#11002](http://dev.ckeditor.com/ticket/11002): Added the [`draggable`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-draggable) option to disable drag and drop support for widgets. +* [#10937](http://dev.ckeditor.com/ticket/10937): [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget improvements: + * loading indicator ([#10948](http://dev.ckeditor.com/ticket/10948)), + * applying paragraph changes (like font color change) to iframe ([#10841](http://dev.ckeditor.com/ticket/10841)), + * Firefox and IE9 clipboard fixes ([#10857](http://dev.ckeditor.com/ticket/10857)), + * fixing same origin policy issue ([#10840](http://dev.ckeditor.com/ticket/10840)), + * fixing undo bugs ([#10842](http://dev.ckeditor.com/ticket/10842), [#10930](http://dev.ckeditor.com/ticket/10930)), + * fixing other minor bugs. +* [#10862](http://dev.ckeditor.com/ticket/10862): [Placeholder](http://ckeditor.com/addon/placeholder) plugin was rewritten as a widget. +* [#10822](http://dev.ckeditor.com/ticket/10822): Added styles system integration with non-editable elements (for example widgets) and their nested editables. Styles cannot change non-editable content and are applied in nested editable only if allowed by its type and content filter. +* [#10856](http://dev.ckeditor.com/ticket/10856): Menu buttons will now toggle the visibility of their panels when clicked multiple times. [Language](http://ckeditor.com/addon/language) plugin fixes: Added active language highlighting, added an option to remove the language. +* [#10028](http://dev.ckeditor.com/ticket/10028): New [`config.dialog_noConfirmCancel`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-dialog_noConfirmCancel) configuration option that eliminates the need to confirm closing of a dialog window when the user changed any of its fields. +* [#10848](http://dev.ckeditor.com/ticket/10848): Integrate remaining plugins ([Styles](http://ckeditor.com/addon/stylescombo), [Format](http://ckeditor.com/addon/format), [Font](http://ckeditor.com/addon/font), [Color Button](http://ckeditor.com/addon/colorbutton), [Language](http://ckeditor.com/addon/language) and [Indent](http://ckeditor.com/addon/indent)) with [active filter](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter). +* [#10855](http://dev.ckeditor.com/ticket/10855): Change the extension of emoticons in the [BBCode](http://ckeditor.com/addon/bbcode) sample from GIF to PNG. + +Fixed Issues: + +* [#10831](http://dev.ckeditor.com/ticket/10831): [Enhanced Image](http://ckeditor.com/addon/image2): Merged `image2inline` and `image2block` into one `image2` widget. +* [#10835](http://dev.ckeditor.com/ticket/10835): [Enhanced Image](http://ckeditor.com/addon/image2): Improved visibility of the resize handle. +* [#10836](http://dev.ckeditor.com/ticket/10836): [Enhanced Image](http://ckeditor.com/addon/image2): Preserve custom mouse cursor while resizing the image. +* [#10939](http://dev.ckeditor.com/ticket/10939): [Firefox] [Enhanced Image](http://ckeditor.com/addon/image2): hovering the image causes it to change. +* [#10866](http://dev.ckeditor.com/ticket/10866): Fixed: Broken *Tab* key navigation in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. +* [#10833](http://dev.ckeditor.com/ticket/10833): Fixed: *Lock ratio* option should be on by default in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. +* [#10881](http://dev.ckeditor.com/ticket/10881): Various improvements to *Enter* key behavior in nested editables. +* [#10879](http://dev.ckeditor.com/ticket/10879): [Remove Format](http://ckeditor.com/addon/removeformat) should not leak from a nested editable. +* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [WebSpellChecker](http://ckeditor.com/addon/wsc) fails to apply changes if a nested editable was focused. +* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [SCAYT](http://ckeditor.com/addon/wsc) blocks typing in nested editables. +* [#11079](http://dev.ckeditor.com/ticket/11079): Add button icons to the [Placeholder](http://ckeditor.com/addon/placeholder) sample. +* [#10870](http://dev.ckeditor.com/ticket/10870): The `paste` command is no longer being disabled when the clipboard is empty. +* [#10854](http://dev.ckeditor.com/ticket/10854): Fixed: Firefox prepends `<br>` to `<body>`, so it is stripped by the HTML data processor. +* [#10823](http://dev.ckeditor.com/ticket/10823): Fixed: [Link](http://ckeditor.com/addon/link) plugin does not work with non-editable content. +* [#10828](http://dev.ckeditor.com/ticket/10828): [Magic Line](http://ckeditor.com/addon/magicline) integration with the Widget System. +* [#10865](http://dev.ckeditor.com/ticket/10865): Improved hiding copybin, so copying widgets works smoothly. +* [#11066](http://dev.ckeditor.com/ticket/11066): Widget's private parts use CSS reset. +* [#11027](http://dev.ckeditor.com/ticket/11027): Fixed: Block commands break on widgets; added the [`contentDomInvalidated`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDomInvalidated) event. +* [#10430](http://dev.ckeditor.com/ticket/10430): Resolve dependence of the [Image](http://ckeditor.com/addon/image) plugin on the [Form Elements](http://ckeditor.com/addon/forms) plugin. +* [#10911](http://dev.ckeditor.com/ticket/10911): Fixed: Browser *Alt* hotkeys will no longer be blocked while a widget is focused. +* [#11082](http://dev.ckeditor.com/ticket/11082): Fixed: Selected widget is not copied or cut when using toolbar buttons or context menu. +* [#11083](http://dev.ckeditor.com/ticket/11083): Fixed list and div element application to block widgets. +* [#10887](http://dev.ckeditor.com/ticket/10887): Internet Explorer 8 compatibility issues related to the Widget System. +* [#11074](http://dev.ckeditor.com/ticket/11074): Temporarily disabled inline widget drag and drop, because of seriously buggy native `range#moveToPoint` method. +* [#11098](http://dev.ckeditor.com/ticket/11098): Fixed: Wrong selection position after undoing widget drag and drop. +* [#11110](http://dev.ckeditor.com/ticket/11110): Fixed: IFrame and Flash objects are being incorrectly pasted in certain conditions. +* [#11129](http://dev.ckeditor.com/ticket/11129): Page break is lost when loading data. +* [#11123](http://dev.ckeditor.com/ticket/11123): [Firefox] Widget is destroyed after being dragged outside of `<body>`. +* [#11124](http://dev.ckeditor.com/ticket/11124): Fixed the [Elements Path](http://ckeditor.com/addon/elementspath) in an editor using the [Div Editing Area](http://ckeditor.com/addon/divarea). + +## CKEditor 4.3 Beta + +New Features: + +* [#9764](http://dev.ckeditor.com/ticket/9764): Widget System. + * [Widget plugin](http://ckeditor.com/addon/widget) introducing the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget). + * New [`editor.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) and [`editor.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-shiftEnterMode) properties &ndash; normalized versions of [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) and [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). + * Dynamic editor settings. Starting from CKEditor 4.3 Beta, *Enter* mode values and [content filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) instances may be changed dynamically (for example when the caret was placed in an element in which editor features should be adjusted). When you are implementing a new editor feature, you should base its behavior on [dynamic](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) or [static](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) *Enter* mode values depending on whether this feature works in selection context or globally on editor content. + * Dynamic *Enter* mode values &ndash; [`editor.setActiveEnterMode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveEnterMode) method, [`editor.activeEnterModeChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeEnterModeChange) event, and two properties: [`editor.activeEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) and [`editor.activeShiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeShiftEnterMode). + * Dynamic content filter instances &ndash; [`editor.setActiveFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveFilter) method, [`editor.activeFilterChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeFilterChange) event, and [`editor.activeFilter`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter) property. + * "Fake" selection was introduced. It makes it possible to virtually select any element when the real selection remains hidden. See the [`selection.fake()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-fake) method. + * Default [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied to non-editable elements (elements with `contenteditable` attribute set to `false` and their descendants) anymore. To add a rule which will be applied to all elements you need to pass an additional argument to the [`filter.addRules()`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter-method-addRules) method. + * Dozens of new methods were introduced &ndash; most interesting ones: + * [`document.find()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-find), + * [`document.findOne()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-findOne), + * [`editable.insertElementIntoRange()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElementIntoRange), + * [`range.moveToClosestEditablePosition()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-moveToClosestEditablePosition), + * New methods for [`htmlParser.node`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.node) and [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element). +* [#10659](http://dev.ckeditor.com/ticket/10659): New [Enhanced Image](http://ckeditor.com/addon/image2) plugin that introduces a widget with integrated image captions, an option to center images, and dynamic "click and drag" resizing. +* [#10664](http://dev.ckeditor.com/ticket/10664): New [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin that introduces the MathJax widget. +* [#7987](https://dev.ckeditor.com/ticket/7987): New [Language](http://ckeditor.com/addon/language) plugin that implements Language toolbar button to support [WCAG 3.1.2 Language of Parts](http://www.w3.org/TR/UNDERSTANDING-WCAG20/meaning-other-lang-id.html). +* [#10708](http://dev.ckeditor.com/ticket/10708): New [smileys](http://ckeditor.com/addon/smiley). + +## CKEditor 4.2.3 + +Fixed Issues: + +* [#10994](http://dev.ckeditor.com/ticket/10994): Fixed: Loading external jQuery library when opening the [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) sample directly from file. +* [#10975](http://dev.ckeditor.com/ticket/10975): [IE] Fixed: Error thrown while opening the color palette. +* [#9929](http://dev.ckeditor.com/ticket/9929): [Blink/WebKit] Fixed: A non-breaking space is created once a character is deleted and a regular space is typed. +* [#10963](http://dev.ckeditor.com/ticket/10963): Fixed: JAWS issue with the keyboard shortcut for [Magic Line](http://ckeditor.com/addon/magicline). +* [#11096](http://dev.ckeditor.com/ticket/11096): Fixed: TypeError: Object has no method 'is'. + +## CKEditor 4.2.2 + +Fixed Issues: + +* [#9314](http://dev.ckeditor.com/ticket/9314): Fixed: Incorrect error message on closing a dialog window without saving changs. +* [#10308](http://dev.ckeditor.com/ticket/10308): [IE10] Fixed: Unspecified error when deleting a row. +* [#10945](http://dev.ckeditor.com/ticket/10945): [Chrome] Fixed: Clicking with a mouse inside the editor does not show the caret. +* [#10912](http://dev.ckeditor.com/ticket/10912): Prevent default action when content of a non-editable link is clicked. +* [#10913](http://dev.ckeditor.com/ticket/10913): Fixed [`CKEDITOR.plugins.addExternal()`](http://docs.ckeditor.com/#!/api/CKEDITOR.resourceManager-method-addExternal) not handling paths including file name specified. +* [#10666](http://dev.ckeditor.com/ticket/10666): Fixed [`CKEDITOR.tools.isArray()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-isArray) not working cross frame. +* [#10910](http://dev.ckeditor.com/ticket/10910): [IE9] Fixed JavaScript error thrown in Compatibility Mode when clicking and/or typing in the editing area. +* [#10868](http://dev.ckeditor.com/ticket/10868): [IE8] Prevent the browser from crashing when applying the Inline Quotation style. +* [#10915](http://dev.ckeditor.com/ticket/10915): Fixed: Invalid CSS filter in the Kama skin. +* [#10914](http://dev.ckeditor.com/ticket/10914): Plugins [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock) are now included in the build configuration. +* [#10812](http://dev.ckeditor.com/ticket/10812): Fixed [`range.createBookmark2()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-createBookmark2) incorrectly normalizing offsets. This bug was causing many issues: [#10850](http://dev.ckeditor.com/ticket/10850), [#10842](http://dev.ckeditor.com/ticket/10842). +* [#10951](http://dev.ckeditor.com/ticket/10951): Reviewed and optimized focus handling on panels (combo, menu buttons, color buttons, and context menu) to enhance accessibility. Fixed [#10705](http://dev.ckeditor.com/ticket/10705), [#10706](http://dev.ckeditor.com/ticket/10706) and [#10707](http://dev.ckeditor.com/ticket/10707). +* [#10704](http://dev.ckeditor.com/ticket/10704): Fixed a JAWS issue with the Select Color dialog window title not being announced. +* [#10753](http://dev.ckeditor.com/ticket/10753): The floating toolbar in inline instances now has a dedicated accessibility label. + +## CKEditor 4.2.1 + +Fixed Issues: + +* [#10301](http://dev.ckeditor.com/ticket/10301): [IE9-10] Undo fails after 3+ consecutive paste actions with a JavaScript error. +* [#10689](http://dev.ckeditor.com/ticket/10689): Save toolbar button saves only the first editor instance. +* [#10368](http://dev.ckeditor.com/ticket/10368): Move language reading direction definition (`dir`) from main language file to core. +* [#9330](http://dev.ckeditor.com/ticket/9330): Fixed pasting anchors from MS Word. +* [#8103](http://dev.ckeditor.com/ticket/8103): Fixed pasting nested lists from MS Word. +* [#9958](http://dev.ckeditor.com/ticket/9958): [IE9] Pressing the "OK" button will trigger the `onbeforeunload` event in the popup dialog. +* [#10662](http://dev.ckeditor.com/ticket/10662): Fixed styles from the Styles drop-down list not registering to the ACF in case when the [Shared Spaces plugin](http://ckeditor.com/addon/sharedspace) is used. +* [#9654](http://dev.ckeditor.com/ticket/9654): Problems with Internet Explorer 10 Quirks Mode. +* [#9816](http://dev.ckeditor.com/ticket/9816): Floating toolbar does not reposition vertically in several cases. +* [#10646](http://dev.ckeditor.com/ticket/10646): Removing a selected sublist or nested table with *Backspace/Delete* removes the parent element. +* [#10623](http://dev.ckeditor.com/ticket/10623): [WebKit] Page is scrolled when opening a drop-down list. +* [#10004](http://dev.ckeditor.com/ticket/10004): [ChromeVox] Button names are not announced. +* [#10731](http://dev.ckeditor.com/ticket/10731): [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin breaks cloning of editor configuration. +* It is now possible to set per instance [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin configuration instead of setting the configuration globally. + +## CKEditor 4.2 + +**Important Notes:** + +* Dropped compatibility support for Internet Explorer 7 and Firefox 3.6. + +* Both the Basic and the Standard distribution packages will not contain the new [Indent Block](http://ckeditor.com/addon/indentblock) plugin. Because of this the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) might remove block indentations from existing contents. If you want to prevent this, either [add an appropriate ACF rule to your filter](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) or create a custom build based on the Basic/Standard package and add the Indent Block plugin in [CKBuilder](http://ckeditor.com/builder). + +New Features: + +* [#10027](http://dev.ckeditor.com/ticket/10027): Separated list and block indentation into two plugins: [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock). +* [#8244](http://dev.ckeditor.com/ticket/8244): Use *(Shift+)Tab* to indent and outdent lists. +* [#10281](http://dev.ckeditor.com/ticket/10281): The [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) is now available. Several jQuery-related issues fixed: [#8261](http://dev.ckeditor.com/ticket/8261), [#9077](http://dev.ckeditor.com/ticket/9077), [#8710](http://dev.ckeditor.com/ticket/8710), [#8530](http://dev.ckeditor.com/ticket/8530), [#9019](http://dev.ckeditor.com/ticket/9019), [#6181](http://dev.ckeditor.com/ticket/6181), [#7876](http://dev.ckeditor.com/ticket/7876), [#6906](http://dev.ckeditor.com/ticket/6906). +* [#10042](http://dev.ckeditor.com/ticket/10042): Introduced [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title) setting to change the human-readable title of the editor. +* [#9794](http://dev.ckeditor.com/ticket/9794): Added [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. +* [#9923](http://dev.ckeditor.com/ticket/9923): HiDPI support in the editor UI. HiDPI icons for [Moono skin](http://ckeditor.com/addon/moono) added. +* [#8031](http://dev.ckeditor.com/ticket/8031): Handle `required` attributes on `<textarea>` elements &mdash; introduced [`editor.required`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-required) event. +* [#10280](http://dev.ckeditor.com/ticket/10280): Ability to replace `<textarea>` elements with the inline editor. + +Fixed Issues: + +* [#10599](http://dev.ckeditor.com/ticket/10599): [Indent](http://ckeditor.com/addon/indent) plugin is no longer required by the [List](http://ckeditor.com/addon/list) plugin. +* [#10370](http://dev.ckeditor.com/ticket/10370): Inconsistency in data events between framed and inline editors. +* [#10438](http://dev.ckeditor.com/ticket/10438): [FF, IE] No selection is done on an editable element on executing [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData). + +## CKEditor 4.1.3 + +New Features: + +* Added new translation: Indonesian. + +Fixed Issues: + +* [#10644](http://dev.ckeditor.com/ticket/10644): Fixed a critical bug when pasting plain text in Blink-based browsers. +* [#5189](http://dev.ckeditor.com/ticket/5189): [Find/Replace](http://ckeditor.com/addon/find) dialog window: rename "Cancel" button to "Close". +* [#10562](http://dev.ckeditor.com/ticket/10562): [Housekeeping] Unified CSS gradient filter formats in the [Moono](http://ckeditor.com/addon/moono) skin. +* [#10537](http://dev.ckeditor.com/ticket/10537): Advanced Content Filter should register a default rule for [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). +* [#10610](http://dev.ckeditor.com/ticket/10610): [`CKEDITOR.dialog.addIframe()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog-static-method-addIframe) incorrectly sets the iframe size in dialog windows. + +## CKEditor 4.1.2 + +New Features: + +* Added new translation: Sinhala. + +Fixed Issues: + +* [#10339](http://dev.ckeditor.com/ticket/10339): Fixed: Error thrown when inserted data was totally stripped out after filtering and processing. +* [#10298](http://dev.ckeditor.com/ticket/10298): Fixed: Data processor breaks attributes containing protected parts. +* [#10367](http://dev.ckeditor.com/ticket/10367): Fixed: [`editable.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertText) loses characters when `RegExp` replace controls are being inserted. +* [#10165](http://dev.ckeditor.com/ticket/10165): [IE] Access denied error when `document.domain` has been altered. +* [#9761](http://dev.ckeditor.com/ticket/9761): Update the *Backspace* key state in [`keystrokeHandler.blockedKeystrokes`](http://docs.ckeditor.com/#!/api/CKEDITOR.keystrokeHandler-property-blockedKeystrokes) when calling [`editor.setReadOnly()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly). +* [#6504](http://dev.ckeditor.com/ticket/6504): Fixed: Race condition while loading several [`config.customConfig`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-customConfig) files. +* [#10146](http://dev.ckeditor.com/ticket/10146): [Firefox] Empty lines are being removed while [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) is [`CKEDITOR.ENTER_BR`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-ENTER_BR). +* [#10360](http://dev.ckeditor.com/ticket/10360): Fixed: ARIA `role="application"` should not be used for dialog windows. +* [#10361](http://dev.ckeditor.com/ticket/10361): Fixed: ARIA `role="application"` should not be used for floating panels. +* [#10510](http://dev.ckeditor.com/ticket/10510): Introduced unique voice labels to differentiate between different editor instances. +* [#9945](http://dev.ckeditor.com/ticket/9945): [iOS] Scrolling not possible on iPad. +* [#10389](http://dev.ckeditor.com/ticket/10389): Fixed: Invalid HTML in the "Text and Table" template. +* [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin user interface was changed to match CKEditor 4 style. + +## CKEditor 4.1.1 + +New Features: + +* Added new translation: Albanian. + +Fixed Issues: + +* [#10172](http://dev.ckeditor.com/ticket/10172): Pressing *Delete* or *Backspace* in an empty table cell moves the cursor to the next/previous cell. +* [#10219](http://dev.ckeditor.com/ticket/10219): Error thrown when destroying an editor instance in parallel with a `mouseup` event. +* [#10265](http://dev.ckeditor.com/ticket/10265): Wrong loop type in the [File Browser](http://ckeditor.com/addon/filebrowser) plugin. +* [#10249](http://dev.ckeditor.com/ticket/10249): Wrong undo/redo states at start. +* [#10268](http://dev.ckeditor.com/ticket/10268): [Show Blocks](http://ckeditor.com/addon/showblocks) does not recover after switching to Source view. +* [#9995](http://dev.ckeditor.com/ticket/9995): HTML code in the `<textarea>` should not be modified by the [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor). +* [#10320](http://dev.ckeditor.com/ticket/10320): [Justify](http://ckeditor.com/addon/justify) plugin should add elements to Advanced Content Filter based on current [Enter mode](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode). +* [#10260](http://dev.ckeditor.com/ticket/10260): Fixed: Advanced Content Filter blocks [`tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces). Unified `data-cke-*` attributes filtering. +* [#10315](http://dev.ckeditor.com/ticket/10315): [WebKit] [Undo manager](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager) should not record snapshots after a filling character was added/removed. +* [#10291](http://dev.ckeditor.com/ticket/10291): [WebKit] Space after a filling character should be secured. +* [#10330](http://dev.ckeditor.com/ticket/10330): [WebKit] The filling character is not removed on `keydown` in specific cases. +* [#10285](http://dev.ckeditor.com/ticket/10285): Fixed: Styled text pasted from MS Word causes an infinite loop. +* [#10131](http://dev.ckeditor.com/ticket/10131): Fixed: [`undoManager.update()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-method-update) does not refresh the command state. +* [#10337](http://dev.ckeditor.com/ticket/10337): Fixed: Unable to remove `<s>` using [Remove Format](http://ckeditor.com/addon/removeformat). + +## CKEditor 4.1 + +Fixed Issues: + +* [#10192](http://dev.ckeditor.com/ticket/10192): Closing lists with the *Enter* key does not work with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) in several cases. +* [#10191](http://dev.ckeditor.com/ticket/10191): Fixed allowed content rules unification, so the [`filter.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-property-allowedContent) property always contains rules in the same format. +* [#10224](http://dev.ckeditor.com/ticket/10224): Advanced Content Filter does not remove non-empty `<a>` elements anymore. +* Minor issues in plugin integration with Advanced Content Filter: + * [#10166](http://dev.ckeditor.com/ticket/10166): Added transformation from the `align` attribute to `float` style to preserve backward compatibility after the introduction of Advanced Content Filter. + * [#10195](http://dev.ckeditor.com/ticket/10195): [Image](http://ckeditor.com/addon/image) plugin no longer registers rules for links to Advanced Content Filter. + * [#10213](http://dev.ckeditor.com/ticket/10213): [Justify](http://ckeditor.com/addon/justify) plugin is now correctly registering rules to Advanced Content Filter when [`config.justifyClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-justifyClasses) is defined. + +## CKEditor 4.1 RC + +New Features: + +* [#9829](http://dev.ckeditor.com/ticket/9829): Advanced Content Filter - data and features activation based on editor configuration. + + Brand new data filtering system that works in 2 modes: + + * Based on loaded features (toolbar items, plugins) - the data will be filtered according to what the editor in its + current configuration can handle. + * Based on [`config.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent) rules - the data + will be filtered and the editor features (toolbar items, commands, keystrokes) will be enabled if they are allowed. + + See the `datafiltering.html` sample, [guides](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) and [`CKEDITOR.filter` API documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.filter). +* [#9387](http://dev.ckeditor.com/ticket/9387): Reintroduced [Shared Spaces](http://ckeditor.com/addon/sharedspace) - the ability to display toolbar and bottom editor space in selected locations and to share them by different editor instances. +* [#9907](http://dev.ckeditor.com/ticket/9907): Added the [`contentPreview`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-contentPreview) event for preview data manipulation. +* [#9713](http://dev.ckeditor.com/ticket/9713): Introduced the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin that brings raw HTML editing for inline editor instances. +* Included in [#9829](http://dev.ckeditor.com/ticket/9829): Introduced new events, [`toHtml`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toHtml) and [`toDataFormat`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toDataFormat), allowing for better integration with data processing. +* [#9981](http://dev.ckeditor.com/ticket/9981): Added ability to filter [`htmlParser.fragment`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.fragment), [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element) etc. by many [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter)s before writing structure to an HTML string. +* Included in [#10103](http://dev.ckeditor.com/ticket/10103): + * Introduced the [`editor.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-status) property to make it easier to check the current status of the editor. + * Default [`command`](http://docs.ckeditor.com/#!/api/CKEDITOR.command) state is now [`CKEDITOR.TRISTATE_DISABLE`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-TRISTATE_DISABLED). It will be activated on [`editor.instanceReady`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-instanceReady) or immediately after being added if the editor is already initialized. +* [#9796](http://dev.ckeditor.com/ticket/9796): Introduced `<s>` as a default tag for strikethrough, which replaces obsolete `<strike>` in HTML5. + +## CKEditor 4.0.3 + +Fixed Issues: + +* [#10196](http://dev.ckeditor.com/ticket/10196): Fixed context menus not opening with keyboard shortcuts when [Autogrow](http://ckeditor.com/addon/autogrow) is enabled. +* [#10212](http://dev.ckeditor.com/ticket/10212): [IE7-10] Undo command throws errors after multiple switches between Source and WYSIWYG view. +* [#10219](http://dev.ckeditor.com/ticket/10219): [Inline editor] Error thrown after calling [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy). + +## CKEditor 4.0.2 + +Fixed Issues: + +* [#9779](http://dev.ckeditor.com/ticket/9779): Fixed overriding [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl) with `CKEDITOR_GETURL`. +* [#9772](http://dev.ckeditor.com/ticket/9772): Custom buttons in the dialog window footer have different look and size ([Moono](http://ckeditor.com/addon/moono), [Kama](http://ckeditor.com/addon/kama) skins). +* [#9029](http://dev.ckeditor.com/ticket/9029): Custom styles added with the [`stylesSet.add()`](http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet-method-add) are displayed in the wrong order. +* [#9887](http://dev.ckeditor.com/ticket/9887): Disable [Magic Line](http://ckeditor.com/addon/magicline) when [`editor.readOnly`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) is set. +* [#9882](http://dev.ckeditor.com/ticket/9882): Fixed empty document title on [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) if set via the Document Properties dialog window. +* [#9773](http://dev.ckeditor.com/ticket/9773): Fixed rendering problems with selection fields in the Kama skin. +* [#9851](http://dev.ckeditor.com/ticket/9851): The [`selectionChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-selectionChange) event is not fired when mouse selection ended outside editable. +* [#9903](http://dev.ckeditor.com/ticket/9903): [Inline editor] Bad positioning of floating space with page horizontal scroll. +* [#9872](http://dev.ckeditor.com/ticket/9872): [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) returns `true` when called onload. Removed the obsolete `editor.mayBeDirty` flag. +* [#9893](http://dev.ckeditor.com/ticket/9893): [IE] Fixed broken toolbar when editing mixed direction content in Quirks mode. +* [#9845](http://dev.ckeditor.com/ticket/9845): Fixed TAB navigation in the [Link](http://ckeditor.com/addon/link) dialog window when the Anchor option is used and no anchors are available. +* [#9883](http://dev.ckeditor.com/ticket/9883): Maximizing was making the entire page editable with [divarea](http://ckeditor.com/addon/divarea)-based editors. +* [#9940](http://dev.ckeditor.com/ticket/9940): [Firefox] Navigating back to a page with the editor was making the entire page editable. +* [#9966](http://dev.ckeditor.com/ticket/9966): Fixed: Unable to type square brackets with French keyboard layout. Changed [Magic Line](http://ckeditor.com/addon/magicline) keystrokes. +* [#9507](http://dev.ckeditor.com/ticket/9507): [Firefox] Selection is moved before editable position when the editor is focused for the first time. +* [#9947](http://dev.ckeditor.com/ticket/9947): [WebKit] Editor overflows parent container in some edge cases. +* [#10105](http://dev.ckeditor.com/ticket/10105): Fixed: Broken [sourcearea](http://ckeditor.com/addon/sourcearea) view when an RTL language is set. +* [#10123](http://dev.ckeditor.com/ticket/10123): [WebKit] Fixed: Several dialog windows have broken layout since the latest WebKit release. +* [#10152](http://dev.ckeditor.com/ticket/10152): Fixed: Invalid ARIA property used on menu items. + +## CKEditor 4.0.1.1 + +Fixed Issues: + +* Security update: Added protection against XSS attack and possible path disclosure in the PHP sample. + +## CKEditor 4.0.1 + +Fixed Issues: + +* [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in the new [Moono skin](http://ckeditor.com/addon/moono). +* Accessibility issues (mainly in inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844). +* [Magic Line](http://ckeditor.com/addon/magicline) plugin: + * [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic Line. + * [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic Line support for forms. + * [#9573](http://dev.ckeditor.com/ticket/9573): Magic Line does not disappear on `mouseout` in a specific case. +* [#9754](http://dev.ckeditor.com/ticket/9754): [WebKit] Cutting & pasting simple unformatted text generates an inline wrapper in WebKit browsers. +* [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS Word. +* [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging. +* Context menu: + * [#9712](http://dev.ckeditor.com/ticket/9712): Opening the context menu destroys editor focus. + * [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over the floating toolbar. + * [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates a JavaScript error in inline mode when the editor is attached to a header element. +* [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing the window. +* [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div-based editor puts the editing area under the bottom UI space. +* [#9528](http://dev.ckeditor.com/ticket/9528): Host page `box-sizing` style should not influence the editor UI elements. +* [#9503](http://dev.ckeditor.com/ticket/9503): [Form Elements](http://ckeditor.com/addon/forms) plugin adds context menu listeners only on supported input types. Added support for `tel`, `email`, `search` and `url` input types. +* [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in a narrow window. +* [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog window does not populate width correctly. +* [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in a nested table removes the outer table cell. +* [#9815](http://dev.ckeditor.com/ticket/9815): Cannot edit dialog window fields in an editor initialized in the jQuery UI modal dialog. +* [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialog windows do not show completely in a small window. +* [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a `<div>` element stay permanently even after the user exits editing the `<div>`. +* [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing the Format drop-down list by clicking its button. +* [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when the `border-width` style is specified. +* [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read-only mode. +* [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected images. +* [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `<pre>` elements. +* [#9709](http://dev.ckeditor.com/ticket/9709): [Paste from Word](http://ckeditor.com/addon/pastefromword) should not depend on configuration from other styles. +* [#9726](http://dev.ckeditor.com/ticket/9726): Removed [Color Dialog](http://ckeditor.com/addon/colordialog) plugin dependency from [Table Tools](http://ckeditor.com/addon/tabletools). +* [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly in the [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp) dialog window. +* [#9771](http://dev.ckeditor.com/ticket/9771): [WebKit & Opera] Fixed scrolling issues when pasting. +* [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] `onChange` is not fired for checkboxes in dialogs. +* [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When opening a toolbar menu for the first time and pressing the *Down Arrow* key, focus goes to the next toolbar button instead of the menu options. +* [#9847](http://dev.ckeditor.com/ticket/9847): [Elements Path](http://ckeditor.com/addon/elementspath) should not be initialized in the inline editor. +* [#9853](http://dev.ckeditor.com/ticket/9853): [`editor.addRemoveFormatFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addRemoveFormatFilter) is exposed before it really works. +* [#8893](http://dev.ckeditor.com/ticket/8893): Value of the [`pasteFromWordCleanupFile`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordCleanupFile) configuration option is now taken from the instance configuration. +* [#9693](http://dev.ckeditor.com/ticket/9693): Removed "Live Preview" checkbox from UI color picker. + + +## CKEditor 4.0 + +The first stable release of the new CKEditor 4 code line. + +The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever +possible. The list of relevant changes can be found in the [API Changes page of +the CKEditor 4 documentation][1]. + +[1]: http://docs.ckeditor.com/#!/guide/dev_api_changes "API Changes" diff --git a/html/moodle2/mod/hvp/editor/ckeditor/LICENSE.md b/html/moodle2/mod/hvp/editor/ckeditor/LICENSE.md new file mode 100755 index 0000000000..5136fe55bb --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/LICENSE.md @@ -0,0 +1,1420 @@ +Software License Agreement +========================== + +CKEditor - The text editor for Internet - http://ckeditor.com +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your +choice: + + - GNU General Public License Version 2 or later (the "GPL") + http://www.gnu.org/licenses/gpl.html + (See Appendix A) + + - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + http://www.gnu.org/licenses/lgpl.html + (See Appendix B) + + - Mozilla Public License Version 1.1 or later (the "MPL") + http://www.mozilla.org/MPL/MPL-1.1.html + (See Appendix C) + +You are not required to, but if you want to explicitly declare the +license you have chosen to be bound to when using, reproducing, +modifying and distributing this software, just include a text file +titled "legal.txt" in your version of this software, indicating your +license choice. In any case, your choice will not restrict any +recipient of your version of this software to use, reproduce, modify +and distribute this software under any of the above licenses. + +Sources of Intellectual Property Included in CKEditor +----------------------------------------------------- + +Where not otherwise indicated, all CKEditor content is authored by +CKSource engineers and consists of CKSource-owned intellectual +property. In some specific instances, CKEditor will incorporate work +done by developers outside of CKSource with their express permission. + +The following libraries are included in CKEditor under the MIT license (see Appendix D): + +* CKSource Samples Framework (included in the samples) - Copyright (c) 2014-2015, CKSource - Frederico Knabben. +* PicoModal (included in `samples/js/sf.js`) - Copyright (c) 2012 James Frasca. +* CodeMirror (included in the samples) - Copyright (C) 2014 by Marijn Haverbeke <marijnh@gmail.com> and others. + +Parts of code taken from the following libraries are included in CKEditor under the MIT license (see Appendix D): + +* jQuery (inspired the domReady function, ckeditor_base.js) - Copyright (c) 2011 John Resig, http://jquery.com/ + +The following libraries are included in CKEditor under the SIL Open Font License, Version 1.1 (see Appendix E): + +* Font Awesome (included in the toolbar configurator) - Copyright (C) 2012 by Dave Gandy. + +The following libraries are included in CKEditor under the BSD-3 License (see Appendix F): + +* highlight.js (included in the `codesnippet` plugin) - Copyright (c) 2006, Ivan Sagalaev. +* YUI Library (included in the `uicolor` plugin) - Copyright (c) 2009, Yahoo! Inc. + + +Trademarks +---------- + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand +and product names are trademarks, registered trademarks or service +marks of their respective holders. + +--- + +Appendix A: The GPL License +--------------------------- + +``` +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software-to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS +``` + +Appendix B: The LGPL License +---------------------------- + +``` +GNU LESSER GENERAL PUBLIC LICENSE +Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software-to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages-typically libraries-of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + +GNU LESSER GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + +NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + +END OF TERMS AND CONDITIONS +``` + +Appendix C: The MPL License +--------------------------- + +``` +MOZILLA PUBLIC LICENSE +Version 1.1 + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] +``` + +Appendix D: The MIT License +--------------------------- + +``` +The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +``` + +Appendix E: The SIL Open Font License Version 1.1 +--------------------------------------------- + +``` +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. +``` + +Appendix F: The BSD-3 License +----------------------------- + +``` +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +``` + diff --git a/html/moodle2/mod/hvp/editor/ckeditor/README.md b/html/moodle2/mod/hvp/editor/ckeditor/README.md new file mode 100755 index 0000000000..e6a2d255aa --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/README.md @@ -0,0 +1,39 @@ +CKEditor 4 +========== + +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +http://ckeditor.com - See LICENSE.md for license information. + +CKEditor is a text editor to be used inside web pages. It's not a replacement +for desktop text editors like Word or OpenOffice, but a component to be used as +part of web applications and websites. + +## Documentation + +The full editor documentation is available online at the following address: +http://docs.ckeditor.com + +## Installation + +Installing CKEditor is an easy task. Just follow these simple steps: + + 1. **Download** the latest version from the CKEditor website: + http://ckeditor.com. You should have already completed this step, but be + sure you have the very latest version. + 2. **Extract** (decompress) the downloaded file into the root of your website. + +**Note:** CKEditor is by default installed in the `ckeditor` folder. You can +place the files in whichever you want though. + +## Checking Your Installation + +The editor comes with a few sample pages that can be used to verify that +installation proceeded properly. Take a look at the `samples` directory. + +To test your installation, just call the following page at your website: + + http://<your site>/<CKEditor installation path>/samples/index.html + +For example: + + http://www.example.com/ckeditor/samples/index.html diff --git a/html/moodle2/mod/hvp/editor/ckeditor/adapters/jquery.js b/html/moodle2/mod/hvp/editor/ckeditor/adapters/jquery.js new file mode 100755 index 0000000000..a3686a3f1c --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/adapters/jquery.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(a){if("undefined"==typeof a)throw Error("jQuery should be loaded before CKEditor jQuery adapter.");if("undefined"==typeof CKEDITOR)throw Error("CKEditor should be loaded before CKEditor jQuery adapter.");CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data("ckeditorInstance");if(!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";return a}, +ckeditor:function(g,d){if(!CKEDITOR.env.isCompatible)throw Error("The environment is incompatible.");if(!a.isFunction(g))var k=d,d=g,g=k;var i=[],d=d||{};this.each(function(){var b=a(this),c=b.data("ckeditorInstance"),f=b.data("_ckeditorInstanceLock"),h=this,j=new a.Deferred;i.push(j.promise());if(c&&!f)g&&g.apply(c,[this]),j.resolve();else if(f)c.once("instanceReady",function(){setTimeout(function(){c.element?(c.element.$==h&&g&&g.apply(c,[h]),j.resolve()):setTimeout(arguments.callee,100)},0)},null, +null,9999);else{if(d.autoUpdateElement||"undefined"==typeof d.autoUpdateElement&&CKEDITOR.config.autoUpdateElement)d.autoUpdateElementJquery=!0;d.autoUpdateElement=!1;b.data("_ckeditorInstanceLock",!0);c=a(this).is("textarea")?CKEDITOR.replace(h,d):CKEDITOR.inline(h,d);b.data("ckeditorInstance",c);c.on("instanceReady",function(d){var e=d.editor;setTimeout(function(){if(e.element){d.removeListener();e.on("dataReady",function(){b.trigger("dataReady.ckeditor",[e])});e.on("setData",function(a){b.trigger("setData.ckeditor", +[e,a.data])});e.on("getData",function(a){b.trigger("getData.ckeditor",[e,a.data])},999);e.on("destroy",function(){b.trigger("destroy.ckeditor",[e])});e.on("save",function(){a(h.form).submit();return!1},null,null,20);if(e.config.autoUpdateElementJquery&&b.is("textarea")&&a(h.form).length){var c=function(){b.ckeditor(function(){e.updateElement()})};a(h.form).submit(c);a(h.form).bind("form-pre-serialize",c);b.bind("destroy.ckeditor",function(){a(h.form).unbind("submit",c);a(h.form).unbind("form-pre-serialize", +c)})}e.on("destroy",function(){b.removeData("ckeditorInstance")});b.removeData("_ckeditorInstanceLock");b.trigger("instanceReady.ckeditor",[e]);g&&g.apply(e,[h]);j.resolve()}else setTimeout(arguments.callee,100)},0)},null,null,9999)}});var f=new a.Deferred;this.promise=f.promise();a.when.apply(this,i).then(function(){f.resolve()});this.editor=this.eq(0).data("ckeditorInstance");return this}});CKEDITOR.config.jqueryOverrideVal&&(a.fn.val=CKEDITOR.tools.override(a.fn.val,function(g){return function(d){if(arguments.length){var k= +this,i=[],f=this.each(function(){var b=a(this),c=b.data("ckeditorInstance");if(b.is("textarea")&&c){var f=new a.Deferred;c.setData(d,function(){f.resolve()});i.push(f.promise());return!0}return g.call(b,d)});if(i.length){var b=new a.Deferred;a.when.apply(this,i).done(function(){b.resolveWith(k)});return b.promise()}return f}var f=a(this).eq(0),c=f.data("ckeditorInstance");return f.is("textarea")&&c?c.getData():g.call(f)}}))})(window.jQuery); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/build-config.js b/html/moodle2/mod/hvp/editor/ckeditor/build-config.js new file mode 100755 index 0000000000..7979ff259f --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/build-config.js @@ -0,0 +1,153 @@ +/** + * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +/** + * This file was added automatically by CKEditor builder. + * You may re-use it at any time to build CKEditor again. + * + * If you would like to build CKEditor online again + * (for example to upgrade), visit one the following links: + * + * (1) http://ckeditor.com/builder + * Visit online builder to build CKEditor from scratch. + * + * (2) http://ckeditor.com/builder/d11c5298ce0a8359647f3feee4926f41 + * Visit online builder to build CKEditor, starting with the same setup as before. + * + * (3) http://ckeditor.com/builder/download/d11c5298ce0a8359647f3feee4926f41 + * Straight download link to the latest version of CKEditor (Optimized) with the same setup as before. + * + * NOTE: + * This file is not used by CKEditor, you may remove it. + * Changing this file will not change your CKEditor configuration. + */ + +var CKBUILDER_CONFIG = { + skin: 'bootstrapck', + preset: 'basic', + ignore: [ + '.bender', + 'bender.js', + 'bender-err.log', + 'bender-out.log', + 'dev', + '.DS_Store', + '.editorconfig', + '.gitattributes', + '.gitignore', + 'gruntfile.js', + '.idea', + '.jscsrc', + '.jshintignore', + '.jshintrc', + 'less', + '.mailmap', + 'node_modules', + 'package.json', + 'README.md', + 'tests' + ], + plugins : { + 'a11yhelp' : 1, + 'autogrow' : 1, + 'basicstyles' : 1, + 'clipboard' : 1, + 'colorbutton' : 1, + 'colordialog' : 1, + 'elementspath' : 1, + 'enterkey' : 1, + 'entities' : 1, + 'floatingspace' : 1, + 'font' : 1, + 'format' : 1, + 'horizontalrule' : 1, + 'htmlwriter' : 1, + 'indentlist' : 1, + 'justify' : 1, + 'link' : 1, + 'list' : 1, + 'magicline' : 1, + 'maximize' : 1, + 'menubutton' : 1, + 'pastefromword' : 1, + 'pastetext' : 1, + 'removeformat' : 1, + 'resize' : 1, + 'specialchar' : 1, + 'stylescombo' : 1, + 'tabletools' : 1, + 'toolbar' : 1, + 'undo' : 1, + 'wysiwygarea' : 1 + }, + languages : { + 'af' : 1, + 'ar' : 1, + 'bg' : 1, + 'bn' : 1, + 'bs' : 1, + 'ca' : 1, + 'cs' : 1, + 'cy' : 1, + 'da' : 1, + 'de' : 1, + 'el' : 1, + 'en' : 1, + 'en-au' : 1, + 'en-ca' : 1, + 'en-gb' : 1, + 'eo' : 1, + 'es' : 1, + 'et' : 1, + 'eu' : 1, + 'fa' : 1, + 'fi' : 1, + 'fo' : 1, + 'fr' : 1, + 'fr-ca' : 1, + 'gl' : 1, + 'gu' : 1, + 'he' : 1, + 'hi' : 1, + 'hr' : 1, + 'hu' : 1, + 'id' : 1, + 'is' : 1, + 'it' : 1, + 'ja' : 1, + 'ka' : 1, + 'km' : 1, + 'ko' : 1, + 'ku' : 1, + 'lt' : 1, + 'lv' : 1, + 'mk' : 1, + 'mn' : 1, + 'ms' : 1, + 'nb' : 1, + 'nl' : 1, + 'no' : 1, + 'pl' : 1, + 'pt' : 1, + 'pt-br' : 1, + 'ro' : 1, + 'ru' : 1, + 'si' : 1, + 'sk' : 1, + 'sl' : 1, + 'sq' : 1, + 'sr' : 1, + 'sr-latn' : 1, + 'sv' : 1, + 'th' : 1, + 'tr' : 1, + 'tt' : 1, + 'ug' : 1, + 'uk' : 1, + 'vi' : 1, + 'zh' : 1, + 'zh-cn' : 1 + } +}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/ckeditor.js b/html/moodle2/mod/hvp/editor/ckeditor/ckeditor.js new file mode 100755 index 0000000000..abf26e2c3d --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/ckeditor.js @@ -0,0 +1,946 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,d={timestamp:"F7J9",version:"4.5.3",revision:"6c70c82",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var b=window.CKEDITOR_BASEPATH||"";if(!b)for(var c=document.getElementsByTagName("script"),d=0;d<c.length;d++){var i=c[d].src.match(a);if(i){b=i[1];break}}-1==b.indexOf(":/")&&"//"!=b.slice(0,2)&&(b=0===b.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+ +b:location.href.match(/^[^\?]*\/(?:)/)[0]+b);if(!b)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return b}(),getUrl:function(a){-1==a.indexOf(":/")&&0!==a.indexOf("/")&&(a=this.basePath+a);this.timestamp&&("/"!=a.charAt(a.length-1)&&!/[&?]t=/.test(a))&&(a+=(0<=a.indexOf("?")?"&":"?")+"t="+this.timestamp);return a},domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded", +a,!1),b()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),b())}catch(c){}}function b(){for(var a;a=c.shift();)a()}var c=[];return function(b){function d(){try{document.documentElement.doScroll("left")}catch(g){setTimeout(d,1);return}a()}c.push(b);"complete"===document.readyState&&setTimeout(a,1);if(1==c.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange", +a);window.attachEvent("onload",a);b=!1;try{b=!window.frameElement}catch(n){}document.documentElement.doScroll&&b&&d()}}}()},b=window.CKEDITOR_GETURL;if(b){var c=d.getUrl;d.getUrl=function(a){return b.call(d,a)||c.call(d,a)}}return d}()); +CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(a){var d=CKEDITOR.event.prototype,b;for(b in d)a[b]==null&&(a[b]=d[b])},CKEDITOR.event.prototype=function(){function a(a){var e=d(this);return e[a]||(e[a]=new b(a))}var d=function(a){a=a.getPrivate&&a.getPrivate()||a._||(a._={});return a.events||(a.events={})},b=function(a){this.name=a;this.listeners=[]};b.prototype={getListenerIndex:function(a){for(var b=0,d=this.listeners;b<d.length;b++)if(d[b].fn==a)return b;return-1}}; +return{define:function(b,d){var f=a.call(this,b);CKEDITOR.tools.extend(f,d,true)},on:function(b,d,f,h,i){function j(a,g,A,i){a={name:b,sender:this,editor:a,data:g,listenerData:h,stop:A,cancel:i,removeListener:n};return d.call(f,a)===false?false:a.data}function n(){A.removeListener(b,d)}var g=a.call(this,b);if(g.getListenerIndex(d)<0){g=g.listeners;f||(f=this);isNaN(i)&&(i=10);var A=this;j.fn=d;j.priority=i;for(var r=g.length-1;r>=0;r--)if(g[r].priority<=i){g.splice(r+1,0,j);return{removeListener:n}}g.unshift(j)}return{removeListener:n}}, +once:function(){var a=Array.prototype.slice.call(arguments),b=a[1];a[1]=function(a){a.removeListener();return b.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,b=function(){a=1},f=0,h=function(){f=1};return function(i,j,n){var g=d(this)[i],i=a,A=f;a=f=0;if(g){var r=g.listeners;if(r.length)for(var r=r.slice(0),y,o=0;o<r.length;o++){if(g.errorProof)try{y= +r[o].call(this,n,j,b,h)}catch(q){}else y=r[o].call(this,n,j,b,h);y===false?f=1:typeof y!="undefined"&&(j=y);if(a||f)break}}j=f?false:typeof j=="undefined"?true:j;a=i;f=A;return j}}(),fireOnce:function(a,b,f){b=this.fire(a,b,f);delete d(this)[a];return b},removeListener:function(a,b){var f=d(this)[a];if(f){var h=f.getListenerIndex(b);h>=0&&f.listeners.splice(h,1)}},removeAllListeners:function(){var a=d(this),b;for(b in a)delete a[b]},hasListeners:function(a){return(a=d(this)[a])&&a.listeners.length> +0}}}());CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(a,d){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fire.call(this,a,d,this)},CKEDITOR.editor.prototype.fireOnce=function(a,d){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fireOnce.call(this,a,d,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)); +CKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),d=a.match(/edge[ \/](\d+.?\d*)/),b=a.indexOf("trident/")>-1,b=!(!d&&!b),b={ie:b,edge:!!d,webkit:!b&&a.indexOf(" applewebkit/")>-1,air:a.indexOf(" adobeair/")>-1,mac:a.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat"&&(!document.documentMode||document.documentMode<10),mobile:a.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return false;var a=document.domain,b= +window.location.hostname;return a!=b&&a!="["+b+"]"},secure:location.protocol=="https:"};b.gecko=navigator.product=="Gecko"&&!b.webkit&&!b.ie;if(b.webkit)a.indexOf("chrome")>-1?b.chrome=true:b.safari=true;var c=0;if(b.ie){c=d?parseFloat(d[1]):b.quirks||!document.documentMode?parseFloat(a.match(/msie (\d+)/)[1]):document.documentMode;b.ie9Compat=c==9;b.ie8Compat=c==8;b.ie7Compat=c==7;b.ie6Compat=c<7||b.quirks}if(b.gecko)if(d=a.match(/rv:([\d\.]+)/)){d=d[1].split(".");c=d[0]*1E4+(d[1]||0)*100+(d[2]|| +0)*1}b.air&&(c=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));b.webkit&&(c=parseFloat(a.match(/ applewebkit\/(\d+)/)[1]));b.version=c;b.isCompatible=!(b.ie&&c<7)&&!(b.gecko&&c<4E4)&&!(b.webkit&&c<534);b.hidpi=window.devicePixelRatio>=2;b.needsBrFiller=b.gecko||b.webkit||b.ie&&c>10;b.needsNbspFiller=b.ie&&c<11;b.cssClass="cke_browser_"+(b.ie?"ie":b.gecko?"gecko":b.webkit?"webkit":"unknown");if(b.quirks)b.cssClass=b.cssClass+" cke_browser_quirks";if(b.ie)b.cssClass=b.cssClass+(" cke_browser_ie"+(b.quirks? +"6 cke_browser_iequirks":b.version));if(b.air)b.cssClass=b.cssClass+" cke_browser_air";if(b.iOS)b.cssClass=b.cssClass+" cke_browser_ios";if(b.hidpi)b.cssClass=b.cssClass+" cke_hidpi";return b}()); +"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if(CKEDITOR.status!="basic_ready")CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var a=document.createElement("script");a.type="text/javascript";a.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(a)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(a){(this._.pending||(this._.pending=[])).push(a)};(function(){CKEDITOR.domReady(function(){var a= +CKEDITOR.loadFullCore,d=CKEDITOR.loadFullCoreTimeout;if(a){CKEDITOR.status="basic_ready";a&&a._load?a():d&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},d*1E3)}})})();CKEDITOR.status="basic_loaded"}();CKEDITOR.dom={}; +(function(){var a=[],d=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",b=/&/g,c=/>/g,e=/</g,f=/"/g,h=/&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g,i={lt:"<",gt:">",amp:"&",quot:'"',nbsp:" ",shy:"­"},j=function(a,g){return g[0]=="#"?String.fromCharCode(parseInt(g.slice(1),10)):i[g]};CKEDITOR.on("reset",function(){a=[]});CKEDITOR.tools={arrayCompare:function(a,g){if(!a&&!g)return true;if(!a||!g||a.length!=g.length)return false;for(var b=0;b<a.length;b++)if(a[b]!=g[b])return false; +return true},getIndex:function(a,g){for(var b=0;b<a.length;++b)if(g(a[b]))return b;return-1},clone:function(a){var g;if(a&&a instanceof Array){g=[];for(var b=0;b<a.length;b++)g[b]=CKEDITOR.tools.clone(a[b]);return g}if(a===null||typeof a!="object"||a instanceof String||a instanceof Number||a instanceof Boolean||a instanceof Date||a instanceof RegExp||a.nodeType||a.window===a)return a;g=new a.constructor;for(b in a)g[b]=CKEDITOR.tools.clone(a[b]);return g},capitalize:function(a,g){return a.charAt(0).toUpperCase()+ +(g?a.slice(1):a.slice(1).toLowerCase())},extend:function(a){var g=arguments.length,b,c;if(typeof(b=arguments[g-1])=="boolean")g--;else if(typeof(b=arguments[g-2])=="boolean"){c=arguments[g-1];g=g-2}for(var i=1;i<g;i++){var o=arguments[i],d;for(d in o)if(b===true||a[d]==null)if(!c||d in c)a[d]=o[d]}return a},prototypedCopy:function(a){var g=function(){};g.prototype=a;return new g},copy:function(a){var g={},b;for(b in a)g[b]=a[b];return g},isArray:function(a){return Object.prototype.toString.call(a)== +"[object Array]"},isEmpty:function(a){for(var g in a)if(a.hasOwnProperty(g))return false;return true},cssVendorPrefix:function(a,g,b){if(b)return d+a+":"+g+";"+a+":"+g;b={};b[a]=g;b[d+a]=g;return b},cssStyleToDomStyle:function(){var a=document.createElement("div").style,g=typeof a.cssFloat!="undefined"?"cssFloat":typeof a.styleFloat!="undefined"?"styleFloat":"float";return function(a){return a=="float"?g:a.replace(/-./g,function(a){return a.substr(1).toUpperCase()})}}(),buildStyleHtml:function(a){for(var a= +[].concat(a),g,b=[],c=0;c<a.length;c++)if(g=a[c])/@import|[{}]/.test(g)?b.push("<style>"+g+"</style>"):b.push('<link type="text/css" rel=stylesheet href="'+g+'">');return b.join("")},htmlEncode:function(a){return a===void 0||a===null?"":(""+a).replace(b,"&amp;").replace(c,"&gt;").replace(e,"&lt;")},htmlDecode:function(a){return a.replace(h,j)},htmlEncodeAttr:function(a){return CKEDITOR.tools.htmlEncode(a).replace(f,"&quot;")},htmlDecodeAttr:function(a){return CKEDITOR.tools.htmlDecode(a)},transformPlainTextToHtml:function(a, +g){var b=g==CKEDITOR.ENTER_BR,c=this.htmlEncode(a.replace(/\r\n/g,"\n")),c=c.replace(/\t/g,"&nbsp;&nbsp; &nbsp;"),i=g==CKEDITOR.ENTER_P?"p":"div";if(!b){var o=/\n{2}/g;if(o.test(c))var d="<"+i+">",j="</"+i+">",c=d+c.replace(o,function(){return j+d})+j}c=c.replace(/\n/g,"<br>");b||(c=c.replace(RegExp("<br>(?=</"+i+">)"),function(a){return CKEDITOR.tools.repeat(a,2)}));c=c.replace(/^ | $/g,"&nbsp;");return c=c.replace(/(>|\s) /g,function(a,g){return g+"&nbsp;"}).replace(/ (?=<)/g,"&nbsp;")},getNextNumber:function(){var a= +0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var a="e",g=0;g<8;g++)a=a+Math.floor((1+Math.random())*65536).toString(16).substring(1);return a},override:function(a,g){var b=g(a);b.prototype=a.prototype;return b},setTimeout:function(a,g,b,c,i){i||(i=window);b||(b=i);return i.setTimeout(function(){c?a.apply(b,[].concat(c)):a.apply(b)},g||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(g){return g.replace(a, +"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(g){return g.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(g){return g.replace(a,"")}}(),indexOf:function(a,g){if(typeof g=="function")for(var b=0,c=a.length;b<c;b++){if(g(a[b]))return b}else{if(a.indexOf)return a.indexOf(g);b=0;for(c=a.length;b<c;b++)if(a[b]===g)return b}return-1},search:function(a,b){var c=CKEDITOR.tools.indexOf(a,b);return c>=0?a[c]:null},bind:function(a,b){return function(){return a.apply(b, +arguments)}},createClass:function(a){var b=a.$,c=a.base,i=a.privates||a._,d=a.proto,a=a.statics;!b&&(b=function(){c&&this.base.apply(this,arguments)});if(i)var o=b,b=function(){var a=this._||(this._={}),b;for(b in i){var g=i[b];a[b]=typeof g=="function"?CKEDITOR.tools.bind(g,this):g}o.apply(this,arguments)};if(c){b.prototype=this.prototypedCopy(c.prototype);b.prototype.constructor=b;b.base=c;b.baseProto=c.prototype;b.prototype.base=function(){this.base=c.prototype.base;c.apply(this,arguments);this.base= +arguments.callee}}d&&this.extend(b.prototype,d,true);a&&this.extend(b,a,true);return b},addFunction:function(b,g){return a.push(function(){return b.apply(g||this,arguments)})-1},removeFunction:function(b){a[b]=null},callFunction:function(b){var g=a[b];return g&&g.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a=/^-?\d+\.?\d*px$/,b;return function(c){b=CKEDITOR.tools.trim(c+"")+"px";return a.test(b)?b:c||""}}(),convertToPx:function(){var a;return function(b){if(!a){a= +CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(a)}if(!/%$/.test(b)){a.setStyle("width",b);return a.$.clientWidth}return b}}(),repeat:function(a,b){return Array(b+1).join(a)},tryThese:function(){for(var a,b=0,c=arguments.length;b<c;b++){var i=arguments[b];try{a=i();break}catch(d){}}return a},genKey:function(){return Array.prototype.slice.call(arguments).join("-")}, +defer:function(a){return function(){var b=arguments,c=this;window.setTimeout(function(){a.apply(c,b)},0)}},normalizeCssText:function(a,b){var c=[],i,d=CKEDITOR.tools.parseCssText(a,true,b);for(i in d)c.push(i+":"+d[i]);c.sort();return c.length?c.join(";")+";":""},convertRgbToHex:function(a){return a.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi,function(a,b,c,i){a=[b,c,i];for(b=0;b<3;b++)a[b]=("0"+parseInt(a[b],10).toString(16)).slice(-2);return"#"+a.join("")})},parseCssText:function(a, +b,c){var i={};if(c){c=new CKEDITOR.dom.element("span");c.setAttribute("style",a);a=CKEDITOR.tools.convertRgbToHex(c.getAttribute("style")||"")}if(!a||a==";")return i;a.replace(/&quot;/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,c,d){if(b){c=c.toLowerCase();c=="font-family"&&(d=d.toLowerCase().replace(/["']/g,"").replace(/\s*,\s*/g,","));d=CKEDITOR.tools.trim(d)}i[c]=d});return i},writeCssText:function(a,b){var c,i=[];for(c in a)i.push(c+":"+a[c]);b&&i.sort();return i.join("; ")}, +objectCompare:function(a,b,c){var i;if(!a&&!b)return true;if(!a||!b)return false;for(i in a)if(a[i]!=b[i])return false;if(!c)for(i in b)if(a[i]!=b[i])return false;return true},objectKeys:function(a){var b=[],c;for(c in a)b.push(c);return b},convertArrayToObject:function(a,b){var c={};arguments.length==1&&(b=true);for(var i=0,d=a.length;i<d;++i)c[a[i]]=b;return c},fixDomain:function(){for(var a;;)try{a=window.parent.document.domain;break}catch(b){a=a?a.replace(/.+?(?:\.|$)/,""):document.domain;if(!a)break; +document.domain=a}return!!a},eventsBuffer:function(a,b,c){function i(){o=(new Date).getTime();d=false;c?b.call(c):b()}var d,o=0;return{input:function(){if(!d){var b=(new Date).getTime()-o;b<a?d=setTimeout(i,a-b):i()}},reset:function(){d&&clearTimeout(d);d=o=0}}},enableHtml5Elements:function(a,b){for(var c=["abbr","article","aside","audio","bdi","canvas","data","datalist","details","figcaption","figure","footer","header","hgroup","main","mark","meter","nav","output","progress","section","summary", +"time","video"],i=c.length,d;i--;){d=a.createElement(c[i]);b&&a.appendChild(d)}},checkIfAnyArrayItemMatches:function(a,b){for(var c=0,i=a.length;c<i;++c)if(a[c].match(b))return true;return false},checkIfAnyObjectPropertyMatches:function(a,b){for(var c in a)if(c.match(b))return true;return false},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="}})(); +CKEDITOR.dtd=function(){var a=CKEDITOR.tools.extend,d=function(a,b){for(var c=CKEDITOR.tools.clone(a),i=1;i<arguments.length;i++){var b=arguments[i],d;for(d in b)delete c[d]}return c},b={},c={},e={address:1,article:1,aside:1,blockquote:1,details:1,div:1,dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,main:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1},f={command:1,link:1,meta:1,noscript:1,script:1,style:1},h={},i={"#":1},j={center:1,dir:1,noframes:1}; +a(b,{a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1,q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,"var":1,video:1,wbr:1},i,{acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});a(c,e,b,j);d={a:d(b,{a:1,button:1}),abbr:b,address:c, +area:h,article:c,aside:c,audio:a({source:1,track:1},c),b:b,base:h,bdi:b,bdo:b,blockquote:c,body:c,br:h,button:d(b,{a:1,button:1}),canvas:b,caption:c,cite:b,code:b,col:h,colgroup:{col:1},command:h,datalist:a({option:1},b),dd:c,del:b,details:a({summary:1},c),dfn:b,div:c,dl:{dt:1,dd:1},dt:c,em:b,embed:h,fieldset:a({legend:1},c),figcaption:c,figure:a({figcaption:1},c),footer:c,form:c,h1:b,h2:b,h3:b,h4:b,h5:b,h6:b,head:a({title:1,base:1},f),header:c,hgroup:{h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},hr:h,html:a({head:1, +body:1},c,f),i:b,iframe:i,img:h,input:h,ins:b,kbd:b,keygen:h,label:b,legend:b,li:c,link:h,main:c,map:c,mark:b,menu:a({li:1},c),meta:h,meter:d(b,{meter:1}),nav:c,noscript:a({link:1,meta:1,style:1},b),object:a({param:1},b),ol:{li:1},optgroup:{option:1},option:i,output:b,p:b,param:h,pre:b,progress:d(b,{progress:1}),q:b,rp:b,rt:b,ruby:a({rp:1,rt:1},b),s:b,samp:b,script:i,section:c,select:{optgroup:1,option:1},small:b,source:h,span:b,strong:b,style:i,sub:b,summary:b,sup:b,table:{caption:1,colgroup:1,thead:1, +tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:c,textarea:i,tfoot:{tr:1},th:c,thead:{tr:1},time:d(b,{time:1}),title:i,tr:{th:1,td:1},track:h,u:b,ul:{li:1},"var":b,video:a({source:1,track:1},c),wbr:h,acronym:b,applet:a({param:1},c),basefont:h,big:b,center:c,dialog:h,dir:{li:1},font:b,isindex:h,noframes:c,strike:b,tt:b};a(d,{$block:a({audio:1,dd:1,dt:1,figcaption:1,li:1,video:1},e,j),$blockLimit:{article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1,div:1,dl:1,fieldset:1,figcaption:1,figure:1,footer:1, +form:1,header:1,hgroup:1,main:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1},$cdata:{script:1,style:1},$editable:{address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,figcaption:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,main:1,nav:1,p:1,pre:1,section:1},$empty:{area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1},$inline:b,$list:{dl:1,ol:1, +ul:1},$listItem:{dd:1,dt:1,li:1},$nonBodyContent:a({body:1,head:1,html:1},d.head),$nonEditable:{applet:1,audio:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,param:1,script:1,textarea:1,video:1},$object:{applet:1,audio:1,button:1,hr:1,iframe:1,img:1,input:1,object:1,select:1,table:1,textarea:1,video:1},$removeEmpty:{abbr:1,acronym:1,b:1,bdi:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,mark:1,meter:1,output:1,q:1,ruby:1,s:1,samp:1,small:1,span:1,strike:1,strong:1, +sub:1,sup:1,time:1,tt:1,u:1,"var":1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},$transparent:{a:1,audio:1,canvas:1,del:1,ins:1,map:1,noscript:1,object:1,video:1},$intermediate:{caption:1,colgroup:1,dd:1,dt:1,figcaption:1,legend:1,li:1,optgroup:1,option:1,rp:1,rt:1,summary:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}});return d}();CKEDITOR.dom.event=function(a){this.$=a}; +CKEDITOR.dom.event.prototype={getKey:function(){return this.$.keyCode||this.$.which},getKeystroke:function(){var a=this.getKey();if(this.$.ctrlKey||this.$.metaKey)a=a+CKEDITOR.CTRL;this.$.shiftKey&&(a=a+CKEDITOR.SHIFT);this.$.altKey&&(a=a+CKEDITOR.ALT);return a},preventDefault:function(a){var d=this.$;d.preventDefault?d.preventDefault():d.returnValue=false;a&&this.stopPropagation()},stopPropagation:function(){var a=this.$;a.stopPropagation?a.stopPropagation():a.cancelBubble=true},getTarget:function(){var a= +this.$.target||this.$.srcElement;return a?new CKEDITOR.dom.node(a):null},getPhase:function(){return this.$.eventPhase||2},getPageOffset:function(){var a=this.getTarget().getDocument().$;return{x:this.$.pageX||this.$.clientX+(a.documentElement.scrollLeft||a.body.scrollLeft),y:this.$.pageY||this.$.clientY+(a.documentElement.scrollTop||a.body.scrollTop)}}};CKEDITOR.CTRL=1114112;CKEDITOR.SHIFT=2228224;CKEDITOR.ALT=4456448;CKEDITOR.EVENT_PHASE_CAPTURING=1;CKEDITOR.EVENT_PHASE_AT_TARGET=2; +CKEDITOR.EVENT_PHASE_BUBBLING=3;CKEDITOR.dom.domObject=function(a){if(a)this.$=a}; +CKEDITOR.dom.domObject.prototype=function(){var a=function(a,b){return function(c){typeof CKEDITOR!="undefined"&&a.fire(b,new CKEDITOR.dom.event(c))}};return{getPrivate:function(){var a;if(!(a=this.getCustomData("_")))this.setCustomData("_",a={});return a},on:function(d){var b=this.getCustomData("_cke_nativeListeners");if(!b){b={};this.setCustomData("_cke_nativeListeners",b)}if(!b[d]){b=b[d]=a(this,d);this.$.addEventListener?this.$.addEventListener(d,b,!!CKEDITOR.event.useCapture):this.$.attachEvent&& +this.$.attachEvent("on"+d,b)}return CKEDITOR.event.prototype.on.apply(this,arguments)},removeListener:function(a){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(a)){var b=this.getCustomData("_cke_nativeListeners"),c=b&&b[a];if(c){this.$.removeEventListener?this.$.removeEventListener(a,c,false):this.$.detachEvent&&this.$.detachEvent("on"+a,c);delete b[a]}}},removeAllListeners:function(){var a=this.getCustomData("_cke_nativeListeners"),b;for(b in a){var c=a[b];this.$.detachEvent? +this.$.detachEvent("on"+b,c):this.$.removeEventListener&&this.$.removeEventListener(b,c,false);delete a[b]}CKEDITOR.event.prototype.removeAllListeners.call(this)}}}(); +(function(a){var d={};CKEDITOR.on("reset",function(){d={}});a.equals=function(a){try{return a&&a.$===this.$}catch(c){return false}};a.setCustomData=function(a,c){var e=this.getUniqueId();(d[e]||(d[e]={}))[a]=c;return this};a.getCustomData=function(a){var c=this.$["data-cke-expando"];return(c=c&&d[c])&&a in c?c[a]:null};a.removeCustomData=function(a){var c=this.$["data-cke-expando"],c=c&&d[c],e,f;if(c){e=c[a];f=a in c;delete c[a]}return f?e:null};a.clearCustomData=function(){this.removeAllListeners(); +var a=this.$["data-cke-expando"];a&&delete d[a]};a.getUniqueId=function(){return this.$["data-cke-expando"]||(this.$["data-cke-expando"]=CKEDITOR.tools.getNextNumber())};CKEDITOR.event.implementOn(a)})(CKEDITOR.dom.domObject.prototype); +CKEDITOR.dom.node=function(a){return a?new CKEDITOR.dom[a.nodeType==CKEDITOR.NODE_DOCUMENT?"document":a.nodeType==CKEDITOR.NODE_ELEMENT?"element":a.nodeType==CKEDITOR.NODE_TEXT?"text":a.nodeType==CKEDITOR.NODE_COMMENT?"comment":a.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT?"documentFragment":"domObject"](a):this};CKEDITOR.dom.node.prototype=new CKEDITOR.dom.domObject;CKEDITOR.NODE_ELEMENT=1;CKEDITOR.NODE_DOCUMENT=9;CKEDITOR.NODE_TEXT=3;CKEDITOR.NODE_COMMENT=8;CKEDITOR.NODE_DOCUMENT_FRAGMENT=11; +CKEDITOR.POSITION_IDENTICAL=0;CKEDITOR.POSITION_DISCONNECTED=1;CKEDITOR.POSITION_FOLLOWING=2;CKEDITOR.POSITION_PRECEDING=4;CKEDITOR.POSITION_IS_CONTAINED=8;CKEDITOR.POSITION_CONTAINS=16; +CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype,{appendTo:function(a,d){a.append(this,d);return a},clone:function(a,d){function b(c){c["data-cke-expando"]&&(c["data-cke-expando"]=false);if(!(c.nodeType!=CKEDITOR.NODE_ELEMENT&&c.nodeType!=CKEDITOR.NODE_DOCUMENT_FRAGMENT)){!d&&c.nodeType==CKEDITOR.NODE_ELEMENT&&c.removeAttribute("id",false);if(a)for(var c=c.childNodes,e=0;e<c.length;e++)b(c[e])}}function c(b){if(!(b.type!=CKEDITOR.NODE_ELEMENT&&b.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT)){if(b.type!= +CKEDITOR.NODE_DOCUMENT_FRAGMENT){var d=b.getName();d[0]==":"&&b.renameNode(d.substring(1))}if(a)for(d=0;d<b.getChildCount();d++)c(b.getChild(d))}}var e=this.$.cloneNode(a);b(e);e=new CKEDITOR.dom.node(e);CKEDITOR.env.ie&&(CKEDITOR.env.version<9&&(this.type==CKEDITOR.NODE_ELEMENT||this.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT))&&c(e);return e},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(a){a.$.parentNode.insertBefore(this.$, +a.$.nextSibling);return a},insertBefore:function(a){a.$.parentNode.insertBefore(this.$,a.$);return a},insertBeforeMe:function(a){this.$.parentNode.insertBefore(a.$,this.$);return a},getAddress:function(a){for(var d=[],b=this.getDocument().$.documentElement,c=this.$;c&&c!=b;){var e=c.parentNode;e&&d.unshift(this.getIndex.call({$:c},a));c=e}return d},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(a){function d(a,b){var c= +b?a.nextSibling:a.previousSibling;return!c||c.nodeType!=CKEDITOR.NODE_TEXT?null:c.nodeValue?c:d(c,b)}var b=this.$,c=-1,e;if(!this.$.parentNode||a&&b.nodeType==CKEDITOR.NODE_TEXT&&!b.nodeValue&&!d(b)&&!d(b,true))return-1;do if(!a||!(b!=this.$&&b.nodeType==CKEDITOR.NODE_TEXT&&(e||!b.nodeValue))){c++;e=b.nodeType==CKEDITOR.NODE_TEXT}while(b=b.previousSibling);return c},getNextSourceNode:function(a,d,b){if(b&&!b.call)var c=b,b=function(a){return!a.equals(c)};var a=!a&&this.getFirst&&this.getFirst(),e; +if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getNext()}for(;!a&&(e=(e||this).getParent());){if(b&&b(e,true)===false)return null;a=e.getNext()}return!a||b&&b(a)===false?null:d&&d!=a.type?a.getNextSourceNode(false,d,b):a},getPreviousSourceNode:function(a,d,b){if(b&&!b.call)var c=b,b=function(a){return!a.equals(c)};var a=!a&&this.getLast&&this.getLast(),e;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getPrevious()}for(;!a&& +(e=(e||this).getParent());){if(b&&b(e,true)===false)return null;a=e.getPrevious()}return!a||b&&b(a)===false?null:d&&a.type!=d?a.getPreviousSourceNode(false,d,b):a},getPrevious:function(a){var d=this.$,b;do b=(d=d.previousSibling)&&d.nodeType!=10&&new CKEDITOR.dom.node(d);while(b&&a&&!a(b));return b},getNext:function(a){var d=this.$,b;do b=(d=d.nextSibling)&&new CKEDITOR.dom.node(d);while(b&&a&&!a(b));return b},getParent:function(a){var d=this.$.parentNode;return d&&(d.nodeType==CKEDITOR.NODE_ELEMENT|| +a&&d.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)?new CKEDITOR.dom.node(d):null},getParents:function(a){var d=this,b=[];do b[a?"push":"unshift"](d);while(d=d.getParent());return b},getCommonAncestor:function(a){if(a.equals(this))return this;if(a.contains&&a.contains(this))return a;var d=this.contains?this:this.getParent();do if(d.contains(a))return d;while(d=d.getParent());return null},getPosition:function(a){var d=this.$,b=a.$;if(d.compareDocumentPosition)return d.compareDocumentPosition(b);if(d== +b)return CKEDITOR.POSITION_IDENTICAL;if(this.type==CKEDITOR.NODE_ELEMENT&&a.type==CKEDITOR.NODE_ELEMENT){if(d.contains){if(d.contains(b))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(b.contains(d))return CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in d)return d.sourceIndex<0||b.sourceIndex<0?CKEDITOR.POSITION_DISCONNECTED:d.sourceIndex<b.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}for(var d=this.getAddress(),a=a.getAddress(), +b=Math.min(d.length,a.length),c=0;c<b;c++)if(d[c]!=a[c])return d[c]<a[c]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;return d.length<a.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING},getAscendant:function(a,d){var b=this.$,c,e;if(!d)b=b.parentNode;if(typeof a=="function"){e=true;c=a}else{e=false;c=function(b){b=typeof b.nodeName=="string"?b.nodeName.toLowerCase():"";return typeof a=="string"?b==a:b in a}}for(;b;){if(c(e? +new CKEDITOR.dom.node(b):b))return new CKEDITOR.dom.node(b);try{b=b.parentNode}catch(f){b=null}}return null},hasAscendant:function(a,d){var b=this.$;if(!d)b=b.parentNode;for(;b;){if(b.nodeName&&b.nodeName.toLowerCase()==a)return true;b=b.parentNode}return false},move:function(a,d){a.append(this.remove(),d)},remove:function(a){var d=this.$,b=d.parentNode;if(b){if(a)for(;a=d.firstChild;)b.insertBefore(d.removeChild(a),d);b.removeChild(d)}return this},replace:function(a){this.insertBefore(a);a.remove()}, +trim:function(){this.ltrim();this.rtrim()},ltrim:function(){for(var a;this.getFirst&&(a=this.getFirst());){if(a.type==CKEDITOR.NODE_TEXT){var d=CKEDITOR.tools.ltrim(a.getText()),b=a.getLength();if(d){if(d.length<b){a.split(b-d.length);this.$.removeChild(this.$.firstChild)}}else{a.remove();continue}}break}},rtrim:function(){for(var a;this.getLast&&(a=this.getLast());){if(a.type==CKEDITOR.NODE_TEXT){var d=CKEDITOR.tools.rtrim(a.getText()),b=a.getLength();if(d){if(d.length<b){a.split(d.length);this.$.lastChild.parentNode.removeChild(this.$.lastChild)}}else{a.remove(); +continue}}break}if(CKEDITOR.env.needsBrFiller)(a=this.$.lastChild)&&(a.type==1&&a.nodeName.toLowerCase()=="br")&&a.parentNode.removeChild(a)},isReadOnly:function(a){var d=this;this.type!=CKEDITOR.NODE_ELEMENT&&(d=this.getParent());CKEDITOR.env.edge&&(d&&d.is("textarea"))&&(a=true);if(!a&&d&&typeof d.$.isContentEditable!="undefined")return!(d.$.isContentEditable||d.data("cke-editable"));for(;d;){if(d.data("cke-editable"))return false;if(d.hasAttribute("contenteditable"))return d.getAttribute("contenteditable")== +"false";d=d.getParent()}return true}});CKEDITOR.dom.window=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.window.prototype=new CKEDITOR.dom.domObject; +CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.focus()},getViewPaneSize:function(){var a=this.$.document,d=a.compatMode=="CSS1Compat";return{width:(d?a.documentElement.clientWidth:a.body.clientWidth)||0,height:(d?a.documentElement.clientHeight:a.body.clientHeight)||0}},getScrollPosition:function(){var a=this.$;if("pageXOffset"in a)return{x:a.pageXOffset||0,y:a.pageYOffset||0};a=a.document;return{x:a.documentElement.scrollLeft||a.body.scrollLeft||0,y:a.documentElement.scrollTop|| +a.body.scrollTop||0}},getFrame:function(){var a=this.$.frameElement;return a?new CKEDITOR.dom.element.get(a):null}});CKEDITOR.dom.document=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.document.prototype=new CKEDITOR.dom.domObject; +CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype,{type:CKEDITOR.NODE_DOCUMENT,appendStyleSheet:function(a){if(this.$.createStyleSheet)this.$.createStyleSheet(a);else{var d=new CKEDITOR.dom.element("link");d.setAttributes({rel:"stylesheet",type:"text/css",href:a});this.getHead().append(d)}},appendStyleText:function(a){if(this.$.createStyleSheet){var d=this.$.createStyleSheet("");d.cssText=a}else{var b=new CKEDITOR.dom.element("style",this);b.append(new CKEDITOR.dom.text(a,this));this.getHead().append(b)}return d|| +b.$.sheet},createElement:function(a,d){var b=new CKEDITOR.dom.element(a,this);if(d){d.attributes&&b.setAttributes(d.attributes);d.styles&&b.setStyles(d.styles)}return b},createText:function(a){return new CKEDITOR.dom.text(a,this)},focus:function(){this.getWindow().focus()},getActive:function(){var a;try{a=this.$.activeElement}catch(d){return null}return new CKEDITOR.dom.element(a)},getById:function(a){return(a=this.$.getElementById(a))?new CKEDITOR.dom.element(a):null},getByAddress:function(a,d){for(var b= +this.$.documentElement,c=0;b&&c<a.length;c++){var e=a[c];if(d)for(var f=-1,h=0;h<b.childNodes.length;h++){var i=b.childNodes[h];if(!(d===true&&i.nodeType==3&&i.previousSibling&&i.previousSibling.nodeType==3)){f++;if(f==e){b=i;break}}}else b=b.childNodes[e]}return b?new CKEDITOR.dom.node(b):null},getElementsByTag:function(a,d){!(CKEDITOR.env.ie&&document.documentMode<=8)&&d&&(a=d+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0]; +return a=a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),true)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*<!DOCTYPE[^>]*?>)|^/i,'$&\n<script data-cke-temp="1">('+ +CKEDITOR.tools.fixDomain+")();<\/script>"));this.$.write(a);this.$.close()},find:function(a){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a))},findOne:function(a){return(a=this.$.querySelector(a))?new CKEDITOR.dom.element(a):null},_getHtml5ShivFrag:function(){var a=this.getCustomData("html5ShivFrag");if(!a){a=this.$.createDocumentFragment();CKEDITOR.tools.enableHtml5Elements(a,true);this.setCustomData("html5ShivFrag",a)}return a}});CKEDITOR.dom.nodeList=function(a){this.$=a}; +CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){if(a<0||a>=this.$.length)return null;return(a=this.$[a])?new CKEDITOR.dom.node(a):null}};CKEDITOR.dom.element=function(a,d){typeof a=="string"&&(a=(d?d.$:document).createElement(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.element.get=function(a){return(a=typeof a=="string"?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))}; +CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;CKEDITOR.dom.element.createFromHtml=function(a,d){var b=new CKEDITOR.dom.element("div",d);b.setHtml(a);return b.getFirst().remove()}; +CKEDITOR.dom.element.setMarker=function(a,d,b,c){var e=d.getCustomData("list_marker_id")||d.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),f=d.getCustomData("list_marker_names")||d.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[e]=d;f[b]=1;return d.setCustomData(b,c)};CKEDITOR.dom.element.clearAllMarkers=function(a){for(var d in a)CKEDITOR.dom.element.clearMarkers(a,a[d],1)}; +CKEDITOR.dom.element.clearMarkers=function(a,d,b){var c=d.getCustomData("list_marker_names"),e=d.getCustomData("list_marker_id"),f;for(f in c)d.removeCustomData(f);d.removeCustomData("list_marker_names");if(b){d.removeCustomData("list_marker_id");delete a[e]}}; +(function(){function a(a,b){return(" "+a+" ").replace(f," ").indexOf(" "+b+" ")>-1}function d(a){var b=true;if(!a.$.id){a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber();b=false}return function(){b||a.removeAttribute("id")}}function b(a,b){return"#"+a.$.id+" "+b.split(/,\s*/).join(", #"+a.$.id+" ")}function c(a){for(var b=0,c=0,g=h[a].length;c<g;c++)b=b+(parseInt(this.getComputedStyle(h[a][c])||0,10)||0);return b}var e=!!document.createElement("span").classList,f=/[\n\t\r]/g;CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype, +{type:CKEDITOR.NODE_ELEMENT,addClass:e?function(a){this.$.classList.add(a);return this}:function(b){var c=this.$.className;c&&(a(c,b)||(c=c+(" "+b)));this.$.className=c||b;return this},removeClass:e?function(a){var b=this.$;b.classList.remove(a);b.className||b.removeAttribute("class");return this}:function(b){var c=this.getAttribute("class");if(c&&a(c,b))(c=c.replace(RegExp("(?:^|\\s+)"+b+"(?=\\s|$)"),"").replace(/^\s+/,""))?this.setAttribute("class",c):this.removeAttribute("class");return this}, +hasClass:function(b){return a(this.$.className,b)},append:function(a,b){typeof a=="string"&&(a=this.getDocument().createElement(a));b?this.$.insertBefore(a.$,this.$.firstChild):this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var b=new CKEDITOR.dom.element("div",this.getDocument());b.setHtml(a);b.moveChildren(this)}else this.setHtml(a)},appendText:function(a){this.$.text!=null&&CKEDITOR.env.ie&&CKEDITOR.env.version<9?this.$.text=this.$.text+a:this.append(new CKEDITOR.dom.text(a))}, +appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();if(!a||!a.is||!a.is("br")){a=this.getDocument().createElement("br");CKEDITOR.env.gecko&&a.setAttribute("type","_moz");this.append(a)}}},breakParent:function(a,b){var c=new CKEDITOR.dom.range(this.getDocument());c.setStartAfter(this);c.setEndAfter(a);var g=c.extractContents(false,b||false);c.insertNode(this.remove());g.insertAfterNode(this)}, +contains:!document.compareDocumentPosition?function(a){var b=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?b.contains(a.getParent().$):b!=a.$&&b.contains(a.$)}:function(a){return!!(this.$.compareDocumentPosition(a.$)&16)},focus:function(){function a(){try{this.$.focus()}catch(b){}}return function(b){b?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/, +"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(true));return a.innerHTML},getClientRect:function(){var a=CKEDITOR.tools.extend({},this.$.getBoundingClientRect());!a.width&&(a.width=a.right-a.left);!a.height&&(a.height=a.bottom-a.top);return a},setHtml:CKEDITOR.env.ie&&CKEDITOR.env.version<9?function(a){try{var b=this.$;if(this.getParent())return b.innerHTML=a;var c=this.getDocument()._getHtml5ShivFrag();c.appendChild(b);b.innerHTML=a;c.removeChild(b);return a}catch(g){this.$.innerHTML= +"";b=new CKEDITOR.dom.element("body",this.getDocument());b.$.innerHTML=a;for(b=b.getChildren();b.count();)this.append(b.getItem(0));return a}}:function(a){return this.$.innerHTML=a},setText:function(){var a=document.createElement("p");a.innerHTML="x";a=a.textContent;return function(b){this.$[a?"textContent":"innerText"]=b}}(),getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){switch(a){case "class":a= +"className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;case "tabindex":a=this.$.getAttribute(a,2);a!==0&&this.$.tabIndex===0&&(a=null);return a;case "checked":a=this.$.attributes.getNamedItem(a);return(a.specified?a.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[a];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"): +null}return this.$.getAttribute(a,2)}:a}(),getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getComputedStyle:document.defaultView&&document.defaultView.getComputedStyle?function(a){var b=this.getWindow().$.getComputedStyle(this.$,null);return b?b.getPropertyValue(a):""}:function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]},getDtd:function(){var a=CKEDITOR.dtd[this.getName()];this.getDtd=function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag, +getTabIndex:function(){var a=this.$.tabIndex;return a===0&&!CKEDITOR.dtd.$tabIndex[this.getName()]&&parseInt(this.getAttribute("tabindex"),10)!==0?-1:a},getText:function(){return this.$.textContent||this.$.innerText||""},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id||null},getNameAtt:function(){return this.$.name||null},getName:function(){var a=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&document.documentMode<=8){var b=this.$.scopeName;b!="HTML"&& +(a=b.toLowerCase()+":"+a)}this.getName=function(){return a};return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var b=this.$.firstChild;(b=b&&new CKEDITOR.dom.node(b))&&(a&&!a(b))&&(b=b.getNext(a));return b},getLast:function(a){var b=this.$.lastChild;(b=b&&new CKEDITOR.dom.node(b))&&(a&&!a(b))&&(b=b.getPrevious(a));return b},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},is:function(){var a=this.getName();if(typeof arguments[0]=="object")return!!arguments[0][a]; +for(var b=0;b<arguments.length;b++)if(arguments[b]==a)return true;return false},isEditable:function(a){var b=this.getName();if(this.isReadOnly()||this.getComputedStyle("display")=="none"||this.getComputedStyle("visibility")=="hidden"||CKEDITOR.dtd.$nonEditable[b]||CKEDITOR.dtd.$empty[b]||this.is("a")&&(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount())return false;if(a!==false){a=CKEDITOR.dtd[b]||CKEDITOR.dtd.span;return!(!a||!a["#"])}return true},isIdentical:function(a){var b= +this.clone(0,1),a=a.clone(0,1);b.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);a.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(b.$.isEqualNode){b.$.style.cssText=CKEDITOR.tools.normalizeCssText(b.$.style.cssText);a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText);return b.$.isEqualNode(a.$)}b=b.getOuterHtml();a=a.getOuterHtml();if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&this.is("a")){var c= +this.getParent();if(c.type==CKEDITOR.NODE_ELEMENT){c=c.clone();c.setHtml(b);b=c.getHtml();c.setHtml(a);a=c.getHtml()}}return b==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&this.getComputedStyle("visibility")!="hidden",b,c;if(a&&CKEDITOR.env.webkit){b=this.getWindow();if(!b.equals(CKEDITOR.document.getWindow())&&(c=b.$.frameElement))a=(new CKEDITOR.dom.element(c)).isVisible()}return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return false; +for(var a=this.getChildren(),b=0,c=a.count();b<c;b++){var g=a.getItem(b);if(!(g.type==CKEDITOR.NODE_ELEMENT&&g.data("cke-bookmark"))&&(g.type==CKEDITOR.NODE_ELEMENT&&!g.isEmptyInlineRemoveable()||g.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(g.getText())))return false}return true},hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(){for(var a=this.$.attributes,b=0;b<a.length;b++){var c=a[b];switch(c.nodeName){case "class":if(this.getAttribute("class"))return true; +case "data-cke-expando":continue;default:if(c.specified)return true}}return false}:function(){var a=this.$.attributes,b=a.length,c={"data-cke-expando":1,_moz_dirty:1};return b>0&&(b>2||!c[a[0].nodeName]||b==2&&!c[a[1].nodeName])},hasAttribute:function(){function a(b){var c=this.$.attributes.getNamedItem(b);if(this.getName()=="input")switch(b){case "class":return this.$.className.length>0;case "checked":return!!this.$.checked;case "value":b=this.getAttribute("type");return b=="checkbox"||b=="radio"? +this.$.value!="on":!!this.$.value}return!c?false:c.specified}return CKEDITOR.env.ie?CKEDITOR.env.version<8?function(b){return b=="name"?!!this.$.name:a.call(this,b)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,b){var c=this.$,a=a.$;if(c!=a){var g;if(b)for(;g=c.lastChild;)a.insertBefore(c.removeChild(g),a.firstChild);else for(;g=c.firstChild;)a.appendChild(c.removeChild(g))}},mergeSiblings:function(){function a(b, +c,g){if(c&&c.type==CKEDITOR.NODE_ELEMENT){for(var d=[];c.data("cke-bookmark")||c.isEmptyInlineRemoveable();){d.push(c);c=g?c.getNext():c.getPrevious();if(!c||c.type!=CKEDITOR.NODE_ELEMENT)return}if(b.isIdentical(c)){for(var i=g?b.getLast():b.getFirst();d.length;)d.shift().move(b,!g);c.moveChildren(b,!g);c.remove();i&&i.type==CKEDITOR.NODE_ELEMENT&&i.mergeSiblings()}}}return function(b){if(b===false||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a")){a(this,this.getNext(),true);a(this,this.getPrevious())}}}(), +show:function(){this.setStyles({display:"",visibility:""})},setAttribute:function(){var a=function(a,b){this.$.setAttribute(a,b);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(b,c){b=="class"?this.$.className=c:b=="style"?this.$.style.cssText=c:b=="tabindex"?this.$.tabIndex=c:b=="checked"?this.$.checked=c:b=="contenteditable"?a.call(this,"contentEditable",c):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(b,c){if(b== +"src"&&c.match(/^http:\/\//))try{a.apply(this,arguments)}catch(g){}else a.apply(this,arguments);return this}:a}(),setAttributes:function(a){for(var b in a)this.setAttribute(b,a[b]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){a=="class"?a="className":a=="tabindex"?a="tabIndex":a=="contenteditable"&&(a="contentEditable");this.$.removeAttribute(a)}: +a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var b=0;b<a.length;b++)this.removeAttribute(a[b]);else for(b in a)a.hasOwnProperty(b)&&this.removeAttribute(b)},removeStyle:function(a){var b=this.$.style;if(!b.removeProperty&&(a=="border"||a=="margin"||a=="padding")){var c=["top","left","right","bottom"],g;a=="border"&&(g=["color","style","width"]);for(var b=[],d=0;d<c.length;d++)if(g)for(var r=0;r<g.length;r++)b.push([a,c[d],g[r]].join("-"));else b.push([a,c[d]].join("-"));for(a= +0;a<b.length;a++)this.removeStyle(b[a])}else{b.removeProperty?b.removeProperty(a):b.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a));this.$.style.cssText||this.removeAttribute("style")}},setStyle:function(a,b){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=b;return this},setStyles:function(a){for(var b in a)this.setStyle(b,a[b]);return this},setOpacity:function(a){if(CKEDITOR.env.ie&&CKEDITOR.env.version<9){a=Math.round(a*100);this.setStyle("filter",a>=100?"":"progid:DXImageTransform.Microsoft.Alpha(opacity="+ +a+")")}else this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select","none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,b=this.getElementsByTag("*"),c=0,g=b.count();c<g;c++){a=b.getItem(c);a.setAttribute("unselectable","on")}}},getPositionedAncestor:function(){for(var a=this;a.getName()!="html";){if(a.getComputedStyle("position")!="static")return a;a=a.getParent()}return null},getDocumentPosition:function(a){var b=0, +c=0,g=this.getDocument(),d=g.getBody(),r=g.$.compatMode=="BackCompat";if(document.documentElement.getBoundingClientRect){var e=this.$.getBoundingClientRect(),o=g.$.documentElement,q=o.clientTop||d.$.clientTop||0,f=o.clientLeft||d.$.clientLeft||0,h=true;if(CKEDITOR.env.ie){h=g.getDocumentElement().contains(this);g=g.getBody().contains(this);h=r&&g||!r&&h}if(h){if(CKEDITOR.env.webkit||CKEDITOR.env.ie&&CKEDITOR.env.version>=12){b=d.$.scrollLeft||o.scrollLeft;c=d.$.scrollTop||o.scrollTop}else{c=r?d.$: +o;b=c.scrollLeft;c=c.scrollTop}b=e.left+b-f;c=e.top+c-q}}else{q=this;for(f=null;q&&!(q.getName()=="body"||q.getName()=="html");){b=b+(q.$.offsetLeft-q.$.scrollLeft);c=c+(q.$.offsetTop-q.$.scrollTop);if(!q.equals(this)){b=b+(q.$.clientLeft||0);c=c+(q.$.clientTop||0)}for(;f&&!f.equals(q);){b=b-f.$.scrollLeft;c=c-f.$.scrollTop;f=f.getParent()}f=q;q=(e=q.$.offsetParent)?new CKEDITOR.dom.element(e):null}}if(a){e=this.getWindow();q=a.getWindow();if(!e.equals(q)&&e.$.frameElement){a=(new CKEDITOR.dom.element(e.$.frameElement)).getDocumentPosition(a); +b=b+a.x;c=c+a.y}}if(!document.documentElement.getBoundingClientRect&&CKEDITOR.env.gecko&&!r){b=b+(this.$.clientLeft?1:0);c=c+(this.$.clientTop?1:0)}return{x:b,y:c}},scrollIntoView:function(a){var b=this.getParent();if(b){do{(b.$.clientWidth&&b.$.clientWidth<b.$.scrollWidth||b.$.clientHeight&&b.$.clientHeight<b.$.scrollHeight)&&!b.is("body")&&this.scrollIntoParent(b,a,1);if(b.is("html")){var c=b.getWindow();try{var g=c.$.frameElement;g&&(b=new CKEDITOR.dom.element(g))}catch(d){}}}while(b=b.getParent()) +}},scrollIntoParent:function(a,b,c){var g,d,e,f;function o(b,c){if(/body|html/.test(a.getName()))a.getWindow().$.scrollBy(b,c);else{a.$.scrollLeft=a.$.scrollLeft+b;a.$.scrollTop=a.$.scrollTop+c}}function q(a,b){var c={x:0,y:0};if(!a.is(w?"body":"html")){var g=a.$.getBoundingClientRect();c.x=g.left;c.y=g.top}g=a.getWindow();if(!g.equals(b)){g=q(CKEDITOR.dom.element.get(g.$.frameElement),b);c.x=c.x+g.x;c.y=c.y+g.y}return c}function h(a,b){return parseInt(a.getComputedStyle("margin-"+b)||0,10)||0}!a&& +(a=this.getWindow());e=a.getDocument();var w=e.$.compatMode=="BackCompat";a instanceof CKEDITOR.dom.window&&(a=w?e.getBody():e.getDocumentElement());e=a.getWindow();d=q(this,e);var v=q(a,e),B=this.$.offsetHeight;g=this.$.offsetWidth;var l=a.$.clientHeight,s=a.$.clientWidth;e=d.x-h(this,"left")-v.x||0;f=d.y-h(this,"top")-v.y||0;g=d.x+g+h(this,"right")-(v.x+s)||0;d=d.y+B+h(this,"bottom")-(v.y+l)||0;if(f<0||d>0)o(0,b===true?f:b===false?d:f<0?f:d);if(c&&(e<0||g>0))o(e<0?e:g,0)},setState:function(a,b, +c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+"_off");this.removeClass(b+"_disabled");c&&this.setAttribute("aria-pressed",true);c&&this.removeAttribute("aria-disabled");break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");c&&this.setAttribute("aria-disabled",true);c&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+"_off");this.removeClass(b+"_on");this.removeClass(b+ +"_disabled");c&&this.removeAttribute("aria-pressed");c&&this.removeAttribute("aria-disabled")}},getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)},copyAttributes:function(a,b){for(var c=this.$.attributes,b=b||{},g=0;g<c.length;g++){var d=c[g],e=d.nodeName.toLowerCase(),f;if(!(e in b))if(e=="checked"&&(f=this.getAttribute(e)))a.setAttribute(e,f);else if(!CKEDITOR.env.ie||this.hasAttribute(e)){f=this.getAttribute(e); +if(f===null)f=d.nodeValue;a.setAttribute(e,f)}}if(this.$.style.cssText!=="")a.$.style.cssText=this.$.style.cssText},renameNode:function(a){if(this.getName()!=a){var b=this.getDocument(),a=new CKEDITOR.dom.element(a,b);this.copyAttributes(a);this.moveChildren(a);this.getParent(true)&&this.$.parentNode.replaceChild(a.$,this.$);a.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=a.$;delete this.getName}},getChild:function(){function a(b,c){var g=b.childNodes;if(c>=0&&c<g.length)return g[c]}return function(b){var c= +this.$;if(b.slice)for(b=b.slice();b.length>0&&c;)c=a(c,b.shift());else c=a(c,b);return c?new CKEDITOR.dom.node(c):null}}(),getChildCount:function(){return this.$.childNodes.length},disableContextMenu:function(){this.on("contextmenu",function(a){a.data.getTarget().hasClass("cke_enable_context_menu")||a.data.preventDefault()})},getDirection:function(a){return a?this.getComputedStyle("direction")||this.getDirection()||this.getParent()&&this.getParent().getDirection(1)||this.getDocument().$.dir||"ltr": +this.getStyle("direction")||this.getAttribute("dir")},data:function(a,b){a="data-"+a;if(b===void 0)return this.getAttribute(a);b===false?this.removeAttribute(a):this.setAttribute(a,b);return null},getEditor:function(){var a=CKEDITOR.instances,b,c;for(b in a){c=a[b];if(c.element.equals(this)&&c.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO)return c}return null},find:function(a){var c=d(this),a=new CKEDITOR.dom.nodeList(this.$.querySelectorAll(b(this,a)));c();return a},findOne:function(a){var c=d(this), +a=this.$.querySelector(b(this,a));c();return a?new CKEDITOR.dom.element(a):null},forEach:function(a,b,c){if(!c&&(!b||this.type==b))var g=a(this);if(g!==false)for(var c=this.getChildren(),d=0;d<c.count();d++){g=c.getItem(d);g.type==CKEDITOR.NODE_ELEMENT?g.forEach(a,b):(!b||g.type==b)&&a(g)}}});var h={width:["border-left-width","border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]};CKEDITOR.dom.element.prototype.setSize= +function(a,b,d){if(typeof b=="number"){if(d&&(!CKEDITOR.env.ie||!CKEDITOR.env.quirks))b=b-c.call(this,a);this.setStyle(a,b+"px")}};CKEDITOR.dom.element.prototype.getSize=function(a,b){var d=Math.max(this.$["offset"+CKEDITOR.tools.capitalize(a)],this.$["client"+CKEDITOR.tools.capitalize(a)])||0;b&&(d=d-c.call(this,a));return d}})();CKEDITOR.dom.documentFragment=function(a){a=a||CKEDITOR.document;this.$=a.type==CKEDITOR.NODE_DOCUMENT?a.$.createDocumentFragment():a}; +CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,insertAfterNode:function(a){a=a.$;a.parentNode.insertBefore(this.$,a.nextSibling)},getHtml:function(){var a=new CKEDITOR.dom.element("div");this.clone(1,1).appendTo(a);return a.getHtml().replace(/\s*data-cke-expando=".*?"/g,"")}},!0,{append:1,appendBogus:1,clone:1,getFirst:1,getHtml:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1, +insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1}); +(function(){function a(a,b){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed){this.end();return null}c.optimize()}var g,d=c.startContainer;g=c.endContainer;var e=c.startOffset,f=c.endOffset,h,i=this.guard,l=this.type,s=a?"getPreviousSourceNode":"getNextSourceNode";if(!a&&!this._.guardLTR){var k=g.type==CKEDITOR.NODE_ELEMENT?g:g.getParent(),m=g.type==CKEDITOR.NODE_ELEMENT?g.getChild(f):g.getNext();this._.guardLTR=function(a,b){return(!b||!k.equals(a))&&(!m|| +!a.equals(m))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}if(a&&!this._.guardRTL){var F=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),p=d.type==CKEDITOR.NODE_ELEMENT?e?d.getChild(e-1):null:d.getPrevious();this._.guardRTL=function(a,b){return(!b||!F.equals(a))&&(!p||!a.equals(p))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}var I=a?this._.guardRTL:this._.guardLTR;h=i?function(a,b){return I(a,b)===false?false:i(a,b)}:I;if(this.current)g=this.current[s](false,l,h);else{if(a)g.type== +CKEDITOR.NODE_ELEMENT&&(g=f>0?g.getChild(f-1):h(g,true)===false?null:g.getPreviousSourceNode(true,l,h));else{g=d;if(g.type==CKEDITOR.NODE_ELEMENT&&!(g=g.getChild(e)))g=h(d,true)===false?null:d.getNextSourceNode(true,l,h)}g&&h(g)===false&&(g=null)}for(;g&&!this._.end;){this.current=g;if(!this.evaluator||this.evaluator(g)!==false){if(!b)return g}else if(b&&this.evaluator)return false;g=g[s](false,l,h)}this.end();return this.current=null}function d(b){for(var c,g=null;c=a.call(this,b);)g=c;return g} +CKEDITOR.dom.walker=CKEDITOR.tools.createClass({$:function(a){this.range=a;this._={}},proto:{end:function(){this._.end=1},next:function(){return a.call(this)},previous:function(){return a.call(this,1)},checkForward:function(){return a.call(this,0,1)!==false},checkBackward:function(){return a.call(this,1,1)!==false},lastForward:function(){return d.call(this)},lastBackward:function(){return d.call(this,1)},reset:function(){delete this.current;this._={}}}});var b={block:1,"list-item":1,table:1,"table-row-group":1, +"table-header-group":1,"table-footer-group":1,"table-row":1,"table-column-group":1,"table-column":1,"table-cell":1,"table-caption":1},c={absolute:1,fixed:1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(a){return this.getComputedStyle("float")=="none"&&!(this.getComputedStyle("position")in c)&&b[this.getComputedStyle("display")]?true:!!(this.is(CKEDITOR.dtd.$block)||a&&this.is(a))};CKEDITOR.dom.walker.blockBoundary=function(a){return function(b){return!(b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary(a))}}; +CKEDITOR.dom.walker.listItemBoundary=function(){return this.blockBoundary({br:1})};CKEDITOR.dom.walker.bookmark=function(a,b){function c(a){return a&&a.getName&&a.getName()=="span"&&a.data("cke-bookmark")}return function(g){var d,e;d=g&&g.type!=CKEDITOR.NODE_ELEMENT&&(e=g.getParent())&&c(e);d=a?d:d||c(g);return!!(b^d)}};CKEDITOR.dom.walker.whitespaces=function(a){return function(b){var c;b&&b.type==CKEDITOR.NODE_TEXT&&(c=!CKEDITOR.tools.trim(b.getText())||CKEDITOR.env.webkit&&b.getText()=="​");return!!(a^ +c)}};CKEDITOR.dom.walker.invisible=function(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.env.webkit?1:0;return function(g){if(b(g))g=1;else{g.type==CKEDITOR.NODE_TEXT&&(g=g.getParent());g=g.$.offsetWidth<=c}return!!(a^g)}};CKEDITOR.dom.walker.nodeType=function(a,b){return function(c){return!!(b^c.type==a)}};CKEDITOR.dom.walker.bogus=function(a){function b(a){return!f(a)&&!h(a)}return function(c){var g=CKEDITOR.env.needsBrFiller?c.is&&c.is("br"):c.getText&&e.test(c.getText());if(g){g=c.getParent(); +c=c.getNext(b);g=g.isBlockBoundary()&&(!c||c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary())}return!!(a^g)}};CKEDITOR.dom.walker.temp=function(a){return function(b){b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b=b&&b.hasAttribute("data-cke-temp");return!!(a^b)}};var e=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,f=CKEDITOR.dom.walker.whitespaces(),h=CKEDITOR.dom.walker.bookmark(),i=CKEDITOR.dom.walker.temp();CKEDITOR.dom.walker.ignored=function(a){return function(b){b=f(b)||h(b)||i(b);return!!(a^b)}};var j= +CKEDITOR.dom.walker.ignored();CKEDITOR.dom.walker.empty=function(a){return function(b){for(var c=0,g=b.getChildCount();c<g;++c)if(!j(b.getChild(c)))return!!a;return!a}};var n=CKEDITOR.dom.walker.empty(),g=CKEDITOR.dom.walker.validEmptyBlockContainers=CKEDITOR.tools.extend(function(a){var b={},c;for(c in a)CKEDITOR.dtd[c]["#"]&&(b[c]=1);return b}(CKEDITOR.dtd.$block),{caption:1,td:1,th:1});CKEDITOR.dom.walker.editable=function(a){return function(b){return!!(a^(j(b)?0:b.type==CKEDITOR.NODE_TEXT||b.type== +CKEDITOR.NODE_ELEMENT&&(b.is(CKEDITOR.dtd.$inline)||(b.is("hr")||b.getAttribute("contenteditable")=="false")||!CKEDITOR.env.needsBrFiller&&b.is(g)&&n(b))?1:0))}};CKEDITOR.dom.element.prototype.getBogus=function(){var a=this;do a=a.getPreviousSourceNode();while(h(a)||f(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$inline)&&!a.is(CKEDITOR.dtd.$empty));return a&&(CKEDITOR.env.needsBrFiller?a.is&&a.is("br"):a.getText&&e.test(a.getText()))?a:false}})(); +CKEDITOR.dom.range=function(a){this.endOffset=this.endContainer=this.startOffset=this.startContainer=null;this.collapsed=true;var d=a instanceof CKEDITOR.dom.document;this.document=d?a:a.getDocument();this.root=d?a.getBody():a}; +(function(){function a(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset}function d(a,b,c,d,o){function e(a,b,c,g){var k=c?a.getPrevious():a.getNext();if(g&&i)return k;if(l||g)b.append(a.clone(true,o),c);else{a.remove();n&&b.append(a)}return k}function f(){var a,b,c,g=Math.min(K.length,C.length);for(a=0;a<g;a++){b=K[a];c=C[a];if(!b.equals(c))return a}return a-1}function h(){var b=x-1,c=z&&L&&!s.equals(k);if(b<D-1||b<G-1||c){c?a.moveToPosition(k, +CKEDITOR.POSITION_BEFORE_START):G==b+1&&I?a.moveToPosition(C[b],CKEDITOR.POSITION_BEFORE_END):a.moveToPosition(C[b+1],CKEDITOR.POSITION_BEFORE_START);if(d)if((b=K[b+1])&&b.type==CKEDITOR.NODE_ELEMENT){c=CKEDITOR.dom.element.createFromHtml('<span data-cke-bookmark="1" style="display:none">&nbsp;</span>',a.document);c.insertAfter(b);b.mergeSiblings(false);a.moveToBookmark({startNode:c})}}else a.collapse(true)}a.optimizeBookmark();var i=b===0,n=b==1,l=b==2,b=l||n,s=a.startContainer,k=a.endContainer, +m=a.startOffset,F=a.endOffset,p,I,z,L,E,u;if(l&&k.type==CKEDITOR.NODE_TEXT&&s.equals(k)){s=a.document.createText(s.substring(m,F));c.append(s)}else{if(k.type==CKEDITOR.NODE_TEXT)l?u=true:k=k.split(F);else if(k.getChildCount()>0)if(F>=k.getChildCount()){k=k.getChild(F-1);I=true}else k=k.getChild(F);else L=I=true;if(s.type==CKEDITOR.NODE_TEXT)l?E=true:s.split(m);else if(s.getChildCount()>0)if(m===0){s=s.getChild(m);p=true}else s=s.getChild(m-1);else z=p=true;for(var K=s.getParents(),C=k.getParents(), +x=f(),D=K.length-1,G=C.length-1,M=c,j,U,T,Z=-1,N=x;N<=D;N++){U=K[N];T=U.getNext();for(N==D&&!(U.equals(C[N])&&D<G)?p?e(U,M,false,z):E&&M.append(a.document.createText(U.substring(m))):b&&(j=M.append(U.clone(0,o)));T;){if(T.equals(C[N])){Z=N;break}T=e(T,M)}M=j}M=c;for(N=x;N<=G;N++){c=C[N];T=c.getPrevious();if(c.equals(K[N]))b&&(M=M.getChild(0));else{N==G&&!(c.equals(K[N])&&G<D)?I?e(c,M,false,L):u&&M.append(a.document.createText(c.substring(0,F))):b&&(j=M.append(c.clone(0,o)));if(N>Z)for(;T;)T=e(T,M, +true);M=j}}l||h()}}function b(){var a=false,b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(true),d=CKEDITOR.dom.walker.bogus();return function(o){if(c(o)||b(o))return true;if(d(o)&&!a)return a=true;return o.type==CKEDITOR.NODE_TEXT&&(o.hasAscendant("pre")||CKEDITOR.tools.trim(o.getText()).length)||o.type==CKEDITOR.NODE_ELEMENT&&!o.is(f)?false:true}}function c(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?true: +!a&&h(d)||d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}}function e(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&n(a)&&(b=a);return j(a)&&!(h(a)&&a.equals(b))})}}var f={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},h=CKEDITOR.dom.walker.bogus(),i=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,j=CKEDITOR.dom.walker.editable(),n=CKEDITOR.dom.walker.ignored(true); +CKEDITOR.dom.range.prototype={clone:function(){var a=new CKEDITOR.dom.range(this.root);a._setStartContainer(this.startContainer);a.startOffset=this.startOffset;a._setEndContainer(this.endContainer);a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){if(a){this._setEndContainer(this.startContainer);this.endOffset=this.startOffset}else{this._setStartContainer(this.endContainer);this.startOffset=this.endOffset}this.collapsed=true},cloneContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document); +this.collapsed||d(this,2,b,false,typeof a=="undefined"?true:a);return b},deleteContents:function(a){this.collapsed||d(this,0,null,a)},extractContents:function(a,b){var c=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||d(this,1,c,a,typeof b=="undefined"?true:b);return c},createBookmark:function(a){var b,c,d,o,e=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml("&nbsp;");if(a){d="cke_bm_"+CKEDITOR.tools.getNextNumber(); +b.setAttribute("id",d+(e?"C":"S"))}if(!e){c=b.clone();c.setHtml("&nbsp;");a&&c.setAttribute("id",d+"E");o=this.clone();o.collapse();o.insertNode(c)}o=this.clone();o.collapse(true);o.insertNode(b);if(c){this.setStartAfter(b);this.setEndBefore(c)}else this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?d+(e?"C":"S"):b,endNode:a?d+"E":c,serializable:a,collapsed:e}},createBookmark2:function(){function a(c){var g=c.container,d=c.offset,e;e=g;var f=d;e=e.type!=CKEDITOR.NODE_ELEMENT||f=== +0||f==e.getChildCount()?0:e.getChild(f-1).type==CKEDITOR.NODE_TEXT&&e.getChild(f).type==CKEDITOR.NODE_TEXT;if(e){g=g.getChild(d-1);d=g.getLength()}g.type==CKEDITOR.NODE_ELEMENT&&d>1&&(d=g.getChild(d-1).getIndex(true)+1);if(g.type==CKEDITOR.NODE_TEXT){e=g;for(f=0;(e=e.getPrevious())&&e.type==CKEDITOR.NODE_TEXT;)f=f+e.getLength();e=f;if(g.getText())d=d+e;else{f=g.getPrevious(b);if(e){d=e;g=f?f.getNext():g.getParent().getFirst()}else{g=g.getParent();d=f?f.getIndex(true)+1:0}}}c.container=g;c.offset= +d}var b=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT,true);return function(b){var c=this.collapsed,d={container:this.startContainer,offset:this.startOffset},e={container:this.endContainer,offset:this.endOffset};if(b){a(d);c||a(e)}return{start:d.container.getAddress(b),end:c?null:e.container.getAddress(b),startOffset:d.offset,endOffset:e.offset,normalized:b,collapsed:c,is2:true}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset,d=a.end&& +this.document.getByAddress(a.end,a.normalized),a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a):this.collapse(true)}else{b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode;a=c?this.document.getById(a.endNode):a.endNode;this.setStartBefore(b);b.remove();if(a){this.setEndBefore(a);a.remove()}else this.collapse(true)}},getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,d=this.endOffset,e;if(a.type==CKEDITOR.NODE_ELEMENT){e=a.getChildCount(); +if(e>c)a=a.getChild(c);else if(e<1)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}}if(b.type==CKEDITOR.NODE_ELEMENT){e=b.getChildCount();if(e>d)b=b.getChild(d).getPreviousSourceNode(true);else if(e<1)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b=b.lastChild;b=new CKEDITOR.dom.node(b)}}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer, +d=this.endContainer,c=c.equals(d)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?c.getChild(this.startOffset):c:c.getCommonAncestor(d);return b&&!c.is?c.getParent():c},optimize:function(){var a=this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setStartAfter(a):this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a= +this.startContainer,b=this.endContainer;a.is&&(a.is("span")&&a.data("cke-bookmark"))&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&(b.is&&b.is("span")&&b.data("cke-bookmark"))&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,b){var c=this.startContainer,d=this.startOffset,e=this.collapsed;if((!a||e)&&c&&c.type==CKEDITOR.NODE_TEXT){if(d)if(d>=c.getLength()){d=c.getIndex()+1;c=c.getParent()}else{var f=c.split(d),d=c.getIndex()+1,c=c.getParent();if(this.startContainer.equals(this.endContainer))this.setEnd(f, +this.endOffset-this.startOffset);else if(c.equals(this.endContainer))this.endOffset=this.endOffset+1}else{d=c.getIndex();c=c.getParent()}this.setStart(c,d);if(e){this.collapse(true);return}}c=this.endContainer;d=this.endOffset;if(!b&&!e&&c&&c.type==CKEDITOR.NODE_TEXT){if(d){d>=c.getLength()||c.split(d);d=c.getIndex()+1}else d=c.getIndex();c=c.getParent();this.setEnd(c,d)}},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=RegExp(/[^\s\ufeff]/); +switch(a){case CKEDITOR.ENLARGE_INLINE:var e=1;case CKEDITOR.ENLARGE_ELEMENT:if(this.collapsed)break;var f=this.getCommonAncestor(),h=this.root,i,n,j,l,s,k=false,m,F;m=this.startContainer;var p=this.startOffset;if(m.type==CKEDITOR.NODE_TEXT){if(p){m=!CKEDITOR.tools.trim(m.substring(0,p)).length&&m;k=!!m}if(m&&!(l=m.getPrevious()))j=m.getParent()}else{p&&(l=m.getChild(p-1)||m.getLast());l||(j=m)}for(j=c(j);j||l;){if(j&&!l){!s&&j.equals(f)&&(s=true);if(e?j.isBlockBoundary():!h.contains(j))break;if(!k|| +j.getComputedStyle("display")!="inline"){k=false;s?i=j:this.setStartBefore(j)}l=j.getPrevious()}for(;l;){m=false;if(l.type==CKEDITOR.NODE_COMMENT)l=l.getPrevious();else{if(l.type==CKEDITOR.NODE_TEXT){F=l.getText();d.test(F)&&(l=null);m=/[\s\ufeff]$/.test(F)}else if((l.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||b&&l.is("br"))&&!l.data("cke-bookmark"))if(k&&CKEDITOR.dtd.$removeEmpty[l.getName()]){F=l.getText();if(d.test(F))l=null;else for(var p=l.$.getElementsByTagName("*"),I=0,z;z=p[I++];)if(!CKEDITOR.dtd.$removeEmpty[z.nodeName.toLowerCase()]){l= +null;break}l&&(m=!!F.length)}else l=null;m&&(k?s?i=j:j&&this.setStartBefore(j):k=true);if(l){m=l.getPrevious();if(!j&&!m){j=l;l=null;break}l=m}else j=null}}j&&(j=c(j.getParent()))}m=this.endContainer;p=this.endOffset;j=l=null;s=k=false;var L=function(a,b){var c=new CKEDITOR.dom.range(h);c.setStart(a,b);c.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),g;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};g=c.next();){if(g.type!=CKEDITOR.NODE_TEXT)return false; +F=g!=a?g.getText():g.substring(b);if(d.test(F))return false}return true};if(m.type==CKEDITOR.NODE_TEXT)if(CKEDITOR.tools.trim(m.substring(p)).length)k=true;else{k=!m.getLength();if(p==m.getLength()){if(!(l=m.getNext()))j=m.getParent()}else L(m,p)&&(j=m.getParent())}else(l=m.getChild(p))||(j=m);for(;j||l;){if(j&&!l){!s&&j.equals(f)&&(s=true);if(e?j.isBlockBoundary():!h.contains(j))break;if(!k||j.getComputedStyle("display")!="inline"){k=false;s?n=j:j&&this.setEndAfter(j)}l=j.getNext()}for(;l;){m=false; +if(l.type==CKEDITOR.NODE_TEXT){F=l.getText();L(l,0)||(l=null);m=/^[\s\ufeff]/.test(F)}else if(l.type==CKEDITOR.NODE_ELEMENT){if((l.$.offsetWidth>0||b&&l.is("br"))&&!l.data("cke-bookmark"))if(k&&CKEDITOR.dtd.$removeEmpty[l.getName()]){F=l.getText();if(d.test(F))l=null;else{p=l.$.getElementsByTagName("*");for(I=0;z=p[I++];)if(!CKEDITOR.dtd.$removeEmpty[z.nodeName.toLowerCase()]){l=null;break}}l&&(m=!!F.length)}else l=null}else m=1;m&&k&&(s?n=j:this.setEndAfter(j));if(l){m=l.getNext();if(!j&&!m){j=l; +l=null;break}l=m}else j=null}j&&(j=c(j.getParent()))}if(i&&n){f=i.contains(n)?n:i;this.setStartBefore(f);this.setEndAfter(f)}break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:j=new CKEDITOR.dom.range(this.root);h=this.root;j.setStartAt(h,CKEDITOR.POSITION_AFTER_START);j.setEnd(this.startContainer,this.startOffset);j=new CKEDITOR.dom.walker(j);var E,u,K=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),C=null,x=function(a){if(a.type== +CKEDITOR.NODE_ELEMENT&&a.getAttribute("contenteditable")=="false")if(C){if(C.equals(a)){C=null;return}}else C=a;else if(C)return;var b=K(a);b||(E=a);return b},e=function(a){var b=x(a);!b&&(a.is&&a.is("br"))&&(u=a);return b};j.guard=x;j=j.lastBackward();E=E||h;this.setStartAt(E,!E.is("br")&&(!j&&this.checkStartOfBlock()||j&&E.contains(j))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){j=this.clone();j=new CKEDITOR.dom.walker(j);var D=CKEDITOR.dom.walker.whitespaces(), +G=CKEDITOR.dom.walker.bookmark();j.evaluator=function(a){return!D(a)&&!G(a)};if((j=j.previous())&&j.type==CKEDITOR.NODE_ELEMENT&&j.is("br"))break}j=this.clone();j.collapse();j.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);j=new CKEDITOR.dom.walker(j);j.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?e:x;E=C=u=null;j=j.lastForward();E=E||h;this.setEndAt(E,!j&&this.checkEndOfBlock()||j&&E.contains(j)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);u&&this.setEndAfter(u)}},shrink:function(a,b,c){if(!this.collapsed){var a= +a||CKEDITOR.SHRINK_TEXT,d=this.clone(),e=this.startContainer,f=this.endContainer,h=this.startOffset,i=this.endOffset,j=1,n=1;if(e&&e.type==CKEDITOR.NODE_TEXT)if(h)if(h>=e.getLength())d.setStartAfter(e);else{d.setStartBefore(e);j=0}else d.setStartBefore(e);if(f&&f.type==CKEDITOR.NODE_TEXT)if(i)if(i>=f.getLength())d.setEndAfter(f);else{d.setEndAfter(f);n=0}else d.setEndBefore(f);var d=new CKEDITOR.dom.walker(d),l=CKEDITOR.dom.walker.bookmark();d.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT? +CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var s;d.guard=function(b,d){if(l(b))return true;if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||d&&b.equals(s)||c===false&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return false;!d&&b.type==CKEDITOR.NODE_ELEMENT&&(s=b);return true};if(j)(e=d[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(e,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START); +if(n){d.reset();(d=d[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(d,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END)}return!(!j&&!n)}},insertNode:function(a){this.optimizeBookmark();this.trim(false,true);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(true)},moveToRange:function(a){this.setStart(a.startContainer, +a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(b,c){if(b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]){c=b.getIndex();b=b.getParent()}this._setStartContainer(b);this.startOffset=c;if(!this.endContainer){this._setEndContainer(b);this.endOffset=c}a(this)},setEnd:function(b,c){if(b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]){c= +b.getIndex()+1;b=b.getParent()}this._setEndContainer(b);this.endOffset=c;if(!this.startContainer){this._setStartContainer(b);this.startOffset=c}a(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(b,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setStart(b, +0);break;case CKEDITOR.POSITION_BEFORE_END:b.type==CKEDITOR.NODE_TEXT?this.setStart(b,b.getLength()):this.setStart(b,b.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(b);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(b)}a(this)},setEndAt:function(b,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setEnd(b,0);break;case CKEDITOR.POSITION_BEFORE_END:b.type==CKEDITOR.NODE_TEXT?this.setEnd(b,b.getLength()):this.setEnd(b,b.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(b); +break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(b)}a(this)},fixBlock:function(a,b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d);d.trim();this.insertNode(d);var e=d.getBogus();e&&e.remove();d.appendBogus();this.moveToBookmark(c);return d},splitBlock:function(a,b){var c=new CKEDITOR.dom.elementPath(this.startContainer,this.root),d=new CKEDITOR.dom.elementPath(this.endContainer,this.root), +e=c.block,f=d.block,h=null;if(!c.blockLimit.equals(d.blockLimit))return null;if(a!="br"){if(!e){e=this.fixBlock(true,a);f=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block}f||(f=this.fixBlock(false,a))}c=e&&this.checkStartOfBlock();d=f&&this.checkEndOfBlock();this.deleteContents();if(e&&e.equals(f))if(d){h=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(f,CKEDITOR.POSITION_AFTER_END);f=null}else if(c){h=new CKEDITOR.dom.elementPath(this.startContainer, +this.root);this.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START);e=null}else{f=this.splitElement(e,b||false);e.is("ul","ol")||e.appendBogus()}return{previousBlock:e,nextBlock:f,wasStartOfBlock:c,wasEndOfBlock:d,elementPath:h}},splitElement:function(a,b){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var c=this.extractContents(false,b||false),d=a.clone(false,b||false);c.appendTo(d);d.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return d},removeEmptyBlocksAtEnd:function(){function a(d){return function(a){return b(a)|| +(c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable())||d.is("table")&&a.is("caption")?false:true}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(false);return function(b){for(var c=this.createBookmark(),d=this[b?"endPath":"startPath"](),e=d.block||d.blockLimit,f;e&&!e.equals(d.root)&&!e.getFirst(a(e));){f=e.getParent();this[b?"setEndAt":"setStartAt"](e,CKEDITOR.POSITION_AFTER_END);e.remove(1);e=f}this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer, +this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,this.root)},checkBoundaryOfElement:function(a,b){var d=b==CKEDITOR.START,e=this.clone();e.collapse(d);e[d?"setStartAt":"setEndAt"](a,d?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);e=new CKEDITOR.dom.walker(e);e.evaluator=c(d);return e[d?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var a=this.startContainer,c=this.startOffset;if(CKEDITOR.env.ie&&c&&a.type==CKEDITOR.NODE_TEXT){a=CKEDITOR.tools.ltrim(a.substring(0, +c));i.test(a)&&this.trim(0,1)}this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer,this.root);c=this.clone();c.collapse(true);c.setStartAt(a.block||a.blockLimit,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkBackward()},checkEndOfBlock:function(){var a=this.endContainer,c=this.endOffset;if(CKEDITOR.env.ie&&a.type==CKEDITOR.NODE_TEXT){a=CKEDITOR.tools.rtrim(a.substring(c));i.test(a)&&this.trim(1,0)}this.trim();a=new CKEDITOR.dom.elementPath(this.endContainer, +this.root);c=this.clone();c.collapse(false);c.setEndAt(a.block||a.blockLimit,CKEDITOR.POSITION_BEFORE_END);a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkForward()},getPreviousNode:function(a,b,c){var d=this.clone();d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d); +c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type==CKEDITOR.NODE_ELEMENT){if(b.getAttribute("contentEditable")=="false"&&!b.data("cke-editable"))return 0;if(b.is("html")||b.getAttribute("contentEditable")=="true"&&(b.contains(c)||b.equals(c)))break}b=b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(false)){this.moveToPosition(a, +b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);return true}for(var c=0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&&this.checkEndOfBlock()&&i.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable()){this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START);c=1}else if(b&&a.is("br")&&this.endContainer&& +this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);else if(a.getAttribute("contenteditable")=="false"&&a.is(CKEDITOR.dtd.$block)){this.setStartBefore(a);this.setEndAfter(a);return true}var d=a,e=c,f=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(false)&&(f=d[b?"getLast":"getFirst"](n));!e&&!f&&(f=d[b?"getPrevious":"getNext"](n));a=f}return!!c},moveToClosestEditablePosition:function(a,b){var c,d=0,e,f,h=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];if(a){c= +new CKEDITOR.dom.range(this.root);c.moveToPosition(a,h[b?0:1])}else c=this.clone();if(a&&!a.is(CKEDITOR.dtd.$block))d=1;else if(e=c[b?"getNextEditableNode":"getPreviousEditableNode"]()){d=1;if((f=e.type==CKEDITOR.NODE_ELEMENT)&&e.is(CKEDITOR.dtd.$block)&&e.getAttribute("contenteditable")=="false"){c.setStartAt(e,CKEDITOR.POSITION_BEFORE_START);c.setEndAt(e,CKEDITOR.POSITION_AFTER_END)}else if(!CKEDITOR.env.needsBrFiller&&f&&e.is(CKEDITOR.dom.walker.validEmptyBlockContainers)){c.setEnd(e,0);c.collapse()}else c.moveToPosition(e, +h[b?1:0])}d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,true)},getEnclosedNode:function(){var a=this.clone();a.optimize();if(a.startContainer.type!=CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(false,true),c=CKEDITOR.dom.walker.whitespaces(true);a.evaluator=function(a){return c(a)&& +b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=this.endContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:e(),getPreviousEditableNode:e(1),scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("<span>&nbsp;</span>", +this.document),b,c,d,e=this.clone();e.optimize();if(d=e.startContainer.type==CKEDITOR.NODE_TEXT){c=e.startContainer.getText();b=e.startContainer.split(e.startOffset);a.insertAfter(e.startContainer)}else e.insertNode(a);a.scrollIntoView();if(d){e.startContainer.setText(c);b.remove()}a.remove()},_setStartContainer:function(a){this.startContainer=a},_setEndContainer:function(a){this.endContainer=a}}})();CKEDITOR.POSITION_AFTER_START=1;CKEDITOR.POSITION_BEFORE_END=2;CKEDITOR.POSITION_BEFORE_START=3; +CKEDITOR.POSITION_AFTER_END=4;CKEDITOR.ENLARGE_ELEMENT=1;CKEDITOR.ENLARGE_BLOCK_CONTENTS=2;CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3;CKEDITOR.ENLARGE_INLINE=4;CKEDITOR.START=1;CKEDITOR.END=2;CKEDITOR.SHRINK_ELEMENT=1;CKEDITOR.SHRINK_TEXT=2;"use strict"; +(function(){function a(a){if(!(arguments.length<1)){this.range=a;this.forceBrBreak=0;this.enlargeBr=1;this.enforceRealBlocks=0;this._||(this._={})}}function d(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")=="true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function b(a,c,e,f){a:{f==null&&(f=d(e));for(var h;h=f.shift();)if(h.getDtd().p){f={element:h,remaining:f};break a}f=null}if(!f)return 0;if((h=CKEDITOR.filter.instances[f.element.data("cke-filter")])&& +!h.check(c))return b(a,c,e,f.remaining);c=new CKEDITOR.dom.range(f.element);c.selectNodeContents(f.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=h;a._.nestedEditable={element:f.element,container:e,remaining:f.remaining,iterator:c};return 1}function c(a,b,c){if(!b)return false;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b,c?CKEDITOR.START:CKEDITOR.END)}var e=/^[\r\n\t ]+$/,f=CKEDITOR.dom.walker.bookmark(false,true), +h=CKEDITOR.dom.walker.whitespaces(true),i=function(a){return f(a)&&h(a)},j={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var d,h,r,y,o,a=a||"p";if(this._.nestedEditable){if(d=this._.nestedEditable.iterator.getNextParagraph(a)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return d}this.activeFilter=this.filter;if(b(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return this._.nestedEditable.iterator.getNextParagraph(a)}this._.nestedEditable= +null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var q=this.range.clone();h=q.startPath();var t=q.endPath(),w=!q.collapsed&&c(q,h.block),v=!q.collapsed&&c(q,t.block,1);q.shrink(CKEDITOR.SHRINK_ELEMENT,true);w&&q.setStartAt(h.block,CKEDITOR.POSITION_BEFORE_END);v&&q.setEndAt(t.block,CKEDITOR.POSITION_AFTER_START);h=q.endContainer.hasAscendant("pre",true)||q.startContainer.hasAscendant("pre",true);q.enlarge(this.forceBrBreak&&!h||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS: +CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(!q.collapsed){h=new CKEDITOR.dom.walker(q.clone());t=CKEDITOR.dom.walker.bookmark(true,true);h.evaluator=t;this._.nextNode=h.next();h=new CKEDITOR.dom.walker(q.clone());h.evaluator=t;h=h.previous();this._.lastNode=h.getNextSourceNode(true,null,q.root);if(this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()){t=this.range.clone();t.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END); +if(t.checkEndOfBlock()){t=new CKEDITOR.dom.elementPath(t.endContainer,t.root);this._.lastNode=(t.block||t.blockLimit).getNextSourceNode(true)}}if(!this._.lastNode||!q.root.contains(this._.lastNode)){this._.lastNode=this._.docEndMarker=q.document.createText("");this._.lastNode.insertAfter(h)}q=null}this._.started=1;h=q}t=this._.nextNode;q=this._.lastNode;for(this._.nextNode=null;t;){var w=0,v=t.hasAscendant("pre"),B=t.type!=CKEDITOR.NODE_ELEMENT,l=0;if(B)t.type==CKEDITOR.NODE_TEXT&&e.test(t.getText())&& +(B=0);else{var s=t.getName();if(CKEDITOR.dtd.$block[s]&&t.getAttribute("contenteditable")=="false"){d=t;b(this,a,d);break}else if(t.isBlockBoundary(this.forceBrBreak&&!v&&{br:1})){if(s=="br")B=1;else if(!h&&!t.getChildCount()&&s!="hr"){d=t;r=t.equals(q);break}if(h){h.setEndAt(t,CKEDITOR.POSITION_BEFORE_START);if(s!="br")this._.nextNode=t}w=1}else{if(t.getFirst()){if(!h){h=this.range.clone();h.setStartAt(t,CKEDITOR.POSITION_BEFORE_START)}t=t.getFirst();continue}B=1}}if(B&&!h){h=this.range.clone(); +h.setStartAt(t,CKEDITOR.POSITION_BEFORE_START)}r=(!w||B)&&t.equals(q);if(h&&!w)for(;!t.getNext(i)&&!r;){s=t.getParent();if(s.isBlockBoundary(this.forceBrBreak&&!v&&{br:1})){w=1;B=0;r||s.equals(q);h.setEndAt(s,CKEDITOR.POSITION_BEFORE_END);break}t=s;B=1;r=t.equals(q);l=1}B&&h.setEndAt(t,CKEDITOR.POSITION_AFTER_END);t=this._getNextSourceNode(t,l,q);if((r=!t)||w&&h)break}if(!d){if(!h){this._.docEndMarker&&this._.docEndMarker.remove();return this._.nextNode=null}d=new CKEDITOR.dom.elementPath(h.startContainer, +h.root);t=d.blockLimit;w={div:1,th:1,td:1};d=d.block;if(!d&&t&&!this.enforceRealBlocks&&w[t.getName()]&&h.checkStartOfBlock()&&h.checkEndOfBlock()&&!t.equals(h.root))d=t;else if(!d||this.enforceRealBlocks&&d.is(j)){d=this.range.document.createElement(a);h.extractContents().appendTo(d);d.trim();h.insertNode(d);y=o=true}else if(d.getName()!="li"){if(!h.checkStartOfBlock()||!h.checkEndOfBlock()){d=d.clone(false);h.extractContents().appendTo(d);d.trim();o=h.splitBlock();y=!o.wasStartOfBlock;o=!o.wasEndOfBlock; +h.insertNode(d)}}else if(!r)this._.nextNode=d.equals(q)?null:this._getNextSourceNode(h.getBoundaryNodes().endNode,1,q)}if(y)(y=d.getPrevious())&&y.type==CKEDITOR.NODE_ELEMENT&&(y.getName()=="br"?y.remove():y.getLast()&&y.getLast().$.nodeName.toLowerCase()=="br"&&y.getLast().remove());if(o)(y=d.getLast())&&y.type==CKEDITOR.NODE_ELEMENT&&y.getName()=="br"&&(!CKEDITOR.env.needsBrFiller||y.getPrevious(f)||y.getNext(f))&&y.remove();if(!this._.nextNode)this._.nextNode=r||d.equals(q)||!q?null:this._getNextSourceNode(d, +1,q);return d},_getNextSourceNode:function(a,b,c){function d(a){return!(a.equals(c)||a.equals(e))}for(var e=this.range.root,a=a.getNextSourceNode(b,null,d);!f(a);)a=a.getNextSourceNode(b,null,d);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}})(); +CKEDITOR.command=function(a,d){this.uiItems=[];this.exec=function(b){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return false;this.editorFocus&&a.focus();return this.fire("exec")===false?true:d.exec.call(this,a,b)!==false};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return true;if(this.context&&!b.isContextFor(this.context)){this.disable();return true}if(!this.checkAllowed(true)){this.disable();return true}this.startDisabled||this.enable();this.modes&&!this.modes[a.mode]&& +this.disable();return this.fire("refresh",{editor:a,path:b})===false?true:d.refresh&&d.refresh.apply(this,arguments)!==false};var b;this.checkAllowed=function(c){return!c&&typeof b=="boolean"?b:b=a.activeFilter.checkFeature(this)};CKEDITOR.tools.extend(this,d,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!d.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)}; +CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(!this.preserveState||typeof this.previousState=="undefined"?CKEDITOR.TRISTATE_OFF:this.previousState)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||a!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return false;this.previousState=this.state;this.state=a;this.fire("state");return true},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF? +this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3; +CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"<!DOCTYPE html>",bodyId:"",bodyClass:"",fullPage:!1,height:200,extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]}; +(function(){function a(a,b,c,d,k){var e,m,a=[];for(e in b){m=b[e];m=typeof m=="boolean"?{}:typeof m=="function"?{match:m}:L(m);if(e.charAt(0)!="$")m.elements=e;if(c)m.featureName=c.toLowerCase();var f=m;f.elements=h(f.elements,/\s+/)||null;f.propertiesOnly=f.propertiesOnly||f.elements===true;var g=/\s*,\s*/,p=void 0;for(p in C){f[p]=h(f[p],g)||null;var D=f,u=x[p],o=h(f[x[p]],g),z=f[p],F=[],l=true,s=void 0;o?l=false:o={};for(s in z)if(s.charAt(0)=="!"){s=s.slice(1);F.push(s);o[s]=true;l=false}for(;s= +F.pop();){z[s]=z["!"+s];delete z["!"+s]}D[u]=(l?false:o)||null}f.match=f.match||null;d.push(m);a.push(m)}for(var b=k.elements,k=k.generic,G,c=0,d=a.length;c<d;++c){e=L(a[c]);m=e.classes===true||e.styles===true||e.attributes===true;f=e;p=u=g=void 0;for(g in C)f[g]=w(f[g]);D=true;for(p in x){g=x[p];u=f[g];o=[];z=void 0;for(z in u)z.indexOf("*")>-1?o.push(RegExp("^"+z.replace(/\*/g,".*")+"$")):o.push(z);u=o;if(u.length){f[g]=u;D=false}}f.nothingRequired=D;f.noProperties=!(f.attributes||f.classes||f.styles); +if(e.elements===true||e.elements===null)k[m?"unshift":"push"](e);else{f=e.elements;delete e.elements;for(G in f)if(b[G])b[G][m?"unshift":"push"](e);else b[G]=[e]}}}function d(a,c,d,k){if(!a.match||a.match(c))if(k||i(a,c)){if(!a.propertiesOnly)d.valid=true;if(!d.allAttributes)d.allAttributes=b(a.attributes,c.attributes,d.validAttributes);if(!d.allStyles)d.allStyles=b(a.styles,c.styles,d.validStyles);if(!d.allClasses){a=a.classes;c=c.classes;k=d.validClasses;if(a)if(a===true)a=true;else{for(var e=0, +m=c.length,f;e<m;++e){f=c[e];k[f]||(k[f]=a(f))}a=false}else a=false;d.allClasses=a}}}function b(a,b,c){if(!a)return false;if(a===true)return true;for(var d in b)c[d]||(c[d]=a(d));return false}function c(a,b,c){if(!a.match||a.match(b)){if(a.noProperties)return false;c.hadInvalidAttribute=e(a.attributes,b.attributes)||c.hadInvalidAttribute;c.hadInvalidStyle=e(a.styles,b.styles)||c.hadInvalidStyle;a=a.classes;b=b.classes;if(a){for(var d=false,k=a===true,m=b.length;m--;)if(k||a(b[m])){b.splice(m,1);d= +true}a=d}else a=false;c.hadInvalidClass=a||c.hadInvalidClass}}function e(a,b){if(!a)return false;var c=false,d=a===true,k;for(k in b)if(d||a(k)){delete b[k];c=true}return c}function f(a,b,c){if(a.disabled||a.customConfig&&!c||!b)return false;a._.cachedChecks={};return true}function h(a,b){if(!a)return false;if(a===true)return a;if(typeof a=="string"){a=E(a);return a=="*"?true:CKEDITOR.tools.convertArrayToObject(a.split(b))}if(CKEDITOR.tools.isArray(a))return a.length?CKEDITOR.tools.convertArrayToObject(a): +false;var c={},d=0,k;for(k in a){c[k]=a[k];d++}return d?c:false}function i(a,b){if(a.nothingRequired)return true;var c,d,k,e;if(k=a.requiredClasses){e=b.classes;for(c=0;c<k.length;++c){d=k[c];if(typeof d=="string"){if(CKEDITOR.tools.indexOf(e,d)==-1)return false}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(e,d))return false}}return j(b.styles,a.requiredStyles)&&j(b.attributes,a.requiredAttributes)}function j(a,b){if(!b)return true;for(var c=0,d;c<b.length;++c){d=b[c];if(typeof d=="string"){if(!(d in +a))return false}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,d))return false}return true}function n(a){if(!a)return{};for(var a=a.split(/\s*,\s*/).sort(),b={};a.length;)b[a.shift()]=u;return b}function g(a){for(var b,c,d,k,e={},m=1,a=E(a);b=a.match(D);){if(c=b[2]){d=A(c,"styles");k=A(c,"attrs");c=A(c,"classes")}else d=k=c=null;e["$"+m++]={elements:b[1],classes:c,styles:d,attributes:k};a=a.slice(b[0].length)}return e}function A(a,b){var c=a.match(G[b]);return c?E(c[1]):null}function r(a){var b= +a.styleBackup=a.attributes.style,c=a.classBackup=a.attributes["class"];if(!a.styles)a.styles=CKEDITOR.tools.parseCssText(b||"",1);if(!a.classes)a.classes=c?c.split(/\s+/):[]}function y(a,b,k,e){var m=0,f;if(e.toHtml)b.name=b.name.replace(M,"$1");if(e.doCallbacks&&a.elementCallbacks){a:for(var g=a.elementCallbacks,p=0,D=g.length,u;p<D;++p)if(u=g[p](b)){f=u;break a}if(f)return f}if(e.doTransform)if(f=a._.transformations[b.name]){r(b);for(g=0;g<f.length;++g)s(a,b,f[g]);q(b)}if(e.doFilter){a:{g=b.name; +p=a._;a=p.allowedRules.elements[g];f=p.allowedRules.generic;g=p.disallowedRules.elements[g];p=p.disallowedRules.generic;D=e.skipRequired;u={valid:false,validAttributes:{},validClasses:{},validStyles:{},allAttributes:false,allClasses:false,allStyles:false,hadInvalidAttribute:false,hadInvalidClass:false,hadInvalidStyle:false};var h,o;if(!a&&!f)a=null;else{r(b);if(g){h=0;for(o=g.length;h<o;++h)if(c(g[h],b,u)===false){a=null;break a}}if(p){h=0;for(o=p.length;h<o;++h)c(p[h],b,u)}if(a){h=0;for(o=a.length;h< +o;++h)d(a[h],b,u,D)}if(f){h=0;for(o=f.length;h<o;++h)d(f[h],b,u,D)}a=u}}if(!a){k.push(b);return z}if(!a.valid){k.push(b);return z}o=a.validAttributes;var F=a.validStyles;f=a.validClasses;var g=b.attributes,l=b.styles,p=b.classes,D=b.classBackup,x=b.styleBackup,C,G,i=[];u=[];var I=/^data-cke-/;h=false;delete g.style;delete g["class"];delete b.classBackup;delete b.styleBackup;if(!a.allAttributes)for(C in g)if(!o[C])if(I.test(C)){if(C!=(G=C.replace(/^data-cke-saved-/,""))&&!o[G]){delete g[C];h=true}}else{delete g[C]; +h=true}if(!a.allStyles||a.hadInvalidStyle){for(C in l)a.allStyles||F[C]?i.push(C+":"+l[C]):h=true;if(i.length)g.style=i.sort().join("; ")}else if(x)g.style=x;if(!a.allClasses||a.hadInvalidClass){for(C=0;C<p.length;++C)(a.allClasses||f[p[C]])&&u.push(p[C]);u.length&&(g["class"]=u.sort().join(" "));D&&u.length<D.split(/\s+/).length&&(h=true)}else D&&(g["class"]=D);h&&(m=z);if(!e.skipFinalValidation&&!t(b)){k.push(b);return z}}if(e.toHtml)b.name=b.name.replace(aa,"cke:$1");return m}function o(a){var b= +[],c;for(c in a)c.indexOf("*")>-1&&b.push(c.replace(/\*/g,".*"));return b.length?RegExp("^(?:"+b.join("|")+")$"):null}function q(a){var b=a.attributes,c;delete b.style;delete b["class"];if(c=CKEDITOR.tools.writeCssText(a.styles,true))b.style=c;a.classes.length&&(b["class"]=a.classes.sort().join(" "))}function t(a){switch(a.name){case "a":if(!a.children.length&&!a.attributes.name)return false;break;case "img":if(!a.attributes.src)return false}return true}function w(a){if(!a)return false;if(a===true)return true; +var b=o(a);return function(c){return c in a||b&&c.match(b)}}function v(){return new CKEDITOR.htmlParser.element("br")}function B(a){return a.type==CKEDITOR.NODE_ELEMENT&&(a.name=="br"||I.$block[a.name])}function l(a,b,c){var d=a.name;if(I.$empty[d]||!a.children.length)if(d=="hr"&&b=="br")a.replaceWith(v());else{a.parent&&c.push({check:"it",el:a.parent});a.remove()}else if(I.$block[d]||d=="tr")if(b=="br"){if(a.previous&&!B(a.previous)){b=v();b.insertBefore(a)}if(a.next&&!B(a.next)){b=v();b.insertAfter(a)}a.replaceWithChildren()}else{var d= +a.children,k;b:{k=I[b];for(var e=0,m=d.length,f;e<m;++e){f=d[e];if(f.type==CKEDITOR.NODE_ELEMENT&&!k[f.name]){k=false;break b}}k=true}if(k){a.name=b;a.attributes={};c.push({check:"parent-down",el:a})}else{k=a.parent;for(var e=k.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||k.name=="body",g,p,m=d.length;m>0;){f=d[--m];if(e&&(f.type==CKEDITOR.NODE_TEXT||f.type==CKEDITOR.NODE_ELEMENT&&I.$inline[f.name])){if(!g){g=new CKEDITOR.htmlParser.element(b);g.insertAfter(a);c.push({check:"parent-down",el:g})}g.add(f, +0)}else{g=null;p=I[k.name]||I.span;f.insertAfter(a);k.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(f.type==CKEDITOR.NODE_ELEMENT&&!p[f.name])&&c.push({check:"el-up",el:f})}}a.remove()}}else if(d in{style:1,script:1})a.remove();else{a.parent&&c.push({check:"it",el:a.parent});a.replaceWithChildren()}}function s(a,b,c){var d,k;for(d=0;d<c.length;++d){k=c[d];if((!k.check||a.check(k.check,false))&&(!k.left||k.left(b))){k.right(b,U);break}}}function k(a,b){var c=b.getDefinition(),d=c.attributes,k=c.styles,e, +m,f,g;if(a.name!=c.element)return false;for(e in d)if(e=="class"){c=d[e].split(/\s+/);for(f=a.classes.join("|");g=c.pop();)if(f.indexOf(g)==-1)return false}else if(a.attributes[e]!=d[e])return false;for(m in k)if(a.styles[m]!=k[m])return false;return true}function m(a,b){var c,d;if(typeof a=="string")c=a;else if(a instanceof CKEDITOR.style)d=a;else{c=a[0];d=a[1]}return[{element:c,left:d,right:function(a,c){c.transform(a,b)}}]}function F(a){return function(b){return k(b,a)}}function p(a){return function(b, +c){c[a](b)}}var I=CKEDITOR.dtd,z=1,L=CKEDITOR.tools.copy,E=CKEDITOR.tools.trim,u="cke-test",K=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a){this.allowedContent=[];this.disallowedContent=[];this.elementCallbacks=null;this.disabled=false;this.editor=null;this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{},generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{}};CKEDITOR.filter.instances[this.id]=this;if(a instanceof CKEDITOR.editor){a= +this.editor=a;this.customConfig=true;var b=a.config.allowedContent;if(b===true)this.disabled=true;else{if(!b)this.customConfig=false;this.allow(b,"config",1);this.allow(a.config.extraAllowedContent,"extra",1);this.allow(K[a.enterMode]+" "+K[a.shiftEnterMode],"default",1);this.disallow(a.config.disallowedContent)}}else{this.customConfig=false;this.allow(a,"default",1)}};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(b,c,d){if(!f(this,b,d))return false;var k,e;if(typeof b=="string")b= +g(b);else if(b instanceof CKEDITOR.style){if(b.toAllowedContentRules)return this.allow(b.toAllowedContentRules(this.editor),c,d);k=b.getDefinition();b={};d=k.attributes;b[k.element]=k={styles:k.styles,requiredStyles:k.styles&&CKEDITOR.tools.objectKeys(k.styles)};if(d){d=L(d);k.classes=d["class"]?d["class"].split(/\s+/):null;k.requiredClasses=k.classes;delete d["class"];k.attributes=d;k.requiredAttributes=d&&CKEDITOR.tools.objectKeys(d)}}else if(CKEDITOR.tools.isArray(b)){for(k=0;k<b.length;++k)e= +this.allow(b[k],c,d);return e}a(this,b,c,this.allowedContent,this._.allowedRules);return true},applyTo:function(a,b,c,d){if(this.disabled)return false;var k=this,e=[],m=this.editor&&this.editor.config.protectedSource,f,g=false,p={doFilter:!c,doTransform:true,doCallbacks:true,toHtml:b};a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if(a.attributes["data-cke-filter"]=="off")return false;if(!b||!(a.name=="span"&&~CKEDITOR.tools.objectKeys(a.attributes).join("|").indexOf("data-cke-"))){f=y(k, +a,e,p);if(f&z)g=true;else if(f&2)return false}}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var c;a:{var d=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));c=[];var D,h,u;if(m)for(h=0;h<m.length;++h)if((u=d.match(m[h]))&&u[0].length==d.length){c=true;break a}d=CKEDITOR.htmlParser.fragment.fromHtml(d);d.children.length==1&&(D=d.children[0]).type==CKEDITOR.NODE_ELEMENT&&y(k,D,c,p);c=!c.length}c||e.push(a)}},null,true);e.length&&(g=true);for(var D, +a=[],d=K[d||(this.editor?this.editor.enterMode:CKEDITOR.ENTER_P)],h;c=e.pop();)c.type==CKEDITOR.NODE_ELEMENT?l(c,d,a):c.remove();for(;D=a.pop();){c=D.el;if(c.parent){h=I[c.parent.name]||I.span;switch(D.check){case "it":I.$removeEmpty[c.name]&&!c.children.length?l(c,d,a):t(c)||l(c,d,a);break;case "el-up":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!h[c.name]&&l(c,d,a);break;case "parent-down":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!h[c.name]&&l(c.parent,d,a)}}}return g},checkFeature:function(a){if(this.disabled|| +!a)return true;a.toFeature&&(a=a.toFeature(this.editor));return!a.requiredContent||this.check(a.requiredContent)},disable:function(){this.disabled=true},disallow:function(b){if(!f(this,b,true))return false;typeof b=="string"&&(b=g(b));a(this,b,null,this.disallowedContent,this._.disallowedRules);return true},addContentForms:function(a){if(!this.disabled&&a){var b,c,d=[],k;for(b=0;b<a.length&&!k;++b){c=a[b];if((typeof c=="string"||c instanceof CKEDITOR.style)&&this.check(c))k=c}if(k){for(b=0;b<a.length;++b)d.push(m(a[b], +k));this.addTransformations(d)}}},addElementCallback:function(a){if(!this.elementCallbacks)this.elementCallbacks=[];this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return true;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);this.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)?this.check(a.requiredContent):true},addTransformations:function(a){var b, +c;if(!this.disabled&&a){var d=this._.transformations,k;for(k=0;k<a.length;++k){b=a[k];var e=void 0,m=void 0,f=void 0,g=void 0,D=void 0,h=void 0;c=[];for(m=0;m<b.length;++m){f=b[m];if(typeof f=="string"){f=f.split(/\s*:\s*/);g=f[0];D=null;h=f[1]}else{g=f.check;D=f.left;h=f.right}if(!e){e=f;e=e.element?e.element:g?g.match(/^([a-z0-9]+)/i)[0]:e.left.getDefinition().element}D instanceof CKEDITOR.style&&(D=F(D));c.push({check:g==e?null:g,left:D,right:typeof h=="string"?p(h):h})}b=e;d[b]||(d[b]=[]);d[b].push(c)}}}, +check:function(a,b,c){if(this.disabled)return true;if(CKEDITOR.tools.isArray(a)){for(var d=a.length;d--;)if(this.check(a[d],b,c))return true;return false}var k,e;if(typeof a=="string"){e=a+"<"+(b===false?"0":"1")+(c?"1":"0")+">";if(e in this._.cachedChecks)return this._.cachedChecks[e];d=g(a).$1;k=d.styles;var m=d.classes;d.name=d.elements;d.classes=m=m?m.split(/\s*,\s*/):[];d.styles=n(k);d.attributes=n(d.attributes);d.children=[];m.length&&(d.attributes["class"]=m.join(" "));if(k)d.attributes.style= +CKEDITOR.tools.writeCssText(d.styles);k=d}else{d=a.getDefinition();k=d.styles;m=d.attributes||{};if(k){k=L(k);m.style=CKEDITOR.tools.writeCssText(k,true)}else k={};k={name:d.element,attributes:m,classes:m["class"]?m["class"].split(/\s+/):[],styles:k,children:[]}}var m=CKEDITOR.tools.clone(k),f=[],p;if(b!==false&&(p=this._.transformations[k.name])){for(d=0;d<p.length;++d)s(this,k,p[d]);q(k)}y(this,m,f,{doFilter:true,doTransform:b!==false,skipRequired:!c,skipFinalValidation:!c});b=f.length>0?false: +CKEDITOR.tools.objectCompare(k.attributes,m.attributes,true)?true:false;typeof a=="string"&&(this._.cachedChecks[e]=b);return b},getAllowedEnterMode:function(){var a=["p","div","br"],b={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(c,d){var k=a.slice(),e;if(this.check(K[c]))return c;for(d||(k=k.reverse());e=k.pop();)if(this.check(e))return b[e];return CKEDITOR.ENTER_BR}}(),destroy:function(){delete CKEDITOR.filter.instances[this.id];delete this._;delete this.allowedContent; +delete this.disallowedContent}};var C={styles:1,attributes:1,classes:1},x={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},D=/^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,G={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},M=/^cke:(object|embed|param)$/,aa=/^(object|embed|param)$/,U=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,"width");this.lengthToStyle(a, +"height")},sizeToAttribute:function(a){this.lengthToAttribute(a,"width");this.lengthToAttribute(a,"height")},lengthToStyle:function(a,b,c){c=c||b;if(!(c in a.styles)){var d=a.attributes[b];if(d){/^\d+$/.test(d)&&(d=d+"px");a.styles[c]=d}}delete a.attributes[b]},lengthToAttribute:function(a,b,c){c=c||b;if(!(c in a.attributes)){var d=a.styles[b],k=d&&d.match(/^(\d+)(?:\.\d*)?px$/);k?a.attributes[c]=k[1]:d==u&&(a.attributes[c]=u)}delete a.styles[b]},alignmentToStyle:function(a){if(!("float"in a.styles)){var b= +a.attributes.align;if(b=="left"||b=="right")a.styles["float"]=b}delete a.attributes.align},alignmentToAttribute:function(a){if(!("align"in a.attributes)){var b=a.styles["float"];if(b=="left"||b=="right")a.attributes.align=b}delete a.styles["float"]},matchesStyle:k,transform:function(a,b){if(typeof b=="string")a.name=b;else{var c=b.getDefinition(),d=c.styles,k=c.attributes,e,m,f,g;a.name=c.element;for(e in k)if(e=="class"){c=a.classes.join("|");for(f=k[e].split(/\s+/);g=f.pop();)c.indexOf(g)==-1&& +a.classes.push(g)}else a.attributes[e]=k[e];for(m in d)a.styles[m]=d[m]}}}})(); +(function(){CKEDITOR.focusManager=function(a){if(a.focusManager)return a.focusManager;this.hasFocus=false;this.currentActive=null;this._={editor:a};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(a){this._.timer&&clearTimeout(this._.timer);if(a)this.currentActive=a;if(!this.hasFocus&&!this._.locked){(a=CKEDITOR.currentInstance)&&a.focusManager.blur(1);this.hasFocus=true;(a=this._.editor.container)&&a.addClass("cke_focus");this._.editor.fire("focus")}}, +lock:function(){this._.locked=1},unlock:function(){delete this._.locked},blur:function(a){function d(){if(this.hasFocus){this.hasFocus=false;var a=this._.editor.container;a&&a.removeClass("cke_focus");this._.editor.fire("blur")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var b=CKEDITOR.focusManager._.blurDelay;a||!b?d.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer;d.call(this)},b,this)}},add:function(a,d){var b=a.getCustomData("focusmanager");if(!b|| +b!=this){b&&b.remove(a);var b="focus",c="blur";if(d)if(CKEDITOR.env.ie){b="focusin";c="focusout"}else CKEDITOR.event.useCapture=1;var e={blur:function(){a.equals(this.currentActive)&&this.blur()},focus:function(){this.focus(a)}};a.on(b,e.focus,this);a.on(c,e.blur,this);if(d)CKEDITOR.event.useCapture=0;a.setCustomData("focusmanager",this);a.setCustomData("focusmanager_handlers",e)}},remove:function(a){a.removeCustomData("focusmanager");var d=a.removeCustomData("focusmanager_handlers");a.removeListener("blur", +d.blur);a.removeListener("focus",d.focus)}}})();CKEDITOR.keystrokeHandler=function(a){if(a.keystrokeHandler)return a.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:a};return this}; +(function(){var a,d=function(b){var b=b.data,d=b.getKeystroke(),f=this.keystrokes[d],h=this._.editor;a=h.fire("key",{keyCode:d,domEvent:b})===false;if(!a){f&&(a=h.execCommand(f,{from:"keystrokeHandler"})!==false);a||(a=!!this.blockedKeystrokes[d])}a&&b.preventDefault(true);return!a},b=function(b){if(a){a=false;b.data.preventDefault(true)}};CKEDITOR.keystrokeHandler.prototype={attach:function(a){a.on("keydown",d,this);if(CKEDITOR.env.gecko&&CKEDITOR.env.mac)a.on("keypress",b,this)}}})(); +(function(){CKEDITOR.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,is:1,it:1,ja:1,ka:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,"zh-cn":1,zh:1},rtl:{ar:1,fa:1,he:1,ku:1,ug:1},load:function(a,d,b){if(!a||!CKEDITOR.lang.languages[a])a=this.detect(d, +a);var c=this,d=function(){c[a].dir=c.rtl[a]?"rtl":"ltr";b(a,c[a])};this[a]?d():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+a+".js"),d,this)},detect:function(a,d){var b=this.languages,d=d||navigator.userLanguage||navigator.language||a,c=d.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),e=c[1],c=c[2];b[e+"-"+c]?e=e+"-"+c:b[e]||(e=null);CKEDITOR.lang.detect=e?function(){return e}:function(a){return a};return e||a}}})(); +CKEDITOR.scriptLoader=function(){var a={},d={};return{load:function(b,c,e,f){var h=typeof b=="string";h&&(b=[b]);e||(e=CKEDITOR);var i=b.length,j=[],n=[],g=function(a){c&&(h?c.call(e,a):c.call(e,j,n))};if(i===0)g(true);else{var A=function(a,b){(b?j:n).push(a);if(--i<=0){f&&CKEDITOR.document.getDocumentElement().removeStyle("cursor");g(b)}},r=function(b,c){a[b]=1;var e=d[b];delete d[b];for(var f=0;f<e.length;f++)e[f](b,c)},y=function(b){if(a[b])A(b,true);else{var e=d[b]||(d[b]=[]);e.push(A);if(!(e.length> +1)){var f=new CKEDITOR.dom.element("script");f.setAttributes({type:"text/javascript",src:b});if(c)if(CKEDITOR.env.ie&&CKEDITOR.env.version<11)f.$.onreadystatechange=function(){if(f.$.readyState=="loaded"||f.$.readyState=="complete"){f.$.onreadystatechange=null;r(b,true)}};else{f.$.onload=function(){setTimeout(function(){r(b,true)},0)};f.$.onerror=function(){r(b,false)}}f.appendTo(CKEDITOR.document.getHead())}}};f&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var o=0;o<i;o++)y(b[o])}}, +queue:function(){function a(){var b;(b=c[0])&&this.load(b.scriptUrl,b.callback,CKEDITOR,0)}var c=[];return function(d,f){var h=this;c.push({scriptUrl:d,callback:function(){f&&f.apply(this,arguments);c.shift();a.call(h)}});c.length==1&&a.call(this)}}()}}();CKEDITOR.resourceManager=function(a,d){this.basePath=a;this.fileName=d;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}}; +CKEDITOR.resourceManager.prototype={add:function(a,d){if(this.registered[a])throw'[CKEDITOR.resourceManager.add] The resource name "'+a+'" is already registered.';var b=this.registered[a]=d||{};b.name=a;b.path=this.getPath(a);CKEDITOR.fire(a+CKEDITOR.tools.capitalize(this.fileName)+"Ready",b);return this.get(a)},get:function(a){return this.registered[a]||null},getPath:function(a){var d=this.externals[a];return CKEDITOR.getUrl(d&&d.dir||this.basePath+a+"/")},getFilePath:function(a){var d=this.externals[a]; +return CKEDITOR.getUrl(this.getPath(a)+(d?d.file:this.fileName+".js"))},addExternal:function(a,d,b){for(var a=a.split(","),c=0;c<a.length;c++){var e=a[c];b||(d=d.replace(/[^\/]+$/,function(a){b=a;return""}));this.externals[e]={dir:d,file:b||this.fileName+".js"}}},load:function(a,d,b){CKEDITOR.tools.isArray(a)||(a=a?[a]:[]);for(var c=this.loaded,e=this.registered,f=[],h={},i={},j=0;j<a.length;j++){var n=a[j];if(n)if(!c[n]&&!e[n]){var g=this.getFilePath(n);f.push(g);g in h||(h[g]=[]);h[g].push(n)}else i[n]= +this.get(n)}CKEDITOR.scriptLoader.load(f,function(a,e){if(e.length)throw'[CKEDITOR.resourceManager.load] Resource name "'+h[e[0]].join(",")+'" was not found at "'+e[0]+'".';for(var f=0;f<a.length;f++)for(var g=h[a[f]],j=0;j<g.length;j++){var n=g[j];i[n]=this.get(n);c[n]=1}d.call(b,i)},this)}};CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin"); +CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,function(a){var d={};return function(b,c,e){var f={},h=function(b){a.call(this,b,function(a){CKEDITOR.tools.extend(f,a);var b=[],g;for(g in a){var i=a[g],r=i&&i.requires;if(!d[g]){if(i.icons)for(var y=i.icons.split(","),o=y.length;o--;)CKEDITOR.skin.addIcon(y[o],i.path+"icons/"+(CKEDITOR.env.hidpi&&i.hidpi?"hidpi/":"")+y[o]+".png");d[g]=1}if(r){r.split&&(r=r.split(","));for(i=0;i<r.length;i++)f[r[i]]||b.push(r[i])}}if(b.length)h.call(this, +b);else{for(g in f){i=f[g];if(i.onLoad&&!i.onLoad._called){i.onLoad()===false&&delete f[g];i.onLoad._called=1}}c&&c.call(e||window,f)}},this)};h.call(this,b)}});CKEDITOR.plugins.setLang=function(a,d,b){var c=this.get(a),a=c.langEntries||(c.langEntries={}),c=c.lang||(c.lang=[]);c.split&&(c=c.split(","));CKEDITOR.tools.indexOf(c,d)==-1&&c.push(d);a[d]=b};CKEDITOR.ui=function(a){if(a.ui)return a.ui;this.items={};this.instances={};this.editor=a;this._={handlers:{}};return this}; +CKEDITOR.ui.prototype={add:function(a,d,b){b.name=a.toLowerCase();var c=this.items[a]={type:d,command:b.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(c,b)},get:function(a){return this.instances[a]},create:function(a){var d=this.items[a],b=d&&this._.handlers[d.type],c=d&&d.command&&this.editor.getCommand(d.command),b=b&&b.create.apply(this,d.args);this.instances[a]=b;c&&c.uiItems.push(b);if(b&&!b.type)b.type=d.type;return b},addHandler:function(a,d){this._.handlers[a]= +d},space:function(a){return CKEDITOR.document.getById(this.spaceId(a))},spaceId:function(a){return this.editor.id+"_"+a}};CKEDITOR.event.implementOn(CKEDITOR.ui); +(function(){function a(a,c,f){CKEDITOR.event.call(this);a=a&&CKEDITOR.tools.clone(a);if(c!==void 0){if(c instanceof CKEDITOR.dom.element){if(!f)throw Error("One of the element modes must be specified.");}else throw Error("Expect element of type CKEDITOR.dom.element.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&f==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");if(!(f==CKEDITOR.ELEMENT_MODE_INLINE?c.is(CKEDITOR.dtd.$editable)||c.is("textarea"):f==CKEDITOR.ELEMENT_MODE_REPLACE? +!c.is(CKEDITOR.dtd.$nonBodyContent):1))throw Error('The specified element mode is not supported on element: "'+c.getName()+'".');this.element=c;this.elementMode=f;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(c.getId()||c.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};this.templates={};this.name=this.name||d();this.id=CKEDITOR.tools.getNextId();this.status="unloaded";this.config=CKEDITOR.tools.prototypedCopy(CKEDITOR.config);this.ui=new CKEDITOR.ui(this); +this.focusManager=new CKEDITOR.focusManager(this);this.keystrokeHandler=new CKEDITOR.keystrokeHandler(this);this.on("readOnly",b);this.on("selectionChange",function(a){e(this,a.data.path)});this.on("activeFilterChange",function(){e(this,this.elementPath(),true)});this.on("mode",b);this.on("instanceReady",function(){this.config.startupFocus&&this.focus()});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){h(this,a)},0,this)}function d(){do var a="editor"+ +++r;while(CKEDITOR.instances[a]);return a}function b(){var a=this.commands,b;for(b in a)c(this,a[b])}function c(a,b){b[b.startDisabled?"disable":a.readOnly&&!b.readOnly?"disable":b.modes[a.mode]?"enable":"disable"]()}function e(a,b,c){if(b){var d,e,f=a.commands;for(e in f){d=f[e];(c||d.contextSensitive)&&d.refresh(a,b)}}}function f(a){var b=a.config.customConfig;if(!b)return false;var b=CKEDITOR.getUrl(b),c=y[b]||(y[b]={});if(c.fn){c.fn.call(a,a.config);(CKEDITOR.getUrl(a.config.customConfig)==b|| +!f(a))&&a.fireOnce("customConfigLoaded")}else CKEDITOR.scriptLoader.queue(b,function(){c.fn=CKEDITOR.editorConfig?CKEDITOR.editorConfig:function(){};f(a)});return true}function h(a,b){a.on("customConfigLoaded",function(){if(b){if(b.on)for(var c in b.on)a.on(c,b.on[c]);CKEDITOR.tools.extend(a.config,b,true);delete a.config.on}c=a.config;a.readOnly=c.readOnly?true:a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.is("textarea")?a.element.hasAttribute("disabled")||a.element.hasAttribute("readonly"): +a.element.isReadOnly():a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?a.element.hasAttribute("disabled")||a.element.hasAttribute("readonly"):false;a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?!(a.element.is("textarea")||CKEDITOR.dtd[a.element.getName()].p):false;a.tabIndex=c.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:c.enterMode;a.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:c.shiftEnterMode; +if(c.skin)CKEDITOR.skinName=c.skin;a.fireOnce("configLoaded");a.dataProcessor=new CKEDITOR.htmlDataProcessor(a);a.filter=a.activeFilter=new CKEDITOR.filter(a);i(a)});if(b&&b.customConfig!=null)a.config.customConfig=b.customConfig;f(a)||a.fireOnce("customConfigLoaded")}function i(a){CKEDITOR.skin.loadPart("editor",function(){j(a)})}function j(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(b,c){var d=a.config.title;a.langCode=b;a.lang=CKEDITOR.tools.prototypedCopy(c);a.title= +typeof d=="string"||d===false?d:[a.lang.editor,a.name].join(", ");if(!a.config.contentsLangDirection)a.config.contentsLangDirection=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir;a.fire("langLoaded");n(a)})}function n(a){a.getStylesSet(function(b){a.once("loaded",function(){a.fire("stylesSet",{styles:b})},null,null,1);g(a)})}function g(a){var b=a.config,c=b.plugins,d=b.extraPlugins,e=b.removePlugins;if(d)var f=RegExp("(?:^|,)(?:"+d.replace(/\s*,\s*/g,"|")+")(?=,|$)", +"g"),c=c.replace(f,""),c=c+(","+d);if(e)var g=RegExp("(?:^|,)(?:"+e.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(g,"");CKEDITOR.env.air&&(c=c+",adobeair");CKEDITOR.plugins.load(c.split(","),function(c){var d=[],e=[],f=[];a.plugins=c;for(var p in c){var h=c[p],z=h.lang,i=null,j=h.requires,u;CKEDITOR.tools.isArray(j)&&(j=j.join(","));if(j&&(u=j.match(g)))for(;j=u.pop();)CKEDITOR.tools.setTimeout(function(a,b){throw Error('Plugin "'+a.replace(",","")+'" cannot be removed from the plugins list, because it\'s required by "'+ +b+'" plugin.');},0,null,[j,p]);if(z&&!a.lang[p]){z.split&&(z=z.split(","));if(CKEDITOR.tools.indexOf(z,a.langCode)>=0)i=a.langCode;else{i=a.langCode.replace(/-.*/,"");i=i!=a.langCode&&CKEDITOR.tools.indexOf(z,i)>=0?i:CKEDITOR.tools.indexOf(z,"en")>=0?"en":z[0]}if(!h.langEntries||!h.langEntries[i])f.push(CKEDITOR.getUrl(h.path+"lang/"+i+".js"));else{a.lang[p]=h.langEntries[i];i=null}}e.push(i);d.push(h)}CKEDITOR.scriptLoader.load(f,function(){for(var c=["beforeInit","init","afterInit"],f=0;f<c.length;f++)for(var g= +0;g<d.length;g++){var p=d[g];f===0&&(e[g]&&p.lang&&p.langEntries)&&(a.lang[p.name]=p.langEntries[e[g]]);if(p[c[f]])p[c[f]](a)}a.fireOnce("pluginsLoaded");b.keystrokes&&a.setKeystroke(a.config.keystrokes);for(g=0;g<a.config.blockedKeystrokes.length;g++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[g]]=1;a.status="loaded";a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)})})}function A(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData(); +this.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is("textarea")?a.setValue(b):a.setHtml(b);return true}return false}a.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=a;var r=0,y={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{addCommand:function(a,b){b.name=a.toLowerCase();var d=new CKEDITOR.command(this,b);this.mode&&c(this,d);return this.commands[a]=d},_attachToForm:function(){function a(d){b.updateElement();b._.required&&(!c.getValue()&&b.fire("required")===false)&&d.data.preventDefault()} +var b=this,c=b.element,d=new CKEDITOR.dom.element(c.$.form);if(c.is("textarea")&&d){d.on("submit",a);if(d.$.submit&&d.$.submit.call&&d.$.submit.apply)d.$.submit=CKEDITOR.tools.override(d.$.submit,function(b){return function(){a();b.apply?b.apply(this):b()}});b.on("destroy",function(){d.removeListener("submit",a)})}},destroy:function(a){this.fire("beforeDestroy");!a&&A.call(this);this.editable(null);this.filter.destroy();delete this.filter;delete this.activeFilter;this.status="destroyed";this.fire("destroy"); +this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire("instanceDestroyed",null,this)},elementPath:function(a){if(!a){a=this.getSelection();if(!a)return null;a=a.getStartElement()}return a?new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,b){var c=this.getCommand(a),d={name:a,commandData:b,command:c};if(c&&c.state!=CKEDITOR.TRISTATE_DISABLED&&this.fire("beforeCommandExec",d)!==false){d.returnValue= +c.exec(d.commandData);if(!c.async&&this.fire("afterCommandExec",d)!==false)return d.returnValue}return false},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire("beforeGetData");var b=this._.data;if(typeof b!="string")b=(b=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?b.is("textarea")?b.getValue():b.getHtml():"";b={dataValue:b};!a&&this.fire("getData",b);return b.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");if(typeof a!="string")a= +(a=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?a.is("textarea")?a.getValue():a.getHtml():"";return a},loadSnapshot:function(a){this.fire("loadSnapshot",a)},setData:function(a,b,c){var d=true,e=b;if(b&&typeof b=="object"){c=b.internal;e=b.callback;d=!b.noSnapshot}!c&&d&&this.fire("saveSnapshot");if(e||!c)this.once("dataReady",function(a){!c&&d&&this.fire("saveSnapshot");e&&e.call(a.editor)});a={dataValue:a};!c&&this.fire("setData",a);this._.data=a.dataValue;!c&&this.fire("afterSetData", +a)},setReadOnly:function(a){a=a==null||a;if(this.readOnly!=a){this.readOnly=a;this.keystrokeHandler.blockedKeystrokes[8]=+a;this.editable().setReadOnly(a);this.fire("readOnly")}},insertHtml:function(a,b,c){this.fire("insertHtml",{dataValue:a,mode:b,range:c})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement",a)},getSelectedHtml:function(a){var b=this.editable(),c=this.getSelection(),c=c&&c.getRanges();if(!b||!c||c.length===0)return null;b=b.getHtmlFromRange(c[0]); +return a?b.getHtml():b},extractSelectedHtml:function(a,b){var c=this.editable(),d=this.getSelection().getRanges();if(!c||d.length===0)return null;d=d[0];c=c.extractHtmlFromRange(d,b);b||this.getSelection().selectRanges([d]);return a?c.getHtml():c},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return this.status=="ready"&&this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return A.call(this)},setKeystroke:function(){for(var a= +this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],c,d,e=b.length;e--;){c=b[e];d=0;if(CKEDITOR.tools.isArray(c)){d=c[1];c=c[0]}d?a[c]=d:delete a[c]}},addFeature:function(a){return this.filter.addFeature(a)},setActiveFilter:function(a){if(!a)a=this.filter;if(this.activeFilter!==a){this.activeFilter=a;this.fire("activeFilterChange");a===this.filter?this.setActiveEnterMode(null,null):this.setActiveEnterMode(a.getAllowedEnterMode(this.enterMode), +a.getAllowedEnterMode(this.shiftEnterMode,true))}},setActiveEnterMode:function(a,b){a=a?this.blockless?CKEDITOR.ENTER_BR:a:this.enterMode;b=b?this.blockless?CKEDITOR.ENTER_BR:b:this.shiftEnterMode;if(this.activeEnterMode!=a||this.activeShiftEnterMode!=b){this.activeEnterMode=a;this.activeShiftEnterMode=b;this.fire("activeEnterModeChange")}},showNotification:function(a){alert(a)}})})();CKEDITOR.ELEMENT_MODE_NONE=0;CKEDITOR.ELEMENT_MODE_REPLACE=1;CKEDITOR.ELEMENT_MODE_APPENDTO=2; +CKEDITOR.ELEMENT_MODE_INLINE=3;CKEDITOR.htmlParser=function(){this._={htmlPartsRegex:/<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--\>)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}}; +(function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,d={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var c,e,f=0,h;c=this._.htmlPartsRegex.exec(b);){e=c.index;if(e>f){f=b.substring(f,e);if(h)h.push(f);else this.onText(f)}f= +this._.htmlPartsRegex.lastIndex;if(e=c[1]){e=e.toLowerCase();if(h&&CKEDITOR.dtd.$cdata[e]){this.onCDATA(h.join(""));h=null}if(!h){this.onTagClose(e);continue}}if(h)h.push(c[0]);else if(e=c[3]){e=e.toLowerCase();if(!/="/.test(e)){var i={},j,n=c[4];c=!!c[5];if(n)for(;j=a.exec(n);){var g=j[1].toLowerCase();j=j[2]||j[3]||j[4]||"";i[g]=!j&&d[g]?g:CKEDITOR.tools.htmlDecodeAttr(j)}this.onTagOpen(e,i,c);!h&&CKEDITOR.dtd.$cdata[e]&&(h=[])}}else if(e=c[2])this.onComment(e)}if(b.length>f)this.onText(b.substring(f, +b.length))}}})(); +CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(a){this._.output.push("<",a)},openTagClose:function(a,d){d?this._.output.push(" />"):this._.output.push(">")},attribute:function(a,d){typeof d=="string"&&(d=CKEDITOR.tools.htmlEncodeAttr(d));this._.output.push(" ",a,'="',d,'"')},closeTag:function(a){this._.output.push("</",a,">")},text:function(a){this._.output.push(a)},comment:function(a){this._.output.push("<\!--",a,"--\>")},write:function(a){this._.output.push(a)}, +reset:function(){this._.output=[];this._.indent=false},getHtml:function(a){var d=this._.output.join("");a&&this.reset();return d}}});"use strict"; +(function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var a=this.parent.children,d=CKEDITOR.tools.indexOf(a,this),b=this.previous,c=this.next;b&&(b.next=c);c&&(c.previous=b);a.splice(d,1);this.parent=null},replaceWith:function(a){var d=this.parent.children,b=CKEDITOR.tools.indexOf(d,this),c=a.previous=this.previous,e=a.next=this.next;c&&(c.next=a);e&&(e.previous=a);d[b]=a;a.parent=this.parent;this.parent=null},insertAfter:function(a){var d=a.parent.children, +b=CKEDITOR.tools.indexOf(d,a),c=a.next;d.splice(b+1,0,this);this.next=a.next;this.previous=a;a.next=this;c&&(c.previous=this);this.parent=a.parent},insertBefore:function(a){var d=a.parent.children,b=CKEDITOR.tools.indexOf(d,a);d.splice(b,0,this);this.next=a;(this.previous=a.previous)&&(a.previous.next=this);a.previous=this;this.parent=a.parent},getAscendant:function(a){var d=typeof a=="function"?a:typeof a=="string"?function(b){return b.name==a}:function(b){return b.name in a},b=this.parent;for(;b&& +b.type==CKEDITOR.NODE_ELEMENT;){if(d(b))return b;b=b.parent}return null},wrapWith:function(a){this.replaceWith(a);a.add(this);return a},getIndex:function(){return CKEDITOR.tools.indexOf(this.parent.children,this)},getFilterContext:function(a){return a||{}}}})();"use strict";CKEDITOR.htmlParser.comment=function(a){this.value=a;this._={isBlockLike:false}}; +CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(a,d){var b=this.value;if(!(b=a.onComment(d,b,this))){this.remove();return false}if(typeof b!="string"){this.replaceWith(b);return false}this.value=b;return true},writeHtml:function(a,d){d&&this.filter(d);a.comment(this.value)}});"use strict"; +(function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:false}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a,d){if(!(this.value=a.onText(d,this.value,this))){this.remove();return false}},writeHtml:function(a,d){d&&this.filter(d);a.text(this.value)}})})();"use strict"; +(function(){CKEDITOR.htmlParser.cdata=function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})})();"use strict";CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false}}; +(function(){function a(a){return a.attributes["data-cke-survive"]?false:a.name=="a"&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var d=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),b={ol:1,ul:1},c=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),e={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml= +function(f,h,i){function j(a){var b;if(t.length>0)for(var c=0;c<t.length;c++){var d=t[c],e=d.name,f=CKEDITOR.dtd[e],g=v.name&&CKEDITOR.dtd[v.name];if((!g||g[e])&&(!a||!f||f[a]||!CKEDITOR.dtd[a])){if(!b){n();b=1}d=d.clone();d.parent=v;v=d;t.splice(c,1);c--}else if(e==v.name){A(v,v.parent,1);c--}}}function n(){for(;w.length;)A(w.shift(),v)}function g(a){if(a._.isBlockLike&&a.name!="pre"&&a.name!="textarea"){var b=a.children.length,c=a.children[b-1],d;if(c&&c.type==CKEDITOR.NODE_TEXT)(d=CKEDITOR.tools.rtrim(c.value))? +c.value=d:a.children.length=b-1}}function A(b,c,d){var c=c||v||q,e=v;if(b.previous===void 0){if(r(c,b)){v=c;o.onTagOpen(i,{});b.returnPoint=c=v}g(b);(!a(b)||b.children.length)&&c.add(b);b.name=="pre"&&(l=false);b.name=="textarea"&&(B=false)}if(b.returnPoint){v=b.returnPoint;delete b.returnPoint}else v=d?c:e}function r(a,b){if((a==q||a.name=="body")&&i&&(!a.name||CKEDITOR.dtd[a.name][i])){var c,d;return(c=b.attributes&&(d=b.attributes["data-cke-real-element-type"])?d:b.name)&&c in CKEDITOR.dtd.$inline&& +!(c in CKEDITOR.dtd.head)&&!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function y(a,b){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==b||a=="dt"&&b=="dd"||a=="dd"&&b=="dt":false}var o=new CKEDITOR.htmlParser,q=h instanceof CKEDITOR.htmlParser.element?h:typeof h=="string"?new CKEDITOR.htmlParser.element(h):new CKEDITOR.htmlParser.fragment,t=[],w=[],v=q,B=q.name=="textarea",l=q.name=="pre";o.onTagOpen=function(e,k,f,g){k=new CKEDITOR.htmlParser.element(e,k);if(k.isUnknown&&f)k.isEmpty= +true;k.isOptionalClose=g;if(a(k))t.push(k);else{if(e=="pre")l=true;else{if(e=="br"&&l){v.add(new CKEDITOR.htmlParser.text("\n"));return}e=="textarea"&&(B=true)}if(e=="br")w.push(k);else{for(;;){g=(f=v.name)?CKEDITOR.dtd[f]||(v._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c;if(!k.isUnknown&&!v.isUnknown&&!g[e])if(v.isOptionalClose)o.onTagClose(f);else if(e in b&&f in b){f=v.children;(f=f[f.length-1])&&f.name=="li"||A(f=new CKEDITOR.htmlParser.element("li"),v);!k.returnPoint&&(k.returnPoint=v); +v=f}else if(e in CKEDITOR.dtd.$listItem&&!y(e,f))o.onTagOpen(e=="li"?"ul":"dl",{},0,1);else if(f in d&&!y(e,f)){!k.returnPoint&&(k.returnPoint=v);v=v.parent}else{f in CKEDITOR.dtd.$inline&&t.unshift(v);if(v.parent)A(v,v.parent,1);else{k.isOrphan=1;break}}else break}j(e);n();k.parent=v;k.isEmpty?A(k):v=k}}};o.onTagClose=function(a){for(var b=t.length-1;b>=0;b--)if(a==t[b].name){t.splice(b,1);return}for(var c=[],d=[],e=v;e!=q&&e.name!=a;){e._.isBlockLike||d.unshift(e);c.push(e);e=e.returnPoint||e.parent}if(e!= +q){for(b=0;b<c.length;b++){var f=c[b];A(f,f.parent)}v=e;e._.isBlockLike&&n();A(e,e.parent);if(e==v)v=v.parent;t=t.concat(d)}a=="body"&&(i=false)};o.onText=function(a){if((!v._.hasInlineStarted||w.length)&&!l&&!B){a=CKEDITOR.tools.ltrim(a);if(a.length===0)return}var b=v.name,f=b?CKEDITOR.dtd[b]||(v._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c;if(!B&&!f["#"]&&b in d){o.onTagOpen(e[b]||"");o.onText(a)}else{n();j();!l&&!B&&(a=a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));a=new CKEDITOR.htmlParser.text(a); +if(r(v,a))this.onTagOpen(i,{},0,1);v.add(a)}};o.onCDATA=function(a){v.add(new CKEDITOR.htmlParser.cdata(a))};o.onComment=function(a){n();j();v.add(new CKEDITOR.htmlParser.comment(a))};o.parse(f);for(n();v!=q;)A(v,v.parent,1);g(q);return q};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,b){isNaN(b)&&(b=this.children.length);var c=b>0?this.children[b-1]:null;if(c){if(a._.isBlockLike&&c.type==CKEDITOR.NODE_TEXT){c.value=CKEDITOR.tools.rtrim(c.value);if(c.value.length=== +0){this.children.pop();this.add(a);return}}c.next=a}a.previous=c;a.parent=this;this.children.splice(b,0,a);if(!this._.hasInlineStarted)this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT||a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike},filter:function(a,b){b=this.getFilterContext(b);a.onRoot(b,this);this.filterChildren(a,false,b)},filterChildren:function(a,b,c){if(this.childrenFilteredBy!=a.id){c=this.getFilterContext(c);if(b&&!this.parent)a.onRoot(c,this);this.childrenFilteredBy=a.id;for(b=0;b<this.children.length;b++)this.children[b].filter(a, +c)===false&&b--}},writeHtml:function(a,b){b&&this.filter(b);this.writeChildrenHtml(a)},writeChildrenHtml:function(a,b,c){var d=this.getFilterContext();if(c&&!this.parent&&b)b.onRoot(d,this);b&&this.filterChildren(b,false,d);b=0;c=this.children;for(d=c.length;b<d;b++)c[b].writeHtml(a)},forEach:function(a,b,c){if(!c&&(!b||this.type==b))var d=a(this);if(d!==false)for(var c=this.children,e=0;e<c.length;e++){d=c[e];d.type==CKEDITOR.NODE_ELEMENT?d.forEach(a,b):(!b||d.type==b)&&a(d)}},getFilterContext:function(a){return a|| +{}}}})();"use strict"; +(function(){function a(){this.rules=[]}function d(b,c,d,f){var h,i;for(h in c){(i=b[h])||(i=b[h]=new a);i.add(c[h],d,f)}}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(b){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new a;this.attributeNameRules=new a;this.elementsRules={};this.attributesRules={};this.textRules=new a;this.commentRules=new a;this.rootRules=new a;b&&this.addRules(b,10)},proto:{addRules:function(a,c){var e;if(typeof c=="number")e=c;else if(c&&"priority"in +c)e=c.priority;typeof e!="number"&&(e=10);typeof c!="object"&&(c={});a.elementNames&&this.elementNameRules.addMany(a.elementNames,e,c);a.attributeNames&&this.attributeNameRules.addMany(a.attributeNames,e,c);a.elements&&d(this.elementsRules,a.elements,e,c);a.attributes&&d(this.attributesRules,a.attributes,e,c);a.text&&this.textRules.add(a.text,e,c);a.comment&&this.commentRules.add(a.comment,e,c);a.root&&this.rootRules.add(a.root,e,c)},applyTo:function(a){a.filter(this)},onElementName:function(a,c){return this.elementNameRules.execOnName(a, +c)},onAttributeName:function(a,c){return this.attributeNameRules.execOnName(a,c)},onText:function(a,c,d){return this.textRules.exec(a,c,d)},onComment:function(a,c,d){return this.commentRules.exec(a,c,d)},onRoot:function(a,c){return this.rootRules.exec(a,c)},onElement:function(a,c){for(var d=[this.elementsRules["^"],this.elementsRules[c.name],this.elementsRules.$],f,h=0;h<3;h++)if(f=d[h]){f=f.exec(a,c,this);if(f===false)return null;if(f&&f!=c)return this.onNode(a,f);if(c.parent&&!c.name)break}return c}, +onNode:function(a,c){var d=c.type;return d==CKEDITOR.NODE_ELEMENT?this.onElement(a,c):d==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a,c.value)):d==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,c.value)):null},onAttribute:function(a,c,d,f){return(d=this.attributesRules[d])?d.exec(a,f,c,this):f}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,c,d){this.rules.splice(this.findIndex(c),0,{value:a,priority:c,options:d})},addMany:function(a, +c,d){for(var f=[this.findIndex(c),0],h=0,i=a.length;h<i;h++)f.push({value:a[h],priority:c,options:d});this.rules.splice.apply(this.rules,f)},findIndex:function(a){for(var c=this.rules,d=c.length-1;d>=0&&a<c[d].priority;)d--;return d+1},exec:function(a,c){var d=c instanceof CKEDITOR.htmlParser.node||c instanceof CKEDITOR.htmlParser.fragment,f=Array.prototype.slice.call(arguments,1),h=this.rules,i=h.length,j,n,g,A;for(A=0;A<i;A++){if(d){j=c.type;n=c.name}g=h[A];if(!(a.nonEditable&&!g.options.applyToAll|| +a.nestedEditable&&g.options.excludeNestedEditable)){g=g.value.apply(null,f);if(g===false||d&&g&&(g.name!=n||g.type!=j))return g;g!=null&&(f[0]=c=g)}}return c},execOnName:function(a,c){for(var d=0,f=this.rules,h=f.length,i;c&&d<h;d++){i=f[d];!(a.nonEditable&&!i.options.applyToAll||a.nestedEditable&&i.options.excludeNestedEditable)&&(c=c.replace(i.value[0],i.value[1]))}return c}}})(); +(function(){function a(a,d){function k(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function g(a,d){return function(e){if(e.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var g=[],p=b(e),D,h;if(p)for(m(p,1)&&g.push(p);p;){if(f(p)&&(D=c(p))&&m(D))if((h=c(D))&&!f(h))g.push(D);else{k(u).insertAfter(D);D.remove()}p=p.previous}for(p=0;p<g.length;p++)g[p].remove();if(g=!a||(typeof d=="function"?d(e):d)!==false)if(!u&&!CKEDITOR.env.needsBrFiller&& +e.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)g=false;else if(!u&&!CKEDITOR.env.needsBrFiller&&(document.documentMode>7||e.name in CKEDITOR.dtd.tr||e.name in CKEDITOR.dtd.$listItem))g=false;else{g=b(e);g=!g||e.name=="form"&&g.name=="input"}g&&e.add(k(a))}}}function m(a,b){if((!u||CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&a.name=="br"&&!a.attributes["data-cke-eol"])return true;var c;if(a.type==CKEDITOR.NODE_TEXT&&(c=a.value.match(t))){if(c.index){(new CKEDITOR.htmlParser.text(a.value.substring(0, +c.index))).insertBefore(a);a.value=c[0]}if(!CKEDITOR.env.needsBrFiller&&u&&(!b||a.parent.name in z))return true;if(!u)if((c=a.previous)&&c.name=="br"||!c||f(c))return true}return false}var p={elements:{}},u=d=="html",z=CKEDITOR.tools.extend({},l),C;for(C in z)"#"in v[C]||delete z[C];for(C in z)p.elements[C]=g(u,a.config.fillEmptyBlocks);p.root=g(u,false);p.elements.br=function(a){return function(b){if(b.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var d=b.attributes;if("data-cke-bogus"in d||"data-cke-eol"in +d)delete d["data-cke-bogus"];else{for(d=b.next;d&&e(d);)d=d.next;var g=c(b);!d&&f(b.parent)?h(b.parent,k(a)):f(d)&&(g&&!f(g))&&k(a).insertBefore(d)}}}}(u);return p}function d(a,b){return a!=CKEDITOR.ENTER_BR&&b!==false?a==CKEDITOR.ENTER_DIV?"div":"p":false}function b(a){for(a=a.children[a.children.length-1];a&&e(a);)a=a.previous;return a}function c(a){for(a=a.previous;a&&e(a);)a=a.previous;return a}function e(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&& +a.attributes["data-cke-bookmark"]}function f(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in l||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function h(a,b){var c=a.children[a.children.length-1];a.children.push(b);b.parent=a;if(c){c.next=b;b.previous=c}}function i(a){a=a.attributes;a.contenteditable!="false"&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function j(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}} +function n(a){return a.replace(p,function(a,b,c){return"<"+b+c.replace(I,function(a,b){return z.test(b)&&c.indexOf("data-cke-saved-"+b)==-1?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+">"})}function g(a,b){return a.replace(b,function(a,b,c){a.indexOf("<textarea")===0&&(a=b+y(c).replace(/</g,"&lt;").replace(/>/g,"&gt;")+"</textarea>");return"<cke:encoded>"+encodeURIComponent(a)+"</cke:encoded>"})}function A(a){return a.replace(u,function(a,b){return decodeURIComponent(b)})}function r(a){return a.replace(/<\!--(?!{cke_protected})[\s\S]+?--\>/g, +function(a){return"<\!--"+w+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\>"})}function y(a){return a.replace(/<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)})}function o(a,b){var c=b._.dataStore;return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function q(a,b){for(var c=[],d=b.config.protectedSource,k=b._.dataStore||(b._.dataStore= +{id:1}),e=/<\!--\{cke_temp(comment)?\}(\d*?)--\>/g,d=[/<script[\s\S]*?(<\/script>|$)/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<meta[\s\S]*?\/?>/gi].concat(d),a=a.replace(/<\!--[\s\S]*?--\>/g,function(a){return"<\!--{cke_tempcomment}"+(c.push(a)-1)+"--\>"}),f=0;f<d.length;f++)a=a.replace(d[f],function(a){a=a.replace(e,function(a,b,d){return c[d]});return/cke_temp(comment)?/.test(a)?a:"<\!--{cke_temp}"+(c.push(a)-1)+"--\>"});a=a.replace(e,function(a,b,d){return"<\!--"+w+(b?"{C}":"")+encodeURIComponent(c[d]).replace(/--/g, +"%2D%2D")+"--\>"});a=a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g,function(a){return a.replace(/<\!--\{cke_protected\}([^>]*)--\>/g,function(a,b){k[k.id]=decodeURIComponent(b);return"{cke_protected_"+k.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,c,d,k){return"<"+c+d+">"+o(y(k),b)+"</"+c+">"})}CKEDITOR.htmlDataProcessor=function(b){var c,e,f=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter; +this.htmlFilter=e=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(s);c.addRules(k,{applyToAll:true});c.addRules(a(b,"data"),{applyToAll:true});e.addRules(m);e.addRules(F,{applyToAll:true});e.addRules(a(b,"html"),{applyToAll:true});b.on("toHtml",function(a){var a=a.data,c=a.dataValue,k,c=q(c,b),c=g(c,E),c=n(c),c=g(c,L),c=c.replace(K,"$1cke:$2"),c=c.replace(x,"<cke:$1$2></cke:$1>"),c=c.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi, +"$1data-cke-"+CKEDITOR.rnd+"-$2");k=a.context||b.editable().getName();var e;if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&k=="pre"){k="div";c="<pre>"+c+"</pre>";e=1}k=b.document.createElement(k);k.setHtml("a"+c);c=k.getHtml().substr(1);c=c.replace(RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");e&&(c=c.replace(/^<pre>|<\/pre>$/gi,""));c=c.replace(C,"$1$2");c=A(c);c=y(c);k=a.fixForBody===false?false:d(a.enterMode,b.config.autoParagraph);c=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,k);if(k){e=c; +if(!e.children.length&&CKEDITOR.dtd[e.name][k]){k=new CKEDITOR.htmlParser.element(k);e.add(k)}}a.dataValue=c},null,null,5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,true,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(f.dataFilter,true)},null,null,10);b.on("toHtml",function(a){var a=a.data,b=a.dataValue,c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(true);a.dataValue= +r(b)},null,null,15);b.on("toDataFormat",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^<br *\/?>/i,""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,d(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(f.htmlFilter,true)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,false,true)},null,null,11);b.on("toDataFormat",function(a){var c= +a.data.dataValue,d=f.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(true);c=y(c);c=o(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,c,d){var k=this.editor,e,f,g,m;if(b&&typeof b=="object"){e=b.context;c=b.fixForBody;d=b.dontFilter;f=b.filter;g=b.enterMode;m=b.protectedWhitespaces}else e=b;!e&&e!==null&&(e=k.editable().getName());return k.fire("toHtml",{dataValue:a,context:e,fixForBody:c,dontFilter:d,filter:f||k.filter,enterMode:g||k.enterMode, +protectedWhitespaces:m}).dataValue},toDataFormat:function(a,b){var c,d,k;if(b){c=b.context;d=b.filter;k=b.enterMode}!c&&c!==null&&(c=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,filter:d||this.editor.filter,context:c,enterMode:k||this.editor.enterMode}).dataValue}};var t=/(?:&nbsp;|\xa0)$/,w="{cke_protected}",v=CKEDITOR.dtd,B=["caption","colgroup","col","thead","tfoot","tbody"],l=CKEDITOR.tools.extend({},v.$blockLimit,v.$block),s={elements:{input:i,textarea:i}}, +k={attributeNames:[[/^on/,"data-cke-pa-on"],[/^data-cke-expando$/,""]]},m={elements:{embed:function(a){var b=a.parent;if(b&&b.name=="object"){var c=b.attributes.width,b=b.attributes.height;if(c)a.attributes.width=c;if(b)a.attributes.height=b}},a:function(a){if(!a.children.length&&!a.attributes.name&&!a.attributes["data-cke-saved-name"])return false}}},F={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b= +a.attributes;if(b){if(b["data-cke-temp"])return false;for(var c=["name","href","src"],d,k=0;k<c.length;k++){d="data-cke-saved-"+c[k];d in b&&delete b[c[k]]}}return a},table:function(a){a.children.slice(0).sort(function(a,b){var c,d;if(a.type==CKEDITOR.NODE_ELEMENT&&b.type==a.type){c=CKEDITOR.tools.indexOf(B,a.name);d=CKEDITOR.tools.indexOf(B,b.name)}if(!(c>-1&&d>-1&&c!=d)){c=a.parent?a.getIndex():-1;d=b.parent?b.getIndex():-1}return c>d?1:-1})},param:function(a){a.children=[];a.isEmpty=true;return a}, +span:function(a){a.attributes["class"]=="Apple-style-span"&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},style:function(a){var b=a.children[0];if(b&&b.value)b.value=CKEDITOR.tools.trim(b.value);if(!a.attributes.type)a.attributes.type="text/css"},title:function(a){var b=a.children[0];!b&&h(a,b=new CKEDITOR.htmlParser.text);b.value=a.attributes["data-cke-title"]|| +""},input:j,textarea:j},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||false}}};if(CKEDITOR.env.ie)F.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})};var p=/<(a|area|img|input|source)\b([^>]*)>/gi,I=/([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,z=/^(href|src|name)$/i,L=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,E=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi, +u=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,K=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,C=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,x=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi})();"use strict"; +CKEDITOR.htmlParser.element=function(a,d){this.name=a;this.attributes=d||{};this.children=[];var b=a||"",c=b.match(/^cke:(.*)/);c&&(b=c[1]);b=!(!CKEDITOR.dtd.$nonBodyContent[b]&&!CKEDITOR.dtd.$block[b]&&!CKEDITOR.dtd.$listItem[b]&&!CKEDITOR.dtd.$tableContent[b]&&!(CKEDITOR.dtd.$nonEditable[b]||b=="br"));this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}}; +CKEDITOR.htmlParser.cssStyle=function(a){var d={};((a instanceof CKEDITOR.htmlParser.element?a.attributes.style:a)||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,c,e){c=="font-family"&&(e=e.replace(/["']/g,""));d[c.toLowerCase()]=e});return{rules:d,populate:function(a){var c=this.toString();if(c)a instanceof CKEDITOR.dom.element?a.setAttribute("style",c):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=c:a.style=c},toString:function(){var a=[],c; +for(c in d)d[c]&&a.push(c,":",d[c],";");return a.join("")}}}; +(function(){function a(a){return function(b){return b.type==CKEDITOR.NODE_ELEMENT&&(typeof a=="string"?b.name==a:b.name in a)}}var d=function(a,b){a=a[0];b=b[0];return a<b?-1:a>b?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var d=this,h,i,b=d.getFilterContext(b);if(b.off)return true; +if(!d.parent)a.onRoot(b,d);for(;;){h=d.name;if(!(i=a.onElementName(b,h))){this.remove();return false}d.name=i;if(!(d=a.onElement(b,d))){this.remove();return false}if(d!==this){this.replaceWith(d);return false}if(d.name==h)break;if(d.type!=CKEDITOR.NODE_ELEMENT){this.replaceWith(d);return false}if(!d.name){this.replaceWithChildren();return false}}h=d.attributes;var j,n;for(j in h){n=j;for(i=h[j];;)if(n=a.onAttributeName(b,j))if(n!=j){delete h[j];j=n}else break;else{delete h[j];break}n&&((i=a.onAttribute(b, +d,n,i))===false?delete h[n]:h[n]=i)}d.isEmpty||this.filterChildren(a,false,b);return true},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var f=this.name,h=[],i=this.attributes,j,n;a.openTag(f,i);for(j in i)h.push([j,i[j]]);a.sortAttributes&&h.sort(d);j=0;for(n=h.length;j<n;j++){i=h[j];a.attribute(i[0],i[1])}a.openTagClose(f,this.isEmpty);this.writeChildrenHtml(a);this.isEmpty||a.closeTag(f)},writeChildrenHtml:b.writeChildrenHtml,replaceWithChildren:function(){for(var a= +this.children,b=a.length;b;)a[--b].insertAfter(this);this.remove()},forEach:b.forEach,getFirst:function(b){if(!b)return this.children.length?this.children[0]:null;typeof b!="function"&&(b=a(b));for(var d=0,f=this.children.length;d<f;++d)if(b(this.children[d]))return this.children[d];return null},getHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml(a);return a.getHtml()},setHtml:function(a){for(var a=this.children=CKEDITOR.htmlParser.fragment.fromHtml(a).children,b=0, +d=a.length;b<d;++b)a[b].parent=this},getOuterHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeHtml(a);return a.getHtml()},split:function(a){for(var b=this.children.splice(a,this.children.length-a),d=this.clone(),h=0;h<b.length;++h)b[h].parent=d;d.children=b;if(b[0])b[0].previous=null;if(a>0)this.children[a-1].next=null;this.parent.add(d,this.getIndex()+1);return d},addClass:function(a){if(!this.hasClass(a)){var b=this.attributes["class"]||"";this.attributes["class"]=b+(b?" ":"")+ +a}},removeClass:function(a){var b=this.attributes["class"];if(b)(b=CKEDITOR.tools.trim(b.replace(RegExp("(?:\\s+|^)"+a+"(?:\\s+|$)")," ")))?this.attributes["class"]=b:delete this.attributes["class"]},hasClass:function(a){var b=this.attributes["class"];return!b?false:RegExp("(?:^|\\s)"+a+"(?=\\s|$)").test(b)},getFilterContext:function(a){var b=[];a||(a={off:false,nonEditable:false,nestedEditable:false});!a.off&&this.attributes["data-cke-processor"]=="off"&&b.push("off",true);!a.nonEditable&&this.attributes.contenteditable== +"false"?b.push("nonEditable",true):a.nonEditable&&(!a.nestedEditable&&this.attributes.contenteditable=="true")&&b.push("nestedEditable",true);if(b.length)for(var a=CKEDITOR.tools.copy(a),d=0;d<b.length;d=d+2)a[b[d]]=b[d+1];return a}},true)})(); +(function(){var a={},d=/{([^}]+)}/g,b=/([\\'])/g,c=/\n/g,e=/\r/g;CKEDITOR.template=function(f){if(a[f])this.output=a[f];else{var h=f.replace(b,"\\$1").replace(c,"\\n").replace(e,"\\r").replace(d,function(a,b){return"',data['"+b+"']==undefined?'{"+b+"}':data['"+b+"'],'"});this.output=a[f]=Function("data","buffer","return buffer?buffer.push('"+h+"'):['"+h+"'].join('');")}}})();delete CKEDITOR.loadFullCore;CKEDITOR.instances={};CKEDITOR.document=new CKEDITOR.dom.document(document); +CKEDITOR.add=function(a){CKEDITOR.instances[a.name]=a;a.on("focus",function(){if(CKEDITOR.currentInstance!=a){CKEDITOR.currentInstance=a;CKEDITOR.fire("currentInstance")}});a.on("blur",function(){if(CKEDITOR.currentInstance==a){CKEDITOR.currentInstance=null;CKEDITOR.fire("currentInstance")}});CKEDITOR.fire("instance",null,a)};CKEDITOR.remove=function(a){delete CKEDITOR.instances[a.name]}; +(function(){var a={};CKEDITOR.addTemplate=function(d,b){var c=a[d];if(c)return c;c={name:d,source:b};CKEDITOR.fire("template",c);return a[d]=new CKEDITOR.template(c.source)};CKEDITOR.getTemplate=function(d){return a[d]}})();(function(){var a=[];CKEDITOR.addCss=function(d){a.push(d)};CKEDITOR.getCss=function(){return a.join("\n")}})();CKEDITOR.on("instanceDestroyed",function(){CKEDITOR.tools.isEmpty(this.instances)&&CKEDITOR.fire("reset")});CKEDITOR.TRISTATE_ON=1;CKEDITOR.TRISTATE_OFF=2; +CKEDITOR.TRISTATE_DISABLED=0; +(function(){CKEDITOR.inline=function(a,d){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var b=new CKEDITOR.editor(d,a,CKEDITOR.ELEMENT_MODE_INLINE),c=a.is("textarea")?a:null;if(c){b.setData(c.getValue(),null,true);a=CKEDITOR.dom.element.createFromHtml('<div contenteditable="'+!!b.readOnly+'" class="cke_textarea_inline">'+c.getValue()+"</div>",CKEDITOR.document); +a.insertAfter(c);c.hide();c.$.form&&b._attachToForm()}else b.setData(a.getHtml(),null,true);b.on("loaded",function(){b.fire("uiReady");b.editable(a);b.container=a;b.ui.contentsElement=a;b.setData(b.getData(1));b.resetDirty();b.fire("contentDom");b.mode="wysiwyg";b.fire("mode");b.status="ready";b.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,b)},null,null,1E4);b.on("destroy",function(){if(c){b.container.clearCustomData();b.container.remove();c.show()}b.element.clearCustomData();delete b.element}); +return b};CKEDITOR.inlineAll=function(){var a,d,b;for(b in CKEDITOR.dtd.$editable)for(var c=CKEDITOR.document.getElementsByTag(b),e=0,f=c.count();e<f;e++){a=c.getItem(e);if(a.getAttribute("contenteditable")=="true"){d={element:a,config:{}};CKEDITOR.fire("inline",d)!==false&&CKEDITOR.inline(a,d.config)}}};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})})();CKEDITOR.replaceClass="ckeditor"; +(function(){function a(a,e,f,h){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var i=new CKEDITOR.editor(e,a,h);if(h==CKEDITOR.ELEMENT_MODE_REPLACE){a.setStyle("visibility","hidden");i._.required=a.hasAttribute("required");a.removeAttribute("required")}f&&i.setData(f,null,true);i.on("loaded",function(){b(i);h==CKEDITOR.ELEMENT_MODE_REPLACE&&(i.config.autoUpdateElement&& +a.$.form)&&i._attachToForm();i.setMode(i.config.startupMode,function(){i.resetDirty();i.status="ready";i.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,i)})});i.on("destroy",d);return i}function d(){var a=this.container,b=this.element;if(a){a.clearCustomData();a.remove()}if(b){b.clearCustomData();if(this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE){b.show();this._.required&&b.setAttribute("required","required")}delete this.element}}function b(a){var b=a.name,d=a.element,h=a.elementMode, +i=a.fire("uiSpace",{space:"top",html:""}).html,j=a.fire("uiSpace",{space:"bottom",html:""}).html,n=new CKEDITOR.template('<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" lang="{langCode}" role="application"'+(a.title?' aria-labelledby="cke_{name}_arialbl"':"")+">"+(a.title?'<span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span>':"")+'<{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>'), +b=CKEDITOR.dom.element.createFromHtml(n.output({id:a.id,name:b,langDir:a.lang.dir,langCode:a.langCode,voiceLabel:a.title,topHtml:i?'<span id="'+a.ui.spaceId("top")+'" class="cke_top cke_reset_all" role="presentation" style="height:auto">'+i+"</span>":"",contentId:a.ui.spaceId("contents"),bottomHtml:j?'<span id="'+a.ui.spaceId("bottom")+'" class="cke_bottom cke_reset_all" role="presentation">'+j+"</span>":"",outerEl:CKEDITOR.env.ie?"span":"div"}));if(h==CKEDITOR.ELEMENT_MODE_REPLACE){d.hide();b.insertAfter(d)}else d.append(b); +a.container=b;a.ui.contentsElement=a.ui.space("contents");i&&a.ui.space("top").unselectable();j&&a.ui.space("bottom").unselectable();d=a.config.width;h=a.config.height;d&&b.setStyle("width",CKEDITOR.tools.cssLength(d));h&&a.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(h));b.disableContextMenu();CKEDITOR.env.webkit&&b.on("focus",function(){a.focus()});a.fireOnce("uiReady")}CKEDITOR.replace=function(b,d){return a(b,d,null,CKEDITOR.ELEMENT_MODE_REPLACE)};CKEDITOR.appendTo=function(b, +d,f){return a(b,d,f,CKEDITOR.ELEMENT_MODE_APPENDTO)};CKEDITOR.replaceAll=function(){for(var a=document.getElementsByTagName("textarea"),b=0;b<a.length;b++){var d=null,h=a[b];if(h.name||h.id){if(typeof arguments[0]=="string"){if(!RegExp("(?:^|\\s)"+arguments[0]+"(?:$|\\s)").test(h.className))continue}else if(typeof arguments[0]=="function"){d={};if(arguments[0](h,d)===false)continue}this.replace(h,d)}}};CKEDITOR.editor.prototype.addMode=function(a,b){(this._.modes||(this._.modes={}))[a]=b};CKEDITOR.editor.prototype.setMode= +function(a,b){var d=this,h=this._.modes;if(!(a==d.mode||!h||!h[a])){d.fire("beforeSetMode",a);if(d.mode){var i=d.checkDirty(),h=d._.previousModeData,j,n=0;d.fire("beforeModeUnload");d.editable(0);d._.previousMode=d.mode;d._.previousModeData=j=d.getData(1);if(d.mode=="source"&&h==j){d.fire("lockSnapshot",{forceUpdate:true});n=1}d.ui.space("contents").setHtml("");d.mode=""}else d._.previousModeData=d.getData(1);this._.modes[a](function(){d.mode=a;i!==void 0&&!i&&d.resetDirty();n?d.fire("unlockSnapshot"): +a=="wysiwyg"&&d.fire("saveSnapshot");setTimeout(function(){d.fire("mode");b&&b.call(d)},0)})}};CKEDITOR.editor.prototype.resize=function(a,b,d,h){var i=this.container,j=this.ui.space("contents"),n=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement,h=h?this.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}):i;h.setSize("width",a,true);n&&(n.style.width="1%");var g=(h.$.offsetHeight||0)-(j.$.clientHeight||0),i=Math.max(b-(d?0:g), +0),b=d?b+g:b;j.setStyle("height",i+"px");n&&(n.style.width="100%");this.fire("resize",{outerHeight:b,contentsHeight:i,outerWidth:a||h.getSize("width")})};CKEDITOR.editor.prototype.getResizable=function(a){return a?this.ui.space("contents"):this.container};CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})})();CKEDITOR.config.startupMode="wysiwyg"; +(function(){var a,d,b,c;function e(a){var b=a.editor,c=a.data.path,d=c.blockLimit,e=a.data.selection,h=e.getRanges()[0],l;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)if(e=f(e,c)){e.appendBogus();l=CKEDITOR.env.ie}if(g(b,c.block,d)&&h.collapsed&&!h.getCommonAncestor().isReadOnly()){c=h.clone();c.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);d=new CKEDITOR.dom.walker(c);d.guard=function(a){return!i(a)||a.type==CKEDITOR.NODE_COMMENT||a.isReadOnly()};if(!d.checkForward()||c.checkStartOfBlock()&& +c.checkEndOfBlock()){b=h.fixBlock(true,b.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p");if(!CKEDITOR.env.needsBrFiller)(b=b.getFirst(i))&&(b.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(b.getText()).match(/^(?:&nbsp;|\xa0)$/))&&b.remove();l=1;a.cancel()}}l&&h.select()}function f(a,b){if(a.isFake)return 0;var c=b.block||b.blockLimit,d=c&&c.getLast(i);if(c&&c.isBlockBoundary()&&(!d||!(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()))&&!c.is("pre")&&!c.getBogus())return c}function h(a){var b=a.data.getTarget(); +if(b.is("input")){b=b.getAttribute("type");(b=="submit"||b=="reset")&&a.data.preventDefault()}}function i(a){return o(a)&&q(a)}function j(a,b){return function(c){var d=c.data.$.toElement||c.data.$.fromElement||c.data.$.relatedTarget,d=d&&d.nodeType==CKEDITOR.NODE_ELEMENT?new CKEDITOR.dom.element(d):null;(!d||!b.equals(d)&&!b.contains(d))&&a.call(this,c)}}function n(a){function b(a){return function(b,d){d&&(b.type==CKEDITOR.NODE_ELEMENT&&b.is(e))&&(c=b);if(!d&&i(b)&&(!a||!w(b)))return false}}var c, +d=a.getRanges()[0],a=a.root,e={table:1,ul:1,ol:1,dl:1};if(d.startPath().contains(e)){var g=d.clone();g.collapse(1);g.setStartAt(a,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(g);a.guard=b();a.checkBackward();if(c){g=d.clone();g.collapse();g.setEndAt(c,CKEDITOR.POSITION_AFTER_END);a=new CKEDITOR.dom.walker(g);a.guard=b(true);c=false;a.checkForward();return c}}return null}function g(a,b,c){return a.config.autoParagraph!==false&&a.activeEnterMode!=CKEDITOR.ENTER_BR&&(a.editable().equals(c)&& +!b||b&&b.getAttribute("contenteditable")=="true")}function A(a){return a.activeEnterMode!=CKEDITOR.ENTER_BR&&a.config.autoParagraph!==false?a.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p":false}function r(a){var b=a.editor;b.getSelection().scrollIntoView();setTimeout(function(){b.fire("saveSnapshot")},0)}function y(a,b,c){for(var d=a.getCommonAncestor(b),b=a=c?b:a;(a=a.getParent())&&!d.equals(a)&&a.getChildCount()==1;)b=a;b.remove()}CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element, +$:function(a,b){this.base(b.$||b);this.editor=a;this.status="unloaded";this.hasFocus=false;this.setup()},proto:{focus:function(){var a;if(CKEDITOR.env.webkit&&!this.hasFocus){a=this.editor._.previousActive||this.getDocument().getActive();if(this.contains(a)){a.focus();return}}try{this.$[CKEDITOR.env.ie&&this.getDocument().equals(CKEDITOR.document)?"setActive":"focus"]()}catch(b){if(!CKEDITOR.env.ie)throw b;}if(CKEDITOR.env.safari&&!this.isInline()){a=CKEDITOR.document.getActive();a.equals(this.getWindow().getFrame())|| +this.getWindow().focus()}},on:function(a,b){var c=Array.prototype.slice.call(arguments,0);if(CKEDITOR.env.ie&&/^focus|blur$/.exec(a)){a=a=="focus"?"focusin":"focusout";b=j(b,this);c[0]=a;c[1]=b}return CKEDITOR.dom.element.prototype.on.apply(this,c)},attachListener:function(a){!this._.listeners&&(this._.listeners=[]);var b=Array.prototype.slice.call(arguments,1),b=a.on.apply(a,b);this._.listeners.push(b);return b},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(b){}}, +restoreAttrs:function(){var a=this._.attrChanges,b,c;for(c in a)if(a.hasOwnProperty(c)){b=a[c];b!==null?this.setAttribute(c,b):this.removeAttribute(c)}},attachClass:function(a){var b=this.getCustomData("classes");if(!this.hasClass(a)){!b&&(b=[]);b.push(a);this.setCustomData("classes",b);this.addClass(a)}},changeAttr:function(a,b){var c=this.getAttribute(a);if(b!==c){!this._.attrChanges&&(this._.attrChanges={});a in this._.attrChanges||(this._.attrChanges[a]=c);this.setAttribute(a,b)}},insertText:function(a){this.editor.focus(); +this.insertHtml(this.transformPlainTextToHtml(a),"text")},transformPlainTextToHtml:function(a){var b=this.editor.getSelection().getStartElement().hasAscendant("pre",true)?CKEDITOR.ENTER_BR:this.editor.activeEnterMode;return CKEDITOR.tools.transformPlainTextToHtml(a,b)},insertHtml:function(a,b,c){var d=this.editor;d.focus();d.fire("saveSnapshot");c||(c=d.getSelection().getRanges()[0]);B(this,b||"html",a,c);c.select();r(this);this.editor.fire("afterInsertHtml",{})},insertHtmlIntoRange:function(a,b, +c){B(this,c||"html",a,b);this.editor.fire("afterInsertHtml",{intoRange:b})},insertElement:function(a,b){var c=this.editor;c.focus();c.fire("saveSnapshot");var d=c.activeEnterMode,c=c.getSelection(),e=a.getName(),e=CKEDITOR.dtd.$block[e];b||(b=c.getRanges()[0]);if(this.insertElementIntoRange(a,b)){b.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);if(e)if((e=a.getNext(function(a){return i(a)&&!w(a)}))&&e.type==CKEDITOR.NODE_ELEMENT&&e.is(CKEDITOR.dtd.$block))e.getDtd()["#"]?b.moveToElementEditStart(e): +b.moveToElementEditEnd(a);else if(!e&&d!=CKEDITOR.ENTER_BR){e=b.fixBlock(true,d==CKEDITOR.ENTER_DIV?"div":"p");b.moveToElementEditStart(e)}}c.selectRanges([b]);r(this)},insertElementIntoSelection:function(a){this.insertElement(a)},insertElementIntoRange:function(a,b){var c=this.editor,d=c.config.enterMode,e=a.getName(),g=CKEDITOR.dtd.$block[e];if(b.checkReadOnly())return false;b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})&& +l(b);var f,h;if(g)for(;(f=b.getCommonAncestor(0,1))&&(h=CKEDITOR.dtd[f.getName()])&&(!h||!h[e]);)if(f.getName()in CKEDITOR.dtd.span)b.splitElement(f);else if(b.checkStartOfBlock()&&b.checkEndOfBlock()){b.setStartBefore(f);b.collapse(true);f.remove()}else b.splitBlock(d==CKEDITOR.ENTER_DIV?"div":"p",c.editable());b.insertNode(a);return true},setData:function(a,b){b||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);this.fixInitialSelection();if(this.status=="unloaded")this.status="ready";this.editor.fire("dataReady")}, +getData:function(a){var b=this.getHtml();a||(b=this.editor.dataProcessor.toDataFormat(b));return b},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.removeClass("cke_editable");this.status="detached";var a=this.editor;this._.detach();delete a.document;delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},fixInitialSelection:function(){function a(){var b=c.getDocument().$,d=b.getSelection(),e;if(d.anchorNode&&d.anchorNode== +c.$)e=true;else if(CKEDITOR.env.webkit){var k=c.getDocument().getActive();k&&(k.equals(c)&&!d.anchorNode)&&(e=true)}if(e){e=new CKEDITOR.dom.range(c);e.moveToElementEditStart(c);b=b.createRange();b.setStart(e.startContainer.$,e.startOffset);b.collapse(true);d.removeAllRanges();d.addRange(b)}}function b(){var a=c.getDocument().$,d=a.selection,e=c.getDocument().getActive();if(d.type=="None"&&e.equals(c)){d=new CKEDITOR.dom.range(c);a=a.body.createTextRange();d.moveToElementEditStart(c);d=d.startContainer; +d.type!=CKEDITOR.NODE_ELEMENT&&(d=d.getParent());a.moveToElementText(d.$);a.collapse(true);a.select()}}var c=this;if(CKEDITOR.env.ie&&(CKEDITOR.env.version<9||CKEDITOR.env.quirks)){if(this.hasFocus){this.focus();b()}}else if(this.hasFocus){this.focus();a()}else this.once("focus",function(){a()},null,null,-999)},getHtmlFromRange:function(e){if(e.collapsed)return new CKEDITOR.dom.documentFragment(e.document);e={doc:this.getDocument(),range:e.clone()};a.detect(e,this);d.exclude(e);b.shrink(e);e.fragment= +e.range.cloneContents();c.rebuild(e,this);a.fix(e,this);return new CKEDITOR.dom.documentFragment(e.fragment.$)},extractHtmlFromRange:function(a,b){var c=s,d={range:a,doc:a.document},e=this.getHtmlFromRange(a);if(a.collapsed){a.optimize();return e}a.enlarge(CKEDITOR.ENLARGE_INLINE,1);c.table.detectPurge(d);d.bookmark=a.createBookmark();delete d.range;var g=this.editor.createRange();g.moveToPosition(d.bookmark.startNode,CKEDITOR.POSITION_BEFORE_START);d.targetBookmark=g.createBookmark();c.list.detectMerge(d, +this);c.table.detectRanges(d,this);c.block.detectMerge(d,this);if(d.tableContentsRanges){c.table.deleteRanges(d);a.moveToBookmark(d.bookmark);d.range=a}else{a.moveToBookmark(d.bookmark);d.range=a;a.extractContents(c.detectExtractMerge(d))}a.moveToBookmark(d.targetBookmark);a.optimize();c.fixUneditableRangePosition(a);c.list.merge(d,this);c.table.purge(d,this);c.block.merge(d,this);if(b){c=a.startPath();if(d=a.checkStartOfBlock())if(d=a.checkEndOfBlock())if(d=c.block)if(d=!a.root.equals(c.block)){a:{var d= +c.block.getElementsByTag("span"),g=0,f;if(d)for(;f=d.getItem(g++);)if(!q(f)){d=true;break a}d=false}d=!d}if(d){a.moveToPosition(c.block,CKEDITOR.POSITION_BEFORE_START);c.block.remove()}}else{c.autoParagraph(this.editor,a);t(a.startContainer)&&a.startContainer.appendBogus()}a.startContainer.mergeSiblings();return e},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")||a.config.ignoreEmptyParagraph!==false&&(b=b.replace(v,function(a, +b){return b}));a.setData(b,null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a,"beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&b.type=="Control"||this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode, +a.data.range)},this);this.attachListener(a,"insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?this.attachClass("cke_editable_inline"):(a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE||a.elementMode==CKEDITOR.ELEMENT_MODE_APPENDTO)&&this.attachClass("cke_editable_themed");this.attachClass("cke_contents_"+a.config.contentsLangDirection); +a.keystrokeHandler.blockedKeystrokes[8]=+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(){this.hasFocus=false},null,null,-1);this.on("focus",function(){this.hasFocus=true},null,null,-1);a.focusManager.add(this);if(this.equals(CKEDITOR.document.getActive())){this.hasFocus=true;a.once("contentDom",function(){a.focusManager.focus(this)},this)}this.isInline()&&this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=this.getDocument();a.window=this.getWindow();var b= +a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker);var c=a.config.contentsLangDirection;this.getDirection(1)!=c&&this.changeAttr("dir",c);var d=CKEDITOR.getCss();if(d){c=b.getHead();if(!c.getCustomData("stylesheet")){d=b.appendStyleText(d);d=new CKEDITOR.dom.element(d.ownerNode||d.owningElement);c.setCustomData("stylesheet",d);d.data("cke-temp",1)}}c=b.getCustomData("stylesheet_ref")||0;b.setCustomData("stylesheet_ref",c+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling); +this.attachListener(this,"click",function(a){var a=a.data,b=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");b&&(a.$.button!=2&&b.isReadOnly())&&a.preventDefault()});var e={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return true;var c=b.data.domEvent.getKey(),d;if(c in e){var b=a.getSelection(),g,f=b.getRanges()[0],h=f.startPath(),m,p,l,c=c==8;if(CKEDITOR.env.ie&&CKEDITOR.env.version<11&&(g=b.getSelectedElement())||(g=n(b))){a.fire("saveSnapshot");f.moveToPosition(g, +CKEDITOR.POSITION_BEFORE_START);g.remove();f.select();a.fire("saveSnapshot");d=1}else if(f.collapsed)if((m=h.block)&&(l=m[c?"getPrevious":"getNext"](o))&&l.type==CKEDITOR.NODE_ELEMENT&&l.is("table")&&f[c?"checkStartOfBlock":"checkEndOfBlock"]()){a.fire("saveSnapshot");f[c?"checkEndOfBlock":"checkStartOfBlock"]()&&m.remove();f["moveToElementEdit"+(c?"End":"Start")](l);f.select();a.fire("saveSnapshot");d=1}else if(h.blockLimit&&h.blockLimit.is("td")&&(p=h.blockLimit.getAscendant("table"))&&f.checkBoundaryOfElement(p, +c?CKEDITOR.START:CKEDITOR.END)&&(l=p[c?"getPrevious":"getNext"](o))){a.fire("saveSnapshot");f["moveToElementEdit"+(c?"End":"Start")](l);f.checkStartOfBlock()&&f.checkEndOfBlock()?l.remove():f.select();a.fire("saveSnapshot");d=1}else if((p=h.contains(["td","th","caption"]))&&f.checkBoundaryOfElement(p,c?CKEDITOR.START:CKEDITOR.END))d=1}return!d});a.blockless&&(CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)&&this.attachListener(this,"keyup",function(b){if(b.data.getKeystroke()in e&&!this.getFirst(i)){this.appendBogus(); +b=a.createRange();b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START);b.select()}});this.attachListener(this,"dblclick",function(b){if(a.readOnly)return false;b={element:b.data.getTarget()};a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",h);(!CKEDITOR.env.ie||CKEDITOR.env.edge)&&this.attachListener(this,"mousedown",function(b){var c=b.data.getTarget();if(c.is("img","hr","input","textarea","select")&&!c.isReadOnly()){a.getSelection().selectElement(c);c.is("input","textarea", +"select")&&b.data.preventDefault()}});CKEDITOR.env.edge&&this.attachListener(this,"mouseup",function(b){(b=b.data.getTarget())&&b.is("img")&&a.getSelection().selectElement(b)});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(b.data.$.button==2){b=b.data.getTarget();if(!b.getOuterHtml().replace(v,"")){var c=a.createRange();c.moveToElementEditStart(b);c.select(true)}}});if(CKEDITOR.env.webkit){this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&& +a.data.preventDefault()});this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()})}CKEDITOR.env.webkit&&this.attachListener(a,"key",function(b){if(a.readOnly)return true;b=b.data.domEvent.getKey();if(b in e){var c=b==8,d=a.getSelection().getRanges()[0],b=d.startPath();if(d.collapsed){var g;a:{var f=b.block;if(f)if(d[c?"checkStartOfBlock":"checkEndOfBlock"]())if(!d.moveToClosestEditablePosition(f,!c)||!d.collapsed)g=false;else{if(d.startContainer.type== +CKEDITOR.NODE_ELEMENT){var h=d.startContainer.getChild(d.startOffset-(c?1:0));if(h&&h.type==CKEDITOR.NODE_ELEMENT&&h.is("hr")){a.fire("saveSnapshot");h.remove();g=true;break a}}if((d=d.startPath().block)&&(!d||!d.contains(f))){a.fire("saveSnapshot");var m;(m=(c?d:f).getBogus())&&m.remove();g=a.getSelection();m=g.createBookmarks();(c?f:d).moveChildren(c?d:f,false);b.lastElement.mergeSiblings();y(f,d,!c);g.selectBookmarks(m);g=true}}else g=false;else g=false}if(!g)return}else{c=d;g=b.block;m=c.endPath().block; +if(!g||!m||g.equals(m))b=false;else{a.fire("saveSnapshot");(f=g.getBogus())&&f.remove();c.enlarge(CKEDITOR.ENLARGE_INLINE);c.deleteContents();if(m.getParent()){m.moveChildren(g,false);b.lastElement.mergeSiblings();y(g,m,true)}c=a.getSelection().getRanges()[0];c.collapse(1);c.optimize();c.startContainer.getHtml()===""&&c.startContainer.appendBogus();c.select();b=true}if(!b)return}a.getSelection().scrollIntoView();a.fire("saveSnapshot");return false}},this,null,100)}}},_:{detach:function(){this.editor.setData(this.editor.getData(), +0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());if(!this.is("textarea")){a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var c=a.getCustomData("stylesheet_ref");if(--c)a.setCustomData("stylesheet_ref",c);else{a.removeCustomData("stylesheet_ref");b.removeCustomData("stylesheet").remove()}}}this.editor.fire("contentDomUnload");delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b= +this._.editable;if(b&&a)return 0;if(arguments.length)b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null);return b};CKEDITOR.on("instanceLoaded",function(a){var b=a.editor;b.on("insertElement",function(a){a=a.data;if(a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))){a.getAttribute("contentEditable")!="false"&&a.data("cke-editable",a.hasAttribute("contenteditable")?"true":"1");a.setAttribute("contentEditable",false)}});b.on("selectionChange", +function(a){if(!b.readOnly){var c=b.getSelection();if(c&&!c.isLocked){c=b.checkDirty();b.fire("lockSnapshot");e(a);b.fire("unlockSnapshot");!c&&b.resetDirty()}}})});CKEDITOR.on("instanceCreated",function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var c=b.title;a.changeAttr("role","textbox");a.changeAttr("aria-label",c);c&&a.changeAttr("title",c);var d=b.fire("ariaEditorHelpLabel",{}).label;if(d)if(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE? +"top":"contents")){var e=CKEDITOR.tools.getNextId(),d=CKEDITOR.dom.element.createFromHtml('<span id="'+e+'" class="cke_voice_label">'+d+"</span>");c.append(d);a.changeAttr("aria-describedby",e)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");var o=CKEDITOR.dom.walker.whitespaces(true),q=CKEDITOR.dom.walker.bookmark(false,true),t=CKEDITOR.dom.walker.empty(),w=CKEDITOR.dom.walker.bogus(),v=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi, +B=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var e,g,f,u,l=[],p=d.range.startContainer;e=d.range.startPath();for(var p=h[p.getName()],i=0,j=c.getChildren(),s=j.count(),z=-1,K=-1,I=0,F=e.contains(h.$list);i<s;++i){e=j.getItem(i);if(a(e)){f=e.getName();if(F&&f in CKEDITOR.dtd.$list)l=l.concat(b(e,d));else{u=!!p[f];if(f=="br"&&e.data("cke-eol")&&(!i||i==s-1)){I=(g=i?l[i-1].node:j.getItem(i+1))&&(!a(g)||!g.is("br"));g=g&&a(g)&&h.$block[g.getName()]}z==-1&&!u&&(z=i); +u||(K=i);l.push({isElement:1,isLineBreak:I,isBlock:e.isBlockBoundary(),hasBlockSibling:g,node:e,name:f,allowed:u});g=I=0}}else l.push({isElement:0,node:e,allowed:1})}if(z>-1)l[z].firstNotAllowed=1;if(K>-1)l[K].lastNotAllowed=1;return l}function c(b,d){var e=[],g=b.getChildren(),f=g.count(),u,l=0,m=h[d],p=!b.is(h.$inline)||b.is("br");for(p&&e.push(" ");l<f;l++){u=g.getItem(l);a(u)&&!u.is(m)?e=e.concat(c(u,d)):e.push(u)}p&&e.push(" ");return e}function d(b){return b&&a(b)&&(b.is(h.$removeEmpty)||b.is("a")&& +!b.isBlockBoundary())}function e(b,c,d,g){var f=b.clone(),h,u;f.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);if((h=(new CKEDITOR.dom.walker(f)).next())&&a(h)&&l[h.getName()]&&(u=h.getPrevious())&&a(u)&&!u.getParent().equals(b.startContainer)&&d.contains(u)&&g.contains(h)&&h.isIdentical(u)){h.moveChildren(u);h.remove();e(b,c,d,g)}}function f(b,c){function d(b,c){if(c.isBlock&&c.isElement&&!c.node.is("br")&&a(b)&&b.is("br")){b.remove();return 1}}var e=c.endContainer.getChild(c.endOffset),g=c.endContainer.getChild(c.endOffset- +1);e&&d(e,b[b.length-1]);if(g&&d(g,b[0])){c.setEnd(c.endContainer,c.endOffset-1);c.collapse()}}var h=CKEDITOR.dtd,l={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},u={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},j=CKEDITOR.tools.extend({},h.$inline);delete j.br;return function(l,x,s,G){var n=l.editor,o=false;if(x=="unfiltered_html"){x="html";o=true}if(!G.checkReadOnly()){var E=(new CKEDITOR.dom.elementPath(G.startContainer,G.root)).blockLimit||G.root,l={type:x,dontFilter:o, +editable:l,editor:n,range:G,blockLimit:E,mergeCandidates:[],zombies:[]},x=l.range,G=l.mergeCandidates,r,q;if(l.type=="text"&&x.shrink(CKEDITOR.SHRINK_ELEMENT,true,false)){r=CKEDITOR.dom.element.createFromHtml("<span>&nbsp;</span>",x.document);x.insertNode(r);x.setStartAfter(r)}o=new CKEDITOR.dom.elementPath(x.startContainer);l.endPath=E=new CKEDITOR.dom.elementPath(x.endContainer);if(!x.collapsed){var n=E.block||E.blockLimit,y=x.getCommonAncestor();n&&(!n.equals(y)&&!n.contains(y)&&x.checkEndOfBlock())&& +l.zombies.push(n);x.deleteContents()}for(;(q=a(x.startContainer)&&x.startContainer.getChild(x.startOffset-1))&&a(q)&&q.isBlockBoundary()&&o.contains(q);)x.moveToPosition(q,CKEDITOR.POSITION_BEFORE_END);e(x,l.blockLimit,o,E);if(r){x.setEndBefore(r);x.collapse();r.remove()}r=x.startPath();if(n=r.contains(d,false,1)){x.splitElement(n);l.inlineStylesRoot=n;l.inlineStylesPeak=r.lastElement}r=x.createBookmark();(n=r.startNode.getPrevious(i))&&a(n)&&d(n)&&G.push(n);(n=r.startNode.getNext(i))&&a(n)&&d(n)&& +G.push(n);for(n=r.startNode;(n=n.getParent())&&d(n);)G.push(n);x.moveToBookmark(r);if(r=s){r=l.range;if(l.type=="text"&&l.inlineStylesRoot){q=l.inlineStylesPeak;x=q.getDocument().createText("{cke-peak}");for(G=l.inlineStylesRoot.getParent();!q.equals(G);){x=x.appendTo(q.clone());q=q.getParent()}s=x.getOuterHtml().split("{cke-peak}").join(s)}q=l.blockLimit.getName();if(/^\s+|\s+$/.test(s)&&"span"in CKEDITOR.dtd[q])var v='<span data-cke-marker="1">&nbsp;</span>',s=v+s+v;s=l.editor.dataProcessor.toHtml(s, +{context:null,fixForBody:false,protectedWhitespaces:!!v,dontFilter:l.dontFilter,filter:l.editor.activeFilter,enterMode:l.editor.activeEnterMode});q=r.document.createElement("body");q.setHtml(s);if(v){q.getFirst().remove();q.getLast().remove()}if((v=r.startPath().block)&&!(v.getChildCount()==1&&v.getBogus()))a:{var t;if(q.getChildCount()==1&&a(t=q.getFirst())&&t.is(u)&&!t.hasAttribute("contenteditable")){v=t.getElementsByTag("*");r=0;for(G=v.count();r<G;r++){x=v.getItem(r);if(!x.is(j))break a}t.moveChildren(t.getParent(1)); +t.remove()}}l.dataWrapper=q;r=s}if(r){t=l.range;r=t.document;var H;q=l.blockLimit;var G=0,J,v=[],w,B,s=n=0,O,V,x=t.startContainer,o=l.endPath.elements[0],W,E=o.getPosition(x),y=!!o.getCommonAncestor(x)&&E!=CKEDITOR.POSITION_IDENTICAL&&!(E&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED),x=b(l.dataWrapper,l);for(f(x,t);G<x.length;G++){E=x[G];if(H=E.isLineBreak){H=t;O=q;var Q=void 0,S=void 0;if(E.hasBlockSibling)H=1;else{Q=H.startContainer.getAscendant(h.$block,1);if(!Q||!Q.is({div:1,p:1}))H= +0;else{S=Q.getPosition(O);if(S==CKEDITOR.POSITION_IDENTICAL||S==CKEDITOR.POSITION_CONTAINS)H=0;else{O=H.splitElement(Q);H.moveToPosition(O,CKEDITOR.POSITION_AFTER_START);H=1}}}}if(H)s=G>0;else{H=t.startPath();if(!E.isBlock&&g(l.editor,H.block,H.blockLimit)&&(B=A(l.editor))){B=r.createElement(B);B.appendBogus();t.insertNode(B);CKEDITOR.env.needsBrFiller&&(J=B.getBogus())&&J.remove();t.moveToPosition(B,CKEDITOR.POSITION_BEFORE_END)}if((H=t.startPath().block)&&!H.equals(w)){if(J=H.getBogus()){J.remove(); +v.push(H)}w=H}E.firstNotAllowed&&(n=1);if(n&&E.isElement){H=t.startContainer;for(O=null;H&&!h[H.getName()][E.name];){if(H.equals(q)){H=null;break}O=H;H=H.getParent()}if(H){if(O){V=t.splitElement(O);l.zombies.push(V);l.zombies.push(O)}}else{O=q.getName();W=!G;H=G==x.length-1;O=c(E.node,O);for(var Q=[],S=O.length,R=0,P=void 0,X=0,$=-1;R<S;R++){P=O[R];if(P==" "){if(!X&&(!W||R)){Q.push(new CKEDITOR.dom.text(" "));$=Q.length}X=1}else{Q.push(P);X=0}}H&&$==Q.length&&Q.pop();W=Q}}if(W){for(;H=W.pop();)t.insertNode(H); +W=0}else t.insertNode(E.node);if(E.lastNotAllowed&&G<x.length-1){(V=y?o:V)&&t.setEndAt(V,CKEDITOR.POSITION_AFTER_START);n=0}t.collapse()}}if(x.length!=1)J=false;else{J=x[0];J=J.isElement&&J.node.getAttribute("contenteditable")=="false"}if(J){s=true;H=x[0].node;t.setStartAt(H,CKEDITOR.POSITION_BEFORE_START);t.setEndAt(H,CKEDITOR.POSITION_AFTER_END)}l.dontMoveCaret=s;l.bogusNeededBlocks=v}J=l.range;var Y;V=l.bogusNeededBlocks;for(W=J.createBookmark();w=l.zombies.pop();)if(w.getParent()){B=J.clone(); +B.moveToElementEditStart(w);B.removeEmptyBlocksAtEnd()}if(V)for(;w=V.pop();)CKEDITOR.env.needsBrFiller?w.appendBogus():w.append(J.document.createText(" "));for(;w=l.mergeCandidates.pop();)w.mergeSiblings();J.moveToBookmark(W);if(!l.dontMoveCaret){for(w=a(J.startContainer)&&J.startContainer.getChild(J.startOffset-1);w&&a(w)&&!w.is(h.$empty);){if(w.isBlockBoundary())J.moveToPosition(w,CKEDITOR.POSITION_BEFORE_END);else{if(d(w)&&w.getHtml().match(/(\s|&nbsp;)$/g)){Y=null;break}Y=J.clone();Y.moveToPosition(w, +CKEDITOR.POSITION_BEFORE_END)}w=w.getLast(i)}Y&&J.moveToRange(Y)}}}}(),l=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return false;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};return b}function b(a,c,d){c=a.getDocument().createElement(c);a.append(c,d);return c}function c(a){var b=a.count(),d;for(b;b-- >0;){d=a.getItem(b);if(!CKEDITOR.tools.trim(d.getHtml())){d.appendBogus(); +CKEDITOR.env.ie&&(CKEDITOR.env.version<9&&d.getChildCount())&&d.getFirst().remove()}}}return function(d){var e=d.startContainer,g=e.getAscendant("table",1),f=false;c(g.getElementsByTag("td"));c(g.getElementsByTag("th"));g=d.clone();g.setStart(e,0);g=a(g).lastBackward();if(!g){g=d.clone();g.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);g=a(g).lastForward();f=true}g||(g=e);if(g.is("table")){d.setStartAt(g,CKEDITOR.POSITION_BEFORE_START);d.collapse(true);g.remove()}else{g.is({tbody:1,thead:1,tfoot:1})&&(g= +b(g,"tr",f));g.is("tr")&&(g=b(g,g.getParent().is("thead")?"th":"td",f));(e=g.getBogus())&&e.remove();d.moveToPosition(g,f?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END)}}}();a={detect:function(a,b){var c=a.range,d=c.clone(),e=c.clone(),g=new CKEDITOR.dom.elementPath(c.startContainer,b),f=new CKEDITOR.dom.elementPath(c.endContainer,b);d.collapse(1);e.collapse();if(g.block&&d.checkBoundaryOfElement(g.block,CKEDITOR.END)){c.setStartAfter(g.block);a.prependEolBr=1}if(f.block&&e.checkBoundaryOfElement(f.block, +CKEDITOR.START)){c.setEndBefore(f.block);a.appendEolBr=1}},fix:function(a,b){var c=b.getDocument(),d;if(a.appendEolBr){d=this.createEolBr(c);a.fragment.append(d)}a.prependEolBr&&(!d||d.getPrevious())&&a.fragment.append(this.createEolBr(c),1)},createEolBr:function(a){return a.createElement("br",{attributes:{"data-cke-eol":1}})}};d={exclude:function(a){var b=a.range.getBoundaryNodes(),c=b.startNode;(b=b.endNode)&&(w(b)&&(!c||!c.equals(b)))&&a.range.setEndBefore(b)}};c={rebuild:function(a,b){var c=a.range, +d=c.getCommonAncestor(),e=new CKEDITOR.dom.elementPath(d,b),g=new CKEDITOR.dom.elementPath(c.startContainer,b),c=new CKEDITOR.dom.elementPath(c.endContainer,b),f;d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent());if(e.blockLimit.is({tr:1,table:1})){var h=e.contains("table").getParent();f=function(a){return!a.equals(h)}}else if(e.block&&e.block.is(CKEDITOR.dtd.$listItem)){g=g.contains(CKEDITOR.dtd.$list);c=c.contains(CKEDITOR.dtd.$list);if(!g.equals(c)){var l=e.contains(CKEDITOR.dtd.$list).getParent(); +f=function(a){return!a.equals(l)}}}f||(f=function(a){return!a.equals(e.block)&&!a.equals(e.blockLimit)});this.rebuildFragment(a,b,d,f)},rebuildFragment:function(a,b,c,d){for(var e;c&&!c.equals(b)&&d(c);){e=c.clone(0,1);a.fragment.appendTo(e);a.fragment=e;c=c.getParent()}}};b={shrink:function(a){var a=a.range,b=a.startContainer,c=a.endContainer,d=a.startOffset,e=a.endOffset;b.type==CKEDITOR.NODE_ELEMENT&&(b.equals(c)&&b.is("tr")&&++d==e)&&a.shrink(CKEDITOR.SHRINK_TEXT)}};var s=function(){function a(b, +c){var d=b.getParent();if(d.is(CKEDITOR.dtd.$inline))b[c?"insertBefore":"insertAfter"](d)}function b(c,d,e){a(d);a(e,1);for(var g;g=e.getNext();){g.insertAfter(d);d=g}t(c)&&c.remove()}function c(a,b){var d=new CKEDITOR.dom.range(a);d.setStartAfter(b.startNode);d.setEndBefore(b.endNode);return d}return{list:{detectMerge:function(a,b){var d=c(b,a.bookmark),e=d.startPath(),g=d.endPath(),f=e.contains(CKEDITOR.dtd.$list),h=g.contains(CKEDITOR.dtd.$list);a.mergeList=f&&h&&f.getParent().equals(h.getParent())&& +!f.equals(h);a.mergeListItems=e.block&&g.block&&e.block.is(CKEDITOR.dtd.$listItem)&&g.block.is(CKEDITOR.dtd.$listItem);if(a.mergeList||a.mergeListItems){d=d.clone();d.setStartBefore(a.bookmark.startNode);d.setEndAfter(a.bookmark.endNode);a.mergeListBookmark=d.createBookmark()}},merge:function(a,c){if(a.mergeListBookmark){var d=a.mergeListBookmark.startNode,e=a.mergeListBookmark.endNode,g=new CKEDITOR.dom.elementPath(d,c),f=new CKEDITOR.dom.elementPath(e,c);if(a.mergeList){var h=g.contains(CKEDITOR.dtd.$list), +k=f.contains(CKEDITOR.dtd.$list);if(!h.equals(k)){k.moveChildren(h);k.remove()}}if(a.mergeListItems){g=g.contains(CKEDITOR.dtd.$listItem);f=f.contains(CKEDITOR.dtd.$listItem);g.equals(f)||b(f,d,e)}d.remove();e.remove()}}},block:{detectMerge:function(a,b){if(!a.tableContentsRanges&&!a.mergeListBookmark){var c=new CKEDITOR.dom.range(b);c.setStartBefore(a.bookmark.startNode);c.setEndAfter(a.bookmark.endNode);a.mergeBlockBookmark=c.createBookmark()}},merge:function(a,c){if(a.mergeBlockBookmark&&!a.purgeTableBookmark){var d= +a.mergeBlockBookmark.startNode,e=a.mergeBlockBookmark.endNode,g=new CKEDITOR.dom.elementPath(d,c),f=new CKEDITOR.dom.elementPath(e,c),g=g.block,f=f.block;g&&(f&&!g.equals(f))&&b(f,d,e);d.remove();e.remove()}}},table:function(){function a(c){var e=[],g,f=new CKEDITOR.dom.walker(c),h=c.startPath().contains(d),k=c.endPath().contains(d),l={};f.guard=function(a,f){if(a.type==CKEDITOR.NODE_ELEMENT){var m="visited_"+(f?"out":"in");if(a.getCustomData(m))return;CKEDITOR.dom.element.setMarker(l,a,m,1)}if(f&& +h&&a.equals(h)){g=c.clone();g.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);e.push(g)}else if(!f&&k&&a.equals(k)){g=c.clone();g.setStartAt(k,CKEDITOR.POSITION_AFTER_START);e.push(g)}else if(!f&&a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&(!h||b(a,h))&&(!k||b(a,k))){g=c.clone();g.selectNodeContents(a);e.push(g)}};f.lastForward();CKEDITOR.dom.element.clearAllMarkers(l);return e}function b(a,c){var d=CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED,e=a.getPosition(c);return e===CKEDITOR.POSITION_IDENTICAL? +false:(e&d)===0}var d={td:1,th:1,caption:1};return{detectPurge:function(a){var b=a.range,c=b.clone();c.enlarge(CKEDITOR.ENLARGE_ELEMENT);var c=new CKEDITOR.dom.walker(c),e=0;c.evaluator=function(a){a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&++e};c.checkForward();if(e>1){var c=b.startPath().contains("table"),g=b.endPath().contains("table");if(c&&g&&b.checkBoundaryOfElement(c,CKEDITOR.START)&&b.checkBoundaryOfElement(g,CKEDITOR.END)){b=a.range.clone();b.setStartBefore(c);b.setEndAfter(g);a.purgeTableBookmark= +b.createBookmark()}}},detectRanges:function(e,g){var f=c(g,e.bookmark),h=f.clone(),k,l,m=f.getCommonAncestor();m.is(CKEDITOR.dtd.$tableContent)&&!m.is(d)&&(m=m.getAscendant("table",true));l=m;m=new CKEDITOR.dom.elementPath(f.startContainer,l);l=new CKEDITOR.dom.elementPath(f.endContainer,l);m=m.contains("table");l=l.contains("table");if(m||l){if(m&&l&&b(m,l)){e.tableSurroundingRange=h;h.setStartAt(m,CKEDITOR.POSITION_AFTER_END);h.setEndAt(l,CKEDITOR.POSITION_BEFORE_START);h=f.clone();h.setEndAt(m, +CKEDITOR.POSITION_AFTER_END);k=f.clone();k.setStartAt(l,CKEDITOR.POSITION_BEFORE_START);k=a(h).concat(a(k))}else if(m){if(!l){e.tableSurroundingRange=h;h.setStartAt(m,CKEDITOR.POSITION_AFTER_END);f.setEndAt(m,CKEDITOR.POSITION_AFTER_END)}}else{e.tableSurroundingRange=h;h.setEndAt(l,CKEDITOR.POSITION_BEFORE_START);f.setStartAt(l,CKEDITOR.POSITION_AFTER_START)}e.tableContentsRanges=k?k:a(f)}},deleteRanges:function(a){for(var b;b=a.tableContentsRanges.pop();){b.extractContents();t(b.startContainer)&& +b.startContainer.appendBogus()}a.tableSurroundingRange&&a.tableSurroundingRange.extractContents()},purge:function(a){if(a.purgeTableBookmark){var b=a.doc,c=a.range.clone(),b=b.createElement("p");b.insertBefore(a.purgeTableBookmark.startNode);c.moveToBookmark(a.purgeTableBookmark);c.deleteContents();a.range.moveToPosition(b,CKEDITOR.POSITION_AFTER_START)}}}}(),detectExtractMerge:function(a){return!(a.range.startPath().contains(CKEDITOR.dtd.$listItem)&&a.range.endPath().contains(CKEDITOR.dtd.$listItem))}, +fixUneditableRangePosition:function(a){a.startContainer.getDtd()["#"]||a.moveToClosestEditablePosition(null,true)},autoParagraph:function(a,b){var c=b.startPath(),d;if(g(a,c.block,c.blockLimit)&&(d=A(a))){d=b.document.createElement(d);d.appendBogus();b.insertNode(d);b.moveToPosition(d,CKEDITOR.POSITION_AFTER_START)}}}}()})(); +(function(){function a(){var a=this._.fakeSelection,b;if(a){b=this.getSelection(1);if(!b||!b.isHidden()){a.reset();a=0}}if(!a){a=b||this.getSelection(1);if(!a||a.getType()==CKEDITOR.SELECTION_NONE)return}this.fire("selectionCheck",a);b=this.elementPath();if(!b.compare(this._.selectionPreviousPath)){if(CKEDITOR.env.webkit)this._.previousActive=this.document.getActive();this._.selectionPreviousPath=b;this.fire("selectionChange",{selection:a,path:b})}}function d(){o=true;if(!y){b.call(this);y=CKEDITOR.tools.setTimeout(b, +200,this)}}function b(){y=null;if(o){CKEDITOR.tools.setTimeout(a,0,this);o=false}}function c(a){return q(a)||a.type==CKEDITOR.NODE_ELEMENT&&!a.is(CKEDITOR.dtd.$empty)?true:false}function e(a){function b(c,d){return!c||c.type==CKEDITOR.NODE_TEXT?false:a.clone()["moveToElementEdit"+(d?"End":"Start")](c)}if(!(a.root instanceof CKEDITOR.editable))return false;var d=a.startContainer,e=a.getPreviousNode(c,null,d),g=a.getNextNode(c,null,d);return b(e)||b(g,1)||!e&&!g&&!(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()&& +d.getBogus())?true:false}function f(a){return a.getCustomData("cke-fillingChar")}function h(a,b){var c=a&&a.removeCustomData("cke-fillingChar");if(c){if(b!==false){var d,e=a.getDocument().getSelection().getNative(),g=e&&e.type!="None"&&e.getRangeAt(0);if(c.getLength()>1&&g&&g.intersectsNode(c.$)){d=j(e);g=e.focusNode==c.$&&e.focusOffset>0;e.anchorNode==c.$&&e.anchorOffset>0&&d[0].offset--;g&&d[1].offset--}}c.setText(i(c.getText()));d&&n(a.getDocument().$,d)}}function i(a){return a.replace(/\u200B( )?/g, +function(a){return a[1]?" ":""})}function j(a){return[{node:a.anchorNode,offset:a.anchorOffset},{node:a.focusNode,offset:a.focusOffset}]}function n(a,b){var c=a.getSelection(),d=a.createRange();d.setStart(b[0].node,b[0].offset);d.collapse(true);c.removeAllRanges();c.addRange(d);c.extend(b[1].node,b[1].offset)}function g(a){var b=CKEDITOR.dom.element.createFromHtml('<div data-cke-hidden-sel="1" data-cke-temp="1" style="'+(CKEDITOR.env.ie?"display:none":"position:fixed;top:0;left:-1000px")+'">&nbsp;</div>', +a.document);a.fire("lockSnapshot");a.editable().append(b);var c=a.getSelection(1),d=a.createRange(),e=c.root.on("selectionchange",function(a){a.cancel()},null,null,0);d.setStartAt(b,CKEDITOR.POSITION_AFTER_START);d.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);c.selectRanges([d]);e.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=b}function A(a){var b={37:1,39:1,8:1,46:1};return function(c){var d=c.data.getKeystroke();if(b[d]){var e=a.getSelection().getRanges(),g=e[0];if(e.length== +1&&g.collapsed)if((d=g[d<38?"getPreviousEditableNode":"getNextEditableNode"]())&&d.type==CKEDITOR.NODE_ELEMENT&&d.getAttribute("contenteditable")=="false"){a.getSelection().fake(d);c.data.preventDefault();c.cancel()}}}}function r(a){for(var b=0;b<a.length;b++){var c=a[b];c.getCommonAncestor().isReadOnly()&&a.splice(b,1);if(!c.collapsed){if(c.startContainer.isReadOnly())for(var d=c.startContainer,e;d;){if((e=d.type==CKEDITOR.NODE_ELEMENT)&&d.is("body")||!d.isReadOnly())break;e&&d.getAttribute("contentEditable")== +"false"&&c.setStartAfter(d);d=d.getParent()}d=c.startContainer;e=c.endContainer;var g=c.startOffset,f=c.endOffset,h=c.clone();d&&d.type==CKEDITOR.NODE_TEXT&&(g>=d.getLength()?h.setStartAfter(d):h.setStartBefore(d));e&&e.type==CKEDITOR.NODE_TEXT&&(f?h.setEndAfter(e):h.setEndBefore(e));d=new CKEDITOR.dom.walker(h);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&d.isReadOnly()){var e=c.clone();c.setEndBefore(d);c.collapsed&&a.splice(b--,1);if(!(d.getPosition(h.endContainer)&CKEDITOR.POSITION_CONTAINS)){e.setStartAfter(d); +e.collapsed||a.splice(b+1,0,e)}return true}return false};d.next()}}return a}var y,o,q=CKEDITOR.dom.walker.invisible(1),t=function(){function a(b){return function(a){var c=a.editor.createRange();c.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([c]);return false}}function b(a){return function(b){var c=b.editor,d=c.createRange(),e;if(!(e=d.moveToClosestEditablePosition(b.selected,a)))e=d.moveToClosestEditablePosition(b.selected,!a);e&&c.getSelection().selectRanges([d]); +c.fire("saveSnapshot");b.selected.remove();if(!e){d.moveToElementEditablePosition(c.editable());c.getSelection().selectRanges([d])}c.fire("saveSnapshot");return false}}var c=a(),d=a(1);return{37:c,38:c,39:d,40:d,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(b){function c(){var a=e.getSelection();a&&a.removeAllRanges()}var e=b.editor;e.on("contentDom",function(){function b(){C=new CKEDITOR.dom.selection(e.getSelection());C.lock()}function c(){f.removeListener("mouseup",c);j.removeListener("mouseup", +c);var a=CKEDITOR.document.$.selection,b=a.createRange();a.type!="None"&&b.parentElement().ownerDocument==g.$&&b.select()}var g=e.document,f=CKEDITOR.document,l=e.editable(),i=g.getBody(),j=g.getDocumentElement(),u=l.isInline(),s,C;CKEDITOR.env.gecko&&l.attachListener(l,"focus",function(a){a.removeListener();if(s!==0)if((a=e.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==l.$){a=e.createRange();a.moveToElementEditStart(l);a.select()}},null,null,-2);l.attachListener(l,CKEDITOR.env.webkit? +"DOMFocusIn":"focus",function(){s&&CKEDITOR.env.webkit&&(s=e._.previousActive&&e._.previousActive.equals(g.getActive()));e.unlockSelection(s);s=0},null,null,-1);l.attachListener(l,"mousedown",function(){s=0});if(CKEDITOR.env.ie||u){w?l.attachListener(l,"beforedeactivate",b,null,null,-1):l.attachListener(e,"selectionCheck",b,null,null,-1);l.attachListener(l,CKEDITOR.env.webkit?"DOMFocusOut":"blur",function(){e.lockSelection(C);s=1},null,null,-1);l.attachListener(l,"mousedown",function(){s=0})}if(CKEDITOR.env.ie&& +!u){var x;l.attachListener(l,"mousedown",function(a){if(a.data.$.button==2){a=e.document.getSelection();if(!a||a.getType()==CKEDITOR.SELECTION_NONE)x=e.window.getScrollPosition()}});l.attachListener(l,"mouseup",function(a){if(a.data.$.button==2&&x){e.document.$.documentElement.scrollLeft=x.x;e.document.$.documentElement.scrollTop=x.y}x=null});if(g.$.compatMode!="BackCompat"){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)j.on("mousedown",function(a){function b(a){a=a.data.$;if(d){var c=i.$.createTextRange(); +try{c.moveToPoint(a.clientX,a.clientY)}catch(e){}d.setEndPoint(g.compareEndPoints("StartToStart",c)<0?"EndToEnd":"StartToStart",c);d.select()}}function c(){j.removeListener("mousemove",b);f.removeListener("mouseup",c);j.removeListener("mouseup",c);d.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<j.$.clientHeight&&a.$.x<j.$.clientWidth){var d=i.$.createTextRange();try{d.moveToPoint(a.$.clientX,a.$.clientY)}catch(e){}var g=d.duplicate();j.on("mousemove",b);f.on("mouseup",c);j.on("mouseup",c)}}); +if(CKEDITOR.env.version>7&&CKEDITOR.env.version<11)j.on("mousedown",function(a){if(a.data.getTarget().is("html")){f.on("mouseup",c);j.on("mouseup",c)}})}}l.attachListener(l,"selectionchange",a,e);l.attachListener(l,"keyup",d,e);l.attachListener(l,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){e.forceNextSelectionCheck();e.selectionChange(1)});if(u&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var n;l.attachListener(l,"mousedown",function(){n=1});l.attachListener(g.getDocumentElement(),"mouseup", +function(){n&&d.call(e);n=0})}else l.attachListener(CKEDITOR.env.ie?l:g.getDocumentElement(),"mouseup",d,e);CKEDITOR.env.webkit&&l.attachListener(g,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:h(l)}},null,null,-1);l.attachListener(l,"keydown",A(e),null,null,-1)});e.on("setData",function(){e.unlockSelection();CKEDITOR.env.webkit&&c()});e.on("contentDomUnload",function(){e.unlockSelection()});if(CKEDITOR.env.ie9Compat)e.on("beforeDestroy", +c,null,null,9);e.on("dataReady",function(){delete e._.fakeSelection;delete e._.hiddenSelectionContainer;e.selectionChange(1)});e.on("loadSnapshot",function(){var a=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT),b=e.editable().getLast(a);if(b&&b.hasAttribute("data-cke-hidden-sel")){b.remove();if(CKEDITOR.env.gecko)(a=e.editable().getFirst(a))&&(a.is("br")&&a.getAttribute("_moz_editor_bogus_node"))&&a.remove()}},null,null,100);e.on("key",function(a){if(e.mode=="wysiwyg"){var b=e.getSelection(); +if(b.isFake){var c=t[a.data.keyCode];if(c)return c({editor:e,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});CKEDITOR.on("instanceReady",function(a){function b(){var a=d.editable();if(a)if(a=f(a)){var c=d.document.$.getSelection();if(c.type!="None"&&(c.anchorNode==a.$||c.focusNode==a.$))g=j(c);e=a.getText();a.setText(i(e))}}function c(){var a=d.editable();if(a)if(a=f(a)){a.setText(e);if(g){n(d.document.$,g);g=null}}}var d=a.editor,e,g;if(CKEDITOR.env.webkit){d.on("selectionChange", +function(){var a=d.editable(),b=f(a);b&&(b.getCustomData("ready")?h(a):b.setCustomData("ready",1))},null,null,-1);d.on("beforeSetMode",function(){h(d.editable())},null,null,-1);d.on("beforeUndoImage",b);d.on("afterUndoImage",c);d.on("beforeGetData",b,null,null,0);d.on("getData",c)}});CKEDITOR.editor.prototype.selectionChange=function(b){(b?a:d).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){if((this._.savedSelection||this._.fakeSelection)&&!a)return this._.savedSelection||this._.fakeSelection; +return(a=this.editable())&&this.mode=="wysiwyg"?new CKEDITOR.dom.selection(a):null};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);if(a.getType()!=CKEDITOR.SELECTION_NONE){!a.isLocked&&a.lock();this._.savedSelection=a;return true}return false};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;if(b){b.unlock(a);delete this._.savedSelection;return true}return false};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath}; +CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;var w=typeof window.getSelection!="function",v=1;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection)var b= +a,a=a.root;var c=a instanceof CKEDITOR.dom.element;this.rev=b?b.rev:v++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=c?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b){CKEDITOR.tools.extend(this._.cache,b._.cache);this.isFake=b.isFake;this.isLocked=b.isLocked;return this}var a=this.getNative(),d,e;if(a)if(a.getRangeAt)d=(e=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(e.commonAncestorContainer);else{try{e=a.createRange()}catch(g){}d=e&&CKEDITOR.dom.element.get(e.item&& +e.item(0)||e.parentElement())}if(!d||!(d.type==CKEDITOR.NODE_ELEMENT||d.type==CKEDITOR.NODE_TEXT)||!this.root.equals(d)&&!this.root.contains(d)){this._.cache.type=CKEDITOR.SELECTION_NONE;this._.cache.startElement=null;this._.cache.selectedElement=null;this._.cache.selectedText="";this._.cache.ranges=new CKEDITOR.dom.rangeList}return this};var B={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.dom.selection.prototype= +{getNative:function(){return this._.cache.nativeSel!==void 0?this._.cache.nativeSel:this._.cache.nativeSel=w?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:w?function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE;try{var c=this.getNative(),d=c.type;if(d=="Text")b=CKEDITOR.SELECTION_TEXT;if(d=="Control")b=CKEDITOR.SELECTION_ELEMENT;if(c.createRange().parentElement())b=CKEDITOR.SELECTION_TEXT}catch(e){}return a.type=b}:function(){var a=this._.cache; +if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(c.rangeCount==1){var c=c.getRangeAt(0),d=c.startContainer;if(d==c.endContainer&&d.nodeType==1&&c.endOffset-c.startOffset==1&&B[d.childNodes[c.startOffset].nodeName.toLowerCase()])b=CKEDITOR.SELECTION_ELEMENT}return a.type=b},getRanges:function(){var a=w?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c); +var d=b.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var e=d.children,g,f,h=b.duplicate(),l=0,k=e.length-1,i=-1,j,n;l<=k;){i=Math.floor((l+k)/2);g=e[i];h.moveToElementText(g);j=h.compareEndPoints("StartToStart",b);if(j>0)k=i-1;else if(j<0)l=i+1;else return{container:d,offset:a(g)}}if(i==-1||i==e.length-1&&j<0){h.moveToElementText(d);h.setEndPoint("StartToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;e=d.childNodes;if(!h){g=e[e.length-1];return g.nodeType!=CKEDITOR.NODE_TEXT? +{container:d,offset:e.length}:{container:g,offset:g.nodeValue.length}}for(d=e.length;h>0&&d>0;){f=e[--d];if(f.nodeType==CKEDITOR.NODE_TEXT){n=f;h=h-f.nodeValue.length}}return{container:n,offset:-h}}h.collapse(j>0?true:false);h.setEndPoint(j>0?"StartToStart":"EndToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;if(!h)return{container:d,offset:a(g)+(j>0?0:1)};for(;h>0;)try{f=g[j>0?"previousSibling":"nextSibling"];if(f.nodeType==CKEDITOR.NODE_TEXT){h=h-f.nodeValue.length;n=f}g=f}catch(o){return{container:d, +offset:a(g)}}return{container:n,offset:j>0?-h:n.nodeValue.length+h}};return function(){var a=this.getNative(),c=a&&a.createRange(),d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT){a=new CKEDITOR.dom.range(this.root);d=b(c,true);a.setStart(new CKEDITOR.dom.node(d.container),d.offset);d=b(c);a.setEnd(new CKEDITOR.dom.node(d.container),d.offset);a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse();return[a]}if(d== +CKEDITOR.SELECTION_ELEMENT){for(var d=[],e=0;e<c.length;e++){for(var g=c.item(e),f=g.parentNode,h=0,a=new CKEDITOR.dom.range(this.root);h<f.childNodes.length&&f.childNodes[h]!=g;h++);a.setStart(new CKEDITOR.dom.node(f),h);a.setEnd(new CKEDITOR.dom.node(f),h+1);d.push(a)}return d}return[]}}():function(){var a=[],b,c=this.getNative();if(!c)return a;for(var d=0;d<c.rangeCount;d++){var e=c.getRangeAt(d);b=new CKEDITOR.dom.range(this.root);b.setStart(new CKEDITOR.dom.node(e.startContainer),e.startOffset); +b.setEnd(new CKEDITOR.dom.node(e.endContainer),e.endOffset);a.push(b)}return a};return function(b){var c=this._.cache,d=c.ranges;if(!d)c.ranges=d=new CKEDITOR.dom.rangeList(a.call(this));return!b?d:r(new CKEDITOR.dom.rangeList(d.slice()))}}(),getStartElement:function(){var a=this._.cache;if(a.startElement!==void 0)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var c=this.getRanges()[0];if(c){if(c.collapsed){b= +c.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent())}else{for(c.optimize();;){b=c.startContainer;if(c.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary())c.setStartAfter(b);else break}b=c.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent();b=b.getChild(c.startOffset);if(!b||b.type!=CKEDITOR.NODE_ELEMENT)b=c.startContainer;else for(c=b.getFirst();c&&c.type==CKEDITOR.NODE_ELEMENT;){b=c;c=c.getFirst()}}b=b.$}}return a.startElement=b?new CKEDITOR.dom.element(b): +null},getSelectedElement:function(){var a=this._.cache;if(a.selectedElement!==void 0)return a.selectedElement;var b=this,c=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)},function(){for(var a=b.getRanges()[0].clone(),c,d,e=2;e&&(!(c=a.getEnclosedNode())||!(c.type==CKEDITOR.NODE_ELEMENT&&B[c.getName()]&&(d=c)));e--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d&&d.$});return a.selectedElement=c?new CKEDITOR.dom.element(c):null},getSelectedText:function(){var a=this._.cache; +if(a.selectedText!==void 0)return a.selectedText;var b=this.getNative(),b=w?b.type=="Control"?"":b.createRange().text:b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;this.isLocked=1},unlock:function(a){if(this.isLocked){if(a)var b=this.getSelectedElement(),c=!b&&this.getRanges(),d=this.isFake;this.isLocked=0;this.reset();if(a)(a=b||c[0]&&c[0].getCommonAncestor())&&a.getAscendant("body", +1)&&(d?this.fake(b):b?this.selectElement(b):this.selectRanges(c))}},reset:function(){this._.cache={};this.isFake=0;var a=this.root.editor;if(a&&a._.fakeSelection&&this.rev==a._.fakeSelection.rev){delete a._.fakeSelection;var b=a._.hiddenSelectionContainer;if(b){var c=a.checkDirty();a.fire("lockSnapshot");b.remove();a.fire("unlockSnapshot");!c&&a.resetDirty()}delete a._.hiddenSelectionContainer}this.rev=v++},selectElement:function(a){var b=new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a); +this.selectRanges([b])},selectRanges:function(a){var b=this.root.editor,b=b&&b._.hiddenSelectionContainer;this.reset();if(b)for(var b=this.root,c,d=0;d<a.length;++d){c=a[d];if(c.endContainer.equals(b))c.endOffset=Math.min(c.endOffset,b.getChildCount())}if(a.length)if(this.isLocked){var g=CKEDITOR.document.getActive();this.unlock();this.selectRanges(a);this.lock();g&&!g.equals(this.root)&&g.focus()}else{var f;a:{var i,j;if(a.length==1&&!(j=a[0]).collapsed&&(f=j.getEnclosedNode())&&f.type==CKEDITOR.NODE_ELEMENT){j= +j.clone();j.shrink(CKEDITOR.SHRINK_ELEMENT,true);if((i=j.getEnclosedNode())&&i.type==CKEDITOR.NODE_ELEMENT)f=i;if(f.getAttribute("contenteditable")=="false")break a}f=void 0}if(f)this.fake(f);else{if(w){j=CKEDITOR.dom.walker.whitespaces(true);i=/\ufeff|\u00a0/;b={table:1,tbody:1,tr:1};if(a.length>1){f=a[a.length-1];a[0].setEnd(f.endContainer,f.endOffset)}f=a[0];var a=f.collapsed,n,o,u;if((c=f.getEnclosedNode())&&c.type==CKEDITOR.NODE_ELEMENT&&c.getName()in B&&(!c.is("a")||!c.getText()))try{u=c.$.createControlRange(); +u.addElement(c.$);u.select();return}catch(K){}if(f.startContainer.type==CKEDITOR.NODE_ELEMENT&&f.startContainer.getName()in b||f.endContainer.type==CKEDITOR.NODE_ELEMENT&&f.endContainer.getName()in b){f.shrink(CKEDITOR.NODE_ELEMENT,true);a=f.collapsed}u=f.createBookmark();b=u.startNode;if(!a)g=u.endNode;u=f.document.$.body.createTextRange();u.moveToElementText(b.$);u.moveStart("character",1);if(g){i=f.document.$.body.createTextRange();i.moveToElementText(g.$);u.setEndPoint("EndToEnd",i);u.moveEnd("character", +-1)}else{n=b.getNext(j);o=b.hasAscendant("pre");n=!(n&&n.getText&&n.getText().match(i))&&(o||!b.hasPrevious()||b.getPrevious().is&&b.getPrevious().is("br"));o=f.document.createElement("span");o.setHtml("&#65279;");o.insertBefore(b);n&&f.document.createText("").insertBefore(b)}f.setStartBefore(b);b.remove();if(a){if(n){u.moveStart("character",-1);u.select();f.document.$.selection.clear()}else u.select();f.moveToPosition(o,CKEDITOR.POSITION_BEFORE_START);o.remove()}else{f.setEndBefore(g);g.remove(); +u.select()}}else{g=this.getNative();if(!g)return;this.removeAllRanges();for(u=0;u<a.length;u++){if(u<a.length-1){n=a[u];o=a[u+1];i=n.clone();i.setStart(n.endContainer,n.endOffset);i.setEnd(o.startContainer,o.startOffset);if(!i.collapsed){i.shrink(CKEDITOR.NODE_ELEMENT,true);f=i.getCommonAncestor();i=i.getEnclosedNode();if(f.isReadOnly()||i&&i.isReadOnly()){o.setStart(n.startContainer,n.startOffset);a.splice(u--,1);continue}}}f=a[u];o=this.document.$.createRange();if(f.collapsed&&CKEDITOR.env.webkit&& +e(f)){n=this.root;h(n,false);i=n.getDocument().createText("​");n.setCustomData("cke-fillingChar",i);f.insertNode(i);if((n=i.getNext())&&!i.getPrevious()&&n.type==CKEDITOR.NODE_ELEMENT&&n.getName()=="br"){h(this.root);f.moveToPosition(n,CKEDITOR.POSITION_BEFORE_START)}else f.moveToPosition(i,CKEDITOR.POSITION_AFTER_END)}o.setStart(f.startContainer.$,f.startOffset);try{o.setEnd(f.endContainer.$,f.endOffset)}catch(C){if(C.toString().indexOf("NS_ERROR_ILLEGAL_VALUE")>=0){f.collapse(1);o.setEnd(f.endContainer.$, +f.endOffset)}else throw C;}g.addRange(o)}}this.reset();this.root.fire("selectionchange")}}},fake:function(a){var b=this.root.editor;this.reset();g(b);var c=this._.cache,d=new CKEDITOR.dom.range(this.root);d.setStartBefore(a);d.setEndAfter(a);c.ranges=new CKEDITOR.dom.rangeList(d);c.selectedElement=c.startElement=a;c.type=CKEDITOR.SELECTION_ELEMENT;c.selectedText=c.nativeSel=null;this.isFake=1;this.rev=v++;b._.fakeSelection=this;this.root.fire("selectionchange")},isHidden:function(){var a=this.getCommonAncestor(); +a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=1);return a},selectBookmarks:function(a){for(var b=[],c,d=0;d<a.length;d++){var e=new CKEDITOR.dom.range(this.root);e.moveToBookmark(a[d]);b.push(e)}if(a.isFake){c=b[0].getEnclosedNode();if(!c||c.type!=CKEDITOR.NODE_ELEMENT)a.isFake= +0}a.isFake?this.fake(c):this.selectRanges(b);return this},getCommonAncestor:function(){var a=this.getRanges();return!a.length?null:a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer)},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=this.getNative();try{a&&a[w?"empty":"removeAllRanges"]()}catch(b){}this.reset()}}}})();"use strict";CKEDITOR.STYLE_BLOCK=1; +CKEDITOR.STYLE_INLINE=2;CKEDITOR.STYLE_OBJECT=3; +(function(){function a(a,b){for(var c,d;a=a.getParent();){if(a.equals(b))break;if(a.getAttribute("data-nostyle"))c=a;else if(!d){var e=a.getAttribute("contentEditable");e=="false"?c=a:e=="true"&&(d=1)}}return c}function d(b){var e=b.document;if(b.collapsed){e=t(this,e);b.insertNode(e);b.moveToPosition(e,CKEDITOR.POSITION_BEFORE_END)}else{var g=this.element,f=this._.definition,h,i=f.ignoreReadonly,j=i||f.includeReadonly;j==null&&(j=b.root.getCustomData("cke_includeReadonly"));var k=CKEDITOR.dtd[g]; +if(!k){h=true;k=CKEDITOR.dtd.span}b.enlarge(CKEDITOR.ENLARGE_INLINE,1);b.trim();var l=b.createBookmark(),n=l.startNode,o=l.endNode,m=n,r;if(!i){var q=b.getCommonAncestor(),i=a(n,q),q=a(o,q);i&&(m=i.getNextSourceNode(true));q&&(o=q)}for(m.getPosition(o)==CKEDITOR.POSITION_FOLLOWING&&(m=0);m;){i=false;if(m.equals(o)){m=null;i=true}else{var p=m.type==CKEDITOR.NODE_ELEMENT?m.getName():null,q=p&&m.getAttribute("contentEditable")=="false",s=p&&m.getAttribute("data-nostyle");if(p&&m.data("cke-bookmark")){m= +m.getNextSourceNode(true);continue}if(q&&j&&CKEDITOR.dtd.$block[p])for(var v=m,A=c(v),w=void 0,z=A.length,B=0,v=z&&new CKEDITOR.dom.range(v.getDocument());B<z;++B){var w=A[B],F=CKEDITOR.filter.instances[w.data("cke-filter")];if(F?F.check(this):1){v.selectNodeContents(w);d.call(this,v)}}A=p?!k[p]||s?0:q&&!j?0:(m.getPosition(o)|L)==L&&(!f.childRule||f.childRule(m)):1;if(A)if((A=m.getParent())&&((A.getDtd()||CKEDITOR.dtd.span)[g]||h)&&(!f.parentRule||f.parentRule(A))){if(!r&&(!p||!CKEDITOR.dtd.$removeEmpty[p]|| +(m.getPosition(o)|L)==L)){r=b.clone();r.setStartBefore(m)}p=m.type;if(p==CKEDITOR.NODE_TEXT||q||p==CKEDITOR.NODE_ELEMENT&&!m.getChildCount()){for(var p=m,S;(i=!p.getNext(I))&&(S=p.getParent(),k[S.getName()])&&(S.getPosition(n)|E)==E&&(!f.childRule||f.childRule(S));)p=S;r.setEndAfter(p)}}else i=true;else i=true;m=m.getNextSourceNode(s||q)}if(i&&r&&!r.collapsed){for(var i=t(this,e),q=i.hasAttributes(),s=r.getCommonAncestor(),p={},A={},w={},z={},R,P,X;i&&s;){if(s.getName()==g){for(R in f.attributes)if(!z[R]&& +(X=s.getAttribute(P)))i.getAttribute(R)==X?A[R]=1:z[R]=1;for(P in f.styles)if(!w[P]&&(X=s.getStyle(P)))i.getStyle(P)==X?p[P]=1:w[P]=1}s=s.getParent()}for(R in A)i.removeAttribute(R);for(P in p)i.removeStyle(P);q&&!i.hasAttributes()&&(i=null);if(i){r.extractContents().appendTo(i);r.insertNode(i);y.call(this,i);i.mergeSiblings();CKEDITOR.env.ie||i.$.normalize()}else{i=new CKEDITOR.dom.element("span");r.extractContents().appendTo(i);r.insertNode(i);y.call(this,i);i.remove(true)}r=null}}b.moveToBookmark(l); +b.shrink(CKEDITOR.SHRINK_TEXT);b.shrink(CKEDITOR.NODE_ELEMENT,true)}}function b(a){function b(){for(var a=new CKEDITOR.dom.elementPath(d.getParent()),c=new CKEDITOR.dom.elementPath(j.getParent()),e=null,g=null,f=0;f<a.elements.length;f++){var h=a.elements[f];if(h==a.block||h==a.blockLimit)break;k.checkElementRemovable(h,true)&&(e=h)}for(f=0;f<c.elements.length;f++){h=c.elements[f];if(h==c.block||h==c.blockLimit)break;k.checkElementRemovable(h,true)&&(g=h)}g&&j.breakParent(g);e&&d.breakParent(e)}a.enlarge(CKEDITOR.ENLARGE_INLINE, +1);var c=a.createBookmark(),d=c.startNode;if(a.collapsed){for(var e=new CKEDITOR.dom.elementPath(d.getParent(),a.root),g,f=0,h;f<e.elements.length&&(h=e.elements[f]);f++){if(h==e.block||h==e.blockLimit)break;if(this.checkElementRemovable(h)){var i;if(a.collapsed&&(a.checkBoundaryOfElement(h,CKEDITOR.END)||(i=a.checkBoundaryOfElement(h,CKEDITOR.START)))){g=h;g.match=i?"start":"end"}else{h.mergeSiblings();h.is(this.element)?r.call(this,h):o(h,B(this)[h.getName()])}}}if(g){h=d;for(f=0;;f++){i=e.elements[f]; +if(i.equals(g))break;else if(i.match)continue;else i=i.clone();i.append(h);h=i}h[g.match=="start"?"insertBefore":"insertAfter"](g)}}else{var j=c.endNode,k=this;b();for(e=d;!e.equals(j);){g=e.getNextSourceNode();if(e.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(e)){e.getName()==this.element?r.call(this,e):o(e,B(this)[e.getName()]);if(g.type==CKEDITOR.NODE_ELEMENT&&g.contains(d)){b();g=d.getNext()}}e=g}}a.moveToBookmark(c);a.shrink(CKEDITOR.NODE_ELEMENT,true)}function c(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")== +"true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function e(a){var b=a.getEnclosedNode()||a.getCommonAncestor(false,true);(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1))&&!a.isReadOnly()&&w(a,this)}function f(a){var b=a.getCommonAncestor(true,true);if(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1)){var b=this._.definition,c=b.attributes;if(c)for(var d in c)a.removeAttribute(d,c[d]);if(b.styles)for(var e in b.styles)b.styles.hasOwnProperty(e)&& +a.removeStyle(e)}}function h(a){var b=a.createBookmark(true),c=a.createIterator();c.enforceRealBlocks=true;if(this._.enterMode)c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e=a.document,g;d=c.getNextParagraph();)if(!d.isReadOnly()&&(c.activeFilter?c.activeFilter.check(this):1)){g=t(this,e,d);j(d,g)}a.moveToBookmark(b)}function i(a){var b=a.createBookmark(1),c=a.createIterator();c.enforceRealBlocks=true;c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e;d=c.getNextParagraph();)if(this.checkElementRemovable(d))if(d.is("pre")){(e= +this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))&&d.copyAttributes(e);j(d,e)}else r.call(this,d);a.moveToBookmark(b)}function j(a,b){var c=!b;if(c){b=a.getDocument().createElement("div");a.copyAttributes(b)}var d=b&&b.is("pre"),e=a.is("pre"),f=!d&&e;if(d&&!e){e=b;(f=a.getBogus())&&f.remove();f=a.getHtml();f=g(f,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");f=f.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");f=f.replace(/([ \t\n\r]+|&nbsp;)/g, +" ");f=f.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var h=a.getDocument().createElement("div");h.append(e);e.$.outerHTML="<pre>"+f+"</pre>";e.copyAttributes(h.getFirst());e=h.getFirst().remove()}else e.setHtml(f);b=e}else f?b=A(c?[a.getHtml()]:n(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,i;if((i=c.getPrevious(z))&&i.type==CKEDITOR.NODE_ELEMENT&&i.is("pre")){d=g(i.getHtml(),/\n$/,"")+"\n\n"+g(c.getHtml(),/^\n/,"");CKEDITOR.env.ie?c.$.outerHTML="<pre>"+d+"</pre>":c.setHtml(d);i.remove()}}else c&& +q(b)}function n(a){var b=[];g(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"</pre>"+c+"<pre>"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function g(a,b,c){var d="",e="",a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(e=c);return""});return d+a.replace(b,c)+e}function A(a,b){var c;a.length>1&&(c=new CKEDITOR.dom.documentFragment(b.getDocument())); +for(var d=0;d<a.length;d++){var e=a[d],e=e.replace(/(\r\n|\r)/g,"\n"),e=g(e,/^[ \t]*\n/,""),e=g(e,/\n$/,""),e=g(e,/^[ \t]+|[ \t]+$/g,function(a,b){return a.length==1?"&nbsp;":b?" "+CKEDITOR.tools.repeat("&nbsp;",a.length-1):CKEDITOR.tools.repeat("&nbsp;",a.length-1)+" "}),e=e.replace(/\n/g,"<br>"),e=e.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat("&nbsp;",a.length-1)+" "});if(c){var f=b.clone();f.setHtml(e);c.append(f)}else b.setHtml(e)}return c||b}function r(a,b){var c=this._.definition, +d=c.attributes,c=c.styles,e=B(this)[a.getName()],g=CKEDITOR.tools.isEmpty(d)&&CKEDITOR.tools.isEmpty(c),f;for(f in d)if(!((f=="class"||this._.definition.fullMatch)&&a.getAttribute(f)!=l(f,d[f]))&&!(b&&f.slice(0,5)=="data-")){g=a.hasAttribute(f);a.removeAttribute(f)}for(var h in c)if(!(this._.definition.fullMatch&&a.getStyle(h)!=l(h,c[h],true))){g=g||!!a.getStyle(h);a.removeStyle(h)}o(a,e,k[a.getName()]);g&&(this._.definition.alwaysRemoveElement?q(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode== +CKEDITOR.ENTER_BR&&!a.hasAttributes()?q(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function y(a){for(var b=B(this),c=a.getElementsByTag(this.element),d,e=c.count();--e>=0;){d=c.getItem(e);d.isReadOnly()||r.call(this,d,true)}for(var g in b)if(g!=this.element){c=a.getElementsByTag(g);for(e=c.count()-1;e>=0;e--){d=c.getItem(e);d.isReadOnly()||o(d,b[g])}}}function o(a,b,c){if(b=b&&b.attributes)for(var d=0;d<b.length;d++){var e=b[d][0],g;if(g=a.getAttribute(e)){var f=b[d][1];(f===null|| +f.test&&f.test(g)||typeof f=="string"&&g==f)&&a.removeAttribute(e)}}c||q(a)}function q(a,b){if(!a.hasAttributes()||b)if(CKEDITOR.dtd.$block[a.getName()]){var c=a.getPrevious(z),d=a.getNext(z);c&&(c.type==CKEDITOR.NODE_TEXT||!c.isBlockBoundary({br:1}))&&a.append("br",1);d&&(d.type==CKEDITOR.NODE_TEXT||!d.isBlockBoundary({br:1}))&&a.append("br");a.remove(true)}else{c=a.getFirst();d=a.getLast();a.remove(true);if(c){c.type==CKEDITOR.NODE_ELEMENT&&c.mergeSiblings();d&&(!c.equals(d)&&d.type==CKEDITOR.NODE_ELEMENT)&& +d.mergeSiblings()}}}function t(a,b,c){var d;d=a.element;d=="*"&&(d="span");d=new CKEDITOR.dom.element(d,b);c&&c.copyAttributes(d);d=w(d,a);b.getCustomData("doc_processing_style")&&d.hasAttribute("id")?d.removeAttribute("id"):b.setCustomData("doc_processing_style",1);return d}function w(a,b){var c=b._.definition,d=c.attributes,c=CKEDITOR.style.getStyleText(c);if(d)for(var e in d)a.setAttribute(e,d[e]);c&&a.setAttribute("style",c);return a}function v(a,b){for(var c in a)a[c]=a[c].replace(p,function(a, +c){return b[c]})}function B(a){if(a._.overrides)return a._.overrides;var b=a._.overrides={},c=a._.definition.overrides;if(c){CKEDITOR.tools.isArray(c)||(c=[c]);for(var d=0;d<c.length;d++){var e=c[d],g,f;if(typeof e=="string")g=e.toLowerCase();else{g=e.element?e.element.toLowerCase():a.element;f=e.attributes}e=b[g]||(b[g]={});if(f){var e=e.attributes=e.attributes||[],h;for(h in f)e.push([h.toLowerCase(),f[h]])}}}return b}function l(a,b,c){var d=new CKEDITOR.dom.element("span");d[c?"setStyle":"setAttribute"](a, +b);return d[c?"getStyle":"getAttribute"](a)}function s(a,b,c){for(var d=a.document,e=a.getRanges(),b=b?this.removeFromRange:this.applyToRange,g,f=e.createIterator();g=f.getNextRange();)b.call(this,g,c);a.selectRanges(e);d.removeCustomData("doc_processing_style")}var k={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},m= +{a:1,blockquote:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},F=/\s*(?:;\s*|$)/,p=/#\((.+?)\)/g,I=CKEDITOR.dom.walker.bookmark(0,1),z=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,b){if(typeof a.type=="string")return new CKEDITOR.style.customHandlers[a.type](a);var c=a.attributes;if(c&&c.style){a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(c.style));delete c.style}if(b){a=CKEDITOR.tools.clone(a);v(a.attributes, +b);v(a.styles,b)}c=this.element=a.element?typeof a.element=="string"?a.element.toLowerCase():a.element:"*";this.type=a.type||(k[c]?CKEDITOR.STYLE_BLOCK:m[c]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);if(typeof this.element=="object")this.type=CKEDITOR.STYLE_OBJECT;this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof CKEDITOR.dom.document)return s.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode; +s.call(this,a.getSelection(),0,a);this._.enterMode=b}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return s.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode;s.call(this,a.getSelection(),1,a);this._.enterMode=b}},applyToRange:function(a){this.applyToRange=this.type==CKEDITOR.STYLE_INLINE?d:this.type==CKEDITOR.STYLE_BLOCK?h:this.type==CKEDITOR.STYLE_OBJECT?e:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange= +this.type==CKEDITOR.STYLE_INLINE?b:this.type==CKEDITOR.STYLE_BLOCK?i:this.type==CKEDITOR.STYLE_OBJECT?f:null;return this.removeFromRange(a)},applyToObject:function(a){w(a,this)},checkActive:function(a,b){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||a.blockLimit,true,b);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var c=a.elements,d=0,e;d<c.length;d++){e=c[d];if(!(this.type==CKEDITOR.STYLE_INLINE&&(e==a.block||e==a.blockLimit))){if(this.type== +CKEDITOR.STYLE_OBJECT){var g=e.getName();if(!(typeof this.element=="string"?g==this.element:g in this.element))continue}if(this.checkElementRemovable(e,true,b))return true}}}return false},checkApplicable:function(a,b,c){b&&b instanceof CKEDITOR.filter&&(c=b);if(c&&!c.check(this))return false;switch(this.type){case CKEDITOR.STYLE_OBJECT:return!!a.contains(this.element);case CKEDITOR.STYLE_BLOCK:return!!a.blockLimit.getDtd()[this.element]}return true},checkElementMatch:function(a,b){var c=this._.definition; +if(!a||!c.ignoreReadonly&&a.isReadOnly())return false;var d=a.getName();if(typeof this.element=="string"?d==this.element:d in this.element){if(!b&&!a.hasAttributes())return true;if(d=c._AC)c=d;else{var d={},e=0,g=c.attributes;if(g)for(var f in g){e++;d[f]=g[f]}if(f=CKEDITOR.style.getStyleText(c)){d.style||e++;d.style=f}d._length=e;c=c._AC=d}if(c._length){for(var h in c)if(h!="_length"){e=a.getAttribute(h)||"";if(h=="style")a:{d=c[h];typeof d=="string"&&(d=CKEDITOR.tools.parseCssText(d));typeof e== +"string"&&(e=CKEDITOR.tools.parseCssText(e,true));f=void 0;for(f in d)if(!(f in e&&(e[f]==d[f]||d[f]=="inherit"||e[f]=="inherit"))){d=false;break a}d=true}else d=c[h]==e;if(d){if(!b)return true}else if(b)return false}if(b)return true}else return true}return false},checkElementRemovable:function(a,b,c){if(this.checkElementMatch(a,b,c))return true;if(b=B(this)[a.getName()]){var d;if(!(b=b.attributes))return true;for(c=0;c<b.length;c++){d=b[c][0];if(d=a.getAttribute(d)){var e=b[c][1];if(e===null)return true; +if(typeof e=="string"){if(d==e)return true}else if(e.test(d))return true}}}return false},buildPreview:function(a){var b=this._.definition,c=[],d=b.element;d=="bdo"&&(d="span");var c=["<",d],e=b.attributes;if(e)for(var g in e)c.push(" ",g,'="',e[g],'"');(e=CKEDITOR.style.getStyleText(b))&&c.push(' style="',e,'"');c.push(">",a||b.name,"</",d,">");return c.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b;var b=a.styles,c= +a.attributes&&a.attributes.style||"",d="";c.length&&(c=c.replace(F,";"));for(var e in b){var g=b[e],f=(e+":"+g).replace(F,";");g=="inherit"?d=d+f:c=c+f}c.length&&(c=CKEDITOR.tools.normalizeCssText(c,true));return a._ST=c+d};CKEDITOR.style.customHandlers={};CKEDITOR.style.addCustomHandler=function(a){var b=function(a){this._={definition:a};this.setup&&this.setup(a)};b.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),{assignedTo:CKEDITOR.STYLE_OBJECT},a,true); +return this.customHandlers[a.type]=b};var L=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,E=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED})();CKEDITOR.styleCommand=function(a,d){this.requiredContent=this.allowedContent=this.style=a;CKEDITOR.tools.extend(this,d,true)}; +CKEDITOR.styleCommand.prototype.exec=function(a){a.focus();this.state==CKEDITOR.TRISTATE_OFF?a.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&a.removeStyle(this.style)};CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet");CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet);CKEDITOR.loadStylesSet=function(a,d,b){CKEDITOR.stylesSet.addExternal(a,d,"");CKEDITOR.stylesSet.load(a,b)}; +CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(a,d){var b=this._.styleStateChangeCallbacks;if(!b){b=this._.styleStateChangeCallbacks=[];this.on("selectionChange",function(a){for(var d=0;d<b.length;d++){var f=b[d],h=f.style.checkActive(a.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;f.fn.call(this,h)}})}b.push({style:a,fn:d})},applyStyle:function(a){a.apply(this)},removeStyle:function(a){a.remove(this)},getStylesSet:function(a){if(this._.stylesDefinitions)a(this._.stylesDefinitions); +else{var d=this,b=d.config.stylesCombo_stylesSet||d.config.stylesSet;if(b===false)a(null);else if(b instanceof Array){d._.stylesDefinitions=b;a(b)}else{b||(b="default");var b=b.split(":"),c=b[0];CKEDITOR.stylesSet.addExternal(c,b[1]?b.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(c,function(b){d._.stylesDefinitions=b[c];a(d._.stylesDefinitions)})}}}}); +CKEDITOR.dom.comment=function(a,d){typeof a=="string"&&(a=(d?d.$:document).createComment(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node;CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"<\!--"+this.$.nodeValue+"--\>"}});"use strict"; +(function(){var a={},d={},b;for(b in CKEDITOR.dtd.$blockLimit)b in CKEDITOR.dtd.$list||(a[b]=1);for(b in CKEDITOR.dtd.$block)b in CKEDITOR.dtd.$blockLimit||b in CKEDITOR.dtd.$empty||(d[b]=1);CKEDITOR.dom.elementPath=function(b,e){var f=null,h=null,i=[],j=b,n,e=e||b.getDocument().getBody();do if(j.type==CKEDITOR.NODE_ELEMENT){i.push(j);if(!this.lastElement){this.lastElement=j;if(j.is(CKEDITOR.dtd.$object)||j.getAttribute("contenteditable")=="false")continue}if(j.equals(e))break;if(!h){n=j.getName(); +j.getAttribute("contenteditable")=="true"?h=j:!f&&d[n]&&(f=j);if(a[n]){var g;if(g=!f){if(n=n=="div"){a:{n=j.getChildren();g=0;for(var A=n.count();g<A;g++){var r=n.getItem(g);if(r.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[r.getName()]){n=true;break a}}n=false}n=!n}g=n}g?f=j:h=j}}}while(j=j.getParent());h||(h=e);this.block=f;this.blockLimit=h;this.root=e;this.elements=i}})(); +CKEDITOR.dom.elementPath.prototype={compare:function(a){var d=this.elements,a=a&&a.elements;if(!a||d.length!=a.length)return false;for(var b=0;b<d.length;b++)if(!d[b].equals(a[b]))return false;return true},contains:function(a,d,b){var c;typeof a=="string"&&(c=function(b){return b.getName()==a});a instanceof CKEDITOR.dom.element?c=function(b){return b.equals(a)}:CKEDITOR.tools.isArray(a)?c=function(b){return CKEDITOR.tools.indexOf(a,b.getName())>-1}:typeof a=="function"?c=a:typeof a=="object"&&(c= +function(b){return b.getName()in a});var e=this.elements,f=e.length;d&&f--;if(b){e=Array.prototype.slice.call(e,0);e.reverse()}for(d=0;d<f;d++)if(c(e[d]))return e[d];return null},isContextFor:function(a){var d;if(a in CKEDITOR.dtd.$block){d=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit;return!!d.getDtd()[a]}return true},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}}; +CKEDITOR.dom.text=function(a,d){typeof a=="string"&&(a=(d?d.$:document).createTextNode(a));this.$=a};CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node; +CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(a){this.$.nodeValue=a},split:function(a){var d=this.$.parentNode,b=d.childNodes.length,c=this.getLength(),e=this.getDocument(),f=new CKEDITOR.dom.text(this.$.splitText(a),e);if(d.childNodes.length==b)if(a>=c){f=e.createText("");f.insertAfter(this)}else{a=e.createText("");a.insertAfter(f);a.remove()}return f},substring:function(a, +d){return typeof d!="number"?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,d)}}); +(function(){function a(a,c,d){var f=a.serializable,h=c[d?"endContainer":"startContainer"],i=d?"endOffset":"startOffset",j=f?c.document.getById(a.startNode):a.startNode,a=f?c.document.getById(a.endNode):a.endNode;if(h.equals(j.getPrevious())){c.startOffset=c.startOffset-h.getLength()-a.getPrevious().getLength();h=a.getNext()}else if(h.equals(a.getPrevious())){c.startOffset=c.startOffset-h.getLength();h=a.getNext()}h.equals(j.getParent())&&c[i]++;h.equals(a.getParent())&&c[i]++;c[d?"endContainer":"startContainer"]= +h;return c}CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,d)};var d={createIterator:function(){var a=this,c=CKEDITOR.dom.walker.bookmark(),d=[],f;return{getNextRange:function(h){f=f===void 0?0:f+1;var i=a[f];if(i&&a.length>1){if(!f)for(var j=a.length-1;j>=0;j--)d.unshift(a[j].createBookmark(true));if(h)for(var n=0;a[f+n+1];){for(var g=i.document,h=0,j=g.getById(d[n].endNode),g=g.getById(d[n+ +1].startNode);;){j=j.getNextSourceNode(false);if(g.equals(j))h=1;else if(c(j)||j.type==CKEDITOR.NODE_ELEMENT&&j.isBlockBoundary())continue;break}if(!h)break;n++}for(i.moveToBookmark(d.shift());n--;){j=a[++f];j.moveToBookmark(d.shift());i.setEnd(j.endContainer,j.endOffset)}}return i}}},createBookmarks:function(b){for(var c=[],d,f=0;f<this.length;f++){c.push(d=this[f].createBookmark(b,true));for(var h=f+1;h<this.length;h++){this[h]=a(d,this[h]);this[h]=a(d,this[h],true)}}return c},createBookmarks2:function(a){for(var c= +[],d=0;d<this.length;d++)c.push(this[d].createBookmark2(a));return c},moveToBookmarks:function(a){for(var c=0;c<this.length;c++)this[c].moveToBookmark(a[c])}}})(); +(function(){function a(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function d(b){var c=CKEDITOR.skin["ua_"+b],d=CKEDITOR.env;if(c)for(var c=c.split(",").sort(function(a,b){return a>b?-1:1}),e=0,f;e<c.length;e++){f=c[e];if(d.ie&&(f.replace(/^ie/,"")==d.version||d.quirks&&f=="iequirks"))f="ie";if(d[f]){b=b+("_"+c[e]);break}}return CKEDITOR.getUrl(a()+b+".css")}function b(a,b){if(!f[a]){CKEDITOR.document.appendStyleSheet(d(a));f[a]=1}b&&b()} +function c(a){var b=a.getById(h);if(!b){b=a.getHead().append("style");b.setAttribute("id",h);b.setAttribute("type","text/css")}return b}function e(a,b,c){var d,e,f;if(CKEDITOR.env.webkit){b=b.split("}").slice(0,-1);for(e=0;e<b.length;e++)b[e]=b[e].split("{")}for(var h=0;h<a.length;h++)if(CKEDITOR.env.webkit)for(e=0;e<b.length;e++){f=b[e][1];for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);a[h].$.sheet.addRule(b[e][0],f)}else{f=b;for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);CKEDITOR.env.ie&& +CKEDITOR.env.version<11?a[h].$.styleSheet.cssText=a[h].$.styleSheet.cssText+f:a[h].$.innerHTML=a[h].$.innerHTML+f}}var f={};CKEDITOR.skin={path:a,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+"skin.js"),function(){b(c,d)}):b(c,d)},getPath:function(a){return CKEDITOR.getUrl(d(a))},icons:{},addIcon:function(a,b,c,d){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0,bgsize:d||"16px"})},getIconStyle:function(a, +b,c,d,e){var f;if(a){a=a.toLowerCase();b&&(f=this.icons[a+"-rtl"]);f||(f=this.icons[a])}a=c||f&&f.path||"";d=d||f&&f.offset;e=e||f&&f.bgsize||"16px";return a&&"background-image:url("+CKEDITOR.getUrl(a)+");background-position:0 "+d+"px;background-size:"+e+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=c(CKEDITOR.document);return(this.setUiColor=function(a){this.uiColor=a;var c=CKEDITOR.skin.chameleon,d="",f="";if(typeof c== +"function"){d=c(this,"editor");f=c(this,"panel")}a=[[j,a]];e([b],d,a);e(i,f,a)}).call(this,a)}});var h="cke_ui_color",i=[],j=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor,a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a=c(a);i.push(a);var d=b.getUiColor();d&&e([a],CKEDITOR.skin.chameleon(b,"panel"),[[j,d]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&& +b.setUiColor(b.config.uiColor)}})})(); +(function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=false;else{var a=CKEDITOR.dom.element.createFromHtml('<div style="width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"></div>',CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{var d=a.getComputedStyle("border-top-color"),b=a.getComputedStyle("border-right-color");CKEDITOR.env.hc=!!(d&&d==b)}catch(c){CKEDITOR.env.hc=false}a.remove()}if(CKEDITOR.env.hc)CKEDITOR.env.cssClass=CKEDITOR.env.cssClass+" cke_hc"; +CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(a=CKEDITOR._.pending){delete CKEDITOR._.pending;for(d=0;d<a.length;d++){CKEDITOR.editor.prototype.constructor.apply(a[d][0],a[d][1]);CKEDITOR.add(a[d][0])}}})();CKEDITOR.skin.name="bootstrapck";CKEDITOR.skin.ua_editor="ie,iequirks,ie7,ie8,gecko";CKEDITOR.skin.ua_dialog="ie,iequirks,ie7,ie8,opera"; +CKEDITOR.skin.chameleon=function(){var b=function(){return function(b,e){for(var a=b.match(/[^#]./g),c=0;3>c;c++){var f=a,h=c,d;d=parseInt(a[c],16);d=("0"+(0>e?0|d*(1+e):0|d+(255-d)*e).toString(16)).slice(-2);f[h]=d}return"#"+a.join("")}}(),c=function(){var b=new CKEDITOR.template("background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');");return function(c, +a){return b.output({from:c,to:a})}}(),f={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "), +panel:new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")}; +return function(g,e){var a=g.uiColor,a={id:"."+g.id,defaultBorder:b(a,-0.1),defaultGradient:c(b(a,0.9),a),lightGradient:c(b(a,1),b(a,0.7)),mediumGradient:c(b(a,0.8),b(a,0.5)),ckeButtonOn:c(b(a,0.6),b(a,0.7)),ckeResizer:b(a,-0.4),ckeToolbarSeparator:b(a,0.5),ckeColorauto:b(a,0.8),dialogBody:b(a,0.7),dialogTabSelected:c("#FFFFFF","#FFFFFF"),dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-0.6),elementsPathBg:a,menubuttonIcon:b(a,0.5),menubuttonIconHover:b(a,0.3)};return f[e].output(a).replace(/\[/g, +"{").replace(/\]/g,"}")}}();CKEDITOR.plugins.add("dialogui",{onLoad:function(){var h=function(b){this._||(this._={});this._["default"]=this._.initValue=b["default"]||"";this._.required=b.required||!1;for(var a=[this._],d=1;d<arguments.length;d++)a.push(arguments[d]);a.push(!0);CKEDITOR.tools.extend.apply(CKEDITOR.tools,a);return this._},r={build:function(b,a,d){return new CKEDITOR.ui.dialog.textInput(b,a,d)}},l={build:function(b,a,d){return new CKEDITOR.ui.dialog[a.type](b,a,d)}},n={isChanged:function(){return this.getValue()!= +this.getInitValue()},reset:function(b){this.setValue(this.getInitValue(),b)},setInitValue:function(){this._.initValue=this.getValue()},resetInitValue:function(){this._.initValue=this._["default"]},getInitValue:function(){return this._.initValue}},o=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(b,a){this._.domOnChangeRegistered||(b.on("load",function(){this.getInputElement().on("change",function(){b.parts.dialog.isVisible()&&this.fire("change",{value:this.getValue()})}, +this)},this),this._.domOnChangeRegistered=!0);this.on("change",a)}},!0),t=/^on([A-Z]\w+)/,p=function(b){for(var a in b)(t.test(a)||"title"==a||"type"==a)&&delete b[a];return b},s=function(b){b=b.data.getKeystroke();b==CKEDITOR.SHIFT+CKEDITOR.ALT+36?this.setDirectionMarker("ltr"):b==CKEDITOR.SHIFT+CKEDITOR.ALT+35&&this.setDirectionMarker("rtl")};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(b,a,d,f){if(!(4>arguments.length)){var c=h.call(this,a);c.labelId=CKEDITOR.tools.getNextId()+ +"_label";this._.children=[];var e={role:a.role||"presentation"};a.includeLabel&&(e["aria-labelledby"]=c.labelId);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"div",null,e,function(){var e=[],g=a.required?" cke_required":"";if(a.labelLayout!="horizontal")e.push('<label class="cke_dialog_ui_labeled_label'+g+'" ',' id="'+c.labelId+'"',c.inputId?' for="'+c.inputId+'"':"",(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",a.label,"</label>",'<div class="cke_dialog_ui_labeled_content"',a.controlStyle?' style="'+ +a.controlStyle+'"':"",' role="presentation">',f.call(this,b,a),"</div>");else{g={type:"hbox",widths:a.widths,padding:0,children:[{type:"html",html:'<label class="cke_dialog_ui_labeled_label'+g+'" id="'+c.labelId+'" for="'+c.inputId+'"'+(a.labelStyle?' style="'+a.labelStyle+'"':"")+">"+CKEDITOR.tools.htmlEncode(a.label)+"</label>"},{type:"html",html:'<span class="cke_dialog_ui_labeled_content"'+(a.controlStyle?' style="'+a.controlStyle+'"':"")+">"+f.call(this,b,a)+"</span>"}]};CKEDITOR.dialog._.uiElementBuilders.hbox.build(b, +g,e)}return e.join("")})}},textInput:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",c={"class":"cke_dialog_ui_input_"+a.type,id:f,type:a.type};a.validate&&(this.validate=a.validate);a.maxLength&&(c.maxlength=a.maxLength);a.size&&(c.size=a.size);a.inputStyle&&(c.style=a.inputStyle);var e=this,k=!1;b.on("load",function(){e.getInputElement().on("keydown",function(a){a.data.getKeystroke()==13&&(k=true)});e.getInputElement().on("keyup", +function(a){if(a.data.getKeystroke()==13&&k){b.getButton("ok")&&setTimeout(function(){b.getButton("ok").click()},0);k=false}e.bidi&&s.call(e,a)},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var b=['<div class="cke_dialog_ui_input_',a.type,'" role="presentation"'];a.width&&b.push('style="width:'+a.width+'" ');b.push("><input ");c["aria-labelledby"]=this._.labelId;this._.required&&(c["aria-required"]=this._.required);for(var e in c)b.push(e+'="'+c[e]+'" ');b.push(" /></div>"); +return b.join("")})}},textarea:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this,c=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",e={};a.validate&&(this.validate=a.validate);e.rows=a.rows||5;e.cols=a.cols||20;e["class"]="cke_dialog_ui_input_textarea "+(a["class"]||"");"undefined"!=typeof a.inputStyle&&(e.style=a.inputStyle);a.dir&&(e.dir=a.dir);if(f.bidi)b.on("load",function(){f.getInputElement().on("keyup",s)},f);CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){e["aria-labelledby"]= +this._.labelId;this._.required&&(e["aria-required"]=this._.required);var a=['<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea id="',c,'" '],b;for(b in e)a.push(b+'="'+CKEDITOR.tools.htmlEncode(e[b])+'" ');a.push(">",CKEDITOR.tools.htmlEncode(f._["default"]),"</textarea></div>");return a.join("")})}},checkbox:function(b,a,d){if(!(3>arguments.length)){var f=h.call(this,a,{"default":!!a["default"]});a.validate&&(this.validate=a.validate);CKEDITOR.ui.dialog.uiElement.call(this, +b,a,d,"span",null,null,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},true),e=[],d=CKEDITOR.tools.getNextId()+"_label",g={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":d};p(c);if(a["default"])g.checked="checked";if(typeof c.inputStyle!="undefined")c.style=c.inputStyle;f.checkbox=new CKEDITOR.ui.dialog.uiElement(b,c,e,"input",null,g);e.push(' <label id="',d,'" for="',g.id,'"'+(a.labelStyle?' style="'+a.labelStyle+ +'"':"")+">",CKEDITOR.tools.htmlEncode(a.label),"</label>");return e.join("")})}},radio:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);this._["default"]||(this._["default"]=this._.initValue=a.items[0][1]);a.validate&&(this.validate=a.validate);var f=[],c=this;a.role="radiogroup";a.includeLabel=!0;CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){for(var e=[],d=[],g=(a.id?a.id:CKEDITOR.tools.getNextId())+"_radio",i=0;i<a.items.length;i++){var j=a.items[i],h=j[2]!==void 0?j[2]:j[0], +l=j[1]!==void 0?j[1]:j[0],m=CKEDITOR.tools.getNextId()+"_radio_input",n=m+"_label",m=CKEDITOR.tools.extend({},a,{id:m,title:null,type:null},true),h=CKEDITOR.tools.extend({},m,{title:h},true),o={type:"radio","class":"cke_dialog_ui_radio_input",name:g,value:l,"aria-labelledby":n},q=[];if(c._["default"]==l)o.checked="checked";p(m);p(h);if(typeof m.inputStyle!="undefined")m.style=m.inputStyle;m.keyboardFocusable=true;f.push(new CKEDITOR.ui.dialog.uiElement(b,m,q,"input",null,o));q.push(" ");new CKEDITOR.ui.dialog.uiElement(b, +h,q,"label",null,{id:n,"for":o.id},j[0]);e.push(q.join(""))}new CKEDITOR.ui.dialog.hbox(b,f,e,d);return d.join("")});this._.children=f}},button:function(b,a,d){if(arguments.length){"function"==typeof a&&(a=a(b.getParentEditor()));h.call(this,a,{disabled:a.disabled||!1});CKEDITOR.event.implementOn(this);var f=this;b.on("load",function(){var a=this.getElement();(function(){a.on("click",function(a){f.click();a.data.preventDefault()});a.on("keydown",function(a){a.data.getKeystroke()in{32:1}&&(f.click(), +a.data.preventDefault())})})();a.unselectable()},this);var c=CKEDITOR.tools.extend({},a);delete c.style;var e=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,b,c,d,"a",null,{style:a.style,href:"javascript:void(0)",title:a.label,hidefocus:"true","class":a["class"],role:"button","aria-labelledby":e},'<span id="'+e+'" class="cke_dialog_ui_button">'+CKEDITOR.tools.htmlEncode(a.label)+"</span>")}},select:function(b,a,d){if(!(3>arguments.length)){var f=h.call(this,a);a.validate&& +(this.validate=a.validate);f.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_select":CKEDITOR.tools.getNextId()+"_select"},true),e=[],d=[],g={id:f.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId};e.push('<div class="cke_dialog_ui_input_',a.type,'" role="presentation"');a.width&&e.push('style="width:'+a.width+'" ');e.push(">");if(a.size!==void 0)g.size=a.size;if(a.multiple!== +void 0)g.multiple=a.multiple;p(c);for(var i=0,j;i<a.items.length&&(j=a.items[i]);i++)d.push('<option value="',CKEDITOR.tools.htmlEncode(j[1]!==void 0?j[1]:j[0]).replace(/"/g,"&quot;"),'" /> ',CKEDITOR.tools.htmlEncode(j[0]));if(typeof c.inputStyle!="undefined")c.style=c.inputStyle;f.select=new CKEDITOR.ui.dialog.uiElement(b,c,e,"select",null,g,d.join(""));e.push("</div>");return e.join("")})}},file:function(b,a,d){if(!(3>arguments.length)){void 0===a["default"]&&(a["default"]="");var f=CKEDITOR.tools.extend(h.call(this, +a),{definition:a,buttons:[]});a.validate&&(this.validate=a.validate);b.on("load",function(){CKEDITOR.document.getById(f.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){f.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var b=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" role="presentation" id="',f.frameId,'" title="',a.label,'" src="javascript:void('];b.push(CKEDITOR.env.ie?"(function(){"+encodeURIComponent("document.open();("+ +CKEDITOR.tools.fixDomain+")();document.close();")+"})()":"0");b.push(')"></iframe>');return b.join("")})}},fileButton:function(b,a,d){var f=this;if(!(3>arguments.length)){h.call(this,a);a.validate&&(this.validate=a.validate);var c=CKEDITOR.tools.extend({},a),e=c.onClick;c.className=(c.className?c.className+" ":"")+"cke_dialog_ui_button";c.onClick=function(c){var d=a["for"];if(!e||e.call(this,c)!==false){b.getContentElement(d[0],d[1]).submit();this.disable()}};b.on("load",function(){b.getContentElement(a["for"][0], +a["for"][1])._.buttons.push(f)});CKEDITOR.ui.dialog.button.call(this,b,c,d)}},html:function(){var b=/^\s*<[\w:]+\s+([^>]*)?>/,a=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,d=/\/$/;return function(f,c,e){if(!(3>arguments.length)){var k=[],g=c.html;"<"!=g.charAt(0)&&(g="<span>"+g+"</span>");var i=c.focus;if(i){var j=this.focus;this.focus=function(){("function"==typeof i?i:j).call(this);this.fire("focus")};c.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0}CKEDITOR.ui.dialog.uiElement.call(this, +f,c,k,"span",null,null,"");k=k.join("").match(b);g=g.match(a)||["","",""];d.test(g[1])&&(g[1]=g[1].slice(0,-1),g[2]="/"+g[2]);e.push([g[1]," ",k[1]||"",g[2]].join(""))}}}(),fieldset:function(b,a,d,f,c){var e=c.label;this._={children:a};CKEDITOR.ui.dialog.uiElement.call(this,b,c,f,"fieldset",null,null,function(){var a=[];e&&a.push("<legend"+(c.labelStyle?' style="'+c.labelStyle+'"':"")+">"+e+"</legend>");for(var b=0;b<d.length;b++)a.push(d[b]);return a.join("")})}},!0);CKEDITOR.ui.dialog.html.prototype= +new CKEDITOR.ui.dialog.uiElement;CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setLabel:function(b){var a=CKEDITOR.document.getById(this._.labelId);1>a.getChildCount()?(new CKEDITOR.dom.text(b,CKEDITOR.document)).appendTo(a):a.getChild(0).$.nodeValue=b;return this},getLabel:function(){var b=CKEDITOR.document.getById(this._.labelId);return!b||1>b.getChildCount()?"":b.getChild(0).getText()},eventProcessors:o},!0);CKEDITOR.ui.dialog.button.prototype= +CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return!this._.disabled?this.fire("click",{dialog:this._.dialog}):!1},enable:function(){this._.disabled=!1;var b=this.getElement();b&&b.removeClass("cke_disabled")},disable:function(){this._.disabled=!0;this.getElement().addClass("cke_disabled")},isVisible:function(){return this.getElement().getFirst().isVisible()},isEnabled:function(){return!this._.disabled},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, +{onClick:function(b,a){this.on("click",function(){a.apply(this,arguments)})}},!0),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)},focus:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&a.$.focus()},0)},select:function(){var b=this.selectParentTab(); +setTimeout(function(){var a=b.getInputElement();a&&(a.$.focus(),a.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(b){if(this.bidi){var a=b&&b.charAt(0);(a="‪"==a?"ltr":"‫"==a?"rtl":null)&&(b=b.slice(1));this.setDirectionMarker(a)}b||(b="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)},getValue:function(){var b=CKEDITOR.ui.dialog.uiElement.prototype.getValue.call(this);if(this.bidi&&b){var a=this.getDirectionMarker();a&&(b=("ltr"==a?"‪":"‫")+ +b)}return b},setDirectionMarker:function(b){var a=this.getInputElement();b?a.setAttributes({dir:b,"data-cke-dir-marker":b}):this.getDirectionMarker()&&a.removeAttributes(["dir","data-cke-dir-marker"])},getDirectionMarker:function(){return this.getInputElement().data("cke-dir-marker")},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.textarea.prototype=new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement()}, +add:function(b,a,d){var f=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),c=this.getInputElement().$;f.$.text=b;f.$.value=void 0===a||null===a?b:a;void 0===d||null===d?CKEDITOR.env.ie?c.add(f.$):c.add(f.$,null):c.add(f.$,d);return this},remove:function(b){this.getInputElement().$.remove(b);return this},clear:function(){for(var b=this.getInputElement().$;0<b.length;)b.remove(0);return this},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement, +{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(b,a){this.getInputElement().$.checked=b;!a&&this.fire("change",{value:b})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(b,a){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return o.onChange.apply(this,arguments);b.on("load",function(){var a=this._.checkbox.getElement();a.on("propertychange",function(b){b=b.data.$; +"checked"==b.propertyName&&this.fire("change",{value:a.$.checked})},this)},this);this.on("change",a);return null}},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setValue:function(b,a){for(var d=this._.children,f,c=0;c<d.length&&(f=d[c]);c++)f.getElement().$.checked=f.getValue()==b;!a&&this.fire("change",{value:b})},getValue:function(){for(var b=this._.children,a=0;a<b.length;a++)if(b[a].getElement().$.checked)return b[a].getValue(); +return null},accessKeyUp:function(){var b=this._.children,a;for(a=0;a<b.length;a++)if(b[a].getElement().$.checked){b[a].getElement().focus();return}b[0].getElement().focus()},eventProcessors:{onChange:function(b,a){if(CKEDITOR.env.ie)b.on("load",function(){for(var a=this._.children,b=this,c=0;c<a.length;c++)a[c].getElement().on("propertychange",function(a){a=a.data.$;"checked"==a.propertyName&&this.$.checked&&b.fire("change",{value:this.getAttribute("value")})})},this),this.on("change",a);else return o.onChange.apply(this, +arguments);return null}}},n,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,n,{getInputElement:function(){var b=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<b.$.forms.length?new CKEDITOR.dom.element(b.$.forms[0].elements[0]):this.getElement()},submit:function(){this.getInputElement().getParent().$.submit();return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(b){var a= +/^on([A-Z]\w+)/,d,f=function(a,b,c,d){a.on("formLoaded",function(){a.getInputElement().on(c,d,a)})},c;for(c in b)if(d=c.match(a))this.eventProcessors[c]?this.eventProcessors[c].call(this,this._.dialog,b[c]):f(this,this._.dialog,d[1].toLowerCase(),b[c]);return this},reset:function(){function b(){d.$.open();var b="";f.size&&(b=f.size-(CKEDITOR.env.ie?7:0));var h=a.frameId+"_input";d.$.write(['<html dir="'+g+'" lang="'+i+'"><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">', +'<form enctype="multipart/form-data" method="POST" dir="'+g+'" lang="'+i+'" action="',CKEDITOR.tools.htmlEncode(f.action),'"><label id="',a.labelId,'" for="',h,'" style="display:none">',CKEDITOR.tools.htmlEncode(f.label),'</label><input style="width:100%" id="',h,'" aria-labelledby="',a.labelId,'" type="file" name="',CKEDITOR.tools.htmlEncode(f.id||"cke_upload"),'" size="',CKEDITOR.tools.htmlEncode(0<b?b:""),'" /></form></body></html><script>',CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"", +"window.parent.CKEDITOR.tools.callFunction("+e+");","window.onbeforeunload = function() {window.parent.CKEDITOR.tools.callFunction("+k+")}","<\/script>"].join(""));d.$.close();for(b=0;b<c.length;b++)c[b].enable()}var a=this._,d=CKEDITOR.document.getById(a.frameId).getFrameDocument(),f=a.definition,c=a.buttons,e=this.formLoadedNumber,k=this.formUnloadNumber,g=a.dialog._.editor.lang.dir,i=a.dialog._.editor.langCode;e||(e=this.formLoadedNumber=CKEDITOR.tools.addFunction(function(){this.fire("formLoaded")}, +this),k=this.formUnloadNumber=CKEDITOR.tools.addFunction(function(){this.getInputElement().clearCustomData()},this),this.getDialog()._.editor.on("destroy",function(){CKEDITOR.tools.removeFunction(e);CKEDITOR.tools.removeFunction(k)}));CKEDITOR.env.gecko?setTimeout(b,500):b()},getValue:function(){return this.getInputElement().$.value||""},setInitValue:function(){this._.initValue=""},eventProcessors:{onChange:function(b,a){this._.domOnChangeRegistered||(this.on("formLoaded",function(){this.getInputElement().on("change", +function(){this.fire("change",{value:this.getValue()})},this)},this),this._.domOnChangeRegistered=!0);this.on("change",a)}},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.fileButton.prototype=new CKEDITOR.ui.dialog.button;CKEDITOR.ui.dialog.fieldset.prototype=CKEDITOR.tools.clone(CKEDITOR.ui.dialog.hbox.prototype);CKEDITOR.dialog.addUIElement("text",r);CKEDITOR.dialog.addUIElement("password",r);CKEDITOR.dialog.addUIElement("textarea",l);CKEDITOR.dialog.addUIElement("checkbox",l);CKEDITOR.dialog.addUIElement("radio", +l);CKEDITOR.dialog.addUIElement("button",l);CKEDITOR.dialog.addUIElement("select",l);CKEDITOR.dialog.addUIElement("file",l);CKEDITOR.dialog.addUIElement("fileButton",l);CKEDITOR.dialog.addUIElement("html",l);CKEDITOR.dialog.addUIElement("fieldset",{build:function(b,a,d){for(var f=a.children,c,e=[],h=[],g=0;g<f.length&&(c=f[g]);g++){var i=[];e.push(i);h.push(CKEDITOR.dialog._.uiElementBuilders[c.type].build(b,c,i))}return new CKEDITOR.ui.dialog[a.type](b,h,e,d,a)}})}});CKEDITOR.DIALOG_RESIZE_NONE=0;CKEDITOR.DIALOG_RESIZE_WIDTH=1;CKEDITOR.DIALOG_RESIZE_HEIGHT=2;CKEDITOR.DIALOG_RESIZE_BOTH=3;CKEDITOR.DIALOG_STATE_IDLE=1;CKEDITOR.DIALOG_STATE_BUSY=2; +(function(){function t(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId)+a,c=b-1;c>b-a;c--)if(this._.tabs[this._.tabIdList[c%a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function w(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId),c=b+1;c<b+a;c++)if(this._.tabs[this._.tabIdList[c%a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function G(a,b){for(var c=a.$.getElementsByTagName("input"), +e=0,d=c.length;e<d;e++){var g=new CKEDITOR.dom.element(c[e]);"text"==g.getAttribute("type").toLowerCase()&&(b?(g.setAttribute("value",g.getCustomData("fake_value")||""),g.removeCustomData("fake_value")):(g.setCustomData("fake_value",g.getAttribute("value")),g.setAttribute("value","")))}}function P(a,b){var c=this.getInputElement();c&&(a?c.removeAttribute("aria-invalid"):c.setAttribute("aria-invalid",!0));a||(this.select?this.select():this.focus());b&&alert(b);this.fire("validated",{valid:a,msg:b})} +function Q(){var a=this.getInputElement();a&&a.removeAttribute("aria-invalid")}function R(a){var b=CKEDITOR.dom.element.createFromHtml(CKEDITOR.addTemplate("dialog",S).output({id:CKEDITOR.tools.getNextNumber(),editorId:a.id,langDir:a.lang.dir,langCode:a.langCode,editorDialogClass:"cke_editor_"+a.name.replace(/\./g,"\\.")+"_dialog",closeTitle:a.lang.common.close,hidpi:CKEDITOR.env.hidpi?"cke_hidpi":""})),c=b.getChild([0,0,0,0,0]),e=c.getChild(0),d=c.getChild(1);a.plugins.clipboard&&CKEDITOR.plugins.clipboard.preventDefaultDropOnElement(c); +CKEDITOR.env.ie&&(!CKEDITOR.env.quirks&&!CKEDITOR.env.edge)&&(a="javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())",CKEDITOR.dom.element.createFromHtml('<iframe frameBorder="0" class="cke_iframe_shim" src="'+a+'" tabIndex="-1"></iframe>').appendTo(c.getParent()));e.unselectable();d.unselectable();return{element:b,parts:{dialog:b.getChild(0),title:e,close:d,tabs:c.getChild(2),contents:c.getChild([3,0,0,0]),footer:c.getChild([3, +0,1,0])}}}function H(a,b,c){this.element=b;this.focusIndex=c;this.tabIndex=0;this.isFocusable=function(){return!b.getAttribute("disabled")&&b.isVisible()};this.focus=function(){a._.currentFocusIndex=this.focusIndex;this.element.focus()};b.on("keydown",function(a){a.data.getKeystroke()in{32:1,13:1}&&this.fire("click")});b.on("focus",function(){this.fire("mouseover")});b.on("blur",function(){this.fire("mouseout")})}function T(a){function b(){a.layout()}var c=CKEDITOR.document.getWindow();c.on("resize", +b);a.on("hide",function(){c.removeListener("resize",b)})}function I(a,b){this._={dialog:a};CKEDITOR.tools.extend(this,b)}function U(a){function b(b){var c=a.getSize(),i=CKEDITOR.document.getWindow().getViewPaneSize(),o=b.data.$.screenX,j=b.data.$.screenY,n=o-e.x,k=j-e.y;e={x:o,y:j};d.x+=n;d.y+=k;a.move(d.x+h[3]<f?-h[3]:d.x-h[1]>i.width-c.width-f?i.width-c.width+("rtl"==g.lang.dir?0:h[1]):d.x,d.y+h[0]<f?-h[0]:d.y-h[2]>i.height-c.height-f?i.height-c.height+h[2]:d.y,1);b.data.preventDefault()}function c(){CKEDITOR.document.removeListener("mousemove", +b);CKEDITOR.document.removeListener("mouseup",c);if(CKEDITOR.env.ie6Compat){var a=q.getChild(0).getFrameDocument();a.removeListener("mousemove",b);a.removeListener("mouseup",c)}}var e=null,d=null,g=a.getParentEditor(),f=g.config.dialog_magnetDistance,h=CKEDITOR.skin.margins||[0,0,0,0];"undefined"==typeof f&&(f=20);a.parts.title.on("mousedown",function(f){e={x:f.data.$.screenX,y:f.data.$.screenY};CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",c);d=a.getPosition();if(CKEDITOR.env.ie6Compat){var h= +q.getChild(0).getFrameDocument();h.on("mousemove",b);h.on("mouseup",c)}f.data.preventDefault()},a)}function V(a){var b,c;function e(d){var e="rtl"==h.lang.dir,j=o.width,C=o.height,D=j+(d.data.$.screenX-b)*(e?-1:1)*(a._.moved?1:2),n=C+(d.data.$.screenY-c)*(a._.moved?1:2),x=a._.element.getFirst(),x=e&&x.getComputedStyle("right"),y=a.getPosition();y.y+n>i.height&&(n=i.height-y.y);if((e?x:y.x)+D>i.width)D=i.width-(e?x:y.x);if(f==CKEDITOR.DIALOG_RESIZE_WIDTH||f==CKEDITOR.DIALOG_RESIZE_BOTH)j=Math.max(g.minWidth|| +0,D-m);if(f==CKEDITOR.DIALOG_RESIZE_HEIGHT||f==CKEDITOR.DIALOG_RESIZE_BOTH)C=Math.max(g.minHeight||0,n-l);a.resize(j,C);a._.moved||a.layout();d.data.preventDefault()}function d(){CKEDITOR.document.removeListener("mouseup",d);CKEDITOR.document.removeListener("mousemove",e);j&&(j.remove(),j=null);if(CKEDITOR.env.ie6Compat){var a=q.getChild(0).getFrameDocument();a.removeListener("mouseup",d);a.removeListener("mousemove",e)}}var g=a.definition,f=g.resizable;if(f!=CKEDITOR.DIALOG_RESIZE_NONE){var h=a.getParentEditor(), +m,l,i,o,j,n=CKEDITOR.tools.addFunction(function(f){o=a.getSize();var h=a.parts.contents;h.$.getElementsByTagName("iframe").length&&(j=CKEDITOR.dom.element.createFromHtml('<div class="cke_dialog_resize_cover" style="height: 100%; position: absolute; width: 100%;"></div>'),h.append(j));l=o.height-a.parts.contents.getSize("height",!(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.quirks));m=o.width-a.parts.contents.getSize("width",1);b=f.screenX;c=f.screenY;i=CKEDITOR.document.getWindow().getViewPaneSize(); +CKEDITOR.document.on("mousemove",e);CKEDITOR.document.on("mouseup",d);CKEDITOR.env.ie6Compat&&(h=q.getChild(0).getFrameDocument(),h.on("mousemove",e),h.on("mouseup",d));f.preventDefault&&f.preventDefault()});a.on("load",function(){var b="";f==CKEDITOR.DIALOG_RESIZE_WIDTH?b=" cke_resizer_horizontal":f==CKEDITOR.DIALOG_RESIZE_HEIGHT&&(b=" cke_resizer_vertical");b=CKEDITOR.dom.element.createFromHtml('<div class="cke_resizer'+b+" cke_resizer_"+h.lang.dir+'" title="'+CKEDITOR.tools.htmlEncode(h.lang.common.resize)+ +'" onmousedown="CKEDITOR.tools.callFunction('+n+', event )">'+("ltr"==h.lang.dir?"◢":"◣")+"</div>");a.parts.footer.append(b,1)});h.on("destroy",function(){CKEDITOR.tools.removeFunction(n)})}}function E(a){a.data.preventDefault(1)}function J(a){var b=CKEDITOR.document.getWindow(),c=a.config,e=c.dialog_backgroundCoverColor||"white",d=c.dialog_backgroundCoverOpacity,g=c.baseFloatZIndex,c=CKEDITOR.tools.genKey(e,d,g),f=v[c];f?f.show():(g=['<div tabIndex="-1" style="position: ',CKEDITOR.env.ie6Compat? +"absolute":"fixed","; z-index: ",g,"; top: 0px; left: 0px; ",!CKEDITOR.env.ie6Compat?"background-color: "+e:"",'" class="cke_dialog_background_cover">'],CKEDITOR.env.ie6Compat&&(e="<html><body style=\\'background-color:"+e+";\\'></body></html>",g.push('<iframe hidefocus="true" frameborder="0" id="cke_dialog_background_iframe" src="javascript:'),g.push("void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.write( '"+e+"' );document.close();")+"})())"),g.push('" style="position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0)"></iframe>')), +g.push("</div>"),f=CKEDITOR.dom.element.createFromHtml(g.join("")),f.setOpacity(void 0!==d?d:0.5),f.on("keydown",E),f.on("keypress",E),f.on("keyup",E),f.appendTo(CKEDITOR.document.getBody()),v[c]=f);a.focusManager.add(f);q=f;var a=function(){var a=b.getViewPaneSize();f.setStyles({width:a.width+"px",height:a.height+"px"})},h=function(){var a=b.getScrollPosition(),c=CKEDITOR.dialog._.currentTop;f.setStyles({left:a.x+"px",top:a.y+"px"});if(c){do{a=c.getPosition();c.move(a.x,a.y)}while(c=c._.parentDialog) +}};F=a;b.on("resize",a);a();(!CKEDITOR.env.mac||!CKEDITOR.env.webkit)&&f.focus();if(CKEDITOR.env.ie6Compat){var m=function(){h();arguments.callee.prevScrollHandler.apply(this,arguments)};b.$.setTimeout(function(){m.prevScrollHandler=window.onscroll||function(){};window.onscroll=m},0);h()}}function K(a){q&&(a.focusManager.remove(q),a=CKEDITOR.document.getWindow(),q.hide(),a.removeListener("resize",F),CKEDITOR.env.ie6Compat&&a.$.setTimeout(function(){window.onscroll=window.onscroll&&window.onscroll.prevScrollHandler|| +null},0),F=null)}var r=CKEDITOR.tools.cssLength,S='<div class="cke_reset_all {editorId} {editorDialogClass} {hidpi}" dir="{langDir}" lang="{langCode}" role="dialog" aria-labelledby="cke_dialog_title_{id}"><table class="cke_dialog '+CKEDITOR.env.cssClass+' cke_{langDir}" style="position:absolute" role="presentation"><tr><td role="presentation"><div class="cke_dialog_body" role="presentation"><div id="cke_dialog_title_{id}" class="cke_dialog_title" role="presentation"></div><a id="cke_dialog_close_button_{id}" class="cke_dialog_close_button" href="javascript:void(0)" title="{closeTitle}" role="button"><span class="cke_label">X</span></a><div id="cke_dialog_tabs_{id}" class="cke_dialog_tabs" role="tablist"></div><table class="cke_dialog_contents" role="presentation"><tr><td id="cke_dialog_contents_{id}" class="cke_dialog_contents_body" role="presentation"></td></tr><tr><td id="cke_dialog_footer_{id}" class="cke_dialog_footer" role="presentation"></td></tr></table></div></td></tr></table></div>'; +CKEDITOR.dialog=function(a,b){function c(){var a=k._.focusList;a.sort(function(a,b){return a.tabIndex!=b.tabIndex?b.tabIndex-a.tabIndex:a.focusIndex-b.focusIndex});for(var b=a.length,c=0;c<b;c++)a[c].focusIndex=c}function e(a){var b=k._.focusList,a=a||0;if(!(1>b.length)){var c=k._.currentFocusIndex;k._.tabBarMode&&0>a&&(c=0);try{b[c].getInputElement().$.blur()}catch(f){}var d=c,e=1<k._.pageCount;do{d+=a;if(e&&!k._.tabBarMode&&(d==b.length||-1==d)){k._.tabBarMode=!0;k._.tabs[k._.currentTabId][0].focus(); +k._.currentFocusIndex=-1;return}d=(d+b.length)%b.length;if(d==c)break}while(a&&!b[d].isFocusable());b[d].focus();"text"==b[d].type&&b[d].select()}}function d(b){if(k==CKEDITOR.dialog._.currentTop){var c=b.data.getKeystroke(),d="rtl"==a.lang.dir,f=[37,38,39,40];o=j=0;if(9==c||c==CKEDITOR.SHIFT+9)e(c==CKEDITOR.SHIFT+9?-1:1),o=1;else if(c==CKEDITOR.ALT+121&&!k._.tabBarMode&&1<k.getPageCount())k._.tabBarMode=!0,k._.tabs[k._.currentTabId][0].focus(),k._.currentFocusIndex=-1,o=1;else if(-1!=CKEDITOR.tools.indexOf(f, +c)&&k._.tabBarMode)c=-1!=CKEDITOR.tools.indexOf([d?39:37,38],c)?t.call(k):w.call(k),k.selectPage(c),k._.tabs[c][0].focus(),o=1;else if((13==c||32==c)&&k._.tabBarMode)this.selectPage(this._.currentTabId),this._.tabBarMode=!1,this._.currentFocusIndex=-1,e(1),o=1;else if(13==c){c=b.data.getTarget();if(!c.is("a","button","select","textarea")&&(!c.is("input")||"button"!=c.$.type))(c=this.getButton("ok"))&&CKEDITOR.tools.setTimeout(c.click,0,c),o=1;j=1}else if(27==c)(c=this.getButton("cancel"))?CKEDITOR.tools.setTimeout(c.click, +0,c):!1!==this.fire("cancel",{hide:!0}).hide&&this.hide(),j=1;else return;g(b)}}function g(a){o?a.data.preventDefault(1):j&&a.data.stopPropagation()}var f=CKEDITOR.dialog._.dialogDefinitions[b],h=CKEDITOR.tools.clone(W),m=a.config.dialog_buttonsOrder||"OS",l=a.lang.dir,i={},o,j;("OS"==m&&CKEDITOR.env.mac||"rtl"==m&&"ltr"==l||"ltr"==m&&"rtl"==l)&&h.buttons.reverse();f=CKEDITOR.tools.extend(f(a),h);f=CKEDITOR.tools.clone(f);f=new L(this,f);h=R(a);this._={editor:a,element:h.element,name:b,contentSize:{width:0, +height:0},size:{width:0,height:0},contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:!1,focusList:[],currentFocusIndex:0,hasFocus:!1};this.parts=h.parts;CKEDITOR.tools.setTimeout(function(){a.fire("ariaWidget",this.parts.contents)},0,this);h={position:CKEDITOR.env.ie6Compat?"absolute":"fixed",top:0,visibility:"hidden"};h["rtl"==l?"right":"left"]=0;this.parts.dialog.setStyles(h);CKEDITOR.event.call(this);this.definition= +f=CKEDITOR.fire("dialogDefinition",{name:b,definition:f},a).definition;if(!("removeDialogTabs"in a._)&&a.config.removeDialogTabs){h=a.config.removeDialogTabs.split(";");for(l=0;l<h.length;l++)if(m=h[l].split(":"),2==m.length){var n=m[0];i[n]||(i[n]=[]);i[n].push(m[1])}a._.removeDialogTabs=i}if(a._.removeDialogTabs&&(i=a._.removeDialogTabs[b]))for(l=0;l<i.length;l++)f.removeContents(i[l]);if(f.onLoad)this.on("load",f.onLoad);if(f.onShow)this.on("show",f.onShow);if(f.onHide)this.on("hide",f.onHide); +if(f.onOk)this.on("ok",function(b){a.fire("saveSnapshot");setTimeout(function(){a.fire("saveSnapshot")},0);!1===f.onOk.call(this,b)&&(b.data.hide=!1)});this.state=CKEDITOR.DIALOG_STATE_IDLE;if(f.onCancel)this.on("cancel",function(a){!1===f.onCancel.call(this,a)&&(a.data.hide=!1)});var k=this,p=function(a){var b=k._.contents,c=!1,d;for(d in b)for(var f in b[d])if(c=a.call(this,b[d][f]))return};this.on("ok",function(a){p(function(b){if(b.validate){var c=b.validate(this),d="string"==typeof c||!1===c; +d&&(a.data.hide=!1,a.stop());P.call(b,!d,"string"==typeof c?c:void 0);return d}})},this,null,0);this.on("cancel",function(b){p(function(c){if(c.isChanged())return!a.config.dialog_noConfirmCancel&&!confirm(a.lang.common.confirmCancel)&&(b.data.hide=!1),!0})},this,null,0);this.parts.close.on("click",function(a){!1!==this.fire("cancel",{hide:!0}).hide&&this.hide();a.data.preventDefault()},this);this.changeFocus=e;var u=this._.element;a.focusManager.add(u,1);this.on("show",function(){u.on("keydown",d, +this);if(CKEDITOR.env.gecko)u.on("keypress",g,this)});this.on("hide",function(){u.removeListener("keydown",d);CKEDITOR.env.gecko&&u.removeListener("keypress",g);p(function(a){Q.apply(a)})});this.on("iframeAdded",function(a){(new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document)).on("keydown",d,this,null,0)});this.on("show",function(){c();var b=1<k._.pageCount;a.config.dialog_startupFocusTab&&b?(k._.tabBarMode=!0,k._.tabs[k._.currentTabId][0].focus(),k._.currentFocusIndex=-1):this._.hasFocus|| +(this._.currentFocusIndex=b?-1:this._.focusList.length-1,f.onFocus?(b=f.onFocus.call(this))&&b.focus():e(1))},this,null,4294967295);if(CKEDITOR.env.ie6Compat)this.on("load",function(){var a=this.getElement(),b=a.getFirst();b.remove();b.appendTo(a)},this);U(this);V(this);(new CKEDITOR.dom.text(f.title,CKEDITOR.document)).appendTo(this.parts.title);for(l=0;l<f.contents.length;l++)(i=f.contents[l])&&this.addPage(i);this.parts.tabs.on("click",function(a){var b=a.data.getTarget();b.hasClass("cke_dialog_tab")&& +(b=b.$.id,this.selectPage(b.substring(4,b.lastIndexOf("_"))),this._.tabBarMode&&(this._.tabBarMode=!1,this._.currentFocusIndex=-1,e(1)),a.data.preventDefault())},this);l=[];i=CKEDITOR.dialog._.uiElementBuilders.hbox.build(this,{type:"hbox",className:"cke_dialog_footer_buttons",widths:[],children:f.buttons},l).getChild();this.parts.footer.setHtml(l.join(""));for(l=0;l<i.length;l++)this._.buttons[i[l].id]=i[l]};CKEDITOR.dialog.prototype={destroy:function(){this.hide();this._.element.remove()},resize:function(){return function(a, +b){if(!this._.contentSize||!(this._.contentSize.width==a&&this._.contentSize.height==b))CKEDITOR.dialog.fire("resize",{dialog:this,width:a,height:b},this._.editor),this.fire("resize",{width:a,height:b},this._.editor),this.parts.contents.setStyles({width:a+"px",height:b+"px"}),"rtl"==this._.editor.lang.dir&&this._.position&&(this._.position.x=CKEDITOR.document.getWindow().getViewPaneSize().width-this._.contentSize.width-parseInt(this._.element.getFirst().getStyle("right"),10)),this._.contentSize={width:a, +height:b}}}(),getSize:function(){var a=this._.element.getFirst();return{width:a.$.offsetWidth||0,height:a.$.offsetHeight||0}},move:function(a,b,c){var e=this._.element.getFirst(),d="rtl"==this._.editor.lang.dir,g="fixed"==e.getComputedStyle("position");CKEDITOR.env.ie&&e.setStyle("zoom","100%");if(!g||!this._.position||!(this._.position.x==a&&this._.position.y==b))this._.position={x:a,y:b},g||(g=CKEDITOR.document.getWindow().getScrollPosition(),a+=g.x,b+=g.y),d&&(g=this.getSize(),a=CKEDITOR.document.getWindow().getViewPaneSize().width- +g.width-a),b={top:(0<b?b:0)+"px"},b[d?"right":"left"]=(0<a?a:0)+"px",e.setStyles(b),c&&(this._.moved=1)},getPosition:function(){return CKEDITOR.tools.extend({},this._.position)},show:function(){var a=this._.element,b=this.definition;!a.getParent()||!a.getParent().equals(CKEDITOR.document.getBody())?a.appendTo(CKEDITOR.document.getBody()):a.setStyle("display","block");this.resize(this._.contentSize&&this._.contentSize.width||b.width||b.minWidth,this._.contentSize&&this._.contentSize.height||b.height|| +b.minHeight);this.reset();this.selectPage(this.definition.contents[0].id);null===CKEDITOR.dialog._.currentZIndex&&(CKEDITOR.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex);this._.element.getFirst().setStyle("z-index",CKEDITOR.dialog._.currentZIndex+=10);null===CKEDITOR.dialog._.currentTop?(CKEDITOR.dialog._.currentTop=this,this._.parentDialog=null,J(this._.editor)):(this._.parentDialog=CKEDITOR.dialog._.currentTop,this._.parentDialog.getElement().getFirst().$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/ +2),CKEDITOR.dialog._.currentTop=this);a.on("keydown",M);a.on("keyup",N);this._.hasFocus=!1;for(var c in b.contents)if(b.contents[c]){var a=b.contents[c],e=this._.tabs[a.id],d=a.requiredContent,g=0;if(e){for(var f in this._.contents[a.id]){var h=this._.contents[a.id][f];"hbox"==h.type||("vbox"==h.type||!h.getInputElement())||(h.requiredContent&&!this._.editor.activeFilter.check(h.requiredContent)?h.disable():(h.enable(),g++))}!g||d&&!this._.editor.activeFilter.check(d)?e[0].addClass("cke_dialog_tab_disabled"): +e[0].removeClass("cke_dialog_tab_disabled")}}CKEDITOR.tools.setTimeout(function(){this.layout();T(this);this.parts.dialog.setStyle("visibility","");this.fireOnce("load",{});CKEDITOR.ui.fire("ready",this);this.fire("show",{});this._.editor.fire("dialogShow",this);this._.parentDialog||this._.editor.focusManager.lock();this.foreach(function(a){a.setInitValue&&a.setInitValue()})},100,this)},layout:function(){var a=this.parts.dialog,b=this.getSize(),c=CKEDITOR.document.getWindow().getViewPaneSize(),e= +(c.width-b.width)/2,d=(c.height-b.height)/2;CKEDITOR.env.ie6Compat||(b.height+(0<d?d:0)>c.height||b.width+(0<e?e:0)>c.width?a.setStyle("position","absolute"):a.setStyle("position","fixed"));this.move(this._.moved?this._.position.x:e,this._.moved?this._.position.y:d)},foreach:function(a){for(var b in this._.contents)for(var c in this._.contents[b])a.call(this,this._.contents[b][c]);return this},reset:function(){var a=function(a){a.reset&&a.reset(1)};return function(){this.foreach(a);return this}}(), +setupContent:function(){var a=arguments;this.foreach(function(b){b.setup&&b.setup.apply(b,a)})},commitContent:function(){var a=arguments;this.foreach(function(b){CKEDITOR.env.ie&&this._.currentFocusIndex==b.focusIndex&&b.getInputElement().$.blur();b.commit&&b.commit.apply(b,a)})},hide:function(){if(this.parts.dialog.isVisible()){this.fire("hide",{});this._.editor.fire("dialogHide",this);this.selectPage(this._.tabIdList[0]);var a=this._.element;a.setStyle("display","none");this.parts.dialog.setStyle("visibility", +"hidden");for(X(this);CKEDITOR.dialog._.currentTop!=this;)CKEDITOR.dialog._.currentTop.hide();if(this._.parentDialog){var b=this._.parentDialog.getElement().getFirst();b.setStyle("z-index",parseInt(b.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2))}else K(this._.editor);if(CKEDITOR.dialog._.currentTop=this._.parentDialog)CKEDITOR.dialog._.currentZIndex-=10;else{CKEDITOR.dialog._.currentZIndex=null;a.removeListener("keydown",M);a.removeListener("keyup",N);var c=this._.editor; +c.focus();setTimeout(function(){c.focusManager.unlock();CKEDITOR.env.iOS&&c.window.focus()},0)}delete this._.parentDialog;this.foreach(function(a){a.resetInitValue&&a.resetInitValue()});this.setState(CKEDITOR.DIALOG_STATE_IDLE)}},addPage:function(a){if(!a.requiredContent||this._.editor.filter.check(a.requiredContent)){for(var b=[],c=a.label?' title="'+CKEDITOR.tools.htmlEncode(a.label)+'"':"",e=CKEDITOR.dialog._.uiElementBuilders.vbox.build(this,{type:"vbox",className:"cke_dialog_page_contents",children:a.elements, +expand:!!a.expand,padding:a.padding,style:a.style||"width: 100%;"},b),d=this._.contents[a.id]={},g=e.getChild(),f=0;e=g.shift();)!e.notAllowed&&("hbox"!=e.type&&"vbox"!=e.type)&&f++,d[e.id]=e,"function"==typeof e.getChild&&g.push.apply(g,e.getChild());f||(a.hidden=!0);b=CKEDITOR.dom.element.createFromHtml(b.join(""));b.setAttribute("role","tabpanel");e=CKEDITOR.env;d="cke_"+a.id+"_"+CKEDITOR.tools.getNextNumber();c=CKEDITOR.dom.element.createFromHtml(['<a class="cke_dialog_tab"',0<this._.pageCount? +" cke_last":"cke_first",c,a.hidden?' style="display:none"':"",' id="',d,'"',e.gecko&&!e.hc?"":' href="javascript:void(0)"',' tabIndex="-1" hidefocus="true" role="tab">',a.label,"</a>"].join(""));b.setAttribute("aria-labelledby",d);this._.tabs[a.id]=[c,b];this._.tabIdList.push(a.id);!a.hidden&&this._.pageCount++;this._.lastTab=c;this.updateStyle();b.setAttribute("name",a.id);b.appendTo(this.parts.contents);c.unselectable();this.parts.tabs.append(c);a.accessKey&&(O(this,this,"CTRL+"+a.accessKey,Y,Z), +this._.accessKeyMap["CTRL+"+a.accessKey]=a.id)}},selectPage:function(a){if(this._.currentTabId!=a&&!this._.tabs[a][0].hasClass("cke_dialog_tab_disabled")&&!1!==this.fire("selectPage",{page:a,currentPage:this._.currentTabId})){for(var b in this._.tabs){var c=this._.tabs[b][0],e=this._.tabs[b][1];b!=a&&(c.removeClass("cke_dialog_tab_selected"),e.hide());e.setAttribute("aria-hidden",b!=a)}var d=this._.tabs[a];d[0].addClass("cke_dialog_tab_selected");CKEDITOR.env.ie6Compat||CKEDITOR.env.ie7Compat?(G(d[1]), +d[1].show(),setTimeout(function(){G(d[1],1)},0)):d[1].show();this._.currentTabId=a;this._.currentTabIndex=CKEDITOR.tools.indexOf(this._.tabIdList,a)}},updateStyle:function(){this.parts.dialog[(1===this._.pageCount?"add":"remove")+"Class"]("cke_single_page")},hidePage:function(a){var b=this._.tabs[a]&&this._.tabs[a][0];b&&(1!=this._.pageCount&&b.isVisible())&&(a==this._.currentTabId&&this.selectPage(t.call(this)),b.hide(),this._.pageCount--,this.updateStyle())},showPage:function(a){if(a=this._.tabs[a]&& +this._.tabs[a][0])a.show(),this._.pageCount++,this.updateStyle()},getElement:function(){return this._.element},getName:function(){return this._.name},getContentElement:function(a,b){var c=this._.contents[a];return c&&c[b]},getValueOf:function(a,b){return this.getContentElement(a,b).getValue()},setValueOf:function(a,b,c){return this.getContentElement(a,b).setValue(c)},getButton:function(a){return this._.buttons[a]},click:function(a){return this._.buttons[a].click()},disableButton:function(a){return this._.buttons[a].disable()}, +enableButton:function(a){return this._.buttons[a].enable()},getPageCount:function(){return this._.pageCount},getParentEditor:function(){return this._.editor},getSelectedElement:function(){return this.getParentEditor().getSelection().getSelectedElement()},addFocusable:function(a,b){if("undefined"==typeof b)b=this._.focusList.length,this._.focusList.push(new H(this,a,b));else{this._.focusList.splice(b,0,new H(this,a,b));for(var c=b+1;c<this._.focusList.length;c++)this._.focusList[c].focusIndex++}}, +setState:function(a){if(this.state!=a){this.state=a;if(a==CKEDITOR.DIALOG_STATE_BUSY){if(!this.parts.spinner){var b=this.getParentEditor().lang.dir,c={attributes:{"class":"cke_dialog_spinner"},styles:{"float":"rtl"==b?"right":"left"}};c.styles["margin-"+("rtl"==b?"left":"right")]="8px";this.parts.spinner=CKEDITOR.document.createElement("div",c);this.parts.spinner.setHtml("&#8987;");this.parts.spinner.appendTo(this.parts.title,1)}this.parts.spinner.show();this.getButton("ok").disable()}else a==CKEDITOR.DIALOG_STATE_IDLE&& +(this.parts.spinner&&this.parts.spinner.hide(),this.getButton("ok").enable());this.fire("state",a)}}};CKEDITOR.tools.extend(CKEDITOR.dialog,{add:function(a,b){if(!this._.dialogDefinitions[a]||"function"==typeof b)this._.dialogDefinitions[a]=b},exists:function(a){return!!this._.dialogDefinitions[a]},getCurrent:function(){return CKEDITOR.dialog._.currentTop},isTabEnabled:function(a,b,c){a=a.config.removeDialogTabs;return!(a&&a.match(RegExp("(?:^|;)"+b+":"+c+"(?:$|;)","i")))},okButton:function(){var a= +function(a,c){c=c||{};return CKEDITOR.tools.extend({id:"ok",type:"button",label:a.lang.common.ok,"class":"cke_dialog_ui_button_ok",onClick:function(a){a=a.data.dialog;!1!==a.fire("ok",{hide:!0}).hide&&a.hide()}},c,!0)};a.type="button";a.override=function(b){return CKEDITOR.tools.extend(function(c){return a(c,b)},{type:"button"},!0)};return a}(),cancelButton:function(){var a=function(a,c){c=c||{};return CKEDITOR.tools.extend({id:"cancel",type:"button",label:a.lang.common.cancel,"class":"cke_dialog_ui_button_cancel", +onClick:function(a){a=a.data.dialog;!1!==a.fire("cancel",{hide:!0}).hide&&a.hide()}},c,!0)};a.type="button";a.override=function(b){return CKEDITOR.tools.extend(function(c){return a(c,b)},{type:"button"},!0)};return a}(),addUIElement:function(a,b){this._.uiElementBuilders[a]=b}});CKEDITOR.dialog._={uiElementBuilders:{},dialogDefinitions:{},currentTop:null,currentZIndex:null};CKEDITOR.event.implementOn(CKEDITOR.dialog);CKEDITOR.event.implementOn(CKEDITOR.dialog.prototype);var W={resizable:CKEDITOR.DIALOG_RESIZE_BOTH, +minWidth:600,minHeight:400,buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton]},z=function(a,b,c){for(var e=0,d;d=a[e];e++)if(d.id==b||c&&d[c]&&(d=z(d[c],b,c)))return d;return null},A=function(a,b,c,e,d){if(c){for(var g=0,f;f=a[g];g++){if(f.id==c)return a.splice(g,0,b),b;if(e&&f[e]&&(f=A(f[e],b,c,e,!0)))return f}if(d)return null}a.push(b);return b},B=function(a,b,c){for(var e=0,d;d=a[e];e++){if(d.id==b)return a.splice(e,1);if(c&&d[c]&&(d=B(d[c],b,c)))return d}return null},L=function(a, +b){this.dialog=a;for(var c=b.contents,e=0,d;d=c[e];e++)c[e]=d&&new I(a,d);CKEDITOR.tools.extend(this,b)};L.prototype={getContents:function(a){return z(this.contents,a)},getButton:function(a){return z(this.buttons,a)},addContents:function(a,b){return A(this.contents,a,b)},addButton:function(a,b){return A(this.buttons,a,b)},removeContents:function(a){B(this.contents,a)},removeButton:function(a){B(this.buttons,a)}};I.prototype={get:function(a){return z(this.elements,a,"children")},add:function(a,b){return A(this.elements, +a,b,"children")},remove:function(a){B(this.elements,a,"children")}};var F,v={},q,s={},M=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=a.data.$.altKey,e=a.data.$.shiftKey,d=String.fromCharCode(a.data.$.keyCode);if((b=s[(b?"CTRL+":"")+(c?"ALT+":"")+(e?"SHIFT+":"")+d])&&b.length)b=b[b.length-1],b.keydown&&b.keydown.call(b.uiElement,b.dialog,b.key),a.data.preventDefault()},N=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=a.data.$.altKey,e=a.data.$.shiftKey,d=String.fromCharCode(a.data.$.keyCode); +if((b=s[(b?"CTRL+":"")+(c?"ALT+":"")+(e?"SHIFT+":"")+d])&&b.length)b=b[b.length-1],b.keyup&&(b.keyup.call(b.uiElement,b.dialog,b.key),a.data.preventDefault())},O=function(a,b,c,e,d){(s[c]||(s[c]=[])).push({uiElement:a,dialog:b,key:c,keyup:d||a.accessKeyUp,keydown:e||a.accessKeyDown})},X=function(a){for(var b in s){for(var c=s[b],e=c.length-1;0<=e;e--)(c[e].dialog==a||c[e].uiElement==a)&&c.splice(e,1);0===c.length&&delete s[b]}},Z=function(a,b){a._.accessKeyMap[b]&&a.selectPage(a._.accessKeyMap[b])}, +Y=function(){};(function(){CKEDITOR.ui.dialog={uiElement:function(a,b,c,e,d,g,f){if(!(4>arguments.length)){var h=(e.call?e(b):e)||"div",m=["<",h," "],l=(d&&d.call?d(b):d)||{},i=(g&&g.call?g(b):g)||{},o=(f&&f.call?f.call(this,a,b):f)||"",j=this.domId=i.id||CKEDITOR.tools.getNextId()+"_uiElement";b.requiredContent&&!a.getParentEditor().filter.check(b.requiredContent)&&(l.display="none",this.notAllowed=!0);i.id=j;var n={};b.type&&(n["cke_dialog_ui_"+b.type]=1);b.className&&(n[b.className]=1);b.disabled&& +(n.cke_disabled=1);for(var k=i["class"]&&i["class"].split?i["class"].split(" "):[],j=0;j<k.length;j++)k[j]&&(n[k[j]]=1);k=[];for(j in n)k.push(j);i["class"]=k.join(" ");b.title&&(i.title=b.title);n=(b.style||"").split(";");b.align&&(k=b.align,l["margin-left"]="left"==k?0:"auto",l["margin-right"]="right"==k?0:"auto");for(j in l)n.push(j+":"+l[j]);b.hidden&&n.push("display:none");for(j=n.length-1;0<=j;j--)""===n[j]&&n.splice(j,1);0<n.length&&(i.style=(i.style?i.style+"; ":"")+n.join("; "));for(j in i)m.push(j+ +'="'+CKEDITOR.tools.htmlEncode(i[j])+'" ');m.push(">",o,"</",h,">");c.push(m.join(""));(this._||(this._={})).dialog=a;"boolean"==typeof b.isChanged&&(this.isChanged=function(){return b.isChanged});"function"==typeof b.isChanged&&(this.isChanged=b.isChanged);"function"==typeof b.setValue&&(this.setValue=CKEDITOR.tools.override(this.setValue,function(a){return function(c){a.call(this,b.setValue.call(this,c))}}));"function"==typeof b.getValue&&(this.getValue=CKEDITOR.tools.override(this.getValue,function(a){return function(){return b.getValue.call(this, +a.call(this))}}));CKEDITOR.event.implementOn(this);this.registerEvents(b);this.accessKeyUp&&(this.accessKeyDown&&b.accessKey)&&O(this,a,"CTRL+"+b.accessKey);var p=this;a.on("load",function(){var b=p.getInputElement();if(b){var c=p.type in{checkbox:1,ratio:1}&&CKEDITOR.env.ie&&CKEDITOR.env.version<8?"cke_dialog_ui_focused":"";b.on("focus",function(){a._.tabBarMode=false;a._.hasFocus=true;p.fire("focus");c&&this.addClass(c)});b.on("blur",function(){p.fire("blur");c&&this.removeClass(c)})}});CKEDITOR.tools.extend(this, +b);this.keyboardFocusable&&(this.tabIndex=b.tabIndex||0,this.focusIndex=a._.focusList.push(this)-1,this.on("focus",function(){a._.currentFocusIndex=p.focusIndex}))}},hbox:function(a,b,c,e,d){if(!(4>arguments.length)){this._||(this._={});var g=this._.children=b,f=d&&d.widths||null,h=d&&d.height||null,m,l={role:"presentation"};d&&d.align&&(l.align=d.align);CKEDITOR.ui.dialog.uiElement.call(this,a,d||{type:"hbox"},e,"table",{},l,function(){var a=['<tbody><tr class="cke_dialog_ui_hbox">'];for(m=0;m<c.length;m++){var b= +"cke_dialog_ui_hbox_child",e=[];0===m&&(b="cke_dialog_ui_hbox_first");m==c.length-1&&(b="cke_dialog_ui_hbox_last");a.push('<td class="',b,'" role="presentation" ');f?f[m]&&e.push("width:"+r(f[m])):e.push("width:"+Math.floor(100/c.length)+"%");h&&e.push("height:"+r(h));d&&void 0!==d.padding&&e.push("padding:"+r(d.padding));CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&g[m].align)&&e.push("text-align:"+g[m].align);0<e.length&&a.push('style="'+e.join("; ")+'" ');a.push(">",c[m],"</td>")}a.push("</tr></tbody>"); +return a.join("")})}},vbox:function(a,b,c,e,d){if(!(3>arguments.length)){this._||(this._={});var g=this._.children=b,f=d&&d.width||null,h=d&&d.heights||null;CKEDITOR.ui.dialog.uiElement.call(this,a,d||{type:"vbox"},e,"div",null,{role:"presentation"},function(){var b=['<table role="presentation" cellspacing="0" border="0" '];b.push('style="');d&&d.expand&&b.push("height:100%;");b.push("width:"+r(f||"100%"),";");CKEDITOR.env.webkit&&b.push("float:none;");b.push('"');b.push('align="',CKEDITOR.tools.htmlEncode(d&& +d.align||("ltr"==a.getParentEditor().lang.dir?"left":"right")),'" ');b.push("><tbody>");for(var e=0;e<c.length;e++){var i=[];b.push('<tr><td role="presentation" ');f&&i.push("width:"+r(f||"100%"));h?i.push("height:"+r(h[e])):d&&d.expand&&i.push("height:"+Math.floor(100/c.length)+"%");d&&void 0!==d.padding&&i.push("padding:"+r(d.padding));CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&g[e].align)&&i.push("text-align:"+g[e].align);0<i.length&&b.push('style="',i.join("; "),'" ');b.push(' class="cke_dialog_ui_vbox_child">', +c[e],"</td></tr>")}b.push("</tbody></table>");return b.join("")})}}}})();CKEDITOR.ui.dialog.uiElement.prototype={getElement:function(){return CKEDITOR.document.getById(this.domId)},getInputElement:function(){return this.getElement()},getDialog:function(){return this._.dialog},setValue:function(a,b){this.getInputElement().setValue(a);!b&&this.fire("change",{value:a});return this},getValue:function(){return this.getInputElement().getValue()},isChanged:function(){return!1},selectParentTab:function(){for(var a= +this.getInputElement();(a=a.getParent())&&-1==a.$.className.search("cke_dialog_page_contents"););if(!a)return this;a=a.getAttribute("name");this._.dialog._.currentTabId!=a&&this._.dialog.selectPage(a);return this},focus:function(){this.selectParentTab().getInputElement().focus();return this},registerEvents:function(a){var b=/^on([A-Z]\w+)/,c,e=function(a,b,c,d){b.on("load",function(){a.getInputElement().on(c,d,a)})},d;for(d in a)if(c=d.match(b))this.eventProcessors[d]?this.eventProcessors[d].call(this, +this._.dialog,a[d]):e(this,this._.dialog,c[1].toLowerCase(),a[d]);return this},eventProcessors:{onLoad:function(a,b){a.on("load",b,this)},onShow:function(a,b){a.on("show",b,this)},onHide:function(a,b){a.on("hide",b,this)}},accessKeyDown:function(){this.focus()},accessKeyUp:function(){},disable:function(){var a=this.getElement();this.getInputElement().setAttribute("disabled","true");a.addClass("cke_disabled")},enable:function(){var a=this.getElement();this.getInputElement().removeAttribute("disabled"); +a.removeClass("cke_disabled")},isEnabled:function(){return!this.getElement().hasClass("cke_disabled")},isVisible:function(){return this.getInputElement().isVisible()},isFocusable:function(){return!this.isEnabled()||!this.isVisible()?!1:!0}};CKEDITOR.ui.dialog.hbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getChild:function(a){if(1>arguments.length)return this._.children.concat();a.splice||(a=[a]);return 2>a.length?this._.children[a[0]]:this._.children[a[0]]&&this._.children[a[0]].getChild? +this._.children[a[0]].getChild(a.slice(1,a.length)):null}},!0);CKEDITOR.ui.dialog.vbox.prototype=new CKEDITOR.ui.dialog.hbox;(function(){var a={build:function(a,c,e){for(var d=c.children,g,f=[],h=[],m=0;m<d.length&&(g=d[m]);m++){var l=[];f.push(l);h.push(CKEDITOR.dialog._.uiElementBuilders[g.type].build(a,g,l))}return new CKEDITOR.ui.dialog[c.type](a,h,f,e,c)}};CKEDITOR.dialog.addUIElement("hbox",a);CKEDITOR.dialog.addUIElement("vbox",a)})();CKEDITOR.dialogCommand=function(a,b){this.dialogName=a; +CKEDITOR.tools.extend(this,b,!0)};CKEDITOR.dialogCommand.prototype={exec:function(a){a.openDialog(this.dialogName)},canUndo:!1,editorFocus:1};(function(){var a=/^([a]|[^a])+$/,b=/^\d*$/,c=/^\d*(?:\.\d+)?$/,e=/^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/,d=/^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i,g=/^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/;CKEDITOR.VALIDATE_OR=1;CKEDITOR.VALIDATE_AND=2;CKEDITOR.dialog.validate={functions:function(){var a=arguments;return function(){var b=this&&this.getValue?this.getValue(): +a[0],c,d=CKEDITOR.VALIDATE_AND,e=[],g;for(g=0;g<a.length;g++)if("function"==typeof a[g])e.push(a[g]);else break;g<a.length&&"string"==typeof a[g]&&(c=a[g],g++);g<a.length&&"number"==typeof a[g]&&(d=a[g]);var j=d==CKEDITOR.VALIDATE_AND?!0:!1;for(g=0;g<e.length;g++)j=d==CKEDITOR.VALIDATE_AND?j&&e[g](b):j||e[g](b);return!j?c:!0}},regex:function(a,b){return function(c){c=this&&this.getValue?this.getValue():c;return!a.test(c)?b:!0}},notEmpty:function(b){return this.regex(a,b)},integer:function(a){return this.regex(b, +a)},number:function(a){return this.regex(c,a)},cssLength:function(a){return this.functions(function(a){return d.test(CKEDITOR.tools.trim(a))},a)},htmlLength:function(a){return this.functions(function(a){return e.test(CKEDITOR.tools.trim(a))},a)},inlineStyle:function(a){return this.functions(function(a){return g.test(CKEDITOR.tools.trim(a))},a)},equals:function(a,b){return this.functions(function(b){return b==a},b)},notEqual:function(a,b){return this.functions(function(b){return b!=a},b)}};CKEDITOR.on("instanceDestroyed", +function(a){if(CKEDITOR.tools.isEmpty(CKEDITOR.instances)){for(var b;b=CKEDITOR.dialog._.currentTop;)b.hide();for(var c in v)v[c].remove();v={}}var a=a.editor._.storedDialogs,d;for(d in a)a[d].destroy()})})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{openDialog:function(a,b){var c=null,e=CKEDITOR.dialog._.dialogDefinitions[a];null===CKEDITOR.dialog._.currentTop&&J(this);if("function"==typeof e)c=this._.storedDialogs||(this._.storedDialogs={}),c=c[a]||(c[a]=new CKEDITOR.dialog(this,a)),b&&b.call(c, +c),c.show();else{if("failed"==e)throw K(this),Error('[CKEDITOR.dialog.openDialog] Dialog "'+a+'" failed when loading definition.');"string"==typeof e&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(e),function(){"function"!=typeof CKEDITOR.dialog._.dialogDefinitions[a]&&(CKEDITOR.dialog._.dialogDefinitions[a]="failed");this.openDialog(a,b)},this,0,1)}CKEDITOR.skin.loadPart("dialog");return c}})})(); +CKEDITOR.plugins.add("dialog",{requires:"dialogui",init:function(t){t.on("doubleclick",function(w){w.data.dialog&&t.openDialog(w.data.dialog)},null,null,999)}});(function(){CKEDITOR.plugins.add("a11yhelp",{requires:"dialog",availableLangs:{af:1,ar:1,bg:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,en:1,"en-gb":1,eo:1,es:1,et:1,fa:1,fi:1,fo:1,fr:1,"fr-ca":1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,nb:1,nl:1,no:1,pl:1,pt:1,"pt-br":1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,sr:1,"sr-latn":1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},init:function(b){var c=this;b.addCommand("a11yHelp",{exec:function(){var a=b.langCode,a=c.availableLangs[a]? +a:c.availableLangs[a.replace(/-.*/,"")]?a.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c.path+"dialogs/lang/"+a+".js"),function(){b.lang.a11yhelp=c.langEntries[a];b.openDialog("a11yHelp")})},modes:{wysiwyg:1,source:1},readOnly:1,canUndo:!1});b.setKeystroke(CKEDITOR.ALT+48,"a11yHelp");CKEDITOR.dialog.add("a11yHelp",this.path+"dialogs/a11yhelp.js");b.on("ariaEditorHelpLabel",function(a){a.data.label=b.lang.common.editorHelp})}})})();(function(){function h(a){function k(){d=a.document;l=d[CKEDITOR.env.ie?"getBody":"getDocumentElement"]();c=CKEDITOR.env.quirks?d.getBody():d.getDocumentElement();e=CKEDITOR.dom.element.createFromHtml('<span style="margin:0;padding:0;border:0;clear:both;width:1px;height:1px;display:block;">'+(CKEDITOR.env.webkit?"&nbsp;":"")+"</span>",d)}function f(){i&&c.setStyle("overflow-y","hidden");var g=a.window.getViewPaneSize().height,b;l.append(e);b=e.getDocumentPosition(d).y+e.$.offsetHeight;e.remove(); +b+=h;b=Math.max(b,o);b=Math.min(b,m);b!=g&&j!=b&&(b=a.fire("autoGrow",{currentHeight:g,newHeight:b}).newHeight,a.resize(a.container.getStyle("width"),b,!0),j=b);i||(b<m&&c.$.scrollHeight>c.$.clientHeight?c.setStyle("overflow-y","hidden"):c.removeStyle("overflow-y"))}var j,d,l,c,e,h=a.config.autoGrow_bottomSpace||0,o=void 0!==a.config.autoGrow_minHeight?a.config.autoGrow_minHeight:200,m=a.config.autoGrow_maxHeight||Infinity,i=!a.config.autoGrow_maxHeight;a.addCommand("autogrow",{exec:f,modes:{wysiwyg:1}, +readOnly:1,canUndo:!1,editorFocus:!1});var p={contentDom:1,key:1,selectionChange:1,insertElement:1,mode:1},n;for(n in p)a.on(n,function(g){"wysiwyg"==g.editor.mode&&setTimeout(function(){var b=a.getCommand("maximize");!a.window||b&&b.state==CKEDITOR.TRISTATE_ON?j=null:(f(),i||f())},100)});a.on("afterCommandExec",function(a){"maximize"==a.data.name&&"wysiwyg"==a.editor.mode&&(a.data.command.state==CKEDITOR.TRISTATE_ON?c.removeStyle("overflow-y"):f())});a.on("contentDom",k);k();a.config.autoGrow_onStartup&& +a.execCommand("autogrow")}CKEDITOR.plugins.add("autogrow",{init:function(a){if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE)a.on("instanceReady",function(){a.editable().isInline()?a.ui.space("contents").setStyle("height","auto"):h(a)})}})})();CKEDITOR.plugins.add("basicstyles",{init:function(c){var e=0,d=function(g,d,b,a){if(a){var a=new CKEDITOR.style(a),f=h[b];f.unshift(a);c.attachStyleStateChange(a,function(a){!c.readOnly&&c.getCommand(b).setState(a)});c.addCommand(b,new CKEDITOR.styleCommand(a,{contentForms:f}));c.ui.addButton&&c.ui.addButton(g,{label:d,command:b,toolbar:"basicstyles,"+(e+=10)})}},h={bold:["strong","b",["span",function(a){a=a.styles["font-weight"];return"bold"==a||700<=+a}]],italic:["em","i",["span",function(a){return"italic"== +a.styles["font-style"]}]],underline:["u",["span",function(a){return"underline"==a.styles["text-decoration"]}]],strike:["s","strike",["span",function(a){return"line-through"==a.styles["text-decoration"]}]],subscript:["sub"],superscript:["sup"]},b=c.config,a=c.lang.basicstyles;d("Bold",a.bold,"bold",b.coreStyles_bold);d("Italic",a.italic,"italic",b.coreStyles_italic);d("Underline",a.underline,"underline",b.coreStyles_underline);d("Strike",a.strike,"strike",b.coreStyles_strike);d("Subscript",a.subscript, +"subscript",b.coreStyles_subscript);d("Superscript",a.superscript,"superscript",b.coreStyles_superscript);c.setKeystroke([[CKEDITOR.CTRL+66,"bold"],[CKEDITOR.CTRL+73,"italic"],[CKEDITOR.CTRL+85,"underline"]])}});CKEDITOR.config.coreStyles_bold={element:"strong",overrides:"b"};CKEDITOR.config.coreStyles_italic={element:"em",overrides:"i"};CKEDITOR.config.coreStyles_underline={element:"u"};CKEDITOR.config.coreStyles_strike={element:"s",overrides:"strike"};CKEDITOR.config.coreStyles_subscript={element:"sub"}; +CKEDITOR.config.coreStyles_superscript={element:"sup"};(function(){function o(b,a,c){a.type||(a.type="auto");if(c&&!1===b.fire("beforePaste",a)||!a.dataValue&&a.dataTransfer.isEmpty())return!1;a.dataValue||(a.dataValue="");if(CKEDITOR.env.gecko&&"drop"==a.method&&b.toolbox)b.once("afterPaste",function(){b.toolbox.focus()});return b.fire("paste",a)}function v(b){function a(){var a=b.editable();if(CKEDITOR.plugins.clipboard.isCustomCopyCutSupported){var d=function(a){k.initPasteDataTransfer(a,b);a.data.preventDefault()};a.on("copy",d);a.on("cut",d);a.on("cut", +function(){b.extractSelectedHtml()},null,null,999)}a.on(k.mainPasteEvent,function(b){"beforepaste"==k.mainPasteEvent&&m||l(b)});"beforepaste"==k.mainPasteEvent&&(a.on("paste",function(a){r||(e(),a.data.preventDefault(),l(a),f("paste")||b.openDialog("paste"))}),a.on("contextmenu",g,null,null,0),a.on("beforepaste",function(b){b.data&&(!b.data.$.ctrlKey&&!b.data.$.shiftKey)&&g()},null,null,0));a.on("beforecut",function(){!m&&h(b)});var c;a.attachListener(CKEDITOR.env.ie?a:b.document.getDocumentElement(), +"mouseup",function(){c=setTimeout(function(){p()},0)});b.on("destroy",function(){clearTimeout(c)});a.on("keyup",p)}function c(a){return{type:a,canUndo:"cut"==a,startDisabled:!0,exec:function(){"cut"==this.type&&h();var a;var d=this.type;if(CKEDITOR.env.ie)a=f(d);else try{a=b.document.$.execCommand(d,!1,null)}catch(c){a=!1}a||b.showNotification(b.lang.clipboard[this.type+"Error"]);return a}}}function d(){return{canUndo:!1,async:!0,exec:function(b,a){var d=function(a,d){a&&o(b,a,!!d);b.fire("afterCommandExec", +{name:"paste",command:c,returnValue:!!a})},c=this;"string"==typeof a?d({dataValue:a,method:"paste",dataTransfer:k.initPasteDataTransfer()},1):b.getClipboardData(d)}}}function e(){r=1;setTimeout(function(){r=0},100)}function g(){m=1;setTimeout(function(){m=0},10)}function f(a){var d=b.document,c=d.getBody(),e=!1,f=function(){e=!0};c.on(a,f);7<CKEDITOR.env.version?d.$.execCommand(a):d.$.selection.createRange().execCommand(a);c.removeListener(a,f);return e}function h(){if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var a= +b.getSelection(),d,c,e;if(a.getType()==CKEDITOR.SELECTION_ELEMENT&&(d=a.getSelectedElement()))c=a.getRanges()[0],e=b.document.createText(""),e.insertBefore(d),c.setStartBefore(e),c.setEndAfter(d),a.selectRanges([c]),setTimeout(function(){d.getParent()&&(e.remove(),a.selectElement(d))},0)}}function i(a,d){var c=b.document,e=b.editable(),f=function(b){b.cancel()},n;if(!c.getById("cke_pastebin")){var g=b.getSelection(),h=g.createBookmarks();CKEDITOR.env.ie&&g.root.fire("selectionchange");var j=new CKEDITOR.dom.element((CKEDITOR.env.webkit|| +e.is("body"))&&!CKEDITOR.env.ie?"body":"div",c);j.setAttributes({id:"cke_pastebin","data-cke-temp":"1"});var l=0,c=c.getWindow();CKEDITOR.env.webkit?(e.append(j),j.addClass("cke_editable"),e.is("body")||(l="static"!=e.getComputedStyle("position")?e:CKEDITOR.dom.element.get(e.$.offsetParent),l=l.getDocumentPosition().y)):e.getAscendant(CKEDITOR.env.ie?"body":"html",1).append(j);j.setStyles({position:"absolute",top:c.getScrollPosition().y-l+10+"px",width:"1px",height:Math.max(1,c.getViewPaneSize().height- +20)+"px",overflow:"hidden",margin:0,padding:0});CKEDITOR.env.safari&&j.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select","text"));(l=j.getParent().isReadOnly())?(j.setOpacity(0),j.setAttribute("contenteditable",!0)):j.setStyle("ltr"==b.config.contentsLangDirection?"left":"right","-1000px");b.on("selectionChange",f,null,null,0);if(CKEDITOR.env.webkit||CKEDITOR.env.gecko)n=e.once("blur",f,null,null,-100);l&&j.focus();l=new CKEDITOR.dom.range(j);l.selectNodeContents(j);var i=l.select();CKEDITOR.env.ie&& +(n=e.once("blur",function(){b.lockSelection(i)}));var p=CKEDITOR.document.getWindow().getScrollPosition().y;setTimeout(function(){if(CKEDITOR.env.webkit)CKEDITOR.document.getBody().$.scrollTop=p;n&&n.removeListener();CKEDITOR.env.ie&&e.focus();g.selectBookmarks(h);j.remove();var a;if(CKEDITOR.env.webkit&&(a=j.getFirst())&&a.is&&a.hasClass("Apple-style-span"))j=a;b.removeListener("selectionChange",f);d(j.getHtml())},0)}}function s(){if("paste"==k.mainPasteEvent)return b.fire("beforePaste",{type:"auto", +method:"paste"}),!1;b.focus();e();var a=b.focusManager;a.lock();if(b.editable().fire(k.mainPasteEvent)&&!f("paste"))return a.unlock(),!1;a.unlock();return!0}function n(a){if("wysiwyg"==b.mode)switch(a.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:a=b.editable();e();"paste"==k.mainPasteEvent&&a.fire("beforepaste");break;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+46:b.fire("saveSnapshot"),setTimeout(function(){b.fire("saveSnapshot")},50)}}function l(a){var d={type:"auto",method:"paste", +dataTransfer:k.initPasteDataTransfer(a)};d.dataTransfer.cacheData();var c=!1!==b.fire("beforePaste",d);c&&k.canClipboardApiBeTrusted(d.dataTransfer,b)?(a.data.preventDefault(),setTimeout(function(){o(b,d)},0)):i(a,function(a){d.dataValue=a.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,"");c&&o(b,d)})}function p(){if("wysiwyg"==b.mode){var a=q("paste");b.getCommand("cut").setState(q("cut"));b.getCommand("copy").setState(q("copy"));b.getCommand("paste").setState(a);b.fire("pasteState",a)}}function q(a){if(t&& +a in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if("paste"==a)return CKEDITOR.TRISTATE_OFF;var a=b.getSelection(),d=a.getRanges();return a.getType()==CKEDITOR.SELECTION_NONE||1==d.length&&d[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var k=CKEDITOR.plugins.clipboard,m=0,r=0,t=0;(function(){b.on("key",n);b.on("contentDom",a);b.on("selectionChange",function(b){t=b.data.selection.getRanges()[0].checkReadOnly();p()});b.contextMenu&&b.contextMenu.addListener(function(b,a){t=a.getRanges()[0].checkReadOnly(); +return{cut:q("cut"),copy:q("copy"),paste:q("paste")}})})();(function(){function a(d,c,e,f,n){var g=b.lang.clipboard[c];b.addCommand(c,e);b.ui.addButton&&b.ui.addButton(d,{label:g,command:c,toolbar:"clipboard,"+f});b.addMenuItems&&b.addMenuItem(c,{label:g,command:c,group:"clipboard",order:n})}a("Cut","cut",c("cut"),10,1);a("Copy","copy",c("copy"),20,4);a("Paste","paste",d(),30,8)})();b.getClipboardData=function(a,d){function c(b){b.removeListener();b.cancel();d(b.data)}function e(b){b.removeListener(); +b.cancel();h=!0;d({type:g,dataValue:b.data,method:"paste"})}function f(){this.customTitle=a&&a.title}var n=!1,g="auto",h=!1;d||(d=a,a=null);b.on("paste",c,null,null,0);b.on("beforePaste",function(b){b.removeListener();n=true;g=b.data.type},null,null,1E3);!1===s()&&(b.removeListener("paste",c),n&&b.fire("pasteDialog",f)?(b.on("pasteDialogCommit",e),b.on("dialogHide",function(b){b.removeListener();b.data.removeListener("pasteDialogCommit",e);setTimeout(function(){h||d(null)},10)})):d(null))}}function w(b){if(CKEDITOR.env.webkit){if(!b.match(/^[^<]*$/g)&& +!b.match(/^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi))return"html"}else if(CKEDITOR.env.ie){if(!b.match(/^([^<]|<br( ?\/)?>)*$/gi)&&!b.match(/^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi))return"html"}else if(CKEDITOR.env.gecko){if(!b.match(/^([^<]|<br( ?\/)?>)*$/gi))return"html"}else return"html";return"htmlifiedtext"}function x(b,a){function c(b){return CKEDITOR.tools.repeat("</p><p>",~~(b/2))+(1==b%2?"<br>":"")}a=a.replace(/\s+/g," ").replace(/> +</g,"><").replace(/<br ?\/>/gi,"<br>");a=a.replace(/<\/?[A-Z]+>/g, +function(b){return b.toLowerCase()});if(a.match(/^[^<]$/))return a;CKEDITOR.env.webkit&&-1<a.indexOf("<div>")&&(a=a.replace(/^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g,"<br>").replace(/^(<div>(<br>|)<\/div>){2}(?!$)/g,"<div></div>"),a.match(/<div>(<br>|)<\/div>/)&&(a="<p>"+a.replace(/(<div>(<br>|)<\/div>)+/g,function(b){return c(b.split("</div><div>").length+1)})+"</p>"),a=a.replace(/<\/div><div>/g,"<br>"),a=a.replace(/<\/?div>/g,""));CKEDITOR.env.gecko&&b.enterMode!=CKEDITOR.ENTER_BR&&(CKEDITOR.env.gecko&& +(a=a.replace(/^<br><br>$/,"<br>")),-1<a.indexOf("<br><br>")&&(a="<p>"+a.replace(/(<br>){2,}/g,function(b){return c(b.length/4)})+"</p>"));return y(b,a)}function z(){function b(){var b={},a;for(a in CKEDITOR.dtd)"$"!=a.charAt(0)&&("div"!=a&&"span"!=a)&&(b[a]=1);return b}var a,c;return{get:function(d){if("plain-text"==d)return a||(a=new CKEDITOR.filter("br"));if("semantic-content"==d){if(!(d=c))d=new CKEDITOR.filter,d.allow({$1:{elements:b(),attributes:!0,styles:!1,classes:!1}}),d=c=d;return d}return d? +new CKEDITOR.filter(d):null}}}function u(b,a,c){var a=CKEDITOR.htmlParser.fragment.fromHtml(a),d=new CKEDITOR.htmlParser.basicWriter;c.applyTo(a,!0,!1,b.activeEnterMode);a.writeHtml(d);return d.getHtml()}function y(b,a){b.enterMode==CKEDITOR.ENTER_BR?a=a.replace(/(<\/p><p>)+/g,function(b){return CKEDITOR.tools.repeat("<br>",2*(b.length/7))}).replace(/<\/?p>/g,""):b.enterMode==CKEDITOR.ENTER_DIV&&(a=a.replace(/<(\/)?p>/g,"<$1div>"));return a}function A(b){b.data.preventDefault();b.data.$.dataTransfer.dropEffect= +"none"}function B(b){var a=CKEDITOR.plugins.clipboard;b.on("contentDom",function(){function c(a,d,c){d.select();o(b,{dataTransfer:c,method:"drop"},1);c.sourceEditor.fire("saveSnapshot");c.sourceEditor.editable().extractHtmlFromRange(a);c.sourceEditor.getSelection().selectRanges([a]);c.sourceEditor.fire("saveSnapshot")}function d(d,c){d.select();o(b,{dataTransfer:c,method:"drop"},1);a.resetDragDataTransfer()}function e(a,d,c){var e={$:a.data.$,target:a.data.getTarget()};d&&(e.dragRange=d);c&&(e.dropRange= +c);!1===b.fire(a.name,e)&&a.data.preventDefault()}function g(b){b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());return b.getChildCount()}var f=b.editable(),h=CKEDITOR.plugins.clipboard.getDropTarget(b),i=b.ui.space("top"),s=b.ui.space("bottom");a.preventDefaultDropOnElement(i);a.preventDefaultDropOnElement(s);f.attachListener(h,"dragstart",e);f.attachListener(b,"dragstart",a.resetDragDataTransfer,a,null,1);f.attachListener(b,"dragstart",function(d){a.initDragDataTransfer(d,b);d=a.dragRange=b.getSelection().getRanges()[0]; +CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(a.dragStartContainerChildCount=d?g(d.startContainer):null,a.dragEndContainerChildCount=d?g(d.endContainer):null)},null,null,2);f.attachListener(h,"dragend",e);f.attachListener(b,"dragend",a.initDragDataTransfer,a,null,1);f.attachListener(b,"dragend",a.resetDragDataTransfer,a,null,100);f.attachListener(h,"dragover",function(b){var a=b.data.getTarget();a&&a.is&&a.is("html")?b.data.preventDefault():CKEDITOR.env.ie&&(CKEDITOR.plugins.clipboard.isFileApiSupported&& +b.data.$.dataTransfer.types.contains("Files"))&&b.data.preventDefault()});f.attachListener(h,"drop",function(d){d.data.preventDefault();var c=d.data.getTarget();if(!c.isReadOnly()||c.type==CKEDITOR.NODE_ELEMENT&&c.is("html")){var c=a.getRangeAtDropPosition(d,b),f=a.dragRange;c&&e(d,f,c)}});f.attachListener(b,"drop",a.initDragDataTransfer,a,null,1);f.attachListener(b,"drop",function(e){if(e=e.data){var f=e.dropRange,g=e.dragRange,h=e.dataTransfer;h.getTransferType(b)==CKEDITOR.DATA_TRANSFER_INTERNAL? +setTimeout(function(){a.internalDrop(g,f,h,b)},0):h.getTransferType(b)==CKEDITOR.DATA_TRANSFER_CROSS_EDITORS?c(g,f,h):d(f,h)}},null,null,9999)})}CKEDITOR.plugins.add("clipboard",{requires:"dialog",init:function(b){var a,c=z();b.config.forcePasteAsPlainText?a="plain-text":b.config.pasteFilter?a=b.config.pasteFilter:CKEDITOR.env.webkit&&!("pasteFilter"in b.config)&&(a="semantic-content");b.pasteFilter=c.get(a);v(b);B(b);CKEDITOR.dialog.add("paste",CKEDITOR.getUrl(this.path+"dialogs/paste.js"));b.on("paste", +function(a){a.data.dataTransfer||(a.data.dataTransfer=new CKEDITOR.plugins.clipboard.dataTransfer);if(!a.data.dataValue){var c=a.data.dataTransfer,g=c.getData("text/html");if(g)a.data.dataValue=g,a.data.type="html";else if(g=c.getData("text/plain"))a.data.dataValue=b.editable().transformPlainTextToHtml(g),a.data.type="text"}},null,null,1);b.on("paste",function(b){var a=b.data.dataValue,c=CKEDITOR.dtd.$block;-1<a.indexOf("Apple-")&&(a=a.replace(/<span class="Apple-converted-space">&nbsp;<\/span>/gi, +" "),"html"!=b.data.type&&(a=a.replace(/<span class="Apple-tab-span"[^>]*>([^<]*)<\/span>/gi,function(a,b){return b.replace(/\t/g,"&nbsp;&nbsp; &nbsp;")})),-1<a.indexOf('<br class="Apple-interchange-newline">')&&(b.data.startsWithEOL=1,b.data.preSniffing="html",a=a.replace(/<br class="Apple-interchange-newline">/,"")),a=a.replace(/(<[^>]+) class="Apple-[^"]*"/gi,"$1"));if(a.match(/^<[^<]+cke_(editable|contents)/i)){var f,h,i=new CKEDITOR.dom.element("div");for(i.setHtml(a);1==i.getChildCount()&&(f= +i.getFirst())&&f.type==CKEDITOR.NODE_ELEMENT&&(f.hasClass("cke_editable")||f.hasClass("cke_contents"));)i=h=f;h&&(a=h.getHtml().replace(/<br>$/i,""))}CKEDITOR.env.ie?a=a.replace(/^&nbsp;(?: |\r\n)?<(\w+)/g,function(a,f){if(f.toLowerCase()in c){b.data.preSniffing="html";return"<"+f}return a}):CKEDITOR.env.webkit?a=a.replace(/<\/(\w+)><div><br><\/div>$/,function(a,f){if(f in c){b.data.endsWithEOL=1;return"</"+f+">"}return a}):CKEDITOR.env.gecko&&(a=a.replace(/(\s)<br>$/,"$1"));b.data.dataValue=a},null, +null,3);b.on("paste",function(a){var a=a.data,e=a.type,g=a.dataValue,f,h=b.config.clipboard_defaultContentType||"html",i=a.dataTransfer.getTransferType(b);f="html"==e||"html"==a.preSniffing?"html":w(g);"htmlifiedtext"==f&&(g=x(b.config,g));"text"==e&&"html"==f?g=u(b,g,c.get("plain-text")):i==CKEDITOR.DATA_TRANSFER_EXTERNAL&&(b.pasteFilter&&!a.dontFilter)&&(g=u(b,g,b.pasteFilter));a.startsWithEOL&&(g='<br data-cke-eol="1">'+g);a.endsWithEOL&&(g+='<br data-cke-eol="1">');"auto"==e&&(e="html"==f||"html"== +h?"html":"text");a.type=e;a.dataValue=g;delete a.preSniffing;delete a.startsWithEOL;delete a.endsWithEOL},null,null,6);b.on("paste",function(a){a=a.data;a.dataValue&&(b.insertHtml(a.dataValue,a.type,a.range),setTimeout(function(){b.fire("afterPaste")},0))},null,null,1E3);b.on("pasteDialog",function(a){setTimeout(function(){b.openDialog("paste",a.data)},0)})}});CKEDITOR.plugins.clipboard={isCustomCopyCutSupported:!CKEDITOR.env.ie&&!CKEDITOR.env.iOS,isCustomDataTypesSupported:!CKEDITOR.env.ie,isFileApiSupported:!CKEDITOR.env.ie|| +9<CKEDITOR.env.version,mainPasteEvent:CKEDITOR.env.ie&&!CKEDITOR.env.edge?"beforepaste":"paste",canClipboardApiBeTrusted:function(b,a){return b.getTransferType(a)!=CKEDITOR.DATA_TRANSFER_EXTERNAL||CKEDITOR.env.chrome&&!b.isEmpty()||CKEDITOR.env.gecko&&(b.getData("text/html")||b.getFilesCount())?!0:!1},getDropTarget:function(b){var a=b.editable();return CKEDITOR.env.ie&&9>CKEDITOR.env.version||a.isInline()?a:b.document},fixSplitNodesAfterDrop:function(b,a,c,d){function e(b,c,d){var e=b;e.type==CKEDITOR.NODE_TEXT&& +(e=b.getParent());if(e.equals(c)&&d!=c.getChildCount())return b=a,c=b.startContainer.getChild(b.startOffset-1),d=b.startContainer.getChild(b.startOffset),c&&(c.type==CKEDITOR.NODE_TEXT&&d&&d.type==CKEDITOR.NODE_TEXT)&&(e=c.getLength(),c.setText(c.getText()+d.getText()),d.remove(),b.setStart(c,e),b.collapse(!0)),!0}var g=a.startContainer;!("number"!=typeof d||"number"!=typeof c)&&(g.type==CKEDITOR.NODE_ELEMENT&&!e(b.startContainer,g,c))&&e(b.endContainer,g,d)},isDropRangeAffectedByDragRange:function(b, +a){var c=a.startContainer,d=a.endOffset;return b.endContainer.equals(c)&&b.endOffset<=d||b.startContainer.getParent().equals(c)&&b.startContainer.getIndex()<d||b.endContainer.getParent().equals(c)&&b.endContainer.getIndex()<d?!0:!1},internalDrop:function(b,a,c,d){var e=CKEDITOR.plugins.clipboard,g=d.editable(),f,h;d.fire("saveSnapshot");d.fire("lockSnapshot",{dontUpdate:1});CKEDITOR.env.ie&&10>CKEDITOR.env.version&&this.fixSplitNodesAfterDrop(b,a,e.dragStartContainerChildCount,e.dragEndContainerChildCount); +(h=this.isDropRangeAffectedByDragRange(b,a))||(f=b.createBookmark(!1));e=a.clone().createBookmark(!1);h&&(f=b.createBookmark(!1));b=f.startNode;h=f.endNode;var i=e.startNode;h&&b.getPosition(i)==CKEDITOR.POSITION_PRECEDING&&h.getPosition(i)==CKEDITOR.POSITION_FOLLOWING?(d.getSelection().selectRanges([a]),b.remove(),h.remove(),i.remove()):(b=d.createRange(),b.moveToBookmark(f),g.extractHtmlFromRange(b,1),a=d.createRange(),a.moveToBookmark(e),o(d,{dataTransfer:c,method:"drop",range:a},1));d.fire("unlockSnapshot")}, +getRangeAtDropPosition:function(b,a){var c=b.data.$,d=c.clientX,e=c.clientY,g=a.getSelection(!0).getRanges()[0],f=a.createRange();if(b.data.testRange)return b.data.testRange;if(document.caretRangeFromPoint)c=a.document.$.caretRangeFromPoint(d,e),f.setStart(CKEDITOR.dom.node(c.startContainer),c.startOffset),f.collapse(!0);else if(c.rangeParent)f.setStart(CKEDITOR.dom.node(c.rangeParent),c.rangeOffset),f.collapse(!0);else{if(CKEDITOR.env.ie&&8<CKEDITOR.env.version&&g&&a.editable().hasFocus)return g; +if(document.body.createTextRange){a.focus();c=a.document.getBody().$.createTextRange();try{for(var h=!1,i=0;20>i&&!h;i++){if(!h)try{c.moveToPoint(d,e-i),h=!0}catch(m){}if(!h)try{c.moveToPoint(d,e+i),h=!0}catch(n){}}if(h){var l="cke-temp-"+(new Date).getTime();c.pasteHTML('<span id="'+l+'">​</span>');var p=a.document.getById(l);f.moveToPosition(p,CKEDITOR.POSITION_BEFORE_START);p.remove()}else{var q=a.document.$.elementFromPoint(d,e),k=new CKEDITOR.dom.element(q),o;if(!k.equals(a.editable())&&"html"!= +k.getName())o=k.getClientRect(),d<o.left?f.setStartAt(k,CKEDITOR.POSITION_AFTER_START):f.setStartAt(k,CKEDITOR.POSITION_BEFORE_END),f.collapse(!0);else return g&&g.startContainer&&!g.startContainer.equals(a.editable())?g:null}}catch(r){return null}}else return null}return f},initDragDataTransfer:function(b,a){var c=b.data.$?b.data.$.dataTransfer:null,d=new this.dataTransfer(c,a);c?this.dragData&&d.id==this.dragData.id?d=this.dragData:this.dragData=d:this.dragData?d=this.dragData:this.dragData=d;b.data.dataTransfer= +d},resetDragDataTransfer:function(){this.dragData=null},initPasteDataTransfer:function(b,a){if(this.isCustomCopyCutSupported&&b&&b.data&&b.data.$){var c=new this.dataTransfer(b.data.$.clipboardData,a);this.copyCutData&&c.id==this.copyCutData.id?(c=this.copyCutData,c.$=b.data.$.clipboardData):this.copyCutData=c;return c}return new this.dataTransfer(null,a)},preventDefaultDropOnElement:function(b){b&&b.on("dragover",A)}};var m=CKEDITOR.plugins.clipboard.isCustomDataTypesSupported?"cke/id":"Text";CKEDITOR.plugins.clipboard.dataTransfer= +function(b,a){b&&(this.$=b);this._={metaRegExp:/^<meta.*?>/,bodyRegExp:/<body(?:[\s\S]*?)>([\s\S]*)<\/body>/,fragmentRegExp:/<\!--(?:Start|End)Fragment--\>/g,data:{},files:[],normalizeType:function(a){a=a.toLowerCase();return a=="text"||a=="text/plain"?"Text":a=="url"?"URL":a}};this.id=this.getData(m);this.id||(this.id="Text"==m?"":"cke-"+CKEDITOR.tools.getUniqueId());if("Text"!=m)try{this.$.setData(m,this.id)}catch(c){}a&&(this.sourceEditor=a,this.setData("text/html",a.getSelectedHtml(1)),"Text"!= +m&&!this.getData("text/plain")&&this.setData("text/plain",a.getSelection().getSelectedText()))};CKEDITOR.DATA_TRANSFER_INTERNAL=1;CKEDITOR.DATA_TRANSFER_CROSS_EDITORS=2;CKEDITOR.DATA_TRANSFER_EXTERNAL=3;CKEDITOR.plugins.clipboard.dataTransfer.prototype={getData:function(b){var b=this._.normalizeType(b),a=this._.data[b];if(void 0===a||null===a||""===a)try{a=this.$.getData(b)}catch(c){}if(void 0===a||null===a||""===a)a="";if("text/html"==b){if(a=a.replace(this._.metaRegExp,""),(b=this._.bodyRegExp.exec(a))&& +b.length)a=b[1],a=a.replace(this._.fragmentRegExp,"")}else"Text"==b&&(CKEDITOR.env.gecko&&this.getFilesCount()&&"file://"==a.substring(0,7))&&(a="");return a},setData:function(b,a){b=this._.normalizeType(b);this._.data[b]=a;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||!("URL"!=b&&"Text"!=b)){"Text"==m&&"Text"==b&&(this.id=a);try{this.$.setData(b,a)}catch(c){}}},getTransferType:function(b){return this.sourceEditor?this.sourceEditor==b?CKEDITOR.DATA_TRANSFER_INTERNAL:CKEDITOR.DATA_TRANSFER_CROSS_EDITORS: +CKEDITOR.DATA_TRANSFER_EXTERNAL},cacheData:function(){function b(b){var b=a._.normalizeType(b),c=a.getData(b);c&&(a._.data[b]=c)}if(this.$){var a=this,c,d;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(c=0;c<this.$.types.length;c++)b(this.$.types[c])}else b("Text"),b("URL");d=this._getImageFromClipboard();if(this.$&&this.$.files||d){this._.files=[];for(c=0;c<this.$.files.length;c++)this._.files.push(this.$.files[c]);0===this._.files.length&&d&&this._.files.push(d)}}}, +getFilesCount:function(){return this._.files.length?this._.files.length:this.$&&this.$.files&&this.$.files.length?this.$.files.length:this._getImageFromClipboard()?1:0},getFile:function(b){return this._.files.length?this._.files[b]:this.$&&this.$.files&&this.$.files.length?this.$.files[b]:0===b?this._getImageFromClipboard():void 0},isEmpty:function(){var b={},a;if(this.getFilesCount())return!1;for(a in this._.data)b[a]=1;if(this.$)if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(var c= +0;c<this.$.types.length;c++)b[this.$.types[c]]=1}else b.Text=1,b.URL=1;"Text"!=m&&(b[m]=0);for(a in b)if(b[a]&&""!==this.getData(a))return!1;return!0},_getImageFromClipboard:function(){var b;if(this.$&&this.$.items&&this.$.items[0])try{if((b=this.$.items[0].getAsFile())&&b.type)return b}catch(a){}}}})();(function(){var c='<a id="{id}" class="cke_button cke_button__{name} cke_button_{state} {cls}"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href=\"javascript:void('{titleJs}')\"")+' title="{title}" tabindex="-1" hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="{hasArrow}" aria-disabled="{ariaDisabled}"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(c+=' onkeypress="return false;"');CKEDITOR.env.gecko&&(c+=' onblur="this.style.cssText = this.style.cssText;"');var c=c+(' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" '+ +(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+'="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span class="cke_button_icon cke_button__{iconName}_icon" style="{style}"'),c=c+'>&nbsp;</span><span id="{id}_label" class="cke_button_label cke_button__{name}_label" aria-hidden="false">{label}</span>{arrowHtml}</a>',o=CKEDITOR.addTemplate("buttonArrow",'<span class="cke_button_arrow">'+(CKEDITOR.env.hc?"&#9660;":"")+"</span>"),p=CKEDITOR.addTemplate("button",c);CKEDITOR.plugins.add("button", +{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_BUTTON,CKEDITOR.ui.button.handler)}});CKEDITOR.UI_BUTTON="button";CKEDITOR.ui.button=function(a){CKEDITOR.tools.extend(this,a,{title:a.label,click:a.click||function(b){b.execCommand(a.command)}});this._={}};CKEDITOR.ui.button.handler={create:function(a){return new CKEDITOR.ui.button(a)}};CKEDITOR.ui.button.prototype={render:function(a,b){function c(){var e=a.mode;e&&(e=this.modes[e]?void 0!==i[e]?i[e]:CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED, +e=a.readOnly&&!this.readOnly?CKEDITOR.TRISTATE_DISABLED:e,this.setState(e),this.refresh&&this.refresh())}var j=CKEDITOR.env,k=this._.id=CKEDITOR.tools.getNextId(),f="",g=this.command,l;this._.editor=a;var d={id:k,button:this,editor:a,focus:function(){CKEDITOR.document.getById(k).focus()},execute:function(){this.button.click(a)},attach:function(a){this.button.attach(a)}},q=CKEDITOR.tools.addFunction(function(a){if(d.onkey)return a=new CKEDITOR.dom.event(a),!1!==d.onkey(d,a.getKeystroke())}),r=CKEDITOR.tools.addFunction(function(a){var b; +d.onfocus&&(b=!1!==d.onfocus(d,new CKEDITOR.dom.event(a)));return b}),m=0;d.clickFn=l=CKEDITOR.tools.addFunction(function(){m&&(a.unlockSelection(1),m=0);d.execute();j.iOS&&a.focus()});if(this.modes){var i={};a.on("beforeModeUnload",function(){a.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED&&(i[a.mode]=this._.state)},this);a.on("activeFilterChange",c,this);a.on("mode",c,this);!this.readOnly&&a.on("readOnly",c,this)}else if(g&&(g=a.getCommand(g)))g.on("state",function(){this.setState(g.state)},this), +f+=g.state==CKEDITOR.TRISTATE_ON?"on":g.state==CKEDITOR.TRISTATE_DISABLED?"disabled":"off";if(this.directional)a.on("contentDirChanged",function(b){var c=CKEDITOR.document.getById(this._.id),d=c.getFirst(),b=b.data;b!=a.lang.dir?c.addClass("cke_"+b):c.removeClass("cke_ltr").removeClass("cke_rtl");d.setAttribute("style",CKEDITOR.skin.getIconStyle(h,"rtl"==b,this.icon,this.iconOffset))},this);g||(f+="off");var n=this.name||this.command,h=n;this.icon&&!/\./.test(this.icon)&&(h=this.icon,this.icon=null); +f={id:k,name:n,iconName:h,label:this.label,cls:this.className||"",state:f,ariaDisabled:"disabled"==f?"true":"false",title:this.title,titleJs:j.gecko&&!j.hc?"":(this.title||"").replace("'",""),hasArrow:this.hasArrow?"true":"false",keydownFn:q,focusFn:r,clickFn:l,style:CKEDITOR.skin.getIconStyle(h,"rtl"==a.lang.dir,this.icon,this.iconOffset),arrowHtml:this.hasArrow?o.output():""};p.output(f,b);if(this.onRender)this.onRender();return d},setState:function(a){if(this._.state==a)return!1;this._.state=a; +var b=CKEDITOR.document.getById(this._.id);return b?(b.setState(a,"cke_button"),a==CKEDITOR.TRISTATE_DISABLED?b.setAttribute("aria-disabled",!0):b.removeAttribute("aria-disabled"),this.hasArrow?(a=a==CKEDITOR.TRISTATE_ON?this._.editor.lang.button.selectedLabel.replace(/%1/g,this.label):this.label,CKEDITOR.document.getById(this._.id+"_label").setText(a)):a==CKEDITOR.TRISTATE_ON?b.setAttribute("aria-pressed",!0):b.removeAttribute("aria-pressed"),!0):!1},getState:function(){return this._.state},toFeature:function(a){if(this._.feature)return this._.feature; +var b=this;!this.allowedContent&&(!this.requiredContent&&this.command)&&(b=a.getCommand(this.command)||b);return this._.feature=b}};CKEDITOR.ui.prototype.addButton=function(a,b){this.add(a,CKEDITOR.UI_BUTTON,b)}})();CKEDITOR.plugins.add("panelbutton",{requires:"button",onLoad:function(){function e(c){var a=this._;a.state!=CKEDITOR.TRISTATE_DISABLED&&(this.createPanel(c),a.on?a.panel.hide():a.panel.showBlock(this._.id,this.document.getById(this._.id),4))}CKEDITOR.ui.panelButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(c){var a=c.panel||{};delete c.panel;this.base(c);this.document=a.parent&&a.parent.getDocument()||CKEDITOR.document;a.block={attributes:a.attributes};this.hasArrow=a.toolbarRelated= +!0;this.click=e;this._={panelDefinition:a}},statics:{handler:{create:function(c){return new CKEDITOR.ui.panelButton(c)}}},proto:{createPanel:function(c){var a=this._;if(!a.panel){var f=this._.panelDefinition,e=this._.panelDefinition.block,g=f.parent||CKEDITOR.document.getBody(),d=this._.panel=new CKEDITOR.ui.floatPanel(c,g,f),f=d.addBlock(a.id,e),b=this;d.onShow=function(){b.className&&this.element.addClass(b.className+"_panel");b.setState(CKEDITOR.TRISTATE_ON);a.on=1;b.editorFocus&&c.focus();if(b.onOpen)b.onOpen()}; +d.onHide=function(d){b.className&&this.element.getFirst().removeClass(b.className+"_panel");b.setState(b.modes&&b.modes[c.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);a.on=0;if(!d&&b.onClose)b.onClose()};d.onEscape=function(){d.hide(1);b.document.getById(a.id).focus()};if(this.onBlock)this.onBlock(d,f);f.onHide=function(){a.on=0;b.setState(CKEDITOR.TRISTATE_OFF)}}}}})},beforeInit:function(e){e.ui.addHandler(CKEDITOR.UI_PANELBUTTON,CKEDITOR.ui.panelButton.handler)}}); +CKEDITOR.UI_PANELBUTTON="panelbutton";(function(){CKEDITOR.plugins.add("panel",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_PANEL,CKEDITOR.ui.panel.handler)}});CKEDITOR.UI_PANEL="panel";CKEDITOR.ui.panel=function(a,b){b&&CKEDITOR.tools.extend(this,b);CKEDITOR.tools.extend(this,{className:"",css:[]});this.id=CKEDITOR.tools.getNextId();this.document=a;this.isFramed=this.forceIFrame||this.css.length;this._={blocks:{}}};CKEDITOR.ui.panel.handler={create:function(a){return new CKEDITOR.ui.panel(a)}};var f=CKEDITOR.addTemplate("panel", +'<div lang="{langCode}" id="{id}" dir={dir} class="cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style="z-index:{z-index}" role="presentation">{frame}</div>'),g=CKEDITOR.addTemplate("panel-frame",'<iframe id="{id}" class="cke_panel_frame" role="presentation" frameborder="0" src="{src}"></iframe>'),h=CKEDITOR.addTemplate("panel-frame-inner",'<!DOCTYPE html><html class="cke_panel_container {env}" dir="{dir}" lang="{langCode}"><head>{css}</head><body class="cke_{dir}" style="margin:0;padding:0" onload="{onload}"></body></html>'); +CKEDITOR.ui.panel.prototype={render:function(a,b){this.getHolderElement=function(){var a=this._.holder;if(!a){if(this.isFramed){var a=this.document.getById(this.id+"_frame"),b=a.getParent(),a=a.getFrameDocument();CKEDITOR.env.iOS&&b.setStyles({overflow:"scroll","-webkit-overflow-scrolling":"touch"});b=CKEDITOR.tools.addFunction(CKEDITOR.tools.bind(function(){this.isLoaded=!0;if(this.onLoad)this.onLoad()},this));a.write(h.output(CKEDITOR.tools.extend({css:CKEDITOR.tools.buildStyleHtml(this.css),onload:"window.parent.CKEDITOR.tools.callFunction("+ +b+");"},d)));a.getWindow().$.CKEDITOR=CKEDITOR;a.on("keydown",function(a){var b=a.data.getKeystroke(),c=this.document.getById(this.id).getAttribute("dir");this._.onKeyDown&&!1===this._.onKeyDown(b)?a.data.preventDefault():(27==b||b==("rtl"==c?39:37))&&this.onEscape&&!1===this.onEscape(b)&&a.data.preventDefault()},this);a=a.getBody();a.unselectable();CKEDITOR.env.air&&CKEDITOR.tools.callFunction(b)}else a=this.document.getById(this.id);this._.holder=a}return a};var d={editorId:a.id,id:this.id,langCode:a.langCode, +dir:a.lang.dir,cls:this.className,frame:"",env:CKEDITOR.env.cssClass,"z-index":a.config.baseFloatZIndex+1};if(this.isFramed){var e=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie?"javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())":"";d.frame=g.output({id:this.id+"_frame",src:e})}e=f.output(d);b&&b.push(e);return e},addBlock:function(a,b){b=this._.blocks[a]=b instanceof CKEDITOR.ui.panel.block?b:new CKEDITOR.ui.panel.block(this.getHolderElement(), +b);this._.currentBlock||this.showBlock(a);return b},getBlock:function(a){return this._.blocks[a]},showBlock:function(a){var a=this._.blocks[a],b=this._.currentBlock,d=!this.forceIFrame||CKEDITOR.env.ie?this._.holder:this.document.getById(this.id+"_frame");b&&b.hide();this._.currentBlock=a;CKEDITOR.fire("ariaWidget",d);a._.focusIndex=-1;this._.onKeyDown=a.onKeyDown&&CKEDITOR.tools.bind(a.onKeyDown,a);a.show();return a},destroy:function(){this.element&&this.element.remove()}};CKEDITOR.ui.panel.block= +CKEDITOR.tools.createClass({$:function(a,b){this.element=a.append(a.getDocument().createElement("div",{attributes:{tabindex:-1,"class":"cke_panel_block"},styles:{display:"none"}}));b&&CKEDITOR.tools.extend(this,b);this.element.setAttributes({role:this.attributes.role||"presentation","aria-label":this.attributes["aria-label"],title:this.attributes.title||this.attributes["aria-label"]});this.keys={};this._.focusIndex=-1;this.element.disableContextMenu()},_:{markItem:function(a){-1!=a&&(a=this.element.getElementsByTag("a").getItem(this._.focusIndex= +a),CKEDITOR.env.webkit&&a.getDocument().getWindow().focus(),a.focus(),this.onMark&&this.onMark(a))}},proto:{show:function(){this.element.setStyle("display","")},hide:function(){(!this.onHide||!0!==this.onHide.call(this))&&this.element.setStyle("display","none")},onKeyDown:function(a,b){var d=this.keys[a];switch(d){case "next":for(var e=this._.focusIndex,d=this.element.getElementsByTag("a"),c;c=d.getItem(++e);)if(c.getAttribute("_cke_focus")&&c.$.offsetWidth){this._.focusIndex=e;c.focus();break}return!c&& +!b?(this._.focusIndex=-1,this.onKeyDown(a,1)):!1;case "prev":e=this._.focusIndex;for(d=this.element.getElementsByTag("a");0<e&&(c=d.getItem(--e));){if(c.getAttribute("_cke_focus")&&c.$.offsetWidth){this._.focusIndex=e;c.focus();break}c=null}return!c&&!b?(this._.focusIndex=d.count(),this.onKeyDown(a,1)):!1;case "click":case "mouseup":return e=this._.focusIndex,(c=0<=e&&this.element.getElementsByTag("a").getItem(e))&&(c.$[d]?c.$[d]():c.$["on"+d]()),!1}return!0}}})})();CKEDITOR.plugins.add("floatpanel",{requires:"panel"}); +(function(){function r(a,b,c,i,f){var f=CKEDITOR.tools.genKey(b.getUniqueId(),c.getUniqueId(),a.lang.dir,a.uiColor||"",i.css||"",f||""),h=g[f];h||(h=g[f]=new CKEDITOR.ui.panel(b,i),h.element=c.append(CKEDITOR.dom.element.createFromHtml(h.render(a),b)),h.element.setStyles({display:"none",position:"absolute"}));return h}var g={};CKEDITOR.ui.floatPanel=CKEDITOR.tools.createClass({$:function(a,b,c,i){function f(){d.hide()}c.forceIFrame=1;c.toolbarRelated&&a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&& +(b=CKEDITOR.document.getById("cke_"+a.name));var h=b.getDocument(),i=r(a,h,b,c,i||0),j=i.element,l=j.getFirst(),d=this;j.disableContextMenu();this.element=j;this._={editor:a,panel:i,parentElement:b,definition:c,document:h,iframe:l,children:[],dir:a.lang.dir};a.on("mode",f);a.on("resize",f);if(!CKEDITOR.env.iOS)h.getWindow().on("resize",f)},proto:{addBlock:function(a,b){return this._.panel.addBlock(a,b)},addListBlock:function(a,b){return this._.panel.addListBlock(a,b)},getBlock:function(a){return this._.panel.getBlock(a)}, +showBlock:function(a,b,c,i,f,h){var j=this._.panel,l=j.showBlock(a);this.allowBlur(!1);a=this._.editor.editable();this._.returnFocus=a.hasFocus?a:new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement);this._.hideTimeout=0;var d=this.element,a=this._.iframe,a=CKEDITOR.env.ie&&!CKEDITOR.env.edge?a:new CKEDITOR.dom.window(a.$.contentWindow),g=d.getDocument(),o=this._.parentElement.getPositionedAncestor(),p=b.getDocumentPosition(g),g=o?o.getDocumentPosition(g):{x:0,y:0},m="rtl"==this._.dir,e=p.x+ +(i||0)-g.x,k=p.y+(f||0)-g.y;if(m&&(1==c||4==c))e+=b.$.offsetWidth;else if(!m&&(2==c||3==c))e+=b.$.offsetWidth-1;if(3==c||4==c)k+=b.$.offsetHeight-1;this._.panel._.offsetParentId=b.getId();d.setStyles({top:k+"px",left:0,display:""});d.setOpacity(0);d.getFirst().removeStyle("width");this._.editor.focusManager.add(a);this._.blurSet||(CKEDITOR.event.useCapture=!0,a.on("blur",function(a){function q(){delete this._.returnFocus;this.hide()}this.allowBlur()&&a.data.getPhase()==CKEDITOR.EVENT_PHASE_AT_TARGET&& +(this.visible&&!this._.activeChild)&&(CKEDITOR.env.iOS?this._.hideTimeout||(this._.hideTimeout=CKEDITOR.tools.setTimeout(q,0,this)):q.call(this))},this),a.on("focus",function(){this._.focused=!0;this.hideChild();this.allowBlur(!0)},this),CKEDITOR.env.iOS&&(a.on("touchstart",function(){clearTimeout(this._.hideTimeout)},this),a.on("touchend",function(){this._.hideTimeout=0;this.focus()},this)),CKEDITOR.event.useCapture=!1,this._.blurSet=1);j.onEscape=CKEDITOR.tools.bind(function(a){if(this.onEscape&& +this.onEscape(a)===false)return false},this);CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.tools.bind(function(){d.removeStyle("width");if(l.autoSize){var a=l.element.getDocument(),a=(CKEDITOR.env.webkit?l.element:a.getBody()).$.scrollWidth;CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&a>0)&&(a=a+((d.$.offsetWidth||0)-(d.$.clientWidth||0)+3));d.setStyle("width",a+10+"px");a=l.element.$.scrollHeight;CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&a>0)&&(a=a+((d.$.offsetHeight||0)-(d.$.clientHeight||0)+3));d.setStyle("height", +a+"px");j._.currentBlock.element.setStyle("display","none").removeStyle("display")}else d.removeStyle("height");m&&(e=e-d.$.offsetWidth);d.setStyle("left",e+"px");var b=j.element.getWindow(),a=d.$.getBoundingClientRect(),b=b.getViewPaneSize(),c=a.width||a.right-a.left,f=a.height||a.bottom-a.top,i=m?a.right:b.width-a.left,g=m?b.width-a.right:a.left;m?i<c&&(e=g>c?e+c:b.width>c?e-a.left:e-a.right+b.width):i<c&&(e=g>c?e-c:b.width>c?e-a.right+b.width:e-a.left);c=a.top;b.height-a.top<f&&(k=c>f?k-f:b.height> +f?k-a.bottom+b.height:k-a.top);if(CKEDITOR.env.ie){b=a=new CKEDITOR.dom.element(d.$.offsetParent);b.getName()=="html"&&(b=b.getDocument().getBody());b.getComputedStyle("direction")=="rtl"&&(e=CKEDITOR.env.ie8Compat?e-d.getDocument().getDocumentElement().$.scrollLeft*2:e-(a.$.scrollWidth-a.$.clientWidth))}var a=d.getFirst(),n;(n=a.getCustomData("activePanel"))&&n.onHide&&n.onHide.call(this,1);a.setCustomData("activePanel",this);d.setStyles({top:k+"px",left:e+"px"});d.setOpacity(1);h&&h()},this);j.isLoaded? +a():j.onLoad=a;CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.env.webkit&&CKEDITOR.document.getWindow().getScrollPosition().y;this.focus();l.element.focus();if(CKEDITOR.env.webkit)CKEDITOR.document.getBody().$.scrollTop=a;this.allowBlur(true);this._.editor.fire("panelShow",this)},0,this)},CKEDITOR.env.air?200:0,this);this.visible=1;this.onShow&&this.onShow.call(this)},focus:function(){if(CKEDITOR.env.webkit){var a=CKEDITOR.document.getActive();a&&!a.equals(this._.iframe)&&a.$.blur()}(this._.lastFocused|| +this._.iframe.getFrameDocument().getWindow()).focus()},blur:function(){var a=this._.iframe.getFrameDocument().getActive();a&&a.is("a")&&(this._.lastFocused=a)},hide:function(a){if(this.visible&&(!this.onHide||!0!==this.onHide.call(this))){this.hideChild();CKEDITOR.env.gecko&&this._.iframe.getFrameDocument().$.activeElement.blur();this.element.setStyle("display","none");this.visible=0;this.element.getFirst().removeCustomData("activePanel");if(a=a&&this._.returnFocus)CKEDITOR.env.webkit&&a.type&&a.getWindow().$.focus(), +a.focus();delete this._.lastFocused;this._.editor.fire("panelHide",this)}},allowBlur:function(a){var b=this._.panel;void 0!==a&&(b.allowBlur=a);return b.allowBlur},showAsChild:function(a,b,c,g,f,h){this._.activeChild==a&&a._.panel._.offsetParentId==c.getId()||(this.hideChild(),a.onHide=CKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){this._.focused||this.hide()},0,this)},this),this._.activeChild=a,this._.focused=!1,a.showBlock(b,c,g,f,h),this.blur(),(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&& +setTimeout(function(){a.element.getChild(0).$.style.cssText+=""},100))},hideChild:function(a){var b=this._.activeChild;b&&(delete b.onHide,delete this._.activeChild,b.hide(),a&&this.focus())}}});CKEDITOR.on("instanceDestroyed",function(){var a=CKEDITOR.tools.isEmpty(CKEDITOR.instances),b;for(b in g){var c=g[b];a?c.destroy():c.element.hide()}a&&(g={})})})();CKEDITOR.plugins.add("colorbutton",{requires:"panelbutton,floatpanel",init:function(c){function o(m,g,e,h){var i=new CKEDITOR.style(j["colorButton_"+g+"Style"]),k=CKEDITOR.tools.getNextId()+"_colorBox";c.ui.add(m,CKEDITOR.UI_PANELBUTTON,{label:e,title:e,modes:{wysiwyg:1},editorFocus:0,toolbar:"colors,"+h,allowedContent:i,requiredContent:i,panel:{css:CKEDITOR.skin.getPath("editor"),attributes:{role:"listbox","aria-label":f.panelTitle}},onBlock:function(a,b){b.autoSize=!0;b.element.addClass("cke_colorblock"); +b.element.setHtml(q(a,g,k));b.element.getDocument().getBody().setStyle("overflow","hidden");CKEDITOR.ui.fire("ready",this);var d=b.keys,e="rtl"==c.lang.dir;d[e?37:39]="next";d[40]="next";d[9]="next";d[e?39:37]="prev";d[38]="prev";d[CKEDITOR.SHIFT+9]="prev";d[32]="click"},refresh:function(){c.activeFilter.check(i)||this.setState(CKEDITOR.TRISTATE_DISABLED)},onOpen:function(){var a=c.getSelection(),a=a&&a.getStartElement(),a=c.elementPath(a),b;if(a){a=a.block||a.blockLimit||c.document.getBody();do b= +a&&a.getComputedStyle("back"==g?"background-color":"color")||"transparent";while("back"==g&&"transparent"==b&&a&&(a=a.getParent()));if(!b||"transparent"==b)b="#ffffff";this._.panel._.iframe.getFrameDocument().getById(k).setStyle("background-color",b);return b}}})}function q(m,g,e){var h=[],i=j.colorButton_colors.split(","),k=c.plugins.colordialog&&!1!==j.colorButton_enableMore,a=i.length+(k?2:1),b=CKEDITOR.tools.addFunction(function(a,b){function d(a){this.removeListener("ok",d);this.removeListener("cancel", +d);"ok"==a.name&&e(this.getContentElement("picker","selectedColor").getValue(),b)}var e=arguments.callee;if("?"==a)c.openDialog("colordialog",function(){this.on("ok",d);this.on("cancel",d)});else{c.focus();m.hide();c.fire("saveSnapshot");c.removeStyle(new CKEDITOR.style(j["colorButton_"+b+"Style"],{color:"inherit"}));if(a){var f=j["colorButton_"+b+"Style"];f.childRule="back"==b?function(a){return p(a)}:function(a){return!(a.is("a")||a.getElementsByTag("a").count())||p(a)};c.applyStyle(new CKEDITOR.style(f, +{color:a}))}c.fire("saveSnapshot")}});h.push('<a class="cke_colorauto" _cke_focus=1 hidefocus=true title="',f.auto,'" onclick="CKEDITOR.tools.callFunction(',b,",null,'",g,"');return false;\" href=\"javascript:void('",f.auto,'\')" role="option" aria-posinset="1" aria-setsize="',a,'"><table role="presentation" cellspacing=0 cellpadding=0 width="100%"><tr><td><span class="cke_colorbox" id="',e,'"></span></td><td colspan=7 align=center>',f.auto,'</td></tr></table></a><table role="presentation" cellspacing=0 cellpadding=0 width="100%">'); +for(e=0;e<i.length;e++){0===e%8&&h.push("</tr><tr>");var d=i[e].split("/"),l=d[0],n=d[1]||l;d[1]||(l="#"+l.replace(/^(.)(.)(.)$/,"$1$1$2$2$3$3"));d=c.lang.colorbutton.colors[n]||n;h.push('<td><a class="cke_colorbox" _cke_focus=1 hidefocus=true title="',d,'" onclick="CKEDITOR.tools.callFunction(',b,",'",l,"','",g,"'); return false;\" href=\"javascript:void('",d,'\')" role="option" aria-posinset="',e+2,'" aria-setsize="',a,'"><span class="cke_colorbox" style="background-color:#',n,'"></span></a></td>')}k&& +h.push('</tr><tr><td colspan=8 align=center><a class="cke_colormore" _cke_focus=1 hidefocus=true title="',f.more,'" onclick="CKEDITOR.tools.callFunction(',b,",'?','",g,"');return false;\" href=\"javascript:void('",f.more,"')\"",' role="option" aria-posinset="',a,'" aria-setsize="',a,'">',f.more,"</a></td>");h.push("</tr></table>");return h.join("")}function p(c){return"false"==c.getAttribute("contentEditable")||c.getAttribute("data-nostyle")}var j=c.config,f=c.lang.colorbutton;CKEDITOR.env.hc||(o("TextColor", +"fore",f.textColorTitle,10),o("BGColor","back",f.bgColorTitle,20))}});CKEDITOR.config.colorButton_colors="000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF";CKEDITOR.config.colorButton_foreStyle={element:"span",styles:{color:"#(color)"},overrides:[{element:"font",attributes:{color:null}}]}; +CKEDITOR.config.colorButton_backStyle={element:"span",styles:{"background-color":"#(color)"}};CKEDITOR.plugins.colordialog={requires:"dialog",init:function(b){var c=new CKEDITOR.dialogCommand("colordialog");c.editorFocus=!1;b.addCommand("colordialog",c);CKEDITOR.dialog.add("colordialog",this.path+"dialogs/colordialog.js");b.getColorFromDialog=function(c,f){var d=function(a){this.removeListener("ok",d);this.removeListener("cancel",d);a="ok"==a.name?this.getValueOf("picker","selectedColor"):null;c.call(f,a)},e=function(a){a.on("ok",d);a.on("cancel",d)};b.execCommand("colordialog");if(b._.storedDialogs&& +b._.storedDialogs.colordialog)e(b._.storedDialogs.colordialog);else CKEDITOR.on("dialogDefinition",function(a){if("colordialog"==a.data.name){var b=a.data.definition;a.removeListener();b.onLoad=CKEDITOR.tools.override(b.onLoad,function(a){return function(){e(this);b.onLoad=a;"function"==typeof a&&a.call(this)}})}})}}};CKEDITOR.plugins.add("colordialog",CKEDITOR.plugins.colordialog);(function(){var k;function n(a,c){function j(d){d=i.list[d];if(d.equals(a.editable())||"true"==d.getAttribute("contenteditable")){var e=a.createRange();e.selectNodeContents(d);e.select()}else a.getSelection().selectElement(d);a.focus()}function s(){l&&l.setHtml(o);delete i.list}var m=a.ui.spaceId("path"),l,i=a._.elementsPath,n=i.idBase;c.html+='<span id="'+m+'_label" class="cke_voice_label">'+a.lang.elementspath.eleLabel+'</span><span id="'+m+'" class="cke_path" role="group" aria-labelledby="'+m+ +'_label">'+o+"</span>";a.on("uiReady",function(){var d=a.ui.space("path");d&&a.focusManager.add(d,1)});i.onClick=j;var t=CKEDITOR.tools.addFunction(j),u=CKEDITOR.tools.addFunction(function(d,e){var g=i.idBase,b,e=new CKEDITOR.dom.event(e);b="rtl"==a.lang.dir;switch(e.getKeystroke()){case b?39:37:case 9:return(b=CKEDITOR.document.getById(g+(d+1)))||(b=CKEDITOR.document.getById(g+"0")),b.focus(),!1;case b?37:39:case CKEDITOR.SHIFT+9:return(b=CKEDITOR.document.getById(g+(d-1)))||(b=CKEDITOR.document.getById(g+ +(i.list.length-1))),b.focus(),!1;case 27:return a.focus(),!1;case 13:case 32:return j(d),!1}return!0});a.on("selectionChange",function(){for(var d=[],e=i.list=[],g=[],b=i.filters,c=!0,j=a.elementPath().elements,f,k=j.length;k--;){var h=j[k],p=0;f=h.data("cke-display-name")?h.data("cke-display-name"):h.data("cke-real-element-type")?h.data("cke-real-element-type"):h.getName();c=h.hasAttribute("contenteditable")?"true"==h.getAttribute("contenteditable"):c;!c&&!h.hasAttribute("contenteditable")&&(p=1); +for(var q=0;q<b.length;q++){var r=b[q](h,f);if(!1===r){p=1;break}f=r||f}p||(e.unshift(h),g.unshift(f))}e=e.length;for(b=0;b<e;b++)f=g[b],c=a.lang.elementspath.eleTitle.replace(/%1/,f),f=v.output({id:n+b,label:c,text:f,jsTitle:"javascript:void('"+f+"')",index:b,keyDownFn:u,clickFn:t}),d.unshift(f);l||(l=CKEDITOR.document.getById(m));g=l;g.setHtml(d.join("")+o);a.fire("elementsPathUpdate",{space:g})});a.on("readOnly",s);a.on("contentDomUnload",s);a.addCommand("elementsPathFocus",k);a.setKeystroke(CKEDITOR.ALT+ +122,"elementsPathFocus")}k={editorFocus:!1,readOnly:1,exec:function(a){(a=CKEDITOR.document.getById(a._.elementsPath.idBase+"0"))&&a.focus(CKEDITOR.env.ie||CKEDITOR.env.air)}};var o='<span class="cke_path_empty">&nbsp;</span>',c="";CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(c+=' onkeypress="return false;"');CKEDITOR.env.gecko&&(c+=' onblur="this.style.cssText = this.style.cssText;"');var v=CKEDITOR.addTemplate("pathItem",'<a id="{id}" href="{jsTitle}" tabindex="-1" class="cke_path_item" title="{label}"'+ +c+' hidefocus="true" onkeydown="return CKEDITOR.tools.callFunction({keyDownFn},{index}, event );" onclick="CKEDITOR.tools.callFunction({clickFn},{index}); return false;" role="button" aria-label="{label}">{text}</a>');CKEDITOR.plugins.add("elementspath",{init:function(a){a._.elementsPath={idBase:"cke_elementspath_"+CKEDITOR.tools.getNextNumber()+"_",filters:[]};a.on("uiSpace",function(c){"bottom"==c.data.space&&n(a,c.data)})}})})();(function(){function n(b,d,a){a=b.config.forceEnterMode||a;"wysiwyg"==b.mode&&(d||(d=b.activeEnterMode),b.elementPath().isContextFor("p")||(d=CKEDITOR.ENTER_BR,a=1),b.fire("saveSnapshot"),d==CKEDITOR.ENTER_BR?p(b,d,null,a):q(b,d,null,a),b.fire("saveSnapshot"))}function r(b){for(var b=b.getSelection().getRanges(!0),d=b.length-1;0<d;d--)b[d].deleteContents();return b[0]}function u(b){var d=b.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&"true"==a.getAttribute("contenteditable")}, +!0);if(b.root.equals(d))return b;d=new CKEDITOR.dom.range(d);d.moveToRange(b);return d}CKEDITOR.plugins.add("enterkey",{init:function(b){b.addCommand("enter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(b){n(b)}});b.addCommand("shiftEnter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(b){n(b,b.activeShiftEnterMode,1)}});b.setKeystroke([[13,"enter"],[CKEDITOR.SHIFT+13,"shiftEnter"]])}});var v=CKEDITOR.dom.walker.whitespaces(),w=CKEDITOR.dom.walker.bookmark();CKEDITOR.plugins.enterkey={enterBlock:function(b, +d,a,h){if(a=a||r(b)){var a=u(a),f=a.document,i=a.checkStartOfBlock(),k=a.checkEndOfBlock(),j=b.elementPath(a.startContainer),c=j.block,l=d==CKEDITOR.ENTER_DIV?"div":"p",e;if(i&&k){if(c&&(c.is("li")||c.getParent().is("li"))){c.is("li")||(c=c.getParent());a=c.getParent();e=a.getParent();var h=!c.hasPrevious(),m=!c.hasNext(),l=b.getSelection(),g=l.createBookmarks(),i=c.getDirection(1),k=c.getAttribute("class"),o=c.getAttribute("style"),n=e.getDirection(1)!=i,b=b.enterMode!=CKEDITOR.ENTER_BR||n||o||k; +if(e.is("li"))h||m?(h&&m&&a.remove(),c[m?"insertAfter":"insertBefore"](e)):c.breakParent(e);else{if(b)if(j.block.is("li")?(e=f.createElement(d==CKEDITOR.ENTER_P?"p":"div"),n&&e.setAttribute("dir",i),o&&e.setAttribute("style",o),k&&e.setAttribute("class",k),c.moveChildren(e)):e=j.block,h||m)e[h?"insertBefore":"insertAfter"](a);else c.breakParent(a),e.insertAfter(a);else if(c.appendBogus(!0),h||m)for(;f=c[h?"getFirst":"getLast"]();)f[h?"insertBefore":"insertAfter"](a);else for(c.breakParent(a);f=c.getLast();)f.insertAfter(a); +c.remove()}l.selectBookmarks(g);return}if(c&&c.getParent().is("blockquote")){c.breakParent(c.getParent());c.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1))||c.getPrevious().remove();c.getNext().getFirst(CKEDITOR.dom.walker.invisible(1))||c.getNext().remove();a.moveToElementEditStart(c);a.select();return}}else if(c&&c.is("pre")&&!k){p(b,d,a,h);return}if(i=a.splitBlock(l)){d=i.previousBlock;c=i.nextBlock;j=i.wasStartOfBlock;b=i.wasEndOfBlock;if(c)g=c.getParent(),g.is("li")&&(c.breakParent(g), +c.move(c.getNext(),1));else if(d&&(g=d.getParent())&&g.is("li"))d.breakParent(g),g=d.getNext(),a.moveToElementEditStart(g),d.move(d.getPrevious());if(!j&&!b)c.is("li")&&(e=a.clone(),e.selectNodeContents(c),e=new CKEDITOR.dom.walker(e),e.evaluator=function(a){return!(w(a)||v(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in CKEDITOR.dtd.$inline&&!(a.getName()in CKEDITOR.dtd.$empty))},(g=e.next())&&(g.type==CKEDITOR.NODE_ELEMENT&&g.is("ul","ol"))&&(CKEDITOR.env.needsBrFiller?f.createElement("br"):f.createText(" ")).insertBefore(g)), +c&&a.moveToElementEditStart(c);else{if(d){if(d.is("li")||!s.test(d.getName())&&!d.is("pre"))e=d.clone()}else c&&(e=c.clone());e?h&&!e.is("li")&&e.renameNode(l):g&&g.is("li")?e=g:(e=f.createElement(l),d&&(m=d.getDirection())&&e.setAttribute("dir",m));if(f=i.elementPath){h=0;for(l=f.elements.length;h<l;h++){g=f.elements[h];if(g.equals(f.block)||g.equals(f.blockLimit))break;CKEDITOR.dtd.$removeEmpty[g.getName()]&&(g=g.clone(),e.moveChildren(g),e.append(g))}}e.appendBogus();e.getParent()||a.insertNode(e); +e.is("li")&&e.removeAttribute("value");if(CKEDITOR.env.ie&&j&&(!b||!d.getChildCount()))a.moveToElementEditStart(b?d:e),a.select();a.moveToElementEditStart(j&&!b?c:e)}a.select();a.scrollIntoView()}}},enterBr:function(b,d,a,h){if(a=a||r(b)){var f=a.document,i=a.checkEndOfBlock(),k=new CKEDITOR.dom.elementPath(b.getSelection().getStartElement()),j=k.block,c=j&&k.block.getName();!h&&"li"==c?q(b,d,a,h):(!h&&i&&s.test(c)?(i=j.getDirection())?(f=f.createElement("div"),f.setAttribute("dir",i),f.insertAfter(j), +a.setStart(f,0)):(f.createElement("br").insertAfter(j),CKEDITOR.env.gecko&&f.createText("").insertAfter(j),a.setStartAt(j.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START:CKEDITOR.POSITION_AFTER_START)):(b="pre"==c&&CKEDITOR.env.ie&&8>CKEDITOR.env.version?f.createText("\r"):f.createElement("br"),a.deleteContents(),a.insertNode(b),CKEDITOR.env.needsBrFiller?(f.createText("").insertAfter(b),i&&(j||k.blockLimit).appendBogus(),b.getNext().$.nodeValue="",a.setStartAt(b.getNext(),CKEDITOR.POSITION_AFTER_START)): +a.setStartAt(b,CKEDITOR.POSITION_AFTER_END)),a.collapse(!0),a.select(),a.scrollIntoView())}}};var t=CKEDITOR.plugins.enterkey,p=t.enterBr,q=t.enterBlock,s=/^h[1-6]$/})();(function(){function i(b,f){var g={},c=[],e={nbsp:" ",shy:"­",gt:">",lt:"<",amp:"&",apos:"'",quot:'"'},b=b.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g,function(b,a){var d=f?"&"+a+";":e[a];g[d]=f?e[a]:"&"+a+";";c.push(d);return""});if(!f&&b){var b=b.split(","),a=document.createElement("div"),d;a.innerHTML="&"+b.join(";&")+";";d=a.innerHTML;a=null;for(a=0;a<d.length;a++){var h=d.charAt(a);g[h]="&"+b[a]+";";c.push(h)}}g.regex=c.join(f?"|":"");return g}CKEDITOR.plugins.add("entities",{afterInit:function(b){function f(a){return h[a]} +function g(b){return"force"==c.entities_processNumerical||!a[b]?"&#"+b.charCodeAt(0)+";":a[b]}var c=b.config;if(b=(b=b.dataProcessor)&&b.htmlFilter){var e=[];!1!==c.basicEntities&&e.push("nbsp,gt,lt,amp");c.entities&&(e.length&&e.push("quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro"), +c.entities_latin&&e.push("Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml"),c.entities_greek&&e.push("Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv"), +c.entities_additional&&e.push(c.entities_additional));var a=i(e.join(",")),d=a.regex?"["+a.regex+"]":"a^";delete a.regex;c.entities&&c.entities_processNumerical&&(d="[^ -~]|"+d);var d=RegExp(d,"g"),h=i("nbsp,gt,lt,amp,shy",!0),j=RegExp(h.regex,"g");b.addRules({text:function(a){return a.replace(j,f).replace(d,g)}},{applyToAll:!0,excludeNestedEditable:!0})}}})})();CKEDITOR.config.basicEntities=!0;CKEDITOR.config.entities=!0;CKEDITOR.config.entities_latin=!0;CKEDITOR.config.entities_greek=!0; +CKEDITOR.config.entities_additional="#39";(function(){function i(a){var j=a.config,m=a.fire("uiSpace",{space:"top",html:""}).html,p=function(){function f(a,c,e){b.setStyle(c,s(e));b.setStyle("position",a)}function e(a){var b=i.getDocumentPosition();switch(a){case "top":f("absolute","top",b.y-n-o);break;case "pin":f("fixed","top",t);break;case "bottom":f("absolute","top",b.y+(c.height||c.bottom-c.top)+o)}k=a}var k,i,l,c,h,n,r,m=j.floatSpaceDockedOffsetX||0,o=j.floatSpaceDockedOffsetY||0,q=j.floatSpacePinnedOffsetX||0,t=j.floatSpacePinnedOffsetY|| +0;return function(d){if(i=a.editable()){var f=d&&"focus"==d.name;f&&b.show();a.fire("floatingSpaceLayout",{show:f});b.removeStyle("left");b.removeStyle("right");l=b.getClientRect();c=i.getClientRect();h=g.getViewPaneSize();n=l.height;r="pageXOffset"in g.$?g.$.pageXOffset:CKEDITOR.document.$.documentElement.scrollLeft;k?(n+o<=c.top?e("top"):n+o>h.height-c.bottom?e("pin"):e("bottom"),d=h.width/2,d=j.floatSpacePreferRight?"right":0<c.left&&c.right<h.width&&c.width>l.width?"rtl"==j.contentsLangDirection? +"right":"left":d-c.left>c.right-d?"left":"right",l.width>h.width?(d="left",f=0):(f="left"==d?0<c.left?c.left:0:c.right<h.width?h.width-c.right:0,f+l.width>h.width&&(d="left"==d?"right":"left",f=0)),b.setStyle(d,s(("pin"==k?q:m)+f+("pin"==k?0:"left"==d?r:-r)))):(k="pin",e("pin"),p(d))}}}();if(m){var i=new CKEDITOR.template('<div id="cke_{name}" class="cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" title="'+(CKEDITOR.env.gecko? +" ":"")+'" lang="{langCode}" role="application" style="{style}"'+(a.title?' aria-labelledby="cke_{name}_arialbl"':" ")+">"+(a.title?'<span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span>':" ")+'<div class="cke_inner"><div id="{topId}" class="cke_top" role="presentation">{content}</div></div></div>'),b=CKEDITOR.document.getBody().append(CKEDITOR.dom.element.createFromHtml(i.output({content:m,id:a.id,langDir:a.lang.dir,langCode:a.langCode,name:a.name,style:"display:none;z-index:"+ +(j.baseFloatZIndex-1),topId:a.ui.spaceId("top"),voiceLabel:a.title}))),q=CKEDITOR.tools.eventsBuffer(500,p),e=CKEDITOR.tools.eventsBuffer(100,p);b.unselectable();b.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()});a.on("focus",function(b){p(b);a.on("change",q.input);g.on("scroll",e.input);g.on("resize",e.input)});a.on("blur",function(){b.hide();a.removeListener("change",q.input);g.removeListener("scroll",e.input);g.removeListener("resize",e.input)});a.on("destroy", +function(){g.removeListener("scroll",e.input);g.removeListener("resize",e.input);b.clearCustomData();b.remove()});a.focusManager.hasFocus&&b.show();a.focusManager.add(b,1)}}var g=CKEDITOR.document.getWindow(),s=CKEDITOR.tools.cssLength;CKEDITOR.plugins.add("floatingspace",{init:function(a){a.on("loaded",function(){i(this)},null,null,20)}})})();CKEDITOR.plugins.add("listblock",{requires:"panel",onLoad:function(){var f=CKEDITOR.addTemplate("panel-list",'<ul role="presentation" class="cke_panel_list">{items}</ul>'),g=CKEDITOR.addTemplate("panel-list-item",'<li id="{id}" class="cke_panel_listItem" role=presentation><a id="{id}_option" _cke_focus=1 hidefocus=true title="{title}" href="javascript:void(\'{val}\')" {onclick}="CKEDITOR.tools.callFunction({clickFn},\'{val}\'); return false;" role="option">{text}</a></li>'),h=CKEDITOR.addTemplate("panel-list-group", +'<h1 id="{id}" class="cke_panel_grouptitle" role="presentation" >{label}</h1>'),i=/\'/g;CKEDITOR.ui.panel.prototype.addListBlock=function(a,b){return this.addBlock(a,new CKEDITOR.ui.listBlock(this.getHolderElement(),b))};CKEDITOR.ui.listBlock=CKEDITOR.tools.createClass({base:CKEDITOR.ui.panel.block,$:function(a,b){var b=b||{},c=b.attributes||(b.attributes={});(this.multiSelect=!!b.multiSelect)&&(c["aria-multiselectable"]=!0);!c.role&&(c.role="listbox");this.base.apply(this,arguments);this.element.setAttribute("role", +c.role);c=this.keys;c[40]="next";c[9]="next";c[38]="prev";c[CKEDITOR.SHIFT+9]="prev";c[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(c[13]="mouseup");this._.pendingHtml=[];this._.pendingList=[];this._.items={};this._.groups={}},_:{close:function(){if(this._.started){var a=f.output({items:this._.pendingList.join("")});this._.pendingList=[];this._.pendingHtml.push(a);delete this._.started}},getClick:function(){this._.click||(this._.click=CKEDITOR.tools.addFunction(function(a){var b=this.toggle(a); +if(this.onClick)this.onClick(a,b)},this));return this._.click}},proto:{add:function(a,b,c){var d=CKEDITOR.tools.getNextId();this._.started||(this._.started=1,this._.size=this._.size||0);this._.items[a]=d;var e;e=CKEDITOR.tools.htmlEncodeAttr(a).replace(i,"\\'");a={id:d,val:e,onclick:CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick",clickFn:this._.getClick(),title:CKEDITOR.tools.htmlEncodeAttr(c||a),text:b||a};this._.pendingList.push(g.output(a))},startGroup:function(a){this._.close(); +var b=CKEDITOR.tools.getNextId();this._.groups[a]=b;this._.pendingHtml.push(h.output({id:b,label:a}))},commit:function(){this._.close();this.element.appendHtml(this._.pendingHtml.join(""));delete this._.size;this._.pendingHtml=[]},toggle:function(a){var b=this.isMarked(a);b?this.unmark(a):this.mark(a);return!b},hideGroup:function(a){var b=(a=this.element.getDocument().getById(this._.groups[a]))&&a.getNext();a&&(a.setStyle("display","none"),b&&"ul"==b.getName()&&b.setStyle("display","none"))},hideItem:function(a){this.element.getDocument().getById(this._.items[a]).setStyle("display", +"none")},showAll:function(){var a=this._.items,b=this._.groups,c=this.element.getDocument(),d;for(d in a)c.getById(a[d]).setStyle("display","");for(var e in b)a=c.getById(b[e]),d=a.getNext(),a.setStyle("display",""),d&&"ul"==d.getName()&&d.setStyle("display","")},mark:function(a){this.multiSelect||this.unmarkAll();var a=this._.items[a],b=this.element.getDocument().getById(a);b.addClass("cke_selected");this.element.getDocument().getById(a+"_option").setAttribute("aria-selected",!0);this.onMark&&this.onMark(b)}, +unmark:function(a){var b=this.element.getDocument(),a=this._.items[a],c=b.getById(a);c.removeClass("cke_selected");b.getById(a+"_option").removeAttribute("aria-selected");this.onUnmark&&this.onUnmark(c)},unmarkAll:function(){var a=this._.items,b=this.element.getDocument(),c;for(c in a){var d=a[c];b.getById(d).removeClass("cke_selected");b.getById(d+"_option").removeAttribute("aria-selected")}this.onUnmark&&this.onUnmark()},isMarked:function(a){return this.element.getDocument().getById(this._.items[a]).hasClass("cke_selected")}, +focus:function(a){this._.focusIndex=-1;var b=this.element.getElementsByTag("a"),c,d=-1;if(a)for(c=this.element.getDocument().getById(this._.items[a]).getFirst();a=b.getItem(++d);){if(a.equals(c)){this._.focusIndex=d;break}}else this.element.focus();c&&setTimeout(function(){c.focus()},0)}}})}});CKEDITOR.plugins.add("richcombo",{requires:"floatpanel,listblock,button",beforeInit:function(d){d.ui.addHandler(CKEDITOR.UI_RICHCOMBO,CKEDITOR.ui.richCombo.handler)}}); +(function(){var d='<span id="{id}" class="cke_combo cke_combo__{name} {cls}" role="presentation"><span id="{id}_label" class="cke_combo_label">{label}</span><a class="cke_combo_button" title="{title}" tabindex="-1"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href=\"javascript:void('{titleJs}')\"")+' hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="true"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(d+=' onkeypress="return false;"');CKEDITOR.env.gecko&&(d+=' onblur="this.style.cssText = this.style.cssText;"'); +var d=d+(' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event,this);" onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" '+(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+'="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span id="{id}_text" class="cke_combo_text cke_combo_inlinelabel">{label}</span><span class="cke_combo_open"><span class="cke_combo_arrow">'+(CKEDITOR.env.hc?"&#9660;":CKEDITOR.env.air?"&nbsp;":"")+"</span></span></a></span>"), +i=CKEDITOR.addTemplate("combo",d);CKEDITOR.UI_RICHCOMBO="richcombo";CKEDITOR.ui.richCombo=CKEDITOR.tools.createClass({$:function(a){CKEDITOR.tools.extend(this,a,{canGroup:!1,title:a.label,modes:{wysiwyg:1},editorFocus:1});a=this.panel||{};delete this.panel;this.id=CKEDITOR.tools.getNextNumber();this.document=a.parent&&a.parent.getDocument()||CKEDITOR.document;a.className="cke_combopanel";a.block={multiSelect:a.multiSelect,attributes:a.attributes};a.toolbarRelated=!0;this._={panelDefinition:a,items:{}}}, +proto:{renderHtml:function(a){var b=[];this.render(a,b);return b.join("")},render:function(a,b){function g(){if(this.getState()!=CKEDITOR.TRISTATE_ON){var c=this.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;a.readOnly&&!this.readOnly&&(c=CKEDITOR.TRISTATE_DISABLED);this.setState(c);this.setValue("");c!=CKEDITOR.TRISTATE_DISABLED&&this.refresh&&this.refresh()}}var d=CKEDITOR.env,h="cke_"+this.id,e=CKEDITOR.tools.addFunction(function(b){j&&(a.unlockSelection(1),j=0);c.execute(b)}, +this),f=this,c={id:h,combo:this,focus:function(){CKEDITOR.document.getById(h).getChild(1).focus()},execute:function(c){var b=f._;if(b.state!=CKEDITOR.TRISTATE_DISABLED)if(f.createPanel(a),b.on)b.panel.hide();else{f.commit();var d=f.getValue();d?b.list.mark(d):b.list.unmarkAll();b.panel.showBlock(f.id,new CKEDITOR.dom.element(c),4)}},clickFn:e};a.on("activeFilterChange",g,this);a.on("mode",g,this);a.on("selectionChange",g,this);!this.readOnly&&a.on("readOnly",g,this);var k=CKEDITOR.tools.addFunction(function(b, +d){var b=new CKEDITOR.dom.event(b),g=b.getKeystroke();if(40==g)a.once("panelShow",function(a){a.data._.panel._.currentBlock.onKeyDown(40)});switch(g){case 13:case 32:case 40:CKEDITOR.tools.callFunction(e,d);break;default:c.onkey(c,g)}b.preventDefault()}),l=CKEDITOR.tools.addFunction(function(){c.onfocus&&c.onfocus()}),j=0;c.keyDownFn=k;d={id:h,name:this.name||this.command,label:this.label,title:this.title,cls:this.className||"",titleJs:d.gecko&&!d.hc?"":(this.title||"").replace("'",""),keydownFn:k, +focusFn:l,clickFn:e};i.output(d,b);if(this.onRender)this.onRender();return c},createPanel:function(a){if(!this._.panel){var b=this._.panelDefinition,d=this._.panelDefinition.block,i=b.parent||CKEDITOR.document.getBody(),h="cke_combopanel__"+this.name,e=new CKEDITOR.ui.floatPanel(a,i,b),f=e.addListBlock(this.id,d),c=this;e.onShow=function(){this.element.addClass(h);c.setState(CKEDITOR.TRISTATE_ON);c._.on=1;c.editorFocus&&!a.focusManager.hasFocus&&a.focus();if(c.onOpen)c.onOpen();a.once("panelShow", +function(){f.focus(!f.multiSelect&&c.getValue())})};e.onHide=function(b){this.element.removeClass(h);c.setState(c.modes&&c.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);c._.on=0;if(!b&&c.onClose)c.onClose()};e.onEscape=function(){e.hide(1)};f.onClick=function(a,b){c.onClick&&c.onClick.call(c,a,b);e.hide()};this._.panel=e;this._.list=f;e.getBlock(this.id).onHide=function(){c._.on=0;c.setState(CKEDITOR.TRISTATE_OFF)};this.init&&this.init()}},setValue:function(a,b){this._.value=a;var d= +this.document.getById("cke_"+this.id+"_text");d&&(!a&&!b?(b=this.label,d.addClass("cke_combo_inlinelabel")):d.removeClass("cke_combo_inlinelabel"),d.setText("undefined"!=typeof b?b:a))},getValue:function(){return this._.value||""},unmarkAll:function(){this._.list.unmarkAll()},mark:function(a){this._.list.mark(a)},hideItem:function(a){this._.list.hideItem(a)},hideGroup:function(a){this._.list.hideGroup(a)},showAll:function(){this._.list.showAll()},add:function(a,b,d){this._.items[a]=d||a;this._.list.add(a, +b,d)},startGroup:function(a){this._.list.startGroup(a)},commit:function(){this._.committed||(this._.list.commit(),this._.committed=1,CKEDITOR.ui.fire("ready",this));this._.committed=1},setState:function(a){if(this._.state!=a){var b=this.document.getById("cke_"+this.id);b.setState(a,"cke_combo");a==CKEDITOR.TRISTATE_DISABLED?b.setAttribute("aria-disabled",!0):b.removeAttribute("aria-disabled");this._.state=a}},getState:function(){return this._.state},enable:function(){this._.state==CKEDITOR.TRISTATE_DISABLED&& +this.setState(this._.lastState)},disable:function(){this._.state!=CKEDITOR.TRISTATE_DISABLED&&(this._.lastState=this._.state,this.setState(CKEDITOR.TRISTATE_DISABLED))}},statics:{handler:{create:function(a){return new CKEDITOR.ui.richCombo(a)}}}});CKEDITOR.ui.prototype.addRichCombo=function(a,b){this.add(a,CKEDITOR.UI_RICHCOMBO,b)}})();(function(){function j(a,b,c,f,m,j,p,r){for(var s=a.config,n=new CKEDITOR.style(p),i=m.split(";"),m=[],k={},d=0;d<i.length;d++){var h=i[d];if(h){var h=h.split("/"),q={},l=i[d]=h[0];q[c]=m[d]=h[1]||l;k[l]=new CKEDITOR.style(p,q);k[l]._.definition.name=l}else i.splice(d--,1)}a.ui.addRichCombo(b,{label:f.label,title:f.panelTitle,toolbar:"styles,"+r,allowedContent:n,requiredContent:n,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(s.contentsCss),multiSelect:!1,attributes:{"aria-label":f.panelTitle}}, +init:function(){this.startGroup(f.panelTitle);for(var a=0;a<i.length;a++){var b=i[a];this.add(b,k[b].buildPreview(),b)}},onClick:function(b){a.focus();a.fire("saveSnapshot");var c=this.getValue(),f=k[b];if(c&&b!=c){var i=k[c],e=a.getSelection().getRanges()[0];if(e.collapsed){var d=a.elementPath(),g=d.contains(function(a){return i.checkElementRemovable(a)});if(g){var h=e.checkBoundaryOfElement(g,CKEDITOR.START),j=e.checkBoundaryOfElement(g,CKEDITOR.END);if(h&&j){for(h=e.createBookmark();d=g.getFirst();)d.insertBefore(g); +g.remove();e.moveToBookmark(h)}else h?e.moveToPosition(g,CKEDITOR.POSITION_BEFORE_START):j?e.moveToPosition(g,CKEDITOR.POSITION_AFTER_END):(e.splitElement(g),e.moveToPosition(g,CKEDITOR.POSITION_AFTER_END),o(e,d.elements.slice(),g));a.getSelection().selectRanges([e])}}else a.removeStyle(i)}a[c==b?"removeStyle":"applyStyle"](f);a.fire("saveSnapshot")},onRender:function(){a.on("selectionChange",function(b){for(var c=this.getValue(),b=b.data.path.elements,d=0,f;d<b.length;d++){f=b[d];for(var e in k)if(k[e].checkElementMatch(f, +!0,a)){e!=c&&this.setValue(e);return}}this.setValue("",j)},this)},refresh:function(){a.activeFilter.check(n)||this.setState(CKEDITOR.TRISTATE_DISABLED)}})}function o(a,b,c){var f=b.pop();if(f){if(c)return o(a,b,f.equals(c)?null:c);c=f.clone();a.insertNode(c);a.moveToPosition(c,CKEDITOR.POSITION_AFTER_START);o(a,b)}}CKEDITOR.plugins.add("font",{requires:"richcombo",init:function(a){var b=a.config;j(a,"Font","family",a.lang.font,b.font_names,b.font_defaultLabel,b.font_style,30);j(a,"FontSize","size", +a.lang.font.fontSize,b.fontSize_sizes,b.fontSize_defaultLabel,b.fontSize_style,40)}})})();CKEDITOR.config.font_names="Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif"; +CKEDITOR.config.font_defaultLabel="";CKEDITOR.config.font_style={element:"span",styles:{"font-family":"#(family)"},overrides:[{element:"font",attributes:{face:null}}]};CKEDITOR.config.fontSize_sizes="8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px";CKEDITOR.config.fontSize_defaultLabel="";CKEDITOR.config.fontSize_style={element:"span",styles:{"font-size":"#(size)"},overrides:[{element:"font",attributes:{size:null}}]};CKEDITOR.plugins.add("format",{requires:"richcombo",init:function(a){if(!a.blockless){for(var f=a.config,c=a.lang.format,j=f.format_tags.split(";"),d={},k=0,l=[],g=0;g<j.length;g++){var h=j[g],i=new CKEDITOR.style(f["format_"+h]);if(!a.filter.customConfig||a.filter.check(i))k++,d[h]=i,d[h]._.enterMode=a.config.enterMode,l.push(i)}0!==k&&a.ui.addRichCombo("Format",{label:c.label,title:c.panelTitle,toolbar:"styles,20",allowedContent:l,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(f.contentsCss), +multiSelect:!1,attributes:{"aria-label":c.panelTitle}},init:function(){this.startGroup(c.panelTitle);for(var a in d){var e=c["tag_"+a];this.add(a,d[a].buildPreview(e),e)}},onClick:function(b){a.focus();a.fire("saveSnapshot");var b=d[b],e=a.elementPath();a[b.checkActive(e,a)?"removeStyle":"applyStyle"](b);setTimeout(function(){a.fire("saveSnapshot")},0)},onRender:function(){a.on("selectionChange",function(b){var e=this.getValue(),b=b.data.path;this.refresh();for(var c in d)if(d[c].checkActive(b,a)){c!= +e&&this.setValue(c,a.lang.format["tag_"+c]);return}this.setValue("")},this)},onOpen:function(){this.showAll();for(var b in d)a.activeFilter.check(d[b])||this.hideItem(b)},refresh:function(){var b=a.elementPath();if(b){if(b.isContextFor("p"))for(var c in d)if(a.activeFilter.check(d[c]))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}}})}}});CKEDITOR.config.format_tags="p;h1;h2;h3;h4;h5;h6;pre;address;div";CKEDITOR.config.format_p={element:"p"};CKEDITOR.config.format_div={element:"div"}; +CKEDITOR.config.format_pre={element:"pre"};CKEDITOR.config.format_address={element:"address"};CKEDITOR.config.format_h1={element:"h1"};CKEDITOR.config.format_h2={element:"h2"};CKEDITOR.config.format_h3={element:"h3"};CKEDITOR.config.format_h4={element:"h4"};CKEDITOR.config.format_h5={element:"h5"};CKEDITOR.config.format_h6={element:"h6"};(function(){var b={canUndo:!1,exec:function(a){var b=a.document.createElement("hr");a.insertElement(b)},allowedContent:"hr",requiredContent:"hr"};CKEDITOR.plugins.add("horizontalrule",{init:function(a){a.blockless||(a.addCommand("horizontalrule",b),a.ui.addButton&&a.ui.addButton("HorizontalRule",{label:a.lang.horizontalrule.toolbar,command:"horizontalrule",toolbar:"insert,40"}))}})})();CKEDITOR.plugins.add("htmlwriter",{init:function(b){var a=new CKEDITOR.htmlWriter;a.forceSimpleAmpersand=b.config.forceSimpleAmpersand;a.indentationChars=b.config.dataIndentationChars||"\t";b.dataProcessor.writer=a}}); +CKEDITOR.htmlWriter=CKEDITOR.tools.createClass({base:CKEDITOR.htmlParser.basicWriter,$:function(){this.base();this.indentationChars="\t";this.selfClosingEnd=" />";this.lineBreakChars="\n";this.sortAttributes=1;this._.indent=0;this._.indentation="";this._.inPre=0;this._.rules={};var b=CKEDITOR.dtd,a;for(a in CKEDITOR.tools.extend({},b.$nonBodyContent,b.$block,b.$listItem,b.$tableContent))this.setRules(a,{indent:!b[a]["#"],breakBeforeOpen:1,breakBeforeClose:!b[a]["#"],breakAfterClose:1,needsSpace:a in +b.$block&&!(a in{li:1,dt:1,dd:1})});this.setRules("br",{breakAfterOpen:1});this.setRules("title",{indent:0,breakAfterOpen:0});this.setRules("style",{indent:0,breakBeforeClose:1});this.setRules("pre",{breakAfterOpen:1,indent:0})},proto:{openTag:function(b){var a=this._.rules[b];this._.afterCloser&&(a&&a.needsSpace&&this._.needsSpace)&&this._.output.push("\n");this._.indent?this.indentation():a&&a.breakBeforeOpen&&(this.lineBreak(),this.indentation());this._.output.push("<",b);this._.afterCloser=0}, +openTagClose:function(b,a){var c=this._.rules[b];a?(this._.output.push(this.selfClosingEnd),c&&c.breakAfterClose&&(this._.needsSpace=c.needsSpace)):(this._.output.push(">"),c&&c.indent&&(this._.indentation+=this.indentationChars));c&&c.breakAfterOpen&&this.lineBreak();"pre"==b&&(this._.inPre=1)},attribute:function(b,a){"string"==typeof a&&(this.forceSimpleAmpersand&&(a=a.replace(/&amp;/g,"&")),a=CKEDITOR.tools.htmlEncodeAttr(a));this._.output.push(" ",b,'="',a,'"')},closeTag:function(b){var a=this._.rules[b]; +a&&a.indent&&(this._.indentation=this._.indentation.substr(this.indentationChars.length));this._.indent?this.indentation():a&&a.breakBeforeClose&&(this.lineBreak(),this.indentation());this._.output.push("</",b,">");"pre"==b&&(this._.inPre=0);a&&a.breakAfterClose&&(this.lineBreak(),this._.needsSpace=a.needsSpace);this._.afterCloser=1},text:function(b){this._.indent&&(this.indentation(),!this._.inPre&&(b=CKEDITOR.tools.ltrim(b)));this._.output.push(b)},comment:function(b){this._.indent&&this.indentation(); +this._.output.push("<\!--",b,"--\>")},lineBreak:function(){!this._.inPre&&0<this._.output.length&&this._.output.push(this.lineBreakChars);this._.indent=1},indentation:function(){!this._.inPre&&this._.indentation&&this._.output.push(this._.indentation);this._.indent=0},reset:function(){this._.output=[];this._.indent=0;this._.indentation="";this._.afterCloser=0;this._.inPre=0},setRules:function(b,a){var c=this._.rules[b];c?CKEDITOR.tools.extend(c,a,!0):this._.rules[b]=a}}});(function(){function k(a,b){var e,f;b.on("refresh",function(a){var b=[i],c;for(c in a.data.states)b.push(a.data.states[c]);this.setState(CKEDITOR.tools.search(b,m)?m:i)},b,null,100);b.on("exec",function(b){e=a.getSelection();f=e.createBookmarks(1);b.data||(b.data={});b.data.done=!1},b,null,0);b.on("exec",function(){a.forceNextSelectionCheck();e.selectBookmarks(f)},b,null,100)}var i=CKEDITOR.TRISTATE_DISABLED,m=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indent",{init:function(a){var b=CKEDITOR.plugins.indent.genericDefinition; +k(a,a.addCommand("indent",new b(!0)));k(a,a.addCommand("outdent",new b));a.ui.addButton&&(a.ui.addButton("Indent",{label:a.lang.indent.indent,command:"indent",directional:!0,toolbar:"indent,20"}),a.ui.addButton("Outdent",{label:a.lang.indent.outdent,command:"outdent",directional:!0,toolbar:"indent,10"}));a.on("dirChanged",function(b){var f=a.createRange(),j=b.data.node;f.setStartBefore(j);f.setEndAfter(j);for(var l=new CKEDITOR.dom.walker(f),c;c=l.next();)if(c.type==CKEDITOR.NODE_ELEMENT)if(!c.equals(j)&& +c.getDirection()){f.setStartAfter(c);l=new CKEDITOR.dom.walker(f)}else{var d=a.config.indentClasses;if(d)for(var g=b.data.dir=="ltr"?["_rtl",""]:["","_rtl"],h=0;h<d.length;h++)if(c.hasClass(d[h]+g[0])){c.removeClass(d[h]+g[0]);c.addClass(d[h]+g[1])}d=c.getStyle("margin-right");g=c.getStyle("margin-left");d?c.setStyle("margin-left",d):c.removeStyle("margin-left");g?c.setStyle("margin-right",g):c.removeStyle("margin-right")}})}});CKEDITOR.plugins.indent={genericDefinition:function(a){this.isIndent= +!!a;this.startDisabled=!this.isIndent},specificDefinition:function(a,b,e){this.name=b;this.editor=a;this.jobs={};this.enterBr=a.config.enterMode==CKEDITOR.ENTER_BR;this.isIndent=!!e;this.relatedGlobal=e?"indent":"outdent";this.indentKey=e?9:CKEDITOR.SHIFT+9;this.database={}},registerCommands:function(a,b){a.on("pluginsLoaded",function(){for(var a in b)(function(a,b){var e=a.getCommand(b.relatedGlobal),c;for(c in b.jobs)e.on("exec",function(d){d.data.done||(a.fire("lockSnapshot"),b.execJob(a,c)&&(d.data.done= +!0),a.fire("unlockSnapshot"),CKEDITOR.dom.element.clearAllMarkers(b.database))},this,null,c),e.on("refresh",function(d){d.data.states||(d.data.states={});d.data.states[b.name+"@"+c]=b.refreshJob(a,c,d.data.path)},this,null,c);a.addFeature(b)})(this,b[a])})}};CKEDITOR.plugins.indent.genericDefinition.prototype={context:"p",exec:function(){}};CKEDITOR.plugins.indent.specificDefinition.prototype={execJob:function(a,b){var e=this.jobs[b];if(e.state!=i)return e.exec.call(this,a)},refreshJob:function(a, +b,e){b=this.jobs[b];b.state=a.activeFilter.checkFeature(this)?b.refresh.call(this,a,e):i;return b.state},getContext:function(a){return a.contains(this.context)}}})();(function(){function s(c){function f(b){for(var e=d.startContainer,a=d.endContainer;e&&!e.getParent().equals(b);)e=e.getParent();for(;a&&!a.getParent().equals(b);)a=a.getParent();if(!e||!a)return!1;for(var g=e,e=[],i=!1;!i;)g.equals(a)&&(i=!0),e.push(g),g=g.getNext();if(1>e.length)return!1;g=b.getParents(!0);for(a=0;a<g.length;a++)if(g[a].getName&&m[g[a].getName()]){b=g[a];break}for(var g=j.isIndent?1:-1,a=e[0],e=e[e.length-1],i=CKEDITOR.plugins.list.listToArray(b,n),l=i[e.getCustomData("listarray_index")].indent, +a=a.getCustomData("listarray_index");a<=e.getCustomData("listarray_index");a++)if(i[a].indent+=g,0<g){var h=i[a].parent;i[a].parent=new CKEDITOR.dom.element(h.getName(),h.getDocument())}for(a=e.getCustomData("listarray_index")+1;a<i.length&&i[a].indent>l;a++)i[a].indent+=g;e=CKEDITOR.plugins.list.arrayToList(i,n,null,c.config.enterMode,b.getDirection());if(!j.isIndent){var f;if((f=b.getParent())&&f.is("li"))for(var g=e.listNode.getChildren(),o=[],k,a=g.count()-1;0<=a;a--)(k=g.getItem(a))&&(k.is&& +k.is("li"))&&o.push(k)}e&&e.listNode.replace(b);if(o&&o.length)for(a=0;a<o.length;a++){for(k=b=o[a];(k=k.getNext())&&k.is&&k.getName()in m;)CKEDITOR.env.needsNbspFiller&&!b.getFirst(t)&&b.append(d.document.createText(" ")),b.append(k);b.insertAfter(f)}e&&c.fire("contentDomInvalidated");return!0}for(var j=this,n=this.database,m=this.context,l=c.getSelection(),l=(l&&l.getRanges()).createIterator(),d;d=l.getNextRange();){for(var b=d.getCommonAncestor();b&&!(b.type==CKEDITOR.NODE_ELEMENT&&m[b.getName()]);){if(c.editable().equals(b)){b= +!1;break}b=b.getParent()}b||(b=d.startPath().contains(m))&&d.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);if(!b){var h=d.getEnclosedNode();h&&(h.type==CKEDITOR.NODE_ELEMENT&&h.getName()in m)&&(d.setStartAt(h,CKEDITOR.POSITION_AFTER_START),d.setEndAt(h,CKEDITOR.POSITION_BEFORE_END),b=h)}b&&(d.startContainer.type==CKEDITOR.NODE_ELEMENT&&d.startContainer.getName()in m)&&(h=new CKEDITOR.dom.walker(d),h.evaluator=p,d.startContainer=h.next());b&&(d.endContainer.type==CKEDITOR.NODE_ELEMENT&&d.endContainer.getName()in +m)&&(h=new CKEDITOR.dom.walker(d),h.evaluator=p,d.endContainer=h.previous());if(b)return f(b)}return 0}function p(c){return c.type==CKEDITOR.NODE_ELEMENT&&c.is("li")}function t(c){return u(c)&&v(c)}var u=CKEDITOR.dom.walker.whitespaces(!0),v=CKEDITOR.dom.walker.bookmark(!1,!0),q=CKEDITOR.TRISTATE_DISABLED,r=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indentlist",{requires:"indent",init:function(c){function f(c){j.specificDefinition.apply(this,arguments);this.requiredContent=["ul","ol"];c.on("key", +function(f){if("wysiwyg"==c.mode&&f.data.keyCode==this.indentKey){var l=this.getContext(c.elementPath());if(l&&(!this.isIndent||!CKEDITOR.plugins.indentList.firstItemInPath(this.context,c.elementPath(),l)))c.execCommand(this.relatedGlobal),f.cancel()}},this);this.jobs[this.isIndent?10:30]={refresh:this.isIndent?function(c,f){var d=this.getContext(f),b=CKEDITOR.plugins.indentList.firstItemInPath(this.context,f,d);return!d||!this.isIndent||b?q:r}:function(c,f){return!this.getContext(f)||this.isIndent? +q:r},exec:CKEDITOR.tools.bind(s,this)}}var j=CKEDITOR.plugins.indent;j.registerCommands(c,{indentlist:new f(c,"indentlist",!0),outdentlist:new f(c,"outdentlist")});CKEDITOR.tools.extend(f.prototype,j.specificDefinition.prototype,{context:{ol:1,ul:1}})}});CKEDITOR.plugins.indentList={};CKEDITOR.plugins.indentList.firstItemInPath=function(c,f,j){var n=f.contains(p);j||(j=f.contains(c));return j&&n&&n.equals(j.getFirst(p))}})();(function(){function g(a,b){var c=j.exec(a),d=j.exec(b);if(c){if(!c[2]&&"px"==d[2])return d[1];if("px"==c[2]&&!d[2])return d[1]+"px"}return b}var i=CKEDITOR.htmlParser.cssStyle,h=CKEDITOR.tools.cssLength,j=/^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i,k={elements:{$:function(a){var b=a.attributes;if((b=(b=(b=b&&b["data-cke-realelement"])&&new CKEDITOR.htmlParser.fragment.fromHtml(decodeURIComponent(b)))&&b.children[0])&&a.attributes["data-cke-resizable"]){var c=(new i(a)).rules,a=b.attributes,d=c.width,c= +c.height;d&&(a.width=g(a.width,d));c&&(a.height=g(a.height,c))}return b}}};CKEDITOR.plugins.add("fakeobjects",{init:function(a){a.filter.allow("img[!data-cke-realelement,src,alt,title](*){*}","fakeobjects")},afterInit:function(a){(a=(a=a.dataProcessor)&&a.htmlFilter)&&a.addRules(k,{applyToAll:!0})}});CKEDITOR.editor.prototype.createFakeElement=function(a,b,c,d){var e=this.lang.fakeobjects,e=e[c]||e.unknown,b={"class":b,"data-cke-realelement":encodeURIComponent(a.getOuterHtml()),"data-cke-real-node-type":a.type, +alt:e,title:e,align:a.getAttribute("align")||""};CKEDITOR.env.hc||(b.src=CKEDITOR.tools.transparentImageData);c&&(b["data-cke-real-element-type"]=c);d&&(b["data-cke-resizable"]=d,c=new i,d=a.getAttribute("width"),a=a.getAttribute("height"),d&&(c.rules.width=h(d)),a&&(c.rules.height=h(a)),c.populate(b));return this.document.createElement("img",{attributes:b})};CKEDITOR.editor.prototype.createFakeParserElement=function(a,b,c,d){var e=this.lang.fakeobjects,e=e[c]||e.unknown,f;f=new CKEDITOR.htmlParser.basicWriter; +a.writeHtml(f);f=f.getHtml();b={"class":b,"data-cke-realelement":encodeURIComponent(f),"data-cke-real-node-type":a.type,alt:e,title:e,align:a.attributes.align||""};CKEDITOR.env.hc||(b.src=CKEDITOR.tools.transparentImageData);c&&(b["data-cke-real-element-type"]=c);d&&(b["data-cke-resizable"]=d,d=a.attributes,a=new i,c=d.width,d=d.height,void 0!==c&&(a.rules.width=h(c)),void 0!==d&&(a.rules.height=h(d)),a.populate(b));return new CKEDITOR.htmlParser.element("img",b)};CKEDITOR.editor.prototype.restoreRealElement= +function(a){if(a.data("cke-real-node-type")!=CKEDITOR.NODE_ELEMENT)return null;var b=CKEDITOR.dom.element.createFromHtml(decodeURIComponent(a.data("cke-realelement")),this.document);if(a.data("cke-resizable")){var c=a.getStyle("width"),a=a.getStyle("height");c&&b.setAttribute("width",g(b.getAttribute("width"),c));a&&b.setAttribute("height",g(b.getAttribute("height"),a))}return b}})();(function(){function m(c){return c.replace(/'/g,"\\$&")}function n(c){for(var b,a=c.length,f=[],e=0;e<a;e++)b=c.charCodeAt(e),f.push(b);return"String.fromCharCode("+f.join(",")+")"}function o(c,b){var a=c.plugins.link,f=a.compiledProtectionFunction.params,e,d;d=[a.compiledProtectionFunction.name,"("];for(var g=0;g<f.length;g++)a=f[g].toLowerCase(),e=b[a],0<g&&d.push(","),d.push("'",e?m(encodeURIComponent(b[a])):"","'");d.push(")");return d.join("")}function l(c){var c=c.config.emailProtection||"", +b;c&&"encode"!=c&&(b={},c.replace(/^([^(]+)\(([^)]+)\)$/,function(a,c,e){b.name=c;b.params=[];e.replace(/[^,\s]+/g,function(a){b.params.push(a)})}));return b}CKEDITOR.plugins.add("link",{requires:"dialog,fakeobjects",onLoad:function(){function c(b){return a.replace(/%1/g,"rtl"==b?"right":"left").replace(/%2/g,"cke_contents_"+b)}var b="background:url("+CKEDITOR.getUrl(this.path+"images"+(CKEDITOR.env.hidpi?"/hidpi":"")+"/anchor.png")+") no-repeat %1 center;border:1px dotted #00f;background-size:16px;", +a=".%2 a.cke_anchor,.%2 a.cke_anchor_empty,.cke_editable.%2 a[name],.cke_editable.%2 a[data-cke-saved-name]{"+b+"padding-%1:18px;cursor:auto;}.%2 img.cke_anchor{"+b+"width:16px;min-height:15px;height:1.15em;vertical-align:text-bottom;}";CKEDITOR.addCss(c("ltr")+c("rtl"))},init:function(c){var b="a[!href]";CKEDITOR.dialog.isTabEnabled(c,"link","advanced")&&(b=b.replace("]",",accesskey,charset,dir,id,lang,name,rel,tabindex,title,type]{*}(*)"));CKEDITOR.dialog.isTabEnabled(c,"link","target")&&(b=b.replace("]", +",target,onclick]"));c.addCommand("link",new CKEDITOR.dialogCommand("link",{allowedContent:b,requiredContent:"a[href]"}));c.addCommand("anchor",new CKEDITOR.dialogCommand("anchor",{allowedContent:"a[!name,id]",requiredContent:"a[name]"}));c.addCommand("unlink",new CKEDITOR.unlinkCommand);c.addCommand("removeAnchor",new CKEDITOR.removeAnchorCommand);c.setKeystroke(CKEDITOR.CTRL+76,"link");c.ui.addButton&&(c.ui.addButton("Link",{label:c.lang.link.toolbar,command:"link",toolbar:"links,10"}),c.ui.addButton("Unlink", +{label:c.lang.link.unlink,command:"unlink",toolbar:"links,20"}),c.ui.addButton("Anchor",{label:c.lang.link.anchor.toolbar,command:"anchor",toolbar:"links,30"}));CKEDITOR.dialog.add("link",this.path+"dialogs/link.js");CKEDITOR.dialog.add("anchor",this.path+"dialogs/anchor.js");c.on("doubleclick",function(a){var b=CKEDITOR.plugins.link.getSelectedLink(c)||a.data.element;if(!b.isReadOnly())if(b.is("a")){a.data.dialog=b.getAttribute("name")&&(!b.getAttribute("href")||!b.getChildCount())?"anchor":"link"; +a.data.link=b}else if(CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,b))a.data.dialog="anchor"},null,null,0);c.on("doubleclick",function(a){a.data.dialog in{link:1,anchor:1}&&a.data.link&&c.getSelection().selectElement(a.data.link)},null,null,20);c.addMenuItems&&c.addMenuItems({anchor:{label:c.lang.link.anchor.menu,command:"anchor",group:"anchor",order:1},removeAnchor:{label:c.lang.link.anchor.remove,command:"removeAnchor",group:"anchor",order:5},link:{label:c.lang.link.menu,command:"link",group:"link", +order:1},unlink:{label:c.lang.link.unlink,command:"unlink",group:"link",order:5}});c.contextMenu&&c.contextMenu.addListener(function(a){if(!a||a.isReadOnly())return null;a=CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,a);if(!a&&!(a=CKEDITOR.plugins.link.getSelectedLink(c)))return null;var b={};a.getAttribute("href")&&a.getChildCount()&&(b={link:CKEDITOR.TRISTATE_OFF,unlink:CKEDITOR.TRISTATE_OFF});if(a&&a.hasAttribute("name"))b.anchor=b.removeAnchor=CKEDITOR.TRISTATE_OFF;return b});this.compiledProtectionFunction= +l(c)},afterInit:function(c){c.dataProcessor.dataFilter.addRules({elements:{a:function(a){return!a.attributes.name?null:!a.children.length?c.createFakeParserElement(a,"cke_anchor","anchor"):null}}});var b=c._.elementsPath&&c._.elementsPath.filters;b&&b.push(function(a,b){if("a"==b&&(CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,a)||a.getAttribute("name")&&(!a.getAttribute("href")||!a.getChildCount())))return"anchor"})}});var p=/^javascript:/,q=/^mailto:([^?]+)(?:\?(.+))?$/,r=/subject=([^;?:@&=$,\/]*)/, +s=/body=([^;?:@&=$,\/]*)/,t=/^#(.*)$/,u=/^((?:http|https|ftp|news):\/\/)?(.*)$/,v=/^(_(?:self|top|parent|blank))$/,w=/^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/,x=/^javascript:([^(]+)\(([^)]+)\)$/,y=/\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/,z=/(?:^|,)([^=]+)=(\d+|yes|no)/gi,k={id:"advId",dir:"advLangDir",accessKey:"advAccessKey",name:"advName",lang:"advLangCode",tabindex:"advTabIndex",title:"advTitle", +type:"advContentType","class":"advCSSClasses",charset:"advCharset",style:"advStyles",rel:"advRel"};CKEDITOR.plugins.link={getSelectedLink:function(c){var b=c.getSelection(),a=b.getSelectedElement();return a&&a.is("a")?a:(b=b.getRanges()[0])?(b.shrink(CKEDITOR.SHRINK_TEXT),c.elementPath(b.getCommonAncestor()).contains("a",1)):null},getEditorAnchors:function(c){for(var b=c.editable(),a=b.isInline()&&!c.plugins.divarea?c.document:b,b=a.getElementsByTag("a"),a=a.getElementsByTag("img"),f=[],e=0,d;d=b.getItem(e++);)if(d.data("cke-saved-name")|| +d.hasAttribute("name"))f.push({name:d.data("cke-saved-name")||d.getAttribute("name"),id:d.getAttribute("id")});for(e=0;d=a.getItem(e++);)(d=this.tryRestoreFakeAnchor(c,d))&&f.push({name:d.getAttribute("name"),id:d.getAttribute("id")});return f},fakeAnchor:!0,tryRestoreFakeAnchor:function(c,b){if(b&&b.data("cke-real-element-type")&&"anchor"==b.data("cke-real-element-type")){var a=c.restoreRealElement(b);if(a.data("cke-saved-name"))return a}},parseLinkAttributes:function(c,b){var a=b&&(b.data("cke-saved-href")|| +b.getAttribute("href"))||"",f=c.plugins.link.compiledProtectionFunction,e=c.config.emailProtection,d,g={};a.match(p)&&("encode"==e?a=a.replace(w,function(a,b,c){return"mailto:"+String.fromCharCode.apply(String,b.split(","))+(c&&c.replace(/\\'/g,"'"))}):e&&a.replace(x,function(a,b,c){if(b==f.name){g.type="email";for(var a=g.email={},b=/(^')|('$)/g,c=c.match(/[^,\s]+/g),d=c.length,e,h,i=0;i<d;i++)e=decodeURIComponent,h=c[i].replace(b,"").replace(/\\'/g,"'"),h=e(h),e=f.params[i].toLowerCase(),a[e]=h; +a.address=[a.name,a.domain].join("@")}}));if(!g.type)if(e=a.match(t))g.type="anchor",g.anchor={},g.anchor.name=g.anchor.id=e[1];else if(e=a.match(q)){d=a.match(r);a=a.match(s);g.type="email";var i=g.email={};i.address=e[1];d&&(i.subject=decodeURIComponent(d[1]));a&&(i.body=decodeURIComponent(a[1]))}else if(a&&(d=a.match(u)))g.type="url",g.url={},g.url.protocol=d[1],g.url.url=d[2];if(b){if(a=b.getAttribute("target"))g.target={type:a.match(v)?a:"frame",name:a};else if(a=(a=b.data("cke-pa-onclick")|| +b.getAttribute("onclick"))&&a.match(y))for(g.target={type:"popup",name:a[1]};e=z.exec(a[2]);)("yes"==e[2]||"1"==e[2])&&!(e[1]in{height:1,width:1,top:1,left:1})?g.target[e[1]]=!0:isFinite(e[2])&&(g.target[e[1]]=e[2]);var a={},h;for(h in k)(e=b.getAttribute(h))&&(a[k[h]]=e);if(h=b.data("cke-saved-name")||a.advName)a.advName=h;CKEDITOR.tools.isEmpty(a)||(g.advanced=a)}return g},getLinkAttributes:function(c,b){var a=c.config.emailProtection||"",f={};switch(b.type){case "url":var a=b.url&&void 0!==b.url.protocol? +b.url.protocol:"http://",e=b.url&&CKEDITOR.tools.trim(b.url.url)||"";f["data-cke-saved-href"]=0===e.indexOf("/")?e:a+e;break;case "anchor":a=b.anchor&&b.anchor.id;f["data-cke-saved-href"]="#"+(b.anchor&&b.anchor.name||a||"");break;case "email":var d=b.email,e=d.address;switch(a){case "":case "encode":var g=encodeURIComponent(d.subject||""),i=encodeURIComponent(d.body||""),d=[];g&&d.push("subject="+g);i&&d.push("body="+i);d=d.length?"?"+d.join("&"):"";"encode"==a?(a=["javascript:void(location.href='mailto:'+", +n(e)],d&&a.push("+'",m(d),"'"),a.push(")")):a=["mailto:",e,d];break;default:a=e.split("@",2),d.name=a[0],d.domain=a[1],a=["javascript:",o(c,d)]}f["data-cke-saved-href"]=a.join("")}if(b.target)if("popup"==b.target.type){for(var a=["window.open(this.href, '",b.target.name||"","', '"],h="resizable status location toolbar menubar fullscreen scrollbars dependent".split(" "),e=h.length,g=function(a){b.target[a]&&h.push(a+"="+b.target[a])},d=0;d<e;d++)h[d]+=b.target[h[d]]?"=yes":"=no";g("width");g("left"); +g("height");g("top");a.push(h.join(","),"'); return false;");f["data-cke-pa-onclick"]=a.join("")}else"notSet"!=b.target.type&&b.target.name&&(f.target=b.target.name);if(b.advanced){for(var j in k)(a=b.advanced[k[j]])&&(f[j]=a);f.name&&(f["data-cke-saved-name"]=f.name)}f["data-cke-saved-href"]&&(f.href=f["data-cke-saved-href"]);j={target:1,onclick:1,"data-cke-pa-onclick":1,"data-cke-saved-name":1};b.advanced&&CKEDITOR.tools.extend(j,k);for(var l in f)delete j[l];return{set:f,removed:CKEDITOR.tools.objectKeys(j)}}}; +CKEDITOR.unlinkCommand=function(){};CKEDITOR.unlinkCommand.prototype={exec:function(c){var b=new CKEDITOR.style({element:"a",type:CKEDITOR.STYLE_INLINE,alwaysRemoveElement:1});c.removeStyle(b)},refresh:function(c,b){var a=b.lastElement&&b.lastElement.getAscendant("a",!0);a&&"a"==a.getName()&&a.getAttribute("href")&&a.getChildCount()?this.setState(CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_DISABLED)},contextSensitive:1,startDisabled:1,requiredContent:"a[href]"};CKEDITOR.removeAnchorCommand= +function(){};CKEDITOR.removeAnchorCommand.prototype={exec:function(c){var b=c.getSelection(),a=b.createBookmarks(),f;if(b&&(f=b.getSelectedElement())&&(!f.getChildCount()?CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,f):f.is("a")))f.remove(1);else if(f=CKEDITOR.plugins.link.getSelectedLink(c))f.hasAttribute("href")?(f.removeAttributes({name:1,"data-cke-saved-name":1}),f.removeClass("cke_anchor")):f.remove(1);b.selectBookmarks(a)},requiredContent:"a[name]"};CKEDITOR.tools.extend(CKEDITOR.config,{linkShowAdvancedTab:!0, +linkShowTargetTab:!0})})();(function(){function E(b,k,e){function c(c){if((a=d[c?"getFirst":"getLast"]())&&(!a.is||!a.isBlockBoundary())&&(m=k.root[c?"getPrevious":"getNext"](CKEDITOR.dom.walker.invisible(!0)))&&(!m.is||!m.isBlockBoundary({br:1})))b.document.createElement("br")[c?"insertBefore":"insertAfter"](a)}for(var f=CKEDITOR.plugins.list.listToArray(k.root,e),g=[],i=0;i<k.contents.length;i++){var h=k.contents[i];if((h=h.getAscendant("li",!0))&&!h.getCustomData("list_item_processed"))g.push(h),CKEDITOR.dom.element.setMarker(e, +h,"list_item_processed",!0)}h=null;for(i=0;i<g.length;i++)h=g[i].getCustomData("listarray_index"),f[h].indent=-1;for(i=h+1;i<f.length;i++)if(f[i].indent>f[i-1].indent+1){g=f[i-1].indent+1-f[i].indent;for(h=f[i].indent;f[i]&&f[i].indent>=h;)f[i].indent+=g,i++;i--}var d=CKEDITOR.plugins.list.arrayToList(f,e,null,b.config.enterMode,k.root.getAttribute("dir")).listNode,a,m;c(!0);c();d.replace(k.root);b.fire("contentDomInvalidated")}function x(b,k){this.name=b;this.context=this.type=k;this.allowedContent= +k+" li";this.requiredContent=k}function A(b,k,e,c){for(var f,g;f=b[c?"getLast":"getFirst"](F);)(g=f.getDirection(1))!==k.getDirection(1)&&f.setAttribute("dir",g),f.remove(),e?f[c?"insertBefore":"insertAfter"](e):k.append(f,c)}function B(b){function k(e){var c=b[e?"getPrevious":"getNext"](q);c&&(c.type==CKEDITOR.NODE_ELEMENT&&c.is(b.getName()))&&(A(b,c,null,!e),b.remove(),b=c)}k();k(1)}function C(b){return b.type==CKEDITOR.NODE_ELEMENT&&(b.getName()in CKEDITOR.dtd.$block||b.getName()in CKEDITOR.dtd.$listItem)&& +CKEDITOR.dtd[b.getName()]["#"]}function y(b,k,e){b.fire("saveSnapshot");e.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var c=e.extractContents();k.trim(!1,!0);var f=k.createBookmark(),g=new CKEDITOR.dom.elementPath(k.startContainer),i=g.block,g=g.lastElement.getAscendant("li",1)||i,h=new CKEDITOR.dom.elementPath(e.startContainer),d=h.contains(CKEDITOR.dtd.$listItem),h=h.contains(CKEDITOR.dtd.$list);i?(i=i.getBogus())&&i.remove():h&&(i=h.getPrevious(q))&&v(i)&&i.remove();(i=c.getLast())&&(i.type== +CKEDITOR.NODE_ELEMENT&&i.is("br"))&&i.remove();(i=k.startContainer.getChild(k.startOffset))?c.insertBefore(i):k.startContainer.append(c);if(d&&(c=w(d)))g.contains(d)?(A(c,d.getParent(),d),c.remove()):g.append(c);for(;e.checkStartOfBlock()&&e.checkEndOfBlock();){h=e.startPath();c=h.block;if(!c)break;c.is("li")&&(g=c.getParent(),c.equals(g.getLast(q))&&c.equals(g.getFirst(q))&&(c=g));e.moveToPosition(c,CKEDITOR.POSITION_BEFORE_START);c.remove()}e=e.clone();c=b.editable();e.setEndAt(c,CKEDITOR.POSITION_BEFORE_END); +e=new CKEDITOR.dom.walker(e);e.evaluator=function(a){return q(a)&&!v(a)};(e=e.next())&&(e.type==CKEDITOR.NODE_ELEMENT&&e.getName()in CKEDITOR.dtd.$list)&&B(e);k.moveToBookmark(f);k.select();b.fire("saveSnapshot")}function w(b){return(b=b.getLast(q))&&b.type==CKEDITOR.NODE_ELEMENT&&b.getName()in r?b:null}var r={ol:1,ul:1},G=CKEDITOR.dom.walker.whitespaces(),D=CKEDITOR.dom.walker.bookmark(),q=function(b){return!(G(b)||D(b))},v=CKEDITOR.dom.walker.bogus();CKEDITOR.plugins.list={listToArray:function(b, +k,e,c,f){if(!r[b.getName()])return[];c||(c=0);e||(e=[]);for(var g=0,i=b.getChildCount();g<i;g++){var h=b.getChild(g);h.type==CKEDITOR.NODE_ELEMENT&&h.getName()in CKEDITOR.dtd.$list&&CKEDITOR.plugins.list.listToArray(h,k,e,c+1);if("li"==h.$.nodeName.toLowerCase()){var d={parent:b,indent:c,element:h,contents:[]};f?d.grandparent=f:(d.grandparent=b.getParent(),d.grandparent&&"li"==d.grandparent.$.nodeName.toLowerCase()&&(d.grandparent=d.grandparent.getParent()));k&&CKEDITOR.dom.element.setMarker(k,h, +"listarray_index",e.length);e.push(d);for(var a=0,m=h.getChildCount(),j;a<m;a++)j=h.getChild(a),j.type==CKEDITOR.NODE_ELEMENT&&r[j.getName()]?CKEDITOR.plugins.list.listToArray(j,k,e,c+1,d.grandparent):d.contents.push(j)}}return e},arrayToList:function(b,k,e,c,f){e||(e=0);if(!b||b.length<e+1)return null;for(var g,i=b[e].parent.getDocument(),h=new CKEDITOR.dom.documentFragment(i),d=null,a=e,m=Math.max(b[e].indent,0),j=null,n,l,p=c==CKEDITOR.ENTER_P?"p":"div";;){var o=b[a];g=o.grandparent;n=o.element.getDirection(1); +if(o.indent==m){if(!d||b[a].parent.getName()!=d.getName())d=b[a].parent.clone(!1,1),f&&d.setAttribute("dir",f),h.append(d);j=d.append(o.element.clone(0,1));n!=d.getDirection(1)&&j.setAttribute("dir",n);for(g=0;g<o.contents.length;g++)j.append(o.contents[g].clone(1,1));a++}else if(o.indent==Math.max(m,0)+1)o=b[a-1].element.getDirection(1),a=CKEDITOR.plugins.list.arrayToList(b,null,a,c,o!=n?n:null),!j.getChildCount()&&(CKEDITOR.env.needsNbspFiller&&7>=i.$.documentMode)&&j.append(i.createText(" ")), +j.append(a.listNode),a=a.nextIndex;else if(-1==o.indent&&!e&&g){r[g.getName()]?(j=o.element.clone(!1,!0),n!=g.getDirection(1)&&j.setAttribute("dir",n)):j=new CKEDITOR.dom.documentFragment(i);var d=g.getDirection(1)!=n,u=o.element,z=u.getAttribute("class"),v=u.getAttribute("style"),w=j.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(c!=CKEDITOR.ENTER_BR||d||v||z),s,x=o.contents.length,t;for(g=0;g<x;g++)if(s=o.contents[g],D(s)&&1<x)w?t=s.clone(1,1):j.append(s.clone(1,1));else if(s.type==CKEDITOR.NODE_ELEMENT&& +s.isBlockBoundary()){d&&!s.getDirection()&&s.setAttribute("dir",n);l=s;var y=u.getAttribute("style");y&&l.setAttribute("style",y.replace(/([^;])$/,"$1;")+(l.getAttribute("style")||""));z&&s.addClass(z);l=null;t&&(j.append(t),t=null);j.append(s.clone(1,1))}else w?(l||(l=i.createElement(p),j.append(l),d&&l.setAttribute("dir",n)),v&&l.setAttribute("style",v),z&&l.setAttribute("class",z),t&&(l.append(t),t=null),l.append(s.clone(1,1))):j.append(s.clone(1,1));t&&((l||j).append(t),t=null);j.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&& +a!=b.length-1&&(CKEDITOR.env.needsBrFiller&&(n=j.getLast())&&(n.type==CKEDITOR.NODE_ELEMENT&&n.is("br"))&&n.remove(),n=j.getLast(q),(!n||!(n.type==CKEDITOR.NODE_ELEMENT&&n.is(CKEDITOR.dtd.$block)))&&j.append(i.createElement("br")));n=j.$.nodeName.toLowerCase();("div"==n||"p"==n)&&j.appendBogus();h.append(j);d=null;a++}else return null;l=null;if(b.length<=a||Math.max(b[a].indent,0)<m)break}if(k)for(b=h.getFirst();b;){if(b.type==CKEDITOR.NODE_ELEMENT&&(CKEDITOR.dom.element.clearMarkers(k,b),b.getName()in +CKEDITOR.dtd.$listItem&&(e=b,i=f=c=void 0,c=e.getDirection()))){for(f=e.getParent();f&&!(i=f.getDirection());)f=f.getParent();c==i&&e.removeAttribute("dir")}b=b.getNextSourceNode()}return{listNode:h,nextIndex:a}}};var H=/^h[1-6]$/,F=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT);x.prototype={exec:function(b){this.refresh(b,b.elementPath());var k=b.config,e=b.getSelection(),c=e&&e.getRanges();if(this.state==CKEDITOR.TRISTATE_OFF){var f=b.editable();if(f.getFirst(q)){var g=1==c.length&&c[0];(k= +g&&g.getEnclosedNode())&&(k.is&&this.type==k.getName())&&this.setState(CKEDITOR.TRISTATE_ON)}else k.enterMode==CKEDITOR.ENTER_BR?f.appendBogus():c[0].fixBlock(1,k.enterMode==CKEDITOR.ENTER_P?"p":"div"),e.selectRanges(c)}for(var k=e.createBookmarks(!0),f=[],i={},c=c.createIterator(),h=0;(g=c.getNextRange())&&++h;){var d=g.getBoundaryNodes(),a=d.startNode,m=d.endNode;a.type==CKEDITOR.NODE_ELEMENT&&"td"==a.getName()&&g.setStartAt(d.startNode,CKEDITOR.POSITION_AFTER_START);m.type==CKEDITOR.NODE_ELEMENT&& +"td"==m.getName()&&g.setEndAt(d.endNode,CKEDITOR.POSITION_BEFORE_END);g=g.createIterator();for(g.forceBrBreak=this.state==CKEDITOR.TRISTATE_OFF;d=g.getNextParagraph();)if(!d.getCustomData("list_block")){CKEDITOR.dom.element.setMarker(i,d,"list_block",1);for(var j=b.elementPath(d),a=j.elements,m=0,j=j.blockLimit,n,l=a.length-1;0<=l&&(n=a[l]);l--)if(r[n.getName()]&&j.contains(n)){j.removeCustomData("list_group_object_"+h);(a=n.getCustomData("list_group_object"))?a.contents.push(d):(a={root:n,contents:[d]}, +f.push(a),CKEDITOR.dom.element.setMarker(i,n,"list_group_object",a));m=1;break}m||(m=j,m.getCustomData("list_group_object_"+h)?m.getCustomData("list_group_object_"+h).contents.push(d):(a={root:m,contents:[d]},CKEDITOR.dom.element.setMarker(i,m,"list_group_object_"+h,a),f.push(a)))}}for(n=[];0<f.length;)if(a=f.shift(),this.state==CKEDITOR.TRISTATE_OFF)if(r[a.root.getName()]){c=b;h=a;a=i;g=n;m=CKEDITOR.plugins.list.listToArray(h.root,a);j=[];for(d=0;d<h.contents.length;d++)if(l=h.contents[d],(l=l.getAscendant("li", +!0))&&!l.getCustomData("list_item_processed"))j.push(l),CKEDITOR.dom.element.setMarker(a,l,"list_item_processed",!0);for(var l=h.root.getDocument(),p=void 0,o=void 0,d=0;d<j.length;d++){var u=j[d].getCustomData("listarray_index"),p=m[u].parent;p.is(this.type)||(o=l.createElement(this.type),p.copyAttributes(o,{start:1,type:1}),o.removeStyle("list-style-type"),m[u].parent=o)}a=CKEDITOR.plugins.list.arrayToList(m,a,null,c.config.enterMode);m=void 0;j=a.listNode.getChildCount();for(d=0;d<j&&(m=a.listNode.getChild(d));d++)m.getName()== +this.type&&g.push(m);a.listNode.replace(h.root);c.fire("contentDomInvalidated")}else{m=b;d=a;g=n;j=d.contents;c=d.root.getDocument();h=[];1==j.length&&j[0].equals(d.root)&&(a=c.createElement("div"),j[0].moveChildren&&j[0].moveChildren(a),j[0].append(a),j[0]=a);d=d.contents[0].getParent();for(l=0;l<j.length;l++)d=d.getCommonAncestor(j[l].getParent());p=m.config.useComputedState;m=a=void 0;p=void 0===p||p;for(l=0;l<j.length;l++)for(o=j[l];u=o.getParent();){if(u.equals(d)){h.push(o);!m&&o.getDirection()&& +(m=1);o=o.getDirection(p);null!==a&&(a=a&&a!=o?null:o);break}o=u}if(!(1>h.length)){j=h[h.length-1].getNext();l=c.createElement(this.type);g.push(l);for(p=g=void 0;h.length;)g=h.shift(),p=c.createElement("li"),g.is("pre")||H.test(g.getName())||"false"==g.getAttribute("contenteditable")?g.appendTo(p):(g.copyAttributes(p),a&&g.getDirection()&&(p.removeStyle("direction"),p.removeAttribute("dir")),g.moveChildren(p),g.remove()),p.appendTo(l);a&&m&&l.setAttribute("dir",a);j?l.insertBefore(j):l.appendTo(d)}}else this.state== +CKEDITOR.TRISTATE_ON&&r[a.root.getName()]&&E.call(this,b,a,i);for(l=0;l<n.length;l++)B(n[l]);CKEDITOR.dom.element.clearAllMarkers(i);e.selectBookmarks(k);b.focus()},refresh:function(b,k){var e=k.contains(r,1),c=k.blockLimit||k.root;e&&c.contains(e)?this.setState(e.is(this.type)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add("list",{requires:"indentlist",init:function(b){b.blockless||(b.addCommand("numberedlist",new x("numberedlist","ol")),b.addCommand("bulletedlist", +new x("bulletedlist","ul")),b.ui.addButton&&(b.ui.addButton("NumberedList",{label:b.lang.list.numberedlist,command:"numberedlist",directional:!0,toolbar:"list,10"}),b.ui.addButton("BulletedList",{label:b.lang.list.bulletedlist,command:"bulletedlist",directional:!0,toolbar:"list,20"})),b.on("key",function(k){var e=k.data.domEvent.getKey(),c;if(b.mode=="wysiwyg"&&e in{8:1,46:1}){var f=b.getSelection().getRanges()[0],g=f&&f.startPath();if(f&&f.collapsed){var i=e==8,h=b.editable(),d=new CKEDITOR.dom.walker(f.clone()); +d.evaluator=function(a){return q(a)&&!v(a)};d.guard=function(a,b){return!(b&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))};e=f.clone();if(i){var a;if((a=g.contains(r))&&f.checkBoundaryOfElement(a,CKEDITOR.START)&&(a=a.getParent())&&a.is("li")&&(a=w(a))){c=a;a=a.getPrevious(q);e.moveToPosition(a&&v(a)?a:c,CKEDITOR.POSITION_BEFORE_START)}else{d.range.setStartAt(h,CKEDITOR.POSITION_AFTER_START);d.range.setEnd(f.startContainer,f.startOffset);if((a=d.previous())&&a.type==CKEDITOR.NODE_ELEMENT&&(a.getName()in +r||a.is("li"))){if(!a.is("li")){d.range.selectNodeContents(a);d.reset();d.evaluator=C;a=d.previous()}c=a;e.moveToElementEditEnd(c);e.moveToPosition(e.endPath().block,CKEDITOR.POSITION_BEFORE_END)}}if(c){y(b,e,f);k.cancel()}else{var m=g.contains(r);if(m&&f.checkBoundaryOfElement(m,CKEDITOR.START)){c=m.getFirst(q);if(f.checkBoundaryOfElement(c,CKEDITOR.START)){a=m.getPrevious(q);if(w(c)){if(a){f.moveToElementEditEnd(a);f.select()}}else b.execCommand("outdent");k.cancel()}}}}else if(c=g.contains("li")){d.range.setEndAt(h, +CKEDITOR.POSITION_BEFORE_END);i=(h=c.getLast(q))&&C(h)?h:c;g=0;if((a=d.next())&&a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in r&&a.equals(h)){g=1;a=d.next()}else f.checkBoundaryOfElement(i,CKEDITOR.END)&&(g=2);if(g&&a){f=f.clone();f.moveToElementEditStart(a);if(g==1){e.optimize();if(!e.startContainer.equals(c)){for(c=e.startContainer;c.is(CKEDITOR.dtd.$inline);){m=c;c=c.getParent()}m&&e.moveToPosition(m,CKEDITOR.POSITION_AFTER_END)}}if(g==2){e.moveToPosition(e.endPath().block,CKEDITOR.POSITION_BEFORE_END); +f.endPath().block&&f.moveToPosition(f.endPath().block,CKEDITOR.POSITION_AFTER_START)}y(b,e,f);k.cancel()}}else{d.range.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);if((a=d.next())&&a.type==CKEDITOR.NODE_ELEMENT&&a.is(r)){a=a.getFirst(q);if(g.block&&f.checkStartOfBlock()&&f.checkEndOfBlock()){g.block.remove();f.moveToElementEditStart(a);f.select()}else if(w(a)){f.moveToElementEditStart(a);f.select()}else{f=f.clone();f.moveToElementEditStart(a);y(b,e,f)}k.cancel()}}setTimeout(function(){b.selectionChange(1)})}}}))}})})();(function(){function Q(a,c,d){return l(c)&&l(d)&&d.equals(c.getNext(function(a){return!(z(a)||A(a)||p(a))}))}function u(a){this.upper=a[0];this.lower=a[1];this.set.apply(this,a.slice(2))}function J(a){var c=a.element;if(c&&l(c)&&(c=c.getAscendant(a.triggers,!0))&&a.editable.contains(c)){var d=K(c);if("true"==d.getAttribute("contenteditable"))return c;if(d.is(a.triggers))return d}return null}function fa(a,c,d){n(a,c);n(a,d);a=c.size.bottom;d=d.size.top;return a&&d?0|(a+d)/2:a||d}function r(a,c,d){return c= +c[d?"getPrevious":"getNext"](function(b){return b&&b.type==CKEDITOR.NODE_TEXT&&!z(b)||l(b)&&!p(b)&&!v(a,b)})}function K(a,c){if(a.data("cke-editable"))return null;for(c||(a=a.getParent());a&&!a.data("cke-editable");){if(a.hasAttribute("contenteditable"))return a;a=a.getParent()}return null}function ga(a){var c=a.doc,d=B('<span contenteditable="false" style="'+L+"position:absolute;border-top:1px dashed "+a.boxColor+'"></span>',c),b=CKEDITOR.getUrl(this.path+"images/"+(o.hidpi?"hidpi/":"")+"icon"+(a.rtl? +"-rtl":"")+".png");q(d,{attach:function(){this.wrap.getParent()||this.wrap.appendTo(a.editable,!0);return this},lineChildren:[q(B('<span title="'+a.editor.lang.magicline.title+'" contenteditable="false">&#8629;</span>',c),{base:L+"height:17px;width:17px;"+(a.rtl?"left":"right")+":17px;background:url("+b+") center no-repeat "+a.boxColor+";cursor:pointer;"+(o.hc?"font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;":"")+(o.hidpi?"background-size: 9px 10px;":""),looks:["top:-8px; border-radius: 2px;", +"top:-17px; border-radius: 2px 2px 0px 0px;","top:-1px; border-radius: 0px 0px 2px 2px;"]}),q(B(R,c),{base:S+"left:0px;border-left-color:"+a.boxColor+";",looks:["border-width:8px 0 8px 8px;top:-8px","border-width:8px 0 0 8px;top:-8px","border-width:0 0 8px 8px;top:0px"]}),q(B(R,c),{base:S+"right:0px;border-right-color:"+a.boxColor+";",looks:["border-width:8px 8px 8px 0;top:-8px","border-width:8px 8px 0 0;top:-8px","border-width:0 8px 8px 0;top:0px"]})],detach:function(){this.wrap.getParent()&&this.wrap.remove(); +return this},mouseNear:function(){n(a,this);var b=a.holdDistance,c=this.size;return c&&a.mouse.y>c.top-b&&a.mouse.y<c.bottom+b&&a.mouse.x>c.left-b&&a.mouse.x<c.right+b?!0:!1},place:function(){var b=a.view,c=a.editable,d=a.trigger,h=d.upper,g=d.lower,j=h||g,m=j.getParent(),k={};this.trigger=d;h&&n(a,h,!0);g&&n(a,g,!0);n(a,m,!0);a.inInlineMode&&C(a,!0);m.equals(c)?(k.left=b.scroll.x,k.right=-b.scroll.x,k.width=""):(k.left=j.size.left-j.size.margin.left+b.scroll.x-(a.inInlineMode?b.editable.left+b.editable.border.left: +0),k.width=j.size.outerWidth+j.size.margin.left+j.size.margin.right+b.scroll.x,k.right="");h&&g?k.top=h.size.margin.bottom===g.size.margin.top?0|h.size.bottom+h.size.margin.bottom/2:h.size.margin.bottom<g.size.margin.top?h.size.bottom+h.size.margin.bottom:h.size.bottom+h.size.margin.bottom-g.size.margin.top:h?g||(k.top=h.size.bottom+h.size.margin.bottom):k.top=g.size.top-g.size.margin.top;d.is(x)||k.top>b.scroll.y-15&&k.top<b.scroll.y+5?(k.top=a.inInlineMode?0:b.scroll.y,this.look(x)):d.is(y)||k.top> +b.pane.bottom-5&&k.top<b.pane.bottom+15?(k.top=a.inInlineMode?b.editable.height+b.editable.padding.top+b.editable.padding.bottom:b.pane.bottom-1,this.look(y)):(a.inInlineMode&&(k.top-=b.editable.top+b.editable.border.top),this.look(s));a.inInlineMode&&(k.top--,k.top+=b.editable.scroll.top,k.left+=b.editable.scroll.left);for(var l in k)k[l]=CKEDITOR.tools.cssLength(k[l]);this.setStyles(k)},look:function(a){if(this.oldLook!=a){for(var b=this.lineChildren.length,c;b--;)(c=this.lineChildren[b]).setAttribute("style", +c.base+c.looks[0|a/2]);this.oldLook=a}},wrap:new M("span",a.doc)});for(c=d.lineChildren.length;c--;)d.lineChildren[c].appendTo(d);d.look(s);d.appendTo(d.wrap);d.unselectable();d.lineChildren[0].on("mouseup",function(b){d.detach();N(a,function(b){var c=a.line.trigger;b[c.is(D)?"insertBefore":"insertAfter"](c.is(D)?c.lower:c.upper)},!0);a.editor.focus();!o.ie&&a.enterMode!=CKEDITOR.ENTER_BR&&a.hotNode.scrollIntoView();b.data.preventDefault(!0)});d.on("mousedown",function(a){a.data.preventDefault(!0)}); +a.line=d}function N(a,c,d){var b=new CKEDITOR.dom.range(a.doc),e=a.editor,f;o.ie&&a.enterMode==CKEDITOR.ENTER_BR?f=a.doc.createText(E):(f=(f=K(a.element,!0))&&f.data("cke-enter-mode")||a.enterMode,f=new M(F[f],a.doc),f.is("br")||a.doc.createText(E).appendTo(f));d&&e.fire("saveSnapshot");c(f);b.moveToPosition(f,CKEDITOR.POSITION_AFTER_START);e.getSelection().selectRanges([b]);a.hotNode=f;d&&e.fire("saveSnapshot")}function T(a,c){return{canUndo:!0,modes:{wysiwyg:1},exec:function(){function d(b){var d= +o.ie&&9>o.version?" ":E,f=a.hotNode&&a.hotNode.getText()==d&&a.element.equals(a.hotNode)&&a.lastCmdDirection===!!c;N(a,function(d){f&&a.hotNode&&a.hotNode.remove();d[c?"insertAfter":"insertBefore"](b);d.setAttributes({"data-cke-magicline-hot":1,"data-cke-magicline-dir":!!c});a.lastCmdDirection=!!c});!o.ie&&a.enterMode!=CKEDITOR.ENTER_BR&&a.hotNode.scrollIntoView();a.line.detach()}return function(b){var b=b.getSelection().getStartElement(),e,b=b.getAscendant(U,1);if(!V(a,b)&&b&&!b.equals(a.editable)&& +!b.contains(a.editable)){if((e=K(b))&&"false"==e.getAttribute("contenteditable"))b=e;a.element=b;e=r(a,b,!c);var f;l(e)&&e.is(a.triggers)&&e.is(ha)&&(!r(a,e,!c)||(f=r(a,e,!c))&&l(f)&&f.is(a.triggers))?d(e):(f=J(a,b),l(f)&&(r(a,f,!c)?(b=r(a,f,!c))&&(l(b)&&b.is(a.triggers))&&d(f):d(f)))}}}()}}function v(a,c){if(!c||!(c.type==CKEDITOR.NODE_ELEMENT&&c.$))return!1;var d=a.line;return d.wrap.equals(c)||d.wrap.contains(c)}function l(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.$}function p(a){if(!l(a))return!1; +var c;if(!(c=W(a)))l(a)?(c={left:1,right:1,center:1},c=!(!c[a.getComputedStyle("float")]&&!c[a.getAttribute("align")])):c=!1;return c}function W(a){return!!{absolute:1,fixed:1}[a.getComputedStyle("position")]}function G(a,c){return l(c)?c.is(a.triggers):null}function V(a,c){if(!c)return!1;for(var d=c.getParents(1),b=d.length;b--;)for(var e=a.tabuList.length;e--;)if(d[b].hasAttribute(a.tabuList[e]))return!0;return!1}function ia(a,c,d){c=c[d?"getLast":"getFirst"](function(b){return a.isRelevant(b)&& +!b.is(ja)});if(!c)return!1;n(a,c);return d?c.size.top>a.mouse.y:c.size.bottom<a.mouse.y}function X(a){var c=a.editable,d=a.mouse,b=a.view,e=a.triggerOffset;C(a);var f=d.y>(a.inInlineMode?b.editable.top+b.editable.height/2:Math.min(b.editable.height,b.pane.height)/2),c=c[f?"getLast":"getFirst"](function(a){return!(z(a)||A(a))});if(!c)return null;v(a,c)&&(c=a.line.wrap[f?"getPrevious":"getNext"](function(a){return!(z(a)||A(a))}));if(!l(c)||p(c)||!G(a,c))return null;n(a,c);return!f&&0<=c.size.top&&0< +d.y&&d.y<c.size.top+e?(a=a.inInlineMode||0===b.scroll.y?x:s,new u([null,c,D,H,a])):f&&c.size.bottom<=b.pane.height&&d.y>c.size.bottom-e&&d.y<b.pane.height?(a=a.inInlineMode||c.size.bottom>b.pane.height-e&&c.size.bottom<b.pane.height?y:s,new u([c,null,Y,H,a])):null}function Z(a){var c=a.mouse,d=a.view,b=a.triggerOffset,e=J(a);if(!e)return null;n(a,e);var b=Math.min(b,0|e.size.outerHeight/2),f=[],i,h;if(c.y>e.size.top-1&&c.y<e.size.top+b)h=!1;else if(c.y>e.size.bottom-b&&c.y<e.size.bottom+1)h=!0;else return null; +if(p(e)||ia(a,e,h)||e.getParent().is($))return null;var g=r(a,e,!h);if(g){if(g&&g.type==CKEDITOR.NODE_TEXT)return null;if(l(g)){if(p(g)||!G(a,g)||g.getParent().is($))return null;f=[g,e][h?"reverse":"concat"]().concat([O,H])}}else e.equals(a.editable[h?"getLast":"getFirst"](a.isRelevant))?(C(a),h&&c.y>e.size.bottom-b&&c.y<d.pane.height&&e.size.bottom>d.pane.height-b&&e.size.bottom<d.pane.height?i=y:0<c.y&&c.y<e.size.top+b&&(i=x)):i=s,f=[null,e][h?"reverse":"concat"]().concat([h?Y:D,H,i,e.equals(a.editable[h? +"getLast":"getFirst"](a.isRelevant))?h?y:x:s]);return 0 in f?new u(f):null}function P(a,c,d,b){for(var e=c.getDocumentPosition(),f={},i={},h={},g={},j=t.length;j--;)f[t[j]]=parseInt(c.getComputedStyle.call(c,"border-"+t[j]+"-width"),10)||0,h[t[j]]=parseInt(c.getComputedStyle.call(c,"padding-"+t[j]),10)||0,i[t[j]]=parseInt(c.getComputedStyle.call(c,"margin-"+t[j]),10)||0;(!d||b)&&I(a,b);g.top=e.y-(d?0:a.view.scroll.y);g.left=e.x-(d?0:a.view.scroll.x);g.outerWidth=c.$.offsetWidth;g.outerHeight=c.$.offsetHeight; +g.height=g.outerHeight-(h.top+h.bottom+f.top+f.bottom);g.width=g.outerWidth-(h.left+h.right+f.left+f.right);g.bottom=g.top+g.outerHeight;g.right=g.left+g.outerWidth;a.inInlineMode&&(g.scroll={top:c.$.scrollTop,left:c.$.scrollLeft});return q({border:f,padding:h,margin:i,ignoreScroll:d},g,!0)}function n(a,c,d){if(!l(c))return c.size=null;if(c.size){if(c.size.ignoreScroll==d&&c.size.date>new Date-aa)return null}else c.size={};return q(c.size,P(a,c,d),{date:+new Date},!0)}function C(a,c){a.view.editable= +P(a,a.editable,c,!0)}function I(a,c){a.view||(a.view={});var d=a.view;if(c||!(d&&d.date>new Date-aa)){var b=a.win,d=b.getScrollPosition(),b=b.getViewPaneSize();q(a.view,{scroll:{x:d.x,y:d.y,width:a.doc.$.documentElement.scrollWidth-b.width,height:a.doc.$.documentElement.scrollHeight-b.height},pane:{width:b.width,height:b.height,bottom:b.height+d.y},date:+new Date},!0)}}function ka(a,c,d,b){for(var e=b,f=b,i=0,h=!1,g=!1,j=a.view.pane.height,m=a.mouse;m.y+i<j&&0<m.y-i;){h||(h=c(e,b));g||(g=c(f,b)); +!h&&0<m.y-i&&(e=d(a,{x:m.x,y:m.y-i}));!g&&m.y+i<j&&(f=d(a,{x:m.x,y:m.y+i}));if(h&&g)break;i+=2}return new u([e,f,null,null])}CKEDITOR.plugins.add("magicline",{init:function(a){var c=a.config,d=c.magicline_triggerOffset||30,b={editor:a,enterMode:c.enterMode,triggerOffset:d,holdDistance:0|d*(c.magicline_holdDistance||0.5),boxColor:c.magicline_color||"#ff0000",rtl:"rtl"==c.contentsLangDirection,tabuList:["data-cke-hidden-sel"].concat(c.magicline_tabuList||[]),triggers:c.magicline_everywhere?U:{table:1, +hr:1,div:1,ul:1,ol:1,dl:1,form:1,blockquote:1}},e,f,i;b.isRelevant=function(a){return l(a)&&!v(b,a)&&!p(a)};a.on("contentDom",function(){var d=a.editable(),g=a.document,j=a.window;q(b,{editable:d,inInlineMode:d.isInline(),doc:g,win:j,hotNode:null},!0);b.boundary=b.inInlineMode?b.editable:b.doc.getDocumentElement();d.is(w.$inline)||(b.inInlineMode&&!W(d)&&d.setStyles({position:"relative",top:null,left:null}),ga.call(this,b),I(b),d.attachListener(a,"beforeUndoImage",function(){b.line.detach()}),d.attachListener(a, +"beforeGetData",function(){b.line.wrap.getParent()&&(b.line.detach(),a.once("getData",function(){b.line.attach()},null,null,1E3))},null,null,0),d.attachListener(b.inInlineMode?g:g.getWindow().getFrame(),"mouseout",function(c){if("wysiwyg"==a.mode)if(b.inInlineMode){var d=c.data.$.clientX,c=c.data.$.clientY;I(b);C(b,!0);var e=b.view.editable,f=b.view.scroll;if(!(d>e.left-f.x&&d<e.right-f.x)||!(c>e.top-f.y&&c<e.bottom-f.y))clearTimeout(i),i=null,b.line.detach()}else clearTimeout(i),i=null,b.line.detach()}), +d.attachListener(d,"keyup",function(){b.hiddenMode=0}),d.attachListener(d,"keydown",function(c){if("wysiwyg"==a.mode)switch(c.data.getKeystroke()){case 2228240:case 16:b.hiddenMode=1,b.line.detach()}}),d.attachListener(b.inInlineMode?d:g,"mousemove",function(c){f=!0;if(!("wysiwyg"!=a.mode||a.readOnly||i)){var d={x:c.data.$.clientX,y:c.data.$.clientY};i=setTimeout(function(){b.mouse=d;i=b.trigger=null;I(b);if(f&&!b.hiddenMode&&a.focusManager.hasFocus&&!b.line.mouseNear()&&(b.element=ba(b,!0)))(b.trigger= +X(b)||Z(b)||ca(b))&&!V(b,b.trigger.upper||b.trigger.lower)?b.line.attach().place():(b.trigger=null,b.line.detach()),f=!1},30)}}),d.attachListener(j,"scroll",function(){"wysiwyg"==a.mode&&(b.line.detach(),o.webkit&&(b.hiddenMode=1,clearTimeout(e),e=setTimeout(function(){b.mouseDown||(b.hiddenMode=0)},50)))}),d.attachListener(da?g:j,"mousedown",function(){"wysiwyg"==a.mode&&(b.line.detach(),b.hiddenMode=1,b.mouseDown=1)}),d.attachListener(da?g:j,"mouseup",function(){b.hiddenMode=0;b.mouseDown=0}),a.addCommand("accessPreviousSpace", +T(b)),a.addCommand("accessNextSpace",T(b,!0)),a.setKeystroke([[c.magicline_keystrokePrevious,"accessPreviousSpace"],[c.magicline_keystrokeNext,"accessNextSpace"]]),a.on("loadSnapshot",function(){var c,d,e,f;for(f in{p:1,br:1,div:1}){c=a.document.getElementsByTag(f);for(e=c.count();e--;)if((d=c.getItem(e)).data("cke-magicline-hot")){b.hotNode=d;b.lastCmdDirection="true"===d.data("cke-magicline-dir")?!0:!1;return}}}),this.backdoor={accessFocusSpace:N,boxTrigger:u,isLine:v,getAscendantTrigger:J,getNonEmptyNeighbour:r, +getSize:P,that:b,triggerEdge:Z,triggerEditable:X,triggerExpand:ca})},this)}});var q=CKEDITOR.tools.extend,M=CKEDITOR.dom.element,B=M.createFromHtml,o=CKEDITOR.env,da=CKEDITOR.env.ie&&9>CKEDITOR.env.version,w=CKEDITOR.dtd,F={},D=128,Y=64,O=32,H=16,ea=8,x=4,y=2,s=1,E=" ",$=w.$listItem,ja=w.$tableContent,ha=q({},w.$nonEditable,w.$empty),U=w.$block,aa=100,L="width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;",S=L+"border-color:transparent;display:block;border-style:solid;", +R="<span>"+E+"</span>";F[CKEDITOR.ENTER_BR]="br";F[CKEDITOR.ENTER_P]="p";F[CKEDITOR.ENTER_DIV]="div";u.prototype={set:function(a,c,d){this.properties=a+c+(d||s);return this},is:function(a){return(this.properties&a)==a}};var ba=function(){function a(a,d){var b=a.$.elementFromPoint(d.x,d.y);return b&&b.nodeType?new CKEDITOR.dom.element(b):null}return function(c,d,b){if(!c.mouse)return null;var e=c.doc,f=c.line.wrap,b=b||c.mouse,i=a(e,b);d&&v(c,i)&&(f.hide(),i=a(e,b),f.show());return!i||!(i.type==CKEDITOR.NODE_ELEMENT&& +i.$)||o.ie&&9>o.version&&!c.boundary.equals(i)&&!c.boundary.contains(i)?null:i}}(),z=CKEDITOR.dom.walker.whitespaces(),A=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT),ca=function(){function a(a){var b=a.element,e,f,i;if(!l(b)||b.contains(a.editable)||b.isReadOnly())return null;i=ka(a,function(a,b){return!b.equals(a)},function(a,b){return ba(a,!0,b)},b);e=i.upper;f=i.lower;if(Q(a,e,f))return i.set(O,ea);if(e&&b.contains(e))for(;!e.getParent().equals(b);)e=e.getParent();else e=b.getFirst(function(b){return c(a, +b)});if(f&&b.contains(f))for(;!f.getParent().equals(b);)f=f.getParent();else f=b.getLast(function(b){return c(a,b)});if(!e||!f)return null;n(a,e);n(a,f);if(!(a.mouse.y>e.size.top&&a.mouse.y<f.size.bottom))return null;for(var b=Number.MAX_VALUE,h,g,j,m;f&&!f.equals(e)&&(g=e.getNext(a.isRelevant));)h=Math.abs(fa(a,e,g)-a.mouse.y),h<b&&(b=h,j=e,m=g),e=g,n(a,e);if(!j||!m||!(a.mouse.y>j.size.top&&a.mouse.y<m.size.bottom))return null;i.upper=j;i.lower=m;return i.set(O,ea)}function c(a,b){return!(b&&b.type== +CKEDITOR.NODE_TEXT||A(b)||p(b)||v(a,b)||b.type==CKEDITOR.NODE_ELEMENT&&b.$&&b.is("br"))}return function(c){var b=a(c),e;if(e=b){e=b.upper;var f=b.lower;e=!e||!f||p(f)||p(e)||f.equals(e)||e.equals(f)||f.contains(e)||e.contains(f)?!1:G(c,e)&&G(c,f)&&Q(c,e,f)?!0:!1}return e?b:null}}(),t=["top","left","right","bottom"]})();CKEDITOR.config.magicline_keystrokePrevious=CKEDITOR.CTRL+CKEDITOR.SHIFT+51;CKEDITOR.config.magicline_keystrokeNext=CKEDITOR.CTRL+CKEDITOR.SHIFT+52;(function(){function l(a){if(!a||a.type!=CKEDITOR.NODE_ELEMENT||"form"!=a.getName())return[];for(var e=[],f=["style","className"],b=0;b<f.length;b++){var c=a.$.elements.namedItem(f[b]);c&&(c=new CKEDITOR.dom.element(c),e.push([c,c.nextSibling]),c.remove())}return e}function p(a,e){if(a&&!(a.type!=CKEDITOR.NODE_ELEMENT||"form"!=a.getName())&&0<e.length)for(var f=e.length-1;0<=f;f--){var b=e[f][0],c=e[f][1];c?b.insertBefore(c):b.appendTo(a)}}function o(a,e){var f=l(a),b={},c=a.$;e||(b["class"]=c.className|| +"",c.className="");b.inline=c.style.cssText||"";e||(c.style.cssText="position: static; overflow: visible");p(f);return b}function q(a,e){var f=l(a),b=a.$;"class"in e&&(b.className=e["class"]);"inline"in e&&(b.style.cssText=e.inline);p(f)}function r(a){if(!a.editable().isInline()){var e=CKEDITOR.instances,f;for(f in e){var b=e[f];"wysiwyg"==b.mode&&!b.readOnly&&(b=b.document.getBody(),b.setAttribute("contentEditable",!1),b.setAttribute("contentEditable",!0))}a.editable().hasFocus&&(a.toolbox.focus(), +a.focus())}}CKEDITOR.plugins.add("maximize",{init:function(a){function e(){var b=c.getViewPaneSize();a.resize(b.width,b.height,null,!0)}if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var f=a.lang,b=CKEDITOR.document,c=b.getWindow(),j,k,m,l=CKEDITOR.TRISTATE_OFF;a.addCommand("maximize",{modes:{wysiwyg:!CKEDITOR.env.iOS,source:!CKEDITOR.env.iOS},readOnly:1,editorFocus:!1,exec:function(){var h=a.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}),g=a.ui.space("contents"); +if("wysiwyg"==a.mode){var d=a.getSelection();j=d&&d.getRanges();k=c.getScrollPosition()}else{var i=a.editable().$;j=!CKEDITOR.env.ie&&[i.selectionStart,i.selectionEnd];k=[i.scrollLeft,i.scrollTop]}if(this.state==CKEDITOR.TRISTATE_OFF){c.on("resize",e);m=c.getScrollPosition();for(d=a.container;d=d.getParent();)d.setCustomData("maximize_saved_styles",o(d)),d.setStyle("z-index",a.config.baseFloatZIndex-5);g.setCustomData("maximize_saved_styles",o(g,!0));h.setCustomData("maximize_saved_styles",o(h,!0)); +g={overflow:CKEDITOR.env.webkit?"":"hidden",width:0,height:0};b.getDocumentElement().setStyles(g);!CKEDITOR.env.gecko&&b.getDocumentElement().setStyle("position","fixed");(!CKEDITOR.env.gecko||!CKEDITOR.env.quirks)&&b.getBody().setStyles(g);CKEDITOR.env.ie?setTimeout(function(){c.$.scrollTo(0,0)},0):c.$.scrollTo(0,0);h.setStyle("position",CKEDITOR.env.gecko&&CKEDITOR.env.quirks?"fixed":"absolute");h.$.offsetLeft;h.setStyles({"z-index":a.config.baseFloatZIndex-5,left:"0px",top:"0px"});h.addClass("cke_maximized"); +e();g=h.getDocumentPosition();h.setStyles({left:-1*g.x+"px",top:-1*g.y+"px"});CKEDITOR.env.gecko&&r(a)}else if(this.state==CKEDITOR.TRISTATE_ON){c.removeListener("resize",e);for(var d=[g,h],n=0;n<d.length;n++)q(d[n],d[n].getCustomData("maximize_saved_styles")),d[n].removeCustomData("maximize_saved_styles");for(d=a.container;d=d.getParent();)q(d,d.getCustomData("maximize_saved_styles")),d.removeCustomData("maximize_saved_styles");CKEDITOR.env.ie?setTimeout(function(){c.$.scrollTo(m.x,m.y)},0):c.$.scrollTo(m.x, +m.y);h.removeClass("cke_maximized");CKEDITOR.env.webkit&&(h.setStyle("display","inline"),setTimeout(function(){h.setStyle("display","block")},0));a.fire("resize",{outerHeight:a.container.$.offsetHeight,contentsHeight:g.$.offsetHeight,outerWidth:a.container.$.offsetWidth})}this.toggleState();if(d=this.uiItems[0])g=this.state==CKEDITOR.TRISTATE_OFF?f.maximize.maximize:f.maximize.minimize,d=CKEDITOR.document.getById(d._.id),d.getChild(1).setHtml(g),d.setAttribute("title",g),d.setAttribute("href",'javascript:void("'+ +g+'");');"wysiwyg"==a.mode?j?(CKEDITOR.env.gecko&&r(a),a.getSelection().selectRanges(j),(i=a.getSelection().getStartElement())&&i.scrollIntoView(!0)):c.$.scrollTo(k.x,k.y):(j&&(i.selectionStart=j[0],i.selectionEnd=j[1]),i.scrollLeft=k[0],i.scrollTop=k[1]);j=k=null;l=this.state;a.fire("maximize",this.state)},canUndo:!1});a.ui.addButton&&a.ui.addButton("Maximize",{label:f.maximize.maximize,command:"maximize",toolbar:"tools,10"});a.on("mode",function(){var b=a.getCommand("maximize");b.setState(b.state== +CKEDITOR.TRISTATE_DISABLED?CKEDITOR.TRISTATE_DISABLED:l)},null,null,100)}}})})();CKEDITOR.plugins.add("menu",{requires:"floatpanel",beforeInit:function(g){for(var h=g.config.menu_groups.split(","),m=g._.menuGroups={},l=g._.menuItems={},a=0;a<h.length;a++)m[h[a]]=a+1;g.addMenuGroup=function(b,a){m[b]=a||100};g.addMenuItem=function(a,c){m[c.group]&&(l[a]=new CKEDITOR.menuItem(this,a,c))};g.addMenuItems=function(a){for(var c in a)this.addMenuItem(c,a[c])};g.getMenuItem=function(a){return l[a]};g.removeMenuItem=function(a){delete l[a]}}}); +(function(){function g(a){a.sort(function(a,c){return a.group<c.group?-1:a.group>c.group?1:a.order<c.order?-1:a.order>c.order?1:0})}var h='<span class="cke_menuitem"><a id="{id}" class="cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href="{href}" title="{title}" tabindex="-1"_cke_focus=1 hidefocus="true" role="{role}" aria-haspopup="{hasPopup}" aria-disabled="{disabled}" {ariaChecked}';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(h+=' onkeypress="return false;"');CKEDITOR.env.gecko&& +(h+=' onblur="this.style.cssText = this.style.cssText;"');var h=h+(' onmouseover="CKEDITOR.tools.callFunction({hoverFn},{index});" onmouseout="CKEDITOR.tools.callFunction({moveOutFn},{index});" '+(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+'="CKEDITOR.tools.callFunction({clickFn},{index}); return false;">'),m=CKEDITOR.addTemplate("menuItem",h+'<span class="cke_menubutton_inner"><span class="cke_menubutton_icon"><span class="cke_button_icon cke_button__{iconName}_icon" style="{iconStyle}"></span></span><span class="cke_menubutton_label">{label}</span>{arrowHtml}</span></a></span>'), +l=CKEDITOR.addTemplate("menuArrow",'<span class="cke_menuarrow"><span>{label}</span></span>');CKEDITOR.menu=CKEDITOR.tools.createClass({$:function(a,b){b=this._.definition=b||{};this.id=CKEDITOR.tools.getNextId();this.editor=a;this.items=[];this._.listeners=[];this._.level=b.level||1;var c=CKEDITOR.tools.extend({},b.panel,{css:[CKEDITOR.skin.getPath("editor")],level:this._.level-1,block:{}}),k=c.block.attributes=c.attributes||{};!k.role&&(k.role="menu");this._.panelDefinition=c},_:{onShow:function(){var a= +this.editor.getSelection(),b=a&&a.getStartElement(),c=this.editor.elementPath(),k=this._.listeners;this.removeAll();for(var e=0;e<k.length;e++){var j=k[e](b,a,c);if(j)for(var i in j){var f=this.editor.getMenuItem(i);if(f&&(!f.command||this.editor.getCommand(f.command).state))f.state=j[i],this.add(f)}}},onClick:function(a){this.hide();if(a.onClick)a.onClick();else a.command&&this.editor.execCommand(a.command)},onEscape:function(a){var b=this.parent;b?b._.panel.hideChild(1):27==a&&this.hide(1);return!1}, +onHide:function(){this.onHide&&this.onHide()},showSubMenu:function(a){var b=this._.subMenu,c=this.items[a];if(c=c.getItems&&c.getItems()){b?b.removeAll():(b=this._.subMenu=new CKEDITOR.menu(this.editor,CKEDITOR.tools.extend({},this._.definition,{level:this._.level+1},!0)),b.parent=this,b._.onClick=CKEDITOR.tools.bind(this._.onClick,this));for(var k in c){var e=this.editor.getMenuItem(k);e&&(e.state=c[k],b.add(e))}var j=this._.panel.getBlock(this.id).element.getDocument().getById(this.id+(""+a));setTimeout(function(){b.show(j, +2)},0)}else this._.panel.hideChild(1)}},proto:{add:function(a){a.order||(a.order=this.items.length);this.items.push(a)},removeAll:function(){this.items=[]},show:function(a,b,c,k){if(!this.parent&&(this._.onShow(),!this.items.length))return;var b=b||("rtl"==this.editor.lang.dir?2:1),e=this.items,j=this.editor,i=this._.panel,f=this._.element;if(!i){i=this._.panel=new CKEDITOR.ui.floatPanel(this.editor,CKEDITOR.document.getBody(),this._.panelDefinition,this._.level);i.onEscape=CKEDITOR.tools.bind(function(a){if(!1=== +this._.onEscape(a))return!1},this);i.onShow=function(){i._.panel.getHolderElement().getParent().addClass("cke").addClass("cke_reset_all")};i.onHide=CKEDITOR.tools.bind(function(){this._.onHide&&this._.onHide()},this);f=i.addBlock(this.id,this._.panelDefinition.block);f.autoSize=!0;var d=f.keys;d[40]="next";d[9]="next";d[38]="prev";d[CKEDITOR.SHIFT+9]="prev";d["rtl"==j.lang.dir?37:39]=CKEDITOR.env.ie?"mouseup":"click";d[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(d[13]="mouseup");f=this._.element= +f.element;d=f.getDocument();d.getBody().setStyle("overflow","hidden");d.getElementsByTag("html").getItem(0).setStyle("overflow","hidden");this._.itemOverFn=CKEDITOR.tools.addFunction(function(a){clearTimeout(this._.showSubTimeout);this._.showSubTimeout=CKEDITOR.tools.setTimeout(this._.showSubMenu,j.config.menu_subMenuDelay||400,this,[a])},this);this._.itemOutFn=CKEDITOR.tools.addFunction(function(){clearTimeout(this._.showSubTimeout)},this);this._.itemClickFn=CKEDITOR.tools.addFunction(function(a){var b= +this.items[a];if(b.state==CKEDITOR.TRISTATE_DISABLED)this.hide(1);else if(b.getItems)this._.showSubMenu(a);else this._.onClick(b)},this)}g(e);for(var d=j.elementPath(),d=['<div class="cke_menu'+(d&&d.direction()!=j.lang.dir?" cke_mixed_dir_content":"")+'" role="presentation">'],h=e.length,m=h&&e[0].group,l=0;l<h;l++){var n=e[l];m!=n.group&&(d.push('<div class="cke_menuseparator" role="separator"></div>'),m=n.group);n.render(this,l,d)}d.push("</div>");f.setHtml(d.join(""));CKEDITOR.ui.fire("ready", +this);this.parent?this.parent._.panel.showAsChild(i,this.id,a,b,c,k):i.showBlock(this.id,a,b,c,k);j.fire("menuShow",[i])},addListener:function(a){this._.listeners.push(a)},hide:function(a){this._.onHide&&this._.onHide();this._.panel&&this._.panel.hide(a)}}});CKEDITOR.menuItem=CKEDITOR.tools.createClass({$:function(a,b,c){CKEDITOR.tools.extend(this,c,{order:0,className:"cke_menubutton__"+b});this.group=a._.menuGroups[this.group];this.editor=a;this.name=b},proto:{render:function(a,b,c){var h=a.id+(""+ +b),e="undefined"==typeof this.state?CKEDITOR.TRISTATE_OFF:this.state,j="",i=e==CKEDITOR.TRISTATE_ON?"on":e==CKEDITOR.TRISTATE_DISABLED?"disabled":"off";this.role in{menuitemcheckbox:1,menuitemradio:1}&&(j=' aria-checked="'+(e==CKEDITOR.TRISTATE_ON?"true":"false")+'"');var f=this.getItems,d="&#"+("rtl"==this.editor.lang.dir?"9668":"9658")+";",g=this.name;this.icon&&!/\./.test(this.icon)&&(g=this.icon);a={id:h,name:this.name,iconName:g,label:this.label,cls:this.className||"",state:i,hasPopup:f?"true": +"false",disabled:e==CKEDITOR.TRISTATE_DISABLED,title:this.label,href:"javascript:void('"+(this.label||"").replace("'")+"')",hoverFn:a._.itemOverFn,moveOutFn:a._.itemOutFn,clickFn:a._.itemClickFn,index:b,iconStyle:CKEDITOR.skin.getIconStyle(g,"rtl"==this.editor.lang.dir,g==this.icon?null:this.icon,this.iconOffset),arrowHtml:f?l.output({label:d}):"",role:this.role?this.role:"menuitem",ariaChecked:j};m.output(a,c)}}})})();CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div";CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var d=function(c){var a=this._,b=a.menu;a.state!==CKEDITOR.TRISTATE_DISABLED&&(a.on&&b?b.hide():(a.previousState=a.state,b||(b=a.menu=new CKEDITOR.menu(c,{panel:{className:"cke_menu_panel",attributes:{"aria-label":c.lang.common.options}}}),b.onHide=CKEDITOR.tools.bind(function(){var b=this.command?c.getCommand(this.command).modes:this.modes;this.setState(!b||b[c.mode]?a.previousState:CKEDITOR.TRISTATE_DISABLED);a.on=0},this), +this.onMenu&&b.addListener(this.onMenu)),this.setState(CKEDITOR.TRISTATE_ON),a.on=1,setTimeout(function(){b.show(CKEDITOR.document.getById(a.id),4)},0)))};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(c){delete c.panel;this.base(c);this.hasArrow=!0;this.click=d},statics:{handler:{create:function(c){return new CKEDITOR.ui.menuButton(c)}}}})},beforeInit:function(d){d.ui.addHandler(CKEDITOR.UI_MENUBUTTON,CKEDITOR.ui.menuButton.handler)}}); +CKEDITOR.UI_MENUBUTTON="menubutton";(function(){function h(a,d,f){var b=CKEDITOR.cleanWord;b?f():(a=CKEDITOR.getUrl(a.config.pasteFromWordCleanupFile||d+"filter/default.js"),CKEDITOR.scriptLoader.load(a,f,null,!0));return!b}function i(a){a.data.type="html"}CKEDITOR.plugins.add("pastefromword",{requires:"clipboard",init:function(a){var d=0,f=this.path;a.addCommand("pastefromword",{canUndo:!1,async:!0,exec:function(a){var e=this;d=1;a.once("beforePaste",i);a.getClipboardData({title:a.lang.pastefromword.title},function(c){c&&a.fire("paste", +{type:"html",dataValue:c.dataValue,method:"paste",dataTransfer:CKEDITOR.plugins.clipboard.initPasteDataTransfer()});a.fire("afterCommandExec",{name:"pastefromword",command:e,returnValue:!!c})})}});a.ui.addButton&&a.ui.addButton("PasteFromWord",{label:a.lang.pastefromword.toolbar,command:"pastefromword",toolbar:"clipboard,50"});a.on("pasteState",function(b){a.getCommand("pastefromword").setState(b.data)});a.on("paste",function(b){var e=b.data,c=e.dataValue;if(c&&(d||/(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/.test(c))){e.dontFilter= +!0;var g=h(a,f,function(){if(g)a.fire("paste",e);else if(!a.config.pasteFromWordPromptCleanup||d||confirm(a.lang.pastefromword.confirmCleanup))e.dataValue=CKEDITOR.cleanWord(c,a);d=0});g&&b.cancel()}},null,null,3)}})})();(function(){var c={canUndo:!1,async:!0,exec:function(a){a.getClipboardData({title:a.lang.pastetext.title},function(b){b&&a.fire("paste",{type:"text",dataValue:b.dataValue,method:"paste",dataTransfer:CKEDITOR.plugins.clipboard.initPasteDataTransfer()});a.fire("afterCommandExec",{name:"pastetext",command:c,returnValue:!!b})})}};CKEDITOR.plugins.add("pastetext",{requires:"clipboard",init:function(a){a.addCommand("pastetext",c);a.ui.addButton&&a.ui.addButton("PasteText",{label:a.lang.pastetext.button, +command:"pastetext",toolbar:"clipboard,40"});if(a.config.forcePasteAsPlainText)a.on("beforePaste",function(a){"html"!=a.data.type&&(a.data.type="text")});a.on("pasteState",function(b){a.getCommand("pastetext").setState(b.data)})}})})();CKEDITOR.plugins.add("removeformat",{init:function(a){a.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);a.ui.addButton&&a.ui.addButton("RemoveFormat",{label:a.lang.removeformat.toolbar,command:"removeFormat",toolbar:"cleanup,10"})}}); +CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(a){for(var h=a._.removeFormatRegex||(a._.removeFormatRegex=RegExp("^(?:"+a.config.removeFormatTags.replace(/,/g,"|")+")$","i")),e=a._.removeAttributes||(a._.removeAttributes=a.config.removeFormatAttributes.split(",")),f=CKEDITOR.plugins.removeformat.filter,k=a.getSelection().getRanges(),l=k.createIterator(),m=function(a){return a.type==CKEDITOR.NODE_ELEMENT},c;c=l.getNextRange();){c.collapsed||c.enlarge(CKEDITOR.ENLARGE_ELEMENT); +var j=c.createBookmark(),b=j.startNode,d=j.endNode,i=function(b){for(var c=a.elementPath(b),e=c.elements,d=1,g;(g=e[d])&&!g.equals(c.block)&&!g.equals(c.blockLimit);d++)h.test(g.getName())&&f(a,g)&&b.breakParent(g)};i(b);if(d){i(d);for(b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);b&&!b.equals(d);)if(b.isReadOnly()){if(b.getPosition(d)&CKEDITOR.POSITION_CONTAINS)break;b=b.getNext(m)}else i=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),!("img"==b.getName()&&b.data("cke-realelement"))&&f(a,b)&&(h.test(b.getName())? +b.remove(1):(b.removeAttributes(e),a.fire("removeFormatCleanup",b))),b=i}c.moveToBookmark(j)}a.forceNextSelectionCheck();a.getSelection().selectRanges(k)}}},filter:function(a,h){for(var e=a._.removeFormatFilters||[],f=0;f<e.length;f++)if(!1===e[f](h))return!1;return!0}};CKEDITOR.editor.prototype.addRemoveFormatFilter=function(a){this._.removeFormatFilters||(this._.removeFormatFilters=[]);this._.removeFormatFilters.push(a)};CKEDITOR.config.removeFormatTags="b,big,cite,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var"; +CKEDITOR.config.removeFormatAttributes="class,style,lang,width,height,align,hspace,valign";CKEDITOR.plugins.add("resize",{init:function(b){var f,g,n,o;function c(d){var e=f,l=g,c=e+(d.data.$.screenX-n)*("rtl"==h?-1:1),d=l+(d.data.$.screenY-o);i&&(e=Math.max(a.resize_minWidth,Math.min(c,a.resize_maxWidth)));m&&(l=Math.max(a.resize_minHeight,Math.min(d,a.resize_maxHeight)));b.resize(i?e:null,l)}function j(){CKEDITOR.document.removeListener("mousemove",c);CKEDITOR.document.removeListener("mouseup",j);b.document&&(b.document.removeListener("mousemove",c),b.document.removeListener("mouseup", +j))}var a=b.config,q=b.ui.spaceId("resizer"),h=b.element?b.element.getDirection(1):"ltr";!a.resize_dir&&(a.resize_dir="vertical");void 0===a.resize_maxWidth&&(a.resize_maxWidth=3E3);void 0===a.resize_maxHeight&&(a.resize_maxHeight=3E3);void 0===a.resize_minWidth&&(a.resize_minWidth=750);void 0===a.resize_minHeight&&(a.resize_minHeight=250);if(!1!==a.resize_enabled){var k=null,i=("both"==a.resize_dir||"horizontal"==a.resize_dir)&&a.resize_minWidth!=a.resize_maxWidth,m=("both"==a.resize_dir||"vertical"== +a.resize_dir)&&a.resize_minHeight!=a.resize_maxHeight,p=CKEDITOR.tools.addFunction(function(d){k||(k=b.getResizable());f=k.$.offsetWidth||0;g=k.$.offsetHeight||0;n=d.screenX;o=d.screenY;a.resize_minWidth>f&&(a.resize_minWidth=f);a.resize_minHeight>g&&(a.resize_minHeight=g);CKEDITOR.document.on("mousemove",c);CKEDITOR.document.on("mouseup",j);b.document&&(b.document.on("mousemove",c),b.document.on("mouseup",j));d.preventDefault&&d.preventDefault()});b.on("destroy",function(){CKEDITOR.tools.removeFunction(p)}); +b.on("uiSpace",function(a){if("bottom"==a.data.space){var e="";i&&!m&&(e=" cke_resizer_horizontal");!i&&m&&(e=" cke_resizer_vertical");var c='<span id="'+q+'" class="cke_resizer'+e+" cke_resizer_"+h+'" title="'+CKEDITOR.tools.htmlEncode(b.lang.common.resize)+'" onmousedown="CKEDITOR.tools.callFunction('+p+', event)">'+("ltr"==h?"◢":"◣")+"</span>";"ltr"==h&&"ltr"==e?a.data.html+=c:a.data.html=c+a.data.html}},b,null,100);b.on("maximize",function(a){b.ui.space("resizer")[a.data==CKEDITOR.TRISTATE_ON? +"hide":"show"]()})}}});CKEDITOR.plugins.add("specialchar",{availableLangs:{af:1,ar:1,bg:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,en:1,"en-gb":1,eo:1,es:1,et:1,fa:1,fi:1,fr:1,"fr-ca":1,gl:1,he:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,nb:1,nl:1,no:1,pl:1,pt:1,"pt-br":1,ru:1,si:1,sk:1,sl:1,sq:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},requires:"dialog",init:function(a){var c=this;CKEDITOR.dialog.add("specialchar",this.path+"dialogs/specialchar.js");a.addCommand("specialchar",{exec:function(){var b=a.langCode,b= +c.availableLangs[b]?b:c.availableLangs[b.replace(/-.*/,"")]?b.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c.path+"dialogs/lang/"+b+".js"),function(){CKEDITOR.tools.extend(a.lang.specialchar,c.langEntries[b]);a.openDialog("specialchar")})},modes:{wysiwyg:1},canUndo:!1});a.ui.addButton&&a.ui.addButton("SpecialChar",{label:a.lang.specialchar.toolbar,command:"specialchar",toolbar:"insert,50"})}});CKEDITOR.config.specialChars="! &quot; # $ % &amp; ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 9 : ; &lt; = &gt; ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ &euro; &lsquo; &rsquo; &ldquo; &rdquo; &ndash; &mdash; &iexcl; &cent; &pound; &curren; &yen; &brvbar; &sect; &uml; &copy; &ordf; &laquo; &not; &reg; &macr; &deg; &sup2; &sup3; &acute; &micro; &para; &middot; &cedil; &sup1; &ordm; &raquo; &frac14; &frac12; &frac34; &iquest; &Agrave; &Aacute; &Acirc; &Atilde; &Auml; &Aring; &AElig; &Ccedil; &Egrave; &Eacute; &Ecirc; &Euml; &Igrave; &Iacute; &Icirc; &Iuml; &ETH; &Ntilde; &Ograve; &Oacute; &Ocirc; &Otilde; &Ouml; &times; &Oslash; &Ugrave; &Uacute; &Ucirc; &Uuml; &Yacute; &THORN; &szlig; &agrave; &aacute; &acirc; &atilde; &auml; &aring; &aelig; &ccedil; &egrave; &eacute; &ecirc; &euml; &igrave; &iacute; &icirc; &iuml; &eth; &ntilde; &ograve; &oacute; &ocirc; &otilde; &ouml; &divide; &oslash; &ugrave; &uacute; &ucirc; &uuml; &yacute; &thorn; &yuml; &OElig; &oelig; &#372; &#374 &#373 &#375; &sbquo; &#8219; &bdquo; &hellip; &trade; &#9658; &bull; &rarr; &rArr; &hArr; &diams; &asymp;".split(" ");(function(){CKEDITOR.plugins.add("stylescombo",{requires:"richcombo",init:function(c){var j=c.config,g=c.lang.stylescombo,f={},i=[],k=[];c.on("stylesSet",function(b){if(b=b.data.styles){for(var a,h,d,e=0,l=b.length;e<l;e++)if(a=b[e],!(c.blockless&&a.element in CKEDITOR.dtd.$block)&&(h=a.name,a=new CKEDITOR.style(a),!c.filter.customConfig||c.filter.check(a)))a._name=h,a._.enterMode=j.enterMode,a._.type=d=a.assignedTo||a.type,a._.weight=e+1E3*(d==CKEDITOR.STYLE_OBJECT?1:d==CKEDITOR.STYLE_BLOCK?2:3), +f[h]=a,i.push(a),k.push(a);i.sort(function(a,b){return a._.weight-b._.weight})}});c.ui.addRichCombo("Styles",{label:g.label,title:g.panelTitle,toolbar:"styles,10",allowedContent:k,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(j.contentsCss),multiSelect:!0,attributes:{"aria-label":g.panelTitle}},init:function(){var b,a,c,d,e,f;e=0;for(f=i.length;e<f;e++)b=i[e],a=b._name,d=b._.type,d!=c&&(this.startGroup(g["panelTitle"+d]),c=d),this.add(a,b.type==CKEDITOR.STYLE_OBJECT?a:b.buildPreview(),a);this.commit()}, +onClick:function(b){c.focus();c.fire("saveSnapshot");var b=f[b],a=c.elementPath();c[b.checkActive(a,c)?"removeStyle":"applyStyle"](b);c.fire("saveSnapshot")},onRender:function(){c.on("selectionChange",function(b){for(var a=this.getValue(),b=b.data.path.elements,h=0,d=b.length,e;h<d;h++){e=b[h];for(var g in f)if(f[g].checkElementRemovable(e,!0,c)){g!=a&&this.setValue(g);return}}this.setValue("")},this)},onOpen:function(){var b=c.getSelection().getSelectedElement(),b=c.elementPath(b),a=[0,0,0,0];this.showAll(); +this.unmarkAll();for(var h in f){var d=f[h],e=d._.type;d.checkApplicable(b,c,c.activeFilter)?a[e]++:this.hideItem(h);d.checkActive(b,c)&&this.mark(h)}a[CKEDITOR.STYLE_BLOCK]||this.hideGroup(g["panelTitle"+CKEDITOR.STYLE_BLOCK]);a[CKEDITOR.STYLE_INLINE]||this.hideGroup(g["panelTitle"+CKEDITOR.STYLE_INLINE]);a[CKEDITOR.STYLE_OBJECT]||this.hideGroup(g["panelTitle"+CKEDITOR.STYLE_OBJECT])},refresh:function(){var b=c.elementPath();if(b){for(var a in f)if(f[a].checkApplicable(b,c,c.activeFilter))return; +this.setState(CKEDITOR.TRISTATE_DISABLED)}},reset:function(){f={};i=[]}})}})})();CKEDITOR.plugins.add("table",{requires:"dialog",init:function(a){function e(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,f){this.setState(f.contains("table",1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}if(!a.blockless){var c=a.lang.table;a.addCommand("table",new CKEDITOR.dialogCommand("table",{context:"table",allowedContent:"table{width,height}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];"+(a.plugins.dialogadvtab? +"table"+a.plugins.dialogadvtab.allowedContent():""),requiredContent:"table",contentTransformations:[["table{width}: sizeToStyle","table[width]: sizeToAttribute"]]}));a.addCommand("tableProperties",new CKEDITOR.dialogCommand("tableProperties",e()));a.addCommand("tableDelete",e({exec:function(a){var b=a.elementPath().contains("table",1);if(b){var d=b.getParent(),c=a.editable();1==d.getChildCount()&&(!d.is("td","th")&&!d.equals(c))&&(b=d);a=a.createRange();a.moveToPosition(b,CKEDITOR.POSITION_BEFORE_START); +b.remove();a.select()}}}));a.ui.addButton&&a.ui.addButton("Table",{label:c.toolbar,command:"table",toolbar:"insert,30"});CKEDITOR.dialog.add("table",this.path+"dialogs/table.js");CKEDITOR.dialog.add("tableProperties",this.path+"dialogs/table.js");a.addMenuItems&&a.addMenuItems({table:{label:c.menu,command:"tableProperties",group:"table",order:5},tabledelete:{label:c.deleteTable,command:"tableDelete",group:"table",order:1}});a.on("doubleclick",function(a){a.data.element.is("table")&&(a.data.dialog= +"tableProperties")});a.contextMenu&&a.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}});CKEDITOR.plugins.add("contextmenu",{requires:"menu",onLoad:function(){CKEDITOR.plugins.contextMenu=CKEDITOR.tools.createClass({base:CKEDITOR.menu,$:function(a){this.base.call(this,a,{panel:{className:"cke_menu_panel",attributes:{"aria-label":a.lang.contextmenu.options}}})},proto:{addTarget:function(a,e){a.on("contextmenu",function(a){var a=a.data,c=CKEDITOR.env.webkit?f:CKEDITOR.env.mac?a.$.metaKey:a.$.ctrlKey;if(!e||!c){a.preventDefault();if(CKEDITOR.env.mac&&CKEDITOR.env.webkit){var c=this.editor, +b=(new CKEDITOR.dom.elementPath(a.getTarget(),c.editable())).contains(function(a){return a.hasAttribute("contenteditable")},!0);b&&"false"==b.getAttribute("contenteditable")&&c.getSelection().fake(b)}var b=a.getTarget().getDocument(),d=a.getTarget().getDocument().getDocumentElement(),c=!b.equals(CKEDITOR.document),b=b.getWindow().getScrollPosition(),g=c?a.$.clientX:a.$.pageX||b.x+a.$.clientX,h=c?a.$.clientY:a.$.pageY||b.y+a.$.clientY;CKEDITOR.tools.setTimeout(function(){this.open(d,null,g,h)},CKEDITOR.env.ie? +200:0,this)}},this);if(CKEDITOR.env.webkit){var f,d=function(){f=0};a.on("keydown",function(a){f=CKEDITOR.env.mac?a.data.$.metaKey:a.data.$.ctrlKey});a.on("keyup",d);a.on("contextmenu",d)}},open:function(a,e,f,d){this.editor.focus();a=a||CKEDITOR.document.getDocumentElement();this.editor.selectionChange(1);this.show(a,e,f,d)}}})},beforeInit:function(a){var e=a.contextMenu=new CKEDITOR.plugins.contextMenu(a);a.on("contentDom",function(){e.addTarget(a.editable(),!1!==a.config.browserContextMenuOnCtrl)}); +a.addCommand("contextMenu",{exec:function(){a.contextMenu.open(a.document.getBody())}});a.setKeystroke(CKEDITOR.SHIFT+121,"contextMenu");a.setKeystroke(CKEDITOR.CTRL+CKEDITOR.SHIFT+121,"contextMenu")}});(function(){function p(e){function d(a){!(0<b.length)&&(a.type==CKEDITOR.NODE_ELEMENT&&y.test(a.getName())&&!a.getCustomData("selected_cell"))&&(CKEDITOR.dom.element.setMarker(c,a,"selected_cell",!0),b.push(a))}for(var e=e.getRanges(),b=[],c={},a=0;a<e.length;a++){var f=e[a];if(f.collapsed)f=f.getCommonAncestor(),(f=f.getAscendant("td",!0)||f.getAscendant("th",!0))&&b.push(f);else{var f=new CKEDITOR.dom.walker(f),g;for(f.guard=d;g=f.next();)if(g.type!=CKEDITOR.NODE_ELEMENT||!g.is(CKEDITOR.dtd.table))if((g= +g.getAscendant("td",!0)||g.getAscendant("th",!0))&&!g.getCustomData("selected_cell"))CKEDITOR.dom.element.setMarker(c,g,"selected_cell",!0),b.push(g)}}CKEDITOR.dom.element.clearAllMarkers(c);return b}function o(e,d){for(var b=p(e),c=b[0],a=c.getAscendant("table"),c=c.getDocument(),f=b[0].getParent(),g=f.$.rowIndex,b=b[b.length-1],h=b.getParent().$.rowIndex+b.$.rowSpan-1,b=new CKEDITOR.dom.element(a.$.rows[h]),g=d?g:h,f=d?f:b,b=CKEDITOR.tools.buildTableMap(a),a=b[g],g=d?b[g-1]:b[g+1],b=b[0].length, +c=c.createElement("tr"),h=0;a[h]&&h<b;h++){var i;1<a[h].rowSpan&&g&&a[h]==g[h]?(i=a[h],i.rowSpan+=1):(i=(new CKEDITOR.dom.element(a[h])).clone(),i.removeAttribute("rowSpan"),i.appendBogus(),c.append(i),i=i.$);h+=i.colSpan-1}d?c.insertBefore(f):c.insertAfter(f)}function q(e){if(e instanceof CKEDITOR.dom.selection){for(var d=p(e),b=d[0].getAscendant("table"),c=CKEDITOR.tools.buildTableMap(b),e=d[0].getParent().$.rowIndex,d=d[d.length-1],a=d.getParent().$.rowIndex+d.$.rowSpan-1,d=[],f=e;f<=a;f++){for(var g= +c[f],h=new CKEDITOR.dom.element(b.$.rows[f]),i=0;i<g.length;i++){var j=new CKEDITOR.dom.element(g[i]),l=j.getParent().$.rowIndex;1==j.$.rowSpan?j.remove():(j.$.rowSpan-=1,l==f&&(l=c[f+1],l[i-1]?j.insertAfter(new CKEDITOR.dom.element(l[i-1])):(new CKEDITOR.dom.element(b.$.rows[f+1])).append(j,1)));i+=j.$.colSpan-1}d.push(h)}c=b.$.rows;b=new CKEDITOR.dom.element(c[a+1]||(0<e?c[e-1]:null)||b.$.parentNode);for(f=d.length;0<=f;f--)q(d[f]);return b}e instanceof CKEDITOR.dom.element&&(b=e.getAscendant("table"), +1==b.$.rows.length?b.remove():e.remove());return null}function r(e,d){for(var b=d?Infinity:0,c=0;c<e.length;c++){var a;a=e[c];for(var f=d,g=a.getParent().$.cells,h=0,i=0;i<g.length;i++){var j=g[i],h=h+(f?1:j.colSpan);if(j==a.$)break}a=h-1;if(d?a<b:a>b)b=a}return b}function k(e,d){for(var b=p(e),c=b[0].getAscendant("table"),a=r(b,1),b=r(b),a=d?a:b,f=CKEDITOR.tools.buildTableMap(c),c=[],b=[],g=f.length,h=0;h<g;h++)c.push(f[h][a]),b.push(d?f[h][a-1]:f[h][a+1]);for(h=0;h<g;h++)c[h]&&(1<c[h].colSpan&& +b[h]==c[h]?(a=c[h],a.colSpan+=1):(a=(new CKEDITOR.dom.element(c[h])).clone(),a.removeAttribute("colSpan"),a.appendBogus(),a[d?"insertBefore":"insertAfter"].call(a,new CKEDITOR.dom.element(c[h])),a=a.$),h+=a.rowSpan-1)}function u(e,d){var b=e.getStartElement();if(b=b.getAscendant("td",1)||b.getAscendant("th",1)){var c=b.clone();c.appendBogus();d?c.insertBefore(b):c.insertAfter(b)}}function t(e){if(e instanceof CKEDITOR.dom.selection){var e=p(e),d=e[0]&&e[0].getAscendant("table"),b;a:{var c=0;b=e.length- +1;for(var a={},f,g;f=e[c++];)CKEDITOR.dom.element.setMarker(a,f,"delete_cell",!0);for(c=0;f=e[c++];)if((g=f.getPrevious())&&!g.getCustomData("delete_cell")||(g=f.getNext())&&!g.getCustomData("delete_cell")){CKEDITOR.dom.element.clearAllMarkers(a);b=g;break a}CKEDITOR.dom.element.clearAllMarkers(a);g=e[0].getParent();(g=g.getPrevious())?b=g.getLast():(g=e[b].getParent(),b=(g=g.getNext())?g.getChild(0):null)}for(g=e.length-1;0<=g;g--)t(e[g]);b?m(b,!0):d&&d.remove()}else e instanceof CKEDITOR.dom.element&& +(d=e.getParent(),1==d.getChildCount()?d.remove():e.remove())}function m(e,d){var b=e.getDocument(),c=CKEDITOR.document;CKEDITOR.env.ie&&10==CKEDITOR.env.version&&(c.focus(),b.focus());b=new CKEDITOR.dom.range(b);if(!b["moveToElementEdit"+(d?"End":"Start")](e))b.selectNodeContents(e),b.collapse(d?!1:!0);b.select(!0)}function v(e,d,b){e=e[d];if("undefined"==typeof b)return e;for(d=0;e&&d<e.length;d++){if(b.is&&e[d]==b.$)return d;if(d==b)return new CKEDITOR.dom.element(e[d])}return b.is?-1:null}function s(e, +d,b){var c=p(e),a;if((d?1!=c.length:2>c.length)||(a=e.getCommonAncestor())&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))return!1;var f,e=c[0];a=e.getAscendant("table");var g=CKEDITOR.tools.buildTableMap(a),h=g.length,i=g[0].length,j=e.getParent().$.rowIndex,l=v(g,j,e);if(d){var n;try{var m=parseInt(e.getAttribute("rowspan"),10)||1;f=parseInt(e.getAttribute("colspan"),10)||1;n=g["up"==d?j-m:"down"==d?j+m:j]["left"==d?l-f:"right"==d?l+f:l]}catch(z){return!1}if(!n||e.$==n)return!1;c["up"==d||"left"== +d?"unshift":"push"](new CKEDITOR.dom.element(n))}for(var d=e.getDocument(),o=j,m=n=0,q=!b&&new CKEDITOR.dom.documentFragment(d),s=0,d=0;d<c.length;d++){f=c[d];var k=f.getParent(),t=f.getFirst(),r=f.$.colSpan,u=f.$.rowSpan,k=k.$.rowIndex,w=v(g,k,f),s=s+r*u,m=Math.max(m,w-l+r);n=Math.max(n,k-j+u);if(!b){r=f;(u=r.getBogus())&&u.remove();r.trim();if(f.getChildren().count()){if(k!=o&&t&&(!t.isBlockBoundary||!t.isBlockBoundary({br:1})))(o=q.getLast(CKEDITOR.dom.walker.whitespaces(!0)))&&(!o.is||!o.is("br"))&& +q.append("br");f.moveChildren(q)}d?f.remove():f.setHtml("")}o=k}if(b)return n*m==s;q.moveChildren(e);e.appendBogus();m>=i?e.removeAttribute("rowSpan"):e.$.rowSpan=n;n>=h?e.removeAttribute("colSpan"):e.$.colSpan=m;b=new CKEDITOR.dom.nodeList(a.$.rows);c=b.count();for(d=c-1;0<=d;d--)a=b.getItem(d),a.$.cells.length||(a.remove(),c++);return e}function w(e,d){var b=p(e);if(1<b.length)return!1;if(d)return!0;var b=b[0],c=b.getParent(),a=c.getAscendant("table"),f=CKEDITOR.tools.buildTableMap(a),g=c.$.rowIndex, +h=v(f,g,b),i=b.$.rowSpan,j;if(1<i){j=Math.ceil(i/2);for(var i=Math.floor(i/2),c=g+j,a=new CKEDITOR.dom.element(a.$.rows[c]),f=v(f,c),l,c=b.clone(),g=0;g<f.length;g++)if(l=f[g],l.parentNode==a.$&&g>h){c.insertBefore(new CKEDITOR.dom.element(l));break}else l=null;l||a.append(c)}else{i=j=1;a=c.clone();a.insertAfter(c);a.append(c=b.clone());l=v(f,g);for(h=0;h<l.length;h++)l[h].rowSpan++}c.appendBogus();b.$.rowSpan=j;c.$.rowSpan=i;1==j&&b.removeAttribute("rowSpan");1==i&&c.removeAttribute("rowSpan");return c} +function x(e,d){var b=p(e);if(1<b.length)return!1;if(d)return!0;var b=b[0],c=b.getParent(),a=c.getAscendant("table"),a=CKEDITOR.tools.buildTableMap(a),f=v(a,c.$.rowIndex,b),g=b.$.colSpan;if(1<g)c=Math.ceil(g/2),g=Math.floor(g/2);else{for(var g=c=1,h=[],i=0;i<a.length;i++){var j=a[i];h.push(j[f]);1<j[f].rowSpan&&(i+=j[f].rowSpan-1)}for(a=0;a<h.length;a++)h[a].colSpan++}a=b.clone();a.insertAfter(b);a.appendBogus();b.$.colSpan=c;a.$.colSpan=g;1==c&&b.removeAttribute("colSpan");1==g&&a.removeAttribute("colSpan"); +return a}var y=/^(?:td|th)$/;CKEDITOR.plugins.tabletools={requires:"table,dialog,contextmenu",init:function(e){function d(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains({td:1,th:1},1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}function b(a,b){var c=e.addCommand(a,b);e.addFeature(c)}var c=e.lang.table;b("cellProperties",new CKEDITOR.dialogCommand("cellProperties",d({allowedContent:"td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]", +requiredContent:"table"})));CKEDITOR.dialog.add("cellProperties",this.path+"dialogs/tableCell.js");b("rowDelete",d({requiredContent:"table",exec:function(a){a=a.getSelection();m(q(a))}}));b("rowInsertBefore",d({requiredContent:"table",exec:function(a){a=a.getSelection();o(a,!0)}}));b("rowInsertAfter",d({requiredContent:"table",exec:function(a){a=a.getSelection();o(a)}}));b("columnDelete",d({requiredContent:"table",exec:function(a){for(var a=a.getSelection(),a=p(a),b=a[0],c=a[a.length-1],a=b.getAscendant("table"), +d=CKEDITOR.tools.buildTableMap(a),e,j,l=[],n=0,o=d.length;n<o;n++)for(var k=0,q=d[n].length;k<q;k++)d[n][k]==b.$&&(e=k),d[n][k]==c.$&&(j=k);for(n=e;n<=j;n++)for(k=0;k<d.length;k++)c=d[k],b=new CKEDITOR.dom.element(a.$.rows[k]),c=new CKEDITOR.dom.element(c[n]),c.$&&(1==c.$.colSpan?c.remove():c.$.colSpan-=1,k+=c.$.rowSpan-1,b.$.cells.length||l.push(b));j=a.$.rows[0]&&a.$.rows[0].cells;e=new CKEDITOR.dom.element(j[e]||(e?j[e-1]:a.$.parentNode));l.length==o&&a.remove();e&&m(e,!0)}}));b("columnInsertBefore", +d({requiredContent:"table",exec:function(a){a=a.getSelection();k(a,!0)}}));b("columnInsertAfter",d({requiredContent:"table",exec:function(a){a=a.getSelection();k(a)}}));b("cellDelete",d({requiredContent:"table",exec:function(a){a=a.getSelection();t(a)}}));b("cellMerge",d({allowedContent:"td[colspan,rowspan]",requiredContent:"td[colspan,rowspan]",exec:function(a){m(s(a.getSelection()),!0)}}));b("cellMergeRight",d({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){m(s(a.getSelection(), +"right"),!0)}}));b("cellMergeDown",d({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){m(s(a.getSelection(),"down"),!0)}}));b("cellVerticalSplit",d({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){m(x(a.getSelection()))}}));b("cellHorizontalSplit",d({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){m(w(a.getSelection()))}}));b("cellInsertBefore",d({requiredContent:"table",exec:function(a){a=a.getSelection();u(a,!0)}})); +b("cellInsertAfter",d({requiredContent:"table",exec:function(a){a=a.getSelection();u(a)}}));e.addMenuItems&&e.addMenuItems({tablecell:{label:c.cell.menu,group:"tablecell",order:1,getItems:function(){var a=e.getSelection(),b=p(a);return{tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,tablecell_insertAfter:CKEDITOR.TRISTATE_OFF,tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_merge:s(a,null,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_right:s(a,"right",!0)?CKEDITOR.TRISTATE_OFF: +CKEDITOR.TRISTATE_DISABLED,tablecell_merge_down:s(a,"down",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_vertical:x(a,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_horizontal:w(a,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_properties:0<b.length?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED}}},tablecell_insertBefore:{label:c.cell.insertBefore,group:"tablecell",command:"cellInsertBefore",order:5},tablecell_insertAfter:{label:c.cell.insertAfter, +group:"tablecell",command:"cellInsertAfter",order:10},tablecell_delete:{label:c.cell.deleteCell,group:"tablecell",command:"cellDelete",order:15},tablecell_merge:{label:c.cell.merge,group:"tablecell",command:"cellMerge",order:16},tablecell_merge_right:{label:c.cell.mergeRight,group:"tablecell",command:"cellMergeRight",order:17},tablecell_merge_down:{label:c.cell.mergeDown,group:"tablecell",command:"cellMergeDown",order:18},tablecell_split_horizontal:{label:c.cell.splitHorizontal,group:"tablecell", +command:"cellHorizontalSplit",order:19},tablecell_split_vertical:{label:c.cell.splitVertical,group:"tablecell",command:"cellVerticalSplit",order:20},tablecell_properties:{label:c.cell.title,group:"tablecellproperties",command:"cellProperties",order:21},tablerow:{label:c.row.menu,group:"tablerow",order:1,getItems:function(){return{tablerow_insertBefore:CKEDITOR.TRISTATE_OFF,tablerow_insertAfter:CKEDITOR.TRISTATE_OFF,tablerow_delete:CKEDITOR.TRISTATE_OFF}}},tablerow_insertBefore:{label:c.row.insertBefore, +group:"tablerow",command:"rowInsertBefore",order:5},tablerow_insertAfter:{label:c.row.insertAfter,group:"tablerow",command:"rowInsertAfter",order:10},tablerow_delete:{label:c.row.deleteRow,group:"tablerow",command:"rowDelete",order:15},tablecolumn:{label:c.column.menu,group:"tablecolumn",order:1,getItems:function(){return{tablecolumn_insertBefore:CKEDITOR.TRISTATE_OFF,tablecolumn_insertAfter:CKEDITOR.TRISTATE_OFF,tablecolumn_delete:CKEDITOR.TRISTATE_OFF}}},tablecolumn_insertBefore:{label:c.column.insertBefore, +group:"tablecolumn",command:"columnInsertBefore",order:5},tablecolumn_insertAfter:{label:c.column.insertAfter,group:"tablecolumn",command:"columnInsertAfter",order:10},tablecolumn_delete:{label:c.column.deleteColumn,group:"tablecolumn",command:"columnDelete",order:15}});e.contextMenu&&e.contextMenu.addListener(function(a,b,c){return(a=c.contains({td:1,th:1},1))&&!a.isReadOnly()?{tablecell:CKEDITOR.TRISTATE_OFF,tablerow:CKEDITOR.TRISTATE_OFF,tablecolumn:CKEDITOR.TRISTATE_OFF}:null})},getSelectedCells:p}; +CKEDITOR.plugins.add("tabletools",CKEDITOR.plugins.tabletools)})();CKEDITOR.tools.buildTableMap=function(p){for(var p=p.$.rows,o=-1,q=[],r=0;r<p.length;r++){o++;!q[o]&&(q[o]=[]);for(var k=-1,u=0;u<p[r].cells.length;u++){var t=p[r].cells[u];for(k++;q[o][k];)k++;for(var m=isNaN(t.colSpan)?1:t.colSpan,t=isNaN(t.rowSpan)?1:t.rowSpan,v=0;v<t;v++){q[o+v]||(q[o+v]=[]);for(var s=0;s<m;s++)q[o+v][k+s]=p[r].cells[u]}k+=m-1}}return q};(function(){function w(a){function d(){for(var b=g(),e=CKEDITOR.tools.clone(a.config.toolbarGroups)||n(a),f=0;f<e.length;f++){var k=e[f];if("/"!=k){"string"==typeof k&&(k=e[f]={name:k});var i,d=k.groups;if(d)for(var h=0;h<d.length;h++)i=d[h],(i=b[i])&&c(k,i);(i=b[k.name])&&c(k,i)}}return e}function g(){var b={},c,f,e;for(c in a.ui.items)f=a.ui.items[c],e=f.toolbar||"others",e=e.split(","),f=e[0],e=parseInt(e[1]||-1,10),b[f]||(b[f]=[]),b[f].push({name:c,order:e});for(f in b)b[f]=b[f].sort(function(b, +a){return b.order==a.order?0:0>a.order?-1:0>b.order?1:b.order<a.order?-1:1});return b}function c(c,e){if(e.length){c.items?c.items.push(a.ui.create("-")):c.items=[];for(var f;f=e.shift();)if(f="string"==typeof f?f:f.name,!b||-1==CKEDITOR.tools.indexOf(b,f))(f=a.ui.create(f))&&a.addFeature(f)&&c.items.push(f)}}function h(b){var a=[],e,d,h;for(e=0;e<b.length;++e)d=b[e],h={},"/"==d?a.push(d):CKEDITOR.tools.isArray(d)?(c(h,CKEDITOR.tools.clone(d)),a.push(h)):d.items&&(c(h,CKEDITOR.tools.clone(d.items)), +h.name=d.name,a.push(h));return a}var b=a.config.removeButtons,b=b&&b.split(","),e=a.config.toolbar;"string"==typeof e&&(e=a.config["toolbar_"+e]);return a.toolbar=e?h(e):d()}function n(a){return a._.toolbarGroups||(a._.toolbarGroups=[{name:"document",groups:["mode","document","doctools"]},{name:"clipboard",groups:["clipboard","undo"]},{name:"editing",groups:["find","selection","spellchecker"]},{name:"forms"},"/",{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"paragraph",groups:["list", +"indent","blocks","align","bidi"]},{name:"links"},{name:"insert"},"/",{name:"styles"},{name:"colors"},{name:"tools"},{name:"others"},{name:"about"}])}var u=function(){this.toolbars=[];this.focusCommandExecuted=!1};u.prototype.focus=function(){for(var a=0,d;d=this.toolbars[a++];)for(var g=0,c;c=d.items[g++];)if(c.focus){c.focus();return}};var x={modes:{wysiwyg:1,source:1},readOnly:1,exec:function(a){a.toolbox&&(a.toolbox.focusCommandExecuted=!0,CKEDITOR.env.ie||CKEDITOR.env.air?setTimeout(function(){a.toolbox.focus()}, +100):a.toolbox.focus())}};CKEDITOR.plugins.add("toolbar",{requires:"button",init:function(a){var d,g=function(c,h){var b,e="rtl"==a.lang.dir,j=a.config.toolbarGroupCycling,o=e?37:39,e=e?39:37,j=void 0===j||j;switch(h){case 9:case CKEDITOR.SHIFT+9:for(;!b||!b.items.length;)if(b=9==h?(b?b.next:c.toolbar.next)||a.toolbox.toolbars[0]:(b?b.previous:c.toolbar.previous)||a.toolbox.toolbars[a.toolbox.toolbars.length-1],b.items.length)for(c=b.items[d?b.items.length-1:0];c&&!c.focus;)(c=d?c.previous:c.next)|| +(b=0);c&&c.focus();return!1;case o:b=c;do b=b.next,!b&&j&&(b=c.toolbar.items[0]);while(b&&!b.focus);b?b.focus():g(c,9);return!1;case 40:return c.button&&c.button.hasArrow?(a.once("panelShow",function(b){b.data._.panel._.currentBlock.onKeyDown(40)}),c.execute()):g(c,40==h?o:e),!1;case e:case 38:b=c;do b=b.previous,!b&&j&&(b=c.toolbar.items[c.toolbar.items.length-1]);while(b&&!b.focus);b?b.focus():(d=1,g(c,CKEDITOR.SHIFT+9),d=0);return!1;case 27:return a.focus(),!1;case 13:case 32:return c.execute(), +!1}return!0};a.on("uiSpace",function(c){if(c.data.space==a.config.toolbarLocation){c.removeListener();a.toolbox=new u;var d=CKEDITOR.tools.getNextId(),b=['<span id="',d,'" class="cke_voice_label">',a.lang.toolbar.toolbars,"</span>",'<span id="'+a.ui.spaceId("toolbox")+'" class="cke_toolbox" role="group" aria-labelledby="',d,'" onmousedown="return false;">'],d=!1!==a.config.toolbarStartupExpanded,e,j;a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&b.push('<span class="cke_toolbox_main"'+ +(d?">":' style="display:none">'));for(var o=a.toolbox.toolbars,f=w(a),k=0;k<f.length;k++){var i,l=0,r,m=f[k],s;if(m)if(e&&(b.push("</span>"),j=e=0),"/"===m)b.push('<span class="cke_toolbar_break"></span>');else{s=m.items||m;for(var t=0;t<s.length;t++){var p=s[t],n;if(p)if(p.type==CKEDITOR.UI_SEPARATOR)j=e&&p;else{n=!1!==p.canGroup;if(!l){i=CKEDITOR.tools.getNextId();l={id:i,items:[]};r=m.name&&(a.lang.toolbar.toolbarGroups[m.name]||m.name);b.push('<span id="',i,'" class="cke_toolbar"',r?' aria-labelledby="'+ +i+'_label"':"",' role="toolbar">');r&&b.push('<span id="',i,'_label" class="cke_voice_label">',r,"</span>");b.push('<span class="cke_toolbar_start"></span>');var q=o.push(l)-1;0<q&&(l.previous=o[q-1],l.previous.next=l)}n?e||(b.push('<span class="cke_toolgroup" role="presentation">'),e=1):e&&(b.push("</span>"),e=0);i=function(c){c=c.render(a,b);q=l.items.push(c)-1;if(q>0){c.previous=l.items[q-1];c.previous.next=c}c.toolbar=l;c.onkey=g;c.onfocus=function(){a.toolbox.focusCommandExecuted||a.focus()}}; +j&&(i(j),j=0);i(p)}}e&&(b.push("</span>"),j=e=0);l&&b.push('<span class="cke_toolbar_end"></span></span>')}}a.config.toolbarCanCollapse&&b.push("</span>");if(a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var v=CKEDITOR.tools.addFunction(function(){a.execCommand("toolbarCollapse")});a.on("destroy",function(){CKEDITOR.tools.removeFunction(v)});a.addCommand("toolbarCollapse",{readOnly:1,exec:function(b){var a=b.ui.space("toolbar_collapser"),c=a.getPrevious(),e=b.ui.space("contents"), +d=c.getParent(),f=parseInt(e.$.style.height,10),h=d.$.offsetHeight,g=a.hasClass("cke_toolbox_collapser_min");g?(c.show(),a.removeClass("cke_toolbox_collapser_min"),a.setAttribute("title",b.lang.toolbar.toolbarCollapse)):(c.hide(),a.addClass("cke_toolbox_collapser_min"),a.setAttribute("title",b.lang.toolbar.toolbarExpand));a.getFirst().setText(g?"▲":"◀");e.setStyle("height",f-(d.$.offsetHeight-h)+"px");b.fire("resize",{outerHeight:b.container.$.offsetHeight,contentsHeight:e.$.offsetHeight,outerWidth:b.container.$.offsetWidth})}, +modes:{wysiwyg:1,source:1}});a.setKeystroke(CKEDITOR.ALT+(CKEDITOR.env.ie||CKEDITOR.env.webkit?189:109),"toolbarCollapse");b.push('<a title="'+(d?a.lang.toolbar.toolbarCollapse:a.lang.toolbar.toolbarExpand)+'" id="'+a.ui.spaceId("toolbar_collapser")+'" tabIndex="-1" class="cke_toolbox_collapser');d||b.push(" cke_toolbox_collapser_min");b.push('" onclick="CKEDITOR.tools.callFunction('+v+')">','<span class="cke_arrow">&#9650;</span>',"</a>")}b.push("</span>");c.data.html+=b.join("")}});a.on("destroy", +function(){if(this.toolbox){var a,d=0,b,e,g;for(a=this.toolbox.toolbars;d<a.length;d++){e=a[d].items;for(b=0;b<e.length;b++)g=e[b],g.clickFn&&CKEDITOR.tools.removeFunction(g.clickFn),g.keyDownFn&&CKEDITOR.tools.removeFunction(g.keyDownFn)}}});a.on("uiReady",function(){var c=a.ui.space("toolbox");c&&a.focusManager.add(c,1)});a.addCommand("toolbarFocus",x);a.setKeystroke(CKEDITOR.ALT+121,"toolbarFocus");a.ui.add("-",CKEDITOR.UI_SEPARATOR,{});a.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(a, +d){d.push('<span class="cke_toolbar_separator" role="separator"></span>');return{}}}}})}});CKEDITOR.ui.prototype.addToolbarGroup=function(a,d,g){var c=n(this.editor),h=0===d,b={name:a};if(g){if(g=CKEDITOR.tools.search(c,function(a){return a.name==g})){!g.groups&&(g.groups=[]);if(d&&(d=CKEDITOR.tools.indexOf(g.groups,d),0<=d)){g.groups.splice(d+1,0,a);return}h?g.groups.splice(0,0,a):g.groups.push(a);return}d=null}d&&(d=CKEDITOR.tools.indexOf(c,function(a){return a.name==d}));h?c.splice(0,0,a):"number"== +typeof d?c.splice(d+1,0,b):c.push(a)}})();CKEDITOR.UI_SEPARATOR="separator";CKEDITOR.config.toolbarLocation="top";(function(){var g=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],l={8:1,46:1};CKEDITOR.plugins.add("undo",{init:function(a){function b(a){d.enabled&&!1!==a.data.command.canUndo&&d.save()}function c(){d.enabled=a.readOnly?!1:"wysiwyg"==a.mode;d.onChange()}var d=a.undoManager=new e(a),j=d.editingHandler=new i(d),f=a.addCommand("undo",{exec:function(){d.undo()&&(a.selectionChange(),this.fire("afterUndo"))},startDisabled:!0,canUndo:!1}),h=a.addCommand("redo",{exec:function(){d.redo()&& +(a.selectionChange(),this.fire("afterRedo"))},startDisabled:!0,canUndo:!1});a.setKeystroke([[g[0],"undo"],[g[1],"redo"],[g[2],"redo"]]);d.onChange=function(){f.setState(d.undoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);h.setState(d.redoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)};a.on("beforeCommandExec",b);a.on("afterCommandExec",b);a.on("saveSnapshot",function(a){d.save(a.data&&a.data.contentOnly)});a.on("contentDom",j.attachListeners,j);a.on("instanceReady",function(){a.fire("saveSnapshot")}); +a.on("beforeModeUnload",function(){"wysiwyg"==a.mode&&d.save(!0)});a.on("mode",c);a.on("readOnly",c);a.ui.addButton&&(a.ui.addButton("Undo",{label:a.lang.undo.undo,command:"undo",toolbar:"undo,10"}),a.ui.addButton("Redo",{label:a.lang.undo.redo,command:"redo",toolbar:"undo,20"}));a.resetUndo=function(){d.reset();a.fire("saveSnapshot")};a.on("updateSnapshot",function(){d.currentImage&&d.update()});a.on("lockSnapshot",function(a){a=a.data;d.lock(a&&a.dontUpdate,a&&a.forceUpdate)});a.on("unlockSnapshot", +d.unlock,d)}});CKEDITOR.plugins.undo={};var e=CKEDITOR.plugins.undo.UndoManager=function(a){this.strokesRecorded=[0,0];this.locked=null;this.previousKeyGroup=-1;this.limit=a.config.undoStackSize||20;this.strokesLimit=25;this.editor=a;this.reset()};e.prototype={type:function(a,b){var c=e.getKeyGroup(a),d=this.strokesRecorded[c]+1,b=b||d>=this.strokesLimit;this.typing||(this.hasUndo=this.typing=!0,this.hasRedo=!1,this.onChange());b?(d=0,this.editor.fire("saveSnapshot")):this.editor.fire("change");this.strokesRecorded[c]= +d;this.previousKeyGroup=c},keyGroupChanged:function(a){return e.getKeyGroup(a)!=this.previousKeyGroup},reset:function(){this.snapshots=[];this.index=-1;this.currentImage=null;this.hasRedo=this.hasUndo=!1;this.locked=null;this.resetType()},resetType:function(){this.strokesRecorded=[0,0];this.typing=!1;this.previousKeyGroup=-1},refreshState:function(){this.hasUndo=!!this.getNextImage(!0);this.hasRedo=!!this.getNextImage(!1);this.resetType();this.onChange()},save:function(a,b,c){var d=this.editor;if(this.locked|| +"ready"!=d.status||"wysiwyg"!=d.mode)return!1;var e=d.editable();if(!e||"ready"!=e.status)return!1;e=this.snapshots;b||(b=new f(d));if(!1===b.contents)return!1;if(this.currentImage)if(b.equalsContent(this.currentImage)){if(a||b.equalsSelection(this.currentImage))return!1}else!1!==c&&d.fire("change");e.splice(this.index+1,e.length-this.index-1);e.length==this.limit&&e.shift();this.index=e.push(b)-1;this.currentImage=b;!1!==c&&this.refreshState();return!0},restoreImage:function(a){var b=this.editor, +c;a.bookmarks&&(b.focus(),c=b.getSelection());this.locked={level:999};this.editor.loadSnapshot(a.contents);a.bookmarks?c.selectBookmarks(a.bookmarks):CKEDITOR.env.ie&&(c=this.editor.document.getBody().$.createTextRange(),c.collapse(!0),c.select());this.locked=null;this.index=a.index;this.currentImage=this.snapshots[this.index];this.update();this.refreshState();b.fire("change")},getNextImage:function(a){var b=this.snapshots,c=this.currentImage,d;if(c)if(a)for(d=this.index-1;0<=d;d--){if(a=b[d],!c.equalsContent(a))return a.index= +d,a}else for(d=this.index+1;d<b.length;d++)if(a=b[d],!c.equalsContent(a))return a.index=d,a;return null},redoable:function(){return this.enabled&&this.hasRedo},undoable:function(){return this.enabled&&this.hasUndo},undo:function(){if(this.undoable()){this.save(!0);var a=this.getNextImage(!0);if(a)return this.restoreImage(a),!0}return!1},redo:function(){if(this.redoable()&&(this.save(!0),this.redoable())){var a=this.getNextImage(!1);if(a)return this.restoreImage(a),!0}return!1},update:function(a){if(!this.locked){a|| +(a=new f(this.editor));for(var b=this.index,c=this.snapshots;0<b&&this.currentImage.equalsContent(c[b-1]);)b-=1;c.splice(b,this.index-b+1,a);this.index=b;this.currentImage=a}},updateSelection:function(a){if(!this.snapshots.length)return!1;var b=this.snapshots,c=b[b.length-1];return c.equalsContent(a)&&!c.equalsSelection(a)?(this.currentImage=b[b.length-1]=a,!0):!1},lock:function(a,b){if(this.locked)this.locked.level++;else if(a)this.locked={level:1};else{var c=null;if(b)c=!0;else{var d=new f(this.editor, +!0);this.currentImage&&this.currentImage.equalsContent(d)&&(c=d)}this.locked={update:c,level:1}}},unlock:function(){if(this.locked&&!--this.locked.level){var a=this.locked.update;this.locked=null;if(!0===a)this.update();else if(a){var b=new f(this.editor,!0);a.equalsContent(b)||this.update()}}}};e.navigationKeyCodes={37:1,38:1,39:1,40:1,36:1,35:1,33:1,34:1};e.keyGroups={PRINTABLE:0,FUNCTIONAL:1};e.isNavigationKey=function(a){return!!e.navigationKeyCodes[a]};e.getKeyGroup=function(a){var b=e.keyGroups; +return l[a]?b.FUNCTIONAL:b.PRINTABLE};e.getOppositeKeyGroup=function(a){var b=e.keyGroups;return a==b.FUNCTIONAL?b.PRINTABLE:b.FUNCTIONAL};e.ieFunctionalKeysBug=function(a){return CKEDITOR.env.ie&&e.getKeyGroup(a)==e.keyGroups.FUNCTIONAL};var f=CKEDITOR.plugins.undo.Image=function(a,b){this.editor=a;a.fire("beforeUndoImage");var c=a.getSnapshot();CKEDITOR.env.ie&&c&&(c=c.replace(/\s+data-cke-expando=".*?"/g,""));this.contents=c;b||(this.bookmarks=(c=c&&a.getSelection())&&c.createBookmarks2(!0));a.fire("afterUndoImage")}, +h=/\b(?:href|src|name)="[^"]*?"/gi;f.prototype={equalsContent:function(a){var b=this.contents,a=a.contents;if(CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks))b=b.replace(h,""),a=a.replace(h,"");return b!=a?!1:!0},equalsSelection:function(a){var b=this.bookmarks,a=a.bookmarks;if(b||a){if(!b||!a||b.length!=a.length)return!1;for(var c=0;c<b.length;c++){var d=b[c],e=a[c];if(d.startOffset!=e.startOffset||d.endOffset!=e.endOffset||!CKEDITOR.tools.arrayCompare(d.start,e.start)||!CKEDITOR.tools.arrayCompare(d.end, +e.end))return!1}}return!0}};var i=CKEDITOR.plugins.undo.NativeEditingHandler=function(a){this.undoManager=a;this.ignoreInputEvent=!1;this.keyEventsStack=new k;this.lastKeydownImage=null};i.prototype={onKeydown:function(a){var b=a.data.getKey();if(229!==b)if(-1<CKEDITOR.tools.indexOf(g,a.data.getKeystroke()))a.data.preventDefault();else if(this.keyEventsStack.cleanUp(a),a=this.undoManager,this.keyEventsStack.getLast(b)||this.keyEventsStack.push(b),this.lastKeydownImage=new f(a.editor),e.isNavigationKey(b)|| +this.undoManager.keyGroupChanged(b))if(a.strokesRecorded[0]||a.strokesRecorded[1])a.save(!1,this.lastKeydownImage,!1),a.resetType()},onInput:function(){if(this.ignoreInputEvent)this.ignoreInputEvent=!1;else{var a=this.keyEventsStack.getLast();a||(a=this.keyEventsStack.push(0));this.keyEventsStack.increment(a.keyCode);this.keyEventsStack.getTotalInputs()>=this.undoManager.strokesLimit&&(this.undoManager.type(a.keyCode,!0),this.keyEventsStack.resetInputs())}},onKeyup:function(a){var b=this.undoManager, +a=a.data.getKey(),c=this.keyEventsStack.getTotalInputs();this.keyEventsStack.remove(a);if(!e.ieFunctionalKeysBug(a)||!this.lastKeydownImage||!this.lastKeydownImage.equalsContent(new f(b.editor,!0)))if(0<c)b.type(a);else if(e.isNavigationKey(a))this.onNavigationKey(!0)},onNavigationKey:function(a){var b=this.undoManager;(a||!b.save(!0,null,!1))&&b.updateSelection(new f(b.editor));b.resetType()},ignoreInputEventListener:function(){this.ignoreInputEvent=!0},attachListeners:function(){var a=this.undoManager.editor, +b=a.editable(),c=this;b.attachListener(b,"keydown",function(a){c.onKeydown(a);if(e.ieFunctionalKeysBug(a.data.getKey()))c.onInput()},null,null,999);b.attachListener(b,CKEDITOR.env.ie?"keypress":"input",c.onInput,c,null,999);b.attachListener(b,"keyup",c.onKeyup,c,null,999);b.attachListener(b,"paste",c.ignoreInputEventListener,c,null,999);b.attachListener(b,"drop",c.ignoreInputEventListener,c,null,999);b.attachListener(b.isInline()?b:a.document.getDocumentElement(),"click",function(){c.onNavigationKey()}, +null,null,999);b.attachListener(this.undoManager.editor,"blur",function(){c.keyEventsStack.remove(9)},null,null,999)}};var k=CKEDITOR.plugins.undo.KeyEventsStack=function(){this.stack=[]};k.prototype={push:function(a){return this.stack[this.stack.push({keyCode:a,inputs:0})-1]},getLastIndex:function(a){if("number"!=typeof a)return this.stack.length-1;for(var b=this.stack.length;b--;)if(this.stack[b].keyCode==a)return b;return-1},getLast:function(a){a=this.getLastIndex(a);return-1!=a?this.stack[a]: +null},increment:function(a){this.getLast(a).inputs++},remove:function(a){a=this.getLastIndex(a);-1!=a&&this.stack.splice(a,1)},resetInputs:function(a){if("number"==typeof a)this.getLast(a).inputs=0;else for(a=this.stack.length;a--;)this.stack[a].inputs=0},getTotalInputs:function(){for(var a=this.stack.length,b=0;a--;)b+=this.stack[a].inputs;return b},cleanUp:function(a){a=a.data.$;!a.ctrlKey&&!a.metaKey&&this.remove(17);a.shiftKey||this.remove(16);a.altKey||this.remove(18)}}})();(function(){function k(a){var d=this.editor,b=a.document,c=b.body,e=b.getElementById("cke_actscrpt");e&&e.parentNode.removeChild(e);(e=b.getElementById("cke_shimscrpt"))&&e.parentNode.removeChild(e);(e=b.getElementById("cke_basetagscrpt"))&&e.parentNode.removeChild(e);c.contentEditable=!0;CKEDITOR.env.ie&&(c.hideFocus=!0,c.disabled=!0,c.removeAttribute("disabled"));delete this._.isLoadingData;this.$=c;b=new CKEDITOR.dom.document(b);this.setup();this.fixInitialSelection();CKEDITOR.env.ie&&(b.getDocumentElement().addClass(b.$.compatMode), +d.config.enterMode!=CKEDITOR.ENTER_P&&this.attachListener(b,"selectionchange",function(){var a=b.getBody(),c=d.getSelection(),e=c&&c.getRanges()[0];e&&(a.getHtml().match(/^<p>(?:&nbsp;|<br>)<\/p>$/i)&&e.startContainer.equals(a))&&setTimeout(function(){e=d.getSelection().getRanges()[0];if(!e.startContainer.equals("body")){a.getFirst().remove(1);e.moveToElementEditEnd(a);e.select()}},0)}));if(CKEDITOR.env.webkit||CKEDITOR.env.ie&&10<CKEDITOR.env.version)b.getDocumentElement().on("mousedown",function(a){a.data.getTarget().is("html")&& +setTimeout(function(){d.editable().focus()})});l(d);try{d.document.$.execCommand("2D-position",!1,!0)}catch(h){}(CKEDITOR.env.gecko||CKEDITOR.env.ie&&"CSS1Compat"==d.document.$.compatMode)&&this.attachListener(this,"keydown",function(a){var b=a.data.getKeystroke();if(b==33||b==34)if(CKEDITOR.env.ie)setTimeout(function(){d.getSelection().scrollIntoView()},0);else if(d.window.$.innerHeight>this.$.offsetHeight){var c=d.createRange();c[b==33?"moveToElementEditStart":"moveToElementEditEnd"](this);c.select(); +a.data.preventDefault()}});CKEDITOR.env.ie&&this.attachListener(b,"blur",function(){try{b.$.selection.empty()}catch(a){}});CKEDITOR.env.iOS&&this.attachListener(b,"touchend",function(){a.focus()});c=d.document.getElementsByTag("title").getItem(0);c.data("cke-title",c.getText());CKEDITOR.env.ie&&(d.document.$.title=this._.docTitle);CKEDITOR.tools.setTimeout(function(){if(this.status=="unloaded")this.status="ready";d.fire("contentDom");if(this._.isPendingFocus){d.focus();this._.isPendingFocus=false}setTimeout(function(){d.fire("dataReady")}, +0)},0,this)}function l(a){function d(){var c;a.editable().attachListener(a,"selectionChange",function(){var d=a.getSelection().getSelectedElement();d&&(c&&(c.detachEvent("onresizestart",b),c=null),d.$.attachEvent("onresizestart",b),c=d.$)})}function b(a){a.returnValue=!1}if(CKEDITOR.env.gecko)try{var c=a.document.$;c.execCommand("enableObjectResizing",!1,!a.config.disableObjectResizing);c.execCommand("enableInlineTableEditing",!1,!a.config.disableNativeTableHandles)}catch(e){}else CKEDITOR.env.ie&& +(11>CKEDITOR.env.version&&a.config.disableObjectResizing)&&d(a)}function m(){var a=[];if(8<=CKEDITOR.document.$.documentMode){a.push("html.CSS1Compat [contenteditable=false]{min-height:0 !important}");var d=[],b;for(b in CKEDITOR.dtd.$removeEmpty)d.push("html.CSS1Compat "+b+"[contenteditable=false]");a.push(d.join(",")+"{display:inline-block}")}else CKEDITOR.env.gecko&&(a.push("html{height:100% !important}"),a.push("img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")); +a.push("html{cursor:text;*cursor:auto}");a.push("img,input,textarea{cursor:default}");return a.join("\n")}CKEDITOR.plugins.add("wysiwygarea",{init:function(a){a.config.fullPage&&a.addFeature({allowedContent:"html head title; style [media,type]; body (*)[id]; meta link [*]",requiredContent:"body"});a.addMode("wysiwyg",function(d){function b(b){b&&b.removeListener();a.editable(new j(a,e.$.contentWindow.document.body));a.setData(a.getData(1),d)}var c="document.open();"+(CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+ +")();":"")+"document.close();",c=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie&&!CKEDITOR.env.edge?"javascript:void(function(){"+encodeURIComponent(c)+"}())":"",e=CKEDITOR.dom.element.createFromHtml('<iframe src="'+c+'" frameBorder="0"></iframe>');e.setStyles({width:"100%",height:"100%"});e.addClass("cke_wysiwyg_frame").addClass("cke_reset");c=a.ui.space("contents");c.append(e);var h=CKEDITOR.env.ie&&!CKEDITOR.env.edge||CKEDITOR.env.gecko;if(h)e.on("load",b);var f=a.title,g=a.fire("ariaEditorHelpLabel", +{}).label;f&&(CKEDITOR.env.ie&&g&&(f+=", "+g),e.setAttribute("title",f));if(g){var f=CKEDITOR.tools.getNextId(),i=CKEDITOR.dom.element.createFromHtml('<span id="'+f+'" class="cke_voice_label">'+g+"</span>");c.append(i,1);e.setAttribute("aria-describedby",f)}a.on("beforeModeUnload",function(a){a.removeListener();i&&i.remove()});e.setAttributes({tabIndex:a.tabIndex,allowTransparency:"true"});!h&&b();a.fire("ariaWidget",e)})}});CKEDITOR.editor.prototype.addContentsCss=function(a){var d=this.config,b= +d.contentsCss;CKEDITOR.tools.isArray(b)||(d.contentsCss=b?[b]:[]);d.contentsCss.push(a)};var j=CKEDITOR.tools.createClass({$:function(){this.base.apply(this,arguments);this._.frameLoadedHandler=CKEDITOR.tools.addFunction(function(a){CKEDITOR.tools.setTimeout(k,0,this,a)},this);this._.docTitle=this.getWindow().getFrame().getAttribute("title")},base:CKEDITOR.editable,proto:{setData:function(a,d){var b=this.editor;if(d)this.setHtml(a),this.fixInitialSelection(),b.fire("dataReady");else{this._.isLoadingData= +!0;b._.dataStore={id:1};var c=b.config,e=c.fullPage,h=c.docType,f=CKEDITOR.tools.buildStyleHtml(m()).replace(/<style>/,'<style data-cke-temp="1">');e||(f+=CKEDITOR.tools.buildStyleHtml(b.config.contentsCss));var g=c.baseHref?'<base href="'+c.baseHref+'" data-cke-temp="1" />':"";e&&(a=a.replace(/<!DOCTYPE[^>]*>/i,function(a){b.docType=h=a;return""}).replace(/<\?xml\s[^\?]*\?>/i,function(a){b.xmlDeclaration=a;return""}));a=b.dataProcessor.toHtml(a);e?(/<body[\s|>]/.test(a)||(a="<body>"+a),/<html[\s|>]/.test(a)|| +(a="<html>"+a+"</html>"),/<head[\s|>]/.test(a)?/<title[\s|>]/.test(a)||(a=a.replace(/<head[^>]*>/,"$&<title></title>")):a=a.replace(/<html[^>]*>/,"$&<head><title></title></head>"),g&&(a=a.replace(/<head[^>]*?>/,"$&"+g)),a=a.replace(/<\/head\s*>/,f+"$&"),a=h+a):a=c.docType+'<html dir="'+c.contentsLangDirection+'" lang="'+(c.contentsLanguage||b.langCode)+'"><head><title>'+this._.docTitle+"</title>"+g+f+"</head><body"+(c.bodyId?' id="'+c.bodyId+'"':"")+(c.bodyClass?' class="'+c.bodyClass+'"':"")+">"+ +a+"</body></html>";CKEDITOR.env.gecko&&(a=a.replace(/<body/,'<body contenteditable="true" '),2E4>CKEDITOR.env.version&&(a=a.replace(/<body[^>]*>/,"$&<\!-- cke-content-start --\>")));c='<script id="cke_actscrpt" type="text/javascript"'+(CKEDITOR.env.ie?' defer="defer" ':"")+">var wasLoaded=0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction("+this._.frameLoadedHandler+",window);wasLoaded=1;}"+(CKEDITOR.env.ie?"onload();":'document.addEventListener("DOMContentLoaded", onload, false );')+ +"<\/script>";CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(c+='<script id="cke_shimscrpt">window.parent.CKEDITOR.tools.enableHtml5Elements(document)<\/script>');g&&(CKEDITOR.env.ie&&10>CKEDITOR.env.version)&&(c+='<script id="cke_basetagscrpt">var baseTag = document.querySelector( "base" );baseTag.href = baseTag.href;<\/script>');a=a.replace(/(?=\s*<\/(:?head)>)/,c);this.clearCustomData();this.clearListeners();b.fire("contentDomUnload");var i=this.getDocument();try{i.write(a)}catch(j){setTimeout(function(){i.write(a)}, +0)}}},getData:function(a){if(a)return this.getHtml();var a=this.editor,d=a.config,b=d.fullPage,c=b&&a.docType,e=b&&a.xmlDeclaration,h=this.getDocument(),b=b?h.getDocumentElement().getOuterHtml():h.getBody().getHtml();CKEDITOR.env.gecko&&d.enterMode!=CKEDITOR.ENTER_BR&&(b=b.replace(/<br>(?=\s*(:?$|<\/body>))/,""));b=a.dataProcessor.toDataFormat(b);e&&(b=e+"\n"+b);c&&(b=c+"\n"+b);return b},focus:function(){this._.isLoadingData?this._.isPendingFocus=!0:j.baseProto.focus.call(this)},detach:function(){var a= +this.editor,d=a.document,a=a.window.getFrame();j.baseProto.detach.call(this);this.clearCustomData();d.getDocumentElement().clearCustomData();a.clearCustomData();CKEDITOR.tools.removeFunction(this._.frameLoadedHandler);(d=a.removeCustomData("onResize"))&&d.removeListener();a.remove()}}})})();CKEDITOR.config.disableObjectResizing=!1;CKEDITOR.config.disableNativeTableHandles=!0;CKEDITOR.config.disableNativeSpellChecker=!0;CKEDITOR.config.contentsCss=CKEDITOR.getUrl("contents.css");(function(){function l(a,c){var c=void 0===c||c,b;if(c)b=a.getComputedStyle("text-align");else{for(;!a.hasAttribute||!a.hasAttribute("align")&&!a.getStyle("text-align");){b=a.getParent();if(!b)break;a=b}b=a.getStyle("text-align")||a.getAttribute("align")||""}b&&(b=b.replace(/(?:-(?:moz|webkit)-)?(?:start|auto)/i,""));!b&&c&&(b="rtl"==a.getComputedStyle("direction")?"right":"left");return b}function g(a,c,b){this.editor=a;this.name=c;this.value=b;this.context="p";var c=a.config.justifyClasses,h=a.config.enterMode== +CKEDITOR.ENTER_P?"p":"div";if(c){switch(b){case "left":this.cssClassName=c[0];break;case "center":this.cssClassName=c[1];break;case "right":this.cssClassName=c[2];break;case "justify":this.cssClassName=c[3]}this.cssClassRegex=RegExp("(?:^|\\s+)(?:"+c.join("|")+")(?=$|\\s)");this.requiredContent=h+"("+this.cssClassName+")"}else this.requiredContent=h+"{text-align}";this.allowedContent={"caption div h1 h2 h3 h4 h5 h6 p pre td th li":{propertiesOnly:!0,styles:this.cssClassName?null:"text-align",classes:this.cssClassName|| +null}};a.config.enterMode==CKEDITOR.ENTER_BR&&(this.allowedContent.div=!0)}function j(a){var c=a.editor,b=c.createRange();b.setStartBefore(a.data.node);b.setEndAfter(a.data.node);for(var h=new CKEDITOR.dom.walker(b),d;d=h.next();)if(d.type==CKEDITOR.NODE_ELEMENT)if(!d.equals(a.data.node)&&d.getDirection())b.setStartAfter(d),h=new CKEDITOR.dom.walker(b);else{var e=c.config.justifyClasses;e&&(d.hasClass(e[0])?(d.removeClass(e[0]),d.addClass(e[2])):d.hasClass(e[2])&&(d.removeClass(e[2]),d.addClass(e[0]))); +e=d.getStyle("text-align");"left"==e?d.setStyle("text-align","right"):"right"==e&&d.setStyle("text-align","left")}}g.prototype={exec:function(a){var c=a.getSelection(),b=a.config.enterMode;if(c){for(var h=c.createBookmarks(),d=c.getRanges(),e=this.cssClassName,g,f,i=a.config.useComputedState,i=void 0===i||i,k=d.length-1;0<=k;k--){g=d[k].createIterator();for(g.enlargeBr=b!=CKEDITOR.ENTER_BR;f=g.getNextParagraph(b==CKEDITOR.ENTER_P?"p":"div");)if(!f.isReadOnly()){f.removeAttribute("align");f.removeStyle("text-align"); +var j=e&&(f.$.className=CKEDITOR.tools.ltrim(f.$.className.replace(this.cssClassRegex,""))),m=this.state==CKEDITOR.TRISTATE_OFF&&(!i||l(f,!0)!=this.value);e?m?f.addClass(e):j||f.removeAttribute("class"):m&&f.setStyle("text-align",this.value)}}a.focus();a.forceNextSelectionCheck();c.selectBookmarks(h)}},refresh:function(a,c){var b=c.block||c.blockLimit;this.setState("body"!=b.getName()&&l(b,this.editor.config.useComputedState)==this.value?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add("justify", +{init:function(a){if(!a.blockless){var c=new g(a,"justifyleft","left"),b=new g(a,"justifycenter","center"),h=new g(a,"justifyright","right"),d=new g(a,"justifyblock","justify");a.addCommand("justifyleft",c);a.addCommand("justifycenter",b);a.addCommand("justifyright",h);a.addCommand("justifyblock",d);a.ui.addButton&&(a.ui.addButton("JustifyLeft",{label:a.lang.justify.left,command:"justifyleft",toolbar:"align,10"}),a.ui.addButton("JustifyCenter",{label:a.lang.justify.center,command:"justifycenter", +toolbar:"align,20"}),a.ui.addButton("JustifyRight",{label:a.lang.justify.right,command:"justifyright",toolbar:"align,30"}),a.ui.addButton("JustifyBlock",{label:a.lang.justify.block,command:"justifyblock",toolbar:"align,40"}));a.on("dirChanged",j)}}})})();CKEDITOR.config.plugins='dialogui,dialog,a11yhelp,autogrow,basicstyles,clipboard,button,panelbutton,panel,floatpanel,colorbutton,colordialog,elementspath,enterkey,entities,floatingspace,listblock,richcombo,font,format,horizontalrule,htmlwriter,indent,indentlist,fakeobjects,link,list,magicline,maximize,menu,menubutton,pastefromword,pastetext,removeformat,resize,specialchar,stylescombo,table,contextmenu,tabletools,toolbar,undo,wysiwygarea,justify';CKEDITOR.config.skin='bootstrapck';(function() {var setIcons = function(icons, strip) {var path = CKEDITOR.getUrl( 'plugins/' + strip );icons = icons.split( ',' );for ( var i = 0; i < icons.length; i++ )CKEDITOR.skin.icons[ icons[ i ] ] = { path: path, offset: -icons[ ++i ], bgsize : icons[ ++i ] };};if (CKEDITOR.env.hidpi) setIcons('bold,0,,italic,24,,strike,48,,subscript,72,,superscript,96,,underline,120,,copy-rtl,144,,copy,168,,cut-rtl,192,,cut,216,,paste-rtl,240,,paste,264,,bgcolor,288,,textcolor,312,,horizontalrule,336,,indent-rtl,360,,indent,384,,outdent-rtl,408,,outdent,432,,anchor-rtl,456,,anchor,480,,link,504,,unlink,528,,bulletedlist-rtl,552,,bulletedlist,576,,numberedlist-rtl,600,,numberedlist,624,,maximize,648,,pastefromword-rtl,672,,pastefromword,696,,pastetext-rtl,720,,pastetext,744,,removeformat,768,,specialchar,792,,table,816,,redo-rtl,840,,redo,864,,undo-rtl,888,,undo,912,,justifyblock,936,,justifycenter,960,,justifyleft,984,,justifyright,1008,','icons_hidpi.png');else setIcons('bold,0,auto,italic,24,auto,strike,48,auto,subscript,72,auto,superscript,96,auto,underline,120,auto,copy-rtl,144,auto,copy,168,auto,cut-rtl,192,auto,cut,216,auto,paste-rtl,240,auto,paste,264,auto,bgcolor,288,auto,textcolor,312,auto,horizontalrule,336,auto,indent-rtl,360,auto,indent,384,auto,outdent-rtl,408,auto,outdent,432,auto,anchor-rtl,456,auto,anchor,480,auto,link,504,auto,unlink,528,auto,bulletedlist-rtl,552,auto,bulletedlist,576,auto,numberedlist-rtl,600,auto,numberedlist,624,auto,maximize,648,auto,pastefromword-rtl,672,auto,pastefromword,696,auto,pastetext-rtl,720,auto,pastetext,744,auto,removeformat,768,auto,specialchar,792,auto,table,816,auto,redo-rtl,840,auto,redo,864,auto,undo-rtl,888,auto,undo,912,auto,justifyblock,936,auto,justifycenter,960,auto,justifyleft,984,auto,justifyright,1008,auto','icons.png');})();CKEDITOR.lang.languages={"af":1,"ar":1,"bg":1,"bn":1,"bs":1,"ca":1,"cs":1,"cy":1,"da":1,"de":1,"el":1,"en":1,"en-au":1,"en-ca":1,"en-gb":1,"eo":1,"es":1,"et":1,"eu":1,"fa":1,"fi":1,"fo":1,"fr":1,"fr-ca":1,"gl":1,"gu":1,"he":1,"hi":1,"hr":1,"hu":1,"id":1,"is":1,"it":1,"ja":1,"ka":1,"km":1,"ko":1,"ku":1,"lt":1,"lv":1,"mk":1,"mn":1,"ms":1,"nb":1,"nl":1,"no":1,"pl":1,"pt":1,"pt-br":1,"ro":1,"ru":1,"si":1,"sk":1,"sl":1,"sq":1,"sr":1,"sr-latn":1,"sv":1,"th":1,"tr":1,"tt":1,"ug":1,"uk":1,"vi":1,"zh":1,"zh-cn":1};}()); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/config.js b/html/moodle2/mod/hvp/editor/ckeditor/config.js new file mode 100755 index 0000000000..a41b3c7c39 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/config.js @@ -0,0 +1,45 @@ +/** + * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +CKEDITOR.editorConfig = function( config ) { + // Define changes to default configuration here. + // For complete reference see: + // http://docs.ckeditor.com/#!/api/CKEDITOR.config + + // The toolbar groups arrangement, optimized for a single toolbar row. + config.toolbarGroups = [ + { name: 'document', groups: [ 'mode', 'document', 'doctools' ] }, + { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, + { name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] }, + { name: 'forms' }, + { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, + { name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] }, + { name: 'links' }, + { name: 'insert' }, + { name: 'styles' }, + { name: 'colors' }, + { name: 'tools' }, + { name: 'others' }, + { name: 'about' } + ]; + + // The default plugins included in the basic setup define some buttons that + // are not needed in a basic editor. They are removed here. +// config.removeButtons = 'Cut,Copy,Paste,Undo,Redo,Anchor,Underline,Strike,Subscript,Superscript'; + + // Dialog windows are also simplified. +// config.removeDialogTabs = 'link:advanced'; + config.removeDialogTabs = 'image:advanced;link:advanced'; + + // Se the most common block elements. + config.format_tags = 'p;h1;h2;h3;pre'; + + config.autoGrow_minHeight = 80; + config.height = 80; + config.autoGrow_onStartup = true; + config.autoGrow_maxHeight = 500; + config.colorButton_enableMore = true; + config.plugins += ',removeRedundantNBSP'; +}; diff --git a/html/moodle2/mod/hvp/editor/ckeditor/contents.css b/html/moodle2/mod/hvp/editor/ckeditor/contents.css new file mode 100755 index 0000000000..bad9dd6e7a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/contents.css @@ -0,0 +1,132 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +body +{ + /* Font */ + font-family: sans-serif, Arial, Verdana, "Trebuchet MS"; + font-size: 12px; + + /* Text color */ + color: #333; + + /* Remove the background color to make it transparent */ + background-color: #fff; + + margin: 20px; +} + +.cke_editable +{ + font-size: 13px; + line-height: 1.6; +} + +blockquote +{ + font-style: italic; + font-family: Georgia, Times, "Times New Roman", serif; + padding: 2px 0; + border-style: solid; + border-color: #ccc; + border-width: 0; +} + +.cke_contents_ltr blockquote +{ + padding-left: 20px; + padding-right: 8px; + border-left-width: 5px; +} + +.cke_contents_rtl blockquote +{ + padding-left: 8px; + padding-right: 20px; + border-right-width: 5px; +} + +a +{ + color: #0782C1; +} + +ol,ul,dl +{ + /* IE7: reset rtl list margin. (#7334) */ + *margin-right: 0px; + /* preserved spaces for list items with text direction other than the list. (#6249,#8049)*/ + padding: 0 40px; +} + +h1,h2,h3,h4,h5,h6 +{ + font-weight: normal; + line-height: 1.2; +} + +hr +{ + border: 0px; + border-top: 1px solid #ccc; +} + +img.right +{ + border: 1px solid #ccc; + float: right; + margin-left: 15px; + padding: 5px; +} + +img.left +{ + border: 1px solid #ccc; + float: left; + margin-right: 15px; + padding: 5px; +} + +pre +{ + white-space: pre-wrap; /* CSS 2.1 */ + word-wrap: break-word; /* IE7 */ + -moz-tab-size: 4; + tab-size: 4; +} + +.marker +{ + background-color: Yellow; +} + +span[lang] +{ + font-style: italic; +} + +figure +{ + text-align: center; + border: solid 1px #ccc; + border-radius: 2px; + background: rgba(0,0,0,0.05); + padding: 10px; + margin: 10px 20px; + display: inline-block; +} + +figure > figcaption +{ + text-align: center; + display: block; /* For IE8 */ +} + +a > img { + padding: 1px; + margin: 1px; + border: none; + outline: 1px solid #0782C1; +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/af.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/af.js new file mode 100755 index 0000000000..2f7b684ca4 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/af.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['af']={"editor":"Woordverwerker","editorPanel":"Woordverwerkerpaneel","common":{"editorHelp":"Druk op ALT 0 vir hulp","browseServer":"Blaai op bediener","url":"URL","protocol":"Protokol","upload":"Oplaai","uploadSubmit":"Stuur aan die bediener","image":"Beeld","flash":"Flash","form":"Vorm","checkbox":"Merkhokkie","radio":"Radioknoppie","textField":"Teksveld","textarea":"Teksarea","hiddenField":"Versteekteveld","button":"Knop","select":"Keuseveld","imageButton":"Beeldknop","notSet":"<geen instelling>","id":"Id","name":"Naam","langDir":"Skryfrigting","langDirLtr":"Links na regs (LTR)","langDirRtl":"Regs na links (RTL)","langCode":"Taalkode","longDescr":"Lang beskrywing URL","cssClass":"CSS klasse","advisoryTitle":"Aanbevole titel","cssStyle":"Styl","ok":"OK","cancel":"Kanselleer","close":"Sluit","preview":"Voorbeeld","resize":"Skalierung","generalTab":"Algemeen","advancedTab":"Gevorderd","validateNumberFailed":"Hierdie waarde is nie 'n nommer nie.","confirmNewPage":"Alle wysiginge sal verlore gaan. Is jy seker dat jy 'n nuwe bladsy wil laai?","confirmCancel":"Sommige opsies is gewysig. Is jy seker dat jy hierdie dialoogvenster wil sluit?","options":"Opsies","target":"Teiken","targetNew":"Nuwe venster (_blank)","targetTop":"Boonste venster (_top)","targetSelf":"Selfde venster (_self)","targetParent":"Oorspronklike venster (_parent)","langDirLTR":"Links na Regs (LTR)","langDirRTL":"Regs na Links (RTL)","styles":"Styl","cssClasses":"CSS klasse","width":"Breedte","height":"Hoogte","align":"Orienteerung","alignLeft":"Links","alignRight":"Regs","alignCenter":"Middel","alignJustify":"Eweredig","alignTop":"Bo","alignMiddle":"Middel","alignBottom":"Onder","alignNone":"Geen","invalidValue":"Ongeldige waarde","invalidHeight":"Hoogte moet 'n getal wees","invalidWidth":"Breedte moet 'n getal wees.","invalidCssLength":"Die waarde vir die \"%1\" veld moet 'n posetiewe getal wees met of sonder 'n geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","invalidHtmlLength":"Die waarde vir die \"%1\" veld moet 'n posetiewe getal wees met of sonder 'n geldige HTML eenheid (px of %).","invalidInlineStyle":"Ongeldige CSS. Formaat is een of meer sleutel-wert paare, \"naam : wert\" met kommapunte gesky.","cssLengthTooltip":"Voeg 'n getal wert in pixel in, of 'n waarde met geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","unavailable":"%1<span class=\"cke_accessibility\">, nie beskikbaar nie</span>"},"basicstyles":{"bold":"Vet","italic":"Skuins","strike":"Deurgestreep","subscript":"Onderskrif","superscript":"Bo-skrif","underline":"Onderstreep"},"clipboard":{"copy":"Kopiëer","copyError":"U blaaier se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).","cut":"Knip","cutError":"U blaaier se sekuriteitsinstelling belet die outomatiese knip-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).","paste":"Plak","pasteArea":"Plak-area","pasteMsg":"Plak die teks in die volgende teks-area met die sleutelbordkombinasie (<STRONG>Ctrl/Cmd+V</STRONG>) en druk <STRONG>OK</STRONG>.","securityMsg":"Weens u blaaier se sekuriteitsinstelling is data op die knipbord nie toeganklik nie. U kan dit eers weer in hierdie venster plak.","title":"Byvoeg"},"button":{"selectedLabel":"%1 uitgekies"},"colorbutton":{"auto":"Outomaties","bgColorTitle":"Agtergrondkleur","colors":{"000":"Swart","800000":"Meroen","8B4513":"Sjokoladebruin","2F4F4F":"Donkerleisteengrys","008080":"Blougroen","000080":"Vlootblou","4B0082":"Indigo","696969":"Donkergrys","B22222":"Rooibaksteen","A52A2A":"Bruin","DAA520":"Donkergeel","006400":"Donkergroen","40E0D0":"Turkoois","0000CD":"Middelblou","800080":"Pers","808080":"Grys","F00":"Rooi","FF8C00":"Donkeroranje","FFD700":"Goud","008000":"Groen","0FF":"Siaan","00F":"Blou","EE82EE":"Viooltjieblou","A9A9A9":"Donkergrys","FFA07A":"Ligsalm","FFA500":"Oranje","FFFF00":"Geel","00FF00":"Lemmetjie","AFEEEE":"Ligturkoois","ADD8E6":"Ligblou","DDA0DD":"Pruim","D3D3D3":"Liggrys","FFF0F5":"Linne","FAEBD7":"Ivoor","FFFFE0":"Liggeel","F0FFF0":"Heuningdou","F0FFFF":"Asuur","F0F8FF":"Ligte hemelsblou","E6E6FA":"Laventel","FFF":"Wit"},"more":"Meer Kleure...","panelTitle":"Kleure","textColorTitle":"Tekskleur"},"colordialog":{"clear":"Herstel","highlight":"Aktief","options":"Kleuropsies","selected":"Geselekteer","title":"Kies kleur"},"elementspath":{"eleLabel":"Elemente-pad","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Grootte","voiceLabel":"Fontgrootte","panelTitle":"Fontgrootte"},"label":"Font","panelTitle":"Fontnaam","voiceLabel":"Font"},"format":{"label":"Opmaak","panelTitle":"Opmaak","tag_address":"Adres","tag_div":"Normaal (DIV)","tag_h1":"Opskrif 1","tag_h2":"Opskrif 2","tag_h3":"Opskrif 3","tag_h4":"Opskrif 4","tag_h5":"Opskrif 5","tag_h6":"Opskrif 6","tag_p":"Normaal","tag_pre":"Opgemaak"},"horizontalrule":{"toolbar":"Horisontale lyn invoeg"},"indent":{"indent":"Vergroot inspring","outdent":"Verklein inspring"},"fakeobjects":{"anchor":"Anker","flash":"Flash animasie","hiddenfield":"Verborge veld","iframe":"IFrame","unknown":"Onbekende objek"},"link":{"acccessKey":"Toegangsleutel","advanced":"Gevorderd","advisoryContentType":"Aanbevole inhoudstipe","advisoryTitle":"Aanbevole titel","anchor":{"toolbar":"Anker byvoeg/verander","menu":"Anker-eienskappe","title":"Anker-eienskappe","name":"Ankernaam","errorName":"Voltooi die ankernaam asseblief","remove":"Remove Anchor"},"anchorId":"Op element Id","anchorName":"Op ankernaam","charset":"Karakterstel van geskakelde bron","cssClasses":"CSS klasse","emailAddress":"E-posadres","emailBody":"Berig-inhoud","emailSubject":"Berig-onderwerp","id":"Id","info":"Skakel informasie","langCode":"Taalkode","langDir":"Skryfrigting","langDirLTR":"Links na regs (LTR)","langDirRTL":"Regs na links (RTL)","menu":"Wysig skakel","name":"Naam","noAnchors":"(Geen ankers beskikbaar in dokument)","noEmail":"Gee die e-posadres","noUrl":"Gee die skakel se URL","other":"<ander>","popupDependent":"Afhanklik (Netscape)","popupFeatures":"Eienskappe van opspringvenster","popupFullScreen":"Volskerm (IE)","popupLeft":"Posisie links","popupLocationBar":"Adresbalk","popupMenuBar":"Spyskaartbalk","popupResizable":"Herskaalbaar","popupScrollBars":"Skuifbalke","popupStatusBar":"Statusbalk","popupToolbar":"Werkbalk","popupTop":"Posisie bo","rel":"Relationship","selectAnchor":"Kies 'n anker","styles":"Styl","tabIndex":"Tab indeks","target":"Doel","targetFrame":"<raam>","targetFrameName":"Naam van doelraam","targetPopup":"<opspringvenster>","targetPopupName":"Naam van opspringvenster","title":"Skakel","toAnchor":"Anker in bladsy","toEmail":"E-pos","toUrl":"URL","toolbar":"Skakel invoeg/wysig","type":"Skakelsoort","unlink":"Verwyder skakel","upload":"Oplaai"},"list":{"bulletedlist":"Ongenommerde lys","numberedlist":"Genommerde lys"},"magicline":{"title":"Voeg paragraaf hier in"},"maximize":{"maximize":"Maksimaliseer","minimize":"Minimaliseer"},"pastefromword":{"confirmCleanup":"Die teks wat u wil plak lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit geplak word?","error":"Die geplakte teks kon nie skoongemaak word nie, weens 'n interne fout","title":"Plak vanuit Word","toolbar":"Plak vanuit Word"},"pastetext":{"button":"Plak as eenvoudige teks","title":"Plak as eenvoudige teks"},"removeformat":{"toolbar":"Verwyder opmaak"},"specialchar":{"options":"Spesiale karakter-opsies","title":"Kies spesiale karakter","toolbar":"Voeg spesiaale karakter in"},"stylescombo":{"label":"Styl","panelTitle":"Vormaat style","panelTitle1":"Blok style","panelTitle2":"Inlyn style","panelTitle3":"Objek style"},"table":{"border":"Randbreedte","caption":"Naam","cell":{"menu":"Sel","insertBefore":"Voeg sel in voor","insertAfter":"Voeg sel in na","deleteCell":"Verwyder sel","merge":"Voeg selle saam","mergeRight":"Voeg saam na regs","mergeDown":"Voeg saam ondertoe","splitHorizontal":"Splits sel horisontaal","splitVertical":"Splits sel vertikaal","title":"Sel eienskappe","cellType":"Sel tipe","rowSpan":"Omspan rye","colSpan":"Omspan kolomme","wordWrap":"Woord terugloop","hAlign":"Horisontale oplyning","vAlign":"Vertikale oplyning","alignBaseline":"Basislyn","bgColor":"Agtergrondkleur","borderColor":"Randkleur","data":"Inhoud","header":"Opskrif","yes":"Ja","no":"Nee","invalidWidth":"Selbreedte moet 'n getal wees.","invalidHeight":"Selhoogte moet 'n getal wees.","invalidRowSpan":"Omspan rye moet 'n heelgetal wees.","invalidColSpan":"Omspan kolomme moet 'n heelgetal wees.","chooseColor":"Kies"},"cellPad":"Sel-spasie","cellSpace":"Sel-afstand","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in na","deleteColumn":"Verwyder kolom"},"columns":"Kolomme","deleteTable":"Verwyder tabel","headers":"Opskrifte","headersBoth":"Beide ","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste ry","invalidBorder":"Randbreedte moet 'n getal wees.","invalidCellPadding":"Sel-spasie moet 'n getal wees.","invalidCellSpacing":"Sel-afstand moet 'n getal wees.","invalidCols":"Aantal kolomme moet 'n getal groter as 0 wees.","invalidHeight":"Tabelhoogte moet 'n getal wees.","invalidRows":"Aantal rye moet 'n getal groter as 0 wees.","invalidWidth":"Tabelbreedte moet 'n getal wees.","menu":"Tabel eienskappe","row":{"menu":"Ry","insertBefore":"Voeg ry in voor","insertAfter":"Voeg ry in na","deleteRow":"Verwyder ry"},"rows":"Rye","summary":"Opsomming","title":"Tabel eienskappe","toolbar":"Tabel","widthPc":"persent","widthPx":"piksels","widthUnit":"breedte-eenheid"},"contextmenu":{"options":"Konteks Spyskaart-opsies"},"toolbar":{"toolbarCollapse":"Verklein werkbalk","toolbarExpand":"Vergroot werkbalk","toolbarGroups":{"document":"Dokument","clipboard":"Knipbord/Undo","editing":"Verander","forms":"Vorms","basicstyles":"Eenvoudige Styl","paragraph":"Paragraaf","links":"Skakels","insert":"Toevoeg","styles":"Style","colors":"Kleure","tools":"Gereedskap"},"toolbars":"Werkbalke"},"undo":{"redo":"Oordoen","undo":"Ontdoen"},"justify":{"block":"Uitvul","center":"Sentreer","left":"Links oplyn","right":"Regs oplyn"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/ar.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/ar.js new file mode 100755 index 0000000000..392ebca8d6 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/ar.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['ar']={"editor":"محرر النص الغني","editorPanel":"لائحة محرر النص المنسق","common":{"editorHelp":"إضغط على ALT + 0 للحصول على المساعدة.","browseServer":"تصفح","url":"الرابط","protocol":"البروتوكول","upload":"رفع","uploadSubmit":"أرسل","image":"صورة","flash":"فلاش","form":"نموذج","checkbox":"خانة إختيار","radio":"زر اختيار","textField":"مربع نص","textarea":"مساحة نصية","hiddenField":"إدراج حقل خفي","button":"زر ضغط","select":"اختار","imageButton":"زر صورة","notSet":"<بدون تحديد>","id":"الرقم","name":"إسم","langDir":"إتجاه النص","langDirLtr":"اليسار لليمين (LTR)","langDirRtl":"اليمين لليسار (RTL)","langCode":"رمز اللغة","longDescr":"الوصف التفصيلى","cssClass":"فئات التنسيق","advisoryTitle":"عنوان التقرير","cssStyle":"نمط","ok":"موافق","cancel":"إلغاء الأمر","close":"أغلق","preview":"استعراض","resize":"تغيير الحجم","generalTab":"عام","advancedTab":"متقدم","validateNumberFailed":"لايوجد نتيجة","confirmNewPage":"ستفقد أي متغييرات اذا لم تقم بحفظها اولا. هل أنت متأكد أنك تريد صفحة جديدة؟","confirmCancel":"بعض الخيارات قد تغيرت. هل أنت متأكد من إغلاق مربع النص؟","options":"خيارات","target":"هدف الرابط","targetNew":"نافذة جديدة","targetTop":"النافذة الأعلى","targetSelf":"داخل النافذة","targetParent":"النافذة الأم","langDirLTR":"اليسار لليمين (LTR)","langDirRTL":"اليمين لليسار (RTL)","styles":"نمط","cssClasses":"فئات التنسيق","width":"العرض","height":"الإرتفاع","align":"محاذاة","alignLeft":"يسار","alignRight":"يمين","alignCenter":"وسط","alignJustify":"ضبط","alignTop":"أعلى","alignMiddle":"وسط","alignBottom":"أسفل","alignNone":"None","invalidValue":"قيمة غير مفبولة.","invalidHeight":"الارتفاع يجب أن يكون عدداً.","invalidWidth":"العرض يجب أن يكون عدداً.","invalidCssLength":"قيمة الخانة المخصصة لـ \"%1\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة CSS قياس مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"قيمة الخانة المخصصة لـ \"%1\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة HTML قياس مقبولة (px or %).","invalidInlineStyle":"قيمة الخانة المخصصة لـ Inline Style يجب أن تختوي على مجموع واحد أو أكثر بالشكل التالي: \"name : value\", مفصولة بفاصلة منقزطة.","cssLengthTooltip":"أدخل رقما للقيمة بالبكسل أو رقما بوحدة CSS مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, غير متاح</span>"},"basicstyles":{"bold":"عريض","italic":"مائل","strike":"يتوسطه خط","subscript":"منخفض","superscript":"مرتفع","underline":"تسطير"},"clipboard":{"copy":"نسخ","copyError":"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع عمليات النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+C).","cut":"قص","cutError":"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+X).","paste":"لصق","pasteArea":"منطقة اللصق","pasteMsg":"الصق داخل الصندوق بإستخدام زرائر (<STRONG>Ctrl/Cmd+V</STRONG>) في لوحة المفاتيح، ثم اضغط زر <STRONG>موافق</STRONG>.","securityMsg":"نظراً لإعدادات الأمان الخاصة بمتصفحك، لن يتمكن هذا المحرر من الوصول لمحتوى حافظتك، لذلك يجب عليك لصق المحتوى مرة أخرى في هذه النافذة.","title":"لصق"},"button":{"selectedLabel":"%1 (محدد)"},"colorbutton":{"auto":"تلقائي","bgColorTitle":"لون الخلفية","colors":{"000":"أسود","800000":"كستنائي","8B4513":"بني فاتح","2F4F4F":"رمادي أردوازي غامق","008080":"أزرق مخضر","000080":"أزرق داكن","4B0082":"كحلي","696969":"رمادي داكن","B22222":"طوبي","A52A2A":"بني","DAA520":"ذهبي داكن","006400":"أخضر داكن","40E0D0":"فيروزي","0000CD":"أزرق متوسط","800080":"بنفسجي غامق","808080":"رمادي","F00":"أحمر","FF8C00":"برتقالي داكن","FFD700":"ذهبي","008000":"أخضر","0FF":"تركواز","00F":"أزرق","EE82EE":"بنفسجي","A9A9A9":"رمادي شاحب","FFA07A":"برتقالي وردي","FFA500":"برتقالي","FFFF00":"أصفر","00FF00":"ليموني","AFEEEE":"فيروزي شاحب","ADD8E6":"أزرق فاتح","DDA0DD":"بنفسجي فاتح","D3D3D3":"رمادي فاتح","FFF0F5":"وردي فاتح","FAEBD7":"أبيض عتيق","FFFFE0":"أصفر فاتح","F0FFF0":"أبيض مائل للأخضر","F0FFFF":"سماوي","F0F8FF":"لبني","E6E6FA":"أرجواني","FFF":"أبيض"},"more":"ألوان إضافية...","panelTitle":"Colors","textColorTitle":"لون النص"},"colordialog":{"clear":"مسح","highlight":"تحديد","options":"اختيارات الألوان","selected":"اللون المختار","title":"اختر اللون"},"elementspath":{"eleLabel":"مسار العنصر","eleTitle":"عنصر 1%"},"font":{"fontSize":{"label":"حجم الخط","voiceLabel":"حجم الخط","panelTitle":"حجم الخط"},"label":"خط","panelTitle":"حجم الخط","voiceLabel":"حجم الخط"},"format":{"label":"تنسيق","panelTitle":"تنسيق الفقرة","tag_address":"عنوان","tag_div":"عادي (DIV)","tag_h1":"العنوان 1","tag_h2":"العنوان 2","tag_h3":"العنوان 3","tag_h4":"العنوان 4","tag_h5":"العنوان 5","tag_h6":"العنوان 6","tag_p":"عادي","tag_pre":"منسّق"},"horizontalrule":{"toolbar":"خط فاصل"},"indent":{"indent":"زيادة المسافة البادئة","outdent":"إنقاص المسافة البادئة"},"fakeobjects":{"anchor":"إرساء","flash":"رسم متحرك بالفلاش","hiddenfield":"إدراج حقل خفي","iframe":"iframe","unknown":"عنصر غير معروف"},"link":{"acccessKey":"مفاتيح الإختصار","advanced":"متقدم","advisoryContentType":"نوع التقرير","advisoryTitle":"عنوان التقرير","anchor":{"toolbar":"إشارة مرجعية","menu":"تحرير الإشارة المرجعية","title":"خصائص الإشارة المرجعية","name":"اسم الإشارة المرجعية","errorName":"الرجاء كتابة اسم الإشارة المرجعية","remove":"إزالة الإشارة المرجعية"},"anchorId":"حسب رقم العنصر","anchorName":"حسب إسم الإشارة المرجعية","charset":"ترميز المادة المطلوبة","cssClasses":"فئات التنسيق","emailAddress":"البريد الإلكتروني","emailBody":"محتوى الرسالة","emailSubject":"موضوع الرسالة","id":"هوية","info":"معلومات الرابط","langCode":"رمز اللغة","langDir":"إتجاه نص اللغة","langDirLTR":"اليسار لليمين (LTR)","langDirRTL":"اليمين لليسار (RTL)","menu":"تحرير الرابط","name":"إسم","noAnchors":"(لا توجد علامات مرجعية في هذا المستند)","noEmail":"الرجاء كتابة الريد الإلكتروني","noUrl":"الرجاء كتابة رابط الموقع","other":"<أخرى>","popupDependent":"تابع (Netscape)","popupFeatures":"خصائص النافذة المنبثقة","popupFullScreen":"ملئ الشاشة (IE)","popupLeft":"التمركز لليسار","popupLocationBar":"شريط العنوان","popupMenuBar":"القوائم الرئيسية","popupResizable":"قابلة التشكيل","popupScrollBars":"أشرطة التمرير","popupStatusBar":"شريط الحالة","popupToolbar":"شريط الأدوات","popupTop":"التمركز للأعلى","rel":"العلاقة","selectAnchor":"اختر علامة مرجعية","styles":"نمط","tabIndex":"الترتيب","target":"هدف الرابط","targetFrame":"<إطار>","targetFrameName":"اسم الإطار المستهدف","targetPopup":"<نافذة منبثقة>","targetPopupName":"اسم النافذة المنبثقة","title":"رابط","toAnchor":"مكان في هذا المستند","toEmail":"بريد إلكتروني","toUrl":"الرابط","toolbar":"رابط","type":"نوع الربط","unlink":"إزالة رابط","upload":"رفع"},"list":{"bulletedlist":"ادخال/حذف تعداد نقطي","numberedlist":"ادخال/حذف تعداد رقمي"},"magicline":{"title":"إدراج فقرة هنا"},"maximize":{"maximize":"تكبير","minimize":"تصغير"},"pastefromword":{"confirmCleanup":"يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟","error":"لم يتم مسح المعلومات الملصقة لخلل داخلي","title":"لصق من وورد","toolbar":"لصق من وورد"},"pastetext":{"button":"لصق كنص بسيط","title":"لصق كنص بسيط"},"removeformat":{"toolbar":"إزالة التنسيقات"},"specialchar":{"options":"خيارات الأحرف الخاصة","title":"اختر حرف خاص","toolbar":"إدراج حرف خاص"},"stylescombo":{"label":"أنماط","panelTitle":"أنماط التنسيق","panelTitle1":"أنماط الفقرة","panelTitle2":"أنماط مضمنة","panelTitle3":"أنماط الكائن"},"table":{"border":"الحدود","caption":"الوصف","cell":{"menu":"خلية","insertBefore":"إدراج خلية قبل","insertAfter":"إدراج خلية بعد","deleteCell":"حذف خلية","merge":"دمج خلايا","mergeRight":"دمج لليمين","mergeDown":"دمج للأسفل","splitHorizontal":"تقسيم الخلية أفقياً","splitVertical":"تقسيم الخلية عمودياً","title":"خصائص الخلية","cellType":"نوع الخلية","rowSpan":"امتداد الصفوف","colSpan":"امتداد الأعمدة","wordWrap":"التفاف النص","hAlign":"محاذاة أفقية","vAlign":"محاذاة رأسية","alignBaseline":"خط القاعدة","bgColor":"لون الخلفية","borderColor":"لون الحدود","data":"بيانات","header":"عنوان","yes":"نعم","no":"لا","invalidWidth":"عرض الخلية يجب أن يكون عدداً.","invalidHeight":"ارتفاع الخلية يجب أن يكون عدداً.","invalidRowSpan":"امتداد الصفوف يجب أن يكون عدداً صحيحاً.","invalidColSpan":"امتداد الأعمدة يجب أن يكون عدداً صحيحاً.","chooseColor":"اختر"},"cellPad":"المسافة البادئة","cellSpace":"تباعد الخلايا","column":{"menu":"عمود","insertBefore":"إدراج عمود قبل","insertAfter":"إدراج عمود بعد","deleteColumn":"حذف أعمدة"},"columns":"أعمدة","deleteTable":"حذف الجدول","headers":"العناوين","headersBoth":"كلاهما","headersColumn":"العمود الأول","headersNone":"بدون","headersRow":"الصف الأول","invalidBorder":"حجم الحد يجب أن يكون عدداً.","invalidCellPadding":"المسافة البادئة يجب أن تكون عدداً","invalidCellSpacing":"المسافة بين الخلايا يجب أن تكون عدداً.","invalidCols":"عدد الأعمدة يجب أن يكون عدداً أكبر من صفر.","invalidHeight":"ارتفاع الجدول يجب أن يكون عدداً.","invalidRows":"عدد الصفوف يجب أن يكون عدداً أكبر من صفر.","invalidWidth":"عرض الجدول يجب أن يكون عدداً.","menu":"خصائص الجدول","row":{"menu":"صف","insertBefore":"إدراج صف قبل","insertAfter":"إدراج صف بعد","deleteRow":"حذف صفوف"},"rows":"صفوف","summary":"الخلاصة","title":"خصائص الجدول","toolbar":"جدول","widthPc":"بالمئة","widthPx":"بكسل","widthUnit":"وحدة العرض"},"contextmenu":{"options":"خصائص قائمة السياق"},"toolbar":{"toolbarCollapse":"تقليص شريط الأدوت","toolbarExpand":"تمديد شريط الأدوات","toolbarGroups":{"document":"مستند","clipboard":"الحافظة/الرجوع","editing":"تحرير","forms":"نماذج","basicstyles":"نمط بسيط","paragraph":"فقرة","links":"روابط","insert":"إدراج","styles":"أنماط","colors":"ألوان","tools":"أدوات"},"toolbars":"أشرطة أدوات المحرر"},"undo":{"redo":"إعادة","undo":"تراجع"},"justify":{"block":"ضبط","center":"توسيط","left":"محاذاة إلى اليسار","right":"محاذاة إلى اليمين"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/bg.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/bg.js new file mode 100755 index 0000000000..23e6a1163d --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/bg.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['bg']={"editor":"Текстов редактор за форматиран текст","editorPanel":"Панел на текстовия редактор","common":{"editorHelp":"натиснете ALT 0 за помощ","browseServer":"Избор от сървъра","url":"URL","protocol":"Протокол","upload":"Качване","uploadSubmit":"Изпращане към сървъра","image":"Снимка","flash":"Флаш","form":"Форма","checkbox":"Поле за избор","radio":"Радио бутон","textField":"Текстово поле","textarea":"Текстова зона","hiddenField":"Скрито поле","button":"Бутон","select":"Поле за избор","imageButton":"Бутон за снимка","notSet":"<не е избрано>","id":"ID","name":"Име","langDir":"Посока на езика","langDirLtr":"Ляво на дясно (ЛнД)","langDirRtl":"Дясно на ляво (ДнЛ)","langCode":"Код на езика","longDescr":"Уеб адрес за дълго описание","cssClass":"Класове за CSS","advisoryTitle":"Препоръчително заглавие","cssStyle":"Стил","ok":"ОК","cancel":"Отказ","close":"Затвори","preview":"Преглед","resize":"Влачете за да оразмерите","generalTab":"Общи","advancedTab":"Разширено","validateNumberFailed":"Тази стойност не е число","confirmNewPage":"Всички незапазени промени ще бъдат изгубени. Сигурни ли сте, че желаете да заредите нова страница?","confirmCancel":"Някои от опциите са променени. Сигурни ли сте, че желаете да затворите прозореца?","options":"Опции","target":"Цел","targetNew":"Нов прозорец (_blank)","targetTop":"Горна позиция (_top)","targetSelf":"Текущия прозорец (_self)","targetParent":"Основен прозорец (_parent)","langDirLTR":"Ляво на дясно (ЛнД)","langDirRTL":"Дясно на ляво (ДнЛ)","styles":"Стил","cssClasses":"Класове за CSS","width":"Ширина","height":"Височина","align":"Подравняване","alignLeft":"Ляво","alignRight":"Дясно","alignCenter":"Център","alignJustify":"Двустранно подравняване","alignTop":"Горе","alignMiddle":"По средата","alignBottom":"Долу","alignNone":"Без подравняване","invalidValue":"Невалидна стойност.","invalidHeight":"Височината трябва да е число.","invalidWidth":"Ширина требе да е число.","invalidCssLength":"Стойността на полето \"%1\" трябва да бъде положително число с или без валидна CSS измервателна единица (px, %, in, cm, mm, em, ex, pt, или pc).","invalidHtmlLength":"Стойността на полето \"%1\" трябва да бъде положително число с или без валидна HTML измервателна единица (px или %).","invalidInlineStyle":"Стойността на стилa трябва да съдържат една или повече двойки във формат \"name : value\", разделени с двоеточие.","cssLengthTooltip":"Въведете числена стойност в пиксели или друга валидна CSS единица (px, %, in, cm, mm, em, ex, pt, или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недостъпно</span>"},"basicstyles":{"bold":"Удебелен","italic":"Наклонен","strike":"Зачертан текст","subscript":"Индексиран текст","superscript":"Суперскрипт","underline":"Подчертан"},"clipboard":{"copy":"Копирай","copyError":"Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl/Cmd+C).","cut":"Отрежи","cutError":"Настройките за сигурност на Вашия браузър не позволяват на редактора автоматично да изъплни действията за отрязване. Моля ползвайте клавиатурните команди за целта (ctrl+x).","paste":"Вмъкни","pasteArea":"Зона за вмъкване","pasteMsg":"Вмъкнете тук съдъжанието с клавиатуарата (<STRONG>Ctrl/Cmd+V</STRONG>) и натиснете <STRONG>OK</STRONG>.","securityMsg":"Заради настройките за сигурност на Вашия браузър, редакторът не може да прочете данните от клипборда коректно.","title":"Вмъкни"},"button":{"selectedLabel":"%1 (Избрано)"},"colorbutton":{"auto":"Автоматично","bgColorTitle":"Фонов цвят","colors":{"000":"Черно","800000":"Кестеняво","8B4513":"Светлокафяво","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Индиго","696969":"Тъмно сиво","B22222":"Огнено червено","A52A2A":"Кафяво","DAA520":"Златисто","006400":"Тъмно зелено","40E0D0":"Тюркуазено","0000CD":"Средно синьо","800080":"Пурпурно","808080":"Сиво","F00":"Червено","FF8C00":"Тъмно оранжево","FFD700":"Златно","008000":"Зелено","0FF":"Светло синьо","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Още цветове","panelTitle":"Цветове","textColorTitle":"Цвят на шрифт"},"colordialog":{"clear":"Изчистване","highlight":"Осветяване","options":"Цветови опции","selected":"Изберете цвят","title":"Изберете цвят"},"elementspath":{"eleLabel":"Път за елементите","eleTitle":"%1 елемент"},"font":{"fontSize":{"label":"Размер","voiceLabel":"Размер на шрифт","panelTitle":"Размер на шрифт"},"label":"Шрифт","panelTitle":"Име на шрифт","voiceLabel":"Шрифт"},"format":{"label":"Формат","panelTitle":"Формат","tag_address":"Адрес","tag_div":"Параграф (DIV)","tag_h1":"Заглавие 1","tag_h2":"Заглавие 2","tag_h3":"Заглавие 3","tag_h4":"Заглавие 4","tag_h5":"Заглавие 5","tag_h6":"Заглавие 6","tag_p":"Нормален","tag_pre":"Форматиран"},"horizontalrule":{"toolbar":"Вмъкване на хоризонтална линия"},"indent":{"indent":"Увеличаване на отстъпа","outdent":"Намаляване на отстъпа"},"fakeobjects":{"anchor":"Кука","flash":"Флаш анимация","hiddenfield":"Скрито поле","iframe":"IFrame","unknown":"Неизвестен обект"},"link":{"acccessKey":"Ключ за достъп","advanced":"Разширено","advisoryContentType":"Препоръчителен тип на съдържанието","advisoryTitle":"Препоръчително заглавие","anchor":{"toolbar":"Котва","menu":"Промяна на котва","title":"Настройки на котва","name":"Име на котва","errorName":"Моля въведете име на котвата","remove":"Премахване на котва"},"anchorId":"По ID на елемент","anchorName":"По име на котва","charset":"Тип на свързания ресурс","cssClasses":"Класове за CSS","emailAddress":"E-mail aдрес","emailBody":"Съдържание","emailSubject":"Тема","id":"ID","info":"Инфо за връзката","langCode":"Код за езика","langDir":"Посока на езика","langDirLTR":"Ляво на Дясно (ЛнД)","langDirRTL":"Дясно на Ляво (ДнЛ)","menu":"Промяна на връзка","name":"Име","noAnchors":"(Няма котви в текущия документ)","noEmail":"Моля въведете e-mail aдрес","noUrl":"Моля въведете URL адреса","other":"<друго>","popupDependent":"Зависимост (Netscape)","popupFeatures":"Функции на изкачащ прозорец","popupFullScreen":"Цял екран (IE)","popupLeft":"Лява позиция","popupLocationBar":"Лента с локацията","popupMenuBar":"Лента за меню","popupResizable":"Оразмеряем","popupScrollBars":"Скролери","popupStatusBar":"Статусна лента","popupToolbar":"Лента с инструменти","popupTop":"Горна позиция","rel":"Връзка","selectAnchor":"Изберете котва","styles":"Стил","tabIndex":"Ред на достъп","target":"Цел","targetFrame":"<frame>","targetFrameName":"Име на целевият прозорец","targetPopup":"<изкачащ прозорец>","targetPopupName":"Име на изкачащ прозорец","title":"Връзка","toAnchor":"Връзка към котва в текста","toEmail":"E-mail","toUrl":"Уеб адрес","toolbar":"Връзка","type":"Тип на връзката","unlink":"Премахни връзката","upload":"Качване"},"list":{"bulletedlist":"Вмъкване/Премахване на точков списък","numberedlist":"Вмъкване/Премахване на номериран списък"},"magicline":{"title":"Вмъкнете параграф тук"},"maximize":{"maximize":"Максимизиране","minimize":"Минимизиране"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Вмъкни от MS Word","toolbar":"Вмъкни от MS Word"},"pastetext":{"button":"Вмъкни като чист текст","title":"Вмъкни като чист текст"},"removeformat":{"toolbar":"Премахване на форматирането"},"specialchar":{"options":"Опции за специален знак","title":"Избор на специален знак","toolbar":"Вмъкване на специален знак"},"stylescombo":{"label":"Стилове","panelTitle":"Стилове за форматиране","panelTitle1":"Блокови стилове","panelTitle2":"Вътрешни стилове","panelTitle3":"Обектни стилове"},"table":{"border":"Размер на рамката","caption":"Заглавие","cell":{"menu":"Клетка","insertBefore":"Вмъкване на клетка преди","insertAfter":"Вмъкване на клетка след","deleteCell":"Изтриване на клетки","merge":"Сливане на клетки","mergeRight":"Сливане в дясно","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Настройки на клетката","cellType":"Тип на клетката","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Авто. пренос","hAlign":"Хоризонтално подравняване","vAlign":"Вертикално подравняване","alignBaseline":"Базова линия","bgColor":"Фон","borderColor":"Цвят на рамката","data":"Данни","header":"Хедър","yes":"Да","no":"Не","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Изберете"},"cellPad":"Отделяне на клетките","cellSpace":"Разтояние между клетките","column":{"menu":"Колона","insertBefore":"Вмъкване на колона преди","insertAfter":"Вмъкване на колона след","deleteColumn":"Изтриване на колони"},"columns":"Колони","deleteTable":"Изтриване на таблица","headers":"Хедъри","headersBoth":"Заедно","headersColumn":"Първа колона","headersNone":"Няма","headersRow":"Първи ред","invalidBorder":"Размерът на рамката трябва да е число.","invalidCellPadding":"Отстоянието на клетките трябва да е позитивно число.","invalidCellSpacing":"Интервала в клетките трябва да е позитивно число.","invalidCols":"Броят колони трябва да е по-голям от 0.","invalidHeight":"Височината на таблицата трябва да е число.","invalidRows":"Броят редове трябва да е по-голям от 0.","invalidWidth":"Ширината на таблицата трябва да е число.","menu":"Настройки на таблицата","row":{"menu":"Ред","insertBefore":"Вмъкване на ред преди","insertAfter":"Вмъкване на ред след","deleteRow":"Изтриване на редове"},"rows":"Редове","summary":"Обща информация","title":"Настройки на таблицата","toolbar":"Таблица","widthPc":"процент","widthPx":"пиксела","widthUnit":"единица за ширина"},"contextmenu":{"options":"Опции на контекстното меню"},"toolbar":{"toolbarCollapse":"Свиване на лентата с инструменти","toolbarExpand":"Разширяване на лентата с инструменти","toolbarGroups":{"document":"Документ","clipboard":"Клипборд/Отмяна","editing":"Промяна","forms":"Форми","basicstyles":"Базови стилове","paragraph":"Параграф","links":"Връзки","insert":"Вмъкване","styles":"Стилове","colors":"Цветове","tools":"Инструменти"},"toolbars":"Ленти с инструменти"},"undo":{"redo":"Връщане на предишен статус","undo":"Възтанови"},"justify":{"block":"Двустранно подравняване","center":"Център","left":"Подравни в ляво","right":"Подравни в дясно"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/bn.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/bn.js new file mode 100755 index 0000000000..b10eca0832 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/bn.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['bn']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"ব্রাউজ সার্ভার","url":"URL","protocol":"প্রোটোকল","upload":"আপলোড","uploadSubmit":"ইহাকে সার্ভারে প্রেরন কর","image":"ছবির লেবেল যুক্ত কর","flash":"ফ্লাশ লেবেল যুক্ত কর","form":"ফর্ম","checkbox":"চেক বাক্স","radio":"রেডিও বাটন","textField":"টেক্সট ফীল্ড","textarea":"টেক্সট এরিয়া","hiddenField":"গুপ্ত ফীল্ড","button":"বাটন","select":"বাছাই ফীল্ড","imageButton":"ছবির বাটন","notSet":"<সেট নেই>","id":"আইডি","name":"নাম","langDir":"ভাষা লেখার দিক","langDirLtr":"বাম থেকে ডান (LTR)","langDirRtl":"ডান থেকে বাম (RTL)","langCode":"ভাষা কোড","longDescr":"URL এর লম্বা বর্ণনা","cssClass":"স্টাইল-শীট ক্লাস","advisoryTitle":"পরামর্শ শীর্ষক","cssStyle":"স্টাইল","ok":"ওকে","cancel":"বাতিল","close":"Close","preview":"প্রিভিউ","resize":"Resize","generalTab":"General","advancedTab":"এডভান্সড","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"টার্গেট","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"বাম থেকে ডান (LTR)","langDirRTL":"ডান থেকে বাম (RTL)","styles":"স্টাইল","cssClasses":"স্টাইল-শীট ক্লাস","width":"প্রস্থ","height":"দৈর্ঘ্য","align":"এলাইন","alignLeft":"বামে","alignRight":"ডানে","alignCenter":"মাঝখানে","alignJustify":"ব্লক জাস্টিফাই","alignTop":"উপর","alignMiddle":"মধ্য","alignBottom":"নীচে","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"basicstyles":{"bold":"বোল্ড","italic":"ইটালিক","strike":"স্ট্রাইক থ্রু","subscript":"অধোলেখ","superscript":"অভিলেখ","underline":"আন্ডারলাইন"},"clipboard":{"copy":"কপি","copyError":"আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কপি করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+C)।","cut":"কাট","cutError":"আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+X)।","paste":"পেস্ট","pasteArea":"Paste Area","pasteMsg":"অনুগ্রহ করে নীচের বাক্সে কিবোর্ড ব্যবহার করে (<STRONG>Ctrl/Cmd+V</STRONG>) পেস্ট করুন এবং <STRONG>OK</STRONG> চাপ দিন","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"পেস্ট"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"অটোমেটিক","bgColorTitle":"বেকগ্রাউন্ড রং","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"আরও রং...","panelTitle":"Colors","textColorTitle":"টেক্স্ট রং"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"font":{"fontSize":{"label":"সাইজ","voiceLabel":"Font Size","panelTitle":"সাইজ"},"label":"ফন্ট","panelTitle":"ফন্ট","voiceLabel":"ফন্ট"},"format":{"label":"ফন্ট ফরমেট","panelTitle":"ফন্ট ফরমেট","tag_address":"ঠিকানা","tag_div":"শীর্ষক (DIV)","tag_h1":"শীর্ষক ১","tag_h2":"শীর্ষক ২","tag_h3":"শীর্ষক ৩","tag_h4":"শীর্ষক ৪","tag_h5":"শীর্ষক ৫","tag_h6":"শীর্ষক ৬","tag_p":"সাধারণ","tag_pre":"ফর্মেটেড"},"horizontalrule":{"toolbar":"রেখা যুক্ত কর"},"indent":{"indent":"ইনডেন্ট বাড়াও","outdent":"ইনডেন্ট কমাও"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"এক্সেস কী","advanced":"এডভান্সড","advisoryContentType":"পরামর্শ কন্টেন্টের প্রকার","advisoryTitle":"পরামর্শ শীর্ষক","anchor":{"toolbar":"নোঙ্গর","menu":"নোঙর প্রোপার্টি","title":"নোঙর প্রোপার্টি","name":"নোঙরের নাম","errorName":"নোঙরের নাম টাইপ করুন","remove":"Remove Anchor"},"anchorId":"নোঙরের আইডি দিয়ে","anchorName":"নোঙরের নাম দিয়ে","charset":"লিংক রিসোর্স ক্যারেক্টর সেট","cssClasses":"স্টাইল-শীট ক্লাস","emailAddress":"ইমেইল ঠিকানা","emailBody":"মেসেজের দেহ","emailSubject":"মেসেজের বিষয়","id":"আইডি","info":"লিংক তথ্য","langCode":"ভাষা লেখার দিক","langDir":"ভাষা লেখার দিক","langDirLTR":"বাম থেকে ডান (LTR)","langDirRTL":"ডান থেকে বাম (RTL)","menu":"লিংক সম্পাদন","name":"নাম","noAnchors":"(No anchors available in the document)","noEmail":"অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন","noUrl":"অনুগ্রহ করে URL লিংক টাইপ করুন","other":"<other>","popupDependent":"ডিপেন্ডেন্ট (Netscape)","popupFeatures":"পপআপ উইন্ডো ফীচার সমূহ","popupFullScreen":"পূর্ণ পর্দা জুড়ে (IE)","popupLeft":"বামের পজিশন","popupLocationBar":"লোকেশন বার","popupMenuBar":"মেন্যু বার","popupResizable":"Resizable","popupScrollBars":"স্ক্রল বার","popupStatusBar":"স্ট্যাটাস বার","popupToolbar":"টুল বার","popupTop":"ডানের পজিশন","rel":"Relationship","selectAnchor":"নোঙর বাছাই","styles":"স্টাইল","tabIndex":"ট্যাব ইন্ডেক্স","target":"টার্গেট","targetFrame":"<ফ্রেম>","targetFrameName":"টার্গেট ফ্রেমের নাম","targetPopup":"<পপআপ উইন্ডো>","targetPopupName":"পপআপ উইন্ডোর নাম","title":"লিংক","toAnchor":"এই পেজে নোঙর কর","toEmail":"ইমেইল","toUrl":"URL","toolbar":"লিংক যুক্ত কর","type":"লিংক প্রকার","unlink":"লিংক সরাও","upload":"আপলোড"},"list":{"bulletedlist":"বুলেট লিস্ট লেবেল","numberedlist":"সাংখ্যিক লিস্টের লেবেল"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"পেস্ট (শব্দ)","toolbar":"পেস্ট (শব্দ)"},"pastetext":{"button":"সাদা টেক্সট হিসেবে পেস্ট কর","title":"সাদা টেক্সট হিসেবে পেস্ট কর"},"removeformat":{"toolbar":"ফরমেট সরাও"},"specialchar":{"options":"Special Character Options","title":"বিশেষ ক্যারেক্টার বাছাই কর","toolbar":"বিশেষ অক্ষর যুক্ত কর"},"stylescombo":{"label":"স্টাইল","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"বর্ডার সাইজ","caption":"শীর্ষক","cell":{"menu":"সেল","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"সেল মুছে দাও","merge":"সেল জোড়া দাও","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"সেল প্যাডিং","cellSpace":"সেল স্পেস","column":{"menu":"কলাম","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"কলাম মুছে দাও"},"columns":"কলাম","deleteTable":"টেবিল ডিলীট কর","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"টেবিল প্রোপার্টি","row":{"menu":"রো","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"রো মুছে দাও"},"rows":"রো","summary":"সারাংশ","title":"টেবিল প্রোপার্টি","toolbar":"টেবিলের লেবেল যুক্ত কর","widthPc":"শতকরা","widthPx":"পিক্সেল","widthUnit":"width unit"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"undo":{"redo":"রি-ডু","undo":"আনডু"},"justify":{"block":"ব্লক জাস্টিফাই","center":"মাঝ বরাবর ঘেষা","left":"বা দিকে ঘেঁষা","right":"ডান দিকে ঘেঁষা"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/bs.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/bs.js new file mode 100755 index 0000000000..f15280b93c --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/bs.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['bs']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protokol","upload":"Šalji","uploadSubmit":"Šalji na server","image":"Slika","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<nije podešeno>","id":"Id","name":"Naziv","langDir":"Smjer pisanja","langDirLtr":"S lijeva na desno (LTR)","langDirRtl":"S desna na lijevo (RTL)","langCode":"Jezièni kôd","longDescr":"Dugaèki opis URL-a","cssClass":"Klase CSS stilova","advisoryTitle":"Advisory title","cssStyle":"Stil","ok":"OK","cancel":"Odustani","close":"Close","preview":"Prikaži","resize":"Resize","generalTab":"General","advancedTab":"Naprednije","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Prozor","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","styles":"Stil","cssClasses":"Klase CSS stilova","width":"Širina","height":"Visina","align":"Poravnanje","alignLeft":"Lijevo","alignRight":"Desno","alignCenter":"Centar","alignJustify":"Puno poravnanje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dno","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"basicstyles":{"bold":"Boldiraj","italic":"Ukosi","strike":"Precrtaj","subscript":"Subscript","superscript":"Superscript","underline":"Podvuci"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+X).","paste":"Zalijepi","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Zalijepi"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatska","bgColorTitle":"Boja pozadine","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Više boja...","panelTitle":"Colors","textColorTitle":"Boja teksta"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Velièina","voiceLabel":"Font Size","panelTitle":"Velièina"},"label":"Font","panelTitle":"Font","voiceLabel":"Font"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Ubaci horizontalnu liniju"},"indent":{"indent":"Poveæaj uvod","outdent":"Smanji uvod"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Pristupna tipka","advanced":"Naprednije","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"Po Id-u elementa","anchorName":"Po nazivu sidra","charset":"Linked Resource Charset","cssClasses":"Klase CSS stilova","emailAddress":"E-Mail Adresa","emailBody":"Poruka","emailSubject":"Subjekt poruke","id":"Id","info":"Link info","langCode":"Smjer pisanja","langDir":"Smjer pisanja","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","menu":"Izmjeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra na stranici)","noEmail":"Molimo ukucajte e-mail adresu","noUrl":"Molimo ukucajte URL link","other":"<other>","popupDependent":"Ovisno (Netscape)","popupFeatures":"Moguænosti popup prozora","popupFullScreen":"Cijeli ekran (IE)","popupLeft":"Lijeva pozicija","popupLocationBar":"Traka za lokaciju","popupMenuBar":"Izborna traka","popupResizable":"Resizable","popupScrollBars":"Scroll traka","popupStatusBar":"Statusna traka","popupToolbar":"Traka sa alatima","popupTop":"Gornja pozicija","rel":"Relationship","selectAnchor":"Izaberi sidro","styles":"Stil","tabIndex":"Tab indeks","target":"Prozor","targetFrame":"<frejm>","targetFrameName":"Target Frame Name","targetPopup":"<popup prozor>","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toolbar":"Ubaci/Izmjeni link","type":"Tip linka","unlink":"Izbriši link","upload":"Šalji"},"list":{"bulletedlist":"Lista","numberedlist":"Numerisana lista"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Zalijepi iz Word-a","toolbar":"Zalijepi iz Word-a"},"pastetext":{"button":"Zalijepi kao obièan tekst","title":"Zalijepi kao obièan tekst"},"removeformat":{"toolbar":"Poništi format"},"specialchar":{"options":"Special Character Options","title":"Izaberi specijalni karakter","toolbar":"Ubaci specijalni karater"},"stylescombo":{"label":"Stil","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Okvir","caption":"Naslov","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Briši æelije","merge":"Spoji æelije","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Uvod æelija","cellSpace":"Razmak æelija","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Briši kolone"},"columns":"Kolona","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Svojstva tabele","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Briši redove"},"rows":"Redova","summary":"Summary","title":"Svojstva tabele","toolbar":"Tabela","widthPc":"posto","widthPx":"piksela","widthUnit":"width unit"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"undo":{"redo":"Ponovi","undo":"Vrati"},"justify":{"block":"Puno poravnanje","center":"Centralno poravnanje","left":"Lijevo poravnanje","right":"Desno poravnanje"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/ca.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/ca.js new file mode 100755 index 0000000000..554f5e0ac5 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/ca.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['ca']={"editor":"Editor de text enriquit","editorPanel":"Panell de l'editor de text enriquit","common":{"editorHelp":"Premeu ALT 0 per ajuda","browseServer":"Veure servidor","url":"URL","protocol":"Protocol","upload":"Puja","uploadSubmit":"Envia-la al servidor","image":"Imatge","flash":"Flash","form":"Formulari","checkbox":"Casella de verificació","radio":"Botó d'opció","textField":"Camp de text","textarea":"Àrea de text","hiddenField":"Camp ocult","button":"Botó","select":"Camp de selecció","imageButton":"Botó d'imatge","notSet":"<no definit>","id":"Id","name":"Nom","langDir":"Direcció de l'idioma","langDirLtr":"D'esquerra a dreta (LTR)","langDirRtl":"De dreta a esquerra (RTL)","langCode":"Codi d'idioma","longDescr":"Descripció llarga de la URL","cssClass":"Classes del full d'estil","advisoryTitle":"Títol consultiu","cssStyle":"Estil","ok":"D'acord","cancel":"Cancel·la","close":"Tanca","preview":"Previsualitza","resize":"Arrossegueu per redimensionar","generalTab":"General","advancedTab":"Avançat","validateNumberFailed":"Aquest valor no és un número.","confirmNewPage":"Els canvis en aquest contingut que no es desin es perdran. Esteu segur que voleu carregar una pàgina nova?","confirmCancel":"Algunes opcions s'han canviat. Esteu segur que voleu tancar el quadre de diàleg?","options":"Opcions","target":"Destí","targetNew":"Nova finestra (_blank)","targetTop":"Finestra superior (_top)","targetSelf":"Mateixa finestra (_self)","targetParent":"Finestra pare (_parent)","langDirLTR":"D'esquerra a dreta (LTR)","langDirRTL":"De dreta a esquerra (RTL)","styles":"Estil","cssClasses":"Classes del full d'estil","width":"Amplada","height":"Alçada","align":"Alineació","alignLeft":"Ajusta a l'esquerra","alignRight":"Ajusta a la dreta","alignCenter":"Centre","alignJustify":"Justificat","alignTop":"Superior","alignMiddle":"Centre","alignBottom":"Inferior","alignNone":"None","invalidValue":"Valor no vàlid.","invalidHeight":"L'alçada ha de ser un número.","invalidWidth":"L'amplada ha de ser un número.","invalidCssLength":"El valor especificat per als \"%1\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).","invalidHtmlLength":"El valor especificat per als \"%1\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida d'HTML (px o %).","invalidInlineStyle":"El valor especificat per l'estil en línia ha de constar d'una o més tuples amb el format \"name: value\", separats per punt i coma.","cssLengthTooltip":"Introduïu un número per un valor en píxels o un número amb una unitat vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>"},"basicstyles":{"bold":"Negreta","italic":"Cursiva","strike":"Ratllat","subscript":"Subíndex","superscript":"Superíndex","underline":"Subratllat"},"clipboard":{"copy":"Copiar","copyError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+C).","cut":"Retallar","cutError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+X).","paste":"Enganxar","pasteArea":"Àrea d'enganxat","pasteMsg":"Si us plau, enganxi dins del següent camp utilitzant el teclat (<strong>Ctrl/Cmd+V</strong>) i premi OK.","securityMsg":"A causa de la configuració de seguretat del vostre navegador, l'editor no pot accedir a les dades del porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.","title":"Enganxar"},"button":{"selectedLabel":"%1 (Seleccionat)"},"colorbutton":{"auto":"Automàtic","bgColorTitle":"Color de Fons","colors":{"000":"Negre","800000":"Grana","8B4513":"Marró sella","2F4F4F":"Gris pissarra fosca","008080":"Blau xarxet","000080":"Blau marí","4B0082":"Indi","696969":"Gris Fosc","B22222":"Foc Maó","A52A2A":"Marró","DAA520":"Solidago","006400":"Verd Fosc","40E0D0":"Turquesa","0000CD":"Blau 1/2","800080":"Lila","808080":"Gris","F00":"Vermell","FF8C00":"Taronja Fosc","FFD700":"Or","008000":"Verd","0FF":"Cian","00F":"Blau","EE82EE":"Violat","A9A9A9":"Gris clar","FFA07A":"Salmó clar","FFA500":"Taronja","FFFF00":"Groc","00FF00":"Verd Llima","AFEEEE":"Turquesa Pàl·lid","ADD8E6":"Blau Clar","DDA0DD":"Pruna","D3D3D3":"Gris Clar","FFF0F5":"Lavanda rosat","FAEBD7":"Blanc Antic","FFFFE0":"Groc Clar","F0FFF0":"Verd Pàl·lid","F0FFFF":"Atzur","F0F8FF":"Cian pàlid","E6E6FA":"Lavanda","FFF":"Blanc"},"more":"Més Colors...","panelTitle":"Colors","textColorTitle":"Color del Text"},"colordialog":{"clear":"Neteja","highlight":"Destacat","options":"Opcions del color","selected":"Color Seleccionat","title":"Seleccioni el color"},"elementspath":{"eleLabel":"Ruta dels elements","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Mida","voiceLabel":"Mida de la lletra","panelTitle":"Mida de la lletra"},"label":"Tipus de lletra","panelTitle":"Tipus de lletra","voiceLabel":"Tipus de lletra"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adreça","tag_div":"Normal (DIV)","tag_h1":"Encapçalament 1","tag_h2":"Encapçalament 2","tag_h3":"Encapçalament 3","tag_h4":"Encapçalament 4","tag_h5":"Encapçalament 5","tag_h6":"Encapçalament 6","tag_p":"Normal","tag_pre":"Formatejat"},"horizontalrule":{"toolbar":"Insereix línia horitzontal"},"indent":{"indent":"Augmenta el sagnat","outdent":"Redueix el sagnat"},"fakeobjects":{"anchor":"Àncora","flash":"Animació Flash","hiddenfield":"Camp ocult","iframe":"IFrame","unknown":"Objecte desconegut"},"link":{"acccessKey":"Clau d'accés","advanced":"Avançat","advisoryContentType":"Tipus de contingut consultiu","advisoryTitle":"Títol consultiu","anchor":{"toolbar":"Insereix/Edita àncora","menu":"Propietats de l'àncora","title":"Propietats de l'àncora","name":"Nom de l'àncora","errorName":"Si us plau, escriviu el nom de l'ancora","remove":"Remove Anchor"},"anchorId":"Per Id d'element","anchorName":"Per nom d'àncora","charset":"Conjunt de caràcters font enllaçat","cssClasses":"Classes del full d'estil","emailAddress":"Adreça de correu electrònic","emailBody":"Cos del missatge","emailSubject":"Assumpte del missatge","id":"Id","info":"Informació de l'enllaç","langCode":"Direcció de l'idioma","langDir":"Direcció de l'idioma","langDirLTR":"D'esquerra a dreta (LTR)","langDirRTL":"De dreta a esquerra (RTL)","menu":"Edita l'enllaç","name":"Nom","noAnchors":"(No hi ha àncores disponibles en aquest document)","noEmail":"Si us plau, escrigui l'adreça correu electrònic","noUrl":"Si us plau, escrigui l'enllaç URL","other":"<altre>","popupDependent":"Depenent (Netscape)","popupFeatures":"Característiques finestra popup","popupFullScreen":"Pantalla completa (IE)","popupLeft":"Posició esquerra","popupLocationBar":"Barra d'adreça","popupMenuBar":"Barra de menú","popupResizable":"Redimensionable","popupScrollBars":"Barres d'scroll","popupStatusBar":"Barra d'estat","popupToolbar":"Barra d'eines","popupTop":"Posició dalt","rel":"Relació","selectAnchor":"Selecciona una àncora","styles":"Estil","tabIndex":"Index de Tab","target":"Destí","targetFrame":"<marc>","targetFrameName":"Nom del marc de destí","targetPopup":"<finestra emergent>","targetPopupName":"Nom finestra popup","title":"Enllaç","toAnchor":"Àncora en aquesta pàgina","toEmail":"Correu electrònic","toUrl":"URL","toolbar":"Insereix/Edita enllaç","type":"Tipus d'enllaç","unlink":"Elimina l'enllaç","upload":"Puja"},"list":{"bulletedlist":"Llista de pics","numberedlist":"Llista numerada"},"magicline":{"title":"Insereix el paràgraf aquí"},"maximize":{"maximize":"Maximitza","minimize":"Minimitza"},"pastefromword":{"confirmCleanup":"El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?","error":"No ha estat possible netejar les dades enganxades degut a un error intern","title":"Enganxa des del Word","toolbar":"Enganxa des del Word"},"pastetext":{"button":"Enganxa com a text no formatat","title":"Enganxa com a text no formatat"},"removeformat":{"toolbar":"Elimina Format"},"specialchar":{"options":"Opcions de caràcters especials","title":"Selecciona el caràcter especial","toolbar":"Insereix caràcter especial"},"stylescombo":{"label":"Estil","panelTitle":"Estils de format","panelTitle1":"Estils de bloc","panelTitle2":"Estils incrustats","panelTitle3":"Estils d'objecte"},"table":{"border":"Mida vora","caption":"Títol","cell":{"menu":"Cel·la","insertBefore":"Insereix abans","insertAfter":"Insereix després","deleteCell":"Suprimeix","merge":"Fusiona","mergeRight":"Fusiona a la dreta","mergeDown":"Fusiona avall","splitHorizontal":"Divideix horitzontalment","splitVertical":"Divideix verticalment","title":"Propietats de la cel·la","cellType":"Tipus de cel·la","rowSpan":"Expansió de files","colSpan":"Expansió de columnes","wordWrap":"Ajustar al contingut","hAlign":"Alineació Horizontal","vAlign":"Alineació Vertical","alignBaseline":"A la línia base","bgColor":"Color de fons","borderColor":"Color de la vora","data":"Dades","header":"Capçalera","yes":"Sí","no":"No","invalidWidth":"L'amplada de cel·la ha de ser un nombre.","invalidHeight":"L'alçada de cel·la ha de ser un nombre.","invalidRowSpan":"L'expansió de files ha de ser un nombre enter.","invalidColSpan":"L'expansió de columnes ha de ser un nombre enter.","chooseColor":"Trieu"},"cellPad":"Encoixinament de cel·les","cellSpace":"Espaiat de cel·les","column":{"menu":"Columna","insertBefore":"Insereix columna abans de","insertAfter":"Insereix columna darrera","deleteColumn":"Suprimeix una columna"},"columns":"Columnes","deleteTable":"Suprimeix la taula","headers":"Capçaleres","headersBoth":"Ambdues","headersColumn":"Primera columna","headersNone":"Cap","headersRow":"Primera fila","invalidBorder":"El gruix de la vora ha de ser un nombre.","invalidCellPadding":"L'encoixinament de cel·la ha de ser un nombre.","invalidCellSpacing":"L'espaiat de cel·la ha de ser un nombre.","invalidCols":"El nombre de columnes ha de ser un nombre major que 0.","invalidHeight":"L'alçada de la taula ha de ser un nombre.","invalidRows":"El nombre de files ha de ser un nombre major que 0.","invalidWidth":"L'amplada de la taula ha de ser un nombre.","menu":"Propietats de la taula","row":{"menu":"Fila","insertBefore":"Insereix fila abans de","insertAfter":"Insereix fila darrera","deleteRow":"Suprimeix una fila"},"rows":"Files","summary":"Resum","title":"Propietats de la taula","toolbar":"Taula","widthPc":"percentatge","widthPx":"píxels","widthUnit":"unitat d'amplada"},"contextmenu":{"options":"Opcions del menú contextual"},"toolbar":{"toolbarCollapse":"Redueix la barra d'eines","toolbarExpand":"Amplia la barra d'eines","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor de barra d'eines"},"undo":{"redo":"Refés","undo":"Desfés"},"justify":{"block":"Justificat","center":"Centrat","left":"Alinea a l'esquerra","right":"Alinea a la dreta"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/cs.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/cs.js new file mode 100755 index 0000000000..119a17951c --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/cs.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['cs']={"editor":"Textový editor","editorPanel":"Panel textového editoru","common":{"editorHelp":"Stiskněte ALT 0 pro nápovědu","browseServer":"Vybrat na serveru","url":"URL","protocol":"Protokol","upload":"Odeslat","uploadSubmit":"Odeslat na server","image":"Obrázek","flash":"Flash","form":"Formulář","checkbox":"Zaškrtávací políčko","radio":"Přepínač","textField":"Textové pole","textarea":"Textová oblast","hiddenField":"Skryté pole","button":"Tlačítko","select":"Seznam","imageButton":"Obrázkové tlačítko","notSet":"<nenastaveno>","id":"Id","name":"Jméno","langDir":"Směr jazyka","langDirLtr":"Zleva doprava (LTR)","langDirRtl":"Zprava doleva (RTL)","langCode":"Kód jazyka","longDescr":"Dlouhý popis URL","cssClass":"Třída stylu","advisoryTitle":"Pomocný titulek","cssStyle":"Styl","ok":"OK","cancel":"Zrušit","close":"Zavřít","preview":"Náhled","resize":"Uchopit pro změnu velikosti","generalTab":"Obecné","advancedTab":"Rozšířené","validateNumberFailed":"Zadaná hodnota není číselná.","confirmNewPage":"Jakékoliv neuložené změny obsahu budou ztraceny. Skutečně chcete otevřít novou stránku?","confirmCancel":"Některá z nastavení byla změněna. Skutečně chcete zavřít dialogové okno?","options":"Nastavení","target":"Cíl","targetNew":"Nové okno (_blank)","targetTop":"Okno nejvyšší úrovně (_top)","targetSelf":"Stejné okno (_self)","targetParent":"Rodičovské okno (_parent)","langDirLTR":"Zleva doprava (LTR)","langDirRTL":"Zprava doleva (RTL)","styles":"Styly","cssClasses":"Třídy stylů","width":"Šířka","height":"Výška","align":"Zarovnání","alignLeft":"Vlevo","alignRight":"Vpravo","alignCenter":"Na střed","alignJustify":"Zarovnat do bloku","alignTop":"Nahoru","alignMiddle":"Na střed","alignBottom":"Dolů","alignNone":"Žádné","invalidValue":"Neplatná hodnota.","invalidHeight":"Zadaná výška musí být číslo.","invalidWidth":"Šířka musí být číslo.","invalidCssLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry CSS (px, %, in, cm, mm, em, ex, pt, nebo pc).","invalidHtmlLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry HTML (px nebo %).","invalidInlineStyle":"Hodnota určená pro řádkový styl se musí skládat z jedné nebo více n-tic ve formátu \"název : hodnota\", oddělené středníky","cssLengthTooltip":"Zadejte číslo jako hodnotu v pixelech nebo číslo s platnou jednotkou CSS (px, %, v cm, mm, em, ex, pt, nebo pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupné</span>"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Přeškrtnuté","subscript":"Dolní index","superscript":"Horní index","underline":"Podtržené"},"clipboard":{"copy":"Kopírovat","copyError":"Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+C).","cut":"Vyjmout","cutError":"Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+X).","paste":"Vložit","pasteArea":"Oblast vkládání","pasteMsg":"Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stiskněte <STRONG>OK</STRONG>.","securityMsg":"Z důvodů nastavení bezpečnosti vašeho prohlížeče nemůže editor přistupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.","title":"Vložit"},"button":{"selectedLabel":"%1 (Vybráno)"},"colorbutton":{"auto":"Automaticky","bgColorTitle":"Barva pozadí","colors":{"000":"Černá","800000":"Kaštanová","8B4513":"Sedlová hněď","2F4F4F":"Tmavě bledě šedá","008080":"Čírka","000080":"Námořnická modř","4B0082":"Inkoustová","696969":"Tmavě šedá","B22222":"Pálená cihla","A52A2A":"Hnědá","DAA520":"Zlatý prut","006400":"Tmavě zelená","40E0D0":"Tyrkisová","0000CD":"Středně modrá","800080":"Purpurová","808080":"Šedá","F00":"Červená","FF8C00":"Tmavě oranžová","FFD700":"Zlatá","008000":"Zelená","0FF":"Azurová","00F":"Modrá","EE82EE":"Fialová","A9A9A9":"Kalně šedá","FFA07A":"Světle lososová","FFA500":"Oranžová","FFFF00":"Žlutá","00FF00":"Limetková","AFEEEE":"Bledě tyrkisová","ADD8E6":"Světle modrá","DDA0DD":"Švestková","D3D3D3":"Světle šedá","FFF0F5":"Levandulově ruměnná","FAEBD7":"Antická bílá","FFFFE0":"Světle žlutá","F0FFF0":"Medová rosa","F0FFFF":"Azurová","F0F8FF":"Alenčina modrá","E6E6FA":"Levandulová","FFF":"Bílá"},"more":"Více barev...","panelTitle":"Barvy","textColorTitle":"Barva textu"},"colordialog":{"clear":"Vyčistit","highlight":"Zvýraznit","options":"Nastavení barvy","selected":"Vybráno","title":"Výběr barvy"},"elementspath":{"eleLabel":"Cesta objektu","eleTitle":"%1 objekt"},"font":{"fontSize":{"label":"Velikost","voiceLabel":"Velikost písma","panelTitle":"Velikost"},"label":"Písmo","panelTitle":"Písmo","voiceLabel":"Písmo"},"format":{"label":"Formát","panelTitle":"Formát","tag_address":"Adresa","tag_div":"Normální (DIV)","tag_h1":"Nadpis 1","tag_h2":"Nadpis 2","tag_h3":"Nadpis 3","tag_h4":"Nadpis 4","tag_h5":"Nadpis 5","tag_h6":"Nadpis 6","tag_p":"Normální","tag_pre":"Naformátováno"},"horizontalrule":{"toolbar":"Vložit vodorovnou linku"},"indent":{"indent":"Zvětšit odsazení","outdent":"Zmenšit odsazení"},"fakeobjects":{"anchor":"Záložka","flash":"Flash animace","hiddenfield":"Skryté pole","iframe":"IFrame","unknown":"Neznámý objekt"},"link":{"acccessKey":"Přístupový klíč","advanced":"Rozšířené","advisoryContentType":"Pomocný typ obsahu","advisoryTitle":"Pomocný titulek","anchor":{"toolbar":"Záložka","menu":"Vlastnosti záložky","title":"Vlastnosti záložky","name":"Název záložky","errorName":"Zadejte prosím název záložky","remove":"Odstranit záložku"},"anchorId":"Podle Id objektu","anchorName":"Podle jména kotvy","charset":"Přiřazená znaková sada","cssClasses":"Třída stylu","emailAddress":"E-mailová adresa","emailBody":"Tělo zprávy","emailSubject":"Předmět zprávy","id":"Id","info":"Informace o odkazu","langCode":"Kód jazyka","langDir":"Směr jazyka","langDirLTR":"Zleva doprava (LTR)","langDirRTL":"Zprava doleva (RTL)","menu":"Změnit odkaz","name":"Jméno","noAnchors":"(Ve stránce není definována žádná kotva!)","noEmail":"Zadejte prosím e-mailovou adresu","noUrl":"Zadejte prosím URL odkazu","other":"<jiný>","popupDependent":"Závislost (Netscape)","popupFeatures":"Vlastnosti vyskakovacího okna","popupFullScreen":"Celá obrazovka (IE)","popupLeft":"Levý okraj","popupLocationBar":"Panel umístění","popupMenuBar":"Panel nabídky","popupResizable":"Umožňující měnit velikost","popupScrollBars":"Posuvníky","popupStatusBar":"Stavový řádek","popupToolbar":"Panel nástrojů","popupTop":"Horní okraj","rel":"Vztah","selectAnchor":"Vybrat kotvu","styles":"Styl","tabIndex":"Pořadí prvku","target":"Cíl","targetFrame":"<rámec>","targetFrameName":"Název cílového rámu","targetPopup":"<vyskakovací okno>","targetPopupName":"Název vyskakovacího okna","title":"Odkaz","toAnchor":"Kotva v této stránce","toEmail":"E-mail","toUrl":"URL","toolbar":"Odkaz","type":"Typ odkazu","unlink":"Odstranit odkaz","upload":"Odeslat"},"list":{"bulletedlist":"Odrážky","numberedlist":"Číslování"},"magicline":{"title":"zde vložit odstavec"},"maximize":{"maximize":"Maximalizovat","minimize":"Minimalizovat"},"pastefromword":{"confirmCleanup":"Jak je vidět, vkládaný text je kopírován z Wordu. Chcete jej před vložením vyčistit?","error":"Z důvodu vnitřní chyby nebylo možné provést vyčištění vkládaného textu.","title":"Vložit z Wordu","toolbar":"Vložit z Wordu"},"pastetext":{"button":"Vložit jako čistý text","title":"Vložit jako čistý text"},"removeformat":{"toolbar":"Odstranit formátování"},"specialchar":{"options":"Nastavení speciálních znaků","title":"Výběr speciálního znaku","toolbar":"Vložit speciální znaky"},"stylescombo":{"label":"Styl","panelTitle":"Formátovací styly","panelTitle1":"Blokové styly","panelTitle2":"Řádkové styly","panelTitle3":"Objektové styly"},"table":{"border":"Ohraničení","caption":"Popis","cell":{"menu":"Buňka","insertBefore":"Vložit buňku před","insertAfter":"Vložit buňku za","deleteCell":"Smazat buňky","merge":"Sloučit buňky","mergeRight":"Sloučit doprava","mergeDown":"Sloučit dolů","splitHorizontal":"Rozdělit buňky vodorovně","splitVertical":"Rozdělit buňky svisle","title":"Vlastnosti buňky","cellType":"Typ buňky","rowSpan":"Spojit řádky","colSpan":"Spojit sloupce","wordWrap":"Zalamování","hAlign":"Vodorovné zarovnání","vAlign":"Svislé zarovnání","alignBaseline":"Na účaří","bgColor":"Barva pozadí","borderColor":"Barva okraje","data":"Data","header":"Hlavička","yes":"Ano","no":"Ne","invalidWidth":"Šířka buňky musí být číslo.","invalidHeight":"Zadaná výška buňky musí být číslená.","invalidRowSpan":"Zadaný počet sloučených řádků musí být celé číslo.","invalidColSpan":"Zadaný počet sloučených sloupců musí být celé číslo.","chooseColor":"Výběr"},"cellPad":"Odsazení obsahu v buňce","cellSpace":"Vzdálenost buněk","column":{"menu":"Sloupec","insertBefore":"Vložit sloupec před","insertAfter":"Vložit sloupec za","deleteColumn":"Smazat sloupec"},"columns":"Sloupce","deleteTable":"Smazat tabulku","headers":"Záhlaví","headersBoth":"Obojí","headersColumn":"První sloupec","headersNone":"Žádné","headersRow":"První řádek","invalidBorder":"Zdaná velikost okraje musí být číselná.","invalidCellPadding":"Zadané odsazení obsahu v buňce musí být číselné.","invalidCellSpacing":"Zadaná vzdálenost buněk musí být číselná.","invalidCols":"Počet sloupců musí být číslo větší než 0.","invalidHeight":"Zadaná výška tabulky musí být číselná.","invalidRows":"Počet řádků musí být číslo větší než 0.","invalidWidth":"Šířka tabulky musí být číslo.","menu":"Vlastnosti tabulky","row":{"menu":"Řádek","insertBefore":"Vložit řádek před","insertAfter":"Vložit řádek za","deleteRow":"Smazat řádky"},"rows":"Řádky","summary":"Souhrn","title":"Vlastnosti tabulky","toolbar":"Tabulka","widthPc":"procent","widthPx":"bodů","widthUnit":"jednotka šířky"},"contextmenu":{"options":"Nastavení kontextové nabídky"},"toolbar":{"toolbarCollapse":"Skrýt panel nástrojů","toolbarExpand":"Zobrazit panel nástrojů","toolbarGroups":{"document":"Dokument","clipboard":"Schránka/Zpět","editing":"Úpravy","forms":"Formuláře","basicstyles":"Základní styly","paragraph":"Odstavec","links":"Odkazy","insert":"Vložit","styles":"Styly","colors":"Barvy","tools":"Nástroje"},"toolbars":"Panely nástrojů editoru"},"undo":{"redo":"Znovu","undo":"Zpět"},"justify":{"block":"Zarovnat do bloku","center":"Zarovnat na střed","left":"Zarovnat vlevo","right":"Zarovnat vpravo"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/cy.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/cy.js new file mode 100755 index 0000000000..d4c3e745fd --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/cy.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['cy']={"editor":"Golygydd Testun Cyfoethog","editorPanel":"Panel Golygydd Testun Cyfoethog","common":{"editorHelp":"Gwasgwch ALT 0 am gymorth","browseServer":"Pori'r Gweinydd","url":"URL","protocol":"Protocol","upload":"Lanlwytho","uploadSubmit":"Anfon i'r Gweinydd","image":"Delwedd","flash":"Flash","form":"Ffurflen","checkbox":"Blwch ticio","radio":"Botwm Radio","textField":"Maes Testun","textarea":"Ardal Testun","hiddenField":"Maes Cudd","button":"Botwm","select":"Maes Dewis","imageButton":"Botwm Delwedd","notSet":"<heb osod>","id":"Id","name":"Name","langDir":"Cyfeiriad Iaith","langDirLtr":"Chwith i'r Dde (LTR)","langDirRtl":"Dde i'r Chwith (RTL)","langCode":"Cod Iaith","longDescr":"URL Disgrifiad Hir","cssClass":"Dosbarthiadau Dalen Arddull","advisoryTitle":"Teitl Cynghorol","cssStyle":"Arddull","ok":"Iawn","cancel":"Diddymu","close":"Cau","preview":"Rhagolwg","resize":"Ailfeintio","generalTab":"Cyffredinol","advancedTab":"Uwch","validateNumberFailed":"'Dyw'r gwerth hwn ddim yn rhif.","confirmNewPage":"Byddwch chi'n colli unrhyw newidiadau i'r cynnwys sydd heb eu cadw. Ydych am barhau i lwytho tudalen newydd?","confirmCancel":"Cafodd rhai o'r opsiynau eu newid. Ydych chi wir am gau'r deialog?","options":"Opsiynau","target":"Targed","targetNew":"Ffenest Newydd (_blank)","targetTop":"Ffenest ar y Brig (_top)","targetSelf":"Yr un Ffenest (_self)","targetParent":"Ffenest y Rhiant (_parent)","langDirLTR":"Chwith i'r Dde (LTR)","langDirRTL":"Dde i'r Chwith (RTL)","styles":"Arddull","cssClasses":"Dosbarthiadau Dalen Arddull","width":"Lled","height":"Uchder","align":"Alinio","alignLeft":"Chwith","alignRight":"Dde","alignCenter":"Canol","alignJustify":"Unioni","alignTop":"Brig","alignMiddle":"Canol","alignBottom":"Gwaelod","alignNone":"None","invalidValue":"Gwerth annilys.","invalidHeight":"Mae'n rhaid i'r uchder fod yn rhif.","invalidWidth":"Mae'n rhaid i'r lled fod yn rhif.","invalidCssLength":"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad CSS dilys (px, %, in, cm, mm, em, ex, pt, neu pc).","invalidHtmlLength":"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad HTML dilys (px neu %).","invalidInlineStyle":"Mae'n rhaid i'r gwerth ar gyfer arddull mewn-llinell gynnwys un set neu fwy ar y fformat \"enw : gwerth\", wedi'u gwahanu gyda hanner colon.","cssLengthTooltip":"Rhowch rif am werth mewn picsel neu rhif gydag uned CSS dilys (px, %, in, cm, mm, em, pt neu pc).","unavailable":"%1<span class=\"cke_accessibility\">, ddim ar gael</span>"},"basicstyles":{"bold":"Bras","italic":"Italig","strike":"Llinell Trwyddo","subscript":"Is-sgript","superscript":"Uwchsgript","underline":"Tanlinellu"},"clipboard":{"copy":"Copïo","copyError":"'Dyw gosodiadau diogelwch eich porwr ddim yn caniatàu'r golygydd i gynnal 'gweithredoedd copïo' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+C).","cut":"Torri","cutError":"Nid yw gosodiadau diogelwch eich porwr yn caniatàu'r golygydd i gynnal 'gweithredoedd torri' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+X).","paste":"Gludo","pasteArea":"Ardal Gludo","pasteMsg":"Gludwch i mewn i'r blwch canlynol gan ddefnyddio'r bysellfwrdd (<strong>Ctrl/Cmd+V</strong>) a phwyso <strong>Iawn</strong>.","securityMsg":"Oherwydd gosodiadau diogelwch eich porwr, 'dyw'r porwr ddim yn gallu ennill mynediad i'r data ar y clipfwrdd yn uniongyrchol. Mae angen i chi ei ludo eto i'r ffenestr hon.","title":"Gludo"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Awtomatig","bgColorTitle":"Lliw Cefndir","colors":{"000":"Du","800000":"Marwn","8B4513":"Brown Cyfrwy","2F4F4F":"Llechen Tywyll","008080":"Corhwyad","000080":"Nefi","4B0082":"Indigo","696969":"Llwyd Tywyll","B22222":"Bric Tân","A52A2A":"Brown","DAA520":"Rhoden Aur","006400":"Gwyrdd Tywyll","40E0D0":"Gwyrddlas","0000CD":"Glas Canolig","800080":"Porffor","808080":"Llwyd","F00":"Coch","FF8C00":"Oren Tywyll","FFD700":"Aur","008000":"Gwyrdd","0FF":"Cyan","00F":"Glas","EE82EE":"Fioled","A9A9A9":"Llwyd Pwl","FFA07A":"Samwn Golau","FFA500":"Oren","FFFF00":"Melyn","00FF00":"Leim","AFEEEE":"Gwyrddlas Golau","ADD8E6":"Glas Golau","DDA0DD":"Eirinen","D3D3D3":"Llwyd Golau","FFF0F5":"Gwrid Lafant","FAEBD7":"Gwyn Hynafol","FFFFE0":"Melyn Golau","F0FFF0":"Melwn Gwyrdd Golau","F0FFFF":"Aswr","F0F8FF":"Glas Alys","E6E6FA":"Lafant","FFF":"Gwyn"},"more":"Mwy o Liwiau...","panelTitle":"Lliwiau","textColorTitle":"Lliw Testun"},"colordialog":{"clear":"Clirio","highlight":"Uwcholeuo","options":"Opsiynau Lliw","selected":"Lliw a Ddewiswyd","title":"Dewis lliw"},"elementspath":{"eleLabel":"Llwybr elfennau","eleTitle":"Elfen %1"},"font":{"fontSize":{"label":"Maint","voiceLabel":"Maint y Ffont","panelTitle":"Maint y Ffont"},"label":"Ffont","panelTitle":"Enw'r Ffont","voiceLabel":"Ffont"},"format":{"label":"Fformat","panelTitle":"Fformat Paragraff","tag_address":"Cyfeiriad","tag_div":"Normal (DIV)","tag_h1":"Pennawd 1","tag_h2":"Pennawd 2","tag_h3":"Pennawd 3","tag_h4":"Pennawd 4","tag_h5":"Pennawd 5","tag_h6":"Pennawd 6","tag_p":"Normal","tag_pre":"Wedi'i Fformatio"},"horizontalrule":{"toolbar":"Mewnosod Llinell Lorweddol"},"indent":{"indent":"Cynyddu'r Mewnoliad","outdent":"Lleihau'r Mewnoliad"},"fakeobjects":{"anchor":"Angor","flash":"Animeiddiant Flash","hiddenfield":"Maes Cudd","iframe":"IFrame","unknown":"Gwrthrych Anhysbys"},"link":{"acccessKey":"Allwedd Mynediad","advanced":"Uwch","advisoryContentType":"Math y Cynnwys Cynghorol","advisoryTitle":"Teitl Cynghorol","anchor":{"toolbar":"Angor","menu":"Golygu'r Angor","title":"Priodweddau'r Angor","name":"Enw'r Angor","errorName":"Teipiwch enw'r angor","remove":"Tynnwch yr Angor"},"anchorId":"Gan Id yr Elfen","anchorName":"Gan Enw'r Angor","charset":"Set Nodau'r Adnodd Cysylltiedig","cssClasses":"Dosbarthiadau Dalen Arddull","emailAddress":"Cyfeiriad E-Bost","emailBody":"Corff y Neges","emailSubject":"Testun y Neges","id":"Id","info":"Gwyb y Ddolen","langCode":"Cod Iaith","langDir":"Cyfeiriad Iaith","langDirLTR":"Chwith i'r Dde (LTR)","langDirRTL":"Dde i'r Chwith (RTL)","menu":"Golygu Dolen","name":"Enw","noAnchors":"(Dim angorau ar gael yn y ddogfen)","noEmail":"Teipiwch gyfeiriad yr e-bost","noUrl":"Teipiwch URL y ddolen","other":"<eraill>","popupDependent":"Dibynnol (Netscape)","popupFeatures":"Nodweddion Ffenestr Bop","popupFullScreen":"Sgrin Llawn (IE)","popupLeft":"Safle Chwith","popupLocationBar":"Bar Safle","popupMenuBar":"Dewislen","popupResizable":"Ailfeintiol","popupScrollBars":"Barrau Sgrolio","popupStatusBar":"Bar Statws","popupToolbar":"Bar Offer","popupTop":"Safle Top","rel":"Perthynas","selectAnchor":"Dewiswch Angor","styles":"Arddull","tabIndex":"Indecs Tab","target":"Targed","targetFrame":"<ffrâm>","targetFrameName":"Enw Ffrâm y Targed","targetPopup":"<ffenestr bop>","targetPopupName":"Enw Ffenestr Bop","title":"Dolen","toAnchor":"Dolen at angor yn y testun","toEmail":"E-bost","toUrl":"URL","toolbar":"Dolen","type":"Math y Ddolen","unlink":"Datgysylltu","upload":"Lanlwytho"},"list":{"bulletedlist":"Mewnosod/Tynnu Rhestr Bwled","numberedlist":"Mewnosod/Tynnu Rhestr Rhifol"},"magicline":{"title":"Mewnosod paragraff yma"},"maximize":{"maximize":"Mwyhau","minimize":"Lleihau"},"pastefromword":{"confirmCleanup":"Mae'r testun rydych chi am ludo wedi'i gopïo o Word. Ydych chi am ei lanhau cyn ei ludo?","error":"Doedd dim modd glanhau y data a ludwyd oherwydd gwall mewnol","title":"Gludo o Word","toolbar":"Gludo o Word"},"pastetext":{"button":"Gludo fel testun plaen","title":"Gludo fel Testun Plaen"},"removeformat":{"toolbar":"Tynnu Fformat"},"specialchar":{"options":"Opsiynau Nodau Arbennig","title":"Dewis Nod Arbennig","toolbar":"Mewnosod Nod Arbennig"},"stylescombo":{"label":"Arddulliau","panelTitle":"Arddulliau Fformatio","panelTitle1":"Arddulliau Bloc","panelTitle2":"Arddulliau Mewnol","panelTitle3":"Arddulliau Gwrthrych"},"table":{"border":"Maint yr Ymyl","caption":"Pennawd","cell":{"menu":"Cell","insertBefore":"Mewnosod Cell Cyn","insertAfter":"Mewnosod Cell Ar Ôl","deleteCell":"Dileu Celloedd","merge":"Cyfuno Celloedd","mergeRight":"Cyfuno i'r Dde","mergeDown":"Cyfuno i Lawr","splitHorizontal":"Hollti'r Gell yn Lorweddol","splitVertical":"Hollti'r Gell yn Fertigol","title":"Priodweddau'r Gell","cellType":"Math y Gell","rowSpan":"Rhychwant Rhesi","colSpan":"Rhychwant Colofnau","wordWrap":"Lapio Geiriau","hAlign":"Aliniad Llorweddol","vAlign":"Aliniad Fertigol","alignBaseline":"Baslinell","bgColor":"Lliw Cefndir","borderColor":"Lliw Ymyl","data":"Data","header":"Pennyn","yes":"Ie","no":"Na","invalidWidth":"Mae'n rhaid i led y gell fod yn rhif.","invalidHeight":"Mae'n rhaid i uchder y gell fod yn rhif.","invalidRowSpan":"Mae'n rhaid i rychwant y rhesi fod yn gyfanrif.","invalidColSpan":"Mae'n rhaid i rychwant y colofnau fod yn gyfanrif.","chooseColor":"Dewis"},"cellPad":"Padio'r gell","cellSpace":"Bylchiad y gell","column":{"menu":"Colofn","insertBefore":"Mewnosod Colofn Cyn","insertAfter":"Mewnosod Colofn Ar Ôl","deleteColumn":"Dileu Colofnau"},"columns":"Colofnau","deleteTable":"Dileu Tabl","headers":"Penynnau","headersBoth":"Y Ddau","headersColumn":"Colofn gyntaf","headersNone":"Dim","headersRow":"Rhes gyntaf","invalidBorder":"Mae'n rhaid i faint yr ymyl fod yn rhif.","invalidCellPadding":"Mae'n rhaid i badiad y gell fod yn rhif positif.","invalidCellSpacing":"Mae'n rhaid i fylchiad y gell fod yn rhif positif.","invalidCols":"Mae'n rhaid cael o leiaf un golofn.","invalidHeight":"Mae'n rhaid i uchder y tabl fod yn rhif.","invalidRows":"Mae'n rhaid cael o leiaf un rhes.","invalidWidth":"Mae'n rhaid i led y tabl fod yn rhif.","menu":"Priodweddau'r Tabl","row":{"menu":"Rhes","insertBefore":"Mewnosod Rhes Cyn","insertAfter":"Mewnosod Rhes Ar Ôl","deleteRow":"Dileu Rhesi"},"rows":"Rhesi","summary":"Crynodeb","title":"Priodweddau'r Tabl","toolbar":"Tabl","widthPc":"y cant","widthPx":"picsel","widthUnit":"uned lled"},"contextmenu":{"options":"Opsiynau Dewislen Cyd-destun"},"toolbar":{"toolbarCollapse":"Cyfangu'r Bar Offer","toolbarExpand":"Ehangu'r Bar Offer","toolbarGroups":{"document":"Dogfen","clipboard":"Clipfwrdd/Dadwneud","editing":"Golygu","forms":"Ffurflenni","basicstyles":"Arddulliau Sylfaenol","paragraph":"Paragraff","links":"Dolenni","insert":"Mewnosod","styles":"Arddulliau","colors":"Lliwiau","tools":"Offer"},"toolbars":"Bariau offer y golygydd"},"undo":{"redo":"Ailwneud","undo":"Dadwneud"},"justify":{"block":"Unioni","center":"Alinio i'r Canol","left":"Alinio i'r Chwith","right":"Alinio i'r Dde"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/da.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/da.js new file mode 100755 index 0000000000..81996ae5ca --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/da.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['da']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tryk ALT 0 for hjælp","browseServer":"Gennemse...","url":"URL","protocol":"Protokol","upload":"Upload","uploadSubmit":"Upload","image":"Indsæt billede","flash":"Indsæt Flash","form":"Indsæt formular","checkbox":"Indsæt afkrydsningsfelt","radio":"Indsæt alternativknap","textField":"Indsæt tekstfelt","textarea":"Indsæt tekstboks","hiddenField":"Indsæt skjult felt","button":"Indsæt knap","select":"Indsæt liste","imageButton":"Indsæt billedknap","notSet":"<intet valgt>","id":"Id","name":"Navn","langDir":"Tekstretning","langDirLtr":"Fra venstre mod højre (LTR)","langDirRtl":"Fra højre mod venstre (RTL)","langCode":"Sprogkode","longDescr":"Udvidet beskrivelse","cssClass":"Typografiark (CSS)","advisoryTitle":"Titel","cssStyle":"Typografi (CSS)","ok":"OK","cancel":"Annullér","close":"Luk","preview":"Forhåndsvisning","resize":"Træk for at skalere","generalTab":"Generelt","advancedTab":"Avanceret","validateNumberFailed":"Værdien er ikke et tal.","confirmNewPage":"Alt indhold, der ikke er blevet gemt, vil gå tabt. Er du sikker på, at du vil indlæse en ny side?","confirmCancel":"Nogle af indstillingerne er blevet ændret. Er du sikker på, at du vil lukke vinduet?","options":"Vis muligheder","target":"Mål","targetNew":"Nyt vindue (_blank)","targetTop":"Øverste vindue (_top)","targetSelf":"Samme vindue (_self)","targetParent":"Samme vindue (_parent)","langDirLTR":"Venstre til højre (LTR)","langDirRTL":"Højre til venstre (RTL)","styles":"Style","cssClasses":"Stylesheetklasser","width":"Bredde","height":"Højde","align":"Justering","alignLeft":"Venstre","alignRight":"Højre","alignCenter":"Centreret","alignJustify":"Lige margener","alignTop":"Øverst","alignMiddle":"Centreret","alignBottom":"Nederst","alignNone":"Ingen","invalidValue":"Ugyldig værdi.","invalidHeight":"Højde skal være et tal.","invalidWidth":"Bredde skal være et tal.","invalidCssLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed (px eller %).","invalidInlineStyle":"Værdien specificeret for inline style skal indeholde en eller flere elementer med et format som \"name:value\", separeret af semikoloner","cssLengthTooltip":"Indsæt en numerisk værdi i pixel eller nummer med en gyldig CSS værdi (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, ikke tilgængelig</span>"},"basicstyles":{"bold":"Fed","italic":"Kursiv","strike":"Gennemstreget","subscript":"Sænket skrift","superscript":"Hævet skrift","underline":"Understreget"},"clipboard":{"copy":"Kopiér","copyError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at kopiere teksten (Ctrl/Cmd+C).","cut":"Klip","cutError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at klippe teksten (Ctrl/Cmd+X).","paste":"Indsæt","pasteArea":"Indsæt område","pasteMsg":"Indsæt i feltet herunder (<STRONG>Ctrl/Cmd+V</STRONG>) og klik på <STRONG>OK</STRONG>.","securityMsg":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Du skal indsætte udklipsholderens indhold i dette vindue igen.","title":"Indsæt"},"button":{"selectedLabel":"%1 (Valgt)"},"colorbutton":{"auto":"Automatisk","bgColorTitle":"Baggrundsfarve","colors":{"000":"Sort","800000":"Mørkerød","8B4513":"Mørk orange","2F4F4F":"Dark Slate Grå","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Mørkegrå","B22222":"Scarlet / Rød","A52A2A":"Brun","DAA520":"Guld","006400":"Mørkegrøn","40E0D0":"Tyrkis","0000CD":"Mellemblå","800080":"Lilla","808080":"Grå","F00":"Rød","FF8C00":"Mørk orange","FFD700":"Guld","008000":"Grøn","0FF":"Cyan","00F":"Blå","EE82EE":"Violet","A9A9A9":"Matgrå","FFA07A":"Laksefarve","FFA500":"Orange","FFFF00":"Gul","00FF00":"Lime","AFEEEE":"Mat tyrkis","ADD8E6":"Lyseblå","DDA0DD":"Plum","D3D3D3":"Lysegrå","FFF0F5":"Lavender Blush","FAEBD7":"Antikhvid","FFFFE0":"Lysegul","F0FFF0":"Gul / Beige","F0FFFF":"Himmeblå","F0F8FF":"Alice blue","E6E6FA":"Lavendel","FFF":"Hvid"},"more":"Flere farver...","panelTitle":"Farver","textColorTitle":"Tekstfarve"},"colordialog":{"clear":"Nulstil","highlight":"Markér","options":"Farvemuligheder","selected":"Valgt farve","title":"Vælg farve"},"elementspath":{"eleLabel":"Sti på element","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Skriftstørrelse","voiceLabel":"Skriftstørrelse","panelTitle":"Skriftstørrelse"},"label":"Skrifttype","panelTitle":"Skrifttype","voiceLabel":"Skrifttype"},"format":{"label":"Formatering","panelTitle":"Formatering","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formateret"},"horizontalrule":{"toolbar":"Indsæt vandret streg"},"indent":{"indent":"Forøg indrykning","outdent":"Formindsk indrykning"},"fakeobjects":{"anchor":"Anker","flash":"Flashanimation","hiddenfield":"Skjult felt","iframe":"Iframe","unknown":"Ukendt objekt"},"link":{"acccessKey":"Genvejstast","advanced":"Avanceret","advisoryContentType":"Indholdstype","advisoryTitle":"Titel","anchor":{"toolbar":"Indsæt/redigér bogmærke","menu":"Egenskaber for bogmærke","title":"Egenskaber for bogmærke","name":"Bogmærkenavn","errorName":"Indtast bogmærkenavn","remove":"Fjern bogmærke"},"anchorId":"Efter element-Id","anchorName":"Efter ankernavn","charset":"Tegnsæt","cssClasses":"Typografiark","emailAddress":"E-mailadresse","emailBody":"Besked","emailSubject":"Emne","id":"Id","info":"Generelt","langCode":"Tekstretning","langDir":"Tekstretning","langDirLTR":"Fra venstre mod højre (LTR)","langDirRTL":"Fra højre mod venstre (RTL)","menu":"Redigér hyperlink","name":"Navn","noAnchors":"(Ingen bogmærker i dokumentet)","noEmail":"Indtast e-mailadresse!","noUrl":"Indtast hyperlink-URL!","other":"<anden>","popupDependent":"Koblet/dependent (Netscape)","popupFeatures":"Egenskaber for popup","popupFullScreen":"Fuld skærm (IE)","popupLeft":"Position fra venstre","popupLocationBar":"Adresselinje","popupMenuBar":"Menulinje","popupResizable":"Justérbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Værktøjslinje","popupTop":"Position fra toppen","rel":"Relation","selectAnchor":"Vælg et anker","styles":"Typografi","tabIndex":"Tabulatorindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Destinationsvinduets navn","targetPopup":"<popup vindue>","targetPopupName":"Popupvinduets navn","title":"Egenskaber for hyperlink","toAnchor":"Bogmærke på denne side","toEmail":"E-mail","toUrl":"URL","toolbar":"Indsæt/redigér hyperlink","type":"Type","unlink":"Fjern hyperlink","upload":"Upload"},"list":{"bulletedlist":"Punktopstilling","numberedlist":"Talopstilling"},"magicline":{"title":"Indsæt afsnit"},"maximize":{"maximize":"Maksimér","minimize":"Minimér"},"pastefromword":{"confirmCleanup":"Den tekst du forsøger at indsætte ser ud til at komme fra Word. Vil du rense teksten før den indsættes?","error":"Det var ikke muligt at fjerne formatteringen på den indsatte tekst grundet en intern fejl","title":"Indsæt fra Word","toolbar":"Indsæt fra Word"},"pastetext":{"button":"Indsæt som ikke-formateret tekst","title":"Indsæt som ikke-formateret tekst"},"removeformat":{"toolbar":"Fjern formatering"},"specialchar":{"options":"Muligheder for specialkarakterer","title":"Vælg symbol","toolbar":"Indsæt symbol"},"stylescombo":{"label":"Typografi","panelTitle":"Formattering på stylesheet","panelTitle1":"Block typografi","panelTitle2":"Inline typografi","panelTitle3":"Object typografi"},"table":{"border":"Rammebredde","caption":"Titel","cell":{"menu":"Celle","insertBefore":"Indsæt celle før","insertAfter":"Indsæt celle efter","deleteCell":"Slet celle","merge":"Flet celler","mergeRight":"Flet til højre","mergeDown":"Flet nedad","splitHorizontal":"Del celle vandret","splitVertical":"Del celle lodret","title":"Celleegenskaber","cellType":"Celletype","rowSpan":"Række span (rows span)","colSpan":"Kolonne span (columns span)","wordWrap":"Tekstombrydning","hAlign":"Vandret justering","vAlign":"Lodret justering","alignBaseline":"Grundlinje","bgColor":"Baggrundsfarve","borderColor":"Rammefarve","data":"Data","header":"Hoved","yes":"Ja","no":"Nej","invalidWidth":"Cellebredde skal være et tal.","invalidHeight":"Cellehøjde skal være et tal.","invalidRowSpan":"Række span skal være et heltal.","invalidColSpan":"Kolonne span skal være et heltal.","chooseColor":"Vælg"},"cellPad":"Cellemargen","cellSpace":"Celleafstand","column":{"menu":"Kolonne","insertBefore":"Indsæt kolonne før","insertAfter":"Indsæt kolonne efter","deleteColumn":"Slet kolonne"},"columns":"Kolonner","deleteTable":"Slet tabel","headers":"Hoved","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første række","invalidBorder":"Rammetykkelse skal være et tal.","invalidCellPadding":"Cellemargen skal være et tal.","invalidCellSpacing":"Celleafstand skal være et tal.","invalidCols":"Antallet af kolonner skal være større end 0.","invalidHeight":"Tabelhøjde skal være et tal.","invalidRows":"Antallet af rækker skal være større end 0.","invalidWidth":"Tabelbredde skal være et tal.","menu":"Egenskaber for tabel","row":{"menu":"Række","insertBefore":"Indsæt række før","insertAfter":"Indsæt række efter","deleteRow":"Slet række"},"rows":"Rækker","summary":"Resumé","title":"Egenskaber for tabel","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"Bredde på enhed"},"contextmenu":{"options":"Muligheder for hjælpemenu"},"toolbar":{"toolbarCollapse":"Sammenklap værktøjslinje","toolbarExpand":"Udvid værktøjslinje","toolbarGroups":{"document":"Dokument","clipboard":"Udklipsholder/Fortryd","editing":"Redigering","forms":"Formularer","basicstyles":"Basis styles","paragraph":"Paragraf","links":"Links","insert":"Indsæt","styles":"Typografier","colors":"Farver","tools":"Værktøjer"},"toolbars":"Editors værktøjslinjer"},"undo":{"redo":"Annullér fortryd","undo":"Fortryd"},"justify":{"block":"Lige margener","center":"Centreret","left":"Venstrestillet","right":"Højrestillet"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/de.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/de.js new file mode 100755 index 0000000000..103d3b71ee --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/de.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['de']={"editor":"WYSIWYG-Editor","editorPanel":"WYSIWYG-Editor-Leiste","common":{"editorHelp":"Drücken Sie ALT 0 für Hilfe","browseServer":"Server durchsuchen","url":"URL","protocol":"Protokoll","upload":"Hochladen","uploadSubmit":"Zum Server senden","image":"Bild","flash":"Flash","form":"Formular","checkbox":"Kontrollbox","radio":"Optionsfeld","textField":"Textfeld","textarea":"Textfeld","hiddenField":"Verstecktes Feld","button":"Schaltfläche","select":"Auswahlfeld","imageButton":"Bildschaltfläche","notSet":"<nicht festgelegt>","id":"Kennung","name":"Name","langDir":"Schreibrichtung","langDirLtr":"Links nach Rechts (LTR)","langDirRtl":"Rechts nach Links (RTL)","langCode":"Sprachcode","longDescr":"Langbeschreibungs-URL","cssClass":"Formatvorlagenklassen","advisoryTitle":"Titel Beschreibung","cssStyle":"Stil","ok":"OK","cancel":"Abbrechen","close":"Schließen","preview":"Vorschau","resize":"Größe ändern","generalTab":"Allgemein","advancedTab":"Erweitert","validateNumberFailed":"Dieser Wert ist keine Nummer.","confirmNewPage":"Alle nicht gespeicherten Änderungen gehen verlohren. Sind Sie sicher die neue Seite zu laden?","confirmCancel":"Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schließen?","options":"Optionen","target":"Zielseite","targetNew":"Neues Fenster (_blank)","targetTop":"Oberstes Fenster (_top)","targetSelf":"Gleiches Fenster (_self)","targetParent":"Oberes Fenster (_parent)","langDirLTR":"Links nach Rechts (LNR)","langDirRTL":"Rechts nach Links (RNL)","styles":"Style","cssClasses":"Stylesheet Klasse","width":"Breite","height":"Höhe","align":"Ausrichtung","alignLeft":"Links","alignRight":"Rechts","alignCenter":"Zentriert","alignJustify":"Blocksatz","alignTop":"Oben","alignMiddle":"Mitte","alignBottom":"Unten","alignNone":"Keine","invalidValue":"Ungültiger Wert.","invalidHeight":"Höhe muss eine Zahl sein.","invalidWidth":"Breite muss eine Zahl sein.","invalidCssLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","invalidHtmlLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte HTML Messeinheit (px oder %).","invalidInlineStyle":"Wert spezifiziert für inline Stilart muss enthalten ein oder mehr Tupels mit dem Format \"Name : Wert\" getrennt mit Semikolons.","cssLengthTooltip":"Gebe eine Zahl ein für ein Wert in pixels oder eine Zahl mit einer korrekten CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","unavailable":"%1<span class=\"cke_accessibility\">, nicht verfügbar</span>"},"basicstyles":{"bold":"Fett","italic":"Kursiv","strike":"Durchgestrichen","subscript":"Tiefgestellt","superscript":"Hochgestellt","underline":"Unterstrichen"},"clipboard":{"copy":"Kopieren","copyError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).","cut":"Ausschneiden","cutError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).","paste":"Einfügen","pasteArea":"Einfügebereich","pasteMsg":"Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.","securityMsg":"Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.","title":"Einfügen"},"button":{"selectedLabel":"%1 (Ausgewählt)"},"colorbutton":{"auto":"Automatisch","bgColorTitle":"Hintergrundfarbe","colors":{"000":"Schwarz","800000":"Kastanienbraun","8B4513":"Braun","2F4F4F":"Dunkles Schiefergrau","008080":"Blaugrün","000080":"Marineblau","4B0082":"Indigo","696969":"Dunkelgrau","B22222":"Ziegelrot","A52A2A":"Braun","DAA520":"Goldgelb","006400":"Dunkelgrün","40E0D0":"Türkis","0000CD":"Mittelblau","800080":"Lila","808080":"Grau","F00":"Rot","FF8C00":"Dunkelorange","FFD700":"Gold","008000":"Grün","0FF":"Cyan","00F":"Blau","EE82EE":"Violett","A9A9A9":"Dunkelgrau","FFA07A":"Helles Lachsrosa","FFA500":"Orange","FFFF00":"Gelb","00FF00":"Lime","AFEEEE":"Blasstürkis","ADD8E6":"Hellblau","DDA0DD":"Pflaumenblau","D3D3D3":"Hellgrau","FFF0F5":"Lavendel","FAEBD7":"Antik Weiß","FFFFE0":"Hellgelb","F0FFF0":"Honigtau","F0FFFF":"Azurblau","F0F8FF":"Alice Blau","E6E6FA":"Lavendel","FFF":"Weiß"},"more":"Weitere Farben...","panelTitle":"Farben","textColorTitle":"Textfarbe"},"colordialog":{"clear":"Entfernen","highlight":"Hervorheben","options":"Farboptionen","selected":"Ausgewählte Farbe","title":"Farbe auswählen"},"elementspath":{"eleLabel":"Elementepfad","eleTitle":"%1 Element"},"font":{"fontSize":{"label":"Größe","voiceLabel":"Schrifgröße","panelTitle":"Schriftgröße"},"label":"Schriftart","panelTitle":"Schriftartname","voiceLabel":"Schriftart"},"format":{"label":"Format","panelTitle":"Absatzformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Überschrift 1","tag_h2":"Überschrift 2","tag_h3":"Überschrift 3","tag_h4":"Überschrift 4","tag_h5":"Überschrift 5","tag_h6":"Überschrift 6","tag_p":"Normal","tag_pre":"Formatiert"},"horizontalrule":{"toolbar":"Horizontale Linie einfügen"},"indent":{"indent":"Einzug erhöhen","outdent":"Einzug verringern"},"fakeobjects":{"anchor":"Anker","flash":"Flash-Animation","hiddenfield":"Verstecktes Feld","iframe":"IFrame","unknown":"Unbekanntes Objekt"},"link":{"acccessKey":"Zugriffstaste","advanced":"Erweitert","advisoryContentType":"Inhaltstyp","advisoryTitle":"Titel Beschreibung","anchor":{"toolbar":"Anker","menu":"Anker bearbeiten","title":"Ankereigenschaften","name":"Ankername","errorName":"Bitte geben Sie den Namen des Ankers ein","remove":"Anker entfernen"},"anchorId":"Nach Elementkennung","anchorName":"Nach Ankername","charset":"Verknüpfter Ressourcenzeichensatz","cssClasses":"Formatvorlagenklasse","emailAddress":"E-Mail-Adresse","emailBody":"Nachrichtentext","emailSubject":"Betreffzeile","id":"Kennung","info":"Linkinfo","langCode":"Sprachcode","langDir":"Schreibrichtung","langDirLTR":"Links nach Rechts (LTR)","langDirRTL":"Rechts nach Links (RTL)","menu":"Link bearbeiten","name":"Name","noAnchors":"(Keine Anker im Dokument vorhanden)","noEmail":"Bitte geben Sie E-Mail-Adresse an","noUrl":"Bitte geben Sie die Link-URL an","other":"<andere>","popupDependent":"Abhängig (Netscape)","popupFeatures":"Pop-up Fenstereigenschaften","popupFullScreen":"Vollbild (IE)","popupLeft":"Linke Position","popupLocationBar":"Adressleiste","popupMenuBar":"Menüleiste","popupResizable":"Größe änderbar","popupScrollBars":"Rollbalken","popupStatusBar":"Statusleiste","popupToolbar":"Werkzeugleiste","popupTop":"Obere Position","rel":"Beziehung","selectAnchor":"Anker auswählen","styles":"Style","tabIndex":"Tab-Index","target":"Zielseite","targetFrame":"<Frame>","targetFrameName":"Ziel-Fenster-Name","targetPopup":"<Pop-up Fenster>","targetPopupName":"Pop-up Fenster-Name","title":"Link","toAnchor":"Anker in dieser Seite","toEmail":"E-Mail","toUrl":"URL","toolbar":"Link einfügen/editieren","type":"Link-Typ","unlink":"Link entfernen","upload":"Hochladen"},"list":{"bulletedlist":"Liste","numberedlist":"Nummerierte Liste einfügen/entfernen"},"magicline":{"title":"Absatz hier einfügen"},"maximize":{"maximize":"Maximieren","minimize":"Minimieren"},"pastefromword":{"confirmCleanup":"Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?","error":"Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen","title":"Aus Word einfügen","toolbar":"Aus Word einfügen"},"pastetext":{"button":"Als Klartext einfügen","title":"Als Klartext einfügen"},"removeformat":{"toolbar":"Formatierung entfernen"},"specialchar":{"options":"Sonderzeichenoptionen","title":"Sonderzeichen auswählen","toolbar":"Sonderzeichen einfügen"},"stylescombo":{"label":"Stil","panelTitle":"Formatierungsstile","panelTitle1":"Blockstile","panelTitle2":"Inline Stilart","panelTitle3":"Objektstile"},"table":{"border":"Rahmengröße","caption":"Überschrift","cell":{"menu":"Zelle","insertBefore":"Zelle davor einfügen","insertAfter":"Zelle danach einfügen","deleteCell":"Zelle löschen","merge":"Zellen verbinden","mergeRight":"Nach rechts verbinden","mergeDown":"Nach unten verbinden","splitHorizontal":"Zelle horizontal teilen","splitVertical":"Zelle vertikal teilen","title":"Zelleneigenschaften","cellType":"Zellart","rowSpan":"Anzahl Zeilen verbinden","colSpan":"Anzahl Spalten verbinden","wordWrap":"Zeilenumbruch","hAlign":"Horizontale Ausrichtung","vAlign":"Vertikale Ausrichtung","alignBaseline":"Grundlinie","bgColor":"Hintergrundfarbe","borderColor":"Rahmenfarbe","data":"Daten","header":"Überschrift","yes":"Ja","no":"Nein","invalidWidth":"Zellenbreite muss eine Zahl sein.","invalidHeight":"Zellenhöhe muss eine Zahl sein.","invalidRowSpan":"\"Anzahl Zeilen verbinden\" muss eine Ganzzahl sein.","invalidColSpan":"\"Anzahl Spalten verbinden\" muss eine Ganzzahl sein.","chooseColor":"Wählen"},"cellPad":"Zellenabstand innen","cellSpace":"Zellenabstand außen","column":{"menu":"Spalte","insertBefore":"Spalte links davor einfügen","insertAfter":"Spalte rechts danach einfügen","deleteColumn":"Spalte löschen"},"columns":"Spalte","deleteTable":"Tabelle löschen","headers":"Kopfzeile","headersBoth":"Beide","headersColumn":"Erste Spalte","headersNone":"Keine","headersRow":"Erste Zeile","invalidBorder":"Die Rahmenbreite muß eine Zahl sein.","invalidCellPadding":"Der Zellenabstand innen muß eine positive Zahl sein.","invalidCellSpacing":"Der Zellenabstand außen muß eine positive Zahl sein.","invalidCols":"Die Anzahl der Spalten muß größer als 0 sein..","invalidHeight":"Die Tabellenbreite muß eine Zahl sein.","invalidRows":"Die Anzahl der Zeilen muß größer als 0 sein.","invalidWidth":"Die Tabellenbreite muss eine Zahl sein.","menu":"Tabellen-Eigenschaften","row":{"menu":"Zeile","insertBefore":"Zeile oberhalb einfügen","insertAfter":"Zeile unterhalb einfügen","deleteRow":"Zeile entfernen"},"rows":"Zeile","summary":"Inhaltsübersicht","title":"Tabellen-Eigenschaften","toolbar":"Tabelle","widthPc":"%","widthPx":"Pixel","widthUnit":"Breite Einheit"},"contextmenu":{"options":"Kontextmenüoptionen"},"toolbar":{"toolbarCollapse":"Werkzeugleiste einklappen","toolbarExpand":"Werkzeugleiste ausklappen","toolbarGroups":{"document":"Dokument","clipboard":"Zwischenablage/Rückgängig","editing":"Editieren","forms":"Formulare","basicstyles":"Grundstile","paragraph":"Absatz","links":"Links","insert":"Einfügen","styles":"Stile","colors":"Farben","tools":"Werkzeuge"},"toolbars":"Editor Werkzeugleisten"},"undo":{"redo":"Wiederherstellen","undo":"Rückgängig"},"justify":{"block":"Blocksatz","center":"Zentriert","left":"Linksbündig","right":"Rechtsbündig"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/el.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/el.js new file mode 100755 index 0000000000..2b89e7a856 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/el.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['el']={"editor":"Επεξεργαστής Πλούσιου Κειμένου","editorPanel":"Πίνακας Επεξεργαστή Πλούσιου Κειμένου","common":{"editorHelp":"Πατήστε το ALT 0 για βοήθεια","browseServer":"Εξερεύνηση Διακομιστή","url":"URL","protocol":"Πρωτόκολλο","upload":"Αποστολή","uploadSubmit":"Αποστολή στον Διακομιστή","image":"Εικόνα","flash":"Flash","form":"Φόρμα","checkbox":"Κουτί Επιλογής","radio":"Κουμπί Επιλογής","textField":"Πεδίο Κειμένου","textarea":"Περιοχή Κειμένου","hiddenField":"Κρυφό Πεδίο","button":"Κουμπί","select":"Πεδίο Επιλογής","imageButton":"Κουμπί Εικόνας","notSet":"<δεν έχει ρυθμιστεί>","id":"Id","name":"Όνομα","langDir":"Κατεύθυνση Κειμένου","langDirLtr":"Αριστερά προς Δεξιά (LTR)","langDirRtl":"Δεξιά προς Αριστερά (RTL)","langCode":"Κωδικός Γλώσσας","longDescr":"Αναλυτική Περιγραφή URL","cssClass":"Κλάσεις Φύλλων Στυλ","advisoryTitle":"Ενδεικτικός Τίτλος","cssStyle":"Μορφή Κειμένου","ok":"OK","cancel":"Ακύρωση","close":"Κλείσιμο","preview":"Προεπισκόπηση","resize":"Αλλαγή Μεγέθους","generalTab":"Γενικά","advancedTab":"Για Προχωρημένους","validateNumberFailed":"Αυτή η τιμή δεν είναι αριθμός.","confirmNewPage":"Οι όποιες αλλαγές στο περιεχόμενο θα χαθούν. Είσαστε σίγουροι ότι θέλετε να φορτώσετε μια νέα σελίδα;","confirmCancel":"Μερικές επιλογές έχουν αλλάξει. Είσαστε σίγουροι ότι θέλετε να κλείσετε το παράθυρο διαλόγου;","options":"Επιλογές","target":"Προορισμός","targetNew":"Νέο Παράθυρο (_blank)","targetTop":"Αρχική Περιοχή (_top)","targetSelf":"Ίδιο Παράθυρο (_self)","targetParent":"Γονεϊκό Παράθυρο (_parent)","langDirLTR":"Αριστερά προς Δεξιά (LTR)","langDirRTL":"Δεξιά προς Αριστερά (RTL)","styles":"Μορφή","cssClasses":"Κλάσεις Φύλλων Στυλ","width":"Πλάτος","height":"Ύψος","align":"Στοίχιση","alignLeft":"Αριστερά","alignRight":"Δεξιά","alignCenter":"Κέντρο","alignJustify":"Πλήρης Στοίχιση","alignTop":"Πάνω","alignMiddle":"Μέση","alignBottom":"Κάτω","alignNone":"Χωρίς","invalidValue":"Μη έγκυρη τιμή.","invalidHeight":"Το ύψος πρέπει να είναι ένας αριθμός.","invalidWidth":"Το πλάτος πρέπει να είναι ένας αριθμός.","invalidCssLength":"Η τιμή που ορίζεται για το πεδίο \"%1\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","invalidHtmlLength":"Η τιμή που ορίζεται για το πεδίο \"%1\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης HTML (px ή %).","invalidInlineStyle":"Η τιμή για το εν σειρά στυλ πρέπει να περιέχει ένα ή περισσότερα ζεύγη με την μορφή \"όνομα: τιμή\" διαχωρισμένα με Ελληνικό ερωτηματικό.","cssLengthTooltip":"Εισάγεται μια τιμή σε pixel ή έναν αριθμό μαζί με μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","unavailable":"%1<span class=\"cke_accessibility\">, δεν είναι διαθέσιμο</span>"},"basicstyles":{"bold":"Έντονη","italic":"Πλάγια","strike":"Διακριτή Διαγραφή","subscript":"Δείκτης","superscript":"Εκθέτης","underline":"Υπογράμμιση"},"clipboard":{"copy":"Αντιγραφή","copyError":"Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+C).","cut":"Αποκοπή","cutError":"Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+X).","paste":"Επικόλληση","pasteArea":"Περιοχή Επικόλλησης","pasteMsg":"Παρακαλώ επικολλήστε στο ακόλουθο κουτί χρησιμοποιώντας το πληκτρολόγιο (<strong>Ctrl/Cmd+V</strong>) και πατήστε OK.","securityMsg":"Λόγων των ρυθμίσεων ασφάλειας του περιηγητή σας, ο επεξεργαστής δεν μπορεί να έχει πρόσβαση στην μνήμη επικόλλησης. Χρειάζεται να επικολλήσετε ξανά σε αυτό το παράθυρο.","title":"Επικόλληση"},"button":{"selectedLabel":"%1 (Επιλεγμένο)"},"colorbutton":{"auto":"Αυτόματα","bgColorTitle":"Χρώμα Φόντου","colors":{"000":"Μαύρο","800000":"Καστανέρυθρο","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Βαθυκύανο","000080":"Μπλε μαρέν","4B0082":"Ινδικό","696969":"Σκούρο Γκρι","B22222":"Ανοικτό Κόκκινο","A52A2A":"Καφέ","DAA520":"Golden Rod","006400":"Σκούρο Πράσινο","40E0D0":"Τυρκουάζ","0000CD":"Medium Blue","800080":"Μοβ","808080":"Γκρι","F00":"Κόκκινο","FF8C00":"Σκούρο Πορτοκαλί","FFD700":"Χρυσαφί","008000":"Πράσινο","0FF":"Κυανό","00F":"Μπλε","EE82EE":"Μενεξεδί","A9A9A9":"Ποντικί","FFA07A":"Ανοικτό Σομόν","FFA500":"Πορτοκαλί","FFFF00":"Κίτρινο","00FF00":"Μοσχολέμονο","AFEEEE":"Pale Turquoise","ADD8E6":"Γαλάζιο","DDA0DD":"Δαμασκηνί","D3D3D3":"Ανοικτό Γκρι","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Ανοικτό Κίτρινο","F0FFF0":"Honeydew","F0FFFF":"Γαλανό","F0F8FF":"Alice Blue","E6E6FA":"Ελαφρός Ιώδες","FFF":"Λευκό"},"more":"Περισσότερα Χρώματα...","panelTitle":"Χρώματα","textColorTitle":"Χρώμα Κειμένου"},"colordialog":{"clear":"Εκκαθάριση","highlight":"Σήμανση","options":"Επιλογές Χρωμάτων","selected":"Επιλεγμένο Χρώμα","title":"Επιλογή χρώματος"},"elementspath":{"eleLabel":"Διαδρομή Στοιχείων","eleTitle":"Στοιχείο %1"},"font":{"fontSize":{"label":"Μέγεθος","voiceLabel":"Μέγεθος Γραμματοσειράς","panelTitle":"Μέγεθος Γραμματοσειράς"},"label":"Γραμματοσειρά","panelTitle":"Όνομα Γραμματοσειράς","voiceLabel":"Γραμματοσειρά"},"format":{"label":"Μορφοποίηση","panelTitle":"Μορφοποίηση Παραγράφου","tag_address":"Διεύθυνση","tag_div":"Κανονική (DIV)","tag_h1":"Κεφαλίδα 1","tag_h2":"Κεφαλίδα 2","tag_h3":"Κεφαλίδα 3","tag_h4":"Κεφαλίδα 4","tag_h5":"Κεφαλίδα 5","tag_h6":"Κεφαλίδα 6","tag_p":"Κανονική","tag_pre":"Προ-μορφοποιημένη"},"horizontalrule":{"toolbar":"Εισαγωγή Οριζόντιας Γραμμής"},"indent":{"indent":"Αύξηση Εσοχής","outdent":"Μείωση Εσοχής"},"fakeobjects":{"anchor":"Άγκυρα","flash":"Ταινία Flash","hiddenfield":"Κρυφό Πεδίο","iframe":"IFrame","unknown":"Άγνωστο Αντικείμενο"},"link":{"acccessKey":"Συντόμευση","advanced":"Για Προχωρημένους","advisoryContentType":"Ενδεικτικός Τύπος Περιεχομένου","advisoryTitle":"Ενδεικτικός Τίτλος","anchor":{"toolbar":"Εισαγωγή/επεξεργασία Άγκυρας","menu":"Ιδιότητες άγκυρας","title":"Ιδιότητες άγκυρας","name":"Όνομα άγκυρας","errorName":"Παρακαλούμε εισάγετε όνομα άγκυρας","remove":"Αφαίρεση Άγκυρας"},"anchorId":"Βάσει του Element Id","anchorName":"Βάσει του Ονόματος Άγκυρας","charset":"Κωδικοποίηση Χαρακτήρων Προσαρτημένης Πηγής","cssClasses":"Κλάσεις Φύλλων Στυλ","emailAddress":"Διεύθυνση E-mail","emailBody":"Κείμενο Μηνύματος","emailSubject":"Θέμα Μηνύματος","id":"Id","info":"Πληροφορίες Συνδέσμου","langCode":"Κατεύθυνση Κειμένου","langDir":"Κατεύθυνση Κειμένου","langDirLTR":"Αριστερά προς Δεξιά (LTR)","langDirRTL":"Δεξιά προς Αριστερά (RTL)","menu":"Επεξεργασία Συνδέσμου","name":"Όνομα","noAnchors":"(Δεν υπάρχουν άγκυρες στο κείμενο)","noEmail":"Εισάγετε τη διεύθυνση ηλεκτρονικού ταχυδρομείου","noUrl":"Εισάγετε την τοποθεσία (URL) του συνδέσμου","other":"<άλλο>","popupDependent":"Εξαρτημένο (Netscape)","popupFeatures":"Επιλογές Αναδυόμενου Παραθύρου","popupFullScreen":"Πλήρης Οθόνη (IE)","popupLeft":"Θέση Αριστερά","popupLocationBar":"Γραμμή Τοποθεσίας","popupMenuBar":"Γραμμή Επιλογών","popupResizable":"Προσαρμοζόμενο Μέγεθος","popupScrollBars":"Μπάρες Κύλισης","popupStatusBar":"Γραμμή Κατάστασης","popupToolbar":"Εργαλειοθήκη","popupTop":"Θέση Πάνω","rel":"Σχέση","selectAnchor":"Επιλέξτε μια Άγκυρα","styles":"Μορφή","tabIndex":"Σειρά Μεταπήδησης","target":"Παράθυρο Προορισμού","targetFrame":"<πλαίσιο>","targetFrameName":"Όνομα Πλαισίου Προορισμού","targetPopup":"<αναδυόμενο παράθυρο>","targetPopupName":"Όνομα Αναδυόμενου Παραθύρου","title":"Σύνδεσμος","toAnchor":"Άγκυρα σε αυτήν τη σελίδα","toEmail":"E-Mail","toUrl":"URL","toolbar":"Σύνδεσμος","type":"Τύπος Συνδέσμου","unlink":"Αφαίρεση Συνδέσμου","upload":"Αποστολή"},"list":{"bulletedlist":"Εισαγωγή/Απομάκρυνση Λίστας Κουκκίδων","numberedlist":"Εισαγωγή/Απομάκρυνση Αριθμημένης Λίστας"},"magicline":{"title":"Εισάγετε παράγραφο εδώ"},"maximize":{"maximize":"Μεγιστοποίηση","minimize":"Ελαχιστοποίηση"},"pastefromword":{"confirmCleanup":"Το κείμενο που επικολλάται φαίνεται να είναι αντιγραμμένο από το Word. Μήπως θα θέλατε να καθαριστεί προτού επικολληθεί;","error":"Δεν ήταν δυνατό να καθαριστούν τα δεδομένα λόγω ενός εσωτερικού σφάλματος","title":"Επικόλληση από το Word","toolbar":"Επικόλληση από το Word"},"pastetext":{"button":"Επικόλληση ως απλό κείμενο","title":"Επικόλληση ως απλό κείμενο"},"removeformat":{"toolbar":"Εκκαθάριση Μορφοποίησης"},"specialchar":{"options":"Επιλογές Ειδικών Χαρακτήρων","title":"Επιλέξτε Έναν Ειδικό Χαρακτήρα","toolbar":"Εισαγωγή Ειδικού Χαρακτήρα"},"stylescombo":{"label":"Μορφές","panelTitle":"Στυλ Μορφοποίησης","panelTitle1":"Στυλ Τμημάτων","panelTitle2":"Στυλ Εν Σειρά","panelTitle3":"Στυλ Αντικειμένων"},"table":{"border":"Πάχος Περιγράμματος","caption":"Λεζάντα","cell":{"menu":"Κελί","insertBefore":"Εισαγωγή Κελιού Πριν","insertAfter":"Εισαγωγή Κελιού Μετά","deleteCell":"Διαγραφή Κελιών","merge":"Ενοποίηση Κελιών","mergeRight":"Συγχώνευση Με Δεξιά","mergeDown":"Συγχώνευση Με Κάτω","splitHorizontal":"Οριζόντια Διαίρεση Κελιού","splitVertical":"Κατακόρυφη Διαίρεση Κελιού","title":"Ιδιότητες Κελιού","cellType":"Τύπος Κελιού","rowSpan":"Εύρος Γραμμών","colSpan":"Εύρος Στηλών","wordWrap":"Αναδίπλωση Λέξεων","hAlign":"Οριζόντια Στοίχιση","vAlign":"Κάθετη Στοίχιση","alignBaseline":"Γραμμή Βάσης","bgColor":"Χρώμα Φόντου","borderColor":"Χρώμα Περιγράμματος","data":"Δεδομένα","header":"Κεφαλίδα","yes":"Ναι","no":"Όχι","invalidWidth":"Το πλάτος του κελιού πρέπει να είναι αριθμός.","invalidHeight":"Το ύψος του κελιού πρέπει να είναι αριθμός.","invalidRowSpan":"Το εύρος των γραμμών πρέπει να είναι ακέραιος αριθμός.","invalidColSpan":"Το εύρος των στηλών πρέπει να είναι ακέραιος αριθμός.","chooseColor":"Επιλέξτε"},"cellPad":"Αναπλήρωση κελιών","cellSpace":"Απόσταση κελιών","column":{"menu":"Στήλη","insertBefore":"Εισαγωγή Στήλης Πριν","insertAfter":"Εισαγωγή Στήλης Μετά","deleteColumn":"Διαγραφή Στηλών"},"columns":"Στήλες","deleteTable":"Διαγραφή Πίνακα","headers":"Κεφαλίδες","headersBoth":"Και τα δύο","headersColumn":"Πρώτη στήλη","headersNone":"Κανένα","headersRow":"Πρώτη Γραμμή","invalidBorder":"Το πάχος του περιγράμματος πρέπει να είναι ένας αριθμός.","invalidCellPadding":"Η αναπλήρωση των κελιών πρέπει να είναι θετικός αριθμός.","invalidCellSpacing":"Η απόσταση μεταξύ των κελιών πρέπει να είναι ένας θετικός αριθμός.","invalidCols":"Ο αριθμός των στηλών πρέπει να είναι μεγαλύτερος από 0.","invalidHeight":"Το ύψος του πίνακα πρέπει να είναι αριθμός.","invalidRows":"Ο αριθμός των σειρών πρέπει να είναι μεγαλύτερος από 0.","invalidWidth":"Το πλάτος του πίνακα πρέπει να είναι ένας αριθμός.","menu":"Ιδιότητες Πίνακα","row":{"menu":"Γραμμή","insertBefore":"Εισαγωγή Γραμμής Πριν","insertAfter":"Εισαγωγή Γραμμής Μετά","deleteRow":"Διαγραφή Γραμμών"},"rows":"Γραμμές","summary":"Περίληψη","title":"Ιδιότητες Πίνακα","toolbar":"Πίνακας","widthPc":"τοις εκατό","widthPx":"pixel","widthUnit":"μονάδα πλάτους"},"contextmenu":{"options":"Επιλογές Αναδυόμενου Μενού"},"toolbar":{"toolbarCollapse":"Σύμπτυξη Εργαλειοθήκης","toolbarExpand":"Ανάπτυξη Εργαλειοθήκης","toolbarGroups":{"document":"Έγγραφο","clipboard":"Πρόχειρο/Αναίρεση","editing":"Επεξεργασία","forms":"Φόρμες","basicstyles":"Βασικά Στυλ","paragraph":"Παράγραφος","links":"Σύνδεσμοι","insert":"Εισαγωγή","styles":"Στυλ","colors":"Χρώματα","tools":"Εργαλεία"},"toolbars":"Εργαλειοθήκες επεξεργαστή"},"undo":{"redo":"Επανάληψη","undo":"Αναίρεση"},"justify":{"block":"Πλήρης Στοίχιση","center":"Στο Κέντρο","left":"Στοίχιση Αριστερά","right":"Στοίχιση Δεξιά"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/en-au.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/en-au.js new file mode 100755 index 0000000000..09d9b8f63e --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/en-au.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['en-au']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","alignLeft":"Left","alignRight":"Right","alignCenter":"Centre","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Colour","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"More Colours...","panelTitle":"Colors","textColorTitle":"Text Colour"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"removeformat":{"toolbar":"Remove Format"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"undo":{"redo":"Redo","undo":"Undo"},"justify":{"block":"Justify","center":"Centre","left":"Align Left","right":"Align Right"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/en-ca.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/en-ca.js new file mode 100755 index 0000000000..33ff0b0363 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/en-ca.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['en-ca']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","alignLeft":"Left","alignRight":"Right","alignCenter":"Centre","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Colour","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"More Colours...","panelTitle":"Colors","textColorTitle":"Text Colour"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"removeformat":{"toolbar":"Remove Format"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"undo":{"redo":"Redo","undo":"Undo"},"justify":{"block":"Justify","center":"Centre","left":"Align Left","right":"Align Right"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/en-gb.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/en-gb.js new file mode 100755 index 0000000000..edde1a73c9 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/en-gb.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['en-gb']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Drag to resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialogue window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","alignLeft":"Left","alignRight":"Right","alignCenter":"Centre","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Colour","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Grey","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Grey","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Grey","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Grey","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"More Colours...","panelTitle":"Colours","textColorTitle":"Text Colour"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Colour Options","selected":"Selected Colour","title":"Select colour"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximise","minimize":"Minimise"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"removeformat":{"toolbar":"Remove Format"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"undo":{"redo":"Redo","undo":"Undo"},"justify":{"block":"Justify","center":"Centre","left":"Align Left","right":"Align Right"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/en.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/en.js new file mode 100755 index 0000000000..eba759b76b --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/en.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['en']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","alignLeft":"Left","alignRight":"Right","alignCenter":"Center","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Color","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"More Colors...","panelTitle":"Colors","textColorTitle":"Text Color"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"removeformat":{"toolbar":"Remove Format"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"undo":{"redo":"Redo","undo":"Undo"},"justify":{"block":"Justify","center":"Center","left":"Align Left","right":"Align Right"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/eo.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/eo.js new file mode 100755 index 0000000000..627e3fe704 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/eo.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['eo']={"editor":"RiĉTeksta Redaktilo","editorPanel":"Panelo de la RiĉTeksta Redaktilo","common":{"editorHelp":"Premu ALT 0 por helpilo","browseServer":"Foliumi en la Servilo","url":"URL","protocol":"Protokolo","upload":"Alŝuti","uploadSubmit":"Sendu al Servilo","image":"Bildo","flash":"Flaŝo","form":"Formularo","checkbox":"Markobutono","radio":"Radiobutono","textField":"Teksta kampo","textarea":"Teksta Areo","hiddenField":"Kaŝita Kampo","button":"Butono","select":"Elekta Kampo","imageButton":"Bildbutono","notSet":"<Defaŭlta>","id":"Id","name":"Nomo","langDir":"Skribdirekto","langDirLtr":"De maldekstro dekstren (LTR)","langDirRtl":"De dekstro maldekstren (RTL)","langCode":"Lingva Kodo","longDescr":"URL de Longa Priskribo","cssClass":"Klasoj de Stilfolioj","advisoryTitle":"Priskriba Titolo","cssStyle":"Stilo","ok":"Akcepti","cancel":"Rezigni","close":"Fermi","preview":"Vidigi Aspekton","resize":"Movigi por ŝanĝi la grandon","generalTab":"Ĝenerala","advancedTab":"Speciala","validateNumberFailed":"Tiu valoro ne estas nombro.","confirmNewPage":"La neregistritaj ŝanĝoj estas perdotaj. Ĉu vi certas, ke vi volas ŝargi novan paĝon?","confirmCancel":"Iuj opcioj esta ŝanĝitaj. Ĉu vi certas, ke vi volas fermi la dialogon?","options":"Opcioj","target":"Celo","targetNew":"Nova Fenestro (_blank)","targetTop":"Supra Fenestro (_top)","targetSelf":"Sama Fenestro (_self)","targetParent":"Patra Fenestro (_parent)","langDirLTR":"De maldekstro dekstren (LTR)","langDirRTL":"De dekstro maldekstren (RTL)","styles":"Stilo","cssClasses":"Stilfoliaj Klasoj","width":"Larĝo","height":"Alto","align":"Ĝisrandigo","alignLeft":"Maldekstre","alignRight":"Dekstre","alignCenter":"Centre","alignJustify":"Ĝisrandigi Ambaŭflanke","alignTop":"Supre","alignMiddle":"Centre","alignBottom":"Malsupre","alignNone":"Neniu","invalidValue":"Nevalida Valoro","invalidHeight":"Alto devas esti nombro.","invalidWidth":"Larĝo devas esti nombro.","invalidCssLength":"La valoro indikita por la \"%1\" kampo devas esti pozitiva nombro kun aŭ sen valida CSSmezurunuo (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"La valoro indikita por la \"%1\" kampo devas esti pozitiva nombro kun aŭ sen valida HTMLmezurunuo (px or %).","invalidInlineStyle":"La valoro indikita por la enlinia stilo devas konsisti el unu aŭ pluraj elementoj kun la formato de \"nomo : valoro\", apartigitaj per punktokomoj.","cssLengthTooltip":"Entajpu nombron por rastrumera valoro aŭ nombron kun valida CSSunuo (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, nehavebla</span>"},"basicstyles":{"bold":"Grasa","italic":"Kursiva","strike":"Trastreko","subscript":"Suba indico","superscript":"Supra indico","underline":"Substreko"},"clipboard":{"copy":"Kopii","copyError":"La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-C).","cut":"Eltondi","cutError":"La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-X).","paste":"Interglui","pasteArea":"Intergluoareo","pasteMsg":"Bonvolu glui la tekston en la jenan areon per uzado de la klavaro (<strong>Ctrl/Cmd+V</strong>) kaj premu OK","securityMsg":"Pro la sekurecagordo de via TTT-legilo, la redaktilo ne povas rekte atingi viajn datenojn en la poŝo. Bonvolu denove interglui la datenojn en tiun fenestron.","title":"Interglui"},"button":{"selectedLabel":"%1 (Selektita)"},"colorbutton":{"auto":"Aŭtomata","bgColorTitle":"Fona Koloro","colors":{"000":"Nigra","800000":"Kaŝtankolora","8B4513":"Mezbruna","2F4F4F":"Ardezgriza","008080":"Marĉanaskolora","000080":"Maristblua","4B0082":"Indigokolora","696969":"Malhelgriza","B22222":"Brikruĝa","A52A2A":"Bruna","DAA520":"Senbrilorkolora","006400":"Malhelverda","40E0D0":"Turkisblua","0000CD":"Reĝblua","800080":"Purpura","808080":"Griza","F00":"Ruĝa","FF8C00":"Malheloranĝkolora","FFD700":"Orkolora","008000":"Verda","0FF":"Verdblua","00F":"Blua","EE82EE":"Viola","A9A9A9":"Mezgriza","FFA07A":"Salmokolora","FFA500":"Oranĝkolora","FFFF00":"Flava","00FF00":"Limetkolora","AFEEEE":"Helturkiskolora","ADD8E6":"Helblua","DDA0DD":"Prunkolora","D3D3D3":"Helgriza","FFF0F5":"Lavendkolora vangoŝminko","FAEBD7":"Antikvablanka","FFFFE0":"Helflava","F0FFF0":"Vintromelonkolora","F0FFFF":"Lazura","F0F8FF":"Aliceblua","E6E6FA":"Lavendkolora","FFF":"Blanka"},"more":"Pli da Koloroj...","panelTitle":"Koloroj","textColorTitle":"Teksta Koloro"},"colordialog":{"clear":"Forigi","highlight":"Detaloj","options":"Opcioj pri koloroj","selected":"Selektita koloro","title":"Selekti koloron"},"elementspath":{"eleLabel":"Vojo al Elementoj","eleTitle":"%1 elementoj"},"font":{"fontSize":{"label":"Grado","voiceLabel":"Tipara grado","panelTitle":"Tipara grado"},"label":"Tiparo","panelTitle":"Tipara nomo","voiceLabel":"Tiparo"},"format":{"label":"Formato","panelTitle":"ParagrafFormato","tag_address":"Adreso","tag_div":"Normala (DIV)","tag_h1":"Titolo 1","tag_h2":"Titolo 2","tag_h3":"Titolo 3","tag_h4":"Titolo 4","tag_h5":"Titolo 5","tag_h6":"Titolo 6","tag_p":"Normala","tag_pre":"Formatita"},"horizontalrule":{"toolbar":"Enmeti Horizontalan Linion"},"indent":{"indent":"Pligrandigi Krommarĝenon","outdent":"Malpligrandigi Krommarĝenon"},"fakeobjects":{"anchor":"Ankro","flash":"FlaŝAnimacio","hiddenfield":"Kaŝita kampo","iframe":"Enlinia Kadro (IFrame)","unknown":"Nekonata objekto"},"link":{"acccessKey":"Fulmoklavo","advanced":"Speciala","advisoryContentType":"Enhavotipo","advisoryTitle":"Priskriba Titolo","anchor":{"toolbar":"Ankro","menu":"Enmeti/Ŝanĝi Ankron","title":"Ankraj Atributoj","name":"Ankra Nomo","errorName":"Bv entajpi la ankran nomon","remove":"Forigi Ankron"},"anchorId":"Per Elementidentigilo","anchorName":"Per Ankronomo","charset":"Signaro de la Ligita Rimedo","cssClasses":"Klasoj de Stilfolioj","emailAddress":"Retpoŝto","emailBody":"Mesaĝa korpo","emailSubject":"Mesaĝa Temo","id":"Id","info":"Informoj pri la Ligilo","langCode":"Lingva Kodo","langDir":"Skribdirekto","langDirLTR":"De maldekstro dekstren (LTR)","langDirRTL":"De dekstro maldekstren (RTL)","menu":"Ŝanĝi Ligilon","name":"Nomo","noAnchors":"<Ne disponeblas ankroj en la dokumento>","noEmail":"Bonvolu entajpi la retpoŝtadreson","noUrl":"Bonvolu entajpi la URL-on","other":"<alia>","popupDependent":"Dependa (Netscape)","popupFeatures":"Atributoj de la Ŝprucfenestro","popupFullScreen":"Tutekrane (IE)","popupLeft":"Maldekstra Pozicio","popupLocationBar":"Adresobreto","popupMenuBar":"Menubreto","popupResizable":"Dimensiŝanĝebla","popupScrollBars":"Rulumskaloj","popupStatusBar":"Statobreto","popupToolbar":"Ilobreto","popupTop":"Supra Pozicio","rel":"Rilato","selectAnchor":"Elekti Ankron","styles":"Stilo","tabIndex":"Taba Indekso","target":"Celo","targetFrame":"<kadro>","targetFrameName":"Nomo de CelKadro","targetPopup":"<ŝprucfenestro>","targetPopupName":"Nomo de Ŝprucfenestro","title":"Ligilo","toAnchor":"Ankri en tiu ĉi paĝo","toEmail":"Retpoŝto","toUrl":"URL","toolbar":"Enmeti/Ŝanĝi Ligilon","type":"Tipo de Ligilo","unlink":"Forigi Ligilon","upload":"Alŝuti"},"list":{"bulletedlist":"Bula Listo","numberedlist":"Numera Listo"},"magicline":{"title":"Enmeti paragrafon ĉi-tien"},"maximize":{"maximize":"Pligrandigi","minimize":"Malgrandigi"},"pastefromword":{"confirmCleanup":"La teksto, kiun vi volas interglui, ŝajnas esti kopiita el Word. Ĉu vi deziras purigi ĝin antaŭ intergluo?","error":"Ne eblis purigi la intergluitajn datenojn pro interna eraro","title":"Interglui el Word","toolbar":"Interglui el Word"},"pastetext":{"button":"Interglui kiel platan tekston","title":"Interglui kiel platan tekston"},"removeformat":{"toolbar":"Forigi Formaton"},"specialchar":{"options":"Opcioj pri Specialaj Signoj","title":"Selekti Specialan Signon","toolbar":"Enmeti Specialan Signon"},"stylescombo":{"label":"Stiloj","panelTitle":"Stiloj pri enpaĝigo","panelTitle1":"Stiloj de blokoj","panelTitle2":"Enliniaj Stiloj","panelTitle3":"Stiloj de objektoj"},"table":{"border":"Bordero","caption":"Tabeltitolo","cell":{"menu":"Ĉelo","insertBefore":"Enmeti Ĉelon Antaŭ","insertAfter":"Enmeti Ĉelon Post","deleteCell":"Forigi la Ĉelojn","merge":"Kunfandi la Ĉelojn","mergeRight":"Kunfandi dekstren","mergeDown":"Kunfandi malsupren ","splitHorizontal":"Horizontale dividi","splitVertical":"Vertikale dividi","title":"Ĉelatributoj","cellType":"Ĉeltipo","rowSpan":"Kunfando de linioj","colSpan":"Kunfando de kolumnoj","wordWrap":"Cezuro","hAlign":"Horizontala ĝisrandigo","vAlign":"Vertikala ĝisrandigo","alignBaseline":"Malsupro de la teksto","bgColor":"Fonkoloro","borderColor":"Borderkoloro","data":"Datenoj","header":"Supra paĝotitolo","yes":"Jes","no":"No","invalidWidth":"Ĉellarĝo devas esti nombro.","invalidHeight":"Ĉelalto devas esti nombro.","invalidRowSpan":"Kunfando de linioj devas esti entjera nombro.","invalidColSpan":"Kunfando de kolumnoj devas esti entjera nombro.","chooseColor":"Elektu"},"cellPad":"Interna Marĝeno de la ĉeloj","cellSpace":"Spaco inter la Ĉeloj","column":{"menu":"Kolumno","insertBefore":"Enmeti kolumnon antaŭ","insertAfter":"Enmeti kolumnon post","deleteColumn":"Forigi Kolumnojn"},"columns":"Kolumnoj","deleteTable":"Forigi Tabelon","headers":"Supraj Paĝotitoloj","headersBoth":"Ambaŭ","headersColumn":"Unua kolumno","headersNone":"Neniu","headersRow":"Unua linio","invalidBorder":"La bordergrando devas esti nombro.","invalidCellPadding":"La interna marĝeno en la ĉeloj devas esti pozitiva nombro.","invalidCellSpacing":"La spaco inter la ĉeloj devas esti pozitiva nombro.","invalidCols":"La nombro de la kolumnoj devas superi 0.","invalidHeight":"La tabelalto devas esti nombro.","invalidRows":"La nombro de la linioj devas superi 0.","invalidWidth":"La tabellarĝo devas esti nombro.","menu":"Atributoj de Tabelo","row":{"menu":"Linio","insertBefore":"Enmeti linion antaŭ","insertAfter":"Enmeti linion post","deleteRow":"Forigi Liniojn"},"rows":"Linioj","summary":"Resumo","title":"Atributoj de Tabelo","toolbar":"Tabelo","widthPc":"elcentoj","widthPx":"Rastrumeroj","widthUnit":"unuo de larĝo"},"contextmenu":{"options":"Opcioj de Kunteksta Menuo"},"toolbar":{"toolbarCollapse":"Faldi la ilbreton","toolbarExpand":"Malfaldi la ilbreton","toolbarGroups":{"document":"Dokumento","clipboard":"Poŝo/Malfari","editing":"Redaktado","forms":"Formularoj","basicstyles":"Bazaj stiloj","paragraph":"Paragrafo","links":"Ligiloj","insert":"Enmeti","styles":"Stiloj","colors":"Koloroj","tools":"Iloj"},"toolbars":"Ilobretoj de la redaktilo"},"undo":{"redo":"Refari","undo":"Malfari"},"justify":{"block":"Ĝisrandigi Ambaŭflanke","center":"Centrigi","left":"Ĝisrandigi maldekstren","right":"Ĝisrandigi dekstren"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/es.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/es.js new file mode 100755 index 0000000000..8f57a99c66 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/es.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['es']={"editor":"Editor de texto enriquecido","editorPanel":"Panel del Editor de Texto Enriquecido","common":{"editorHelp":"Pulse ALT 0 para ayuda","browseServer":"Ver Servidor","url":"URL","protocol":"Protocolo","upload":"Cargar","uploadSubmit":"Enviar al Servidor","image":"Imagen","flash":"Flash","form":"Formulario","checkbox":"Casilla de Verificación","radio":"Botones de Radio","textField":"Campo de Texto","textarea":"Area de Texto","hiddenField":"Campo Oculto","button":"Botón","select":"Campo de Selección","imageButton":"Botón Imagen","notSet":"<No definido>","id":"Id","name":"Nombre","langDir":"Orientación","langDirLtr":"Izquierda a Derecha (LTR)","langDirRtl":"Derecha a Izquierda (RTL)","langCode":"Cód. de idioma","longDescr":"Descripción larga URL","cssClass":"Clases de hojas de estilo","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Cerrar","preview":"Previsualización","resize":"Arrastre para redimensionar","generalTab":"General","advancedTab":"Avanzado","validateNumberFailed":"El valor no es un número.","confirmNewPage":"Cualquier cambio que no se haya guardado se perderá.\r\n¿Está seguro de querer crear una nueva página?","confirmCancel":"Algunas de las opciones se han cambiado.\r\n¿Está seguro de querer cerrar el diálogo?","options":"Opciones","target":"Destino","targetNew":"Nueva ventana (_blank)","targetTop":"Ventana principal (_top)","targetSelf":"Misma ventana (_self)","targetParent":"Ventana padre (_parent)","langDirLTR":"Izquierda a derecha (LTR)","langDirRTL":"Derecha a izquierda (RTL)","styles":"Estilos","cssClasses":"Clase de la hoja de estilos","width":"Anchura","height":"Altura","align":"Alineación","alignLeft":"Izquierda","alignRight":"Derecha","alignCenter":"Centrado","alignJustify":"Justificado","alignTop":"Tope","alignMiddle":"Centro","alignBottom":"Pie","alignNone":"Ninguno","invalidValue":"Valor no válido","invalidHeight":"Altura debe ser un número.","invalidWidth":"Anchura debe ser un número.","invalidCssLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida HTML válida (px o %).","invalidInlineStyle":"El valor especificado para el estilo debe consistir en uno o más pares con el formato \"nombre: valor\", separados por punto y coma.","cssLengthTooltip":"Introduca un número para el valor en pixels o un número con una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subrayado"},"clipboard":{"copy":"Copiar","copyError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado.\r\nPor favor use el teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado.\r\nPor favor use el teclado (Ctrl/Cmd+X).","paste":"Pegar","pasteArea":"Zona de pegado","pasteMsg":"Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl/Cmd+V</STRONG>);\r\nluego presione <STRONG>Aceptar</STRONG>.","securityMsg":"Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles.\r\nEs necesario que lo pegue de nuevo en esta ventana.","title":"Pegar"},"button":{"selectedLabel":"%1 (Seleccionado)"},"colorbutton":{"auto":"Automático","bgColorTitle":"Color de Fondo","colors":{"000":"Negro","800000":"Marrón oscuro","8B4513":"Marrón tierra","2F4F4F":"Pizarra Oscuro","008080":"Azul verdoso","000080":"Azul marino","4B0082":"Añil","696969":"Gris oscuro","B22222":"Ladrillo","A52A2A":"Marrón","DAA520":"Oro oscuro","006400":"Verde oscuro","40E0D0":"Turquesa","0000CD":"Azul medio-oscuro","800080":"Púrpura","808080":"Gris","F00":"Rojo","FF8C00":"Naranja oscuro","FFD700":"Oro","008000":"Verde","0FF":"Cian","00F":"Azul","EE82EE":"Violeta","A9A9A9":"Gris medio","FFA07A":"Salmón claro","FFA500":"Naranja","FFFF00":"Amarillo","00FF00":"Lima","AFEEEE":"Turquesa claro","ADD8E6":"Azul claro","DDA0DD":"Violeta claro","D3D3D3":"Gris claro","FFF0F5":"Lavanda rojizo","FAEBD7":"Blanco antiguo","FFFFE0":"Amarillo claro","F0FFF0":"Miel","F0FFFF":"Azul celeste","F0F8FF":"Azul pálido","E6E6FA":"Lavanda","FFF":"Blanco"},"more":"Más Colores...","panelTitle":"Colores","textColorTitle":"Color de Texto"},"colordialog":{"clear":"Borrar","highlight":"Muestra","options":"Opciones de colores","selected":"Elegido","title":"Elegir color"},"elementspath":{"eleLabel":"Ruta de los elementos","eleTitle":"%1 elemento"},"font":{"fontSize":{"label":"Tamaño","voiceLabel":"Tamaño de fuente","panelTitle":"Tamaño"},"label":"Fuente","panelTitle":"Fuente","voiceLabel":"Fuente"},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Dirección","tag_div":"Normal (DIV)","tag_h1":"Encabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Con formato"},"horizontalrule":{"toolbar":"Insertar Línea Horizontal"},"indent":{"indent":"Aumentar Sangría","outdent":"Disminuir Sangría"},"fakeobjects":{"anchor":"Ancla","flash":"Animación flash","hiddenfield":"Campo oculto","iframe":"IFrame","unknown":"Objeto desconocido"},"link":{"acccessKey":"Tecla de Acceso","advanced":"Avanzado","advisoryContentType":"Tipo de Contenido","advisoryTitle":"Título","anchor":{"toolbar":"Referencia","menu":"Propiedades de Referencia","title":"Propiedades de Referencia","name":"Nombre de la Referencia","errorName":"Por favor, complete el nombre de la Referencia","remove":"Quitar Referencia"},"anchorId":"Por ID de elemento","anchorName":"Por Nombre de Referencia","charset":"Fuente de caracteres vinculado","cssClasses":"Clases de hojas de estilo","emailAddress":"Dirección de E-Mail","emailBody":"Cuerpo del Mensaje","emailSubject":"Título del Mensaje","id":"Id","info":"Información de Vínculo","langCode":"Código idioma","langDir":"Orientación","langDirLTR":"Izquierda a Derecha (LTR)","langDirRTL":"Derecha a Izquierda (RTL)","menu":"Editar Vínculo","name":"Nombre","noAnchors":"(No hay referencias disponibles en el documento)","noEmail":"Por favor escriba la dirección de e-mail","noUrl":"Por favor escriba el vínculo URL","other":"<otro>","popupDependent":"Dependiente (Netscape)","popupFeatures":"Características de Ventana Emergente","popupFullScreen":"Pantalla Completa (IE)","popupLeft":"Posición Izquierda","popupLocationBar":"Barra de ubicación","popupMenuBar":"Barra de Menú","popupResizable":"Redimensionable","popupScrollBars":"Barras de desplazamiento","popupStatusBar":"Barra de Estado","popupToolbar":"Barra de Herramientas","popupTop":"Posición Derecha","rel":"Relación","selectAnchor":"Seleccionar una referencia","styles":"Estilo","tabIndex":"Indice de tabulación","target":"Destino","targetFrame":"<marco>","targetFrameName":"Nombre del Marco Destino","targetPopup":"<ventana emergente>","targetPopupName":"Nombre de Ventana Emergente","title":"Vínculo","toAnchor":"Referencia en esta página","toEmail":"E-Mail","toUrl":"URL","toolbar":"Insertar/Editar Vínculo","type":"Tipo de vínculo","unlink":"Eliminar Vínculo","upload":"Cargar"},"list":{"bulletedlist":"Viñetas","numberedlist":"Numeración"},"magicline":{"title":"Insertar párrafo aquí"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"pastefromword":{"confirmCleanup":"El texto que desea parece provenir de Word.\r\n¿Desea depurarlo antes de pegarlo?","error":"No ha sido posible limpiar los datos debido a un error interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"pastetext":{"button":"Pegar como Texto Plano","title":"Pegar como Texto Plano"},"removeformat":{"toolbar":"Eliminar Formato"},"specialchar":{"options":"Opciones de caracteres especiales","title":"Seleccione un caracter especial","toolbar":"Insertar Caracter Especial"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos para formatear","panelTitle1":"Estilos de párrafo","panelTitle2":"Estilos de carácter","panelTitle3":"Estilos de objeto"},"table":{"border":"Tamaño de Borde","caption":"Título","cell":{"menu":"Celda","insertBefore":"Insertar celda a la izquierda","insertAfter":"Insertar celda a la derecha","deleteCell":"Eliminar Celdas","merge":"Combinar Celdas","mergeRight":"Combinar a la derecha","mergeDown":"Combinar hacia abajo","splitHorizontal":"Dividir la celda horizontalmente","splitVertical":"Dividir la celda verticalmente","title":"Propiedades de celda","cellType":"Tipo de Celda","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Ajustar al contenido","hAlign":"Alineación Horizontal","vAlign":"Alineación Vertical","alignBaseline":"Linea de base","bgColor":"Color de fondo","borderColor":"Color de borde","data":"Datos","header":"Encabezado","yes":"Sí","no":"No","invalidWidth":"La anchura de celda debe ser un número.","invalidHeight":"La altura de celda debe ser un número.","invalidRowSpan":"La expansión de filas debe ser un número entero.","invalidColSpan":"La expansión de columnas debe ser un número entero.","chooseColor":"Elegir"},"cellPad":"Esp. interior","cellSpace":"Esp. e/celdas","column":{"menu":"Columna","insertBefore":"Insertar columna a la izquierda","insertAfter":"Insertar columna a la derecha","deleteColumn":"Eliminar Columnas"},"columns":"Columnas","deleteTable":"Eliminar Tabla","headers":"Encabezados","headersBoth":"Ambas","headersColumn":"Primera columna","headersNone":"Ninguno","headersRow":"Primera fila","invalidBorder":"El tamaño del borde debe ser un número.","invalidCellPadding":"El espaciado interior debe ser un número.","invalidCellSpacing":"El espaciado entre celdas debe ser un número.","invalidCols":"El número de columnas debe ser un número mayor que 0.","invalidHeight":"La altura de tabla debe ser un número.","invalidRows":"El número de filas debe ser un número mayor que 0.","invalidWidth":"La anchura de tabla debe ser un número.","menu":"Propiedades de Tabla","row":{"menu":"Fila","insertBefore":"Insertar fila en la parte superior","insertAfter":"Insertar fila en la parte inferior","deleteRow":"Eliminar Filas"},"rows":"Filas","summary":"Síntesis","title":"Propiedades de Tabla","toolbar":"Tabla","widthPc":"porcentaje","widthPx":"pixeles","widthUnit":"unidad de la anchura"},"contextmenu":{"options":"Opciones del menú contextual"},"toolbar":{"toolbarCollapse":"Contraer barra de herramientas","toolbarExpand":"Expandir barra de herramientas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeles/Deshacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Párrafo","links":"Enlaces","insert":"Insertar","styles":"Estilos","colors":"Colores","tools":"Herramientas"},"toolbars":"Barras de herramientas del editor"},"undo":{"redo":"Rehacer","undo":"Deshacer"},"justify":{"block":"Justificado","center":"Centrar","left":"Alinear a Izquierda","right":"Alinear a Derecha"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/et.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/et.js new file mode 100755 index 0000000000..da3081016a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/et.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['et']={"editor":"Rikkalik tekstiredaktor","editorPanel":"Rikkaliku tekstiredaktori paneel","common":{"editorHelp":"Abi saamiseks vajuta ALT 0","browseServer":"Serveri sirvimine","url":"URL","protocol":"Protokoll","upload":"Laadi üles","uploadSubmit":"Saada serverisse","image":"Pilt","flash":"Flash","form":"Vorm","checkbox":"Märkeruut","radio":"Raadionupp","textField":"Tekstilahter","textarea":"Tekstiala","hiddenField":"Varjatud lahter","button":"Nupp","select":"Valiklahter","imageButton":"Piltnupp","notSet":"<määramata>","id":"ID","name":"Nimi","langDir":"Keele suund","langDirLtr":"Vasakult paremale (LTR)","langDirRtl":"Paremalt vasakule (RTL)","langCode":"Keele kood","longDescr":"Pikk kirjeldus URL","cssClass":"Stiilistiku klassid","advisoryTitle":"Soovituslik pealkiri","cssStyle":"Laad","ok":"Olgu","cancel":"Loobu","close":"Sulge","preview":"Eelvaade","resize":"Suuruse muutmiseks lohista","generalTab":"Üldine","advancedTab":"Täpsemalt","validateNumberFailed":"See väärtus pole number.","confirmNewPage":"Kõik salvestamata muudatused lähevad kaotsi. Kas oled kindel, et tahad laadida uue lehe?","confirmCancel":"Mõned valikud on muudetud. Kas oled kindel, et tahad dialoogi sulgeda?","options":"Valikud","target":"Sihtkoht","targetNew":"Uus aken (_blank)","targetTop":"Kõige ülemine aken (_top)","targetSelf":"Sama aken (_self)","targetParent":"Vanemaken (_parent)","langDirLTR":"Vasakult paremale (LTR)","langDirRTL":"Paremalt vasakule (RTL)","styles":"Stiili","cssClasses":"Stiililehe klassid","width":"Laius","height":"Kõrgus","align":"Joondus","alignLeft":"Vasak","alignRight":"Paremale","alignCenter":"Kesk","alignJustify":"Rööpjoondus","alignTop":"Üles","alignMiddle":"Keskele","alignBottom":"Alla","alignNone":"None","invalidValue":"Vigane väärtus.","invalidHeight":"Kõrgus peab olema number.","invalidWidth":"Laius peab olema number.","invalidCssLength":"\"%1\" välja jaoks määratud väärtus peab olema positiivne täisarv CSS ühikuga (px, %, in, cm, mm, em, ex, pt või pc) või ilma.","invalidHtmlLength":"\"%1\" välja jaoks määratud väärtus peab olema positiivne täisarv HTML ühikuga (px või %) või ilma.","invalidInlineStyle":"Reasisese stiili määrangud peavad koosnema paarisväärtustest (tuples), mis on semikoolonitega eraldatult järgnevas vormingus: \"nimi : väärtus\".","cssLengthTooltip":"Sisesta väärtus pikslites või number koos sobiva CSS-i ühikuga (px, %, in, cm, mm, em, ex, pt või pc).","unavailable":"%1<span class=\"cke_accessibility\">, pole saadaval</span>"},"basicstyles":{"bold":"Paks","italic":"Kursiiv","strike":"Läbijoonitud","subscript":"Allindeks","superscript":"Ülaindeks","underline":"Allajoonitud"},"clipboard":{"copy":"Kopeeri","copyError":"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+C).","cut":"Lõika","cutError":"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+X).","paste":"Aseta","pasteArea":"Asetamise ala","pasteMsg":"Palun aseta tekst järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl/Cmd+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.","securityMsg":"Sinu veebisirvija turvaseadete tõttu ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead asetama need uuesti siia aknasse.","title":"Asetamine"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automaatne","bgColorTitle":"Tausta värv","colors":{"000":"Must","800000":"Kastanpruun","8B4513":"Sadulapruun","2F4F4F":"Tume paehall","008080":"Sinakasroheline","000080":"Meresinine","4B0082":"Indigosinine","696969":"Tumehall","B22222":"Šamottkivi","A52A2A":"Pruun","DAA520":"Kuldkollane","006400":"Tumeroheline","40E0D0":"Türkiissinine","0000CD":"Keskmine sinine","800080":"Lilla","808080":"Hall","F00":"Punanae","FF8C00":"Tumeoranž","FFD700":"Kuldne","008000":"Roheline","0FF":"Tsüaniidsinine","00F":"Sinine","EE82EE":"Violetne","A9A9A9":"Tuhm hall","FFA07A":"Hele lõhe","FFA500":"Oranž","FFFF00":"Kollane","00FF00":"Lubja hall","AFEEEE":"Kahvatu türkiis","ADD8E6":"Helesinine","DDA0DD":"Ploomililla","D3D3D3":"Helehall","FFF0F5":"Lavendlipunane","FAEBD7":"Antiikvalge","FFFFE0":"Helekollane","F0FFF0":"Meloniroheline","F0FFFF":"Taevasinine","F0F8FF":"Beebisinine","E6E6FA":"Lavendel","FFF":"Valge"},"more":"Rohkem värve...","panelTitle":"Värvid","textColorTitle":"Teksti värv"},"colordialog":{"clear":"Eemalda","highlight":"Näidis","options":"Värvi valikud","selected":"Valitud värv","title":"Värvi valimine"},"elementspath":{"eleLabel":"Elementide asukoht","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Suurus","voiceLabel":"Kirja suurus","panelTitle":"Suurus"},"label":"Kiri","panelTitle":"Kiri","voiceLabel":"Kiri"},"format":{"label":"Vorming","panelTitle":"Vorming","tag_address":"Aadress","tag_div":"Tavaline (DIV)","tag_h1":"Pealkiri 1","tag_h2":"Pealkiri 2","tag_h3":"Pealkiri 3","tag_h4":"Pealkiri 4","tag_h5":"Pealkiri 5","tag_h6":"Pealkiri 6","tag_p":"Tavaline","tag_pre":"Vormindatud"},"horizontalrule":{"toolbar":"Horisontaaljoone sisestamine"},"indent":{"indent":"Taande suurendamine","outdent":"Taande vähendamine"},"fakeobjects":{"anchor":"Ankur","flash":"Flashi animatsioon","hiddenfield":"Varjatud väli","iframe":"IFrame","unknown":"Tundmatu objekt"},"link":{"acccessKey":"Juurdepääsu võti","advanced":"Täpsemalt","advisoryContentType":"Juhendava sisu tüüp","advisoryTitle":"Juhendav tiitel","anchor":{"toolbar":"Ankru sisestamine/muutmine","menu":"Ankru omadused","title":"Ankru omadused","name":"Ankru nimi","errorName":"Palun sisesta ankru nimi","remove":"Eemalda ankur"},"anchorId":"Elemendi id järgi","anchorName":"Ankru nime järgi","charset":"Lingitud ressursi märgistik","cssClasses":"Stiilistiku klassid","emailAddress":"E-posti aadress","emailBody":"Sõnumi tekst","emailSubject":"Sõnumi teema","id":"ID","info":"Lingi info","langCode":"Keele suund","langDir":"Keele suund","langDirLTR":"Vasakult paremale (LTR)","langDirRTL":"Paremalt vasakule (RTL)","menu":"Muuda linki","name":"Nimi","noAnchors":"(Selles dokumendis pole ankruid)","noEmail":"Palun kirjuta e-posti aadress","noUrl":"Palun kirjuta lingi URL","other":"<muu>","popupDependent":"Sõltuv (Netscape)","popupFeatures":"Hüpikakna omadused","popupFullScreen":"Täisekraan (IE)","popupLeft":"Vasak asukoht","popupLocationBar":"Aadressiriba","popupMenuBar":"Menüüriba","popupResizable":"Suurust saab muuta","popupScrollBars":"Kerimisribad","popupStatusBar":"Olekuriba","popupToolbar":"Tööriistariba","popupTop":"Ülemine asukoht","rel":"Suhe","selectAnchor":"Vali ankur","styles":"Laad","tabIndex":"Tab indeks","target":"Sihtkoht","targetFrame":"<raam>","targetFrameName":"Sihtmärk raami nimi","targetPopup":"<hüpikaken>","targetPopupName":"Hüpikakna nimi","title":"Link","toAnchor":"Ankur sellel lehel","toEmail":"E-post","toUrl":"URL","toolbar":"Lingi lisamine/muutmine","type":"Lingi liik","unlink":"Lingi eemaldamine","upload":"Lae üles"},"list":{"bulletedlist":"Punktloend","numberedlist":"Numberloend"},"magicline":{"title":"Sisesta siia lõigu tekst"},"maximize":{"maximize":"Maksimeerimine","minimize":"Minimeerimine"},"pastefromword":{"confirmCleanup":"Tekst, mida tahad asetada näib pärinevat Wordist. Kas tahad selle enne asetamist puhastada?","error":"Asetatud andmete puhastamine ei olnud sisemise vea tõttu võimalik","title":"Asetamine Wordist","toolbar":"Asetamine Wordist"},"pastetext":{"button":"Asetamine tavalise tekstina","title":"Asetamine tavalise tekstina"},"removeformat":{"toolbar":"Vormingu eemaldamine"},"specialchar":{"options":"Erimärkide valikud","title":"Erimärgi valimine","toolbar":"Erimärgi sisestamine"},"stylescombo":{"label":"Stiil","panelTitle":"Vormindusstiilid","panelTitle1":"Blokkstiilid","panelTitle2":"Reasisesed stiilid","panelTitle3":"Objektistiilid"},"table":{"border":"Joone suurus","caption":"Tabeli tiitel","cell":{"menu":"Lahter","insertBefore":"Sisesta lahter enne","insertAfter":"Sisesta lahter peale","deleteCell":"Eemalda lahtrid","merge":"Ühenda lahtrid","mergeRight":"Ühenda paremale","mergeDown":"Ühenda alla","splitHorizontal":"Poolita lahter horisontaalselt","splitVertical":"Poolita lahter vertikaalselt","title":"Lahtri omadused","cellType":"Lahtri liik","rowSpan":"Ridade vahe","colSpan":"Tulpade vahe","wordWrap":"Sõnade murdmine","hAlign":"Horisontaalne joondus","vAlign":"Vertikaalne joondus","alignBaseline":"Baasjoon","bgColor":"Tausta värv","borderColor":"Äärise värv","data":"Andmed","header":"Päis","yes":"Jah","no":"Ei","invalidWidth":"Lahtri laius peab olema number.","invalidHeight":"Lahtri kõrgus peab olema number.","invalidRowSpan":"Ridade vahe peab olema täisarv.","invalidColSpan":"Tulpade vahe peab olema täisarv.","chooseColor":"Vali"},"cellPad":"Lahtri täidis","cellSpace":"Lahtri vahe","column":{"menu":"Veerg","insertBefore":"Sisesta veerg enne","insertAfter":"Sisesta veerg peale","deleteColumn":"Eemalda veerud"},"columns":"Veerud","deleteTable":"Kustuta tabel","headers":"Päised","headersBoth":"Mõlemad","headersColumn":"Esimene tulp","headersNone":"Puudub","headersRow":"Esimene rida","invalidBorder":"Äärise suurus peab olema number.","invalidCellPadding":"Lahtrite polsterdus (padding) peab olema positiivne arv.","invalidCellSpacing":"Lahtrite vahe peab olema positiivne arv.","invalidCols":"Tulpade arv peab olema nullist suurem.","invalidHeight":"Tabeli kõrgus peab olema number.","invalidRows":"Ridade arv peab olema nullist suurem.","invalidWidth":"Tabeli laius peab olema number.","menu":"Tabeli omadused","row":{"menu":"Rida","insertBefore":"Sisesta rida enne","insertAfter":"Sisesta rida peale","deleteRow":"Eemalda read"},"rows":"Read","summary":"Kokkuvõte","title":"Tabeli omadused","toolbar":"Tabel","widthPc":"protsenti","widthPx":"pikslit","widthUnit":"laiuse ühik"},"contextmenu":{"options":"Kontekstimenüü valikud"},"toolbar":{"toolbarCollapse":"Tööriistariba peitmine","toolbarExpand":"Tööriistariba näitamine","toolbarGroups":{"document":"Dokument","clipboard":"Lõikelaud/tagasivõtmine","editing":"Muutmine","forms":"Vormid","basicstyles":"Põhistiilid","paragraph":"Lõik","links":"Lingid","insert":"Sisesta","styles":"Stiilid","colors":"Värvid","tools":"Tööriistad"},"toolbars":"Redaktori tööriistaribad"},"undo":{"redo":"Toimingu kordamine","undo":"Tagasivõtmine"},"justify":{"block":"Rööpjoondus","center":"Keskjoondus","left":"Vasakjoondus","right":"Paremjoondus"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/eu.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/eu.js new file mode 100755 index 0000000000..9f876db418 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/eu.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['eu']={"editor":"Testu Aberastuko Editorea","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"ALT 0 sakatu laguntza jasotzeko","browseServer":"Zerbitzaria arakatu","url":"URL","protocol":"Protokoloa","upload":"Gora kargatu","uploadSubmit":"Zerbitzarira bidali","image":"Irudia","flash":"Flasha","form":"Formularioa","checkbox":"Kontrol-laukia","radio":"Aukera-botoia","textField":"Testu Eremua","textarea":"Testu-area","hiddenField":"Ezkutuko Eremua","button":"Botoia","select":"Hautespen Eremua","imageButton":"Irudi Botoia","notSet":"<Ezarri gabe>","id":"Id","name":"Izena","langDir":"Hizkuntzaren Norabidea","langDirLtr":"Ezkerretik Eskumara(LTR)","langDirRtl":"Eskumatik Ezkerrera (RTL)","langCode":"Hizkuntza Kodea","longDescr":"URL Deskribapen Luzea","cssClass":"Estilo-orriko Klaseak","advisoryTitle":"Izenburua","cssStyle":"Estiloa","ok":"Ados","cancel":"Utzi","close":"Itxi","preview":"Aurrebista","resize":"Arrastatu tamaina aldatzeko","generalTab":"Orokorra","advancedTab":"Aurreratua","validateNumberFailed":"Balio hau ez da zenbaki bat.","confirmNewPage":"Eduki honetan gorde gabe dauden aldaketak galduko dira. Ziur zaude orri berri bat kargatu nahi duzula?","confirmCancel":"Aukera batzuk aldatu egin dira. Ziur zaude elkarrizketa-koadroa itxi nahi duzula?","options":"Aukerak","target":"Target (Helburua)","targetNew":"Leiho Berria (_blank)","targetTop":"Goieneko Leihoan (_top)","targetSelf":"Leiho Berdinean (_self)","targetParent":"Leiho Gurasoan (_parent)","langDirLTR":"Ezkerretik Eskumara(LTR)","langDirRTL":"Eskumatik Ezkerrera (RTL)","styles":"Estiloa","cssClasses":"Estilo-orriko Klaseak","width":"Zabalera","height":"Altuera","align":"Lerrokatu","alignLeft":"Ezkerrera","alignRight":"Eskuman","alignCenter":"Erdian","alignJustify":"Justifikatu","alignTop":"Goian","alignMiddle":"Erdian","alignBottom":"Behean","alignNone":"None","invalidValue":"Balio ezegokia.","invalidHeight":"Altuera zenbaki bat izan behar da.","invalidWidth":"Zabalera zenbaki bat izan behar da.","invalidCssLength":"\"%1\" eremurako zehaztutako balioa zenbaki positibo bat izan behar du, aukeran CSS neurri unitate batekin (px, %, in, cm, mm, em, ex, pt edo pc).","invalidHtmlLength":"\"%1\" eremurako zehaztutako balioa zenbaki positibo bat izan behar du, aukeran HTML neurri unitate batekin (px edo %).","invalidInlineStyle":"Lerroko estiloan zehazten dena tupla \"name : value\" formatuko eta puntu eta komaz bereiztutako tupla bat edo gehiago izan behar dira.","cssLengthTooltip":"Zenbakia bakarrik zehazten bada pixeletan egongo da. CSS neurri unitatea ere zehaztu ahal da (px, %, in, cm, mm, em, ex, pt, edo pc).","unavailable":"%1<span class=\"cke_accessibility\">, erabilezina</span>"},"basicstyles":{"bold":"Lodia","italic":"Etzana","strike":"Marratua","subscript":"Azpi-indize","superscript":"Goi-indize","underline":"Azpimarratu"},"clipboard":{"copy":"Kopiatu","copyError":"Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+C).","cut":"Ebaki","cutError":"Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+X).","paste":"Itsatsi","pasteArea":"Itsasteko Area","pasteMsg":"Mesedez teklatua erabilita (<STRONG>Ctrl/Cmd+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.","securityMsg":"Nabigatzailearen segurtasun ezarpenak direla eta, editoreak ezin du arbela zuzenean erabili. Leiho honetan berriro itsatsi behar duzu.","title":"Itsatsi"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatikoa","bgColorTitle":"Atzeko kolorea","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Kolore gehiago...","panelTitle":"Colors","textColorTitle":"Testu Kolorea"},"colordialog":{"clear":"Garbitu","highlight":"Nabarmendu","options":"Kolore Aukerak","selected":"Hautatutako Kolorea","title":"Kolorea Hautatu"},"elementspath":{"eleLabel":"Elementu bidea","eleTitle":"%1 elementua"},"font":{"fontSize":{"label":"Tamaina","voiceLabel":"Tamaina","panelTitle":"Tamaina"},"label":"Letra-tipoa","panelTitle":"Letra-tipoa","voiceLabel":"Letra-tipoa"},"format":{"label":"Formatua","panelTitle":"Formatua","tag_address":"Helbidea","tag_div":"Paragrafoa (DIV)","tag_h1":"Izenburua 1","tag_h2":"Izenburua 2","tag_h3":"Izenburua 3","tag_h4":"Izenburua 4","tag_h5":"Izenburua 5","tag_h6":"Izenburua 6","tag_p":"Arrunta","tag_pre":"Formateatua"},"horizontalrule":{"toolbar":"Txertatu Marra Horizontala"},"indent":{"indent":"Handitu Koska","outdent":"Txikitu Koska"},"fakeobjects":{"anchor":"Aingura","flash":"Flash Animazioa","hiddenfield":"Ezkutuko Eremua","iframe":"IFrame","unknown":"Objektu ezezaguna"},"link":{"acccessKey":"Sarbide-gakoa","advanced":"Aurreratua","advisoryContentType":"Eduki Mota (Content Type)","advisoryTitle":"Izenburua","anchor":{"toolbar":"Aingura","menu":"Ainguraren Ezaugarriak","title":"Ainguraren Ezaugarriak","name":"Ainguraren Izena","errorName":"Idatzi ainguraren izena","remove":"Remove Anchor"},"anchorId":"Elementuaren ID-gatik","anchorName":"Aingura izenagatik","charset":"Estekatutako Karaktere Multzoa","cssClasses":"Estilo-orriko Klaseak","emailAddress":"ePosta Helbidea","emailBody":"Mezuaren Gorputza","emailSubject":"Mezuaren Gaia","id":"Id","info":"Estekaren Informazioa","langCode":"Hizkuntzaren Norabidea","langDir":"Hizkuntzaren Norabidea","langDirLTR":"Ezkerretik Eskumara(LTR)","langDirRTL":"Eskumatik Ezkerrera (RTL)","menu":"Aldatu Esteka","name":"Izena","noAnchors":"(Ez daude aingurak eskuragarri dokumentuan)","noEmail":"Mesedez ePosta helbidea idatzi","noUrl":"Mesedez URL esteka idatzi","other":"<bestelakoa>","popupDependent":"Menpekoa (Netscape)","popupFeatures":"Popup Leihoaren Ezaugarriak","popupFullScreen":"Pantaila Osoa (IE)","popupLeft":"Ezkerreko Posizioa","popupLocationBar":"Kokaleku Barra","popupMenuBar":"Menu Barra","popupResizable":"Tamaina Aldakorra","popupScrollBars":"Korritze Barrak","popupStatusBar":"Egoera Barra","popupToolbar":"Tresna Barra","popupTop":"Goiko Posizioa","rel":"Erlazioa","selectAnchor":"Aingura bat hautatu","styles":"Estiloa","tabIndex":"Tabulazio Indizea","target":"Target (Helburua)","targetFrame":"<marko>","targetFrameName":"Marko Helburuaren Izena","targetPopup":"<popup leihoa>","targetPopupName":"Popup Leihoaren Izena","title":"Esteka","toAnchor":"Aingura orrialde honetan","toEmail":"ePosta","toUrl":"URL","toolbar":"Txertatu/Editatu Esteka","type":"Esteka Mota","unlink":"Kendu Esteka","upload":"Gora kargatu"},"list":{"bulletedlist":"Buletdun Zerrenda","numberedlist":"Zenbakidun Zerrenda"},"magicline":{"title":"Txertatu paragrafoa hemen"},"maximize":{"maximize":"Maximizatu","minimize":"Minimizatu"},"pastefromword":{"confirmCleanup":"Itsatsi nahi duzun testua Wordetik hartua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?","error":"Barneko errore bat dela eta ezin izan da testua garbitu","title":"Itsatsi Word-etik","toolbar":"Itsatsi Word-etik"},"pastetext":{"button":"Testu Arrunta bezala Itsatsi","title":"Testu Arrunta bezala Itsatsi"},"removeformat":{"toolbar":"Kendu Formatua"},"specialchar":{"options":"Karaktere Berezien Aukerak","title":"Karaktere Berezia Aukeratu","toolbar":"Txertatu Karaktere Berezia"},"stylescombo":{"label":"Estiloa","panelTitle":"Formatu Estiloak","panelTitle1":"Bloke Estiloak","panelTitle2":"Inline Estiloak","panelTitle3":"Objektu Estiloak"},"table":{"border":"Ertzaren Zabalera","caption":"Epigrafea","cell":{"menu":"Gelaxka","insertBefore":"Txertatu Gelaxka Aurretik","insertAfter":"Txertatu Gelaxka Ostean","deleteCell":"Kendu Gelaxkak","merge":"Batu Gelaxkak","mergeRight":"Elkartu Eskumara","mergeDown":"Elkartu Behera","splitHorizontal":"Banatu Gelaxkak Horizontalki","splitVertical":"Banatu Gelaxkak Bertikalki","title":"Gelaxken Ezaugarriak","cellType":"Gelaxka Mota","rowSpan":"Hedatutako Lerroak","colSpan":"Hedatutako Zutabeak","wordWrap":"Itzulbira","hAlign":"Lerrokatze Horizontala","vAlign":"Lerrokatze Bertikala","alignBaseline":"Oinarri-lerroan","bgColor":"Fondoaren Kolorea","borderColor":"Ertzaren Kolorea","data":"Data","header":"Goiburua","yes":"Bai","no":"Ez","invalidWidth":"Gelaxkaren zabalera zenbaki bat izan behar da.","invalidHeight":"Gelaxkaren altuera zenbaki bat izan behar da.","invalidRowSpan":"Lerroen hedapena zenbaki osoa izan behar da.","invalidColSpan":"Zutabeen hedapena zenbaki osoa izan behar da.","chooseColor":"Choose"},"cellPad":"Gelaxken betegarria","cellSpace":"Gelaxka arteko tartea","column":{"menu":"Zutabea","insertBefore":"Txertatu Zutabea Aurretik","insertAfter":"Txertatu Zutabea Ostean","deleteColumn":"Ezabatu Zutabeak"},"columns":"Zutabeak","deleteTable":"Ezabatu Taula","headers":"Goiburuak","headersBoth":"Biak","headersColumn":"Lehen zutabea","headersNone":"Bat ere ez","headersRow":"Lehen lerroa","invalidBorder":"Ertzaren tamaina zenbaki bat izan behar da.","invalidCellPadding":"Gelaxken betegarria zenbaki bat izan behar da.","invalidCellSpacing":"Gelaxka arteko tartea zenbaki bat izan behar da.","invalidCols":"Zutabe kopurua 0 baino handiagoa den zenbakia izan behar da.","invalidHeight":"Taularen altuera zenbaki bat izan behar da.","invalidRows":"Lerro kopurua 0 baino handiagoa den zenbakia izan behar da.","invalidWidth":"Taularen zabalera zenbaki bat izan behar da.","menu":"Taularen Ezaugarriak","row":{"menu":"Lerroa","insertBefore":"Txertatu Lerroa Aurretik","insertAfter":"Txertatu Lerroa Ostean","deleteRow":"Ezabatu Lerroak"},"rows":"Lerroak","summary":"Laburpena","title":"Taularen Ezaugarriak","toolbar":"Taula","widthPc":"ehuneko","widthPx":"pixel","widthUnit":"zabalera unitatea"},"contextmenu":{"options":"Testuingurko Menuaren Aukerak"},"toolbar":{"toolbarCollapse":"Tresna-barra Txikitu","toolbarExpand":"Tresna-barra Luzatu","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editorearen Tresna-barra"},"undo":{"redo":"Berregin","undo":"Desegin"},"justify":{"block":"Justifikatu","center":"Lerrokatu Erdian","left":"Lerrokatu Ezkerrean","right":"Lerrokatu Eskuman"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/fa.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/fa.js new file mode 100755 index 0000000000..1a62913f1b --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/fa.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['fa']={"editor":"ویرایش‌گر متن غنی","editorPanel":"پنل ویرایشگر متن غنی","common":{"editorHelp":"کلید Alt+0 را برای راهنمایی بفشارید","browseServer":"فهرست​نمایی سرور","url":"URL","protocol":"قرارداد","upload":"بالاگذاری","uploadSubmit":"به سرور بفرست","image":"تصویر","flash":"فلش","form":"فرم","checkbox":"چک‌باکس","radio":"دکمه‌ی رادیویی","textField":"فیلد متنی","textarea":"ناحیهٴ متنی","hiddenField":"فیلد پنهان","button":"دکمه","select":"فیلد انتخاب چند گزینه​ای","imageButton":"دکمه‌ی تصویری","notSet":"<تعیین‌نشده>","id":"شناسه","name":"نام","langDir":"جهت زبان","langDirLtr":"چپ به راست","langDirRtl":"راست به چپ","langCode":"کد زبان","longDescr":"URL توصیف طولانی","cssClass":"کلاس​های شیوه​نامه (Stylesheet)","advisoryTitle":"عنوان کمکی","cssStyle":"سبک","ok":"پذیرش","cancel":"انصراف","close":"بستن","preview":"پیش‌نمایش","resize":"تغییر اندازه","generalTab":"عمومی","advancedTab":"پیش‌رفته","validateNumberFailed":"این مقدار یک عدد نیست.","confirmNewPage":"هر تغییر ایجاد شده​ی ذخیره نشده از بین خواهد رفت. آیا اطمینان دارید که قصد بارگیری صفحه جدیدی را دارید؟","confirmCancel":"برخی از گزینه‌ها تغییر کرده‌اند. آیا واقعا قصد بستن این پنجره را دارید؟","options":"گزینه​ها","target":"مقصد","targetNew":"پنجره جدید","targetTop":"بالاترین پنجره","targetSelf":"همان پنجره","targetParent":"پنجره والد","langDirLTR":"چپ به راست","langDirRTL":"راست به چپ","styles":"سبک","cssClasses":"کلاس‌های سبک‌نامه","width":"عرض","height":"طول","align":"چینش","alignLeft":"چپ","alignRight":"راست","alignCenter":"وسط","alignJustify":"بلوک چین","alignTop":"بالا","alignMiddle":"میانه","alignBottom":"پائین","alignNone":"هیچ","invalidValue":"مقدار نامعتبر.","invalidHeight":"ارتفاع باید یک عدد باشد.","invalidWidth":"عرض باید یک عدد باشد.","invalidCssLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری CSS معتبر باشد (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری HTML معتبر باشد (px or %).","invalidInlineStyle":"عدد تعیین شده برای سبک درون​خطی -Inline Style- باید دارای یک یا چند چندتایی با شکلی شبیه \"name : value\" که باید با یک \";\" از هم جدا شوند.","cssLengthTooltip":"یک عدد برای یک مقدار بر حسب پیکسل و یا یک عدد با یک واحد CSS معتبر وارد کنید (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">، غیر قابل دسترس</span>"},"basicstyles":{"bold":"درشت","italic":"خمیده","strike":"خط‌خورده","subscript":"زیرنویس","superscript":"بالانویس","underline":"زیرخط‌دار"},"clipboard":{"copy":"رونوشت","copyError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای کپی کردن را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+C).","cut":"برش","cutError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+X).","paste":"چسباندن","pasteArea":"محل چسباندن","pasteMsg":"لطفا متن را با کلیدهای (<STRONG>Ctrl/Cmd+V</STRONG>) در این جعبهٴ متنی بچسبانید و <STRONG>پذیرش</STRONG> را بزنید.","securityMsg":"به خاطر تنظیمات امنیتی مرورگر شما، ویرایشگر نمیتواند دسترسی مستقیم به دادههای clipboard داشته باشد. شما باید دوباره آنرا در این پنجره بچسبانید.","title":"چسباندن"},"button":{"selectedLabel":"%1 (انتخاب شده)"},"colorbutton":{"auto":"خودکار","bgColorTitle":"رنگ پس​زمینه","colors":{"000":"سیاه","800000":"خرمایی","8B4513":"قهوه​ای شکلاتی","2F4F4F":"ارغوانی مایل به خاکستری","008080":"آبی مایل به خاکستری","000080":"آبی سیر","4B0082":"نیلی","696969":"خاکستری تیره","B22222":"آتش آجری","A52A2A":"قهوه​ای","DAA520":"میله​ی طلایی","006400":"سبز تیره","40E0D0":"فیروزه​ای","0000CD":"آبی روشن","800080":"ارغوانی","808080":"خاکستری","F00":"قرمز","FF8C00":"نارنجی پررنگ","FFD700":"طلایی","008000":"سبز","0FF":"آبی مایل به سبز","00F":"آبی","EE82EE":"بنفش","A9A9A9":"خاکستری مات","FFA07A":"صورتی کدر روشن","FFA500":"نارنجی","FFFF00":"زرد","00FF00":"فسفری","AFEEEE":"فیروزه​ای رنگ پریده","ADD8E6":"آبی کمرنگ","DDA0DD":"آلویی","D3D3D3":"خاکستری روشن","FFF0F5":"بنفش کمرنگ","FAEBD7":"عتیقه سفید","FFFFE0":"زرد روشن","F0FFF0":"عسلی","F0FFFF":"لاجوردی","F0F8FF":"آبی براق","E6E6FA":"بنفش کمرنگ","FFF":"سفید"},"more":"رنگ​های بیشتر...","panelTitle":"رنگها","textColorTitle":"رنگ متن"},"colordialog":{"clear":"پاک کردن","highlight":"متمایز","options":"گزینه​های رنگ","selected":"رنگ انتخاب شده","title":"انتخاب رنگ"},"elementspath":{"eleLabel":"مسیر عناصر","eleTitle":"%1 عنصر"},"font":{"fontSize":{"label":"اندازه","voiceLabel":"اندازه قلم","panelTitle":"اندازه قلم"},"label":"قلم","panelTitle":"نام قلم","voiceLabel":"قلم"},"format":{"label":"قالب","panelTitle":"قالب بند","tag_address":"نشانی","tag_div":"بند","tag_h1":"سرنویس ۱","tag_h2":"سرنویس ۲","tag_h3":"سرنویس ۳","tag_h4":"سرنویس ۴","tag_h5":"سرنویس ۵","tag_h6":"سرنویس ۶","tag_p":"معمولی","tag_pre":"قالب‌دار"},"horizontalrule":{"toolbar":"گنجاندن خط افقی"},"indent":{"indent":"افزایش تورفتگی","outdent":"کاهش تورفتگی"},"fakeobjects":{"anchor":"لنگر","flash":"انیمشن فلش","hiddenfield":"فیلد پنهان","iframe":"IFrame","unknown":"شیء ناشناخته"},"link":{"acccessKey":"کلید دستیابی","advanced":"پیشرفته","advisoryContentType":"نوع محتوای کمکی","advisoryTitle":"عنوان کمکی","anchor":{"toolbar":"گنجاندن/ویرایش لنگر","menu":"ویژگی​های لنگر","title":"ویژگی​های لنگر","name":"نام لنگر","errorName":"لطفا نام لنگر را بنویسید","remove":"حذف لنگر"},"anchorId":"با شناسهٴ المان","anchorName":"با نام لنگر","charset":"نویسه​گان منبع پیوند شده","cssClasses":"کلاس​های شیوه​نامه(Stylesheet)","emailAddress":"نشانی پست الکترونیکی","emailBody":"متن پیام","emailSubject":"موضوع پیام","id":"شناسه","info":"اطلاعات پیوند","langCode":"جهت​نمای زبان","langDir":"جهت​نمای زبان","langDirLTR":"چپ به راست (LTR)","langDirRTL":"راست به چپ (RTL)","menu":"ویرایش پیوند","name":"نام","noAnchors":"(در این سند لنگری دردسترس نیست)","noEmail":"لطفا نشانی پست الکترونیکی را بنویسید","noUrl":"لطفا URL پیوند را بنویسید","other":"<سایر>","popupDependent":"وابسته (Netscape)","popupFeatures":"ویژگی​های پنجرهٴ پاپاپ","popupFullScreen":"تمام صفحه (IE)","popupLeft":"موقعیت چپ","popupLocationBar":"نوار موقعیت","popupMenuBar":"نوار منو","popupResizable":"قابل تغییر اندازه","popupScrollBars":"میله​های پیمایش","popupStatusBar":"نوار وضعیت","popupToolbar":"نوار ابزار","popupTop":"موقعیت بالا","rel":"وابستگی","selectAnchor":"یک لنگر برگزینید","styles":"شیوه (style)","tabIndex":"نمایهٴ دسترسی با برگه","target":"مقصد","targetFrame":"<فریم>","targetFrameName":"نام فریم مقصد","targetPopup":"<پنجرهٴ پاپاپ>","targetPopupName":"نام پنجرهٴ پاپاپ","title":"پیوند","toAnchor":"لنگر در همین صفحه","toEmail":"پست الکترونیکی","toUrl":"URL","toolbar":"گنجاندن/ویرایش پیوند","type":"نوع پیوند","unlink":"برداشتن پیوند","upload":"انتقال به سرور"},"list":{"bulletedlist":"فهرست نقطه​ای","numberedlist":"فهرست شماره​دار"},"magicline":{"title":"قرار دادن بند در اینجا"},"maximize":{"maximize":"بیشنه کردن","minimize":"کمینه کردن"},"pastefromword":{"confirmCleanup":"متنی که میخواهید بچسبانید به نظر میرسد که از Word کپی شده است. آیا میخواهید قبل از چسباندن آن را پاکسازی کنید؟","error":"به دلیل بروز خطای داخلی امکان پاکسازی اطلاعات بازنشانی شده وجود ندارد.","title":"چسباندن از Word","toolbar":"چسباندن از Word"},"pastetext":{"button":"چسباندن به عنوان متن ساده","title":"چسباندن به عنوان متن ساده"},"removeformat":{"toolbar":"برداشتن فرمت"},"specialchar":{"options":"گزینه‌های نویسه‌های ویژه","title":"گزینش نویسه‌ی ویژه","toolbar":"گنجاندن نویسه‌ی ویژه"},"stylescombo":{"label":"سبک","panelTitle":"سبکهای قالببندی","panelTitle1":"سبکهای بلوک","panelTitle2":"سبکهای درونخطی","panelTitle3":"سبکهای شیء"},"table":{"border":"اندازهٴ لبه","caption":"عنوان","cell":{"menu":"سلول","insertBefore":"افزودن سلول قبل از","insertAfter":"افزودن سلول بعد از","deleteCell":"حذف سلولها","merge":"ادغام سلولها","mergeRight":"ادغام به راست","mergeDown":"ادغام به پایین","splitHorizontal":"جدا کردن افقی سلول","splitVertical":"جدا کردن عمودی سلول","title":"ویژگیهای سلول","cellType":"نوع سلول","rowSpan":"محدوده ردیفها","colSpan":"محدوده ستونها","wordWrap":"شکستن کلمه","hAlign":"چینش افقی","vAlign":"چینش عمودی","alignBaseline":"خط مبنا","bgColor":"رنگ زمینه","borderColor":"رنگ خطوط","data":"اطلاعات","header":"سرنویس","yes":"بله","no":"خیر","invalidWidth":"عرض سلول باید یک عدد باشد.","invalidHeight":"ارتفاع سلول باید عدد باشد.","invalidRowSpan":"مقدار محدوده ردیفها باید یک عدد باشد.","invalidColSpan":"مقدار محدوده ستونها باید یک عدد باشد.","chooseColor":"انتخاب"},"cellPad":"فاصلهٴ پرشده در سلول","cellSpace":"فاصلهٴ میان سلولها","column":{"menu":"ستون","insertBefore":"افزودن ستون قبل از","insertAfter":"افزودن ستون بعد از","deleteColumn":"حذف ستونها"},"columns":"ستونها","deleteTable":"پاک کردن جدول","headers":"سرنویسها","headersBoth":"هردو","headersColumn":"اولین ستون","headersNone":"هیچ","headersRow":"اولین ردیف","invalidBorder":"مقدار اندازه خطوط باید یک عدد باشد.","invalidCellPadding":"بالشتک سلول باید یک عدد باشد.","invalidCellSpacing":"مقدار فاصلهگذاری سلول باید یک عدد باشد.","invalidCols":"تعداد ستونها باید یک عدد بزرگتر از 0 باشد.","invalidHeight":"مقدار ارتفاع جدول باید یک عدد باشد.","invalidRows":"تعداد ردیفها باید یک عدد بزرگتر از 0 باشد.","invalidWidth":"مقدار پهنای جدول باید یک عدد باشد.","menu":"ویژگیهای جدول","row":{"menu":"سطر","insertBefore":"افزودن سطر قبل از","insertAfter":"افزودن سطر بعد از","deleteRow":"حذف سطرها"},"rows":"سطرها","summary":"خلاصه","title":"ویژگیهای جدول","toolbar":"جدول","widthPc":"درصد","widthPx":"پیکسل","widthUnit":"واحد پهنا"},"contextmenu":{"options":"گزینه​های منوی زمینه"},"toolbar":{"toolbarCollapse":"بستن نوار ابزار","toolbarExpand":"بازکردن نوار ابزار","toolbarGroups":{"document":"سند","clipboard":"حافظه موقت/برگشت","editing":"در حال ویرایش","forms":"فرم​ها","basicstyles":"سبک‌های پایه","paragraph":"بند","links":"پیوندها","insert":"ورود","styles":"سبک‌ها","colors":"رنگ​ها","tools":"ابزارها"},"toolbars":"نوار ابزارهای ویرایش‌گر"},"undo":{"redo":"بازچیدن","undo":"واچیدن"},"justify":{"block":"بلوک چین","center":"میان چین","left":"چپ چین","right":"راست چین"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/fi.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/fi.js new file mode 100755 index 0000000000..3c49fd1b85 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/fi.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['fi']={"editor":"Rikastekstieditori","editorPanel":"Rikastekstieditoripaneeli","common":{"editorHelp":"Paina ALT 0 nähdäksesi ohjeen","browseServer":"Selaa palvelinta","url":"Osoite","protocol":"Protokolla","upload":"Lisää tiedosto","uploadSubmit":"Lähetä palvelimelle","image":"Kuva","flash":"Flash-animaatio","form":"Lomake","checkbox":"Valintaruutu","radio":"Radiopainike","textField":"Tekstikenttä","textarea":"Tekstilaatikko","hiddenField":"Piilokenttä","button":"Painike","select":"Valintakenttä","imageButton":"Kuvapainike","notSet":"<ei asetettu>","id":"Tunniste","name":"Nimi","langDir":"Kielen suunta","langDirLtr":"Vasemmalta oikealle (LTR)","langDirRtl":"Oikealta vasemmalle (RTL)","langCode":"Kielikoodi","longDescr":"Pitkän kuvauksen URL","cssClass":"Tyyliluokat","advisoryTitle":"Avustava otsikko","cssStyle":"Tyyli","ok":"OK","cancel":"Peruuta","close":"Sulje","preview":"Esikatselu","resize":"Raahaa muuttaaksesi kokoa","generalTab":"Yleinen","advancedTab":"Lisäominaisuudet","validateNumberFailed":"Arvon pitää olla numero.","confirmNewPage":"Kaikki tallentamattomat muutokset tähän sisältöön menetetään. Oletko varma, että haluat ladata uuden sivun?","confirmCancel":"Jotkut asetuksista on muuttuneet. Oletko varma, että haluat sulkea valintaikkunan?","options":"Asetukset","target":"Kohde","targetNew":"Uusi ikkuna (_blank)","targetTop":"Päällimmäinen ikkuna (_top)","targetSelf":"Sama ikkuna (_self)","targetParent":"Ylemmän tason ikkuna (_parent)","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","styles":"Tyyli","cssClasses":"Tyylitiedoston luokat","width":"Leveys","height":"Korkeus","align":"Kohdistus","alignLeft":"Vasemmalle","alignRight":"Oikealle","alignCenter":"Keskelle","alignJustify":"Tasaa molemmat reunat","alignTop":"Ylös","alignMiddle":"Keskelle","alignBottom":"Alas","alignNone":"Ei asetettu","invalidValue":"Virheellinen arvo.","invalidHeight":"Korkeuden täytyy olla numero.","invalidWidth":"Leveyden täytyy olla numero.","invalidCssLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku CSS mittayksikön (px, %, in, cm, mm, em, ex, pt tai pc) kanssa tai ilman.","invalidHtmlLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku HTML mittayksikön (px tai %) kanssa tai ilman.","invalidInlineStyle":"Tyylille annetun arvon täytyy koostua yhdestä tai useammasta \"nimi : arvo\" parista, jotka ovat eroteltuna toisistaan puolipisteillä.","cssLengthTooltip":"Anna numeroarvo pikseleinä tai numeroarvo CSS mittayksikön kanssa (px, %, in, cm, mm, em, ex, pt, tai pc).","unavailable":"%1<span class=\"cke_accessibility\">, ei saatavissa</span>"},"basicstyles":{"bold":"Lihavoitu","italic":"Kursivoitu","strike":"Yliviivattu","subscript":"Alaindeksi","superscript":"Yläindeksi","underline":"Alleviivattu"},"clipboard":{"copy":"Kopioi","copyError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).","cut":"Leikkaa","cutError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).","paste":"Liitä","pasteArea":"Leikealue","pasteMsg":"Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.","securityMsg":"Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.","title":"Liitä"},"button":{"selectedLabel":"%1 (Valittu)"},"colorbutton":{"auto":"Automaattinen","bgColorTitle":"Taustaväri","colors":{"000":"Musta","800000":"Kastanjanruskea","8B4513":"Satulanruskea","2F4F4F":"Tumma liuskekivenharmaa","008080":"Sinivihreä","000080":"Laivastonsininen","4B0082":"Indigonsininen","696969":"Tummanharmaa","B22222":"Tiili","A52A2A":"Ruskea","DAA520":"Kultapiisku","006400":"Tummanvihreä","40E0D0":"Turkoosi","0000CD":"Keskisininen","800080":"Purppura","808080":"Harmaa","F00":"Punainen","FF8C00":"Tumma oranssi","FFD700":"Kulta","008000":"Vihreä","0FF":"Syaani","00F":"Sininen","EE82EE":"Violetti","A9A9A9":"Tummanharmaa","FFA07A":"Vaaleanlohenpunainen","FFA500":"Oranssi","FFFF00":"Keltainen","00FF00":"Limetin vihreä","AFEEEE":"Haalea turkoosi","ADD8E6":"Vaaleansininen","DDA0DD":"Luumu","D3D3D3":"Vaaleanharmaa","FFF0F5":"Laventelinpunainen","FAEBD7":"Antiikinvalkoinen","FFFFE0":"Vaaleankeltainen","F0FFF0":"Hunajameloni","F0FFFF":"Asurinsininen","F0F8FF":"Alice Blue -sininen","E6E6FA":"Lavanteli","FFF":"Valkoinen"},"more":"Lisää värejä...","panelTitle":"Värit","textColorTitle":"Tekstiväri"},"colordialog":{"clear":"Poista","highlight":"Korostus","options":"Värin ominaisuudet","selected":"Valittu","title":"Valitse väri"},"elementspath":{"eleLabel":"Elementin polku","eleTitle":"%1 elementti"},"font":{"fontSize":{"label":"Koko","voiceLabel":"Kirjaisimen koko","panelTitle":"Koko"},"label":"Kirjaisinlaji","panelTitle":"Kirjaisinlaji","voiceLabel":"Kirjaisinlaji"},"format":{"label":"Muotoilu","panelTitle":"Muotoilu","tag_address":"Osoite","tag_div":"Normaali (DIV)","tag_h1":"Otsikko 1","tag_h2":"Otsikko 2","tag_h3":"Otsikko 3","tag_h4":"Otsikko 4","tag_h5":"Otsikko 5","tag_h6":"Otsikko 6","tag_p":"Normaali","tag_pre":"Muotoiltu"},"horizontalrule":{"toolbar":"Lisää murtoviiva"},"indent":{"indent":"Suurenna sisennystä","outdent":"Pienennä sisennystä"},"fakeobjects":{"anchor":"Ankkuri","flash":"Flash animaatio","hiddenfield":"Piilokenttä","iframe":"IFrame-kehys","unknown":"Tuntematon objekti"},"link":{"acccessKey":"Pikanäppäin","advanced":"Lisäominaisuudet","advisoryContentType":"Avustava sisällön tyyppi","advisoryTitle":"Avustava otsikko","anchor":{"toolbar":"Lisää ankkuri/muokkaa ankkuria","menu":"Ankkurin ominaisuudet","title":"Ankkurin ominaisuudet","name":"Nimi","errorName":"Ankkurille on kirjoitettava nimi","remove":"Poista ankkuri"},"anchorId":"Ankkurin ID:n mukaan","anchorName":"Ankkurin nimen mukaan","charset":"Linkitetty kirjaimisto","cssClasses":"Tyyliluokat","emailAddress":"Sähköpostiosoite","emailBody":"Viesti","emailSubject":"Aihe","id":"Tunniste","info":"Linkin tiedot","langCode":"Kielen suunta","langDir":"Kielen suunta","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","menu":"Muokkaa linkkiä","name":"Nimi","noAnchors":"(Ei ankkureita tässä dokumentissa)","noEmail":"Kirjoita sähköpostiosoite","noUrl":"Linkille on kirjoitettava URL","other":"<muu>","popupDependent":"Riippuva (Netscape)","popupFeatures":"Popup ikkunan ominaisuudet","popupFullScreen":"Täysi ikkuna (IE)","popupLeft":"Vasemmalta (px)","popupLocationBar":"Osoiterivi","popupMenuBar":"Valikkorivi","popupResizable":"Venytettävä","popupScrollBars":"Vierityspalkit","popupStatusBar":"Tilarivi","popupToolbar":"Vakiopainikkeet","popupTop":"Ylhäältä (px)","rel":"Suhde","selectAnchor":"Valitse ankkuri","styles":"Tyyli","tabIndex":"Tabulaattori indeksi","target":"Kohde","targetFrame":"<kehys>","targetFrameName":"Kohdekehyksen nimi","targetPopup":"<popup ikkuna>","targetPopupName":"Popup ikkunan nimi","title":"Linkki","toAnchor":"Ankkuri tässä sivussa","toEmail":"Sähköposti","toUrl":"Osoite","toolbar":"Lisää linkki/muokkaa linkkiä","type":"Linkkityyppi","unlink":"Poista linkki","upload":"Lisää tiedosto"},"list":{"bulletedlist":"Luettelomerkit","numberedlist":"Numerointi"},"magicline":{"title":"Lisää kappale tähän."},"maximize":{"maximize":"Suurenna","minimize":"Pienennä"},"pastefromword":{"confirmCleanup":"Liittämäsi teksti näyttäisi olevan Word-dokumentista. Haluatko siivota sen ennen liittämistä? (Suositus: Kyllä)","error":"Liitetyn tiedon siivoaminen ei onnistunut sisäisen virheen takia","title":"Liitä Word-dokumentista","toolbar":"Liitä Word-dokumentista"},"pastetext":{"button":"Liitä tekstinä","title":"Liitä tekstinä"},"removeformat":{"toolbar":"Poista muotoilu"},"specialchar":{"options":"Erikoismerkin ominaisuudet","title":"Valitse erikoismerkki","toolbar":"Lisää erikoismerkki"},"stylescombo":{"label":"Tyyli","panelTitle":"Muotoilujen tyylit","panelTitle1":"Lohkojen tyylit","panelTitle2":"Rivinsisäiset tyylit","panelTitle3":"Objektien tyylit"},"table":{"border":"Rajan paksuus","caption":"Otsikko","cell":{"menu":"Solu","insertBefore":"Lisää solu eteen","insertAfter":"Lisää solu perään","deleteCell":"Poista solut","merge":"Yhdistä solut","mergeRight":"Yhdistä oikealla olevan kanssa","mergeDown":"Yhdistä alla olevan kanssa","splitHorizontal":"Jaa solu vaakasuunnassa","splitVertical":"Jaa solu pystysuunnassa","title":"Solun ominaisuudet","cellType":"Solun tyyppi","rowSpan":"Rivin jatkuvuus","colSpan":"Solun jatkuvuus","wordWrap":"Rivitys","hAlign":"Horisontaali kohdistus","vAlign":"Vertikaali kohdistus","alignBaseline":"Alas (teksti)","bgColor":"Taustan väri","borderColor":"Reunan väri","data":"Data","header":"Ylätunniste","yes":"Kyllä","no":"Ei","invalidWidth":"Solun leveyden täytyy olla numero.","invalidHeight":"Solun korkeuden täytyy olla numero.","invalidRowSpan":"Rivin jatkuvuuden täytyy olla kokonaisluku.","invalidColSpan":"Solun jatkuvuuden täytyy olla kokonaisluku.","chooseColor":"Valitse"},"cellPad":"Solujen sisennys","cellSpace":"Solujen väli","column":{"menu":"Sarake","insertBefore":"Lisää sarake vasemmalle","insertAfter":"Lisää sarake oikealle","deleteColumn":"Poista sarakkeet"},"columns":"Sarakkeet","deleteTable":"Poista taulu","headers":"Ylätunnisteet","headersBoth":"Molemmat","headersColumn":"Ensimmäinen sarake","headersNone":"Ei","headersRow":"Ensimmäinen rivi","invalidBorder":"Reunan koon täytyy olla numero.","invalidCellPadding":"Solujen sisennyksen täytyy olla numero.","invalidCellSpacing":"Solujen välin täytyy olla numero.","invalidCols":"Sarakkeiden määrän täytyy olla suurempi kuin 0.","invalidHeight":"Taulun korkeuden täytyy olla numero.","invalidRows":"Rivien määrän täytyy olla suurempi kuin 0.","invalidWidth":"Taulun leveyden täytyy olla numero.","menu":"Taulun ominaisuudet","row":{"menu":"Rivi","insertBefore":"Lisää rivi yläpuolelle","insertAfter":"Lisää rivi alapuolelle","deleteRow":"Poista rivit"},"rows":"Rivit","summary":"Yhteenveto","title":"Taulun ominaisuudet","toolbar":"Taulu","widthPc":"prosenttia","widthPx":"pikseliä","widthUnit":"leveysyksikkö"},"contextmenu":{"options":"Pikavalikon ominaisuudet"},"toolbar":{"toolbarCollapse":"Kutista työkalupalkki","toolbarExpand":"Laajenna työkalupalkki","toolbarGroups":{"document":"Dokumentti","clipboard":"Leikepöytä/Kumoa","editing":"Muokkaus","forms":"Lomakkeet","basicstyles":"Perustyylit","paragraph":"Kappale","links":"Linkit","insert":"Lisää","styles":"Tyylit","colors":"Värit","tools":"Työkalut"},"toolbars":"Editorin työkalupalkit"},"undo":{"redo":"Toista","undo":"Kumoa"},"justify":{"block":"Tasaa molemmat reunat","center":"Keskitä","left":"Tasaa vasemmat reunat","right":"Tasaa oikeat reunat"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/fo.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/fo.js new file mode 100755 index 0000000000..69554f98d1 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/fo.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['fo']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Trýst ALT og 0 fyri vegleiðing","browseServer":"Ambætarakagi","url":"URL","protocol":"Protokoll","upload":"Send til ambætaran","uploadSubmit":"Send til ambætaran","image":"Myndir","flash":"Flash","form":"Formur","checkbox":"Flugubein","radio":"Radioknøttur","textField":"Tekstteigur","textarea":"Tekstumráði","hiddenField":"Fjaldur teigur","button":"Knøttur","select":"Valskrá","imageButton":"Myndaknøttur","notSet":"<ikki sett>","id":"Id","name":"Navn","langDir":"Tekstkós","langDirLtr":"Frá vinstru til høgru (LTR)","langDirRtl":"Frá høgru til vinstru (RTL)","langCode":"Málkoda","longDescr":"Víðkað URL frágreiðing","cssClass":"Typografi klassar","advisoryTitle":"Vegleiðandi heiti","cssStyle":"Typografi","ok":"Góðkent","cancel":"Avlýs","close":"Lat aftur","preview":"Frumsýn","resize":"Drag fyri at broyta stødd","generalTab":"Generelt","advancedTab":"Fjølbroytt","validateNumberFailed":"Hetta er ikki eitt tal.","confirmNewPage":"Allar ikki goymdar broytingar í hesum innihaldið hvørva. Skal nýggj síða lesast kortini?","confirmCancel":"Nakrir valmøguleikar eru broyttir. Ert tú vísur í, at dialogurin skal latast aftur?","options":"Options","target":"Target","targetNew":"Nýtt vindeyga (_blank)","targetTop":"Vindeyga ovast (_top)","targetSelf":"Sama vindeyga (_self)","targetParent":"Upphavligt vindeyga (_parent)","langDirLTR":"Frá vinstru til høgru (LTR)","langDirRTL":"Frá høgru til vinstru (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Breidd","height":"Hædd","align":"Justering","alignLeft":"Vinstra","alignRight":"Høgra","alignCenter":"Miðsett","alignJustify":"Javnir tekstkantar","alignTop":"Ovast","alignMiddle":"Miðja","alignBottom":"Botnur","alignNone":"Eingin","invalidValue":"Invalid value.","invalidHeight":"Hædd má vera eitt tal.","invalidWidth":"Breidd má vera eitt tal.","invalidCssLength":"Virðið sett í \"%1\" feltið má vera eitt positivt tal, við ella uttan gyldugum CSS mátieind (px, %, in, cm, mm, em, ex, pt, ella pc).","invalidHtmlLength":"Virðið sett í \"%1\" feltiðield má vera eitt positivt tal, við ella uttan gyldugum CSS mátieind (px ella %).","invalidInlineStyle":"Virði specifiserað fyri inline style má hava eitt ella fleiri pør (tuples) skrivað sum \"name : value\", hvørt parið sundurskilt við semi-colon.","cssLengthTooltip":"Skriva eitt tal fyri eitt virði í pixels ella eitt tal við gyldigum CSS eind (px, %, in, cm, mm, em, ex, pt, ella pc).","unavailable":"%1<span class=\"cke_accessibility\">, ikki tøkt</span>"},"basicstyles":{"bold":"Feit skrift","italic":"Skráskrift","strike":"Yvirstrikað","subscript":"Lækkað skrift","superscript":"Hækkað skrift","underline":"Undirstrikað"},"clipboard":{"copy":"Avrita","copyError":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (Ctrl/Cmd+C).","cut":"Kvett","cutError":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. Vinarliga nýt knappaborðið til at kvetta tekstin (Ctrl/Cmd+X).","paste":"Innrita","pasteArea":"Avritingarumráði","pasteMsg":"Vinarliga koyr tekstin í hendan rútin við knappaborðinum (<strong>Ctrl/Cmd+V</strong>) og klikk á <strong>Góðtak</strong>.","securityMsg":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í beinleiðis atgongd til avritingarminnið. Tygum mugu royna aftur í hesum rútinum.","title":"Innrita"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatiskt","bgColorTitle":"Bakgrundslitur","colors":{"000":"Svart","800000":"Maroon","8B4513":"Saðilsbrúnt","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Myrkagrátt","B22222":"Fire Brick","A52A2A":"Brúnt","DAA520":"Gullstavur","006400":"Myrkagrønt","40E0D0":"Turquoise","0000CD":"Meðal blátt","800080":"Purple","808080":"Grátt","F00":"Reytt","FF8C00":"Myrkt appelsingult","FFD700":"Gull","008000":"Grønt","0FF":"Cyan","00F":"Blátt","EE82EE":"Violet","A9A9A9":"Døkt grátt","FFA07A":"Ljósur laksur","FFA500":"Appelsingult","FFFF00":"Gult","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Ljósablátt","DDA0DD":"Plum","D3D3D3":"Ljósagrátt","FFF0F5":"Lavender Blush","FAEBD7":"Klassiskt hvítt","FFFFE0":"Ljósagult","F0FFF0":"Hunangsdøggur","F0FFFF":"Azure","F0F8FF":"Alice Blátt","E6E6FA":"Lavender","FFF":"Hvítt"},"more":"Fleiri litir...","panelTitle":"Litir","textColorTitle":"Tekstlitur"},"colordialog":{"clear":"Strika","highlight":"Framheva","options":"Litmøguleikar","selected":"Valdur litur","title":"Vel lit"},"elementspath":{"eleLabel":"Slóð til elementir","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Skriftstødd","voiceLabel":"Skriftstødd","panelTitle":"Skriftstødd"},"label":"Skrift","panelTitle":"Skrift","voiceLabel":"Skrift"},"format":{"label":"Skriftsnið","panelTitle":"Skriftsnið","tag_address":"Adressa","tag_div":"Vanligt (DIV)","tag_h1":"Yvirskrift 1","tag_h2":"Yvirskrift 2","tag_h3":"Yvirskrift 3","tag_h4":"Yvirskrift 4","tag_h5":"Yvirskrift 5","tag_h6":"Yvirskrift 6","tag_p":"Vanligt","tag_pre":"Sniðgivið"},"horizontalrule":{"toolbar":"Ger vatnrætta linju"},"indent":{"indent":"Økja reglubrotarinntriv","outdent":"Minka reglubrotarinntriv"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Fjaldur teigur","iframe":"IFrame","unknown":"Ókent Object"},"link":{"acccessKey":"Snarvegisknöttur","advanced":"Fjølbroytt","advisoryContentType":"Vegleiðandi innihaldsslag","advisoryTitle":"Vegleiðandi heiti","anchor":{"toolbar":"Ger/broyt marknastein","menu":"Eginleikar fyri marknastein","title":"Eginleikar fyri marknastein","name":"Heiti marknasteinsins","errorName":"Vinarliga rita marknasteinsins heiti","remove":"Strika marknastein"},"anchorId":"Eftir element Id","anchorName":"Eftir navni á marknasteini","charset":"Atknýtt teknsett","cssClasses":"Typografi klassar","emailAddress":"Teldupost-adressa","emailBody":"Breyðtekstur","emailSubject":"Evni","id":"Id","info":"Tilknýtis upplýsingar","langCode":"Tekstkós","langDir":"Tekstkós","langDirLTR":"Frá vinstru til høgru (LTR)","langDirRTL":"Frá høgru til vinstru (RTL)","menu":"Broyt tilknýti","name":"Navn","noAnchors":"(Eingir marknasteinar eru í hesum dokumentið)","noEmail":"Vinarliga skriva teldupost-adressu","noUrl":"Vinarliga skriva tilknýti (URL)","other":"<annað>","popupDependent":"Bundið (Netscape)","popupFeatures":"Popup vindeygans víðkaðu eginleikar","popupFullScreen":"Fullur skermur (IE)","popupLeft":"Frástøða frá vinstru","popupLocationBar":"Adressulinja","popupMenuBar":"Skrábjálki","popupResizable":"Stødd kann broytast","popupScrollBars":"Rullibjálki","popupStatusBar":"Støðufrágreiðingarbjálki","popupToolbar":"Amboðsbjálki","popupTop":"Frástøða frá íerva","rel":"Relatión","selectAnchor":"Vel ein marknastein","styles":"Typografi","tabIndex":"Tabulator indeks","target":"Target","targetFrame":"<ramma>","targetFrameName":"Vís navn vindeygans","targetPopup":"<popup vindeyga>","targetPopupName":"Popup vindeygans navn","title":"Tilknýti","toAnchor":"Tilknýti til marknastein í tekstinum","toEmail":"Teldupostur","toUrl":"URL","toolbar":"Ger/broyt tilknýti","type":"Tilknýtisslag","unlink":"Strika tilknýti","upload":"Send til ambætaran"},"list":{"bulletedlist":"Punktmerktur listi","numberedlist":"Talmerktur listi"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maksimera","minimize":"Minimera"},"pastefromword":{"confirmCleanup":"Teksturin, tú roynir at seta inn, sýnist at stava frá Word. Skal teksturin reinsast fyrst?","error":"Tað eydnaðist ikki at reinsa tekstin vegna ein internan feil","title":"Innrita frá Word","toolbar":"Innrita frá Word"},"pastetext":{"button":"Innrita som reinan tekst","title":"Innrita som reinan tekst"},"removeformat":{"toolbar":"Strika sniðgeving"},"specialchar":{"options":"Møguleikar við serteknum","title":"Vel sertekn","toolbar":"Set inn sertekn"},"stylescombo":{"label":"Typografi","panelTitle":"Formatterings stílir","panelTitle1":"Blokk stílir","panelTitle2":"Inline stílir","panelTitle3":"Object stílir"},"table":{"border":"Bordabreidd","caption":"Tabellfrágreiðing","cell":{"menu":"Meski","insertBefore":"Set meska inn áðrenn","insertAfter":"Set meska inn aftaná","deleteCell":"Strika meskar","merge":"Flætta meskar","mergeRight":"Flætta meskar til høgru","mergeDown":"Flætta saman","splitHorizontal":"Kloyv meska vatnrætt","splitVertical":"Kloyv meska loddrætt","title":"Mesku eginleikar","cellType":"Mesku slag","rowSpan":"Ræð spenni","colSpan":"Kolonnu spenni","wordWrap":"Orðkloyving","hAlign":"Horisontal plasering","vAlign":"Loddrøtt plasering","alignBaseline":"Basislinja","bgColor":"Bakgrundslitur","borderColor":"Bordalitur","data":"Data","header":"Header","yes":"Ja","no":"Nei","invalidWidth":"Meskubreidd má vera eitt tal.","invalidHeight":"Meskuhædd má vera eitt tal.","invalidRowSpan":"Raðspennið má vera eitt heiltal.","invalidColSpan":"Kolonnuspennið má vera eitt heiltal.","chooseColor":"Vel"},"cellPad":"Meskubreddi","cellSpace":"Fjarstøða millum meskar","column":{"menu":"Kolonna","insertBefore":"Set kolonnu inn áðrenn","insertAfter":"Set kolonnu inn aftaná","deleteColumn":"Strika kolonnur"},"columns":"Kolonnur","deleteTable":"Strika tabell","headers":"Yvirskriftir","headersBoth":"Báðir","headersColumn":"Fyrsta kolonna","headersNone":"Eingin","headersRow":"Fyrsta rað","invalidBorder":"Borda-stødd má vera eitt tal.","invalidCellPadding":"Cell padding má vera eitt tal.","invalidCellSpacing":"Cell spacing má vera eitt tal.","invalidCols":"Talið av kolonnum má vera eitt tal størri enn 0.","invalidHeight":"Tabell-hædd má vera eitt tal.","invalidRows":"Talið av røðum má vera eitt tal størri enn 0.","invalidWidth":"Tabell-breidd má vera eitt tal.","menu":"Eginleikar fyri tabell","row":{"menu":"Rað","insertBefore":"Set rað inn áðrenn","insertAfter":"Set rað inn aftaná","deleteRow":"Strika røðir"},"rows":"Røðir","summary":"Samandráttur","title":"Eginleikar fyri tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"pixels","widthUnit":"breiddar unit"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Lat Toolbar aftur","toolbarExpand":"Vís Toolbar","toolbarGroups":{"document":"Dokument","clipboard":"Clipboard/Undo","editing":"Editering","forms":"Formar","basicstyles":"Grundleggjandi Styles","paragraph":"Reglubrot","links":"Leinkjur","insert":"Set inn","styles":"Styles","colors":"Litir","tools":"Tól"},"toolbars":"Editor toolbars"},"undo":{"redo":"Vend aftur","undo":"Angra"},"justify":{"block":"Javnir tekstkantar","center":"Miðsett","left":"Vinstrasett","right":"Høgrasett"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/fr-ca.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/fr-ca.js new file mode 100755 index 0000000000..d5c464cd30 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/fr-ca.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['fr-ca']={"editor":"Éditeur de texte enrichi","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Appuyez sur 0 pour de l'aide","browseServer":"Parcourir le serveur","url":"URL","protocol":"Protocole","upload":"Envoyer","uploadSubmit":"Envoyer au serveur","image":"Image","flash":"Animation Flash","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ caché","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton image","notSet":"<Par défaut>","id":"Id","name":"Nom","langDir":"Sens d'écriture","langDirLtr":"De gauche à droite (LTR)","langDirRtl":"De droite à gauche (RTL)","langCode":"Code langue","longDescr":"URL de description longue","cssClass":"Classes CSS","advisoryTitle":"Titre","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Redimensionner","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous certain de vouloir charger une nouvelle page?","confirmCancel":"Certaines options ont été modifiées. Êtes-vous certain de vouloir fermer?","options":"Options","target":"Cible","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieur (_top)","targetSelf":"Cette fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"De gauche à droite (LTR)","langDirRTL":"De droite à gauche (RTL)","styles":"Style","cssClasses":"Classe CSS","width":"Largeur","height":"Hauteur","align":"Alignement","alignLeft":"Gauche","alignRight":"Droite","alignCenter":"Centré","alignJustify":"Justifié","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"None","invalidValue":"Valeur invalide.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidCssLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure HTML valide (px ou %).","invalidInlineStyle":"La valeur spécifiée pour le style intégré doit être composée d'un ou plusieurs couples de valeur au format \"nom : valeur\", separés par des points-virgules.","cssLengthTooltip":"Entrer un nombre pour la valeur en pixel ou un nombre avec une unité CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponible</span>"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+X).","paste":"Coller","pasteArea":"Coller la zone","pasteMsg":"Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl/Cmd+V</STRONG>) et appuyer sur <STRONG>OK</STRONG>.","securityMsg":"A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.","title":"Coller"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatique","bgColorTitle":"Couleur de fond","colors":{"000":"Noir","800000":"Marron","8B4513":"Brun foncé","2F4F4F":"Gris ardoise foncé","008080":"Sarcelle","000080":"Marine","4B0082":"Indigo","696969":"Gris foncé","B22222":"Rouge brique","A52A2A":"Brun","DAA520":"Doré","006400":"Vert foncé","40E0D0":"Turquoise","0000CD":"Bleu","800080":"Mauve","808080":"Gris","F00":"Rouge","FF8C00":"Orange foncé","FFD700":"Or","008000":"Vert","0FF":"Cyan","00F":"Bleu","EE82EE":"Violet","A9A9A9":"Gris pâle","FFA07A":"Saumon clair","FFA500":"Orange","FFFF00":"Jaune","00FF00":"Vert lime","AFEEEE":"Turquoise pâle","ADD8E6":"Bleu pâle","DDA0DD":"Prune","D3D3D3":"Gris pâle","FFF0F5":"Bleu lavande","FAEBD7":"Blanc antique","FFFFE0":"Jaune pâle","F0FFF0":"Miel doré","F0FFFF":"Azure","F0F8FF":"Bleu alice","E6E6FA":"Lavande","FFF":"Blanc"},"more":"Plus de couleurs...","panelTitle":"Couleurs","textColorTitle":"Couleur de texte"},"colordialog":{"clear":"Effacer","highlight":"Surligner","options":"Options de couleur","selected":"Couleur sélectionnée","title":"Choisir une couleur"},"elementspath":{"eleLabel":"Chemin d'éléments","eleTitle":"element %1"},"font":{"fontSize":{"label":"Taille","voiceLabel":"Taille","panelTitle":"Taille"},"label":"Police","panelTitle":"Police","voiceLabel":"Police"},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"En-tête 1","tag_h2":"En-tête 2","tag_h3":"En-tête 3","tag_h4":"En-tête 4","tag_h5":"En-tête 5","tag_h6":"En-tête 6","tag_p":"Normal","tag_pre":"Formaté"},"horizontalrule":{"toolbar":"Insérer un séparateur horizontale"},"indent":{"indent":"Augmenter le retrait","outdent":"Diminuer le retrait"},"fakeobjects":{"anchor":"Ancre","flash":"Animation Flash","hiddenfield":"Champ caché","iframe":"IFrame","unknown":"Objet inconnu"},"link":{"acccessKey":"Touche d'accessibilité","advanced":"Avancé","advisoryContentType":"Type de contenu","advisoryTitle":"Description","anchor":{"toolbar":"Ancre","menu":"Modifier l'ancre","title":"Propriétés de l'ancre","name":"Nom de l'ancre","errorName":"Veuillez saisir le nom de l'ancre","remove":"Supprimer l'ancre"},"anchorId":"Par ID","anchorName":"Par nom","charset":"Encodage de la cible","cssClasses":"Classes CSS","emailAddress":"Courriel","emailBody":"Corps du message","emailSubject":"Objet du message","id":"ID","info":"Informations sur le lien","langCode":"Code de langue","langDir":"Sens d'écriture","langDirLTR":"De gauche à droite (LTR)","langDirRTL":"De droite à gauche (RTL)","menu":"Modifier le lien","name":"Nom","noAnchors":"(Pas d'ancre disponible dans le document)","noEmail":"Veuillez saisir le courriel","noUrl":"Veuillez saisir l'URL","other":"<autre>","popupDependent":"Dépendante (Netscape)","popupFeatures":"Caractéristiques de la fenêtre popup","popupFullScreen":"Plein écran (IE)","popupLeft":"Position de la gauche","popupLocationBar":"Barre d'adresse","popupMenuBar":"Barre de menu","popupResizable":"Redimensionnable","popupScrollBars":"Barres de défilement","popupStatusBar":"Barre d'état","popupToolbar":"Barre d'outils","popupTop":"Position à partir du haut","rel":"Relation","selectAnchor":"Sélectionner une ancre","styles":"Style","tabIndex":"Ordre de tabulation","target":"Destination","targetFrame":"<Cadre>","targetFrameName":"Nom du cadre de destination","targetPopup":"<fenêtre popup>","targetPopupName":"Nom de la fenêtre popup","title":"Lien","toAnchor":"Ancre dans cette page","toEmail":"Courriel","toUrl":"URL","toolbar":"Lien","type":"Type de lien","unlink":"Supprimer le lien","upload":"Téléverser"},"list":{"bulletedlist":"Liste à puces","numberedlist":"Liste numérotée"},"magicline":{"title":"Insérer le paragraphe ici"},"maximize":{"maximize":"Maximizer","minimize":"Minimizer"},"pastefromword":{"confirmCleanup":"Le texte que vous tentez de coller semble provenir de Word. Désirez vous le nettoyer avant de coller?","error":"Il n'a pas été possible de nettoyer les données collées du à une erreur interne","title":"Coller de Word","toolbar":"Coller de Word"},"pastetext":{"button":"Coller comme texte","title":"Coller comme texte"},"removeformat":{"toolbar":"Supprimer le formatage"},"specialchar":{"options":"Option des caractères spéciaux","title":"Sélectionner un caractère spécial","toolbar":"Insérer un caractère spécial"},"stylescombo":{"label":"Styles","panelTitle":"Styles de formattage","panelTitle1":"Styles de block","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"table":{"border":"Taille de la bordure","caption":"Titre","cell":{"menu":"Cellule","insertBefore":"Insérer une cellule avant","insertAfter":"Insérer une cellule après","deleteCell":"Supprimer des cellules","merge":"Fusionner les cellules","mergeRight":"Fusionner à droite","mergeDown":"Fusionner en bas","splitHorizontal":"Scinder la cellule horizontalement","splitVertical":"Scinder la cellule verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Fusion de lignes","colSpan":"Fusion de colonnes","wordWrap":"Retour à la ligne","hAlign":"Alignement horizontal","vAlign":"Alignement vertical","alignBaseline":"Bas du texte","bgColor":"Couleur d'arrière plan","borderColor":"Couleur de bordure","data":"Données","header":"En-tête","yes":"Oui","no":"Non","invalidWidth":"La largeur de cellule doit être un nombre.","invalidHeight":"La hauteur de cellule doit être un nombre.","invalidRowSpan":"La fusion de lignes doit être un nombre entier.","invalidColSpan":"La fusion de colonnes doit être un nombre entier.","chooseColor":"Sélectionner"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement des cellules","column":{"menu":"Colonne","insertBefore":"Insérer une colonne avant","insertAfter":"Insérer une colonne après","deleteColumn":"Supprimer des colonnes"},"columns":"Colonnes","deleteTable":"Supprimer le tableau","headers":"En-têtes","headersBoth":"Les deux.","headersColumn":"Première colonne","headersNone":"Aucun","headersRow":"Première ligne","invalidBorder":"La taille de bordure doit être un nombre.","invalidCellPadding":"La marge interne des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement des cellules doit être un nombre positif.","invalidCols":"Le nombre de colonnes doit être supérieur à 0.","invalidHeight":"La hauteur du tableau doit être un nombre.","invalidRows":"Le nombre de lignes doit être supérieur à 0.","invalidWidth":"La largeur du tableau doit être un nombre.","menu":"Propriétés du tableau","row":{"menu":"Ligne","insertBefore":"Insérer une ligne avant","insertAfter":"Insérer une ligne après","deleteRow":"Supprimer des lignes"},"rows":"Lignes","summary":"Résumé","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"pourcentage","widthPx":"pixels","widthUnit":"unité de largeur"},"contextmenu":{"options":"Options du menu contextuel"},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse papier/Annuler","editing":"Édition","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barre d'outils de l'éditeur"},"undo":{"redo":"Refaire","undo":"Annuler"},"justify":{"block":"Justifié","center":"Centré","left":"Aligner à gauche","right":"Aligner à Droite"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/fr.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/fr.js new file mode 100755 index 0000000000..30933cdb72 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/fr.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['fr']={"editor":"Éditeur de Texte Enrichi","editorPanel":"Tableau de bord de l'éditeur de texte enrichi","common":{"editorHelp":"Appuyez sur ALT-0 pour l'aide","browseServer":"Explorer le serveur","url":"URL","protocol":"Protocole","upload":"Envoyer","uploadSubmit":"Envoyer sur le serveur","image":"Image","flash":"Flash","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton Radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ caché","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton image","notSet":"<non défini>","id":"Id","name":"Nom","langDir":"Sens d'écriture","langDirLtr":"Gauche à droite (LTR)","langDirRtl":"Droite à gauche (RTL)","langCode":"Code de langue","longDescr":"URL de description longue (longdesc => malvoyant)","cssClass":"Classe CSS","advisoryTitle":"Description (title)","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Déplacer pour modifier la taille","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous sûr de vouloir charger une nouvelle page?","confirmCancel":"Certaines options ont été modifiées. Êtes-vous sûr de vouloir fermer?","options":"Options","target":"Cible (Target)","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieure (_top)","targetSelf":"Même fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"Gauche à Droite (LTR)","langDirRTL":"Droite à Gauche (RTL)","styles":"Style","cssClasses":"Classes de style","width":"Largeur","height":"Hauteur","align":"Alignement","alignLeft":"Gauche","alignRight":"Droite","alignCenter":"Centré","alignJustify":"Justifier","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"Aucun","invalidValue":"Valeur incorrecte.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidCssLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure HTML valide (px ou %).","invalidInlineStyle":"La valeur spécifiée pour le style inline doit être composée d'un ou plusieurs couples de valeur au format \"nom : valeur\", separés par des points-virgules.","cssLengthTooltip":"Entrer un nombre pour une valeur en pixels ou un nombre avec une unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, Indisponible</span>"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement des opérations de copie. Veuillez utiliser le raccourci clavier (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement l'opération \"couper\". Veuillez utiliser le raccourci clavier (Ctrl/Cmd+X).","paste":"Coller","pasteArea":"Coller la zone","pasteMsg":"Veuillez coller le texte dans la zone suivante en utilisant le raccourci clavier (<strong>Ctrl/Cmd+V</strong>) et cliquez sur OK.","securityMsg":"A cause des paramètres de sécurité de votre navigateur, l'éditeur n'est pas en mesure d'accéder directement à vos données contenues dans le presse-papier. Vous devriez réessayer de coller les données dans la fenêtre.","title":"Coller"},"button":{"selectedLabel":"%1 (Sélectionné)"},"colorbutton":{"auto":"Automatique","bgColorTitle":"Couleur d'arrière plan","colors":{"000":"Noir","800000":"Marron","8B4513":"Brun moyen","2F4F4F":"Vert sombre","008080":"Canard","000080":"Bleu marine","4B0082":"Indigo","696969":"Gris foncé","B22222":"Rouge brique","A52A2A":"Brun","DAA520":"Or terni","006400":"Vert foncé","40E0D0":"Turquoise","0000CD":"Bleu royal","800080":"Pourpre","808080":"Gris","F00":"Rouge","FF8C00":"Orange foncé","FFD700":"Or","008000":"Vert","0FF":"Cyan","00F":"Bleu","EE82EE":"Violet","A9A9A9":"Gris moyen","FFA07A":"Saumon","FFA500":"Orange","FFFF00":"Jaune","00FF00":"Lime","AFEEEE":"Turquoise clair","ADD8E6":"Bleu clair","DDA0DD":"Prune","D3D3D3":"Gris clair","FFF0F5":"Fard Lavande","FAEBD7":"Blanc antique","FFFFE0":"Jaune clair","F0FFF0":"Honeydew","F0FFFF":"Azur","F0F8FF":"Bleu Alice","E6E6FA":"Lavande","FFF":"Blanc"},"more":"Plus de couleurs...","panelTitle":"Couleurs","textColorTitle":"Couleur de texte"},"colordialog":{"clear":"Effacer","highlight":"Détails","options":"Option des couleurs","selected":"Couleur choisie","title":"Choisir une couleur"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 éléments"},"font":{"fontSize":{"label":"Taille","voiceLabel":"Taille de police","panelTitle":"Taille de police"},"label":"Police","panelTitle":"Style de police","voiceLabel":"Police"},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Titre 1","tag_h2":"Titre 2","tag_h3":"Titre 3","tag_h4":"Titre 4","tag_h5":"Titre 5","tag_h6":"Titre 6","tag_p":"Normal","tag_pre":"Formaté"},"horizontalrule":{"toolbar":"Ligne horizontale"},"indent":{"indent":"Augmenter le retrait (tabulation)","outdent":"Diminuer le retrait (tabulation)"},"fakeobjects":{"anchor":"Ancre","flash":"Animation Flash","hiddenfield":"Champ caché","iframe":"IFrame","unknown":"Objet inconnu"},"link":{"acccessKey":"Touche d'accessibilité","advanced":"Avancé","advisoryContentType":"Type de contenu (ex: text/html)","advisoryTitle":"Description (title)","anchor":{"toolbar":"Ancre","menu":"Editer l'ancre","title":"Propriétés de l'ancre","name":"Nom de l'ancre","errorName":"Veuillez entrer le nom de l'ancre.","remove":"Supprimer l'ancre"},"anchorId":"Par ID d'élément","anchorName":"Par nom d'ancre","charset":"Charset de la cible","cssClasses":"Classe CSS","emailAddress":"Adresse E-Mail","emailBody":"Corps du message","emailSubject":"Sujet du message","id":"Id","info":"Infos sur le lien","langCode":"Code de langue","langDir":"Sens d'écriture","langDirLTR":"Gauche à droite","langDirRTL":"Droite à gauche","menu":"Editer le lien","name":"Nom","noAnchors":"(Aucune ancre disponible dans ce document)","noEmail":"Veuillez entrer l'adresse e-mail","noUrl":"Veuillez entrer l'adresse du lien","other":"<autre>","popupDependent":"Dépendante (Netscape)","popupFeatures":"Options de la fenêtre popup","popupFullScreen":"Plein écran (IE)","popupLeft":"Position gauche","popupLocationBar":"Barre d'adresse","popupMenuBar":"Barre de menu","popupResizable":"Redimensionnable","popupScrollBars":"Barres de défilement","popupStatusBar":"Barre de status","popupToolbar":"Barre d'outils","popupTop":"Position haute","rel":"Relation","selectAnchor":"Sélectionner l'ancre","styles":"Style","tabIndex":"Index de tabulation","target":"Cible","targetFrame":"<cadre>","targetFrameName":"Nom du Cadre destination","targetPopup":"<fenêtre popup>","targetPopupName":"Nom de la fenêtre popup","title":"Lien","toAnchor":"Ancre","toEmail":"E-mail","toUrl":"URL","toolbar":"Lien","type":"Type de lien","unlink":"Supprimer le lien","upload":"Envoyer"},"list":{"bulletedlist":"Insérer/Supprimer la liste à puces","numberedlist":"Insérer/Supprimer la liste numérotée"},"magicline":{"title":"Insérez un paragraphe ici"},"maximize":{"maximize":"Agrandir","minimize":"Minimiser"},"pastefromword":{"confirmCleanup":"Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?","error":"Il n'a pas été possible de nettoyer les données collées à la suite d'une erreur interne.","title":"Coller depuis Word","toolbar":"Coller depuis Word"},"pastetext":{"button":"Coller comme texte sans mise en forme","title":"Coller comme texte sans mise en forme"},"removeformat":{"toolbar":"Supprimer la mise en forme"},"specialchar":{"options":"Options des caractères spéciaux","title":"Sélectionnez un caractère","toolbar":"Insérer un caractère spécial"},"stylescombo":{"label":"Styles","panelTitle":"Styles de mise en page","panelTitle1":"Styles de blocs","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"table":{"border":"Taille de la bordure","caption":"Titre du tableau","cell":{"menu":"Cellule","insertBefore":"Insérer une cellule avant","insertAfter":"Insérer une cellule après","deleteCell":"Supprimer les cellules","merge":"Fusionner les cellules","mergeRight":"Fusionner à droite","mergeDown":"Fusionner en bas","splitHorizontal":"Fractionner horizontalement","splitVertical":"Fractionner verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Fusion de lignes","colSpan":"Fusion de colonnes","wordWrap":"Césure","hAlign":"Alignement Horizontal","vAlign":"Alignement Vertical","alignBaseline":"Bas du texte","bgColor":"Couleur d'arrière-plan","borderColor":"Couleur de Bordure","data":"Données","header":"Entête","yes":"Oui","no":"Non","invalidWidth":"La Largeur de Cellule doit être un nombre.","invalidHeight":"La Hauteur de Cellule doit être un nombre.","invalidRowSpan":"La fusion de lignes doit être un nombre entier.","invalidColSpan":"La fusion de colonnes doit être un nombre entier.","chooseColor":"Choisissez"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement des cellules","column":{"menu":"Colonnes","insertBefore":"Insérer une colonne avant","insertAfter":"Insérer une colonne après","deleteColumn":"Supprimer les colonnes"},"columns":"Colonnes","deleteTable":"Supprimer le tableau","headers":"En-Têtes","headersBoth":"Les deux","headersColumn":"Première colonne","headersNone":"Aucunes","headersRow":"Première ligne","invalidBorder":"La taille de la bordure doit être un nombre.","invalidCellPadding":"La marge intérieure des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement des cellules doit être un nombre positif.","invalidCols":"Le nombre de colonnes doit être supérieur à 0.","invalidHeight":"La hauteur du tableau doit être un nombre.","invalidRows":"Le nombre de lignes doit être supérieur à 0.","invalidWidth":"La largeur du tableau doit être un nombre.","menu":"Propriétés du tableau","row":{"menu":"Ligne","insertBefore":"Insérer une ligne avant","insertAfter":"Insérer une ligne après","deleteRow":"Supprimer les lignes"},"rows":"Lignes","summary":"Résumé (description)","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"% pourcents","widthPx":"pixels","widthUnit":"unité de largeur"},"contextmenu":{"options":"Options du menu contextuel"},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse-papier/Défaire","editing":"Editer","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barre d'outils de l'éditeur"},"undo":{"redo":"Rétablir","undo":"Annuler"},"justify":{"block":"Justifier","center":"Centrer","left":"Aligner à gauche","right":"Aligner à droite"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/gl.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/gl.js new file mode 100755 index 0000000000..721d5b529d --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/gl.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['gl']={"editor":"Editor de texto mellorado","editorPanel":"Panel do editor de texto mellorado","common":{"editorHelp":"Prema ALT 0 para obter axuda","browseServer":"Examinar o servidor","url":"URL","protocol":"Protocolo","upload":"Enviar","uploadSubmit":"Enviar ao servidor","image":"Imaxe","flash":"Flash","form":"Formulario","checkbox":"Caixa de selección","radio":"Botón de opción","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo agochado","button":"Botón","select":"Campo de selección","imageButton":"Botón de imaxe","notSet":"<sen estabelecer>","id":"ID","name":"Nome","langDir":"Dirección de escritura do idioma","langDirLtr":"Esquerda a dereita (LTR)","langDirRtl":"Dereita a esquerda (RTL)","langCode":"Código do idioma","longDescr":"Descrición completa do URL","cssClass":"Clases da folla de estilos","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Pechar","preview":"Vista previa","resize":"Redimensionar","generalTab":"Xeral","advancedTab":"Avanzado","validateNumberFailed":"Este valor non é un número.","confirmNewPage":"Calquera cambio que non gardara neste contido perderase.\r\nConfirma que quere cargar unha páxina nova?","confirmCancel":"Algunhas das opcións foron cambiadas.\r\nConfirma que quere pechar o diálogo?","options":"Opcións","target":"Destino","targetNew":"Nova xanela (_blank)","targetTop":"Xanela principal (_top)","targetSelf":"Mesma xanela (_self)","targetParent":"Xanela superior (_parent)","langDirLTR":"Esquerda a dereita (LTR)","langDirRTL":"Dereita a esquerda (RTL)","styles":"Estilo","cssClasses":"Clases da folla de estilos","width":"Largo","height":"Alto","align":"Aliñamento","alignLeft":"Esquerda","alignRight":"Dereita","alignCenter":"Centro","alignJustify":"Xustificado","alignTop":"Arriba","alignMiddle":"Centro","alignBottom":"Abaixo","alignNone":"Ningún","invalidValue":"Valor incorrecto.","invalidHeight":"O alto debe ser un número.","invalidWidth":"O largo debe ser un número.","invalidCssLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida HTML correcta (px ou %).","invalidInlineStyle":"O valor especificado no estilo en liña debe consistir nunha ou máis tuplas co formato «nome : valor», separadas por punto e coma.","cssLengthTooltip":"Escriba un número para o valor en píxeles ou un número cunha unidade CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, non dispoñíbel</span>"},"basicstyles":{"bold":"Negra","italic":"Cursiva","strike":"Riscado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subliñado"},"clipboard":{"copy":"Copiar","copyError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de copia. Use o teclado para iso (Ctrl/Cmd+C).","cut":"Cortar","cutError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de corte. Use o teclado para iso (Ctrl/Cmd+X).","paste":"Pegar","pasteArea":"Zona de pegado","pasteMsg":"Pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e prema en Aceptar","securityMsg":"Por mor da configuración de seguranza do seu navegador, o editor non ten acceso ao portapapeis. É necesario pegalo novamente nesta xanela.","title":"Pegar"},"button":{"selectedLabel":"%1 (seleccionado)"},"colorbutton":{"auto":"Automático","bgColorTitle":"Cor do fondo","colors":{"000":"Negro","800000":"Marrón escuro","8B4513":"Ocre","2F4F4F":"Pizarra escuro","008080":"Verde azulado","000080":"Azul mariño","4B0082":"Índigo","696969":"Gris escuro","B22222":"Ladrillo","A52A2A":"Marrón","DAA520":"Dourado escuro","006400":"Verde escuro","40E0D0":"Turquesa","0000CD":"Azul medio","800080":"Púrpura","808080":"Gris","F00":"Vermello","FF8C00":"Laranxa escuro","FFD700":"Dourado","008000":"Verde","0FF":"Cian","00F":"Azul","EE82EE":"Violeta","A9A9A9":"Gris medio","FFA07A":"Salmón claro","FFA500":"Laranxa","FFFF00":"Amarelo","00FF00":"Lima","AFEEEE":"Turquesa pálido","ADD8E6":"Azul claro","DDA0DD":"Violeta pálido","D3D3D3":"Verde claro","FFF0F5":"Lavanda vermello","FAEBD7":"Branco antigo","FFFFE0":"Amarelo claro","F0FFF0":"Mel","F0FFFF":"Azul celeste","F0F8FF":"Azul pálido","E6E6FA":"Lavanda","FFF":"Branco"},"more":"Máis cores...","panelTitle":"Cores","textColorTitle":"Cor do texto"},"colordialog":{"clear":"Limpar","highlight":"Resaltar","options":"Opcións de cor","selected":"Cor seleccionado","title":"Seleccione unha cor"},"elementspath":{"eleLabel":"Ruta dos elementos","eleTitle":"Elemento %1"},"font":{"fontSize":{"label":"Tamaño","voiceLabel":"Tamaño da letra","panelTitle":"Tamaño da letra"},"label":"Tipo de letra","panelTitle":"Nome do tipo de letra","voiceLabel":"Tipo de letra"},"format":{"label":"Formato","panelTitle":"Formato do parágrafo","tag_address":"Enderezo","tag_div":"Normal (DIV)","tag_h1":"Enacabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Formatado"},"horizontalrule":{"toolbar":"Inserir unha liña horizontal"},"indent":{"indent":"Aumentar a sangría","outdent":"Reducir a sangría"},"fakeobjects":{"anchor":"Ancoraxe","flash":"Animación «Flash»","hiddenfield":"Campo agochado","iframe":"IFrame","unknown":"Obxecto descoñecido"},"link":{"acccessKey":"Chave de acceso","advanced":"Avanzado","advisoryContentType":"Tipo de contido informativo","advisoryTitle":"Título","anchor":{"toolbar":"Ancoraxe","menu":"Editar a ancoraxe","title":"Propiedades da ancoraxe","name":"Nome da ancoraxe","errorName":"Escriba o nome da ancoraxe","remove":"Retirar a ancoraxe"},"anchorId":"Polo ID do elemento","anchorName":"Polo nome da ancoraxe","charset":"Codificación do recurso ligado","cssClasses":"Clases da folla de estilos","emailAddress":"Enderezo de correo","emailBody":"Corpo da mensaxe","emailSubject":"Asunto da mensaxe","id":"ID","info":"Información da ligazón","langCode":"Código do idioma","langDir":"Dirección de escritura do idioma","langDirLTR":"Esquerda a dereita (LTR)","langDirRTL":"Dereita a esquerda (RTL)","menu":"Editar a ligazón","name":"Nome","noAnchors":"(Non hai ancoraxes dispoñíbeis no documento)","noEmail":"Escriba o enderezo de correo","noUrl":"Escriba a ligazón URL","other":"<outro>","popupDependent":"Dependente (Netscape)","popupFeatures":"Características da xanela emerxente","popupFullScreen":"Pantalla completa (IE)","popupLeft":"Posición esquerda","popupLocationBar":"Barra de localización","popupMenuBar":"Barra do menú","popupResizable":"Redimensionábel","popupScrollBars":"Barras de desprazamento","popupStatusBar":"Barra de estado","popupToolbar":"Barra de ferramentas","popupTop":"Posición superior","rel":"Relación","selectAnchor":"Seleccionar unha ancoraxe","styles":"Estilo","tabIndex":"Índice de tabulación","target":"Destino","targetFrame":"<marco>","targetFrameName":"Nome do marco de destino","targetPopup":"<xanela emerxente>","targetPopupName":"Nome da xanela emerxente","title":"Ligazón","toAnchor":"Ligar coa ancoraxe no testo","toEmail":"Correo","toUrl":"URL","toolbar":"Ligazón","type":"Tipo de ligazón","unlink":"Eliminar a ligazón","upload":"Enviar"},"list":{"bulletedlist":"Inserir/retirar lista viñeteada","numberedlist":"Inserir/retirar lista numerada"},"magicline":{"title":"Inserir aquí o parágrafo"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"pastefromword":{"confirmCleanup":"O texto que quere pegar semella ser copiado desde o Word. Quere depuralo antes de pegalo?","error":"Non foi posíbel depurar os datos pegados por mor dun erro interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"pastetext":{"button":"Pegar como texto simple","title":"Pegar como texto simple"},"removeformat":{"toolbar":"Retirar o formato"},"specialchar":{"options":"Opcións de caracteres especiais","title":"Seleccione un carácter especial","toolbar":"Inserir un carácter especial"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de formatando","panelTitle1":"Estilos de bloque","panelTitle2":"Estilos de liña","panelTitle3":"Estilos de obxecto"},"table":{"border":"Tamaño do bordo","caption":"Título","cell":{"menu":"Cela","insertBefore":"Inserir a cela á esquerda","insertAfter":"Inserir a cela á dereita","deleteCell":"Eliminar celas","merge":"Combinar celas","mergeRight":"Combinar á dereita","mergeDown":"Combinar cara abaixo","splitHorizontal":"Dividir a cela en horizontal","splitVertical":"Dividir a cela en vertical","title":"Propiedades da cela","cellType":"Tipo de cela","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Axustar ao contido","hAlign":"Aliñación horizontal","vAlign":"Aliñación vertical","alignBaseline":"Liña de base","bgColor":"Cor do fondo","borderColor":"Cor do bordo","data":"Datos","header":"Cabeceira","yes":"Si","no":"Non","invalidWidth":"O largo da cela debe ser un número.","invalidHeight":"O alto da cela debe ser un número.","invalidRowSpan":"A expansión de filas debe ser un número enteiro.","invalidColSpan":"A expansión de columnas debe ser un número enteiro.","chooseColor":"Escoller"},"cellPad":"Marxe interior da cela","cellSpace":"Marxe entre celas","column":{"menu":"Columna","insertBefore":"Inserir a columna á esquerda","insertAfter":"Inserir a columna á dereita","deleteColumn":"Borrar Columnas"},"columns":"Columnas","deleteTable":"Borrar Táboa","headers":"Cabeceiras","headersBoth":"Ambas","headersColumn":"Primeira columna","headersNone":"Ningún","headersRow":"Primeira fila","invalidBorder":"O tamaño do bordo debe ser un número.","invalidCellPadding":"A marxe interior debe ser un número positivo.","invalidCellSpacing":"A marxe entre celas debe ser un número positivo.","invalidCols":"O número de columnas debe ser un número maior que 0.","invalidHeight":"O alto da táboa debe ser un número.","invalidRows":"O número de filas debe ser un número maior que 0","invalidWidth":"O largo da táboa debe ser un número.","menu":"Propiedades da táboa","row":{"menu":"Fila","insertBefore":"Inserir a fila por riba","insertAfter":"Inserir a fila por baixo","deleteRow":"Eliminar filas"},"rows":"Filas","summary":"Resumo","title":"Propiedades da táboa","toolbar":"Taboa","widthPc":"porcentaxe","widthPx":"píxeles","widthUnit":"unidade do largo"},"contextmenu":{"options":"Opcións do menú contextual"},"toolbar":{"toolbarCollapse":"Contraer a barra de ferramentas","toolbarExpand":"Expandir a barra de ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeis/desfacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Paragrafo","links":"Ligazóns","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Barras de ferramentas do editor"},"undo":{"redo":"Refacer","undo":"Desfacer"},"justify":{"block":"Xustificado","center":"Centrado","left":"Aliñar á esquerda","right":"Aliñar á dereita"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/gu.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/gu.js new file mode 100755 index 0000000000..5b006b1383 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/gu.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['gu']={"editor":"રીચ ટેક્ષ્ત્ એડીટર","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"પ્રેસ ALT 0 મદદ માટ","browseServer":"સર્વર બ્રાઉઝ કરો","url":"URL","protocol":"પ્રોટોકૉલ","upload":"અપલોડ","uploadSubmit":"આ સર્વરને મોકલવું","image":"ચિત્ર","flash":"ફ્લૅશ","form":"ફૉર્મ/પત્રક","checkbox":"ચેક બોક્સ","radio":"રેડિઓ બટન","textField":"ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્ર","textarea":"ટેક્સ્ટ એરિઆ, શબ્દ વિસ્તાર","hiddenField":"ગુપ્ત ક્ષેત્ર","button":"બટન","select":"પસંદગી ક્ષેત્ર","imageButton":"ચિત્ર બટન","notSet":"<સેટ નથી>","id":"Id","name":"નામ","langDir":"ભાષા લેખવાની પદ્ધતિ","langDirLtr":"ડાબે થી જમણે (LTR)","langDirRtl":"જમણે થી ડાબે (RTL)","langCode":"ભાષા કોડ","longDescr":"વધારે માહિતી માટે URL","cssClass":"સ્ટાઇલ-શીટ ક્લાસ","advisoryTitle":"મુખ્ય મથાળું","cssStyle":"સ્ટાઇલ","ok":"ઠીક છે","cancel":"રદ કરવું","close":"બંધ કરવું","preview":"જોવું","resize":"ખેંચી ને યોગ્ય કરવું","generalTab":"જનરલ","advancedTab":"અડ્વાન્સડ","validateNumberFailed":"આ રકમ આકડો નથી.","confirmNewPage":"સવે કાર્ય વગરનું ફકરો ખોવાઈ જશે. તમને ખાતરી છે કે તમને નવું પાનું ખોલવું છે?","confirmCancel":"ઘણા વિકલ્પો બદલાયા છે. તમારે આ બોક્ષ્ બંધ કરવું છે?","options":"વિકલ્પો","target":"લક્ષ્ય","targetNew":"નવી વિન્ડો (_blank)","targetTop":"ઉપરની વિન્ડો (_top)","targetSelf":"એજ વિન્ડો (_self)","targetParent":"પેરનટ વિન્ડો (_parent)","langDirLTR":"ડાબે થી જમણે (LTR)","langDirRTL":"જમણે થી ડાબે (RTL)","styles":"શૈલી","cssClasses":"શૈલી કલાસીસ","width":"પહોળાઈ","height":"ઊંચાઈ","align":"લાઇનદોરીમાં ગોઠવવું","alignLeft":"ડાબી બાજુ ગોઠવવું","alignRight":"જમણી","alignCenter":"મધ્ય સેન્ટર","alignJustify":"બ્લૉક, અંતરાય જસ્ટિફાઇ","alignTop":"ઉપર","alignMiddle":"વચ્ચે","alignBottom":"નીચે","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"ઉંચાઈ એક આંકડો હોવો જોઈએ.","invalidWidth":"પોહળ ઈ એક આંકડો હોવો જોઈએ.","invalidCssLength":"\"%1\" ની વેલ્યુ એક પોસીટીવ આંકડો હોવો જોઈએ અથવા CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc) વગર.","invalidHtmlLength":"\"%1\" ની વેલ્યુ એક પોસીટીવ આંકડો હોવો જોઈએ અથવા HTML measurement unit (px or %) વગર.","invalidInlineStyle":"ઈનલાઈન સ્ટાઈલ ની વેલ્યુ \"name : value\" ના ફોર્મેટ માં હોવી જોઈએ, વચ્ચે સેમી-કોલોન જોઈએ.","cssLengthTooltip":"પિક્ષ્લ્ નો આંકડો CSS unit (px, %, in, cm, mm, em, ex, pt, or pc) માં નાખો.","unavailable":"%1<span class=\"cke_accessibility\">, નથી મળતું</span>"},"basicstyles":{"bold":"બોલ્ડ/સ્પષ્ટ","italic":"ઇટેલિક, ત્રાંસા","strike":"છેકી નાખવું","subscript":"એક ચિહ્નની નીચે કરેલું બીજું ચિહ્ન","superscript":"એક ચિહ્ન ઉપર કરેલું બીજું ચિહ્ન.","underline":"અન્ડર્લાઇન, નીચે લીટી"},"clipboard":{"copy":"નકલ","copyError":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+C) का प्रयोग करें।","cut":"કાપવું","cutError":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+X) નો ઉપયોગ કરો.","paste":"પેસ્ટ","pasteArea":"પેસ્ટ કરવાની જગ્યા","pasteMsg":"Ctrl/Cmd+V નો પ્રયોગ કરી પેસ્ટ કરો","securityMsg":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસના કારણે,એડિટર તમારા કિલ્પબોર્ડ ડેટા ને કોપી નથી કરી શકતો. તમારે આ વિન્ડોમાં ફરીથી પેસ્ટ કરવું પડશે.","title":"પેસ્ટ"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"સ્વચાલિત","bgColorTitle":"બૅકગ્રાઉન્ડ રંગ,","colors":{"000":"કાળો","800000":"મરુન","8B4513":"છીક","2F4F4F":"ડાર્ક સ્લેટ ગ્રે ","008080":"ટીલ","000080":"નેવી","4B0082":"જામલી","696969":"ડાર્ક ગ્રે","B22222":"ઈટ","A52A2A":"બ્રાઉન","DAA520":"ગોલ્ડન રોડ","006400":"ડાર્ક લીલો","40E0D0":"ટ્રકોઈસ","0000CD":"મધ્યમ વાદળી","800080":"પર્પલ","808080":"ગ્રે","F00":"લાલ","FF8C00":"ડાર્ક ઓરંજ","FFD700":"ગોલ્ડ","008000":"ગ્રીન","0FF":"સાયન","00F":"વાદળી","EE82EE":"વાયોલેટ","A9A9A9":"ડીમ ","FFA07A":"લાઈટ સાલમન","FFA500":"ઓરંજ","FFFF00":"પીળો","00FF00":"લાઈમ","AFEEEE":"પેલ કોઈસ","ADD8E6":"લાઈટ બ્લુ","DDA0DD":"પલ્મ","D3D3D3":"લાઈટ ગ્રે","FFF0F5":"લવંડર ","FAEBD7":"એન્ટીક સફેદ","FFFFE0":"લાઈટ પીળો","F0FFF0":"હનીડઉય","F0FFFF":"અઝુરે","F0F8FF":"એલીસ બ્લુ","E6E6FA":"લવંડર","FFF":"સફેદ"},"more":"ઔર રંગ...","panelTitle":"રંગ","textColorTitle":"શબ્દનો રંગ"},"colordialog":{"clear":"સાફ કરવું","highlight":"હાઈઈટ","options":"રંગના વિકલ્પ","selected":"પસંદ કરેલો રંગ","title":"રંગ પસંદ કરો"},"elementspath":{"eleLabel":"એલીમેન્ટ્સ નો ","eleTitle":"એલીમેન્ટ %1"},"font":{"fontSize":{"label":"ફૉન્ટ સાઇઝ/કદ","voiceLabel":"ફોન્ટ સાઈઝ","panelTitle":"ફૉન્ટ સાઇઝ/કદ"},"label":"ફૉન્ટ","panelTitle":"ફૉન્ટ","voiceLabel":"ફોન્ટ"},"format":{"label":"ફૉન્ટ ફૉર્મટ, રચનાની શૈલી","panelTitle":"ફૉન્ટ ફૉર્મટ, રચનાની શૈલી","tag_address":"સરનામું","tag_div":"શીર્ષક (DIV)","tag_h1":"શીર્ષક 1","tag_h2":"શીર્ષક 2","tag_h3":"શીર્ષક 3","tag_h4":"શીર્ષક 4","tag_h5":"શીર્ષક 5","tag_h6":"શીર્ષક 6","tag_p":"સામાન્ય","tag_pre":"ફૉર્મટેડ"},"horizontalrule":{"toolbar":"સમસ્તરીય રેખા ઇન્સર્ટ/દાખલ કરવી"},"indent":{"indent":"ઇન્ડેન્ટ, લીટીના આરંભમાં જગ્યા વધારવી","outdent":"ઇન્ડેન્ટ લીટીના આરંભમાં જગ્યા ઘટાડવી"},"fakeobjects":{"anchor":"અનકર","flash":"ફ્લેશ ","hiddenfield":"હિડન ","iframe":"IFrame","unknown":"અનનોન ઓબ્જેક્ટ"},"link":{"acccessKey":"ઍક્સેસ કી","advanced":"અડ્વાન્સડ","advisoryContentType":"મુખ્ય કન્ટેન્ટ પ્રકાર","advisoryTitle":"મુખ્ય મથાળું","anchor":{"toolbar":"ઍંકર ઇન્સર્ટ/દાખલ કરવી","menu":"ઍંકરના ગુણ","title":"ઍંકરના ગુણ","name":"ઍંકરનું નામ","errorName":"ઍંકરનું નામ ટાઈપ કરો","remove":"સ્થિર નકરવું"},"anchorId":"ઍંકર એલિમન્ટ Id થી પસંદ કરો","anchorName":"ઍંકર નામથી પસંદ કરો","charset":"લિંક રિસૉર્સ કૅરિક્ટર સેટ","cssClasses":"સ્ટાઇલ-શીટ ક્લાસ","emailAddress":"ઈ-મેલ સરનામું","emailBody":"સંદેશ","emailSubject":"ઈ-મેલ વિષય","id":"Id","info":"લિંક ઇન્ફૉ ટૅબ","langCode":"ભાષા લેખવાની પદ્ધતિ","langDir":"ભાષા લેખવાની પદ્ધતિ","langDirLTR":"ડાબે થી જમણે (LTR)","langDirRTL":"જમણે થી ડાબે (RTL)","menu":" લિંક એડિટ/માં ફેરફાર કરવો","name":"નામ","noAnchors":"(ડૉક્યુમન્ટમાં ઍંકરની સંખ્યા)","noEmail":"ઈ-મેલ સરનામું ટાઇપ કરો","noUrl":"લિંક URL ટાઇપ કરો","other":"<other> <અન્ય>","popupDependent":"ડિપેન્ડન્ટ (Netscape)","popupFeatures":"પૉપ-અપ વિન્ડો ફીચરસૅ","popupFullScreen":"ફુલ સ્ક્રીન (IE)","popupLeft":"ડાબી બાજુ","popupLocationBar":"લોકેશન બાર","popupMenuBar":"મેન્યૂ બાર","popupResizable":"રીસાઈઝએબલ","popupScrollBars":"સ્ક્રોલ બાર","popupStatusBar":"સ્ટૅટસ બાર","popupToolbar":"ટૂલ બાર","popupTop":"જમણી બાજુ","rel":"સંબંધની સ્થિતિ","selectAnchor":"ઍંકર પસંદ કરો","styles":"સ્ટાઇલ","tabIndex":"ટૅબ ઇન્ડેક્સ","target":"ટાર્ગેટ/લક્ષ્ય","targetFrame":"<ફ્રેમ>","targetFrameName":"ટાર્ગેટ ફ્રેમ નું નામ","targetPopup":"<પૉપ-અપ વિન્ડો>","targetPopupName":"પૉપ-અપ વિન્ડો નું નામ","title":"લિંક","toAnchor":"આ પેજનો ઍંકર","toEmail":"ઈ-મેલ","toUrl":"URL","toolbar":"લિંક ઇન્સર્ટ/દાખલ કરવી","type":"લિંક પ્રકાર","unlink":"લિંક કાઢવી","upload":"અપલોડ"},"list":{"bulletedlist":"બુલેટ સૂચિ","numberedlist":"સંખ્યાંકન સૂચિ"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"મોટું કરવું","minimize":"નાનું કરવું"},"pastefromword":{"confirmCleanup":"તમે જે ટેક્ષ્ત્ કોપી કરી રહ્યા છો ટે વર્ડ ની છે. કોપી કરતા પેહલા સાફ કરવી છે?","error":"પેસ્ટ કરેલો ડેટા ઇન્ટરનલ એરર ના લીથે સાફ કરી શકાયો નથી.","title":"પેસ્ટ (વડૅ ટેક્સ્ટ)","toolbar":"પેસ્ટ (વડૅ ટેક્સ્ટ)"},"pastetext":{"button":"પેસ્ટ (ટેક્સ્ટ)","title":"પેસ્ટ (ટેક્સ્ટ)"},"removeformat":{"toolbar":"ફૉર્મટ કાઢવું"},"specialchar":{"options":"સ્પેશિઅલ કરેક્ટરના વિકલ્પો","title":"સ્પેશિઅલ વિશિષ્ટ અક્ષર પસંદ કરો","toolbar":"વિશિષ્ટ અક્ષર ઇન્સર્ટ/દાખલ કરવું"},"stylescombo":{"label":"શૈલી/રીત","panelTitle":"ફોર્મેટ ","panelTitle1":"બ્લોક ","panelTitle2":"ઈનલાઈન ","panelTitle3":"ઓબ્જેક્ટ પદ્ધતિ"},"table":{"border":"કોઠાની બાજુ(બોર્ડર) સાઇઝ","caption":"મથાળું/કૅપ્શન ","cell":{"menu":"કોષના ખાના","insertBefore":"પહેલાં કોષ ઉમેરવો","insertAfter":"પછી કોષ ઉમેરવો","deleteCell":"કોષ ડિલીટ/કાઢી નાખવો","merge":"કોષ ભેગા કરવા","mergeRight":"જમણી બાજુ ભેગા કરવા","mergeDown":"નીચે ભેગા કરવા","splitHorizontal":"કોષને સમસ્તરીય વિભાજન કરવું","splitVertical":"કોષને સીધું ને ઊભું વિભાજન કરવું","title":"સેલના ગુણ","cellType":"સેલનો પ્રકાર","rowSpan":"આડી કટારની જગ્યા","colSpan":"ઊભી કતારની જગ્યા","wordWrap":"વર્ડ રેપ","hAlign":"સપાટ લાઈનદોરી","vAlign":"ઊભી લાઈનદોરી","alignBaseline":"બસે લાઈન","bgColor":"પાછાળનો રંગ","borderColor":"બોર્ડેર રંગ","data":"સ્વીકૃત માહિતી","header":"મથાળું","yes":"હા","no":"ના","invalidWidth":"સેલની પોહલાઈ આંકડો હોવો જોઈએ.","invalidHeight":"સેલની ઊંચાઈ આંકડો હોવો જોઈએ.","invalidRowSpan":"રો સ્પાન આંકડો હોવો જોઈએ.","invalidColSpan":"કોલમ સ્પાન આંકડો હોવો જોઈએ.","chooseColor":"પસંદ કરવું"},"cellPad":"સેલ પૅડિંગ","cellSpace":"સેલ અંતર","column":{"menu":"કૉલમ/ઊભી કટાર","insertBefore":"પહેલાં કૉલમ/ઊભી કટાર ઉમેરવી","insertAfter":"પછી કૉલમ/ઊભી કટાર ઉમેરવી","deleteColumn":"કૉલમ/ઊભી કટાર ડિલીટ/કાઢી નાખવી"},"columns":"કૉલમ/ઊભી કટાર","deleteTable":"કોઠો ડિલીટ/કાઢી નાખવું","headers":"મથાળા","headersBoth":"બેવું","headersColumn":"પહેલી ઊભી કટાર","headersNone":"નથી ","headersRow":"પહેલી કટાર","invalidBorder":"બોર્ડર એક આંકડો હોવો જોઈએ","invalidCellPadding":"સેલની અંદરની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.","invalidCellSpacing":"સેલ વચ્ચેની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.","invalidCols":"ઉભી કટાર, 0 કરતા વધારે હોવી જોઈએ.","invalidHeight":"ટેબલની ઊંચાઈ આંકડો હોવો જોઈએ.","invalidRows":"આડી કટાર, 0 કરતા વધારે હોવી જોઈએ.","invalidWidth":"ટેબલની પોહલાઈ આંકડો હોવો જોઈએ.","menu":"ટેબલ, કોઠાનું મથાળું","row":{"menu":"પંક્તિના ખાના","insertBefore":"પહેલાં પંક્તિ ઉમેરવી","insertAfter":"પછી પંક્તિ ઉમેરવી","deleteRow":"પંક્તિઓ ડિલીટ/કાઢી નાખવી"},"rows":"પંક્તિના ખાના","summary":"ટૂંકો એહેવાલ","title":"ટેબલ, કોઠાનું મથાળું","toolbar":"ટેબલ, કોઠો","widthPc":"પ્રતિશત","widthPx":"પિકસલ","widthUnit":"પોહાલાઈ એકમ"},"contextmenu":{"options":"કોન્તેક્ષ્ત્ મેનુના વિકલ્પો"},"toolbar":{"toolbarCollapse":"ટૂલબાર નાનું કરવું","toolbarExpand":"ટૂલબાર મોટું કરવું","toolbarGroups":{"document":"દસ્તાવેજ","clipboard":"ક્લિપબોર્ડ/અન","editing":"એડીટ કરવું","forms":"ફોર્મ","basicstyles":"બેસિક્ સ્ટાઇલ","paragraph":"ફકરો","links":"લીંક","insert":"ઉમેરવું","styles":"સ્ટાઇલ","colors":"રંગ","tools":"ટૂલ્સ"},"toolbars":"એડીટર ટૂલ બાર"},"undo":{"redo":"રિડૂ; પછી હતી એવી સ્થિતિ પાછી લાવવી","undo":"રદ કરવું; પહેલાં હતી એવી સ્થિતિ પાછી લાવવી"},"justify":{"block":"બ્લૉક, અંતરાય જસ્ટિફાઇ","center":"સંકેંદ્રણ/સેંટરિંગ","left":"ડાબી બાજુએ/બાજુ તરફ","right":"જમણી બાજુએ/બાજુ તરફ"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/he.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/he.js new file mode 100755 index 0000000000..2709df9a3a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/he.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['he']={"editor":"עורך טקסט עשיר","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"לחץ אלט ALT + 0 לעזרה","browseServer":"סייר השרת","url":"כתובת (URL)","protocol":"פרוטוקול","upload":"העלאה","uploadSubmit":"שליחה לשרת","image":"תמונה","flash":"פלאש","form":"טופס","checkbox":"תיבת סימון","radio":"לחצן אפשרויות","textField":"שדה טקסט","textarea":"איזור טקסט","hiddenField":"שדה חבוי","button":"כפתור","select":"שדה בחירה","imageButton":"כפתור תמונה","notSet":"<לא נקבע>","id":"זיהוי (ID)","name":"שם","langDir":"כיוון שפה","langDirLtr":"שמאל לימין (LTR)","langDirRtl":"ימין לשמאל (RTL)","langCode":"קוד שפה","longDescr":"קישור לתיאור מפורט","cssClass":"מחלקת עיצוב (CSS Class)","advisoryTitle":"כותרת מוצעת","cssStyle":"סגנון","ok":"אישור","cancel":"ביטול","close":"סגירה","preview":"תצוגה מקדימה","resize":"יש לגרור בכדי לשנות את הגודל","generalTab":"כללי","advancedTab":"אפשרויות מתקדמות","validateNumberFailed":"הערך חייב להיות מספרי.","confirmNewPage":"כל השינויים שלא נשמרו יאבדו. האם להעלות דף חדש?","confirmCancel":"חלק מהאפשרויות שונו, האם לסגור את הדיאלוג?","options":"אפשרויות","target":"מטרה","targetNew":"חלון חדש (_blank)","targetTop":"החלון העליון ביותר (_top)","targetSelf":"אותו חלון (_self)","targetParent":"חלון האב (_parent)","langDirLTR":"שמאל לימין (LTR)","langDirRTL":"ימין לשמאל (RTL)","styles":"סגנון","cssClasses":"מחלקות גליונות סגנון","width":"רוחב","height":"גובה","align":"יישור","alignLeft":"לשמאל","alignRight":"לימין","alignCenter":"מרכז","alignJustify":"יישור לשוליים","alignTop":"למעלה","alignMiddle":"לאמצע","alignBottom":"לתחתית","alignNone":"None","invalidValue":"ערך לא חוקי.","invalidHeight":"הגובה חייב להיות מספר.","invalidWidth":"הרוחב חייב להיות מספר.","invalidCssLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של CSS (px, %, in, cm, mm, em, ex, pt, או pc).","invalidHtmlLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של HTML (px או %).","invalidInlineStyle":"הערך שצויין לשדה הסגנון חייב להכיל זוג ערכים אחד או יותר בפורמט \"שם : ערך\", מופרדים על ידי נקודה-פסיק.","cssLengthTooltip":"יש להכניס מספר המייצג פיקסלים או מספר עם יחידת גליונות סגנון תקינה (px, %, in, cm, mm, em, ex, pt, או pc).","unavailable":"%1<span class=\"cke_accessibility\">, לא זמין</span>"},"basicstyles":{"bold":"מודגש","italic":"נטוי","strike":"כתיב מחוק","subscript":"כתיב תחתון","superscript":"כתיב עליון","underline":"קו תחתון"},"clipboard":{"copy":"העתקה","copyError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+C).","cut":"גזירה","cutError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+X).","paste":"הדבקה","pasteArea":"איזור הדבקה","pasteMsg":"נא להדביק בתוך הקופסה באמצעות (<b>Ctrl/Cmd+V</b>) וללחוץ על <b>אישור</b>.","securityMsg":"עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (Clipboard) בצורה ישירה. נא להדביק שוב בחלון זה.","title":"הדבקה"},"button":{"selectedLabel":"1% (סומן)"},"colorbutton":{"auto":"אוטומטי","bgColorTitle":"צבע רקע","colors":{"000":"שחור","800000":"סגול כהה","8B4513":"חום בהיר","2F4F4F":"אפור צפחה","008080":"כחול-ירוק","000080":"כחול-סגול","4B0082":"אינדיגו","696969":"אפור מעומעם","B22222":"אדום-חום","A52A2A":"חום","DAA520":"כתום זהב","006400":"ירוק כהה","40E0D0":"טורקיז","0000CD":"כחול בינוני","800080":"סגול","808080":"אפור","F00":"אדום","FF8C00":"כתום כהה","FFD700":"זהב","008000":"ירוק","0FF":"ציאן","00F":"כחול","EE82EE":"סגלגל","A9A9A9":"אפור כהה","FFA07A":"כתום-וורוד","FFA500":"כתום","FFFF00":"צהוב","00FF00":"ליים","AFEEEE":"טורקיז בהיר","ADD8E6":"כחול בהיר","DDA0DD":"שזיף","D3D3D3":"אפור בהיר","FFF0F5":"לבנדר מסמיק","FAEBD7":"לבן עתיק","FFFFE0":"צהוב בהיר","F0FFF0":"טל דבש","F0FFFF":"תכלת","F0F8FF":"כחול טיפת מים","E6E6FA":"לבנדר","FFF":"לבן"},"more":"צבעים נוספים...","panelTitle":"צבעים","textColorTitle":"צבע טקסט"},"colordialog":{"clear":"ניקוי","highlight":"סימון","options":"אפשרויות צבע","selected":"בחירה","title":"בחירת צבע"},"elementspath":{"eleLabel":"עץ האלמנטים","eleTitle":"%1 אלמנט"},"font":{"fontSize":{"label":"גודל","voiceLabel":"גודל","panelTitle":"גודל"},"label":"גופן","panelTitle":"גופן","voiceLabel":"גופן"},"format":{"label":"עיצוב","panelTitle":"עיצוב","tag_address":"כתובת","tag_div":"נורמלי (DIV)","tag_h1":"כותרת","tag_h2":"כותרת 2","tag_h3":"כותרת 3","tag_h4":"כותרת 4","tag_h5":"כותרת 5","tag_h6":"כותרת 6","tag_p":"נורמלי","tag_pre":"קוד"},"horizontalrule":{"toolbar":"הוספת קו אופקי"},"indent":{"indent":"הגדלת הזחה","outdent":"הקטנת הזחה"},"fakeobjects":{"anchor":"עוגן","flash":"סרטון פלאש","hiddenfield":"שדה חבוי","iframe":"חלון פנימי (iframe)","unknown":"אובייקט לא ידוע"},"link":{"acccessKey":"מקש גישה","advanced":"אפשרויות מתקדמות","advisoryContentType":"Content Type מוצע","advisoryTitle":"כותרת מוצעת","anchor":{"toolbar":"הוספת/עריכת נקודת עיגון","menu":"מאפייני נקודת עיגון","title":"מאפייני נקודת עיגון","name":"שם לנקודת עיגון","errorName":"יש להקליד שם לנקודת עיגון","remove":"מחיקת נקודת עיגון"},"anchorId":"עפ\"י זיהוי (ID) האלמנט","anchorName":"עפ\"י שם העוגן","charset":"קידוד המשאב המקושר","cssClasses":"גיליונות עיצוב קבוצות","emailAddress":"כתובת הדוא\"ל","emailBody":"גוף ההודעה","emailSubject":"נושא ההודעה","id":"זיהוי (ID)","info":"מידע על הקישור","langCode":"קוד שפה","langDir":"כיוון שפה","langDirLTR":"שמאל לימין (LTR)","langDirRTL":"ימין לשמאל (RTL)","menu":"מאפייני קישור","name":"שם","noAnchors":"(אין עוגנים זמינים בדף)","noEmail":"יש להקליד את כתובת הדוא\"ל","noUrl":"יש להקליד את כתובת הקישור (URL)","other":"<אחר>","popupDependent":"תלוי (Netscape)","popupFeatures":"תכונות החלון הקופץ","popupFullScreen":"מסך מלא (IE)","popupLeft":"מיקום צד שמאל","popupLocationBar":"סרגל כתובת","popupMenuBar":"סרגל תפריט","popupResizable":"שינוי גודל","popupScrollBars":"ניתן לגלילה","popupStatusBar":"סרגל חיווי","popupToolbar":"סרגל הכלים","popupTop":"מיקום צד עליון","rel":"קשר גומלין","selectAnchor":"בחירת עוגן","styles":"סגנון","tabIndex":"מספר טאב","target":"מטרה","targetFrame":"<מסגרת>","targetFrameName":"שם מסגרת היעד","targetPopup":"<חלון קופץ>","targetPopupName":"שם החלון הקופץ","title":"קישור","toAnchor":"עוגן בעמוד זה","toEmail":"דוא\"ל","toUrl":"כתובת (URL)","toolbar":"הוספת/עריכת קישור","type":"סוג קישור","unlink":"הסרת הקישור","upload":"העלאה"},"list":{"bulletedlist":"רשימת נקודות","numberedlist":"רשימה ממוספרת"},"magicline":{"title":"הכנס פסקה כאן"},"maximize":{"maximize":"הגדלה למקסימום","minimize":"הקטנה למינימום"},"pastefromword":{"confirmCleanup":"נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?","error":"לא ניתן היה לנקות את המידע בשל תקלה פנימית.","title":"הדבקה מ-Word","toolbar":"הדבקה מ-Word"},"pastetext":{"button":"הדבקה כטקסט פשוט","title":"הדבקה כטקסט פשוט"},"removeformat":{"toolbar":"הסרת העיצוב"},"specialchar":{"options":"אפשרויות תווים מיוחדים","title":"בחירת תו מיוחד","toolbar":"הוספת תו מיוחד"},"stylescombo":{"label":"סגנון","panelTitle":"סגנונות פורמט","panelTitle1":"סגנונות בלוק","panelTitle2":"סגנונות רצף","panelTitle3":"סגנונות אובייקט"},"table":{"border":"גודל מסגרת","caption":"כיתוב","cell":{"menu":"מאפייני תא","insertBefore":"הוספת תא לפני","insertAfter":"הוספת תא אחרי","deleteCell":"מחיקת תאים","merge":"מיזוג תאים","mergeRight":"מזג ימינה","mergeDown":"מזג למטה","splitHorizontal":"פיצול תא אופקית","splitVertical":"פיצול תא אנכית","title":"תכונות התא","cellType":"סוג התא","rowSpan":"מתיחת השורות","colSpan":"מתיחת התאים","wordWrap":"מניעת גלישת שורות","hAlign":"יישור אופקי","vAlign":"יישור אנכי","alignBaseline":"שורת בסיס","bgColor":"צבע רקע","borderColor":"צבע מסגרת","data":"מידע","header":"כותרת","yes":"כן","no":"לא","invalidWidth":"שדה רוחב התא חייב להיות מספר.","invalidHeight":"שדה גובה התא חייב להיות מספר.","invalidRowSpan":"שדה מתיחת השורות חייב להיות מספר שלם.","invalidColSpan":"שדה מתיחת העמודות חייב להיות מספר שלם.","chooseColor":"בחר"},"cellPad":"ריפוד תא","cellSpace":"מרווח תא","column":{"menu":"עמודה","insertBefore":"הוספת עמודה לפני","insertAfter":"הוספת עמודה אחרי","deleteColumn":"מחיקת עמודות"},"columns":"עמודות","deleteTable":"מחק טבלה","headers":"כותרות","headersBoth":"שניהם","headersColumn":"עמודה ראשונה","headersNone":"אין","headersRow":"שורה ראשונה","invalidBorder":"שדה גודל המסגרת חייב להיות מספר.","invalidCellPadding":"שדה ריפוד התאים חייב להיות מספר חיובי.","invalidCellSpacing":"שדה ריווח התאים חייב להיות מספר חיובי.","invalidCols":"שדה מספר העמודות חייב להיות מספר גדול מ 0.","invalidHeight":"שדה גובה הטבלה חייב להיות מספר.","invalidRows":"שדה מספר השורות חייב להיות מספר גדול מ 0.","invalidWidth":"שדה רוחב הטבלה חייב להיות מספר.","menu":"מאפייני טבלה","row":{"menu":"שורה","insertBefore":"הוספת שורה לפני","insertAfter":"הוספת שורה אחרי","deleteRow":"מחיקת שורות"},"rows":"שורות","summary":"תקציר","title":"מאפייני טבלה","toolbar":"טבלה","widthPc":"אחוז","widthPx":"פיקסלים","widthUnit":"יחידת רוחב"},"contextmenu":{"options":"אפשרויות תפריט ההקשר"},"toolbar":{"toolbarCollapse":"מזעור סרגל כלים","toolbarExpand":"הרחבת סרגל כלים","toolbarGroups":{"document":"מסמך","clipboard":"לוח הגזירים (Clipboard)/צעד אחרון","editing":"עריכה","forms":"טפסים","basicstyles":"עיצוב בסיסי","paragraph":"פסקה","links":"קישורים","insert":"הכנסה","styles":"עיצוב","colors":"צבעים","tools":"כלים"},"toolbars":"סרגלי כלים של העורך"},"undo":{"redo":"חזרה על צעד אחרון","undo":"ביטול צעד אחרון"},"justify":{"block":"יישור לשוליים","center":"מרכוז","left":"יישור לשמאל","right":"יישור לימין"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/hi.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/hi.js new file mode 100755 index 0000000000..29a383396a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/hi.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['hi']={"editor":"रिच टेक्स्ट एडिटर","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"मदद के लिये ALT 0 दबाए","browseServer":"सर्वर ब्राउज़ करें","url":"URL","protocol":"प्रोटोकॉल","upload":"अपलोड","uploadSubmit":"इसे सर्वर को भेजें","image":"तस्वीर","flash":"फ़्लैश","form":"फ़ॉर्म","checkbox":"चॅक बॉक्स","radio":"रेडिओ बटन","textField":"टेक्स्ट फ़ील्ड","textarea":"टेक्स्ट एरिया","hiddenField":"गुप्त फ़ील्ड","button":"बटन","select":"चुनाव फ़ील्ड","imageButton":"तस्वीर बटन","notSet":"<सॅट नहीं>","id":"Id","name":"नाम","langDir":"भाषा लिखने की दिशा","langDirLtr":"बायें से दायें (LTR)","langDirRtl":"दायें से बायें (RTL)","langCode":"भाषा कोड","longDescr":"अधिक विवरण के लिए URL","cssClass":"स्टाइल-शीट क्लास","advisoryTitle":"परामर्श शीर्शक","cssStyle":"स्टाइल","ok":"ठीक है","cancel":"रद्द करें","close":"Close","preview":"प्रीव्यू","resize":"Resize","generalTab":"सामान्य","advancedTab":"ऍड्वान्स्ड","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"टार्गेट","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"बायें से दायें (LTR)","langDirRTL":"दायें से बायें (RTL)","styles":"स्टाइल","cssClasses":"स्टाइल-शीट क्लास","width":"चौड़ाई","height":"ऊँचाई","align":"ऍलाइन","alignLeft":"दायें","alignRight":"दायें","alignCenter":"बीच में","alignJustify":"ब्लॉक जस्टीफ़ाई","alignTop":"ऊपर","alignMiddle":"मध्य","alignBottom":"नीचे","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"basicstyles":{"bold":"बोल्ड","italic":"इटैलिक","strike":"स्ट्राइक थ्रू","subscript":"अधोलेख","superscript":"अभिलेख","underline":"रेखांकण"},"clipboard":{"copy":"कॉपी","copyError":"आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+C) का प्रयोग करें।","cut":"कट","cutError":"आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+X) का प्रयोग करें।","paste":"पेस्ट","pasteArea":"Paste Area","pasteMsg":"Ctrl/Cmd+V का प्रयोग करके पेस्ट करें और ठीक है करें.","securityMsg":"आपके ब्राउज़र की सुरक्षा आपके ब्राउज़र की सुरKश सैटिंग के कारण, एडिटर आपके क्लिपबोर्ड डेटा को नहीं पा सकता है. आपको उसे इस विन्डो में दोबारा पेस्ट करना होगा.","title":"पेस्ट"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"स्वचालित","bgColorTitle":"बैक्ग्राउन्ड रंग","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"और रंग...","panelTitle":"Colors","textColorTitle":"टेक्स्ट रंग"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"font":{"fontSize":{"label":"साइज़","voiceLabel":"Font Size","panelTitle":"साइज़"},"label":"फ़ॉन्ट","panelTitle":"फ़ॉन्ट","voiceLabel":"फ़ॉन्ट"},"format":{"label":"फ़ॉर्मैट","panelTitle":"फ़ॉर्मैट","tag_address":"पता","tag_div":"शीर्षक (DIV)","tag_h1":"शीर्षक 1","tag_h2":"शीर्षक 2","tag_h3":"शीर्षक 3","tag_h4":"शीर्षक 4","tag_h5":"शीर्षक 5","tag_h6":"शीर्षक 6","tag_p":"साधारण","tag_pre":"फ़ॉर्मैटॅड"},"horizontalrule":{"toolbar":"हॉरिज़ॉन्टल रेखा इन्सर्ट करें"},"indent":{"indent":"इन्डॅन्ट बढ़ायें","outdent":"इन्डॅन्ट कम करें"},"fakeobjects":{"anchor":"ऐंकर इन्सर्ट/संपादन","flash":"Flash Animation","hiddenfield":"गुप्त फ़ील्ड","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"ऍक्सॅस की","advanced":"ऍड्वान्स्ड","advisoryContentType":"परामर्श कन्टॅन्ट प्रकार","advisoryTitle":"परामर्श शीर्शक","anchor":{"toolbar":"ऐंकर इन्सर्ट/संपादन","menu":"ऐंकर प्रॉपर्टीज़","title":"ऐंकर प्रॉपर्टीज़","name":"ऐंकर का नाम","errorName":"ऐंकर का नाम टाइप करें","remove":"Remove Anchor"},"anchorId":"ऍलीमॅन्ट Id से","anchorName":"ऐंकर नाम से","charset":"लिंक रिसोर्स करॅक्टर सॅट","cssClasses":"स्टाइल-शीट क्लास","emailAddress":"ई-मेल पता","emailBody":"संदेश","emailSubject":"संदेश विषय","id":"Id","info":"लिंक ","langCode":"भाषा लिखने की दिशा","langDir":"भाषा लिखने की दिशा","langDirLTR":"बायें से दायें (LTR)","langDirRTL":"दायें से बायें (RTL)","menu":"लिंक संपादन","name":"नाम","noAnchors":"(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)","noEmail":"ई-मेल पता टाइप करें","noUrl":"लिंक URL टाइप करें","other":"<अन्य>","popupDependent":"डिपेन्डॅन्ट (Netscape)","popupFeatures":"पॉप-अप विन्डो फ़ीचर्स","popupFullScreen":"फ़ुल स्क्रीन (IE)","popupLeft":"बायीं तरफ","popupLocationBar":"लोकेशन बार","popupMenuBar":"मॅन्यू बार","popupResizable":"आकार बदलने लायक","popupScrollBars":"स्क्रॉल बार","popupStatusBar":"स्टेटस बार","popupToolbar":"टूल बार","popupTop":"दायीं तरफ","rel":"संबंध","selectAnchor":"ऐंकर चुनें","styles":"स्टाइल","tabIndex":"टैब इन्डॅक्स","target":"टार्गेट","targetFrame":"<फ़्रेम>","targetFrameName":"टार्गेट फ़्रेम का नाम","targetPopup":"<पॉप-अप विन्डो>","targetPopupName":"पॉप-अप विन्डो का नाम","title":"लिंक","toAnchor":"इस पेज का ऐंकर","toEmail":"ई-मेल","toUrl":"URL","toolbar":"लिंक इन्सर्ट/संपादन","type":"लिंक प्रकार","unlink":"लिंक हटायें","upload":"अपलोड"},"list":{"bulletedlist":"बुलॅट सूची","numberedlist":"अंकीय सूची"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"मेक्सिमाईज़","minimize":"मिनिमाईज़"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"पेस्ट (वर्ड से)","toolbar":"पेस्ट (वर्ड से)"},"pastetext":{"button":"पेस्ट (सादा टॅक्स्ट)","title":"पेस्ट (सादा टॅक्स्ट)"},"removeformat":{"toolbar":"फ़ॉर्मैट हटायें"},"specialchar":{"options":"विशेष चरित्र विकल्प","title":"विशेष करॅक्टर चुनें","toolbar":"विशेष करॅक्टर इन्सर्ट करें"},"stylescombo":{"label":"स्टाइल","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"बॉर्डर साइज़","caption":"शीर्षक","cell":{"menu":"खाना","insertBefore":"पहले सैल डालें","insertAfter":"बाद में सैल डालें","deleteCell":"सैल डिलीट करें","merge":"सैल मिलायें","mergeRight":"बाँया विलय","mergeDown":"नीचे विलय करें","splitHorizontal":"सैल को क्षैतिज स्थिति में विभाजित करें","splitVertical":"सैल को लम्बाकार में विभाजित करें","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"सैल पैडिंग","cellSpace":"सैल अंतर","column":{"menu":"कालम","insertBefore":"पहले कालम डालें","insertAfter":"बाद में कालम डालें","deleteColumn":"कालम डिलीट करें"},"columns":"कालम","deleteTable":"टेबल डिलीट करें","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"टेबल प्रॉपर्टीज़","row":{"menu":"पंक्ति","insertBefore":"पहले पंक्ति डालें","insertAfter":"बाद में पंक्ति डालें","deleteRow":"पंक्तियाँ डिलीट करें"},"rows":"पंक्तियाँ","summary":"सारांश","title":"टेबल प्रॉपर्टीज़","toolbar":"टेबल","widthPc":"प्रतिशत","widthPx":"पिक्सैल","widthUnit":"width unit"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"एडिटर टूलबार"},"undo":{"redo":"रीडू","undo":"अन्डू"},"justify":{"block":"ब्लॉक जस्टीफ़ाई","center":"बीच में","left":"बायीं तरफ","right":"दायीं तरफ"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/hr.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/hr.js new file mode 100755 index 0000000000..5da730dcc9 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/hr.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['hr']={"editor":"Bogati uređivač teksta, %1","editorPanel":"Ploča Bogatog Uređivača Teksta","common":{"editorHelp":"Pritisni ALT 0 za pomoć","browseServer":"Pretraži server","url":"URL","protocol":"Protokol","upload":"Pošalji","uploadSubmit":"Pošalji na server","image":"Slika","flash":"Flash","form":"Forma","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<nije postavljeno>","id":"Id","name":"Naziv","langDir":"Smjer jezika","langDirLtr":"S lijeva na desno (LTR)","langDirRtl":"S desna na lijevo (RTL)","langCode":"Kôd jezika","longDescr":"Dugački opis URL","cssClass":"Klase stilova","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"Poništi","close":"Zatvori","preview":"Pregledaj","resize":"Povuci za promjenu veličine","generalTab":"Općenito","advancedTab":"Napredno","validateNumberFailed":"Ova vrijednost nije broj.","confirmNewPage":"Sve napravljene promjene će biti izgubljene ukoliko ih niste snimili. Sigurno želite učitati novu stranicu?","confirmCancel":"Neke od opcija su promjenjene. Sigurno želite zatvoriti ovaj prozor?","options":"Opcije","target":"Odredište","targetNew":"Novi prozor (_blank)","targetTop":"Vršni prozor (_top)","targetSelf":"Isti prozor (_self)","targetParent":"Roditeljski prozor (_parent)","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","styles":"Stil","cssClasses":"Klase stilova","width":"Širina","height":"Visina","align":"Poravnanje","alignLeft":"Lijevo","alignRight":"Desno","alignCenter":"Središnje","alignJustify":"Blok poravnanje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dolje","alignNone":"None","invalidValue":"Neispravna vrijednost.","invalidHeight":"Visina mora biti broj.","invalidWidth":"Širina mora biti broj.","invalidCssLength":"Vrijednost određena za \"%1\" polje mora biti pozitivni broj sa ili bez važećih CSS mjernih jedinica (px, %, in, cm, mm, em, ex, pt ili pc).","invalidHtmlLength":"Vrijednost određena za \"%1\" polje mora biti pozitivni broj sa ili bez važećih HTML mjernih jedinica (px ili %).","invalidInlineStyle":"Vrijednost za linijski stil mora sadržavati jednu ili više definicija s formatom \"naziv:vrijednost\", odvojenih točka-zarezom.","cssLengthTooltip":"Unesite broj za vrijednost u pikselima ili broj s važećim CSS mjernim jedinicama (px, %, in, cm, mm, em, ex, pt ili pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupno</span>"},"basicstyles":{"bold":"Podebljaj","italic":"Ukosi","strike":"Precrtano","subscript":"Subscript","superscript":"Superscript","underline":"Potcrtano"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+X).","paste":"Zalijepi","pasteArea":"Prostor za ljepljenje","pasteMsg":"Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl/Cmd+V</STRONG>) i kliknite <STRONG>OK</STRONG>.","securityMsg":"Zbog sigurnosnih postavki Vašeg pretraživača, editor nema direktan pristup Vašem međuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.","title":"Zalijepi"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatski","bgColorTitle":"Boja pozadine","colors":{"000":"Crna","800000":"Kesten","8B4513":"Smeđa","2F4F4F":"Tamno siva","008080":"Teal","000080":"Mornarska","4B0082":"Indigo","696969":"Tamno siva","B22222":"Vatrena cigla","A52A2A":"Smeđa","DAA520":"Zlatna","006400":"Tamno zelena","40E0D0":"Tirkizna","0000CD":"Srednje plava","800080":"Ljubičasta","808080":"Siva","F00":"Crvena","FF8C00":"Tamno naranđasta","FFD700":"Zlatna","008000":"Zelena","0FF":"Cijan","00F":"Plava","EE82EE":"Ljubičasta","A9A9A9":"Mutno siva","FFA07A":"Svijetli losos","FFA500":"Naranđasto","FFFF00":"Žuto","00FF00":"Limun","AFEEEE":"Blijedo tirkizna","ADD8E6":"Svijetlo plava","DDA0DD":"Šljiva","D3D3D3":"Svijetlo siva","FFF0F5":"Lavanda rumeno","FAEBD7":"Antikno bijela","FFFFE0":"Svijetlo žuta","F0FFF0":"Med","F0FFFF":"Azurna","F0F8FF":"Alice plava","E6E6FA":"Lavanda","FFF":"Bijela"},"more":"Više boja...","panelTitle":"Boje","textColorTitle":"Boja teksta"},"colordialog":{"clear":"Očisti","highlight":"Istaknuto","options":"Opcije boje","selected":"Odabrana boja","title":"Odaberi boju"},"elementspath":{"eleLabel":"Putanja elemenata","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Veličina","voiceLabel":"Veličina slova","panelTitle":"Veličina"},"label":"Font","panelTitle":"Font","voiceLabel":"Font"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatirano"},"horizontalrule":{"toolbar":"Ubaci vodoravnu liniju"},"indent":{"indent":"Pomakni udesno","outdent":"Pomakni ulijevo"},"fakeobjects":{"anchor":"Sidro","flash":"Flash animacija","hiddenfield":"Sakriveno polje","iframe":"IFrame","unknown":"Nepoznati objekt"},"link":{"acccessKey":"Pristupna tipka","advanced":"Napredno","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory naslov","anchor":{"toolbar":"Ubaci/promijeni sidro","menu":"Svojstva sidra","title":"Svojstva sidra","name":"Ime sidra","errorName":"Molimo unesite ime sidra","remove":"Ukloni sidro"},"anchorId":"Po Id elementa","anchorName":"Po nazivu sidra","charset":"Kodna stranica povezanih resursa","cssClasses":"Stylesheet klase","emailAddress":"E-Mail adresa","emailBody":"Sadržaj poruke","emailSubject":"Naslov","id":"Id","info":"Link Info","langCode":"Smjer jezika","langDir":"Smjer jezika","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","menu":"Promijeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra)","noEmail":"Molimo upišite e-mail adresu","noUrl":"Molimo upišite URL link","other":"<drugi>","popupDependent":"Ovisno (Netscape)","popupFeatures":"Mogućnosti popup prozora","popupFullScreen":"Cijeli ekran (IE)","popupLeft":"Lijeva pozicija","popupLocationBar":"Traka za lokaciju","popupMenuBar":"Izborna traka","popupResizable":"Promjenjiva veličina","popupScrollBars":"Scroll traka","popupStatusBar":"Statusna traka","popupToolbar":"Traka s alatima","popupTop":"Gornja pozicija","rel":"Veza","selectAnchor":"Odaberi sidro","styles":"Stil","tabIndex":"Tab Indeks","target":"Meta","targetFrame":"<okvir>","targetFrameName":"Ime ciljnog okvira","targetPopup":"<popup prozor>","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toolbar":"Ubaci/promijeni link","type":"Link vrsta","unlink":"Ukloni link","upload":"Pošalji"},"list":{"bulletedlist":"Obična lista","numberedlist":"Brojčana lista"},"magicline":{"title":"Ubaci paragraf ovdje"},"maximize":{"maximize":"Povećaj","minimize":"Smanji"},"pastefromword":{"confirmCleanup":"Tekst koji želite zalijepiti čini se da je kopiran iz Worda. Želite li prije očistiti tekst?","error":"Nije moguće očistiti podatke za ljepljenje zbog interne greške","title":"Zalijepi iz Worda","toolbar":"Zalijepi iz Worda"},"pastetext":{"button":"Zalijepi kao čisti tekst","title":"Zalijepi kao čisti tekst"},"removeformat":{"toolbar":"Ukloni formatiranje"},"specialchar":{"options":"Opcije specijalnih znakova","title":"Odaberite posebni karakter","toolbar":"Ubaci posebne znakove"},"stylescombo":{"label":"Stil","panelTitle":"Stilovi formatiranja","panelTitle1":"Block stilovi","panelTitle2":"Inline stilovi","panelTitle3":"Object stilovi"},"table":{"border":"Veličina okvira","caption":"Naslov","cell":{"menu":"Ćelija","insertBefore":"Ubaci ćeliju prije","insertAfter":"Ubaci ćeliju poslije","deleteCell":"Izbriši ćelije","merge":"Spoji ćelije","mergeRight":"Spoji desno","mergeDown":"Spoji dolje","splitHorizontal":"Podijeli ćeliju vodoravno","splitVertical":"Podijeli ćeliju okomito","title":"Svojstva ćelije","cellType":"Vrsta ćelije","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Prelazak u novi red","hAlign":"Vodoravno poravnanje","vAlign":"Okomito poravnanje","alignBaseline":"Osnovna linija","bgColor":"Boja pozadine","borderColor":"Boja ruba","data":"Podatak","header":"Zaglavlje","yes":"Da","no":"ne","invalidWidth":"Širina ćelije mora biti broj.","invalidHeight":"Visina ćelije mora biti broj.","invalidRowSpan":"Rows span mora biti cijeli broj.","invalidColSpan":"Columns span mora biti cijeli broj.","chooseColor":"Odaberi"},"cellPad":"Razmak ćelija","cellSpace":"Prostornost ćelija","column":{"menu":"Kolona","insertBefore":"Ubaci kolonu prije","insertAfter":"Ubaci kolonu poslije","deleteColumn":"Izbriši kolone"},"columns":"Kolona","deleteTable":"Izbriši tablicu","headers":"Zaglavlje","headersBoth":"Oba","headersColumn":"Prva kolona","headersNone":"Ništa","headersRow":"Prvi red","invalidBorder":"Debljina ruba mora biti broj.","invalidCellPadding":"Razmak ćelija mora biti broj.","invalidCellSpacing":"Prostornost ćelija mora biti broj.","invalidCols":"Broj kolona mora biti broj veći od 0.","invalidHeight":"Visina tablice mora biti broj.","invalidRows":"Broj redova mora biti broj veći od 0.","invalidWidth":"Širina tablice mora biti broj.","menu":"Svojstva tablice","row":{"menu":"Red","insertBefore":"Ubaci red prije","insertAfter":"Ubaci red poslije","deleteRow":"Izbriši redove"},"rows":"Redova","summary":"Sažetak","title":"Svojstva tablice","toolbar":"Tablica","widthPc":"postotaka","widthPx":"piksela","widthUnit":"jedinica širine"},"contextmenu":{"options":"Opcije izbornika"},"toolbar":{"toolbarCollapse":"Smanji alatnu traku","toolbarExpand":"Proširi alatnu traku","toolbarGroups":{"document":"Dokument","clipboard":"Međuspremnik/Poništi","editing":"Uređivanje","forms":"Forme","basicstyles":"Osnovni stilovi","paragraph":"Paragraf","links":"Veze","insert":"Umetni","styles":"Stilovi","colors":"Boje","tools":"Alatke"},"toolbars":"Alatne trake uređivača teksta"},"undo":{"redo":"Ponovi","undo":"Poništi"},"justify":{"block":"Blok poravnanje","center":"Središnje poravnanje","left":"Lijevo poravnanje","right":"Desno poravnanje"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/hu.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/hu.js new file mode 100755 index 0000000000..eae53a60af --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/hu.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['hu']={"editor":"HTML szerkesztő","editorPanel":"Rich Text szerkesztő panel","common":{"editorHelp":"Segítségért nyomjon ALT 0","browseServer":"Böngészés a szerveren","url":"Hivatkozás","protocol":"Protokoll","upload":"Feltöltés","uploadSubmit":"Küldés a szerverre","image":"Kép","flash":"Flash","form":"Űrlap","checkbox":"Jelölőnégyzet","radio":"Választógomb","textField":"Szövegmező","textarea":"Szövegterület","hiddenField":"Rejtettmező","button":"Gomb","select":"Legördülő lista","imageButton":"Képgomb","notSet":"<nincs beállítva>","id":"Azonosító","name":"Név","langDir":"Írás iránya","langDirLtr":"Balról jobbra","langDirRtl":"Jobbról balra","langCode":"Nyelv kódja","longDescr":"Részletes leírás webcíme","cssClass":"Stíluskészlet","advisoryTitle":"Súgócimke","cssStyle":"Stílus","ok":"Rendben","cancel":"Mégsem","close":"Bezárás","preview":"Előnézet","resize":"Húzza az átméretezéshez","generalTab":"Általános","advancedTab":"További opciók","validateNumberFailed":"A mezőbe csak számokat írhat.","confirmNewPage":"Minden nem mentett változás el fog veszni! Biztosan be szeretné tölteni az oldalt?","confirmCancel":"Az űrlap tartalma megváltozott, ám a változásokat nem rögzítette. Biztosan be szeretné zárni az űrlapot?","options":"Beállítások","target":"Cél","targetNew":"Új ablak (_blank)","targetTop":"Legfelső ablak (_top)","targetSelf":"Aktuális ablakban (_self)","targetParent":"Szülő ablak (_parent)","langDirLTR":"Balról jobbra (LTR)","langDirRTL":"Jobbról balra (RTL)","styles":"Stílus","cssClasses":"Stíluslap osztály","width":"Szélesség","height":"Magasság","align":"Igazítás","alignLeft":"Bal","alignRight":"Jobbra","alignCenter":"Középre","alignJustify":"Sorkizárt","alignTop":"Tetejére","alignMiddle":"Középre","alignBottom":"Aljára","alignNone":"None","invalidValue":"Érvénytelen érték.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidWidth":"A szélesség mezőbe csak számokat írhat.","invalidCssLength":"\"%1\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes CSS egységgel megjelölve(px, %, in, cm, mm, em, ex, pt vagy pc).","invalidHtmlLength":"\"%1\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes HTML egységgel megjelölve(px vagy %).","invalidInlineStyle":"Az inline stílusnak megadott értéknek tartalmaznia kell egy vagy több rekordot a \"name : value\" formátumban, pontosvesszővel elválasztva.","cssLengthTooltip":"Adjon meg egy számot értéknek pixelekben vagy egy számot érvényes CSS mértékegységben (px, %, in, cm, mm, em, ex, pt, vagy pc).","unavailable":"%1<span class=\"cke_accessibility\">, nem elérhető</span>"},"basicstyles":{"bold":"Félkövér","italic":"Dőlt","strike":"Áthúzott","subscript":"Alsó index","superscript":"Felső index","underline":"Aláhúzott"},"clipboard":{"copy":"Másolás","copyError":"A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).","cut":"Kivágás","cutError":"A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).","paste":"Beillesztés","pasteArea":"Beszúrás mező","pasteMsg":"Másolja be az alábbi mezőbe a <STRONG>Ctrl/Cmd+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.","securityMsg":"A böngésző biztonsági beállításai miatt a szerkesztő nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.","title":"Beillesztés"},"button":{"selectedLabel":"%1 (Kiválasztva)"},"colorbutton":{"auto":"Automatikus","bgColorTitle":"Háttérszín","colors":{"000":"Fekete","800000":"Bordó","8B4513":"Barna","2F4F4F":"Sötét türkiz","008080":"Türkiz","000080":"Király kék","4B0082":"Indigó kék","696969":"Szürke","B22222":"Tégla vörös","A52A2A":"Vörös","DAA520":"Arany sárga","006400":"Sötét zöld","40E0D0":"Türkiz","0000CD":"Kék","800080":"Lila","808080":"Szürke","F00":"Piros","FF8C00":"Sötét narancs","FFD700":"Arany","008000":"Zöld","0FF":"Türkiz","00F":"Kék","EE82EE":"Rózsaszín","A9A9A9":"Sötét szürke","FFA07A":"Lazac","FFA500":"Narancs","FFFF00":"Citromsárga","00FF00":"Neon zöld","AFEEEE":"Világos türkiz","ADD8E6":"Világos kék","DDA0DD":"Világos lila","D3D3D3":"Világos szürke","FFF0F5":"Lavender Blush","FAEBD7":"Törtfehér","FFFFE0":"Világos sárga","F0FFF0":"Menta","F0FFFF":"Azúr kék","F0F8FF":"Halvány kék","E6E6FA":"Lavender","FFF":"Fehér"},"more":"További színek...","panelTitle":"Színek","textColorTitle":"Betűszín"},"colordialog":{"clear":"Ürítés","highlight":"Nagyítás","options":"Szín opciók","selected":"Kiválasztott","title":"Válasszon színt"},"elementspath":{"eleLabel":"Elem utak","eleTitle":"%1 elem"},"font":{"fontSize":{"label":"Méret","voiceLabel":"Betűméret","panelTitle":"Méret"},"label":"Betűtípus","panelTitle":"Betűtípus","voiceLabel":"Betűtípus"},"format":{"label":"Formátum","panelTitle":"Formátum","tag_address":"Címsor","tag_div":"Bekezdés (DIV)","tag_h1":"Fejléc 1","tag_h2":"Fejléc 2","tag_h3":"Fejléc 3","tag_h4":"Fejléc 4","tag_h5":"Fejléc 5","tag_h6":"Fejléc 6","tag_p":"Normál","tag_pre":"Formázott"},"horizontalrule":{"toolbar":"Elválasztóvonal beillesztése"},"indent":{"indent":"Behúzás növelése","outdent":"Behúzás csökkentése"},"fakeobjects":{"anchor":"Horgony","flash":"Flash animáció","hiddenfield":"Rejtett mezõ","iframe":"IFrame","unknown":"Ismeretlen objektum"},"link":{"acccessKey":"Billentyűkombináció","advanced":"További opciók","advisoryContentType":"Súgó tartalomtípusa","advisoryTitle":"Súgócimke","anchor":{"toolbar":"Horgony beillesztése/szerkesztése","menu":"Horgony tulajdonságai","title":"Horgony tulajdonságai","name":"Horgony neve","errorName":"Kérem adja meg a horgony nevét","remove":"Horgony eltávolítása"},"anchorId":"Azonosító szerint","anchorName":"Horgony név szerint","charset":"Hivatkozott tartalom kódlapja","cssClasses":"Stíluskészlet","emailAddress":"E-Mail cím","emailBody":"Üzenet","emailSubject":"Üzenet tárgya","id":"Id","info":"Alaptulajdonságok","langCode":"Írás iránya","langDir":"Írás iránya","langDirLTR":"Balról jobbra","langDirRTL":"Jobbról balra","menu":"Hivatkozás módosítása","name":"Név","noAnchors":"(Nincs horgony a dokumentumban)","noEmail":"Adja meg az E-Mail címet","noUrl":"Adja meg a hivatkozás webcímét","other":"<más>","popupDependent":"Szülőhöz kapcsolt (csak Netscape)","popupFeatures":"Felugró ablak jellemzői","popupFullScreen":"Teljes képernyő (csak IE)","popupLeft":"Bal pozíció","popupLocationBar":"Címsor","popupMenuBar":"Menü sor","popupResizable":"Átméretezés","popupScrollBars":"Gördítősáv","popupStatusBar":"Állapotsor","popupToolbar":"Eszköztár","popupTop":"Felső pozíció","rel":"Kapcsolat típusa","selectAnchor":"Horgony választása","styles":"Stílus","tabIndex":"Tabulátor index","target":"Tartalom megjelenítése","targetFrame":"<keretben>","targetFrameName":"Keret neve","targetPopup":"<felugró ablakban>","targetPopupName":"Felugró ablak neve","title":"Hivatkozás tulajdonságai","toAnchor":"Horgony az oldalon","toEmail":"E-Mail","toUrl":"URL","toolbar":"Hivatkozás beillesztése/módosítása","type":"Hivatkozás típusa","unlink":"Hivatkozás törlése","upload":"Feltöltés"},"list":{"bulletedlist":"Felsorolás","numberedlist":"Számozás"},"magicline":{"title":"Szúrja be a bekezdést ide"},"maximize":{"maximize":"Teljes méret","minimize":"Kis méret"},"pastefromword":{"confirmCleanup":"Úgy tűnik a beillesztett szöveget Word-ből másolt át. Meg szeretné tisztítani a szöveget? (ajánlott)","error":"Egy belső hiba miatt nem sikerült megtisztítani a szöveget","title":"Beillesztés Word-ből","toolbar":"Beillesztés Word-ből"},"pastetext":{"button":"Beillesztés formázatlan szövegként","title":"Beillesztés formázatlan szövegként"},"removeformat":{"toolbar":"Formázás eltávolítása"},"specialchar":{"options":"Speciális karakter opciók","title":"Speciális karakter választása","toolbar":"Speciális karakter beillesztése"},"stylescombo":{"label":"Stílus","panelTitle":"Formázási stílusok","panelTitle1":"Blokk stílusok","panelTitle2":"Inline stílusok","panelTitle3":"Objektum stílusok"},"table":{"border":"Szegélyméret","caption":"Felirat","cell":{"menu":"Cella","insertBefore":"Beszúrás balra","insertAfter":"Beszúrás jobbra","deleteCell":"Cellák törlése","merge":"Cellák egyesítése","mergeRight":"Cellák egyesítése jobbra","mergeDown":"Cellák egyesítése lefelé","splitHorizontal":"Cellák szétválasztása vízszintesen","splitVertical":"Cellák szétválasztása függőlegesen","title":"Cella tulajdonságai","cellType":"Cella típusa","rowSpan":"Függőleges egyesítés","colSpan":"Vízszintes egyesítés","wordWrap":"Hosszú sorok törése","hAlign":"Vízszintes igazítás","vAlign":"Függőleges igazítás","alignBaseline":"Alapvonalra","bgColor":"Háttér színe","borderColor":"Keret színe","data":"Adat","header":"Fejléc","yes":"Igen","no":"Nem","invalidWidth":"A szélesség mezőbe csak számokat írhat.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidRowSpan":"A függőleges egyesítés mezőbe csak számokat írhat.","invalidColSpan":"A vízszintes egyesítés mezőbe csak számokat írhat.","chooseColor":"Válasszon"},"cellPad":"Cella belső margó","cellSpace":"Cella térköz","column":{"menu":"Oszlop","insertBefore":"Beszúrás balra","insertAfter":"Beszúrás jobbra","deleteColumn":"Oszlopok törlése"},"columns":"Oszlopok","deleteTable":"Táblázat törlése","headers":"Fejlécek","headersBoth":"Mindkettő","headersColumn":"Első oszlop","headersNone":"Nincsenek","headersRow":"Első sor","invalidBorder":"A szegélyméret mezőbe csak számokat írhat.","invalidCellPadding":"A cella belső margó mezőbe csak számokat írhat.","invalidCellSpacing":"A cella térköz mezőbe csak számokat írhat.","invalidCols":"Az oszlopok számának nagyobbnak kell lenni mint 0.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidRows":"A sorok számának nagyobbnak kell lenni mint 0.","invalidWidth":"A szélesség mezőbe csak számokat írhat.","menu":"Táblázat tulajdonságai","row":{"menu":"Sor","insertBefore":"Beszúrás fölé","insertAfter":"Beszúrás alá","deleteRow":"Sorok törlése"},"rows":"Sorok","summary":"Leírás","title":"Táblázat tulajdonságai","toolbar":"Táblázat","widthPc":"százalék","widthPx":"képpont","widthUnit":"Szélesség egység"},"contextmenu":{"options":"Helyi menü opciók"},"toolbar":{"toolbarCollapse":"Eszköztár összecsukása","toolbarExpand":"Eszköztár szétnyitása","toolbarGroups":{"document":"Dokumentum","clipboard":"Vágólap/Visszavonás","editing":"Szerkesztés","forms":"Űrlapok","basicstyles":"Alapstílusok","paragraph":"Bekezdés","links":"Hivatkozások","insert":"Beszúrás","styles":"Stílusok","colors":"Színek","tools":"Eszközök"},"toolbars":"Szerkesztő Eszköztár"},"undo":{"redo":"Ismétlés","undo":"Visszavonás"},"justify":{"block":"Sorkizárt","center":"Középre","left":"Balra","right":"Jobbra"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/id.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/id.js new file mode 100755 index 0000000000..17ff7e737b --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/id.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['id']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tekan ALT 0 untuk bantuan.","browseServer":"Jelajah Server","url":"URL","protocol":"Protokol","upload":"Unggah","uploadSubmit":"Kirim ke Server","image":"Gambar","flash":"Flash","form":"Formulir","checkbox":"Kotak Cek","radio":"Tombol Radio","textField":"Kolom Teks","textarea":"Area Teks","hiddenField":"Kolom Tersembunyi","button":"Tombol","select":"Kolom Seleksi","imageButton":"Tombol Gambar","notSet":"<tidak diatur>","id":"Id","name":"Nama","langDir":"Arah Bahasa","langDirLtr":"Kiri ke Kanan (LTR)","langDirRtl":"Kanan ke Kiri","langCode":"Kode Bahasa","longDescr":"Deskripsi URL Panjang","cssClass":"Kelas Stylesheet","advisoryTitle":"Penasehat Judul","cssStyle":"Gaya","ok":"OK","cancel":"Batal","close":"Tutup","preview":"Pratinjau","resize":"Ubah ukuran","generalTab":"Umum","advancedTab":"Advanced","validateNumberFailed":"Nilai ini tidak sebuah angka","confirmNewPage":"Semua perubahan yang tidak disimpan di konten ini akan hilang. Apakah anda yakin ingin memuat halaman baru?","confirmCancel":"Beberapa opsi telah berubah. Apakah anda yakin ingin menutup dialog?","options":"Opsi","target":"Sasaran","targetNew":"Jendela Baru (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Jendela yang Sama (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","styles":"Gaya","cssClasses":"Kelas Stylesheet","width":"Lebar","height":"Tinggi","align":"Penjajaran","alignLeft":"Kiri","alignRight":"Kanan","alignCenter":"Tengah","alignJustify":"Rata kiri-kanan","alignTop":"Atas","alignMiddle":"Tengah","alignBottom":"Bawah","alignNone":"None","invalidValue":"Nilai tidak sah.","invalidHeight":"Tinggi harus sebuah angka.","invalidWidth":"Lebar harus sebuah angka.","invalidCssLength":"Nilai untuk \"%1\" harus sebuah angkat positif dengan atau tanpa pengukuran unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Nilai yang dispesifikasian untuk kolom \"%1\" harus sebuah angka positif dengan atau tanpa sebuah unit pengukuran HTML (px atau %) yang valid.","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Masukkan sebuah angka untuk sebuah nilai dalam pixel atau sebuah angka dengan unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, tidak tersedia</span>"},"basicstyles":{"bold":"Huruf Tebal","italic":"Huruf Miring","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Garis Bawah"},"clipboard":{"copy":"Salin","copyError":"Pengaturan keamanan peramban anda tidak mengizinkan editor untuk mengeksekusi operasi menyalin secara otomatis. Mohon gunakan papan tuts (Ctrl/Cmd+C)","cut":"Potong","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Tempel","pasteArea":"Area Tempel","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Tempel"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatic","bgColorTitle":"Warna Latar Belakang","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"More Colors...","panelTitle":"Warna","textColorTitle":"Text Color"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Ukuran","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"format":{"label":"Bentuk","panelTitle":"Bentuk Paragraf","tag_address":"Alamat","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Membentuk"},"horizontalrule":{"toolbar":"Sisip Garis Horisontal"},"indent":{"indent":"Tingkatkan Lekuk","outdent":"Kurangi Lekuk"},"fakeobjects":{"anchor":"Anchor","flash":"Animasi Flash","hiddenfield":"Kolom Tersembunyi","iframe":"IFrame","unknown":"Obyek Tak Dikenal"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Penasehat Judul","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Kelas Stylesheet","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Kode Bahasa","langDir":"Arah Bahasa","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","menu":"Edit Link","name":"Nama","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Gaya","tabIndex":"Tab Index","target":"Sasaran","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Tautan","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Tautan","type":"Link Type","unlink":"Unlink","upload":"Unggah"},"list":{"bulletedlist":"Sisip/Hapus Daftar Bullet","numberedlist":"Sisip/Hapus Daftar Bernomor"},"magicline":{"title":"Masukkan paragraf disini"},"maximize":{"maximize":"Memperbesar","minimize":"Memperkecil"},"pastefromword":{"confirmCleanup":"Teks yang ingin anda tempel sepertinya di salin dari Word. Apakah anda mau membersihkannya sebelum menempel?","error":"Tidak mungkin membersihkan data yang ditempel dikerenakan kesalahan internal","title":"Tempel dari Word","toolbar":"Tempel dari Word"},"pastetext":{"button":"Tempel sebagai teks polos","title":"Tempel sebagai Teks Polos"},"removeformat":{"toolbar":"Hapus Format"},"specialchar":{"options":"Opsi spesial karakter","title":"Pilih spesial karakter","toolbar":"Sisipkan spesial karakter"},"stylescombo":{"label":"Gaya","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Ukuran batas","caption":"Judul halaman","cell":{"menu":"Sel","insertBefore":"Sisip Sel Sebelum","insertAfter":"Sisip Sel Setelah","deleteCell":"Hapus Sel","merge":"Gabungkan Sel","mergeRight":"Gabungkan ke Kanan","mergeDown":"Gabungkan ke Bawah","splitHorizontal":"Pisahkan Sel Secara Horisontal","splitVertical":"Pisahkan Sel Secara Vertikal","title":"Properti Sel","cellType":"Tipe Sel","rowSpan":"Rentang antar baris","colSpan":"Rentang antar kolom","wordWrap":"Word Wrap","hAlign":"Jajaran Horisontal","vAlign":"Jajaran Vertikal","alignBaseline":"Dasar","bgColor":"Warna Latar Belakang","borderColor":"Warna Batasan","data":"Data","header":"Header","yes":"Ya","no":"Tidak","invalidWidth":"Lebar sel harus sebuah angka.","invalidHeight":"Tinggi sel harus sebuah angka","invalidRowSpan":"Rentang antar baris harus angka seluruhnya.","invalidColSpan":"Rentang antar kolom harus angka seluruhnya","chooseColor":"Pilih"},"cellPad":"Sel spasi dalam","cellSpace":"Spasi antar sel","column":{"menu":"Kolom","insertBefore":"Sisip Kolom Sebelum","insertAfter":"Sisip Kolom Sesudah","deleteColumn":"Hapus Kolom"},"columns":"Kolom","deleteTable":"Hapus Tabel","headers":"Headers","headersBoth":"Keduanya","headersColumn":"Kolom pertama","headersNone":"Tidak ada","headersRow":"Baris Pertama","invalidBorder":"Ukuran batasan harus sebuah angka","invalidCellPadding":"'Spasi dalam' sel harus angka positif.","invalidCellSpacing":"Spasi antar sel harus angka positif.","invalidCols":"Jumlah kolom harus sebuah angka lebih besar dari 0","invalidHeight":"Tinggi tabel harus sebuah angka.","invalidRows":"Jumlah barus harus sebuah angka dan lebih besar dari 0.","invalidWidth":"Lebar tabel harus sebuah angka.","menu":"Properti Tabel","row":{"menu":"Baris","insertBefore":"Sisip Baris Sebelum","insertAfter":"Sisip Baris Sesudah","deleteRow":"Hapus Baris"},"rows":"Baris","summary":"Intisari","title":"Properti Tabel","toolbar":"Tabe","widthPc":"persen","widthPx":"piksel","widthUnit":"lebar satuan"},"contextmenu":{"options":"Opsi Konteks Pilihan"},"toolbar":{"toolbarCollapse":"Ciutkan Toolbar","toolbarExpand":"Bentangkan Toolbar","toolbarGroups":{"document":"Dokumen","clipboard":"Papan klip / Kembalikan perlakuan","editing":"Sunting","forms":"Formulir","basicstyles":"Gaya Dasar","paragraph":"Paragraf","links":"Tautan","insert":"Sisip","styles":"Gaya","colors":"Warna","tools":"Alat"},"toolbars":"Editor toolbars"},"undo":{"redo":"Kembali lakukan","undo":"Batalkan perlakuan"},"justify":{"block":"Rata kiri-kanan","center":"Pusat","left":"Align Left","right":"Align Right"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/is.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/is.js new file mode 100755 index 0000000000..55f9604e3a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/is.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['is']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Fletta í skjalasafni","url":"Vefslóð","protocol":"Samskiptastaðall","upload":"Senda upp","uploadSubmit":"Hlaða upp","image":"Setja inn mynd","flash":"Flash","form":"Setja inn innsláttarform","checkbox":"Setja inn hökunarreit","radio":"Setja inn valhnapp","textField":"Setja inn textareit","textarea":"Setja inn textasvæði","hiddenField":"Setja inn falið svæði","button":"Setja inn hnapp","select":"Setja inn lista","imageButton":"Setja inn myndahnapp","notSet":"<ekkert valið>","id":"Auðkenni","name":"Nafn","langDir":"Lesstefna","langDirLtr":"Frá vinstri til hægri (LTR)","langDirRtl":"Frá hægri til vinstri (RTL)","langCode":"Tungumálakóði","longDescr":"Nánari lýsing","cssClass":"Stílsniðsflokkur","advisoryTitle":"Titill","cssStyle":"Stíll","ok":"Í lagi","cancel":"Hætta við","close":"Close","preview":"Forskoða","resize":"Resize","generalTab":"Almennt","advancedTab":"Tæknilegt","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Mark","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Frá vinstri til hægri (LTR)","langDirRTL":"Frá hægri til vinstri (RTL)","styles":"Stíll","cssClasses":"Stílsniðsflokkur","width":"Breidd","height":"Hæð","align":"Jöfnun","alignLeft":"Vinstri","alignRight":"Hægri","alignCenter":"Miðjað","alignJustify":"Jafna báðum megin","alignTop":"Efst","alignMiddle":"Miðjuð","alignBottom":"Neðst","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"basicstyles":{"bold":"Feitletrað","italic":"Skáletrað","strike":"Yfirstrikað","subscript":"Niðurskrifað","superscript":"Uppskrifað","underline":"Undirstrikað"},"clipboard":{"copy":"Afrita","copyError":"Öryggisstillingar vafrans þíns leyfa ekki afritun texta með músaraðgerð. Notaðu lyklaborðið í afrita (Ctrl/Cmd+C).","cut":"Klippa","cutError":"Öryggisstillingar vafrans þíns leyfa ekki klippingu texta með músaraðgerð. Notaðu lyklaborðið í klippa (Ctrl/Cmd+X).","paste":"Líma","pasteArea":"Paste Area","pasteMsg":"Límdu í svæðið hér að neðan og (<STRONG>Ctrl/Cmd+V</STRONG>) og smelltu á <STRONG>OK</STRONG>.","securityMsg":"Vegna öryggisstillinga í vafranum þínum fær ritillinn ekki beinan aðgang að klippuborðinu. Þú verður að líma innihaldið aftur inn í þennan glugga.","title":"Líma"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Sjálfval","bgColorTitle":"Bakgrunnslitur","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Fleiri liti...","panelTitle":"Colors","textColorTitle":"Litur texta"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Leturstærð ","voiceLabel":"Font Size","panelTitle":"Leturstærð "},"label":"Leturgerð ","panelTitle":"Leturgerð ","voiceLabel":"Leturgerð "},"format":{"label":"Stílsnið","panelTitle":"Stílsnið","tag_address":"Vistfang","tag_div":"Venjulegt (DIV)","tag_h1":"Fyrirsögn 1","tag_h2":"Fyrirsögn 2","tag_h3":"Fyrirsögn 3","tag_h4":"Fyrirsögn 4","tag_h5":"Fyrirsögn 5","tag_h6":"Fyrirsögn 6","tag_p":"Venjulegt letur","tag_pre":"Forsniðið"},"horizontalrule":{"toolbar":"Lóðrétt lína"},"indent":{"indent":"Minnka inndrátt","outdent":"Auka inndrátt"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Skammvalshnappur","advanced":"Tæknilegt","advisoryContentType":"Tegund innihalds","advisoryTitle":"Titill","anchor":{"toolbar":"Stofna/breyta kaflamerki","menu":"Eigindi kaflamerkis","title":"Eigindi kaflamerkis","name":"Nafn bókamerkis","errorName":"Sláðu inn nafn bókamerkis!","remove":"Remove Anchor"},"anchorId":"Eftir auðkenni einingar","anchorName":"Eftir akkerisnafni","charset":"Táknróf","cssClasses":"Stílsniðsflokkur","emailAddress":"Netfang","emailBody":"Meginmál","emailSubject":"Efni","id":"Auðkenni","info":"Almennt","langCode":"Lesstefna","langDir":"Lesstefna","langDirLTR":"Frá vinstri til hægri (LTR)","langDirRTL":"Frá hægri til vinstri (RTL)","menu":"Breyta stiklu","name":"Nafn","noAnchors":"<Engin bókamerki á skrá>","noEmail":"Sláðu inn netfang!","noUrl":"Sláðu inn veffang stiklunnar!","other":"<annar>","popupDependent":"Háð venslum (Netscape)","popupFeatures":"Eigindi sprettiglugga","popupFullScreen":"Heilskjár (IE)","popupLeft":"Fjarlægð frá vinstri","popupLocationBar":"Fanglína","popupMenuBar":"Vallína","popupResizable":"Resizable","popupScrollBars":"Skrunstikur","popupStatusBar":"Stöðustika","popupToolbar":"Verkfærastika","popupTop":"Fjarlægð frá efri brún","rel":"Relationship","selectAnchor":"Veldu akkeri","styles":"Stíll","tabIndex":"Raðnúmer innsláttarreits","target":"Mark","targetFrame":"<rammi>","targetFrameName":"Nafn markglugga","targetPopup":"<sprettigluggi>","targetPopupName":"Nafn sprettiglugga","title":"Stikla","toAnchor":"Bókamerki á þessari síðu","toEmail":"Netfang","toUrl":"Vefslóð","toolbar":"Stofna/breyta stiklu","type":"Stikluflokkur","unlink":"Fjarlægja stiklu","upload":"Senda upp"},"list":{"bulletedlist":"Punktalisti","numberedlist":"Númeraður listi"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Líma úr Word","toolbar":"Líma úr Word"},"pastetext":{"button":"Líma sem ósniðinn texta","title":"Líma sem ósniðinn texta"},"removeformat":{"toolbar":"Fjarlægja snið"},"specialchar":{"options":"Special Character Options","title":"Velja tákn","toolbar":"Setja inn merki"},"stylescombo":{"label":"Stílflokkur","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Breidd ramma","caption":"Titill","cell":{"menu":"Reitur","insertBefore":"Skjóta inn reiti fyrir aftan","insertAfter":"Skjóta inn reiti fyrir framan","deleteCell":"Fella reit","merge":"Sameina reiti","mergeRight":"Sameina til hægri","mergeDown":"Sameina niður á við","splitHorizontal":"Kljúfa reit lárétt","splitVertical":"Kljúfa reit lóðrétt","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Reitaspássía","cellSpace":"Bil milli reita","column":{"menu":"Dálkur","insertBefore":"Skjóta inn dálki vinstra megin","insertAfter":"Skjóta inn dálki hægra megin","deleteColumn":"Fella dálk"},"columns":"Dálkar","deleteTable":"Fella töflu","headers":"Fyrirsagnir","headersBoth":"Hvort tveggja","headersColumn":"Fyrsti dálkur","headersNone":"Engar","headersRow":"Fyrsta röð","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Eigindi töflu","row":{"menu":"Röð","insertBefore":"Skjóta inn röð fyrir ofan","insertAfter":"Skjóta inn röð fyrir neðan","deleteRow":"Eyða röð"},"rows":"Raðir","summary":"Áfram","title":"Eigindi töflu","toolbar":"Tafla","widthPc":"prósent","widthPx":"myndeindir","widthUnit":"width unit"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"undo":{"redo":"Hætta við afturköllun","undo":"Afturkalla"},"justify":{"block":"Jafna báðum megin","center":"Miðja texta","left":"Vinstrijöfnun","right":"Hægrijöfnun"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/it.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/it.js new file mode 100755 index 0000000000..b7b6daec1c --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/it.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['it']={"editor":"Rich Text Editor","editorPanel":"Pannello Rich Text Editor","common":{"editorHelp":"Premi ALT 0 per aiuto","browseServer":"Cerca sul server","url":"URL","protocol":"Protocollo","upload":"Carica","uploadSubmit":"Invia al server","image":"Immagine","flash":"Oggetto Flash","form":"Modulo","checkbox":"Checkbox","radio":"Radio Button","textField":"Campo di testo","textarea":"Area di testo","hiddenField":"Campo nascosto","button":"Bottone","select":"Menu di selezione","imageButton":"Bottone immagine","notSet":"<non impostato>","id":"Id","name":"Nome","langDir":"Direzione scrittura","langDirLtr":"Da Sinistra a Destra (LTR)","langDirRtl":"Da Destra a Sinistra (RTL)","langCode":"Codice Lingua","longDescr":"URL descrizione estesa","cssClass":"Nome classe CSS","advisoryTitle":"Titolo","cssStyle":"Stile","ok":"OK","cancel":"Annulla","close":"Chiudi","preview":"Anteprima","resize":"Trascina per ridimensionare","generalTab":"Generale","advancedTab":"Avanzate","validateNumberFailed":"Il valore inserito non è un numero.","confirmNewPage":"Ogni modifica non salvata sarà persa. Sei sicuro di voler caricare una nuova pagina?","confirmCancel":"Alcune delle opzioni sono state cambiate. Sei sicuro di voler chiudere la finestra di dialogo?","options":"Opzioni","target":"Destinazione","targetNew":"Nuova finestra (_blank)","targetTop":"Finestra in primo piano (_top)","targetSelf":"Stessa finestra (_self)","targetParent":"Finestra Padre (_parent)","langDirLTR":"Da sinistra a destra (LTR)","langDirRTL":"Da destra a sinistra (RTL)","styles":"Stile","cssClasses":"Classi di stile","width":"Larghezza","height":"Altezza","align":"Allineamento","alignLeft":"Sinistra","alignRight":"Destra","alignCenter":"Centrato","alignJustify":"Giustifica","alignTop":"In Alto","alignMiddle":"Centrato","alignBottom":"In Basso","alignNone":"Nessuno","invalidValue":"Valore non valido.","invalidHeight":"L'altezza dev'essere un numero","invalidWidth":"La Larghezza dev'essere un numero","invalidCssLength":"Il valore indicato per il campo \"%1\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le classi CSS (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"Il valore indicato per il campo \"%1\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le pagine HTML (px o %).","invalidInlineStyle":"Il valore specificato per lo stile inline deve consistere in una o più tuple con il formato di \"name : value\", separati da semicolonne.","cssLengthTooltip":"Inserisci un numero per il valore in pixel oppure un numero con una valida unità CSS (px, %, in, cm, mm, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, non disponibile</span>"},"basicstyles":{"bold":"Grassetto","italic":"Corsivo","strike":"Barrato","subscript":"Pedice","superscript":"Apice","underline":"Sottolineato"},"clipboard":{"copy":"Copia","copyError":"Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+C).","cut":"Taglia","cutError":"Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+X).","paste":"Incolla","pasteArea":"Incolla","pasteMsg":"Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl/Cmd+V</STRONG>) e premi <STRONG>OK</STRONG>.","securityMsg":"A causa delle impostazioni di sicurezza del browser,l'editor non è in grado di accedere direttamente agli appunti. E' pertanto necessario incollarli di nuovo in questa finestra.","title":"Incolla"},"button":{"selectedLabel":"%1 (selezionato)"},"colorbutton":{"auto":"Automatico","bgColorTitle":"Colore sfondo","colors":{"000":"Nero","800000":"Marrone Castagna","8B4513":"Marrone Cuoio","2F4F4F":"Grigio Fumo di Londra","008080":"Acquamarina","000080":"Blu Oceano","4B0082":"Indigo","696969":"Grigio Scuro","B22222":"Giallo Fiamma","A52A2A":"Marrone","DAA520":"Giallo Mimosa","006400":"Verde Scuro","40E0D0":"Turchese","0000CD":"Blue Scuro","800080":"Viola","808080":"Grigio","F00":"Rosso","FF8C00":"Arancio Scuro","FFD700":"Oro","008000":"Verde","0FF":"Ciano","00F":"Blu","EE82EE":"Violetto","A9A9A9":"Grigio Scuro","FFA07A":"Salmone","FFA500":"Arancio","FFFF00":"Giallo","00FF00":"Lime","AFEEEE":"Turchese Chiaro","ADD8E6":"Blu Chiaro","DDA0DD":"Rosso Ciliegia","D3D3D3":"Grigio Chiaro","FFF0F5":"Lavanda Chiara","FAEBD7":"Bianco Antico","FFFFE0":"Giallo Chiaro","F0FFF0":"Verde Mela","F0FFFF":"Azzurro","F0F8FF":"Celeste","E6E6FA":"Lavanda","FFF":"Bianco"},"more":"Altri colori...","panelTitle":"Colori","textColorTitle":"Colore testo"},"colordialog":{"clear":"cancella","highlight":"Evidenzia","options":"Opzioni colore","selected":"Seleziona il colore","title":"Selezionare il colore"},"elementspath":{"eleLabel":"Percorso degli elementi","eleTitle":"%1 elemento"},"font":{"fontSize":{"label":"Dimensione","voiceLabel":"Dimensione Carattere","panelTitle":"Dimensione"},"label":"Carattere","panelTitle":"Carattere","voiceLabel":"Carattere"},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Indirizzo","tag_div":"Paragrafo (DIV)","tag_h1":"Titolo 1","tag_h2":"Titolo 2","tag_h3":"Titolo 3","tag_h4":"Titolo 4","tag_h5":"Titolo 5","tag_h6":"Titolo 6","tag_p":"Normale","tag_pre":"Formattato"},"horizontalrule":{"toolbar":"Inserisci riga orizzontale"},"indent":{"indent":"Aumenta rientro","outdent":"Riduci rientro"},"fakeobjects":{"anchor":"Ancora","flash":"Animazione Flash","hiddenfield":"Campo Nascosto","iframe":"IFrame","unknown":"Oggetto sconosciuto"},"link":{"acccessKey":"Scorciatoia da tastiera","advanced":"Avanzate","advisoryContentType":"Tipo della risorsa collegata","advisoryTitle":"Titolo","anchor":{"toolbar":"Inserisci/Modifica Ancora","menu":"Proprietà ancora","title":"Proprietà ancora","name":"Nome ancora","errorName":"Inserici il nome dell'ancora","remove":"Rimuovi l'ancora"},"anchorId":"Per id elemento","anchorName":"Per Nome","charset":"Set di caretteri della risorsa collegata","cssClasses":"Nome classe CSS","emailAddress":"Indirizzo E-Mail","emailBody":"Corpo del messaggio","emailSubject":"Oggetto del messaggio","id":"Id","info":"Informazioni collegamento","langCode":"Direzione scrittura","langDir":"Direzione scrittura","langDirLTR":"Da Sinistra a Destra (LTR)","langDirRTL":"Da Destra a Sinistra (RTL)","menu":"Modifica collegamento","name":"Nome","noAnchors":"(Nessuna ancora disponibile nel documento)","noEmail":"Devi inserire un'indirizzo e-mail","noUrl":"Devi inserire l'URL del collegamento","other":"<altro>","popupDependent":"Dipendente (Netscape)","popupFeatures":"Caratteristiche finestra popup","popupFullScreen":"A tutto schermo (IE)","popupLeft":"Posizione da sinistra","popupLocationBar":"Barra degli indirizzi","popupMenuBar":"Barra del menu","popupResizable":"Ridimensionabile","popupScrollBars":"Barre di scorrimento","popupStatusBar":"Barra di stato","popupToolbar":"Barra degli strumenti","popupTop":"Posizione dall'alto","rel":"Relazioni","selectAnchor":"Scegli Ancora","styles":"Stile","tabIndex":"Ordine di tabulazione","target":"Destinazione","targetFrame":"<riquadro>","targetFrameName":"Nome del riquadro di destinazione","targetPopup":"<finestra popup>","targetPopupName":"Nome finestra popup","title":"Collegamento","toAnchor":"Ancora nel testo","toEmail":"E-Mail","toUrl":"URL","toolbar":"Collegamento","type":"Tipo di Collegamento","unlink":"Elimina collegamento","upload":"Carica"},"list":{"bulletedlist":"Inserisci/Rimuovi Elenco Puntato","numberedlist":"Inserisci/Rimuovi Elenco Numerato"},"magicline":{"title":"Inserisci paragrafo qui"},"maximize":{"maximize":"Massimizza","minimize":"Minimizza"},"pastefromword":{"confirmCleanup":"Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?","error":"Non è stato possibile eliminare il testo incollato a causa di un errore interno.","title":"Incolla da Word","toolbar":"Incolla da Word"},"pastetext":{"button":"Incolla come testo semplice","title":"Incolla come testo semplice"},"removeformat":{"toolbar":"Elimina formattazione"},"specialchar":{"options":"Opzioni carattere speciale","title":"Seleziona carattere speciale","toolbar":"Inserisci carattere speciale"},"stylescombo":{"label":"Stili","panelTitle":"Stili di formattazione","panelTitle1":"Stili per blocchi","panelTitle2":"Stili in linea","panelTitle3":"Stili per oggetti"},"table":{"border":"Dimensione bordo","caption":"Intestazione","cell":{"menu":"Cella","insertBefore":"Inserisci Cella Prima","insertAfter":"Inserisci Cella Dopo","deleteCell":"Elimina celle","merge":"Unisce celle","mergeRight":"Unisci a Destra","mergeDown":"Unisci in Basso","splitHorizontal":"Dividi Cella Orizzontalmente","splitVertical":"Dividi Cella Verticalmente","title":"Proprietà della cella","cellType":"Tipo di cella","rowSpan":"Su più righe","colSpan":"Su più colonne","wordWrap":"Ritorno a capo","hAlign":"Allineamento orizzontale","vAlign":"Allineamento verticale","alignBaseline":"Linea Base","bgColor":"Colore di Sfondo","borderColor":"Colore del Bordo","data":"Dati","header":"Intestazione","yes":"Si","no":"No","invalidWidth":"La larghezza della cella dev'essere un numero.","invalidHeight":"L'altezza della cella dev'essere un numero.","invalidRowSpan":"Il numero di righe dev'essere un numero intero.","invalidColSpan":"Il numero di colonne dev'essere un numero intero.","chooseColor":"Scegli"},"cellPad":"Padding celle","cellSpace":"Spaziatura celle","column":{"menu":"Colonna","insertBefore":"Inserisci Colonna Prima","insertAfter":"Inserisci Colonna Dopo","deleteColumn":"Elimina colonne"},"columns":"Colonne","deleteTable":"Cancella Tabella","headers":"Intestazione","headersBoth":"Entrambe","headersColumn":"Prima Colonna","headersNone":"Nessuna","headersRow":"Prima Riga","invalidBorder":"La dimensione del bordo dev'essere un numero.","invalidCellPadding":"Il paging delle celle dev'essere un numero","invalidCellSpacing":"La spaziatura tra le celle dev'essere un numero.","invalidCols":"Il numero di colonne dev'essere un numero maggiore di 0.","invalidHeight":"L'altezza della tabella dev'essere un numero.","invalidRows":"Il numero di righe dev'essere un numero maggiore di 0.","invalidWidth":"La larghezza della tabella dev'essere un numero.","menu":"Proprietà tabella","row":{"menu":"Riga","insertBefore":"Inserisci Riga Prima","insertAfter":"Inserisci Riga Dopo","deleteRow":"Elimina righe"},"rows":"Righe","summary":"Indice","title":"Proprietà tabella","toolbar":"Tabella","widthPc":"percento","widthPx":"pixel","widthUnit":"unità larghezza"},"contextmenu":{"options":"Opzioni del menù contestuale"},"toolbar":{"toolbarCollapse":"Minimizza Toolbar","toolbarExpand":"Espandi Toolbar","toolbarGroups":{"document":"Documento","clipboard":"Copia negli appunti/Annulla","editing":"Modifica","forms":"Form","basicstyles":"Stili di base","paragraph":"Paragrafo","links":"Link","insert":"Inserisci","styles":"Stili","colors":"Colori","tools":"Strumenti"},"toolbars":"Editor toolbar"},"undo":{"redo":"Ripristina","undo":"Annulla"},"justify":{"block":"Giustifica","center":"Centra","left":"Allinea a sinistra","right":"Allinea a destra"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/ja.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/ja.js new file mode 100755 index 0000000000..e6eaae9c2a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/ja.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['ja']={"editor":"リッチテキストエディタ","editorPanel":"リッチテキストエディタパネル","common":{"editorHelp":"ヘルプは ALT 0 を押してください","browseServer":"サーバブラウザ","url":"URL","protocol":"プロトコル","upload":"アップロード","uploadSubmit":"サーバーに送信","image":"イメージ","flash":"Flash","form":"フォーム","checkbox":"チェックボックス","radio":"ラジオボタン","textField":"1行テキスト","textarea":"テキストエリア","hiddenField":"不可視フィールド","button":"ボタン","select":"選択フィールド","imageButton":"画像ボタン","notSet":"<なし>","id":"Id","name":"Name属性","langDir":"文字表記の方向","langDirLtr":"左から右 (LTR)","langDirRtl":"右から左 (RTL)","langCode":"言語コード","longDescr":"longdesc属性(長文説明)","cssClass":"スタイルシートクラス","advisoryTitle":"Title属性","cssStyle":"スタイルシート","ok":"OK","cancel":"キャンセル","close":"閉じる","preview":"プレビュー","resize":"ドラッグしてリサイズ","generalTab":"全般","advancedTab":"高度な設定","validateNumberFailed":"値が数ではありません","confirmNewPage":"変更内容を保存せず、 新しいページを開いてもよろしいでしょうか?","confirmCancel":"オプション設定を変更しました。ダイアログを閉じてもよろしいでしょうか?","options":"オプション","target":"ターゲット","targetNew":"新しいウインドウ (_blank)","targetTop":"最上部ウィンドウ (_top)","targetSelf":"同じウィンドウ (_self)","targetParent":"親ウィンドウ (_parent)","langDirLTR":"左から右 (LTR)","langDirRTL":"右から左 (RTL)","styles":"スタイル","cssClasses":"スタイルシートクラス","width":"幅","height":"高さ","align":"行揃え","alignLeft":"左","alignRight":"右","alignCenter":"中央","alignJustify":"両端揃え","alignTop":"上","alignMiddle":"中央","alignBottom":"下","alignNone":"なし","invalidValue":"不正な値です。","invalidHeight":"高さは数値で入力してください。","invalidWidth":"幅は数値で入力してください。","invalidCssLength":"入力された \"%1\" 項目の値は、CSSの大きさ(px, %, in, cm, mm, em, ex, pt, または pc)が正しいものである/ないに関わらず、正の値である必要があります。","invalidHtmlLength":"入力された \"%1\" 項目の値は、HTMLの大きさ(px または %)が正しいものである/ないに関わらず、正の値である必要があります。","invalidInlineStyle":"入力されたインラインスタイルの値は、\"名前 : 値\" のフォーマットのセットで、複数の場合はセミコロンで区切られている形式である必要があります。","cssLengthTooltip":"ピクセル数もしくはCSSにセットできる数値を入力してください。(px,%,in,cm,mm,em,ex,pt,or pc)","unavailable":"%1<span class=\"cke_accessibility\">, 利用不可能</span>"},"basicstyles":{"bold":"太字","italic":"斜体","strike":"打ち消し線","subscript":"下付き","superscript":"上付き","underline":"下線"},"clipboard":{"copy":"コピー","copyError":"ブラウザーのセキュリティ設定によりエディタのコピー操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+C)を使用してください。","cut":"切り取り","cutError":"ブラウザーのセキュリティ設定によりエディタの切り取り操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+X)を使用してください。","paste":"貼り付け","pasteArea":"貼り付け場所","pasteMsg":"キーボード(<STRONG>Ctrl/Cmd+V</STRONG>)を使用して、次の入力エリア内で貼り付けて、<STRONG>OK</STRONG>を押してください。","securityMsg":"ブラウザのセキュリティ設定により、エディタはクリップボードデータに直接アクセスすることができません。このウィンドウは貼り付け操作を行う度に表示されます。","title":"貼り付け"},"button":{"selectedLabel":"%1 (選択中)"},"colorbutton":{"auto":"自動","bgColorTitle":"背景色","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"その他の色...","panelTitle":"色","textColorTitle":"文字色"},"colordialog":{"clear":"クリア","highlight":"ハイライト","options":"カラーオプション","selected":"選択された色","title":"色選択"},"elementspath":{"eleLabel":"要素パス","eleTitle":"%1 要素"},"font":{"fontSize":{"label":"サイズ","voiceLabel":"フォントサイズ","panelTitle":"フォントサイズ"},"label":"フォント","panelTitle":"フォント","voiceLabel":"フォント"},"format":{"label":"書式","panelTitle":"段落の書式","tag_address":"アドレス","tag_div":"標準 (DIV)","tag_h1":"見出し 1","tag_h2":"見出し 2","tag_h3":"見出し 3","tag_h4":"見出し 4","tag_h5":"見出し 5","tag_h6":"見出し 6","tag_p":"標準","tag_pre":"書式付き"},"horizontalrule":{"toolbar":"水平線"},"indent":{"indent":"インデント","outdent":"インデント解除"},"fakeobjects":{"anchor":"アンカー","flash":"Flash Animation","hiddenfield":"不可視フィールド","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"アクセスキー","advanced":"高度な設定","advisoryContentType":"Content Type属性","advisoryTitle":"Title属性","anchor":{"toolbar":"アンカー挿入/編集","menu":"アンカーの編集","title":"アンカーのプロパティ","name":"アンカー名","errorName":"アンカー名を入力してください。","remove":"アンカーを削除"},"anchorId":"エレメントID","anchorName":"アンカー名","charset":"リンク先のcharset","cssClasses":"スタイルシートクラス","emailAddress":"E-Mail アドレス","emailBody":"本文","emailSubject":"件名","id":"Id","info":"ハイパーリンク情報","langCode":"言語コード","langDir":"文字表記の方向","langDirLTR":"左から右 (LTR)","langDirRTL":"右から左 (RTL)","menu":"リンクを編集","name":"Name属性","noAnchors":"(このドキュメント内にアンカーはありません)","noEmail":"メールアドレスを入力してください。","noUrl":"リンクURLを入力してください。","other":"<その他の>","popupDependent":"開いたウィンドウに連動して閉じる (Netscape)","popupFeatures":"ポップアップウィンドウ特徴","popupFullScreen":"全画面モード(IE)","popupLeft":"左端からの座標で指定","popupLocationBar":"ロケーションバー","popupMenuBar":"メニューバー","popupResizable":"サイズ可変","popupScrollBars":"スクロールバー","popupStatusBar":"ステータスバー","popupToolbar":"ツールバー","popupTop":"上端からの座標で指定","rel":"関連リンク","selectAnchor":"アンカーを選択","styles":"スタイルシート","tabIndex":"タブインデックス","target":"ターゲット","targetFrame":"<フレーム>","targetFrameName":"ターゲットのフレーム名","targetPopup":"<ポップアップウィンドウ>","targetPopupName":"ポップアップウィンドウ名","title":"ハイパーリンク","toAnchor":"ページ内のアンカー","toEmail":"E-Mail","toUrl":"URL","toolbar":"リンク挿入/編集","type":"リンクタイプ","unlink":"リンクを削除","upload":"アップロード"},"list":{"bulletedlist":"番号無しリスト","numberedlist":"番号付きリスト"},"magicline":{"title":"ここに段落を挿入"},"maximize":{"maximize":"最大化","minimize":"最小化"},"pastefromword":{"confirmCleanup":"貼り付けを行うテキストはワード文章からコピーされようとしています。貼り付ける前にクリーニングを行いますか?","error":"内部エラーにより貼り付けたデータをクリアできませんでした","title":"ワード文章から貼り付け","toolbar":"ワード文章から貼り付け"},"pastetext":{"button":"プレーンテキストとして貼り付け","title":"プレーンテキストとして貼り付け"},"removeformat":{"toolbar":"書式を解除"},"specialchar":{"options":"特殊文字オプション","title":"特殊文字の選択","toolbar":"特殊文字を挿入"},"stylescombo":{"label":"スタイル","panelTitle":"スタイル","panelTitle1":"ブロックスタイル","panelTitle2":"インラインスタイル","panelTitle3":"オブジェクトスタイル"},"table":{"border":"枠線の幅","caption":"キャプション","cell":{"menu":"セル","insertBefore":"セルを前に挿入","insertAfter":"セルを後に挿入","deleteCell":"セルを削除","merge":"セルを結合","mergeRight":"右に結合","mergeDown":"下に結合","splitHorizontal":"セルを水平方向に分割","splitVertical":"セルを垂直方向に分割","title":"セルのプロパティ","cellType":"セルの種類","rowSpan":"行の結合数","colSpan":"列の結合数","wordWrap":"単語の折り返し","hAlign":"水平方向の配置","vAlign":"垂直方向の配置","alignBaseline":"ベースライン","bgColor":"背景色","borderColor":"ボーダーカラー","data":"テーブルデータ (td)","header":"ヘッダ","yes":"はい","no":"いいえ","invalidWidth":"セル幅は数値で入力してください。","invalidHeight":"セル高さは数値で入力してください。","invalidRowSpan":"縦幅(行数)は数値で入力してください。","invalidColSpan":"横幅(列数)は数値で入力してください。","chooseColor":"色の選択"},"cellPad":"セル内間隔","cellSpace":"セル内余白","column":{"menu":"列","insertBefore":"列を左に挿入","insertAfter":"列を右に挿入","deleteColumn":"列を削除"},"columns":"列数","deleteTable":"表を削除","headers":"ヘッダ (th)","headersBoth":"両方","headersColumn":"最初の列のみ","headersNone":"なし","headersRow":"最初の行のみ","invalidBorder":"枠線の幅は数値で入力してください。","invalidCellPadding":"セル内余白は数値で入力してください。","invalidCellSpacing":"セル間余白は数値で入力してください。","invalidCols":"列数は0より大きな数値を入力してください。","invalidHeight":"高さは数値で入力してください。","invalidRows":"行数は0より大きな数値を入力してください。","invalidWidth":"幅は数値で入力してください。","menu":"表のプロパティ","row":{"menu":"行","insertBefore":"行を上に挿入","insertAfter":"行を下に挿入","deleteRow":"行を削除"},"rows":"行数","summary":"表の概要","title":"表のプロパティ","toolbar":"表","widthPc":"パーセント","widthPx":"ピクセル","widthUnit":"幅の単位"},"contextmenu":{"options":"コンテキストメニューオプション"},"toolbar":{"toolbarCollapse":"ツールバーを閉じる","toolbarExpand":"ツールバーを開く","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"編集ツールバー"},"undo":{"redo":"やり直す","undo":"元に戻す"},"justify":{"block":"両端揃え","center":"中央揃え","left":"左揃え","right":"右揃え"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/ka.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/ka.js new file mode 100755 index 0000000000..626d7ee62d --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/ka.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['ka']={"editor":"ტექსტის რედაქტორი","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"დააჭირეთ ALT 0-ს დახმარების მისაღებად","browseServer":"სერვერზე დათვალიერება","url":"URL","protocol":"პროტოკოლი","upload":"ატვირთვა","uploadSubmit":"სერვერზე გაგზავნა","image":"სურათი","flash":"Flash","form":"ფორმა","checkbox":"მონიშვნის ღილაკი","radio":"ამორჩევის ღილაკი","textField":"ტექსტური ველი","textarea":"ტექსტური არე","hiddenField":"მალული ველი","button":"ღილაკი","select":"არჩევის ველი","imageButton":"სურათიანი ღილაკი","notSet":"<არაფერი>","id":"Id","name":"სახელი","langDir":"ენის მიმართულება","langDirLtr":"მარცხნიდან მარჯვნივ (LTR)","langDirRtl":"მარჯვნიდან მარცხნივ (RTL)","langCode":"ენის კოდი","longDescr":"დიდი აღწერის URL","cssClass":"CSS კლასი","advisoryTitle":"სათაური","cssStyle":"CSS სტილი","ok":"დიახ","cancel":"გაუქმება","close":"დახურვა","preview":"გადახედვა","resize":"გაწიე ზომის შესაცვლელად","generalTab":"ინფორმაცია","advancedTab":"გაფართოებული","validateNumberFailed":"ეს მნიშვნელობა არაა რიცხვი.","confirmNewPage":"ამ დოკუმენტში ყველა ჩაუწერელი ცვლილება დაიკარგება. დარწმუნებული ხართ რომ ახალი გვერდის ჩატვირთვა გინდათ?","confirmCancel":"ზოგიერთი პარამეტრი შეცვლილია, დარწმუნებულილ ხართ რომ ფანჯრის დახურვა გსურთ?","options":"პარამეტრები","target":"გახსნის ადგილი","targetNew":"ახალი ფანჯარა (_blank)","targetTop":"ზედა ფანჯარა (_top)","targetSelf":"იგივე ფანჯარა (_self)","targetParent":"მშობელი ფანჯარა (_parent)","langDirLTR":"მარცხნიდან მარჯვნივ (LTR)","langDirRTL":"მარჯვნიდან მარცხნივ (RTL)","styles":"სტილი","cssClasses":"CSS კლასი","width":"სიგანე","height":"სიმაღლე","align":"სწორება","alignLeft":"მარცხენა","alignRight":"მარჯვენა","alignCenter":"შუა","alignJustify":"両端揃え","alignTop":"ზემოთა","alignMiddle":"შუა","alignBottom":"ქვემოთა","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidWidth":"სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, მიუწვდომელია</span>"},"basicstyles":{"bold":"მსხვილი","italic":"დახრილი","strike":"გადახაზული","subscript":"ინდექსი","superscript":"ხარისხი","underline":"გახაზული"},"clipboard":{"copy":"ასლი","copyError":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ასლის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+C).","cut":"ამოჭრა","cutError":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ამოჭრის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+X).","paste":"ჩასმა","pasteArea":"ჩასმის არე","pasteMsg":"ჩასვით ამ არის შიგნით კლავიატურის გამოყენებით (<strong>Ctrl/Cmd+V</strong>) და დააჭირეთ OK-ს","securityMsg":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა clipboard-ის მონაცემების წვდომის უფლებას. კიდევ უნდა ჩასვათ ტექსტი ამ ფანჯარაში.","title":"ჩასმა"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"ავტომატური","bgColorTitle":"ფონის ფერი","colors":{"000":"შავი","800000":"მუქი შინდისფერი","8B4513":"ყავისფერი","2F4F4F":"მოლურჯო ნაცრისფერი","008080":"ჩამქრალი ლურჯი","000080":"მუქი ლურჯი","4B0082":"იასამნისფერი","696969":"მუქი ნაცრისფერი","B22222":"აგურისფერი","A52A2A":"მუქი ყავისფერი","DAA520":"მოყვითალო","006400":"მუქი მწვანე","40E0D0":"ცისფერი","0000CD":"ზომიერად ლურჯი","800080":"იისფერი","808080":"ნაცრისფერი","F00":"წითელი","FF8C00":"მუქი სტაფილოსფერი","FFD700":"ოქროსფერი","008000":"მწვანე","0FF":"ღია ცისფერი","00F":"ლურჯი","EE82EE":"იისფერი","A9A9A9":"ბაცი ნაცრისფერი","FFA07A":"ჩამქრალი ვარდისფერი","FFA500":"სტაფილოსფერი","FFFF00":"ყვითელი","00FF00":"ლურჯი","AFEEEE":"ცისფერი","ADD8E6":"ღია ლურჯი","DDA0DD":"ღია იისფერი","D3D3D3":"ღია ნაცრისფერი","FFF0F5":"ღია ვარდისფერი","FAEBD7":"ღია ყავისფერი","FFFFE0":"ნათელი ყვითელი","F0FFF0":"ღია მწვანე","F0FFFF":"ღია ცისფერი 2","F0F8FF":"ღია ცისფერი 3","E6E6FA":"ღია იისფერი 2","FFF":"თეთრი"},"more":"მეტი ფერი...","panelTitle":"ფერები","textColorTitle":"ტექსტის ფერი"},"colordialog":{"clear":"გასუფთავება","highlight":"ჩვენება","options":"ფერის პარამეტრები","selected":"არჩეული ფერი","title":"ფერის შეცვლა"},"elementspath":{"eleLabel":"ელემეტის გზა","eleTitle":"%1 ელემენტი"},"font":{"fontSize":{"label":"ზომა","voiceLabel":"ტექსტის ზომა","panelTitle":"ტექსტის ზომა"},"label":"ფონტი","panelTitle":"ფონტის სახელი","voiceLabel":"ფონტი"},"format":{"label":"ფიორმატირება","panelTitle":"ფორმატირება","tag_address":"მისამართი","tag_div":"ჩვეულებრივი (DIV)","tag_h1":"სათაური 1","tag_h2":"სათაური 2","tag_h3":"სათაური 3","tag_h4":"სათაური 4","tag_h5":"სათაური 5","tag_h6":"სათაური 6","tag_p":"ჩვეულებრივი","tag_pre":"ფორმატირებული"},"horizontalrule":{"toolbar":"ჰორიზონტალური ხაზის ჩასმა"},"indent":{"indent":"მეტად შეწევა","outdent":"ნაკლებად შეწევა"},"fakeobjects":{"anchor":"ღუზა","flash":"Flash ანიმაცია","hiddenfield":"მალული ველი","iframe":"IFrame","unknown":"უცნობი ობიექტი"},"link":{"acccessKey":"წვდომის ღილაკი","advanced":"დაწვრილებით","advisoryContentType":"შიგთავსის ტიპი","advisoryTitle":"სათაური","anchor":{"toolbar":"ღუზა","menu":"ღუზის რედაქტირება","title":"ღუზის პარამეტრები","name":"ღუზუს სახელი","errorName":"აკრიფეთ ღუზის სახელი","remove":"Remove Anchor"},"anchorId":"ელემენტის Id-თ","anchorName":"ღუზის სახელით","charset":"კოდირება","cssClasses":"CSS კლასი","emailAddress":"ელფოსტის მისამართები","emailBody":"წერილის ტექსტი","emailSubject":"წერილის სათაური","id":"Id","info":"ბმულის ინფორმაცია","langCode":"ენის კოდი","langDir":"ენის მიმართულება","langDirLTR":"მარცხნიდან მარჯვნივ (LTR)","langDirRTL":"მარჯვნიდან მარცხნივ (RTL)","menu":"ბმულის რედაქტირება","name":"სახელი","noAnchors":"(ამ დოკუმენტში ღუზა არაა)","noEmail":"აკრიფეთ ელფოსტის მისამართი","noUrl":"აკრიფეთ ბმულის URL","other":"<სხვა>","popupDependent":"დამოკიდებული (Netscape)","popupFeatures":"Popup ფანჯრის პარამეტრები","popupFullScreen":"მთელი ეკრანი (IE)","popupLeft":"მარცხენა პოზიცია","popupLocationBar":"ნავიგაციის ზოლი","popupMenuBar":"მენიუს ზოლი","popupResizable":"ცვალებადი ზომით","popupScrollBars":"გადახვევის ზოლები","popupStatusBar":"სტატუსის ზოლი","popupToolbar":"ხელსაწყოთა ზოლი","popupTop":"ზედა პოზიცია","rel":"კავშირი","selectAnchor":"აირჩიეთ ღუზა","styles":"CSS სტილი","tabIndex":"Tab-ის ინდექსი","target":"გახსნის ადგილი","targetFrame":"<frame>","targetFrameName":"Frame-ის სახელი","targetPopup":"<popup ფანჯარა>","targetPopupName":"Popup ფანჯრის სახელი","title":"ბმული","toAnchor":"ბმული ტექსტში ღუზაზე","toEmail":"ელფოსტა","toUrl":"URL","toolbar":"ბმული","type":"ბმულის ტიპი","unlink":"ბმულის მოხსნა","upload":"აქაჩვა"},"list":{"bulletedlist":"ღილიანი სია","numberedlist":"გადანომრილი სია"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"გადიდება","minimize":"დაპატარავება"},"pastefromword":{"confirmCleanup":"ჩასასმელი ტექსტი ვორდიდან გადმოტანილს გავს - გინდათ მისი წინასწარ გაწმენდა?","error":"შიდა შეცდომის გამო ვერ მოხერხდა ტექსტის გაწმენდა","title":"ვორდიდან ჩასმა","toolbar":"ვორდიდან ჩასმა"},"pastetext":{"button":"მხოლოდ ტექსტის ჩასმა","title":"მხოლოდ ტექსტის ჩასმა"},"removeformat":{"toolbar":"ფორმატირების მოხსნა"},"specialchar":{"options":"სპეციალური სიმბოლოს პარამეტრები","title":"სპეციალური სიმბოლოს არჩევა","toolbar":"სპეციალური სიმბოლოს ჩასმა"},"stylescombo":{"label":"სტილები","panelTitle":"ფორმატირების სტილები","panelTitle1":"არის სტილები","panelTitle2":"თანდართული სტილები","panelTitle3":"ობიექტის სტილები"},"table":{"border":"ჩარჩოს ზომა","caption":"სათაური","cell":{"menu":"უჯრა","insertBefore":"უჯრის ჩასმა მანამდე","insertAfter":"უჯრის ჩასმა მერე","deleteCell":"უჯრების წაშლა","merge":"უჯრების შეერთება","mergeRight":"შეერთება მარჯვენასთან","mergeDown":"შეერთება ქვემოთასთან","splitHorizontal":"გაყოფა ჰორიზონტალურად","splitVertical":"გაყოფა ვერტიკალურად","title":"უჯრის პარამეტრები","cellType":"უჯრის ტიპი","rowSpan":"სტრიქონების ოდენობა","colSpan":"სვეტების ოდენობა","wordWrap":"სტრიქონის გადატანა (Word Wrap)","hAlign":"ჰორიზონტალური სწორება","vAlign":"ვერტიკალური სწორება","alignBaseline":"ძირითადი ხაზის გასწვრივ","bgColor":"ფონის ფერი","borderColor":"ჩარჩოს ფერი","data":"მონაცემები","header":"სათაური","yes":"დიახ","no":"არა","invalidWidth":"უჯრის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","invalidHeight":"უჯრის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidRowSpan":"სტრიქონების რაოდენობა მთელი რიცხვი უნდა იყოს.","invalidColSpan":"სვეტების რაოდენობა მთელი რიცხვი უნდა იყოს.","chooseColor":"არჩევა"},"cellPad":"უჯრის კიდე (padding)","cellSpace":"უჯრის სივრცე (spacing)","column":{"menu":"სვეტი","insertBefore":"სვეტის ჩამატება წინ","insertAfter":"სვეტის ჩამატება მერე","deleteColumn":"სვეტების წაშლა"},"columns":"სვეტი","deleteTable":"ცხრილის წაშლა","headers":"სათაურები","headersBoth":"ორივე","headersColumn":"პირველი სვეტი","headersNone":"არაფერი","headersRow":"პირველი სტრიქონი","invalidBorder":"ჩარჩოს ზომა რიცხვით უდნა იყოს წარმოდგენილი.","invalidCellPadding":"უჯრის კიდე (padding) რიცხვით უნდა იყოს წარმოდგენილი.","invalidCellSpacing":"უჯრის სივრცე (spacing) რიცხვით უნდა იყოს წარმოდგენილი.","invalidCols":"სვეტების რაოდენობა დადებითი რიცხვი უნდა იყოს.","invalidHeight":"ცხრილის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidRows":"სტრიქონების რაოდენობა დადებითი რიცხვი უნდა იყოს.","invalidWidth":"ცხრილის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","menu":"ცხრილის პარამეტრები","row":{"menu":"სტრიქონი","insertBefore":"სტრიქონის ჩამატება წინ","insertAfter":"სტრიქონის ჩამატება მერე","deleteRow":"სტრიქონების წაშლა"},"rows":"სტრიქონი","summary":"შეჯამება","title":"ცხრილის პარამეტრები","toolbar":"ცხრილი","widthPc":"პროცენტი","widthPx":"წერტილი","widthUnit":"საზომი ერთეული"},"contextmenu":{"options":"კონტექსტური მენიუს პარამეტრები"},"toolbar":{"toolbarCollapse":"ხელსაწყოთა ზოლის შეწევა","toolbarExpand":"ხელსაწყოთა ზოლის გამოწევა","toolbarGroups":{"document":"დოკუმენტი","clipboard":"Clipboard/გაუქმება","editing":"რედაქტირება","forms":"ფორმები","basicstyles":"ძირითადი სტილები","paragraph":"აბზაცი","links":"ბმულები","insert":"ჩასმა","styles":"სტილები","colors":"ფერები","tools":"ხელსაწყოები"},"toolbars":"Editor toolbars"},"undo":{"redo":"გამეორება","undo":"გაუქმება"},"justify":{"block":"გადასწორება","center":"შუაში სწორება","left":"მარცხნივ სწორება","right":"მარჯვნივ სწორება"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/km.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/km.js new file mode 100755 index 0000000000..06513a5a42 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/km.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['km']={"editor":"ឧបករណ៍​សរសេរ​អត្ថបទ​សម្បូរ​បែប","editorPanel":"ផ្ទាំង​ឧបករណ៍​សរសេរ​អត្ថបទ​សម្បូរ​បែប","common":{"editorHelp":"ចុច ALT 0 សម្រាប់​ជំនួយ","browseServer":"រក​មើល​ក្នុង​ម៉ាស៊ីន​បម្រើ","url":"URL","protocol":"ពិធីការ","upload":"ផ្ទុក​ឡើង","uploadSubmit":"បញ្ជូនទៅកាន់ម៉ាស៊ីន​បម្រើ","image":"រូបភាព","flash":"Flash","form":"បែបបទ","checkbox":"ប្រអប់​ធីក","radio":"ប៊ូតុង​មូល","textField":"វាល​អត្ថបទ","textarea":"Textarea","hiddenField":"វាល​កំបាំង","button":"ប៊ូតុង","select":"វាល​ជម្រើស","imageButton":"ប៊ូតុង​រូបភាព","notSet":"<មិនកំណត់>","id":"Id","name":"ឈ្មោះ","langDir":"ទិសដៅភាសា","langDirLtr":"ពីឆ្វេងទៅស្តាំ (LTR)","langDirRtl":"ពីស្តាំទៅឆ្វេង (RTL)","langCode":"លេខ​កូដ​ភាសា","longDescr":"URL អធិប្បាយ​វែង","cssClass":"Stylesheet Classes","advisoryTitle":"ចំណង​ជើង​ណែនាំ","cssStyle":"រចនាបថ","ok":"ព្រម","cancel":"បោះបង់","close":"បិទ","preview":"មើល​ជា​មុន","resize":"ប្ដូរ​ទំហំ","generalTab":"ទូទៅ","advancedTab":"កម្រិត​ខ្ពស់","validateNumberFailed":"តម្លៃ​នេះ​ពុំ​មែន​ជា​លេខ​ទេ។","confirmNewPage":"រាល់​បន្លាស់​ប្ដូរ​នានា​ដែល​មិន​ទាន់​រក្សា​ទុក​ក្នុង​មាតិកា​នេះ នឹង​ត្រូវ​បាត់​បង់។ តើ​អ្នក​ពិត​ជា​ចង់​ផ្ទុក​ទំព័រ​ថ្មី​មែនទេ?","confirmCancel":"ការ​កំណត់​មួយ​ចំនួន​ត្រូ​វ​បាន​ផ្លាស់​ប្ដូរ។ តើ​អ្នក​ពិត​ជា​ចង់​បិទ​ប្រអប់​នេះ​មែនទេ?","options":"ការ​កំណត់","target":"គោលដៅ","targetNew":"វីនដូ​ថ្មី (_blank)","targetTop":"វីនដូ​លើ​គេ (_top)","targetSelf":"វីនដូ​ដូច​គ្នា (_self)","targetParent":"វីនដូ​មេ (_parent)","langDirLTR":"ពីឆ្វេងទៅស្តាំ(LTR)","langDirRTL":"ពីស្តាំទៅឆ្វេង(RTL)","styles":"រចនាបថ","cssClasses":"Stylesheet Classes","width":"ទទឹង","height":"កំពស់","align":"កំណត់​ទីតាំង","alignLeft":"ខាងឆ្វង","alignRight":"ខាងស្តាំ","alignCenter":"កណ្តាល","alignJustify":"តំរឹមសងខាង","alignTop":"ខាងលើ","alignMiddle":"កណ្តាល","alignBottom":"ខាងក្រោម","alignNone":"គ្មាន","invalidValue":"តម្លៃ​មិន​ត្រឹម​ត្រូវ។","invalidHeight":"តម្លៃ​កំពស់​ត្រូវ​តែ​ជា​លេខ។","invalidWidth":"តម្លៃ​ទទឹង​ត្រូវ​តែ​ជា​លេខ។","invalidCssLength":"តម្លៃ​កំណត់​សម្រាប់​វាល \"%1\" ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន​ ដោយ​ភ្ជាប់ឬ​មិន​ភ្ជាប់​ជាមួយ​នឹង​ឯកតា​រង្វាស់​របស់ CSS (px, %, in, cm, mm, em, ex, pt ឬ pc) ។","invalidHtmlLength":"តម្លៃ​កំណត់​សម្រាប់​វាល \"%1\" ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន ដោយ​ភ្ជាប់​ឬ​មិន​ភ្ជាប់​ជាមួយ​នឹង​ឯកតា​រង្វាស់​របស់ HTML (px ឬ %) ។","invalidInlineStyle":"តម្លៃ​កំណត់​សម្រាប់​រចនាបថ​ក្នុង​តួ ត្រូវ​តែ​មាន​មួយ​ឬ​ធាតុ​ច្រើន​ដោយ​មាន​ទ្រង់ទ្រាយ​ជា \"ឈ្មោះ : តម្លៃ\" ហើយ​ញែក​ចេញ​ពី​គ្នា​ដោយ​ចុច​ក្បៀស។","cssLengthTooltip":"បញ្ចូល​លេខ​សម្រាប់​តម្លៃ​ជា​ភិចសែល ឬ​លេខ​ដែល​មាន​ឯកតា​ត្រឹមត្រូវ​របស់ CSS (px, %, in, cm, mm, em, ex, pt ឬ pc) ។","unavailable":"%1<span class=\"cke_accessibility\">, មិន​មាន</span>"},"basicstyles":{"bold":"ដិត","italic":"ទ្រេត","strike":"គូស​បន្ទាត់​ចំ​កណ្ដាល","subscript":"អក្សរតូចក្រោម","superscript":"អក្សរតូចលើ","underline":"គូស​បន្ទាត់​ក្រោម"},"clipboard":{"copy":"ចម្លង","copyError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+C)។","cut":"កាត់យក","cutError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+X) ។","paste":"បិទ​ភ្ជាប់","pasteArea":"តំបន់​បិទ​ភ្ជាប់","pasteMsg":"សូមចំលងអត្ថបទទៅដាក់ក្នុងប្រអប់ដូចខាងក្រោមដោយប្រើប្រាស់ ឃី ​(<STRONG>Ctrl/Cmd+V</STRONG>) ហើយចុច <STRONG>OK</STRONG> ។","securityMsg":"ព្រោះតែ​ការកំណត់​សុវត្ថិភាព ប្រអប់សរសេរ​មិន​អាចចាប់​យកទិន្នន័យពីក្តារតម្បៀតខ្ទាស់​អ្នក​​ដោយផ្ទាល់​បានទេ។ អ្នក​ត្រូវចំលង​ដាក់វាម្តង​ទៀត ក្នុងផ្ទាំងនេះ។","title":"បិទ​ភ្ជាប់"},"button":{"selectedLabel":"%1 (បាន​ជ្រើស​រើស)"},"colorbutton":{"auto":"ស្វ័យប្រវត្តិ","bgColorTitle":"ពណ៌ផ្ទៃខាងក្រោយ","colors":{"000":"ខ្មៅ","800000":"ត្នោត​ចាស់","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"ខៀវ​ចាស់","4B0082":"ធ្លះ","696969":"ប្រផេះ​ក្រាស់","B22222":"Fire Brick","A52A2A":"ត្នោត","DAA520":"Golden Rod","006400":"បៃតង​ចាស់","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"ប្រផេះ","F00":"ក្រហម","FF8C00":"ទឹក​ក្រូច​ចាស់","FFD700":"មាស","008000":"បៃតង","0FF":"Cyan","00F":"ខៀវ","EE82EE":"ស្វាយ","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"ទឹក​ក្រូច","FFFF00":"លឿង","00FF00":"ក្រូច​ឆ្មារ","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"លឿង​ស្ដើង","F0FFF0":"Honeydew","F0FFFF":"ផ្ទៃមេឃ","F0F8FF":"Alice Blue","E6E6FA":"ឡាវិនដឺ","FFF":"ស"},"more":"ពណ៌​ផ្សេង​ទៀត..","panelTitle":"ពណ៌","textColorTitle":"ពណ៌អក្សរ"},"colordialog":{"clear":"សម្អាត","highlight":"បន្លិច​ពណ៌","options":"ជម្រើស​ពណ៌","selected":"ពណ៌​ដែល​បាន​រើស","title":"រើស​ពណ៌"},"elementspath":{"eleLabel":"ទីតាំង​ធាតុ","eleTitle":"ធាតុ %1"},"font":{"fontSize":{"label":"ទំហំ","voiceLabel":"ទំហំ​អក្សរ","panelTitle":"ទំហំ​អក្សរ"},"label":"ពុម្ព​អក្សរ","panelTitle":"ឈ្មោះ​ពុម្ព​អក្សរ","voiceLabel":"ពុម្ព​អក្សរ"},"format":{"label":"ទម្រង់","panelTitle":"ទម្រង់​កថាខណ្ឌ","tag_address":"អាសយដ្ឋាន","tag_div":"ធម្មតា (DIV)","tag_h1":"ចំណង​ជើង 1","tag_h2":"ចំណង​ជើង 2","tag_h3":"ចំណង​ជើង 3","tag_h4":"ចំណង​ជើង 4","tag_h5":"ចំណង​ជើង 5","tag_h6":"ចំណង​ជើង 6","tag_p":"ធម្មតា","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"បន្ថែមបន្ទាត់ផ្តេក"},"indent":{"indent":"បន្ថែមការចូលបន្ទាត់","outdent":"បន្ថយការចូលបន្ទាត់"},"fakeobjects":{"anchor":"យុថ្កា","flash":"Flash មាន​ចលនា","hiddenfield":"វាល​កំបាំង","iframe":"IFrame","unknown":"វត្ថុ​មិន​ស្គាល់"},"link":{"acccessKey":"សោរ​ចូល","advanced":"កម្រិត​ខ្ពស់","advisoryContentType":"ប្រភេទអត្ថបទ​ប្រឹក្សា","advisoryTitle":"ចំណងជើង​ប្រឹក្សា","anchor":{"toolbar":"យុថ្កា","menu":"កែ​យុថ្កា","title":"លក្ខណៈ​យុថ្កា","name":"ឈ្មោះ​យុថ្កា","errorName":"សូម​បញ្ចូល​ឈ្មោះ​យុថ្កា","remove":"ដក​យុថ្កា​ចេញ"},"anchorId":"តាម ID ធាតុ","anchorName":"តាម​ឈ្មោះ​យុថ្កា","charset":"លេខកូតអក្សររបស់ឈ្នាប់","cssClasses":"Stylesheet Classes","emailAddress":"អាសយដ្ឋាន​អ៊ីមែល","emailBody":"តួ​អត្ថបទ","emailSubject":"ប្រធានបទ​សារ","id":"Id","info":"ព័ត៌មាន​ពី​តំណ","langCode":"កូដ​ភាសា","langDir":"ទិសដៅភាសា","langDirLTR":"ពីឆ្វេងទៅស្តាំ(LTR)","langDirRTL":"ពីស្តាំទៅឆ្វេង(RTL)","menu":"កែ​តំណ","name":"ឈ្មោះ","noAnchors":"(មិន​មាន​យុថ្កា​នៅ​ក្នុង​ឯកសារ​អត្ថថបទ​ទេ)","noEmail":"សូម​បញ្ចូល​អាសយដ្ឋាន​អ៊ីមែល","noUrl":"សូម​បញ្ចូល​តំណ URL","other":"<ផ្សេង​ទៀត>","popupDependent":"Dependent (Netscape)","popupFeatures":"មុខ​ងារ​ផុស​ផ្ទាំង​វីនដូ​ឡើង","popupFullScreen":"ពេញ​អេក្រង់ (IE)","popupLeft":"ទីតាំងខាងឆ្វេង","popupLocationBar":"របារ​ទីតាំង","popupMenuBar":"របារ​ម៉ឺនុយ","popupResizable":"អាច​ប្ដូរ​ទំហំ","popupScrollBars":"របារ​រំកិល","popupStatusBar":"របារ​ស្ថានភាព","popupToolbar":"របារ​ឧបករណ៍","popupTop":"ទីតាំង​កំពូល","rel":"សម្ពន្ធ​ភាព","selectAnchor":"រើស​យក​យុថ្កា​មួយ","styles":"ស្ទីល","tabIndex":"លេខ Tab","target":"គោលដៅ","targetFrame":"<ស៊ុម>","targetFrameName":"ឈ្មោះ​ស៊ុម​ជា​គោល​ដៅ","targetPopup":"<វីនដូ​ផុស​ឡើង>","targetPopupName":"ឈ្មោះ​វីនដូត​ផុស​ឡើង","title":"តំណ","toAnchor":"ត​ភ្ជាប់​ទៅ​យុថ្កា​ក្នុង​អត្ថបទ","toEmail":"អ៊ីមែល","toUrl":"URL","toolbar":"តំណ","type":"ប្រភេទ​តំណ","unlink":"ផ្ដាច់​តំណ","upload":"ផ្ទុក​ឡើង"},"list":{"bulletedlist":"បញ្ចូល / លុប​បញ្ជី​ជា​ចំណុច​មូល","numberedlist":"បញ្ចូល / លុប​បញ្ជី​ជា​លេខ"},"magicline":{"title":"បញ្ចូល​កថាខណ្ឌ​នៅ​ទីនេះ"},"maximize":{"maximize":"ពង្រីក​អតិបរមា","minimize":"បង្រួម​អប្បបរមា"},"pastefromword":{"confirmCleanup":"អត្ថបទ​ដែល​អ្នក​ចង់​បិទ​ភ្ជាប់​នេះ ទំនង​ដូច​ជា​ចម្លង​មក​ពី Word។ តើ​អ្នក​ចង់​សម្អាត​វា​មុន​បិទ​ភ្ជាប់​ទេ?","error":"ដោយ​សារ​មាន​បញ្ហា​ផ្នែក​ក្នុង​ធ្វើ​ឲ្យ​មិន​អាច​សម្អាត​ទិន្នន័យ​ដែល​បាន​បិទ​ភ្ជាប់","title":"បិទ​ភ្ជាប់​ពី Word","toolbar":"បិទ​ភ្ជាប់​ពី Word"},"pastetext":{"button":"បិទ​ភ្ជាប់​ជា​អត្ថបទ​ធម្មតា","title":"បិទ​ភ្ជាប់​ជា​អត្ថបទ​ធម្មតា"},"removeformat":{"toolbar":"ជម្រះ​ទ្រង់​ទ្រាយ"},"specialchar":{"options":"ជម្រើស​តួ​អក្សរ​ពិសេស","title":"រើស​តួអក្សរ​ពិសេស","toolbar":"បន្ថែមអក្សរពិសេស"},"stylescombo":{"label":"រចនាបថ","panelTitle":"ទ្រង់ទ្រាយ​រចនាបថ","panelTitle1":"រចនាបថ​ប្លក់","panelTitle2":"រចនាបថ​ក្នុង​ជួរ","panelTitle3":"រចនាបថ​វត្ថុ"},"table":{"border":"ទំហំ​បន្ទាត់​ស៊ុម","caption":"ចំណងជើង","cell":{"menu":"ក្រឡា","insertBefore":"បញ្ចូល​ក្រឡា​ពីមុខ","insertAfter":"បញ្ចូល​ក្រឡា​ពី​ក្រោយ","deleteCell":"លុប​ក្រឡា","merge":"បញ្ចូល​ក្រឡា​ចូល​គ្នា","mergeRight":"បញ្ចូល​គ្នា​ខាង​ស្ដាំ","mergeDown":"បញ្ចូល​គ្នា​ចុះ​ក្រោម","splitHorizontal":"ពុះ​ក្រឡា​ផ្ដេក","splitVertical":"ពុះ​ក្រឡា​បញ្ឈរ","title":"លក្ខណៈ​ក្រឡា","cellType":"ប្រភេទ​ក្រឡា","rowSpan":"ចំនួន​ជួរ​ដេក​លាយ​ចូល​គ្នា","colSpan":"ចំនួន​ជួរ​ឈរ​លាយ​ចូល​គ្នា","wordWrap":"រុំ​ពាក្យ","hAlign":"ការ​តម្រឹម​ផ្ដេក","vAlign":"ការ​តម្រឹម​បញ្ឈរ","alignBaseline":"ខ្សែ​បន្ទាត់​គោល","bgColor":"ពណ៌​ផ្ទៃ​ក្រោយ","borderColor":"ពណ៌​បន្ទាត់​ស៊ុម","data":"ទិន្នន័យ","header":"ក្បាល","yes":"ព្រម","no":"ទេ","invalidWidth":"ទទឹង​ក្រឡា​ត្រូវ​តែ​ជា​លេខ។","invalidHeight":"កម្ពស់​ក្រឡា​ត្រូវ​តែ​ជា​លេខ។","invalidRowSpan":"ចំនួន​ជួរ​ដេក​លាយ​ចូល​គ្នា​ត្រូវ​តែ​ជា​លេខ​ទាំង​អស់។","invalidColSpan":"ចំនួន​ជួរ​ឈរ​លាយ​ចូល​គ្នា​ត្រូវ​តែ​ជា​លេខ​ទាំង​អស់។","chooseColor":"រើស"},"cellPad":"ចន្លោះ​ក្រឡា","cellSpace":"គម្លាត​ក្រឡា","column":{"menu":"ជួរ​ឈរ","insertBefore":"បញ្ចូល​ជួរ​ឈរ​ពីមុខ","insertAfter":"បញ្ចូល​ជួរ​ឈរ​ពី​ក្រោយ","deleteColumn":"លុប​ជួរ​ឈរ"},"columns":"ជួរឈរ","deleteTable":"លុប​តារាង","headers":"ក្បាល","headersBoth":"ទាំង​ពីរ","headersColumn":"ជួរ​ឈរ​ដំបូង","headersNone":"មិន​មាន","headersRow":"ជួរ​ដេក​ដំបូង","invalidBorder":"ទំហំ​បន្ទាត់​ស៊ុម​ត្រូវ​តែ​ជា​លេខ។","invalidCellPadding":"ចន្លោះ​ក្រឡា​ត្រូវ​តែជា​លេខ​វិជ្ជមាន។","invalidCellSpacing":"គម្លាត​ក្រឡា​ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន។","invalidCols":"ចំនួន​ជួរ​ឈរ​ត្រូវ​តែ​ជា​លេខ​ធំ​ជាង 0។","invalidHeight":"កម្ពស់​តារាង​ត្រូវ​តែ​ជា​លេខ","invalidRows":"ចំនួន​ជួរ​ដេក​ត្រូវ​តែ​ជា​លេខ​ធំ​ជាង 0។","invalidWidth":"ទទឹង​តារាង​ត្រូវ​តែ​ជា​លេខ។","menu":"លក្ខណៈ​តារាង","row":{"menu":"ជួរ​ដេក","insertBefore":"បញ្ចូល​ជួរ​ដេក​ពីមុខ","insertAfter":"បញ្ចូល​ជួរ​ដេក​ពី​ក្រោយ","deleteRow":"លុប​ជួរ​ដេក"},"rows":"ជួរ​ដេក","summary":"សេចក្តី​សង្ខេប","title":"លក្ខណៈ​តារាង","toolbar":"តារាង","widthPc":"ភាគរយ","widthPx":"ភីកសែល","widthUnit":"ឯកតា​ទទឹង"},"contextmenu":{"options":"ជម្រើស​ម៉ឺនុយ​បរិបទ"},"toolbar":{"toolbarCollapse":"បង្រួម​របារ​ឧបករណ៍","toolbarExpand":"ពង្រីក​របារ​ឧបករណ៍","toolbarGroups":{"document":"ឯកសារ","clipboard":"Clipboard/មិន​ធ្វើ​វិញ","editing":"ការ​កែ​សម្រួល","forms":"បែបបទ","basicstyles":"រចនាបថ​មូលដ្ឋាន","paragraph":"កថាខណ្ឌ","links":"តំណ","insert":"បញ្ចូល","styles":"រចនាបថ","colors":"ពណ៌","tools":"ឧបករណ៍"},"toolbars":"របារ​ឧបករណ៍​កែ​សម្រួល"},"undo":{"redo":"ធ្វើ​ឡើង​វិញ","undo":"មិន​ធ្វើ​វិញ"},"justify":{"block":"តម្រឹម​ពេញ","center":"កណ្ដាល","left":"តម្រឹម​ឆ្វេង","right":"តម្រឹម​ស្ដាំ"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/ko.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/ko.js new file mode 100755 index 0000000000..f6205ea330 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/ko.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['ko']={"editor":"리치 텍스트 편집기","editorPanel":"리치 텍스트 편집기 패널","common":{"editorHelp":"도움이 필요하면 ALT 0 을 누르세요","browseServer":"서버 보기","url":"URL","protocol":"프로토콜","upload":"업로드","uploadSubmit":"서버로 전송","image":"이미지","flash":"플래시","form":"폼","checkbox":"체크 박스","radio":"라디오 버튼","textField":"한 줄 입력 칸","textarea":"여러 줄 입력 칸","hiddenField":"숨은 입력 칸","button":"버튼","select":"선택 목록","imageButton":"이미지 버튼","notSet":"<설정 안 됨>","id":"ID","name":"이름","langDir":"언어 방향","langDirLtr":"왼쪽에서 오른쪽 (LTR)","langDirRtl":"오른쪽에서 왼쪽 (RTL)","langCode":"언어 코드","longDescr":"웹 주소 설명","cssClass":"스타일 시트 클래스","advisoryTitle":"보조 제목","cssStyle":"스타일","ok":"확인","cancel":"취소","close":"닫기","preview":"미리보기","resize":"크기 조절","generalTab":"일반","advancedTab":"자세히","validateNumberFailed":"이 값은 숫자가 아닙니다.","confirmNewPage":"저장하지 않은 모든 변경사항은 유실됩니다. 정말로 새로운 페이지를 부르겠습니까?","confirmCancel":"일부 옵션이 변경 되었습니다. 정말로 창을 닫겠습니까?","options":"옵션","target":"타겟","targetNew":"새 창 (_blank)","targetTop":"최상위 창 (_top)","targetSelf":"같은 창 (_self)","targetParent":"부모 창 (_parent)","langDirLTR":"왼쪽에서 오른쪽 (LTR)","langDirRTL":"오른쪽에서 왼쪽 (RTL)","styles":"스타일","cssClasses":"스타일 시트 클래스","width":"너비","height":"높이","align":"정렬","alignLeft":"왼쪽","alignRight":"오른쪽","alignCenter":"가운데","alignJustify":"양쪽 맞춤","alignTop":"위","alignMiddle":"중간","alignBottom":"아래","alignNone":"기본","invalidValue":"잘못된 값.","invalidHeight":"높이는 숫자여야 합니다.","invalidWidth":"넓이는 숫자여야 합니다.","invalidCssLength":"\"%1\" 값은 유효한 CSS 측정 단위(px, %, in, cm, mm, em, ex, pt, or pc)를 포함하거나 포함하지 않은 양수 여야 합니다.","invalidHtmlLength":"\"%1\" 값은 유효한 HTML 측정 단위(px or %)를 포함하거나 포함하지 않은 양수여야 합니다.","invalidInlineStyle":"인라인 스타일에 설정된 값은 \"name : value\" 형식을 가진 하나 이상의 투플(tuples)이 세미콜론(;)으로 구분되어 구성되어야 합니다.","cssLengthTooltip":"픽셀 단위의 숫자만 입력하시거나 유효한 CSS 단위(px, %, in, cm, mm, em, ex, pt, or pc)와 함께 숫자를 입력해주세요.","unavailable":"%1<span class=\"cke_accessibility\">, 사용불가</span>"},"basicstyles":{"bold":"굵게","italic":"기울임꼴","strike":"취소선","subscript":"아래 첨자","superscript":"위 첨자","underline":"밑줄"},"clipboard":{"copy":"복사","copyError":"브라우저의 보안설정 때문에 복사할 수 없습니다. 키보드(Ctrl/Cmd+C)를 이용해서 복사하십시오.","cut":"잘라내기","cutError":"브라우저의 보안설정 때문에 잘라내기 기능을 실행할 수 없습니다. 키보드(Ctrl/Cmd+X)를 이용해서 잘라내기 하십시오","paste":"붙여넣기","pasteArea":"붙여넣기 범위","pasteMsg":"키보드(<strong>Ctrl/Cmd+V</strong>)를 이용해서 상자안에 붙여넣고 <strong>확인</strong> 를 누르세요.","securityMsg":"브라우저 보안 설정으로 인해, 클립보드에 직접 접근할 수 없습니다. 이 창에 다시 붙여넣기 하십시오.","title":"붙여넣기"},"button":{"selectedLabel":"%1 (선택됨)"},"colorbutton":{"auto":"기본 색상","bgColorTitle":"배경 색상","colors":{"000":"검정","800000":"밤색","8B4513":"새들 브라운","2F4F4F":"다크 슬레이트 그레이","008080":"틸","000080":"네이비","4B0082":"남색","696969":"짙은 회색","B22222":"벽돌색","A52A2A":"갈색","DAA520":"골든 로드","006400":"암록색","40E0D0":"터코이즈","0000CD":"미디엄 블루","800080":"보라","808080":"회색","F00":"빨강","FF8C00":"짙은 주황","FFD700":"금색","008000":"녹색","0FF":"시안","00F":"파랑","EE82EE":"남보라","A9A9A9":"딤 그레이","FFA07A":"라이트 새먼","FFA500":"주황","FFFF00":"노랑","00FF00":"라임","AFEEEE":"패일 터코이즈","ADD8E6":"연한 파랑","DDA0DD":"자두","D3D3D3":"연한 회색","FFF0F5":"라벤더 블러쉬","FAEBD7":"앤틱 화이트","FFFFE0":"연한 노랑","F0FFF0":"허니듀","F0FFFF":"하늘색","F0F8FF":"앨리스 블루","E6E6FA":"라벤더","FFF":"흰색"},"more":"색상 선택...","panelTitle":"색상","textColorTitle":"글자 색상"},"colordialog":{"clear":"비우기","highlight":"강조","options":"색상 옵션","selected":"선택된 색상","title":"색상 선택"},"elementspath":{"eleLabel":"요소 경로","eleTitle":"%1 요소"},"font":{"fontSize":{"label":"크기","voiceLabel":"글자 크기","panelTitle":"글자 크기"},"label":"글꼴","panelTitle":"글꼴","voiceLabel":"글꼴"},"format":{"label":"문단","panelTitle":"문단 형식","tag_address":"글쓴이","tag_div":"기본 (DIV)","tag_h1":"제목 1","tag_h2":"제목 2","tag_h3":"제목 3","tag_h4":"제목 4","tag_h5":"제목 5","tag_h6":"제목 6","tag_p":"본문","tag_pre":"정형 문단"},"horizontalrule":{"toolbar":"가로 줄 삽입"},"indent":{"indent":"들여쓰기","outdent":"내어쓰기"},"fakeobjects":{"anchor":"책갈피","flash":"플래시 애니메이션","hiddenfield":"숨은 입력 칸","iframe":"아이프레임","unknown":"알 수 없는 객체"},"link":{"acccessKey":"액세스 키","advanced":"고급","advisoryContentType":"보조 콘텐츠 유형","advisoryTitle":"보조 제목","anchor":{"toolbar":"책갈피","menu":"책갈피 편집","title":"책갈피 속성","name":"책갈피 이름","errorName":"책갈피 이름을 입력하십시오","remove":"책갈피 제거"},"anchorId":"책갈피 ID","anchorName":"책갈피 이름","charset":"링크된 자료 문자열 인코딩","cssClasses":"스타일시트 클래스","emailAddress":"이메일 주소","emailBody":"메시지 내용","emailSubject":"메시지 제목","id":"ID","info":"링크 정보","langCode":"언어 코드","langDir":"언어 방향","langDirLTR":"왼쪽에서 오른쪽 (LTR)","langDirRTL":"오른쪽에서 왼쪽 (RTL)","menu":"링크 수정","name":"이름","noAnchors":"(문서에 책갈피가 없습니다.)","noEmail":"이메일 주소를 입력하십시오","noUrl":"링크 주소(URL)를 입력하십시오","other":"<기타>","popupDependent":"Dependent (Netscape)","popupFeatures":"팝업창 속성","popupFullScreen":"전체화면 (IE)","popupLeft":"왼쪽 위치","popupLocationBar":"주소 표시줄","popupMenuBar":"메뉴 바","popupResizable":"크기 조절 가능","popupScrollBars":"스크롤 바","popupStatusBar":"상태 바","popupToolbar":"툴바","popupTop":"위쪽 위치","rel":"관계","selectAnchor":"책갈피 선택","styles":"스타일","tabIndex":"탭 순서","target":"타겟","targetFrame":"<프레임>","targetFrameName":"타겟 프레임 이름","targetPopup":"<팝업 창>","targetPopupName":"팝업 창 이름","title":"링크","toAnchor":"책갈피","toEmail":"이메일","toUrl":"주소(URL)","toolbar":"링크 삽입/변경","type":"링크 종류","unlink":"링크 지우기","upload":"업로드"},"list":{"bulletedlist":"순서 없는 목록","numberedlist":"순서 있는 목록"},"magicline":{"title":"여기에 단락 삽입"},"maximize":{"maximize":"최대화","minimize":"최소화"},"pastefromword":{"confirmCleanup":"붙여 넣을 내용은 MS Word에서 복사 한 것입니다. 붙여 넣기 전에 정리 하시겠습니까?","error":"내부 오류로 붙여 넣은 데이터를 정리 할 수 없습니다.","title":"MS Word 에서 붙여넣기","toolbar":"MS Word 에서 붙여넣기"},"pastetext":{"button":"텍스트로 붙여넣기","title":"텍스트로 붙여넣기"},"removeformat":{"toolbar":"형식 지우기"},"specialchar":{"options":"특수문자 옵션","title":"특수문자 선택","toolbar":"특수문자 삽입"},"stylescombo":{"label":"스타일","panelTitle":"전체 구성 스타일","panelTitle1":"블록 스타일","panelTitle2":"인라인 스타일","panelTitle3":"객체 스타일"},"table":{"border":"테두리 두께","caption":"주석","cell":{"menu":"셀","insertBefore":"앞에 셀 삽입","insertAfter":"뒤에 셀 삽입","deleteCell":"셀 삭제","merge":"셀 합치기","mergeRight":"오른쪽 합치기","mergeDown":"왼쪽 합치기","splitHorizontal":"수평 나누기","splitVertical":"수직 나누기","title":"셀 속성","cellType":"셀 종류","rowSpan":"행 간격","colSpan":"열 간격","wordWrap":"줄 끝 단어 줄 바꿈","hAlign":"가로 정렬","vAlign":"세로 정렬","alignBaseline":"영문 글꼴 기준선","bgColor":"배경색","borderColor":"테두리 색","data":"자료","header":"머릿칸","yes":"예","no":"아니오","invalidWidth":"셀 너비는 숫자여야 합니다.","invalidHeight":"셀 높이는 숫자여야 합니다.","invalidRowSpan":"행 간격은 정수여야 합니다.","invalidColSpan":"열 간격은 정수여야 합니다.","chooseColor":"선택"},"cellPad":"셀 여백","cellSpace":"셀 간격","column":{"menu":"열","insertBefore":"왼쪽에 열 삽입","insertAfter":"오른쪽에 열 삽입","deleteColumn":"열 삭제"},"columns":"열","deleteTable":"표 삭제","headers":"머릿칸","headersBoth":"모두","headersColumn":"첫 열","headersNone":"없음","headersRow":"첫 행","invalidBorder":"테두리 두께는 숫자여야 합니다.","invalidCellPadding":"셀 여백은 0 이상이어야 합니다.","invalidCellSpacing":"셀 간격은 0 이상이어야 합니다.","invalidCols":"열 번호는 0보다 커야 합니다.","invalidHeight":"표 높이는 숫자여야 합니다.","invalidRows":"행 번호는 0보다 커야 합니다.","invalidWidth":"표의 너비는 숫자여야 합니다.","menu":"표 속성","row":{"menu":"행","insertBefore":"위에 행 삽입","insertAfter":"아래에 행 삽입","deleteRow":"행 삭제"},"rows":"행","summary":"요약","title":"표 속성","toolbar":"표","widthPc":"백분율","widthPx":"픽셀","widthUnit":"너비 단위"},"contextmenu":{"options":"컨텍스트 메뉴 옵션"},"toolbar":{"toolbarCollapse":"툴바 줄이기","toolbarExpand":"툴바 확장","toolbarGroups":{"document":"문서","clipboard":"클립보드/실행 취소","editing":"편집","forms":"폼","basicstyles":"기본 스타일","paragraph":"단락","links":"링크","insert":"삽입","styles":"스타일","colors":"색상","tools":"도구"},"toolbars":"에디터 툴바"},"undo":{"redo":"다시 실행","undo":"실행 취소"},"justify":{"block":"양쪽 맞춤","center":"가운데 정렬","left":"왼쪽 정렬","right":"오른쪽 정렬"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/ku.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/ku.js new file mode 100755 index 0000000000..b2bdba1e45 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/ku.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['ku']={"editor":"سەرنووسەی دەقی تەواو","editorPanel":"بڕگەی سەرنووسەی دەقی تەواو","common":{"editorHelp":"کلیکی ALT لەگەڵ 0 بکه‌ بۆ یارمەتی","browseServer":"هێنانی ڕاژە","url":"ناونیشانی بەستەر","protocol":"پڕۆتۆکۆڵ","upload":"بارکردن","uploadSubmit":"ناردنی بۆ ڕاژە","image":"وێنە","flash":"فلاش","form":"داڕشتە","checkbox":"خانەی نیشانکردن","radio":"جێگرەوەی دوگمە","textField":"خانەی دەق","textarea":"ڕووبەری دەق","hiddenField":"شاردنەوی خانە","button":"دوگمە","select":"هەڵبژاردەی خانە","imageButton":"دوگمەی وێنە","notSet":"<هیچ دانەدراوە>","id":"ناسنامە","name":"ناو","langDir":"ئاراستەی زمان","langDirLtr":"چەپ بۆ ڕاست (LTR)","langDirRtl":"ڕاست بۆ چەپ (RTL)","langCode":"هێمای زمان","longDescr":"پێناسەی درێژی بەستەر","cssClass":"شێوازی چینی په‌ڕە","advisoryTitle":"ڕاوێژکاری سەردێڕ","cssStyle":"شێواز","ok":"باشە","cancel":"پاشگەزبوونەوە","close":"داخستن","preview":"پێشبینین","resize":"گۆڕینی ئەندازە","generalTab":"گشتی","advancedTab":"پەرەسەندوو","validateNumberFailed":"ئەم نرخە ژمارە نیە، تکایە نرخێکی ژمارە بنووسە.","confirmNewPage":"سەرجەم گۆڕانکاریەکان و پێکهاتەکانی ناووەوە لەدەست دەدەی گەر بێتوو پاشکەوتی نەکەی یەکەم جار، تۆ هەر دڵنیایی لەکردنەوەی پەنجەرەکی نوێ؟","confirmCancel":"هەندێك هەڵبژاردە گۆڕدراوە. تۆ دڵنیایی لە داخستنی ئەم دیالۆگە؟","options":"هەڵبژاردەکان","target":"ئامانج","targetNew":"پەنجەرەیەکی نوێ (_blank)","targetTop":"لووتکەی پەنجەرە (_top)","targetSelf":"لەهەمان پەنجەرە (_self)","targetParent":"پەنجەرەی باوان (_parent)","langDirLTR":"چەپ بۆ ڕاست (LTR)","langDirRTL":"ڕاست بۆ چەپ (RTL)","styles":"شێواز","cssClasses":"شێوازی چینی پەڕە","width":"پانی","height":"درێژی","align":"ڕێککەرەوە","alignLeft":"چەپ","alignRight":"ڕاست","alignCenter":"ناوەڕاست","alignJustify":"هاوستوونی","alignTop":"سەرەوە","alignMiddle":"ناوەند","alignBottom":"ژێرەوە","alignNone":"هیچ","invalidValue":"نرخێکی نادرووست.","invalidHeight":"درێژی دەبێت ژمارە بێت.","invalidWidth":"پانی دەبێت ژمارە بێت.","invalidCssLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست بێت یان بێ ناونیشانی ئامرازی (px, %, in, cm, mm, em, ex, pt, یان pc).","invalidHtmlLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست بێت یان بێ ناونیشانی ئامرازی HTML (px یان %).","invalidInlineStyle":"دانەی نرخی شێوازی ناوهێڵ دەبێت پێکهاتبێت لەیەك یان زیاتری داڕشتە \"ناو : نرخ\", جیاکردنەوەی بە فاریزە و خاڵ","cssLengthTooltip":"ژمارەیەك بنووسه‌ بۆ نرخی piksel یان ئامرازێکی درووستی CSS (px, %, in, cm, mm, em, ex, pt, یان pc).","unavailable":"%1<span class=\"cke_accessibility\">, ئامادە نیە</span>"},"basicstyles":{"bold":"قەڵەو","italic":"لار","strike":"لێدان","subscript":"ژێرنووس","superscript":"سەرنووس","underline":"ژێرهێڵ"},"clipboard":{"copy":"لەبەرگرتنەوە","copyError":"پارێزی وێبگەڕەکەت ڕێگەنادات بەسەرنووسەکە لە لکاندنی دەقی خۆکارارنە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+C).","cut":"بڕین","cutError":"پارێزی وێبگەڕەکەت ڕێگەنادات بە سەرنووسەکە لەبڕینی خۆکارانە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+X).","paste":"لکاندن","pasteArea":"ناوچەی لکاندن","pasteMsg":"تکایە بیلکێنە لەناوەوەی ئەم سنوقە لەڕێی تەختەکلیلەکەت بە بەکارهێنانی کلیلی (<STRONG>Ctrl/Cmd+V</STRONG>) دووای کلیکی باشە بکە.","securityMsg":"بەهۆی شێوەپێدانی پارێزی وێبگەڕەکەت، سەرنووسەکه ناتوانێت دەستبگەیەنێت بەهەڵگیراوەکە ڕاستەوخۆ. بۆیه پێویسته دووباره بیلکێنیت لەم پەنجەرەیه.","title":"لکاندن"},"button":{"selectedLabel":"%1 (هەڵبژێردراو)"},"colorbutton":{"auto":"خۆکار","bgColorTitle":"ڕەنگی پاشبنەما","colors":{"000":"ڕەش","800000":"سۆرو ماڕوونی","8B4513":"ماڕوونی","2F4F4F":"سەوزی تاریك","008080":"سەوز و شین","000080":"شینی تۆخ","4B0082":"مۆری تۆخ","696969":"ڕەساسی تۆخ","B22222":"سۆری تۆخ","A52A2A":"قاوەیی","DAA520":"قاوەیی بریسکەدار","006400":"سەوزی تۆخ","40E0D0":"شینی ناتۆخی بریسکەدار","0000CD":"شینی مامناوەند","800080":"پەمبەیی","808080":"ڕەساسی","F00":"سۆر","FF8C00":"نارەنجی تۆخ","FFD700":"زەرد","008000":"سەوز","0FF":"شینی ئاسمانی","00F":"شین","EE82EE":"پەمەیی","A9A9A9":"ڕەساسی ناتۆخ","FFA07A":"نارەنجی ناتۆخ","FFA500":"نارەنجی","FFFF00":"زەرد","00FF00":"سەوز","AFEEEE":"شینی ناتۆخ","ADD8E6":"شینی زۆر ناتۆخ","DDA0DD":"پەمەیی ناتۆخ","D3D3D3":"ڕەساسی بریسکەدار","FFF0F5":"جەرگی زۆر ناتۆخ","FAEBD7":"جەرگی ناتۆخ","FFFFE0":"سپی ناتۆخ","F0FFF0":"هەنگوینی ناتۆخ","F0FFFF":"شینێکی زۆر ناتۆخ","F0F8FF":"شینێکی ئاسمانی زۆر ناتۆخ","E6E6FA":"شیری","FFF":"سپی"},"more":"ڕەنگی زیاتر...","panelTitle":"ڕەنگەکان","textColorTitle":"ڕەنگی دەق"},"colordialog":{"clear":"پاکیکەوە","highlight":"نیشانکردن","options":"هەڵبژاردەی ڕەنگەکان","selected":"ڕەنگی هەڵبژێردراو","title":"هەڵبژاردنی ڕەنگ"},"elementspath":{"eleLabel":"ڕێڕەوی توخمەکان","eleTitle":"%1 توخم"},"font":{"fontSize":{"label":"گەورەیی","voiceLabel":"گەورەیی فۆنت","panelTitle":"گەورەیی فۆنت"},"label":"فۆنت","panelTitle":"ناوی فۆنت","voiceLabel":"فۆنت"},"format":{"label":"ڕازاندنەوە","panelTitle":"بەشی ڕازاندنەوه","tag_address":"ناونیشان","tag_div":"(DIV)-ی ئاسایی","tag_h1":"سەرنووسەی ١","tag_h2":"سەرنووسەی ٢","tag_h3":"سەرنووسەی ٣","tag_h4":"سەرنووسەی ٤","tag_h5":"سەرنووسەی ٥","tag_h6":"سەرنووسەی ٦","tag_p":"ئاسایی","tag_pre":"شێوازکراو"},"horizontalrule":{"toolbar":"دانانی هێلی ئاسۆیی"},"indent":{"indent":"زیادکردنی بۆشایی","outdent":"کەمکردنەوەی بۆشایی"},"fakeobjects":{"anchor":"لەنگەر","flash":"فلاش","hiddenfield":"شاردنەوەی خانه","iframe":"لەچوارچێوە","unknown":"بەرکارێکی نەناسراو"},"link":{"acccessKey":"کلیلی دەستپێگەیشتن","advanced":"پێشکەوتوو","advisoryContentType":"جۆری ناوەڕۆکی ڕاویژکار","advisoryTitle":"ڕاوێژکاری سەردێڕ","anchor":{"toolbar":"دانان/چاکسازی لەنگەر","menu":"چاکسازی لەنگەر","title":"خاسیەتی لەنگەر","name":"ناوی لەنگەر","errorName":"تکایه ناوی لەنگەر بنووسه","remove":"لابردنی لەنگەر"},"anchorId":"بەپێی ناسنامەی توخم","anchorName":"بەپێی ناوی لەنگەر","charset":"بەستەری سەرچاوەی نووسە","cssClasses":"شێوازی چینی پەڕه","emailAddress":"ناونیشانی ئیمەیل","emailBody":"ناوەڕۆکی نامە","emailSubject":"بابەتی نامە","id":"ناسنامە","info":"زانیاری بەستەر","langCode":"هێمای زمان","langDir":"ئاراستەی زمان","langDirLTR":"چەپ بۆ ڕاست (LTR)","langDirRTL":"ڕاست بۆ چەپ (RTL)","menu":"چاکسازی بەستەر","name":"ناو","noAnchors":"(هیچ جۆرێکی لەنگەر ئامادە نیە لەم پەڕەیه)","noEmail":"تکایە ناونیشانی ئیمەیل بنووسە","noUrl":"تکایە ناونیشانی بەستەر بنووسە","other":"<هیتر>","popupDependent":"پێوەبەستراو (Netscape)","popupFeatures":"خاسیەتی پەنجەرەی سەرهەڵدەر","popupFullScreen":"پڕ بەپڕی شاشە (IE)","popupLeft":"جێگای چەپ","popupLocationBar":"هێڵی ناونیشانی بەستەر","popupMenuBar":"هێڵی لیسته","popupResizable":"توانای گۆڕینی قەباره","popupScrollBars":"هێڵی هاتووچۆپێکردن","popupStatusBar":"هێڵی دۆخ","popupToolbar":"هێڵی تووڵامراز","popupTop":"جێگای سەرەوە","rel":"پەیوەندی","selectAnchor":"هەڵبژاردنی لەنگەرێك","styles":"شێواز","tabIndex":"بازدەری تابی ئیندێکس","target":"ئامانج","targetFrame":"<چووارچێوە>","targetFrameName":"ناوی ئامانجی چووارچێوە","targetPopup":"<پەنجەرەی سەرهەڵدەر>","targetPopupName":"ناوی پەنجەرەی سەرهەڵدەر","title":"بەستەر","toAnchor":"بەستەر بۆ لەنگەر له دەق","toEmail":"ئیمەیل","toUrl":"ناونیشانی بەستەر","toolbar":"دانان/ڕێکخستنی بەستەر","type":"جۆری بەستەر","unlink":"لابردنی بەستەر","upload":"بارکردن"},"list":{"bulletedlist":"دانان/لابردنی خاڵی لیست","numberedlist":"دانان/لابردنی ژمارەی لیست"},"magicline":{"title":"بڕگە لێرە دابنێ"},"maximize":{"maximize":"ئەوپەڕی گەورەیی","minimize":"ئەوپەڕی بچووکی"},"pastefromword":{"confirmCleanup":"ئەم دەقەی بەتەمای بیلکێنی پێدەچێت له word هێنرابێت. دەتەوێت پاکی بکەیوه پێش ئەوەی بیلکێنی؟","error":"هیچ ڕێگەیەك نەبوو لەلکاندنی دەقەکه بەهۆی هەڵەیەکی ناوەخۆیی","title":"لکاندنی لەلایەن Word","toolbar":"لکاندنی لەڕێی Word"},"pastetext":{"button":"لکاندنی وەك دەقی ڕوون","title":"لکاندنی وەك دەقی ڕوون"},"removeformat":{"toolbar":"لابردنی داڕشتەکە"},"specialchar":{"options":"هەڵبژاردەی نووسەی تایبەتی","title":"هەڵبژاردنی نووسەی تایبەتی","toolbar":"دانانی نووسەی تایبەتی"},"stylescombo":{"label":"شێواز","panelTitle":"شێوازی ڕازاندنەوە","panelTitle1":"شێوازی خشت","panelTitle2":"شێوازی ناوهێڵ","panelTitle3":"شێوازی بەرکار"},"table":{"border":"گەورەیی پەراوێز","caption":"سەردێڕ","cell":{"menu":"خانه","insertBefore":"دانانی خانه لەپێش","insertAfter":"دانانی خانه لەپاش","deleteCell":"سڕینەوەی خانه","merge":"تێکەڵکردنی خانە","mergeRight":"تێکەڵکردنی لەگەڵ ڕاست","mergeDown":"تێکەڵکردنی لەگەڵ خوارەوە","splitHorizontal":"دابەشکردنی خانەی ئاسۆیی","splitVertical":"دابەشکردنی خانەی ئەستونی","title":"خاسیەتی خانه","cellType":"جۆری خانه","rowSpan":"ماوەی نێوان ڕیز","colSpan":"بستی ئەستونی","wordWrap":"پێچانەوەی وشە","hAlign":"ڕیزکردنی ئاسۆیی","vAlign":"ڕیزکردنی ئەستونی","alignBaseline":"هێڵەبنەڕەت","bgColor":"ڕەنگی پاشبنەما","borderColor":"ڕەنگی پەراوێز","data":"داتا","header":"سەرپەڕه","yes":"بەڵێ","no":"نەخێر","invalidWidth":"پانی خانه دەبێت بەتەواوی ژماره بێت.","invalidHeight":"درێژی خانه بەتەواوی دەبێت ژمارە بێت.","invalidRowSpan":"ماوەی نێوان ڕیز بەتەواوی دەبێت ژمارە بێت.","invalidColSpan":"ماوەی نێوان ئەستونی بەتەواوی دەبێت ژمارە بێت.","chooseColor":"هەڵبژێرە"},"cellPad":"بۆشایی ناوپۆش","cellSpace":"بۆشایی خانه","column":{"menu":"ئەستون","insertBefore":"دانانی ئەستون لەپێش","insertAfter":"دانانی ئەستوون لەپاش","deleteColumn":"سڕینەوەی ئەستوون"},"columns":"ستوونەکان","deleteTable":"سڕینەوەی خشتە","headers":"سەرپەڕه","headersBoth":"هەردووك","headersColumn":"یەکەم ئەستوون","headersNone":"هیچ","headersRow":"یەکەم ڕیز","invalidBorder":"ژمارەی پەراوێز دەبێت تەنها ژماره بێت.","invalidCellPadding":"ناوپۆشی خانه دەبێت ژمارەکی درووست بێت.","invalidCellSpacing":"بۆشایی خانه دەبێت ژمارەکی درووست بێت.","invalidCols":"ژمارەی ئەستوونی دەبێت گەورەتر بێت لەژمارەی 0.","invalidHeight":"درێژی خشته دهبێت تهنها ژماره بێت.","invalidRows":"ژمارەی ڕیز دەبێت گەورەتر بێت لەژمارەی 0.","invalidWidth":"پانی خشته دەبێت تەنها ژماره بێت.","menu":"خاسیەتی خشتە","row":{"menu":"ڕیز","insertBefore":"دانانی ڕیز لەپێش","insertAfter":"دانانی ڕیز لەپاش","deleteRow":"سڕینەوەی ڕیز"},"rows":"ڕیز","summary":"کورتە","title":"خاسیەتی خشتە","toolbar":"خشتە","widthPc":"لەسەدا","widthPx":"وێنەخاڵ - پیکسل","widthUnit":"پانی یەکە"},"contextmenu":{"options":"هەڵبژاردەی لیستەی کلیکی دەستی ڕاست"},"toolbar":{"toolbarCollapse":"شاردنەوی هێڵی تووڵامراز","toolbarExpand":"نیشاندانی هێڵی تووڵامراز","toolbarGroups":{"document":"پەڕه","clipboard":"بڕین/پووچکردنەوە","editing":"چاکسازی","forms":"داڕشتە","basicstyles":"شێوازی بنچینەیی","paragraph":"بڕگە","links":"بەستەر","insert":"خستنە ناو","styles":"شێواز","colors":"ڕەنگەکان","tools":"ئامرازەکان"},"toolbars":"تووڵامرازی دەسکاریکەر"},"undo":{"redo":"هەڵگەڕاندنەوە","undo":"پووچکردنەوە"},"justify":{"block":"هاوستوونی","center":"ناوەڕاست","left":"بەهێڵ کردنی چەپ","right":"بەهێڵ کردنی ڕاست"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/lt.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/lt.js new file mode 100755 index 0000000000..ad76bd2ea1 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/lt.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['lt']={"editor":"Pilnas redaktorius","editorPanel":"Pilno redagtoriaus skydelis","common":{"editorHelp":"Spauskite ALT 0 dėl pagalbos","browseServer":"Naršyti po serverį","url":"URL","protocol":"Protokolas","upload":"Siųsti","uploadSubmit":"Siųsti į serverį","image":"Vaizdas","flash":"Flash","form":"Forma","checkbox":"Žymimasis langelis","radio":"Žymimoji akutė","textField":"Teksto laukas","textarea":"Teksto sritis","hiddenField":"Nerodomas laukas","button":"Mygtukas","select":"Atrankos laukas","imageButton":"Vaizdinis mygtukas","notSet":"<nėra nustatyta>","id":"Id","name":"Vardas","langDir":"Teksto kryptis","langDirLtr":"Iš kairės į dešinę (LTR)","langDirRtl":"Iš dešinės į kairę (RTL)","langCode":"Kalbos kodas","longDescr":"Ilgas aprašymas URL","cssClass":"Stilių lentelės klasės","advisoryTitle":"Konsultacinė antraštė","cssStyle":"Stilius","ok":"OK","cancel":"Nutraukti","close":"Uždaryti","preview":"Peržiūrėti","resize":"Pavilkite, kad pakeistumėte dydį","generalTab":"Bendros savybės","advancedTab":"Papildomas","validateNumberFailed":"Ši reikšmė nėra skaičius.","confirmNewPage":"Visas neišsaugotas turinys bus prarastas. Ar tikrai norite įkrauti naują puslapį?","confirmCancel":"Kai kurie parametrai pasikeitė. Ar tikrai norite užverti langą?","options":"Parametrai","target":"Tikslinė nuoroda","targetNew":"Naujas langas (_blank)","targetTop":"Viršutinis langas (_top)","targetSelf":"Esamas langas (_self)","targetParent":"Paskutinis langas (_parent)","langDirLTR":"Iš kairės į dešinę (LTR)","langDirRTL":"Iš dešinės į kairę (RTL)","styles":"Stilius","cssClasses":"Stilių klasės","width":"Plotis","height":"Aukštis","align":"Lygiuoti","alignLeft":"Kairę","alignRight":"Dešinę","alignCenter":"Centrą","alignJustify":"Lygiuoti abi puses","alignTop":"Viršūnę","alignMiddle":"Vidurį","alignBottom":"Apačią","alignNone":"Niekas","invalidValue":"Neteisinga reikšmė.","invalidHeight":"Aukštis turi būti nurodytas skaičiais.","invalidWidth":"Plotis turi būti nurodytas skaičiais.","invalidCssLength":"Reikšmė nurodyta \"%1\" laukui, turi būti teigiamas skaičius su arba be tinkamo CSS matavimo vieneto (px, %, in, cm, mm, em, ex, pt arba pc).","invalidHtmlLength":"Reikšmė nurodyta \"%1\" laukui, turi būti teigiamas skaičius su arba be tinkamo HTML matavimo vieneto (px arba %).","invalidInlineStyle":"Reikšmė nurodyta vidiniame stiliuje turi būti sudaryta iš vieno šių reikšmių \"vardas : reikšmė\", atskirta kabliataškiais.","cssLengthTooltip":"Įveskite reikšmę pikseliais arba skaičiais su tinkamu CSS vienetu (px, %, in, cm, mm, em, ex, pt arba pc).","unavailable":"%1<span class=\"cke_accessibility\">, netinkamas</span>"},"basicstyles":{"bold":"Pusjuodis","italic":"Kursyvas","strike":"Perbrauktas","subscript":"Apatinis indeksas","superscript":"Viršutinis indeksas","underline":"Pabrauktas"},"clipboard":{"copy":"Kopijuoti","copyError":"Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+C).","cut":"Iškirpti","cutError":"Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+X).","paste":"Įdėti","pasteArea":"Įkelti dalį","pasteMsg":"Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (<STRONG>Ctrl/Cmd+V</STRONG>) ir paspauskite mygtuką <STRONG>OK</STRONG>.","securityMsg":"Dėl jūsų naršyklės saugumo nustatymų, redaktorius negali tiesiogiai pasiekti laikinosios atminties. Jums reikia nukopijuoti dar kartą į šį langą.","title":"Įdėti"},"button":{"selectedLabel":"%1 (Pasirinkta)"},"colorbutton":{"auto":"Automatinis","bgColorTitle":"Fono spalva","colors":{"000":"Juoda","800000":"Kaštoninė","8B4513":"Tamsiai ruda","2F4F4F":"Pilka tamsaus šiferio","008080":"Teal","000080":"Karinis","4B0082":"Indigo","696969":"Tamsiai pilka","B22222":"Ugnies","A52A2A":"Ruda","DAA520":"Aukso","006400":"Tamsiai žalia","40E0D0":"Turquoise","0000CD":"Vidutinė mėlyna","800080":"Violetinė","808080":"Pilka","F00":"Raudona","FF8C00":"Tamsiai oranžinė","FFD700":"Auksinė","008000":"Žalia","0FF":"Žydra","00F":"Mėlyna","EE82EE":"Violetinė","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Oranžinė","FFFF00":"Geltona","00FF00":"Citrinų","AFEEEE":"Pale Turquoise","ADD8E6":"Šviesiai mėlyna","DDA0DD":"Plum","D3D3D3":"Šviesiai pilka","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Šviesiai geltona","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"Balta"},"more":"Daugiau spalvų...","panelTitle":"Spalva","textColorTitle":"Teksto spalva"},"colordialog":{"clear":"Išvalyti","highlight":"Paryškinti","options":"Spalvos nustatymai","selected":"Pasirinkta spalva","title":"Pasirinkite spalvą"},"elementspath":{"eleLabel":"Elemento kelias","eleTitle":"%1 elementas"},"font":{"fontSize":{"label":"Šrifto dydis","voiceLabel":"Šrifto dydis","panelTitle":"Šrifto dydis"},"label":"Šriftas","panelTitle":"Šriftas","voiceLabel":"Šriftas"},"format":{"label":"Šrifto formatas","panelTitle":"Šrifto formatas","tag_address":"Kreipinio","tag_div":"Normalus (DIV)","tag_h1":"Antraštinis 1","tag_h2":"Antraštinis 2","tag_h3":"Antraštinis 3","tag_h4":"Antraštinis 4","tag_h5":"Antraštinis 5","tag_h6":"Antraštinis 6","tag_p":"Normalus","tag_pre":"Formuotas"},"horizontalrule":{"toolbar":"Įterpti horizontalią liniją"},"indent":{"indent":"Padidinti įtrauką","outdent":"Sumažinti įtrauką"},"fakeobjects":{"anchor":"Žymė","flash":"Flash animacija","hiddenfield":"Paslėptas laukas","iframe":"IFrame","unknown":"Nežinomas objektas"},"link":{"acccessKey":"Prieigos raktas","advanced":"Papildomas","advisoryContentType":"Konsultacinio turinio tipas","advisoryTitle":"Konsultacinė antraštė","anchor":{"toolbar":"Įterpti/modifikuoti žymę","menu":"Žymės savybės","title":"Žymės savybės","name":"Žymės vardas","errorName":"Prašome įvesti žymės vardą","remove":"Pašalinti žymę"},"anchorId":"Pagal žymės Id","anchorName":"Pagal žymės vardą","charset":"Susietų išteklių simbolių lentelė","cssClasses":"Stilių lentelės klasės","emailAddress":"El.pašto adresas","emailBody":"Žinutės turinys","emailSubject":"Žinutės tema","id":"Id","info":"Nuorodos informacija","langCode":"Teksto kryptis","langDir":"Teksto kryptis","langDirLTR":"Iš kairės į dešinę (LTR)","langDirRTL":"Iš dešinės į kairę (RTL)","menu":"Taisyti nuorodą","name":"Vardas","noAnchors":"(Šiame dokumente žymių nėra)","noEmail":"Prašome įvesti el.pašto adresą","noUrl":"Prašome įvesti nuorodos URL","other":"<kitas>","popupDependent":"Priklausomas (Netscape)","popupFeatures":"Išskleidžiamo lango savybės","popupFullScreen":"Visas ekranas (IE)","popupLeft":"Kairė pozicija","popupLocationBar":"Adreso juosta","popupMenuBar":"Meniu juosta","popupResizable":"Kintamas dydis","popupScrollBars":"Slinkties juostos","popupStatusBar":"Būsenos juosta","popupToolbar":"Mygtukų juosta","popupTop":"Viršutinė pozicija","rel":"Sąsajos","selectAnchor":"Pasirinkite žymę","styles":"Stilius","tabIndex":"Tabuliavimo indeksas","target":"Paskirties vieta","targetFrame":"<kadras>","targetFrameName":"Paskirties kadro vardas","targetPopup":"<išskleidžiamas langas>","targetPopupName":"Paskirties lango vardas","title":"Nuoroda","toAnchor":"Žymė šiame puslapyje","toEmail":"El.paštas","toUrl":"Nuoroda","toolbar":"Įterpti/taisyti nuorodą","type":"Nuorodos tipas","unlink":"Panaikinti nuorodą","upload":"Siųsti"},"list":{"bulletedlist":"Suženklintas sąrašas","numberedlist":"Numeruotas sąrašas"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Išdidinti","minimize":"Sumažinti"},"pastefromword":{"confirmCleanup":"Tekstas, kurį įkeliate yra kopijuojamas iš Word. Ar norite jį išvalyti prieš įkeliant?","error":"Dėl vidinių sutrikimų, nepavyko išvalyti įkeliamo teksto","title":"Įdėti iš Word","toolbar":"Įdėti iš Word"},"pastetext":{"button":"Įdėti kaip gryną tekstą","title":"Įdėti kaip gryną tekstą"},"removeformat":{"toolbar":"Panaikinti formatą"},"specialchar":{"options":"Specialaus simbolio nustatymai","title":"Pasirinkite specialų simbolį","toolbar":"Įterpti specialų simbolį"},"stylescombo":{"label":"Stilius","panelTitle":"Stilių formatavimas","panelTitle1":"Blokų stiliai","panelTitle2":"Vidiniai stiliai","panelTitle3":"Objektų stiliai"},"table":{"border":"Rėmelio dydis","caption":"Antraštė","cell":{"menu":"Langelis","insertBefore":"Įterpti langelį prieš","insertAfter":"Įterpti langelį po","deleteCell":"Šalinti langelius","merge":"Sujungti langelius","mergeRight":"Sujungti su dešine","mergeDown":"Sujungti su apačia","splitHorizontal":"Skaidyti langelį horizontaliai","splitVertical":"Skaidyti langelį vertikaliai","title":"Cell nustatymai","cellType":"Cell rūšis","rowSpan":"Eilučių Span","colSpan":"Stulpelių Span","wordWrap":"Sutraukti raides","hAlign":"Horizontalus lygiavimas","vAlign":"Vertikalus lygiavimas","alignBaseline":"Apatinė linija","bgColor":"Fono spalva","borderColor":"Rėmelio spalva","data":"Data","header":"Antraštė","yes":"Taip","no":"Ne","invalidWidth":"Reikšmė turi būti skaičius.","invalidHeight":"Reikšmė turi būti skaičius.","invalidRowSpan":"Reikšmė turi būti skaičius.","invalidColSpan":"Reikšmė turi būti skaičius.","chooseColor":"Pasirinkite"},"cellPad":"Tarpas nuo langelio rėmo iki teksto","cellSpace":"Tarpas tarp langelių","column":{"menu":"Stulpelis","insertBefore":"Įterpti stulpelį prieš","insertAfter":"Įterpti stulpelį po","deleteColumn":"Šalinti stulpelius"},"columns":"Stulpeliai","deleteTable":"Šalinti lentelę","headers":"Antraštės","headersBoth":"Abu","headersColumn":"Pirmas stulpelis","headersNone":"Nėra","headersRow":"Pirma eilutė","invalidBorder":"Reikšmė turi būti nurodyta skaičiumi.","invalidCellPadding":"Reikšmė turi būti nurodyta skaičiumi.","invalidCellSpacing":"Reikšmė turi būti nurodyta skaičiumi.","invalidCols":"Skaičius turi būti didesnis nei 0.","invalidHeight":"Reikšmė turi būti nurodyta skaičiumi.","invalidRows":"Skaičius turi būti didesnis nei 0.","invalidWidth":"Reikšmė turi būti nurodyta skaičiumi.","menu":"Lentelės savybės","row":{"menu":"Eilutė","insertBefore":"Įterpti eilutę prieš","insertAfter":"Įterpti eilutę po","deleteRow":"Šalinti eilutes"},"rows":"Eilutės","summary":"Santrauka","title":"Lentelės savybės","toolbar":"Lentelė","widthPc":"procentais","widthPx":"taškais","widthUnit":"pločio vienetas"},"contextmenu":{"options":"Kontekstinio meniu parametrai"},"toolbar":{"toolbarCollapse":"Apjungti įrankių juostą","toolbarExpand":"Išplėsti įrankių juostą","toolbarGroups":{"document":"Dokumentas","clipboard":"Atmintinė/Atgal","editing":"Redagavimas","forms":"Formos","basicstyles":"Pagrindiniai stiliai","paragraph":"Paragrafas","links":"Nuorodos","insert":"Įterpti","styles":"Stiliai","colors":"Spalvos","tools":"Įrankiai"},"toolbars":"Redaktoriaus įrankiai"},"undo":{"redo":"Atstatyti","undo":"Atšaukti"},"justify":{"block":"Lygiuoti abi puses","center":"Centruoti","left":"Lygiuoti kairę","right":"Lygiuoti dešinę"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/lv.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/lv.js new file mode 100755 index 0000000000..87ef2f576f --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/lv.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['lv']={"editor":"Bagātinātā teksta redaktors","editorPanel":"Bagātinātā teksta redaktora panelis","common":{"editorHelp":"Palīdzībai, nospiediet ALT 0 ","browseServer":"Skatīt servera saturu","url":"URL","protocol":"Protokols","upload":"Augšupielādēt","uploadSubmit":"Nosūtīt serverim","image":"Attēls","flash":"Flash","form":"Forma","checkbox":"Atzīmēšanas kastīte","radio":"Izvēles poga","textField":"Teksta rinda","textarea":"Teksta laukums","hiddenField":"Paslēpta teksta rinda","button":"Poga","select":"Iezīmēšanas lauks","imageButton":"Attēlpoga","notSet":"<nav iestatīts>","id":"Id","name":"Nosaukums","langDir":"Valodas lasīšanas virziens","langDirLtr":"No kreisās uz labo (LTR)","langDirRtl":"No labās uz kreiso (RTL)","langCode":"Valodas kods","longDescr":"Gara apraksta Hipersaite","cssClass":"Stilu saraksta klases","advisoryTitle":"Konsultatīvs virsraksts","cssStyle":"Stils","ok":"Darīts!","cancel":"Atcelt","close":"Aizvērt","preview":"Priekšskatījums","resize":"Mērogot","generalTab":"Vispārīgi","advancedTab":"Izvērstais","validateNumberFailed":"Šī vērtība nav skaitlis","confirmNewPage":"Jebkuras nesaglabātās izmaiņas tiks zaudētas. Vai tiešām vēlaties atvērt jaunu lapu?","confirmCancel":"Daži no uzstādījumiem ir mainīti. Vai tiešām vēlaties aizvērt šo dialogu?","options":"Uzstādījumi","target":"Mērķis","targetNew":"Jauns logs (_blank)","targetTop":"Virsējais logs (_top)","targetSelf":"Tas pats logs (_self)","targetParent":"Avota logs (_parent)","langDirLTR":"Kreisais uz Labo (LTR)","langDirRTL":"Labais uz Kreiso (RTL)","styles":"Stils","cssClasses":"Stilu klases","width":"Platums","height":"Augstums","align":"Nolīdzināt","alignLeft":"Pa kreisi","alignRight":"Pa labi","alignCenter":"Centrēti","alignJustify":"Izlīdzināt malas","alignTop":"Augšā","alignMiddle":"Vertikāli centrēts","alignBottom":"Apakšā","alignNone":"Nekas","invalidValue":"Nekorekta vērtība","invalidHeight":"Augstumam jābūt skaitlim.","invalidWidth":"Platumam jābūt skaitlim","invalidCssLength":"Laukam \"%1\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām CSS mērvienībām (px, %, in, cm, mm, em, ex, pt, vai pc).","invalidHtmlLength":"Laukam \"%1\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām HTML mērvienībām (px vai %).","invalidInlineStyle":"Iekļautajā stilā norādītajai vērtībai jāsastāv no viena vai vairākiem pāriem pēc forma'ta \"nosaukums: vērtība\", atdalītiem ar semikolu.","cssLengthTooltip":"Ievadiet vērtību pikseļos vai skaitli ar derīgu CSS mērvienību (px, %, in, cm, mm, em, ex, pt, vai pc).","unavailable":"%1<span class=\"cke_accessibility\">, nav pieejams</span>"},"basicstyles":{"bold":"Treknināts","italic":"Kursīvs","strike":"Pārsvītrots","subscript":"Apakšrakstā","superscript":"Augšrakstā","underline":"Pasvītrots"},"clipboard":{"copy":"Kopēt","copyError":"Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj redaktoram automātiski veikt kopēšanas darbību. Lūdzu, izmantojiet (Ctrl/Cmd+C), lai veiktu šo darbību.","cut":"Izgriezt","cutError":"Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj redaktoram automātiski veikt izgriezšanas darbību. Lūdzu, izmantojiet (Ctrl/Cmd+X), lai veiktu šo darbību.","paste":"Ielīmēt","pasteArea":"Ielīmēšanas zona","pasteMsg":"Lūdzu, ievietojiet tekstu šajā laukumā, izmantojot klaviatūru (<STRONG>Ctrl/Cmd+V</STRONG>) un apstipriniet ar <STRONG>Darīts!</STRONG>.","securityMsg":"Jūsu pārlūka drošības uzstādījumu dēļ, nav iespējams tieši piekļūt jūsu starpliktuvei. Jums jāielīmē atkārtoti šajā logā.","title":"Ievietot"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automātiska","bgColorTitle":"Fona krāsa","colors":{"000":"Melns","800000":"Sarkanbrūns","8B4513":"Sedlu brūns","2F4F4F":"Tumšas tāfeles pelēks","008080":"Zili-zaļš","000080":"Jūras","4B0082":"Indigo","696969":"Tumši pelēks","B22222":"Ķieģeļsarkans","A52A2A":"Brūns","DAA520":"Zelta","006400":"Tumši zaļš","40E0D0":"Tirkīzs","0000CD":"Vidēji zils","800080":"Purpurs","808080":"Pelēks","F00":"Sarkans","FF8C00":"Tumši oranžs","FFD700":"Zelta","008000":"Zaļš","0FF":"Tumšzils","00F":"Zils","EE82EE":"Violets","A9A9A9":"Pelēks","FFA07A":"Gaiši laškrāsas","FFA500":"Oranžs","FFFF00":"Dzeltens","00FF00":"Laima","AFEEEE":"Gaiši tirkīza","ADD8E6":"Gaiši zils","DDA0DD":"Plūmju","D3D3D3":"Gaiši pelēks","FFF0F5":"Lavandas sārts","FAEBD7":"Antīki balts","FFFFE0":"Gaiši dzeltens","F0FFF0":"Meduspile","F0FFFF":"Debesszils","F0F8FF":"Alises zils","E6E6FA":"Lavanda","FFF":"Balts"},"more":"Plašāka palete...","panelTitle":"Krāsa","textColorTitle":"Teksta krāsa"},"colordialog":{"clear":"Notīrīt","highlight":"Paraugs","options":"Krāsas uzstādījumi","selected":"Izvēlētā krāsa","title":"Izvēlies krāsu"},"elementspath":{"eleLabel":"Elementa ceļš","eleTitle":"%1 elements"},"font":{"fontSize":{"label":"Izmērs","voiceLabel":"Fonta izmeŗs","panelTitle":"Izmērs"},"label":"Šrifts","panelTitle":"Šrifts","voiceLabel":"Fonts"},"format":{"label":"Formāts","panelTitle":"Formāts","tag_address":"Adrese","tag_div":"Rindkopa (DIV)","tag_h1":"Virsraksts 1","tag_h2":"Virsraksts 2","tag_h3":"Virsraksts 3","tag_h4":"Virsraksts 4","tag_h5":"Virsraksts 5","tag_h6":"Virsraksts 6","tag_p":"Normāls teksts","tag_pre":"Formatēts teksts"},"horizontalrule":{"toolbar":"Ievietot horizontālu Atdalītājsvītru"},"indent":{"indent":"Palielināt atkāpi","outdent":"Samazināt atkāpi"},"fakeobjects":{"anchor":"Iezīme","flash":"Flash animācija","hiddenfield":"Slēpts lauks","iframe":"Iframe","unknown":"Nezināms objekts"},"link":{"acccessKey":"Pieejas taustiņš","advanced":"Izvērstais","advisoryContentType":"Konsultatīvs satura tips","advisoryTitle":"Konsultatīvs virsraksts","anchor":{"toolbar":"Ievietot/Labot iezīmi","menu":"Labot iezīmi","title":"Iezīmes uzstādījumi","name":"Iezīmes nosaukums","errorName":"Lūdzu norādiet iezīmes nosaukumu","remove":"Noņemt iezīmi"},"anchorId":"Pēc elementa ID","anchorName":"Pēc iezīmes nosaukuma","charset":"Pievienotā resursa kodējums","cssClasses":"Stilu saraksta klases","emailAddress":"E-pasta adrese","emailBody":"Ziņas saturs","emailSubject":"Ziņas tēma","id":"ID","info":"Hipersaites informācija","langCode":"Valodas kods","langDir":"Valodas lasīšanas virziens","langDirLTR":"No kreisās uz labo (LTR)","langDirRTL":"No labās uz kreiso (RTL)","menu":"Labot hipersaiti","name":"Nosaukums","noAnchors":"(Šajā dokumentā nav iezīmju)","noEmail":"Lūdzu norādi e-pasta adresi","noUrl":"Lūdzu norādi hipersaiti","other":"<cits>","popupDependent":"Atkarīgs (Netscape)","popupFeatures":"Uznirstošā loga nosaukums īpašības","popupFullScreen":"Pilnā ekrānā (IE)","popupLeft":"Kreisā koordināte","popupLocationBar":"Atrašanās vietas josla","popupMenuBar":"Izvēlnes josla","popupResizable":"Mērogojams","popupScrollBars":"Ritjoslas","popupStatusBar":"Statusa josla","popupToolbar":"Rīku josla","popupTop":"Augšējā koordināte","rel":"Relācija","selectAnchor":"Izvēlēties iezīmi","styles":"Stils","tabIndex":"Ciļņu indekss","target":"Mērķis","targetFrame":"<ietvars>","targetFrameName":"Mērķa ietvara nosaukums","targetPopup":"<uznirstošā logā>","targetPopupName":"Uznirstošā loga nosaukums","title":"Hipersaite","toAnchor":"Iezīme šajā lapā","toEmail":"E-pasts","toUrl":"Adrese","toolbar":"Ievietot/Labot hipersaiti","type":"Hipersaites tips","unlink":"Noņemt hipersaiti","upload":"Augšupielādēt"},"list":{"bulletedlist":"Pievienot/Noņemt vienkāršu sarakstu","numberedlist":"Numurēts saraksts"},"magicline":{"title":"Ievietot šeit rindkopu"},"maximize":{"maximize":"Maksimizēt","minimize":"Minimizēt"},"pastefromword":{"confirmCleanup":"Teksts, kuru vēlaties ielīmēt, izskatās ir nokopēts no Word. Vai vēlaties to iztīrīt pirms ielīmēšanas?","error":"Iekšējas kļūdas dēļ, neizdevās iztīrīt ielīmētos datus.","title":"Ievietot no Worda","toolbar":"Ievietot no Worda"},"pastetext":{"button":"Ievietot kā vienkāršu tekstu","title":"Ievietot kā vienkāršu tekstu"},"removeformat":{"toolbar":"Noņemt stilus"},"specialchar":{"options":"Speciālo simbolu uzstādījumi","title":"Ievietot īpašu simbolu","toolbar":"Ievietot speciālo simbolu"},"stylescombo":{"label":"Stils","panelTitle":"Formatēšanas stili","panelTitle1":"Bloka stili","panelTitle2":"iekļautie stili","panelTitle3":"Objekta stili"},"table":{"border":"Rāmja izmērs","caption":"Leģenda","cell":{"menu":"Šūna","insertBefore":"Pievienot šūnu pirms","insertAfter":"Pievienot šūnu pēc","deleteCell":"Dzēst rūtiņas","merge":"Apvienot rūtiņas","mergeRight":"Apvieno pa labi","mergeDown":"Apvienot uz leju","splitHorizontal":"Sadalīt šūnu horizontāli","splitVertical":"Sadalīt šūnu vertikāli","title":"Šūnas uzstādījumi","cellType":"Šūnas tips","rowSpan":"Apvienotas rindas","colSpan":"Apvienotas kolonas","wordWrap":"Vārdu pārnese","hAlign":"Horizontālais novietojums","vAlign":"Vertikālais novietojums","alignBaseline":"Pamatrinda","bgColor":"Fona krāsa","borderColor":"Rāmja krāsa","data":"Dati","header":"Virsraksts","yes":"Jā","no":"Nē","invalidWidth":"Šūnas platumam jābūt skaitlim","invalidHeight":"Šūnas augstumam jābūt skaitlim","invalidRowSpan":"Apvienojamo rindu skaitam jābūt veselam skaitlim","invalidColSpan":"Apvienojamo kolonu skaitam jābūt veselam skaitlim","chooseColor":"Izvēlēties"},"cellPad":"Rūtiņu nobīde","cellSpace":"Rūtiņu atstatums","column":{"menu":"Kolonna","insertBefore":"Ievietot kolonu pirms","insertAfter":"Ievieto kolonu pēc","deleteColumn":"Dzēst kolonnas"},"columns":"Kolonnas","deleteTable":"Dzēst tabulu","headers":"Virsraksti","headersBoth":"Abi","headersColumn":"Pirmā kolona","headersNone":"Nekas","headersRow":"Pirmā rinda","invalidBorder":"Rāmju izmēram jābūt skaitlim","invalidCellPadding":"Šūnu atkāpēm jābūt pozitīvam skaitlim","invalidCellSpacing":"Šūnu atstarpēm jābūt pozitīvam skaitlim","invalidCols":"Kolonu skaitam jābūt lielākam par 0","invalidHeight":"Tabulas augstumam jābūt skaitlim","invalidRows":"Rindu skaitam jābūt lielākam par 0","invalidWidth":"Tabulas platumam jābūt skaitlim","menu":"Tabulas īpašības","row":{"menu":"Rinda","insertBefore":"Ievietot rindu pirms","insertAfter":"Ievietot rindu pēc","deleteRow":"Dzēst rindas"},"rows":"Rindas","summary":"Anotācija","title":"Tabulas īpašības","toolbar":"Tabula","widthPc":"procentuāli","widthPx":"pikseļos","widthUnit":"platuma mērvienība"},"contextmenu":{"options":"Uznirstošās izvēlnes uzstādījumi"},"toolbar":{"toolbarCollapse":"Aizvērt rīkjoslu","toolbarExpand":"Atvērt rīkjoslu","toolbarGroups":{"document":"Dokuments","clipboard":"Starpliktuve/Atcelt","editing":"Labošana","forms":"Formas","basicstyles":"Pamata stili","paragraph":"Paragrāfs","links":"Saites","insert":"Ievietot","styles":"Stili","colors":"Krāsas","tools":"Rīki"},"toolbars":"Redaktora rīkjoslas"},"undo":{"redo":"Atkārtot","undo":"Atcelt"},"justify":{"block":"Izlīdzināt malas","center":"Izlīdzināt pret centru","left":"Izlīdzināt pa kreisi","right":"Izlīdzināt pa labi"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/mk.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/mk.js new file mode 100755 index 0000000000..ff8bac3519 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/mk.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['mk']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"Општо","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","alignLeft":"Left","alignRight":"Right","alignCenter":"Center","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Color","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"More Colors...","panelTitle":"Colors","textColorTitle":"Text Color"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"removeformat":{"toolbar":"Remove Format"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"undo":{"redo":"Redo","undo":"Undo"},"justify":{"block":"Justify","center":"Center","left":"Align Left","right":"Align Right"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/mn.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/mn.js new file mode 100755 index 0000000000..285f7ee071 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/mn.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['mn']={"editor":"Хэлбэрт бичвэр боловсруулагч","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Үйлчлэгч тооцоолуур (сервэр)-ийг үзэх","url":"цахим хуудасны хаяг (URL)","protocol":"Протокол","upload":"Илгээж ачаалах","uploadSubmit":"Үүнийг үйлчлэгч тооцоолуур (сервер) лүү илгээх","image":"Зураг","flash":"Флаш хөдөлгөөнтэй зураг","form":"Маягт","checkbox":"Тэмдэглээний нүд","radio":"Радио товчлуур","textField":"Бичвэрийн талбар","textarea":"Бичвэрийн зай","hiddenField":"Далд талбар","button":"Товчлуур","select":"Сонголтын талбар","imageButton":"Зургий товчуур","notSet":"<тохируулаагүй>","id":"Id (техникийн нэр)","name":"Нэр","langDir":"Хэлний чиглэл","langDirLtr":"Зүүнээс баруун (LTR)","langDirRtl":"Баруунаас зүүн (RTL)","langCode":"Хэлний код","longDescr":"Урт тайлбарын вэб хаяг","cssClass":"Хэлбэрийн хуудасны ангиуд","advisoryTitle":"Зөвлөх гарчиг","cssStyle":"Загвар","ok":"За","cancel":"Болих","close":"Хаах","preview":"Урьдчилан харах","resize":"Resize","generalTab":"Ерөнхий","advancedTab":"Гүнзгий","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Сонголт","target":"Бай","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Зүүн талаас баруун тийшээ (LTR)","langDirRTL":"Баруун талаас зүүн тийшээ (RTL)","styles":"Загвар","cssClasses":"Хэлбэрийн хуудасны ангиуд","width":"Өргөн","height":"Өндөр","align":"Эгнээ","alignLeft":"Зүүн","alignRight":"Баруун","alignCenter":"Төвд","alignJustify":"Тэгшлэх","alignTop":"Дээд талд","alignMiddle":"Дунд","alignBottom":"Доод талд","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Өндөр нь тоо байх ёстой.","invalidWidth":"Өргөн нь тоо байх ёстой.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"basicstyles":{"bold":"Тод бүдүүн","italic":"Налуу","strike":"Дундуур нь зураастай болгох","subscript":"Суурь болгох","superscript":"Зэрэг болгох","underline":"Доогуур нь зураастай болгох"},"clipboard":{"copy":"Хуулах","copyError":"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+C) товчны хослолыг ашиглана уу.","cut":"Хайчлах","cutError":"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+X) товчны хослолыг ашиглана уу.","paste":"Буулгах","pasteArea":"Paste Area","pasteMsg":"(<strong>Ctrl/Cmd+V</strong>) товчийг ашиглан paste хийнэ үү. Мөн <strong>OK</strong> дар.","securityMsg":"Таны үзүүлэгч/browser/-н хамгаалалтын тохиргооноос болоод editor clipboard өгөгдөлрүү шууд хандах боломжгүй. Энэ цонход дахин paste хийхийг оролд.","title":"Буулгах"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Автоматаар","bgColorTitle":"Дэвсгэр өнгө","colors":{"000":"Хар","800000":"Хүрэн","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Саарал","F00":"Улаан","FF8C00":"Dark Orange","FFD700":"Алт","008000":"Ногоон","0FF":"Цэнхэр","00F":"Хөх","EE82EE":"Ягаан","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Улбар шар","FFFF00":"Шар","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Цайвар саарал","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"Цагаан"},"more":"Нэмэлт өнгөнүүд...","panelTitle":"Өнгөнүүд","textColorTitle":"Бичвэрийн өнгө"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Хэмжээ","voiceLabel":"Үсгийн хэмжээ","panelTitle":"Үсгийн хэмжээ"},"label":"Үсгийн хэлбэр","panelTitle":"Үгсийн хэлбэрийн нэр","voiceLabel":"Үгсийн хэлбэр"},"format":{"label":"Параргафын загвар","panelTitle":"Параргафын загвар","tag_address":"Хаяг","tag_div":"Paragraph (DIV)","tag_h1":"Гарчиг 1","tag_h2":"Гарчиг 2","tag_h3":"Гарчиг 3","tag_h4":"Гарчиг 4","tag_h5":"Гарчиг 5","tag_h6":"Гарчиг 6","tag_p":"Хэвийн","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Хөндлөн зураас оруулах"},"indent":{"indent":"Догол мөр хасах","outdent":"Догол мөр нэмэх"},"fakeobjects":{"anchor":"Зангуу","flash":"Flash Animation","hiddenfield":"Нууц талбар","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Холбох түлхүүр","advanced":"Нэмэлт","advisoryContentType":"Зөвлөлдөх төрлийн агуулга","advisoryTitle":"Зөвлөлдөх гарчиг","anchor":{"toolbar":"Зангуу","menu":"Зангууг болосруулах","title":"Зангуугийн шинж чанар","name":"Зангуугийн нэр","errorName":"Зангуугийн нэрийг оруулна уу","remove":"Зангууг устгах"},"anchorId":"Элемэнтйн Id нэрээр","anchorName":"Зангуугийн нэрээр","charset":"Тэмдэгт оноох нөөцөд холбогдсон","cssClasses":"Stylesheet классууд","emailAddress":"Э-шуудангийн хаяг","emailBody":"Зурвасны их бие","emailSubject":"Зурвасны гарчиг","id":"Id","info":"Холбоосын тухай мэдээлэл","langCode":"Хэлний код","langDir":"Хэлний чиглэл","langDirLTR":"Зүүнээс баруун (LTR)","langDirRTL":"Баруунаас зүүн (RTL)","menu":"Холбоос засварлах","name":"Нэр","noAnchors":"(Баримт бичиг зангуугүй байна)","noEmail":"Э-шуудангий хаягаа шивнэ үү","noUrl":"Холбоосны URL хаягийг шивнэ үү","other":"<other>","popupDependent":"Хамаатай (Netscape)","popupFeatures":"Popup цонхны онцлог","popupFullScreen":"Цонх дүүргэх (Internet Explorer)","popupLeft":"Зүүн байрлал","popupLocationBar":"Location хэсэг","popupMenuBar":"Цэсний самбар","popupResizable":"Resizable","popupScrollBars":"Скрол хэсэгүүд","popupStatusBar":"Статус хэсэг","popupToolbar":"Багажны самбар","popupTop":"Дээд байрлал","rel":"Relationship","selectAnchor":"Нэг зангууг сонгоно уу","styles":"Загвар","tabIndex":"Tab индекс","target":"Байрлал","targetFrame":"<Агуулах хүрээ>","targetFrameName":"Очих фремын нэр","targetPopup":"<popup цонх>","targetPopupName":"Popup цонхны нэр","title":"Холбоос","toAnchor":"Энэ бичвэр дэх зангуу руу очих холбоос","toEmail":"Э-захиа","toUrl":"цахим хуудасны хаяг (URL)","toolbar":"Холбоос","type":"Линкийн төрөл","unlink":"Холбоос авч хаях","upload":"Хуулах"},"list":{"bulletedlist":"Цэгтэй жагсаалт","numberedlist":"Дугаарлагдсан жагсаалт"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Дэлгэц дүүргэх","minimize":"Цонхыг багсгаж харуулах"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Word-оос буулгах","toolbar":"Word-оос буулгах"},"pastetext":{"button":"Энгийн бичвэрээр буулгах","title":"Энгийн бичвэрээр буулгах"},"removeformat":{"toolbar":"Параргафын загварыг авч хаях"},"specialchar":{"options":"Special Character Options","title":"Онцгой тэмдэгт сонгох","toolbar":"Онцгой тэмдэгт оруулах"},"stylescombo":{"label":"Загвар","panelTitle":"Загвар хэлбэржүүлэх","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Хүрээний хэмжээ","caption":"Тайлбар","cell":{"menu":"Нүх/зай","insertBefore":"Нүх/зай өмнө нь оруулах","insertAfter":"Нүх/зай дараа нь оруулах","deleteCell":"Нүх устгах","merge":"Нүх нэгтэх","mergeRight":"Баруун тийш нэгтгэх","mergeDown":"Доош нэгтгэх","splitHorizontal":"Нүх/зайг босоогоор нь тусгаарлах","splitVertical":"Нүх/зайг хөндлөнгөөр нь тусгаарлах","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Хэвтээд тэгшлэх арга","vAlign":"Босоод тэгшлэх арга","alignBaseline":"Baseline","bgColor":"Дэвсгэр өнгө","borderColor":"Хүрээний өнгө","data":"Data","header":"Header","yes":"Тийм","no":"Үгүй","invalidWidth":"Нүдний өргөн нь тоо байх ёстой.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Сонгох"},"cellPad":"Нүх доторлох(padding)","cellSpace":"Нүх хоорондын зай (spacing)","column":{"menu":"Багана","insertBefore":"Багана өмнө нь оруулах","insertAfter":"Багана дараа нь оруулах","deleteColumn":"Багана устгах"},"columns":"Багана","deleteTable":"Хүснэгт устгах","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Хүснэгтийн өргөн нь тоо байх ёстой.","menu":"Хүснэгт","row":{"menu":"Мөр","insertBefore":"Мөр өмнө нь оруулах","insertAfter":"Мөр дараа нь оруулах","deleteRow":"Мөр устгах"},"rows":"Мөр","summary":"Тайлбар","title":"Хүснэгт","toolbar":"Хүснэгт","widthPc":"хувь","widthPx":"цэг","widthUnit":"өргөний нэгж"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Холбоосууд","insert":"Оруулах","styles":"Загварууд","colors":"Онгөнүүд","tools":"Хэрэгслүүд"},"toolbars":"Болосруулагчийн хэрэгслийн самбар"},"undo":{"redo":"Өмнөх үйлдлээ сэргээх","undo":"Хүчингүй болгох"},"justify":{"block":"Тэгшлэх","center":"Голлуулах","left":"Зүүн талд тулгах","right":"Баруун талд тулгах"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/ms.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/ms.js new file mode 100755 index 0000000000..9fccab985e --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/ms.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['ms']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protokol","upload":"Muat Naik","uploadSubmit":"Hantar ke Server","image":"Gambar","flash":"Flash","form":"Borang","checkbox":"Checkbox","radio":"Butang Radio","textField":"Text Field","textarea":"Textarea","hiddenField":"Field Tersembunyi","button":"Butang","select":"Field Pilihan","imageButton":"Butang Bergambar","notSet":"<tidak di set>","id":"Id","name":"Nama","langDir":"Arah Tulisan","langDirLtr":"Kiri ke Kanan (LTR)","langDirRtl":"Kanan ke Kiri (RTL)","langCode":"Kod Bahasa","longDescr":"Butiran Panjang URL","cssClass":"Kelas-kelas Stylesheet","advisoryTitle":"Tajuk Makluman","cssStyle":"Stail","ok":"OK","cancel":"Batal","close":"Tutup","preview":"Prebiu","resize":"Resize","generalTab":"Umum","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Sasaran","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","styles":"Stail","cssClasses":"Kelas-kelas Stylesheet","width":"Lebar","height":"Tinggi","align":"Jajaran","alignLeft":"Kiri","alignRight":"Kanan","alignCenter":"Tengah","alignJustify":"Jajaran Blok","alignTop":"Atas","alignMiddle":"Pertengahan","alignBottom":"Bawah","alignNone":"None","invalidValue":"Nilai tidak sah.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"clipboard":{"copy":"Salin","copyError":"Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+C).","cut":"Potong","cutError":"Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+X).","paste":"Tampal","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Tampal"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Otomatik","bgColorTitle":"Warna Latarbelakang","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Warna lain-lain...","panelTitle":"Colors","textColorTitle":"Warna Text"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Saiz","voiceLabel":"Font Size","panelTitle":"Saiz"},"label":"Font","panelTitle":"Font","voiceLabel":"Font"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Alamat","tag_div":"Perenggan (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Telah Diformat"},"horizontalrule":{"toolbar":"Masukkan Garisan Membujur"},"indent":{"indent":"Tambahkan Inden","outdent":"Kurangkan Inden"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Kunci Akses","advanced":"Advanced","advisoryContentType":"Jenis Kandungan Makluman","advisoryTitle":"Tajuk Makluman","anchor":{"toolbar":"Masukkan/Sunting Pautan","menu":"Ciri-ciri Pautan","title":"Ciri-ciri Pautan","name":"Nama Pautan","errorName":"Sila taip nama pautan","remove":"Remove Anchor"},"anchorId":"dengan menggunakan ID elemen","anchorName":"dengan menggunakan nama pautan","charset":"Linked Resource Charset","cssClasses":"Kelas-kelas Stylesheet","emailAddress":"Alamat E-Mail","emailBody":"Isi Kandungan Mesej","emailSubject":"Subjek Mesej","id":"Id","info":"Butiran Sambungan","langCode":"Arah Tulisan","langDir":"Arah Tulisan","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","menu":"Sunting Sambungan","name":"Nama","noAnchors":"(Tiada pautan terdapat dalam dokumen ini)","noEmail":"Sila taip alamat e-mail","noUrl":"Sila taip sambungan URL","other":"<lain>","popupDependent":"Bergantungan (Netscape)","popupFeatures":"Ciri Tetingkap Popup","popupFullScreen":"Skrin Penuh (IE)","popupLeft":"Posisi Kiri","popupLocationBar":"Bar Lokasi","popupMenuBar":"Bar Menu","popupResizable":"Resizable","popupScrollBars":"Bar-bar skrol","popupStatusBar":"Bar Status","popupToolbar":"Toolbar","popupTop":"Posisi Atas","rel":"Relationship","selectAnchor":"Sila pilih pautan","styles":"Stail","tabIndex":"Indeks Tab ","target":"Sasaran","targetFrame":"<bingkai>","targetFrameName":"Nama Bingkai Sasaran","targetPopup":"<tetingkap popup>","targetPopupName":"Nama Tetingkap Popup","title":"Sambungan","toAnchor":"Pautan dalam muka surat ini","toEmail":"E-Mail","toUrl":"URL","toolbar":"Masukkan/Sunting Sambungan","type":"Jenis Sambungan","unlink":"Buang Sambungan","upload":"Muat Naik"},"list":{"bulletedlist":"Senarai tidak bernombor","numberedlist":"Senarai bernombor"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Tampal dari Word","toolbar":"Tampal dari Word"},"pastetext":{"button":"Tampal sebagai text biasa","title":"Tampal sebagai text biasa"},"removeformat":{"toolbar":"Buang Format"},"specialchar":{"options":"Special Character Options","title":"Sila pilih huruf istimewa","toolbar":"Masukkan Huruf Istimewa"},"stylescombo":{"label":"Stail","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Saiz Border","caption":"Keterangan","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Buangkan Sel-sel","merge":"Cantumkan Sel-sel","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Tambahan Ruang Sel","cellSpace":"Ruangan Antara Sel","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Buangkan Lajur"},"columns":"Jaluran","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Ciri-ciri Jadual","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Buangkan Baris"},"rows":"Barisan","summary":"Summary","title":"Ciri-ciri Jadual","toolbar":"Jadual","widthPc":"peratus","widthPx":"piksel-piksel","widthUnit":"width unit"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"undo":{"redo":"Ulangkan","undo":"Batalkan"},"justify":{"block":"Jajaran Blok","center":"Jajaran Tengah","left":"Jajaran Kiri","right":"Jajaran Kanan"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/nb.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/nb.js new file mode 100755 index 0000000000..5ec1ac4a7f --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/nb.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['nb']={"editor":"Rikteksteditor","editorPanel":"Panel for rikteksteditor","common":{"editorHelp":"Trykk ALT 0 for hjelp","browseServer":"Bla gjennom tjener","url":"URL","protocol":"Protokoll","upload":"Last opp","uploadSubmit":"Send det til serveren","image":"Bilde","flash":"Flash","form":"Skjema","checkbox":"Avmerkingsboks","radio":"Alternativknapp","textField":"Tekstboks","textarea":"Tekstområde","hiddenField":"Skjult felt","button":"Knapp","select":"Rullegardinliste","imageButton":"Bildeknapp","notSet":"<ikke satt>","id":"Id","name":"Navn","langDir":"Språkretning","langDirLtr":"Venstre til høyre (VTH)","langDirRtl":"Høyre til venstre (HTV)","langCode":"Språkkode","longDescr":"Utvidet beskrivelse","cssClass":"Stilarkklasser","advisoryTitle":"Tittel","cssStyle":"Stil","ok":"OK","cancel":"Avbryt","close":"Lukk","preview":"Forhåndsvis","resize":"Dra for å skalere","generalTab":"Generelt","advancedTab":"Avansert","validateNumberFailed":"Denne verdien er ikke et tall.","confirmNewPage":"Alle ulagrede endringer som er gjort i dette innholdet vil gå tapt. Er du sikker på at du vil laste en ny side?","confirmCancel":"Du har endret noen alternativer. Er du sikker på at du vil lukke dialogvinduet?","options":"Valg","target":"Mål","targetNew":"Nytt vindu (_blank)","targetTop":"Hele vindu (_top)","targetSelf":"Samme vindu (_self)","targetParent":"Foreldrevindu (_parent)","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","styles":"Stil","cssClasses":"Stilarkklasser","width":"Bredde","height":"Høyde","align":"Juster","alignLeft":"Venstre","alignRight":"Høyre","alignCenter":"Midtjuster","alignJustify":"Blokkjuster","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","alignNone":"Ingen","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidCssLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig CSS-målingsenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig HTML-målingsenhet (px eller %).","invalidInlineStyle":"Verdi angitt for inline stil må bestå av en eller flere sett med formatet \"navn : verdi\", separert med semikolon","cssLengthTooltip":"Skriv inn et tall for en piksel-verdi eller et tall med en gyldig CSS-enhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, utilgjenglig</span>"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"clipboard":{"copy":"Kopier","copyError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+C).","cut":"Klipp ut","cutError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+X).","paste":"Lim inn","pasteArea":"Innlimingsområde","pasteMsg":"Vennligst lim inn i følgende boks med tastaturet (<strong>Ctrl/Cmd+V</strong>) og trykk <strong>OK</strong>.","securityMsg":"Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.","title":"Lim inn"},"button":{"selectedLabel":"%1 (Valgt)"},"colorbutton":{"auto":"Automatisk","bgColorTitle":"Bakgrunnsfarge","colors":{"000":"Svart","800000":"Rødbrun","8B4513":"Salbrun","2F4F4F":"Grønnsvart","008080":"Blågrønn","000080":"Marineblått","4B0082":"Indigo","696969":"Mørk grå","B22222":"Mørkerød","A52A2A":"Brun","DAA520":"Lys brun","006400":"Mørk grønn","40E0D0":"Turkis","0000CD":"Medium blå","800080":"Purpur","808080":"Grå","F00":"Rød","FF8C00":"Mørk oransje","FFD700":"Gull","008000":"Grønn","0FF":"Cyan","00F":"Blå","EE82EE":"Fiolett","A9A9A9":"Svak grå","FFA07A":"Rosa-oransje","FFA500":"Oransje","FFFF00":"Gul","00FF00":"Lime","AFEEEE":"Svak turkis","ADD8E6":"Lys Blå","DDA0DD":"Plomme","D3D3D3":"Lys grå","FFF0F5":"Svak lavendelrosa","FAEBD7":"Antikk-hvit","FFFFE0":"Lys gul","F0FFF0":"Honningmelon","F0FFFF":"Svakt asurblått","F0F8FF":"Svak cyan","E6E6FA":"Lavendel","FFF":"Hvit"},"more":"Flere farger...","panelTitle":"Farger","textColorTitle":"Tekstfarge"},"colordialog":{"clear":"Tøm","highlight":"Merk","options":"Alternativer for farge","selected":"Valgt farge","title":"Velg farge"},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Størrelse","voiceLabel":"Skriftstørrelse","panelTitle":"Skriftstørrelse"},"label":"Skrift","panelTitle":"Skrift","voiceLabel":"Font"},"format":{"label":"Format","panelTitle":"Avsnittsformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formatert"},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"fakeobjects":{"anchor":"Anker","flash":"Flash-animasjon","hiddenfield":"Skjult felt","iframe":"IFrame","unknown":"Ukjent objekt"},"link":{"acccessKey":"Aksessknapp","advanced":"Avansert","advisoryContentType":"Type","advisoryTitle":"Tittel","anchor":{"toolbar":"Sett inn/Rediger anker","menu":"Egenskaper for anker","title":"Egenskaper for anker","name":"Ankernavn","errorName":"Vennligst skriv inn ankernavnet","remove":"Fjern anker"},"anchorId":"Element etter ID","anchorName":"Anker etter navn","charset":"Lenket tegnsett","cssClasses":"Stilarkklasser","emailAddress":"E-postadresse","emailBody":"Melding","emailSubject":"Meldingsemne","id":"Id","info":"Lenkeinfo","langCode":"Språkkode","langDir":"Språkretning","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","menu":"Rediger lenke","name":"Navn","noAnchors":"(Ingen anker i dokumentet)","noEmail":"Vennligst skriv inn e-postadressen","noUrl":"Vennligst skriv inn lenkens URL","other":"<annen>","popupDependent":"Avhenging (Netscape)","popupFeatures":"Egenskaper for popup-vindu","popupFullScreen":"Fullskjerm (IE)","popupLeft":"Venstre posisjon","popupLocationBar":"Adresselinje","popupMenuBar":"Menylinje","popupResizable":"Skalerbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Verktøylinje","popupTop":"Topp-posisjon","rel":"Relasjon (rel)","selectAnchor":"Velg et anker","styles":"Stil","tabIndex":"Tabindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Målramme","targetPopup":"<popup-vindu>","targetPopupName":"Navn på popup-vindu","title":"Lenke","toAnchor":"Lenke til anker i teksten","toEmail":"E-post","toUrl":"URL","toolbar":"Sett inn/Rediger lenke","type":"Lenketype","unlink":"Fjern lenke","upload":"Last opp"},"list":{"bulletedlist":"Legg til / fjern punktmerket liste","numberedlist":"Legg til / fjern nummerert liste"},"magicline":{"title":"Sett inn nytt avsnitt her"},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"pastefromword":{"confirmCleanup":"Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?","error":"Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil","title":"Lim inn fra Word","toolbar":"Lim inn fra Word"},"pastetext":{"button":"Lim inn som ren tekst","title":"Lim inn som ren tekst"},"removeformat":{"toolbar":"Fjern formatering"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"table":{"border":"Rammestørrelse","caption":"Tittel","cell":{"menu":"Celle","insertBefore":"Sett inn celle før","insertAfter":"Sett inn celle etter","deleteCell":"Slett celler","merge":"Slå sammen celler","mergeRight":"Slå sammen høyre","mergeDown":"Slå sammen ned","splitHorizontal":"Del celle horisontalt","splitVertical":"Del celle vertikalt","title":"Celleegenskaper","cellType":"Celletype","rowSpan":"Radspenn","colSpan":"Kolonnespenn","wordWrap":"Tekstbrytning","hAlign":"Horisontal justering","vAlign":"Vertikal justering","alignBaseline":"Grunnlinje","bgColor":"Bakgrunnsfarge","borderColor":"Rammefarge","data":"Data","header":"Overskrift","yes":"Ja","no":"Nei","invalidWidth":"Cellebredde må være et tall.","invalidHeight":"Cellehøyde må være et tall.","invalidRowSpan":"Radspenn må være et heltall.","invalidColSpan":"Kolonnespenn må være et heltall.","chooseColor":"Velg"},"cellPad":"Cellepolstring","cellSpace":"Cellemarg","column":{"menu":"Kolonne","insertBefore":"Sett inn kolonne før","insertAfter":"Sett inn kolonne etter","deleteColumn":"Slett kolonner"},"columns":"Kolonner","deleteTable":"Slett tabell","headers":"Overskrifter","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første rad","invalidBorder":"Rammestørrelse må være et tall.","invalidCellPadding":"Cellepolstring må være et positivt tall.","invalidCellSpacing":"Cellemarg må være et positivt tall.","invalidCols":"Antall kolonner må være et tall større enn 0.","invalidHeight":"Tabellhøyde må være et tall.","invalidRows":"Antall rader må være et tall større enn 0.","invalidWidth":"Tabellbredde må være et tall.","menu":"Egenskaper for tabell","row":{"menu":"Rader","insertBefore":"Sett inn rad før","insertAfter":"Sett inn rad etter","deleteRow":"Slett rader"},"rows":"Rader","summary":"Sammendrag","title":"Egenskaper for tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"piksler","widthUnit":"Bredde-enhet"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"toolbar":{"toolbarCollapse":"Skjul verktøylinje","toolbarExpand":"Vis verktøylinje","toolbarGroups":{"document":"Dokument","clipboard":"Utklippstavle/Angre","editing":"Redigering","forms":"Skjema","basicstyles":"Basisstiler","paragraph":"Avsnitt","links":"Lenker","insert":"Innsetting","styles":"Stiler","colors":"Farger","tools":"Verktøy"},"toolbars":"Verktøylinjer for editor"},"undo":{"redo":"Gjør om","undo":"Angre"},"justify":{"block":"Blokkjuster","center":"Midtstill","left":"Venstrejuster","right":"Høyrejuster"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/nl.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/nl.js new file mode 100755 index 0000000000..6aabcabb52 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/nl.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['nl']={"editor":"Tekstverwerker","editorPanel":"Tekstverwerker beheerpaneel","common":{"editorHelp":"Druk ALT 0 voor hulp","browseServer":"Bladeren op server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Naar server verzenden","image":"Afbeelding","flash":"Flash","form":"Formulier","checkbox":"Selectievinkje","radio":"Keuzerondje","textField":"Tekstveld","textarea":"Tekstvak","hiddenField":"Verborgen veld","button":"Knop","select":"Selectieveld","imageButton":"Afbeeldingsknop","notSet":"<niet ingevuld>","id":"Id","name":"Naam","langDir":"Schrijfrichting","langDirLtr":"Links naar rechts (LTR)","langDirRtl":"Rechts naar links (RTL)","langCode":"Taalcode","longDescr":"Lange URL-omschrijving","cssClass":"Stylesheet-klassen","advisoryTitle":"Adviserende titel","cssStyle":"Stijl","ok":"OK","cancel":"Annuleren","close":"Sluiten","preview":"Voorbeeld","resize":"Sleep om te herschalen","generalTab":"Algemeen","advancedTab":"Geavanceerd","validateNumberFailed":"Deze waarde is geen geldig getal.","confirmNewPage":"Alle aangebrachte wijzigingen gaan verloren. Weet u zeker dat u een nieuwe pagina wilt openen?","confirmCancel":"Enkele opties zijn gewijzigd. Weet u zeker dat u dit dialoogvenster wilt sluiten?","options":"Opties","target":"Doelvenster","targetNew":"Nieuw venster (_blank)","targetTop":"Hele venster (_top)","targetSelf":"Zelfde venster (_self)","targetParent":"Origineel venster (_parent)","langDirLTR":"Links naar rechts (LTR)","langDirRTL":"Rechts naar links (RTL)","styles":"Stijl","cssClasses":"Stylesheet-klassen","width":"Breedte","height":"Hoogte","align":"Uitlijning","alignLeft":"Links","alignRight":"Rechts","alignCenter":"Centreren","alignJustify":"Uitvullen","alignTop":"Boven","alignMiddle":"Midden","alignBottom":"Onder","alignNone":"Geen","invalidValue":"Ongeldige waarde.","invalidHeight":"De hoogte moet een getal zijn.","invalidWidth":"De breedte moet een getal zijn.","invalidCssLength":"Waarde in veld \"%1\" moet een positief nummer zijn, met of zonder een geldige CSS meeteenheid (px, %, in, cm, mm, em, ex, pt of pc).","invalidHtmlLength":"Waarde in veld \"%1\" moet een positief nummer zijn, met of zonder een geldige HTML meeteenheid (px of %).","invalidInlineStyle":"Waarde voor de online stijl moet bestaan uit een of meerdere tupels met het formaat \"naam : waarde\", gescheiden door puntkomma's.","cssLengthTooltip":"Geef een nummer in voor een waarde in pixels of geef een nummer in met een geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","unavailable":"%1<span class=\"cke_accessibility\">, niet beschikbaar</span>"},"basicstyles":{"bold":"Vet","italic":"Cursief","strike":"Doorhalen","subscript":"Subscript","superscript":"Superscript","underline":"Onderstrepen"},"clipboard":{"copy":"Kopiëren","copyError":"De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl/Cmd+C van het toetsenbord.","cut":"Knippen","cutError":"De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl/Cmd+X van het toetsenbord.","paste":"Plakken","pasteArea":"Plakgebied","pasteMsg":"Plak de tekst in het volgende vak gebruikmakend van uw toetsenbord (<strong>Ctrl/Cmd+V</strong>) en klik op OK.","securityMsg":"Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.","title":"Plakken"},"button":{"selectedLabel":"%1 (Geselecteerd)"},"colorbutton":{"auto":"Automatisch","bgColorTitle":"Achtergrondkleur","colors":{"000":"Zwart","800000":"Kastanjebruin","8B4513":"Chocoladebruin","2F4F4F":"Donkerleigrijs","008080":"Blauwgroen","000080":"Marine","4B0082":"Indigo","696969":"Donkergrijs","B22222":"Baksteen","A52A2A":"Bruin","DAA520":"Donkergeel","006400":"Donkergroen","40E0D0":"Turquoise","0000CD":"Middenblauw","800080":"Paars","808080":"Grijs","F00":"Rood","FF8C00":"Donkeroranje","FFD700":"Goud","008000":"Groen","0FF":"Cyaan","00F":"Blauw","EE82EE":"Violet","A9A9A9":"Donkergrijs","FFA07A":"Lichtzalm","FFA500":"Oranje","FFFF00":"Geel","00FF00":"Felgroen","AFEEEE":"Lichtturquoise","ADD8E6":"Lichtblauw","DDA0DD":"Pruim","D3D3D3":"Lichtgrijs","FFF0F5":"Linnen","FAEBD7":"Ivoor","FFFFE0":"Lichtgeel","F0FFF0":"Honingdauw","F0FFFF":"Azuur","F0F8FF":"Licht hemelsblauw","E6E6FA":"Lavendel","FFF":"Wit"},"more":"Meer kleuren...","panelTitle":"Kleuren","textColorTitle":"Tekstkleur"},"colordialog":{"clear":"Wissen","highlight":"Actief","options":"Kleuropties","selected":"Geselecteerde kleur","title":"Selecteer kleur"},"elementspath":{"eleLabel":"Elementenpad","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Lettergrootte","voiceLabel":"Lettergrootte","panelTitle":"Lettergrootte"},"label":"Lettertype","panelTitle":"Lettertype","voiceLabel":"Lettertype"},"format":{"label":"Opmaak","panelTitle":"Opmaak","tag_address":"Adres","tag_div":"Normaal (DIV)","tag_h1":"Kop 1","tag_h2":"Kop 2","tag_h3":"Kop 3","tag_h4":"Kop 4","tag_h5":"Kop 5","tag_h6":"Kop 6","tag_p":"Normaal","tag_pre":"Met opmaak"},"horizontalrule":{"toolbar":"Horizontale lijn invoegen"},"indent":{"indent":"Inspringing vergroten","outdent":"Inspringing verkleinen"},"fakeobjects":{"anchor":"Interne link","flash":"Flash animatie","hiddenfield":"Verborgen veld","iframe":"IFrame","unknown":"Onbekend object"},"link":{"acccessKey":"Toegangstoets","advanced":"Geavanceerd","advisoryContentType":"Aanbevolen content-type","advisoryTitle":"Adviserende titel","anchor":{"toolbar":"Interne link","menu":"Eigenschappen interne link","title":"Eigenschappen interne link","name":"Naam interne link","errorName":"Geef de naam van de interne link op","remove":"Interne link verwijderen"},"anchorId":"Op kenmerk interne link","anchorName":"Op naam interne link","charset":"Karakterset van gelinkte bron","cssClasses":"Stylesheet-klassen","emailAddress":"E-mailadres","emailBody":"Inhoud bericht","emailSubject":"Onderwerp bericht","id":"Id","info":"Linkomschrijving","langCode":"Taalcode","langDir":"Schrijfrichting","langDirLTR":"Links naar rechts (LTR)","langDirRTL":"Rechts naar links (RTL)","menu":"Link wijzigen","name":"Naam","noAnchors":"(Geen interne links in document gevonden)","noEmail":"Geef een e-mailadres","noUrl":"Geef de link van de URL","other":"<ander>","popupDependent":"Afhankelijk (Netscape)","popupFeatures":"Instellingen popupvenster","popupFullScreen":"Volledig scherm (IE)","popupLeft":"Positie links","popupLocationBar":"Locatiemenu","popupMenuBar":"Menubalk","popupResizable":"Herschaalbaar","popupScrollBars":"Schuifbalken","popupStatusBar":"Statusbalk","popupToolbar":"Werkbalk","popupTop":"Positie boven","rel":"Relatie","selectAnchor":"Kies een interne link","styles":"Stijl","tabIndex":"Tabvolgorde","target":"Doelvenster","targetFrame":"<frame>","targetFrameName":"Naam doelframe","targetPopup":"<popupvenster>","targetPopupName":"Naam popupvenster","title":"Link","toAnchor":"Interne link in pagina","toEmail":"E-mail","toUrl":"URL","toolbar":"Link invoegen/wijzigen","type":"Linktype","unlink":"Link verwijderen","upload":"Upload"},"list":{"bulletedlist":"Opsomming invoegen","numberedlist":"Genummerde lijst invoegen"},"magicline":{"title":"Hier paragraaf invoeren"},"maximize":{"maximize":"Maximaliseren","minimize":"Minimaliseren"},"pastefromword":{"confirmCleanup":"De tekst die u wilt plakken lijkt gekopieerd te zijn vanuit Word. Wilt u de tekst opschonen voordat deze geplakt wordt?","error":"Het was niet mogelijk om de geplakte tekst op te schonen door een interne fout","title":"Plakken vanuit Word","toolbar":"Plakken vanuit Word"},"pastetext":{"button":"Plakken als platte tekst","title":"Plakken als platte tekst"},"removeformat":{"toolbar":"Opmaak verwijderen"},"specialchar":{"options":"Speciale tekens opties","title":"Selecteer speciaal teken","toolbar":"Speciaal teken invoegen"},"stylescombo":{"label":"Stijl","panelTitle":"Opmaakstijlen","panelTitle1":"Blok stijlen","panelTitle2":"Inline stijlen","panelTitle3":"Object stijlen"},"table":{"border":"Randdikte","caption":"Onderschrift","cell":{"menu":"Cel","insertBefore":"Voeg cel in voor","insertAfter":"Voeg cel in na","deleteCell":"Cellen verwijderen","merge":"Cellen samenvoegen","mergeRight":"Voeg samen naar rechts","mergeDown":"Voeg samen naar beneden","splitHorizontal":"Splits cel horizontaal","splitVertical":"Splits cel vertikaal","title":"Celeigenschappen","cellType":"Celtype","rowSpan":"Rijen samenvoegen","colSpan":"Kolommen samenvoegen","wordWrap":"Automatische terugloop","hAlign":"Horizontale uitlijning","vAlign":"Verticale uitlijning","alignBaseline":"Tekstregel","bgColor":"Achtergrondkleur","borderColor":"Randkleur","data":"Gegevens","header":"Kop","yes":"Ja","no":"Nee","invalidWidth":"De celbreedte moet een getal zijn.","invalidHeight":"De celhoogte moet een getal zijn.","invalidRowSpan":"Rijen samenvoegen moet een heel getal zijn.","invalidColSpan":"Kolommen samenvoegen moet een heel getal zijn.","chooseColor":"Kies"},"cellPad":"Celopvulling","cellSpace":"Celafstand","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in na","deleteColumn":"Kolommen verwijderen"},"columns":"Kolommen","deleteTable":"Tabel verwijderen","headers":"Koppen","headersBoth":"Beide","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste rij","invalidBorder":"De randdikte moet een getal zijn.","invalidCellPadding":"Celopvulling moet een getal zijn.","invalidCellSpacing":"Celafstand moet een getal zijn.","invalidCols":"Het aantal kolommen moet een getal zijn groter dan 0.","invalidHeight":"De tabelhoogte moet een getal zijn.","invalidRows":"Het aantal rijen moet een getal zijn groter dan 0.","invalidWidth":"De tabelbreedte moet een getal zijn.","menu":"Tabeleigenschappen","row":{"menu":"Rij","insertBefore":"Voeg rij in voor","insertAfter":"Voeg rij in na","deleteRow":"Rijen verwijderen"},"rows":"Rijen","summary":"Samenvatting","title":"Tabeleigenschappen","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"eenheid breedte"},"contextmenu":{"options":"Contextmenu opties"},"toolbar":{"toolbarCollapse":"Werkbalk inklappen","toolbarExpand":"Werkbalk uitklappen","toolbarGroups":{"document":"Document","clipboard":"Klembord/Ongedaan maken","editing":"Bewerken","forms":"Formulieren","basicstyles":"Basisstijlen","paragraph":"Paragraaf","links":"Links","insert":"Invoegen","styles":"Stijlen","colors":"Kleuren","tools":"Toepassingen"},"toolbars":"Werkbalken"},"undo":{"redo":"Opnieuw uitvoeren","undo":"Ongedaan maken"},"justify":{"block":"Uitvullen","center":"Centreren","left":"Links uitlijnen","right":"Rechts uitlijnen"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/no.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/no.js new file mode 100755 index 0000000000..7158288834 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/no.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['no']={"editor":"Rikteksteditor","editorPanel":"Panel for rikteksteditor","common":{"editorHelp":"Trykk ALT 0 for hjelp","browseServer":"Bla igjennom server","url":"URL","protocol":"Protokoll","upload":"Last opp","uploadSubmit":"Send det til serveren","image":"Bilde","flash":"Flash","form":"Skjema","checkbox":"Avmerkingsboks","radio":"Alternativknapp","textField":"Tekstboks","textarea":"Tekstområde","hiddenField":"Skjult felt","button":"Knapp","select":"Rullegardinliste","imageButton":"Bildeknapp","notSet":"<ikke satt>","id":"Id","name":"Navn","langDir":"Språkretning","langDirLtr":"Venstre til høyre (VTH)","langDirRtl":"Høyre til venstre (HTV)","langCode":"Språkkode","longDescr":"Utvidet beskrivelse","cssClass":"Stilarkklasser","advisoryTitle":"Tittel","cssStyle":"Stil","ok":"OK","cancel":"Avbryt","close":"Lukk","preview":"Forhåndsvis","resize":"Dra for å skalere","generalTab":"Generelt","advancedTab":"Avansert","validateNumberFailed":"Denne verdien er ikke et tall.","confirmNewPage":"Alle ulagrede endringer som er gjort i dette innholdet vil bli tapt. Er du sikker på at du vil laste en ny side?","confirmCancel":"Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?","options":"Valg","target":"Mål","targetNew":"Nytt vindu (_blank)","targetTop":"Hele vindu (_top)","targetSelf":"Samme vindu (_self)","targetParent":"Foreldrevindu (_parent)","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","styles":"Stil","cssClasses":"Stilarkklasser","width":"Bredde","height":"Høyde","align":"Juster","alignLeft":"Venstre","alignRight":"Høyre","alignCenter":"Midtjuster","alignJustify":"Blokkjuster","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","alignNone":"Ingen","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidCssLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig CSS-målingsenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig HTML-målingsenhet (px eller %).","invalidInlineStyle":"Verdi angitt for inline stil må bestå av en eller flere sett med formatet \"navn : verdi\", separert med semikolon","cssLengthTooltip":"Skriv inn et tall for en piksel-verdi eller et tall med en gyldig CSS-enhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, utilgjenglig</span>"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"clipboard":{"copy":"Kopier","copyError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snarveien (Ctrl/Cmd+C).","cut":"Klipp ut","cutError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk snarveien (Ctrl/Cmd+X).","paste":"Lim inn","pasteArea":"Innlimingsområde","pasteMsg":"Vennligst lim inn i følgende boks med tastaturet (<STRONG>Ctrl/Cmd+V</STRONG>) og trykk <STRONG>OK</STRONG>.","securityMsg":"Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.","title":"Lim inn"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatisk","bgColorTitle":"Bakgrunnsfarge","colors":{"000":"Svart","800000":"Rødbrun","8B4513":"Salbrun","2F4F4F":"Grønnsvart","008080":"Blågrønn","000080":"Marineblått","4B0082":"Indigo","696969":"Mørk grå","B22222":"Mørkerød","A52A2A":"Brun","DAA520":"Lys brun","006400":"Mørk grønn","40E0D0":"Turkis","0000CD":"Medium blå","800080":"Purpur","808080":"Grå","F00":"Rød","FF8C00":"Mørk oransje","FFD700":"Gull","008000":"Grønn","0FF":"Cyan","00F":"Blå","EE82EE":"Fiolett","A9A9A9":"Svak grå","FFA07A":"Rosa-oransje","FFA500":"Oransje","FFFF00":"Gul","00FF00":"Lime","AFEEEE":"Svak turkis","ADD8E6":"Lys Blå","DDA0DD":"Plomme","D3D3D3":"Lys grå","FFF0F5":"Svak lavendelrosa","FAEBD7":"Antikk-hvit","FFFFE0":"Lys gul","F0FFF0":"Honningmelon","F0FFFF":"Svakt asurblått","F0F8FF":"Svak cyan","E6E6FA":"Lavendel","FFF":"Hvit"},"more":"Flere farger...","panelTitle":"Farger","textColorTitle":"Tekstfarge"},"colordialog":{"clear":"Tøm","highlight":"Merk","options":"Alternativer for farge","selected":"Valgt","title":"Velg farge"},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Størrelse","voiceLabel":"Font Størrelse","panelTitle":"Størrelse"},"label":"Skrift","panelTitle":"Skrift","voiceLabel":"Font"},"format":{"label":"Format","panelTitle":"Avsnittsformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formatert"},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"fakeobjects":{"anchor":"Anker","flash":"Flash-animasjon","hiddenfield":"Skjult felt","iframe":"IFrame","unknown":"Ukjent objekt"},"link":{"acccessKey":"Aksessknapp","advanced":"Avansert","advisoryContentType":"Type","advisoryTitle":"Tittel","anchor":{"toolbar":"Sett inn/Rediger anker","menu":"Egenskaper for anker","title":"Egenskaper for anker","name":"Ankernavn","errorName":"Vennligst skriv inn ankernavnet","remove":"Fjern anker"},"anchorId":"Element etter ID","anchorName":"Anker etter navn","charset":"Lenket tegnsett","cssClasses":"Stilarkklasser","emailAddress":"E-postadresse","emailBody":"Melding","emailSubject":"Meldingsemne","id":"Id","info":"Lenkeinfo","langCode":"Språkkode","langDir":"Språkretning","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","menu":"Rediger lenke","name":"Navn","noAnchors":"(Ingen anker i dokumentet)","noEmail":"Vennligst skriv inn e-postadressen","noUrl":"Vennligst skriv inn lenkens URL","other":"<annen>","popupDependent":"Avhenging (Netscape)","popupFeatures":"Egenskaper for popup-vindu","popupFullScreen":"Fullskjerm (IE)","popupLeft":"Venstre posisjon","popupLocationBar":"Adresselinje","popupMenuBar":"Menylinje","popupResizable":"Skalerbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Verktøylinje","popupTop":"Topp-posisjon","rel":"Relasjon (rel)","selectAnchor":"Velg et anker","styles":"Stil","tabIndex":"Tabindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Målramme","targetPopup":"<popup-vindu>","targetPopupName":"Navn på popup-vindu","title":"Lenke","toAnchor":"Lenke til anker i teksten","toEmail":"E-post","toUrl":"URL","toolbar":"Sett inn/Rediger lenke","type":"Lenketype","unlink":"Fjern lenke","upload":"Last opp"},"list":{"bulletedlist":"Legg til/Fjern punktmerket liste","numberedlist":"Legg til/Fjern nummerert liste"},"magicline":{"title":"Sett inn nytt avsnitt her"},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"pastefromword":{"confirmCleanup":"Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?","error":"Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil","title":"Lim inn fra Word","toolbar":"Lim inn fra Word"},"pastetext":{"button":"Lim inn som ren tekst","title":"Lim inn som ren tekst"},"removeformat":{"toolbar":"Fjern formatering"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"table":{"border":"Rammestørrelse","caption":"Tittel","cell":{"menu":"Celle","insertBefore":"Sett inn celle før","insertAfter":"Sett inn celle etter","deleteCell":"Slett celler","merge":"Slå sammen celler","mergeRight":"Slå sammen høyre","mergeDown":"Slå sammen ned","splitHorizontal":"Del celle horisontalt","splitVertical":"Del celle vertikalt","title":"Celleegenskaper","cellType":"Celletype","rowSpan":"Radspenn","colSpan":"Kolonnespenn","wordWrap":"Tekstbrytning","hAlign":"Horisontal justering","vAlign":"Vertikal justering","alignBaseline":"Grunnlinje","bgColor":"Bakgrunnsfarge","borderColor":"Rammefarge","data":"Data","header":"Overskrift","yes":"Ja","no":"Nei","invalidWidth":"Cellebredde må være et tall.","invalidHeight":"Cellehøyde må være et tall.","invalidRowSpan":"Radspenn må være et heltall.","invalidColSpan":"Kolonnespenn må være et heltall.","chooseColor":"Velg"},"cellPad":"Cellepolstring","cellSpace":"Cellemarg","column":{"menu":"Kolonne","insertBefore":"Sett inn kolonne før","insertAfter":"Sett inn kolonne etter","deleteColumn":"Slett kolonner"},"columns":"Kolonner","deleteTable":"Slett tabell","headers":"Overskrifter","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første rad","invalidBorder":"Rammestørrelse må være et tall.","invalidCellPadding":"Cellepolstring må være et positivt tall.","invalidCellSpacing":"Cellemarg må være et positivt tall.","invalidCols":"Antall kolonner må være et tall større enn 0.","invalidHeight":"Tabellhøyde må være et tall.","invalidRows":"Antall rader må være et tall større enn 0.","invalidWidth":"Tabellbredde må være et tall.","menu":"Egenskaper for tabell","row":{"menu":"Rader","insertBefore":"Sett inn rad før","insertAfter":"Sett inn rad etter","deleteRow":"Slett rader"},"rows":"Rader","summary":"Sammendrag","title":"Egenskaper for tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"piksler","widthUnit":"Bredde-enhet"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"toolbar":{"toolbarCollapse":"Skjul verktøylinje","toolbarExpand":"Vis verktøylinje","toolbarGroups":{"document":"Dokument","clipboard":"Utklippstavle/Angre","editing":"Redigering","forms":"Skjema","basicstyles":"Basisstiler","paragraph":"Avsnitt","links":"Lenker","insert":"Innsetting","styles":"Stiler","colors":"Farger","tools":"Verktøy"},"toolbars":"Verktøylinjer for editor"},"undo":{"redo":"Gjør om","undo":"Angre"},"justify":{"block":"Blokkjuster","center":"Midtstill","left":"Venstrejuster","right":"Høyrejuster"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/pl.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/pl.js new file mode 100755 index 0000000000..277e7997d7 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/pl.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['pl']={"editor":"Edytor tekstu sformatowanego","editorPanel":"Panel edytora tekstu sformatowanego","common":{"editorHelp":"W celu uzyskania pomocy naciśnij ALT 0","browseServer":"Przeglądaj","url":"Adres URL","protocol":"Protokół","upload":"Wyślij","uploadSubmit":"Wyślij","image":"Obrazek","flash":"Flash","form":"Formularz","checkbox":"Pole wyboru (checkbox)","radio":"Przycisk opcji (radio)","textField":"Pole tekstowe","textarea":"Obszar tekstowy","hiddenField":"Pole ukryte","button":"Przycisk","select":"Lista wyboru","imageButton":"Przycisk graficzny","notSet":"<nie ustawiono>","id":"Id","name":"Nazwa","langDir":"Kierunek tekstu","langDirLtr":"Od lewej do prawej (LTR)","langDirRtl":"Od prawej do lewej (RTL)","langCode":"Kod języka","longDescr":"Adres URL długiego opisu","cssClass":"Nazwa klasy CSS","advisoryTitle":"Opis obiektu docelowego","cssStyle":"Styl","ok":"OK","cancel":"Anuluj","close":"Zamknij","preview":"Podgląd","resize":"Przeciągnij, aby zmienić rozmiar","generalTab":"Ogólne","advancedTab":"Zaawansowane","validateNumberFailed":"Ta wartość nie jest liczbą.","confirmNewPage":"Wszystkie niezapisane zmiany zostaną utracone. Czy na pewno wczytać nową stronę?","confirmCancel":"Pewne opcje zostały zmienione. Czy na pewno zamknąć okno dialogowe?","options":"Opcje","target":"Obiekt docelowy","targetNew":"Nowe okno (_blank)","targetTop":"Okno najwyżej w hierarchii (_top)","targetSelf":"To samo okno (_self)","targetParent":"Okno nadrzędne (_parent)","langDirLTR":"Od lewej do prawej (LTR)","langDirRTL":"Od prawej do lewej (RTL)","styles":"Style","cssClasses":"Klasy arkusza stylów","width":"Szerokość","height":"Wysokość","align":"Wyrównaj","alignLeft":"Do lewej","alignRight":"Do prawej","alignCenter":"Do środka","alignJustify":"Wyjustuj","alignTop":"Do góry","alignMiddle":"Do środka","alignBottom":"Do dołu","alignNone":"Brak","invalidValue":"Nieprawidłowa wartość.","invalidHeight":"Wysokość musi być liczbą.","invalidWidth":"Szerokość musi być liczbą.","invalidCssLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości zgodną z CSS (px, %, in, cm, mm, em, ex, pt lub pc).","invalidHtmlLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości zgodną z HTML (px lub %).","invalidInlineStyle":"Wartość podana dla stylu musi składać się z jednej lub większej liczby krotek w formacie \"nazwa : wartość\", rozdzielonych średnikami.","cssLengthTooltip":"Wpisz liczbę dla wartości w pikselach lub liczbę wraz z jednostką długości zgodną z CSS (px, %, in, cm, mm, em, ex, pt lub pc).","unavailable":"%1<span class=\"cke_accessibility\">, niedostępne</span>"},"basicstyles":{"bold":"Pogrubienie","italic":"Kursywa","strike":"Przekreślenie","subscript":"Indeks dolny","superscript":"Indeks górny","underline":"Podkreślenie"},"clipboard":{"copy":"Kopiuj","copyError":"Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+C.","cut":"Wytnij","cutError":"Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+X.","paste":"Wklej","pasteArea":"Obszar wklejania","pasteMsg":"Wklej tekst w poniższym polu, używając skrótu klawiaturowego (<STRONG>Ctrl/Cmd+V</STRONG>), i kliknij <STRONG>OK</STRONG>.","securityMsg":"Zabezpieczenia przeglądarki uniemożliwiają wklejenie danych bezpośrednio do edytora. Proszę ponownie wkleić dane w tym oknie.","title":"Wklej"},"button":{"selectedLabel":"%1 (Wybrany)"},"colorbutton":{"auto":"Automatycznie","bgColorTitle":"Kolor tła","colors":{"000":"Czarny","800000":"Kasztanowy","8B4513":"Czekoladowy","2F4F4F":"Ciemnografitowy","008080":"Morski","000080":"Granatowy","4B0082":"Indygo","696969":"Ciemnoszary","B22222":"Czerwień żelazowa","A52A2A":"Brązowy","DAA520":"Ciemnozłoty","006400":"Ciemnozielony","40E0D0":"Turkusowy","0000CD":"Ciemnoniebieski","800080":"Purpurowy","808080":"Szary","F00":"Czerwony","FF8C00":"Ciemnopomarańczowy","FFD700":"Złoty","008000":"Zielony","0FF":"Cyjan","00F":"Niebieski","EE82EE":"Fioletowy","A9A9A9":"Przygaszony szary","FFA07A":"Łososiowy","FFA500":"Pomarańczowy","FFFF00":"Żółty","00FF00":"Limonkowy","AFEEEE":"Bladoturkusowy","ADD8E6":"Jasnoniebieski","DDA0DD":"Śliwkowy","D3D3D3":"Jasnoszary","FFF0F5":"Jasnolawendowy","FAEBD7":"Kremowobiały","FFFFE0":"Jasnożółty","F0FFF0":"Bladozielony","F0FFFF":"Jasnolazurowy","F0F8FF":"Jasnobłękitny","E6E6FA":"Lawendowy","FFF":"Biały"},"more":"Więcej kolorów...","panelTitle":"Kolory","textColorTitle":"Kolor tekstu"},"colordialog":{"clear":"Wyczyść","highlight":"Zaznacz","options":"Opcje koloru","selected":"Wybrany","title":"Wybierz kolor"},"elementspath":{"eleLabel":"Ścieżka elementów","eleTitle":"element %1"},"font":{"fontSize":{"label":"Rozmiar","voiceLabel":"Rozmiar czcionki","panelTitle":"Rozmiar"},"label":"Czcionka","panelTitle":"Czcionka","voiceLabel":"Czcionka"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adres","tag_div":"Normalny (DIV)","tag_h1":"Nagłówek 1","tag_h2":"Nagłówek 2","tag_h3":"Nagłówek 3","tag_h4":"Nagłówek 4","tag_h5":"Nagłówek 5","tag_h6":"Nagłówek 6","tag_p":"Normalny","tag_pre":"Tekst sformatowany"},"horizontalrule":{"toolbar":"Wstaw poziomą linię"},"indent":{"indent":"Zwiększ wcięcie","outdent":"Zmniejsz wcięcie"},"fakeobjects":{"anchor":"Kotwica","flash":"Animacja Flash","hiddenfield":"Pole ukryte","iframe":"IFrame","unknown":"Nieznany obiekt"},"link":{"acccessKey":"Klawisz dostępu","advanced":"Zaawansowane","advisoryContentType":"Typ MIME obiektu docelowego","advisoryTitle":"Opis obiektu docelowego","anchor":{"toolbar":"Wstaw/edytuj kotwicę","menu":"Właściwości kotwicy","title":"Właściwości kotwicy","name":"Nazwa kotwicy","errorName":"Wpisz nazwę kotwicy","remove":"Usuń kotwicę"},"anchorId":"Wg identyfikatora","anchorName":"Wg nazwy","charset":"Kodowanie znaków obiektu docelowego","cssClasses":"Nazwa klasy CSS","emailAddress":"Adres e-mail","emailBody":"Treść","emailSubject":"Temat","id":"Id","info":"Informacje ","langCode":"Kod języka","langDir":"Kierunek tekstu","langDirLTR":"Od lewej do prawej (LTR)","langDirRTL":"Od prawej do lewej (RTL)","menu":"Edytuj odnośnik","name":"Nazwa","noAnchors":"(W dokumencie nie zdefiniowano żadnych kotwic)","noEmail":"Podaj adres e-mail","noUrl":"Podaj adres URL","other":"<inny>","popupDependent":"Okno zależne (Netscape)","popupFeatures":"Właściwości wyskakującego okna","popupFullScreen":"Pełny ekran (IE)","popupLeft":"Pozycja w poziomie","popupLocationBar":"Pasek adresu","popupMenuBar":"Pasek menu","popupResizable":"Skalowalny","popupScrollBars":"Paski przewijania","popupStatusBar":"Pasek statusu","popupToolbar":"Pasek narzędzi","popupTop":"Pozycja w pionie","rel":"Relacja","selectAnchor":"Wybierz kotwicę","styles":"Styl","tabIndex":"Indeks kolejności","target":"Obiekt docelowy","targetFrame":"<ramka>","targetFrameName":"Nazwa ramki docelowej","targetPopup":"<wyskakujące okno>","targetPopupName":"Nazwa wyskakującego okna","title":"Odnośnik","toAnchor":"Odnośnik wewnątrz strony (kotwica)","toEmail":"Adres e-mail","toUrl":"Adres URL","toolbar":"Wstaw/edytuj odnośnik","type":"Typ odnośnika","unlink":"Usuń odnośnik","upload":"Wyślij"},"list":{"bulletedlist":"Lista wypunktowana","numberedlist":"Lista numerowana"},"magicline":{"title":"Wstaw nowy akapit"},"maximize":{"maximize":"Maksymalizuj","minimize":"Minimalizuj"},"pastefromword":{"confirmCleanup":"Tekst, który chcesz wkleić, prawdopodobnie pochodzi z programu Microsoft Word. Czy chcesz go wyczyścić przed wklejeniem?","error":"Wyczyszczenie wklejonych danych nie było możliwe z powodu wystąpienia błędu.","title":"Wklej z programu MS Word","toolbar":"Wklej z programu MS Word"},"pastetext":{"button":"Wklej jako czysty tekst","title":"Wklej jako czysty tekst"},"removeformat":{"toolbar":"Usuń formatowanie"},"specialchar":{"options":"Opcje znaków specjalnych","title":"Wybierz znak specjalny","toolbar":"Wstaw znak specjalny"},"stylescombo":{"label":"Styl","panelTitle":"Style formatujące","panelTitle1":"Style blokowe","panelTitle2":"Style liniowe","panelTitle3":"Style obiektowe"},"table":{"border":"Grubość obramowania","caption":"Tytuł","cell":{"menu":"Komórka","insertBefore":"Wstaw komórkę z lewej","insertAfter":"Wstaw komórkę z prawej","deleteCell":"Usuń komórki","merge":"Połącz komórki","mergeRight":"Połącz z komórką z prawej","mergeDown":"Połącz z komórką poniżej","splitHorizontal":"Podziel komórkę poziomo","splitVertical":"Podziel komórkę pionowo","title":"Właściwości komórki","cellType":"Typ komórki","rowSpan":"Scalenie wierszy","colSpan":"Scalenie komórek","wordWrap":"Zawijanie słów","hAlign":"Wyrównanie poziome","vAlign":"Wyrównanie pionowe","alignBaseline":"Linia bazowa","bgColor":"Kolor tła","borderColor":"Kolor obramowania","data":"Dane","header":"Nagłówek","yes":"Tak","no":"Nie","invalidWidth":"Szerokość komórki musi być liczbą.","invalidHeight":"Wysokość komórki musi być liczbą.","invalidRowSpan":"Scalenie wierszy musi być liczbą całkowitą.","invalidColSpan":"Scalenie komórek musi być liczbą całkowitą.","chooseColor":"Wybierz"},"cellPad":"Dopełnienie komórek","cellSpace":"Odstęp pomiędzy komórkami","column":{"menu":"Kolumna","insertBefore":"Wstaw kolumnę z lewej","insertAfter":"Wstaw kolumnę z prawej","deleteColumn":"Usuń kolumny"},"columns":"Liczba kolumn","deleteTable":"Usuń tabelę","headers":"Nagłówki","headersBoth":"Oba","headersColumn":"Pierwsza kolumna","headersNone":"Brak","headersRow":"Pierwszy wiersz","invalidBorder":"Wartość obramowania musi być liczbą.","invalidCellPadding":"Dopełnienie komórek musi być liczbą dodatnią.","invalidCellSpacing":"Odstęp pomiędzy komórkami musi być liczbą dodatnią.","invalidCols":"Liczba kolumn musi być większa niż 0.","invalidHeight":"Wysokość tabeli musi być liczbą.","invalidRows":"Liczba wierszy musi być większa niż 0.","invalidWidth":"Szerokość tabeli musi być liczbą.","menu":"Właściwości tabeli","row":{"menu":"Wiersz","insertBefore":"Wstaw wiersz powyżej","insertAfter":"Wstaw wiersz poniżej","deleteRow":"Usuń wiersze"},"rows":"Liczba wierszy","summary":"Podsumowanie","title":"Właściwości tabeli","toolbar":"Tabela","widthPc":"%","widthPx":"piksele","widthUnit":"jednostka szerokości"},"contextmenu":{"options":"Opcje menu kontekstowego"},"toolbar":{"toolbarCollapse":"Zwiń pasek narzędzi","toolbarExpand":"Rozwiń pasek narzędzi","toolbarGroups":{"document":"Dokument","clipboard":"Schowek/Wstecz","editing":"Edycja","forms":"Formularze","basicstyles":"Style podstawowe","paragraph":"Akapit","links":"Hiperłącza","insert":"Wstawianie","styles":"Style","colors":"Kolory","tools":"Narzędzia"},"toolbars":"Paski narzędzi edytora"},"undo":{"redo":"Ponów","undo":"Cofnij"},"justify":{"block":"Wyjustuj","center":"Wyśrodkuj","left":"Wyrównaj do lewej","right":"Wyrównaj do prawej"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/pt-br.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/pt-br.js new file mode 100755 index 0000000000..ab702ddcd7 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/pt-br.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['pt-br']={"editor":"Editor de Rich Text","editorPanel":"Painel do editor de Rich Text","common":{"editorHelp":"Pressione ALT+0 para ajuda","browseServer":"Localizar no Servidor","url":"URL","protocol":"Protocolo","upload":"Enviar ao Servidor","uploadSubmit":"Enviar para o Servidor","image":"Imagem","flash":"Flash","form":"Formulário","checkbox":"Caixa de Seleção","radio":"Botão de Opção","textField":"Caixa de Texto","textarea":"Área de Texto","hiddenField":"Campo Oculto","button":"Botão","select":"Caixa de Listagem","imageButton":"Botão de Imagem","notSet":"<não ajustado>","id":"Id","name":"Nome","langDir":"Direção do idioma","langDirLtr":"Esquerda para Direita (LTR)","langDirRtl":"Direita para Esquerda (RTL)","langCode":"Idioma","longDescr":"Descrição da URL","cssClass":"Classe de CSS","advisoryTitle":"Título","cssStyle":"Estilos","ok":"OK","cancel":"Cancelar","close":"Fechar","preview":"Visualizar","resize":"Arraste para redimensionar","generalTab":"Geral","advancedTab":"Avançado","validateNumberFailed":"Este valor não é um número.","confirmNewPage":"Todas as mudanças não salvas serão perdidas. Tem certeza de que quer abrir uma nova página?","confirmCancel":"Algumas opções foram alteradas. Tem certeza de que quer fechar a caixa de diálogo?","options":"Opções","target":"Destino","targetNew":"Nova Janela (_blank)","targetTop":"Janela de Cima (_top)","targetSelf":"Mesma Janela (_self)","targetParent":"Janela Pai (_parent)","langDirLTR":"Esquerda para Direita (LTR)","langDirRTL":"Direita para Esquerda (RTL)","styles":"Estilo","cssClasses":"Classes","width":"Largura","height":"Altura","align":"Alinhamento","alignLeft":"Esquerda","alignRight":"Direita","alignCenter":"Centralizado","alignJustify":"Justificar","alignTop":"Superior","alignMiddle":"Centralizado","alignBottom":"Inferior","alignNone":"Nenhum","invalidValue":"Valor inválido.","invalidHeight":"A altura tem que ser um número","invalidWidth":"A largura tem que ser um número.","invalidCssLength":"O valor do campo \"%1\" deve ser um número positivo opcionalmente seguido por uma válida unidade de medida de CSS (px, %, in, cm, mm, em, ex, pt ou pc).","invalidHtmlLength":"O valor do campo \"%1\" deve ser um número positivo opcionalmente seguido por uma válida unidade de medida de HTML (px ou %).","invalidInlineStyle":"O valor válido para estilo deve conter uma ou mais tuplas no formato \"nome : valor\", separados por ponto e vírgula.","cssLengthTooltip":"Insira um número para valor em pixels ou um número seguido de uma válida unidade de medida de CSS (px, %, in, cm, mm, em, ex, pt ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Tachado","subscript":"Subscrito","superscript":"Sobrescrito","underline":"Sublinhado"},"clipboard":{"copy":"Copiar","copyError":"As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl/Cmd+C).","cut":"Recortar","cutError":"As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl/Cmd+X).","paste":"Colar","pasteArea":"Área para Colar","pasteMsg":"Transfira o link usado na caixa usando o teclado com (<STRONG>Ctrl/Cmd+V</STRONG>) e <STRONG>OK</STRONG>.","securityMsg":"As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo manualmente nesta janela.","title":"Colar"},"button":{"selectedLabel":"%1 (Selecionado)"},"colorbutton":{"auto":"Automático","bgColorTitle":"Cor do Plano de Fundo","colors":{"000":"Preto","800000":"Foquete","8B4513":"Marrom 1","2F4F4F":"Cinza 1","008080":"Cerceta","000080":"Azul Marinho","4B0082":"Índigo","696969":"Cinza 2","B22222":"Tijolo de Fogo","A52A2A":"Marrom 2","DAA520":"Vara Dourada","006400":"Verde Escuro","40E0D0":"Turquesa","0000CD":"Azul Médio","800080":"Roxo","808080":"Cinza 3","F00":"Vermelho","FF8C00":"Laranja Escuro","FFD700":"Dourado","008000":"Verde","0FF":"Ciano","00F":"Azul","EE82EE":"Violeta","A9A9A9":"Cinza Escuro","FFA07A":"Salmão Claro","FFA500":"Laranja","FFFF00":"Amarelo","00FF00":"Lima","AFEEEE":"Turquesa Pálido","ADD8E6":"Azul Claro","DDA0DD":"Ameixa","D3D3D3":"Cinza Claro","FFF0F5":"Lavanda 1","FAEBD7":"Branco Antiguidade","FFFFE0":"Amarelo Claro","F0FFF0":"Orvalho","F0FFFF":"Azure","F0F8FF":"Azul Alice","E6E6FA":"Lavanda 2","FFF":"Branco"},"more":"Mais Cores...","panelTitle":"Cores","textColorTitle":"Cor do Texto"},"colordialog":{"clear":"Limpar","highlight":"Grifar","options":"Opções de Cor","selected":"Cor Selecionada","title":"Selecione uma Cor"},"elementspath":{"eleLabel":"Caminho dos Elementos","eleTitle":"Elemento %1"},"font":{"fontSize":{"label":"Tamanho","voiceLabel":"Tamanho da fonte","panelTitle":"Tamanho"},"label":"Fonte","panelTitle":"Fonte","voiceLabel":"Fonte"},"format":{"label":"Formatação","panelTitle":"Formatação","tag_address":"Endereço","tag_div":"Normal (DIV)","tag_h1":"Título 1","tag_h2":"Título 2","tag_h3":"Título 3","tag_h4":"Título 4","tag_h5":"Título 5","tag_h6":"Título 6","tag_p":"Normal","tag_pre":"Formatado"},"horizontalrule":{"toolbar":"Inserir Linha Horizontal"},"indent":{"indent":"Aumentar Recuo","outdent":"Diminuir Recuo"},"fakeobjects":{"anchor":"Âncora","flash":"Animação em Flash","hiddenfield":"Campo Oculto","iframe":"IFrame","unknown":"Objeto desconhecido"},"link":{"acccessKey":"Chave de Acesso","advanced":"Avançado","advisoryContentType":"Tipo de Conteúdo","advisoryTitle":"Título","anchor":{"toolbar":"Inserir/Editar Âncora","menu":"Formatar Âncora","title":"Formatar Âncora","name":"Nome da Âncora","errorName":"Por favor, digite o nome da âncora","remove":"Remover Âncora"},"anchorId":"Id da âncora","anchorName":"Nome da âncora","charset":"Charset do Link","cssClasses":"Classe de CSS","emailAddress":"Endereço E-Mail","emailBody":"Corpo da Mensagem","emailSubject":"Assunto da Mensagem","id":"Id","info":"Informações","langCode":"Direção do idioma","langDir":"Direção do idioma","langDirLTR":"Esquerda para Direita (LTR)","langDirRTL":"Direita para Esquerda (RTL)","menu":"Editar Link","name":"Nome","noAnchors":"(Não há âncoras no documento)","noEmail":"Por favor, digite o endereço de e-mail","noUrl":"Por favor, digite o endereço do Link","other":"<outro>","popupDependent":"Dependente (Netscape)","popupFeatures":"Propriedades da Janela Pop-up","popupFullScreen":"Modo Tela Cheia (IE)","popupLeft":"Esquerda","popupLocationBar":"Barra de Endereços","popupMenuBar":"Barra de Menus","popupResizable":"Redimensionável","popupScrollBars":"Barras de Rolagem","popupStatusBar":"Barra de Status","popupToolbar":"Barra de Ferramentas","popupTop":"Topo","rel":"Tipo de Relação","selectAnchor":"Selecione uma âncora","styles":"Estilos","tabIndex":"Índice de Tabulação","target":"Destino","targetFrame":"<frame>","targetFrameName":"Nome do Frame de Destino","targetPopup":"<janela popup>","targetPopupName":"Nome da Janela Pop-up","title":"Editar Link","toAnchor":"Âncora nesta página","toEmail":"E-Mail","toUrl":"URL","toolbar":"Inserir/Editar Link","type":"Tipo de hiperlink","unlink":"Remover Link","upload":"Enviar ao Servidor"},"list":{"bulletedlist":"Lista sem números","numberedlist":"Lista numerada"},"magicline":{"title":"Insera um parágrafo aqui"},"maximize":{"maximize":"Maximizar","minimize":"Minimize"},"pastefromword":{"confirmCleanup":"O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?","error":"Não foi possível limpar os dados colados devido a um erro interno","title":"Colar do Word","toolbar":"Colar do Word"},"pastetext":{"button":"Colar como Texto sem Formatação","title":"Colar como Texto sem Formatação"},"removeformat":{"toolbar":"Remover Formatação"},"specialchar":{"options":"Opções de Caractere Especial","title":"Selecione um Caractere Especial","toolbar":"Inserir Caractere Especial"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos de Formatação","panelTitle1":"Estilos de bloco","panelTitle2":"Estilos de texto corrido","panelTitle3":"Estilos de objeto"},"table":{"border":"Borda","caption":"Legenda","cell":{"menu":"Célula","insertBefore":"Inserir célula a esquerda","insertAfter":"Inserir célula a direita","deleteCell":"Remover Células","merge":"Mesclar Células","mergeRight":"Mesclar com célula a direita","mergeDown":"Mesclar com célula abaixo","splitHorizontal":"Dividir célula horizontalmente","splitVertical":"Dividir célula verticalmente","title":"Propriedades da célula","cellType":"Tipo de célula","rowSpan":"Linhas cobertas","colSpan":"Colunas cobertas","wordWrap":"Quebra de palavra","hAlign":"Alinhamento horizontal","vAlign":"Alinhamento vertical","alignBaseline":"Patamar de alinhamento","bgColor":"Cor de fundo","borderColor":"Cor das bordas","data":"Dados","header":"Cabeçalho","yes":"Sim","no":"Não","invalidWidth":"A largura da célula tem que ser um número.","invalidHeight":"A altura da célula tem que ser um número.","invalidRowSpan":"Linhas cobertas tem que ser um número inteiro.","invalidColSpan":"Colunas cobertas tem que ser um número inteiro.","chooseColor":"Escolher"},"cellPad":"Margem interna","cellSpace":"Espaçamento","column":{"menu":"Coluna","insertBefore":"Inserir coluna a esquerda","insertAfter":"Inserir coluna a direita","deleteColumn":"Remover Colunas"},"columns":"Colunas","deleteTable":"Apagar Tabela","headers":"Cabeçalho","headersBoth":"Ambos","headersColumn":"Primeira coluna","headersNone":"Nenhum","headersRow":"Primeira linha","invalidBorder":"O tamanho da borda tem que ser um número.","invalidCellPadding":"A margem interna das células tem que ser um número.","invalidCellSpacing":"O espaçamento das células tem que ser um número.","invalidCols":"O número de colunas tem que ser um número maior que 0.","invalidHeight":"A altura da tabela tem que ser um número.","invalidRows":"O número de linhas tem que ser um número maior que 0.","invalidWidth":"A largura da tabela tem que ser um número.","menu":"Formatar Tabela","row":{"menu":"Linha","insertBefore":"Inserir linha acima","insertAfter":"Inserir linha abaixo","deleteRow":"Remover Linhas"},"rows":"Linhas","summary":"Resumo","title":"Formatar Tabela","toolbar":"Tabela","widthPc":"%","widthPx":"pixels","widthUnit":"unidade largura"},"contextmenu":{"options":"Opções Menu de Contexto"},"toolbar":{"toolbarCollapse":"Diminuir Barra de Ferramentas","toolbarExpand":"Aumentar Barra de Ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Clipboard/Desfazer","editing":"Edição","forms":"Formulários","basicstyles":"Estilos Básicos","paragraph":"Paragrafo","links":"Links","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Barra de Ferramentas do Editor"},"undo":{"redo":"Refazer","undo":"Desfazer"},"justify":{"block":"Justificado","center":"Centralizar","left":"Alinhar Esquerda","right":"Alinhar Direita"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/pt.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/pt.js new file mode 100755 index 0000000000..541f62b38b --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/pt.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['pt']={"editor":"Editor de texto enriquecido","editorPanel":"Painel do editor de texto enriquecido","common":{"editorHelp":"Pressione ALT+0 para ajuda","browseServer":"Navegar no servidor","url":"URL","protocol":"Protocolo","upload":"Enviar","uploadSubmit":"Enviar para o servidor","image":"Imagem","flash":"Flash","form":"Formulário","checkbox":"Caixa de Seleção","radio":"Botão","textField":"Campo do Texto","textarea":"Área do Texto","hiddenField":"Campo oculto","button":"Botão","select":"Campo da Seleção","imageButton":"Botão da Imagem","notSet":"<Não definido>","id":"Id.","name":"Nome","langDir":"Direção do Idioma","langDirLtr":"Esquerda para a Direita (EPD)","langDirRtl":"Direita para a Esquerda (DPE)","langCode":"Código do Idioma","longDescr":"Descrição Completa do URL","cssClass":"Classes de Estilo das Folhas","advisoryTitle":"Título Consultivo","cssStyle":"Estilo","ok":"CONFIRMAR","cancel":"Cancelar","close":"Fechar","preview":"Pré-visualização","resize":"Redimensionar","generalTab":"Geral","advancedTab":"Avançado","validateNumberFailed":"Este valor não é um numero.","confirmNewPage":"Irão ser perdidas quaisquer alterações não guardadas. Tem a certeza que deseja carregar a nova página?","confirmCancel":"Foram alteradas algumas das opções. Tem a certeza que deseja fechar a janela?","options":"Opções","target":"Destino","targetNew":"Nova Janela (_blank)","targetTop":"Janela Superior (_top)","targetSelf":"Mesma Janela (_self)","targetParent":"Janela Parente (_parent)","langDirLTR":"Esquerda para a Direita (EPD)","langDirRTL":"Direita para a Esquerda (DPE)","styles":"Estilo","cssClasses":"Classes de folhas de estilo","width":"Largura","height":"Altura","align":"Alinhamento","alignLeft":"Esquerda","alignRight":"Direita","alignCenter":"Centrado","alignJustify":"Justificado","alignTop":"Topo","alignMiddle":"Centro","alignBottom":"Base","alignNone":"Nenhum","invalidValue":"Valor inválido.","invalidHeight":"A altura deve ser um número.","invalidWidth":"A largura deve ser um número. ","invalidCssLength":"O valor especificado para o campo \"1%\" deve ser um número positivo, com ou sem uma unidade de medida CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo \"1%\" deve ser um número positivo, com ou sem uma unidade de medida HTML válida (px ou %).","invalidInlineStyle":"O valor especificado para o estilo em linha deve constituir um ou mais conjuntos de valores com o formato de \"nome : valor\", separados por ponto e vírgula.","cssLengthTooltip":"Insira um número para um valor em pontos ou um número com uma unidade CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Rasurado","subscript":"Superior à linha","superscript":"Inferior à Linha","underline":"Sublinhado"},"clipboard":{"copy":"Copiar","copyError":"A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl/Cmd+X).","paste":"Colar","pasteArea":"Colar área","pasteMsg":"Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e prima <STRONG>OK</STRONG>.","securityMsg":"Devido ás definições de segurança do teu browser, o editor não pode aceder ao clipboard diretamente. É necessário que voltes a colar as informações nesta janela.","title":"Colar"},"button":{"selectedLabel":"%1 (Selecionado)"},"colorbutton":{"auto":"Automático","bgColorTitle":"Cor de Fundo","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Cinza claro","FFF0F5":"Lavender Blush","FAEBD7":"Branco velho","FFFFE0":"Amarelo claro","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"Branco"},"more":"Mais cores...","panelTitle":"Cores","textColorTitle":"Cor do texto"},"colordialog":{"clear":"Limpar","highlight":"Realçar","options":"Opções de cor","selected":"Cor selecionada","title":"Selecionar cor"},"elementspath":{"eleLabel":"Caminho dos elementos","eleTitle":"Elemento %1"},"font":{"fontSize":{"label":"Tamanho","voiceLabel":"Tamanho da letra","panelTitle":"Tamanho da letra"},"label":"Fonte","panelTitle":"Nome do Tipo de Letra","voiceLabel":"Tipo de Letra"},"format":{"label":"Formatar","panelTitle":"Formatar Parágrafo","tag_address":"Endereço","tag_div":"Normal (DIV)","tag_h1":"Título 1","tag_h2":"Título 2","tag_h3":"Título 3","tag_h4":"Título 4","tag_h5":"Título 5","tag_h6":"Título 6","tag_p":"Normal","tag_pre":"Formatado"},"horizontalrule":{"toolbar":"Inserir Linha Horizontal"},"indent":{"indent":"Aumentar Avanço","outdent":"Diminuir Avanço"},"fakeobjects":{"anchor":" Inserir/Editar Âncora","flash":"Animação Flash","hiddenfield":"Campo oculto","iframe":"IFrame","unknown":"Objeto Desconhecido"},"link":{"acccessKey":"Chave de Acesso","advanced":"Avançado","advisoryContentType":"Tipo de Conteúdo","advisoryTitle":"Título","anchor":{"toolbar":" Inserir/Editar Âncora","menu":"Propriedades da Âncora","title":"Propriedades da Âncora","name":"Nome da Âncora","errorName":"Por favor, introduza o nome da âncora","remove":"Remove Anchor"},"anchorId":"Por ID de elemento","anchorName":"Por Nome de Referência","charset":"Fonte de caracteres vinculado","cssClasses":"Classes de Estilo de Folhas Classes","emailAddress":"Endereço de E-Mail","emailBody":"Corpo da Mensagem","emailSubject":"Título de Mensagem","id":"ID","info":"Informação de Hiperligação","langCode":"Orientação de idioma","langDir":"Orientação de idioma","langDirLTR":"Esquerda à Direita (LTR)","langDirRTL":"Direita a Esquerda (RTL)","menu":"Editar Hiperligação","name":"Nome","noAnchors":"(Não há referências disponíveis no documento)","noEmail":"Por favor introduza o endereço de e-mail","noUrl":"Por favor introduza a hiperligação URL","other":"<outro>","popupDependent":"Dependente (Netscape)","popupFeatures":"Características de Janela de Popup","popupFullScreen":"Janela Completa (IE)","popupLeft":"Posição Esquerda","popupLocationBar":"Barra de localização","popupMenuBar":"Barra de Menu","popupResizable":"Redimensionável","popupScrollBars":"Barras de deslocamento","popupStatusBar":"Barra de Estado","popupToolbar":"Barra de ferramentas","popupTop":"Posição Direita","rel":"Relação","selectAnchor":"Seleccionar una referência","styles":"Estilo","tabIndex":"Índice de tabulação","target":"Alvo","targetFrame":"<frame>","targetFrameName":"Nome do Frame Destino","targetPopup":"<janela de popup>","targetPopupName":"Nome da Janela de Popup","title":"Hiperligação","toAnchor":"Referência a esta página","toEmail":"Email","toUrl":"URL","toolbar":"Inserir/Editar Hiperligação","type":"Tipo de Hiperligação","unlink":"Eliminar Hiperligação","upload":"Carregar"},"list":{"bulletedlist":"Marcas","numberedlist":"Numeração"},"magicline":{"title":"Insira aqui o parágrafo"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"pastefromword":{"confirmCleanup":"O texto que pretende colar parece ter sido copiado do Word. Deseja limpá-lo antes de colar?","error":"Não foi possivel limpar a informação colada decido a um erro interno.","title":"Colar do Word","toolbar":"Colar do Word"},"pastetext":{"button":"Colar como Texto Simples","title":"Colar como Texto Simples"},"removeformat":{"toolbar":"Eliminar Formato"},"specialchar":{"options":"Opções de caracteres especiais","title":"Selecione um caracter especial","toolbar":"Inserir carácter especial"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de Formatação","panelTitle1":"Estilos de bloco","panelTitle2":"Estilos de Linha","panelTitle3":"Estilos de Objeto"},"table":{"border":"Tamanho do contorno","caption":"Legenda","cell":{"menu":"Célula","insertBefore":"Inserir célula antes","insertAfter":"Inserir célula depois","deleteCell":"Apagar Células","merge":"Unir Células","mergeRight":"Unir à Direita","mergeDown":"Fundir abaixo","splitHorizontal":"Dividir célula horizontalmente","splitVertical":"Dividir célula verticalmente","title":"Propriedades da célula","cellType":"Tipo de célula","rowSpan":"Filas na Célula","colSpan":"Colunas na Célula","wordWrap":"Moldar texto","hAlign":"Alinhamento Horizontal","vAlign":"Alinhamento Vertical","alignBaseline":"Base","bgColor":"Cor de Fundo","borderColor":"Cor da Margem","data":"Dados","header":"Cabeçalho","yes":"Sim","no":"Não","invalidWidth":"A largura da célula deve ser um número.","invalidHeight":"A altura da célula deve ser um número.","invalidRowSpan":"As filas da célula deve ter um número inteiro.","invalidColSpan":"As colunas da célula deve ter um número inteiro.","chooseColor":"Escolher"},"cellPad":"Espaço interior","cellSpace":"Espaçamento de célula","column":{"menu":"Coluna","insertBefore":"Inserir Coluna Antes","insertAfter":"Inserir coluna depois","deleteColumn":"Apagar colunas"},"columns":"Colunas","deleteTable":"Apagar tabela","headers":"Cabeçalhos","headersBoth":"Ambos","headersColumn":"Primeira coluna","headersNone":"Nenhum","headersRow":"Primeira linha","invalidBorder":"O tamanho da margem tem de ser um número.","invalidCellPadding":"A criação do espaço na célula deve ser um número positivo.","invalidCellSpacing":"O espaçamento da célula deve ser um número positivo.","invalidCols":"O número de colunas tem de ser um número maior que 0.","invalidHeight":"A altura da tabela tem de ser um número.","invalidRows":"O número de linhas tem de ser maior que 0.","invalidWidth":"A largura da tabela tem de ser um número.","menu":"Propriedades da Tabela","row":{"menu":"Linha","insertBefore":"Inserir linha antes","insertAfter":"Inserir linha depois","deleteRow":"Apagar linhas"},"rows":"Linhas","summary":"Sumário","title":"Propriedades da Tabela","toolbar":"Tabela","widthPc":"percentagem","widthPx":"pontos","widthUnit":"unidade da largura"},"contextmenu":{"options":"Menu de opções de contexto"},"toolbar":{"toolbarCollapse":"Ocultar barra de ferramentas","toolbarExpand":"Expandir barra de ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Área de transferência/Anular","editing":"Edição","forms":"Formulários","basicstyles":"Estilos Básicos","paragraph":"Parágrafo","links":"Hiperligações","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Editor de Barras de Ferramentas"},"undo":{"redo":"Refazer","undo":"Anular"},"justify":{"block":"Justificado","center":"Alinhar ao Centro","left":"Alinhar à esquerda","right":"Alinhar à direita"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/ro.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/ro.js new file mode 100755 index 0000000000..f189077e2f --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/ro.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['ro']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Apasă ALT 0 pentru ajutor","browseServer":"Răsfoieşte server","url":"URL","protocol":"Protocol","upload":"Încarcă","uploadSubmit":"Trimite la server","image":"Imagine","flash":"Flash","form":"Formular (Form)","checkbox":"Bifă (Checkbox)","radio":"Buton radio (RadioButton)","textField":"Câmp text (TextField)","textarea":"Suprafaţă text (Textarea)","hiddenField":"Câmp ascuns (HiddenField)","button":"Buton","select":"Câmp selecţie (SelectionField)","imageButton":"Buton imagine (ImageButton)","notSet":"<nesetat>","id":"Id","name":"Nume","langDir":"Direcţia cuvintelor","langDirLtr":"stânga-dreapta (LTR)","langDirRtl":"dreapta-stânga (RTL)","langCode":"Codul limbii","longDescr":"Descrierea lungă URL","cssClass":"Clasele cu stilul paginii (CSS)","advisoryTitle":"Titlul consultativ","cssStyle":"Stil","ok":"OK","cancel":"Anulare","close":"Închide","preview":"Previzualizare","resize":"Trage pentru a redimensiona","generalTab":"General","advancedTab":"Avansat","validateNumberFailed":"Această valoare nu este un număr.","confirmNewPage":"Orice modificări nesalvate ale acestui conținut, vor fi pierdute. Sigur doriți încărcarea unei noi pagini?","confirmCancel":"Câteva opțiuni au fost schimbate. Sigur doriți să închideți dialogul?","options":"Opțiuni","target":"Țintă","targetNew":"Fereastră nouă (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"În aceeași fereastră (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Stânga spre Dreapta (LTR)","langDirRTL":"Dreapta spre Stânga (RTL)","styles":"Stil","cssClasses":"Stylesheet Classes","width":"Lăţime","height":"Înălţime","align":"Aliniere","alignLeft":"Mărește Bara","alignRight":"Dreapta","alignCenter":"Centru","alignJustify":"Aliniere în bloc (Block Justify)","alignTop":"Sus","alignMiddle":"Mijloc","alignBottom":"Jos","alignNone":"None","invalidValue":"Valoare invalidă","invalidHeight":"Înălțimea trebuie să fie un număr.","invalidWidth":"Lățimea trebuie să fie un număr.","invalidCssLength":"Valoarea specificată pentru câmpul \"%1\" trebuie să fie un număr pozitiv cu sau fără o unitate de măsură CSS (px, %, in, cm, mm, em, ex, pt, sau pc).","invalidHtmlLength":"Valoarea specificată pentru câmpul \"%1\" trebuie să fie un număr pozitiv cu sau fără o unitate de măsură HTML (px sau %).","invalidInlineStyle":"Valoarea specificată pentru stil trebuie să conțină una sau mai multe construcții de tipul \"name : value\", separate prin punct și virgulă.","cssLengthTooltip":"Introduceți un număr în pixeli sau un număr cu o unitate de măsură CSS (px, %, in, cm, mm, em, ex, pt, sau pc).","unavailable":"%1<span class=\"cke_accessibility\">, nu este disponibil</span>"},"basicstyles":{"bold":"Îngroşat (bold)","italic":"Înclinat (italic)","strike":"Tăiat (strike through)","subscript":"Indice (subscript)","superscript":"Putere (superscript)","underline":"Subliniat (underline)"},"clipboard":{"copy":"Copiază","copyError":"Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de copiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+C).","cut":"Taie","cutError":"Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de tăiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+X).","paste":"Adaugă","pasteArea":"Suprafața de adăugare","pasteMsg":"Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (<strong>Ctrl/Cmd+V</strong>) şi apăsaţi OK","securityMsg":"Din cauza setărilor de securitate ale programului dvs. cu care navigaţi pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui să adăugaţi din nou datele în această fereastră.","title":"Adaugă"},"button":{"selectedLabel":"%1 (Selectat)"},"colorbutton":{"auto":"Automatic","bgColorTitle":"Coloarea fundalului","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Mai multe culori...","panelTitle":"Colors","textColorTitle":"Culoarea textului"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"elementspath":{"eleLabel":"Calea elementelor","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Mărime","voiceLabel":"Font Size","panelTitle":"Mărime"},"label":"Font","panelTitle":"Font","voiceLabel":"Font"},"format":{"label":"Formatare","panelTitle":"Formatare","tag_address":"Adresă","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatat"},"horizontalrule":{"toolbar":"Inserează linie orizontală"},"indent":{"indent":"Creşte indentarea","outdent":"Scade indentarea"},"fakeobjects":{"anchor":"Inserează/Editează ancoră","flash":"Flash Animation","hiddenfield":"Câmp ascuns (HiddenField)","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Tasta de acces","advanced":"Avansat","advisoryContentType":"Tipul consultativ al titlului","advisoryTitle":"Titlul consultativ","anchor":{"toolbar":"Inserează/Editează ancoră","menu":"Proprietăţi ancoră","title":"Proprietăţi ancoră","name":"Numele ancorei","errorName":"Vă rugăm scrieţi numele ancorei","remove":"Elimină ancora"},"anchorId":"după Id-ul elementului","anchorName":"după numele ancorei","charset":"Setul de caractere al resursei legate","cssClasses":"Clasele cu stilul paginii (CSS)","emailAddress":"Adresă de e-mail","emailBody":"Opțiuni Meniu Contextual","emailSubject":"Subiectul mesajului","id":"Id","info":"Informaţii despre link (Legătură web)","langCode":"Direcţia cuvintelor","langDir":"Direcţia cuvintelor","langDirLTR":"stânga-dreapta (LTR)","langDirRTL":"dreapta-stânga (RTL)","menu":"Editează Link","name":"Nume","noAnchors":"(Nicio ancoră disponibilă în document)","noEmail":"Vă rugăm să scrieţi adresa de e-mail","noUrl":"Vă rugăm să scrieţi URL-ul","other":"<alt>","popupDependent":"Dependent (Netscape)","popupFeatures":"Proprietăţile ferestrei popup","popupFullScreen":"Tot ecranul (Full Screen)(IE)","popupLeft":"Poziţia la stânga","popupLocationBar":"Bara de locaţie","popupMenuBar":"Bara de meniu","popupResizable":"Redimensionabil","popupScrollBars":"Bare de derulare","popupStatusBar":"Bara de status","popupToolbar":"Bara de opţiuni","popupTop":"Poziţia la dreapta","rel":"Relație","selectAnchor":"Selectaţi o ancoră","styles":"Stil","tabIndex":"Indexul tabului","target":"Ţintă (Target)","targetFrame":"<frame>","targetFrameName":"Numele frameului ţintă","targetPopup":"<fereastra popup>","targetPopupName":"Numele ferestrei popup","title":"Link (Legătură web)","toAnchor":"Ancoră în această pagină","toEmail":"E-Mail","toUrl":"URL","toolbar":"Inserează/Editează link (legătură web)","type":"Tipul link-ului (al legăturii web)","unlink":"Înlătură link (legătură web)","upload":"Încarcă"},"list":{"bulletedlist":"Inserează / Elimină Listă cu puncte","numberedlist":"Inserează / Elimină Listă numerotată"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Mărește","minimize":"Micșorează"},"pastefromword":{"confirmCleanup":"Textul pe care doriți să-l lipiți este din Word. Doriți curățarea textului înante de a-l adăuga?","error":"Nu a fost posibilă curățarea datelor adăugate datorită unei erori interne","title":"Adaugă din Word","toolbar":"Adaugă din Word"},"pastetext":{"button":"Adaugă ca text simplu (Plain Text)","title":"Adaugă ca text simplu (Plain Text)"},"removeformat":{"toolbar":"Înlătură formatarea"},"specialchar":{"options":"Opțiuni caractere speciale","title":"Selectează caracter special","toolbar":"Inserează caracter special"},"stylescombo":{"label":"Stil","panelTitle":"Formatarea stilurilor","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Mărimea marginii","caption":"Titlu (Caption)","cell":{"menu":"Celulă","insertBefore":"Inserează celulă înainte","insertAfter":"Inserează celulă după","deleteCell":"Şterge celule","merge":"Uneşte celule","mergeRight":"Uneşte la dreapta","mergeDown":"Uneşte jos","splitHorizontal":"Împarte celula pe orizontală","splitVertical":"Împarte celula pe verticală","title":"Proprietăți celulă","cellType":"Tipul celulei","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Aliniament orizontal","vAlign":"Aliniament vertical","alignBaseline":"Baseline","bgColor":"Culoare fundal","borderColor":"Culoare bordură","data":"Data","header":"Antet","yes":"Da","no":"Nu","invalidWidth":"Lățimea celulei trebuie să fie un număr.","invalidHeight":"Înălțimea celulei trebuie să fie un număr.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Alege"},"cellPad":"Spaţiu în cadrul celulei","cellSpace":"Spaţiu între celule","column":{"menu":"Coloană","insertBefore":"Inserează coloană înainte","insertAfter":"Inserează coloană după","deleteColumn":"Şterge celule"},"columns":"Coloane","deleteTable":"Şterge tabel","headers":"Antente","headersBoth":"Ambele","headersColumn":"Prima coloană","headersNone":"Nimic","headersRow":"Primul rând","invalidBorder":"Dimensiunea bordurii trebuie să aibe un număr.","invalidCellPadding":"Spațierea celulei trebuie sa fie un număr pozitiv","invalidCellSpacing":"Spațierea celului trebuie să fie un număr pozitiv.","invalidCols":"Numărul coloanelor trebuie să fie mai mare decât 0.","invalidHeight":"Inaltimea celulei trebuie sa fie un numar.","invalidRows":"Numărul rândurilor trebuie să fie mai mare decât 0.","invalidWidth":"Lățimea tabelului trebuie să fie un număr.","menu":"Proprietăţile tabelului","row":{"menu":"Rând","insertBefore":"Inserează rând înainte","insertAfter":"Inserează rând după","deleteRow":"Şterge rânduri"},"rows":"Rânduri","summary":"Rezumat","title":"Proprietăţile tabelului","toolbar":"Tabel","widthPc":"procente","widthPx":"pixeli","widthUnit":"unitate lățime"},"contextmenu":{"options":"Opțiuni Meniu Contextual"},"toolbar":{"toolbarCollapse":"Micșorează Bara","toolbarExpand":"Mărește Bara","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editează bara de unelte"},"undo":{"redo":"Starea ulterioară (redo)","undo":"Starea anterioară (undo)"},"justify":{"block":"Aliniere în bloc (Block Justify)","center":"Aliniere centrală","left":"Aliniere la stânga","right":"Aliniere la dreapta"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/ru.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/ru.js new file mode 100755 index 0000000000..3c4c1fae90 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/ru.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['ru']={"editor":"Визуальный текстовый редактор","editorPanel":"Визуальный редактор текста","common":{"editorHelp":"Нажмите ALT-0 для открытия справки","browseServer":"Выбор на сервере","url":"Ссылка","protocol":"Протокол","upload":"Загрузка файла","uploadSubmit":"Загрузить на сервер","image":"Изображение","flash":"Flash","form":"Форма","checkbox":"Чекбокс","radio":"Радиокнопка","textField":"Текстовое поле","textarea":"Многострочное текстовое поле","hiddenField":"Скрытое поле","button":"Кнопка","select":"Выпадающий список","imageButton":"Кнопка-изображение","notSet":"<не указано>","id":"Идентификатор","name":"Имя","langDir":"Направление текста","langDirLtr":"Слева направо (LTR)","langDirRtl":"Справа налево (RTL)","langCode":"Код языка","longDescr":"Длинное описание ссылки","cssClass":"Класс CSS","advisoryTitle":"Заголовок","cssStyle":"Стиль","ok":"ОК","cancel":"Отмена","close":"Закрыть","preview":"Предпросмотр","resize":"Перетащите для изменения размера","generalTab":"Основное","advancedTab":"Дополнительно","validateNumberFailed":"Это значение не является числом.","confirmNewPage":"Несохранённые изменения будут потеряны! Вы действительно желаете перейти на другую страницу?","confirmCancel":"Некоторые параметры были изменены. Вы уверены, что желаете закрыть без сохранения?","options":"Параметры","target":"Цель","targetNew":"Новое окно (_blank)","targetTop":"Главное окно (_top)","targetSelf":"Текущее окно (_self)","targetParent":"Родительское окно (_parent)","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","styles":"Стиль","cssClasses":"CSS классы","width":"Ширина","height":"Высота","align":"Выравнивание","alignLeft":"По левому краю","alignRight":"По правому краю","alignCenter":"По центру","alignJustify":"По ширине","alignTop":"Поверху","alignMiddle":"Посередине","alignBottom":"Понизу","alignNone":"Нет","invalidValue":"Недопустимое значение.","invalidHeight":"Высота задается числом.","invalidWidth":"Ширина задается числом.","invalidCssLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","invalidHtmlLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры HTML (px или %).","invalidInlineStyle":"Значение, указанное для стиля элемента, должно состоять из одной или нескольких пар данных в формате \"параметр : значение\", разделённых точкой с запятой.","cssLengthTooltip":"Введите значение в пикселях, либо число с корректной единицей меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недоступно</span>"},"basicstyles":{"bold":"Полужирный","italic":"Курсив","strike":"Зачеркнутый","subscript":"Подстрочный индекс","superscript":"Надстрочный индекс","underline":"Подчеркнутый"},"clipboard":{"copy":"Копировать","copyError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по копированию текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+C).","cut":"Вырезать","cutError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по вырезке текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+X).","paste":"Вставить","pasteArea":"Зона для вставки","pasteMsg":"Пожалуйста, вставьте текст в зону ниже, используя клавиатуру (<strong>Ctrl/Cmd+V</strong>) и нажмите кнопку \"OK\".","securityMsg":"Настройки безопасности вашего браузера не разрешают редактору напрямую обращаться к буферу обмена. Вы должны вставить текст снова в это окно.","title":"Вставить"},"button":{"selectedLabel":"%1 (Выбрано)"},"colorbutton":{"auto":"Автоматически","bgColorTitle":"Цвет фона","colors":{"000":"Чёрный","800000":"Бордовый","8B4513":"Кожано-коричневый","2F4F4F":"Темный синевато-серый","008080":"Сине-зелёный","000080":"Тёмно-синий","4B0082":"Индиго","696969":"Тёмно-серый","B22222":"Кирпичный","A52A2A":"Коричневый","DAA520":"Золотисто-берёзовый","006400":"Темно-зелёный","40E0D0":"Бирюзовый","0000CD":"Умеренно синий","800080":"Пурпурный","808080":"Серый","F00":"Красный","FF8C00":"Темно-оранжевый","FFD700":"Золотистый","008000":"Зелёный","0FF":"Васильковый","00F":"Синий","EE82EE":"Фиолетовый","A9A9A9":"Тускло-серый","FFA07A":"Светло-лососевый","FFA500":"Оранжевый","FFFF00":"Жёлтый","00FF00":"Лайма","AFEEEE":"Бледно-синий","ADD8E6":"Свелто-голубой","DDA0DD":"Сливовый","D3D3D3":"Светло-серый","FFF0F5":"Розово-лавандовый","FAEBD7":"Античный белый","FFFFE0":"Светло-жёлтый","F0FFF0":"Медвяной росы","F0FFFF":"Лазурный","F0F8FF":"Бледно-голубой","E6E6FA":"Лавандовый","FFF":"Белый"},"more":"Ещё цвета...","panelTitle":"Цвета","textColorTitle":"Цвет текста"},"colordialog":{"clear":"Очистить","highlight":"Под курсором","options":"Настройки цвета","selected":"Выбранный цвет","title":"Выберите цвет"},"elementspath":{"eleLabel":"Путь элементов","eleTitle":"Элемент %1"},"font":{"fontSize":{"label":"Размер","voiceLabel":"Размер шрифта","panelTitle":"Размер шрифта"},"label":"Шрифт","panelTitle":"Шрифт","voiceLabel":"Шрифт"},"format":{"label":"Форматирование","panelTitle":"Форматирование","tag_address":"Адрес","tag_div":"Обычное (div)","tag_h1":"Заголовок 1","tag_h2":"Заголовок 2","tag_h3":"Заголовок 3","tag_h4":"Заголовок 4","tag_h5":"Заголовок 5","tag_h6":"Заголовок 6","tag_p":"Обычное","tag_pre":"Моноширинное"},"horizontalrule":{"toolbar":"Вставить горизонтальную линию"},"indent":{"indent":"Увеличить отступ","outdent":"Уменьшить отступ"},"fakeobjects":{"anchor":"Якорь","flash":"Flash анимация","hiddenfield":"Скрытое поле","iframe":"iFrame","unknown":"Неизвестный объект"},"link":{"acccessKey":"Клавиша доступа","advanced":"Дополнительно","advisoryContentType":"Тип содержимого","advisoryTitle":"Заголовок","anchor":{"toolbar":"Вставить / редактировать якорь","menu":"Изменить якорь","title":"Свойства якоря","name":"Имя якоря","errorName":"Пожалуйста, введите имя якоря","remove":"Удалить якорь"},"anchorId":"По идентификатору","anchorName":"По имени","charset":"Кодировка ресурса","cssClasses":"Классы CSS","emailAddress":"Email адрес","emailBody":"Текст сообщения","emailSubject":"Тема сообщения","id":"Идентификатор","info":"Информация о ссылке","langCode":"Код языка","langDir":"Направление текста","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","menu":"Редактировать ссылку","name":"Имя","noAnchors":"(В документе нет ни одного якоря)","noEmail":"Пожалуйста, введите email адрес","noUrl":"Пожалуйста, введите ссылку","other":"<другой>","popupDependent":"Зависимое (Netscape)","popupFeatures":"Параметры всплывающего окна","popupFullScreen":"Полноэкранное (IE)","popupLeft":"Отступ слева","popupLocationBar":"Панель адреса","popupMenuBar":"Панель меню","popupResizable":"Изменяемый размер","popupScrollBars":"Полосы прокрутки","popupStatusBar":"Строка состояния","popupToolbar":"Панель инструментов","popupTop":"Отступ сверху","rel":"Отношение","selectAnchor":"Выберите якорь","styles":"Стиль","tabIndex":"Последовательность перехода","target":"Цель","targetFrame":"<фрейм>","targetFrameName":"Имя целевого фрейма","targetPopup":"<всплывающее окно>","targetPopupName":"Имя всплывающего окна","title":"Ссылка","toAnchor":"Ссылка на якорь в тексте","toEmail":"Email","toUrl":"Ссылка","toolbar":"Вставить/Редактировать ссылку","type":"Тип ссылки","unlink":"Убрать ссылку","upload":"Загрузка"},"list":{"bulletedlist":"Вставить / удалить маркированный список","numberedlist":"Вставить / удалить нумерованный список"},"magicline":{"title":"Вставить здесь параграф"},"maximize":{"maximize":"Развернуть","minimize":"Свернуть"},"pastefromword":{"confirmCleanup":"Текст, который вы желаете вставить, по всей видимости, был скопирован из Word. Следует ли очистить его перед вставкой?","error":"Невозможно очистить вставленные данные из-за внутренней ошибки","title":"Вставить из Word","toolbar":"Вставить из Word"},"pastetext":{"button":"Вставить только текст","title":"Вставить только текст"},"removeformat":{"toolbar":"Убрать форматирование"},"specialchar":{"options":"Выбор специального символа","title":"Выберите специальный символ","toolbar":"Вставить специальный символ"},"stylescombo":{"label":"Стили","panelTitle":"Стили форматирования","panelTitle1":"Стили блока","panelTitle2":"Стили элемента","panelTitle3":"Стили объекта"},"table":{"border":"Размер границ","caption":"Заголовок","cell":{"menu":"Ячейка","insertBefore":"Вставить ячейку слева","insertAfter":"Вставить ячейку справа","deleteCell":"Удалить ячейки","merge":"Объединить ячейки","mergeRight":"Объединить с правой","mergeDown":"Объединить с нижней","splitHorizontal":"Разделить ячейку по горизонтали","splitVertical":"Разделить ячейку по вертикали","title":"Свойства ячейки","cellType":"Тип ячейки","rowSpan":"Объединяет строк","colSpan":"Объединяет колонок","wordWrap":"Перенос по словам","hAlign":"Горизонтальное выравнивание","vAlign":"Вертикальное выравнивание","alignBaseline":"По базовой линии","bgColor":"Цвет фона","borderColor":"Цвет границ","data":"Данные","header":"Заголовок","yes":"Да","no":"Нет","invalidWidth":"Ширина ячейки должна быть числом.","invalidHeight":"Высота ячейки должна быть числом.","invalidRowSpan":"Количество объединяемых строк должно быть задано числом.","invalidColSpan":"Количество объединяемых колонок должно быть задано числом.","chooseColor":"Выберите"},"cellPad":"Внутренний отступ ячеек","cellSpace":"Внешний отступ ячеек","column":{"menu":"Колонка","insertBefore":"Вставить колонку слева","insertAfter":"Вставить колонку справа","deleteColumn":"Удалить колонки"},"columns":"Колонки","deleteTable":"Удалить таблицу","headers":"Заголовки","headersBoth":"Сверху и слева","headersColumn":"Левая колонка","headersNone":"Без заголовков","headersRow":"Верхняя строка","invalidBorder":"Размер границ должен быть числом.","invalidCellPadding":"Внутренний отступ ячеек (cellpadding) должен быть числом.","invalidCellSpacing":"Внешний отступ ячеек (cellspacing) должен быть числом.","invalidCols":"Количество столбцов должно быть больше 0.","invalidHeight":"Высота таблицы должна быть числом.","invalidRows":"Количество строк должно быть больше 0.","invalidWidth":"Ширина таблицы должна быть числом.","menu":"Свойства таблицы","row":{"menu":"Строка","insertBefore":"Вставить строку сверху","insertAfter":"Вставить строку снизу","deleteRow":"Удалить строки"},"rows":"Строки","summary":"Итоги","title":"Свойства таблицы","toolbar":"Таблица","widthPc":"процентов","widthPx":"пикселей","widthUnit":"единица измерения"},"contextmenu":{"options":"Параметры контекстного меню"},"toolbar":{"toolbarCollapse":"Свернуть панель инструментов","toolbarExpand":"Развернуть панель инструментов","toolbarGroups":{"document":"Документ","clipboard":"Буфер обмена / Отмена действий","editing":"Корректировка","forms":"Формы","basicstyles":"Простые стили","paragraph":"Абзац","links":"Ссылки","insert":"Вставка","styles":"Стили","colors":"Цвета","tools":"Инструменты"},"toolbars":"Панели инструментов редактора"},"undo":{"redo":"Повторить","undo":"Отменить"},"justify":{"block":"По ширине","center":"По центру","left":"По левому краю","right":"По правому краю"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/si.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/si.js new file mode 100755 index 0000000000..8983839cc8 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/si.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['si']={"editor":"පොහොසත් වචන සංස්කරණ","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"උදව් ලබා ගැනීමට ALT බොත්තම ඔබන්න","browseServer":"සෙවුම් සේවාදායකය","url":"URL","protocol":"මුලාපත්‍රය","upload":"උඩුගතකිරීම","uploadSubmit":"සේවාදායකය වෙත යොමුකිරිම","image":"රුපය","flash":"දීප්තිය","form":"පෝරමය","checkbox":"ලකුණුකිරීමේ කොටුව","radio":"තේරීම් ","textField":"ලියන ප්‍රදේශය","textarea":"අකුරු ","hiddenField":"සැඟවුණු ප්‍රදේශය","button":"බොත්තම","select":"තෝරන්න ","imageButton":"රුප ","notSet":"<යොදා >","id":"අංකය","name":"නම","langDir":"භාෂා දිශාව","langDirLtr":"වමේසිට දකුණුට","langDirRtl":"දකුණේ සිට වමට","langCode":"භාෂා කේතය","longDescr":"සම්පුර්න පැහැදිලි කිරීම","cssClass":"විලාශ පත්‍ර පන්තිය","advisoryTitle":"උපදෙස් ","cssStyle":"විලාසය","ok":"නිරදි","cancel":"අවලංගු කිරීම","close":"වැසීම","preview":"නැවත ","resize":"විශාලත්වය නැවත වෙනස් කිරීම","generalTab":"පොදු කරුණු.","advancedTab":"දීය","validateNumberFailed":"මෙම වටිනාකම අංකයක් නොවේ","confirmNewPage":"ආරක්ෂා නොකළ සියලුම දත්තයන් මැකියනුලැබේ. ඔබට නව පිටුවක් ලබා ගැනීමට අවශ්‍යද?","confirmCancel":"ඇතම් විකල්පයන් වෙනස් කර ඇත. ඔබට මින් නික්මීමට අවශ්‍යද?","options":" විකල්ප","target":"අරමුණ","targetNew":"නව කව්ළුව","targetTop":"වැදගත් කව්ළුව","targetSelf":"එම කව්ළුව(_තම\\\\)","targetParent":"මව් කව්ළුව(_)","langDirLTR":"වමේසිට දකුණුට","langDirRTL":"දකුණේ සිට වමට","styles":"විලාසය","cssClasses":"විලාසපත්‍ර පන්තිය","width":"පළල","height":"උස","align":"ගැලපුම","alignLeft":"වම","alignRight":"දකුණ","alignCenter":"මධ්‍ය","alignJustify":"Justify","alignTop":"ඉ","alignMiddle":"මැද","alignBottom":"පහල","alignNone":"None","invalidValue":"වැරදී වටිනාකමකි","invalidHeight":"උස අංකයක් විය යුතුය","invalidWidth":"පළල අංකයක් විය යුතුය","invalidCssLength":"වටිනාකමක් නිරූපණය කිරීම \"%1\" ප්‍රදේශය ධන සංක්‍යාත්මක වටිනාකමක් හෝ නිවරදි නොවන CSS මිනුම් එකක(px, %, in, cm, mm, em, ex, pt, pc)","invalidHtmlLength":"වටිනාකමක් නිරූපණය කිරීම \"%1\" ප්‍රදේශය ධන සංක්‍යාත්මක වටිනාකමක් හෝ නිවරදි නොවන HTML මිනුම් එකක (px හෝ %).","invalidInlineStyle":"වටිනාකමක් නිරූපණය කිරීම පේළි විලාසයයට ආකෘතිය අනතර්ග විය යුතය \"නම : වටිනාකම\", තිත් කොමාවකින් වෙන් වෙන ලද.","cssLengthTooltip":"සංක්‍යා ඇතුලත් කිරීමේදී වටිනාකම තිත් ප්‍රමාණය නිවරදි CSS ඒකක(තිත්, %, අඟල්,සෙමි, mm, em, ex, pt, pc)","unavailable":"%1<span පන්තිය=\"ළඟා වියහැකි ද බලන්න\">, නොමැතිනම්</span>"},"basicstyles":{"bold":"තද අකුරින් ලියනලද","italic":"බැධීඅකුරින් ලියන ලද","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"යටින් ඉරි අදින ලද"},"clipboard":{"copy":"පිටපත් කරන්න","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"කපාගන්න","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"අලවන්න","pasteArea":"අලවන ප්‍රදේශ","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"අලවන්න"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatic","bgColorTitle":"පසුබිම් වර්ණය","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"More Colors...","panelTitle":"වර්ණය","textColorTitle":"අක්ෂර වර්ණ"},"colordialog":{"clear":"පැහැදිලි","highlight":"මතුකර පෙන්වන්න","options":"වර්ණ විකල්ප","selected":"තෙරු වර්ණ","title":"වර්ණ තෝරන්න"},"elementspath":{"eleLabel":"මුලද්‍රව්‍ය මාර්ගය","eleTitle":"%1 මුල"},"font":{"fontSize":{"label":"විශාලත්වය","voiceLabel":"අක්ෂර විශාලත්වය","panelTitle":"අක්ෂර විශාලත්වය"},"label":"අක්ෂරය","panelTitle":"අක්ෂර නාමය","voiceLabel":"අක්ෂර"},"format":{"label":"ආකෘතිය","panelTitle":"චේදයේ ","tag_address":"ලිපිනය","tag_div":"සාමාන්‍ය(DIV)","tag_h1":"ශීර්ෂය 1","tag_h2":"ශීර්ෂය 2","tag_h3":"ශීර්ෂය 3","tag_h4":"ශීර්ෂය 4","tag_h5":"ශීර්ෂය 5","tag_h6":"ශීර්ෂය 6","tag_p":"සාමාන්‍ය","tag_pre":"ආකෘතියන්"},"horizontalrule":{"toolbar":"තිරස් රේඛාවක් ඇතුලත් කරන්න"},"indent":{"indent":"අතර පරතරය වැඩිකරන්න","outdent":"අතර පරතරය අඩුකරන්න"},"fakeobjects":{"anchor":"ආධාරය","flash":"Flash Animation","hiddenfield":"සැඟවුණු ප්‍රදේශය","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"ප්‍රවේශ යතුර","advanced":"දීය","advisoryContentType":"උපදේශාත්මක අන්තර්ගත ආකාරය","advisoryTitle":"උපදේශාත්මක නාමය","anchor":{"toolbar":"ආධාරය","menu":"ආධාරය වෙනස් කිරීම","title":"ආධාරක ","name":"ආධාරකයේ නාමය","errorName":"කරුණාකර ආධාරකයේ නාමය ඇතුල් කරන්න","remove":"ආධාරකය ඉවත් කිරීම"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"විලාසපත්‍ර පන්තිය","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"අංකය","info":"Link Info","langCode":"භාෂා කේතය","langDir":"භාෂා දිශාව","langDirLTR":"වමේසිට දකුණුට","langDirRTL":"දකුණේ සිට වමට","menu":"Edit Link","name":"නම","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"විලාසය","tabIndex":"Tab Index","target":"අරමුණ","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"සබැඳිය","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"සබැඳිය","type":"Link Type","unlink":"Unlink","upload":"උඩුගතකිරීම"},"list":{"bulletedlist":"ඇතුලත් / ඉවත් කිරීම ලඉස්තුව","numberedlist":"ඇතුලත් / ඉවත් කිරීම අන්න්කිත ලඉස්තුව"},"magicline":{"title":"චේදය ඇතුලත් කරන්න"},"maximize":{"maximize":"විශාල කිරීම","minimize":"කුඩා කිරීම"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"වචන වලින් අලවන්න","toolbar":"වචන වලින් අලවන්න"},"pastetext":{"button":"සාමාන්‍ය අක්ෂර ලෙස අලවන්න","title":"සාමාන්‍ය අක්ෂර ලෙස අලවන්න"},"removeformat":{"toolbar":"සැකසීම වෙනස් කරන්න"},"specialchar":{"options":"විශේෂ ගුණාංග වීකල්ප","title":"විශේෂ ගුණාංග ","toolbar":"විශේෂ ගුණාංග ඇතුලත් "},"stylescombo":{"label":"විලාසය","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"සීමාවවල විශාලත්වය","caption":"Caption","cell":{"menu":"කොටුව","insertBefore":"පෙර කොටුවක් ඇතුල්කිරිම","insertAfter":"පසුව කොටුවක් ඇතුලත් ","deleteCell":"කොටුව මැකීම","merge":"කොටු එකට යාකිරිම","mergeRight":"දකුණට ","mergeDown":"පහලට ","splitHorizontal":"තිරස්ව කොටු පැතිරීම","splitVertical":"සිරස්ව කොටු පැතිරීම","title":"කොටු ","cellType":"කොටු වර්ගය","rowSpan":"පේළි පළල","colSpan":"සිරස් පළල","wordWrap":"වචන ගැලපුම","hAlign":"තිරස්ව ","vAlign":"සිරස්ව ","alignBaseline":"පාද රේඛාව","bgColor":"පසුබිම් වර්ණය","borderColor":"මායිම් ","data":"Data","header":"ශීර්ෂක","yes":"ඔව්","no":"නැත","invalidWidth":"කොටු පළල සංඛ්‍ය්ත්මක වටිනාකමක් විය යුතුය","invalidHeight":"කොටු උස සංඛ්‍ය්ත්මක වටිනාකමක් විය යුතුය","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"තෝරන්න"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"සිරස් ","deleteTable":"වගුව මකන්න","headers":"ශීර්ෂක","headersBoth":"දෙකම","headersColumn":"පළමූ සිරස් තීරුව","headersNone":"කිසිවක්ම නොවේ","headersRow":"පළමූ පේළිය","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"contextmenu":{"options":"අනතර්ග ලේඛණ විකල්ප"},"toolbar":{"toolbarCollapse":"මෙවලම් තීරුව හැකුලුම.","toolbarExpand":"මෙවලම් තීරුව දීගහැරුම","toolbarGroups":{"document":"ලිපිය","clipboard":"ඇමිණුම වෙනස් කිරීම","editing":"සංස්කරණය","forms":"පෝරමය","basicstyles":"මුලික විලාසය","paragraph":"චේදය","links":"සබැඳිය","insert":"ඇතුලත් කිරීම","styles":"විලාසය","colors":"වර්ණය","tools":"මෙවලම්"},"toolbars":"සංස්කරණ මෙවලම් තීරුව"},"undo":{"redo":"නැවත කිරීම","undo":"වෙනස් කිරීම"},"justify":{"block":"Justify","center":"මධ්‍ය","left":"Align Left","right":"Align Right"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/sk.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/sk.js new file mode 100755 index 0000000000..0764fc3328 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/sk.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['sk']={"editor":"Editor formátovaného textu","editorPanel":"Panel editora formátovaného textu","common":{"editorHelp":"Stlačte ALT 0 pre nápovedu","browseServer":"Prechádzať server","url":"URL","protocol":"Protokol","upload":"Odoslať","uploadSubmit":"Odoslať na server","image":"Obrázok","flash":"Flash","form":"Formulár","checkbox":"Zaškrtávacie políčko","radio":"Prepínač","textField":"Textové pole","textarea":"Textová oblasť","hiddenField":"Skryté pole","button":"Tlačidlo","select":"Rozbaľovací zoznam","imageButton":"Obrázkové tlačidlo","notSet":"<nenastavené>","id":"Id","name":"Meno","langDir":"Orientácia jazyka","langDirLtr":"Zľava doprava (LTR)","langDirRtl":"Sprava doľava (RTL)","langCode":"Kód jazyka","longDescr":"Dlhý popis URL","cssClass":"Trieda štýlu","advisoryTitle":"Pomocný titulok","cssStyle":"Štýl","ok":"OK","cancel":"Zrušiť","close":"Zatvorit","preview":"Náhľad","resize":"Zmeniť veľkosť","generalTab":"Hlavné","advancedTab":"Rozšírené","validateNumberFailed":"Hodnota nieje číslo.","confirmNewPage":"Prajete si načítat novú stránku? Všetky neuložené zmeny budú stratené. ","confirmCancel":"Niektore možnosti boli zmenené. Naozaj chcete zavrieť okno?","options":"Možnosti","target":"Cieľ","targetNew":"Nové okno (_blank)","targetTop":"Najvrchnejšie okno (_top)","targetSelf":"To isté okno (_self)","targetParent":"Rodičovské okno (_parent)","langDirLTR":"Zľava doprava (LTR)","langDirRTL":"Sprava doľava (RTL)","styles":"Štýl","cssClasses":"Triedy štýlu","width":"Šírka","height":"Výška","align":"Zarovnanie","alignLeft":"Vľavo","alignRight":"Vpravo","alignCenter":"Na stred","alignJustify":"Zarovnať do bloku","alignTop":"Nahor","alignMiddle":"Na stred","alignBottom":"Dole","alignNone":"Žiadne","invalidValue":"Neplatná hodnota.","invalidHeight":"Výška musí byť číslo.","invalidWidth":"Šírka musí byť číslo.","invalidCssLength":"Špecifikovaná hodnota pre pole \"%1\" musí byť kladné číslo s alebo bez platnej CSS mernej jednotky (px, %, in, cm, mm, em, ex, pt alebo pc).","invalidHtmlLength":"Špecifikovaná hodnota pre pole \"%1\" musí byť kladné číslo s alebo bez platnej HTML mernej jednotky (px alebo %).","invalidInlineStyle":"Zadaná hodnota pre inline štýl musí pozostávať s jedného, alebo viac dvojíc formátu \"názov: hodnota\", oddelených bodkočiarkou.","cssLengthTooltip":"Vložte číslo pre hodnotu v pixeloch alebo číslo so správnou CSS jednotou (px, %, in, cm, mm, em, ex, pt alebo pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupný</span>"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Prečiarknuté","subscript":"Dolný index","superscript":"Horný index","underline":"Podčiarknuté"},"clipboard":{"copy":"Kopírovať","copyError":"Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu kopírovania. Prosím, použite na to klávesnicu (Ctrl/Cmd+C).","cut":"Vystrihnúť","cutError":"Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu vystrihnutia. Prosím, použite na to klávesnicu (Ctrl/Cmd+X).","paste":"Vložiť","pasteArea":"Miesto pre vloženie","pasteMsg":"Prosím, vložte nasledovný rámček použitím klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stlačte OK.","securityMsg":"Kvôli vašim bezpečnostným nastaveniam prehliadača editor nie je schopný pristupovať k vašej schránke na kopírovanie priamo. Vložte to preto do tohto okna.","title":"Vložiť"},"button":{"selectedLabel":"%1 (Vybrané)"},"colorbutton":{"auto":"Automaticky","bgColorTitle":"Farba pozadia","colors":{"000":"Čierna","800000":"Maroon","8B4513":"Sedlová hnedá","2F4F4F":"Tmavo bridlicovo sivá","008080":"Modrozelená","000080":"Tmavomodrá","4B0082":"Indigo","696969":"Tmavá sivá","B22222":"Ohňová tehlová","A52A2A":"Hnedá","DAA520":"Zlatobyľ","006400":"Tmavá zelená","40E0D0":"Tyrkysová","0000CD":"Stredná modrá","800080":"Purpurová","808080":"Sivá","F00":"Červená","FF8C00":"Tmavá oranžová","FFD700":"Zlatá","008000":"Zelená","0FF":"Azúrová","00F":"Modrá","EE82EE":"Fialová","A9A9A9":"Tmavá sivá","FFA07A":"Svetlo lososová","FFA500":"Oranžová","FFFF00":"Žltá","00FF00":"Vápenná","AFEEEE":"Svetlo tyrkysová","ADD8E6":"Svetlo modrá","DDA0DD":"Slivková","D3D3D3":"Svetlo sivá","FFF0F5":"Levanduľovo červená","FAEBD7":"Antická biela","FFFFE0":"Svetlo žltá","F0FFF0":"Medová","F0FFFF":"Azúrová","F0F8FF":"Alicovo modrá","E6E6FA":"Levanduľová","FFF":"Biela"},"more":"Viac farieb...","panelTitle":"Farby","textColorTitle":"Farba textu"},"colordialog":{"clear":"Vyčistiť","highlight":"Zvýrazniť","options":"Možnosti farby","selected":"Vybraná farba","title":"Vyberte farbu"},"elementspath":{"eleLabel":"Cesta prvkov","eleTitle":"%1 prvok"},"font":{"fontSize":{"label":"Veľkosť","voiceLabel":"Veľkosť písma","panelTitle":"Veľkosť písma"},"label":"Font","panelTitle":"Názov fontu","voiceLabel":"Font"},"format":{"label":"Formát","panelTitle":"Formát","tag_address":"Adresa","tag_div":"Normálny (DIV)","tag_h1":"Nadpis 1","tag_h2":"Nadpis 2","tag_h3":"Nadpis 3","tag_h4":"Nadpis 4","tag_h5":"Nadpis 5","tag_h6":"Nadpis 6","tag_p":"Normálny","tag_pre":"Formátovaný"},"horizontalrule":{"toolbar":"Vložiť vodorovnú čiaru"},"indent":{"indent":"Zväčšiť odsadenie","outdent":"Zmenšiť odsadenie"},"fakeobjects":{"anchor":"Kotva","flash":"Flash animácia","hiddenfield":"Skryté pole","iframe":"IFrame","unknown":"Neznámy objekt"},"link":{"acccessKey":"Prístupový kľúč","advanced":"Rozšírené","advisoryContentType":"Pomocný typ obsahu","advisoryTitle":"Pomocný titulok","anchor":{"toolbar":"Kotva","menu":"Upraviť kotvu","title":"Vlastnosti kotvy","name":"Názov kotvy","errorName":"Zadajte prosím názov kotvy","remove":"Odstrániť kotvu"},"anchorId":"Podľa Id objektu","anchorName":"Podľa mena kotvy","charset":"Priradená znaková sada","cssClasses":"Triedy štýlu","emailAddress":"E-Mailová adresa","emailBody":"Telo správy","emailSubject":"Predmet správy","id":"Id","info":"Informácie o odkaze","langCode":"Orientácia jazyka","langDir":"Orientácia jazyka","langDirLTR":"Zľava doprava (LTR)","langDirRTL":"Sprava doľava (RTL)","menu":"Upraviť odkaz","name":"Názov","noAnchors":"(V dokumente nie sú dostupné žiadne kotvy)","noEmail":"Zadajte prosím e-mailovú adresu","noUrl":"Zadajte prosím URL odkazu","other":"<iný>","popupDependent":"Závislosť (Netscape)","popupFeatures":"Vlastnosti vyskakovacieho okna","popupFullScreen":"Celá obrazovka (IE)","popupLeft":"Ľavý okraj","popupLocationBar":"Panel umiestnenia (location bar)","popupMenuBar":"Panel ponuky (menu bar)","popupResizable":"Meniteľná veľkosť (resizable)","popupScrollBars":"Posuvníky (scroll bars)","popupStatusBar":"Stavový riadok (status bar)","popupToolbar":"Panel nástrojov (toolbar)","popupTop":"Horný okraj","rel":"Vzťah (rel)","selectAnchor":"Vybrať kotvu","styles":"Štýl","tabIndex":"Poradie prvku (tab index)","target":"Cieľ","targetFrame":"<rámec>","targetFrameName":"Názov rámu cieľa","targetPopup":"<vyskakovacie okno>","targetPopupName":"Názov vyskakovacieho okna","title":"Odkaz","toAnchor":"Odkaz na kotvu v texte","toEmail":"E-mail","toUrl":"URL","toolbar":"Odkaz","type":"Typ odkazu","unlink":"Odstrániť odkaz","upload":"Nahrať"},"list":{"bulletedlist":"Vložiť/Odstrániť zoznam s odrážkami","numberedlist":"Vložiť/Odstrániť číslovaný zoznam"},"magicline":{"title":"Sem vložte paragraf"},"maximize":{"maximize":"Maximalizovať","minimize":"Minimalizovať"},"pastefromword":{"confirmCleanup":"Vkladaný text vyzerá byť skopírovaný z Wordu. Chcete ho automaticky vyčistiť pred vkladaním?","error":"Nebolo možné vyčistiť vložené dáta kvôli internej chybe","title":"Vložiť z Wordu","toolbar":"Vložiť z Wordu"},"pastetext":{"button":"Vložiť ako čistý text","title":"Vložiť ako čistý text"},"removeformat":{"toolbar":"Odstrániť formátovanie"},"specialchar":{"options":"Možnosti špeciálneho znaku","title":"Výber špeciálneho znaku","toolbar":"Vložiť špeciálny znak"},"stylescombo":{"label":"Štýly","panelTitle":"Formátovanie štýlov","panelTitle1":"Štýly bloku","panelTitle2":"Vnútroriadkové (inline) štýly","panelTitle3":"Štýly objeku"},"table":{"border":"Šírka rámu (border)","caption":"Popis","cell":{"menu":"Bunka","insertBefore":"Vložiť bunku pred","insertAfter":"Vložiť bunku za","deleteCell":"Vymazať bunky","merge":"Zlúčiť bunky","mergeRight":"Zlúčiť doprava","mergeDown":"Zlúčiť dole","splitHorizontal":"Rozdeliť bunky horizontálne","splitVertical":"Rozdeliť bunky vertikálne","title":"Vlastnosti bunky","cellType":"Typ bunky","rowSpan":"Rozsah riadkov","colSpan":"Rozsah stĺpcov","wordWrap":"Zalomovanie riadkov","hAlign":"Horizontálne zarovnanie","vAlign":"Vertikálne zarovnanie","alignBaseline":"Základná čiara (baseline)","bgColor":"Farba pozadia","borderColor":"Farba rámu","data":"Dáta","header":"Hlavička","yes":"Áno","no":"Nie","invalidWidth":"Šírka bunky musí byť číslo.","invalidHeight":"Výška bunky musí byť číslo.","invalidRowSpan":"Rozsah riadkov musí byť celé číslo.","invalidColSpan":"Rozsah stĺpcov musí byť celé číslo.","chooseColor":"Vybrať"},"cellPad":"Odsadenie obsahu (cell padding)","cellSpace":"Vzdialenosť buniek (cell spacing)","column":{"menu":"Stĺpec","insertBefore":"Vložiť stĺpec pred","insertAfter":"Vložiť stĺpec po","deleteColumn":"Zmazať stĺpce"},"columns":"Stĺpce","deleteTable":"Vymazať tabuľku","headers":"Hlavička","headersBoth":"Obe","headersColumn":"Prvý stĺpec","headersNone":"Žiadne","headersRow":"Prvý riadok","invalidBorder":"Širka rámu musí byť číslo.","invalidCellPadding":"Odsadenie v bunkách (cell padding) musí byť kladné číslo.","invalidCellSpacing":"Medzera mädzi bunkami (cell spacing) musí byť kladné číslo.","invalidCols":"Počet stĺpcov musí byť číslo väčšie ako 0.","invalidHeight":"Výška tabuľky musí byť číslo.","invalidRows":"Počet riadkov musí byť číslo väčšie ako 0.","invalidWidth":"Širka tabuľky musí byť číslo.","menu":"Vlastnosti tabuľky","row":{"menu":"Riadok","insertBefore":"Vložiť riadok pred","insertAfter":"Vložiť riadok po","deleteRow":"Vymazať riadky"},"rows":"Riadky","summary":"Prehľad","title":"Vlastnosti tabuľky","toolbar":"Tabuľka","widthPc":"percent","widthPx":"pixelov","widthUnit":"jednotka šírky"},"contextmenu":{"options":"Možnosti kontextového menu"},"toolbar":{"toolbarCollapse":"Zbaliť lištu nástrojov","toolbarExpand":"Rozbaliť lištu nástrojov","toolbarGroups":{"document":"Dokument","clipboard":"Schránka pre kopírovanie/Späť","editing":"Upravovanie","forms":"Formuláre","basicstyles":"Základné štýly","paragraph":"Odstavec","links":"Odkazy","insert":"Vložiť","styles":"Štýly","colors":"Farby","tools":"Nástroje"},"toolbars":"Lišty nástrojov editora"},"undo":{"redo":"Znovu","undo":"Späť"},"justify":{"block":"Zarovnať do bloku","center":"Zarovnať na stred","left":"Zarovnať vľavo","right":"Zarovnať vpravo"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/sl.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/sl.js new file mode 100755 index 0000000000..413f6e67ef --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/sl.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['sl']={"editor":"Bogat Urejevalnik Besedila","editorPanel":"Rich Text Editor plošča","common":{"editorHelp":"Pritisnite ALT 0 za pomoč","browseServer":"Prebrskaj na strežniku","url":"URL","protocol":"Protokol","upload":"Naloži","uploadSubmit":"Pošlji na strežnik","image":"Slika","flash":"Flash","form":"Obrazec","checkbox":"Potrditveno polje","radio":"Izbirno polje","textField":"Vnosno polje","textarea":"Vnosno območje","hiddenField":"Skrito polje","button":"Gumb","select":"Spustno Polje","imageButton":"Slikovni Gumb","notSet":"<ni določen>","id":"Id","name":"Ime","langDir":"Smer jezika","langDirLtr":"Od leve proti desni (LTR)","langDirRtl":"Od desne proti levi (RTL)","langCode":"Koda Jezika","longDescr":"Dolg opis URL-ja","cssClass":"Razred stilne predloge","advisoryTitle":"Predlagani naslov","cssStyle":"Slog","ok":"V redu","cancel":"Prekliči","close":"Zapri","preview":"Predogled","resize":"Potegni za spremembo velikosti","generalTab":"Splošno","advancedTab":"Napredno","validateNumberFailed":"Ta vrednost ni število.","confirmNewPage":"Vse neshranjene spremembe te vsebine bodo izgubljene. Ali res želite naložiti novo stran?","confirmCancel":"Nekaj možnosti je bilo spremenjenih. Ali res želite zapreti okno?","options":"Možnosti","target":"Cilj","targetNew":"Novo Okno (_blank)","targetTop":"Vrhovno Okno (_top)","targetSelf":"Enako Okno (_self)","targetParent":"Matično Okno (_parent)","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","styles":"Slog","cssClasses":"Razred stilne predloge","width":"Širina","height":"Višina","align":"Poravnava","alignLeft":"Levo","alignRight":"Desno","alignCenter":"Sredinsko","alignJustify":"Obojestranska poravnava","alignTop":"Na vrh","alignMiddle":"V sredino","alignBottom":"Na dno","alignNone":"Brez poravnave","invalidValue":"Neveljavna vrednost.","invalidHeight":"Višina mora biti število.","invalidWidth":"Širina mora biti število.","invalidCssLength":"Vrednost določena za \"%1\" polje mora biti pozitivna številka z ali brez veljavne CSS enote za merjenje (px, %, in, cm, mm, em, ex, pt, ali pc).","invalidHtmlLength":"Vrednost določena za \"%1\" polje mora biti pozitivna številka z ali brez veljavne HTML enote za merjenje (px ali %).","invalidInlineStyle":"Vrednost določena za inline slog mora biti sestavljena iz ene ali več tork (tuples) z obliko \"ime : vrednost\", ločenih z podpičji.","cssLengthTooltip":"Vnesite številko za vrednost v slikovnih pikah (pixels) ali številko z veljavno CSS enoto (px, %, in, cm, mm, em, ex, pt, ali pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedosegljiv</span>"},"basicstyles":{"bold":"Krepko","italic":"Ležeče","strike":"Prečrtano","subscript":"Podpisano","superscript":"Nadpisano","underline":"Podčrtano"},"clipboard":{"copy":"Kopiraj","copyError":"Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+X).","paste":"Prilepi","pasteArea":"Prilepi Prostor","pasteMsg":"Prosim prilepite v sleči okvir s pomočjo tipkovnice (<STRONG>Ctrl/Cmd+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.","securityMsg":"Zaradi varnostnih nastavitev vašega brskalnika urejevalnik ne more neposredno dostopati do odložišča. Vsebino odložišča ponovno prilepite v to okno.","title":"Prilepi"},"button":{"selectedLabel":"%1 (Izbrano)"},"colorbutton":{"auto":"Samodejno","bgColorTitle":"Barva ozadja","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Več barv...","panelTitle":"Colors","textColorTitle":"Barva besedila"},"colordialog":{"clear":"Počisti","highlight":"Poudarjeno","options":"Barvne Možnosti","selected":"Izbrano","title":"Izberi barvo"},"elementspath":{"eleLabel":"Pot elementov","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Velikost","voiceLabel":"Velikost","panelTitle":"Velikost"},"label":"Pisava","panelTitle":"Pisava","voiceLabel":"Pisava"},"format":{"label":"Oblika","panelTitle":"Oblika","tag_address":"Napis","tag_div":"Navaden (DIV)","tag_h1":"Naslov 1","tag_h2":"Naslov 2","tag_h3":"Naslov 3","tag_h4":"Naslov 4","tag_h5":"Naslov 5","tag_h6":"Naslov 6","tag_p":"Navaden","tag_pre":"Oblikovan"},"horizontalrule":{"toolbar":"Vstavi vodoravno črto"},"indent":{"indent":"Povečaj zamik","outdent":"Zmanjšaj zamik"},"fakeobjects":{"anchor":"Sidro","flash":"Flash animacija","hiddenfield":"Skrito polje","iframe":"IFrame","unknown":"Neznan objekt"},"link":{"acccessKey":"Dostopno Geslo","advanced":"Napredno","advisoryContentType":"Predlagani tip vsebine (content-type)","advisoryTitle":"Predlagani naslov","anchor":{"toolbar":"Vstavi/uredi zaznamek","menu":"Lastnosti zaznamka","title":"Lastnosti zaznamka","name":"Ime zaznamka","errorName":"Prosim vnesite ime zaznamka","remove":"Remove Anchor"},"anchorId":"Po ID-ju elementa","anchorName":"Po imenu zaznamka","charset":"Kodna tabela povezanega vira","cssClasses":"Razred stilne predloge","emailAddress":"Elektronski naslov","emailBody":"Vsebina sporočila","emailSubject":"Predmet sporočila","id":"Id","info":"Podatki o povezavi","langCode":"Smer jezika","langDir":"Smer jezika","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","menu":"Uredi povezavo","name":"Ime","noAnchors":"(V tem dokumentu ni zaznamkov)","noEmail":"Vnesite elektronski naslov","noUrl":"Vnesite URL povezave","other":"<drug>","popupDependent":"Podokno (Netscape)","popupFeatures":"Značilnosti pojavnega okna","popupFullScreen":"Celozaslonska slika (IE)","popupLeft":"Lega levo","popupLocationBar":"Naslovna vrstica","popupMenuBar":"Menijska vrstica","popupResizable":"Spremenljive velikosti","popupScrollBars":"Drsniki","popupStatusBar":"Vrstica stanja","popupToolbar":"Orodna vrstica","popupTop":"Lega na vrhu","rel":"Odnos","selectAnchor":"Izberi zaznamek","styles":"Slog","tabIndex":"Številka tabulatorja","target":"Cilj","targetFrame":"<okvir>","targetFrameName":"Ime ciljnega okvirja","targetPopup":"<pojavno okno>","targetPopupName":"Ime pojavnega okna","title":"Povezava","toAnchor":"Zaznamek na tej strani","toEmail":"Elektronski naslov","toUrl":"URL","toolbar":"Vstavi/uredi povezavo","type":"Vrsta povezave","unlink":"Odstrani povezavo","upload":"Prenesi"},"list":{"bulletedlist":"Označen seznam","numberedlist":"Oštevilčen seznam"},"magicline":{"title":"Vstavite odstavek tukaj"},"maximize":{"maximize":"Maksimiraj","minimize":"Minimiraj"},"pastefromword":{"confirmCleanup":"Besedilo, ki ga želite prilepiti je kopirano iz Word-a. Ali ga želite očistiti, preden ga prilepite?","error":"Ni bilo mogoče očistiti prilepljenih podatkov zaradi notranje napake","title":"Prilepi iz Worda","toolbar":"Prilepi iz Worda"},"pastetext":{"button":"Prilepi kot golo besedilo","title":"Prilepi kot golo besedilo"},"removeformat":{"toolbar":"Odstrani oblikovanje"},"specialchar":{"options":"Možnosti Posebnega Znaka","title":"Izberi Posebni Znak","toolbar":"Vstavi posebni znak"},"stylescombo":{"label":"Slog","panelTitle":"Oblikovalni Stili","panelTitle1":"Slogi odstavkov","panelTitle2":"Slogi besedila","panelTitle3":"Slogi objektov"},"table":{"border":"Velikost obrobe","caption":"Naslov","cell":{"menu":"Celica","insertBefore":"Vstavi celico pred","insertAfter":"Vstavi celico za","deleteCell":"Izbriši celice","merge":"Združi celice","mergeRight":"Združi desno","mergeDown":"Druži navzdol","splitHorizontal":"Razdeli celico vodoravno","splitVertical":"Razdeli celico navpično","title":"Lastnosti celice","cellType":"Vrsta celice","rowSpan":"Razpon vrstic","colSpan":"Razpon stolpcev","wordWrap":"Prelom besedila","hAlign":"Vodoravna poravnava","vAlign":"Navpična poravnava","alignBaseline":"Osnovnica","bgColor":"Barva ozadja","borderColor":"Barva obrobe","data":"Podatki","header":"Glava","yes":"Da","no":"Ne","invalidWidth":"Širina celice mora biti število.","invalidHeight":"Višina celice mora biti število.","invalidRowSpan":"Razpon vrstic mora biti celo število.","invalidColSpan":"Razpon stolpcev mora biti celo število.","chooseColor":"Izberi"},"cellPad":"Polnilo med celicami","cellSpace":"Razmik med celicami","column":{"menu":"Stolpec","insertBefore":"Vstavi stolpec pred","insertAfter":"Vstavi stolpec za","deleteColumn":"Izbriši stolpce"},"columns":"Stolpci","deleteTable":"Izbriši tabelo","headers":"Glave","headersBoth":"Oboje","headersColumn":"Prvi stolpec","headersNone":"Brez","headersRow":"Prva vrstica","invalidBorder":"Širina obrobe mora biti število.","invalidCellPadding":"Zamik celic mora biti število","invalidCellSpacing":"Razmik med celicami mora biti število.","invalidCols":"Število stolpcev mora biti večje od 0.","invalidHeight":"Višina tabele mora biti število.","invalidRows":"Število vrstic mora biti večje od 0.","invalidWidth":"Širina tabele mora biti število.","menu":"Lastnosti tabele","row":{"menu":"Vrstica","insertBefore":"Vstavi vrstico pred","insertAfter":"Vstavi vrstico za","deleteRow":"Izbriši vrstice"},"rows":"Vrstice","summary":"Povzetek","title":"Lastnosti tabele","toolbar":"Tabela","widthPc":"procentov","widthPx":"pik","widthUnit":"enota širine"},"contextmenu":{"options":"Možnosti Kontekstnega Menija"},"toolbar":{"toolbarCollapse":"Skrči Orodno Vrstico","toolbarExpand":"Razširi Orodno Vrstico","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Urejevalnik orodne vrstice"},"undo":{"redo":"Ponovi","undo":"Razveljavi"},"justify":{"block":"Obojestranska poravnava","center":"Sredinska poravnava","left":"Leva poravnava","right":"Desna poravnava"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/sq.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/sq.js new file mode 100755 index 0000000000..057ad46b19 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/sq.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['sq']={"editor":"Redaktues i Pasur Teksti","editorPanel":"Paneli i redaktuesit të tekstit të plotë","common":{"editorHelp":"Shtyp ALT 0 për ndihmë","browseServer":"Shfleto në Server","url":"URL","protocol":"Protokolli","upload":"Ngarko","uploadSubmit":"Dërgo në server","image":"Imazh","flash":"Objekt flash","form":"Formular","checkbox":"Checkbox","radio":"Buton radio","textField":"Fushë tekst","textarea":"Hapësirë tekst","hiddenField":"Fushë e fshehur","button":"Buton","select":"Menu zgjedhjeje","imageButton":"Buton imazhi","notSet":"<e pazgjedhur>","id":"Id","name":"Emër","langDir":"Kod gjuhe","langDirLtr":"Nga e majta në të djathtë (LTR)","langDirRtl":"Nga e djathta në të majtë (RTL)","langCode":"Kod gjuhe","longDescr":"Përshkrim i hollësishëm","cssClass":"Klasa stili CSS","advisoryTitle":"Titull","cssStyle":"Stil","ok":"OK","cancel":"Anulo","close":"Mbyll","preview":"Parashiko","resize":"Ripërmaso","generalTab":"Të përgjithshme","advancedTab":"Të përparuara","validateNumberFailed":"Vlera e futur nuk është një numër","confirmNewPage":"Çdo ndryshim që nuk është ruajtur do humbasë. Je i sigurtë që dëshiron të krijosh një faqe të re?","confirmCancel":"Disa opsione kanë ndryshuar. Je i sigurtë që dëshiron ta mbyllësh dritaren?","options":"Opsione","target":"Objektivi","targetNew":"Dritare e re (_blank)","targetTop":"Dritare në plan të parë (_top)","targetSelf":"E njëjta dritare (_self)","targetParent":"Dritarja prind (_parent)","langDirLTR":"Nga e majta në të djathë (LTR)","langDirRTL":"Nga e djathta në të majtë (RTL)","styles":"Stil","cssClasses":"Klasa Stili CSS","width":"Gjerësi","height":"Lartësi","align":"Rreshtim","alignLeft":"Majtas","alignRight":"Djathtas","alignCenter":"Qendër","alignJustify":"Zgjero","alignTop":"Lart","alignMiddle":"Në mes","alignBottom":"Poshtë","alignNone":"Asnjë","invalidValue":"Vlerë e pavlefshme","invalidHeight":"Lartësia duhet të jetë një numër","invalidWidth":"Gjerësia duhet të jetë një numër","invalidCssLength":"Vlera e fushës \"%1\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme CSS (px, %, in, cm, mm, em, ex, pt ose pc).","invalidHtmlLength":"Vlera e fushës \"%1\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme HTML (px ose %)","invalidInlineStyle":"Stili inline duhet të jetë një apo disa vlera të formatit \"emër: vlerë\", ndarë nga pikëpresje.","cssLengthTooltip":"Fut një numër për vlerën në pixel apo një numër me një njësi të vlefshme CSS (px, %, in, cm, mm, ex, pt, ose pc).","unavailable":"%1<span class=\"cke_accessibility\">, i padisponueshëm</span>"},"basicstyles":{"bold":"Trash","italic":"Pjerrët","strike":"Nëpërmes","subscript":"Nën-skriptë","superscript":"Super-skriptë","underline":"Nënvijëzuar"},"clipboard":{"copy":"Kopjo","copyError":"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e kopjimit. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+C).","cut":"Preje","cutError":"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e prerjes. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+X).","paste":"Hidhe","pasteArea":"Hapësira Hedhëse","pasteMsg":"Ju lutemi hidhni brenda kutizës në vijim duke shfrytëzuar tastierën (<strong>Ctrl/Cmd+V</strong>) dhe shtypni Mirë.","securityMsg":"Për shkak të dhënave të sigurisë së shfletuesit tuaj, redaktuesi nuk është në gjendje të i qaset drejtpërdrejtë të dhanve të tabelës suaj të punës. Ju duhet të hidhni atë përsëri në këtë dritare.","title":"Hidhe"},"button":{"selectedLabel":"%1 (Përzgjedhur)"},"colorbutton":{"auto":"Automatik","bgColorTitle":"Ngjyra e Prapavijës","colors":{"000":"E zezë","800000":"Ngjyrë gështenjë","8B4513":"Ngjyrë Shale Kafe","2F4F4F":"Ngjyrë Gri të errët ardëz","008080":"Ngjyrë bajukë","000080":"Ngjyrë Marine","4B0082":"Indigo","696969":"Gri e Errët","B22222":"Tullë në Flakë","A52A2A":"Ngjytë Kafe","DAA520":"Shkop i Artë","006400":"E Gjelbër e Errët","40E0D0":"Ngjyrë e Bruztë","0000CD":"E Kaltër e Mesme","800080":"Vjollcë","808080":"Gri","F00":"E Kuqe","FF8C00":"E Portokalltë e Errët","FFD700":"Ngjyrë Ari","008000":"E Gjelbërt","0FF":"Cyan","00F":"E Kaltër","EE82EE":"Vjollcë","A9A9A9":"Gri e Zbehtë","FFA07A":"Salmon i Ndritur","FFA500":"E Portokalltë","FFFF00":"E Verdhë","00FF00":"Ngjyrë Gëlqere","AFEEEE":"Ngjyrë e Bruztë e Zbehtë","ADD8E6":"E Kaltër e Ndritur","DDA0DD":"Ngjyrë Llokumi","D3D3D3":"Gri e Ndritur","FFF0F5":"Ngjyrë Purpur e Skuqur","FAEBD7":"E Bardhë Antike","FFFFE0":"E verdhë e Ndritur","F0FFF0":"Ngjyrë Nektari","F0FFFF":"Ngjyrë Qielli","F0F8FF":"E Kaltër Alice","E6E6FA":"Ngjyrë Purpur e Zbetë","FFF":"E bardhë"},"more":"Më Shumë Ngjyra...","panelTitle":"Ngjyrat","textColorTitle":"Ngjyra e Tekstit"},"colordialog":{"clear":"Pastro","highlight":"Thekso","options":"Përzgjedhjet e Ngjyrave","selected":"Ngjyra e Përzgjedhur","title":"Përzgjidh një ngjyrë"},"elementspath":{"eleLabel":"Rruga e elementeve","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Madhësia","voiceLabel":"Madhësia e Shkronjës","panelTitle":"Madhësia e Shkronjës"},"label":"Shkronja","panelTitle":"Emri i Shkronjës","voiceLabel":"Shkronja"},"format":{"label":"Formati","panelTitle":"Formati i Paragrafit","tag_address":"Adresa","tag_div":"Normal (DIV)","tag_h1":"Titulli 1","tag_h2":"Titulli 2","tag_h3":"Titulli 3","tag_h4":"Titulli 4","tag_h5":"Titulli 5","tag_h6":"Titulli 6","tag_p":"Normal","tag_pre":"Formatuar"},"horizontalrule":{"toolbar":"Vendos Vijë Horizontale"},"indent":{"indent":"Rrite Identin","outdent":"Zvogëlo Identin"},"fakeobjects":{"anchor":"Spirancë","flash":"Objekt flash","hiddenfield":"Fushë e fshehur","iframe":"IFrame","unknown":"Objekt i Panjohur"},"link":{"acccessKey":"Sipas ID-së së Elementit","advanced":"Të përparuara","advisoryContentType":"Lloji i Përmbajtjes Këshillimore","advisoryTitle":"Titull","anchor":{"toolbar":"Spirancë","menu":"Redakto Spirancën","title":"Anchor Properties","name":"Emri i Spirancës","errorName":"Ju lutemi shkruani emrin e spirancës","remove":"Largo Spirancën"},"anchorId":"Sipas ID-së së Elementit","anchorName":"Sipas Emrit të Spirancës","charset":"Seti i Karaktereve të Burimeve të Nëdlidhura","cssClasses":"Klasa stili CSS","emailAddress":"Posta Elektronike","emailBody":"Trupi i Porosisë","emailSubject":"Titulli i Porosisë","id":"Id","info":"Informacione të Nyjes","langCode":"Kod gjuhe","langDir":"Drejtim teksti","langDirLTR":"Nga e majta në të djathë (LTR)","langDirRTL":"Nga e djathta në të majtë (RTL)","menu":"Redakto Nyjen","name":"Emër","noAnchors":"(Nuk ka asnjë spirancë në dokument)","noEmail":"Ju lutemi shkruani postën elektronike","noUrl":"Ju lutemi shkruani URL-në e nyjes","other":"<tjetër>","popupDependent":"E Varur (Netscape)","popupFeatures":"Karakteristikat e Dritares së Dialogut","popupFullScreen":"Ekran i Plotë (IE)","popupLeft":"Pozita Majtas","popupLocationBar":"Shiriti i Lokacionit","popupMenuBar":"Shiriti i Menysë","popupResizable":"I ndryshueshëm","popupScrollBars":"Shiritat zvarritës","popupStatusBar":"Shiriti i Statutit","popupToolbar":"Shiriti i Mejteve","popupTop":"Top Pozita","rel":"Marrëdhëniet","selectAnchor":"Përzgjidh një Spirancë","styles":"Stil","tabIndex":"Indeksi i fletave","target":"Objektivi","targetFrame":"<frame>","targetFrameName":"Emri i Kornizës së Synuar","targetPopup":"<popup window>","targetPopupName":"Emri i Dritares së Dialogut","title":"Nyja","toAnchor":"Lidhu me spirancën në tekst","toEmail":"Posta Elektronike","toUrl":"URL","toolbar":"Nyja","type":"Lloji i Nyjes","unlink":"Largo Nyjen","upload":"Ngarko"},"list":{"bulletedlist":"Vendos/Largo Listën me Pika","numberedlist":"Vendos/Largo Listën me Numra"},"magicline":{"title":"Vendos paragraf këtu"},"maximize":{"maximize":"Zmadho","minimize":"Zvogëlo"},"pastefromword":{"confirmCleanup":"Teksti që dëshironi të e hidhni siç duket është kopjuar nga Word-i. Dëshironi të e pastroni para se të e hidhni?","error":"Nuk ishte e mundur të fshiheshin të dhënat e hedhura për shkak të një gabimi të brendshëm","title":"Hidhe nga Word-i","toolbar":"Hidhe nga Word-i"},"pastetext":{"button":"Hidhe si tekst të thjeshtë","title":"Hidhe si Tekst të Thjeshtë"},"removeformat":{"toolbar":"Largo Formatin"},"specialchar":{"options":"Mundësitë për Karaktere Speciale","title":"Përzgjidh Karakter Special","toolbar":"Vendos Karakter Special"},"stylescombo":{"label":"Stil","panelTitle":"Stilet e Formatimit","panelTitle1":"Stilet e Bllokut","panelTitle2":"Stili i Brendshëm","panelTitle3":"Stilet e Objektit"},"table":{"border":"Madhësia e kornizave","caption":"Titull","cell":{"menu":"Qeli","insertBefore":"Shto Qeli Para","insertAfter":"Shto Qeli Prapa","deleteCell":"Gris Qelitë","merge":"Bashko Qelitë","mergeRight":"Bashko Djathtas","mergeDown":"Bashko Poshtë","splitHorizontal":"Ndaj Qelinë Horizontalisht","splitVertical":"Ndaj Qelinë Vertikalisht","title":"Rekuizitat e Qelisë","cellType":"Lloji i Qelisë","rowSpan":"Bashko Rreshtat","colSpan":"Bashko Kolonat","wordWrap":"Fund i Fjalës","hAlign":"Bashkimi Horizontal","vAlign":"Bashkimi Vertikal","alignBaseline":"Baza","bgColor":"Ngjyra e Prapavijës","borderColor":"Ngjyra e Kornizave","data":"Të dhënat","header":"Koka","yes":"Po","no":"Jo","invalidWidth":"Gjerësia e qelisë duhet të jetë numër.","invalidHeight":"Lartësia e qelisë duhet të jetë numër.","invalidRowSpan":"Hapësira e rreshtave duhet të jetë numër i plotë.","invalidColSpan":"Hapësira e kolonave duhet të jetë numër i plotë.","chooseColor":"Përzgjidh"},"cellPad":"Mbushja e qelisë","cellSpace":"Hapësira e qelisë","column":{"menu":"Kolona","insertBefore":"Vendos Kolonë Para","insertAfter":"Vendos Kolonë Pas","deleteColumn":"Gris Kolonat"},"columns":"Kolonat","deleteTable":"Gris Tabelën","headers":"Kokat","headersBoth":"Së bashku","headersColumn":"Kolona e parë","headersNone":"Asnjë","headersRow":"Rreshti i Parë","invalidBorder":"Madhësia e kufinjve duhet të jetë numër.","invalidCellPadding":"Mbushja e qelisë duhet të jetë numër pozitiv.","invalidCellSpacing":"Hapësira e qelisë duhet të jetë numër pozitiv.","invalidCols":"Numri i kolonave duhet të jetë numër më i madh se 0.","invalidHeight":"Lartësia e tabelës duhet të jetë numër.","invalidRows":"Numri i rreshtave duhet të jetë numër më i madh se 0.","invalidWidth":"Gjerësia e tabelës duhet të jetë numër.","menu":"Karakteristikat e Tabelës","row":{"menu":"Rreshti","insertBefore":"Shto Rresht Para","insertAfter":"Shto Rresht Prapa","deleteRow":"Gris Rreshtat"},"rows":"Rreshtat","summary":"Përmbledhje","title":"Karakteristikat e Tabelës","toolbar":"Tabela","widthPc":"përqind","widthPx":"piksell","widthUnit":"njësia e gjerësisë"},"contextmenu":{"options":"Mundësitë e Menysë së Kontekstit"},"toolbar":{"toolbarCollapse":"Zvogëlo Shiritin","toolbarExpand":"Zgjero Shiritin","toolbarGroups":{"document":"Dokument","clipboard":"Tabela Punës/Ribëje","editing":"Duke Redaktuar","forms":"Formular","basicstyles":"Stili Bazë","paragraph":"Paragraf","links":"Nyjet","insert":"Shto","styles":"Stil","colors":"Ngjyrat","tools":"Mjetet"},"toolbars":"Shiritet e Redaktuesit"},"undo":{"redo":"Ribëje","undo":"Rizhbëje"},"justify":{"block":"Zgjero","center":"Qendër","left":"Rreshto majtas","right":"Rreshto Djathtas"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/sr-latn.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/sr-latn.js new file mode 100755 index 0000000000..3aa431eb7a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/sr-latn.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['sr-latn']={"editor":"Bogati uređivač teksta","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Pretraži server","url":"URL","protocol":"Protokol","upload":"Pošalji","uploadSubmit":"Pošalji na server","image":"Slika","flash":"Fleš","form":"Forma","checkbox":"Polje za potvrdu","radio":"Radio-dugme","textField":"Tekstualno polje","textarea":"Zona teksta","hiddenField":"Skriveno polje","button":"Dugme","select":"Izborno polje","imageButton":"Dugme sa slikom","notSet":"<nije postavljeno>","id":"Id","name":"Naziv","langDir":"Smer jezika","langDirLtr":"S leva na desno (LTR)","langDirRtl":"S desna na levo (RTL)","langCode":"Kôd jezika","longDescr":"Pun opis URL","cssClass":"Stylesheet klase","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"Otkaži","close":"Zatvori","preview":"Izgled stranice","resize":"Resize","generalTab":"Opšte","advancedTab":"Napredni tagovi","validateNumberFailed":"Ova vrednost nije broj.","confirmNewPage":"Nesačuvane promene ovog sadržaja će biti izgubljene. Jeste li sigurni da želita da učitate novu stranu?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Opcije","target":"Meta","targetNew":"Novi prozor (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Isti prozor (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"S leva na desno (LTR)","langDirRTL":"S desna na levo (RTL)","styles":"Stil","cssClasses":"Stylesheet klase","width":"Širina","height":"Visina","align":"Ravnanje","alignLeft":"Levo","alignRight":"Desno","alignCenter":"Sredina","alignJustify":"Obostrano ravnanje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dole","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Visina mora biti broj.","invalidWidth":"Širina mora biti broj.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"basicstyles":{"bold":"Podebljano","italic":"Kurziv","strike":"Precrtano","subscript":"Indeks","superscript":"Stepen","underline":"Podvučeno"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+C).","cut":"Iseci","cutError":"Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+X).","paste":"Zalepi","pasteArea":"Prostor za lepljenje","pasteMsg":"Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu prečicu (<STRONG>Ctrl/Cmd+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.","securityMsg":"Zbog sigurnosnih postavki vašeg pregledača, editor nije u mogućnosti da direktno pristupi podacima u klipbordu. Potrebno je da zalepite još jednom u ovom prozoru.","title":"Zalepi"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatski","bgColorTitle":"Boja pozadine","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Više boja...","panelTitle":"Colors","textColorTitle":"Boja teksta"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Veličina fonta","voiceLabel":"Font Size","panelTitle":"Veličina fonta"},"label":"Font","panelTitle":"Font","voiceLabel":"Font"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adresa","tag_div":"Normalno (DIV)","tag_h1":"Naslov 1","tag_h2":"Naslov 2","tag_h3":"Naslov 3","tag_h4":"Naslov 4","tag_h5":"Naslov 5","tag_h6":"Naslov 6","tag_p":"Normal","tag_pre":"Formatirano"},"horizontalrule":{"toolbar":"Unesi horizontalnu liniju"},"indent":{"indent":"Uvećaj levu marginu","outdent":"Smanji levu marginu"},"fakeobjects":{"anchor":"Unesi/izmeni sidro","flash":"Flash Animation","hiddenfield":"Skriveno polje","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Pristupni taster","advanced":"Napredni tagovi","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory naslov","anchor":{"toolbar":"Unesi/izmeni sidro","menu":"Osobine sidra","title":"Osobine sidra","name":"Naziv sidra","errorName":"Unesite naziv sidra","remove":"Ukloni sidro"},"anchorId":"Po Id-u elementa","anchorName":"Po nazivu sidra","charset":"Linked Resource Charset","cssClasses":"Stylesheet klase","emailAddress":"E-Mail adresa","emailBody":"Sadržaj poruke","emailSubject":"Naslov","id":"Id","info":"Link Info","langCode":"Smer jezika","langDir":"Smer jezika","langDirLTR":"S leva na desno (LTR)","langDirRTL":"S desna na levo (RTL)","menu":"Izmeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra)","noEmail":"Otkucajte adresu elektronske pote","noUrl":"Unesite URL linka","other":"<остало>","popupDependent":"Zavisno (Netscape)","popupFeatures":"Mogućnosti popup prozora","popupFullScreen":"Prikaz preko celog ekrana (IE)","popupLeft":"Od leve ivice ekrana (px)","popupLocationBar":"Lokacija","popupMenuBar":"Kontekstni meni","popupResizable":"Promenljive veličine","popupScrollBars":"Scroll bar","popupStatusBar":"Statusna linija","popupToolbar":"Toolbar","popupTop":"Od vrha ekrana (px)","rel":"Odnos","selectAnchor":"Odaberi sidro","styles":"Stil","tabIndex":"Tab indeks","target":"Meta","targetFrame":"<okvir>","targetFrameName":"Naziv odredišnog frejma","targetPopup":"<popup prozor>","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toolbar":"Unesi/izmeni link","type":"Vrsta linka","unlink":"Ukloni link","upload":"Pošalji"},"list":{"bulletedlist":"Nenabrojiva lista","numberedlist":"Nabrojiva lista"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Zalepi iz Worda","toolbar":"Zalepi iz Worda"},"pastetext":{"button":"Zalepi kao čist tekst","title":"Zalepi kao čist tekst"},"removeformat":{"toolbar":"Ukloni formatiranje"},"specialchar":{"options":"Special Character Options","title":"Odaberite specijalni karakter","toolbar":"Unesi specijalni karakter"},"stylescombo":{"label":"Stil","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Veličina okvira","caption":"Naslov tabele","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Obriši ćelije","merge":"Spoj celije","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Razmak ćelija","cellSpace":"Ćelijski prostor","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Obriši kolone"},"columns":"Kolona","deleteTable":"Izbriši tabelu","headers":"Zaglavlja","headersBoth":"Oba","headersColumn":"Prva kolona","headersNone":"None","headersRow":"Prvi red","invalidBorder":"Veličina okvira mora biti broj.","invalidCellPadding":"Padding polja mora biti pozitivan broj.","invalidCellSpacing":"Razmak između ćelija mora biti pozitivan broj.","invalidCols":"Broj kolona mora biti broj veći od 0.","invalidHeight":"Visina tabele mora biti broj.","invalidRows":"Broj redova mora biti veći od 0.","invalidWidth":"Širina tabele mora biti broj.","menu":"Osobine tabele","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Obriši redove"},"rows":"Redova","summary":"Sažetak","title":"Osobine tabele","toolbar":"Tabela","widthPc":"procenata","widthPx":"piksela","widthUnit":"jedinica za širinu"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Suzi alatnu traku","toolbarExpand":"Proširi alatnu traku","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Alatne trake"},"undo":{"redo":"Ponovi akciju","undo":"Poni�ti akciju"},"justify":{"block":"Obostrano ravnanje","center":"Centriran tekst","left":"Levo ravnanje","right":"Desno ravnanje"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/sr.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/sr.js new file mode 100755 index 0000000000..5e463bf961 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/sr.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['sr']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Претражи сервер","url":"УРЛ","protocol":"Протокол","upload":"Пошаљи","uploadSubmit":"Пошаљи на сервер","image":"Слика","flash":"Флеш елемент","form":"Форма","checkbox":"Поље за потврду","radio":"Радио-дугме","textField":"Текстуално поље","textarea":"Зона текста","hiddenField":"Скривено поље","button":"Дугме","select":"Изборно поље","imageButton":"Дугме са сликом","notSet":"<није постављено>","id":"Ид","name":"Назив","langDir":"Смер језика","langDirLtr":"С лева на десно (LTR)","langDirRtl":"С десна на лево (RTL)","langCode":"Kôд језика","longDescr":"Пун опис УРЛ","cssClass":"Stylesheet класе","advisoryTitle":"Advisory наслов","cssStyle":"Стил","ok":"OK","cancel":"Oткажи","close":"Затвори","preview":"Изглед странице","resize":"Resize","generalTab":"Опште","advancedTab":"Напредни тагови","validateNumberFailed":"Ова вредност није цигра.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Опције","target":"Meтa","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"С лева на десно (LTR)","langDirRTL":"С десна на лево (RTL)","styles":"Стил","cssClasses":"Stylesheet класе","width":"Ширина","height":"Висина","align":"Равнање","alignLeft":"Лево","alignRight":"Десно","alignCenter":"Средина","alignJustify":"Обострано равнање","alignTop":"Врх","alignMiddle":"Средина","alignBottom":"Доле","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"basicstyles":{"bold":"Подебљано","italic":"Курзив","strike":"Прецртано","subscript":"Индекс","superscript":"Степен","underline":"Подвучено"},"clipboard":{"copy":"Копирај","copyError":"Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+C).","cut":"Исеци","cutError":"Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+X).","paste":"Залепи","pasteArea":"Залепи зону","pasteMsg":"Молимо Вас да залепите унутар доње површине користећи тастатурну пречицу (<STRONG>Ctrl/Cmd+V</STRONG>) и да притиснете <STRONG>OK</STRONG>.","securityMsg":"Због сигурносних подешавања претраживача, едитор не може да приступи оставу. Требате да га поново залепите у овом прозору.","title":"Залепи"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Аутоматски","bgColorTitle":"Боја позадине","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Више боја...","panelTitle":"Colors","textColorTitle":"Боја текста"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Величина фонта","voiceLabel":"Font Size","panelTitle":"Величина фонта"},"label":"Фонт","panelTitle":"Фонт","voiceLabel":"Фонт"},"format":{"label":"Формат","panelTitle":"Формат","tag_address":"Adresa","tag_div":"Нормално (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatirano"},"horizontalrule":{"toolbar":"Унеси хоризонталну линију"},"indent":{"indent":"Увећај леву маргину","outdent":"Смањи леву маргину"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Приступни тастер","advanced":"Напредни тагови","advisoryContentType":"Advisory врста садржаја","advisoryTitle":"Advisory наслов","anchor":{"toolbar":"Унеси/измени сидро","menu":"Особине сидра","title":"Особине сидра","name":"Име сидра","errorName":"Молимо Вас да унесете име сидра","remove":"Remove Anchor"},"anchorId":"Пo Ид-jу елемента","anchorName":"По називу сидра","charset":"Linked Resource Charset","cssClasses":"Stylesheet класе","emailAddress":"Адреса електронске поште","emailBody":"Садржај поруке","emailSubject":"Наслов","id":"Ид","info":"Линк инфо","langCode":"Смер језика","langDir":"Смер језика","langDirLTR":"С лева на десно (LTR)","langDirRTL":"С десна на лево (RTL)","menu":"Промени линк","name":"Назив","noAnchors":"(Нема доступних сидра)","noEmail":"Откуцајте адресу електронске поште","noUrl":"Унесите УРЛ линка","other":"<друго>","popupDependent":"Зависно (Netscape)","popupFeatures":"Могућности искачућег прозора","popupFullScreen":"Приказ преко целог екрана (ИE)","popupLeft":"Од леве ивице екрана (пиксела)","popupLocationBar":"Локација","popupMenuBar":"Контекстни мени","popupResizable":"Величина се мења","popupScrollBars":"Скрол бар","popupStatusBar":"Статусна линија","popupToolbar":"Toolbar","popupTop":"Од врха екрана (пиксела)","rel":"Однос","selectAnchor":"Одабери сидро","styles":"Стил","tabIndex":"Таб индекс","target":"Meтa","targetFrame":"<оквир>","targetFrameName":"Назив одредишног фрејма","targetPopup":"<искачући прозор>","targetPopupName":"Назив искачућег прозора","title":"Линк","toAnchor":"Сидро на овој страници","toEmail":"Eлектронска пошта","toUrl":"УРЛ","toolbar":"Унеси/измени линк","type":"Врста линка","unlink":"Уклони линк","upload":"Пошаљи"},"list":{"bulletedlist":"Ненабројива листа","numberedlist":"Набројиву листу"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Залепи из Worda","toolbar":"Залепи из Worda"},"pastetext":{"button":"Залепи као чист текст","title":"Залепи као чист текст"},"removeformat":{"toolbar":"Уклони форматирање"},"specialchar":{"options":"Опције специјалног карактера","title":"Одаберите специјални карактер","toolbar":"Унеси специјални карактер"},"stylescombo":{"label":"Стил","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Величина оквира","caption":"Наслов табеле","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Обриши ћелије","merge":"Спој ћелије","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Размак ћелија","cellSpace":"Ћелијски простор","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Обриши колоне"},"columns":"Kолона","deleteTable":"Обриши таблу","headers":"Поглавља","headersBoth":"Оба","headersColumn":"Прва колона","headersNone":"None","headersRow":"Први ред","invalidBorder":"Величина ивице треба да буде цифра.","invalidCellPadding":"Пуњење ћелије треба да буде позитивна цифра.","invalidCellSpacing":"Размак ћелије треба да буде позитивна цифра.","invalidCols":"Број колона треба да буде цифра већа од 0.","invalidHeight":"Висина табеле треба да буде цифра.","invalidRows":"Број реда треба да буде цифра већа од 0.","invalidWidth":"Ширина табеле треба да буде цифра.","menu":"Особине табеле","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Обриши редове"},"rows":"Редова","summary":"Резиме","title":"Особине табеле","toolbar":"Табела","widthPc":"процената","widthPx":"пиксела","widthUnit":"јединица ширине"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Склопи алатну траку","toolbarExpand":"Прошири алатну траку","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Едитор алатне траке"},"undo":{"redo":"Понови акцију","undo":"Поништи акцију"},"justify":{"block":"Обострано равнање","center":"Центриран текст","left":"Лево равнање","right":"Десно равнање"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/sv.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/sv.js new file mode 100755 index 0000000000..b6b0ff6a66 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/sv.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['sv']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tryck ALT 0 för hjälp","browseServer":"Bläddra på server","url":"URL","protocol":"Protokoll","upload":"Ladda upp","uploadSubmit":"Skicka till server","image":"Bild","flash":"Flash","form":"Formulär","checkbox":"Kryssruta","radio":"Alternativknapp","textField":"Textfält","textarea":"Textruta","hiddenField":"Dolt fält","button":"Knapp","select":"Flervalslista","imageButton":"Bildknapp","notSet":"<ej angivet>","id":"Id","name":"Namn","langDir":"Språkriktning","langDirLtr":"Vänster till Höger (VTH)","langDirRtl":"Höger till Vänster (HTV)","langCode":"Språkkod","longDescr":"URL-beskrivning","cssClass":"Stilmall","advisoryTitle":"Titel","cssStyle":"Stilmall","ok":"OK","cancel":"Avbryt","close":"Stäng","preview":"Förhandsgranska","resize":"Dra för att ändra storlek","generalTab":"Allmänt","advancedTab":"Avancerad","validateNumberFailed":"Värdet är inte ett nummer.","confirmNewPage":"Alla ändringar i innehållet kommer att förloras. Är du säker på att du vill ladda en ny sida?","confirmCancel":"Några av alternativen har ändrats. Är du säker på att du vill stänga dialogrutan?","options":"Alternativ","target":"Mål","targetNew":"Nytt fönster (_blank)","targetTop":"Översta fönstret (_top)","targetSelf":"Samma fönster (_self)","targetParent":"Föregående fönster (_parent)","langDirLTR":"Vänster till höger (LTR)","langDirRTL":"Höger till vänster (RTL)","styles":"Stil","cssClasses":"Stilmallar","width":"Bredd","height":"Höjd","align":"Justering","alignLeft":"Vänster","alignRight":"Höger","alignCenter":"Centrerad","alignJustify":"Justera till marginaler","alignTop":"Överkant","alignMiddle":"Mitten","alignBottom":"Nederkant","alignNone":"Ingen","invalidValue":"Felaktigt värde.","invalidHeight":"Höjd måste vara ett nummer.","invalidWidth":"Bredd måste vara ett nummer.","invalidCssLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan CSS-mätenheter (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan godkända HTML-mätenheter (px eller %).","invalidInlineStyle":"Det angivna värdet för style måste innehålla en eller flera tupler separerade med semikolon i följande format: \"name : value\"","cssLengthTooltip":"Ange ett nummer i pixlar eller ett nummer men godkänd CSS-mätenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, Ej tillgänglig</span>"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Genomstruken","subscript":"Nedsänkta tecken","superscript":"Upphöjda tecken","underline":"Understruken"},"clipboard":{"copy":"Kopiera","copyError":"Säkerhetsinställningar i Er webbläsare tillåter inte åtgärden kopiera. Använd (Ctrl/Cmd+C) istället.","cut":"Klipp ut","cutError":"Säkerhetsinställningar i Er webbläsare tillåter inte åtgärden klipp ut. Använd (Ctrl/Cmd+X) istället.","paste":"Klistra in","pasteArea":"Paste Area","pasteMsg":"Var god och klistra in Er text i rutan nedan genom att använda (<strong>Ctrl/Cmd+V</strong>) klicka sen på OK.","securityMsg":"På grund av din webbläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.","title":"Klistra in"},"button":{"selectedLabel":"%1 (Vald)"},"colorbutton":{"auto":"Automatisk","bgColorTitle":"Bakgrundsfärg","colors":{"000":"Svart","800000":"Rödbrun","8B4513":"Mörkbrun","2F4F4F":"Skiffergrå","008080":"Kricka","000080":"Marinblå","4B0082":"Indigo","696969":"Mörkgrå","B22222":"Tegelsten","A52A2A":"Brun","DAA520":"Mörk guld","006400":"Mörkgrön","40E0D0":"Turkos","0000CD":"Medium blå","800080":"Lila","808080":"Grå","F00":"Röd","FF8C00":"Mörkorange","FFD700":"Guld","008000":"Grön","0FF":"Turkos","00F":"Blå","EE82EE":"Violett","A9A9A9":"Matt grå","FFA07A":"Laxrosa","FFA500":"Orange","FFFF00":"Gul","00FF00":"Lime","AFEEEE":"Ljusturkos","ADD8E6":"Ljusblå","DDA0DD":"Plommon","D3D3D3":"Ljusgrå","FFF0F5":"Ljus lavendel","FAEBD7":"Antikvit","FFFFE0":"Ljusgul","F0FFF0":"Honungsdagg","F0FFFF":"Azurblå","F0F8FF":"Aliceblå","E6E6FA":"Lavendel","FFF":"Vit"},"more":"Fler färger...","panelTitle":"Färger","textColorTitle":"Textfärg"},"colordialog":{"clear":"Rensa","highlight":"Markera","options":"Färgalternativ","selected":"Vald färg","title":"Välj färg"},"elementspath":{"eleLabel":"Elementets sökväg","eleTitle":"%1 element"},"font":{"fontSize":{"label":"Storlek","voiceLabel":"Teckenstorlek","panelTitle":"Teckenstorlek"},"label":"Typsnitt","panelTitle":"Typsnitt","voiceLabel":"Typsnitt"},"format":{"label":"Teckenformat","panelTitle":"Teckenformat","tag_address":"Adress","tag_div":"Normal (DIV)","tag_h1":"Rubrik 1","tag_h2":"Rubrik 2","tag_h3":"Rubrik 3","tag_h4":"Rubrik 4","tag_h5":"Rubrik 5","tag_h6":"Rubrik 6","tag_p":"Normal","tag_pre":"Formaterad"},"horizontalrule":{"toolbar":"Infoga horisontal linje"},"indent":{"indent":"Öka indrag","outdent":"Minska indrag"},"fakeobjects":{"anchor":"Ankare","flash":"Flashanimation","hiddenfield":"Gömt fält","iframe":"iFrame","unknown":"Okänt objekt"},"link":{"acccessKey":"Behörighetsnyckel","advanced":"Avancerad","advisoryContentType":"Innehållstyp","advisoryTitle":"Titel","anchor":{"toolbar":"Infoga/Redigera ankarlänk","menu":"Egenskaper för ankarlänk","title":"Egenskaper för ankarlänk","name":"Ankarnamn","errorName":"Var god ange ett ankarnamn","remove":"Radera ankare"},"anchorId":"Efter element-id","anchorName":"Efter ankarnamn","charset":"Teckenuppställning","cssClasses":"Stilmall","emailAddress":"E-postadress","emailBody":"Innehåll","emailSubject":"Ämne","id":"Id","info":"Länkinformation","langCode":"Språkkod","langDir":"Språkriktning","langDirLTR":"Vänster till höger (VTH)","langDirRTL":"Höger till vänster (HTV)","menu":"Redigera länk","name":"Namn","noAnchors":"(Inga ankare kunde hittas)","noEmail":"Var god ange e-postadress","noUrl":"Var god ange länkens URL","other":"<annan>","popupDependent":"Beroende (endast Netscape)","popupFeatures":"Popup-fönstrets egenskaper","popupFullScreen":"Helskärm (endast IE)","popupLeft":"Position från vänster","popupLocationBar":"Adressfält","popupMenuBar":"Menyfält","popupResizable":"Resizable","popupScrollBars":"Scrolllista","popupStatusBar":"Statusfält","popupToolbar":"Verktygsfält","popupTop":"Position från sidans topp","rel":"Förhållande","selectAnchor":"Välj ett ankare","styles":"Stilmall","tabIndex":"Tabindex","target":"Mål","targetFrame":"<ram>","targetFrameName":"Målets ramnamn","targetPopup":"<popup-fönster>","targetPopupName":"Popup-fönstrets namn","title":"Länk","toAnchor":"Länk till ankare i texten","toEmail":"E-post","toUrl":"URL","toolbar":"Infoga/Redigera länk","type":"Länktyp","unlink":"Radera länk","upload":"Ladda upp"},"list":{"bulletedlist":"Infoga/ta bort punktlista","numberedlist":"Infoga/ta bort numrerad lista"},"magicline":{"title":"Infoga paragraf här"},"maximize":{"maximize":"Maximera","minimize":"Minimera"},"pastefromword":{"confirmCleanup":"Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa den innan du klistrar in den?","error":"Det var inte möjligt att städa upp den inklistrade data på grund av ett internt fel","title":"Klistra in från Word","toolbar":"Klistra in från Word"},"pastetext":{"button":"Klistra in som vanlig text","title":"Klistra in som vanlig text"},"removeformat":{"toolbar":"Radera formatering"},"specialchar":{"options":"Alternativ för utökade tecken","title":"Välj utökat tecken","toolbar":"Klistra in utökat tecken"},"stylescombo":{"label":"Anpassad stil","panelTitle":"Formatmallar","panelTitle1":"Blockstil","panelTitle2":"Inbäddad stil","panelTitle3":"Objektets stil"},"table":{"border":"Kantstorlek","caption":"Rubrik","cell":{"menu":"Cell","insertBefore":"Lägg till cell före","insertAfter":"Lägg till cell efter","deleteCell":"Radera celler","merge":"Sammanfoga celler","mergeRight":"Sammanfoga höger","mergeDown":"Sammanfoga ner","splitHorizontal":"Dela cell horisontellt","splitVertical":"Dela cell vertikalt","title":"Egenskaper för cell","cellType":"Celltyp","rowSpan":"Rad spann","colSpan":"Kolumnen spann","wordWrap":"Radbrytning","hAlign":"Horisontell justering","vAlign":"Vertikal justering","alignBaseline":"Baslinje","bgColor":"Bakgrundsfärg","borderColor":"Ramfärg","data":"Data","header":"Rubrik","yes":"Ja","no":"Nej","invalidWidth":"Cellens bredd måste vara ett nummer.","invalidHeight":"Cellens höjd måste vara ett nummer.","invalidRowSpan":"Radutvidgning måste vara ett heltal.","invalidColSpan":"Kolumn måste vara ett heltal.","chooseColor":"Välj"},"cellPad":"Cellutfyllnad","cellSpace":"Cellavstånd","column":{"menu":"Kolumn","insertBefore":"Lägg till kolumn före","insertAfter":"Lägg till kolumn efter","deleteColumn":"Radera kolumn"},"columns":"Kolumner","deleteTable":"Radera tabell","headers":"Rubriker","headersBoth":"Båda","headersColumn":"Första kolumnen","headersNone":"Ingen","headersRow":"Första raden","invalidBorder":"Ram måste vara ett nummer.","invalidCellPadding":"Luft i cell måste vara ett nummer.","invalidCellSpacing":"Luft i cell måste vara ett nummer.","invalidCols":"Antal kolumner måste vara ett nummer större än 0.","invalidHeight":"Tabellens höjd måste vara ett nummer.","invalidRows":"Antal rader måste vara större än 0.","invalidWidth":"Tabell måste vara ett nummer.","menu":"Tabellegenskaper","row":{"menu":"Rad","insertBefore":"Lägg till rad före","insertAfter":"Lägg till rad efter","deleteRow":"Radera rad"},"rows":"Rader","summary":"Sammanfattning","title":"Tabellegenskaper","toolbar":"Tabell","widthPc":"procent","widthPx":"pixlar","widthUnit":"enhet bredd"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Dölj verktygsfält","toolbarExpand":"Visa verktygsfält","toolbarGroups":{"document":"Dokument","clipboard":"Urklipp/ångra","editing":"Redigering","forms":"Formulär","basicstyles":"Basstilar","paragraph":"Paragraf","links":"Länkar","insert":"Infoga","styles":"Stilar","colors":"Färger","tools":"Verktyg"},"toolbars":"Redigera verktygsfält"},"undo":{"redo":"Gör om","undo":"Ångra"},"justify":{"block":"Justera till marginaler","center":"Centrera","left":"Vänsterjustera","right":"Högerjustera"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/th.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/th.js new file mode 100755 index 0000000000..2673187a42 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/th.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['th']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"กด ALT 0 หากต้องการความช่วยเหลือ","browseServer":"เปิดหน้าต่างจัดการไฟล์อัพโหลด","url":"ที่อยู่อ้างอิง URL","protocol":"โปรโตคอล","upload":"อัพโหลดไฟล์","uploadSubmit":"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)","image":"รูปภาพ","flash":"ไฟล์ Flash","form":"แบบฟอร์ม","checkbox":"เช็คบ๊อก","radio":"เรดิโอบัตตอน","textField":"เท็กซ์ฟิลด์","textarea":"เท็กซ์แอเรีย","hiddenField":"ฮิดเดนฟิลด์","button":"ปุ่ม","select":"แถบตัวเลือก","imageButton":"ปุ่มแบบรูปภาพ","notSet":"<ไม่ระบุ>","id":"ไอดี","name":"ชื่อ","langDir":"การเขียน-อ่านภาษา","langDirLtr":"จากซ้ายไปขวา (LTR)","langDirRtl":"จากขวามาซ้าย (RTL)","langCode":"รหัสภาษา","longDescr":"คำอธิบายประกอบ URL","cssClass":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","advisoryTitle":"คำเกริ่นนำ","cssStyle":"ลักษณะการแสดงผล","ok":"ตกลง","cancel":"ยกเลิก","close":"ปิด","preview":"ดูหน้าเอกสารตัวอย่าง","resize":"ปรับขนาด","generalTab":"ทั่วไป","advancedTab":"ขั้นสูง","validateNumberFailed":"ค่านี้ไม่ใช่ตัวเลข","confirmNewPage":"การเปลี่ยนแปลงใดๆ ในเนื้อหานี้ ที่ไม่ได้ถูกบันทึกไว้ จะสูญหายทั้งหมด คุณแน่ใจว่าจะเรียกหน้าใหม่?","confirmCancel":"ตัวเลือกบางตัวมีการเปลี่ยนแปลง คุณแน่ใจว่าจะปิดกล่องโต้ตอบนี้?","options":"ตัวเลือก","target":"การเปิดหน้าลิงค์","targetNew":"หน้าต่างใหม่ (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"หน้าต่างเดียวกัน (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"จากซ้ายไปขวา (LTR)","langDirRTL":"จากขวามาซ้าย (RTL)","styles":"ลักษณะการแสดงผล","cssClasses":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","width":"ความกว้าง","height":"ความสูง","align":"การจัดวาง","alignLeft":"ชิดซ้าย","alignRight":"ชิดขวา","alignCenter":"กึ่งกลาง","alignJustify":"நியாயப்படுத்தவும்","alignTop":"บนสุด","alignMiddle":"กึ่งกลางแนวตั้ง","alignBottom":"ชิดด้านล่าง","alignNone":"None","invalidValue":"ค่าไม่ถูกต้อง","invalidHeight":"ความสูงต้องเป็นตัวเลข","invalidWidth":"ความกว้างต้องเป็นตัวเลข","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"basicstyles":{"bold":"ตัวหนา","italic":"ตัวเอียง","strike":"ตัวขีดเส้นทับ","subscript":"ตัวห้อย","superscript":"ตัวยก","underline":"ตัวขีดเส้นใต้"},"clipboard":{"copy":"สำเนา","copyError":"ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว C พร้อมกัน).","cut":"ตัด","cutError":"ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว X พร้อมกัน).","paste":"วาง","pasteArea":"Paste Area","pasteMsg":"กรุณาใช้คีย์บอร์ดเท่านั้น โดยกดปุ๋ม (<strong>Ctrl/Cmd และ V</strong>)พร้อมๆกัน และกด <strong>OK</strong>.","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"วาง"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"สีอัตโนมัติ","bgColorTitle":"สีพื้นหลัง","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"เลือกสีอื่นๆ...","panelTitle":"Colors","textColorTitle":"สีตัวอักษร"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"font":{"fontSize":{"label":"ขนาด","voiceLabel":"Font Size","panelTitle":"ขนาด"},"label":"แบบอักษร","panelTitle":"แบบอักษร","voiceLabel":"แบบอักษร"},"format":{"label":"รูปแบบ","panelTitle":"รูปแบบ","tag_address":"Address","tag_div":"Paragraph (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"แทรกเส้นคั่นบรรทัด"},"indent":{"indent":"เพิ่มระยะย่อหน้า","outdent":"ลดระยะย่อหน้า"},"fakeobjects":{"anchor":"แทรก/แก้ไข Anchor","flash":"ภาพอนิเมชั่นแฟลช","hiddenfield":"ฮิดเดนฟิลด์","iframe":"IFrame","unknown":"วัตถุไม่ทราบชนิด"},"link":{"acccessKey":"แอคเซส คีย์","advanced":"ขั้นสูง","advisoryContentType":"ชนิดของคำเกริ่นนำ","advisoryTitle":"คำเกริ่นนำ","anchor":{"toolbar":"แทรก/แก้ไข Anchor","menu":"รายละเอียด Anchor","title":"รายละเอียด Anchor","name":"ชื่อ Anchor","errorName":"กรุณาระบุชื่อของ Anchor","remove":"Remove Anchor"},"anchorId":"ไอดี","anchorName":"ชื่อ","charset":"ลิงค์เชื่อมโยงไปยังชุดตัวอักษร","cssClasses":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","emailAddress":"อีเมล์ (E-Mail)","emailBody":"ข้อความ","emailSubject":"หัวเรื่อง","id":"ไอดี","info":"รายละเอียด","langCode":"การเขียน-อ่านภาษา","langDir":"การเขียน-อ่านภาษา","langDirLTR":"จากซ้ายไปขวา (LTR)","langDirRTL":"จากขวามาซ้าย (RTL)","menu":"แก้ไข ลิงค์","name":"ชื่อ","noAnchors":"(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)","noEmail":"กรุณาระบุอีเมล์ (E-mail)","noUrl":"กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)","other":"<อื่น ๆ>","popupDependent":"แสดงเต็มหน้าจอ (Netscape)","popupFeatures":"คุณสมบัติของหน้าจอเล็ก (Pop-up)","popupFullScreen":"แสดงเต็มหน้าจอ (IE5.5++ เท่านั้น)","popupLeft":"พิกัดซ้าย (Left Position)","popupLocationBar":"แสดงที่อยู่ของไฟล์","popupMenuBar":"แสดงแถบเมนู","popupResizable":"สามารถปรับขนาดได้","popupScrollBars":"แสดงแถบเลื่อน","popupStatusBar":"แสดงแถบสถานะ","popupToolbar":"แสดงแถบเครื่องมือ","popupTop":"พิกัดบน (Top Position)","rel":"ความสัมพันธ์","selectAnchor":"ระบุข้อมูลของจุดเชื่อมโยง (Anchor)","styles":"ลักษณะการแสดงผล","tabIndex":"ลำดับของ แท็บ","target":"การเปิดหน้าลิงค์","targetFrame":"<เปิดในเฟรม>","targetFrameName":"ชื่อทาร์เก็ตเฟรม","targetPopup":"<เปิดหน้าจอเล็ก (Pop-up)>","targetPopupName":"ระบุชื่อหน้าจอเล็ก (Pop-up)","title":"ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ","toAnchor":"จุดเชื่อมโยง (Anchor)","toEmail":"ส่งอีเมล์ (E-Mail)","toUrl":"ที่อยู่อ้างอิง URL","toolbar":"แทรก/แก้ไข ลิงค์","type":"ประเภทของลิงค์","unlink":"ลบ ลิงค์","upload":"อัพโหลดไฟล์"},"list":{"bulletedlist":"ลำดับรายการแบบสัญลักษณ์","numberedlist":"ลำดับรายการแบบตัวเลข"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"ขยายใหญ่","minimize":"ย่อขนาด"},"pastefromword":{"confirmCleanup":"ข้อความที่คุณต้องการวางลงไปเป็นข้อความที่คัดลอกมาจากโปรแกรมไมโครซอฟท์เวิร์ด คุณต้องการล้างค่าข้อความดังกล่าวก่อนวางลงไปหรือไม่?","error":"ไม่สามารถล้างข้อมูลที่ต้องการวางได้เนื่องจากเกิดข้อผิดพลาดภายในระบบ","title":"วางสำเนาจากตัวอักษรเวิร์ด","toolbar":"วางสำเนาจากตัวอักษรเวิร์ด"},"pastetext":{"button":"วางแบบตัวอักษรธรรมดา","title":"วางแบบตัวอักษรธรรมดา"},"removeformat":{"toolbar":"ล้างรูปแบบ"},"specialchar":{"options":"Special Character Options","title":"แทรกตัวอักษรพิเศษ","toolbar":"แทรกตัวอักษรพิเศษ"},"stylescombo":{"label":"ลักษณะ","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"ขนาดเส้นขอบ","caption":"หัวเรื่องของตาราง","cell":{"menu":"ช่องตาราง","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"ลบช่อง","merge":"ผสานช่อง","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"ระยะแนวตั้ง","cellSpace":"ระยะแนวนอนน","column":{"menu":"คอลัมน์","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"ลบสดมน์"},"columns":"สดมน์","deleteTable":"ลบตาราง","headers":"ส่วนหัว","headersBoth":"ทั้งสองอย่าง","headersColumn":"คอลัมน์แรก","headersNone":"None","headersRow":"แถวแรก","invalidBorder":"ขนาดเส้นกรอบต้องเป็นจำนวนตัวเลข","invalidCellPadding":"ช่องว่างภายในเซลล์ต้องเลขจำนวนบวก","invalidCellSpacing":"ช่องว่างภายในเซลล์ต้องเป็นเลขจำนวนบวก","invalidCols":"จำนวนคอลัมน์ต้องเป็นจำนวนมากกว่า 0","invalidHeight":"ส่วนสูงของตารางต้องเป็นตัวเลข","invalidRows":"จำนวนของแถวต้องเป็นจำนวนมากกว่า 0","invalidWidth":"ความกว้างตารางต้องเป็นตัวเลข","menu":"คุณสมบัติของ ตาราง","row":{"menu":"แถว","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"ลบแถว"},"rows":"แถว","summary":"สรุปความ","title":"คุณสมบัติของ ตาราง","toolbar":"ตาราง","widthPc":"เปอร์เซ็น","widthPx":"จุดสี","widthUnit":"หน่วยความกว้าง"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"ซ่อนแถบเครื่องมือ","toolbarExpand":"เปิดแถบเครื่องมือ","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"แถบเครื่องมือช่วยพิมพ์ข้อความ"},"undo":{"redo":"ทำซ้ำคำสั่ง","undo":"ยกเลิกคำสั่ง"},"justify":{"block":"จัดพอดีหน้ากระดาษ","center":"จัดกึ่งกลาง","left":"จัดชิดซ้าย","right":"จัดชิดขวา"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/tr.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/tr.js new file mode 100755 index 0000000000..126e8744b6 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/tr.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['tr']={"editor":"Zengin Metin Editörü","editorPanel":"Zengin Metin Editör Paneli","common":{"editorHelp":"Yardım için ALT 0 tuşlarına basın","browseServer":"Sunucuya Gözat","url":"URL","protocol":"Protokol","upload":"Karşıya Yükle","uploadSubmit":"Sunucuya Gönder","image":"Resim","flash":"Flash","form":"Form","checkbox":"Onay Kutusu","radio":"Seçenek Düğmesi","textField":"Metin Kutusu","textarea":"Metin Alanı","hiddenField":"Gizli Alan","button":"Düğme","select":"Seçme Alanı","imageButton":"Resim Düğmesi","notSet":"<tanımlanmamış>","id":"Kimlik","name":"İsim","langDir":"Dil Yönü","langDirLtr":"Soldan Sağa (LTR)","langDirRtl":"Sağdan Sola (RTL)","langCode":"Dil Kodlaması","longDescr":"Uzun Tanımlı URL","cssClass":"Biçem Sayfası Sınıfları","advisoryTitle":"Öneri Başlığı","cssStyle":"Biçem","ok":"Tamam","cancel":"İptal","close":"Kapat","preview":"Önizleme","resize":"Yeniden Boyutlandır","generalTab":"Genel","advancedTab":"Gelişmiş","validateNumberFailed":"Bu değer bir sayı değildir.","confirmNewPage":"Bu içerikle ilgili kaydedilmemiş tüm bilgiler kaybolacaktır. Yeni bir sayfa yüklemek istediğinizden emin misiniz?","confirmCancel":"Bazı seçenekleri değiştirdiniz. İletişim penceresini kapatmak istediğinizden emin misiniz?","options":"Seçenekler","target":"Hedef","targetNew":"Yeni Pencere (_blank)","targetTop":"En Üstteki Pencere (_top)","targetSelf":"Aynı Pencere (_self)","targetParent":"Üst Pencere (_parent)","langDirLTR":"Soldan Sağa (LTR)","langDirRTL":"Sağdan Sola (RTL)","styles":"Biçem","cssClasses":"Biçem Sayfası Sınıfları","width":"Genişlik","height":"Yükseklik","align":"Hizalama","alignLeft":"Sol","alignRight":"Sağ","alignCenter":"Ortala","alignJustify":"İki Kenara Yaslanmış","alignTop":"Üst","alignMiddle":"Orta","alignBottom":"Alt","alignNone":"Hiçbiri","invalidValue":"Geçersiz değer.","invalidHeight":"Yükseklik değeri bir sayı olmalıdır.","invalidWidth":"Genişlik değeri bir sayı olmalıdır.","invalidCssLength":"\"%1\" alanı için verilen değer, geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt, veya pc) içeren veya içermeyen pozitif bir sayı olmalıdır.","invalidHtmlLength":"Belirttiğiniz sayı \"%1\" alanı için pozitif bir sayı HTML birim değeri olmalıdır (px veya %).","invalidInlineStyle":"Satıriçi biçem için verilen değer, \"isim : değer\" biçiminde birbirinden noktalı virgüllerle ayrılan bir veya daha fazla değişkenler grubundan oluşmalıdır.","cssLengthTooltip":"Piksel türünde bir sayı veya geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt veya pc) içeren bir sayı girin.","unavailable":"%1<span class=\"cke_accessibility\">, kullanılamaz</span>"},"basicstyles":{"bold":"Kalın","italic":"İtalik","strike":"Üstü Çizgili","subscript":"Alt Simge","superscript":"Üst Simge","underline":"Altı Çizgili"},"clipboard":{"copy":"Kopyala","copyError":"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama işlemine izin vermiyor. İşlem için (Ctrl/Cmd+C) tuşlarını kullanın.","cut":"Kes","cutError":"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme işlemine izin vermiyor. İşlem için (Ctrl/Cmd+X) tuşlarını kullanın.","paste":"Yapıştır","pasteArea":"Yapıştırma Alanı","pasteMsg":"Lütfen aşağıdaki kutunun içine yapıştırın. (<STRONG>Ctrl/Cmd+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.","securityMsg":"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin direkt olarak panoya erişimine izin vermiyor. Bu pencere içine tekrar yapıştırmalısınız..","title":"Yapıştır"},"button":{"selectedLabel":"%1 (Seçilmiş)"},"colorbutton":{"auto":"Otomatik","bgColorTitle":"Arka Renk","colors":{"000":"Siyah","800000":"Kestane","8B4513":"Koyu Kahverengi","2F4F4F":"Koyu Kurşuni Gri","008080":"Teal","000080":"Mavi","4B0082":"Çivit Mavisi","696969":"Silik Gri","B22222":"Ateş Tuğlası","A52A2A":"Kahverengi","DAA520":"Altun Sırık","006400":"Koyu Yeşil","40E0D0":"Turkuaz","0000CD":"Orta Mavi","800080":"Pembe","808080":"Gri","F00":"Kırmızı","FF8C00":"Koyu Portakal","FFD700":"Altın","008000":"Yeşil","0FF":"Ciyan","00F":"Mavi","EE82EE":"Menekşe","A9A9A9":"Koyu Gri","FFA07A":"Açık Sarımsı","FFA500":"Portakal","FFFF00":"Sarı","00FF00":"Açık Yeşil","AFEEEE":"Sönük Turkuaz","ADD8E6":"Açık Mavi","DDA0DD":"Mor","D3D3D3":"Açık Gri","FFF0F5":"Eflatun Pembe","FAEBD7":"Antik Beyaz","FFFFE0":"Açık Sarı","F0FFF0":"Balsarısı","F0FFFF":"Gök Mavisi","F0F8FF":"Reha Mavi","E6E6FA":"Eflatun","FFF":"Beyaz"},"more":"Diğer renkler...","panelTitle":"Renkler","textColorTitle":"Yazı Rengi"},"colordialog":{"clear":"Temizle","highlight":"İşaretle","options":"Renk Seçenekleri","selected":"Seçilmiş","title":"Renk seç"},"elementspath":{"eleLabel":"Elementlerin yolu","eleTitle":"%1 elementi"},"font":{"fontSize":{"label":"Boyut","voiceLabel":"Font Size","panelTitle":"Boyut"},"label":"Yazı Türü","panelTitle":"Yazı Türü","voiceLabel":"Font"},"format":{"label":"Biçim","panelTitle":"Biçim","tag_address":"Adres","tag_div":"Paragraf (DIV)","tag_h1":"Başlık 1","tag_h2":"Başlık 2","tag_h3":"Başlık 3","tag_h4":"Başlık 4","tag_h5":"Başlık 5","tag_h6":"Başlık 6","tag_p":"Normal","tag_pre":"Biçimli"},"horizontalrule":{"toolbar":"Yatay Satır Ekle"},"indent":{"indent":"Sekme Arttır","outdent":"Sekme Azalt"},"fakeobjects":{"anchor":"Bağlantı","flash":"Flash Animasyonu","hiddenfield":"Gizli Alan","iframe":"IFrame","unknown":"Bilinmeyen Nesne"},"link":{"acccessKey":"Erişim Tuşu","advanced":"Gelişmiş","advisoryContentType":"Danışma İçerik Türü","advisoryTitle":"Danışma Başlığı","anchor":{"toolbar":"Bağlantı Ekle/Düzenle","menu":"Bağlantı Özellikleri","title":"Bağlantı Özellikleri","name":"Bağlantı Adı","errorName":"Lütfen bağlantı için ad giriniz","remove":"Bağlantıyı Kaldır"},"anchorId":"Eleman Kimlik Numarası ile","anchorName":"Bağlantı Adı ile","charset":"Bağlı Kaynak Karakter Gurubu","cssClasses":"Biçem Sayfası Sınıfları","emailAddress":"E-Posta Adresi","emailBody":"İleti Gövdesi","emailSubject":"İleti Konusu","id":"Id","info":"Link Bilgisi","langCode":"Dil Yönü","langDir":"Dil Yönü","langDirLTR":"Soldan Sağa (LTR)","langDirRTL":"Sağdan Sola (RTL)","menu":"Link Düzenle","name":"Ad","noAnchors":"(Bu belgede hiç çapa yok)","noEmail":"Lütfen E-posta adresini yazın","noUrl":"Lütfen Link URL'sini yazın","other":"<diğer>","popupDependent":"Bağımlı (Netscape)","popupFeatures":"Yeni Açılan Pencere Özellikleri","popupFullScreen":"Tam Ekran (IE)","popupLeft":"Sola Göre Konum","popupLocationBar":"Yer Çubuğu","popupMenuBar":"Menü Çubuğu","popupResizable":"Resizable","popupScrollBars":"Kaydırma Çubukları","popupStatusBar":"Durum Çubuğu","popupToolbar":"Araç Çubuğu","popupTop":"Yukarıya Göre Konum","rel":"İlişki","selectAnchor":"Bağlantı Seç","styles":"Biçem","tabIndex":"Sekme İndeksi","target":"Hedef","targetFrame":"<çerçeve>","targetFrameName":"Hedef Çerçeve Adı","targetPopup":"<yeni açılan pencere>","targetPopupName":"Yeni Açılan Pencere Adı","title":"Link","toAnchor":"Bu sayfada çapa","toEmail":"E-Posta","toUrl":"URL","toolbar":"Link Ekle/Düzenle","type":"Link Türü","unlink":"Köprü Kaldır","upload":"Karşıya Yükle"},"list":{"bulletedlist":"Simgeli Liste","numberedlist":"Numaralı Liste"},"magicline":{"title":"Parağrafı buraya ekle"},"maximize":{"maximize":"Büyült","minimize":"Küçült"},"pastefromword":{"confirmCleanup":"Yapıştırmaya çalıştığınız metin Word'den kopyalanmıştır. Yapıştırmadan önce silmek istermisiniz?","error":"Yapıştırmadaki veri bilgisi hata düzelene kadar silinmeyecektir","title":"Word'den Yapıştır","toolbar":"Word'den Yapıştır"},"pastetext":{"button":"Düz Metin Olarak Yapıştır","title":"Düz Metin Olarak Yapıştır"},"removeformat":{"toolbar":"Biçimi Kaldır"},"specialchar":{"options":"Özel Karakter Seçenekleri","title":"Özel Karakter Seç","toolbar":"Özel Karakter Ekle"},"stylescombo":{"label":"Biçem","panelTitle":"Stilleri Düzenliyor","panelTitle1":"Blok Stilleri","panelTitle2":"Inline Stilleri","panelTitle3":"Nesne Stilleri"},"table":{"border":"Kenar Kalınlığı","caption":"Başlık","cell":{"menu":"Hücre","insertBefore":"Hücre Ekle - Önce","insertAfter":"Hücre Ekle - Sonra","deleteCell":"Hücre Sil","merge":"Hücreleri Birleştir","mergeRight":"Birleştir - Sağdaki İle ","mergeDown":"Birleştir - Aşağıdaki İle ","splitHorizontal":"Hücreyi Yatay Böl","splitVertical":"Hücreyi Dikey Böl","title":"Hücre Özellikleri","cellType":"Hücre Tipi","rowSpan":"Satırlar Mesafesi (Span)","colSpan":"Sütünlar Mesafesi (Span)","wordWrap":"Kelime Kaydırma","hAlign":"Düşey Hizalama","vAlign":"Yataş Hizalama","alignBaseline":"Tabana","bgColor":"Arkaplan Rengi","borderColor":"Çerçeve Rengi","data":"Veri","header":"Başlık","yes":"Evet","no":"Hayır","invalidWidth":"Hücre genişliği sayı olmalıdır.","invalidHeight":"Hücre yüksekliği sayı olmalıdır.","invalidRowSpan":"Satırların mesafesi tam sayı olmalıdır.","invalidColSpan":"Sütünların mesafesi tam sayı olmalıdır.","chooseColor":"Seçiniz"},"cellPad":"Izgara yazı arası","cellSpace":"Izgara kalınlığı","column":{"menu":"Sütun","insertBefore":"Kolon Ekle - Önce","insertAfter":"Kolon Ekle - Sonra","deleteColumn":"Sütun Sil"},"columns":"Sütunlar","deleteTable":"Tabloyu Sil","headers":"Başlıklar","headersBoth":"Her İkisi","headersColumn":"İlk Sütun","headersNone":"Yok","headersRow":"İlk Satır","invalidBorder":"Çerceve büyüklüklüğü sayı olmalıdır.","invalidCellPadding":"Hücre aralığı (padding) sayı olmalıdır.","invalidCellSpacing":"Hücre boşluğu (spacing) sayı olmalıdır.","invalidCols":"Sütün sayısı 0 sayısından büyük olmalıdır.","invalidHeight":"Tablo yüksekliği sayı olmalıdır.","invalidRows":"Satır sayısı 0 sayısından büyük olmalıdır.","invalidWidth":"Tablo genişliği sayı olmalıdır.","menu":"Tablo Özellikleri","row":{"menu":"Satır","insertBefore":"Satır Ekle - Önce","insertAfter":"Satır Ekle - Sonra","deleteRow":"Satır Sil"},"rows":"Satırlar","summary":"Özet","title":"Tablo Özellikleri","toolbar":"Tablo","widthPc":"yüzde","widthPx":"piksel","widthUnit":"genişlik birimi"},"contextmenu":{"options":"İçerik Menüsü Seçenekleri"},"toolbar":{"toolbarCollapse":"Araç çubuklarını topla","toolbarExpand":"Araç çubuklarını aç","toolbarGroups":{"document":"Belge","clipboard":"Pano/Geri al","editing":"Düzenleme","forms":"Formlar","basicstyles":"Temel Stiller","paragraph":"Paragraf","links":"Bağlantılar","insert":"Ekle","styles":"Stiller","colors":"Renkler","tools":"Araçlar"},"toolbars":"Araç çubukları Editörü"},"undo":{"redo":"Tekrarla","undo":"Geri Al"},"justify":{"block":"İki Kenara Yaslanmış","center":"Ortalanmış","left":"Sola Dayalı","right":"Sağa Dayalı"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/tt.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/tt.js new file mode 100755 index 0000000000..dd3060a79c --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/tt.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['tt']={"editor":"Форматлаулы текст өлкәсе","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Ярдәм өчен ALT 0 басыгыз","browseServer":"Сервер карап чыгу","url":"Сылталама","protocol":"Протокол","upload":"Йөкләү","uploadSubmit":"Серверга җибәрү","image":"Рәсем","flash":"Флеш","form":"Форма","checkbox":"Чекбокс","radio":"Радио төймә","textField":"Текст кыры","textarea":"Текст мәйданы","hiddenField":"Яшерен кыр","button":"Төймə","select":"Сайлау кыры","imageButton":"Рәсемле төймə","notSet":"<билгеләнмәгән>","id":"Id","name":"Исем","langDir":"Язылыш юнəлеше","langDirLtr":"Сулдан уңга язылыш (LTR)","langDirRtl":"Уңнан сулга язылыш (RTL)","langCode":"Тел коды","longDescr":"Җентекле тасвирламага сылталама","cssClass":"Стильләр класслары","advisoryTitle":"Киңәш исем","cssStyle":"Стиль","ok":"Тәмам","cancel":"Баш тарту","close":"Чыгу","preview":"Карап алу","resize":"Зурлыкны үзгәртү","generalTab":"Төп","advancedTab":"Киңәйтелгән көйләүләр","validateNumberFailed":"Әлеге кыйммәт сан түгел.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Үзлекләр","target":"Максат","targetNew":"Яңа тәрәзә (_blank)","targetTop":"Өске тәрәзә (_top)","targetSelf":"Шул үк тәрәзә (_self)","targetParent":"Ана тәрәзә (_parent)","langDirLTR":"Сулдан уңга язылыш (LTR)","langDirRTL":"Уңнан сулга язылыш (RTL)","styles":"Стиль","cssClasses":"Стильләр класслары","width":"Киңлек","height":"Биеклек","align":"Тигезләү","alignLeft":"Сул якка","alignRight":"Уң якка","alignCenter":"Үзәккә","alignJustify":"Киңлеккә карап тигезләү","alignTop":"Өскә","alignMiddle":"Уртага","alignBottom":"Аска","alignNone":"Һичбер","invalidValue":"Дөрес булмаган кыйммәт.","invalidHeight":"Биеклек сан булырга тиеш.","invalidWidth":"Киңлек сан булырга тиеш.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"basicstyles":{"bold":"Калын","italic":"Курсив","strike":"Сызылган","subscript":"Аскы индекс","superscript":"Өске индекс","underline":"Астына сызылган"},"clipboard":{"copy":"Күчермәләү","copyError":"Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыя. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.","cut":"Кисеп алу","cutError":"Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыя. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.","paste":"Өстәү","pasteArea":"Өстәү мәйданы","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Өстәү"},"button":{"selectedLabel":"%1 (Сайланган)"},"colorbutton":{"auto":"Автоматик","bgColorTitle":"Фон төсе","colors":{"000":"Кара","800000":"Бордо","8B4513":"Дарчин","2F4F4F":"Аспид соры","008080":"Күкле-яшелле","000080":"Куе күк","4B0082":"Индиго","696969":"Куе соры","B22222":"Кармин","A52A2A":"Чия кызыл","DAA520":"Алтын каен","006400":"Үлән","40E0D0":"Фирәзә","0000CD":"Фарсы күк","800080":"Шәмәхә","808080":"Соры","F00":"Кызыл","FF8C00":"Кабак","FFD700":"Алтын","008000":"Яшел","0FF":"Ачык зәңгәр","00F":"Зәңгәр","EE82EE":"Миләүшә","A9A9A9":"Ачык соры","FFA07A":"Кызгылт сары алсу","FFA500":"Кызгылт сары","FFFF00":"Сары","00FF00":"Лайм","AFEEEE":"Тонык күк","ADD8E6":"Тонык күкбаш","DDA0DD":"Аксыл шәмәхә","D3D3D3":"Ачык соры","FFF0F5":"Ал ала миләүшә","FAEBD7":"Җитен","FFFFE0":"Ачык сары","F0FFF0":"Аксыл көрән","F0FFFF":"Ап-ак","F0F8FF":"Аксыл зәңгәр диңгез","E6E6FA":"Ала миләүшә","FFF":"Ак"},"more":"Башка төсләр...","panelTitle":"Төсләр","textColorTitle":"Текст төсе"},"colordialog":{"clear":"Бушату","highlight":"Билгеләү","options":"Төс көйләүләре","selected":"Сайланган төсләр","title":"Төс сайлау"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 элемент"},"font":{"fontSize":{"label":"Зурлык","voiceLabel":"Шрифт зурлыклары","panelTitle":"Шрифт зурлыклары"},"label":"Шрифт","panelTitle":"Шрифт исеме","voiceLabel":"Шрифт"},"format":{"label":"Форматлау","panelTitle":"Параграф форматлавы","tag_address":"Адрес","tag_div":"Гади (DIV)","tag_h1":"Башлам 1","tag_h2":"Башлам 2","tag_h3":"Башлам 3","tag_h4":"Башлам 4","tag_h5":"Башлам 5","tag_h6":"Башлам 6","tag_p":"Гади","tag_pre":"Форматлаулы"},"horizontalrule":{"toolbar":"Ятма сызык өстәү"},"indent":{"indent":"Отступны арттыру","outdent":"Отступны кечерәйтү"},"fakeobjects":{"anchor":"Якорь","flash":"Флеш анимациясы","hiddenfield":"Яшерен кыр","iframe":"IFrame","unknown":"Танылмаган объект"},"link":{"acccessKey":"Access Key","advanced":"Киңәйтелгән көйләүләр","advisoryContentType":"Advisory Content Type","advisoryTitle":"Киңәш исем","anchor":{"toolbar":"Якорь","menu":"Якорьне үзгәртү","title":"Якорь үзлекләре","name":"Якорь исеме","errorName":"Якорьнең исемен языгыз","remove":"Якорьне бетерү"},"anchorId":"Элемент идентификаторы буенча","anchorName":"Якорь исеме буенча","charset":"Linked Resource Charset","cssClasses":"Стильләр класслары","emailAddress":"Электрон почта адресы","emailBody":"Хат эчтәлеге","emailSubject":"Хат темасы","id":"Идентификатор","info":"Сылталама тасвирламасы","langCode":"Тел коды","langDir":"Язылыш юнəлеше","langDirLTR":"Сулдан уңга язылыш (LTR)","langDirRTL":"Уңнан сулга язылыш (RTL)","menu":"Сылталамаyны үзгәртү","name":"Исем","noAnchors":"(Әлеге документта якорьләр табылмады)","noEmail":"Электрон почта адресын языгыз","noUrl":"Сылталаманы языгыз","other":"<бүтән>","popupDependent":"Бәйле (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Тулы экран (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Бәйләнеш","selectAnchor":"Якорьне сайлау","styles":"Стиль","tabIndex":"Tab Index","target":"Максат","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Попап тәрәзәсе исеме","title":"Сылталама","toAnchor":"Якорьне текст белән бәйләү","toEmail":"Электрон почта","toUrl":"Сылталама","toolbar":"Сылталама","type":"Сылталама төре","unlink":"Сылталаманы бетерү","upload":"Йөкләү"},"list":{"bulletedlist":"Маркерлы тезмә өстәү/бетерү","numberedlist":" Номерланган тезмә өстәү/бетерү"},"magicline":{"title":"Бирегә параграф өстәү"},"maximize":{"maximize":"Зурайту","minimize":"Кечерәйтү"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Word'тан өстәү","toolbar":"Word'тан өстәү"},"pastetext":{"button":"Форматлаусыз текст өстәү","title":"Форматлаусыз текст өстәү"},"removeformat":{"toolbar":"Форматлауны бетерү"},"specialchar":{"options":"Махсус символ үзлекләре","title":"Махсус символ сайлау","toolbar":"Махсус символ өстәү"},"stylescombo":{"label":"Стильләр","panelTitle":"Форматлау стильләре","panelTitle1":"Блоклар стильләре","panelTitle2":"Эчке стильләр","panelTitle3":"Объектлар стильләре"},"table":{"border":"Чик калынлыгы","caption":"Исем","cell":{"menu":"Күзәнәк","insertBefore":"Алдына күзәнәк өстәү","insertAfter":"Артына күзәнәк өстәү","deleteCell":"Күзәнәкләрне бетерү","merge":"Күзәнәкләрне берләштерү","mergeRight":"Уң яктагы белән берләштерү","mergeDown":"Астагы белән берләштерү","splitHorizontal":"Күзәнәкне юлларга бүлү","splitVertical":"Күзәнәкне баганаларга бүлү","title":"Күзәнәк үзлекләре","cellType":"Күзәнәк төре","rowSpan":"Юлларны берләштерү","colSpan":"Баганаларны берләштерү","wordWrap":"Текстны күчерү","hAlign":"Ятма тигезләү","vAlign":"Асма тигезләү","alignBaseline":"Таяныч сызыгы","bgColor":"Фон төсе","borderColor":"Чик төсе","data":"Мәгълүмат","header":"Башлык","yes":"Әйе","no":"Юк","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Сайлау"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Багана","insertBefore":"Сулдан баганалар өстәү","insertAfter":"Уңнан баганалар өстәү","deleteColumn":"Баганаларны бетерү"},"columns":"Баганалар","deleteTable":"Таблицаны бетерү","headers":"Башлыклар","headersBoth":"Икесе дә","headersColumn":"Беренче багана","headersNone":"Һичбер","headersRow":"Беренче юл","invalidBorder":"Чик киңлеге сан булырга тиеш.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Күзәнәкләр аралары уңай сан булырга тиеш.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Таблица биеклеге сан булырга тиеш.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Таблица киңлеге сан булырга тиеш","menu":"Таблица үзлекләре","row":{"menu":"Юл","insertBefore":"Өстән юллар өстәү","insertAfter":"Астан юллар өстәү","deleteRow":"Юлларны бетерү"},"rows":"Юллар","summary":"Йомгаклау","title":"Таблица үзлекләре","toolbar":"Таблица","widthPc":"процент","widthPx":"Нокталар","widthUnit":"киңлек берәмлеге"},"contextmenu":{"options":"Контекст меню үзлекләре"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Документ","clipboard":"Алмашу буферы/Кайтару","editing":"Төзәтү","forms":"Формалар","basicstyles":"Төп стильләр","paragraph":"Параграф","links":"Сылталамалар","insert":"Өстәү","styles":"Стильләр","colors":"Төсләр","tools":"Кораллар"},"toolbars":"Editor toolbars"},"undo":{"redo":"Кабатлау","undo":"Кайтару"},"justify":{"block":"Киңлеккә карап тигезләү","center":"Үзәккә тигезләү","left":"Сул як кырыйдан тигезләү","right":"Уң як кырыйдан тигезләү"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/ug.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/ug.js new file mode 100755 index 0000000000..8b4d314482 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/ug.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['ug']={"editor":"تەھرىرلىگۈچ","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"ALT+0 نى بېسىپ ياردەمنى كۆرۈڭ","browseServer":"كۆرسىتىش مۇلازىمېتىر","url":"ئەسلى ھۆججەت","protocol":"كېلىشىم","upload":"يۈكلە","uploadSubmit":"مۇلازىمېتىرغا يۈكلە","image":"سۈرەت","flash":"Flash","form":"جەدۋەل","checkbox":"كۆپ تاللاش رامكىسى","radio":"يەككە تاللاش توپچىسى","textField":"يەككە قۇر تېكىست","textarea":"كۆپ قۇر تېكىست","hiddenField":"يوشۇرۇن دائىرە","button":"توپچا","select":"تىزىم/تىزىملىك","imageButton":"سۈرەت دائىرە","notSet":"‹تەڭشەلمىگەن›","id":"ID","name":"ئات","langDir":"تىل يۆنىلىشى","langDirLtr":"سولدىن ئوڭغا (LTR)","langDirRtl":"ئوڭدىن سولغا (RTL)","langCode":"تىل كودى","longDescr":"تەپسىلىي چۈشەندۈرۈش ئادرېسى","cssClass":"ئۇسلۇب خىلىنىڭ ئاتى","advisoryTitle":"ماۋزۇ","cssStyle":"قۇر ئىچىدىكى ئۇسلۇبى","ok":"جەزملە","cancel":"ۋاز كەچ","close":"تاقا","preview":"ئالدىن كۆزەت","resize":"چوڭلۇقىنى ئۆزگەرت","generalTab":"ئادەتتىكى","advancedTab":"ئالىي","validateNumberFailed":"سان پىچىمىدا كىرگۈزۈش زۆرۈر","confirmNewPage":"نۆۋەتتىكى پۈتۈك مەزمۇنى ساقلانمىدى، يېڭى پۈتۈك قۇرامسىز؟","confirmCancel":"قىسمەن ئۆزگەرتىش ساقلانمىدى، بۇ سۆزلەشكۈنى تاقامسىز؟","options":"تاللانما","target":"نىشان كۆزنەك","targetNew":"يېڭى كۆزنەك (_blank)","targetTop":"پۈتۈن بەت (_top)","targetSelf":"مەزكۇر كۆزنەك (_self)","targetParent":"ئاتا كۆزنەك (_parent)","langDirLTR":"سولدىن ئوڭغا (LTR)","langDirRTL":"ئوڭدىن سولغا (RTL)","styles":"ئۇسلۇبلار","cssClasses":"ئۇسلۇب خىللىرى","width":"كەڭلىك","height":"ئېگىزلىك","align":"توغرىلىنىشى","alignLeft":"سول","alignRight":"ئوڭ","alignCenter":"ئوتتۇرا","alignJustify":"ئىككى تەرەپتىن توغرىلا","alignTop":"ئۈستى","alignMiddle":"ئوتتۇرا","alignBottom":"ئاستى","alignNone":"None","invalidValue":"ئىناۋەتسىز قىممەت.","invalidHeight":"ئېگىزلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر","invalidWidth":"كەڭلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر","invalidCssLength":"بۇ سۆز بۆلىكى چوقۇم مۇۋاپىق بولغان CSS ئۇزۇنلۇق قىممىتى بولۇشى زۆرۈر، بىرلىكى (px, %, in, cm, mm, em, ex, pt ياكى pc)","invalidHtmlLength":"بۇ سۆز بۆلىكى چوقۇم بىرىكمە HTML ئۇزۇنلۇق قىممىتى بولۇشى كېرەك. ئۆز ئىچىگە ئالىدىغان بىرلىك (px ياكى %)","invalidInlineStyle":"ئىچكى باغلانما ئۇسلۇبى چوقۇم چېكىتلىك پەش بىلەن ئايرىلغان بىر ياكى كۆپ «خاسلىق ئاتى:خاسلىق قىممىتى» پىچىمىدا بولۇشى لازىم","cssLengthTooltip":"بۇ سۆز بۆلىكى بىرىكمە CSS ئۇزۇنلۇق قىممىتى بولۇشى كېرەك. ئۆز ئىچىگە ئالىدىغان بىرلىك (px, %, in, cm, mm, em, ex, pt ياكى pc)","unavailable":"%1<span class=\\\\\"cke_accessibility\\\\\">، ئىشلەتكىلى بولمايدۇ</span>"},"basicstyles":{"bold":"توم","italic":"يانتۇ","strike":"ئۆچۈرۈش سىزىقى","subscript":"تۆۋەن ئىندېكس","superscript":"يۇقىرى ئىندېكس","underline":"ئاستى سىزىق"},"clipboard":{"copy":"نەشر ھوقۇقىغا ئىگە بەلگىسى","copyError":"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كۆچۈر مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+C) ئارقىلىق تاماملاڭ","cut":"كەس","cutError":"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كەس مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+X) ئارقىلىق تاماملاڭ","paste":"چاپلا","pasteArea":"چاپلاش دائىرىسى","pasteMsg":"ھەرپتاختا تېز كۇنۇپكا (<STRONG>Ctrl/Cmd+V</STRONG>) نى ئىشلىتىپ مەزمۇننى تۆۋەندىكى رامكىغا كۆچۈرۈڭ، ئاندىن <STRONG>جەزملە</STRONG>نى بېسىڭ","securityMsg":"توركۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى سەۋەبىدىن بۇ تەھرىرلىگۈچ چاپلاش تاختىسىدىكى مەزمۇننى بىۋاستە زىيارەت قىلالمايدۇ، بۇ كۆزنەكتە قايتا بىر قېتىم چاپلىشىڭىز كېرەك.","title":"چاپلا"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"ئۆزلۈكىدىن","bgColorTitle":"تەگلىك رەڭگى","colors":{"000":"قارا","800000":"قىزغۇچ سېرىق","8B4513":"توق قوڭۇر","2F4F4F":"قارامتۇل يېشىل","008080":"كۆكۈش يېشىل","000080":"قارامتۇل كۆك","4B0082":"كۆكۈش كۈلرەڭ","696969":"قارامتۇل كۈلرەڭ","B22222":"خىش قىزىل","A52A2A":"قوڭۇر","DAA520":"ئالتۇن سېرىق","006400":"توق يېشىل","40E0D0":"كۆكۈچ يېشىل","0000CD":"ئوتتۇراھال كۆك","800080":"بىنەپشە","808080":"كۈلرەڭ","F00":"قىزىل","FF8C00":"توق قىزغۇچ سېرىق","FFD700":"ئالتۇن","008000":"يېشىل","0FF":"يېشىل كۆك","00F":"كۆك","EE82EE":"قىزغۇچ بىنەپشە","A9A9A9":"توق كۈلرەڭ","FFA07A":"كاۋا چېچىكى سېرىق","FFA500":"قىزغۇچ سېرىق","FFFF00":"سېرىق","00FF00":"Lime","AFEEEE":"سۇس ھاۋا رەڭ","ADD8E6":"ئوچۇق كۆك","DDA0DD":"قىزغۇچ بىنەپشە","D3D3D3":"سۇس كۆكۈچ كۈلرەڭ","FFF0F5":"سۇس قىزغۇچ بىنەپشە","FAEBD7":"Antique White","FFFFE0":"سۇس سېرىق","F0FFF0":"Honeydew","F0FFFF":"ئاسمان كۆكى","F0F8FF":"سۇس كۆك","E6E6FA":"سۇس بىنەپشە","FFF":"ئاق"},"more":"باشقا رەڭ","panelTitle":"رەڭ","textColorTitle":"تېكىست رەڭگى"},"colordialog":{"clear":"تازىلا","highlight":"يورۇت","options":"رەڭ تاللانمىسى","selected":"رەڭ تاللاڭ","title":"رەڭ تاللاڭ"},"elementspath":{"eleLabel":"ئېلېمېنت يولى","eleTitle":"%1 ئېلېمېنت"},"font":{"fontSize":{"label":"چوڭلۇقى","voiceLabel":"خەت چوڭلۇقى","panelTitle":"چوڭلۇقى"},"label":"خەت نۇسخا","panelTitle":"خەت نۇسخا","voiceLabel":"خەت نۇسخا"},"format":{"label":"پىچىم","panelTitle":"پىچىم","tag_address":"ئادرېس","tag_div":"ئابزاس (DIV)","tag_h1":"ماۋزۇ 1","tag_h2":"ماۋزۇ 2","tag_h3":"ماۋزۇ 3","tag_h4":"ماۋزۇ 4","tag_h5":"ماۋزۇ 5","tag_h6":"ماۋزۇ 6","tag_p":"ئادەتتىكى","tag_pre":"تىزىلغان پىچىم"},"horizontalrule":{"toolbar":"توغرا سىزىق قىستۇر"},"indent":{"indent":"تارايت","outdent":"كەڭەيت"},"fakeobjects":{"anchor":"لەڭگەرلىك نۇقتا","flash":"Flash جانلاندۇرۇم","hiddenfield":"يوشۇرۇن دائىرە","iframe":"IFrame","unknown":"يوچۇن نەڭ"},"link":{"acccessKey":"زىيارەت كۇنۇپكا","advanced":"ئالىي","advisoryContentType":"مەزمۇن تىپى","advisoryTitle":"ماۋزۇ","anchor":{"toolbar":"لەڭگەرلىك نۇقتا ئۇلانمىسى قىستۇر/تەھرىرلە","menu":"لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى","title":"لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى","name":"لەڭگەرلىك نۇقتا ئاتى","errorName":"لەڭگەرلىك نۇقتا ئاتىنى كىرگۈزۈڭ","remove":"لەڭگەرلىك نۇقتا ئۆچۈر"},"anchorId":"لەڭگەرلىك نۇقتا ID سى بويىچە","anchorName":"لەڭگەرلىك نۇقتا ئاتى بويىچە","charset":"ھەرپ كودلىنىشى","cssClasses":"ئۇسلۇب خىلى ئاتى","emailAddress":"ئادرېس","emailBody":"مەزمۇن","emailSubject":"ماۋزۇ","id":"ID","info":"ئۇلانما ئۇچۇرى","langCode":"تىل كودى","langDir":"تىل يۆنىلىشى","langDirLTR":"سولدىن ئوڭغا (LTR)","langDirRTL":"ئوڭدىن سولغا (RTL)","menu":"ئۇلانما تەھرىر","name":"ئات","noAnchors":"(بۇ پۈتۈكتە ئىشلەتكىلى بولىدىغان لەڭگەرلىك نۇقتا يوق)","noEmail":"ئېلخەت ئادرېسىنى كىرگۈزۈڭ","noUrl":"ئۇلانما ئادرېسىنى كىرگۈزۈڭ","other":"‹باشقا›","popupDependent":"تەۋە (NS)","popupFeatures":"قاڭقىش كۆزنەك خاسلىقى","popupFullScreen":"پۈتۈن ئېكران (IE)","popupLeft":"سول","popupLocationBar":"ئادرېس بالداق","popupMenuBar":"تىزىملىك بالداق","popupResizable":"چوڭلۇقى ئۆزگەرتىشچان","popupScrollBars":"دومىلىما سۈرگۈچ","popupStatusBar":"ھالەت بالداق","popupToolbar":"قورال بالداق","popupTop":"ئوڭ","rel":"باغلىنىش","selectAnchor":"بىر لەڭگەرلىك نۇقتا تاللاڭ","styles":"قۇر ئىچىدىكى ئۇسلۇبى","tabIndex":"Tab تەرتىپى","target":"نىشان","targetFrame":"‹كاندۇك›","targetFrameName":"نىشان كاندۇك ئاتى","targetPopup":"‹قاڭقىش كۆزنەك›","targetPopupName":"قاڭقىش كۆزنەك ئاتى","title":"ئۇلانما","toAnchor":"بەت ئىچىدىكى لەڭگەرلىك نۇقتا ئۇلانمىسى","toEmail":"ئېلخەت","toUrl":"ئادرېس","toolbar":"ئۇلانما قىستۇر/تەھرىرلە","type":"ئۇلانما تىپى","unlink":"ئۇلانما بىكار قىل","upload":"يۈكلە"},"list":{"bulletedlist":"تۈر بەلگە تىزىمى","numberedlist":"تەرتىپ نومۇر تىزىمى"},"magicline":{"title":"بۇ جايغا ئابزاس قىستۇر"},"maximize":{"maximize":"چوڭايت","minimize":"كىچىكلەت"},"pastefromword":{"confirmCleanup":"سىز چاپلىماقچى بولغان مەزمۇن MS Word تىن كەلگەندەك قىلىدۇ، MS Word پىچىمىنى تازىلىۋەتكەندىن كېيىن ئاندىن چاپلامدۇ؟","error":"ئىچكى خاتالىق سەۋەبىدىن چاپلايدىغان سانلىق مەلۇماتنى تازىلىيالمايدۇ","title":"MS Word تىن چاپلا","toolbar":"MS Word تىن چاپلا"},"pastetext":{"button":"پىچىمى يوق تېكىست سۈپىتىدە چاپلا","title":"پىچىمى يوق تېكىست سۈپىتىدە چاپلا"},"removeformat":{"toolbar":"پىچىمنى چىقىرىۋەت"},"specialchar":{"options":"ئالاھىدە ھەرپ تاللانمىسى","title":"ئالاھىدە ھەرپ تاللاڭ","toolbar":"ئالاھىدە ھەرپ قىستۇر"},"stylescombo":{"label":"ئۇسلۇب","panelTitle":"ئۇسلۇب","panelTitle1":"بۆلەك دەرىجىسىدىكى ئېلېمېنت ئۇسلۇبى","panelTitle2":"ئىچكى باغلانما ئېلېمېنت ئۇسلۇبى","panelTitle3":"نەڭ (Object) ئېلېمېنت ئۇسلۇبى"},"table":{"border":"گىرۋەك","caption":"ماۋزۇ","cell":{"menu":"كاتەكچە","insertBefore":"سولغا كاتەكچە قىستۇر","insertAfter":"ئوڭغا كاتەكچە قىستۇر","deleteCell":"كەتەكچە ئۆچۈر","merge":"كاتەكچە بىرلەشتۈر","mergeRight":"كاتەكچىنى ئوڭغا بىرلەشتۈر","mergeDown":"كاتەكچىنى ئاستىغا بىرلەشتۈر","splitHorizontal":"كاتەكچىنى توغرىسىغا بىرلەشتۈر","splitVertical":"كاتەكچىنى بويىغا بىرلەشتۈر","title":"كاتەكچە خاسلىقى","cellType":"كاتەكچە تىپى","rowSpan":"بويىغا چات ئارىسى قۇر سانى","colSpan":"توغرىسىغا چات ئارىسى ئىستون سانى","wordWrap":"ئۆزلۈكىدىن قۇر قاتلا","hAlign":"توغرىسىغا توغرىلا","vAlign":"بويىغا توغرىلا","alignBaseline":"ئاساسىي سىزىق","bgColor":"تەگلىك رەڭگى","borderColor":"گىرۋەك رەڭگى","data":"سانلىق مەلۇمات","header":"جەدۋەل باشى","yes":"ھەئە","no":"ياق","invalidWidth":"كاتەكچە كەڭلىكى چوقۇم سان بولىدۇ","invalidHeight":"كاتەكچە ئېگىزلىكى چوقۇم سان بولىدۇ","invalidRowSpan":"قۇر چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ ","invalidColSpan":"ئىستون چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ","chooseColor":"تاللاڭ"},"cellPad":"يان ئارىلىق","cellSpace":"ئارىلىق","column":{"menu":"ئىستون","insertBefore":"سولغا ئىستون قىستۇر","insertAfter":"ئوڭغا ئىستون قىستۇر","deleteColumn":"ئىستون ئۆچۈر"},"columns":"ئىستون سانى","deleteTable":"جەدۋەل ئۆچۈر","headers":"ماۋزۇ كاتەكچە","headersBoth":"بىرىنچى ئىستون ۋە بىرىنچى قۇر","headersColumn":"بىرىنچى ئىستون","headersNone":"يوق","headersRow":"بىرىنچى قۇر","invalidBorder":"گىرۋەك توملۇقى چوقۇم سان بولىدۇ","invalidCellPadding":"كاتەكچىگە چوقۇم سان تولدۇرۇلىدۇ","invalidCellSpacing":"كاتەكچە ئارىلىقى چوقۇم سان بولىدۇ","invalidCols":"بەلگىلەنگەن قۇر سانى چوقۇم نۆلدىن چوڭ بولىدۇ","invalidHeight":"جەدۋەل ئېگىزلىكى چوقۇم سان بولىدۇ","invalidRows":"بەلگىلەنگەن ئىستون سانى چوقۇم نۆلدىن چوڭ بولىدۇ","invalidWidth":"جەدۋەل كەڭلىكى چوقۇم سان بولىدۇ","menu":"جەدۋەل خاسلىقى","row":{"menu":"قۇر","insertBefore":"ئۈستىگە قۇر قىستۇر","insertAfter":"ئاستىغا قۇر قىستۇر","deleteRow":"قۇر ئۆچۈر"},"rows":"قۇر سانى","summary":"ئۈزۈندە","title":"جەدۋەل خاسلىقى","toolbar":"جەدۋەل","widthPc":"پىرسەنت","widthPx":"پىكسېل","widthUnit":"كەڭلىك بىرلىكى"},"contextmenu":{"options":"قىسقا يول تىزىملىك تاللانمىسى"},"toolbar":{"toolbarCollapse":"قورال بالداقنى قاتلا","toolbarExpand":"قورال بالداقنى ياي","toolbarGroups":{"document":"پۈتۈك","clipboard":"چاپلاش تاختىسى/يېنىۋال","editing":"تەھرىر","forms":"جەدۋەل","basicstyles":"ئاساسىي ئۇسلۇب","paragraph":"ئابزاس","links":"ئۇلانما","insert":"قىستۇر","styles":"ئۇسلۇب","colors":"رەڭ","tools":"قورال"},"toolbars":"قورال بالداق"},"undo":{"redo":"قايتىلا ","undo":"يېنىۋال"},"justify":{"block":"ئىككى تەرەپتىن توغرىلا","center":"ئوتتۇرىغا توغرىلا","left":"سولغا توغرىلا","right":"ئوڭغا توغرىلا"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/uk.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/uk.js new file mode 100755 index 0000000000..8adcd30032 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/uk.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['uk']={"editor":"Текстовий редактор","editorPanel":"Панель текстового редактора","common":{"editorHelp":"натисніть ALT 0 для довідки","browseServer":"Огляд Сервера","url":"URL","protocol":"Протокол","upload":"Надіслати","uploadSubmit":"Надіслати на сервер","image":"Зображення","flash":"Flash","form":"Форма","checkbox":"Галочка","radio":"Кнопка вибору","textField":"Текстове поле","textarea":"Текстова область","hiddenField":"Приховане поле","button":"Кнопка","select":"Список","imageButton":"Кнопка із зображенням","notSet":"<не визначено>","id":"Ідентифікатор","name":"Ім'я","langDir":"Напрямок мови","langDirLtr":"Зліва направо (LTR)","langDirRtl":"Справа наліво (RTL)","langCode":"Код мови","longDescr":"Довгий опис URL","cssClass":"Клас CSS","advisoryTitle":"Заголовок","cssStyle":"Стиль CSS","ok":"ОК","cancel":"Скасувати","close":"Закрити","preview":"Попередній перегляд","resize":"Потягніть для зміни розмірів","generalTab":"Основне","advancedTab":"Додаткове","validateNumberFailed":"Значення не є цілим числом.","confirmNewPage":"Всі незбережені зміни будуть втрачені. Ви впевнені, що хочете завантажити нову сторінку?","confirmCancel":"Деякі опції змінено. Закрити вікно без збереження змін?","options":"Опції","target":"Ціль","targetNew":"Нове вікно (_blank)","targetTop":"Поточне вікно (_top)","targetSelf":"Поточний фрейм/вікно (_self)","targetParent":"Батьківський фрейм/вікно (_parent)","langDirLTR":"Зліва направо (LTR)","langDirRTL":"Справа наліво (RTL)","styles":"Стиль CSS","cssClasses":"Клас CSS","width":"Ширина","height":"Висота","align":"Вирівнювання","alignLeft":"По лівому краю","alignRight":"По правому краю","alignCenter":"По центру","alignJustify":"По ширині","alignTop":"По верхньому краю","alignMiddle":"По середині","alignBottom":"По нижньому краю","alignNone":"Нема","invalidValue":"Невірне значення.","invalidHeight":"Висота повинна бути цілим числом.","invalidWidth":"Ширина повинна бути цілим числом.","invalidCssLength":"Значення, вказане для \"%1\" в полі повинно бути позитивним числом або без дійсного виміру CSS блоку (px, %, in, cm, mm, em, ex, pt або pc).","invalidHtmlLength":"Значення, вказане для \"%1\" в полі повинно бути позитивним числом або без дійсного виміру HTML блоку (px або %).","invalidInlineStyle":"Значення, вказане для вбудованого стилю повинне складатися з одного чи кількох кортежів у форматі \"ім'я : значення\", розділених крапкою з комою.","cssLengthTooltip":"Введіть номер значення в пікселях або число з дійсною одиниці CSS (px, %, in, cm, mm, em, ex, pt або pc).","unavailable":"%1<span class=\"cke_accessibility\">, не доступне</span>"},"basicstyles":{"bold":"Жирний","italic":"Курсив","strike":"Закреслений","subscript":"Нижній індекс","superscript":"Верхній індекс","underline":"Підкреслений"},"clipboard":{"copy":"Копіювати","copyError":"Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+C).","cut":"Вирізати","cutError":"Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+X)","paste":"Вставити","pasteArea":"Область вставки","pasteMsg":"Будь ласка, вставте інформацію з буфера обміну в цю область, користуючись комбінацією клавіш (<STRONG>Ctrl/Cmd+V</STRONG>), та натисніть <STRONG>OK</STRONG>.","securityMsg":"Редактор не може отримати прямий доступ до буферу обміну у зв'язку з налаштуваннями Вашого браузера. Вам потрібно вставити інформацію в це вікно.","title":"Вставити"},"button":{"selectedLabel":"%1 (Вибрано)"},"colorbutton":{"auto":"Авто","bgColorTitle":"Колір фону","colors":{"000":"Чорний","800000":"Бордовий","8B4513":"Коричневий","2F4F4F":"Темний сіро-зелений","008080":"Морської хвилі","000080":"Сливовий","4B0082":"Індиго","696969":"Темносірий","B22222":"Темночервоний","A52A2A":"Каштановий","DAA520":"Бежевий","006400":"Темнозелений","40E0D0":"Бірюзовий","0000CD":"Темносиній","800080":"Пурпурний","808080":"Сірий","F00":"Червоний","FF8C00":"Темнооранжевий","FFD700":"Жовтий","008000":"Зелений","0FF":"Синьо-зелений","00F":"Синій","EE82EE":"Фіолетовий","A9A9A9":"Світлосірий","FFA07A":"Рожевий","FFA500":"Оранжевий","FFFF00":"Яскравожовтий","00FF00":"Салатовий","AFEEEE":"Світлобірюзовий","ADD8E6":"Блакитний","DDA0DD":"Світлофіолетовий","D3D3D3":"Сріблястий","FFF0F5":"Світлорожевий","FAEBD7":"Світлооранжевий","FFFFE0":"Світложовтий","F0FFF0":"Світлозелений","F0FFFF":"Світлий синьо-зелений","F0F8FF":"Світлоблакитний","E6E6FA":"Лавандовий","FFF":"Білий"},"more":"Кольори...","panelTitle":"Кольори","textColorTitle":"Колір тексту"},"colordialog":{"clear":"Очистити","highlight":"Колір, на який вказує курсор","options":"Опції кольорів","selected":"Обраний колір","title":"Обрати колір"},"elementspath":{"eleLabel":"Шлях","eleTitle":"%1 елемент"},"font":{"fontSize":{"label":"Розмір","voiceLabel":"Розмір шрифту","panelTitle":"Розмір"},"label":"Шрифт","panelTitle":"Шрифт","voiceLabel":"Шрифт"},"format":{"label":"Форматування","panelTitle":"Форматування параграфа","tag_address":"Адреса","tag_div":"Нормальний (div)","tag_h1":"Заголовок 1","tag_h2":"Заголовок 2","tag_h3":"Заголовок 3","tag_h4":"Заголовок 4","tag_h5":"Заголовок 5","tag_h6":"Заголовок 6","tag_p":"Нормальний","tag_pre":"Форматований"},"horizontalrule":{"toolbar":"Горизонтальна лінія"},"indent":{"indent":"Збільшити відступ","outdent":"Зменшити відступ"},"fakeobjects":{"anchor":"Якір","flash":"Flash-анімація","hiddenfield":"Приховані Поля","iframe":"IFrame","unknown":"Невідомий об'єкт"},"link":{"acccessKey":"Гаряча клавіша","advanced":"Додаткове","advisoryContentType":"Тип вмісту","advisoryTitle":"Заголовок","anchor":{"toolbar":"Вставити/Редагувати якір","menu":"Властивості якоря","title":"Властивості якоря","name":"Ім'я якоря","errorName":"Будь ласка, вкажіть ім'я якоря","remove":"Прибрати якір"},"anchorId":"За ідентифікатором елементу","anchorName":"За ім'ям елементу","charset":"Кодування","cssClasses":"Клас CSS","emailAddress":"Адреса ел. пошти","emailBody":"Тіло повідомлення","emailSubject":"Тема листа","id":"Ідентифікатор","info":"Інформація посилання","langCode":"Код мови","langDir":"Напрямок мови","langDirLTR":"Зліва направо (LTR)","langDirRTL":"Справа наліво (RTL)","menu":"Вставити посилання","name":"Ім'я","noAnchors":"(В цьому документі немає якорів)","noEmail":"Будь ласка, вкажіть адрес ел. пошти","noUrl":"Будь ласка, вкажіть URL посилання","other":"<інший>","popupDependent":"Залежний (Netscape)","popupFeatures":"Властивості випливаючого вікна","popupFullScreen":"Повний екран (IE)","popupLeft":"Позиція зліва","popupLocationBar":"Панель локації","popupMenuBar":"Панель меню","popupResizable":"Масштабоване","popupScrollBars":"Стрічки прокрутки","popupStatusBar":"Рядок статусу","popupToolbar":"Панель інструментів","popupTop":"Позиція зверху","rel":"Зв'язок","selectAnchor":"Оберіть якір","styles":"Стиль CSS","tabIndex":"Послідовність переходу","target":"Ціль","targetFrame":"<фрейм>","targetFrameName":"Ім'я цільового фрейму","targetPopup":"<випливаюче вікно>","targetPopupName":"Ім'я випливаючого вікна","title":"Посилання","toAnchor":"Якір на цю сторінку","toEmail":"Ел. пошта","toUrl":"URL","toolbar":"Вставити/Редагувати посилання","type":"Тип посилання","unlink":"Видалити посилання","upload":"Надіслати"},"list":{"bulletedlist":"Маркірований список","numberedlist":"Нумерований список"},"magicline":{"title":"Вставити абзац"},"maximize":{"maximize":"Максимізувати","minimize":"Мінімізувати"},"pastefromword":{"confirmCleanup":"Текст, що Ви намагаєтесь вставити, схожий на скопійований з Word. Бажаєте очистити його форматування перед вставлянням?","error":"Неможливо очистити форматування через внутрішню помилку.","title":"Вставити з Word","toolbar":"Вставити з Word"},"pastetext":{"button":"Вставити тільки текст","title":"Вставити тільки текст"},"removeformat":{"toolbar":"Очистити форматування"},"specialchar":{"options":"Опції","title":"Оберіть спеціальний символ","toolbar":"Спеціальний символ"},"stylescombo":{"label":"Стиль","panelTitle":"Стилі форматування","panelTitle1":"Блочні стилі","panelTitle2":"Рядкові стилі","panelTitle3":"Об'єктні стилі"},"table":{"border":"Розмір рамки","caption":"Заголовок таблиці","cell":{"menu":"Комірки","insertBefore":"Вставити комірку перед","insertAfter":"Вставити комірку після","deleteCell":"Видалити комірки","merge":"Об'єднати комірки","mergeRight":"Об'єднати справа","mergeDown":"Об'єднати донизу","splitHorizontal":"Розділити комірку по горизонталі","splitVertical":"Розділити комірку по вертикалі","title":"Властивості комірки","cellType":"Тип комірки","rowSpan":"Об'єднання рядків","colSpan":"Об'єднання стовпців","wordWrap":"Автоперенесення тексту","hAlign":"Гориз. вирівнювання","vAlign":"Верт. вирівнювання","alignBaseline":"По базовій лінії","bgColor":"Колір фону","borderColor":"Колір рамки","data":"Дані","header":"Заголовок","yes":"Так","no":"Ні","invalidWidth":"Ширина комірки повинна бути цілим числом.","invalidHeight":"Висота комірки повинна бути цілим числом.","invalidRowSpan":"Кількість об'єднуваних рядків повинна бути цілим числом.","invalidColSpan":"Кількість об'єднуваних стовбців повинна бути цілим числом.","chooseColor":"Обрати"},"cellPad":"Внутр. відступ","cellSpace":"Проміжок","column":{"menu":"Стовбці","insertBefore":"Вставити стовбець перед","insertAfter":"Вставити стовбець після","deleteColumn":"Видалити стовбці"},"columns":"Стовбці","deleteTable":"Видалити таблицю","headers":"Заголовки стовбців/рядків","headersBoth":"Стовбці і рядки","headersColumn":"Стовбці","headersNone":"Без заголовків","headersRow":"Рядки","invalidBorder":"Розмір рамки повинен бути цілим числом.","invalidCellPadding":"Внутр. відступ комірки повинен бути цілим числом.","invalidCellSpacing":"Проміжок між комірками повинен бути цілим числом.","invalidCols":"Кількість стовбців повинна бути більшою 0.","invalidHeight":"Висота таблиці повинна бути цілим числом.","invalidRows":"Кількість рядків повинна бути більшою 0.","invalidWidth":"Ширина таблиці повинна бути цілим числом.","menu":"Властивості таблиці","row":{"menu":"Рядки","insertBefore":"Вставити рядок перед","insertAfter":"Вставити рядок після","deleteRow":"Видалити рядки"},"rows":"Рядки","summary":"Детальний опис заголовку таблиці","title":"Властивості таблиці","toolbar":"Таблиця","widthPc":"відсотків","widthPx":"пікселів","widthUnit":"Одиниці вимір."},"contextmenu":{"options":"Опції контекстного меню"},"toolbar":{"toolbarCollapse":"Згорнути панель інструментів","toolbarExpand":"Розгорнути панель інструментів","toolbarGroups":{"document":"Документ","clipboard":"Буфер обміну / Скасувати","editing":"Редагування","forms":"Форми","basicstyles":"Основний Стиль","paragraph":"Параграф","links":"Посилання","insert":"Вставити","styles":"Стилі","colors":"Кольори","tools":"Інструменти"},"toolbars":"Панель інструментів редактора"},"undo":{"redo":"Повторити","undo":"Повернути"},"justify":{"block":"По ширині","center":"По центру","left":"По лівому краю","right":"По правому краю"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/vi.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/vi.js new file mode 100755 index 0000000000..be2fa200a2 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/vi.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['vi']={"editor":"Bộ soạn thảo văn bản có định dạng","editorPanel":"Bảng điều khiển Rich Text Editor","common":{"editorHelp":"Nhấn ALT + 0 để được giúp đỡ","browseServer":"Duyệt máy chủ","url":"URL","protocol":"Giao thức","upload":"Tải lên","uploadSubmit":"Tải lên máy chủ","image":"Hình ảnh","flash":"Flash","form":"Biểu mẫu","checkbox":"Nút kiểm","radio":"Nút chọn","textField":"Trường văn bản","textarea":"Vùng văn bản","hiddenField":"Trường ẩn","button":"Nút","select":"Ô chọn","imageButton":"Nút hình ảnh","notSet":"<không thiết lập>","id":"Định danh","name":"Tên","langDir":"Hướng ngôn ngữ","langDirLtr":"Trái sang phải (LTR)","langDirRtl":"Phải sang trái (RTL)","langCode":"Mã ngôn ngữ","longDescr":"Mô tả URL","cssClass":"Lớp Stylesheet","advisoryTitle":"Nhan đề hướng dẫn","cssStyle":"Kiểu ","ok":"Đồng ý","cancel":"Bỏ qua","close":"Đóng","preview":"Xem trước","resize":"Kéo rê để thay đổi kích cỡ","generalTab":"Tab chung","advancedTab":"Tab mở rộng","validateNumberFailed":"Giá trị này không phải là số.","confirmNewPage":"Mọi thay đổi không được lưu lại, nội dung này sẽ bị mất. Bạn có chắc chắn muốn tải một trang mới?","confirmCancel":"Một vài tùy chọn đã bị thay đổi. Bạn có chắc chắn muốn đóng hộp thoại?","options":"Tùy chọn","target":"Đích đến","targetNew":"Cửa sổ mới (_blank)","targetTop":"Cửa sổ trên cùng (_top)","targetSelf":"Tại trang (_self)","targetParent":"Cửa sổ cha (_parent)","langDirLTR":"Trái sang phải (LTR)","langDirRTL":"Phải sang trái (RTL)","styles":"Kiểu","cssClasses":"Lớp CSS","width":"Chiều rộng","height":"Chiều cao","align":"Vị trí","alignLeft":"Trái","alignRight":"Phải","alignCenter":"Giữa","alignJustify":"Sắp chữ","alignTop":"Trên","alignMiddle":"Giữa","alignBottom":"Dưới","alignNone":"Không","invalidValue":"Giá trị không hợp lệ.","invalidHeight":"Chiều cao phải là số nguyên.","invalidWidth":"Chiều rộng phải là số nguyên.","invalidCssLength":"Giá trị quy định cho trường \"%1\" phải là một số dương có hoặc không có một đơn vị đo CSS hợp lệ (px, %, in, cm, mm, em, ex, pt, hoặc pc).","invalidHtmlLength":"Giá trị quy định cho trường \"%1\" phải là một số dương có hoặc không có một đơn vị đo HTML hợp lệ (px hoặc %).","invalidInlineStyle":"Giá trị quy định cho kiểu nội tuyến phải bao gồm một hoặc nhiều dữ liệu với định dạng \"tên:giá trị\", cách nhau bằng dấu chấm phẩy.","cssLengthTooltip":"Nhập một giá trị theo pixel hoặc một số với một đơn vị CSS hợp lệ (px, %, in, cm, mm, em, ex, pt, hoặc pc).","unavailable":"%1<span class=\"cke_accessibility\">, không có</span>"},"basicstyles":{"bold":"Đậm","italic":"Nghiêng","strike":"Gạch xuyên ngang","subscript":"Chỉ số dưới","superscript":"Chỉ số trên","underline":"Gạch chân"},"clipboard":{"copy":"Sao chép","copyError":"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+C).","cut":"Cắt","cutError":"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+X).","paste":"Dán","pasteArea":"Khu vực dán","pasteMsg":"Hãy dán nội dung vào trong khung bên dưới, sử dụng tổ hợp phím (<STRONG>Ctrl/Cmd+V</STRONG>) và nhấn vào nút <STRONG>Đồng ý</STRONG>.","securityMsg":"Do thiết lập bảo mật của trình duyệt nên trình biên tập không thể truy cập trực tiếp vào nội dung đã sao chép. Bạn cần phải dán lại nội dung vào cửa sổ này.","title":"Dán"},"button":{"selectedLabel":"%1 (Đã chọn)"},"colorbutton":{"auto":"Tự động","bgColorTitle":"Màu nền","colors":{"000":"Đen","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Nâu","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Xám","F00":"Đỏ","FF8C00":"Dark Orange","FFD700":"Vàng","008000":"Xanh lá cây","0FF":"Cyan","00F":"Xanh da trời","EE82EE":"Tím","A9A9A9":"Xám tối","FFA07A":"Light Salmon","FFA500":"Màu cam","FFFF00":"Vàng","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"Trắng"},"more":"Màu khác...","panelTitle":"Màu sắc","textColorTitle":"Màu chữ"},"colordialog":{"clear":"Xóa bỏ","highlight":"Màu chọn","options":"Tùy chọn màu","selected":"Màu đã chọn","title":"Chọn màu"},"elementspath":{"eleLabel":"Nhãn thành phần","eleTitle":"%1 thành phần"},"font":{"fontSize":{"label":"Cỡ chữ","voiceLabel":"Kích cỡ phông","panelTitle":"Cỡ chữ"},"label":"Phông","panelTitle":"Phông","voiceLabel":"Phông"},"format":{"label":"Định dạng","panelTitle":"Định dạng","tag_address":"Address","tag_div":"Bình thường (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Bình thường (P)","tag_pre":"Đã thiết lập"},"horizontalrule":{"toolbar":"Chèn đường phân cách ngang"},"indent":{"indent":"Dịch vào trong","outdent":"Dịch ra ngoài"},"fakeobjects":{"anchor":"Điểm neo","flash":"Flash","hiddenfield":"Trường ẩn","iframe":"IFrame","unknown":"Đối tượng không rõ ràng"},"link":{"acccessKey":"Phím hỗ trợ truy cập","advanced":"Mở rộng","advisoryContentType":"Nội dung hướng dẫn","advisoryTitle":"Nhan đề hướng dẫn","anchor":{"toolbar":"Chèn/Sửa điểm neo","menu":"Thuộc tính điểm neo","title":"Thuộc tính điểm neo","name":"Tên của điểm neo","errorName":"Hãy nhập vào tên của điểm neo","remove":"Xóa neo"},"anchorId":"Theo định danh thành phần","anchorName":"Theo tên điểm neo","charset":"Bảng mã của tài nguyên được liên kết đến","cssClasses":"Lớp Stylesheet","emailAddress":"Thư điện tử","emailBody":"Nội dung thông điệp","emailSubject":"Tiêu đề thông điệp","id":"Định danh","info":"Thông tin liên kết","langCode":"Mã ngôn ngữ","langDir":"Hướng ngôn ngữ","langDirLTR":"Trái sang phải (LTR)","langDirRTL":"Phải sang trái (RTL)","menu":"Sửa liên kết","name":"Tên","noAnchors":"(Không có điểm neo nào trong tài liệu)","noEmail":"Hãy đưa vào địa chỉ thư điện tử","noUrl":"Hãy đưa vào đường dẫn liên kết (URL)","other":"<khác>","popupDependent":"Phụ thuộc (Netscape)","popupFeatures":"Đặc điểm của cửa sổ Popup","popupFullScreen":"Toàn màn hình (IE)","popupLeft":"Vị trí bên trái","popupLocationBar":"Thanh vị trí","popupMenuBar":"Thanh Menu","popupResizable":"Có thể thay đổi kích cỡ","popupScrollBars":"Thanh cuộn","popupStatusBar":"Thanh trạng thái","popupToolbar":"Thanh công cụ","popupTop":"Vị trí phía trên","rel":"Quan hệ","selectAnchor":"Chọn một điểm neo","styles":"Kiểu (style)","tabIndex":"Chỉ số của Tab","target":"Đích","targetFrame":"<khung>","targetFrameName":"Tên khung đích","targetPopup":"<cửa sổ popup>","targetPopupName":"Tên cửa sổ Popup","title":"Liên kết","toAnchor":"Neo trong trang này","toEmail":"Thư điện tử","toUrl":"URL","toolbar":"Chèn/Sửa liên kết","type":"Kiểu liên kết","unlink":"Xoá liên kết","upload":"Tải lên"},"list":{"bulletedlist":"Chèn/Xoá Danh sách không thứ tự","numberedlist":"Chèn/Xoá Danh sách có thứ tự"},"magicline":{"title":"Chèn đoạn vào đây"},"maximize":{"maximize":"Phóng to tối đa","minimize":"Thu nhỏ"},"pastefromword":{"confirmCleanup":"Văn bản bạn muốn dán có kèm định dạng của Word. Bạn có muốn loại bỏ định dạng Word trước khi dán?","error":"Không thể để làm sạch các dữ liệu dán do một lỗi nội bộ","title":"Dán với định dạng Word","toolbar":"Dán với định dạng Word"},"pastetext":{"button":"Dán theo định dạng văn bản thuần","title":"Dán theo định dạng văn bản thuần"},"removeformat":{"toolbar":"Xoá định dạng"},"specialchar":{"options":"Tùy chọn các ký tự đặc biệt","title":"Hãy chọn ký tự đặc biệt","toolbar":"Chèn ký tự đặc biệt"},"stylescombo":{"label":"Kiểu","panelTitle":"Phong cách định dạng","panelTitle1":"Kiểu khối","panelTitle2":"Kiểu trực tiếp","panelTitle3":"Kiểu đối tượng"},"table":{"border":"Kích thước đường viền","caption":"Đầu đề","cell":{"menu":"Ô","insertBefore":"Chèn ô Phía trước","insertAfter":"Chèn ô Phía sau","deleteCell":"Xoá ô","merge":"Kết hợp ô","mergeRight":"Kết hợp sang phải","mergeDown":"Kết hợp xuống dưới","splitHorizontal":"Phân tách ô theo chiều ngang","splitVertical":"Phân tách ô theo chiều dọc","title":"Thuộc tính của ô","cellType":"Kiểu của ô","rowSpan":"Kết hợp hàng","colSpan":"Kết hợp cột","wordWrap":"Chữ liền hàng","hAlign":"Canh lề ngang","vAlign":"Canh lề dọc","alignBaseline":"Đường cơ sở","bgColor":"Màu nền","borderColor":"Màu viền","data":"Dữ liệu","header":"Đầu đề","yes":"Có","no":"Không","invalidWidth":"Chiều rộng của ô phải là một số nguyên.","invalidHeight":"Chiều cao của ô phải là một số nguyên.","invalidRowSpan":"Số hàng kết hợp phải là một số nguyên.","invalidColSpan":"Số cột kết hợp phải là một số nguyên.","chooseColor":"Chọn màu"},"cellPad":"Khoảng đệm giữ ô và nội dung","cellSpace":"Khoảng cách giữa các ô","column":{"menu":"Cột","insertBefore":"Chèn cột phía trước","insertAfter":"Chèn cột phía sau","deleteColumn":"Xoá cột"},"columns":"Số cột","deleteTable":"Xóa bảng","headers":"Đầu đề","headersBoth":"Cả hai","headersColumn":"Cột đầu tiên","headersNone":"Không có","headersRow":"Hàng đầu tiên","invalidBorder":"Kích cỡ của đường biên phải là một số nguyên.","invalidCellPadding":"Khoảng đệm giữa ô và nội dung phải là một số nguyên.","invalidCellSpacing":"Khoảng cách giữa các ô phải là một số nguyên.","invalidCols":"Số lượng cột phải là một số lớn hơn 0.","invalidHeight":"Chiều cao của bảng phải là một số nguyên.","invalidRows":"Số lượng hàng phải là một số lớn hơn 0.","invalidWidth":"Chiều rộng của bảng phải là một số nguyên.","menu":"Thuộc tính bảng","row":{"menu":"Hàng","insertBefore":"Chèn hàng phía trước","insertAfter":"Chèn hàng phía sau","deleteRow":"Xoá hàng"},"rows":"Số hàng","summary":"Tóm lược","title":"Thuộc tính bảng","toolbar":"Bảng","widthPc":"Phần trăm (%)","widthPx":"Điểm ảnh (px)","widthUnit":"Đơn vị"},"contextmenu":{"options":"Tùy chọn menu bổ xung"},"toolbar":{"toolbarCollapse":"Thu gọn thanh công cụ","toolbarExpand":"Mở rộng thnah công cụ","toolbarGroups":{"document":"Tài liệu","clipboard":"Clipboard/Undo","editing":"Chỉnh sửa","forms":"Bảng biểu","basicstyles":"Kiểu cơ bản","paragraph":"Đoạn","links":"Liên kết","insert":"Chèn","styles":"Kiểu","colors":"Màu sắc","tools":"Công cụ"},"toolbars":"Thanh công cụ"},"undo":{"redo":"Làm lại thao tác","undo":"Khôi phục thao tác"},"justify":{"block":"Canh đều","center":"Canh giữa","left":"Canh trái","right":"Canh phải"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/zh-cn.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/zh-cn.js new file mode 100755 index 0000000000..61f97bbbf8 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/zh-cn.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['zh-cn']={"editor":"所见即所得编辑器","editorPanel":"所见即所得编辑器面板","common":{"editorHelp":"按 ALT+0 获得帮助","browseServer":"浏览服务器","url":"URL","protocol":"协议","upload":"上传","uploadSubmit":"上传到服务器","image":"图像","flash":"Flash","form":"表单","checkbox":"复选框","radio":"单选按钮","textField":"单行文本","textarea":"多行文本","hiddenField":"隐藏域","button":"按钮","select":"列表/菜单","imageButton":"图像按钮","notSet":"<没有设置>","id":"ID","name":"名称","langDir":"语言方向","langDirLtr":"从左到右 (LTR)","langDirRtl":"从右到左 (RTL)","langCode":"语言代码","longDescr":"详细说明 URL","cssClass":"样式类名称","advisoryTitle":"标题","cssStyle":"行内样式","ok":"确定","cancel":"取消","close":"关闭","preview":"预览","resize":"拖拽以改变大小","generalTab":"常规","advancedTab":"高级","validateNumberFailed":"需要输入数字格式","confirmNewPage":"当前文档内容未保存,是否确认新建文档?","confirmCancel":"部分修改尚未保存,是否确认关闭对话框?","options":"选项","target":"目标窗口","targetNew":"新窗口 (_blank)","targetTop":"整页 (_top)","targetSelf":"本窗口 (_self)","targetParent":"父窗口 (_parent)","langDirLTR":"从左到右 (LTR)","langDirRTL":"从右到左 (RTL)","styles":"样式","cssClasses":"样式类","width":"宽度","height":"高度","align":"对齐方式","alignLeft":"左对齐","alignRight":"右对齐","alignCenter":"居中","alignJustify":"两端对齐","alignTop":"顶端","alignMiddle":"居中","alignBottom":"底部","alignNone":"无","invalidValue":"无效的值。","invalidHeight":"高度必须为数字格式","invalidWidth":"宽度必须为数字格式","invalidCssLength":"此“%1”字段的值必须为正数,可以包含或不包含一个有效的 CSS 长度单位(px, %, in, cm, mm, em, ex, pt 或 pc)","invalidHtmlLength":"此“%1”字段的值必须为正数,可以包含或不包含一个有效的 HTML 长度单位(px 或 %)","invalidInlineStyle":"内联样式必须为格式是以分号分隔的一个或多个“属性名 : 属性值”。","cssLengthTooltip":"输入一个表示像素值的数字,或加上一个有效的 CSS 长度单位(px, %, in, cm, mm, em, ex, pt 或 pc)。","unavailable":"%1<span class=\"cke_accessibility\">,不可用</span>"},"basicstyles":{"bold":"加粗","italic":"倾斜","strike":"删除线","subscript":"下标","superscript":"上标","underline":"下划线"},"clipboard":{"copy":"复制","copyError":"您的浏览器安全设置不允许编辑器自动执行复制操作,请使用键盘快捷键(Ctrl/Cmd+C)来完成。","cut":"剪切","cutError":"您的浏览器安全设置不允许编辑器自动执行剪切操作,请使用键盘快捷键(Ctrl/Cmd+X)来完成。","paste":"粘贴","pasteArea":"粘贴区域","pasteMsg":"请使用键盘快捷键(<STRONG>Ctrl/Cmd+V</STRONG>)把内容粘贴到下面的方框里,再按 <STRONG>确定</STRONG>","securityMsg":"因为您的浏览器的安全设置原因,本编辑器不能直接访问您的剪贴板内容,你需要在本窗口重新粘贴一次。","title":"粘贴"},"button":{"selectedLabel":"已选中 %1 项"},"colorbutton":{"auto":"自动","bgColorTitle":"背景颜色","colors":{"000":"黑","800000":"褐红","8B4513":"深褐","2F4F4F":"墨绿","008080":"绿松石","000080":"海军蓝","4B0082":"靛蓝","696969":"暗灰","B22222":"砖红","A52A2A":"褐","DAA520":"金黄","006400":"深绿","40E0D0":"蓝绿","0000CD":"中蓝","800080":"紫","808080":"灰","F00":"红","FF8C00":"深橙","FFD700":"金","008000":"绿","0FF":"青","00F":"蓝","EE82EE":"紫罗兰","A9A9A9":"深灰","FFA07A":"亮橙","FFA500":"橙","FFFF00":"黄","00FF00":"水绿","AFEEEE":"粉蓝","ADD8E6":"亮蓝","DDA0DD":"梅红","D3D3D3":"淡灰","FFF0F5":"淡紫红","FAEBD7":"古董白","FFFFE0":"淡黄","F0FFF0":"蜜白","F0FFFF":"天蓝","F0F8FF":"淡蓝","E6E6FA":"淡紫","FFF":"白"},"more":"其它颜色...","panelTitle":"颜色","textColorTitle":"文本颜色"},"colordialog":{"clear":"清除","highlight":"高亮","options":"颜色选项","selected":"选择颜色","title":"选择颜色"},"elementspath":{"eleLabel":"元素路径","eleTitle":"%1 元素"},"font":{"fontSize":{"label":"大小","voiceLabel":"文字大小","panelTitle":"大小"},"label":"字体","panelTitle":"字体","voiceLabel":"字体"},"format":{"label":"格式","panelTitle":"格式","tag_address":"地址","tag_div":"段落(DIV)","tag_h1":"标题 1","tag_h2":"标题 2","tag_h3":"标题 3","tag_h4":"标题 4","tag_h5":"标题 5","tag_h6":"标题 6","tag_p":"普通","tag_pre":"已编排格式"},"horizontalrule":{"toolbar":"插入水平线"},"indent":{"indent":"增加缩进量","outdent":"减少缩进量"},"fakeobjects":{"anchor":"锚点","flash":"Flash 动画","hiddenfield":"隐藏域","iframe":"IFrame","unknown":"未知对象"},"link":{"acccessKey":"访问键","advanced":"高级","advisoryContentType":"内容类型","advisoryTitle":"标题","anchor":{"toolbar":"插入/编辑锚点链接","menu":"锚点链接属性","title":"锚点链接属性","name":"锚点名称","errorName":"请输入锚点名称","remove":"删除锚点"},"anchorId":"按锚点 ID","anchorName":"按锚点名称","charset":"字符编码","cssClasses":"样式类名称","emailAddress":"地址","emailBody":"内容","emailSubject":"主题","id":"ID","info":"超链接信息","langCode":"语言代码","langDir":"语言方向","langDirLTR":"从左到右 (LTR)","langDirRTL":"从右到左 (RTL)","menu":"编辑超链接","name":"名称","noAnchors":"(此文档没有可用的锚点)","noEmail":"请输入电子邮件地址","noUrl":"请输入超链接地址","other":"<其他>","popupDependent":"依附 (NS)","popupFeatures":"弹出窗口属性","popupFullScreen":"全屏 (IE)","popupLeft":"左","popupLocationBar":"地址栏","popupMenuBar":"菜单栏","popupResizable":"可缩放","popupScrollBars":"滚动条","popupStatusBar":"状态栏","popupToolbar":"工具栏","popupTop":"右","rel":"关联","selectAnchor":"选择一个锚点","styles":"行内样式","tabIndex":"Tab 键次序","target":"目标","targetFrame":"<框架>","targetFrameName":"目标框架名称","targetPopup":"<弹出窗口>","targetPopupName":"弹出窗口名称","title":"超链接","toAnchor":"页内锚点链接","toEmail":"电子邮件","toUrl":"地址","toolbar":"插入/编辑超链接","type":"超链接类型","unlink":"取消超链接","upload":"上传"},"list":{"bulletedlist":"项目列表","numberedlist":"编号列表"},"magicline":{"title":"在这插入段落"},"maximize":{"maximize":"全屏","minimize":"最小化"},"pastefromword":{"confirmCleanup":"您要粘贴的内容好像是来自 MS Word,是否要清除 MS Word 格式后再粘贴?","error":"由于内部错误无法清理要粘贴的数据","title":"从 MS Word 粘贴","toolbar":"从 MS Word 粘贴"},"pastetext":{"button":"粘贴为无格式文本","title":"粘贴为无格式文本"},"removeformat":{"toolbar":"清除格式"},"specialchar":{"options":"特殊符号选项","title":"选择特殊符号","toolbar":"插入特殊符号"},"stylescombo":{"label":"样式","panelTitle":"样式","panelTitle1":"块级元素样式","panelTitle2":"内联元素样式","panelTitle3":"对象元素样式"},"table":{"border":"边框","caption":"标题","cell":{"menu":"单元格","insertBefore":"在左侧插入单元格","insertAfter":"在右侧插入单元格","deleteCell":"删除单元格","merge":"合并单元格","mergeRight":"向右合并单元格","mergeDown":"向下合并单元格","splitHorizontal":"水平拆分单元格","splitVertical":"垂直拆分单元格","title":"单元格属性","cellType":"单元格类型","rowSpan":"纵跨行数","colSpan":"横跨列数","wordWrap":"自动换行","hAlign":"水平对齐","vAlign":"垂直对齐","alignBaseline":"基线","bgColor":"背景颜色","borderColor":"边框颜色","data":"数据","header":"表头","yes":"是","no":"否","invalidWidth":"单元格宽度必须为数字格式","invalidHeight":"单元格高度必须为数字格式","invalidRowSpan":"行跨度必须为整数格式","invalidColSpan":"列跨度必须为整数格式","chooseColor":"选择"},"cellPad":"边距","cellSpace":"间距","column":{"menu":"列","insertBefore":"在左侧插入列","insertAfter":"在右侧插入列","deleteColumn":"删除列"},"columns":"列数","deleteTable":"删除表格","headers":"标题单元格","headersBoth":"第一列和第一行","headersColumn":"第一列","headersNone":"无","headersRow":"第一行","invalidBorder":"边框粗细必须为数字格式","invalidCellPadding":"单元格填充必须为数字格式","invalidCellSpacing":"单元格间距必须为数字格式","invalidCols":"指定的行数必须大于零","invalidHeight":"表格高度必须为数字格式","invalidRows":"指定的列数必须大于零","invalidWidth":"表格宽度必须为数字格式","menu":"表格属性","row":{"menu":"行","insertBefore":"在上方插入行","insertAfter":"在下方插入行","deleteRow":"删除行"},"rows":"行数","summary":"摘要","title":"表格属性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"宽度单位"},"contextmenu":{"options":"快捷菜单选项"},"toolbar":{"toolbarCollapse":"折叠工具栏","toolbarExpand":"展开工具栏","toolbarGroups":{"document":"文档","clipboard":"剪贴板/撤销","editing":"编辑","forms":"表单","basicstyles":"基本格式","paragraph":"段落","links":"链接","insert":"插入","styles":"样式","colors":"颜色","tools":"工具"},"toolbars":"工具栏"},"undo":{"redo":"重做","undo":"撤消"},"justify":{"block":"两端对齐","center":"居中","left":"左对齐","right":"右对齐"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/lang/zh.js b/html/moodle2/mod/hvp/editor/ckeditor/lang/zh.js new file mode 100755 index 0000000000..8d9661b2ea --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/lang/zh.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['zh']={"editor":"RTF 編輯器","editorPanel":"RTF 編輯器面板","common":{"editorHelp":"按下 ALT 0 取得說明。","browseServer":"瀏覽伺服器","url":"URL","protocol":"通訊協定","upload":"上傳","uploadSubmit":"傳送至伺服器","image":"圖像","flash":"Flash","form":"表格","checkbox":"核取方塊","radio":"選項按鈕","textField":"文字欄位","textarea":"文字區域","hiddenField":"隱藏欄位","button":"按鈕","select":"選取欄位","imageButton":"影像按鈕","notSet":"<未設定>","id":"ID","name":"名稱","langDir":"語言方向","langDirLtr":"由左至右 (LTR)","langDirRtl":"由右至左 (RTL)","langCode":"語言代碼","longDescr":"完整描述 URL","cssClass":"樣式表類別","advisoryTitle":"標題","cssStyle":"樣式","ok":"確定","cancel":"取消","close":"關閉","preview":"預覽","resize":"調整大小","generalTab":"一般","advancedTab":"進階","validateNumberFailed":"此值不是數值。","confirmNewPage":"現存的修改尚未儲存,要開新檔案?","confirmCancel":"部份選項尚未儲存,要關閉對話框?","options":"選項","target":"目標","targetNew":"開新視窗 (_blank)","targetTop":"最上層視窗 (_top)","targetSelf":"相同視窗 (_self)","targetParent":"父視窗 (_parent)","langDirLTR":"由左至右 (LTR)","langDirRTL":"由右至左 (RTL)","styles":"樣式","cssClasses":"樣式表類別","width":"寬度","height":"高度","align":"對齊方式","alignLeft":"靠左對齊","alignRight":"靠右對齊","alignCenter":"置中對齊","alignJustify":"左右對齊","alignTop":"頂端","alignMiddle":"中間對齊","alignBottom":"底端","alignNone":"無","invalidValue":"無效值。","invalidHeight":"高度必須為數字。","invalidWidth":"寬度必須為數字。","invalidCssLength":"「%1」的值應為正數,並可包含有效的 CSS 單位 (px, %, in, cm, mm, em, ex, pt, 或 pc)。","invalidHtmlLength":"「%1」的值應為正數,並可包含有效的 HTML 單位 (px 或 %)。","invalidInlineStyle":"行內樣式的值應包含一個以上的變數值組,其格式如「名稱:值」,並以分號區隔之。","cssLengthTooltip":"請輸入數值,單位是像素或有效的 CSS 單位 (px, %, in, cm, mm, em, ex, pt, 或 pc)。","unavailable":"%1<span class=\"cke_accessibility\">,無法使用</span>"},"basicstyles":{"bold":"粗體","italic":"斜體","strike":"刪除線","subscript":"下標","superscript":"上標","underline":"底線"},"clipboard":{"copy":"複製","copyError":"瀏覽器的安全性設定不允許編輯器自動執行複製動作。請使用鍵盤快捷鍵 (Ctrl/Cmd+C) 複製。","cut":"剪下","cutError":"瀏覽器的安全性設定不允許編輯器自動執行剪下動作。請使用鏐盤快捷鍵 (Ctrl/Cmd+X) 剪下。","paste":"貼上","pasteArea":"貼上區","pasteMsg":"請使用鍵盤快捷鍵 (<strong>Ctrl/Cmd+V</strong>) 貼到下方區域中並按下「確定」。","securityMsg":"因為瀏覽器的安全性設定,本編輯器無法直接存取您的剪貼簿資料,請您自行在本視窗進行貼上動作。","title":"貼上"},"button":{"selectedLabel":"%1 (已選取)"},"colorbutton":{"auto":"自動","bgColorTitle":"背景顏色","colors":{"000":"黑色","800000":"栗色","8B4513":"鞍褐色","2F4F4F":"暗瓦灰色","008080":"水壓色","000080":"丈青澀","4B0082":"靛青","696969":"深灰色","B22222":"磚紅色","A52A2A":"褐色","DAA520":"金黃色","006400":"深綠色","40E0D0":"青綠色","0000CD":"藍色","800080":"紫色","808080":"灰色","F00":"紅色","FF8C00":"深橘色","FFD700":"金色","008000":"綠色","0FF":"藍綠色","00F":"藍色","EE82EE":"紫色","A9A9A9":"暗灰色","FFA07A":"亮鮭紅","FFA500":"橘色","FFFF00":"黃色","00FF00":"鮮綠色","AFEEEE":"綠松色","ADD8E6":"淺藍色","DDA0DD":"枚紅色","D3D3D3":"淺灰色","FFF0F5":"淺紫色","FAEBD7":"骨董白","FFFFE0":"淺黃色","F0FFF0":"蜜瓜綠","F0FFFF":"天藍色","F0F8FF":"愛麗斯蘭","E6E6FA":"淺紫色","FFF":"白色"},"more":"更多顏色","panelTitle":"顏色","textColorTitle":"文字顏色"},"colordialog":{"clear":"清除","highlight":"高亮","options":"色彩選項","selected":"選取的色彩","title":"選取色彩"},"elementspath":{"eleLabel":"元件路徑","eleTitle":"%1 個元件"},"font":{"fontSize":{"label":"大小","voiceLabel":"字型大小","panelTitle":"字型大小"},"label":"字型","panelTitle":"字型名稱","voiceLabel":"字型"},"format":{"label":"格式","panelTitle":"段落格式","tag_address":"地址","tag_div":"標準 (DIV)","tag_h1":"標題 1","tag_h2":"標題 2","tag_h3":"標題 3","tag_h4":"標題 4","tag_h5":"標題 5","tag_h6":"標題 6","tag_p":"標準","tag_pre":"格式設定"},"horizontalrule":{"toolbar":"插入水平線"},"indent":{"indent":"增加縮排","outdent":"減少縮排"},"fakeobjects":{"anchor":"錨點","flash":"Flash 動畫","hiddenfield":"隱藏欄位","iframe":"IFrame","unknown":"無法辨識的物件"},"link":{"acccessKey":"便捷鍵","advanced":"進階","advisoryContentType":"建議內容類型","advisoryTitle":"標題","anchor":{"toolbar":"錨點","menu":"編輯錨點","title":"錨點內容","name":"錨點名稱","errorName":"請輸入錨點名稱","remove":"移除錨點"},"anchorId":"依元件編號","anchorName":"依錨點名稱","charset":"連結資源的字元集","cssClasses":"樣式表類別","emailAddress":"電子郵件地址","emailBody":"郵件本文","emailSubject":"郵件主旨","id":"ID","info":"連結資訊","langCode":"語言碼","langDir":"語言方向","langDirLTR":"由左至右 (LTR)","langDirRTL":"由右至左 (RTL)","menu":"編輯連結","name":"名稱","noAnchors":"(本文件中無可用之錨點)","noEmail":"請輸入電子郵件","noUrl":"請輸入連結 URL","other":"<其他>","popupDependent":"獨立 (Netscape)","popupFeatures":"快顯視窗功能","popupFullScreen":"全螢幕 (IE)","popupLeft":"左側位置","popupLocationBar":"位置列","popupMenuBar":"功能表列","popupResizable":"可調大小","popupScrollBars":"捲軸","popupStatusBar":"狀態列","popupToolbar":"工具列","popupTop":"頂端位置","rel":"關係","selectAnchor":"選取一個錨點","styles":"樣式","tabIndex":"定位順序","target":"目標","targetFrame":"<框架>","targetFrameName":"目標框架名稱","targetPopup":"<快顯視窗>","targetPopupName":"快顯視窗名稱","title":"連結","toAnchor":"文字中的錨點連結","toEmail":"電子郵件","toUrl":"網址","toolbar":"連結","type":"連結類型","unlink":"取消連結","upload":"上傳"},"list":{"bulletedlist":"插入/移除項目符號清單","numberedlist":"插入/移除編號清單清單"},"magicline":{"title":"在此插入段落"},"maximize":{"maximize":"最大化","minimize":"最小化"},"pastefromword":{"confirmCleanup":"您想貼上的文字似乎是自 Word 複製而來,請問您是否要先清除 Word 的格式後再行貼上?","error":"由於發生內部錯誤,無法清除清除 Word 的格式。","title":"自 Word 貼上","toolbar":"自 Word 貼上"},"pastetext":{"button":"貼成純文字","title":"貼成純文字"},"removeformat":{"toolbar":"移除格式"},"specialchar":{"options":"特殊字元選項","title":"選取特殊字元","toolbar":"插入特殊字元"},"stylescombo":{"label":"樣式","panelTitle":"格式化樣式","panelTitle1":"區塊樣式","panelTitle2":"內嵌樣式","panelTitle3":"物件樣式"},"table":{"border":"框線大小","caption":"標題","cell":{"menu":"儲存格","insertBefore":"前方插入儲存格","insertAfter":"後方插入儲存格","deleteCell":"刪除儲存格","merge":"合併儲存格","mergeRight":"向右合併","mergeDown":"向下合併","splitHorizontal":"水平分割儲存格","splitVertical":"垂直分割儲存格","title":"儲存格屬性","cellType":"儲存格類型","rowSpan":"列全長","colSpan":"行全長","wordWrap":"自動斷行","hAlign":"水平對齊","vAlign":"垂直對齊","alignBaseline":"基準線","bgColor":"背景顏色","borderColor":"框線顏色","data":"資料","header":"頁首","yes":"是","no":"否","invalidWidth":"儲存格寬度必須為數字。","invalidHeight":"儲存格高度必須為數字。","invalidRowSpan":"列全長必須是整數。","invalidColSpan":"行全長必須是整數。","chooseColor":"選擇"},"cellPad":"儲存格邊距","cellSpace":"儲存格間距","column":{"menu":"行","insertBefore":"左方插入行","insertAfter":"右方插入行","deleteColumn":"刪除行"},"columns":"行","deleteTable":"刪除表格","headers":"頁首","headersBoth":"同時","headersColumn":"第一行","headersNone":"無","headersRow":"第一列","invalidBorder":"框線大小必須是整數。","invalidCellPadding":"儲存格邊距必須為正數。","invalidCellSpacing":"儲存格間距必須為正數。","invalidCols":"行數須為大於 0 的正整數。","invalidHeight":"表格高度必須為數字。","invalidRows":"列數須為大於 0 的正整數。","invalidWidth":"表格寬度必須為數字。","menu":"表格屬性","row":{"menu":"列","insertBefore":"上方插入列","insertAfter":"下方插入列","deleteRow":"刪除列"},"rows":"列","summary":"總結","title":"表格屬性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"寬度單位"},"contextmenu":{"options":"內容功能表選項"},"toolbar":{"toolbarCollapse":"摺疊工具列","toolbarExpand":"展開工具列","toolbarGroups":{"document":"文件","clipboard":"剪貼簿/復原","editing":"編輯選項","forms":"格式","basicstyles":"基本樣式","paragraph":"段落","links":"連結","insert":"插入","styles":"樣式","colors":"顏色","tools":"工具"},"toolbars":"編輯器工具列"},"undo":{"redo":"取消復原","undo":"復原"},"justify":{"block":"左右對齊","center":"置中","left":"靠左對齊","right":"靠右對齊"}}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js new file mode 100755 index 0000000000..3b9d3b99f3 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("a11yHelp",function(j){var a=j.lang.a11yhelp,l=CKEDITOR.tools.getNextId(),e={8:a.backspace,9:a.tab,13:a.enter,16:a.shift,17:a.ctrl,18:a.alt,19:a.pause,20:a.capslock,27:a.escape,33:a.pageUp,34:a.pageDown,35:a.end,36:a.home,37:a.leftArrow,38:a.upArrow,39:a.rightArrow,40:a.downArrow,45:a.insert,46:a["delete"],91:a.leftWindowKey,92:a.rightWindowKey,93:a.selectKey,96:a.numpad0,97:a.numpad1,98:a.numpad2,99:a.numpad3,100:a.numpad4,101:a.numpad5,102:a.numpad6,103:a.numpad7,104:a.numpad8, +105:a.numpad9,106:a.multiply,107:a.add,109:a.subtract,110:a.decimalPoint,111:a.divide,112:a.f1,113:a.f2,114:a.f3,115:a.f4,116:a.f5,117:a.f6,118:a.f7,119:a.f8,120:a.f9,121:a.f10,122:a.f11,123:a.f12,144:a.numLock,145:a.scrollLock,186:a.semiColon,187:a.equalSign,188:a.comma,189:a.dash,190:a.period,191:a.forwardSlash,192:a.graveAccent,219:a.openBracket,220:a.backSlash,221:a.closeBracket,222:a.singleQuote};e[CKEDITOR.ALT]=a.alt;e[CKEDITOR.SHIFT]=a.shift;e[CKEDITOR.CTRL]=a.ctrl;var f=[CKEDITOR.ALT,CKEDITOR.SHIFT, +CKEDITOR.CTRL],m=/\$\{(.*?)\}/g,p=function(){var a=j.keystrokeHandler.keystrokes,g={},c;for(c in a)g[a[c]]=c;return function(a,c){var b;if(g[c]){b=g[c];for(var h,i,k=[],d=0;d<f.length;d++)i=f[d],h=b/f[d],1<h&&2>=h&&(b-=i,k.push(e[i]));k.push(e[b]||String.fromCharCode(b));b=k.join("+")}else b=a;return b}}();return{title:a.title,minWidth:600,minHeight:400,contents:[{id:"info",label:j.lang.common.generalTab,expand:!0,elements:[{type:"html",id:"legends",style:"white-space:normal;",focus:function(){this.getElement().focus()}, +html:function(){for(var e='<div class="cke_accessibility_legend" role="document" aria-labelledby="'+l+'_arialbl" tabIndex="-1">%1</div><span id="'+l+'_arialbl" class="cke_voice_label">'+a.contents+" </span>",g=[],c=a.legend,j=c.length,f=0;f<j;f++){for(var b=c[f],h=[],i=b.items,k=i.length,d=0;d<k;d++){var n=i[d],o=n.legend.replace(m,p);o.match(m)||h.push("<dt>%1</dt><dd>%2</dd>".replace("%1",n.name).replace("%2",o))}g.push("<h1>%1</h1><dl>%2</dl>".replace("%1",b.name).replace("%2",h.join("")))}return e.replace("%1", +g.join(""))}()+'<style type="text/css">.cke_accessibility_legend{width:600px;height:400px;padding-right:5px;overflow-y:auto;overflow-x:hidden;}.cke_browser_quirks .cke_accessibility_legend,{height:390px}.cke_accessibility_legend *{white-space:normal;}.cke_accessibility_legend h1{font-size: 20px;border-bottom: 1px solid #AAA;margin: 5px 0px 15px;}.cke_accessibility_legend dl{margin-left: 5px;}.cke_accessibility_legend dt{font-size: 13px;font-weight: bold;}.cke_accessibility_legend dd{margin:10px}</style>'}]}], +buttons:[CKEDITOR.dialog.cancelButton]}}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt new file mode 100755 index 0000000000..a7cc6699a9 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt @@ -0,0 +1,25 @@ +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license + +cs.js Found: 30 Missing: 0 +cy.js Found: 30 Missing: 0 +da.js Found: 12 Missing: 18 +de.js Found: 30 Missing: 0 +el.js Found: 25 Missing: 5 +eo.js Found: 30 Missing: 0 +fa.js Found: 30 Missing: 0 +fi.js Found: 30 Missing: 0 +fr.js Found: 30 Missing: 0 +gu.js Found: 12 Missing: 18 +he.js Found: 30 Missing: 0 +it.js Found: 30 Missing: 0 +mk.js Found: 5 Missing: 25 +nb.js Found: 30 Missing: 0 +nl.js Found: 30 Missing: 0 +no.js Found: 30 Missing: 0 +pt-br.js Found: 30 Missing: 0 +ro.js Found: 6 Missing: 24 +tr.js Found: 30 Missing: 0 +ug.js Found: 27 Missing: 3 +vi.js Found: 6 Missing: 24 +zh-cn.js Found: 30 Missing: 0 diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/af.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/af.js new file mode 100755 index 0000000000..ad81de21d3 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/af.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","af",{title:"Toeganglikheid instruksies",contents:"Hulp inhoud. Druk ESC om toe te maak.",legend:[{name:"Algemeen",items:[{name:"Bewerker balk",legend:"Druk ${toolbarFocus} om op die werkbalk te land. Beweeg na die volgende en voorige wekrbalkgroep met TAB and SHIFT+TAB. Beweeg na die volgende en voorige werkbalkknop met die regter of linker pyl. Druk SPASIE of ENTER om die knop te bevestig."},{name:"Bewerker dialoog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Bewerkerinhoudmenu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pouse",capslock:"Hoofletterslot",escape:"Ontsnap",pageUp:"Blaaiop",pageDown:"Blaaiaf",end:"Einde",home:"Tuis",leftArrow:"Linkspyl",upArrow:"Oppyl",rightArrow:"Regterpyl",downArrow:"Afpyl",insert:"Toevoeg","delete":"Verwyder",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Nommerblok 0",numpad1:"Nommerblok 1", +numpad2:"Nommerblok 2",numpad3:"Nommerblok 3",numpad4:"Nommerblok 4",numpad5:"Nommerblok 5",numpad6:"Nommerblok 6",numpad7:"Nommerblok 7",numpad8:"Nommerblok 8",numpad9:"Nommerblok 9",multiply:"Maal",add:"Plus",subtract:"Minus",decimalPoint:"Desimaalepunt",divide:"Gedeeldeur",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Nommervergrendel",scrollLock:"Rolvergrendel",semiColon:"Kommapunt",equalSign:"Isgelykaan",comma:"Komma",dash:"Koppelteken", +period:"Punt",forwardSlash:"Skuinsstreep",graveAccent:"Aksentteken",openBracket:"Oopblokhakkie",backSlash:"Trustreep",closeBracket:"Toeblokhakkie",singleQuote:"Enkelaanhaalingsteken"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js new file mode 100755 index 0000000000..9ca366a962 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","ar",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"عام",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"إضافة",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"تقسيم",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"فاصلة",dash:"Dash",period:"نقطة",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js new file mode 100755 index 0000000000..c8152e2e43 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","bg",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Общо",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js new file mode 100755 index 0000000000..74ec055d97 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","ca",{title:"Instruccions d'Accessibilitat",contents:"Continguts de l'Ajuda. Per tancar aquest quadre de diàleg premi ESC.",legend:[{name:"General",items:[{name:"Editor de barra d'eines",legend:"Premi ${toolbarFocus} per desplaçar-se per la barra d'eines. Vagi en el següent i anterior grup de barra d'eines amb TAB i SHIFT+TAB. Vagi en el següent i anterior botó de la barra d'eines amb RIGHT ARROW i LEFT ARROW. Premi SPACE o ENTER per activar el botó de la barra d'eines."}, +{name:"Editor de quadre de diàleg",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor de menú contextual",legend:"Premi ${contextMenu} o APPLICATION KEY per obrir el menú contextual. Després desplacis a la següent opció del menú amb TAB o DOWN ARROW. Desplacis a l'anterior opció amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció del menú. Obri el submenú de l'actual opció utilitzant SPACE o ENTER o RIGHT ARROW. Pot tornar a l'opció del menú pare amb ESC o LEFT ARROW. Tanqui el menú contextual amb ESC."}, +{name:"Editor de caixa de llista",legend:"Dins d'un quadre de llista, desplacis al següent element de la llista amb TAB o DOWN ARROW. Desplacis a l'anterior element de la llista amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció de la llista. Premi ESC per tancar el quadre de llista."},{name:"Editor de barra de ruta de l'element",legend:"Premi ${elementsPathFocus} per anar als elements de la barra de ruta. Desplacis al botó de l'element següent amb TAB o RIGHT ARROW. Desplacis a l'anterior botó amb SHIFT+TAB o LEFT ARROW. Premi SPACE o ENTER per seleccionar l'element a l'editor."}]}, +{name:"Ordres",items:[{name:"Desfer ordre",legend:"Premi ${undo}"},{name:"Refer ordre",legend:"Premi ${redo}"},{name:"Ordre negreta",legend:"Premi ${bold}"},{name:"Ordre cursiva",legend:"Premi ${italic}"},{name:"Ordre subratllat",legend:"Premi ${underline}"},{name:"Ordre enllaç",legend:"Premi ${link}"},{name:"Ordre amagar barra d'eines",legend:"Premi ${toolbarCollapse}"},{name:"Ordre per accedir a l'anterior espai enfocat",legend:"Premi ${accessPreviousSpace} per accedir a l'enfocament d'espai més proper inabastable abans del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants."}, +{name:"Ordre per accedir al següent espai enfocat",legend:"Premi ${accessNextSpace} per accedir a l'enfocament d'espai més proper inabastable després del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants."},{name:"Ajuda d'accessibilitat",legend:"Premi ${a11yHelp}"}]}],backspace:"Retrocés",tab:"Tabulació",enter:"Intro",shift:"Majúscules",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloqueig de majúscules",escape:"Escape", +pageUp:"Pàgina Amunt",pageDown:"Pàgina Avall",end:"Fi",home:"Inici",leftArrow:"Fletxa Esquerra",upArrow:"Fletxa Amunt",rightArrow:"Fletxa Dreta",downArrow:"Fletxa Avall",insert:"Inserir","delete":"Eliminar",leftWindowKey:"Tecla Windows Esquerra",rightWindowKey:"Tecla Windows Dreta",selectKey:"Tecla Seleccionar",numpad0:"Teclat Numèric 0",numpad1:"Teclat Numèric 1",numpad2:"Teclat Numèric 2",numpad3:"Teclat Numèric 3",numpad4:"Teclat Numèric 4",numpad5:"Teclat Numèric 5",numpad6:"Teclat Numèric 6", +numpad7:"Teclat Numèric 7",numpad8:"Teclat Numèric 8",numpad9:"Teclat Numèric 9",multiply:"Multiplicació",add:"Suma",subtract:"Resta",decimalPoint:"Punt Decimal",divide:"Divisió",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloqueig Teclat Numèric",scrollLock:"Bloqueig de Desplaçament",semiColon:"Punt i Coma",equalSign:"Símbol Igual",comma:"Coma",dash:"Guió",period:"Punt",forwardSlash:"Barra Diagonal",graveAccent:"Accent Obert",openBracket:"Claudàtor Obert", +backSlash:"Barra Invertida",closeBracket:"Claudàtor Tancat",singleQuote:"Cometa Simple"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js new file mode 100755 index 0000000000..c3434dfc7b --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","cs",{title:"Instrukce pro přístupnost",contents:"Obsah nápovědy. Pro uzavření tohoto dialogu stiskněte klávesu ESC.",legend:[{name:"Obecné",items:[{name:"Panel nástrojů editoru",legend:"Stiskněte${toolbarFocus} k procházení panelu nástrojů. Přejděte na další a předchozí skupiny pomocí TAB a SHIFT+TAB. Přechod na další a předchozí tlačítko panelu nástrojů je pomocí ŠIPKA VPRAVO nebo ŠIPKA VLEVO. Stisknutím mezerníku nebo klávesy ENTER tlačítko aktivujete."},{name:"Dialogové okno editoru", +legend:"Uvnitř dialogového okna stiskněte TAB pro přesunutí na další prvek okna, stiskněte SHIFT+TAB pro přesun na předchozí prvek okna, stiskněte ENTER pro odeslání dialogu, stiskněte ESC pro jeho zrušení. Pro dialogová okna, která mají mnoho karet stiskněte ALT+F10 pro zaměření seznamu karet, nebo TAB, pro posun podle pořadí karet.Při zaměření seznamu karet se můžete jimi posouvat pomocí ŠIPKY VPRAVO a VLEVO."},{name:"Kontextové menu editoru",legend:"Stiskněte ${contextMenu} nebo klávesu APPLICATION k otevření kontextového menu. Pak se přesuňte na další možnost menu pomocí TAB nebo ŠIPKY DOLŮ. Přesuňte se na předchozí možnost pomocí SHIFT+TAB nebo ŠIPKY NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti menu. Podmenu současné možnosti otevřete pomocí MEZERNÍKU nebo ENTER či ŠIPKY DOLEVA. Kontextové menu uzavřete stiskem ESC."}, +{name:"Rámeček seznamu editoru",legend:"Uvnitř rámečku seznamu se přesunete na další položku menu pomocí TAB nebo ŠIPKA DOLŮ. Na předchozí položku se přesunete SHIFT+TAB nebo ŠIPKA NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti seznamu. Stiskněte ESC pro uzavření seznamu."},{name:"Lišta cesty prvku v editoru",legend:"Stiskněte ${elementsPathFocus} pro procházení lišty cesty prvku. Na další tlačítko prvku se přesunete pomocí TAB nebo ŠIPKA VPRAVO. Na předchozí tlačítko se přesunete pomocí SHIFT+TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání prvku v editoru."}]}, +{name:"Příkazy",items:[{name:" Příkaz Zpět",legend:"Stiskněte ${undo}"},{name:" Příkaz Znovu",legend:"Stiskněte ${redo}"},{name:" Příkaz Tučné",legend:"Stiskněte ${bold}"},{name:" Příkaz Kurzíva",legend:"Stiskněte ${italic}"},{name:" Příkaz Podtržení",legend:"Stiskněte ${underline}"},{name:" Příkaz Odkaz",legend:"Stiskněte ${link}"},{name:" Příkaz Skrýt panel nástrojů",legend:"Stiskněte ${toolbarCollapse}"},{name:"Příkaz pro přístup k předchozímu prostoru zaměření",legend:"Stiskněte ${accessPreviousSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření před stříškou, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte."}, +{name:"Příkaz pro přístup k dalšímu prostoru zaměření",legend:"Stiskněte ${accessNextSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření po stříšce, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte."},{name:" Nápověda přístupnosti",legend:"Stiskněte ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tabulátor",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pauza",capslock:"Caps lock",escape:"Escape",pageUp:"Stránka nahoru", +pageDown:"Stránka dolů",end:"Konec",home:"Domů",leftArrow:"Šipka vlevo",upArrow:"Šipka nahoru",rightArrow:"Šipka vpravo",downArrow:"Šipka dolů",insert:"Vložit","delete":"Smazat",leftWindowKey:"Levá klávesa Windows",rightWindowKey:"Pravá klávesa Windows",selectKey:"Vyberte klávesu",numpad0:"Numerická klávesa 0",numpad1:"Numerická klávesa 1",numpad2:"Numerická klávesa 2",numpad3:"Numerická klávesa 3",numpad4:"Numerická klávesa 4",numpad5:"Numerická klávesa 5",numpad6:"Numerická klávesa 6",numpad7:"Numerická klávesa 7", +numpad8:"Numerická klávesa 8",numpad9:"Numerická klávesa 9",multiply:"Numerická klávesa násobení",add:"Přidat",subtract:"Numerická klávesa odečítání",decimalPoint:"Desetinná tečka",divide:"Numerická klávesa dělení",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num lock",scrollLock:"Scroll lock",semiColon:"Středník",equalSign:"Rovnítko",comma:"Čárka",dash:"Pomlčka",period:"Tečka",forwardSlash:"Lomítko",graveAccent:"Přízvuk",openBracket:"Otevřená hranatá závorka", +backSlash:"Obrácené lomítko",closeBracket:"Uzavřená hranatá závorka",singleQuote:"Jednoduchá uvozovka"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js new file mode 100755 index 0000000000..fc390ad2d3 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","cy",{title:"Canllawiau Hygyrchedd",contents:"Cynnwys Cymorth. I gau y deialog hwn, pwyswch ESC.",legend:[{name:"Cyffredinol",items:[{name:"Bar Offer y Golygydd",legend:"Pwyswch $ {toolbarFocus} i fynd at y bar offer. Symudwch i'r grŵp bar offer nesaf a blaenorol gyda TAB a SHIFT+TAB. Symudwch i'r botwm bar offer nesaf a blaenorol gyda SAETH DDE neu SAETH CHWITH. Pwyswch SPACE neu ENTER i wneud botwm y bar offer yn weithredol."},{name:"Deialog y Golygydd",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Dewislen Cyd-destun y Golygydd",legend:"Pwyswch $ {contextMenu} neu'r ALLWEDD 'APPLICATION' i agor y ddewislen cyd-destun. Yna symudwch i'r opsiwn ddewislen nesaf gyda'r TAB neu'r SAETH I LAWR. Symudwch i'r opsiwn blaenorol gyda SHIFT+TAB neu'r SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn ddewislen. Agorwch is-dewislen yr opsiwn cyfredol gyda SPACE neu ENTER neu SAETH DDE. Ewch yn ôl i'r eitem ar y ddewislen uwch gydag ESC neu SAETH CHWITH. Ceuwch y ddewislen cyd-destun gydag ESC."}, +{name:"Blwch Rhestr y Golygydd",legend:"Tu mewn y blwch rhestr, ewch i'r eitem rhestr nesaf gyda TAB neu'r SAETH I LAWR. Symudwch i restr eitem flaenorol gyda SHIFT+TAB neu SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn o'r rhestr. Pwyswch ESC i gau'r rhestr."},{name:"Bar Llwybr Elfen y Golygydd",legend:"Pwyswch ${elementsPathFocus} i fynd i'r bar llwybr elfennau. Symudwch i fotwm yr elfen nesaf gyda TAB neu SAETH DDE. Symudwch i fotwm blaenorol gyda SHIFT+TAB neu SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis yr elfen yn y golygydd."}]}, +{name:"Gorchmynion",items:[{name:"Gorchymyn dadwneud",legend:"Pwyswch ${undo}"},{name:"Gorchymyn ailadrodd",legend:"Pwyswch ${redo}"},{name:"Gorchymyn Bras",legend:"Pwyswch ${bold}"},{name:"Gorchymyn italig",legend:"Pwyswch ${italig}"},{name:"Gorchymyn tanlinellu",legend:"Pwyso ${underline}"},{name:"Gorchymyn dolen",legend:"Pwyswch ${link}"},{name:"Gorchymyn Cwympo'r Dewislen",legend:"Pwyswch ${toolbarCollapse}"},{name:"Myned i orchymyn bwlch ffocws blaenorol",legend:"Pwyswch ${accessPreviousSpace} i fyned i'r \"blwch ffocws sydd methu ei gyrraedd\" cyn y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. AIladroddwch y cyfuniad allwedd i gyrraedd bylchau ffocws pell."}, +{name:"Ewch i'r gorchymyn blwch ffocws nesaf",legend:"Pwyswch ${accessNextSpace} i fyned i'r blwch ffocws agosaf nad oes modd ei gyrraedd ar ôl y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. Ailadroddwch y cyfuniad allwedd i gyrraedd blychau ffocws pell."},{name:"Cymorth Hygyrchedd",legend:"Pwyswch ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", +end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", +divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/da.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/da.js new file mode 100755 index 0000000000..d005ed5923 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/da.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","da",{title:"Tilgængelighedsinstrukser",contents:"Onlinehjælp. For at lukke dette vindue klik ESC",legend:[{name:"Generelt",items:[{name:"Editor værktøjslinje",legend:"Tryk ${toolbarFocus} for at navigere til værktøjslinjen. Flyt til næste eller forrige værktøjsline gruppe ved hjælp af TAB eller SHIFT+TAB. Flyt til næste eller forrige værktøjslinje knap med venstre- eller højre piltast. Tryk på SPACE eller ENTER for at aktivere værktøjslinje knappen."},{name:"Editor dialogboks", +legend:"Inde i en dialogboks kan du, trykke på TAB for at navigere til næste element, trykke på SHIFT+TAB for at navigere til forrige element, trykke på ENTER for at afsende eller trykke på ESC for at lukke dialogboksen.\r\nNår en dialogboks har flere faner, fanelisten kan tilgås med ALT+F10 eller med TAB. Hvis fanelisten er i fokus kan du skifte til næste eller forrige tab, med højre- og venstre piltast."},{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."}, +{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]}, +{name:"Kommandoer",items:[{name:"Fortryd kommando",legend:"Klik på ${undo}"},{name:"Gentag kommando",legend:"Klik ${redo}"},{name:"Fed kommando",legend:"Klik ${bold}"},{name:"Kursiv kommando",legend:"Klik ${italic}"},{name:"Understregnings kommando",legend:"Klik ${underline}"},{name:"Link kommando",legend:"Klik ${link}"},{name:" Toolbar Collapse command",legend:"Klik ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Tilgængelighedshjælp",legend:"Kilk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Venstre pil", +upArrow:"Pil op",rightArrow:"Højre pil",downArrow:"Pil ned",insert:"Insert","delete":"Delete",leftWindowKey:"Venstre Windows tast",rightWindowKey:"Højre Windows tast",selectKey:"Select-knap",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Gange",add:"Plus",subtract:"Minus",decimalPoint:"Komma",divide:"Divider",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5", +f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Lighedstegn",comma:"Komma",dash:"Bindestreg",period:"Punktum",forwardSlash:"Skråstreg",graveAccent:"Accent grave",openBracket:"Start klamme",backSlash:"Omvendt skråstreg",closeBracket:"Slut klamme",singleQuote:"Enkelt citationstegn"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/de.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/de.js new file mode 100755 index 0000000000..622008c5b7 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/de.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","de",{title:"Barrierefreiheitinformationen",contents:"Hilfeinhalt. Um den Dialog zu schliessen die Taste ESC drücken.",legend:[{name:"Allgemein",items:[{name:"Editorwerkzeugleiste",legend:"Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT+TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren."}, +{name:"Editordialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor-Kontextmenü",legend:"Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste."}, +{name:"Editor-Listenbox",legend:"Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der SHIFT+TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs."},{name:"Editor-Elementpfadleiste",legend:"Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT+TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen."}]}, +{name:"Befehle",items:[{name:"Rückgängig-Befehl",legend:"Drücken Sie ${undo}"},{name:"Wiederherstellen-Befehl",legend:"Drücken Sie ${redo}"},{name:"Fettschrift-Befehl",legend:"Drücken Sie ${bold}"},{name:"Kursiv-Befehl",legend:"Drücken Sie ${italic}"},{name:"Unterstreichen-Befehl",legend:"Drücken Sie ${underline}"},{name:"Link-Befehl",legend:"Drücken Sie ${link}"},{name:"Werkzeugleiste einklappen-Befehl",legend:"Drücken Sie ${toolbarCollapse}"},{name:"Zugang bisheriger Fokussierung Raumbefehl ",legend:"Drücken Sie ${accessPreviousSpace} auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. "}, +{name:"Zugang nächster Schwerpunkt Raumbefehl ",legend:"Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. "},{name:"Eingabehilfen",legend:"Drücken Sie ${a11yHelp}"}]}],backspace:"Rücktaste",tab:"Tab",enter:"Eingabe",shift:"Umschalt",ctrl:"Strg",alt:"Alt",pause:"Pause",capslock:"Feststell",escape:"Escape",pageUp:"Bild auf",pageDown:"Bild ab", +end:"Ende",home:"Pos1",leftArrow:"Linke Pfeiltaste",upArrow:"Obere Pfeiltaste",rightArrow:"Rechte Pfeiltaste",downArrow:"Untere Pfeiltaste",insert:"Einfügen","delete":"Entfernen",leftWindowKey:"Linke Windowstaste",rightWindowKey:"Rechte Windowstaste",selectKey:"Taste auswählen",numpad0:"Ziffernblock 0",numpad1:"Ziffernblock 1",numpad2:"Ziffernblock 2",numpad3:"Ziffernblock 3",numpad4:"Ziffernblock 4",numpad5:"Ziffernblock 5",numpad6:"Ziffernblock 6",numpad7:"Ziffernblock 7",numpad8:"Ziffernblock 8", +numpad9:"Ziffernblock 9",multiply:"Multiplizieren",add:"Addieren",subtract:"Subtrahieren",decimalPoint:"Punkt",divide:"Dividieren",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Ziffernblock feststellen",scrollLock:"Rollen",semiColon:"Semikolon",equalSign:"Gleichheitszeichen",comma:"Komma",dash:"Bindestrich",period:"Punkt",forwardSlash:"Schrägstrich",graveAccent:"Gravis",openBracket:"Öffnende eckige Klammer",backSlash:"Rückwärtsgewandter Schrägstrich", +closeBracket:"Schließende eckige Klammer",singleQuote:"Einfaches Anführungszeichen"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/el.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/el.js new file mode 100755 index 0000000000..2bddec05c3 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/el.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","el",{title:"Οδηγίες Προσβασιμότητας",contents:"Περιεχόμενα Βοήθειας. Πατήστε ESC για κλείσιμο.",legend:[{name:"Γενικά",items:[{name:"Εργαλειοθήκη Επεξεργαστή",legend:"Πατήστε ${toolbarFocus} για να περιηγηθείτε στην γραμμή εργαλείων. Μετακινηθείτε ανάμεσα στις ομάδες της γραμμής εργαλείων με TAB και SHIFT+TAB. Μετακινηθείτε ανάμεσα στα κουμπιά εργαλείων με το ΔΕΞΙ ή ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να ενεργοποιήσετε το ενεργό κουμπί εργαλείου."},{name:"Παράθυρο Διαλόγου Επεξεργαστή", +legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Αναδυόμενο Μενού Επεξεργαστή",legend:"Πατήστε ${contextMenu} ή APPLICATION KEY για να ανοίξετε το αναδυόμενο μενού. Μετά μετακινηθείτε στην επόμενη επιλογή του μενού με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στην προηγούμενη επιλογή με SHIFT+TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξτε το τρέχων στοιχείο. Ανοίξτε το αναδυόμενο μενού της τρέχουσας επιλογής με ΔΙΑΣΤΗΜΑ ή ENTER ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μεταβείτε πίσω στο αρχικό στοιχείο μενού με το ESC ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Κλείστε το αναδυόμενο μενού με ESC."}, +{name:"Κουτί Λίστας Επεξεργαστών",legend:"Μέσα σε ένα κουτί λίστας, μετακινηθείτε στο επόμενο στοιχείο με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στο προηγούμενο στοιχείο με SHIFT+TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε ένα στοιχείο. Πατήστε ESC για να κλείσετε το κουτί της λίστας."},{name:"Μπάρα Διαδρομών Στοιχείων Επεξεργαστή",legend:"Πατήστε ${elementsPathFocus} για να περιηγηθείτε στην μπάρα διαδρομών στοιχείων του επεξεργαστή. Μετακινηθείτε στο κουμπί του επόμενου στοιχείου με το TAB ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μετακινηθείτε στο κουμπί του προηγούμενου στοιχείου με το SHIFT+TAB ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε το στοιχείο στον επεξεργαστή."}]}, +{name:"Εντολές",items:[{name:"Εντολή αναίρεσης",legend:"Πατήστε ${undo}"},{name:"Εντολή επανάληψης",legend:"Πατήστε ${redo}"},{name:"Εντολή έντονης γραφής",legend:"Πατήστε ${bold}"},{name:"Εντολή πλάγιας γραφής",legend:"Πατήστε ${italic}"},{name:"Εντολή υπογράμμισης",legend:"Πατήστε ${underline}"},{name:"Εντολή συνδέσμου",legend:"Πατήστε ${link}"},{name:"Εντολή Σύμπτηξης Εργαλειοθήκης",legend:"Πατήστε ${toolbarCollapse}"},{name:"Πρόσβαση στην προηγούμενη εντολή του χώρου εστίασης ",legend:"Πατήστε ${accessPreviousSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης πριν το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για να φθάσετε στους χώρους μακρινής εστίασης. "}, +{name:"Πρόσβαση στην επόμενη εντολή του χώρου εστίασης",legend:"Πατήστε ${accessNextSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης μετά το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για τους χώρους μακρινής εστίασης. "},{name:"Βοήθεια Προσβασιμότητας",legend:"Πατήστε ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", +end:"End",home:"Home",leftArrow:"Αριστερό Βέλος",upArrow:"Πάνω Βέλος",rightArrow:"Δεξί Βέλος",downArrow:"Κάτω Βέλος",insert:"Insert ","delete":"Delete",leftWindowKey:"Αριστερό Πλήκτρο Windows",rightWindowKey:"Δεξί Πλήκτρο Windows",selectKey:"Πλήκτρο Select",numpad0:"Αριθμητικό πληκτρολόγιο 0",numpad1:"Αριθμητικό Πληκτρολόγιο 1",numpad2:"Αριθμητικό πληκτρολόγιο 2",numpad3:"Αριθμητικό πληκτρολόγιο 3",numpad4:"Αριθμητικό πληκτρολόγιο 4",numpad5:"Αριθμητικό πληκτρολόγιο 5",numpad6:"Αριθμητικό πληκτρολόγιο 6", +numpad7:"Αριθμητικό πληκτρολόγιο 7",numpad8:"Αριθμητικό πληκτρολόγιο 8",numpad9:"Αριθμητικό πληκτρολόγιο 9",multiply:"Πολλαπλασιασμός",add:"Πρόσθεση",subtract:"Αφαίρεση",decimalPoint:"Υποδιαστολή",divide:"Διαίρεση",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"6",f7:"7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Ερωτηματικό",equalSign:"Σύμβολο Ισότητας",comma:"Κόμμα",dash:"Παύλα",period:"Τελεία",forwardSlash:"Κάθετος",graveAccent:"Βαρεία",openBracket:"Άνοιγμα Παρένθεσης", +backSlash:"Ανάστροφη Κάθετος",closeBracket:"Κλείσιμο Παρένθεσης",singleQuote:"Απόστροφος"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js new file mode 100755 index 0000000000..7c0a381d2a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","en-gb",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/en.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/en.js new file mode 100755 index 0000000000..87d55be07d --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/en.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","en",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js new file mode 100755 index 0000000000..cf3fbc2be0 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","eo",{title:"Uzindikoj pri atingeblo",contents:"Helpilenhavo. Por fermi tiun dialogon, premu la ESKAPAN klavon.",legend:[{name:"Ĝeneralaĵoj",items:[{name:"Ilbreto de la redaktilo",legend:"Premu ${toolbarFocus} por atingi la ilbreton. Moviĝu al la sekva aŭ antaŭa grupoj de la ilbreto per la klavoj TABA kaj MAJUSKLIGA+TABA. Moviĝu al la sekva aŭ antaŭa butonoj de la ilbreto per la klavoj SAGO DEKSTREN kaj SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por aktivigi la ilbretbutonon."}, +{name:"Redaktildialogo",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Kunteksta menuo de la redaktilo",legend:"Premu ${contextMenu} aŭ entajpu la KLAVKOMBINAĴON por malfermi la kuntekstan menuon. Poste moviĝu al la sekva opcio de la menuo per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa opcio per la klavoj MAJUSKLGA + TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la menuopcion. Malfermu la submenuon de la kuranta opcio per la SPACETklavo aŭ la ENENklavo aŭ la SAGO DEKSTREN. Revenu al la elemento de la patra menuo per la klavoj ESKAPA aŭ SAGO MALDEKSTREN. Fermu la kuntekstan menuon per la ESKAPA klavo."}, +{name:"Fallisto de la redaktilo",legend:"En fallisto, moviĝu al la sekva listelemento per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa listelemento per la klavoj MAJUSKLIGA+TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la opcion en la listo. Premu la ESKAPAN klavon por fermi la falmenuon."},{name:"Breto indikanta la vojon al la redaktilelementoj",legend:"Premu ${elementsPathFocus} por navigi al la breto indikanta la vojon al la redaktilelementoj. Moviĝu al la butono de la sekva elemento per la klavoj TABA aŭ SAGO DEKSTREN. Moviĝu al la butono de la antaŭa elemento per la klavoj MAJUSKLIGA+TABA aŭ SAGO MALDEKSTREN. Premu la SPACETklavon aŭ ENENklavon por selekti la elementon en la redaktilo."}]}, +{name:"Komandoj",items:[{name:"Komando malfari",legend:"Premu ${undo}"},{name:"Komando refari",legend:"Premu ${redo}"},{name:"Komando grasa",legend:"Premu ${bold}"},{name:"Komando kursiva",legend:"Premu ${italic}"},{name:"Komando substreki",legend:"Premu ${underline}"},{name:"Komando ligilo",legend:"Premu ${link}"},{name:"Komando faldi la ilbreton",legend:"Premu ${toolbarCollapse}"},{name:"Komando por atingi la antaŭan fokusan spacon",legend:"Press ${accessPreviousSpace} por atingi la plej proksiman neatingeblan fokusan spacon antaŭ la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinaĵon por atingi malproksimajn fokusajn spacojn."}, +{name:"Komando por atingi la sekvan fokusan spacon",legend:"Press ${accessNextSpace} por atingi la plej proksiman neatingeblan fokusan spacon post la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinajôn por atingi malproksimajn fokusajn spacojn"},{name:"Helpilo pri atingeblo",legend:"Premu ${a11yHelp}"}]}],backspace:"Retropaŝo",tab:"Tabo",enter:"Enigi",shift:"Registrumo",ctrl:"Stirklavo",alt:"Alt-klavo",pause:"Paŭzo",capslock:"Majuskla baskulo",escape:"Eskapa klavo",pageUp:"Antaŭa Paĝo", +pageDown:"Sekva Paĝo",end:"Fino",home:"Hejmo",leftArrow:"Sago Maldekstren",upArrow:"Sago Supren",rightArrow:"Sago Dekstren",downArrow:"Sago Suben",insert:"Enmeti","delete":"Forigi",leftWindowKey:"Maldekstra Windows-klavo",rightWindowKey:"Dekstra Windows-klavo",selectKey:"Selektklavo",numpad0:"Nombra Klavaro 0",numpad1:"Nombra Klavaro 1",numpad2:"Nombra Klavaro 2",numpad3:"Nombra Klavaro 3",numpad4:"Nombra Klavaro 4",numpad5:"Nombra Klavaro 5",numpad6:"Nombra Klavaro 6",numpad7:"Nombra Klavaro 7", +numpad8:"Nombra Klavaro 8",numpad9:"Nombra Klavaro 9",multiply:"Obligi",add:"Almeti",subtract:"Subtrahi",decimalPoint:"Dekuma Punkto",divide:"Dividi",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Nombra Baskulo",scrollLock:"Ruluma Baskulo",semiColon:"Punktokomo",equalSign:"Egalsigno",comma:"Komo",dash:"Haltostreko",period:"Punkto",forwardSlash:"Oblikvo",graveAccent:"Malakuto",openBracket:"Malferma Krampo",backSlash:"Retroklino",closeBracket:"Ferma Krampo", +singleQuote:"Citilo"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/es.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/es.js new file mode 100755 index 0000000000..fe605e3ea9 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/es.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","es",{title:"Instrucciones de accesibilidad",contents:"Ayuda. Para cerrar presione ESC.",legend:[{name:"General",items:[{name:"Barra de herramientas del editor",legend:'Presiona ${toolbarFocus} para navegar por la barra de herramientas. Para moverse por los distintos grupos de herramientas usa las teclas TAB y MAY+TAB. Para moverse por las distintas herramientas usa FLECHA DERECHA o FECHA IZQUIERDA. Presiona "espacio" o "intro" para activar la herramienta.'},{name:"Editor de diálogo", +legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor del menú contextual",legend:"Presiona ${contextMenu} o TECLA MENÚ para abrir el menú contextual. Entonces muévete a la siguiente opción del menú con TAB o FLECHA ABAJO. Muévete a la opción previa con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para seleccionar la opción del menú. Abre el submenú de la opción actual con ESPACIO o ENTER o FLECHA DERECHA. Regresa al elemento padre del menú con ESC o FLECHA IZQUIERDA. Cierra el menú contextual con ESC."}, +{name:"Lista del Editor",legend:"Dentro de una lista, te mueves al siguiente elemento de la lista con TAB o FLECHA ABAJO. Te mueves al elemento previo de la lista con SHIFT+TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para elegir la opción de la lista. Presiona ESC para cerrar la lista."},{name:"Barra de Ruta del Elemento en el Editor",legend:"Presiona ${elementsPathFocus} para navegar a los elementos de la barra de ruta. Te mueves al siguiente elemento botón con TAB o FLECHA DERECHA. Te mueves al botón previo con SHIFT+TAB o FLECHA IZQUIERDA. Presiona ESPACIO o ENTER para seleccionar el elemento en el editor."}]}, +{name:"Comandos",items:[{name:"Comando deshacer",legend:"Presiona ${undo}"},{name:"Comando rehacer",legend:"Presiona ${redo}"},{name:"Comando negrita",legend:"Presiona ${bold}"},{name:"Comando itálica",legend:"Presiona ${italic}"},{name:"Comando subrayar",legend:"Presiona ${underline}"},{name:"Comando liga",legend:"Presiona ${liga}"},{name:"Comando colapsar barra de herramientas",legend:"Presiona ${toolbarCollapse}"},{name:"Comando accesar el anterior espacio de foco",legend:"Presiona ${accessPreviousSpace} para accesar el espacio de foco no disponible más cercano anterior al cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."}, +{name:"Comando accesar el siguiente spacio de foco",legend:"Presiona ${accessNextSpace} para accesar el espacio de foco no disponible más cercano después del cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."},{name:"Ayuda de Accesibilidad",legend:"Presiona ${a11yHelp}"}]}],backspace:"Retroceso",tab:"Tabulador",enter:"Ingresar",shift:"Mayús.",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloq. Mayús.",escape:"Escape",pageUp:"Regresar Página", +pageDown:"Avanzar Página",end:"Fin",home:"Inicio",leftArrow:"Flecha Izquierda",upArrow:"Flecha Arriba",rightArrow:"Flecha Derecha",downArrow:"Flecha Abajo",insert:"Insertar","delete":"Suprimir",leftWindowKey:"Tecla Windows Izquierda",rightWindowKey:"Tecla Windows Derecha",selectKey:"Tecla de Selección",numpad0:"Tecla 0 del teclado numérico",numpad1:"Tecla 1 del teclado numérico",numpad2:"Tecla 2 del teclado numérico",numpad3:"Tecla 3 del teclado numérico",numpad4:"Tecla 4 del teclado numérico",numpad5:"Tecla 5 del teclado numérico", +numpad6:"Tecla 6 del teclado numérico",numpad7:"Tecla 7 del teclado numérico",numpad8:"Tecla 8 del teclado numérico",numpad9:"Tecla 9 del teclado numérico",multiply:"Multiplicar",add:"Sumar",subtract:"Restar",decimalPoint:"Punto Decimal",divide:"Dividir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Punto y coma",equalSign:"Signo de Igual",comma:"Coma",dash:"Guión",period:"Punto",forwardSlash:"Diagonal", +graveAccent:"Acento Grave",openBracket:"Abrir llave",backSlash:"Diagonal Invertida",closeBracket:"Cerrar llave",singleQuote:"Comillas simples"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/et.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/et.js new file mode 100755 index 0000000000..4e9b5f5182 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/et.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","et",{title:"Accessibility Instructions",contents:"Abi sisu. Selle dialoogi sulgemiseks vajuta ESC klahvi.",legend:[{name:"Üldine",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js new file mode 100755 index 0000000000..313473adb7 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","fa",{title:"دستورالعمل‌های دسترسی",contents:"راهنمای فهرست مطالب. برای بستن این کادر محاوره‌ای ESC را فشار دهید.",legend:[{name:"عمومی",items:[{name:"نوار ابزار ویرایشگر",legend:"${toolbarFocus} را برای باز کردن نوار ابزار بفشارید. با کلید Tab و Shift+Tab در مجموعه نوار ابزار بعدی و قبلی حرکت کنید. برای حرکت در کلید نوار ابزار قبلی و بعدی با کلید جهت‌نمای راست و چپ جابجا شوید. کلید Space یا Enter را برای فعال کردن کلید نوار ابزار بفشارید."},{name:"پنجره محاورهای ویرایشگر", +legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"منوی متنی ویرایشگر",legend:"${contextMenu} یا کلید برنامههای کاربردی را برای باز کردن منوی متن را بفشارید. سپس میتوانید برای حرکت به گزینه بعدی منو با کلید Tab و یا کلید جهتنمای پایین جابجا شوید. حرکت به گزینه قبلی با Shift+Tab یا کلید جهتنمای بالا. فشردن Space یا Enter برای انتخاب یک گزینه از منو. باز کردن زیر شاخه گزینه منو جاری با کلید Space یا Enter و یا کلید جهتنمای راست و چپ. بازگشت به منوی والد با کلید Esc یا کلید جهتنمای چپ. بستن منوی متن با Esc."}, +{name:"جعبه فهرست ویرایشگر",legend:"در داخل جعبه لیست، قلم دوم از اقلام لیست بعدی را با TAB و یا Arrow Down حرکت دهید. انتقال به قلم دوم از اقلام لیست قبلی را با SHIFT + TAB یا UP ARROW. کلید Space یا ENTER را برای انتخاب گزینه لیست بفشارید. کلید ESC را برای بستن جعبه لیست بفشارید."},{name:"ویرایشگر عنصر نوار راه",legend:"برای رفتن به مسیر عناصر ${elementsPathFocus} را بفشارید. حرکت به کلید عنصر بعدی با کلید Tab یا کلید جهت‌نمای راست. برگشت به کلید قبلی با Shift+Tab یا کلید جهت‌نمای چپ. فشردن Space یا Enter برای انتخاب یک عنصر در ویرایشگر."}]}, +{name:"فرمان‌ها",items:[{name:"بازگشت به آخرین فرمان",legend:"فشردن ${undo}"},{name:"انجام مجدد فرمان",legend:"فشردن ${redo}"},{name:"فرمان درشت کردن متن",legend:"فشردن ${bold}"},{name:"فرمان کج کردن متن",legend:"فشردن ${italic}"},{name:"فرمان زیرخطدار کردن متن",legend:"فشردن ${underline}"},{name:"فرمان پیوند دادن",legend:"فشردن ${link}"},{name:"بستن نوار ابزار فرمان",legend:"فشردن ${toolbarCollapse}"},{name:"دسترسی به فرمان محل تمرکز قبلی",legend:"فشردن ${accessPreviousSpace} برای دسترسی به نزدیک‌ترین فضای قابل دسترسی تمرکز قبل از هشتک، برای مثال: دو عنصر مجاور HR -خط افقی-. تکرار کلید ترکیبی برای رسیدن به فضاهای تمرکز از راه دور."}, +{name:"دسترسی به فضای دستور بعدی",legend:"برای دسترسی به نزدیک‌ترین فضای تمرکز غیر قابل دسترس، ${accessNextSpace} را پس از علامت هشتک بفشارید، برای مثال: دو عنصر مجاور HR -خط افقی-. کلید ترکیبی را برای رسیدن به فضای تمرکز تکرار کنید."},{name:"راهنمای دسترسی",legend:"فشردن ${a11yHelp}"}]}],backspace:"عقبگرد",tab:"برگه",enter:"ورود",shift:"تعویض",ctrl:"کنترل",alt:"دگرساز",pause:"توقف",capslock:"Caps Lock",escape:"گریز",pageUp:"صفحه به بالا",pageDown:"صفحه به پایین",end:"پایان",home:"خانه",leftArrow:"پیکان چپ", +upArrow:"پیکان بالا",rightArrow:"پیکان راست",downArrow:"پیکان پایین",insert:"ورود","delete":"حذف",leftWindowKey:"کلید چپ ویندوز",rightWindowKey:"کلید راست ویندوز",selectKey:"انتخاب کلید",numpad0:"کلید شماره 0",numpad1:"کلید شماره 1",numpad2:"کلید شماره 2",numpad3:"کلید شماره 3",numpad4:"کلید شماره 4",numpad5:"کلید شماره 5",numpad6:"کلید شماره 6",numpad7:"کلید شماره 7",numpad8:"کلید شماره 8",numpad9:"کلید شماره 9",multiply:"ضرب",add:"افزودن",subtract:"تفریق",decimalPoint:"نقطه‌ی اعشار",divide:"جدا کردن", +f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"علامت تساوی",comma:"کاما",dash:"خط تیره",period:"دوره",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js new file mode 100755 index 0000000000..73591e19f9 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","fi",{title:"Saavutettavuus ohjeet",contents:"Ohjeen sisällöt. Sulkeaksesi tämän dialogin paina ESC.",legend:[{name:"Yleinen",items:[{name:"Editorin työkalupalkki",legend:"Paina ${toolbarFocus} siirtyäksesi työkalupalkkiin. Siirry seuraavaan ja edelliseen työkalupalkin ryhmään TAB ja SHIFT+TAB näppäimillä. Siirry seuraavaan ja edelliseen työkalupainikkeeseen käyttämällä NUOLI OIKEALLE tai NUOLI VASEMMALLE näppäimillä. Paina VÄLILYÖNTI tai ENTER näppäintä aktivoidaksesi työkalupainikkeen."}, +{name:"Editorin dialogi",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editorin oheisvalikko",legend:"Paina ${contextMenu} tai SOVELLUSPAINIKETTA avataksesi oheisvalikon. Liiku seuraavaan valikon vaihtoehtoon TAB tai NUOLI ALAS näppäimillä. Siirry edelliseen vaihtoehtoon SHIFT+TAB tai NUOLI YLÖS näppäimillä. Paina VÄLILYÖNTI tai ENTER valitaksesi valikon kohdan. Avataksesi nykyisen kohdan alivalikon paina VÄLILYÖNTI tai ENTER tai NUOLI OIKEALLE painiketta. Siirtyäksesi takaisin valikon ylemmälle tasolle paina ESC tai NUOLI vasemmalle. Oheisvalikko suljetaan ESC painikkeella."}, +{name:"Editorin listalaatikko",legend:"Listalaatikon sisällä siirry seuraavaan listan kohtaan TAB tai NUOLI ALAS painikkeilla. Siirry edelliseen listan kohtaan SHIFT+TAB tai NUOLI YLÖS painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi listan vaihtoehdon. Paina ESC sulkeaksesi listalaatikon."},{name:"Editorin elementtipolun palkki",legend:"Paina ${elementsPathFocus} siirtyäksesi elementtipolun palkkiin. Siirry seuraavaan elementtipainikkeeseen TAB tai NUOLI OIKEALLE painikkeilla. Siirry aiempaan painikkeeseen SHIFT+TAB tai NUOLI VASEMMALLE painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi elementin editorissa."}]}, +{name:"Komennot",items:[{name:"Peruuta komento",legend:"Paina ${undo}"},{name:"Tee uudelleen komento",legend:"Paina ${redo}"},{name:"Lihavoi komento",legend:"Paina ${bold}"},{name:"Kursivoi komento",legend:"Paina ${italic}"},{name:"Alleviivaa komento",legend:"Paina ${underline}"},{name:"Linkki komento",legend:"Paina ${link}"},{name:"Pienennä työkalupalkki komento",legend:"Paina ${toolbarCollapse}"},{name:"Siirry aiempaan fokustilaan komento",legend:"Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin edellä olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin."}, +{name:"Siirry seuraavaan fokustilaan komento",legend:"Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin jälkeen olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin."},{name:"Saavutettavuus ohjeet",legend:"Paina ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", +end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numeronäppäimistö 0",numpad1:"Numeronäppäimistö 1",numpad2:"Numeronäppäimistö 2",numpad3:"Numeronäppäimistö 3",numpad4:"Numeronäppäimistö 4",numpad5:"Numeronäppäimistö 5",numpad6:"Numeronäppäimistö 6",numpad7:"Numeronäppäimistö 7",numpad8:"Numeronäppäimistö 8", +numpad9:"Numeronäppäimistö 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Puolipiste",equalSign:"Equal Sign",comma:"Pilkku",dash:"Dash",period:"Piste",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js new file mode 100755 index 0000000000..80c4526f20 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","fo",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Falda",add:"Pluss",subtract:"Frádráttar",decimalPoint:"Decimal Point",divide:"Býta",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Javnatekn",comma:"Komma",dash:"Dash",period:"Punktum",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js new file mode 100755 index 0000000000..a3e3625f47 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","fr-ca",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer cette fenêtre, appuyez sur ESC.",legend:[{name:"Général",items:[{name:"Barre d'outil de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches TAB et SHIFT+TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour activer le bouton de barre d'outils."}, +{name:"Dialogue de l'éditeur",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l'option précédente avec les touches SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTREE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l'élément de menu parent avec les touches ESC ou FLECHE GAUCHE. Fermer le menu contextuel avec ESC."}, +{name:"Menu déroulant de l'éditeur",legend:"A l'intérieur d'une liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches SHIFT+TAB ou FLECHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant."},{name:"Barre d'emplacement des éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de léditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches SHIFT+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'élément dans l'éditeur."}]}, +{name:"Commandes",items:[{name:"Annuler",legend:"Appuyer sur ${undo}"},{name:"Refaire",legend:"Appuyer sur ${redo}"},{name:"Gras",legend:"Appuyer sur ${bold}"},{name:"Italique",legend:"Appuyer sur ${italic}"},{name:"Souligné",legend:"Appuyer sur ${underline}"},{name:"Lien",legend:"Appuyer sur ${link}"},{name:"Enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Accéder à l'objet de focus précédent",legend:"Appuyer ${accessPreviousSpace} pour accéder au prochain espace disponible avant le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d'espaces distantes."}, +{name:"Accéder au prochain objet de focus",legend:"Appuyer ${accessNextSpace} pour accéder au prochain espace disponible après le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d'espaces distantes."},{name:"Aide d'accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home", +leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1", +f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js new file mode 100755 index 0000000000..f08df84275 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","fr",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer ce dialogue, appuyez sur la touche ÉCHAP (Echappement).",legend:[{name:"Général",items:[{name:"Barre d'outils de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches MAJ et MAJ+TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLÈCHE DROITE et FLÈCHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRÉE pour activer le bouton de barre d'outils."}, +{name:"Dialogue de l'éditeur",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLÈCHE BAS. Se déplacer vers l'option précédente avec les touches MAJ+TAB ou FLÈCHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTRÉE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTRÉE ou FLÈCHE DROITE. Revenir à l'élément de menu parent avec les touches ÉCHAP ou FLÈCHE GAUCHE. Fermer le menu contextuel avec ÉCHAP."}, +{name:"Zone de liste de l'éditeur",legend:"Dans la liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLÈCHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches MAJ+TAB ou FLÈCHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTRÉE pour sélectionner l'option dans la liste. Appuyer sur ÉCHAP pour fermer le menu déroulant."},{name:"Barre d'emplacement des éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de l'éditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLÈCHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches MAJ+TAB ou FLÈCHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTRÉE pour sélectionner l'élément dans l'éditeur."}]}, +{name:"Commandes",items:[{name:" Annuler la commande",legend:"Appuyer sur ${undo}"},{name:"Refaire la commande",legend:"Appuyer sur ${redo}"},{name:" Commande gras",legend:"Appuyer sur ${bold}"},{name:" Commande italique",legend:"Appuyer sur ${italic}"},{name:" Commande souligné",legend:"Appuyer sur ${underline}"},{name:" Commande lien",legend:"Appuyer sur ${link}"},{name:" Commande enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Accéder à la précédente commande d'espace de mise au point", +legend:"Appuyez sur ${accessPreviousSpace} pour accéder à l'espace hors d'atteinte le plus proche avant le caret, par exemple: deux éléments HR adjacents. Répétez la combinaison de touches pour atteindre les espaces de mise au point distants."},{name:"Accès à la prochaine commande de l'espace de mise au point",legend:"Appuyez sur ${accessNextSpace} pour accéder au plus proche espace de mise au point hors d'atteinte après le caret, par exemple: deux éléments HR adjacents. répétez la combinaison de touches pour atteindre les espace de mise au point distants."}, +{name:" Aide Accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}],backspace:"Retour arrière",tab:"Tabulation",enter:"Entrée",shift:"Majuscule",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Verr. Maj.",escape:"Échap",pageUp:"Page supérieure",pageDown:"Page inférieure",end:"Fin",home:"Retour",leftArrow:"Flèche gauche",upArrow:"Flèche haute",rightArrow:"Flèche droite",downArrow:"Flèche basse",insert:"Insertion","delete":"Supprimer",leftWindowKey:"Touche Windows gauche",rightWindowKey:"Touche Windows droite", +selectKey:"Touche menu",numpad0:"Pavé numérique 0",numpad1:"Pavé numérique 1",numpad2:"Pavé numérique 2",numpad3:"Pavé numérique 3",numpad4:"Pavé numérique 4",numpad5:"Pavé numérique 5",numpad6:"Pavé numérique 6",numpad7:"Pavé numérique 7",numpad8:"Pavé numérique 8",numpad9:"Pavé numérique 9",multiply:"Multiplier",add:"Addition",subtract:"Soustraire",decimalPoint:"Point décimal",divide:"Diviser",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12", +numLock:"Verrouillage numérique",scrollLock:"Arrêt défilement",semiColon:"Point virgule",equalSign:"Signe égal",comma:"Virgule",dash:"Tiret",period:"Point",forwardSlash:"Barre oblique",graveAccent:"Accent grave",openBracket:"Parenthèse ouvrante",backSlash:"Barre oblique inverse",closeBracket:"Parenthèse fermante",singleQuote:"Apostrophe"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js new file mode 100755 index 0000000000..f5e00915f6 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","gl",{title:"Instrucións de accesibilidade",contents:"Axuda. Para pechar este diálogo prema ESC.",legend:[{name:"Xeral",items:[{name:"Barra de ferramentas do editor",legend:"Prema ${toolbarFocus} para navegar pola barra de ferramentas. Para moverse polos distintos grupos de ferramentas use as teclas TAB e MAIÚS+TAB. Para moverse polas distintas ferramentas use FRECHA DEREITA ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para activar o botón da barra de ferramentas."}, +{name:"Editor de diálogo",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor do menú contextual",legend:"Prema ${contextMenu} ou a TECLA MENÚ para abrir o menú contextual. A seguir móvase á seguinte opción do menú con TAB ou FRECHA ABAIXO. Móvase á opción anterior con MAIÚS + TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para seleccionar a opción do menú. Abra o submenú da opción actual con ESPAZO ou INTRO ou FRECHA DEREITA. Regrese ao elemento principal do menú con ESC ou FRECHA ESQUERDA. Peche o menú contextual con ESC."}, +{name:"Lista do editor",legend:"Dentro dunha lista, móvase ao seguinte elemento da lista con TAB ou FRECHA ABAIXO. Móvase ao elemento anterior da lista con MAIÚS+TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para escoller a opción da lista. Prema ESC para pechar a lista."},{name:"Barra da ruta ao elemento no editor",legend:"Prema ${elementsPathFocus} para navegar ata os elementos da barra de ruta. Móvase ao seguinte elemento botón con TAB ou FRECHA DEREITA. Móvase ao botón anterior con MAIÚS+TAB ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para seleccionar o elemento no editor."}]}, +{name:"Ordes",items:[{name:"Orde «desfacer»",legend:"Prema ${undo}"},{name:"Orde «refacer»",legend:"Prema ${redo}"},{name:"Orde «negra»",legend:"Prema ${bold}"},{name:"Orde «cursiva»",legend:"Prema ${italic}"},{name:"Orde «subliñar»",legend:"Prema ${underline}"},{name:"Orde «ligazón»",legend:"Prema ${link}"},{name:"Orde «contraer a barra de ferramentas»",legend:"Prema ${toolbarCollapse}"},{name:"Orde «acceder ao anterior espazo en foco»",legend:"Prema ${accessPreviousSpace} para acceder ao espazo máis próximo de foco inalcanzábel anterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes."}, +{name:"Orde «acceder ao seguinte espazo en foco»",legend:"Prema ${accessNextSpace} para acceder ao espazo máis próximo de foco inalcanzábel posterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes."},{name:"Axuda da accesibilidade",legend:"Prema ${a11yHelp}"}]}],backspace:"Ir atrás",tab:"Tabulador",enter:"Intro",shift:"Maiús",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloq. Maiús",escape:"Escape",pageUp:"Páxina arriba", +pageDown:"Páxina abaixo",end:"Fin",home:"Inicio",leftArrow:"Frecha esquerda",upArrow:"Frecha arriba",rightArrow:"Frecha dereita",downArrow:"Frecha abaixo",insert:"Inserir","delete":"Supr",leftWindowKey:"Tecla Windows esquerda",rightWindowKey:"Tecla Windows dereita",selectKey:"Escolla a tecla",numpad0:"Tec. numérico 0",numpad1:"Tec. numérico 1",numpad2:"Tec. numérico 2",numpad3:"Tec. numérico 3",numpad4:"Tec. numérico 4",numpad5:"Tec. numérico 5",numpad6:"Tec. numérico 6",numpad7:"Tec. numérico 7", +numpad8:"Tec. numérico 8",numpad9:"Tec. numérico 9",multiply:"Multiplicar",add:"Sumar",subtract:"Restar",decimalPoint:"Punto decimal",divide:"Dividir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloq. num.",scrollLock:"Bloq. despraz.",semiColon:"Punto e coma",equalSign:"Signo igual",comma:"Coma",dash:"Guión",period:"Punto",forwardSlash:"Barra inclinada",graveAccent:"Acento grave",openBracket:"Abrir corchete",backSlash:"Barra invertida", +closeBracket:"Pechar corchete",singleQuote:"Comiña simple"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js new file mode 100755 index 0000000000..5fde0451cd --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","gu",{title:"એક્ક્ષેબિલિટી ની વિગતો",contents:"હેલ્પ. આ બંધ કરવા ESC દબાવો.",legend:[{name:"જનરલ",items:[{name:"એડિટર ટૂલબાર",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"એડિટર ડાયલોગ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"કમાંડસ",items:[{name:"અન્ડું કમાંડ",legend:"$ દબાવો {undo}"},{name:"ફરી કરો કમાંડ",legend:"$ દબાવો {redo}"},{name:"બોલ્દનો કમાંડ",legend:"$ દબાવો {bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/he.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/he.js new file mode 100755 index 0000000000..3ddf422c94 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/he.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","he",{title:"הוראות נגישות",contents:"הוראות נגישות. לסגירה לחץ אסקייפ (ESC).",legend:[{name:"כללי",items:[{name:"סרגל הכלים",legend:"לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר."},{name:"דיאלוגים (חלונות תשאול)",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"תפריט ההקשר (Context Menu)",legend:"לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. סגור את תפריט ההקשר עם אסקייפ (ESC)."},{name:"תפריטים צפים (List boxes)",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"עץ אלמנטים (Elements Path)",legend:"לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. עבור לפריט הבא עם טאב (TAB) או חץ ימני. עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך."}]},{name:"פקודות",items:[{name:" ביטול צעד אחרון",legend:"לחץ ${undo}"},{name:" חזרה על צעד אחרון",legend:"לחץ ${redo}"},{name:" הדגשה",legend:"לחץ ${bold}"},{name:" הטייה",legend:"לחץ ${italic}"},{name:" הוספת קו תחתון",legend:"לחץ ${underline}"},{name:" הוספת לינק", +legend:"לחץ ${link}"},{name:" כיווץ סרגל הכלים",legend:"לחץ ${toolbarCollapse}"},{name:"גישה למיקום המיקוד הקודם",legend:"לחץ ${accessPreviousSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב לפני הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר."},{name:"גישה למיקום המיקוד הבא",legend:"לחץ ${accessNextSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב אחרי הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר."}, +{name:" הוראות נגישות",legend:"לחץ ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"חץ שמאלה",upArrow:"חץ למעלה",rightArrow:"חץ ימינה",downArrow:"חץ למטה",insert:"הכנס","delete":"מחק",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"בחר מקש",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2", +numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"הוסף",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"סלאש",graveAccent:"Grave Accent", +openBracket:"Open Bracket",backSlash:"סלאש הפוך",closeBracket:"Close Bracket",singleQuote:"ציטוט יחיד"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js new file mode 100755 index 0000000000..62033cccb4 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","hi",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"सामान्य",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js new file mode 100755 index 0000000000..0a4f080b7c --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","hr",{title:"Upute dostupnosti",contents:"Sadržaj pomoći. Za zatvaranje pritisnite ESC.",legend:[{name:"Općenito",items:[{name:"Alatna traka",legend:"Pritisni ${toolbarFocus} za navigaciju do alatne trake. Pomicanje do prethodne ili sljedeće alatne grupe vrši se pomoću SHIFT+TAB i TAB. Pomicanje do prethodnog ili sljedećeg gumba u alatnoj traci vrši se pomoću lijeve i desne strelice kursora. Pritisnite SPACE ili ENTER za aktivaciju alatne trake."},{name:"Dijalog", +legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Kontekstni izbornik",legend:"Pritisnite ${contextMenu} ili APPLICATION tipku za otvaranje kontekstnog izbornika. Pomicanje se vrši TAB ili strelicom kursora prema dolje ili SHIFT+TAB ili strelica kursora prema gore. SPACE ili ENTER odabiru opciju izbornika. Otvorite podizbornik trenutne opcije sa SPACE, ENTER ili desna strelica kursora. Povratak na prethodni izbornik vrši se sa ESC ili lijevom strelicom kursora. Zatvaranje se vrši pritiskom na tipku ESC."}, +{name:"Lista",legend:"Unutar list-boxa, pomicanje na sljedeću stavku vrši se sa TAB ili strelica kursora prema dolje. Na prethodnu sa SHIFT+TAB ili strelica prema gore. Pritiskom na SPACE ili ENTER odabire se stavka ili ESC za zatvaranje."},{name:"Traka putanje elemenata",legend:"Pritisnite ${elementsPathFocus} za navigaciju po putanji elemenata. Pritisnite TAB ili desnu strelicu kursora za pomicanje na sljedeći element ili SHIFT+TAB ili lijeva strelica kursora za pomicanje na prethodni element. Pritiskom na SPACE ili ENTER vrši se odabir elementa."}]}, +{name:"Naredbe",items:[{name:"Vrati naredbu",legend:"Pritisni ${undo}"},{name:"Ponovi naredbu",legend:"Pritisni ${redo}"},{name:"Bold naredba",legend:"Pritisni ${bold}"},{name:"Italic naredba",legend:"Pritisni ${italic}"},{name:"Underline naredba",legend:"Pritisni ${underline}"},{name:"Link naredba",legend:"Pritisni ${link}"},{name:"Smanji alatnu traku naredba",legend:"Pritisni ${toolbarCollapse}"},{name:"Access previous focus space naredba",legend:"Pritisni ${accessPreviousSpace} za pristup najbližem nedostupnom razmaku prije kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak."}, +{name:"Access next focus space naredba",legend:"Pritisni ${accessNextSpace} za pristup najbližem nedostupnom razmaku nakon kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak."},{name:"Pomoć za dostupnost",legend:"Pritisni ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", +upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", +f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js new file mode 100755 index 0000000000..5fcd6809a1 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","hu",{title:"Kisegítő utasítások",contents:"Súgó tartalmak. A párbeszédablak bezárásához nyomjon ESC-et.",legend:[{name:"Általános",items:[{name:"Szerkesztő Eszköztár",legend:"Nyomjon ${toolbarFocus} hogy kijelölje az eszköztárat. A következő és előző eszköztár csoporthoz a TAB és SHIFT+TAB-al juthat el. A következő és előző eszköztár gombhoz a BAL NYÍL vagy JOBB NYÍL gombbal juthat el. Nyomjon SPACE-t vagy ENTER-t hogy aktiválja az eszköztár gombot."},{name:"Szerkesző párbeszéd ablak", +legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Szerkesztő helyi menü",legend:"Nyomjon ${contextMenu}-t vagy ALKALMAZÁS BILLENTYŰT a helyi menü megnyitásához. Ezután a következő menüpontra léphet a TAB vagy LEFELÉ NYÍLLAL. Az előző opciót a SHIFT+TAB vagy FELFELÉ NYÍLLAL érheti el. Nyomjon SPACE-t vagy ENTER-t a menüpont kiválasztásához. A jelenlegi menüpont almenüjének megnyitásához nyomjon SPACE-t vagy ENTER-t, vagy JOBB NYILAT. A főmenühöz való visszatéréshez nyomjon ESC-et vagy BAL NYILAT. A helyi menü bezárása az ESC billentyűvel lehetséges."}, +{name:"Szerkesztő lista",legend:"A listán belül a következő elemre a TAB vagy LEFELÉ NYÍLLAL mozoghat. Az előző elem kiválasztásához nyomjon SHIFT+TAB-ot vagy FELFELÉ NYILAT. Nyomjon SPACE-t vagy ENTER-t az elem kiválasztásához. Az ESC billentyű megnyomásával bezárhatja a listát."},{name:"Szerkesztő elem utak sáv",legend:"Nyomj ${elementsPathFocus} hogy kijelöld a elemek út sávját. A következő elem gombhoz a TAB-al vagy a JOBB NYÍLLAL juthatsz el. Az előző gombhoz a SHIFT+TAB vagy BAL NYÍLLAL mehetsz. A SPACE vagy ENTER billentyűvel kiválaszthatod az elemet a szerkesztőben."}]}, +{name:"Parancsok",items:[{name:"Parancs visszavonása",legend:"Nyomj ${undo}"},{name:"Parancs megismétlése",legend:"Nyomjon ${redo}"},{name:"Félkövér parancs",legend:"Nyomjon ${bold}"},{name:"Dőlt parancs",legend:"Nyomjon ${italic}"},{name:"Aláhúzott parancs",legend:"Nyomjon ${underline}"},{name:"Link parancs",legend:"Nyomjon ${link}"},{name:"Szerkesztősáv összecsukása parancs",legend:"Nyomjon ${toolbarCollapse}"},{name:"Hozzáférés az előző fókusz helyhez parancs",legend:"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel előtt, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket."}, +{name:"Hozzáférés a következő fókusz helyhez parancs",legend:"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel után, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket."},{name:"Kisegítő súgó",legend:"Nyomjon ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", +end:"End",home:"Home",leftArrow:"balra nyíl",upArrow:"felfelé nyíl",rightArrow:"jobbra nyíl",downArrow:"lefelé nyíl",insert:"Insert","delete":"Delete",leftWindowKey:"bal Windows-billentyű",rightWindowKey:"jobb Windows-billentyű",selectKey:"Billentyű választása",numpad0:"Számbillentyűk 0",numpad1:"Számbillentyűk 1",numpad2:"Számbillentyűk 2",numpad3:"Számbillentyűk 3",numpad4:"Számbillentyűk 4",numpad5:"Számbillentyűk 5",numpad6:"Számbillentyűk 6",numpad7:"Számbillentyűk 7",numpad8:"Számbillentyűk 8", +numpad9:"Számbillentyűk 9",multiply:"Szorzás",add:"Hozzáadás",subtract:"Kivonás",decimalPoint:"Tizedespont",divide:"Osztás",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Pontosvessző",equalSign:"Egyenlőségjel",comma:"Vessző",dash:"Kötőjel",period:"Pont",forwardSlash:"Perjel",graveAccent:"Visszafelé dőlő ékezet",openBracket:"Nyitó szögletes zárójel",backSlash:"fordított perjel",closeBracket:"Záró szögletes zárójel", +singleQuote:"szimpla idézőjel"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/id.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/id.js new file mode 100755 index 0000000000..af959907a9 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/id.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","id",{title:"Accessibility Instructions",contents:"Bantuan. Tekan ESC untuk menutup dialog ini.",legend:[{name:"Umum",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/it.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/it.js new file mode 100755 index 0000000000..99050b1ace --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/it.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","it",{title:"Istruzioni di Accessibilità",contents:"Contenuti di Aiuto. Per chiudere questa finestra premi ESC.",legend:[{name:"Generale",items:[{name:"Barra degli strumenti Editor",legend:"Premere ${toolbarFocus} per passare alla barra degli strumenti. Usare TAB per spostarsi al gruppo successivo, MAIUSC+TAB per spostarsi a quello precedente. Usare FRECCIA DESTRA per spostarsi al pulsante successivo, FRECCIA SINISTRA per spostarsi a quello precedente. Premere SPAZIO o INVIO per attivare il pulsante della barra degli strumenti."}, +{name:"Finestra Editor",legend:"All'interno di una finestra di dialogo è possibile premere TAB per passare all'elemento successivo della finestra, MAIUSC+TAB per passare a quello precedente; premere INVIO per inviare i dati della finestra, oppure ESC per annullare l'operazione. Quando una finestra di dialogo ha più schede, è possibile passare all'elenco delle schede sia con ALT+F10 che con TAB, in base all'ordine delle tabulazioni della finestra. Quando l'elenco delle schede è attivo, premere la FRECCIA DESTRA o la FRECCIA SINISTRA per passare rispettivamente alla scheda successiva o a quella precedente."}, +{name:"Menù contestuale Editor",legend:"Premi ${contextMenu} o TASTO APPLICAZIONE per aprire il menu contestuale. Dunque muoviti all'opzione successiva del menu con il tasto TAB o con la Freccia Sotto. Muoviti all'opzione precedente con MAIUSC+TAB o con Freccia Sopra. Premi SPAZIO o INVIO per scegliere l'opzione di menu. Apri il sottomenu dell'opzione corrente con SPAZIO o INVIO oppure con la Freccia Destra. Torna indietro al menu superiore con ESC oppure Freccia Sinistra. Chiudi il menu contestuale con ESC."}, +{name:"Box Lista Editor",legend:"All'interno di un elenco di opzioni, per spostarsi all'elemento successivo premere TAB oppure FRECCIA GIÙ. Per spostarsi all'elemento precedente usare SHIFT+TAB oppure FRECCIA SU. Premere SPAZIO o INVIO per selezionare l'elemento della lista. Premere ESC per chiudere l'elenco di opzioni."},{name:"Barra percorso elementi editor",legend:"Premere ${elementsPathFocus} per passare agli elementi della barra del percorso. Usare TAB o FRECCIA DESTRA per passare al pulsante successivo. Per passare al pulsante precedente premere MAIUSC+TAB o FRECCIA SINISTRA. Premere SPAZIO o INVIO per selezionare l'elemento nell'editor."}]}, +{name:"Comandi",items:[{name:" Annulla comando",legend:"Premi ${undo}"},{name:" Ripeti comando",legend:"Premi ${redo}"},{name:" Comando Grassetto",legend:"Premi ${bold}"},{name:" Comando Corsivo",legend:"Premi ${italic}"},{name:" Comando Sottolineato",legend:"Premi ${underline}"},{name:" Comando Link",legend:"Premi ${link}"},{name:" Comando riduci barra degli strumenti",legend:"Premi ${toolbarCollapse}"},{name:"Comando di accesso al precedente spazio di focus",legend:"Premi ${accessPreviousSpace} per accedere il più vicino spazio di focus non raggiungibile prima del simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti."}, +{name:"Comando di accesso al prossimo spazio di focus",legend:"Premi ${accessNextSpace} per accedere il più vicino spazio di focus non raggiungibile dopo il simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti."},{name:" Aiuto Accessibilità",legend:"Premi ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Invio",shift:"Maiusc",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloc Maiusc",escape:"Esc",pageUp:"Pagina sù",pageDown:"Pagina giù", +end:"Fine",home:"Inizio",leftArrow:"Freccia sinistra",upArrow:"Freccia su",rightArrow:"Freccia destra",downArrow:"Freccia giù",insert:"Ins","delete":"Canc",leftWindowKey:"Tasto di Windows sinistro",rightWindowKey:"Tasto di Windows destro",selectKey:"Tasto di selezione",numpad0:"0 sul tastierino numerico",numpad1:"1 sul tastierino numerico",numpad2:"2 sul tastierino numerico",numpad3:"3 sul tastierino numerico",numpad4:"4 sul tastierino numerico",numpad5:"5 sul tastierino numerico",numpad6:"6 sul tastierino numerico", +numpad7:"7 sul tastierino numerico",numpad8:"8 sul tastierino numerico",numpad9:"9 sul tastierino numerico",multiply:"Moltiplicazione",add:"Più",subtract:"Sottrazione",decimalPoint:"Punto decimale",divide:"Divisione",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloc Num",scrollLock:"Bloc Scorr",semiColon:"Punto-e-virgola",equalSign:"Segno di uguale",comma:"Virgola",dash:"Trattino",period:"Punto",forwardSlash:"Barra",graveAccent:"Accento grave", +openBracket:"Parentesi quadra aperta",backSlash:"Barra rovesciata",closeBracket:"Parentesi quadra chiusa",singleQuote:"Apostrofo"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js new file mode 100755 index 0000000000..4474d27c81 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js @@ -0,0 +1,9 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","ja",{title:"ユーザー補助の説明",contents:"ヘルプ このダイアログを閉じるには ESCを押してください。",legend:[{name:"全般",items:[{name:"エディターツールバー",legend:"${toolbarFocus} を押すとツールバーのオン/オフ操作ができます。カーソルをツールバーのグループで移動させるにはTabかSHIFT+Tabを押します。グループ内でカーソルを移動させるには、右カーソルか左カーソルを押します。スペースキーやエンターを押すとボタンを有効/無効にすることができます。"},{name:"編集ダイアログ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"エディターのメニュー",legend:"${contextMenu} キーかAPPLICATION KEYを押すとコンテキストメニューが開きます。Tabか下カーソルでメニューのオプション選択が下に移動します。戻るには、SHIFT+Tabか上カーソルです。スペースもしくはENTERキーでメニューオプションを決定できます。現在選んでいるオプションのサブメニューを開くには、スペース、もしくは右カーソルを押します。サブメニューから親メニューに戻るには、ESCか左カーソルを押してください。ESCでコンテキストメニュー自体をキャンセルできます。"},{name:"エディターリストボックス",legend:"リストボックス内で移動するには、Tabか下カーソルで次のアイテムへ移動します。SHIFT+Tabで前のアイテムに戻ります。リストのオプションを選択するには、スペースもしくは、ENTERを押してください。リストボックスを閉じるには、ESCを押してください。"},{name:"エディター要素パスバー",legend:"${elementsPathFocus} を押すとエレメントパスバーを操作出来ます。Tabか右カーソルで次のエレメントを選択できます。前のエレメントを選択するには、SHIFT+Tabか左カーソルです。スペースもしくは、ENTERでエディタ内の対象エレメントを選択出来ます。"}]}, +{name:"コマンド",items:[{name:"元に戻す",legend:"${undo} をクリック"},{name:"やり直し",legend:"${redo} をクリック"},{name:"太字",legend:"${bold} をクリック"},{name:"斜体 ",legend:"${italic} をクリック"},{name:"下線",legend:"${underline} をクリック"},{name:"リンク",legend:"${link} をクリック"},{name:"ツールバーを縮める",legend:"${toolbarCollapse} をクリック"},{name:"前のカーソル移動のできないポイントへ",legend:"${accessPreviousSpace} を押すとカーソルより前にあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。"},{name:"次のカーソル移動のできないポイントへ",legend:"${accessNextSpace} を押すとカーソルより後ろにあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。"}, +{name:"ユーザー補助ヘルプ",legend:"${a11yHelp} をクリック"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"左矢印",upArrow:"上矢印",rightArrow:"右矢印",downArrow:"下矢印",insert:"Insert","delete":"Delete",leftWindowKey:"左Windowキー",rightWindowKey:"右のWindowキー",selectKey:"Select",numpad0:"Num 0",numpad1:"Num 1",numpad2:"Num 2",numpad3:"Num 3",numpad4:"Num 4",numpad5:"Num 5", +numpad6:"Num 6",numpad7:"Num 7",numpad8:"Num 8",numpad9:"Num 9",multiply:"掛ける",add:"足す",subtract:"引く",decimalPoint:"小数点",divide:"割る",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"セミコロン",equalSign:"イコール記号",comma:"カンマ",dash:"ダッシュ",period:"ピリオド",forwardSlash:"フォワードスラッシュ",graveAccent:"グレイヴアクセント",openBracket:"開きカッコ",backSlash:"バックスラッシュ",closeBracket:"閉じカッコ",singleQuote:"シングルクォート"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/km.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/km.js new file mode 100755 index 0000000000..ea34e65059 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/km.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","km",{title:"Accessibility Instructions",contents:"មាតិកា​ជំនួយ។ ដើម្បី​បិទ​ផ្ទាំង​នេះ សូម​ចុច ESC ។",legend:[{name:"ទូទៅ",items:[{name:"របារ​ឧបករណ៍​កម្មវិធី​និពន្ធ",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"ផ្ទាំង​កម្មវិធីនិពន្ធ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"ម៉ីនុយបរិបទអ្នកកែសម្រួល",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"ប្រអប់បញ្ជីអ្នកកែសម្រួល",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"ពាក្យបញ្ជា",items:[{name:"ការ​បញ្ជា​មិនធ្វើវិញ",legend:"ចុច ${undo}"},{name:"ការបញ្ជា​ធ្វើវិញ",legend:"ចុច ${redo}"},{name:"ការបញ្ជា​អក្សរ​ដិត",legend:"ចុច ${bold}"},{name:"ការបញ្ជា​អក្សរ​ទ្រេត",legend:"ចុច ${italic}"},{name:"ពាក្យបញ្ជា​បន្ទាត់​ពីក្រោម", +legend:"ចុច ${underline}"},{name:"ពាក្យបញ្ជា​តំណ",legend:"ចុច ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:"ជំនួយ​ពី​ភាព​ងាយស្រួល",legend:"ជួយ ${a11yHelp}"}]}],backspace:"លុបថយក្រោយ",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"ផ្អាក",capslock:"Caps Lock",escape:"ចាកចេញ",pageUp:"ទំព័រ​លើ",pageDown:"ទំព័រ​ក្រោម",end:"ចុង",home:"ផ្ទះ",leftArrow:"ព្រួញ​ឆ្វេង",upArrow:"ព្រួញ​លើ",rightArrow:"ព្រួញ​ស្ដាំ",downArrow:"ព្រួញ​ក្រោម",insert:"បញ្ចូល","delete":"លុប",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"ជ្រើស​គ្រាប់​ចុច",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"គុណ",add:"បន្ថែម",subtract:"ដក",decimalPoint:"ចំណុចទសភាគ",divide:"ចែក",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"បិទ​រំកិល",semiColon:"ចុច​ក្បៀស",equalSign:"សញ្ញា​អឺរ៉ូ",comma:"ក្បៀស",dash:"Dash",period:"ចុច",forwardSlash:"Forward Slash",graveAccent:"Grave Accent", +openBracket:"តង្កៀប​បើក",backSlash:"Backslash",closeBracket:"តង្កៀប​បិទ",singleQuote:"បន្តក់​មួយ"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js new file mode 100755 index 0000000000..5fe5eb742c --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","ko",{title:"접근성 설명",contents:"도움말. 이 창을 닫으시려면 ESC 를 누르세요.",legend:[{name:"일반",items:[{name:"편집기 툴바",legend:"툴바를 탐색하시려면 ${toolbarFocus} 를 투르세요. 이전/다음 툴바 그룹으로 이동하시려면 TAB 키 또는 SHIFT+TAB 키를 누르세요. 이전/다음 툴바 버튼으로 이동하시려면 오른쪽 화살표 키 또는 왼쪽 화살표 키를 누르세요. 툴바 버튼을 활성화 하려면 SPACE 키 또는 ENTER 키를 누르세요."},{name:"편집기 다이얼로그",legend:"TAB 키를 누르면 다음 대화상자로 이동하고, SHIFT+TAB 키를 누르면 이전 대화상자로 이동합니다. 대화상자를 제출하려면 ENTER 키를 누르고, ESC 키를 누르면 대화상자를 취소합니다. 대화상자에 탭이 여러개 있을 때, ALT+F10 키 또는 TAB 키를 누르면 순서에 따라 탭 목록에 도달할 수 있습니다. 탭 목록에 초점이 맞을 때, 오른쪽과 왼쪽 화살표 키를 이용하면 각각 다음과 이전 탭으로 이동할 수 있습니다."}, +{name:"편집기 환경 메뉴",legend:"${contextMenu} 또는 어플리케이션 키를 누르면 환경-메뉴를 열 수 있습니다. 환경-메뉴에서 TAB 키 또는 아래 화살표 키를 누르면 다음 메뉴 옵션으로 이동할 수 있습니다. 이전 옵션으로 이동은 SHIFT+TAB 키 또는 위 화살표 키를 눌러서 할 수 있습니다. 스페이스 키 또는 ENTER 키를 눌러서 메뉴 옵션을 선택할 수 있습니다. 스페이스 키 또는 ENTER 키 또는 오른쪽 화살표 키를 눌러서 하위 메뉴를 열 수 있습니다. 부모 메뉴 항목으로 돌아가려면 ESC 키 또는 왼쪽 화살표 키를 누릅니다. ESC 키를 눌러서 환경-메뉴를 닫습니다."},{name:"편집기 목록 박스",legend:"리스트-박스 내에서, 목록의 다음 항목으로 이동하려면 TAB 키 또는 아래쪽 화살표 키를 누릅니다. 목록의 이전 항목으로 이동하려면 SHIFT+TAB 키 또는 위쪽 화살표 키를 누릅니다. 스페이스 키 또는 ENTER 키를 누르면 목록의 해당 옵션을 선택합니다. ESC 키를 눌러서 리스트-박스를 닫을 수 있습니다."}, +{name:"편집기 요소 경로 막대",legend:"${elementsPathFocus}를 눌러서 요소 경로 막대를 탐색할 수 있습니다. 다음 요소로 이동하려면 TAB 키 또는 오른쪽 화살표 키를 누릅니다. SHIFT+TAB 키 또는 왼쪽 화살표 키를 누르면 이전 버튼으로 이동할 수 있습니다. 스페이스 키나 ENTER 키를 누르면 편집기의 해당 항목을 선택합니다."}]},{name:"명령",items:[{name:" 명령 실행 취소",legend:"${undo} 누르시오"},{name:" 명령 다시 실행",legend:"${redo} 누르시오"},{name:" 굵게 명령",legend:"${bold} 누르시오"},{name:" 기울임 꼴 명령",legend:"${italic} 누르시오"},{name:" 밑줄 명령",legend:"${underline} 누르시오"},{name:" 링크 명령",legend:"${link} 누르시오"},{name:" 툴바 줄이기 명령",legend:"${toolbarCollapse} 누르시오"}, +{name:" 이전 포커스 공간 접근 명령",legend:"탈자 기호(^) 이전에 ${accessPreviousSpace} 를 누르면, 접근 불가능하면서 가장 가까운 포커스 영역에 접근합니다. 예를 들면, 두 인접한 HR 요소가 있습니다. 키 조합을 반복해서 멀리있는 포커스 영역들에 도달할 수 있습니다."},{name:"다음 포커스 공간 접근 명령",legend:"탈자 기호(^) 다음에 ${accessNextSpace} 를 누르면, 접근 불가능하면서 가장 가까운 포커스 영역에 접근합니다. 예를 들면, 두 인접한 HR 요소가 있습니다. 키 조합을 반복해서 멀리있는 포커스 영역들에 도달할 수 있습니다. "},{name:" 접근성 도움말",legend:"${a11yHelp} 누르시오"}]}],backspace:"Backspace 키",tab:"탭 키",enter:"엔터 키",shift:"시프트 키",ctrl:"컨트롤 키",alt:"알트 키",pause:"일시정지 키",capslock:"캡스 록 키", +escape:"이스케이프 키",pageUp:"페이지 업 키",pageDown:"페이지 다운 키",end:"엔드 키",home:"홈 키",leftArrow:"왼쪽 화살표 키",upArrow:"위쪽 화살표 키",rightArrow:"오른쪽 화살표 키",downArrow:"아래쪽 화살표 키",insert:"인서트 키","delete":"삭제 키",leftWindowKey:"왼쪽 윈도우 키",rightWindowKey:"오른쪽 윈도우 키",selectKey:"셀렉트 키",numpad0:"숫자 패드 0 키",numpad1:"숫자 패드 1 키",numpad2:"숫자 패드 2 키",numpad3:"숫자 패드 3 키",numpad4:"숫자 패드 4 키",numpad5:"숫자 패드 5 키",numpad6:"숫자 패드 6 키",numpad7:"숫자 패드 7 키",numpad8:"숫자 패드 8 키",numpad9:"숫자 패드 9 키",multiply:"곱셈(*) 키",add:"덧셈(+) 키",subtract:"뺄셈(-) 키", +decimalPoint:"온점(.) 키",divide:"나눗셈(/) 키",f1:"F1 키",f2:"F2 키",f3:"F3 키",f4:"F4 키",f5:"F5 키",f6:"F6 키",f7:"F7 키",f8:"F8 키",f9:"F9 키",f10:"F10 키",f11:"F11 키",f12:"F12 키",numLock:"Num Lock 키",scrollLock:"Scroll Lock 키",semiColon:"세미콜론(;) 키",equalSign:"등호(=) 키",comma:"쉼표(,) 키",dash:"대시(-) 키",period:"온점(.) 키",forwardSlash:"슬래시(/) 키",graveAccent:"억음 악센트(`) 키",openBracket:"브라켓 열기([) 키",backSlash:"역슬래시(\\\\) 키",closeBracket:"브라켓 닫기(]) 키",singleQuote:"외 따옴표(') 키"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js new file mode 100755 index 0000000000..ac45414d2c --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","ku",{title:"ڕێنمای لەبەردەستدابوون",contents:"پێکهاتەی یارمەتی. کلیك ESC بۆ داخستنی ئەم دیالۆگه.",legend:[{name:"گشتی",items:[{name:"تووڵامرازی دەستكاریكەر",legend:"کلیك ${toolbarFocus} بۆ ڕابەری تووڵامراز. بۆ گواستنەوەی پێشوو داهاتووی گرووپی تووڵامرازی داگرتنی کلیلی TAB لەگەڵ‌ SHIFT+TAB. بۆ گواستنەوەی پێشوو داهاتووی دووگمەی تووڵامرازی لەڕێی کلیلی تیری دەستی ڕاست یان کلیلی تیری دەستی چەپ. کلیکی کلیلی SPACE یان ENTER بۆ چالاککردنی دووگمەی تووڵامراز."},{name:"دیالۆگی دەستكاریكەر", +legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"پێڕستی سەرنووسەر",legend:"کلیك ${contextMenu} یان دوگمەی لیسته‌(Menu) بۆ کردنەوەی لیستەی دەق. بۆ چوونە هەڵبژاردەیەکی تر له‌ لیسته‌ کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوارەوه‌ بۆ چوون بۆ هەڵبژاردەی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو له‌ سەرەوە. داگرتنی کلیلی SPACE یان ENTER بۆ هەڵبژاردنی هەڵبژاردەی لیسته‌. بۆ کردنەوەی لقی ژێر لیسته‌ لەهەڵبژاردەی لیستە کلیکی کلیلی SPACE یان ENTER یان کلیلی تیری دەستی ڕاست. بۆ گەڕانەوه بۆ سەرەوەی لیسته‌ کلیکی کلیلی ESC یان کلیلی تیری دەستی چەپ. بۆ داخستنی لیستە کلیكی کلیلی ESC بکە."}, +{name:"لیستی سنووقی سەرنووسەر",legend:"لەناو سنوقی لیست, چۆن بۆ هەڵنبژاردەی لیستێکی تر کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوار. چوون بۆ هەڵبژاردەی لیستی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو لەسەرەوه‌. کلیکی کلیلی SPACE یان ENTER بۆ دیاریکردنی ‌هەڵبژاردەی لیست. کلیکی کلیلی ESC بۆ داخستنی سنوقی لیست."},{name:"تووڵامرازی توخم",legend:"کلیك ${elementsPathFocus} بۆ ڕابەری تووڵامرازی توخمەکان. چوون بۆ دوگمەی توخمێکی تر کلیکی کلیلی TAB یان کلیلی تیری دەستی ڕاست. چوون بۆ دوگمەی توخمی پێشوو کلیلی SHIFT+TAB یان کلیکی کلیلی تیری دەستی چەپ. داگرتنی کلیلی SPACE یان ENTER بۆ دیاریکردنی توخمەکه‌ لەسەرنووسه."}]}, +{name:"فەرمانەکان",items:[{name:"پووچکردنەوەی فەرمان",legend:"کلیك ${undo}"},{name:"هەڵگەڕانەوەی فەرمان",legend:"کلیك ${redo}"},{name:"فەرمانی دەقی قەڵەو",legend:"کلیك ${bold}"},{name:"فەرمانی دەقی لار",legend:"کلیك ${italic}"},{name:"فەرمانی ژێرهێڵ",legend:"کلیك ${underline}"},{name:"فەرمانی به‌ستەر",legend:"کلیك ${link}"},{name:"شاردەنەوەی تووڵامراز",legend:"کلیك ${toolbarCollapse}"},{name:"چوونەناو سەرنجدانی پێشوی فەرمانی بۆشایی",legend:"کلیک ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:"چوونەناو سەرنجدانی داهاتووی فەرمانی بۆشایی",legend:"کلیک ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"دەستپێگەیشتنی یارمەتی",legend:"کلیك ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", +upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"پەنجەرەی چەپ",rightWindowKey:"پەنجەرەی ڕاست",selectKey:"Select",numpad0:"Numpad 0",numpad1:"1",numpad2:"2",numpad3:"3",numpad4:"4",numpad5:"5",numpad6:"6",numpad7:"7",numpad8:"8",numpad9:"9",multiply:"*",add:"+",subtract:"-",decimalPoint:".",divide:"/",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock", +semiColon:";",equalSign:"=",comma:",",dash:"-",period:".",forwardSlash:"/",graveAccent:"`",openBracket:"[",backSlash:"\\\\",closeBracket:"}",singleQuote:"'"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js new file mode 100755 index 0000000000..2f93e57824 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","lt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Bendros savybės",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js new file mode 100755 index 0000000000..770bb519b9 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","lv",{title:"Pieejamības instrukcija",contents:"Palīdzības saturs. Lai aizvērtu ciet šo dialogu nospiediet ESC.",legend:[{name:"Galvenais",items:[{name:"Redaktora rīkjosla",legend:"Nospiediet ${toolbarFocus} lai pārvietotos uz rīkjoslu. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas grupu izmantojiet pogu TAB un SHIFT+TAB. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas pogu izmantojiet Kreiso vai Labo bultiņu. Nospiediet Atstarpi vai ENTER lai aktivizētu rīkjosla pogu."}, +{name:"Redaktora dialoga logs",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Redaktora satura izvēle",legend:"Nospiediet ${contextMenu} vai APPLICATION KEY lai atvērtu satura izvēlni. Lai pārvietotos uz nākošo izvēlnes opciju izmantojiet pogu TAB vai pogu Bultiņu uz leju. Lai pārvietotos uz iepriekšējo opciju izmantojiet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvelētos izvēlnes opciju. Atveriet tekošajā opcija apakšizvēlni ar SAPCE vai ENTER ka ari to var izdarīt ar Labo bultiņu. Lai atgrieztos atpakaļ uz sakuma izvēlni nospiediet ESC vai Kreiso bultiņu. Lai aizvērtu ciet izvēlnes saturu nospiediet ESC."}, +{name:"Redaktora saraksta lauks",legend:"Saraksta laukā, lai pārvietotos uz nākošo saraksta elementu nospiediet TAB vai pogu Bultiņa uz leju. Lai pārvietotos uz iepriekšējo saraksta elementu nospiediet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvēlētos saraksta opcijas. Nospiediet ESC lai aizvērtu saraksta lauku."},{name:"Redaktora elementa ceļa josla",legend:"Nospiediet ${elementsPathFocus} lai pārvietotos uz elementa ceļa joslu. Lai pārvietotos uz nākošo elementa pogu izmantojiet TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo elementa pogu izmantojiet SHIFT+TAB vai Kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos elementu redaktorā."}]}, +{name:"Komandas",items:[{name:"Komanda atcelt darbību",legend:"Nospiediet ${undo}"},{name:"Komanda atkārtot darbību",legend:"Nospiediet ${redo}"},{name:"Treknraksta komanda",legend:"Nospiediet ${bold}"},{name:"Kursīva komanda",legend:"Nospiediet ${italic}"},{name:"Apakšsvītras komanda ",legend:"Nospiediet ${underline}"},{name:"Hipersaites komanda",legend:"Nospiediet ${link}"},{name:"Rīkjoslas aizvēršanas komanda",legend:"Nospiediet ${toolbarCollapse}"},{name:"Piekļūt iepriekšējai fokusa vietas komandai", +legend:"Nospiediet ${accessPreviousSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pirms kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām."},{name:"Piekļūt nākošā fokusa apgabala komandai",legend:"Nospiediet ${accessNextSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pēc kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām."}, +{name:"Pieejamības palīdzība",legend:"Nospiediet ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js new file mode 100755 index 0000000000..22755d7023 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","mk",{title:"Инструкции за пристапност",contents:"Содржина на делот за помош. За да го затворите овој дијалот притиснете ESC.",legend:[{name:"Општо",items:[{name:"Мени за едиторот",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Дијалот за едиторот", +legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."}, +{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]}, +{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", +upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", +f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js new file mode 100755 index 0000000000..08b64542bc --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","mn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Ерөнхий",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js new file mode 100755 index 0000000000..a5c16d7521 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","nb",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT+TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor", +legend:"Mens du er i en dialog, trykk TAB for å navigere til neste dialogelement, trykk SHIFT+TAB for å flytte til forrige dialogelement, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. Når en dialog har flere faner, kan fanelisten nås med enten ALT+F10 eller med TAB. Når fanelisten er fokusert, går man til neste og forrige fane med henholdsvis HØYRE og VENSTRE PILTAST."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."}, +{name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]}, +{name:"Hurtigtaster",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Lenke",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:"Gå til forrige fokusområde",legend:"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."}, +{name:"Gå til neste fokusområde",legend:"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tabulator",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up", +pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Venstre piltast",upArrow:"Opp-piltast",rightArrow:"Høyre piltast",downArrow:"Ned-piltast",insert:"Insert","delete":"Delete",leftWindowKey:"Venstre Windows-tast",rightWindowKey:"Høyre Windows-tast",selectKey:"Velg nøkkel",numpad0:"Numerisk tastatur 0",numpad1:"Numerisk tastatur 1",numpad2:"Numerisk tastatur 2",numpad3:"Numerisk tastatur 3",numpad4:"Numerisk tastatur 4",numpad5:"Numerisk tastatur 5",numpad6:"Numerisk tastatur 6",numpad7:"Numerisk tastatur 7", +numpad8:"Numerisk tastatur 8",numpad9:"Numerisk tastatur 9",multiply:"Multipliser",add:"Legg til",subtract:"Trekk fra",decimalPoint:"Desimaltegn",divide:"Divider",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Likhetstegn",comma:"Komma",dash:"Bindestrek",period:"Punktum",forwardSlash:"Forover skråstrek",graveAccent:"Grav aksent",openBracket:"Åpne parentes",backSlash:"Bakover skråstrek", +closeBracket:"Lukk parentes",singleQuote:"Enkelt sitattegn"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js new file mode 100755 index 0000000000..13f3e32c01 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","nl",{title:"Toegankelijkheidsinstructies",contents:"Help-inhoud. Druk op ESC om dit dialoog te sluiten.",legend:[{name:"Algemeen",items:[{name:"Werkbalk tekstverwerker",legend:"Druk op ${toolbarFocus} om naar de werkbalk te navigeren. Om te schakelen naar de volgende en vorige werkbalkgroep, gebruik TAB en SHIFT+TAB. Om te schakelen naar de volgende en vorige werkbalkknop, gebruik de PIJL RECHTS en PIJL LINKS. Druk op SPATIE of ENTER om een werkbalkknop te activeren."}, +{name:"Dialoog tekstverwerker",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Contextmenu tekstverwerker",legend:"Druk op ${contextMenu} of APPLICATION KEY om het contextmenu te openen. Schakel naar de volgende menuoptie met TAB of PIJL OMLAAG. Schakel naar de vorige menuoptie met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om een menuoptie te selecteren. Op een submenu van de huidige optie met SPATIE, ENTER of PIJL RECHTS. Ga terug naar de bovenliggende menuoptie met ESC of PIJL LINKS. Sluit het contextmenu met ESC."}, +{name:"Keuzelijst tekstverwerker",legend:"In een keuzelijst, schakel naar het volgende item met TAB of PIJL OMLAAG. Schakel naar het vorige item met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om het item te selecteren. Druk op ESC om de keuzelijst te sluiten."},{name:"Elementenpad werkbalk tekstverwerker",legend:"Druk op ${elementsPathFocus} om naar het elementenpad te navigeren. Om te schakelen naar het volgende element, gebruik TAB of PIJL RECHTS. Om te schakelen naar het vorige element, gebruik SHIFT+TAB or PIJL LINKS. Druk op SPATIE of ENTER om een element te selecteren in de tekstverwerker."}]}, +{name:"Opdrachten",items:[{name:"Ongedaan maken opdracht",legend:"Druk op ${undo}"},{name:"Opnieuw uitvoeren opdracht",legend:"Druk op ${redo}"},{name:"Vetgedrukt opdracht",legend:"Druk op ${bold}"},{name:"Cursief opdracht",legend:"Druk op ${italic}"},{name:"Onderstrepen opdracht",legend:"Druk op ${underline}"},{name:"Link opdracht",legend:"Druk op ${link}"},{name:"Werkbalk inklappen opdracht",legend:"Druk op ${toolbarCollapse}"},{name:"Ga naar vorige focus spatie commando",legend:"Druk ${accessPreviousSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie voor de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken."}, +{name:"Ga naar volgende focus spatie commando",legend:"Druk ${accessNextSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie na de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken."},{name:"Toegankelijkheidshulp",legend:"Druk op ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", +end:"End",home:"Home",leftArrow:"Pijl naar links",upArrow:"Pijl omhoog",rightArrow:"Pijl naar rechts",downArrow:"Pijl naar beneden",insert:"Invoegen","delete":"Verwijderen",leftWindowKey:"Linker Windows-toets",rightWindowKey:"Rechter Windows-toets",selectKey:"Selecteer toets",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Vermenigvuldigen",add:"Toevoegen", +subtract:"Aftrekken",decimalPoint:"Decimaalteken",divide:"Delen",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Puntkomma",equalSign:"Is gelijk-teken",comma:"Komma",dash:"Koppelteken",period:"Punt",forwardSlash:"Slash",graveAccent:"Accent grave",openBracket:"Vierkant haakje openen",backSlash:"Backslash",closeBracket:"Vierkant haakje sluiten",singleQuote:"Apostrof"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/no.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/no.js new file mode 100755 index 0000000000..35a3645358 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/no.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","no",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT+TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor", +legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."}, +{name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]}, +{name:"Kommandoer",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Link",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:"Gå til forrige fokusområde",legend:"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."}, +{name:"Gå til neste fokusområde",legend:"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", +end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", +divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js new file mode 100755 index 0000000000..1c7582d971 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","pl",{title:"Instrukcje dotyczące dostępności",contents:"Zawartość pomocy. Wciśnij ESC, aby zamknąć to okno.",legend:[{name:"Informacje ogólne",items:[{name:"Pasek narzędzi edytora",legend:"Naciśnij ${toolbarFocus}, by przejść do paska narzędzi. Przejdź do następnej i poprzedniej grupy narzędzi używając TAB oraz SHIFT+TAB. Przejdź do następnego i poprzedniego przycisku paska narzędzi za pomocą STRZAŁKI W PRAWO lub STRZAŁKI W LEWO. Naciśnij SPACJĘ lub ENTER by aktywować przycisk paska narzędzi."}, +{name:"Okno dialogowe edytora",legend:"Wewnątrz okna dialogowego naciśnij TAB, by przejść do kolejnego elementu tego okna lub SHIFT+TAB, by przejść do poprzedniego elementu okna. Naciśnij ENTER w celu zatwierdzenia opcji okna dialogowego lub ESC w celu anulowania zmian. Jeśli okno dialogowe ma kilka zakładek, do listy zakładek można przejść za pomocą ALT+F10 lub TAB. Gdy lista zakładek jest aktywna, możesz przejść do kolejnej i poprzedniej zakładki za pomocą STRZAŁKI W PRAWO i STRZAŁKI W LEWO."}, +{name:"Menu kontekstowe edytora",legend:"Wciśnij ${contextMenu} lub PRZYCISK APLIKACJI aby otworzyć menu kontekstowe. Przejdź do następnej pozycji menu wciskając TAB lub STRZAŁKĘ W DÓŁ. Przejdź do poprzedniej pozycji menu wciskając SHIFT + TAB lub STRZAŁKĘ W GÓRĘ. Wciśnij SPACJĘ lub ENTER aby wygrać pozycję menu. Otwórz pod-menu obecnej pozycji wciskając SPACJĘ lub ENTER lub STRZAŁKĘ W PRAWO. Wróć do pozycji nadrzędnego menu wciskając ESC lub STRZAŁKĘ W LEWO. Zamknij menu wciskając ESC."},{name:"Lista w edytorze", +legend:"Wewnątrz listy przejdź do kolejnego elementu listy za pomocą przycisku TAB lub STRZAŁKI W DÓŁ. Przejdź do poprzedniego elementu listy za pomocą SHIFT+TAB lub STRZAŁKI W GÓRĘ. Naciśnij SPACJĘ lub ENTER w celu wybrania opcji z listy. Naciśnij ESC, by zamknąć listę."},{name:"Pasek ścieżki elementów edytora",legend:"Naciśnij ${elementsPathFocus} w celu przejścia do paska ścieżki elementów edytora. W celu przejścia do kolejnego elementu naciśnij klawisz TAB lub STRZAŁKI W PRAWO. W celu przejścia do poprzedniego elementu naciśnij klawisze SHIFT+TAB lub STRZAŁKI W LEWO. By wybrać element w edytorze, użyj klawisza SPACJI lub ENTER."}]}, +{name:"Polecenia",items:[{name:"Polecenie Cofnij",legend:"Naciśnij ${undo}"},{name:"Polecenie Ponów",legend:"Naciśnij ${redo}"},{name:"Polecenie Pogrubienie",legend:"Naciśnij ${bold}"},{name:"Polecenie Kursywa",legend:"Naciśnij ${italic}"},{name:"Polecenie Podkreślenie",legend:"Naciśnij ${underline}"},{name:"Polecenie Wstaw/ edytuj odnośnik",legend:"Naciśnij ${link}"},{name:"Polecenie schowaj pasek narzędzi",legend:"Naciśnij ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Pomoc dotycząca dostępności",legend:"Naciśnij ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Strzałka w lewo", +upArrow:"Strzałka w górę",rightArrow:"Strzałka w prawo",downArrow:"Strzałka w dół",insert:"Insert","delete":"Delete",leftWindowKey:"Lewy klawisz Windows",rightWindowKey:"Prawy klawisz Windows",selectKey:"Klawisz wyboru",numpad0:"Klawisz 0 na klawiaturze numerycznej",numpad1:"Klawisz 1 na klawiaturze numerycznej",numpad2:"Klawisz 2 na klawiaturze numerycznej",numpad3:"Klawisz 3 na klawiaturze numerycznej",numpad4:"Klawisz 4 na klawiaturze numerycznej",numpad5:"Klawisz 5 na klawiaturze numerycznej", +numpad6:"Klawisz 6 na klawiaturze numerycznej",numpad7:"Klawisz 7 na klawiaturze numerycznej",numpad8:"Klawisz 8 na klawiaturze numerycznej",numpad9:"Klawisz 9 na klawiaturze numerycznej",multiply:"Przemnóż",add:"Plus",subtract:"Minus",decimalPoint:"Separator dziesiętny",divide:"Podziel",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Średnik",equalSign:"Znak równości",comma:"Przecinek",dash:"Pauza", +period:"Kropka",forwardSlash:"Ukośnik prawy",graveAccent:"Akcent słaby",openBracket:"Nawias kwadratowy otwierający",backSlash:"Ukośnik lewy",closeBracket:"Nawias kwadratowy zamykający",singleQuote:"Apostrof"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js new file mode 100755 index 0000000000..ac36c6caf7 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","pt-br",{title:"Instruções de Acessibilidade",contents:"Conteúdo da Ajuda. Para fechar este diálogo pressione ESC.",legend:[{name:"Geral",items:[{name:"Barra de Ferramentas do Editor",legend:"Pressione ${toolbarFocus} para navegar para a barra de ferramentas. Mova para o anterior ou próximo grupo de ferramentas com TAB e SHIFT+TAB. Mova para o anterior ou próximo botão com SETA PARA DIREITA or SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."}, +{name:"Diálogo do Editor",legend:"Dentro de um diálogo, pressione TAB para navegar para o próximo elemento. Pressione SHIFT+TAB para mover para o elemento anterior. Pressione ENTER ara enviar o diálogo. pressione ESC para cancelar o diálogo. Quando um diálogo tem múltiplas abas, a lista de abas pode ser acessada com ALT+F10 ou TAB, como parte da ordem de tabulação do diálogo. Com a lista de abas em foco, mova para a próxima aba e para a aba anterior com a SETA DIREITA ou SETA ESQUERDA, respectivamente."}, +{name:"Menu de Contexto do Editor",legend:"Pressione ${contextMenu} ou TECLA DE MENU para abrir o menu de contexto, então mova para a próxima opção com TAB ou SETA PARA BAIXO. Mova para a anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO ou ENTER ou SETA PARA DIREITA. Volte para o menu pai com ESC ou SETA PARA ESQUERDA. Feche o menu de contexto com ESC."},{name:"Caixa de Lista do Editor",legend:"Dentro de uma caixa de lista, mova para o próximo item com TAB ou SETA PARA BAIXO. Mova para o item anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar uma opção na lista. Pressione ESC para fechar a caixa de lista."}, +{name:"Barra de Caminho do Elementos do Editor",legend:"Pressione ${elementsPathFocus} para a barra de caminho dos elementos. Mova para o próximo botão de elemento com TAB ou SETA PARA DIREITA. Mova para o botão anterior com SHIFT+TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor."}]},{name:"Comandos",items:[{name:" Comando Desfazer",legend:"Pressione ${undo}"},{name:" Comando Refazer",legend:"Pressione ${redo}"},{name:" Comando Negrito",legend:"Pressione ${bold}"}, +{name:" Comando Itálico",legend:"Pressione ${italic}"},{name:" Comando Sublinhado",legend:"Pressione ${underline}"},{name:" Comando Link",legend:"Pressione ${link}"},{name:" Comando Fechar Barra de Ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Acessar o comando anterior de spaço de foco",legend:"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo antes do cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes."}, +{name:"Acessar próximo fomando de spaço de foco",legend:"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo após o cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes."},{name:" Ajuda de Acessibilidade",legend:"Pressione ${a11yHelp}"}]}],backspace:"Tecla Backspace",tab:"Tecla Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up", +pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Seta à Esquerda",upArrow:"Seta à Cima",rightArrow:"Seta à Direita",downArrow:"Seta à Baixo",insert:"Insert","delete":"Delete",leftWindowKey:"Tecla do Windows Esquerda",rightWindowKey:"Tecla do Windows Direita",selectKey:"Tecla Selecionar",numpad0:"0 do Teclado Numérico",numpad1:"1 do Teclado Numérico",numpad2:"2 do Teclado Numérico",numpad3:"3 do Teclado Numérico",numpad4:"4 do Teclado Numérico",numpad5:"5 do Teclado Numérico",numpad6:"6 do Teclado Numérico", +numpad7:"7 do Teclado Numérico",numpad8:"8 do Teclado Numérico",numpad9:"9 do Teclado Numérico",multiply:"Multiplicar",add:"Mais",subtract:"Subtrair",decimalPoint:"Ponto",divide:"Dividir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Ponto-e-vírgula",equalSign:"Igual",comma:"Vírgula",dash:"Hífen",period:"Ponto",forwardSlash:"Barra",graveAccent:"Acento Grave",openBracket:"Abrir Conchetes", +backSlash:"Contra-barra",closeBracket:"Fechar Colchetes",singleQuote:"Aspas Simples"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js new file mode 100755 index 0000000000..8220448afb --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","pt",{title:"Instruções de acessibilidade",contents:"Conteúdo de ajuda. Use a tecla ESC para fechar esta janela.",legend:[{name:"Geral",items:[{name:"Barra de ferramentas do editor",legend:"Clique em ${toolbarFocus} para navegar para a barra de ferramentas. Vá para o grupo da barra de ferramentas anterior e seguinte com TAB e SHIFT+TAB. Vá para o botão da barra de ferramentas anterior com a SETA DIREITA ou ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."}, +{name:"Janela do Editor",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Menu de Contexto do Editor",legend:"Clique em ${contextMenu} ou TECLA APLICAÇÃO para abrir o menu de contexto. Depois vá para a opção do menu seguinte com TAB ou SETA PARA BAIXO. Vá para a opção anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO, ENTER ou SETA DIREITA. GVá para o item do menu parente com ESC ou SETA ESQUERDA. Feche o menu de contexto com ESC."}, +{name:"Editor de caixa em lista",legend:"Dentro da caixa da lista, vá para o itemda lista seguinte com TAB ou SETA PARA BAIXO. Move Vá parao item da lista anterior com SHIFT+TAB ou SETA PARA BAIXO. Pressione ESPAÇO ou ENTER para selecionar a opção da lista. Pressione ESC para fechar a caisa da lista."},{name:"Caminho Barra Elemento Editor",legend:"Clique em ${elementsPathFocus} para navegar para a barra do caminho dos elementos. Vá para o botão do elemento seguinte com TAB ou SETA DIREITA. Vá para o botão anterior com SHIFT+TAB ou SETA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor."}]}, +{name:"Comandos",items:[{name:"Comando de Anular",legend:"Carregar ${undo}"},{name:"Comando de Refazer",legend:"Pressione ${redo}"},{name:"Comando de Negrito",legend:"Pressione ${bold}"},{name:"Comando de Itálico",legend:"Pressione ${italic}"},{name:"Comando de Sublinhado",legend:"Pressione ${underline}"},{name:"Comando de Hiperligação",legend:"Pressione ${link}"},{name:"Comando de Ocultar Barra de Ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Acesso comando do espaço focus anterior", +legend:"Clique em ${accessPreviousSpace} para aceder ao espaço do focos inalcançável mais perto antes do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."},{name:"Acesso comando do espaço focus seguinte",legend:"Pressione ${accessNextSpace} para aceder ao espaço do focos inalcançável mais perto depois do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."}, +{name:"Ajuda a acessibilidade",legend:"Pressione ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Maiúsculas",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",end:"Fim",home:"Entrada",leftArrow:"Seta esquerda",upArrow:"Seta para cima",rightArrow:"Seta direita",downArrow:"Seta para baixo",insert:"Inserir","delete":"Eliminar",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0", +numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiplicar",add:"Adicionar",subtract:"Subtrair",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Vírgula",dash:"Dash",period:"Period", +forwardSlash:"Forward Slash",graveAccent:"Acento grave",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js new file mode 100755 index 0000000000..79958fab4a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","ro",{title:"Instrucțiuni de accesibilitate",contents:"Cuprins. Pentru a închide acest dialog, apăsați tasta ESC.",legend:[{name:"General",items:[{name:"Editează bara instrumente.",legend:"Apasă ${toolbarFocus} pentru a naviga prin bara de instrumente. Pentru a te mișca prin grupurile de instrumente folosește tastele TAB și SHIFT+TAB. Pentru a te mișca intre diverse instrumente folosește tastele SĂGEATĂ DREAPTA sau SĂGEATĂ STÂNGA. Apasă butonul SPAȚIU sau ENTER pentru activarea instrumentului."}, +{name:"Dialog editor",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor meniu contextual",legend:"Apasă ${contextMenu} sau TASTA MENIU pentru a deschide meniul contextual. Treci la următoarea opțiune din meniu cu TAB sau SĂGEATĂ JOS. Treci la opțiunea anterioară cu SHIFT+TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din meniu. Deschide sub-meniul opțiunii curente cu SPAȚIU sau ENTER sau SĂGEATĂ DREAPTA. Revino la elementul din meniul părinte cu ESC sau SĂGEATĂ STÂNGA. Închide meniul de context cu ESC."}, +{name:"Editor Casetă Listă",legend:"În interiorul unei liste, treci la următorull element cu TAB sau SĂGEATĂ JOS. Treci la elementul anterior din listă cu SHIFT+TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din listă. Apasă ESC pentru a închide lista."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]}, +{name:"Comenzi",items:[{name:" Undo command",legend:"Apasă ${undo}"},{name:"Comanda precedentă",legend:"Apasă ${redo}"},{name:"Comanda Îngroșat",legend:"Apasă ${bold}"},{name:"Comanda Inclinat",legend:"Apasă ${italic}"},{name:"Comanda Subliniere",legend:"Apasă ${underline}"},{name:"Comanda Legatură",legend:"Apasă ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", +upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", +f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js new file mode 100755 index 0000000000..cea3363815 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","ru",{title:"Горячие клавиши",contents:"Помощь. Для закрытия этого окна нажмите ESC.",legend:[{name:"Основное",items:[{name:"Панель инструментов",legend:"Нажмите ${toolbarFocus} для перехода к панели инструментов. Для перемещения между группами панели инструментов используйте TAB и SHIFT+TAB. Для перемещения между кнопками панели иструментов используйте кнопки ВПРАВО или ВЛЕВО. Нажмите ПРОБЕЛ или ENTER для запуска кнопки панели инструментов."},{name:"Диалоги",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Контекстное меню",legend:'Нажмите ${contextMenu} или клавишу APPLICATION, чтобы открыть контекстное меню. Затем перейдите к следующему пункту меню с помощью TAB или стрелкой "ВНИЗ". Переход к предыдущей опции - SHIFT+TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию меню. Открыть подменю текущей опции - SPACE или ENTER или стрелкой "ВПРАВО". Возврат к родительскому пункту меню - ESC или стрелкой "ВЛЕВО". Закрытие контекстного меню - ESC.'},{name:"Редактор списка", +legend:'Внутри окна списка, переход к следующему пункту списка - TAB или стрелкой "ВНИЗ". Переход к предыдущему пункту списка - SHIFT+TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию списка. Нажмите ESC, чтобы закрыть окно списка.'},{name:"Путь к элементу",legend:'Нажмите ${elementsPathFocus}, чтобы перейти к панели пути элементов. Переход к следующей кнопке элемента - TAB или стрелкой "ВПРАВО". Переход к предыдущей кнопку - SHIFT+TAB или стрелкой "ВЛЕВО". Нажмите SPACE, или ENTER, чтобы выбрать элемент в редакторе.'}]}, +{name:"Команды",items:[{name:"Отменить",legend:"Нажмите ${undo}"},{name:"Повторить",legend:"Нажмите ${redo}"},{name:"Полужирный",legend:"Нажмите ${bold}"},{name:"Курсив",legend:"Нажмите ${italic}"},{name:"Подчеркнутый",legend:"Нажмите ${underline}"},{name:"Гиперссылка",legend:"Нажмите ${link}"},{name:"Свернуть панель инструментов",legend:"Нажмите ${toolbarCollapse}"},{name:"Команды доступа к предыдущему фокусному пространству",legend:'Нажмите ${accessPreviousSpace}, чтобы обратиться к ближайшему недостижимому фокусному пространству перед символом "^", например: два смежных HR элемента. Повторите комбинацию клавиш, чтобы достичь отдаленных фокусных пространств.'}, +{name:"Команды доступа к следующему фокусному пространству",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Справка по горячим клавишам",legend:"Нажмите ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",end:"End", +home:"Home",leftArrow:"Стрелка влево",upArrow:"Стрелка вверх",rightArrow:"Стрелка вправо",downArrow:"Стрелка вниз",insert:"Insert","delete":"Delete",leftWindowKey:"Левая клавиша Windows",rightWindowKey:"Правая клавиша Windows",selectKey:"Выбрать",numpad0:"Цифра 0",numpad1:"Цифра 1",numpad2:"Цифра 2",numpad3:"Цифра 3",numpad4:"Цифра 4",numpad5:"Цифра 5",numpad6:"Цифра 6",numpad7:"Цифра 7",numpad8:"Цифра 8",numpad9:"Цифра 9",multiply:"Умножить",add:"Плюс",subtract:"Вычесть",decimalPoint:"Десятичная точка", +divide:"Делить",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Точка с запятой",equalSign:"Равно",comma:"Запятая",dash:"Тире",period:"Точка",forwardSlash:"Наклонная черта",graveAccent:"Апостроф",openBracket:"Открыть скобку",backSlash:"Обратная наклонная черта",closeBracket:"Закрыть скобку",singleQuote:"Одинарная кавычка"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/si.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/si.js new file mode 100755 index 0000000000..6e86b4d295 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/si.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","si",{title:"ළඟා වියහැකි ",contents:"උදව් සඳහා අන්තර්ගතය.නික්මයෙමට ESC බොත්තම ඔබන්න",legend:[{name:"පොදු කරුණු",items:[{name:"සංස්කරණ මෙවලම් ",legend:"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT+TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න."},{name:"සංස්කරණ ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"සංස්කරණ අඩංගුවට ",legend:"ඔබන්න ${අන්තර්ගත මෙනුව} හෝ APPLICATION KEY අන්තර්ගත-මෙනුව විවුරතකිරීමට. ඊළඟ මෙනුව-ව්කල්පයන්ට යෑමට TAB හෝ DOWN ARROW බොත්තම ද, පෙර විකල්පයන්ටයෑමට SHIFT+TAB හෝ UP ARROW බොත්තම ද, මෙනුව-ව්කල්පයන් තේරීමට SPACE හෝ ENTER බොත්තම ද, දැනට විවුර්තව ඇති උප-මෙනුවක වීකල්ප තේරීමට SPACE හෝ ENTER හෝ RIGHT ARROW ද, නැවත පෙර ප්‍රධාන මෙනුවට යෑමට ESC හෝ LEFT ARROW බොත්තම ද. අන්තර්ගත-මෙනුව වැසීමට ESC බොත්තම ද ඔබන්න."},{name:"සංස්කරණ තේරුම් ",legend:"තේරුම් කොටුව තුළ , ඊළඟ අයිතමයට යෑමට TAB හෝ DOWN ARROW , පෙර අයිතමයට යෑමට SHIFT+TAB හෝ UP ARROW . අයිතම විකල්පයන් තේරීමට SPACE හෝ ENTER ,තේරුම් කොටුව වැසීමට ESC බොත්තම් ද ඔබන්න."}, +{name:"සංස්කරණ අංග සහිත ",legend:"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT+TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න."}]},{name:"විධාන",items:[{name:"විධානය වෙනස් ",legend:"ඔබන්න ${වෙනස් කිරීම}"},{name:"විධාන නැවත් පෙර පරිදිම වෙනස්කර ගැනීම.",legend:"ඔබන්න ${නැවත් පෙර පරිදිම වෙනස්කර ගැනීම}"},{name:"තද අකුරින් විධාන",legend:"ඔබන්න ${තද }"}, +{name:"බැධී අකුරු විධාන",legend:"ඔබන්න ${බැධී අකුරු }"},{name:"යටින් ඉරි ඇද ඇති විධාන.",legend:"ඔබන්න ${යටින් ඉරි ඇද ඇති}"},{name:"සම්බන්ධිත විධාන",legend:"ඔබන්න ${සම්බන්ධ }"},{name:"මෙවලම් තීරු හැකුලුම් විධාන",legend:"ඔබන්න ${මෙවලම් තීරු හැකුලුම් }"},{name:"යොමුවීමට පෙර වැදගත් විධාන",legend:"ඔබන්න ${යොමුවීමට ඊළඟ }"},{name:"යොමුවීමට ඊළග වැදගත් විධාන",legend:"ඔබන්න ${යොමුවීමට ඊළඟ }"},{name:"ප්‍රවේශ ",legend:"ඔබන්න ${a11y }"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl", +alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8", +numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js new file mode 100755 index 0000000000..260d21a9c5 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","sk",{title:"Inštrukcie prístupnosti",contents:"Pomocný obsah. Pre zatvorenie tohto okna, stlačte ESC.",legend:[{name:"Všeobecne",items:[{name:"Lišta nástrojov editora",legend:"Stlačte ${toolbarFocus} pre navigáciu na lištu nástrojov. Medzi ďalšou a predchádzajúcou lištou nástrojov sa pohybujete s TAB a SHIFT+TAB. Medzi ďalším a predchádzajúcim tlačidlom na lište nástrojov sa pohybujete s pravou šípkou a ľavou šípkou. Stlačte medzerník alebo ENTER pre aktiváciu tlačidla lišty nástrojov."}, +{name:"Editorový dialóg",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editorové kontextové menu",legend:"Stlačte ${contextMenu} alebo APPLICATION KEY pre otvorenie kontextového menu. Potom sa presúvajte na ďalšie možnosti menu s TAB alebo dolnou šípkou. Presunte sa k predchádzajúcej možnosti s SHIFT+TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti menu. Otvorte pod-menu danej možnosti s medzerníkom, alebo ENTER, alebo pravou šípkou. Vráťte sa späť do položky rodičovského menu s ESC alebo ľavou šípkou. Zatvorte kontextové menu s ESC."}, +{name:"Editorov box zoznamu",legend:"V boxe zoznamu, presuňte sa na ďalšiu položku v zozname s TAB alebo dolnou šípkou. Presuňte sa k predchádzajúcej položke v zozname so SHIFT+TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti zoznamu. Stlačte ESC pre zatvorenie boxu zoznamu."},{name:"Editorove pásmo cesty prvku",legend:"Stlačte ${elementsPathFocus} pre navigovanie na pásmo cesty elementu. Presuňte sa na tlačidlo ďalšieho prvku s TAB alebo pravou šípkou. Presuňte sa k predchádzajúcemu tlačidlu s SHIFT+TAB alebo ľavou šípkou. Stlačte medzerník alebo ENTER pre výber prvku v editore."}]}, +{name:"Príkazy",items:[{name:"Vrátiť príkazy",legend:"Stlačte ${undo}"},{name:"Nanovo vrátiť príkaz",legend:"Stlačte ${redo}"},{name:"Príkaz na stučnenie",legend:"Stlačte ${bold}"},{name:"Príkaz na kurzívu",legend:"Stlačte ${italic}"},{name:"Príkaz na podčiarknutie",legend:"Stlačte ${underline}"},{name:"Príkaz na odkaz",legend:"Stlačte ${link}"},{name:"Príkaz na zbalenie lišty nástrojov",legend:"Stlačte ${toolbarCollapse}"},{name:"Prejsť na predchádzajúcu zamerateľnú medzeru príkazu",legend:"Stlačte ${accessPreviousSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery pred vsuvkuo. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier."}, +{name:"Prejsť na ďalší ",legend:"Stlačte ${accessNextSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery po vsuvke. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier."},{name:"Pomoc prístupnosti",legend:"Stlačte ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Stránka hore",pageDown:"Stránka dole", +end:"End",home:"Home",leftArrow:"Šípka naľavo",upArrow:"Šípka hore",rightArrow:"Šípka napravo",downArrow:"Šípka dole",insert:"Insert","delete":"Delete",leftWindowKey:"Ľavé Windows tlačidlo",rightWindowKey:"Pravé Windows tlačidlo",selectKey:"Tlačidlo Select",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Násobenie",add:"Sčítanie",subtract:"Odčítanie", +decimalPoint:"Desatinná čiarka",divide:"Delenie",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Bodkočiarka",equalSign:"Rovná sa",comma:"Čiarka",dash:"Pomĺčka",period:"Bodka",forwardSlash:"Lomítko",graveAccent:"Zdôrazňovanie prízvuku",openBracket:"Hranatá zátvorka otváracia",backSlash:"Backslash",closeBracket:"Hranatá zátvorka zatváracia",singleQuote:"Jednoduché úvodzovky"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js new file mode 100755 index 0000000000..f5be728597 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","sl",{title:"Navodila Dostopnosti",contents:"Vsebina Pomoči. Če želite zapreti to pogovorno okno pritisnite ESC.",legend:[{name:"Splošno",items:[{name:"Urejevalna Orodna Vrstica",legend:"Pritisnite ${toolbarFocus} za pomik v orodno vrstico. Z TAB in SHIFT+TAB se pomikate na naslednjo in prejšnjo skupino orodne vrstice. Z DESNO PUŠČICO ali LEVO PUŠČICO se pomikate na naslednji in prejšnji gumb orodne vrstice. Pritisnite SPACE ali ENTER, da aktivirate gumb orodne vrstice."}, +{name:"Urejevalno Pogovorno Okno",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Urejevalni Kontekstni Meni",legend:"Pritisnite ${contextMenu} ali APPLICATION KEY, da odprete kontekstni meni. Nato se premaknite na naslednjo možnost menija s tipko TAB ali PUŠČICA DOL. Premakniti se na prejšnjo možnost z SHIFT + TAB ali PUŠČICA GOR. Pritisnite SPACE ali ENTER za izbiro možnosti menija. Odprite podmeni trenutne možnosti menija s tipko SPACE ali ENTER ali DESNA PUŠČICA. Vrnite se na matični element menija s tipko ESC ali LEVA PUŠČICA. Zaprite kontekstni meni z ESC."}, +{name:"Urejevalno Seznamsko Polje",legend:"Znotraj seznama, se premaknete na naslednji element seznama s tipko TAB ali PUŠČICO DOL. Z SHIFT+TAB ali PUŠČICO GOR se premaknete na prejšnji element seznama. Pritisnite tipko SPACE ali ENTER za izbiro elementa. Pritisnite tipko ESC, da zaprete seznam."},{name:"Urejevalna vrstica poti elementa",legend:"Pritisnite ${elementsPathFocus} za pomikanje po vrstici elementnih poti. S TAB ali DESNA PUŠČICA se premaknete na naslednji gumb elementa. Z SHIFT+TAB ali LEVO PUŠČICO se premaknete na prejšnji gumb elementa. Pritisnite SPACE ali ENTER za izbiro elementa v urejevalniku."}]}, +{name:"Ukazi",items:[{name:"Razveljavi ukaz",legend:"Pritisnite ${undo}"},{name:"Ponovi ukaz",legend:"Pritisnite ${redo}"},{name:"Krepki ukaz",legend:"Pritisnite ${bold}"},{name:"Ležeči ukaz",legend:"Pritisnite ${italic}"},{name:"Poudarni ukaz",legend:"Pritisnite ${underline}"},{name:"Ukaz povezave",legend:"Pritisnite ${link}"},{name:"Skrči Orodno Vrstico Ukaz",legend:"Pritisnite ${toolbarCollapse}"},{name:"Dostop do prejšnjega ukaza ostrenja",legend:"Pritisnite ${accessPreviousSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora pred strešico, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore."}, +{name:"Dostop do naslednjega ukaza ostrenja",legend:"Pritisnite ${accessNextSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora po strešici, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore."},{name:"Pomoč Dostopnosti",legend:"Pritisnite ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End", +home:"Home",leftArrow:"Levo puščica",upArrow:"Gor puščica",rightArrow:"Desno puščica",downArrow:"Dol puščica",insert:"Insert","delete":"Delete",leftWindowKey:"Leva Windows tipka",rightWindowKey:"Desna Windows tipka",selectKey:"Select tipka",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Zmnoži",add:"Dodaj",subtract:"Odštej",decimalPoint:"Decimalna vejica", +divide:"Deli",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Podpičje",equalSign:"enačaj",comma:"Vejica",dash:"Vezaj",period:"Pika",forwardSlash:"Desna poševnica",graveAccent:"Krativec",openBracket:"Oklepaj",backSlash:"Leva poševnica",closeBracket:"Oklepaj",singleQuote:"Opuščaj"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js new file mode 100755 index 0000000000..d53867442f --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","sq",{title:"Udhëzimet e Qasjes",contents:"Përmbajtja ndihmëse. Për ta mbyllur dialogun shtyp ESC.",legend:[{name:"Të përgjithshme",items:[{name:"Shiriti i Redaktuesit",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Dialogu i Redaktuesit",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Komandat",items:[{name:"Rikthe komandën",legend:"Shtyp ${undo}"},{name:"Ribëj komandën",legend:"Shtyp ${redo}"},{name:"Komanda e trashjes së tekstit",legend:"Shtyp ${bold}"},{name:"Komanda kursive",legend:"Shtyp ${italic}"}, +{name:"Komanda e nënvijëzimit",legend:"Shtyp ${underline}"},{name:"Komanda e Nyjes",legend:"Shtyp ${link}"},{name:" Toolbar Collapse command",legend:"Shtyp ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:"Ndihmë Qasjeje",legend:"Shtyp ${a11yHelp}"}]}],backspace:"Prapa",tab:"Fletë",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Shenja majtas",upArrow:"Shenja sipër",rightArrow:"Shenja djathtas",downArrow:"Shenja poshtë",insert:"Shto","delete":"Grise",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Shto",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Presje",dash:"vizë",period:"Pikë",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Hape kllapën",backSlash:"Backslash",closeBracket:"Mbylle kllapën",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js new file mode 100755 index 0000000000..f024004929 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","sr-latn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Opšte",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js new file mode 100755 index 0000000000..17268dd9d7 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","sr",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Опште",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js new file mode 100755 index 0000000000..ef4b63146a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","sv",{title:"Hjälpmedelsinstruktioner",contents:"Hjälpinnehåll. För att stänga denna dialogruta trycker du på ESC.",legend:[{name:"Allmänt",items:[{name:"Editor verktygsfält",legend:"Tryck på ${toolbarFocus} för att navigera till verktygsfältet. Flytta till nästa och föregående verktygsfältsgrupp med TAB och SHIFT+TAB. Flytta till nästa och föregående knapp i verktygsfältet med HÖGERPIL eller VÄNSTERPIL. Tryck SPACE eller ENTER för att aktivera knappen i verktygsfältet."}, +{name:"Dialogeditor",legend:"Inuti en dialogruta, tryck TAB för att navigera till nästa fält i dialogrutan, tryck SKIFT+TAB för att flytta till föregående fält, tryck ENTER för att skicka. Du avbryter och stänger dialogen med ESC. För dialogrutor som har flera flikar, tryck ALT+F10 eller TAB för att navigera till fliklistan. med fliklistan vald flytta till nästa och föregående flik med HÖGER- eller VÄNSTERPIL."},{name:"Editor för innehållsmeny",legend:"Tryck på $ {contextMenu} eller PROGRAMTANGENTEN för att öppna snabbmenyn. Flytta sedan till nästa menyalternativ med TAB eller NEDPIL. Flytta till föregående alternativ med SHIFT + TABB eller UPPIL. Tryck Space eller ENTER för att välja menyalternativ. Öppna undermeny av nuvarande alternativ med SPACE eller ENTER eller HÖGERPIL. Gå tillbaka till överordnade menyalternativ med ESC eller VÄNSTERPIL. Stäng snabbmenyn med ESC."}, +{name:"Editor för list-box",legend:"Inuti en list-box, gå till nästa listobjekt med TAB eller NEDPIL. Flytta till föregående listobjekt med SHIFT+TAB eller UPPIL. Tryck SPACE eller ENTER för att välja listan alternativet. Tryck ESC för att stänga list-boxen."},{name:"Editor för elementens sökväg",legend:"Tryck på ${elementsPathFocus} för att navigera till verktygsfältet för elementens sökvägar. Flytta till nästa elementknapp med TAB eller HÖGERPIL. Flytta till föregående knapp med SKIFT+TAB eller VÄNSTERPIL. Tryck SPACE eller ENTER för att välja element i redigeraren."}]}, +{name:"Kommandon",items:[{name:"Ångra kommando",legend:"Tryck på ${undo}"},{name:"Gör om kommando",legend:"Tryck på ${redo}"},{name:"Kommandot fet stil",legend:"Tryck på ${bold}"},{name:"Kommandot kursiv",legend:"Tryck på ${italic}"},{name:"Kommandot understruken",legend:"Tryck på ${underline}"},{name:"Kommandot länk",legend:"Tryck på ${link}"},{name:"Verktygsfält Dölj kommandot",legend:"Tryck på ${toolbarCollapse}"},{name:"Gå till föregående fokus plats",legend:"Tryck på ${accessPreviousSpace} för att gå till närmast onåbara utrymme före markören, exempel: två intilliggande HR element. Repetera tangentkombinationen för att gå till nästa."}, +{name:"Tillgå nästa fokuskommandots utrymme",legend:"Tryck ${accessNextSpace} på för att komma åt den närmaste onåbar fokus utrymme efter cirkumflex, till exempel: två intilliggande HR element. Upprepa tangentkombinationen för att nå avlägsna fokus utrymmen."},{name:"Hjälp om tillgänglighet",legend:"Tryck ${a11yHelp}"}]}],backspace:"Backsteg",tab:"Tab",enter:"Retur",shift:"Skift",ctrl:"Ctrl",alt:"Alt",pause:"Paus",capslock:"Caps lock",escape:"Escape",pageUp:"Sida Up",pageDown:"Sida Ned",end:"Slut", +home:"Hem",leftArrow:"Vänsterpil",upArrow:"Uppil",rightArrow:"Högerpil",downArrow:"Nedåtpil",insert:"Infoga","delete":"Radera",leftWindowKey:"Vänster Windowstangent",rightWindowKey:"Höger Windowstangent",selectKey:"Välj tangent",numpad0:"Nummer 0",numpad1:"Nummer 1",numpad2:"Nummer 2",numpad3:"Nummer 3",numpad4:"Nummer 4",numpad5:"Nummer 5",numpad6:"Nummer 6",numpad7:"Nummer 7",numpad8:"Nummer 8",numpad9:"Nummer 9",multiply:"Multiplicera",add:"Addera",subtract:"Minus",decimalPoint:"Decimalpunkt", +divide:"Dividera",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Lika med tecken",comma:"Komma",dash:"Minus",period:"Punkt",forwardSlash:"Snedstreck framåt",graveAccent:"Accent",openBracket:"Öppningsparentes",backSlash:"Snedstreck bakåt",closeBracket:"Slutparentes",singleQuote:"Enkelt Citattecken"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/th.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/th.js new file mode 100755 index 0000000000..5e84b8951e --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/th.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","th",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"ทั่วไป",items:[{name:"แถบเครื่องมือสำหรับเครื่องมือช่วยพิมพ์",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"คำสั่ง",items:[{name:"เลิกทำคำสั่ง",legend:"วาง ${undo}"},{name:"คำสั่งสำหรับทำซ้ำ",legend:"วาง ${redo}"},{name:"คำสั่งสำหรับตัวหนา",legend:"วาง ${bold}"},{name:"คำสั่งสำหรับตัวเอียง",legend:"วาง ${italic}"},{name:"คำสั่งสำหรับขีดเส้นใต้", +legend:"วาง ${underline}"},{name:"คำสั่งสำหรับลิงก์",legend:"วาง ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js new file mode 100755 index 0000000000..0b75bcb5ed --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","tr",{title:"Erişilebilirlik Talimatları",contents:"Yardım içeriği. Bu pencereyi kapatmak için ESC tuşuna basın.",legend:[{name:"Genel",items:[{name:"Düzenleyici Araç Çubuğu",legend:"Araç çubuğunda gezinmek için ${toolbarFocus} basın. TAB ve SHIFT+TAB ile önceki ve sonraki araç çubuğu grubuna taşıyın. SAĞ OK veya SOL OK ile önceki ve sonraki bir araç çubuğu düğmesini hareket ettirin. SPACE tuşuna basın veya araç çubuğu düğmesini etkinleştirmek için ENTER tuşna basın."}, +{name:"Diyalog Düzenleyici",legend:"Dialog penceresi içinde, sonraki iletişim alanına gitmek için SEKME tuşuna basın, önceki alana geçmek için SHIFT + TAB tuşuna basın, pencereyi göndermek için ENTER tuşuna basın, dialog penceresini iptal etmek için ESC tuşuna basın. Birden çok sekme sayfaları olan diyalogların, sekme listesine gitmek için ALT + F10 tuşlarına basın. Sonra TAB veya SAĞ OK sonraki sekmeye taşıyın. SHIFT + TAB veya SOL OK ile önceki sekmeye geçin. Sekme sayfayı seçmek için SPACE veya ENTER tuşuna basın."}, +{name:"İçerik Menü Editörü",legend:"İçerik menüsünü açmak için ${contextMenu} veya UYGULAMA TUŞU'na basın. Daha sonra SEKME veya AŞAĞI OK ile bir sonraki menü seçeneği taşıyın. SHIFT + TAB veya YUKARI OK ile önceki seçeneğe gider. Menü seçeneğini seçmek için SPACE veya ENTER tuşuna basın. Seçili seçeneğin alt menüsünü SPACE ya da ENTER veya SAĞ OK açın. Üst menü öğesini geçmek için ESC veya SOL OK ile geri dönün. ESC ile bağlam menüsünü kapatın."},{name:"Liste Kutusu Editörü",legend:"Liste kutusu içinde, bir sonraki liste öğesine SEKME VEYA AŞAĞI OK ile taşıyın. SHIFT+TAB veya YUKARI önceki liste öğesi taşıyın. Liste seçeneği seçmek için SPACE veya ENTER tuşuna basın. Liste kutusunu kapatmak için ESC tuşuna basın."}, +{name:"Element Yol Çubuğu Editörü",legend:"Elementlerin yol çubuğunda gezinmek için ${ElementsPathFocus} basın. SEKME veya SAĞ OK ile sonraki element düğmesine taşıyın. SHIFT+TAB veya SOL OK önceki düğmeye hareket ettirin. Editör içindeki elementi seçmek için ENTER veya SPACE tuşuna basın."}]},{name:"Komutlar",items:[{name:"Komutu geri al",legend:"$(undo)'ya basın"},{name:"Komutu geri al",legend:"${redo} basın"},{name:" Kalın komut",legend:"${bold} basın"},{name:" İtalik komutu",legend:"${italic} basın"}, +{name:" Alttan çizgi komutu",legend:"${underline} basın"},{name:" Bağlantı komutu",legend:"${link} basın"},{name:" Araç çubuğu Toplama komutu",legend:"${toolbarCollapse} basın"},{name:"Önceki komut alanına odaklan",legend:"Düzeltme imleçinden önce, en yakın uzaktaki alana erişmek için ${accessPreviousSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın."},{name:"Sonraki komut alanına odaklan",legend:"Düzeltme imleçinden sonra, en yakın uzaktaki alana erişmek için ${accessNextSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın."}, +{name:"Erişilebilirlik Yardımı",legend:"${a11yHelp}'e basın"}]}],backspace:"Silme",tab:"Sekme tuşu",enter:"Gir tuşu",shift:'"Shift" Kaydırma tuşu',ctrl:'"Ctrl" Kontrol tuşu',alt:'"Alt" Anahtar tuşu',pause:"Durdurma tuşu",capslock:"Büyük harf tuşu",escape:"Vazgeç tuşu",pageUp:"Sayfa Yukarı",pageDown:"Sayfa Aşağı",end:"Sona",home:"En başa",leftArrow:"Sol ok",upArrow:"Yukarı ok",rightArrow:"Sağ ok",downArrow:"Aşağı ok",insert:"Araya gir","delete":"Silme",leftWindowKey:"Sol windows tuşu",rightWindowKey:"Sağ windows tuşu", +selectKey:"Seçme tuşu",numpad0:"Nümerik 0",numpad1:"Nümerik 1",numpad2:"Nümerik 2",numpad3:"Nümerik 3",numpad4:"Nümerik 4",numpad5:"Nümerik 5",numpad6:"Nümerik 6",numpad7:"Nümerik 7",numpad8:"Nümerik 8",numpad9:"Nümerik 9",multiply:"Çarpma",add:"Toplama",subtract:"Çıkarma",decimalPoint:"Ondalık işareti",divide:"Bölme",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lk",scrollLock:"Scr Lk",semiColon:"Noktalı virgül",equalSign:"Eşittir", +comma:"Virgül",dash:"Eksi",period:"Nokta",forwardSlash:"İleri eğik çizgi",graveAccent:"Üst tırnak",openBracket:"Parantez aç",backSlash:"Ters eğik çizgi",closeBracket:"Parantez kapa",singleQuote:"Tek tırnak"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js new file mode 100755 index 0000000000..ab43830f27 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","tt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Гомуми",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Командалар",items:[{name:"Кайтару",legend:"${undo} басыгыз"},{name:"Кабатлау",legend:"${redo} басыгыз"},{name:"Калын",legend:"${bold} басыгыз"},{name:"Курсив",legend:"${italic} басыгыз"},{name:"Астына сызылган",legend:"${underline} басыгыз"}, +{name:"Сылталама",legend:"${link} басыгыз"},{name:" Toolbar Collapse command",legend:"${toolbarCollapse} басыгыз"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"${a11yHelp} басыгыз"}]}],backspace:"Кайтару",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Тыныш",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Сул якка ук",upArrow:"Өскә таба ук",rightArrow:"Уң якка ук",downArrow:"Аска таба ук",insert:"Өстәү","delete":"Бетерү",leftWindowKey:"Сул Windows төймəсе",rightWindowKey:"Уң Windows төймəсе",selectKey:"Select төймəсе",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Тапкырлау",add:"Кушу",subtract:"Алу",decimalPoint:"Унарлы нокта",divide:"Бүлү",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Нокталы өтер",equalSign:"Тигезлек билгесе",comma:"Өтер",dash:"Сызык",period:"Дәрәҗә",forwardSlash:"Кыек сызык", +graveAccent:"Гравис",openBracket:"Җәя ачу",backSlash:"Кире кыек сызык",closeBracket:"Җәя ябу",singleQuote:"Бер иңле куштырнаклар"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js new file mode 100755 index 0000000000..373e592703 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","ug",{title:"قوشۇمچە چۈشەندۈرۈش",contents:"ياردەم مەزمۇنى. بۇ سۆزلەشكۈنى ياپماقچى بولسىڭىز ESC نى بېسىڭ.",legend:[{name:"ئادەتتىكى",items:[{name:"قورال بالداق تەھرىر",legend:"${toolbarFocus} بېسىلسا قورال بالداققا يېتەكلەيدۇ، TAB ياكى SHIFT+TAB ئارقىلىق قورال بالداق گۇرۇپپىسى تاللىنىدۇ، ئوڭ سول يا ئوقتا توپچا تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تاللانغان توپچىنى قوللىنىدۇ."},{name:"تەھرىرلىگۈچ سۆزلەشكۈسى",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"تەھرىرلىگۈچ تىل مۇھىت تىزىملىكى",legend:"${contextMenu} ياكى ئەپ كۇنۇپكىسىدا تىل مۇھىت تىزىملىكىنى ئاچىدۇ. ئاندىن TAB ياكى ئاستى يا ئوق كۇنۇپكىسىدا كېيىنكى تىزىملىك تۈرىگە يۆتكەيدۇ؛ SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسىدا ئالدىنقى تىزىملىك تۈرىگە يۆتكەيدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىملىك تۈرىنى تاللايدۇ. بوشلۇق، ENTER ياكى ئوڭ يا ئوق كۇنۇپكىسىدا تارماق تىزىملىكنى ئاچىدۇ. قايتىش تىزىملىكىگە ESC ياكى سول يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ESC كۇنۇپكىسىدا تىل مۇھىت تىزىملىكى تاقىلىدۇ."},{name:"تەھرىرلىگۈچ تىزىمى", +legend:"تىزىم قۇتىسىدا، كېيىنكى تىزىم تۈرىگە يۆتكەشتە TAB ياكى ئاستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ئالدىنقى تىزىم تۈرىگە يۆتكەشتە SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىم تۈرىنى تاللايدۇ.ESC كۇنۇپكىسىدا تىزىم قۇتىسىنى يىغىدۇ."},{name:"تەھرىرلىگۈچ ئېلېمېنت يول بالداق",legend:"${elementsPathFocus} بېسىلسا ئېلېمېنت يول بالداققا يېتەكلەيدۇ، TAB ياكى ئوڭ يا ئوقتا كېيىنكى ئېلېمېنت تاللىنىدۇ، SHIFT+TAB ياكى سول يا ئوقتا ئالدىنقى ئېلېمېنت تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تەھرىرلىگۈچتىكى ئېلېمېنت تاللىنىدۇ."}]}, +{name:"بۇيرۇق",items:[{name:"بۇيرۇقتىن يېنىۋال",legend:"${undo} نى بېسىڭ"},{name:"قايتىلاش بۇيرۇقى",legend:"${redo} نى بېسىڭ"},{name:"توملىتىش بۇيرۇقى",legend:"${bold} نى بېسىڭ"},{name:"يانتۇ بۇيرۇقى",legend:"${italic} نى بېسىڭ"},{name:"ئاستى سىزىق بۇيرۇقى",legend:"${underline} نى بېسىڭ"},{name:"ئۇلانما بۇيرۇقى",legend:"${link} نى بېسىڭ"},{name:"قورال بالداق قاتلاش بۇيرۇقى",legend:"${toolbarCollapse} نى بېسىڭ"},{name:"ئالدىنقى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق",legend:"${accessPreviousSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ ئالدىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ."}, +{name:"كېيىنكى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق",legend:"${accessNextSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ كەينىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ."},{name:"توسالغۇسىز لايىھە چۈشەندۈرۈشى",legend:"${a11yHelp} نى بېسىڭ"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape", +pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract", +decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js new file mode 100755 index 0000000000..702955a59d --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","uk",{title:"Спеціальні Інструкції",contents:"Довідка. Натисніть ESC і вона зникне.",legend:[{name:"Основне",items:[{name:"Панель Редактора",legend:"Натисніть ${toolbarFocus} для переходу до панелі інструментів. Для переміщення між групами панелі інструментів використовуйте TAB і SHIFT+TAB. Для переміщення між кнопками панелі іструментів використовуйте кнопки СТРІЛКА ВПРАВО або ВЛІВО. Натисніть ПРОПУСК або ENTER для запуску кнопки панелі інструментів."},{name:"Діалог Редактора", +legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Контекстне Меню Редактора",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Потім перейдіть до наступного пункту меню за допомогою TAB або СТРІЛКИ ВНИЗ. Натисніть ПРОПУСК або ENTER для вибору параметру меню. Відкрийте підменю поточного параметру, натиснувши ПРОПУСК або ENTER або СТРІЛКУ ВПРАВО. Перейдіть до батьківського елемента меню, натиснувши ESC або СТРІЛКУ ВЛІВО. Закрийте контекстне меню, натиснувши ESC."}, +{name:"Скринька Списків Редактора",legend:"Всередині списку переходимо до наступного пункту списку клавішею TAB або СТРІЛКА ВНИЗ. Перейти до попереднього елемента списку можна SHIFT+TAB або СТРІЛКА ВГОРУ. Натисніть ПРОПУСК або ENTER, щоб вибрати параметр списку. Натисніть клавішу ESC, щоб закрити список."},{name:"Шлях до елемента редактора",legend:"Натисніть ${elementsPathFocus} для навігації між елементами панелі. Перейдіть до наступного елемента кнопкою TAB або СТРІЛКА ВПРАВО. Перейдіть до попереднього елемента кнопкою SHIFT+TAB або СТРІЛКА ВЛІВО. Натисніть ПРОПУСК або ENTER для вибору елемента в редакторі."}]}, +{name:"Команди",items:[{name:"Відмінити команду",legend:"Натисніть ${undo}"},{name:"Повторити",legend:"Натисніть ${redo}"},{name:"Жирний",legend:"Натисніть ${bold}"},{name:"Курсив",legend:"Натисніть ${italic}"},{name:"Підкреслений",legend:"Натисніть ${underline}"},{name:"Посилання",legend:"Натисніть ${link}"},{name:"Згорнути панель інструментів",legend:"Натисніть ${toolbarCollapse}"},{name:"Доступ до попереднього місця фокусування",legend:"Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування перед кареткою, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування."}, +{name:"Доступ до наступного місця фокусування",legend:"Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування після каретки, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування."},{name:"Допомога з доступності",legend:"Натисніть ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down", +end:"End",home:"Home",leftArrow:"Ліва стрілка",upArrow:"Стрілка вгору",rightArrow:"Права стрілка",downArrow:"Стрілка вниз",insert:"Вставити","delete":"Видалити",leftWindowKey:"Ліва клавіша Windows",rightWindowKey:"Права клавіша Windows",selectKey:"Виберіть клавішу",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Множення",add:"Додати",subtract:"Віднімання", +decimalPoint:"Десяткова кома",divide:"Ділення",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Крапка з комою",equalSign:"Знак рівності",comma:"Кома",dash:"Тире",period:"Період",forwardSlash:"Коса риска",graveAccent:"Гравіс",openBracket:"Відкрити дужку",backSlash:"Зворотна коса риска",closeBracket:"Закрити дужку",singleQuote:"Одинарні лапки"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js new file mode 100755 index 0000000000..4f6df0118f --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","vi",{title:"Hướng dẫn trợ năng",contents:"Nội dung Hỗ trợ. Nhấn ESC để đóng hộp thoại.",legend:[{name:"Chung",items:[{name:"Thanh công cụ soạn thảo",legend:"Nhấn ${toolbarFocus} để điều hướng đến thanh công cụ. Nhấn TAB và SHIFT+TAB để chuyển đến nhóm thanh công cụ khác. Nhấn MŨI TÊN PHẢI hoặc MŨI TÊN TRÁI để chuyển sang nút khác trên thanh công cụ. Nhấn PHÍM CÁCH hoặc ENTER để kích hoạt nút trên thanh công cụ."},{name:"Hộp thoại Biên t",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, +{name:"Trình đơn Ngữ cảnh cBộ soạn thảo",legend:"Nhấn ${contextMenu} hoặc PHÍM ỨNG DỤNG để mở thực đơn ngữ cảnh. Sau đó nhấn TAB hoặc MŨI TÊN XUỐNG để di chuyển đến tuỳ chọn tiếp theo của thực đơn. Nhấn SHIFT+TAB hoặc MŨI TÊN LÊN để quay lại tuỳ chọn trước. Nhấn DẤU CÁCH hoặc ENTER để chọn tuỳ chọn của thực đơn. Nhấn DẤU CÁCH hoặc ENTER hoặc MŨI TÊN SANG PHẢI để mở thực đơn con của tuỳ chọn hiện tại. Nhấn ESC hoặc MŨI TÊN SANG TRÁI để quay trở lại thực đơn gốc. Nhấn ESC để đóng thực đơn ngữ cảnh."}, +{name:"Hộp danh sách trình biên tập",legend:"Trong một danh sách chọn, di chuyển đối tượng tiếp theo với phím TAB hoặc phím mũi tên hướng xuống. Di chuyển đến đối tượng trước đó bằng cách nhấn tổ hợp phím SHIFT+TAB hoặc mũi tên hướng lên. Phím khoảng cách hoặc phím ENTER để chọn các tùy chọn trong danh sách. Nhấn phím ESC để đóng lại danh sách chọn."},{name:"Thanh đường dẫn các đối tượng",legend:"Nhấn ${elementsPathFocus} để điều hướng các đối tượng trong thanh đường dẫn. Di chuyển đến đối tượng tiếp theo bằng phím TAB hoặc phím mũi tên bên phải. Di chuyển đến đối tượng trước đó bằng tổ hợp phím SHIFT+TAB hoặc phím mũi tên bên trái. Nhấn phím khoảng cách hoặc ENTER để chọn đối tượng trong trình soạn thảo."}]}, +{name:"Lệnh",items:[{name:"Làm lại lện",legend:"Ấn ${undo}"},{name:"Làm lại lệnh",legend:"Ấn ${redo}"},{name:"Lệnh in đậm",legend:"Ấn ${bold}"},{name:"Lệnh in nghiêng",legend:"Ấn ${italic}"},{name:"Lệnh gạch dưới",legend:"Ấn ${underline}"},{name:"Lệnh liên kết",legend:"Nhấn ${link}"},{name:"Lệnh hiển thị thanh công cụ",legend:"Nhấn${toolbarCollapse}"},{name:"Truy cập đến lệnh tập trung vào khoảng cách trước đó",legend:"Ấn ${accessPreviousSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách."}, +{name:"Truy cập phần đối tượng lệnh khoảng trống",legend:"Ấn ${accessNextSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách."},{name:"Trợ giúp liên quan",legend:"Nhấn ${a11yHelp}"}]}],backspace:"Phím Backspace",tab:"Phím Tab",enter:"Phím Tab",shift:"Phím Shift",ctrl:"Phím Ctrl",alt:"Phím Alt",pause:"Phím Pause",capslock:"Phím Caps Lock", +escape:"Phím Escape",pageUp:"Phím Page Up",pageDown:"Phím Page Down",end:"Phím End",home:"Phím Home",leftArrow:"Phím Left Arrow",upArrow:"Phím Up Arrow",rightArrow:"Phím Right Arrow",downArrow:"Phím Down Arrow",insert:"Chèn","delete":"Xóa",leftWindowKey:"Phím Left Windows",rightWindowKey:"Phím Right Windows ",selectKey:"Chọn phím",numpad0:"Phím 0",numpad1:"Phím 1",numpad2:"Phím 2",numpad3:"Phím 3",numpad4:"Phím 4",numpad5:"Phím 5",numpad6:"Phím 6",numpad7:"Phím 7",numpad8:"Phím 8",numpad9:"Phím 9", +multiply:"Nhân",add:"Thêm",subtract:"Trừ",decimalPoint:"Điểm số thập phân",divide:"Chia",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Dấu chấm phẩy",equalSign:"Đăng nhập bằng",comma:"Dấu phẩy",dash:"Dấu gạch ngang",period:"Phím .",forwardSlash:"Phím /",graveAccent:"Phím `",openBracket:"Open Bracket",backSlash:"Dấu gạch chéo ngược",closeBracket:"Gần giá đỡ",singleQuote:"Trích dẫn"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js new file mode 100755 index 0000000000..d961c1485a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js @@ -0,0 +1,9 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","zh-cn",{title:"辅助功能说明",contents:"帮助内容。要关闭此对话框请按 ESC 键。",legend:[{name:"常规",items:[{name:"编辑器工具栏",legend:"按 ${toolbarFocus} 切换到工具栏,使用 TAB 键和 SHIFT+TAB 组合键移动到上一个和下一个工具栏组。使用左右箭头键移动到上一个或下一个工具栏按钮。按空格键或回车键以选中工具栏按钮。"},{name:"编辑器对话框",legend:"在对话框内,按 TAB 键移动到下一个字段,按 SHIFT + TAB 组合键移动到上一个字段,按 ENTER 键提交对话框,按 ESC 键取消对话框。对于有多选项卡的对话框,可以按 ALT + F10 直接切换到或者按 TAB 键逐步移到选项卡列表,当焦点移到选项卡列表时可以用左右箭头键来移动到前后的选项卡。"},{name:"编辑器上下文菜单",legend:"用 ${contextMenu} 或者“应用程序键”打开上下文菜单。然后用 TAB 键或者下箭头键来移动到下一个菜单项;SHIFT + TAB 组合键或者上箭头键移动到上一个菜单项。用 SPACE 键或者 ENTER 键选择菜单项。用 SPACE 键,ENTER 键或者右箭头键打开子菜单。返回菜单用 ESC 键或者左箭头键。用 ESC 键关闭上下文菜单。"}, +{name:"编辑器列表框",legend:"在列表框中,移到下一列表项用 TAB 键或者下箭头键。移到上一列表项用SHIFT+TAB 组合键或者上箭头键,用 SPACE 键或者 ENTER 键选择列表项。用 ESC 键收起列表框。"},{name:"编辑器元素路径栏",legend:"按 ${elementsPathFocus} 以导航到元素路径栏,使用 TAB 键或右箭头键选择下一个元素,使用 SHIFT+TAB 组合键或左箭头键选择上一个元素,按空格键或回车键以选定编辑器里的元素。"}]},{name:"命令",items:[{name:" 撤消命令",legend:"按 ${undo}"},{name:" 重做命令",legend:"按 ${redo}"},{name:" 加粗命令",legend:"按 ${bold}"},{name:" 倾斜命令",legend:"按 ${italic}"},{name:" 下划线命令",legend:"按 ${underline}"},{name:" 链接命令",legend:"按 ${link}"},{name:" 工具栏折叠命令",legend:"按 ${toolbarCollapse}"}, +{name:"访问前一个焦点区域的命令",legend:"按 ${accessPreviousSpace} 访问^符号前最近的不可访问的焦点区域,例如:两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"访问下一个焦点区域命令",legend:"按 ${accessNextSpace} 以访问^符号后最近的不可访问的焦点区域。例如:两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"辅助功能帮助",legend:"按 ${a11yHelp}"}]}],backspace:"退格键",tab:"Tab 键",enter:"回车键",shift:"Shift 键",ctrl:"Ctrl 键",alt:"Alt 键",pause:"暂停键",capslock:"大写锁定键",escape:"Esc 键",pageUp:"上翻页键",pageDown:"下翻页键",end:"行尾键",home:"行首键",leftArrow:"向左箭头键",upArrow:"向上箭头键",rightArrow:"向右箭头键",downArrow:"向下箭头键", +insert:"插入键","delete":"删除键",leftWindowKey:"左 WIN 键",rightWindowKey:"右 WIN 键",selectKey:"选择键",numpad0:"小键盘 0 键",numpad1:"小键盘 1 键",numpad2:"小键盘 2 键",numpad3:"小键盘 3 键",numpad4:"小键盘 4 键",numpad5:"小键盘 5 键",numpad6:"小键盘 6 键",numpad7:"小键盘 7 键",numpad8:"小键盘 8 键",numpad9:"小键盘 9 键",multiply:"星号键",add:"加号键",subtract:"减号键",decimalPoint:"小数点键",divide:"除号键",f1:"F1 键",f2:"F2 键",f3:"F3 键",f4:"F4 键",f5:"F5 键",f6:"F6 键",f7:"F7 键",f8:"F8 键",f9:"F9 键",f10:"F10 键",f11:"F11 键",f12:"F12 键",numLock:"数字锁定键",scrollLock:"滚动锁定键", +semiColon:"分号键",equalSign:"等号键",comma:"逗号键",dash:"短划线键",period:"句号键",forwardSlash:"斜杠键",graveAccent:"重音符键",openBracket:"左中括号键",backSlash:"反斜杠键",closeBracket:"右中括号键",singleQuote:"单引号键"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js new file mode 100755 index 0000000000..3b77b9377d --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js @@ -0,0 +1,9 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","zh",{title:"輔助工具指南",contents:"說明內容。若要關閉此對話框請按「ESC」。",legend:[{name:"一般",items:[{name:"編輯器工具列",legend:"請按 ${toolbarFocus} 以導覽到工具列。利用 TAB 或 SHIFT+TAB 以便移動到下一個及前一個工具列群組。利用右方向鍵或左方向鍵以便移動到下一個及上一個工具列按鈕。按下空白鍵或 ENTER 鍵啟用工具列按鈕。"},{name:"編輯器對話方塊",legend:"在對話框中,按下 TAB 鍵以導覽到下一個對話框元素,按下 SHIFT+TAB 以移動到上一個對話框元素,按下 ENTER 以遞交對話框,按下 ESC 以取消對話框。當對話框有多個分頁時,可以使用 ALT+F10 或是在對話框分頁順序中的一部份按下 TAB 以使用分頁列表。焦點在分頁列表上時,分別使用右方向鍵及左方向鍵移動到下一個及上一個分頁。"},{name:"編輯器內容功能表",legend:"請按下「${contextMenu}」或是「應用程式鍵」以開啟內容選單。以「TAB」或是「↓」鍵移動到下一個選單選項。以「SHIFT + TAB」或是「↑」鍵移動到上一個選單選項。按下「空白鍵」或是「ENTER」鍵以選取選單選項。以「空白鍵」或「ENTER」或「→」開啟目前選項之子選單。以「ESC」或「←」回到父選單。以「ESC」鍵關閉內容選單」。"}, +{name:"編輯器清單方塊",legend:"在清單方塊中,使用 TAB 或下方向鍵移動到下一個列表項目。使用 SHIFT+TAB 或上方向鍵移動到上一個列表項目。按下空白鍵或 ENTER 以選取列表選項。按下 ESC 以關閉清單方塊。"},{name:"編輯器元件路徑工具列",legend:"請按 ${elementsPathFocus} 以瀏覽元素路徑列。利用 TAB 或右方向鍵以便移動到下一個元素按鈕。利用 SHIFT 或左方向鍵以便移動到上一個按鈕。按下空白鍵或 ENTER 鍵來選取在編輯器中的元素。"}]},{name:"命令",items:[{name:"復原命令",legend:"請按下「${undo}」"},{name:"重複命令",legend:"請按下「 ${redo}」"},{name:"粗體命令",legend:"請按下「${bold}」"},{name:"斜體",legend:"請按下「${italic}」"},{name:"底線命令",legend:"請按下「${underline}」"},{name:"連結",legend:"請按下「${link}」"}, +{name:"隱藏工具列",legend:"請按下「${toolbarCollapse}」"},{name:"存取前一個焦點空間命令",legend:"請按下 ${accessPreviousSpace} 以存取最近但無法靠近之插字符號前的焦點空間。舉例:二個相鄰的 HR 元素。\r\n重複按鍵以存取較遠的焦點空間。"},{name:"存取下一個焦點空間命令",legend:"請按下 ${accessNextSpace} 以存取最近但無法靠近之插字符號後的焦點空間。舉例:二個相鄰的 HR 元素。\r\n重複按鍵以存取較遠的焦點空間。"},{name:"協助工具說明",legend:"請按下「${a11yHelp}」"}]}],backspace:"退格鍵",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home", +leftArrow:"向左箭號",upArrow:"向上鍵號",rightArrow:"向右鍵號",downArrow:"向下鍵號",insert:"插入","delete":"刪除",leftWindowKey:"左方 Windows 鍵",rightWindowKey:"右方 Windows 鍵",selectKey:"選擇鍵",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"乘號",add:"新增",subtract:"減號",decimalPoint:"小數點",divide:"除號",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10", +f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"分號",equalSign:"等號",comma:"逗號",dash:"虛線",period:"句點",forwardSlash:"斜線",graveAccent:"抑音符號",openBracket:"左方括號",backSlash:"反斜線",closeBracket:"右方括號",singleQuote:"單引號"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/clipboard/dialogs/paste.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/clipboard/dialogs/paste.js new file mode 100755 index 0000000000..0373dee3be --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/clipboard/dialogs/paste.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("paste",function(c){function h(a){var b=new CKEDITOR.dom.document(a.document),f=b.getBody(),d=b.getById("cke_actscrpt");d&&d.remove();f.setAttribute("contenteditable",!0);if(CKEDITOR.env.ie&&8>CKEDITOR.env.version)b.getWindow().on("blur",function(){b.$.selection.empty()});b.on("keydown",function(a){var a=a.data,b;switch(a.getKeystroke()){case 27:this.hide();b=1;break;case 9:case CKEDITOR.SHIFT+9:this.changeFocus(1),b=1}b&&a.preventDefault()},this);c.fire("ariaWidget",new CKEDITOR.dom.element(a.frameElement)); +b.getWindow().getFrame().removeCustomData("pendingFocus")&&f.focus()}var e=c.lang.clipboard;c.on("pasteDialogCommit",function(a){a.data&&c.fire("paste",{type:"auto",dataValue:a.data,method:"paste",dataTransfer:CKEDITOR.plugins.clipboard.initPasteDataTransfer()})},null,null,1E3);return{title:e.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?370:350,minHeight:CKEDITOR.env.quirks?250:245,onShow:function(){this.parts.dialog.$.offsetHeight;this.setupContent();this.parts.title.setHtml(this.customTitle|| +e.title);this.customTitle=null},onLoad:function(){(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&"rtl"==c.lang.dir&&this.parts.contents.setStyle("overflow","hidden")},onOk:function(){this.commitContent()},contents:[{id:"general",label:c.lang.common.generalTab,elements:[{type:"html",id:"securityMsg",html:'<div style="white-space:normal;width:340px">'+e.securityMsg+"</div>"},{type:"html",id:"pasteMsg",html:'<div style="white-space:normal;width:340px">'+e.pasteMsg+"</div>"},{type:"html",id:"editing_area", +style:"width:100%;height:100%",html:"",focus:function(){var a=this.getInputElement(),b=a.getFrameDocument().getBody();!b||b.isReadOnly()?a.setCustomData("pendingFocus",1):b.focus()},setup:function(){var a=this.getDialog(),b='<html dir="'+c.config.contentsLangDirection+'" lang="'+(c.config.contentsLanguage||c.langCode)+'"><head><style>body{margin:3px;height:95%;word-break:break-all;}</style></head><body><script id="cke_actscrpt" type="text/javascript">window.parent.CKEDITOR.tools.callFunction('+CKEDITOR.tools.addFunction(h, +a)+",this);<\/script></body></html>",f=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie&&!CKEDITOR.env.edge?"javascript:void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+'})())"':"",d=CKEDITOR.dom.element.createFromHtml('<iframe class="cke_pasteframe" frameborder="0" allowTransparency="true" src="'+f+'" aria-label="'+e.pasteArea+'" aria-describedby="'+a.getContentElement("general","pasteMsg").domId+'"></iframe>');d.on("load",function(a){a.removeListener(); +a=d.getFrameDocument();a.write(b);c.focusManager.add(a.getBody());CKEDITOR.env.air&&h.call(this,a.getWindow().$)},a);d.setCustomData("dialog",a);a=this.getElement();a.setHtml("");a.append(d);if(CKEDITOR.env.ie&&!CKEDITOR.env.edge){var g=CKEDITOR.dom.element.createFromHtml('<span tabindex="-1" style="position:absolute" role="presentation"></span>');g.on("focus",function(){setTimeout(function(){d.$.contentWindow.focus()})});a.append(g);this.focus=function(){g.focus();this.fire("focus")}}this.getInputElement= +function(){return d};CKEDITOR.env.ie&&(a.setStyle("display","block"),a.setStyle("height",d.$.offsetHeight+2+"px"))},commit:function(){var a=this.getDialog().getParentEditor(),b=this.getInputElement().getFrameDocument().getBody(),c=b.getBogus(),d;c&&c.remove();d=b.getHtml();setTimeout(function(){a.fire("pasteDialogCommit",d)},0)}}]}]}}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/colordialog/dialogs/colordialog.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/colordialog/dialogs/colordialog.js new file mode 100755 index 0000000000..62c39a0b2d --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/colordialog/dialogs/colordialog.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("colordialog",function(t){function n(){d.getById(o).removeStyle("background-color");p.getContentElement("picker","selectedColor").setValue("");j&&j.removeAttribute("aria-selected");j=null}function u(a){var a=a.data.getTarget(),c;if("td"==a.getName()&&(c=a.getChild(0).getHtml()))j=a,j.setAttribute("aria-selected",!0),p.getContentElement("picker","selectedColor").setValue(c)}function y(a){for(var a=a.replace(/^#/,""),c=0,b=[];2>=c;c++)b[c]=parseInt(a.substr(2*c,2),16);return"#"+ +(165<=0.2126*b[0]+0.7152*b[1]+0.0722*b[2]?"000":"fff")}function v(a){!a.name&&(a=new CKEDITOR.event(a));var c=!/mouse/.test(a.name),b=a.data.getTarget(),g;if("td"==b.getName()&&(g=b.getChild(0).getHtml()))q(a),c?e=b:w=b,c&&(b.setStyle("border-color",y(g)),b.setStyle("border-style","dotted")),d.getById(k).setStyle("background-color",g),d.getById(l).setHtml(g)}function q(a){if(a=!/mouse/.test(a.name)&&e){var c=a.getChild(0).getHtml();a.setStyle("border-color",c);a.setStyle("border-style","solid")}!e&& +!w&&(d.getById(k).removeStyle("background-color"),d.getById(l).setHtml("&nbsp;"))}function z(a){var c=a.data,b=c.getTarget(),g=c.getKeystroke(),d="rtl"==t.lang.dir;switch(g){case 38:if(a=b.getParent().getPrevious())a=a.getChild([b.getIndex()]),a.focus();c.preventDefault();break;case 40:if(a=b.getParent().getNext())(a=a.getChild([b.getIndex()]))&&1==a.type&&a.focus();c.preventDefault();break;case 32:case 13:u(a);c.preventDefault();break;case d?37:39:if(a=b.getNext())1==a.type&&(a.focus(),c.preventDefault(!0)); +else if(a=b.getParent().getNext())if((a=a.getChild([0]))&&1==a.type)a.focus(),c.preventDefault(!0);break;case d?39:37:if(a=b.getPrevious())a.focus(),c.preventDefault(!0);else if(a=b.getParent().getPrevious())a=a.getLast(),a.focus(),c.preventDefault(!0)}}var r=CKEDITOR.dom.element,d=CKEDITOR.document,f=t.lang.colordialog,p,x={type:"html",html:"&nbsp;"},j,e,w,m=function(a){return CKEDITOR.tools.getNextId()+"_"+a},k=m("hicolor"),l=m("hicolortext"),o=m("selhicolor"),h;(function(){function a(a,d){for(var s= +a;s<a+3;s++){var e=new r(h.$.insertRow(-1));e.setAttribute("role","row");for(var f=d;f<d+3;f++)for(var g=0;6>g;g++)c(e.$,"#"+b[f]+b[g]+b[s])}}function c(a,c){var b=new r(a.insertCell(-1));b.setAttribute("class","ColorCell");b.setAttribute("tabIndex",-1);b.setAttribute("role","gridcell");b.on("keydown",z);b.on("click",u);b.on("focus",v);b.on("blur",q);b.setStyle("background-color",c);b.setStyle("border","1px solid "+c);b.setStyle("width","14px");b.setStyle("height","14px");var d=m("color_table_cell"); +b.setAttribute("aria-labelledby",d);b.append(CKEDITOR.dom.element.createFromHtml('<span id="'+d+'" class="cke_voice_label">'+c+"</span>",CKEDITOR.document))}h=CKEDITOR.dom.element.createFromHtml('<table tabIndex="-1" aria-label="'+f.options+'" role="grid" style="border-collapse:separate;" cellspacing="0"><caption class="cke_voice_label">'+f.options+'</caption><tbody role="presentation"></tbody></table>');h.on("mouseover",v);h.on("mouseout",q);var b="00 33 66 99 cc ff".split(" ");a(0,0);a(3,0);a(0, +3);a(3,3);var d=new r(h.$.insertRow(-1));d.setAttribute("role","row");c(d.$,"#000000");for(var e=0;16>e;e++){var i=e.toString(16);c(d.$,"#"+i+i+i+i+i+i)}c(d.$,"#ffffff")})();return{title:f.title,minWidth:360,minHeight:220,onLoad:function(){p=this},onHide:function(){n();var a=e.getChild(0).getHtml();e.setStyle("border-color",a);e.setStyle("border-style","solid");d.getById(k).removeStyle("background-color");d.getById(l).setHtml("&nbsp;");e=null},contents:[{id:"picker",label:f.title,accessKey:"I",elements:[{type:"hbox", +padding:0,widths:["70%","10%","30%"],children:[{type:"html",html:"<div></div>",onLoad:function(){CKEDITOR.document.getById(this.domId).append(h)},focus:function(){(e||this.getElement().getElementsByTag("td").getItem(0)).focus()}},x,{type:"vbox",padding:0,widths:["70%","5%","25%"],children:[{type:"html",html:"<span>"+f.highlight+'</span><div id="'+k+'" style="border: 1px solid; height: 74px; width: 74px;"></div><div id="'+l+'">&nbsp;</div><span>'+f.selected+'</span><div id="'+o+'" style="border: 1px solid; height: 20px; width: 74px;"></div>'}, +{type:"text",label:f.selected,labelStyle:"display:none",id:"selectedColor",style:"width: 76px;margin-top:4px",onChange:function(){try{d.getById(o).setStyle("background-color",this.getValue())}catch(a){n()}}},x,{type:"button",id:"clear",label:f.clear,onClick:n}]}]}]}]}}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/dialog/dialogDefinition.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/dialog/dialogDefinition.js new file mode 100755 index 0000000000..d13f9488dd --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/dialog/dialogDefinition.js @@ -0,0 +1,4 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/icons.png b/html/moodle2/mod/hvp/editor/ckeditor/plugins/icons.png new file mode 100755 index 0000000000..c1dc392164 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/plugins/icons.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/icons_hidpi.png b/html/moodle2/mod/hvp/editor/ckeditor/plugins/icons_hidpi.png new file mode 100755 index 0000000000..897e78962e Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/plugins/icons_hidpi.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/link/dialogs/anchor.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/link/dialogs/anchor.js new file mode 100755 index 0000000000..5a35bf83fb --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/link/dialogs/anchor.js @@ -0,0 +1,7 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("anchor",function(c){function d(a,b){return a.createFakeElement(a.document.createElement("a",{attributes:b}),"cke_anchor","anchor")}return{title:c.lang.link.anchor.title,minWidth:300,minHeight:60,onOk:function(){var a=CKEDITOR.tools.trim(this.getValueOf("info","txtName")),a={id:a,name:a,"data-cke-saved-name":a};if(this._.selectedElement)this._.selectedElement.data("cke-realelement")?(a=d(c,a),a.replace(this._.selectedElement),CKEDITOR.env.ie&&c.getSelection().selectElement(a)): +this._.selectedElement.setAttributes(a);else{var b=c.getSelection(),b=b&&b.getRanges()[0];b.collapsed?(a=d(c,a),b.insertNode(a)):(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(a["class"]="cke_anchor"),a=new CKEDITOR.style({element:"a",attributes:a}),a.type=CKEDITOR.STYLE_INLINE,c.applyStyle(a))}},onHide:function(){delete this._.selectedElement},onShow:function(){var a=c.getSelection(),b=a.getSelectedElement(),d=b&&b.data("cke-realelement"),e=d?CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,b):CKEDITOR.plugins.link.getSelectedLink(c); +e&&(this._.selectedElement=e,this.setValueOf("info","txtName",e.data("cke-saved-name")||""),!d&&a.selectElement(e),b&&(this._.selectedElement=b));this.getContentElement("info","txtName").focus()},contents:[{id:"info",label:c.lang.link.anchor.title,accessKey:"I",elements:[{type:"text",id:"txtName",label:c.lang.link.anchor.name,required:!0,validate:function(){return!this.getValue()?(alert(c.lang.link.anchor.errorName),!1):!0}}]}]}}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/link/dialogs/link.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/link/dialogs/link.js new file mode 100755 index 0000000000..198e99cb75 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/link/dialogs/link.js @@ -0,0 +1,26 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){CKEDITOR.dialog.add("link",function(g){var l=CKEDITOR.plugins.link,m=function(){var a=this.getDialog(),b=a.getContentElement("target","popupFeatures"),a=a.getContentElement("target","linkTargetName"),k=this.getValue();if(b&&a)switch(b=b.getElement(),b.hide(),a.setValue(""),k){case "frame":a.setLabel(g.lang.link.targetFrameName);a.getElement().show();break;case "popup":b.show();a.setLabel(g.lang.link.targetPopupName);a.getElement().show();break;default:a.setValue(k),a.getElement().hide()}}, +f=function(a){a.target&&this.setValue(a.target[this.id]||"")},h=function(a){a.advanced&&this.setValue(a.advanced[this.id]||"")},i=function(a){a.target||(a.target={});a.target[this.id]=this.getValue()||""},j=function(a){a.advanced||(a.advanced={});a.advanced[this.id]=this.getValue()||""},c=g.lang.common,b=g.lang.link,d;return{title:b.title,minWidth:350,minHeight:230,contents:[{id:"info",label:b.info,title:b.info,elements:[{id:"linkType",type:"select",label:b.type,"default":"url",items:[[b.toUrl,"url"], +[b.toAnchor,"anchor"],[b.toEmail,"email"]],onChange:function(){var a=this.getDialog(),b=["urlOptions","anchorOptions","emailOptions"],k=this.getValue(),e=a.definition.getContents("upload"),e=e&&e.hidden;"url"==k?(g.config.linkShowTargetTab&&a.showPage("target"),e||a.showPage("upload")):(a.hidePage("target"),e||a.hidePage("upload"));for(e=0;e<b.length;e++){var c=a.getContentElement("info",b[e]);c&&(c=c.getElement().getParent().getParent(),b[e]==k+"Options"?c.show():c.hide())}a.layout()},setup:function(a){this.setValue(a.type|| +"url")},commit:function(a){a.type=this.getValue()}},{type:"vbox",id:"urlOptions",children:[{type:"hbox",widths:["25%","75%"],children:[{id:"protocol",type:"select",label:c.protocol,"default":"http://",items:[["http://‎","http://"],["https://‎","https://"],["ftp://‎","ftp://"],["news://‎","news://"],[b.other,""]],setup:function(a){a.url&&this.setValue(a.url.protocol||"")},commit:function(a){a.url||(a.url={});a.url.protocol=this.getValue()}},{type:"text",id:"url",label:c.url,required:!0,onLoad:function(){this.allowOnChange= +!0},onKeyUp:function(){this.allowOnChange=!1;var a=this.getDialog().getContentElement("info","protocol"),b=this.getValue(),k=/^((javascript:)|[#\/\.\?])/i,c=/^(http|https|ftp|news):\/\/(?=.)/i.exec(b);c?(this.setValue(b.substr(c[0].length)),a.setValue(c[0].toLowerCase())):k.test(b)&&a.setValue("");this.allowOnChange=!0},onChange:function(){if(this.allowOnChange)this.onKeyUp()},validate:function(){var a=this.getDialog();return a.getContentElement("info","linkType")&&"url"!=a.getValueOf("info","linkType")? +!0:!g.config.linkJavaScriptLinksAllowed&&/javascript\:/.test(this.getValue())?(alert(c.invalidValue),!1):this.getDialog().fakeObj?!0:CKEDITOR.dialog.validate.notEmpty(b.noUrl).apply(this)},setup:function(a){this.allowOnChange=!1;a.url&&this.setValue(a.url.url);this.allowOnChange=!0},commit:function(a){this.onChange();a.url||(a.url={});a.url.url=this.getValue();this.allowOnChange=!1}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().show()}},{type:"button", +id:"browse",hidden:"true",filebrowser:"info:url",label:c.browseServer}]},{type:"vbox",id:"anchorOptions",width:260,align:"center",padding:0,children:[{type:"fieldset",id:"selectAnchorText",label:b.selectAnchor,setup:function(){d=l.getEditorAnchors(g);this.getElement()[d&&d.length?"show":"hide"]()},children:[{type:"hbox",id:"selectAnchor",children:[{type:"select",id:"anchorName","default":"",label:b.anchorName,style:"width: 100%;",items:[[""]],setup:function(a){this.clear();this.add("");if(d)for(var b= +0;b<d.length;b++)d[b].name&&this.add(d[b].name);a.anchor&&this.setValue(a.anchor.name);(a=this.getDialog().getContentElement("info","linkType"))&&"email"==a.getValue()&&this.focus()},commit:function(a){a.anchor||(a.anchor={});a.anchor.name=this.getValue()}},{type:"select",id:"anchorId","default":"",label:b.anchorId,style:"width: 100%;",items:[[""]],setup:function(a){this.clear();this.add("");if(d)for(var b=0;b<d.length;b++)d[b].id&&this.add(d[b].id);a.anchor&&this.setValue(a.anchor.id)},commit:function(a){a.anchor|| +(a.anchor={});a.anchor.id=this.getValue()}}],setup:function(){this.getElement()[d&&d.length?"show":"hide"]()}}]},{type:"html",id:"noAnchors",style:"text-align: center;",html:'<div role="note" tabIndex="-1">'+CKEDITOR.tools.htmlEncode(b.noAnchors)+"</div>",focus:!0,setup:function(){this.getElement()[d&&d.length?"hide":"show"]()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}},{type:"vbox",id:"emailOptions",padding:1,children:[{type:"text",id:"emailAddress", +label:b.emailAddress,required:!0,validate:function(){var a=this.getDialog();return!a.getContentElement("info","linkType")||"email"!=a.getValueOf("info","linkType")?!0:CKEDITOR.dialog.validate.notEmpty(b.noEmail).apply(this)},setup:function(a){a.email&&this.setValue(a.email.address);(a=this.getDialog().getContentElement("info","linkType"))&&"email"==a.getValue()&&this.select()},commit:function(a){a.email||(a.email={});a.email.address=this.getValue()}},{type:"text",id:"emailSubject",label:b.emailSubject, +setup:function(a){a.email&&this.setValue(a.email.subject)},commit:function(a){a.email||(a.email={});a.email.subject=this.getValue()}},{type:"textarea",id:"emailBody",label:b.emailBody,rows:3,"default":"",setup:function(a){a.email&&this.setValue(a.email.body)},commit:function(a){a.email||(a.email={});a.email.body=this.getValue()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}}]},{id:"target",requiredContent:"a[target]",label:b.target,title:b.target, +elements:[{type:"hbox",widths:["50%","50%"],children:[{type:"select",id:"linkTargetType",label:c.target,"default":"notSet",style:"width : 100%;",items:[[c.notSet,"notSet"],[b.targetFrame,"frame"],[b.targetPopup,"popup"],[c.targetNew,"_blank"],[c.targetTop,"_top"],[c.targetSelf,"_self"],[c.targetParent,"_parent"]],onChange:m,setup:function(a){a.target&&this.setValue(a.target.type||"notSet");m.call(this)},commit:function(a){a.target||(a.target={});a.target.type=this.getValue()}},{type:"text",id:"linkTargetName", +label:b.targetFrameName,"default":"",setup:function(a){a.target&&this.setValue(a.target.name)},commit:function(a){a.target||(a.target={});a.target.name=this.getValue().replace(/\W/gi,"")}}]},{type:"vbox",width:"100%",align:"center",padding:2,id:"popupFeatures",children:[{type:"fieldset",label:b.popupFeatures,children:[{type:"hbox",children:[{type:"checkbox",id:"resizable",label:b.popupResizable,setup:f,commit:i},{type:"checkbox",id:"status",label:b.popupStatusBar,setup:f,commit:i}]},{type:"hbox", +children:[{type:"checkbox",id:"location",label:b.popupLocationBar,setup:f,commit:i},{type:"checkbox",id:"toolbar",label:b.popupToolbar,setup:f,commit:i}]},{type:"hbox",children:[{type:"checkbox",id:"menubar",label:b.popupMenuBar,setup:f,commit:i},{type:"checkbox",id:"fullscreen",label:b.popupFullScreen,setup:f,commit:i}]},{type:"hbox",children:[{type:"checkbox",id:"scrollbars",label:b.popupScrollBars,setup:f,commit:i},{type:"checkbox",id:"dependent",label:b.popupDependent,setup:f,commit:i}]},{type:"hbox", +children:[{type:"text",widths:["50%","50%"],labelLayout:"horizontal",label:c.width,id:"width",setup:f,commit:i},{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:b.popupLeft,id:"left",setup:f,commit:i}]},{type:"hbox",children:[{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:c.height,id:"height",setup:f,commit:i},{type:"text",labelLayout:"horizontal",label:b.popupTop,widths:["50%","50%"],id:"top",setup:f,commit:i}]}]}]}]},{id:"upload",label:b.upload,title:b.upload,hidden:!0, +filebrowser:"uploadButton",elements:[{type:"file",id:"upload",label:c.upload,style:"height:40px",size:29},{type:"fileButton",id:"uploadButton",label:c.uploadSubmit,filebrowser:"info:url","for":["upload","upload"]}]},{id:"advanced",label:b.advanced,title:b.advanced,elements:[{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",id:"advId",requiredContent:"a[id]",label:b.id,setup:h,commit:j},{type:"select",id:"advLangDir",requiredContent:"a[dir]",label:b.langDir, +"default":"",style:"width:110px",items:[[c.notSet,""],[b.langDirLTR,"ltr"],[b.langDirRTL,"rtl"]],setup:h,commit:j},{type:"text",id:"advAccessKey",requiredContent:"a[accesskey]",width:"80px",label:b.acccessKey,maxLength:1,setup:h,commit:j}]},{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",label:b.name,id:"advName",requiredContent:"a[name]",setup:h,commit:j},{type:"text",label:b.langCode,id:"advLangCode",requiredContent:"a[lang]",width:"110px","default":"",setup:h,commit:j},{type:"text", +label:b.tabIndex,id:"advTabIndex",requiredContent:"a[tabindex]",width:"80px",maxLength:5,setup:h,commit:j}]}]},{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.advisoryTitle,requiredContent:"a[title]","default":"",id:"advTitle",setup:h,commit:j},{type:"text",label:b.advisoryContentType,requiredContent:"a[type]","default":"",id:"advContentType",setup:h,commit:j}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.cssClasses,requiredContent:"a(cke-xyz)", +"default":"",id:"advCSSClasses",setup:h,commit:j},{type:"text",label:b.charset,requiredContent:"a[charset]","default":"",id:"advCharset",setup:h,commit:j}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.rel,requiredContent:"a[rel]","default":"",id:"advRel",setup:h,commit:j},{type:"text",label:b.styles,requiredContent:"a{cke-xyz}","default":"",id:"advStyles",validate:CKEDITOR.dialog.validate.inlineStyle(g.lang.common.invalidInlineStyle),setup:h,commit:j}]}]}]}],onShow:function(){var a= +this.getParentEditor(),b=a.getSelection(),c=null;(c=l.getSelectedLink(a))&&c.hasAttribute("href")?b.getSelectedElement()||b.selectElement(c):c=null;a=l.parseLinkAttributes(a,c);this._.selectedElement=c;this.setupContent(a)},onOk:function(){var a={};this.commitContent(a);var b=g.getSelection(),c=l.getLinkAttributes(g,a);if(this._.selectedElement){var e=this._.selectedElement,d=e.data("cke-saved-href"),f=e.getHtml();e.setAttributes(c.set);e.removeAttributes(c.removed);if(d==f||"email"==a.type&&-1!= +f.indexOf("@"))e.setHtml("email"==a.type?a.email.address:c.set["data-cke-saved-href"]),b.selectElement(e);delete this._.selectedElement}else b=b.getRanges()[0],b.collapsed&&(a=new CKEDITOR.dom.text("email"==a.type?a.email.address:c.set["data-cke-saved-href"],g.document),b.insertNode(a),b.selectNodeContents(a)),c=new CKEDITOR.style({element:"a",attributes:c.set}),c.type=CKEDITOR.STYLE_INLINE,c.applyToRange(b,g),b.select()},onLoad:function(){g.config.linkShowAdvancedTab||this.hidePage("advanced");g.config.linkShowTargetTab|| +this.hidePage("target")},onFocus:function(){var a=this.getContentElement("info","linkType");a&&"url"==a.getValue()&&(a=this.getContentElement("info","url"),a.select())}}})})(); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/link/images/anchor.png b/html/moodle2/mod/hvp/editor/ckeditor/plugins/link/images/anchor.png new file mode 100755 index 0000000000..6d861a0e7a Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/plugins/link/images/anchor.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/link/images/hidpi/anchor.png b/html/moodle2/mod/hvp/editor/ckeditor/plugins/link/images/hidpi/anchor.png new file mode 100755 index 0000000000..f5048430d5 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/plugins/link/images/hidpi/anchor.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png b/html/moodle2/mod/hvp/editor/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png new file mode 100755 index 0000000000..4a8d2bfdab Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/magicline/images/hidpi/icon.png b/html/moodle2/mod/hvp/editor/ckeditor/plugins/magicline/images/hidpi/icon.png new file mode 100755 index 0000000000..b981bb5c6c Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/plugins/magicline/images/hidpi/icon.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/magicline/images/icon-rtl.png b/html/moodle2/mod/hvp/editor/ckeditor/plugins/magicline/images/icon-rtl.png new file mode 100755 index 0000000000..55b5b5f949 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/plugins/magicline/images/icon-rtl.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/magicline/images/icon.png b/html/moodle2/mod/hvp/editor/ckeditor/plugins/magicline/images/icon.png new file mode 100755 index 0000000000..e063433632 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/plugins/magicline/images/icon.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/pastefromword/filter/default.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/pastefromword/filter/default.js new file mode 100755 index 0000000000..ee85cdbf15 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/pastefromword/filter/default.js @@ -0,0 +1,32 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){function y(a){for(var a=a.toUpperCase(),c=z.length,b=0,f=0;f<c;++f)for(var d=z[f],e=d[1].length;a.substr(0,e)==d[1];a=a.substr(e))b+=d[0];return b}function A(a){for(var a=a.toUpperCase(),c=B.length,b=1,f=1;0<a.length;f*=c)b+=B.indexOf(a.charAt(a.length-1))*f,a=a.substr(0,a.length-1);return b}var C=CKEDITOR.htmlParser.fragment.prototype,o=CKEDITOR.htmlParser.element.prototype;C.onlyChild=o.onlyChild=function(){var a=this.children;return 1==a.length&&a[0]||null};o.removeAnyChildWithName= +function(a){for(var c=this.children,b=[],f,d=0;d<c.length;d++)f=c[d],f.name&&(f.name==a&&(b.push(f),c.splice(d--,1)),b=b.concat(f.removeAnyChildWithName(a)));return b};o.getAncestor=function(a){for(var c=this.parent;c&&(!c.name||!c.name.match(a));)c=c.parent;return c};C.firstChild=o.firstChild=function(a){for(var c,b=0;b<this.children.length;b++)if(c=this.children[b],a(c)||c.name&&(c=c.firstChild(a)))return c;return null};o.addStyle=function(a,c,b){var f="";if("string"==typeof c)f+=a+":"+c+";";else{if("object"== +typeof a)for(var d in a)a.hasOwnProperty(d)&&(f+=d+":"+a[d]+";");else f+=a;b=c}this.attributes||(this.attributes={});a=this.attributes.style||"";a=(b?[f,a]:[a,f]).join(";");this.attributes.style=a.replace(/^;+|;(?=;)/g,"")};o.getStyle=function(a){var c=this.attributes.style;if(c)return c=CKEDITOR.tools.parseCssText(c,1),c[a]};CKEDITOR.dtd.parentOf=function(a){var c={},b;for(b in this)-1==b.indexOf("$")&&this[b][a]&&(c[b]=1);return c};var D=/^(?:\b0[^\s]*\s*){1,4}$/,x={ol:{decimal:/\d+/,"lower-roman":/^m{0,4}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$/, +"upper-roman":/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,"lower-alpha":/^[a-z]+$/,"upper-alpha":/^[A-Z]+$/},ul:{disc:/[l\u00B7\u2002]/,circle:/[\u006F\u00D8]/,square:/[\u006E\u25C6]/}},z=[[1E3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]],B="ABCDEFGHIJKLMNOPQRSTUVWXYZ",s=0,t=null,w,E=CKEDITOR.plugins.pastefromword={utils:{createListBulletMarker:function(a,c){var b=new CKEDITOR.htmlParser.element("cke:listbullet"); +b.attributes={"cke:listsymbol":a[0]};b.add(new CKEDITOR.htmlParser.text(c));return b},isListBulletIndicator:function(a){if(/mso-list\s*:\s*Ignore/i.test(a.attributes&&a.attributes.style))return!0},isContainingOnlySpaces:function(a){var c;return(c=a.onlyChild())&&/^(:?\s|&nbsp;)+$/.test(c.value)},resolveList:function(a){var c=a.attributes,b;if((b=a.removeAnyChildWithName("cke:listbullet"))&&b.length&&(b=b[0]))return a.name="cke:li",c.style&&(c.style=E.filters.stylesFilter([["text-indent"],["line-height"], +[/^margin(:?-left)?$/,null,function(a){a=a.split(" ");a=CKEDITOR.tools.convertToPx(a[3]||a[1]||a[0]);!s&&(null!==t&&a>t)&&(s=a-t);t=a;c["cke:indent"]=s&&Math.ceil(a/s)+1||1}],[/^mso-list$/,null,function(a){a=a.split(" ");if(!(2>a.length)){var b=Number(a[0].match(/\d+/)),a=Number(a[1].match(/\d+/));1==a&&(b!==w&&(c["cke:reset"]=1),w=b);c["cke:indent"]=a}}]])(c.style,a)||""),c["cke:indent"]||(t=0,c["cke:indent"]=1),CKEDITOR.tools.extend(c,b.attributes),!0;w=t=s=null;return!1},getStyleComponents:function(){var a= +CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(a);return function(c,b,f){a.setStyle(c,b);for(var c={},b=f.length,d=0;d<b;d++)c[f[d]]=a.getStyle(f[d]);return c}}(),listDtdParents:CKEDITOR.dtd.parentOf("ol")},filters:{flattenList:function(a,c){var c="number"==typeof c?c:1,b=a.attributes,f;switch(b.type){case "a":f="lower-alpha";break;case "1":f="decimal"}for(var d=a.children,e,i=0;i<d.length;i++)if(e= +d[i],e.name in CKEDITOR.dtd.$listItem){var j=e.attributes,g=e.children,l=g[0],h=g[g.length-1];l.attributes&&(l.attributes.style&&-1<l.attributes.style.indexOf("mso-list"))&&(e.attributes.style=l.attributes.style,l.replaceWithChildren());h.name in CKEDITOR.dtd.$list&&(a.add(h,i+1),--g.length||d.splice(i--,1));e.name="cke:li";b.start&&!i&&(j.value=b.start);E.filters.stylesFilter([["tab-stops",null,function(a){(a=a.match(/0$|\d+\.?\d*\w+/))&&(t=CKEDITOR.tools.convertToPx(a[0]))}],1==c?["mso-list",null, +function(a){a=a.split(" ");a=Number(a[0].match(/\d+/));a!==w&&(j["cke:reset"]=1);w=a}]:null])(j.style);j["cke:indent"]=c;j["cke:listtype"]=a.name;j["cke:list-style-type"]=f}else if(e.name in CKEDITOR.dtd.$list){arguments.callee.apply(this,[e,c+1]);d=d.slice(0,i).concat(e.children).concat(d.slice(i+1));a.children=[];e=0;for(g=d.length;e<g;e++)a.add(d[e]);d=a.children}delete a.name;b["cke:list"]=1},assembleList:function(a){for(var c=a.children,b,f,d,e,i,j,a=[],g,l,h,m,k,p,n=0;n<c.length;n++)if(b=c[n], +"cke:li"==b.name)if(b.name="li",f=b.attributes,h=(h=f["cke:listsymbol"])&&h.match(/^(?:[(]?)([^\s]+?)([.)]?)$/),m=k=p=null,f["cke:ignored"])c.splice(n--,1);else{f["cke:reset"]&&(j=e=i=null);d=Number(f["cke:indent"]);d!=e&&(l=g=null);if(h){if(l&&x[l][g].test(h[1]))m=l,k=g;else for(var q in x)for(var u in x[q])if(x[q][u].test(h[1]))if("ol"==q&&/alpha|roman/.test(u)){if(g=/roman/.test(u)?y(h[1]):A(h[1]),!p||g<p)p=g,m=q,k=u}else{m=q;k=u;break}!m&&(m=h[2]?"ol":"ul")}else m=f["cke:listtype"]||"ol",k=f["cke:list-style-type"]; +l=m;g=k||("ol"==m?"decimal":"disc");k&&k!=("ol"==m?"decimal":"disc")&&b.addStyle("list-style-type",k);if("ol"==m&&h){switch(k){case "decimal":p=Number(h[1]);break;case "lower-roman":case "upper-roman":p=y(h[1]);break;case "lower-alpha":case "upper-alpha":p=A(h[1])}b.attributes.value=p}if(j){if(d>e)a.push(j=new CKEDITOR.htmlParser.element(m)),j.add(b),i.add(j);else{if(d<e){e-=d;for(var r;e--&&(r=j.parent);)j=r.parent}j.add(b)}c.splice(n--,1)}else a.push(j=new CKEDITOR.htmlParser.element(m)),j.add(b), +c[n]=j;i=b;e=d}else j&&(j=e=i=null);for(n=0;n<a.length;n++)if(j=a[n],q=j.children,g=g=void 0,u=j.children.length,r=g=void 0,c=/list-style-type:(.*?)(?:;|$)/,e=CKEDITOR.plugins.pastefromword.filters.stylesFilter,g=j.attributes,!c.exec(g.style)){for(i=0;i<u;i++)if(g=q[i],g.attributes.value&&Number(g.attributes.value)==i+1&&delete g.attributes.value,g=c.exec(g.attributes.style))if(g[1]==r||!r)r=g[1];else{r=null;break}if(r){for(i=0;i<u;i++)g=q[i].attributes,g.style&&(g.style=e([["list-style-type"]])(g.style)|| +"");j.addStyle("list-style-type",r)}}w=t=s=null},falsyFilter:function(){return!1},stylesFilter:function(a,c){return function(b,f){var d=[];(b||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(b,e,g){e=e.toLowerCase();"font-family"==e&&(g=g.replace(/["']/g,""));for(var l,h,m,k=0;k<a.length;k++)if(a[k]&&(b=a[k][0],l=a[k][1],h=a[k][2],m=a[k][3],e.match(b)&&(!l||g.match(l)))){e=m||e;c&&(h=h||g);"function"==typeof h&&(h=h(g,f,e));h&&h.push&&(e=h[0],h=h[1]);"string"== +typeof h&&d.push([e,h]);return}!c&&d.push([e,g])});for(var e=0;e<d.length;e++)d[e]=d[e].join(":");return d.length?d.join(";")+";":!1}},elementMigrateFilter:function(a,c){return a?function(b){var f=c?(new CKEDITOR.style(a,c))._.definition:a;b.name=f.element;CKEDITOR.tools.extend(b.attributes,CKEDITOR.tools.clone(f.attributes));b.addStyle(CKEDITOR.style.getStyleText(f));f.attributes&&f.attributes["class"]&&(b.classWhiteList=" "+f.attributes["class"]+" ")}:function(){}},styleMigrateFilter:function(a, +c){var b=this.elementMigrateFilter;return a?function(f,d){var e=new CKEDITOR.htmlParser.element(null),i={};i[c]=f;b(a,i)(e);e.children=d.children;d.children=[e];e.filter=function(){};e.parent=d}:function(){}},bogusAttrFilter:function(a,c){if(-1==c.name.indexOf("cke:"))return!1},applyStyleFilter:null},getRules:function(a,c){var b=CKEDITOR.dtd,f=CKEDITOR.tools.extend({},b.$block,b.$listItem,b.$tableContent),d=a.config,e=this.filters,i=e.falsyFilter,j=e.stylesFilter,g=e.elementMigrateFilter,l=CKEDITOR.tools.bind(this.filters.styleMigrateFilter, +this.filters),h=this.utils.createListBulletMarker,m=e.flattenList,k=e.assembleList,p=this.utils.isListBulletIndicator,n=this.utils.isContainingOnlySpaces,q=this.utils.resolveList,u=function(a){a=CKEDITOR.tools.convertToPx(a);return isNaN(a)?a:a+"px"},r=this.utils.getStyleComponents,t=this.utils.listDtdParents,o=!1!==d.pasteFromWordRemoveFontStyles,s=!1!==d.pasteFromWordRemoveStyles;return{elementNames:[[/meta|link|script/,""]],root:function(a){a.filterChildren(c);k(a)},elements:{"^":function(a){var c; +CKEDITOR.env.gecko&&(c=e.applyStyleFilter)&&c(a)},$:function(a){var v=a.name||"",e=a.attributes;v in f&&e.style&&(e.style=j([[/^(:?width|height)$/,null,u]])(e.style)||"");if(v.match(/h\d/)){a.filterChildren(c);if(q(a))return;g(d["format_"+v])(a)}else if(v in b.$inline)a.filterChildren(c),n(a)&&delete a.name;else if(-1!=v.indexOf(":")&&-1==v.indexOf("cke")){a.filterChildren(c);if("v:imagedata"==v){if(v=a.attributes["o:href"])a.attributes.src=v;a.name="img";return}delete a.name}v in t&&(a.filterChildren(c), +k(a))},style:function(a){if(CKEDITOR.env.gecko){var a=(a=a.onlyChild().value.match(/\/\* Style Definitions \*\/([\s\S]*?)\/\*/))&&a[1],c={};a&&(a.replace(/[\n\r]/g,"").replace(/(.+?)\{(.+?)\}/g,function(a,b,F){for(var b=b.split(","),a=b.length,d=0;d<a;d++)CKEDITOR.tools.trim(b[d]).replace(/^(\w+)(\.[\w-]+)?$/g,function(a,b,d){b=b||"*";d=d.substring(1,d.length);d.match(/MsoNormal/)||(c[b]||(c[b]={}),d?c[b][d]=F:c[b]=F)})}),e.applyStyleFilter=function(a){var b=c["*"]?"*":a.name,d=a.attributes&&a.attributes["class"]; +b in c&&(b=c[b],"object"==typeof b&&(b=b[d]),b&&a.addStyle(b,!0))})}return!1},p:function(a){if(/MsoListParagraph/i.exec(a.attributes["class"])||a.getStyle("mso-list")&&!a.getStyle("mso-list").match(/^(none|skip)$/i)){var b=a.firstChild(function(a){return a.type==CKEDITOR.NODE_TEXT&&!n(a.parent)});(b=b&&b.parent)&&b.addStyle("mso-list","Ignore")}a.filterChildren(c);q(a)||(d.enterMode==CKEDITOR.ENTER_BR?(delete a.name,a.add(new CKEDITOR.htmlParser.element("br"))):g(d["format_"+(d.enterMode==CKEDITOR.ENTER_P? +"p":"div")])(a))},div:function(a){var c=a.onlyChild();if(c&&"table"==c.name){var b=a.attributes;c.attributes=CKEDITOR.tools.extend(c.attributes,b);b.style&&c.addStyle(b.style);c=new CKEDITOR.htmlParser.element("div");c.addStyle("clear","both");a.add(c);delete a.name}},td:function(a){a.getAncestor("thead")&&(a.name="th")},ol:m,ul:m,dl:m,font:function(a){if(p(a.parent))delete a.name;else{a.filterChildren(c);var b=a.attributes,d=b.style,e=a.parent;"font"==e.name?(CKEDITOR.tools.extend(e.attributes,a.attributes), +d&&e.addStyle(d),delete a.name):(d=(d||"").split(";"),b.color&&("#000000"!=b.color&&d.push("color:"+b.color),delete b.color),b.face&&(d.push("font-family:"+b.face),delete b.face),b.size&&(d.push("font-size:"+(3<b.size?"large":3>b.size?"small":"medium")),delete b.size),a.name="span",a.addStyle(d.join(";")))}},span:function(a){if(p(a.parent))return!1;a.filterChildren(c);if(n(a))return delete a.name,null;if(p(a)){var b=a.firstChild(function(a){return a.value||"img"==a.name}),e=(b=b&&(b.value||"l."))&& +b.match(/^(?:[(]?)([^\s]+?)([.)]?)$/);if(e)return b=h(e,b),(a=a.getAncestor("span"))&&/ mso-hide:\s*all|display:\s*none /.test(a.attributes.style)&&(b.attributes["cke:ignored"]=1),b}if(e=(b=a.attributes)&&b.style)b.style=j([["line-height"],[/^font-family$/,null,!o?l(d.font_style,"family"):null],[/^font-size$/,null,!o?l(d.fontSize_style,"size"):null],[/^color$/,null,!o?l(d.colorButton_foreStyle,"color"):null],[/^background-color$/,null,!o?l(d.colorButton_backStyle,"color"):null]])(e,a)||"";b.style|| +delete b.style;CKEDITOR.tools.isEmpty(b)&&delete a.name;return null},b:g(d.coreStyles_bold),i:g(d.coreStyles_italic),u:g(d.coreStyles_underline),s:g(d.coreStyles_strike),sup:g(d.coreStyles_superscript),sub:g(d.coreStyles_subscript),a:function(a){var b=a.attributes;b.name&&b.name.match(/ole_link\d+/i)?delete a.name:b.href&&b.href.match(/^file:\/\/\/[\S]+#/i)&&(b.href=b.href.replace(/^file:\/\/\/[^#]+/i,""))},"cke:listbullet":function(a){a.getAncestor(/h\d/)&&!d.pasteFromWordNumberedHeadingToList&& +delete a.name}},attributeNames:[[/^onmouse(:?out|over)/,""],[/^onload$/,""],[/(?:v|o):\w+/,""],[/^lang/,""]],attributes:{style:j(s?[[/^list-style-type$/,null],[/^margin$|^margin-(?!bottom|top)/,null,function(a,b,c){if(b.name in{p:1,div:1}){b="ltr"==d.contentsLangDirection?"margin-left":"margin-right";if("margin"==c)a=r(c,a,[b])[b];else if(c!=b)return null;if(a&&!D.test(a))return[b,a]}return null}],[/^clear$/],[/^border.*|margin.*|vertical-align|float$/,null,function(a,b){if("img"==b.name)return a}], +[/^width|height$/,null,function(a,b){if(b.name in{table:1,td:1,th:1,img:1})return a}]]:[[/^mso-/],[/-color$/,null,function(a){if("transparent"==a)return!1;if(CKEDITOR.env.gecko)return a.replace(/-moz-use-text-color/g,"transparent")}],[/^margin$/,D],["text-indent","0cm"],["page-break-before"],["tab-stops"],["display","none"],o?[/font-?/]:null],s),width:function(a,c){if(c.name in b.$tableContent)return!1},border:function(a,c){if(c.name in b.$tableContent)return!1},"class":function(a,b){return b.classWhiteList&& +-1!=b.classWhiteList.indexOf(" "+a+" ")?a:!1},bgcolor:i,valign:s?i:function(a,b){b.addStyle("vertical-align",a);return!1}},comment:!CKEDITOR.env.ie?function(a,b){var c=a.match(/<img.*?>/),d=a.match(/^\[if !supportLists\]([\s\S]*?)\[endif\]$/);return d?(d=(c=d[1]||c&&"l.")&&c.match(/>(?:[(]?)([^\s]+?)([.)]?)</),h(d,c)):CKEDITOR.env.gecko&&c?(c=CKEDITOR.htmlParser.fragment.fromHtml(c[0]).children[0],(d=(d=(d=b.previous)&&d.value.match(/<v:imagedata[^>]*o:href=['"](.*?)['"]/))&&d[1])&&(c.attributes.src= +d),c):!1}:i}}},G=function(){this.dataFilter=new CKEDITOR.htmlParser.filter};G.prototype={toHtml:function(a){var a=CKEDITOR.htmlParser.fragment.fromHtml(a),c=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(c,this.dataFilter);return c.getHtml(!0)}};CKEDITOR.cleanWord=function(a,c){a=a.replace(/<!\[([^\]]*?)\]>/g,"<\!--[$1]--\>");CKEDITOR.env.gecko&&(a=a.replace(/(<\!--\[if[^<]*?\])--\>([\S\s]*?)<\!--(\[endif\]--\>)/gi,"$1$2$3"));CKEDITOR.env.webkit&&(a=a.replace(/(class="MsoListParagraph[^>]+><\!--\[if !supportLists\]--\>)([^<]+<span[^<]+<\/span>)(<\!--\[endif\]--\>)/gi, +"$1<span>$2</span>$3"));var b=new G,f=b.dataFilter;f.addRules(CKEDITOR.plugins.pastefromword.getRules(c,f));c.fire("beforeCleanWord",{filter:f});try{a=b.toHtml(a)}catch(d){c.showNotification(c.lang.pastefromword.error)}a=a.replace(/cke:.*?".*?"/g,"");a=a.replace(/style=""/g,"");return a=a.replace(/<span>/g,"")}})(); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/removeRedundantNBSP/plugin.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/removeRedundantNBSP/plugin.js new file mode 100755 index 0000000000..a071634dc5 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/removeRedundantNBSP/plugin.js @@ -0,0 +1,29 @@ +/* + * Remove &nbsp; entities which were inserted ie. when removing a space and + * immediately inputting a space. + * + * NB: We could also set config.basicEntities to false, but this is stongly + * adviced against since this also does not turn ie. < into &lt;. + * @link http://stackoverflow.com/a/16468264/328272 + * + * Based on StackOverflow answer. + * @link http://stackoverflow.com/a/14549010/328272 + */ +CKEDITOR.plugins.add('removeRedundantNBSP', { + afterInit: function(editor) { + var config = editor.config, + dataProcessor = editor.dataProcessor, + htmlFilter = dataProcessor && dataProcessor.htmlFilter; + + if (htmlFilter) { + htmlFilter.addRules({ + text: function(text) { + return text.replace(/(\w)&nbsp;/gi, '$1 '); + } + }, { + applyToAll: true, + excludeNestedEditable: true + }); + } + } +}); diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt new file mode 100755 index 0000000000..0fabceaf49 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt @@ -0,0 +1,20 @@ +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license + +cs.js Found: 118 Missing: 0 +cy.js Found: 118 Missing: 0 +de.js Found: 118 Missing: 0 +el.js Found: 16 Missing: 102 +eo.js Found: 118 Missing: 0 +et.js Found: 31 Missing: 87 +fa.js Found: 24 Missing: 94 +fi.js Found: 23 Missing: 95 +fr.js Found: 118 Missing: 0 +hr.js Found: 23 Missing: 95 +it.js Found: 118 Missing: 0 +nb.js Found: 118 Missing: 0 +nl.js Found: 118 Missing: 0 +no.js Found: 118 Missing: 0 +tr.js Found: 118 Missing: 0 +ug.js Found: 39 Missing: 79 +zh-cn.js Found: 118 Missing: 0 diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/af.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/af.js new file mode 100755 index 0000000000..bd98e3c9bb --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/af.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","af",{euro:"Euroteken",lsquo:"Linker enkelkwotasie",rsquo:"Regter enkelkwotasie",ldquo:"Linker dubbelkwotasie",rdquo:"Regter dubbelkwotasie",ndash:"Kortkoppelteken",mdash:"Langkoppelteken",iexcl:"Omgekeerdeuitroepteken",cent:"Centteken",pound:"Pondteken",curren:"Geldeenheidteken",yen:"Yenteken",brvbar:"Gebreekte balk",sect:"Afdeelingsteken",uml:"Deelteken",copy:"Kopieregteken",ordf:"Vroulikekenteken",laquo:"Linkgeoorienteerde aanhaalingsteken",not:"Verbodeteken", +reg:"Regestrasieteken",macr:"Lengteteken",deg:"Gradeteken",sup2:"Kwadraatteken",sup3:"Kubiekteken",acute:"Akuutaksentteken",micro:"Mikroteken",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ar.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ar.js new file mode 100755 index 0000000000..fc8742a745 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ar.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ar",{euro:"رمز اليورو",lsquo:"علامة تنصيص فردية علي اليسار",rsquo:"علامة تنصيص فردية علي اليمين",ldquo:"علامة تنصيص مزدوجة علي اليسار",rdquo:"علامة تنصيص مزدوجة علي اليمين",ndash:"En dash",mdash:"Em dash",iexcl:"علامة تعجب مقلوبة",cent:"رمز السنت",pound:"رمز الاسترليني",curren:"رمز العملة",yen:"رمز الين",brvbar:"شريط مقطوع",sect:"رمز القسم",uml:"Diaeresis",copy:"علامة حقوق الطبع",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"ليست علامة",reg:"علامة مسجّلة",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"علامة الإستفهام غير صحيحة",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/bg.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/bg.js new file mode 100755 index 0000000000..453987aeec --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/bg.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","bg",{euro:"Евро знак",lsquo:"Лява маркировка за цитат",rsquo:"Дясна маркировка за цитат",ldquo:"Лява двойна кавичка за цитат",rdquo:"Дясна двойна кавичка за цитат",ndash:"\\\\",mdash:"/",iexcl:"Обърната питанка",cent:"Знак за цент",pound:"Знак за паунд",curren:"Валутен знак",yen:"Знак за йена",brvbar:"Прекъсната линия",sect:"Знак за секция",uml:"Diaeresis",copy:"Знак за Copyright",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ca.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ca.js new file mode 100755 index 0000000000..8782381b92 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ca.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ca",{euro:"Símbol d'euro",lsquo:"Signe de cometa simple esquerra",rsquo:"Signe de cometa simple dreta",ldquo:"Signe de cometa doble esquerra",rdquo:"Signe de cometa doble dreta",ndash:"Guió",mdash:"Guió baix",iexcl:"Signe d'exclamació inversa",cent:"Símbol de percentatge",pound:"Símbol de lliura",curren:"Símbol de moneda",yen:"Símbol de Yen",brvbar:"Barra trencada",sect:"Símbol de secció",uml:"Dièresi",copy:"Símbol de Copyright",ordf:"Indicador ordinal femení", +laquo:"Signe de cometes angulars esquerra",not:"Símbol de negació",reg:"Símbol registrat",macr:"Macron",deg:"Símbol de grau",sup2:"Superíndex dos",sup3:"Superíndex tres",acute:"Accent agut",micro:"Símbol de micro",para:"Símbol de calderó",middot:"Punt volat",cedil:"Ce trencada",sup1:"Superíndex u",ordm:"Indicador ordinal masculí",raquo:"Signe de cometes angulars dreta",frac14:"Fracció vulgar un quart",frac12:"Fracció vulgar una meitat",frac34:"Fracció vulgar tres quarts",iquest:"Símbol d'interrogació invertit", +Agrave:"Lletra majúscula llatina A amb accent greu",Aacute:"Lletra majúscula llatina A amb accent agut",Acirc:"Lletra majúscula llatina A amb circumflex",Atilde:"Lletra majúscula llatina A amb titlla",Auml:"Lletra majúscula llatina A amb dièresi",Aring:"Lletra majúscula llatina A amb anell superior",AElig:"Lletra majúscula llatina Æ",Ccedil:"Lletra majúscula llatina C amb ce trencada",Egrave:"Lletra majúscula llatina E amb accent greu",Eacute:"Lletra majúscula llatina E amb accent agut",Ecirc:"Lletra majúscula llatina E amb circumflex", +Euml:"Lletra majúscula llatina E amb dièresi",Igrave:"Lletra majúscula llatina I amb accent greu",Iacute:"Lletra majúscula llatina I amb accent agut",Icirc:"Lletra majúscula llatina I amb circumflex",Iuml:"Lletra majúscula llatina I amb dièresi",ETH:"Lletra majúscula llatina Eth",Ntilde:"Lletra majúscula llatina N amb titlla",Ograve:"Lletra majúscula llatina O amb accent greu",Oacute:"Lletra majúscula llatina O amb accent agut",Ocirc:"Lletra majúscula llatina O amb circumflex",Otilde:"Lletra majúscula llatina O amb titlla", +Ouml:"Lletra majúscula llatina O amb dièresi",times:"Símbol de multiplicació",Oslash:"Lletra majúscula llatina O amb barra",Ugrave:"Lletra majúscula llatina U amb accent greu",Uacute:"Lletra majúscula llatina U amb accent agut",Ucirc:"Lletra majúscula llatina U amb circumflex",Uuml:"Lletra majúscula llatina U amb dièresi",Yacute:"Lletra majúscula llatina Y amb accent agut",THORN:"Lletra majúscula llatina Thorn",szlig:"Lletra minúscula llatina sharp s",agrave:"Lletra minúscula llatina a amb accent greu", +aacute:"Lletra minúscula llatina a amb accent agut",acirc:"Lletra minúscula llatina a amb circumflex",atilde:"Lletra minúscula llatina a amb titlla",auml:"Lletra minúscula llatina a amb dièresi",aring:"Lletra minúscula llatina a amb anell superior",aelig:"Lletra minúscula llatina æ",ccedil:"Lletra minúscula llatina c amb ce trencada",egrave:"Lletra minúscula llatina e amb accent greu",eacute:"Lletra minúscula llatina e amb accent agut",ecirc:"Lletra minúscula llatina e amb circumflex",euml:"Lletra minúscula llatina e amb dièresi", +igrave:"Lletra minúscula llatina i amb accent greu",iacute:"Lletra minúscula llatina i amb accent agut",icirc:"Lletra minúscula llatina i amb circumflex",iuml:"Lletra minúscula llatina i amb dièresi",eth:"Lletra minúscula llatina eth",ntilde:"Lletra minúscula llatina n amb titlla",ograve:"Lletra minúscula llatina o amb accent greu",oacute:"Lletra minúscula llatina o amb accent agut",ocirc:"Lletra minúscula llatina o amb circumflex",otilde:"Lletra minúscula llatina o amb titlla",ouml:"Lletra minúscula llatina o amb dièresi", +divide:"Símbol de divisió",oslash:"Lletra minúscula llatina o amb barra",ugrave:"Lletra minúscula llatina u amb accent greu",uacute:"Lletra minúscula llatina u amb accent agut",ucirc:"Lletra minúscula llatina u amb circumflex",uuml:"Lletra minúscula llatina u amb dièresi",yacute:"Lletra minúscula llatina y amb accent agut",thorn:"Lletra minúscula llatina thorn",yuml:"Lletra minúscula llatina y amb dièresi",OElig:"Lligadura majúscula llatina OE",oelig:"Lligadura minúscula llatina oe",372:"Lletra majúscula llatina W amb circumflex", +374:"Lletra majúscula llatina Y amb circumflex",373:"Lletra minúscula llatina w amb circumflex",375:"Lletra minúscula llatina y amb circumflex",sbquo:"Signe de cita simple baixa-9",8219:"Signe de cita simple alta-invertida-9",bdquo:"Signe de cita doble baixa-9",hellip:"Punts suspensius",trade:"Símbol de marca registrada",9658:"Punter negre apuntant cap a la dreta",bull:"Vinyeta",rarr:"Fletxa cap a la dreta",rArr:"Doble fletxa cap a la dreta",hArr:"Doble fletxa esquerra dreta",diams:"Vestit negre diamant", +asymp:"Gairebé igual a"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/cs.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/cs.js new file mode 100755 index 0000000000..da2659281f --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/cs.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","cs",{euro:"Znak eura",lsquo:"Počáteční uvozovka jednoduchá",rsquo:"Koncová uvozovka jednoduchá",ldquo:"Počáteční uvozovka dvojitá",rdquo:"Koncová uvozovka dvojitá",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrácený vykřičník",cent:"Znak centu",pound:"Znak libry",curren:"Znak měny",yen:"Znak jenu",brvbar:"Přerušená svislá čára",sect:"Znak oddílu",uml:"Přehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených uvozovek vlevo", +not:"Logistický zápor",reg:"Znak registrace",macr:"Pomlčka nad",deg:"Znak stupně",sup2:"Dvojka jako horní index",sup3:"Trojka jako horní index",acute:"Čárka nad vpravo",micro:"Znak mikro",para:"Znak odstavce",middot:"Tečka uprostřed",cedil:"Ocásek vlevo",sup1:"Jednička jako horní index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených uvozovek vpravo",frac14:"Obyčejný zlomek jedna čtvrtina",frac12:"Obyčejný zlomek jedna polovina",frac34:"Obyčejný zlomek tři čtvrtiny",iquest:"Znak obráceného otazníku", +Agrave:"Velké písmeno latinky A s čárkou nad vlevo",Aacute:"Velké písmeno latinky A s čárkou nad vpravo",Acirc:"Velké písmeno latinky A s vokáněm",Atilde:"Velké písmeno latinky A s tildou",Auml:"Velké písmeno latinky A s dvěma tečkami",Aring:"Velké písmeno latinky A s kroužkem nad",AElig:"Velké písmeno latinky Ae",Ccedil:"Velké písmeno latinky C s ocáskem vlevo",Egrave:"Velké písmeno latinky E s čárkou nad vlevo",Eacute:"Velké písmeno latinky E s čárkou nad vpravo",Ecirc:"Velké písmeno latinky E s vokáněm", +Euml:"Velké písmeno latinky E s dvěma tečkami",Igrave:"Velké písmeno latinky I s čárkou nad vlevo",Iacute:"Velké písmeno latinky I s čárkou nad vpravo",Icirc:"Velké písmeno latinky I s vokáněm",Iuml:"Velké písmeno latinky I s dvěma tečkami",ETH:"Velké písmeno latinky Eth",Ntilde:"Velké písmeno latinky N s tildou",Ograve:"Velké písmeno latinky O s čárkou nad vlevo",Oacute:"Velké písmeno latinky O s čárkou nad vpravo",Ocirc:"Velké písmeno latinky O s vokáněm",Otilde:"Velké písmeno latinky O s tildou", +Ouml:"Velké písmeno latinky O s dvěma tečkami",times:"Znak násobení",Oslash:"Velké písmeno latinky O přeškrtnuté",Ugrave:"Velké písmeno latinky U s čárkou nad vlevo",Uacute:"Velké písmeno latinky U s čárkou nad vpravo",Ucirc:"Velké písmeno latinky U s vokáněm",Uuml:"Velké písmeno latinky U s dvěma tečkami",Yacute:"Velké písmeno latinky Y s čárkou nad vpravo",THORN:"Velké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s čárkou nad vlevo",aacute:"Malé písmeno latinky a s čárkou nad vpravo", +acirc:"Malé písmeno latinky a s vokáněm",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvěma tečkami",aring:"Malé písmeno latinky a s kroužkem nad",aelig:"Malé písmeno latinky ae",ccedil:"Malé písmeno latinky c s ocáskem vlevo",egrave:"Malé písmeno latinky e s čárkou nad vlevo",eacute:"Malé písmeno latinky e s čárkou nad vpravo",ecirc:"Malé písmeno latinky e s vokáněm",euml:"Malé písmeno latinky e s dvěma tečkami",igrave:"Malé písmeno latinky i s čárkou nad vlevo",iacute:"Malé písmeno latinky i s čárkou nad vpravo", +icirc:"Malé písmeno latinky i s vokáněm",iuml:"Malé písmeno latinky i s dvěma tečkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s čárkou nad vlevo",oacute:"Malé písmeno latinky o s čárkou nad vpravo",ocirc:"Malé písmeno latinky o s vokáněm",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvěma tečkami",divide:"Znak dělení",oslash:"Malé písmeno latinky o přeškrtnuté",ugrave:"Malé písmeno latinky u s čárkou nad vlevo", +uacute:"Malé písmeno latinky u s čárkou nad vpravo",ucirc:"Malé písmeno latinky u s vokáněm",uuml:"Malé písmeno latinky u s dvěma tečkami",yacute:"Malé písmeno latinky y s čárkou nad vpravo",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvěma tečkami",OElig:"Velká ligatura latinky OE",oelig:"Malá ligatura latinky OE",372:"Velké písmeno latinky W s vokáněm",374:"Velké písmeno latinky Y s vokáněm",373:"Malé písmeno latinky w s vokáněm",375:"Malé písmeno latinky y s vokáněm",sbquo:"Dolní 9 uvozovka jednoduchá", +8219:"Horní obrácená 9 uvozovka jednoduchá",bdquo:"Dolní 9 uvozovka dvojitá",hellip:"Trojtečkový úvod",trade:"Obchodní značka",9658:"Černý ukazatel směřující vpravo",bull:"Kolečko",rarr:"Šipka vpravo",rArr:"Dvojitá šipka vpravo",hArr:"Dvojitá šipka vlevo a vpravo",diams:"Černé piky",asymp:"Téměř se rovná"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/cy.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/cy.js new file mode 100755 index 0000000000..d45037477e --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/cy.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","cy",{euro:"Arwydd yr Ewro",lsquo:"Dyfynnod chwith unigol",rsquo:"Dyfynnod dde unigol",ldquo:"Dyfynnod chwith dwbl",rdquo:"Dyfynnod dde dwbl",ndash:"Cysylltnod en",mdash:"Cysylltnod em",iexcl:"Ebychnod gwrthdro",cent:"Arwydd sent",pound:"Arwydd punt",curren:"Arwydd arian cyfred",yen:"Arwydd yen",brvbar:"Bar toriedig",sect:"Arwydd adran",uml:"Didolnod",copy:"Arwydd hawlfraint",ordf:"Dangosydd benywaidd",laquo:"Dyfynnod dwbl ar ongl i'r chwith",not:"Arwydd Nid", +reg:"Arwydd cofrestredig",macr:"Macron",deg:"Arwydd gradd",sup2:"Dau uwchsgript",sup3:"Tri uwchsgript",acute:"Acen ddyrchafedig",micro:"Arwydd micro",para:"Arwydd pilcrow",middot:"Dot canol",cedil:"Sedila",sup1:"Un uwchsgript",ordm:"Dangosydd gwrywaidd",raquo:"Dyfynnod dwbl ar ongl i'r dde",frac14:"Ffracsiwn cyffredin un cwarter",frac12:"Ffracsiwn cyffredin un hanner",frac34:"Ffracsiwn cyffredin tri chwarter",iquest:"Marc cwestiwn gwrthdroëdig",Agrave:"Priflythyren A Lladinaidd gydag acen ddisgynedig", +Aacute:"Priflythyren A Lladinaidd gydag acen ddyrchafedig",Acirc:"Priflythyren A Lladinaidd gydag acen grom",Atilde:"Priflythyren A Lladinaidd gyda thild",Auml:"Priflythyren A Lladinaidd gyda didolnod",Aring:"Priflythyren A Lladinaidd gyda chylch uwchben",AElig:"Priflythyren Æ Lladinaidd",Ccedil:"Priflythyren C Lladinaidd gyda sedila",Egrave:"Priflythyren E Lladinaidd gydag acen ddisgynedig",Eacute:"Priflythyren E Lladinaidd gydag acen ddyrchafedig",Ecirc:"Priflythyren E Lladinaidd gydag acen grom", +Euml:"Priflythyren E Lladinaidd gyda didolnod",Igrave:"Priflythyren I Lladinaidd gydag acen ddisgynedig",Iacute:"Priflythyren I Lladinaidd gydag acen ddyrchafedig",Icirc:"Priflythyren I Lladinaidd gydag acen grom",Iuml:"Priflythyren I Lladinaidd gyda didolnod",ETH:"Priflythyren Eth",Ntilde:"Priflythyren N Lladinaidd gyda thild",Ograve:"Priflythyren O Lladinaidd gydag acen ddisgynedig",Oacute:"Priflythyren O Lladinaidd gydag acen ddyrchafedig",Ocirc:"Priflythyren O Lladinaidd gydag acen grom",Otilde:"Priflythyren O Lladinaidd gyda thild", +Ouml:"Priflythyren O Lladinaidd gyda didolnod",times:"Arwydd lluosi",Oslash:"Priflythyren O Lladinaidd gyda strôc",Ugrave:"Priflythyren U Lladinaidd gydag acen ddisgynedig",Uacute:"Priflythyren U Lladinaidd gydag acen ddyrchafedig",Ucirc:"Priflythyren U Lladinaidd gydag acen grom",Uuml:"Priflythyren U Lladinaidd gyda didolnod",Yacute:"Priflythyren Y Lladinaidd gydag acen ddyrchafedig",THORN:"Priflythyren Thorn",szlig:"Llythyren s fach Lladinaidd siarp ",agrave:"Llythyren a fach Lladinaidd gydag acen ddisgynedig", +aacute:"Llythyren a fach Lladinaidd gydag acen ddyrchafedig",acirc:"Llythyren a fach Lladinaidd gydag acen grom",atilde:"Llythyren a fach Lladinaidd gyda thild",auml:"Llythyren a fach Lladinaidd gyda didolnod",aring:"Llythyren a fach Lladinaidd gyda chylch uwchben",aelig:"Llythyren æ fach Lladinaidd",ccedil:"Llythyren c fach Lladinaidd gyda sedila",egrave:"Llythyren e fach Lladinaidd gydag acen ddisgynedig",eacute:"Llythyren e fach Lladinaidd gydag acen ddyrchafedig",ecirc:"Llythyren e fach Lladinaidd gydag acen grom", +euml:"Llythyren e fach Lladinaidd gyda didolnod",igrave:"Llythyren i fach Lladinaidd gydag acen ddisgynedig",iacute:"Llythyren i fach Lladinaidd gydag acen ddyrchafedig",icirc:"Llythyren i fach Lladinaidd gydag acen grom",iuml:"Llythyren i fach Lladinaidd gyda didolnod",eth:"Llythyren eth fach",ntilde:"Llythyren n fach Lladinaidd gyda thild",ograve:"Llythyren o fach Lladinaidd gydag acen ddisgynedig",oacute:"Llythyren o fach Lladinaidd gydag acen ddyrchafedig",ocirc:"Llythyren o fach Lladinaidd gydag acen grom", +otilde:"Llythyren o fach Lladinaidd gyda thild",ouml:"Llythyren o fach Lladinaidd gyda didolnod",divide:"Arwydd rhannu",oslash:"Llythyren o fach Lladinaidd gyda strôc",ugrave:"Llythyren u fach Lladinaidd gydag acen ddisgynedig",uacute:"Llythyren u fach Lladinaidd gydag acen ddyrchafedig",ucirc:"Llythyren u fach Lladinaidd gydag acen grom",uuml:"Llythyren u fach Lladinaidd gyda didolnod",yacute:"Llythyren y fach Lladinaidd gydag acen ddisgynedig",thorn:"Llythyren o fach Lladinaidd gyda strôc",yuml:"Llythyren y fach Lladinaidd gyda didolnod", +OElig:"Priflythyren cwlwm OE Lladinaidd ",oelig:"Priflythyren cwlwm oe Lladinaidd ",372:"Priflythyren W gydag acen grom",374:"Priflythyren Y gydag acen grom",373:"Llythyren w fach gydag acen grom",375:"Llythyren y fach gydag acen grom",sbquo:"Dyfynnod sengl 9-isel",8219:"Dyfynnod sengl 9-uchel cildro",bdquo:"Dyfynnod dwbl 9-isel",hellip:"Coll geiriau llorweddol",trade:"Arwydd marc masnachol",9658:"Pwyntydd du i'r dde",bull:"Bwled",rarr:"Saeth i'r dde",rArr:"Saeth ddwbl i'r dde",hArr:"Saeth ddwbl i'r chwith", +diams:"Siwt diemwnt du",asymp:"Bron yn hafal iddo"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/da.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/da.js new file mode 100755 index 0000000000..f70d3ce479 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/da.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","da",{euro:"Euro-tegn",lsquo:"Venstre enkelt anførselstegn",rsquo:"Højre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Højre dobbelt anførselstegn",ndash:"Bindestreg",mdash:"Tankestreg",iexcl:"Omvendt udråbstegn",cent:"Cent-tegn",pound:"Pund-tegn",curren:"Kurs-tegn",yen:"Yen-tegn",brvbar:"Brudt streg",sect:"Paragraftegn",uml:"Umlaut",copy:"Copyright-tegn",ordf:"Feminin ordinal indikator",laquo:"Venstre dobbel citations-vinkel",not:"Negation", +reg:"Registreret varemærke tegn",macr:"Macron",deg:"Grad-tegn",sup2:"Superscript to",sup3:"Superscript tre",acute:"Prim-tegn",micro:"Mikro-tegn",para:"Pilcrow-tegn",middot:"Punkt-tegn",cedil:"Cedille",sup1:"Superscript et",ordm:"Maskulin ordinal indikator",raquo:"Højre dobbel citations-vinkel",frac14:"En fjerdedel",frac12:"En halv",frac34:"En tredjedel",iquest:"Omvendt udråbstegn",Agrave:"Stort A med accent grave",Aacute:"Stort A med accent aigu",Acirc:"Stort A med cirkumfleks",Atilde:"Stort A med tilde", +Auml:"Stort A med umlaut",Aring:"Stort Å",AElig:"Stort Æ",Ccedil:"Stort C med cedille",Egrave:"Stort E med accent grave",Eacute:"Stort E med accent aigu",Ecirc:"Stort E med cirkumfleks",Euml:"Stort E med umlaut",Igrave:"Stort I med accent grave",Iacute:"Stort I med accent aigu",Icirc:"Stort I med cirkumfleks",Iuml:"Stort I med umlaut",ETH:"Stort Ð (edd)",Ntilde:"Stort N med tilde",Ograve:"Stort O med accent grave",Oacute:"Stort O med accent aigu",Ocirc:"Stort O med cirkumfleks",Otilde:"Stort O med tilde", +Ouml:"Stort O med umlaut",times:"Gange-tegn",Oslash:"Stort Ø",Ugrave:"Stort U med accent grave",Uacute:"Stort U med accent aigu",Ucirc:"Stort U med cirkumfleks",Uuml:"Stort U med umlaut",Yacute:"Stort Y med accent aigu",THORN:"Stort Thorn",szlig:"Lille eszett",agrave:"Lille a med accent grave",aacute:"Lille a med accent aigu",acirc:"Lille a med cirkumfleks",atilde:"Lille a med tilde",auml:"Lille a med umlaut",aring:"Lilla å",aelig:"Lille æ",ccedil:"Lille c med cedille",egrave:"Lille e med accent grave", +eacute:"Lille e med accent aigu",ecirc:"Lille e med cirkumfleks",euml:"Lille e med umlaut",igrave:"Lille i med accent grave",iacute:"Lille i med accent aigu",icirc:"Lille i med cirkumfleks",iuml:"Lille i med umlaut",eth:"Lille ð (edd)",ntilde:"Lille n med tilde",ograve:"Lille o med accent grave",oacute:"Lille o med accent aigu",ocirc:"Lille o med cirkumfleks",otilde:"Lille o med tilde",ouml:"Lille o med umlaut",divide:"Divisions-tegn",oslash:"Lille ø",ugrave:"Lille u med accent grave",uacute:"Lille u med accent aigu", +ucirc:"Lille u med cirkumfleks",uuml:"Lille u med umlaut",yacute:"Lille y med accent aigu",thorn:"Lille thorn",yuml:"Lille y med umlaut",OElig:"Stort Æ",oelig:"Lille æ",372:"Stort W med cirkumfleks",374:"Stort Y med cirkumfleks",373:"Lille w med cirkumfleks",375:"Lille y med cirkumfleks",sbquo:"Lavt enkelt 9-komma citationstegn",8219:"Højt enkelt 9-komma citationstegn",bdquo:"Dobbelt 9-komma citationstegn",hellip:"Tre horizontale prikker",trade:"Varemærke-tegn",9658:"Sort højre pil",bull:"Punkt", +rarr:"Højre pil",rArr:"Højre dobbelt pil",hArr:"Venstre højre dobbelt pil",diams:"Sort diamant",asymp:"Næsten lig med"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/de.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/de.js new file mode 100755 index 0000000000..e35ed457d3 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/de.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","de",{euro:"Euro Zeichen",lsquo:"Hochkomma links",rsquo:"Hochkomma rechts",ldquo:"Anführungszeichen links",rdquo:"Anführungszeichen rechts",ndash:"Kleiner Strich",mdash:"Mittlerer Strich",iexcl:"Invertiertes Ausrufezeichen",cent:"Cent-Zeichen",pound:"Pfund-Zeichen",curren:"Währungszeichen",yen:"Yen",brvbar:"Gestrichelte Linie",sect:"Paragrafenzeichen",uml:"Diäresis",copy:"Copyright-Zeichen",ordf:"Feminine ordinal Anzeige",laquo:"Nach links zeigenden Doppel-Winkel Anführungszeichen", +not:"Not-Zeichen",reg:"Registriert-Zeichen",macr:"Längezeichen",deg:"Grad-Zeichen",sup2:"Hoch 2",sup3:"Hoch 3",acute:"Akzentzeichen ",micro:"Mikro-Zeichen",para:"Pilcrow-Zeichen",middot:"Mittelpunkt",cedil:"Cedilla",sup1:"Hoch 1",ordm:"Männliche Ordnungszahl Anzeige",raquo:"Nach rechts zeigenden Doppel-Winkel Anführungszeichen",frac14:"ein Viertel",frac12:"Hälfte",frac34:"Dreiviertel",iquest:"Umgekehrtes Fragezeichen",Agrave:"Lateinischer Buchstabe A mit AkzentGrave",Aacute:"Lateinischer Buchstabe A mit Akutakzent", +Acirc:"Lateinischer Buchstabe A mit Zirkumflex",Atilde:"Lateinischer Buchstabe A mit Tilde",Auml:"Lateinischer Buchstabe A mit Trema",Aring:"Lateinischer Buchstabe A mit Ring oben",AElig:"Lateinischer Buchstabe Æ",Ccedil:"Lateinischer Buchstabe C mit Cedille",Egrave:"Lateinischer Buchstabe E mit AkzentGrave",Eacute:"Lateinischer Buchstabe E mit Akutakzent",Ecirc:"Lateinischer Buchstabe E mit Zirkumflex",Euml:"Lateinischer Buchstabe E Trema",Igrave:"Lateinischer Buchstabe I mit AkzentGrave",Iacute:"Lateinischer Buchstabe I mit Akutakzent", +Icirc:"Lateinischer Buchstabe I mit Zirkumflex",Iuml:"Lateinischer Buchstabe I mit Trema",ETH:"Lateinischer Buchstabe Eth",Ntilde:"Lateinischer Buchstabe N mit Tilde",Ograve:"Lateinischer Buchstabe O mit AkzentGrave",Oacute:"Lateinischer Buchstabe O mit Akutakzent",Ocirc:"Lateinischer Buchstabe O mit Zirkumflex",Otilde:"Lateinischer Buchstabe O mit Tilde",Ouml:"Lateinischer Buchstabe O mit Trema",times:"Multiplikation",Oslash:"Lateinischer Buchstabe O durchgestrichen",Ugrave:"Lateinischer Buchstabe U mit Akzentgrave", +Uacute:"Lateinischer Buchstabe U mit Akutakzent",Ucirc:"Lateinischer Buchstabe U mit Zirkumflex",Uuml:"Lateinischer Buchstabe a mit Trema",Yacute:"Lateinischer Buchstabe a mit Akzent",THORN:"Lateinischer Buchstabe mit Dorn",szlig:"Kleiner lateinischer Buchstabe scharfe s",agrave:"Kleiner lateinischer Buchstabe a mit Accent grave",aacute:"Kleiner lateinischer Buchstabe a mit Akut",acirc:"Lateinischer Buchstabe a mit Zirkumflex",atilde:"Lateinischer Buchstabe a mit Tilde",auml:"Kleiner lateinischer Buchstabe a mit Trema", +aring:"Kleiner lateinischer Buchstabe a mit Ring oben",aelig:"Lateinischer Buchstabe æ",ccedil:"Kleiner lateinischer Buchstabe c mit Cedille",egrave:"Kleiner lateinischer Buchstabe e mit Accent grave",eacute:"Kleiner lateinischer Buchstabe e mit Akut",ecirc:"Kleiner lateinischer Buchstabe e mit Zirkumflex",euml:"Kleiner lateinischer Buchstabe e mit Trema",igrave:"Kleiner lateinischer Buchstabe i mit AkzentGrave",iacute:"Kleiner lateinischer Buchstabe i mit Akzent",icirc:"Kleiner lateinischer Buchstabe i mit Zirkumflex", +iuml:"Kleiner lateinischer Buchstabe i mit Trema",eth:"Kleiner lateinischer Buchstabe eth",ntilde:"Kleiner lateinischer Buchstabe n mit Tilde",ograve:"Kleiner lateinischer Buchstabe o mit Accent grave",oacute:"Kleiner lateinischer Buchstabe o mit Akzent",ocirc:"Kleiner lateinischer Buchstabe o mit Zirkumflex",otilde:"Lateinischer Buchstabe i mit Tilde",ouml:"Kleiner lateinischer Buchstabe o mit Trema",divide:"Divisionszeichen",oslash:"Kleiner lateinischer Buchstabe o durchgestrichen",ugrave:"Kleiner lateinischer Buchstabe u mit Accent grave", +uacute:"Kleiner lateinischer Buchstabe u mit Akut",ucirc:"Kleiner lateinischer Buchstabe u mit Zirkumflex",uuml:"Kleiner lateinischer Buchstabe u mit Trema",yacute:"Kleiner lateinischer Buchstabe y mit Akut",thorn:"Kleiner lateinischer Buchstabe Dorn",yuml:"Kleiner lateinischer Buchstabe y mit Trema",OElig:"Lateinischer Buchstabe Ligatur OE",oelig:"Kleiner lateinischer Buchstabe Ligatur OE",372:"Lateinischer Buchstabe W mit Zirkumflex",374:"Lateinischer Buchstabe Y mit Zirkumflex",373:"Kleiner lateinischer Buchstabe w mit Zirkumflex", +375:"Kleiner lateinischer Buchstabe y mit Zirkumflex",sbquo:"Tiefergestelltes Komma",8219:"Rumgedrehtes Komma",bdquo:"Doppeltes Anführungszeichen unten",hellip:"horizontale Auslassungspunkte",trade:"Handelszeichen",9658:"Dreickspfeil rechts",bull:"Bullet",rarr:"Pfeil rechts",rArr:"Doppelpfeil rechts",hArr:"Doppelpfeil links",diams:"Karo",asymp:"Ungefähr"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/el.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/el.js new file mode 100755 index 0000000000..bf979bda4c --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/el.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","el",{euro:"Σύμβολο Ευρώ",lsquo:"Αριστερός χαρακτήρας μονού εισαγωγικού",rsquo:"Δεξιός χαρακτήρας μονού εισαγωγικού",ldquo:"Αριστερός χαρακτήρας ευθύγραμμων εισαγωγικών",rdquo:"Δεξιός χαρακτήρας ευθύγραμμων εισαγωγικών",ndash:"Παύλα en",mdash:"Παύλα em",iexcl:"Ανάποδο θαυμαστικό",cent:"Σύμβολο σεντ",pound:"Σύμβολο λίρας",curren:"Σύμβολο συναλλαγματικής μονάδας",yen:"Σύμβολο Γιεν",brvbar:"Σπασμένη μπάρα",sect:"Σύμβολο τμήματος",uml:"Διαίρεση",copy:"Σύμβολο πνευματικών δικαιωμάτων", +ordf:"Θηλυκός τακτικός δείκτης",laquo:"Γωνιώδη εισαγωγικά αριστερής κατάδειξης",not:"Σύμβολο άρνησης",reg:"Σύμβολο σημάτων κατατεθέν",macr:"Μακρόν",deg:"Σύμβολο βαθμού",sup2:"Εκτεθειμένο δύο",sup3:"Εκτεθειμένο τρία",acute:"Οξεία",micro:"Σύμβολο μικρού",para:"Σύμβολο παραγράφου",middot:"Μέση τελεία",cedil:"Υπογεγραμμένη",sup1:"Εκτεθειμένο ένα",ordm:"Αρσενικός τακτικός δείκτης",raquo:"Γωνιώδη εισαγωγικά δεξιάς κατάδειξης",frac14:"Γνήσιο κλάσμα ενός τετάρτου",frac12:"Γνήσιο κλάσμα ενός δεύτερου",frac34:"Γνήσιο κλάσμα τριών τετάρτων", +iquest:"Ανάποδο θαυμαστικό",Agrave:"Λατινικό κεφαλαίο γράμμα A με βαρεία",Aacute:"Λατινικό κεφαλαίο γράμμα A με οξεία",Acirc:"Λατινικό κεφαλαίο γράμμα A με περισπωμένη",Atilde:"Λατινικό κεφαλαίο γράμμα A με περισπωμένη",Auml:"Λατινικό κεφαλαίο γράμμα A με διαλυτικά",Aring:"Λατινικό κεφαλαίο γράμμα A με δακτύλιο επάνω",AElig:"Λατινικό κεφαλαίο γράμμα Æ",Ccedil:"Λατινικό κεφαλαίο γράμμα C με υπογεγραμμένη",Egrave:"Λατινικό κεφαλαίο γράμμα E με βαρεία",Eacute:"Λατινικό κεφαλαίο γράμμα E με οξεία",Ecirc:"Λατινικό κεφαλαίο γράμμα Ε με περισπωμένη ", +Euml:"Λατινικό κεφαλαίο γράμμα Ε με διαλυτικά",Igrave:"Λατινικό κεφαλαίο γράμμα I με βαρεία",Iacute:"Λατινικό κεφαλαίο γράμμα I με οξεία",Icirc:"Λατινικό κεφαλαίο γράμμα I με περισπωμένη",Iuml:"Λατινικό κεφαλαίο γράμμα I με διαλυτικά ",ETH:"Λατινικό κεφαλαίο γράμμα Eth",Ntilde:"Λατινικό κεφαλαίο γράμμα N με περισπωμένη",Ograve:"Λατινικό κεφαλαίο γράμμα O με βαρεία",Oacute:"Λατινικό κεφαλαίο γράμμα O με οξεία",Ocirc:"Λατινικό κεφαλαίο γράμμα O με περισπωμένη ",Otilde:"Λατινικό κεφαλαίο γράμμα O με περισπωμένη", +Ouml:"Λατινικό κεφαλαίο γράμμα O με διαλυτικά",times:"Σύμβολο πολλαπλασιασμού",Oslash:"Λατινικό κεφαλαίο γράμμα O με μολυβιά",Ugrave:"Λατινικό κεφαλαίο γράμμα U με βαρεία",Uacute:"Λατινικό κεφαλαίο γράμμα U με οξεία",Ucirc:"Λατινικό κεφαλαίο γράμμα U με περισπωμένη",Uuml:"Λατινικό κεφαλαίο γράμμα U με διαλυτικά",Yacute:"Λατινικό κεφαλαίο γράμμα Y με οξεία",THORN:"Λατινικό κεφαλαίο γράμμα Thorn",szlig:"Λατινικό μικρό γράμμα απότομο s",agrave:"Λατινικό μικρό γράμμα a με βαρεία",aacute:"Λατινικό μικρό γράμμα a με οξεία", +acirc:"Λατινικό μικρό γράμμα a με περισπωμένη",atilde:"Λατινικό μικρό γράμμα a με περισπωμένη",auml:"Λατινικό μικρό γράμμα a με διαλυτικά",aring:"Λατινικό μικρό γράμμα a με δακτύλιο πάνω",aelig:"Λατινικό μικρό γράμμα æ",ccedil:"Λατινικό μικρό γράμμα c με υπογεγραμμένη",egrave:"Λατινικό μικρό γράμμα ε με βαρεία",eacute:"Λατινικό μικρό γράμμα e με οξεία",ecirc:"Λατινικό μικρό γράμμα e με περισπωμένη",euml:"Λατινικό μικρό γράμμα e με διαλυτικά",igrave:"Λατινικό μικρό γράμμα i με βαρεία",iacute:"Λατινικό μικρό γράμμα i με οξεία", +icirc:"Λατινικό μικρό γράμμα i με περισπωμένη",iuml:"Λατινικό μικρό γράμμα i με διαλυτικά",eth:"Λατινικό μικρό γράμμα eth",ntilde:"Λατινικό μικρό γράμμα n με περισπωμένη",ograve:"Λατινικό μικρό γράμμα o με βαρεία",oacute:"Λατινικό μικρό γράμμα o με οξεία ",ocirc:"Λατινικό πεζό γράμμα o με περισπωμένη",otilde:"Λατινικό μικρό γράμμα o με περισπωμένη ",ouml:"Λατινικό μικρό γράμμα o με διαλυτικά",divide:"Σύμβολο διαίρεσης",oslash:"Λατινικό μικρό γράμμα o με περισπωμένη",ugrave:"Λατινικό μικρό γράμμα u με βαρεία", +uacute:"Λατινικό μικρό γράμμα u με οξεία",ucirc:"Λατινικό μικρό γράμμα u με περισπωμένη",uuml:"Λατινικό μικρό γράμμα u με διαλυτικά",yacute:"Λατινικό μικρό γράμμα y με οξεία",thorn:"Λατινικό μικρό γράμμα thorn",yuml:"Λατινικό μικρό γράμμα y με διαλυτικά",OElig:"Λατινικό κεφαλαίο σύμπλεγμα ΟΕ",oelig:"Λατινικό μικρό σύμπλεγμα oe",372:"Λατινικό κεφαλαίο γράμμα W με περισπωμένη",374:"Λατινικό κεφαλαίο γράμμα Y με περισπωμένη",373:"Λατινικό μικρό γράμμα w με περισπωμένη",375:"Λατινικό μικρό γράμμα y με περισπωμένη", +sbquo:"Ενιαίο χαμηλο -9 εισαγωγικό ",8219:"Ενιαίο υψηλο ανεστραμμένο-9 εισαγωγικό ",bdquo:"Διπλό χαμηλό-9 εισαγωγικό ",hellip:"Οριζόντια αποσιωπητικά",trade:"Σύμβολο εμπορικού κατατεθέν",9658:"Μαύρος δείκτης που δείχνει προς τα δεξιά",bull:"Κουκκίδα",rarr:"Δεξί βελάκι",rArr:"Διπλό δεξί βελάκι",hArr:"Διπλό βελάκι αριστερά-δεξιά",diams:"Μαύρο διαμάντι",asymp:"Σχεδόν ίσο με"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js new file mode 100755 index 0000000000..f969aa552d --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","en-gb",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/en.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/en.js new file mode 100755 index 0000000000..01bbe0edb8 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/en.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","en",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/eo.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/eo.js new file mode 100755 index 0000000000..76507e3ee1 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/eo.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","eo",{euro:"Eŭrosigno",lsquo:"Supra 6-citilo",rsquo:"Supra 9-citilo",ldquo:"Supra 66-citilo",rdquo:"Supra 99-citilo",ndash:"Streketo",mdash:"Substreko",iexcl:"Renversita krisigno",cent:"Cendosigno",pound:"Pundosigno",curren:"Monersigno",yen:"Enosigno",brvbar:"Rompita vertikala streko",sect:"Kurba paragrafo",uml:"Tremao",copy:"Kopirajtosigno",ordf:"Adjektiva numerfinaĵo",laquo:"Duobla malplio-citilo",not:"Negohoko",reg:"Registrita marko",macr:"Superstreko",deg:"Gradosigno", +sup2:"Supra indico 2",sup3:"Supra indico 3",acute:"Dekstra korno",micro:"Mikrosigno",para:"Rekta paragrafo",middot:"Meza punkto",cedil:"Zoeto",sup1:"Supra indico 1",ordm:"Substantiva numerfinaĵo",raquo:"Duobla plio-citilo",frac14:"Kvaronosigno",frac12:"Duonosigno",frac34:"Trikvaronosigno",iquest:"renversita demandosigno",Agrave:"Latina ĉeflitero A kun liva korno",Aacute:"Latina ĉeflitero A kun dekstra korno",Acirc:"Latina ĉeflitero A kun ĉapelo",Atilde:"Latina ĉeflitero A kun tildo",Auml:"Latina ĉeflitero A kun tremao", +Aring:"Latina ĉeflitero A kun superringo",AElig:"Latina ĉeflitera ligaturo Æ",Ccedil:"Latina ĉeflitero C kun zoeto",Egrave:"Latina ĉeflitero E kun liva korno",Eacute:"Latina ĉeflitero E kun dekstra korno",Ecirc:"Latina ĉeflitero E kun ĉapelo",Euml:"Latina ĉeflitero E kun tremao",Igrave:"Latina ĉeflitero I kun liva korno",Iacute:"Latina ĉeflitero I kun dekstra korno",Icirc:"Latina ĉeflitero I kun ĉapelo",Iuml:"Latina ĉeflitero I kun tremao",ETH:"Latina ĉeflitero islanda edo",Ntilde:"Latina ĉeflitero N kun tildo", +Ograve:"Latina ĉeflitero O kun liva korno",Oacute:"Latina ĉeflitero O kun dekstra korno",Ocirc:"Latina ĉeflitero O kun ĉapelo",Otilde:"Latina ĉeflitero O kun tildo",Ouml:"Latina ĉeflitero O kun tremao",times:"Multipliko",Oslash:"Latina ĉeflitero O trastrekita",Ugrave:"Latina ĉeflitero U kun liva korno",Uacute:"Latina ĉeflitero U kun dekstra korno",Ucirc:"Latina ĉeflitero U kun ĉapelo",Uuml:"Latina ĉeflitero U kun tremao",Yacute:"Latina ĉeflitero Y kun dekstra korno",THORN:"Latina ĉeflitero islanda dorno", +szlig:"Latina etlitero germana sozo (akra s)",agrave:"Latina etlitero a kun liva korno",aacute:"Latina etlitero a kun dekstra korno",acirc:"Latina etlitero a kun ĉapelo",atilde:"Latina etlitero a kun tildo",auml:"Latina etlitero a kun tremao",aring:"Latina etlitero a kun superringo",aelig:"Latina etlitera ligaturo æ",ccedil:"Latina etlitero c kun zoeto",egrave:"Latina etlitero e kun liva korno",eacute:"Latina etlitero e kun dekstra korno",ecirc:"Latina etlitero e kun ĉapelo",euml:"Latina etlitero e kun tremao", +igrave:"Latina etlitero i kun liva korno",iacute:"Latina etlitero i kun dekstra korno",icirc:"Latina etlitero i kun ĉapelo",iuml:"Latina etlitero i kun tremao",eth:"Latina etlitero islanda edo",ntilde:"Latina etlitero n kun tildo",ograve:"Latina etlitero o kun liva korno",oacute:"Latina etlitero o kun dekstra korno",ocirc:"Latina etlitero o kun ĉapelo",otilde:"Latina etlitero o kun tildo",ouml:"Latina etlitero o kun tremao",divide:"Dividosigno",oslash:"Latina etlitero o trastrekita",ugrave:"Latina etlitero u kun liva korno", +uacute:"Latina etlitero u kun dekstra korno",ucirc:"Latina etlitero u kun ĉapelo",uuml:"Latina etlitero u kun tremao",yacute:"Latina etlitero y kun dekstra korno",thorn:"Latina etlitero islanda dorno",yuml:"Latina etlitero y kun tremao",OElig:"Latina ĉeflitera ligaturo Œ",oelig:"Latina etlitera ligaturo œ",372:"Latina ĉeflitero W kun ĉapelo",374:"Latina ĉeflitero Y kun ĉapelo",373:"Latina etlitero w kun ĉapelo",375:"Latina etlitero y kun ĉapelo",sbquo:"Suba 9-citilo",8219:"Supra renversita 9-citilo", +bdquo:"Suba 99-citilo",hellip:"Tripunkto",trade:"Varmarka signo",9658:"Nigra sago dekstren",bull:"Bulmarko",rarr:"Sago dekstren",rArr:"Duobla sago dekstren",hArr:"Duobla sago maldekstren",diams:"Nigra kvadrato",asymp:"Preskaŭ egala"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/es.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/es.js new file mode 100755 index 0000000000..72e1eb46c5 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/es.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","es",{euro:"Símbolo de euro",lsquo:"Comilla simple izquierda",rsquo:"Comilla simple derecha",ldquo:"Comilla doble izquierda",rdquo:"Comilla doble derecha",ndash:"Guión corto",mdash:"Guión medio largo",iexcl:"Signo de admiración invertido",cent:"Símbolo centavo",pound:"Símbolo libra",curren:"Símbolo moneda",yen:"Símbolo yen",brvbar:"Barra vertical rota",sect:"Símbolo sección",uml:"Diéresis",copy:"Signo de derechos de autor",ordf:"Indicador ordinal femenino",laquo:"Abre comillas angulares", +not:"Signo negación",reg:"Signo de marca registrada",macr:"Guión alto",deg:"Signo de grado",sup2:"Superíndice dos",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice uno",ordm:"Indicador orginal masculino",raquo:"Cierra comillas angulares",frac14:"Fracción ordinaria de un quarto",frac12:"Fracción ordinaria de una mitad",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina mayúscula con acento grave", +Aacute:"Letra A latina mayúscula con acento agudo",Acirc:"Letra A latina mayúscula con acento circunflejo",Atilde:"Letra A latina mayúscula con tilde",Auml:"Letra A latina mayúscula con diéresis",Aring:"Letra A latina mayúscula con aro arriba",AElig:"Letra Æ latina mayúscula",Ccedil:"Letra C latina mayúscula con cedilla",Egrave:"Letra E latina mayúscula con acento grave",Eacute:"Letra E latina mayúscula con acento agudo",Ecirc:"Letra E latina mayúscula con acento circunflejo",Euml:"Letra E latina mayúscula con diéresis", +Igrave:"Letra I latina mayúscula con acento grave",Iacute:"Letra I latina mayúscula con acento agudo",Icirc:"Letra I latina mayúscula con acento circunflejo",Iuml:"Letra I latina mayúscula con diéresis",ETH:"Letra Eth latina mayúscula",Ntilde:"Letra N latina mayúscula con tilde",Ograve:"Letra O latina mayúscula con acento grave",Oacute:"Letra O latina mayúscula con acento agudo",Ocirc:"Letra O latina mayúscula con acento circunflejo",Otilde:"Letra O latina mayúscula con tilde",Ouml:"Letra O latina mayúscula con diéresis", +times:"Signo de multiplicación",Oslash:"Letra O latina mayúscula con barra inclinada",Ugrave:"Letra U latina mayúscula con acento grave",Uacute:"Letra U latina mayúscula con acento agudo",Ucirc:"Letra U latina mayúscula con acento circunflejo",Uuml:"Letra U latina mayúscula con diéresis",Yacute:"Letra Y latina mayúscula con acento agudo",THORN:"Letra Thorn latina mayúscula",szlig:"Letra s latina fuerte pequeña",agrave:"Letra a latina pequeña con acento grave",aacute:"Letra a latina pequeña con acento agudo", +acirc:"Letra a latina pequeña con acento circunflejo",atilde:"Letra a latina pequeña con tilde",auml:"Letra a latina pequeña con diéresis",aring:"Letra a latina pequeña con aro arriba",aelig:"Letra æ latina pequeña",ccedil:"Letra c latina pequeña con cedilla",egrave:"Letra e latina pequeña con acento grave",eacute:"Letra e latina pequeña con acento agudo",ecirc:"Letra e latina pequeña con acento circunflejo",euml:"Letra e latina pequeña con diéresis",igrave:"Letra i latina pequeña con acento grave", +iacute:"Letra i latina pequeña con acento agudo",icirc:"Letra i latina pequeña con acento circunflejo",iuml:"Letra i latina pequeña con diéresis",eth:"Letra eth latina pequeña",ntilde:"Letra n latina pequeña con tilde",ograve:"Letra o latina pequeña con acento grave",oacute:"Letra o latina pequeña con acento agudo",ocirc:"Letra o latina pequeña con acento circunflejo",otilde:"Letra o latina pequeña con tilde",ouml:"Letra o latina pequeña con diéresis",divide:"Signo de división",oslash:"Letra o latina minúscula con barra inclinada", +ugrave:"Letra u latina pequeña con acento grave",uacute:"Letra u latina pequeña con acento agudo",ucirc:"Letra u latina pequeña con acento circunflejo",uuml:"Letra u latina pequeña con diéresis",yacute:"Letra u latina pequeña con acento agudo",thorn:"Letra thorn latina minúscula",yuml:"Letra y latina pequeña con diéresis",OElig:"Diptongo OE latino en mayúscula",oelig:"Diptongo oe latino en minúscula",372:"Letra W latina mayúscula con acento circunflejo",374:"Letra Y latina mayúscula con acento circunflejo", +373:"Letra w latina pequeña con acento circunflejo",375:"Letra y latina pequeña con acento circunflejo",sbquo:"Comilla simple baja-9",8219:"Comilla simple alta invertida-9",bdquo:"Comillas dobles bajas-9",hellip:"Puntos suspensivos horizontales",trade:"Signo de marca registrada",9658:"Apuntador negro apuntando a la derecha",bull:"Viñeta",rarr:"Flecha a la derecha",rArr:"Flecha doble a la derecha",hArr:"Flecha izquierda derecha doble",diams:"Diamante negro",asymp:"Casi igual a"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/et.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/et.js new file mode 100755 index 0000000000..99d67f0b02 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/et.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","et",{euro:"Euromärk",lsquo:"Alustav ühekordne jutumärk",rsquo:"Lõpetav ühekordne jutumärk",ldquo:"Alustav kahekordne jutumärk",rdquo:"Lõpetav kahekordne jutumärk",ndash:"Enn-kriips",mdash:"Emm-kriips",iexcl:"Pööratud hüüumärk",cent:"Sendimärk",pound:"Naela märk",curren:"Valuutamärk",yen:"Jeeni märk",brvbar:"Katkestatud kriips",sect:"Lõigu märk",uml:"Täpid",copy:"Autoriõiguse märk",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Ei-märk",reg:"Registered sign",macr:"Macron",deg:"Kraadimärk",sup2:"Ülaindeks kaks",sup3:"Ülaindeks kolm",acute:"Acute accent",micro:"Mikro-märk",para:"Pilcrow sign",middot:"Keskpunkt",cedil:"Cedilla",sup1:"Ülaindeks üks",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Ladina suur A tildega",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Täppidega ladina suur O",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Kandilise katusega suur ladina U",Uuml:"Täppidega ladina suur U",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Ladina väike terav s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Kandilise katusega ladina väike a",atilde:"Tildega ladina väike a",auml:"Täppidega ladina väike a",aring:"Latin small letter a with ring above", +aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", +ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jagamismärk",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", +thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Kaubamärgi märk",9658:"Black right-pointing pointer", +bull:"Kuul",rarr:"Nool paremale",rArr:"Topeltnool paremale",hArr:"Topeltnool vasakule",diams:"Black diamond suit",asymp:"Ligikaudu võrdne"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/fa.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/fa.js new file mode 100755 index 0000000000..3b58a8b17c --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/fa.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","fa",{euro:"نشان یورو",lsquo:"علامت نقل قول تکی چپ",rsquo:"علامت نقل قول تکی راست",ldquo:"علامت نقل قول دوتایی چپ",rdquo:"علامت نقل قول دوتایی راست",ndash:"خط تیره En",mdash:"خط تیره Em",iexcl:"علامت تعجب وارونه",cent:"نشان سنت",pound:"نشان پوند",curren:"نشان ارز",yen:"نشان ین",brvbar:"نوار شکسته",sect:"نشان بخش",uml:"نشان سواگیری",copy:"نشان کپی رایت",ordf:"شاخص ترتیبی مونث",laquo:"اشاره چپ مکرر برای زاویه علامت نقل قول",not:"نشان ثبت نشده",reg:"نشان ثبت شده", +macr:"نشان خط بالای حرف",deg:"نشان درجه",sup2:"بالانویس دو",sup3:"بالانویس سه",acute:"لهجه غلیظ",micro:"نشان مایکرو",para:"نشان محل بند",middot:"نقطه میانی",cedil:"سدیل",sup1:"بالانویس 1",ordm:"شاخص ترتیبی مذکر",raquo:"نشان زاویه‌دار دوتایی نقل قول راست چین",frac14:"واحد عامیانه 1/4",frac12:"واحد عامینه نصف",frac34:"واحد عامیانه 3/4",iquest:"علامت سوال معکوس",Agrave:"حرف A بزرگ لاتین با تلفظ غلیظ",Aacute:"حرف A بزرگ لاتین با تلفظ شدید",Acirc:"حرف A بزرگ لاتین با دور",Atilde:"حرف A بزرگ لاتین با صدای کامی", +Auml:"حرف A بزرگ لاتین با نشان سواگیری",Aring:"حرف A بزرگ لاتین با حلقه بالا",AElig:"حرف Æ بزرگ لاتین",Ccedil:"حرف C بزرگ لاتین با نشان سواگیری",Egrave:"حرف E بزرگ لاتین با تلفظ درشت",Eacute:"حرف E بزرگ لاتین با تلفظ زیر",Ecirc:"حرف E بزرگ لاتین با خمان",Euml:"حرف E بزرگ لاتین با نشان سواگیری",Igrave:"حرف I بزرگ لاتین با تلفظ درشت",Iacute:"حرف I بزرگ لاتین با تلفظ ریز",Icirc:"حرف I بزرگ لاتین با خمان",Iuml:"حرف I بزرگ لاتین با نشان سواگیری",ETH:"حرف لاتین بزرگ واکه ترتیبی",Ntilde:"حرف N بزرگ لاتین با مد", +Ograve:"حرف O بزرگ لاتین با تلفظ درشت",Oacute:"حرف O بزرگ لاتین با تلفظ ریز",Ocirc:"حرف O بزرگ لاتین با خمان",Otilde:"حرف O بزرگ لاتین با مد",Ouml:"حرف O بزرگ لاتین با نشان سواگیری",times:"نشان ضربدر",Oslash:"حرف O بزرگ لاتین با میان خط",Ugrave:"حرف U بزرگ لاتین با تلفظ درشت",Uacute:"حرف U بزرگ لاتین با تلفظ ریز",Ucirc:"حرف U بزرگ لاتین با خمان",Uuml:"حرف U بزرگ لاتین با نشان سواگیری",Yacute:"حرف Y بزرگ لاتین با تلفظ ریز",THORN:"حرف بزرگ لاتین خاردار",szlig:"حرف کوچک لاتین شارپ s",agrave:"حرف a کوچک لاتین با تلفظ درشت", +aacute:"حرف a کوچک لاتین با تلفظ ریز",acirc:"حرف a کوچک لاتین با خمان",atilde:"حرف a کوچک لاتین با صدای کامی",auml:"حرف a کوچک لاتین با نشان سواگیری",aring:"حرف a کوچک لاتین گوشواره دار",aelig:"حرف کوچک لاتین æ",ccedil:"حرف c کوچک لاتین با نشان سدیل",egrave:"حرف e کوچک لاتین با تلفظ درشت",eacute:"حرف e کوچک لاتین با تلفظ ریز",ecirc:"حرف e کوچک لاتین با خمان",euml:"حرف e کوچک لاتین با نشان سواگیری",igrave:"حرف i کوچک لاتین با تلفظ درشت",iacute:"حرف i کوچک لاتین با تلفظ ریز",icirc:"حرف i کوچک لاتین با خمان", +iuml:"حرف i کوچک لاتین با نشان سواگیری",eth:"حرف کوچک لاتین eth",ntilde:"حرف n کوچک لاتین با صدای کامی",ograve:"حرف o کوچک لاتین با تلفظ درشت",oacute:"حرف o کوچک لاتین با تلفظ زیر",ocirc:"حرف o کوچک لاتین با خمان",otilde:"حرف o کوچک لاتین با صدای کامی",ouml:"حرف o کوچک لاتین با نشان سواگیری",divide:"نشان بخش",oslash:"حرف o کوچک لاتین با میان خط",ugrave:"حرف u کوچک لاتین با تلفظ درشت",uacute:"حرف u کوچک لاتین با تلفظ ریز",ucirc:"حرف u کوچک لاتین با خمان",uuml:"حرف u کوچک لاتین با نشان سواگیری",yacute:"حرف y کوچک لاتین با تلفظ ریز", +thorn:"حرف کوچک لاتین خاردار",yuml:"حرف y کوچک لاتین با نشان سواگیری",OElig:"بند بزرگ لاتین OE",oelig:"بند کوچک لاتین oe",372:"حرف W بزرگ لاتین با خمان",374:"حرف Y بزرگ لاتین با خمان",373:"حرف w کوچک لاتین با خمان",375:"حرف y کوچک لاتین با خمان",sbquo:"نشان نقل قول تکی زیر-9",8219:"نشان نقل قول تکی high-reversed-9",bdquo:"نقل قول دوتایی پایین-9",hellip:"حذف افقی",trade:"نشان تجاری",9658:"نشانگر سیاه جهت راست",bull:"گلوله",rarr:"فلش راست",rArr:"فلش دوتایی راست",hArr:"فلش دوتایی چپ راست",diams:"نشان الماس سیاه", +asymp:"تقریبا برابر با"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/fi.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/fi.js new file mode 100755 index 0000000000..02c2deaf73 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/fi.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","fi",{euro:"Euron merkki",lsquo:"Vasen yksittäinen lainausmerkki",rsquo:"Oikea yksittäinen lainausmerkki",ldquo:"Vasen kaksoislainausmerkki",rdquo:"Oikea kaksoislainausmerkki",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Sentin merkki",pound:"Punnan merkki",curren:"Valuuttamerkki",yen:"Yenin merkki",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Rekisteröity merkki",macr:"Macron",deg:"Asteen merkki",sup2:"Yläindeksi kaksi",sup3:"Yläindeksi kolme",acute:"Acute accent",micro:"Mikron merkki",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Yläindeksi yksi",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Ylösalaisin oleva kysymysmerkki",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Kertomerkki",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jakomerkki",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Tavaramerkki merkki",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Nuoli oikealle",rArr:"Kaksoisnuoli oikealle",hArr:"Kaksoisnuoli oikealle ja vasemmalle",diams:"Black diamond suit",asymp:"Noin"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js new file mode 100755 index 0000000000..da2357cd8d --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","fr-ca",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret",iexcl:"Point d'exclamation inversé",cent:"Symbole de cent",pound:"Symbole de Livre Sterling",curren:"Symbole monétaire",yen:"Symbole du Yen",brvbar:"Barre scindée",sect:"Symbole de section",uml:"Tréma",copy:"Symbole de copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant", +not:"Indicateur de négation",reg:"Symbole de marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"Exposant 3",acute:"Accent aigüe",micro:"Symbole micro",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"Exposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Une demi",frac34:"Trois quart",iquest:"Point d'interrogation inversé",Agrave:"A accent grave",Aacute:"A accent aigüe",Acirc:"A circonflexe",Atilde:"A tilde",Auml:"A tréma", +Aring:"A avec un rond au dessus",AElig:"Æ majuscule",Ccedil:"C cédille",Egrave:"E accent grave",Eacute:"E accent aigüe",Ecirc:"E accent circonflexe",Euml:"E tréma",Igrave:"I accent grave",Iacute:"I accent aigüe",Icirc:"I accent circonflexe",Iuml:"I tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N tilde",Ograve:"O accent grave",Oacute:"O accent aigüe",Ocirc:"O accent circonflexe",Otilde:"O tilde",Ouml:"O tréma",times:"Symbole de multiplication",Oslash:"O barré",Ugrave:"U accent grave",Uacute:"U accent aigüe", +Ucirc:"U accent circonflexe",Uuml:"U tréma",Yacute:"Y accent aigüe",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a accent grave",aacute:"a accent aigüe",acirc:"a accent circonflexe",atilde:"a tilde",auml:"a tréma",aring:"a avec un cercle au dessus",aelig:"æ",ccedil:"c cédille",egrave:"e accent grave",eacute:"e accent aigüe",ecirc:"e accent circonflexe",euml:"e tréma",igrave:"i accent grave",iacute:"i accent aigüe",icirc:"i accent circonflexe",iuml:"i tréma", +eth:"Lettre minuscule islandaise ED",ntilde:"n tilde",ograve:"o accent grave",oacute:"o accent aigüe",ocirc:"O accent circonflexe",otilde:"O tilde",ouml:"O tréma",divide:"Symbole de division",oslash:"o barré",ugrave:"u accent grave",uacute:"u accent aigüe",ucirc:"u accent circonflexe",uuml:"u tréma",yacute:"y accent aigüe",thorn:"Lettre islandaise thorn minuscule",yuml:"y tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W accent circonflexe",374:"Y accent circonflexe", +373:"w accent circonflexe",375:"y accent circonflexe",sbquo:"Guillemet simple fermant",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Symbole de marque déposée",9658:"Flèche noire pointant vers la droite",bull:"Puce",rarr:"Flèche vers la droite",rArr:"Flèche double vers la droite",hArr:"Flèche double vers la gauche",diams:"Carreau",asymp:"Presque égal"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/fr.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/fr.js new file mode 100755 index 0000000000..50eac9ac0d --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/fr.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","fr",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret cadratin",iexcl:"Point d'exclamation inversé",cent:"Symbole Cent",pound:"Symbole Livre Sterling",curren:"Symbole monétaire",yen:"Symbole Yen",brvbar:"Barre verticale scindée",sect:"Section",uml:"Tréma",copy:"Symbole Copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant", +not:"Crochet de négation",reg:"Marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"\\tExposant 3",acute:"Accent aigu",micro:"Omicron",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"\\tExposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Un demi",frac34:"Trois quarts",iquest:"Point d'interrogation inversé",Agrave:"A majuscule accent grave",Aacute:"A majuscule accent aigu",Acirc:"A majuscule accent circonflexe",Atilde:"A majuscule avec caron", +Auml:"A majuscule tréma",Aring:"A majuscule avec un rond au-dessus",AElig:"Æ majuscule ligaturés",Ccedil:"C majuscule cédille",Egrave:"E majuscule accent grave",Eacute:"E majuscule accent aigu",Ecirc:"E majuscule accent circonflexe",Euml:"E majuscule tréma",Igrave:"I majuscule accent grave",Iacute:"I majuscule accent aigu",Icirc:"I majuscule accent circonflexe",Iuml:"I majuscule tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N majuscule avec caron",Ograve:"O majuscule accent grave",Oacute:"O majuscule accent aigu", +Ocirc:"O majuscule accent circonflexe",Otilde:"O majuscule avec caron",Ouml:"O majuscule tréma",times:"Multiplication",Oslash:"O majuscule barré",Ugrave:"U majuscule accent grave",Uacute:"U majuscule accent aigu",Ucirc:"U majuscule accent circonflexe",Uuml:"U majuscule tréma",Yacute:"Y majuscule accent aigu",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a minuscule accent grave",aacute:"a minuscule accent aigu",acirc:"a minuscule accent circonflexe",atilde:"a minuscule avec caron", +auml:"a minuscule tréma",aring:"a minuscule avec un rond au-dessus",aelig:"æ minuscule ligaturés",ccedil:"c minuscule cédille",egrave:"e minuscule accent grave",eacute:"e minuscule accent aigu",ecirc:"e minuscule accent circonflexe",euml:"e minuscule tréma",igrave:"i minuscule accent grave",iacute:"i minuscule accent aigu",icirc:"i minuscule accent circonflexe",iuml:"i minuscule tréma",eth:"Lettre minuscule islandaise ED",ntilde:"n minuscule avec caron",ograve:"o minuscule accent grave",oacute:"o minuscule accent aigu", +ocirc:"o minuscule accent circonflexe",otilde:"o minuscule avec caron",ouml:"o minuscule tréma",divide:"Division",oslash:"o minuscule barré",ugrave:"u minuscule accent grave",uacute:"u minuscule accent aigu",ucirc:"u minuscule accent circonflexe",uuml:"u minuscule tréma",yacute:"y minuscule accent aigu",thorn:"Lettre islandaise thorn minuscule",yuml:"y minuscule tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W majuscule accent circonflexe",374:"Y majuscule accent circonflexe", +373:"w minuscule accent circonflexe",375:"y minuscule accent circonflexe",sbquo:"Guillemet simple fermant (anglais)",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Marque commerciale (trade mark)",9658:"Flèche noire pointant vers la droite",bull:"Gros point médian",rarr:"Flèche vers la droite",rArr:"Double flèche vers la droite",hArr:"Double flèche vers la gauche",diams:"Carreau noir",asymp:"Presque égal"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/gl.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/gl.js new file mode 100755 index 0000000000..058703aadd --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/gl.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","gl",{euro:"Símbolo do euro",lsquo:"Comiña simple esquerda",rsquo:"Comiña simple dereita",ldquo:"Comiñas dobres esquerda",rdquo:"Comiñas dobres dereita",ndash:"Guión",mdash:"Raia",iexcl:"Signo de admiración invertido",cent:"Símbolo do centavo",pound:"Símbolo da libra",curren:"Símbolo de moeda",yen:"Símbolo do yen",brvbar:"Barra vertical rota",sect:"Símbolo de sección",uml:"Diérese",copy:"Símbolo de dereitos de autoría",ordf:"Indicador ordinal feminino",laquo:"Comiñas latinas, apertura", +not:"Signo negación",reg:"Símbolo de marca rexistrada",macr:"Guión alto",deg:"Signo de grao",sup2:"Superíndice dous",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo de micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice un",ordm:"Indicador ordinal masculino",raquo:"Comiñas latinas, peche",frac14:"Fracción ordinaria de un cuarto",frac12:"Fracción ordinaria de un medio",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina maiúscula con acento grave", +Aacute:"Letra A latina maiúscula con acento agudo",Acirc:"Letra A latina maiúscula con acento circunflexo",Atilde:"Letra A latina maiúscula con til",Auml:"Letra A latina maiúscula con diérese",Aring:"Letra A latina maiúscula con aro enriba",AElig:"Letra Æ latina maiúscula",Ccedil:"Letra C latina maiúscula con cedilla",Egrave:"Letra E latina maiúscula con acento grave",Eacute:"Letra E latina maiúscula con acento agudo",Ecirc:"Letra E latina maiúscula con acento circunflexo",Euml:"Letra E latina maiúscula con diérese", +Igrave:"Letra I latina maiúscula con acento grave",Iacute:"Letra I latina maiúscula con acento agudo",Icirc:"Letra I latina maiúscula con acento circunflexo",Iuml:"Letra I latina maiúscula con diérese",ETH:"Letra Ed latina maiúscula",Ntilde:"Letra N latina maiúscula con til",Ograve:"Letra O latina maiúscula con acento grave",Oacute:"Letra O latina maiúscula con acento agudo",Ocirc:"Letra O latina maiúscula con acento circunflexo",Otilde:"Letra O latina maiúscula con til",Ouml:"Letra O latina maiúscula con diérese", +times:"Signo de multiplicación",Oslash:"Letra O latina maiúscula con barra transversal",Ugrave:"Letra U latina maiúscula con acento grave",Uacute:"Letra U latina maiúscula con acento agudo",Ucirc:"Letra U latina maiúscula con acento circunflexo",Uuml:"Letra U latina maiúscula con diérese",Yacute:"Letra Y latina maiúscula con acento agudo",THORN:"Letra Thorn latina maiúscula",szlig:"Letra s latina forte minúscula",agrave:"Letra a latina minúscula con acento grave",aacute:"Letra a latina minúscula con acento agudo", +acirc:"Letra a latina minúscula con acento circunflexo",atilde:"Letra a latina minúscula con til",auml:"Letra a latina minúscula con diérese",aring:"Letra a latina minúscula con aro enriba",aelig:"Letra æ latina minúscula",ccedil:"Letra c latina minúscula con cedilla",egrave:"Letra e latina minúscula con acento grave",eacute:"Letra e latina minúscula con acento agudo",ecirc:"Letra e latina minúscula con acento circunflexo",euml:"Letra e latina minúscula con diérese",igrave:"Letra i latina minúscula con acento grave", +iacute:"Letra i latina minúscula con acento agudo",icirc:"Letra i latina minúscula con acento circunflexo",iuml:"Letra i latina minúscula con diérese",eth:"Letra ed latina minúscula",ntilde:"Letra n latina minúscula con til",ograve:"Letra o latina minúscula con acento grave",oacute:"Letra o latina minúscula con acento agudo",ocirc:"Letra o latina minúscula con acento circunflexo",otilde:"Letra o latina minúscula con til",ouml:"Letra o latina minúscula con diérese",divide:"Signo de división",oslash:"Letra o latina minúscula con barra transversal", +ugrave:"Letra u latina minúscula con acento grave",uacute:"Letra u latina minúscula con acento agudo",ucirc:"Letra u latina minúscula con acento circunflexo",uuml:"Letra u latina minúscula con diérese",yacute:"Letra y latina minúscula con acento agudo",thorn:"Letra Thorn latina minúscula",yuml:"Letra y latina minúscula con diérese",OElig:"Ligadura OE latina maiúscula",oelig:"Ligadura oe latina minúscula",372:"Letra W latina maiúscula con acento circunflexo",374:"Letra Y latina maiúscula con acento circunflexo", +373:"Letra w latina minúscula con acento circunflexo",375:"Letra y latina minúscula con acento circunflexo",sbquo:"Comiña simple baixa, de apertura",8219:"Comiña simple alta, de peche",bdquo:"Comiñas dobres baixas, de apertura",hellip:"Elipse, puntos suspensivos",trade:"Signo de marca rexistrada",9658:"Apuntador negro apuntando á dereita",bull:"Viñeta",rarr:"Frecha á dereita",rArr:"Frecha dobre á dereita",hArr:"Frecha dobre da esquerda á dereita",diams:"Diamante negro",asymp:"Case igual a"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/he.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/he.js new file mode 100755 index 0000000000..5eaaf6eafd --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/he.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","he",{euro:"יורו",lsquo:"סימן ציטוט יחיד שמאלי",rsquo:"סימן ציטוט יחיד ימני",ldquo:"סימן ציטוט כפול שמאלי",rdquo:"סימן ציטוט כפול ימני",ndash:"קו מפריד קצר",mdash:"קו מפריד ארוך",iexcl:"סימן קריאה הפוך",cent:"סנט",pound:"פאונד",curren:"מטבע",yen:"ין",brvbar:"קו שבור",sect:"סימן מקטע",uml:"שתי נקודות אופקיות (Diaeresis)",copy:"סימן זכויות יוצרים (Copyright)",ordf:"סימן אורדינאלי נקבי",laquo:"סימן ציטוט זווית כפולה לשמאל",not:"סימן שלילה מתמטי",reg:"סימן רשום", +macr:"מקרון (הגיה ארוכה)",deg:"מעלות",sup2:"2 בכתיב עילי",sup3:"3 בכתיב עילי",acute:"סימן דגוש (Acute)",micro:"מיקרו",para:"סימון פסקה",middot:"נקודה אמצעית",cedil:"סדיליה",sup1:"1 בכתיב עילי",ordm:"סימן אורדינאלי זכרי",raquo:"סימן ציטוט זווית כפולה לימין",frac14:"רבע בשבר פשוט",frac12:"חצי בשבר פשוט",frac34:"שלושה רבעים בשבר פשוט",iquest:"סימן שאלה הפוך",Agrave:"אות לטינית A עם גרש (Grave)",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde", +Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"אות לטינית Æ גדולה",Ccedil:"Latin capital letter C with cedilla",Egrave:"אות לטינית E עם גרש (Grave)",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"אות לטינית I עם גרש (Grave)",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis", +ETH:"אות לטינית Eth גדולה",Ntilde:"Latin capital letter N with tilde",Ograve:"אות לטינית O עם גרש (Grave)",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"סימן כפל",Oslash:"Latin capital letter O with stroke",Ugrave:"אות לטינית U עם גרש (Grave)",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis", +Yacute:"Latin capital letter Y with acute accent",THORN:"אות לטינית Thorn גדולה",szlig:"אות לטינית s חדה קטנה",agrave:"אות לטינית a עם גרש (Grave)",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"אות לטינית æ קטנה",ccedil:"Latin small letter c with cedilla",egrave:"אות לטינית e עם גרש (Grave)",eacute:"Latin small letter e with acute accent", +ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"אות לטינית i עם גרש (Grave)",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"אות לטינית eth קטנה",ntilde:"Latin small letter n with tilde",ograve:"אות לטינית o עם גרש (Grave)",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis", +divide:"סימן חלוקה",oslash:"Latin small letter o with stroke",ugrave:"אות לטינית u עם גרש (Grave)",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"אות לטינית thorn קטנה",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex", +373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"סימן ציטוט נמוך יחיד",8219:"סימן ציטוט",bdquo:"סימן ציטוט נמוך כפול",hellip:"שלוש נקודות",trade:"סימן טריידמארק",9658:"סמן שחור לצד ימין",bull:"תבליט (רשימה)",rarr:"חץ לימין",rArr:"חץ כפול לימין",hArr:"חץ כפול לימין ושמאל",diams:"יהלום מלא",asymp:"כמעט שווה"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/hr.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/hr.js new file mode 100755 index 0000000000..dd6ef2fba0 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/hr.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","hr",{euro:"Euro znak",lsquo:"Lijevi jednostruki navodnik",rsquo:"Desni jednostruki navodnik",ldquo:"Lijevi dvostruki navodnik",rdquo:"Desni dvostruki navodnik",ndash:"En crtica",mdash:"Em crtica",iexcl:"Naopaki uskličnik",cent:"Cent znak",pound:"Funta znak",curren:"Znak valute",yen:"Yen znak",brvbar:"Potrgana prečka",sect:"Znak odjeljka",uml:"Prijeglasi",copy:"Copyright znak",ordf:"Feminine ordinal indicator",laquo:"Lijevi dvostruki uglati navodnik",not:"Not znak", +reg:"Registered znak",macr:"Macron",deg:"Stupanj znak",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Mikro znak",para:"Pilcrow sign",middot:"Srednja točka",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Desni dvostruku uglati navodnik",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Naopaki upitnik",Agrave:"Veliko latinsko slovo A s akcentom",Aacute:"Latinično veliko slovo A sa oštrim naglaskom", +Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", +Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent", +Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above", +aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", +ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", +thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", +bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/hu.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/hu.js new file mode 100755 index 0000000000..93e44bffdc --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/hu.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","hu",{euro:"Euró jel",lsquo:"Bal szimpla idézőjel",rsquo:"Jobb szimpla idézőjel",ldquo:"Bal dupla idézőjel",rdquo:"Jobb dupla idézőjel",ndash:"Rövid gondolatjel",mdash:"Hosszú gondolatjel",iexcl:"Fordított felkiáltójel",cent:"Cent jel",pound:"Font jel",curren:"Valuta jel",yen:"Yen jel",brvbar:"Hosszú kettőspont",sect:"Paragrafus jel",uml:"Kettős hangzó jel",copy:"Szerzői jog jel",ordf:"Női sorrend mutatója",laquo:"Balra mutató duplanyíl",not:"Feltételes kötőjel", +reg:"Bejegyzett védjegy jele",macr:"Hosszúsági jel",deg:"Fok jel",sup2:"Négyzeten jel",sup3:"Köbön jel",acute:"Éles ékezet",micro:"Mikro-jel",para:"Bekezdés jel",middot:"Közép pont",cedil:"Cédille",sup1:"Elsőn jel",ordm:"Férfi sorrend mutatója",raquo:"Jobbra mutató duplanyíl",frac14:"Egy negyed jel",frac12:"Egy ketted jel",frac34:"Három negyed jel",iquest:"Fordított kérdőjel",Agrave:"Latin nagy A fordított ékezettel",Aacute:"Latin nagy A normál ékezettel",Acirc:"Latin nagy A hajtott ékezettel",Atilde:"Latin nagy A hullámjellel", +Auml:"Latin nagy A kettőspont ékezettel",Aring:"Latin nagy A gyűrű ékezettel",AElig:"Latin nagy Æ betű",Ccedil:"Latin nagy C cedillával",Egrave:"Latin nagy E fordított ékezettel",Eacute:"Latin nagy E normál ékezettel",Ecirc:"Latin nagy E hajtott ékezettel",Euml:"Latin nagy E dupla kettőspont ékezettel",Igrave:"Latin nagy I fordított ékezettel",Iacute:"Latin nagy I normál ékezettel",Icirc:"Latin nagy I hajtott ékezettel",Iuml:"Latin nagy I kettőspont ékezettel",ETH:"Latin nagy Eth betű",Ntilde:"Latin nagy N hullámjellel", +Ograve:"Latin nagy O fordított ékezettel",Oacute:"Latin nagy O normál ékezettel",Ocirc:"Latin nagy O hajtott ékezettel",Otilde:"Latin nagy O hullámjellel",Ouml:"Latin nagy O kettőspont ékezettel",times:"Szorzás jel",Oslash:"Latin O betű áthúzással",Ugrave:"Latin nagy U fordított ékezettel",Uacute:"Latin nagy U normál ékezettel",Ucirc:"Latin nagy U hajtott ékezettel",Uuml:"Latin nagy U kettőspont ékezettel",Yacute:"Latin nagy Y normál ékezettel",THORN:"Latin nagy Thorn betű",szlig:"Latin kis s betű", +agrave:"Latin kis a fordított ékezettel",aacute:"Latin kis a normál ékezettel",acirc:"Latin kis a hajtott ékezettel",atilde:"Latin kis a hullámjellel",auml:"Latin kis a kettőspont ékezettel",aring:"Latin kis a gyűrű ékezettel",aelig:"Latin kis æ betű",ccedil:"Latin kis c cedillával",egrave:"Latin kis e fordított ékezettel",eacute:"Latin kis e normál ékezettel",ecirc:"Latin kis e hajtott ékezettel",euml:"Latin kis e dupla kettőspont ékezettel",igrave:"Latin kis i fordított ékezettel",iacute:"Latin kis i normál ékezettel", +icirc:"Latin kis i hajtott ékezettel",iuml:"Latin kis i kettőspont ékezettel",eth:"Latin kis eth betű",ntilde:"Latin kis n hullámjellel",ograve:"Latin kis o fordított ékezettel",oacute:"Latin kis o normál ékezettel",ocirc:"Latin kis o hajtott ékezettel",otilde:"Latin kis o hullámjellel",ouml:"Latin kis o kettőspont ékezettel",divide:"Osztásjel",oslash:"Latin kis o betű áthúzással",ugrave:"Latin kis u fordított ékezettel",uacute:"Latin kis u normál ékezettel",ucirc:"Latin kis u hajtott ékezettel", +uuml:"Latin kis u kettőspont ékezettel",yacute:"Latin kis y normál ékezettel",thorn:"Latin kis thorn jel",yuml:"Latin kis y kettőspont ékezettel",OElig:"Latin nagy OE-jel",oelig:"Latin kis oe-jel",372:"Latin nagy W hajtott ékezettel",374:"Latin nagy Y hajtott ékezettel",373:"Latin kis w hajtott ékezettel",375:"Latin kis y hajtott ékezettel",sbquo:"Nyitó nyomdai szimpla idézőjel",8219:"Záró nyomdai záró idézőjel",bdquo:"Nyitó nyomdai dupla idézőjel",hellip:"Három pont",trade:"Kereskedelmi védjegy jele", +9658:"Jobbra mutató fekete mutató",bull:"Golyó",rarr:"Jobbra mutató nyíl",rArr:"Jobbra mutató duplanyíl",hArr:"Bal-jobb duplanyíl",diams:"Fekete gyémánt jel",asymp:"Majdnem egyenlő jel"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/id.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/id.js new file mode 100755 index 0000000000..068074a766 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/id.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","id",{euro:"Tanda Euro",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Tanda Yen",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Tanda Hak Cipta",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Tanda Telah Terdaftar",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/it.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/it.js new file mode 100755 index 0000000000..92ca5fec37 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/it.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","it",{euro:"Simbolo Euro",lsquo:"Virgoletta singola sinistra",rsquo:"Virgoletta singola destra",ldquo:"Virgolette aperte",rdquo:"Virgolette chiuse",ndash:"Trattino",mdash:"Trattino lungo",iexcl:"Punto esclavamativo invertito",cent:"Simbolo Cent",pound:"Simbolo Sterlina",curren:"Simbolo Moneta",yen:"Simbolo Yen",brvbar:"Barra interrotta",sect:"Simbolo di sezione",uml:"Dieresi",copy:"Simbolo Copyright",ordf:"Indicatore ordinale femminile",laquo:"Virgolette basse aperte", +not:"Nessun segno",reg:"Simbolo Registrato",macr:"Macron",deg:"Simbolo Grado",sup2:"Apice Due",sup3:"Apice Tre",acute:"Accento acuto",micro:"Simbolo Micro",para:"Simbolo Paragrafo",middot:"Punto centrale",cedil:"Cediglia",sup1:"Apice Uno",ordm:"Indicatore ordinale maschile",raquo:"Virgolette basse chiuse",frac14:"Frazione volgare un quarto",frac12:"Frazione volgare un mezzo",frac34:"Frazione volgare tre quarti",iquest:"Punto interrogativo invertito",Agrave:"Lettera maiuscola latina A con accento grave", +Aacute:"Lettera maiuscola latina A con accento acuto",Acirc:"Lettera maiuscola latina A con accento circonflesso",Atilde:"Lettera maiuscola latina A con tilde",Auml:"Lettera maiuscola latina A con dieresi",Aring:"Lettera maiuscola latina A con anello sopra",AElig:"Lettera maiuscola latina AE",Ccedil:"Lettera maiuscola latina C con cediglia",Egrave:"Lettera maiuscola latina E con accento grave",Eacute:"Lettera maiuscola latina E con accento acuto",Ecirc:"Lettera maiuscola latina E con accento circonflesso", +Euml:"Lettera maiuscola latina E con dieresi",Igrave:"Lettera maiuscola latina I con accento grave",Iacute:"Lettera maiuscola latina I con accento acuto",Icirc:"Lettera maiuscola latina I con accento circonflesso",Iuml:"Lettera maiuscola latina I con dieresi",ETH:"Lettera maiuscola latina Eth",Ntilde:"Lettera maiuscola latina N con tilde",Ograve:"Lettera maiuscola latina O con accento grave",Oacute:"Lettera maiuscola latina O con accento acuto",Ocirc:"Lettera maiuscola latina O con accento circonflesso", +Otilde:"Lettera maiuscola latina O con tilde",Ouml:"Lettera maiuscola latina O con dieresi",times:"Simbolo di moltiplicazione",Oslash:"Lettera maiuscola latina O barrata",Ugrave:"Lettera maiuscola latina U con accento grave",Uacute:"Lettera maiuscola latina U con accento acuto",Ucirc:"Lettera maiuscola latina U con accento circonflesso",Uuml:"Lettera maiuscola latina U con accento circonflesso",Yacute:"Lettera maiuscola latina Y con accento acuto",THORN:"Lettera maiuscola latina Thorn",szlig:"Lettera latina minuscola doppia S", +agrave:"Lettera minuscola latina a con accento grave",aacute:"Lettera minuscola latina a con accento acuto",acirc:"Lettera minuscola latina a con accento circonflesso",atilde:"Lettera minuscola latina a con tilde",auml:"Lettera minuscola latina a con dieresi",aring:"Lettera minuscola latina a con anello superiore",aelig:"Lettera minuscola latina ae",ccedil:"Lettera minuscola latina c con cediglia",egrave:"Lettera minuscola latina e con accento grave",eacute:"Lettera minuscola latina e con accento acuto", +ecirc:"Lettera minuscola latina e con accento circonflesso",euml:"Lettera minuscola latina e con dieresi",igrave:"Lettera minuscola latina i con accento grave",iacute:"Lettera minuscola latina i con accento acuto",icirc:"Lettera minuscola latina i con accento circonflesso",iuml:"Lettera minuscola latina i con dieresi",eth:"Lettera minuscola latina eth",ntilde:"Lettera minuscola latina n con tilde",ograve:"Lettera minuscola latina o con accento grave",oacute:"Lettera minuscola latina o con accento acuto", +ocirc:"Lettera minuscola latina o con accento circonflesso",otilde:"Lettera minuscola latina o con tilde",ouml:"Lettera minuscola latina o con dieresi",divide:"Simbolo di divisione",oslash:"Lettera minuscola latina o barrata",ugrave:"Lettera minuscola latina u con accento grave",uacute:"Lettera minuscola latina u con accento acuto",ucirc:"Lettera minuscola latina u con accento circonflesso",uuml:"Lettera minuscola latina u con dieresi",yacute:"Lettera minuscola latina y con accento acuto",thorn:"Lettera minuscola latina thorn", +yuml:"Lettera minuscola latina y con dieresi",OElig:"Legatura maiuscola latina OE",oelig:"Legatura minuscola latina oe",372:"Lettera maiuscola latina W con accento circonflesso",374:"Lettera maiuscola latina Y con accento circonflesso",373:"Lettera minuscola latina w con accento circonflesso",375:"Lettera minuscola latina y con accento circonflesso",sbquo:"Singola virgoletta bassa low-9",8219:"Singola virgoletta bassa low-9 inversa",bdquo:"Doppia virgoletta bassa low-9",hellip:"Ellissi orizzontale", +trade:"Simbolo TM",9658:"Puntatore nero rivolto verso destra",bull:"Punto",rarr:"Freccia verso destra",rArr:"Doppia freccia verso destra",hArr:"Doppia freccia sinistra destra",diams:"Simbolo nero diamante",asymp:"Quasi uguale a"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ja.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ja.js new file mode 100755 index 0000000000..8dcaaba431 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ja.js @@ -0,0 +1,9 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ja",{euro:"ユーロ記号",lsquo:"左シングル引用符",rsquo:"右シングル引用符",ldquo:"左ダブル引用符",rdquo:"右ダブル引用符",ndash:"半角ダッシュ",mdash:"全角ダッシュ",iexcl:"逆さ感嘆符",cent:"セント記号",pound:"ポンド記号",curren:"通貨記号",yen:"円記号",brvbar:"上下に分かれた縦棒",sect:"節記号",uml:"分音記号(ウムラウト)",copy:"著作権表示記号",ordf:"女性序数標識",laquo:" 始め二重山括弧引用記号",not:"論理否定記号",reg:"登録商標記号",macr:"長音符",deg:"度記号",sup2:"上つき2, 2乗",sup3:"上つき3, 3乗",acute:"揚音符",micro:"ミクロン記号",para:"段落記号",middot:"中黒",cedil:"セディラ",sup1:"上つき1",ordm:"男性序数標識",raquo:"終わり二重山括弧引用記号", +frac14:"四分の一",frac12:"二分の一",frac34:"四分の三",iquest:"逆疑問符",Agrave:"抑音符つき大文字A",Aacute:"揚音符つき大文字A",Acirc:"曲折アクセントつき大文字A",Atilde:"チルダつき大文字A",Auml:"分音記号つき大文字A",Aring:"リングつき大文字A",AElig:"AとEの合字",Ccedil:"セディラつき大文字C",Egrave:"抑音符つき大文字E",Eacute:"揚音符つき大文字E",Ecirc:"曲折アクセントつき大文字E",Euml:"分音記号つき大文字E",Igrave:"抑音符つき大文字I",Iacute:"揚音符つき大文字I",Icirc:"曲折アクセントつき大文字I",Iuml:"分音記号つき大文字I",ETH:"[アイスランド語]大文字ETH",Ntilde:"チルダつき大文字N",Ograve:"抑音符つき大文字O",Oacute:"揚音符つき大文字O",Ocirc:"曲折アクセントつき大文字O",Otilde:"チルダつき大文字O",Ouml:" 分音記号つき大文字O", +times:"乗算記号",Oslash:"打ち消し線つき大文字O",Ugrave:"抑音符つき大文字U",Uacute:"揚音符つき大文字U",Ucirc:"曲折アクセントつき大文字U",Uuml:"分音記号つき大文字U",Yacute:"揚音符つき大文字Y",THORN:"[アイスランド語]大文字THORN",szlig:"ドイツ語エスツェット",agrave:"抑音符つき小文字a",aacute:"揚音符つき小文字a",acirc:"曲折アクセントつき小文字a",atilde:"チルダつき小文字a",auml:"分音記号つき小文字a",aring:"リングつき小文字a",aelig:"aとeの合字",ccedil:"セディラつき小文字c",egrave:"抑音符つき小文字e",eacute:"揚音符つき小文字e",ecirc:"曲折アクセントつき小文字e",euml:"分音記号つき小文字e",igrave:"抑音符つき小文字i",iacute:"揚音符つき小文字i",icirc:"曲折アクセントつき小文字i",iuml:"分音記号つき小文字i",eth:"アイスランド語小文字eth", +ntilde:"チルダつき小文字n",ograve:"抑音符つき小文字o",oacute:"揚音符つき小文字o",ocirc:"曲折アクセントつき小文字o",otilde:"チルダつき小文字o",ouml:"分音記号つき小文字o",divide:"除算記号",oslash:"打ち消し線つき小文字o",ugrave:"抑音符つき小文字u",uacute:"揚音符つき小文字u",ucirc:"曲折アクセントつき小文字u",uuml:"分音記号つき小文字u",yacute:"揚音符つき小文字y",thorn:"アイスランド語小文字thorn",yuml:"分音記号つき小文字y",OElig:"OとEの合字",oelig:"oとeの合字",372:"曲折アクセントつき大文字W",374:"曲折アクセントつき大文字Y",373:"曲折アクセントつき小文字w",375:"曲折アクセントつき小文字y",sbquo:"シングル下引用符",8219:"左右逆の左引用符",bdquo:"ダブル下引用符",hellip:"三点リーダ",trade:"商標記号",9658:"右黒三角ポインタ",bull:"黒丸", +rarr:"右矢印",rArr:"右二重矢印",hArr:"左右二重矢印",diams:"ダイヤ",asymp:"漸近"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/km.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/km.js new file mode 100755 index 0000000000..393d451483 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/km.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","km",{euro:"សញ្ញា​អឺរ៉ូ",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"សញ្ញា​សេន",pound:"សញ្ញា​ផោន",curren:"សញ្ញា​រូបិយបណ្ណ",yen:"សញ្ញា​យ៉េន",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"សញ្ញា​រក្សា​សិទ្ធិ",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"សញ្ញា​ដឺក្រេ",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"សញ្ញា​មីក្រូ",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ko.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ko.js new file mode 100755 index 0000000000..57447b392e --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ko.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ko",{euro:"유로화 기호",lsquo:"왼쪽 외 따옴표",rsquo:"오른쪽 외 따옴표",ldquo:"왼쪽 쌍 따옴표",rdquo:"오른쪽 쌍 따옴표",ndash:"반각 대시",mdash:"전각 대시",iexcl:"반전된 느낌표",cent:"센트 기호",pound:"파운드화 기호",curren:"커런시 기호",yen:"위안화 기호",brvbar:"Broken bar",sect:"섹션 기호",uml:"분음 부호",copy:"저작권 기호",ordf:"Feminine ordinal indicator",laquo:"왼쪽 쌍꺽쇠 인용 부호",not:"금지 기호",reg:"등록 기호",macr:"장음 기호",deg:"도 기호",sup2:"위첨자 2",sup3:"위첨자 3",acute:"양음 악센트 부호",micro:"마이크로 기호",para:"단락 기호",middot:"가운데 점",cedil:"세디유",sup1:"위첨자 1", +ordm:"Masculine ordinal indicator",raquo:"오른쪽 쌍꺽쇠 인용 부호",frac14:"분수 사분의 일",frac12:"분수 이분의 일",frac34:"분수 사분의 삼",iquest:"뒤집힌 물음표",Agrave:"억음 부호가 있는 라틴 대문자 A",Aacute:"양음 악센트 부호가 있는 라틴 대문자 A",Acirc:"곡절 악센트 부호가 있는 라틴 대문자 A",Atilde:"틸데가 있는 라틴 대문자 A",Auml:"분음 기호가 있는 라틴 대문자 A",Aring:"윗고리가 있는 라틴 대문자 A",AElig:"라틴 대문자 Æ",Ccedil:"세디유가 있는 라틴 대문자 C",Egrave:"억음 부호가 있는 라틴 대문자 E",Eacute:"양음 악센트 부호가 있는 라틴 대문자 E",Ecirc:"곡절 악센트 부호가 있는 라틴 대문자 E",Euml:"분음 기호가 있는 라틴 대문자 E",Igrave:"억음 부호가 있는 라틴 대문자 I",Iacute:"양음 악센트 부호가 있는 라틴 대문자 I", +Icirc:"곡절 악센트 부호가 있는 라틴 대문자 I",Iuml:"분음 기호가 있는 라틴 대문자 I",ETH:"라틴 대문자 Eth",Ntilde:"틸데가 있는 라틴 대문자 N",Ograve:"억음 부호가 있는 라틴 대문자 O",Oacute:"양음 부호가 있는 라틴 대문자 O",Ocirc:"곡절 악센트 부호가 있는 라틴 대문자 O",Otilde:"틸데가 있는 라틴 대문자 O",Ouml:"분음 기호가 있는 라틴 대문자 O",times:"곱하기 기호",Oslash:"사선이 있는 라틴 대문자 O",Ugrave:"억음 부호가 있는 라틴 대문자 U",Uacute:"양음 부호가 있는 라틴 대문자 U",Ucirc:"곡절 악센트 부호가 있는 라틴 대문자 U",Uuml:"분음 기호가 있는 라틴 대문자 U",Yacute:"양음 부호가 있는 라틴 대문자 Y",THORN:"라틴 대문자 Thorn",szlig:"라틴 소문자 sharp s",agrave:"억음 부호가 있는 라틴 소문자 a",aacute:"양음 부호가 있는 라틴 소문자 a", +acirc:"곡절 악센트 부호가 있는 라틴 소문자 a",atilde:"틸데가 있는 라틴 소문자 a",auml:"분음 기호가 있는 라틴 소문자 a",aring:"윗고리가 있는 라틴 소문자 a",aelig:"라틴 소문자 æ",ccedil:"세디유가 있는 라틴 소문자 c",egrave:"억음 부호가 있는 라틴 소문자 e",eacute:"양음 부호가 있는 라틴 소문자 e",ecirc:"곡절 악센트 부호가 있는 라틴 소문자 e",euml:"분음 기호가 있는 라틴 소문자 e",igrave:"억음 부호가 있는 라틴 소문자 i",iacute:"양음 부호가 있는 라틴 소문자 i",icirc:"곡절 악센트 부호가 있는 라틴 소문자 i",iuml:"분음 기호가 있는 라틴 소문자 i",eth:"라틴 소문자 eth",ntilde:"틸데가 있는 라틴 소문자 n",ograve:"억음 부호가 있는 라틴 소문자 o",oacute:"양음 부호가 있는 라틴 소문자 o",ocirc:"곡절 악센트 부호가 있는 라틴 소문자 o", +otilde:"틸데가 있는 라틴 소문자 o",ouml:"분음 기호가 있는 라틴 소문자 o",divide:"나누기 기호",oslash:"사선이 있는 라틴 소문자 o",ugrave:"억음 부호가 있는 라틴 소문자 u",uacute:"양음 부호가 있는 라틴 소문자 u",ucirc:"곡절 악센트 부호가 있는 라틴 소문자 u",uuml:"분음 기호가 있는 라틴 소문자 u",yacute:"양음 부호가 있는 라틴 소문자 y",thorn:"라틴 소문자 thorn",yuml:"분음 기호가 있는 라틴 소문자 y",OElig:"라틴 대문합자 OE",oelig:"라틴 소문합자 oe",372:"곡절 악센트 부호가 있는 라틴 대문자 W",374:"곡절 악센트 부호가 있는 라틴 대문자 Y",373:"곡절 악센트 부호가 있는 라틴 소문자 w",375:"곡절 악센트 부호가 있는 라틴 소문자 y",sbquo:"외 아래-9 인용 부호",8219:"외 위쪽-뒤집힌-9 인용 부호",bdquo:"쌍 아래-9 인용 부호",hellip:"수평 생략 부호", +trade:"상표 기호",9658:"검정 오른쪽 포인터",bull:"큰 점",rarr:"오른쪽 화살표",rArr:"오른쪽 두 줄 화살표",hArr:"양쪽 두 줄 화살표",diams:"검정 다이아몬드",asymp:"근사"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ku.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ku.js new file mode 100755 index 0000000000..426e8b47c0 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ku.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ku",{euro:"نیشانەی یۆرۆ",lsquo:"نیشانەی فاریزەی سەرووژێری تاکی چەپ",rsquo:"نیشانەی فاریزەی سەرووژێری تاکی ڕاست",ldquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی چه‌پ",rdquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی ڕاست",ndash:"تەقەڵی کورت",mdash:"تەقەڵی درێژ",iexcl:"نیشانەی هەڵەوگێڕی سەرسوڕهێنەر",cent:"نیشانەی سەنت",pound:"نیشانەی پاوەند",curren:"نیشانەی دراو",yen:"نیشانەی یەنی ژاپۆنی",brvbar:"شریتی ئەستوونی پچڕاو",sect:"نیشانەی دوو s لەسەریەک",uml:"خاڵ",copy:"نیشانەی مافی چاپ", +ordf:"هێڵ لەسەر پیتی a",laquo:"دوو تیری بەدووایەکی چەپ",not:"نیشانەی نەخێر",reg:"نیشانەی R لەناو بازنەدا",macr:"ماکڕۆن",deg:"نیشانەی پلە",sup2:"سەرنووسی دوو",sup3:"سەرنووسی سێ",acute:"لاری تیژ",micro:"نیشانەی u لق درێژی چەپی خواروو",para:"نیشانەی پەڕەگراف",middot:"ناوەڕاستی خاڵ",cedil:"نیشانەی c ژێر چووکرە",sup1:"سەرنووسی یەک",ordm:"هێڵ لەژێر پیتی o",raquo:"دوو تیری بەدووایەکی ڕاست",frac14:"یەک لەسەر چووار",frac12:"یەک لەسەر دوو",frac34:"سێ لەسەر چووار",iquest:"هێمای هەڵەوگێری پرسیار",Agrave:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری لار", +Aacute:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری تیژ",Acirc:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Atilde:"پیتی لاتینی A-ی گەورە لەگەڵ زەڕە",Auml:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Aring:"پیتی لاتینی گەورەی Å",AElig:"پیتی لاتینی گەورەی Æ",Ccedil:"پیتی لاتینی C-ی گەورە لەگەڵ ژێر چووکرە",Egrave:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری لار",Eacute:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ecirc:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری",Euml:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری", +Igrave:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری لار",Iacute:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری تیژ",Icirc:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",Iuml:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",ETH:"پیتی لاتینی E-ی گەورەی",Ntilde:"پیتی لاتینی N-ی گەورە لەگەڵ زەڕە",Ograve:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری لار",Oacute:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ocirc:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری",Otilde:"پیتی لاتینی O-ی گەورە لەگەڵ زەڕە",Ouml:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری", +times:"نیشانەی لێکدان",Oslash:"پیتی لاتینی گەورەی Ø لەگەڵ هێمای دڵ وەستان",Ugrave:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری لار",Uacute:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ucirc:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Uuml:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Yacute:"پیتی لاتینی Y-ی گەورە لەگەڵ ڕوومەتداری تیژ",THORN:"پیتی لاتینی دڕکی گەورە",szlig:"پیتی لاتنی نووک تیژی s",agrave:"پیتی لاتینی a-ی بچووک لەگەڵ ڕوومەتداری لار",aacute:"پیتی لاتینی a-ی بچووك لەگەڵ ڕوومەتداری تیژ",acirc:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری", +atilde:"پیتی لاتینی a-ی بچووك لەگەڵ زەڕە",auml:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری",aring:"پیتی لاتینی å-ی بچووك",aelig:"پیتی لاتینی æ-ی بچووك",ccedil:"پیتی لاتینی c-ی بچووك لەگەڵ ژێر چووکرە",egrave:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری لار",eacute:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری تیژ",ecirc:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",euml:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",igrave:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری لار",iacute:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری تیژ", +icirc:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",iuml:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",eth:"پیتی لاتینی e-ی بچووك",ntilde:"پیتی لاتینی n-ی بچووك لەگەڵ زەڕە",ograve:"پیتی لاتینی o-ی بچووك لەگەڵ ڕوومەتداری لار",oacute:"پیتی لاتینی o-ی بچووك له‌گەڵ ڕوومەتداری تیژ",ocirc:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",otilde:"پیتی لاتینی o-ی بچووك لەگەڵ زەڕە",ouml:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",divide:"نیشانەی دابەش",oslash:"پیتی لاتینی گەورەی ø لەگەڵ هێمای دڵ وەستان",ugrave:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری لار", +uacute:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری تیژ",ucirc:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",uuml:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",yacute:"پیتی لاتینی y-ی بچووك لەگەڵ ڕوومەتداری تیژ",thorn:"پیتی لاتینی دڕکی بچووك",yuml:"پیتی لاتینی y-ی بچووك لەگەڵ نیشانە لەسەری",OElig:"پیتی لاتینی گەورەی پێکەوەنووسراوی OE",oelig:"پیتی لاتینی بچووکی پێکەوەنووسراوی oe",372:"پیتی لاتینی W-ی گەورە لەگەڵ نیشانە لەسەری",374:"پیتی لاتینی Y-ی گەورە لەگەڵ نیشانە لەسەری",373:"پیتی لاتینی w-ی بچووکی لەگەڵ نیشانە لەسەری", +375:"پیتی لاتینی y-ی بچووکی لەگەڵ نیشانە لەسەری",sbquo:"نیشانەی فاریزەی نزم",8219:"نیشانەی فاریزەی بەرزی پێچەوانە",bdquo:"دوو فاریزەی تەنیش یەك",hellip:"ئاسۆیی بازنە",trade:"نیشانەی بازرگانی",9658:"ئاراستەی ڕەشی دەستی ڕاست",bull:"فیشەك",rarr:"تیری دەستی ڕاست",rArr:"دووتیری دەستی ڕاست",hArr:"دوو تیری ڕاست و چەپ",diams:"ڕەشی پاقڵاوەیی",asymp:"نیشانەی یەکسانە"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/lt.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/lt.js new file mode 100755 index 0000000000..e85cbc2939 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/lt.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","lt",{euro:"Euro ženklas",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cento ženklas",pound:"Svaro ženklas",curren:"Valiutos ženklas",yen:"Jenos ženklas",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Ne ženklas",reg:"Registered sign",macr:"Makronas",deg:"Laipsnio ženklas",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Mikro ženklas",para:"Pilcrow sign",middot:"Vidurinis taškas",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/lv.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/lv.js new file mode 100755 index 0000000000..1dbbd0656a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/lv.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","lv",{euro:"Euro zīme",lsquo:"Kreisā vienkārtīga pēdiņa",rsquo:"Labā vienkārtīga pēdiņa",ldquo:"Kreisā dubult pēdiņa",rdquo:"Labā dubult pēdiņa",ndash:"En svītra",mdash:"Em svītra",iexcl:"Apgriezta izsaukuma zīme",cent:"Centu naudas zīme",pound:"Sterliņu mārciņu naudas zīme",curren:"Valūtas zīme",yen:"Jenu naudas zīme",brvbar:"Vertikāla pārrauta līnija",sect:"Paragrāfa zīme",uml:"Diakritiska zīme",copy:"Autortiesību zīme",ordf:"Sievišķas kārtas rādītājs", +laquo:"Kreisā dubult stūra pēdiņu zīme",not:"Neparakstīts",reg:"Reģistrēta zīme",macr:"Garumzīme",deg:"Grādu zīme",sup2:"Augšraksts divi",sup3:"Augšraksts trīs",acute:"Akūta uzsvara zīme",micro:"Mikro zīme",para:"Rindkopas zīme ",middot:"Vidējs punkts",cedil:"Āķītis zem burta",sup1:"Augšraksts viens",ordm:"Vīrišķīgas kārtas rādītājs",raquo:"Labā dubult stūra pēdiņu zīme",frac14:"Vulgāra frakcija 1/4",frac12:"Vulgāra frakcija 1/2",frac34:"Vulgāra frakcija 3/4",iquest:"Apgriezta jautājuma zīme",Agrave:"Lielais latīņu burts A ar uzsvara zīmi", +Aacute:"Lielais latīņu burts A ar akūtu uzsvara zīmi",Acirc:"Lielais latīņu burts A ar diakritisku zīmi",Atilde:"Lielais latīņu burts A ar tildi ",Auml:"Lielais latīņu burts A ar diakritisko zīmi",Aring:"Lielais latīņu burts A ar aplīti augšā",AElig:"Lielais latīņu burts Æ",Ccedil:"Lielais latīņu burts C ar āķīti zem burta",Egrave:"Lielais latīņu burts E ar apostrofu",Eacute:"Lielais latīņu burts E ar akūtu uzsvara zīmi",Ecirc:"Lielais latīņu burts E ar diakritisko zīmi",Euml:"Lielais latīņu burts E ar diakritisko zīmi", +Igrave:"Lielais latīņu burts I ar uzsvaras zīmi",Iacute:"Lielais latīņu burts I ar akūtu uzsvara zīmi",Icirc:"Lielais latīņu burts I ar diakritisko zīmi",Iuml:"Lielais latīņu burts I ar diakritisko zīmi",ETH:"Lielais latīņu burts Eth",Ntilde:"Lielais latīņu burts N ar tildi",Ograve:"Lielais latīņu burts O ar uzsvara zīmi",Oacute:"Lielais latīņu burts O ar akūto uzsvara zīmi",Ocirc:"Lielais latīņu burts O ar diakritisko zīmi",Otilde:"Lielais latīņu burts O ar tildi",Ouml:"Lielais latīņu burts O ar diakritisko zīmi", +times:"Reizināšanas zīme ",Oslash:"Lielais latīņu burts O ar iesvītrojumu",Ugrave:"Lielais latīņu burts U ar uzsvaras zīmi",Uacute:"Lielais latīņu burts U ar akūto uzsvars zīmi",Ucirc:"Lielais latīņu burts U ar diakritisko zīmi",Uuml:"Lielais latīņu burts U ar diakritisko zīmi",Yacute:"Lielais latīņu burts Y ar akūto uzsvaras zīmi",THORN:"Lielais latīņu burts torn",szlig:"Mazs latīņu burts ar ligatūru",agrave:"Mazs latīņu burts a ar uzsvara zīmi",aacute:"Mazs latīņu burts a ar akūto uzsvara zīmi", +acirc:"Mazs latīņu burts a ar diakritisko zīmi",atilde:"Mazs latīņu burts a ar tildi",auml:"Mazs latīņu burts a ar diakritisko zīmi",aring:"Mazs latīņu burts a ar aplīti augšā",aelig:"Mazs latīņu burts æ",ccedil:"Mazs latīņu burts c ar āķīti zem burta",egrave:"Mazs latīņu burts e ar uzsvara zīmi ",eacute:"Mazs latīņu burts e ar akūtu uzsvara zīmi",ecirc:"Mazs latīņu burts e ar diakritisko zīmi",euml:"Mazs latīņu burts e ar diakritisko zīmi",igrave:"Mazs latīņu burts i ar uzsvara zīmi ",iacute:"Mazs latīņu burts i ar akūtu uzsvara zīmi", +icirc:"Mazs latīņu burts i ar diakritisko zīmi",iuml:"Mazs latīņu burts i ar diakritisko zīmi",eth:"Mazs latīņu burts eth",ntilde:"Mazs latīņu burts n ar tildi",ograve:"Mazs latīņu burts o ar uzsvara zīmi ",oacute:"Mazs latīņu burts o ar akūtu uzsvara zīmi",ocirc:"Mazs latīņu burts o ar diakritisko zīmi",otilde:"Mazs latīņu burts o ar tildi",ouml:"Mazs latīņu burts o ar diakritisko zīmi",divide:"Dalīšanas zīme",oslash:"Mazs latīņu burts o ar iesvītrojumu",ugrave:"Mazs latīņu burts u ar uzsvara zīmi ", +uacute:"Mazs latīņu burts u ar akūtu uzsvara zīmi",ucirc:"Mazs latīņu burts u ar diakritisko zīmi",uuml:"Mazs latīņu burts u ar diakritisko zīmi",yacute:"Mazs latīņu burts y ar akūtu uzsvaras zīmi",thorn:"Mazs latīņu burts torns",yuml:"Mazs latīņu burts y ar diakritisko zīmi",OElig:"Liela latīņu ligatūra OE",oelig:"Maza latīņu ligatūra oe",372:"Liels latīņu burts W ar diakritisko zīmi ",374:"Liels latīņu burts Y ar diakritisko zīmi ",373:"Mazs latīņu burts w ar diakritisko zīmi ",375:"Mazs latīņu burts y ar diakritisko zīmi ", +sbquo:"Mazas-9 vienkārtīgas pēdiņas",8219:"Lielas-9 vienkārtīgas apgrieztas pēdiņas",bdquo:"Mazas-9 dubultas pēdiņas",hellip:"Horizontāli daudzpunkti",trade:"Preču zīmes zīme",9658:"Melns pa labi pagriezts radītājs",bull:"Lode",rarr:"Bulta pa labi",rArr:"Dubulta Bulta pa labi",hArr:"Bulta pa kreisi",diams:"Dubulta Bulta pa kreisi",asymp:"Gandrīz vienāds ar"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/nb.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/nb.js new file mode 100755 index 0000000000..2cac741f66 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/nb.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","nb",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", +reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde", +Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel", +times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent", +ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks", +uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil", +rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/nl.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/nl.js new file mode 100755 index 0000000000..e43a8ee35b --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/nl.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","nl",{euro:"Euro-teken",lsquo:"Linker enkel aanhalingsteken",rsquo:"Rechter enkel aanhalingsteken",ldquo:"Linker dubbel aanhalingsteken",rdquo:"Rechter dubbel aanhalingsteken",ndash:"En dash",mdash:"Em dash",iexcl:"Omgekeerd uitroepteken",cent:"Cent-teken",pound:"Pond-teken",curren:"Valuta-teken",yen:"Yen-teken",brvbar:"Gebroken streep",sect:"Paragraaf-teken",uml:"Trema",copy:"Copyright-teken",ordf:"Vrouwelijk ordinaal",laquo:"Linker guillemet",not:"Ongelijk-teken", +reg:"Geregistreerd handelsmerk-teken",macr:"Macron",deg:"Graden-teken",sup2:"Superscript twee",sup3:"Superscript drie",acute:"Accent aigu",micro:"Micro-teken",para:"Alinea-teken",middot:"Halfhoge punt",cedil:"Cedille",sup1:"Superscript een",ordm:"Mannelijk ordinaal",raquo:"Rechter guillemet",frac14:"Breuk kwart",frac12:"Breuk half",frac34:"Breuk driekwart",iquest:"Omgekeerd vraagteken",Agrave:"Latijnse hoofdletter A met een accent grave",Aacute:"Latijnse hoofdletter A met een accent aigu",Acirc:"Latijnse hoofdletter A met een circonflexe", +Atilde:"Latijnse hoofdletter A met een tilde",Auml:"Latijnse hoofdletter A met een trema",Aring:"Latijnse hoofdletter A met een corona",AElig:"Latijnse hoofdletter Æ",Ccedil:"Latijnse hoofdletter C met een cedille",Egrave:"Latijnse hoofdletter E met een accent grave",Eacute:"Latijnse hoofdletter E met een accent aigu",Ecirc:"Latijnse hoofdletter E met een circonflexe",Euml:"Latijnse hoofdletter E met een trema",Igrave:"Latijnse hoofdletter I met een accent grave",Iacute:"Latijnse hoofdletter I met een accent aigu", +Icirc:"Latijnse hoofdletter I met een circonflexe",Iuml:"Latijnse hoofdletter I met een trema",ETH:"Latijnse hoofdletter Eth",Ntilde:"Latijnse hoofdletter N met een tilde",Ograve:"Latijnse hoofdletter O met een accent grave",Oacute:"Latijnse hoofdletter O met een accent aigu",Ocirc:"Latijnse hoofdletter O met een circonflexe",Otilde:"Latijnse hoofdletter O met een tilde",Ouml:"Latijnse hoofdletter O met een trema",times:"Maal-teken",Oslash:"Latijnse hoofdletter O met een schuine streep",Ugrave:"Latijnse hoofdletter U met een accent grave", +Uacute:"Latijnse hoofdletter U met een accent aigu",Ucirc:"Latijnse hoofdletter U met een circonflexe",Uuml:"Latijnse hoofdletter U met een trema",Yacute:"Latijnse hoofdletter Y met een accent aigu",THORN:"Latijnse hoofdletter Thorn",szlig:"Latijnse kleine ringel-s",agrave:"Latijnse kleine letter a met een accent grave",aacute:"Latijnse kleine letter a met een accent aigu",acirc:"Latijnse kleine letter a met een circonflexe",atilde:"Latijnse kleine letter a met een tilde",auml:"Latijnse kleine letter a met een trema", +aring:"Latijnse kleine letter a met een corona",aelig:"Latijnse kleine letter æ",ccedil:"Latijnse kleine letter c met een cedille",egrave:"Latijnse kleine letter e met een accent grave",eacute:"Latijnse kleine letter e met een accent aigu",ecirc:"Latijnse kleine letter e met een circonflexe",euml:"Latijnse kleine letter e met een trema",igrave:"Latijnse kleine letter i met een accent grave",iacute:"Latijnse kleine letter i met een accent aigu",icirc:"Latijnse kleine letter i met een circonflexe", +iuml:"Latijnse kleine letter i met een trema",eth:"Latijnse kleine letter eth",ntilde:"Latijnse kleine letter n met een tilde",ograve:"Latijnse kleine letter o met een accent grave",oacute:"Latijnse kleine letter o met een accent aigu",ocirc:"Latijnse kleine letter o met een circonflexe",otilde:"Latijnse kleine letter o met een tilde",ouml:"Latijnse kleine letter o met een trema",divide:"Deel-teken",oslash:"Latijnse kleine letter o met een schuine streep",ugrave:"Latijnse kleine letter u met een accent grave", +uacute:"Latijnse kleine letter u met een accent aigu",ucirc:"Latijnse kleine letter u met een circonflexe",uuml:"Latijnse kleine letter u met een trema",yacute:"Latijnse kleine letter y met een accent aigu",thorn:"Latijnse kleine letter thorn",yuml:"Latijnse kleine letter y met een trema",OElig:"Latijnse hoofdletter Œ",oelig:"Latijnse kleine letter œ",372:"Latijnse hoofdletter W met een circonflexe",374:"Latijnse hoofdletter Y met een circonflexe",373:"Latijnse kleine letter w met een circonflexe", +375:"Latijnse kleine letter y met een circonflexe",sbquo:"Lage enkele aanhalingsteken",8219:"Hoge omgekeerde enkele aanhalingsteken",bdquo:"Lage dubbele aanhalingsteken",hellip:"Beletselteken",trade:"Trademark-teken",9658:"Zwarte driehoek naar rechts",bull:"Bullet",rarr:"Pijl naar rechts",rArr:"Dubbele pijl naar rechts",hArr:"Dubbele pijl naar links",diams:"Zwart ruitje",asymp:"Benaderingsteken"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/no.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/no.js new file mode 100755 index 0000000000..4d37397483 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/no.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","no",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", +reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde", +Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel", +times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent", +ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks", +uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil", +rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/pl.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/pl.js new file mode 100755 index 0000000000..fc08fca6b2 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/pl.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","pl",{euro:"Znak euro",lsquo:"Cudzysłów pojedynczy otwierający",rsquo:"Cudzysłów pojedynczy zamykający",ldquo:"Cudzysłów apostrofowy otwierający",rdquo:"Cudzysłów apostrofowy zamykający",ndash:"Półpauza",mdash:"Pauza",iexcl:"Odwrócony wykrzyknik",cent:"Znak centa",pound:"Znak funta",curren:"Znak waluty",yen:"Znak jena",brvbar:"Przerwana pionowa kreska",sect:"Paragraf",uml:"Diereza",copy:"Znak praw autorskich",ordf:"Wskaźnik rodzaju żeńskiego liczebnika porządkowego", +laquo:"Lewy cudzysłów ostrokątny",not:"Znak negacji",reg:"Zastrzeżony znak towarowy",macr:"Makron",deg:"Znak stopnia",sup2:"Druga potęga",sup3:"Trzecia potęga",acute:"Akcent ostry",micro:"Znak mikro",para:"Znak akapitu",middot:"Kropka środkowa",cedil:"Cedylla",sup1:"Pierwsza potęga",ordm:"Wskaźnik rodzaju męskiego liczebnika porządkowego",raquo:"Prawy cudzysłów ostrokątny",frac14:"Ułamek zwykły jedna czwarta",frac12:"Ułamek zwykły jedna druga",frac34:"Ułamek zwykły trzy czwarte",iquest:"Odwrócony znak zapytania", +Agrave:"Wielka litera A z akcentem ciężkim",Aacute:"Wielka litera A z akcentem ostrym",Acirc:"Wielka litera A z akcentem przeciągłym",Atilde:"Wielka litera A z tyldą",Auml:"Wielka litera A z dierezą",Aring:"Wielka litera A z kółkiem",AElig:"Wielka ligatura Æ",Ccedil:"Wielka litera C z cedyllą",Egrave:"Wielka litera E z akcentem ciężkim",Eacute:"Wielka litera E z akcentem ostrym",Ecirc:"Wielka litera E z akcentem przeciągłym",Euml:"Wielka litera E z dierezą",Igrave:"Wielka litera I z akcentem ciężkim", +Iacute:"Wielka litera I z akcentem ostrym",Icirc:"Wielka litera I z akcentem przeciągłym",Iuml:"Wielka litera I z dierezą",ETH:"Wielka litera Eth",Ntilde:"Wielka litera N z tyldą",Ograve:"Wielka litera O z akcentem ciężkim",Oacute:"Wielka litera O z akcentem ostrym",Ocirc:"Wielka litera O z akcentem przeciągłym",Otilde:"Wielka litera O z tyldą",Ouml:"Wielka litera O z dierezą",times:"Znak mnożenia wektorowego",Oslash:"Wielka litera O z przekreśleniem",Ugrave:"Wielka litera U z akcentem ciężkim",Uacute:"Wielka litera U z akcentem ostrym", +Ucirc:"Wielka litera U z akcentem przeciągłym",Uuml:"Wielka litera U z dierezą",Yacute:"Wielka litera Y z akcentem ostrym",THORN:"Wielka litera Thorn",szlig:"Mała litera ostre s (eszet)",agrave:"Mała litera a z akcentem ciężkim",aacute:"Mała litera a z akcentem ostrym",acirc:"Mała litera a z akcentem przeciągłym",atilde:"Mała litera a z tyldą",auml:"Mała litera a z dierezą",aring:"Mała litera a z kółkiem",aelig:"Mała ligatura æ",ccedil:"Mała litera c z cedyllą",egrave:"Mała litera e z akcentem ciężkim", +eacute:"Mała litera e z akcentem ostrym",ecirc:"Mała litera e z akcentem przeciągłym",euml:"Mała litera e z dierezą",igrave:"Mała litera i z akcentem ciężkim",iacute:"Mała litera i z akcentem ostrym",icirc:"Mała litera i z akcentem przeciągłym",iuml:"Mała litera i z dierezą",eth:"Mała litera eth",ntilde:"Mała litera n z tyldą",ograve:"Mała litera o z akcentem ciężkim",oacute:"Mała litera o z akcentem ostrym",ocirc:"Mała litera o z akcentem przeciągłym",otilde:"Mała litera o z tyldą",ouml:"Mała litera o z dierezą", +divide:"Anglosaski znak dzielenia",oslash:"Mała litera o z przekreśleniem",ugrave:"Mała litera u z akcentem ciężkim",uacute:"Mała litera u z akcentem ostrym",ucirc:"Mała litera u z akcentem przeciągłym",uuml:"Mała litera u z dierezą",yacute:"Mała litera y z akcentem ostrym",thorn:"Mała litera thorn",yuml:"Mała litera y z dierezą",OElig:"Wielka ligatura OE",oelig:"Mała ligatura oe",372:"Wielka litera W z akcentem przeciągłym",374:"Wielka litera Y z akcentem przeciągłym",373:"Mała litera w z akcentem przeciągłym", +375:"Mała litera y z akcentem przeciągłym",sbquo:"Pojedynczy apostrof dolny",8219:"Pojedynczy apostrof górny",bdquo:"Podwójny apostrof dolny",hellip:"Wielokropek",trade:"Znak towarowy",9658:"Czarny wskaźnik wskazujący w prawo",bull:"Punktor",rarr:"Strzałka w prawo",rArr:"Podwójna strzałka w prawo",hArr:"Podwójna strzałka w lewo",diams:"Czarny znak karo",asymp:"Znak prawie równe"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js new file mode 100755 index 0000000000..f67395d59e --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","pt-br",{euro:"Euro",lsquo:"Aspas simples esquerda",rsquo:"Aspas simples direita",ldquo:"Aspas duplas esquerda",rdquo:"Aspas duplas direita",ndash:"Traço",mdash:"Travessão",iexcl:"Ponto de exclamação invertido",cent:"Cent",pound:"Cerquilha",curren:"Dinheiro",yen:"Yen",brvbar:"Bara interrompida",sect:"Símbolo de Parágrafo",uml:"Trema",copy:"Direito de Cópia",ordf:"Indicador ordinal feminino",laquo:"Aspas duplas angulares esquerda",not:"Negação",reg:"Marca Registrada", +macr:"Mácron",deg:"Grau",sup2:"2 Superscrito",sup3:"3 Superscrito",acute:"Acento agudo",micro:"Micro",para:"Pé de mosca",middot:"Ponto mediano",cedil:"Cedilha",sup1:"1 Superscrito",ordm:"Indicador ordinal masculino",raquo:"Aspas duplas angulares direita",frac14:"Um quarto",frac12:"Um meio",frac34:"Três quartos",iquest:"Interrogação invertida",Agrave:"A maiúsculo com acento grave",Aacute:"A maiúsculo com acento agudo",Acirc:"A maiúsculo com acento circunflexo",Atilde:"A maiúsculo com til",Auml:"A maiúsculo com trema", +Aring:"A maiúsculo com anel acima",AElig:"Æ maiúsculo",Ccedil:"Ç maiúlculo",Egrave:"E maiúsculo com acento grave",Eacute:"E maiúsculo com acento agudo",Ecirc:"E maiúsculo com acento circumflexo",Euml:"E maiúsculo com trema",Igrave:"I maiúsculo com acento grave",Iacute:"I maiúsculo com acento agudo",Icirc:"I maiúsculo com acento circunflexo",Iuml:"I maiúsculo com crase",ETH:"Eth maiúsculo",Ntilde:"N maiúsculo com til",Ograve:"O maiúsculo com acento grave",Oacute:"O maiúsculo com acento agudo",Ocirc:"O maiúsculo com acento circunflexo", +Otilde:"O maiúsculo com til",Ouml:"O maiúsculo com trema",times:"Multiplicação",Oslash:"Diâmetro",Ugrave:"U maiúsculo com acento grave",Uacute:"U maiúsculo com acento agudo",Ucirc:"U maiúsculo com acento circunflexo",Uuml:"U maiúsculo com trema",Yacute:"Y maiúsculo com acento agudo",THORN:"Thorn maiúsculo",szlig:"Eszett minúsculo",agrave:"a minúsculo com acento grave",aacute:"a minúsculo com acento agudo",acirc:"a minúsculo com acento circunflexo",atilde:"a minúsculo com til",auml:"a minúsculo com trema", +aring:"a minúsculo com anel acima",aelig:"æ minúsculo",ccedil:"ç minúsculo",egrave:"e minúsculo com acento grave",eacute:"e minúsculo com acento agudo",ecirc:"e minúsculo com acento circunflexo",euml:"e minúsculo com trema",igrave:"i minúsculo com acento grave",iacute:"i minúsculo com acento agudo",icirc:"i minúsculo com acento circunflexo",iuml:"i minúsculo com trema",eth:"eth minúsculo",ntilde:"n minúsculo com til",ograve:"o minúsculo com acento grave",oacute:"o minúsculo com acento agudo",ocirc:"o minúsculo com acento circunflexo", +otilde:"o minúsculo com til",ouml:"o minúsculo com trema",divide:"Divisão",oslash:"o minúsculo com cortado ou diâmetro",ugrave:"u minúsculo com acento grave",uacute:"u minúsculo com acento agudo",ucirc:"u minúsculo com acento circunflexo",uuml:"u minúsculo com trema",yacute:"y minúsculo com acento agudo",thorn:"thorn minúsculo",yuml:"y minúsculo com trema",OElig:"Ligação tipográfica OE maiúscula",oelig:"Ligação tipográfica oe minúscula",372:"W maiúsculo com acento circunflexo",374:"Y maiúsculo com acento circunflexo", +373:"w minúsculo com acento circunflexo",375:"y minúsculo com acento circunflexo",sbquo:"Aspas simples inferior direita",8219:"Aspas simples superior esquerda",bdquo:"Aspas duplas inferior direita",hellip:"Reticências",trade:"Trade mark",9658:"Ponta de seta preta para direita",bull:"Ponto lista",rarr:"Seta para direita",rArr:"Seta dupla para direita",hArr:"Seta dupla direita e esquerda",diams:"Ouros",asymp:"Aproximadamente"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/pt.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/pt.js new file mode 100755 index 0000000000..af236b9cca --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/pt.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","pt",{euro:"Símbolo do Euro",lsquo:"Aspa esquerda simples",rsquo:"Aspa direita simples",ldquo:"Aspa esquerda dupla",rdquo:"Aspa direita dupla",ndash:"Travessão Simples",mdash:"Travessão Longo",iexcl:"Ponto de exclamação invertido",cent:"Símbolo do Cêntimo",pound:"Símbolo da Libra",curren:"Símbolo de Moeda",yen:"Símbolo do Iene",brvbar:"Barra quebrada",sect:"Símbolo de Secção",uml:"Trema",copy:"Símbolo dos Direitos de Autor",ordf:"Indicador ordinal feminino", +laquo:"Aspa esquerda ângulo duplo",not:"Não Símbolo",reg:"Símbolo de Registado",macr:"Mácron",deg:"Símbolo de Grau",sup2:"Expoente 2",sup3:"Expoente 3",acute:"Acento agudo",micro:"Símbolo de Micro",para:"Símbolo de Parágrafo",middot:"Ponto do Meio",cedil:"Cedilha",sup1:"Expoente 1",ordm:"Indicador ordinal masculino",raquo:"Aspas ângulo duplo pra Direita",frac14:"Fração vulgar 1/4",frac12:"Fração vulgar 1/2",frac34:"Fração vulgar 3/4",iquest:"Ponto de interrogação invertido",Agrave:"Letra maiúscula latina A com acento grave", +Aacute:"Letra maiúscula latina A com acento agudo",Acirc:"Letra maiúscula latina A com circunflexo",Atilde:"Letra maiúscula latina A com til",Auml:"Letra maiúscula latina A com trema",Aring:"Letra maiúscula latina A com sinal diacrítico",AElig:"Letra maiúscula latina Æ",Ccedil:"Letra maiúscula latina C com cedilha",Egrave:"Letra maiúscula latina E com acento grave",Eacute:"Letra maiúscula latina E com acento agudo",Ecirc:"Letra maiúscula latina E com circunflexo",Euml:"Letra maiúscula latina E com trema", +Igrave:"Letra maiúscula latina I com acento grave",Iacute:"Letra maiúscula latina I com acento agudo",Icirc:"Letra maiúscula latina I com cincunflexo",Iuml:"Letra maiúscula latina I com trema",ETH:"Letra maiúscula latina Eth (Ðð)",Ntilde:"Letra maiúscula latina N com til",Ograve:"Letra maiúscula latina O com acento grave",Oacute:"Letra maiúscula latina O com acento agudo",Ocirc:"Letra maiúscula latina I com circunflexo",Otilde:"Letra maiúscula latina O com til",Ouml:"Letra maiúscula latina O com trema", +times:"Símbolo de multiplicação",Oslash:"Letra maiúscula O com barra",Ugrave:"Letra maiúscula latina U com acento grave",Uacute:"Letra maiúscula latina U com acento agudo",Ucirc:"Letra maiúscula latina U com circunflexo",Uuml:"Letra maiúscula latina E com trema",Yacute:"Letra maiúscula latina Y com acento agudo",THORN:"Letra maiúscula latina Rúnico",szlig:"Letra minúscula latina s forte",agrave:"Letra minúscula latina a com acento grave",aacute:"Letra minúscula latina a com acento agudo",acirc:"Letra minúscula latina a com circunflexo", +atilde:"Letra minúscula latina a com til",auml:"Letra minúscula latina a com trema",aring:"Letra minúscula latina a com sinal diacrítico",aelig:"Letra minúscula latina æ",ccedil:"Letra minúscula latina c com cedilha",egrave:"Letra minúscula latina e com acento grave",eacute:"Letra minúscula latina e com acento agudo",ecirc:"Letra minúscula latina e com circunflexo",euml:"Letra minúscula latina e com trema",igrave:"Letra minúscula latina i com acento grave",iacute:"Letra minúscula latina i com acento agudo", +icirc:"Letra minúscula latina i com circunflexo",iuml:"Letra pequena latina i com trema",eth:"Letra minúscula latina eth",ntilde:"Letra minúscula latina n com til",ograve:"Letra minúscula latina o com acento grave",oacute:"Letra minúscula latina o com acento agudo",ocirc:"Letra minúscula latina o com circunflexo",otilde:"Letra minúscula latina o com til",ouml:"Letra minúscula latina o com trema",divide:"Símbolo de divisão",oslash:"Letra minúscula latina o com barra",ugrave:"Letra minúscula latina u com acento grave", +uacute:"Letra minúscula latina u com acento agudo",ucirc:"Letra minúscula latina u com circunflexo",uuml:"Letra minúscula latina u com trema",yacute:"Letra minúscula latina y com acento agudo",thorn:"Letra minúscula latina Rúnico",yuml:"Letra minúscula latina y com trema",OElig:"Ligadura maiúscula latina OE",oelig:"Ligadura minúscula latina oe",372:"Letra maiúscula latina W com circunflexo",374:"Letra maiúscula latina Y com circunflexo",373:"Letra minúscula latina w com circunflexo",375:"Letra minúscula latina y com circunflexo", +sbquo:"Aspa Simples inferior-9",8219:"Aspa Simples superior invertida-9",bdquo:"Aspa duplas inferior-9",hellip:"Elipse Horizontal ",trade:"Símbolo de Marca Registada",9658:"Ponteiro preto direito",bull:"Marca",rarr:"Seta para a direita",rArr:"Seta dupla para a direita",hArr:"Seta dupla direita esquerda",diams:"Naipe diamante preto",asymp:"Quase igual a "}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ru.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ru.js new file mode 100755 index 0000000000..9e766d2532 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ru.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ru",{euro:"Знак евро",lsquo:"Левая одинарная кавычка",rsquo:"Правая одинарная кавычка",ldquo:"Левая двойная кавычка",rdquo:"Левая двойная кавычка",ndash:"Среднее тире",mdash:"Длинное тире",iexcl:"перевёрнутый восклицательный знак",cent:"Цент",pound:"Фунт",curren:"Знак валюты",yen:"Йена",brvbar:"Вертикальная черта с разрывом",sect:"Знак параграфа",uml:"Умлаут",copy:"Знак охраны авторского права",ordf:"Указатель окончания женского рода ...ая",laquo:"Левая кавычка-«ёлочка»", +not:"Отрицание",reg:"Знак охраны смежных прав\\t",macr:"Макрон",deg:"Градус",sup2:"Надстрочное два",sup3:"Надстрочное три",acute:"Акут",micro:"Микро",para:"Абзац",middot:"Интерпункт",cedil:"Седиль",sup1:"Надстрочная единица",ordm:"Порядковое числительное",raquo:"Правая кавычка-«ёлочка»",frac14:"Одна четвертая",frac12:"Одна вторая",frac34:"Три четвёртых",iquest:"Перевёрнутый вопросительный знак",Agrave:"Латинская заглавная буква А с апострофом",Aacute:"Латинская заглавная буква A с ударением",Acirc:"Латинская заглавная буква А с циркумфлексом", +Atilde:"Латинская заглавная буква А с тильдой",Auml:"Латинская заглавная буква А с тремой",Aring:"Латинская заглавная буква А с кольцом над ней",AElig:"Латинская большая буква Æ",Ccedil:"Латинская заглавная буква C с седилью",Egrave:"Латинская заглавная буква Е с апострофом",Eacute:"Латинская заглавная буква Е с ударением",Ecirc:"Латинская заглавная буква Е с циркумфлексом",Euml:"Латинская заглавная буква Е с тремой",Igrave:"Латинская заглавная буква I с апострофом",Iacute:"Латинская заглавная буква I с ударением", +Icirc:"Латинская заглавная буква I с циркумфлексом",Iuml:"Латинская заглавная буква I с тремой",ETH:"Латинская большая буква Eth",Ntilde:"Латинская заглавная буква N с тильдой",Ograve:"Латинская заглавная буква O с апострофом",Oacute:"Латинская заглавная буква O с ударением",Ocirc:"Латинская заглавная буква O с циркумфлексом",Otilde:"Латинская заглавная буква O с тильдой",Ouml:"Латинская заглавная буква O с тремой",times:"Знак умножения",Oslash:"Латинская большая перечеркнутая O",Ugrave:"Латинская заглавная буква U с апострофом", +Uacute:"Латинская заглавная буква U с ударением",Ucirc:"Латинская заглавная буква U с циркумфлексом",Uuml:"Латинская заглавная буква U с тремой",Yacute:"Латинская заглавная буква Y с ударением",THORN:"Латинская заглавная буква Thorn",szlig:"Знак диеза",agrave:"Латинская маленькая буква a с апострофом",aacute:"Латинская маленькая буква a с ударением",acirc:"Латинская маленькая буква a с циркумфлексом",atilde:"Латинская маленькая буква a с тильдой",auml:"Латинская маленькая буква a с тремой",aring:"Латинская маленькая буква a с кольцом", +aelig:"Латинская маленькая буква æ",ccedil:"Латинская маленькая буква с с седилью",egrave:"Латинская маленькая буква е с апострофом",eacute:"Латинская маленькая буква е с ударением",ecirc:"Латинская маленькая буква е с циркумфлексом",euml:"Латинская маленькая буква е с тремой",igrave:"Латинская маленькая буква i с апострофом",iacute:"Латинская маленькая буква i с ударением",icirc:"Латинская маленькая буква i с циркумфлексом",iuml:"Латинская маленькая буква i с тремой",eth:"Латинская маленькая буква eth", +ntilde:"Латинская маленькая буква n с тильдой",ograve:"Латинская маленькая буква o с апострофом",oacute:"Латинская маленькая буква o с ударением",ocirc:"Латинская маленькая буква o с циркумфлексом",otilde:"Латинская маленькая буква o с тильдой",ouml:"Латинская маленькая буква o с тремой",divide:"Знак деления",oslash:"Латинская строчная перечеркнутая o",ugrave:"Латинская маленькая буква u с апострофом",uacute:"Латинская маленькая буква u с ударением",ucirc:"Латинская маленькая буква u с циркумфлексом", +uuml:"Латинская маленькая буква u с тремой",yacute:"Латинская маленькая буква y с ударением",thorn:"Латинская маленькая буква thorn",yuml:"Латинская маленькая буква y с тремой",OElig:"Латинская прописная лигатура OE",oelig:"Латинская строчная лигатура oe",372:"Латинская заглавная буква W с циркумфлексом",374:"Латинская заглавная буква Y с циркумфлексом",373:"Латинская маленькая буква w с циркумфлексом",375:"Латинская маленькая буква y с циркумфлексом",sbquo:"Нижняя одинарная кавычка",8219:"Правая одинарная кавычка", +bdquo:"Левая двойная кавычка",hellip:"Горизонтальное многоточие",trade:"Товарный знак",9658:"Черный указатель вправо",bull:"Маркер списка",rarr:"Стрелка вправо",rArr:"Двойная стрелка вправо",hArr:"Двойная стрелка влево-вправо",diams:"Черный ромб",asymp:"Примерно равно"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/si.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/si.js new file mode 100755 index 0000000000..34adbeb14a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/si.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","si",{euro:"යුරෝ සලකුණ",lsquo:"වමේ තනි උපුටා දක්වීම ",rsquo:"දකුණේ තනි උපුටා දක්වීම ",ldquo:"වමේ දිත්ව උපුටා දක්වීම ",rdquo:"දකුණේ දිත්ව උපුටා දක්වීම ",ndash:"En dash",mdash:"Em dash",iexcl:"යටිකුරු හර්ෂදී ",cent:"Cent sign",pound:"Pound sign",curren:"මුල්‍යමය ",yen:"යෙන් ",brvbar:"Broken bar",sect:"තෙරේම් ",uml:"Diaeresis",copy:"පිටපත් අයිතිය ",ordf:"දර්ශකය",laquo:"Left-pointing double angle quotation mark",not:"සලකුණක් නොවේ",reg:"සලකුණක් ලියාපදිංචි කිරීම", +macr:"මුද්‍රිත ",deg:"සලකුණේ ",sup2:"උඩු ලකුණු දෙක",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent", +Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", +Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent", +Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above", +aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", +ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", +thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", +bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/sk.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/sk.js new file mode 100755 index 0000000000..17442d187a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/sk.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","sk",{euro:"Znak eura",lsquo:"Ľavá jednoduchá úvodzovka",rsquo:"Pravá jednoduchá úvodzovka",ldquo:"Pravá dvojitá úvodzovka",rdquo:"Pravá dvojitá úvodzovka",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrátený výkričník",cent:"Znak centu",pound:"Znak libry",curren:"Znak meny",yen:"Znak jenu",brvbar:"Prerušená zvislá čiara",sect:"Znak odseku",uml:"Prehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených úvodzoviek vľavo",not:"Logistický zápor", +reg:"Znak registrácie",macr:"Pomlčka nad",deg:"Znak stupňa",sup2:"Dvojka ako horný index",sup3:"Trojka ako horný index",acute:"Dĺžeň",micro:"Znak mikro",para:"Znak odstavca",middot:"Bodka uprostred",cedil:"Chvost vľavo",sup1:"Jednotka ako horný index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených úvodzoviek vpravo",frac14:"Obyčajný zlomok jedna štvrtina",frac12:"Obyčajný zlomok jedna polovica",frac34:"Obyčajný zlomok tri štvrtiny",iquest:"Otočený otáznik",Agrave:"Veľké písmeno latinky A s accentom", +Aacute:"Veľké písmeno latinky A s dĺžňom",Acirc:"Veľké písmeno latinky A s mäkčeňom",Atilde:"Veľké písmeno latinky A s tildou",Auml:"Veľké písmeno latinky A s dvoma bodkami",Aring:"Veľké písmeno latinky A s krúžkom nad",AElig:"Veľké písmeno latinky Æ",Ccedil:"Veľké písmeno latinky C s chvostom vľavo",Egrave:"Veľké písmeno latinky E s accentom",Eacute:"Veľké písmeno latinky E s dĺžňom",Ecirc:"Veľké písmeno latinky E s mäkčeňom",Euml:"Veľké písmeno latinky E s dvoma bodkami",Igrave:"Veľké písmeno latinky I s accentom", +Iacute:"Veľké písmeno latinky I s dĺžňom",Icirc:"Veľké písmeno latinky I s mäkčeňom",Iuml:"Veľké písmeno latinky I s dvoma bodkami",ETH:"Veľké písmeno latinky Eth",Ntilde:"Veľké písmeno latinky N s tildou",Ograve:"Veľké písmeno latinky O s accentom",Oacute:"Veľké písmeno latinky O s dĺžňom",Ocirc:"Veľké písmeno latinky O s mäkčeňom",Otilde:"Veľké písmeno latinky O s tildou",Ouml:"Veľké písmeno latinky O s dvoma bodkami",times:"Znak násobenia",Oslash:"Veľké písmeno latinky O preškrtnuté",Ugrave:"Veľké písmeno latinky U s accentom", +Uacute:"Veľké písmeno latinky U s dĺžňom",Ucirc:"Veľké písmeno latinky U s mäkčeňom",Uuml:"Veľké písmeno latinky U s dvoma bodkami",Yacute:"Veľké písmeno latinky Y s dĺžňom",THORN:"Veľké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s accentom",aacute:"Malé písmeno latinky a s dĺžňom",acirc:"Malé písmeno latinky a s mäkčeňom",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvoma bodkami",aring:"Malé písmeno latinky a s krúžkom nad", +aelig:"Malé písmeno latinky æ",ccedil:"Malé písmeno latinky c s chvostom vľavo",egrave:"Malé písmeno latinky e s accentom",eacute:"Malé písmeno latinky e s dĺžňom",ecirc:"Malé písmeno latinky e s mäkčeňom",euml:"Malé písmeno latinky e s dvoma bodkami",igrave:"Malé písmeno latinky i s accentom",iacute:"Malé písmeno latinky i s dĺžňom",icirc:"Malé písmeno latinky i s mäkčeňom",iuml:"Malé písmeno latinky i s dvoma bodkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s accentom", +oacute:"Malé písmeno latinky o s dĺžňom",ocirc:"Malé písmeno latinky o s mäkčeňom",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvoma bodkami",divide:"Znak delenia",oslash:"Malé písmeno latinky o preškrtnuté",ugrave:"Malé písmeno latinky u s accentom",uacute:"Malé písmeno latinky u s dĺžňom",ucirc:"Malé písmeno latinky u s mäkčeňom",uuml:"Malé písmeno latinky u s dvoma bodkami",yacute:"Malé písmeno latinky y s dĺžňom",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvoma bodkami", +OElig:"Veľká ligatúra latinky OE",oelig:"Malá ligatúra latinky OE",372:"Veľké písmeno latinky W s mäkčeňom",374:"Veľké písmeno latinky Y s mäkčeňom",373:"Malé písmeno latinky w s mäkčeňom",375:"Malé písmeno latinky y s mäkčeňom",sbquo:"Dolná jednoduchá 9-úvodzovka",8219:"Horná jednoduchá otočená 9-úvodzovka",bdquo:"Dolná dvojitá 9-úvodzovka",hellip:"Trojbodkový úvod",trade:"Znak ibchodnej značky",9658:"Čierny ukazovateľ smerujúci vpravo",bull:"Kruh",rarr:"Šípka vpravo",rArr:"Dvojitá šipka vpravo", +hArr:"Dvojitá šipka vľavo a vpravo",diams:"Čierne piky",asymp:"Skoro sa rovná"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/sl.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/sl.js new file mode 100755 index 0000000000..f71077416c --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/sl.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","sl",{euro:"Evro znak",lsquo:"Levi enojni narekovaj",rsquo:"Desni enojni narekovaj",ldquo:"Levi dvojni narekovaj",rdquo:"Desni dvojni narekovaj",ndash:"En pomišljaj",mdash:"Em pomišljaj",iexcl:"Obrnjen klicaj",cent:"Cent znak",pound:"Funt znak",curren:"Znak valute",yen:"Jen znak",brvbar:"Zlomljena črta",sect:"Znak oddelka",uml:"Diaeresis",copy:"Znak avtorskih pravic",ordf:"Ženski zaporedni kazalnik",laquo:"Levi obrnjen dvojni kotni narekovaj",not:"Ne znak",reg:"Registrirani znak", +macr:"Macron",deg:"Znak stopinj",sup2:"Nadpisano dva",sup3:"Nadpisano tri",acute:"Ostrivec",micro:"Mikro znak",para:"Pilcrow znak",middot:"Sredinska pika",cedil:"Cedilla",sup1:"Nadpisano ena",ordm:"Moški zaporedni kazalnik",raquo:"Desno obrnjen dvojni kotni narekovaj",frac14:"Ena četrtina",frac12:"Ena polovica",frac34:"Tri četrtine",iquest:"Obrnjen vprašaj",Agrave:"Velika latinska črka A s krativcem",Aacute:"Velika latinska črka A z ostrivcem",Acirc:"Velika latinska črka A s strešico",Atilde:"Velika latinska črka A z tildo", +Auml:"Velika latinska črka A z diaeresis-om",Aring:"Velika latinska črka A z obročem",AElig:"Velika latinska črka Æ",Ccedil:"Velika latinska črka C s cedillo",Egrave:"Velika latinska črka E s krativcem",Eacute:"Velika latinska črka E z ostrivcem",Ecirc:"Velika latinska črka E s strešico",Euml:"Velika latinska črka E z diaeresis-om",Igrave:"Velika latinska črka I s krativcem",Iacute:"Velika latinska črka I z ostrivcem",Icirc:"Velika latinska črka I s strešico",Iuml:"Velika latinska črka I z diaeresis-om", +ETH:"Velika latinska črka Eth",Ntilde:"Velika latinska črka N s tildo",Ograve:"Velika latinska črka O s krativcem",Oacute:"Velika latinska črka O z ostrivcem",Ocirc:"Velika latinska črka O s strešico",Otilde:"Velika latinska črka O s tildo",Ouml:"Velika latinska črka O z diaeresis-om",times:"Znak za množenje",Oslash:"Velika prečrtana latinska črka O",Ugrave:"Velika latinska črka U s krativcem",Uacute:"Velika latinska črka U z ostrivcem",Ucirc:"Velika latinska črka U s strešico",Uuml:"Velika latinska črka U z diaeresis-om", +Yacute:"Velika latinska črka Y z ostrivcem",THORN:"Velika latinska črka Thorn",szlig:"Mala ostra latinska črka s",agrave:"Mala latinska črka a s krativcem",aacute:"Mala latinska črka a z ostrivcem",acirc:"Mala latinska črka a s strešico",atilde:"Mala latinska črka a s tildo",auml:"Mala latinska črka a z diaeresis-om",aring:"Mala latinska črka a z obročem",aelig:"Mala latinska črka æ",ccedil:"Mala latinska črka c s cedillo",egrave:"Mala latinska črka e s krativcem",eacute:"Mala latinska črka e z ostrivcem", +ecirc:"Mala latinska črka e s strešico",euml:"Mala latinska črka e z diaeresis-om",igrave:"Mala latinska črka i s krativcem",iacute:"Mala latinska črka i z ostrivcem",icirc:"Mala latinska črka i s strešico",iuml:"Mala latinska črka i z diaeresis-om",eth:"Mala latinska črka eth",ntilde:"Mala latinska črka n s tildo",ograve:"Mala latinska črka o s krativcem",oacute:"Mala latinska črka o z ostrivcem",ocirc:"Mala latinska črka o s strešico",otilde:"Mala latinska črka o s tildo",ouml:"Mala latinska črka o z diaeresis-om", +divide:"Znak za deljenje",oslash:"Mala prečrtana latinska črka o",ugrave:"Mala latinska črka u s krativcem",uacute:"Mala latinska črka u z ostrivcem",ucirc:"Mala latinska črka u s strešico",uuml:"Mala latinska črka u z diaeresis-om",yacute:"Mala latinska črka y z ostrivcem",thorn:"Mala latinska črka thorn",yuml:"Mala latinska črka y z diaeresis-om",OElig:"Velika latinska ligatura OE",oelig:"Mala latinska ligatura oe",372:"Velika latinska črka W s strešico",374:"Velika latinska črka Y s strešico", +373:"Mala latinska črka w s strešico",375:"Mala latinska črka y s strešico",sbquo:"Enojni nizki-9 narekovaj",8219:"Enojni visoki-obrnjen-9 narekovaj",bdquo:"Dvojni nizki-9 narekovaj",hellip:"Horizontalni izpust",trade:"Znak blagovne znamke",9658:"Črni desno-usmerjen kazalec",bull:"Krogla",rarr:"Desno-usmerjena puščica",rArr:"Desno-usmerjena dvojna puščica",hArr:"Leva in desna dvojna puščica",diams:"Črna kara",asymp:"Skoraj enako"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/sq.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/sq.js new file mode 100755 index 0000000000..4e3c1a56c9 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/sq.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","sq",{euro:"Shenja e Euros",lsquo:"Thonjëza majtas me një vi",rsquo:"Thonjëza djathtas me një vi",ldquo:"Thonjëza majtas",rdquo:"Thonjëza djathtas",ndash:"En viza lidhëse",mdash:"Em viza lidhëse",iexcl:"Pikëçuditëse e përmbysur",cent:"Shenja e Centit",pound:"Shejna e Funtit",curren:"Shenja e valutës",yen:"Shenja e Jenit",brvbar:"Viza e këputur",sect:"Shenja e pjesës",uml:"Diaeresis",copy:"Shenja e të drejtave të kopjimit",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Nuk ka shenjë",reg:"Shenja e të regjistruarit",macr:"Macron",deg:"Shenja e shkallës",sup2:"Super-skripta dy",sup3:"Super-skripta tre",acute:"Theks i mprehtë",micro:"Shjenja e Mikros",para:"Pilcrow sign",middot:"Pika e Mesme",cedil:"Hark nën shkronja",sup1:"Super-skripta një",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Thyesa një të katrat",frac12:"Thyesa një të dytat",frac34:"Thyesa tre të katrat",iquest:"Pikëpyetje e përmbysur",Agrave:"Shkronja e madhe latine A me theks të rëndë", +Aacute:"Shkronja e madhe latine A me theks akute",Acirc:"Shkronja e madhe latine A me theks lakor",Atilde:"Shkronja e madhe latine A me tildë",Auml:"Shkronja e madhe latine A me dy pika",Aring:"Shkronja e madhe latine A me unazë mbi",AElig:"Shkronja e madhe latine Æ",Ccedil:"Shkronja e madhe latine C me hark poshtë",Egrave:"Shkronja e madhe latine E me theks të rëndë",Eacute:"Shkronja e madhe latine E me theks akute",Ecirc:"Shkronja e madhe latine E me theks lakor",Euml:"Shkronja e madhe latine E me dy pika", +Igrave:"Shkronja e madhe latine I me theks të rëndë",Iacute:"Shkronja e madhe latine I me theks akute",Icirc:"Shkronja e madhe latine I me theks lakor",Iuml:"Shkronja e madhe latine I me dy pika",ETH:"Shkronja e madhe latine Eth",Ntilde:"Shkronja e madhe latine N me tildë",Ograve:"Shkronja e madhe latine O me theks të rëndë",Oacute:"Shkronja e madhe latine O me theks akute",Ocirc:"Shkronja e madhe latine O me theks lakor",Otilde:"Shkronja e madhe latine O me tildë",Ouml:"Shkronja e madhe latine O me dy pika", +times:"Shenja e shumëzimit",Oslash:"Shkronja e madhe latine O me vizë në mes",Ugrave:"Shkronja e madhe latine U me theks të rëndë",Uacute:"Shkronja e madhe latine U me theks akute",Ucirc:"Shkronja e madhe latine U me theks lakor",Uuml:"Shkronja e madhe latine U me dy pika",Yacute:"Shkronja e madhe latine Y me theks akute",THORN:"Shkronja e madhe latine Thorn",szlig:"Shkronja e vogë latine s e mprehtë",agrave:"Shkronja e vogë latine a me theks të rëndë",aacute:"Shkronja e vogë latine a me theks të mprehtë", +acirc:"Shkronja e vogël latine a me theks lakor",atilde:"Shkronja e vogël latine a me tildë",auml:"Shkronja e vogël latine a me dy pika",aring:"Shkronja e vogë latine a me unazë mbi",aelig:"Shkronja e vogë latine æ",ccedil:"Shkronja e vogël latine c me hark poshtë",egrave:"Shkronja e vogë latine e me theks të rëndë",eacute:"Shkronja e vogë latine e me theks të mprehtë",ecirc:"Shkronja e vogël latine e me theks lakor",euml:"Shkronja e vogël latine e me dy pika",igrave:"Shkronja e vogë latine i me theks të rëndë", +iacute:"Shkronja e vogë latine i me theks të mprehtë",icirc:"Shkronja e vogël latine i me theks lakor",iuml:"Shkronja e vogël latine i me dy pika",eth:"Shkronja e vogë latine eth",ntilde:"Shkronja e vogël latine n me tildë",ograve:"Shkronja e vogë latine o me theks të rëndë",oacute:"Shkronja e vogë latine o me theks të mprehtë",ocirc:"Shkronja e vogël latine o me theks lakor",otilde:"Shkronja e vogël latine o me tildë",ouml:"Shkronja e vogël latine o me dy pika",divide:"Shenja ndarëse",oslash:"Shkronja e vogël latine o me vizë në mes", +ugrave:"Shkronja e vogë latine u me theks të rëndë",uacute:"Shkronja e vogë latine u me theks të mprehtë",ucirc:"Shkronja e vogël latine u me theks lakor",uuml:"Shkronja e vogël latine u me dy pika",yacute:"Shkronja e vogë latine y me theks të mprehtë",thorn:"Shkronja e vogël latine thorn",yuml:"Shkronja e vogël latine y me dy pika",OElig:"Shkronja e madhe e bashkuar latine OE",oelig:"Shkronja e vogël e bashkuar latine oe",372:"Shkronja e madhe latine W me theks lakor",374:"Shkronja e madhe latine Y me theks lakor", +373:"Shkronja e vogël latine w me theks lakor",375:"Shkronja e vogël latine y me theks lakor",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Shenja e Simbolit Tregtarë",9658:"Black right-pointing pointer",bull:"Pulla",rarr:"Shigjeta djathtas",rArr:"Shenja të dyfishta djathtas",hArr:"Shigjeta e dyfishë majtas-djathtas",diams:"Black diamond suit",asymp:"Gati e barabar me"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/sv.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/sv.js new file mode 100755 index 0000000000..a9beb3333a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/sv.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","sv",{euro:"Eurotecken",lsquo:"Enkelt vänster citattecken",rsquo:"Enkelt höger citattecken",ldquo:"Dubbelt vänster citattecken",rdquo:"Dubbelt höger citattecken",ndash:"Snedstreck",mdash:"Långt tankstreck",iexcl:"Inverterad utropstecken",cent:"Centtecken",pound:"Pundtecken",curren:"Valutatecken",yen:"Yentecken",brvbar:"Brutet lodrätt streck",sect:"Paragraftecken",uml:"Diaeresis",copy:"Upphovsrättstecken",ordf:"Feminit ordningstalsindikator",laquo:"Vänsterställt dubbelt vinkelcitationstecken", +not:"Icke-tecken",reg:"Registrerad",macr:"Macron",deg:"Grader",sup2:"Upphöjt två",sup3:"Upphöjt tre",acute:"Akut accent",micro:"Mikrotecken",para:"Alinea",middot:"Centrerad prick",cedil:"Cedilj",sup1:"Upphöjt en",ordm:"Maskulina ordningsändelsen",raquo:"Högerställt dubbelt vinkelcitationstecken",frac14:"Bråktal - en kvart",frac12:"Bråktal - en halv",frac34:"Bråktal - tre fjärdedelar",iquest:"Inverterat frågetecken",Agrave:"Stort A med grav accent",Aacute:"Stort A med akutaccent",Acirc:"Stort A med circumflex", +Atilde:"Stort A med tilde",Auml:"Stort A med diaresis",Aring:"Stort A med ring ovan",AElig:"Stort Æ",Ccedil:"Stort C med cedilj",Egrave:"Stort E med grav accent",Eacute:"Stort E med aktuaccent",Ecirc:"Stort E med circumflex",Euml:"Stort E med diaeresis",Igrave:"Stort I med grav accent",Iacute:"Stort I med akutaccent",Icirc:"Stort I med circumflex",Iuml:"Stort I med diaeresis",ETH:"Stort Eth",Ntilde:"Stort N med tilde",Ograve:"Stort O med grav accent",Oacute:"Stort O med aktuaccent",Ocirc:"Stort O med circumflex", +Otilde:"Stort O med tilde",Ouml:"Stort O med diaeresis",times:"Multiplicera",Oslash:"Stor Ø",Ugrave:"Stort U med grav accent",Uacute:"Stort U med akutaccent",Ucirc:"Stort U med circumflex",Uuml:"Stort U med diaeresis",Yacute:"Stort Y med akutaccent",THORN:"Stort Thorn",szlig:"Litet dubbel-s/Eszett",agrave:"Litet a med grav accent",aacute:"Litet a med akutaccent",acirc:"Litet a med circumflex",atilde:"Litet a med tilde",auml:"Litet a med diaeresis",aring:"Litet a med ring ovan",aelig:"Bokstaven æ", +ccedil:"Litet c med cedilj",egrave:"Litet e med grav accent",eacute:"Litet e med akutaccent",ecirc:"Litet e med circumflex",euml:"Litet e med diaeresis",igrave:"Litet i med grav accent",iacute:"Litet i med akutaccent",icirc:"LItet i med circumflex",iuml:"Litet i med didaeresis",eth:"Litet eth",ntilde:"Litet n med tilde",ograve:"LItet o med grav accent",oacute:"LItet o med akutaccent",ocirc:"Litet o med circumflex",otilde:"LItet o med tilde",ouml:"Litet o med diaeresis",divide:"Division",oslash:"ø", +ugrave:"Litet u med grav accent",uacute:"Litet u med akutaccent",ucirc:"LItet u med circumflex",uuml:"Litet u med diaeresis",yacute:"Litet y med akutaccent",thorn:"Litet thorn",yuml:"Litet y med diaeresis",OElig:"Stor ligatur av OE",oelig:"Liten ligatur av oe",372:"Stort W med circumflex",374:"Stort Y med circumflex",373:"Litet w med circumflex",375:"Litet y med circumflex",sbquo:"Enkelt lågt 9-citationstecken",8219:"Enkelt högt bakvänt 9-citationstecken",bdquo:"Dubbelt lågt 9-citationstecken",hellip:"Horisontellt uteslutningstecken", +trade:"Varumärke",9658:"Svart högervänd pekare",bull:"Listpunkt",rarr:"Högerpil",rArr:"Dubbel högerpil",hArr:"Dubbel vänsterpil",diams:"Svart ruter",asymp:"Ungefär lika med"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/th.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/th.js new file mode 100755 index 0000000000..3c10bfaebb --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/th.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","th",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"สัญลักษณ์สกุลเงิน",yen:"สัญลักษณ์เงินเยน",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"สัญลักษณ์หัวข้อย่อย",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/tr.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/tr.js new file mode 100755 index 0000000000..e3c9501e37 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/tr.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","tr",{euro:"Euro işareti",lsquo:"Sol tek tırnak işareti",rsquo:"Sağ tek tırnak işareti",ldquo:"Sol çift tırnak işareti",rdquo:"Sağ çift tırnak işareti",ndash:"En tire",mdash:"Em tire",iexcl:"Ters ünlem işareti",cent:"Cent işareti",pound:"Pound işareti",curren:"Para birimi işareti",yen:"Yen işareti",brvbar:"Kırık bar",sect:"Bölüm işareti",uml:"İki sesli harfin ayrılması",copy:"Telif hakkı işareti",ordf:"Dişil sıralı gösterge",laquo:"Sol-işaret çift açı tırnak işareti", +not:"Not işareti",reg:"Kayıtlı işareti",macr:"Makron",deg:"Derece işareti",sup2:"İkili üstsimge",sup3:"Üçlü üstsimge",acute:"Aksan işareti",micro:"Mikro işareti",para:"Pilcrow işareti",middot:"Orta nokta",cedil:"Kedilla",sup1:"Üstsimge",ordm:"Eril sıralı gösterge",raquo:"Sağ işaret çift açı tırnak işareti",frac14:"Bayağı kesrin dörtte biri",frac12:"Bayağı kesrin bir yarım",frac34:"Bayağı kesrin dörtte üç",iquest:"Ters soru işareti",Agrave:"Aksanlı latin harfi",Aacute:"Aşırı aksanıyla Latin harfi", +Acirc:"Çarpık Latin harfi",Atilde:"Tilde latin harfi",Auml:"Sesli harf ayrılımlıı latin harfi",Aring:"Halkalı latin büyük A harfi",AElig:"Latin büyük Æ harfi",Ccedil:"Latin büyük C harfi ile kedilla",Egrave:"Aksanlı latin büyük E harfi",Eacute:"Aşırı vurgulu latin büyük E harfi",Ecirc:"Çarpık latin büyük E harfi",Euml:"Sesli harf ayrılımlıı latin büyük E harfi",Igrave:"Aksanlı latin büyük I harfi",Iacute:"Aşırı aksanlı latin büyük I harfi",Icirc:"Çarpık latin büyük I harfi",Iuml:"Sesli harf ayrılımlıı latin büyük I harfi", +ETH:"Latin büyük Eth harfi",Ntilde:"Tildeli latin büyük N harfi",Ograve:"Aksanlı latin büyük O harfi",Oacute:"Aşırı aksanlı latin büyük O harfi",Ocirc:"Çarpık latin büyük O harfi",Otilde:"Tildeli latin büyük O harfi",Ouml:"Sesli harf ayrılımlı latin büyük O harfi",times:"Çarpma işareti",Oslash:"Vurgulu latin büyük O harfi",Ugrave:"Aksanlı latin büyük U harfi",Uacute:"Aşırı aksanlı latin büyük U harfi",Ucirc:"Çarpık latin büyük U harfi",Uuml:"Sesli harf ayrılımlı latin büyük U harfi",Yacute:"Aşırı aksanlı latin büyük Y harfi", +THORN:"Latin büyük Thorn harfi",szlig:"Latin küçük keskin s harfi",agrave:"Aksanlı latin küçük a harfi",aacute:"Aşırı aksanlı latin küçük a harfi",acirc:"Çarpık latin küçük a harfi",atilde:"Tildeli latin küçük a harfi",auml:"Sesli harf ayrılımlı latin küçük a harfi",aring:"Halkalı latin küçük a harfi",aelig:"Latin büyük æ harfi",ccedil:"Kedillalı latin küçük c harfi",egrave:"Aksanlı latin küçük e harfi",eacute:"Aşırı aksanlı latin küçük e harfi",ecirc:"Çarpık latin küçük e harfi",euml:"Sesli harf ayrılımlı latin küçük e harfi", +igrave:"Aksanlı latin küçük i harfi",iacute:"Aşırı aksanlı latin küçük i harfi",icirc:"Çarpık latin küçük i harfi",iuml:"Sesli harf ayrılımlı latin küçük i harfi",eth:"Latin küçük eth harfi",ntilde:"Tildeli latin küçük n harfi",ograve:"Aksanlı latin küçük o harfi",oacute:"Aşırı aksanlı latin küçük o harfi",ocirc:"Çarpık latin küçük o harfi",otilde:"Tildeli latin küçük o harfi",ouml:"Sesli harf ayrılımlı latin küçük o harfi",divide:"Bölme işareti",oslash:"Vurgulu latin küçük o harfi",ugrave:"Aksanlı latin küçük u harfi", +uacute:"Aşırı aksanlı latin küçük u harfi",ucirc:"Çarpık latin küçük u harfi",uuml:"Sesli harf ayrılımlı latin küçük u harfi",yacute:"Aşırı aksanlı latin küçük y harfi",thorn:"Latin küçük thorn harfi",yuml:"Sesli harf ayrılımlı latin küçük y harfi",OElig:"Latin büyük bağlı OE harfi",oelig:"Latin küçük bağlı oe harfi",372:"Çarpık latin büyük W harfi",374:"Çarpık latin büyük Y harfi",373:"Çarpık latin küçük w harfi",375:"Çarpık latin küçük y harfi",sbquo:"Tek düşük-9 tırnak işareti",8219:"Tek yüksek-ters-9 tırnak işareti", +bdquo:"Çift düşük-9 tırnak işareti",hellip:"Yatay elips",trade:"Marka tescili işareti",9658:"Siyah sağ işaret işaretçisi",bull:"Koyu nokta",rarr:"Sağa doğru ok",rArr:"Sağa doğru çift ok",hArr:"Sol, sağ çift ok",diams:"Siyah elmas takımı",asymp:"Hemen hemen eşit"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/tt.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/tt.js new file mode 100755 index 0000000000..1059bad8fe --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/tt.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","tt",{euro:"Евро тамгасы",lsquo:"Сул бер иңле куштырнаклар",rsquo:"Уң бер иңле куштырнаклар",ldquo:"Сул ике иңле куштырнаклар",rdquo:"Уң ике иңле куштырнаклар",ndash:"Кыска сызык",mdash:"Озын сызык",iexcl:"Әйләндерелгән өндәү билгесе",cent:"Цент тамгасы",pound:"Фунт тамгасы",curren:"Акча берәмлеге тамгасы",yen:"Иена тамгасы",brvbar:"Broken bar",sect:"Параграф билгесе",uml:"Диерезис",copy:"Хокук иясе булу билгесе",ordf:"Feminine ordinal indicator",laquo:"Ачылучы чыршысыман җәя", +not:"Юклык ишарəсе",reg:"Теркәләнгән булу билгесе",macr:"Макрон",deg:"Градус билгесе",sup2:"Икенче өске индекс",sup3:"Өченче өске индекс",acute:"Басым билгесе",micro:"Микро билгесе",para:"Параграф билгесе",middot:"Уртадагы нокта",cedil:"Седиль",sup1:"Беренче өске индекс",ordm:"Masculine ordinal indicator",raquo:"Ябылучы чыршысыман җәя",frac14:"Гади дүрттән бер билгесе",frac12:"Гади икедән бер билгесе",frac34:"Гади дүрттән өч билгесе",iquest:"Әйләндерелгән өндәү билгесе",Agrave:"Гравис белән латин A баш хәрефе", +Aacute:"Басым билгесе белән латин A баш хәрефе",Acirc:"Циркумфлекс белән латин A баш хәрефе",Atilde:"Тильда белән латин A баш хәрефе",Auml:"Диерезис белән латин A баш хәрефе",Aring:"Өстендә боҗра булган латин A баш хәрефе",AElig:"Латин Æ баш хәрефе",Ccedil:"Седиль белән латин C баш хәрефе",Egrave:"Гравис белән латин E баш хәрефе",Eacute:"Басым билгесе белән латин E баш хәрефе",Ecirc:"Циркумфлекс белән латин E баш хәрефе",Euml:"Диерезис белән латин E баш хәрефе",Igrave:"Гравис белән латин I баш хәрефе", +Iacute:"Басым билгесе белән латин I баш хәрефе",Icirc:"Циркумфлекс белән латин I баш хәрефе",Iuml:"Диерезис белән латин I баш хәрефе",ETH:"Латин Eth баш хәрефе",Ntilde:"Тильда белән латин N баш хәрефе",Ograve:"Гравис белән латин O баш хәрефе",Oacute:"Басым билгесе белән латин O баш хәрефе",Ocirc:"Циркумфлекс белән латин O баш хәрефе",Otilde:"Тильда белән латин O баш хәрефе",Ouml:"Диерезис белән латин O баш хәрефе",times:"Тапкырлау билгесе",Oslash:"Сызык белән латин O баш хәрефе",Ugrave:"Гравис белән латин U баш хәрефе", +Uacute:"Басым билгесе белән латин U баш хәрефе",Ucirc:"Циркумфлекс белән латин U баш хәрефе",Uuml:"Диерезис белән латин U баш хәрефе",Yacute:"Басым билгесе белән латин Y баш хәрефе",THORN:"Латин Thorn баш хәрефе",szlig:"Латин beta юл хәрефе",agrave:"Гравис белән латин a юл хәрефе",aacute:"Басым билгесе белән латин a юл хәрефе",acirc:"Циркумфлекс белән латин a юл хәрефе",atilde:"Тильда белән латин a юл хәрефе",auml:"Диерезис белән латин a юл хәрефе",aring:"Өстендә боҗра булган латин a юл хәрефе",aelig:"Латин æ юл хәрефе", +ccedil:"Седиль белән латин c юл хәрефе",egrave:"Гравис белән латин e юл хәрефе",eacute:"Басым билгесе белән латин e юл хәрефе",ecirc:"Циркумфлекс белән латин e юл хәрефе",euml:"Диерезис белән латин e юл хәрефе",igrave:"Гравис белән латин i юл хәрефе",iacute:"Басым билгесе белән латин i юл хәрефе",icirc:"Циркумфлекс белән латин i юл хәрефе",iuml:"Диерезис белән латин i юл хәрефе",eth:"Латин eth юл хәрефе",ntilde:"Тильда белән латин n юл хәрефе",ograve:"Гравис белән латин o юл хәрефе",oacute:"Басым билгесе белән латин o юл хәрефе", +ocirc:"Циркумфлекс белән латин o юл хәрефе",otilde:"Тильда белән латин o юл хәрефе",ouml:"Диерезис белән латин o юл хәрефе",divide:"Бүлү билгесе",oslash:"Сызык белән латин o юл хәрефе",ugrave:"Гравис белән латин u юл хәрефе",uacute:"Басым билгесе белән латин u юл хәрефе",ucirc:"Циркумфлекс белән латин u юл хәрефе",uuml:"Диерезис белән латин u юл хәрефе",yacute:"Басым билгесе белән латин y юл хәрефе",thorn:"Латин thorn юл хәрефе",yuml:"Диерезис белән латин y юл хәрефе",OElig:"Латин лигатура OE баш хәрефе", +oelig:"Латин лигатура oe юл хәрефе",372:"Циркумфлекс белән латин W баш хәрефе",374:"Циркумфлекс белән латин Y баш хәрефе",373:"Циркумфлекс белән латин w юл хәрефе",375:"Циркумфлекс белән латин y юл хәрефе",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Ятма эллипс",trade:"Сәүдә маркасы билгесе",9658:"Black right-pointing pointer",bull:"Маркер",rarr:"Уң якка ук",rArr:"Уң якка икеләтә ук",hArr:"Ике якка икеләтә ук",diams:"Black diamond suit", +asymp:"якынча"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ug.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ug.js new file mode 100755 index 0000000000..a79a92a69e --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/ug.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ug",{euro:"ياۋرو بەلگىسى",lsquo:"يالاڭ پەش سول",rsquo:"يالاڭ پەش ئوڭ",ldquo:"قوش پەش سول",rdquo:"قوش پەش ئوڭ",ndash:"سىزىقچە",mdash:"سىزىق",iexcl:"ئۈندەش",cent:"تىيىن بەلگىسى",pound:"فوند ستېرلىڭ",curren:"پۇل بەلگىسى",yen:"ياپونىيە يىنى",brvbar:"ئۈزۈك بالداق",sect:"پاراگراف بەلگىسى",uml:"تاۋۇش ئايرىش بەلگىسى",copy:"نەشر ھوقۇقى بەلگىسى",ordf:"Feminine ordinal indicator",laquo:"قوش تىرناق سول",not:"غەيرى بەلگە",reg:"خەتلەتكەن تاۋار ماركىسى",macr:"سوزۇش بەلگىسى", +deg:"گىرادۇس بەلگىسى",sup2:"يۇقىرى ئىندېكىس 2",sup3:"يۇقىرى ئىندېكىس 3",acute:"ئۇرغۇ بەلگىسى",micro:"Micro sign",para:"ئابزاس بەلگىسى",middot:"ئوتتۇرا چېكىت",cedil:"ئاستىغا قوشۇلىدىغان بەلگە",sup1:"يۇقىرى ئىندېكىس 1",ordm:"Masculine ordinal indicator",raquo:"قوش تىرناق ئوڭ",frac14:"ئاددىي كەسىر تۆتتىن بىر",frac12:"ئاددىي كەسىر ئىككىدىن بىر",frac34:"ئاددىي كەسىر ئۈچتىن تۆرت",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent", +Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", +Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"قوش پەش ئوڭ",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent", +Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ", +ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"تىك موللاق سوئال بەلگىسى",ograve:"Latin small letter o with grave accent", +oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"بۆلۈش بەلگىسى",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn", +yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"خەتلەتكەن تاۋار ماركىسى بەلگىسى",9658:"Black right-pointing pointer", +bull:"Bullet",rarr:"ئوڭ يا ئوق",rArr:"ئوڭ قوش سىزىق يا ئوق",hArr:"ئوڭ سول قوش سىزىق يا ئوق",diams:"ئۇيۇل غىچ",asymp:"تەخمىنەن تەڭ"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/uk.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/uk.js new file mode 100755 index 0000000000..f2f4892184 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/uk.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","uk",{euro:"Знак євро",lsquo:"Ліві одинарні лапки",rsquo:"Праві одинарні лапки",ldquo:"Ліві подвійні лапки",rdquo:"Праві подвійні лапки",ndash:"Середнє тире",mdash:"Довге тире",iexcl:"Перевернутий знак оклику",cent:"Знак цента",pound:"Знак фунта",curren:"Знак валюти",yen:"Знак єни",brvbar:"Переривчаста вертикальна лінія",sect:"Знак параграфу",uml:"Умлаут",copy:"Знак авторських прав",ordf:"Жіночий порядковий вказівник",laquo:"ліві вказівні подвійні кутові дужки", +not:"Заперечення",reg:"Знак охорони суміжних прав",macr:"Макрон",deg:"Знак градуса",sup2:"два у верхньому індексі",sup3:"три у верхньому індексі",acute:"Знак акута",micro:"Знак мікро",para:"Знак абзацу",middot:"Інтерпункт",cedil:"Седиль",sup1:"Один у верхньому індексі",ordm:"Чоловічий порядковий вказівник",raquo:"праві вказівні подвійні кутові дужки",frac14:"Одна четвертина",frac12:"Одна друга",frac34:"три четвертих",iquest:"Перевернутий знак питання",Agrave:"Велика латинська A з гравісом",Aacute:"Велика латинська А з акутом", +Acirc:"Велика латинська А з циркумфлексом",Atilde:"Велика латинська А з тильдою",Auml:"Велике латинське А з умлаутом",Aring:"Велика латинська A з кільцем згори",AElig:"Велика латинська Æ",Ccedil:"Велика латинська C з седиллю",Egrave:"Велика латинська E з гравісом",Eacute:"Велика латинська E з акутом",Ecirc:"Велика латинська E з циркумфлексом",Euml:"Велика латинська А з умлаутом",Igrave:"Велика латинська I з гравісом",Iacute:"Велика латинська I з акутом",Icirc:"Велика латинська I з циркумфлексом", +Iuml:"Велика латинська І з умлаутом",ETH:"Велика латинська Eth",Ntilde:"Велика латинська N з тильдою",Ograve:"Велика латинська O з гравісом",Oacute:"Велика латинська O з акутом",Ocirc:"Велика латинська O з циркумфлексом",Otilde:"Велика латинська O з тильдою",Ouml:"Велика латинська О з умлаутом",times:"Знак множення",Oslash:"Велика латинська перекреслена O ",Ugrave:"Велика латинська U з гравісом",Uacute:"Велика латинська U з акутом",Ucirc:"Велика латинська U з циркумфлексом",Uuml:"Велика латинська U з умлаутом", +Yacute:"Велика латинська Y з акутом",THORN:"Велика латинська Торн",szlig:"Мала латинська есцет",agrave:"Мала латинська a з гравісом",aacute:"Мала латинська a з акутом",acirc:"Мала латинська a з циркумфлексом",atilde:"Мала латинська a з тильдою",auml:"Мала латинська a з умлаутом",aring:"Мала латинська a з кільцем згори",aelig:"Мала латинська æ",ccedil:"Мала латинська C з седиллю",egrave:"Мала латинська e з гравісом",eacute:"Мала латинська e з акутом",ecirc:"Мала латинська e з циркумфлексом",euml:"Мала латинська e з умлаутом", +igrave:"Мала латинська i з гравісом",iacute:"Мала латинська i з акутом",icirc:"Мала латинська i з циркумфлексом",iuml:"Мала латинська i з умлаутом",eth:"Мала латинська Eth",ntilde:"Мала латинська n з тильдою",ograve:"Мала латинська o з гравісом",oacute:"Мала латинська o з акутом",ocirc:"Мала латинська o з циркумфлексом",otilde:"Мала латинська o з тильдою",ouml:"Мала латинська o з умлаутом",divide:"Знак ділення",oslash:"Мала латинська перекреслена o",ugrave:"Мала латинська u з гравісом",uacute:"Мала латинська u з акутом", +ucirc:"Мала латинська u з циркумфлексом",uuml:"Мала латинська u з умлаутом",yacute:"Мала латинська y з акутом",thorn:"Мала латинська торн",yuml:"Мала латинська y з умлаутом",OElig:"Велика латинська лігатура OE",oelig:"Мала латинська лігатура oe",372:"Велика латинська W з циркумфлексом",374:"Велика латинська Y з циркумфлексом",373:"Мала латинська w з циркумфлексом",375:"Мала латинська y з циркумфлексом",sbquo:"Одиничні нижні лабки",8219:"Верхні одиничні обернені лабки",bdquo:"Подвійні нижні лабки", +hellip:"Три крапки",trade:"Знак торгової марки",9658:"Чорний правий вказівник",bull:"Маркер списку",rarr:"Стрілка вправо",rArr:"Подвійна стрілка вправо",hArr:"Подвійна стрілка вліво-вправо",diams:"Чорний діамонт",asymp:"Наближено дорівнює"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/vi.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/vi.js new file mode 100755 index 0000000000..2b4bb59a44 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/vi.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","vi",{euro:"Ký hiệu Euro",lsquo:"Dấu ngoặc đơn trái",rsquo:"Dấu ngoặc đơn phải",ldquo:"Dấu ngoặc đôi trái",rdquo:"Dấu ngoặc đôi phải",ndash:"Gạch ngang tiếng anh",mdash:"Gạch ngang Em",iexcl:"Chuyển đổi dấu chấm than",cent:"Ký tự tiền Mỹ",pound:"Ký tự tiền Anh",curren:"Ký tự tiền tệ",yen:"Ký tự tiền Yên Nhật",brvbar:"Thanh hỏng",sect:"Ký tự khu vực",uml:"Dấu tách đôi",copy:"Ký tự bản quyền",ordf:"Phần chỉ thị giống cái",laquo:"Chọn dấu ngoặc đôi trái",not:"Không có ký tự", +reg:"Ký tự đăng ký",macr:"Dấu nguyên âm dài",deg:"Ký tự độ",sup2:"Chữ trồi lên trên dạng 2",sup3:"Chữ trồi lên trên dạng 3",acute:"Dấu trọng âm",micro:"Ký tự micro",para:"Ký tự đoạn văn",middot:"Dấu chấm tròn",cedil:"Dấu móc lưới",sup1:"Ký tự trồi lên cấp 1",ordm:"Ký tự biểu hiện giống đực",raquo:"Chọn dấu ngoặc đôi phải",frac14:"Tỉ lệ một phần tư",frac12:"Tỉ lệ một nửa",frac34:"Tỉ lệ ba phần tư",iquest:"Chuyển đổi dấu chấm hỏi",Agrave:"Ký tự la-tinh viết hoa A với dấu huyền",Aacute:"Ký tự la-tinh viết hoa A với dấu sắc", +Acirc:"Ký tự la-tinh viết hoa A với dấu mũ",Atilde:"Ký tự la-tinh viết hoa A với dấu ngã",Auml:"Ký tự la-tinh viết hoa A với dấu hai chấm trên đầu",Aring:"Ký tự la-tinh viết hoa A với biểu tượng vòng tròn trên đầu",AElig:"Ký tự la-tinh viết hoa của Æ",Ccedil:"Ký tự la-tinh viết hoa C với dấu móc bên dưới",Egrave:"Ký tự la-tinh viết hoa E với dấu huyền",Eacute:"Ký tự la-tinh viết hoa E với dấu sắc",Ecirc:"Ký tự la-tinh viết hoa E với dấu mũ",Euml:"Ký tự la-tinh viết hoa E với dấu hai chấm trên đầu", +Igrave:"Ký tự la-tinh viết hoa I với dấu huyền",Iacute:"Ký tự la-tinh viết hoa I với dấu sắc",Icirc:"Ký tự la-tinh viết hoa I với dấu mũ",Iuml:"Ký tự la-tinh viết hoa I với dấu hai chấm trên đầu",ETH:"Viết hoa của ký tự Eth",Ntilde:"Ký tự la-tinh viết hoa N với dấu ngã",Ograve:"Ký tự la-tinh viết hoa O với dấu huyền",Oacute:"Ký tự la-tinh viết hoa O với dấu sắc",Ocirc:"Ký tự la-tinh viết hoa O với dấu mũ",Otilde:"Ký tự la-tinh viết hoa O với dấu ngã",Ouml:"Ký tự la-tinh viết hoa O với dấu hai chấm trên đầu", +times:"Ký tự phép toán nhân",Oslash:"Ký tự la-tinh viết hoa A với dấu ngã xuống",Ugrave:"Ký tự la-tinh viết hoa U với dấu huyền",Uacute:"Ký tự la-tinh viết hoa U với dấu sắc",Ucirc:"Ký tự la-tinh viết hoa U với dấu mũ",Uuml:"Ký tự la-tinh viết hoa U với dấu hai chấm trên đầu",Yacute:"Ký tự la-tinh viết hoa Y với dấu sắc",THORN:"Phần viết hoa của ký tự Thorn",szlig:"Ký tự viết nhỏ la-tinh của chữ s",agrave:"Ký tự la-tinh thường với dấu huyền",aacute:"Ký tự la-tinh thường với dấu sắc",acirc:"Ký tự la-tinh thường với dấu mũ", +atilde:"Ký tự la-tinh thường với dấu ngã",auml:"Ký tự la-tinh thường với dấu hai chấm trên đầu",aring:"Ký tự la-tinh viết thường với biểu tượng vòng tròn trên đầu",aelig:"Ký tự la-tinh viết thường của æ",ccedil:"Ký tự la-tinh viết thường của c với dấu móc bên dưới",egrave:"Ký tự la-tinh viết thường e với dấu huyền",eacute:"Ký tự la-tinh viết thường e với dấu sắc",ecirc:"Ký tự la-tinh viết thường e với dấu mũ",euml:"Ký tự la-tinh viết thường e với dấu hai chấm trên đầu",igrave:"Ký tự la-tinh viết thường i với dấu huyền", +iacute:"Ký tự la-tinh viết thường i với dấu sắc",icirc:"Ký tự la-tinh viết thường i với dấu mũ",iuml:"Ký tự la-tinh viết thường i với dấu hai chấm trên đầu",eth:"Ký tự la-tinh viết thường của eth",ntilde:"Ký tự la-tinh viết thường n với dấu ngã",ograve:"Ký tự la-tinh viết thường o với dấu huyền",oacute:"Ký tự la-tinh viết thường o với dấu sắc",ocirc:"Ký tự la-tinh viết thường o với dấu mũ",otilde:"Ký tự la-tinh viết thường o với dấu ngã",ouml:"Ký tự la-tinh viết thường o với dấu hai chấm trên đầu", +divide:"Ký hiệu phép tính chia",oslash:"Ký tự la-tinh viết thường o với dấu ngã",ugrave:"Ký tự la-tinh viết thường u với dấu huyền",uacute:"Ký tự la-tinh viết thường u với dấu sắc",ucirc:"Ký tự la-tinh viết thường u với dấu mũ",uuml:"Ký tự la-tinh viết thường u với dấu hai chấm trên đầu",yacute:"Ký tự la-tinh viết thường y với dấu sắc",thorn:"Ký tự la-tinh viết thường của chữ thorn",yuml:"Ký tự la-tinh viết thường y với dấu hai chấm trên đầu",OElig:"Ký tự la-tinh viết hoa gạch nối OE",oelig:"Ký tự la-tinh viết thường gạch nối OE", +372:"Ký tự la-tinh viết hoa W với dấu mũ",374:"Ký tự la-tinh viết hoa Y với dấu mũ",373:"Ký tự la-tinh viết thường w với dấu mũ",375:"Ký tự la-tinh viết thường y với dấu mũ",sbquo:"Dấu ngoặc đơn thấp số-9",8219:"Dấu ngoặc đơn đảo ngược số-9",bdquo:"Gấp đôi dấu ngoặc đơn số-9",hellip:"Tĩnh dược chiều ngang",trade:"Ký tự thương hiệu",9658:"Ký tự trỏ về hướng bên phải màu đen",bull:"Ký hiệu",rarr:"Mũi tên hướng bên phải",rArr:"Mũi tên hướng bên phải dạng đôi",hArr:"Mũi tên hướng bên trái dạng đôi",diams:"Ký hiệu hình thoi", +asymp:"Gần bằng với"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js new file mode 100755 index 0000000000..acc838f3d6 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js @@ -0,0 +1,9 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","zh-cn",{euro:"欧元符号",lsquo:"左单引号",rsquo:"右单引号",ldquo:"左双引号",rdquo:"右双引号",ndash:"短划线",mdash:"长划线",iexcl:"竖翻叹号",cent:"分币符号",pound:"英镑符号",curren:"货币符号",yen:"日元符号",brvbar:"间断条",sect:"节标记",uml:"分音符",copy:"版权所有标记",ordf:"阴性顺序指示符",laquo:"左指双尖引号",not:"非标记",reg:"注册标记",macr:"长音符",deg:"度标记",sup2:"上标二",sup3:"上标三",acute:"锐音符",micro:"微符",para:"段落标记",middot:"中间点",cedil:"下加符",sup1:"上标一",ordm:"阳性顺序指示符",raquo:"右指双尖引号",frac14:"普通分数四分之一",frac12:"普通分数二分之一",frac34:"普通分数四分之三",iquest:"竖翻问号", +Agrave:"带抑音符的拉丁文大写字母 A",Aacute:"带锐音符的拉丁文大写字母 A",Acirc:"带扬抑符的拉丁文大写字母 A",Atilde:"带颚化符的拉丁文大写字母 A",Auml:"带分音符的拉丁文大写字母 A",Aring:"带上圆圈的拉丁文大写字母 A",AElig:"拉丁文大写字母 Ae",Ccedil:"带下加符的拉丁文大写字母 C",Egrave:"带抑音符的拉丁文大写字母 E",Eacute:"带锐音符的拉丁文大写字母 E",Ecirc:"带扬抑符的拉丁文大写字母 E",Euml:"带分音符的拉丁文大写字母 E",Igrave:"带抑音符的拉丁文大写字母 I",Iacute:"带锐音符的拉丁文大写字母 I",Icirc:"带扬抑符的拉丁文大写字母 I",Iuml:"带分音符的拉丁文大写字母 I",ETH:"拉丁文大写字母 Eth",Ntilde:"带颚化符的拉丁文大写字母 N",Ograve:"带抑音符的拉丁文大写字母 O",Oacute:"带锐音符的拉丁文大写字母 O",Ocirc:"带扬抑符的拉丁文大写字母 O",Otilde:"带颚化符的拉丁文大写字母 O", +Ouml:"带分音符的拉丁文大写字母 O",times:"乘号",Oslash:"带粗线的拉丁文大写字母 O",Ugrave:"带抑音符的拉丁文大写字母 U",Uacute:"带锐音符的拉丁文大写字母 U",Ucirc:"带扬抑符的拉丁文大写字母 U",Uuml:"带分音符的拉丁文大写字母 U",Yacute:"带抑音符的拉丁文大写字母 Y",THORN:"拉丁文大写字母 Thorn",szlig:"拉丁文小写字母清音 S",agrave:"带抑音符的拉丁文小写字母 A",aacute:"带锐音符的拉丁文小写字母 A",acirc:"带扬抑符的拉丁文小写字母 A",atilde:"带颚化符的拉丁文小写字母 A",auml:"带分音符的拉丁文小写字母 A",aring:"带上圆圈的拉丁文小写字母 A",aelig:"拉丁文小写字母 Ae",ccedil:"带下加符的拉丁文小写字母 C",egrave:"带抑音符的拉丁文小写字母 E",eacute:"带锐音符的拉丁文小写字母 E",ecirc:"带扬抑符的拉丁文小写字母 E",euml:"带分音符的拉丁文小写字母 E",igrave:"带抑音符的拉丁文小写字母 I", +iacute:"带锐音符的拉丁文小写字母 I",icirc:"带扬抑符的拉丁文小写字母 I",iuml:"带分音符的拉丁文小写字母 I",eth:"拉丁文小写字母 Eth",ntilde:"带颚化符的拉丁文小写字母 N",ograve:"带抑音符的拉丁文小写字母 O",oacute:"带锐音符的拉丁文小写字母 O",ocirc:"带扬抑符的拉丁文小写字母 O",otilde:"带颚化符的拉丁文小写字母 O",ouml:"带分音符的拉丁文小写字母 O",divide:"除号",oslash:"带粗线的拉丁文小写字母 O",ugrave:"带抑音符的拉丁文小写字母 U",uacute:"带锐音符的拉丁文小写字母 U",ucirc:"带扬抑符的拉丁文小写字母 U",uuml:"带分音符的拉丁文小写字母 U",yacute:"带抑音符的拉丁文小写字母 Y",thorn:"拉丁文小写字母 Thorn",yuml:"带分音符的拉丁文小写字母 Y",OElig:"拉丁文大写连字 Oe",oelig:"拉丁文小写连字 Oe",372:"带扬抑符的拉丁文大写字母 W",374:"带扬抑符的拉丁文大写字母 Y", +373:"带扬抑符的拉丁文小写字母 W",375:"带扬抑符的拉丁文小写字母 Y",sbquo:"单下 9 形引号",8219:"单高横翻 9 形引号",bdquo:"双下 9 形引号",hellip:"水平省略号",trade:"商标标志",9658:"实心右指指针",bull:"加重号",rarr:"向右箭头",rArr:"向右双线箭头",hArr:"左右双线箭头",diams:"实心方块纸牌",asymp:"约等于"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/zh.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/zh.js new file mode 100755 index 0000000000..32e340a855 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/lang/zh.js @@ -0,0 +1,9 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","zh",{euro:"歐元符號",lsquo:"左單引號",rsquo:"右單引號",ldquo:"左雙引號",rdquo:"右雙引號",ndash:"短破折號",mdash:"長破折號",iexcl:"倒置的驚嘆號",cent:"美分符號",pound:"英鎊符號",curren:"貨幣符號",yen:"日圓符號",brvbar:"破折號",sect:"章節符號",uml:"分音符號",copy:"版權符號",ordf:"雌性符號",laquo:"左雙角括號",not:"Not 符號",reg:"註冊商標符號",macr:"長音符號",deg:"度數符號",sup2:"上標字 2",sup3:"上標字 3",acute:"尖音符號",micro:"微",para:"段落符號",middot:"中間點",cedil:"字母 C 下面的尾型符號 ",sup1:"上標",ordm:"雄性符號",raquo:"右雙角括號",frac14:"四分之一符號",frac12:"二分之一符號",frac34:"四分之三符號", +iquest:"倒置的問號",Agrave:"拉丁大寫字母 A 帶抑音符號",Aacute:"拉丁大寫字母 A 帶尖音符號",Acirc:"拉丁大寫字母 A 帶揚抑符",Atilde:"拉丁大寫字母 A 帶波浪號",Auml:"拉丁大寫字母 A 帶分音符號",Aring:"拉丁大寫字母 A 帶上圓圈",AElig:"拉丁大寫字母 Æ",Ccedil:"拉丁大寫字母 C 帶下尾符號",Egrave:"拉丁大寫字母 E 帶抑音符號",Eacute:"拉丁大寫字母 E 帶尖音符號",Ecirc:"拉丁大寫字母 E 帶揚抑符",Euml:"拉丁大寫字母 E 帶分音符號",Igrave:"拉丁大寫字母 I 帶抑音符號",Iacute:"拉丁大寫字母 I 帶尖音符號",Icirc:"拉丁大寫字母 I 帶揚抑符",Iuml:"拉丁大寫字母 I 帶分音符號",ETH:"拉丁大寫字母 Eth",Ntilde:"拉丁大寫字母 N 帶波浪號",Ograve:"拉丁大寫字母 O 帶抑音符號",Oacute:"拉丁大寫字母 O 帶尖音符號",Ocirc:"拉丁大寫字母 O 帶揚抑符",Otilde:"拉丁大寫字母 O 帶波浪號", +Ouml:"拉丁大寫字母 O 帶分音符號",times:"乘號",Oslash:"拉丁大寫字母 O 帶粗線符號",Ugrave:"拉丁大寫字母 U 帶抑音符號",Uacute:"拉丁大寫字母 U 帶尖音符號",Ucirc:"拉丁大寫字母 U 帶揚抑符",Uuml:"拉丁大寫字母 U 帶分音符號",Yacute:"拉丁大寫字母 Y 帶尖音符號",THORN:"拉丁大寫字母 Thorn",szlig:"拉丁小寫字母 s",agrave:"拉丁小寫字母 a 帶抑音符號",aacute:"拉丁小寫字母 a 帶尖音符號",acirc:"拉丁小寫字母 a 帶揚抑符",atilde:"拉丁小寫字母 a 帶波浪號",auml:"拉丁小寫字母 a 帶分音符號",aring:"拉丁小寫字母 a 帶上圓圈",aelig:"拉丁小寫字母 æ",ccedil:"拉丁小寫字母 c 帶下尾符號",egrave:"拉丁小寫字母 e 帶抑音符號",eacute:"拉丁小寫字母 e 帶尖音符號",ecirc:"拉丁小寫字母 e 帶揚抑符",euml:"拉丁小寫字母 e 帶分音符號",igrave:"拉丁小寫字母 i 帶抑音符號", +iacute:"拉丁小寫字母 i 帶尖音符號",icirc:"拉丁小寫字母 i 帶揚抑符",iuml:"拉丁小寫字母 i 帶分音符號",eth:"拉丁小寫字母 eth",ntilde:"拉丁小寫字母 n 帶波浪號",ograve:"拉丁小寫字母 o 帶抑音符號",oacute:"拉丁小寫字母 o 帶尖音符號",ocirc:"拉丁小寫字母 o 帶揚抑符",otilde:"拉丁小寫字母 o 帶波浪號",ouml:"拉丁小寫字母 o 帶分音符號",divide:"除號",oslash:"拉丁小寫字母 o 帶粗線符號",ugrave:"拉丁小寫字母 u 帶抑音符號",uacute:"拉丁小寫字母 u 帶尖音符號",ucirc:"拉丁小寫字母 u 帶揚抑符",uuml:"拉丁小寫字母 u 帶分音符號",yacute:"拉丁小寫字母 y 帶尖音符號",thorn:"拉丁小寫字母 thorn",yuml:"拉丁小寫字母 y 帶分音符號",OElig:"拉丁大寫字母 OE",oelig:"拉丁小寫字母 oe",372:"拉丁大寫字母 W 帶揚抑符",374:"拉丁大寫字母 Y 帶揚抑符",373:"拉丁小寫字母 w 帶揚抑符", +375:"拉丁小寫字母 y 帶揚抑符",sbquo:"低 9 單引號",8219:"高 9 反轉單引號",bdquo:"低 9 雙引號",hellip:"水平刪節號",trade:"商標符號",9658:"黑色向右指箭號",bull:"項目符號",rarr:"向右箭號",rArr:"向右雙箭號",hArr:"左右雙箭號",diams:"黑鑽套裝",asymp:"約等於"}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/specialchar.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/specialchar.js new file mode 100755 index 0000000000..4afb41ab49 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/specialchar/dialogs/specialchar.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("specialchar",function(i){var e,l=i.lang.specialchar,k=function(c){var b,c=c.data?c.data.getTarget():new CKEDITOR.dom.element(c);if("a"==c.getName()&&(b=c.getChild(0).getHtml()))c.removeClass("cke_light_background"),e.hide(),c=i.document.createElement("span"),c.setHtml(b),i.insertText(c.getText())},m=CKEDITOR.tools.addFunction(k),j,g=function(c,b){var a,b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());if("a"==b.getName()&&(a=b.getChild(0).getHtml())){j&&d(null,j); +var f=e.getContentElement("info","htmlPreview").getElement();e.getContentElement("info","charPreview").getElement().setHtml(a);f.setHtml(CKEDITOR.tools.htmlEncode(a));b.getParent().addClass("cke_light_background");j=b}},d=function(c,b){b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());"a"==b.getName()&&(e.getContentElement("info","charPreview").getElement().setHtml("&nbsp;"),e.getContentElement("info","htmlPreview").getElement().setHtml("&nbsp;"),b.getParent().removeClass("cke_light_background"), +j=void 0)},n=CKEDITOR.tools.addFunction(function(c){var c=new CKEDITOR.dom.event(c),b=c.getTarget(),a;a=c.getKeystroke();var f="rtl"==i.lang.dir;switch(a){case 38:if(a=b.getParent().getParent().getPrevious())a=a.getChild([b.getParent().getIndex(),0]),a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 40:if(a=b.getParent().getParent().getNext())if((a=a.getChild([b.getParent().getIndex(),0]))&&1==a.type)a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 32:k({data:c});c.preventDefault(); +break;case f?37:39:if(a=b.getParent().getNext())a=a.getChild(0),1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);else if(a=b.getParent().getParent().getNext())(a=a.getChild([0,0]))&&1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);break;case f?39:37:(a=b.getParent().getPrevious())?(a=a.getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):(a=b.getParent().getParent().getPrevious())?(a=a.getLast().getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)): +d(null,b)}});return{title:l.title,minWidth:430,minHeight:280,buttons:[CKEDITOR.dialog.cancelButton],charColumns:17,onLoad:function(){for(var c=this.definition.charColumns,b=i.config.specialChars,a=CKEDITOR.tools.getNextId()+"_specialchar_table_label",f=['<table role="listbox" aria-labelledby="'+a+'" style="width: 320px; height: 100%; border-collapse: separate;" align="center" cellspacing="2" cellpadding="2" border="0">'],d=0,g=b.length,h,e;d<g;){f.push('<tr role="presentation">');for(var j=0;j<c;j++, +d++){if(h=b[d]){h instanceof Array?(e=h[1],h=h[0]):(e=h.replace("&","").replace(";","").replace("#",""),e=l[e]||h);var k="cke_specialchar_label_"+d+"_"+CKEDITOR.tools.getNextNumber();f.push('<td class="cke_dark_background" style="cursor: default" role="presentation"><a href="javascript: void(0);" role="option" aria-posinset="'+(d+1)+'"',' aria-setsize="'+g+'"',' aria-labelledby="'+k+'"',' class="cke_specialchar" title="',CKEDITOR.tools.htmlEncode(e),'" onkeydown="CKEDITOR.tools.callFunction( '+n+ +', event, this )" onclick="CKEDITOR.tools.callFunction('+m+', this); return false;" tabindex="-1"><span style="margin: 0 auto;cursor: inherit">'+h+'</span><span class="cke_voice_label" id="'+k+'">'+e+"</span></a>")}else f.push('<td class="cke_dark_background">&nbsp;');f.push("</td>")}f.push("</tr>")}f.push("</tbody></table>",'<span id="'+a+'" class="cke_voice_label">'+l.options+"</span>");this.getContentElement("info","charContainer").getElement().setHtml(f.join(""))},contents:[{id:"info",label:i.lang.common.generalTab, +title:i.lang.common.generalTab,padding:0,align:"top",elements:[{type:"hbox",align:"top",widths:["320px","90px"],children:[{type:"html",id:"charContainer",html:"",onMouseover:g,onMouseout:d,focus:function(){var c=this.getElement().getElementsByTag("a").getItem(0);setTimeout(function(){c.focus();g(null,c)},0)},onShow:function(){var c=this.getElement().getChild([0,0,0,0,0]);setTimeout(function(){c.focus();g(null,c)},0)},onLoad:function(c){e=c.sender}},{type:"hbox",align:"top",widths:["100%"],children:[{type:"vbox", +align:"top",children:[{type:"html",html:"<div></div>"},{type:"html",id:"charPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:"<div>&nbsp;</div>"},{type:"html",id:"htmlPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;", +html:"<div>&nbsp;</div>"}]}]}]}]}]}}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/table/dialogs/table.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/table/dialogs/table.js new file mode 100755 index 0000000000..4e1b1c32ac --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/table/dialogs/table.js @@ -0,0 +1,21 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){function r(a){for(var e=0,l=0,k=0,m,g=a.$.rows.length;k<g;k++){m=a.$.rows[k];for(var d=e=0,c,b=m.cells.length;d<b;d++)c=m.cells[d],e+=c.colSpan;e>l&&(l=e)}return l}function o(a){return function(){var e=this.getValue(),e=!!(CKEDITOR.dialog.validate.integer()(e)&&0<e);e||(alert(a),this.select());return e}}function n(a,e){var l=function(g){return new CKEDITOR.dom.element(g,a.document)},n=a.editable(),m=a.plugins.dialogadvtab;return{title:a.lang.table.title,minWidth:310,minHeight:CKEDITOR.env.ie? +310:280,onLoad:function(){var g=this,a=g.getContentElement("advanced","advStyles");if(a)a.on("change",function(){var a=this.getStyle("width",""),b=g.getContentElement("info","txtWidth");b&&b.setValue(a,!0);a=this.getStyle("height","");(b=g.getContentElement("info","txtHeight"))&&b.setValue(a,!0)})},onShow:function(){var g=a.getSelection(),d=g.getRanges(),c,b=this.getContentElement("info","txtRows"),h=this.getContentElement("info","txtCols"),p=this.getContentElement("info","txtWidth"),f=this.getContentElement("info", +"txtHeight");"tableProperties"==e&&((g=g.getSelectedElement())&&g.is("table")?c=g:0<d.length&&(CKEDITOR.env.webkit&&d[0].shrink(CKEDITOR.NODE_ELEMENT),c=a.elementPath(d[0].getCommonAncestor(!0)).contains("table",1)),this._.selectedElement=c);c?(this.setupContent(c),b&&b.disable(),h&&h.disable()):(b&&b.enable(),h&&h.enable());p&&p.onChange();f&&f.onChange()},onOk:function(){var g=a.getSelection(),d=this._.selectedElement&&g.createBookmarks(),c=this._.selectedElement||l("table"),b={};this.commitContent(b, +c);if(b.info){b=b.info;if(!this._.selectedElement)for(var h=c.append(l("tbody")),e=parseInt(b.txtRows,10)||0,f=parseInt(b.txtCols,10)||0,i=0;i<e;i++)for(var j=h.append(l("tr")),k=0;k<f;k++)j.append(l("td")).appendBogus();e=b.selHeaders;if(!c.$.tHead&&("row"==e||"both"==e)){j=new CKEDITOR.dom.element(c.$.createTHead());h=c.getElementsByTag("tbody").getItem(0);h=h.getElementsByTag("tr").getItem(0);for(i=0;i<h.getChildCount();i++)f=h.getChild(i),f.type==CKEDITOR.NODE_ELEMENT&&!f.data("cke-bookmark")&& +(f.renameNode("th"),f.setAttribute("scope","col"));j.append(h.remove())}if(null!==c.$.tHead&&!("row"==e||"both"==e)){j=new CKEDITOR.dom.element(c.$.tHead);h=c.getElementsByTag("tbody").getItem(0);for(k=h.getFirst();0<j.getChildCount();){h=j.getFirst();for(i=0;i<h.getChildCount();i++)f=h.getChild(i),f.type==CKEDITOR.NODE_ELEMENT&&(f.renameNode("td"),f.removeAttribute("scope"));h.insertBefore(k)}j.remove()}if(!this.hasColumnHeaders&&("col"==e||"both"==e))for(j=0;j<c.$.rows.length;j++)f=new CKEDITOR.dom.element(c.$.rows[j].cells[0]), +f.renameNode("th"),f.setAttribute("scope","row");if(this.hasColumnHeaders&&!("col"==e||"both"==e))for(i=0;i<c.$.rows.length;i++)j=new CKEDITOR.dom.element(c.$.rows[i]),"tbody"==j.getParent().getName()&&(f=new CKEDITOR.dom.element(j.$.cells[0]),f.renameNode("td"),f.removeAttribute("scope"));b.txtHeight?c.setStyle("height",b.txtHeight):c.removeStyle("height");b.txtWidth?c.setStyle("width",b.txtWidth):c.removeStyle("width");c.getAttribute("style")||c.removeAttribute("style")}if(this._.selectedElement)try{g.selectBookmarks(d)}catch(m){}else a.insertElement(c), +setTimeout(function(){var g=new CKEDITOR.dom.element(c.$.rows[0].cells[0]),b=a.createRange();b.moveToPosition(g,CKEDITOR.POSITION_AFTER_START);b.select()},0)},contents:[{id:"info",label:a.lang.table.title,elements:[{type:"hbox",widths:[null,null],styles:["vertical-align:top"],children:[{type:"vbox",padding:0,children:[{type:"text",id:"txtRows","default":3,label:a.lang.table.rows,required:!0,controlStyle:"width:5em",validate:o(a.lang.table.invalidRows),setup:function(a){this.setValue(a.$.rows.length)}, +commit:k},{type:"text",id:"txtCols","default":2,label:a.lang.table.columns,required:!0,controlStyle:"width:5em",validate:o(a.lang.table.invalidCols),setup:function(a){this.setValue(r(a))},commit:k},{type:"html",html:"&nbsp;"},{type:"select",id:"selHeaders",requiredContent:"th","default":"",label:a.lang.table.headers,items:[[a.lang.table.headersNone,""],[a.lang.table.headersRow,"row"],[a.lang.table.headersColumn,"col"],[a.lang.table.headersBoth,"both"]],setup:function(a){var d=this.getDialog();d.hasColumnHeaders= +!0;for(var c=0;c<a.$.rows.length;c++){var b=a.$.rows[c].cells[0];if(b&&"th"!=b.nodeName.toLowerCase()){d.hasColumnHeaders=!1;break}}null!==a.$.tHead?this.setValue(d.hasColumnHeaders?"both":"row"):this.setValue(d.hasColumnHeaders?"col":"")},commit:k},{type:"text",id:"txtBorder",requiredContent:"table[border]","default":a.filter.check("table[border]")?1:0,label:a.lang.table.border,controlStyle:"width:3em",validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidBorder),setup:function(a){this.setValue(a.getAttribute("border")|| +"")},commit:function(a,d){this.getValue()?d.setAttribute("border",this.getValue()):d.removeAttribute("border")}},{id:"cmbAlign",type:"select",requiredContent:"table[align]","default":"",label:a.lang.common.align,items:[[a.lang.common.notSet,""],[a.lang.common.alignLeft,"left"],[a.lang.common.alignCenter,"center"],[a.lang.common.alignRight,"right"]],setup:function(a){this.setValue(a.getAttribute("align")||"")},commit:function(a,d){this.getValue()?d.setAttribute("align",this.getValue()):d.removeAttribute("align")}}]}, +{type:"vbox",padding:0,children:[{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtWidth",requiredContent:"table{width}",controlStyle:"width:5em",label:a.lang.common.width,title:a.lang.common.cssLengthTooltip,"default":a.filter.check("table{width}")?500>n.getSize("width")?"100%":500:0,getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&& +a.updateStyle("width",this.getValue())},setup:function(a){this.setValue(a.getStyle("width"))},commit:k}]},{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtHeight",requiredContent:"table{height}",controlStyle:"width:5em",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,"default":"",getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles"); +a&&a.updateStyle("height",this.getValue())},setup:function(a){(a=a.getStyle("height"))&&this.setValue(a)},commit:k}]},{type:"html",html:"&nbsp;"},{type:"text",id:"txtCellSpace",requiredContent:"table[cellspacing]",controlStyle:"width:3em",label:a.lang.table.cellSpace,"default":a.filter.check("table[cellspacing]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing),setup:function(a){this.setValue(a.getAttribute("cellSpacing")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellSpacing", +this.getValue()):d.removeAttribute("cellSpacing")}},{type:"text",id:"txtCellPad",requiredContent:"table[cellpadding]",controlStyle:"width:3em",label:a.lang.table.cellPad,"default":a.filter.check("table[cellpadding]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellPadding),setup:function(a){this.setValue(a.getAttribute("cellPadding")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellPadding",this.getValue()):d.removeAttribute("cellPadding")}}]}]},{type:"html",align:"right", +html:""},{type:"vbox",padding:0,children:[{type:"text",id:"txtCaption",requiredContent:"caption",label:a.lang.table.caption,setup:function(a){this.enable();a=a.getElementsByTag("caption");if(0<a.count()){var a=a.getItem(0),d=a.getFirst(CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT));d&&!d.equals(a.getBogus())?(this.disable(),this.setValue(a.getText())):(a=CKEDITOR.tools.trim(a.getText()),this.setValue(a))}},commit:function(e,d){if(this.isEnabled()){var c=this.getValue(),b=d.getElementsByTag("caption"); +if(c)0<b.count()?(b=b.getItem(0),b.setHtml("")):(b=new CKEDITOR.dom.element("caption",a.document),d.getChildCount()?b.insertBefore(d.getFirst()):b.appendTo(d)),b.append(new CKEDITOR.dom.text(c,a.document));else if(0<b.count())for(c=b.count()-1;0<=c;c--)b.getItem(c).remove()}}},{type:"text",id:"txtSummary",bidi:!0,requiredContent:"table[summary]",label:a.lang.table.summary,setup:function(a){this.setValue(a.getAttribute("summary")||"")},commit:function(a,d){this.getValue()?d.setAttribute("summary", +this.getValue()):d.removeAttribute("summary")}}]}]},m&&m.createAdvancedTab(a,null,"table")]}}var q=CKEDITOR.tools.cssLength,k=function(a){var e=this.id;a.info||(a.info={});a.info[e]=this.getValue()};CKEDITOR.dialog.add("table",function(a){return n(a,"table")});CKEDITOR.dialog.add("tableProperties",function(a){return n(a,"tableProperties")})})(); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/plugins/tabletools/dialogs/tableCell.js b/html/moodle2/mod/hvp/editor/ckeditor/plugins/tabletools/dialogs/tableCell.js new file mode 100755 index 0000000000..738813ec4c --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/plugins/tabletools/dialogs/tableCell.js @@ -0,0 +1,17 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("cellProperties",function(g){function d(a){return function(b){for(var c=a(b[0]),d=1;d<b.length;d++)if(a(b[d])!==c){c=null;break}"undefined"!=typeof c&&(this.setValue(c),CKEDITOR.env.gecko&&("select"==this.type&&!c)&&(this.getInputElement().$.selectedIndex=-1))}}function j(a){if(a=l.exec(a.getStyle("width")||a.getAttribute("width")))return a[2]}var h=g.lang.table,c=h.cell,e=g.lang.common,i=CKEDITOR.dialog.validate,l=/^(\d+(?:\.\d+)?)(px|%)$/,f={type:"html",html:"&nbsp;"},m="rtl"== +g.lang.dir,k=g.plugins.colordialog;return{title:c.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?450:410,minHeight:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?230:220,contents:[{id:"info",label:c.title,accessKey:"I",elements:[{type:"hbox",widths:["40%","5%","40%"],children:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["70%","30%"],children:[{type:"text",id:"width",width:"100px",label:e.width,validate:i.number(c.invalidWidth),onLoad:function(){var a=this.getDialog().getContentElement("info", +"widthType").getElement(),b=this.getInputElement(),c=b.getAttribute("aria-labelledby");b.setAttribute("aria-labelledby",[c,a.$.id].join(" "))},setup:d(function(a){var b=parseInt(a.getAttribute("width"),10),a=parseInt(a.getStyle("width"),10);return!isNaN(a)?a:!isNaN(b)?b:""}),commit:function(a){var b=parseInt(this.getValue(),10),c=this.getDialog().getValueOf("info","widthType")||j(a);isNaN(b)?a.removeStyle("width"):a.setStyle("width",b+c);a.removeAttribute("width")},"default":""},{type:"select",id:"widthType", +label:g.lang.table.widthUnit,labelStyle:"visibility:hidden","default":"px",items:[[h.widthPx,"px"],[h.widthPc,"%"]],setup:d(j)}]},{type:"hbox",widths:["70%","30%"],children:[{type:"text",id:"height",label:e.height,width:"100px","default":"",validate:i.number(c.invalidHeight),onLoad:function(){var a=this.getDialog().getContentElement("info","htmlHeightType").getElement(),b=this.getInputElement(),c=b.getAttribute("aria-labelledby");b.setAttribute("aria-labelledby",[c,a.$.id].join(" "))},setup:d(function(a){var b= +parseInt(a.getAttribute("height"),10),a=parseInt(a.getStyle("height"),10);return!isNaN(a)?a:!isNaN(b)?b:""}),commit:function(a){var b=parseInt(this.getValue(),10);isNaN(b)?a.removeStyle("height"):a.setStyle("height",CKEDITOR.tools.cssLength(b));a.removeAttribute("height")}},{id:"htmlHeightType",type:"html",html:"<br />"+h.widthPx}]},f,{type:"select",id:"wordWrap",label:c.wordWrap,"default":"yes",items:[[c.yes,"yes"],[c.no,"no"]],setup:d(function(a){var b=a.getAttribute("noWrap");if("nowrap"==a.getStyle("white-space")|| +b)return"no"}),commit:function(a){"no"==this.getValue()?a.setStyle("white-space","nowrap"):a.removeStyle("white-space");a.removeAttribute("noWrap")}},f,{type:"select",id:"hAlign",label:c.hAlign,"default":"",items:[[e.notSet,""],[e.alignLeft,"left"],[e.alignCenter,"center"],[e.alignRight,"right"],[e.alignJustify,"justify"]],setup:d(function(a){var b=a.getAttribute("align");return a.getStyle("text-align")||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("text-align",b):a.removeStyle("text-align"); +a.removeAttribute("align")}},{type:"select",id:"vAlign",label:c.vAlign,"default":"",items:[[e.notSet,""],[e.alignTop,"top"],[e.alignMiddle,"middle"],[e.alignBottom,"bottom"],[c.alignBaseline,"baseline"]],setup:d(function(a){var b=a.getAttribute("vAlign"),a=a.getStyle("vertical-align");switch(a){case "top":case "middle":case "bottom":case "baseline":break;default:a=""}return a||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("vertical-align",b):a.removeStyle("vertical-align");a.removeAttribute("vAlign")}}]}, +f,{type:"vbox",padding:0,children:[{type:"select",id:"cellType",label:c.cellType,"default":"td",items:[[c.data,"td"],[c.header,"th"]],setup:d(function(a){return a.getName()}),commit:function(a){a.renameNode(this.getValue())}},f,{type:"text",id:"rowSpan",label:c.rowSpan,"default":"",validate:i.integer(c.invalidRowSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("rowSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("rowSpan",this.getValue()): +a.removeAttribute("rowSpan")}},{type:"text",id:"colSpan",label:c.colSpan,"default":"",validate:i.integer(c.invalidColSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("colSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("colSpan",this.getValue()):a.removeAttribute("colSpan")}},f,{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"bgColor",label:c.bgColor,"default":"",setup:d(function(a){var b=a.getAttribute("bgColor"); +return a.getStyle("background-color")||b}),commit:function(a){this.getValue()?a.setStyle("background-color",this.getValue()):a.removeStyle("background-color");a.removeAttribute("bgColor")}},k?{type:"button",id:"bgColorChoose","class":"colorChooser",label:c.chooseColor,onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","bgColor").setValue(a);this.focus()},this)}}:f]},f, +{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"borderColor",label:c.borderColor,"default":"",setup:d(function(a){var b=a.getAttribute("borderColor");return a.getStyle("border-color")||b}),commit:function(a){this.getValue()?a.setStyle("border-color",this.getValue()):a.removeStyle("border-color");a.removeAttribute("borderColor")}},k?{type:"button",id:"borderColorChoose","class":"colorChooser",label:c.chooseColor,style:(m?"margin-right":"margin-left")+": 10px",onLoad:function(){this.getElement().getParent().setStyle("vertical-align", +"bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","borderColor").setValue(a);this.focus()},this)}}:f]}]}]}]}],onShow:function(){this.cells=CKEDITOR.plugins.tabletools.getSelectedCells(this._.editor.getSelection());this.setupContent(this.cells)},onOk:function(){for(var a=this._.editor.getSelection(),b=a.createBookmarks(),c=this.cells,d=0;d<c.length;d++)this.commitContent(c[d]);this._.editor.forceNextSelectionCheck();a.selectBookmarks(b);this._.editor.selectionChange()}, +onLoad:function(){var a={};this.foreach(function(b){b.setup&&b.commit&&(b.setup=CKEDITOR.tools.override(b.setup,function(c){return function(){c.apply(this,arguments);a[b.id]=b.getValue()}}),b.commit=CKEDITOR.tools.override(b.commit,function(c){return function(){a[b.id]!==b.getValue()&&c.apply(this,arguments)}}))})}}}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog.css new file mode 100755 index 0000000000..6191d5002d --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog.css @@ -0,0 +1 @@ +input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:hover,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:active{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:hover,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#eee}.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .ImagePreviewBox,.cke_dialog .FlashPreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:white}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog_ie.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog_ie.css new file mode 100755 index 0000000000..f945588e7e --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog_ie.css @@ -0,0 +1 @@ +input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:hover,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:active{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:hover,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#eee}.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .ImagePreviewBox,.cke_dialog .FlashPreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:white}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog_ie7.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog_ie7.css new file mode 100755 index 0000000000..a63ae994fb --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog_ie7.css @@ -0,0 +1 @@ +input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:hover,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:active{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:hover,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#eee}.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .ImagePreviewBox,.cke_dialog .FlashPreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:white}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog_ie8.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog_ie8.css new file mode 100755 index 0000000000..fa2e81ab1c --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog_ie8.css @@ -0,0 +1 @@ +input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:hover,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:active{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:hover,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#eee}.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .ImagePreviewBox,.cke_dialog .FlashPreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:white}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog_iequirks.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog_iequirks.css new file mode 100755 index 0000000000..480263af7b --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog_iequirks.css @@ -0,0 +1 @@ +input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:hover,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:active{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:hover,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#eee}.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .ImagePreviewBox,.cke_dialog .FlashPreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:white}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_dialog_footer{filter:""} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog_opera.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog_opera.css new file mode 100755 index 0000000000..21fc6921ab --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/dialog_opera.css @@ -0,0 +1 @@ +input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:hover,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:active{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:hover,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#eee}.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .ImagePreviewBox,.cke_dialog .FlashPreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:white}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_dialog_footer{display:block;height:38px}.cke_ltr .cke_dialog_footer>*{float:right}.cke_rtl .cke_dialog_footer>*{float:left} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor.css new file mode 100755 index 0000000000..8ba7c92483 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor.css @@ -0,0 +1 @@ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:transparent;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top,.cke_bottom{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup *:last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_off a.cke_combo_button:active{border-color:#333}.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor_gecko.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor_gecko.css new file mode 100755 index 0000000000..b3e000dd4a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor_gecko.css @@ -0,0 +1 @@ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:transparent;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top,.cke_bottom{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup *:last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_off a.cke_combo_button:active{border-color:#333}.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor_ie.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor_ie.css new file mode 100755 index 0000000000..f66f9b5c4c --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor_ie.css @@ -0,0 +1 @@ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:transparent;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top,.cke_bottom{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup *:last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_off a.cke_combo_button:active{border-color:#333}.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity=30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity=100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity=30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor_ie7.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor_ie7.css new file mode 100755 index 0000000000..8e1f3f5616 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor_ie7.css @@ -0,0 +1 @@ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:transparent;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top,.cke_bottom{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup *:last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_off a.cke_combo_button:active{border-color:#333}.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor_ie8.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor_ie8.css new file mode 100755 index 0000000000..7a10f0f727 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor_ie8.css @@ -0,0 +1 @@ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:transparent;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top,.cke_bottom{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup *:last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_off a.cke_combo_button:active{border-color:#333}.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor_iequirks.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor_iequirks.css new file mode 100755 index 0000000000..65e3dc72a0 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/.temp/css/editor_iequirks.css @@ -0,0 +1 @@ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:transparent;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top,.cke_bottom{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup *:last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_off a.cke_combo_button:active{border-color:#333}.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog.css new file mode 100755 index 0000000000..1ca45fde65 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog.css @@ -0,0 +1 @@ +input.cke_dialog_ui_input_password,input.cke_dialog_ui_input_text,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_text:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:700}.cke_dialog_title{font-weight:700;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:700;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_hbox table,.cke_dialog_ui_vbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_ui_hbox_first{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_file,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_textarea{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:active,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:hover{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:active,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:hover{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:active,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:hover{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:active span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:hover span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:hover{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background,.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_locked,.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .FlashPreviewBox,.cke_dialog .ImagePreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:#fff}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:#fff;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:700}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:active,a.cke_smile:focus,a.cke_smile:hover,a.cke_specialchar:active,a.cke_specialchar:focus,a.cke_specialchar:hover{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:active,a.cke_smile:focus,a.cke_specialchar:active,a.cke_specialchar:focus{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_btn_over,.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog_ie.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog_ie.css new file mode 100755 index 0000000000..49c228b026 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog_ie.css @@ -0,0 +1 @@ +input.cke_dialog_ui_input_password,input.cke_dialog_ui_input_text,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_text:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:700}.cke_dialog_title{font-weight:700;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:700;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_hbox table,.cke_dialog_ui_vbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_ui_hbox_first{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:5px;padding-right:0}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:active,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:hover{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:active,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:hover{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:active,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:hover{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:active span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:hover span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:hover{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background,.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_locked,.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .FlashPreviewBox,.cke_dialog .ImagePreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:#fff}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:#fff;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:700}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:active,a.cke_smile:focus,a.cke_smile:hover,a.cke_specialchar:active,a.cke_specialchar:focus,a.cke_specialchar:hover{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:active,a.cke_smile:focus,a.cke_specialchar:active,a.cke_specialchar:focus{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_btn_over,.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_password,.cke_rtl input.cke_dialog_ui_input_text{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_password,.cke_rtl div.cke_dialog_ui_input_text{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last,.cke_rtl .cke_dialog_ui_vbox_child{padding-right:2px!important}.cke_hc .cke_dialog_footer,.cke_hc .cke_dialog_title,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_file,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_textarea{border:0} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog_ie7.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog_ie7.css new file mode 100755 index 0000000000..d3e7e7ef0f --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog_ie7.css @@ -0,0 +1 @@ +input.cke_dialog_ui_input_password,input.cke_dialog_ui_input_text,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_text:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:700}.cke_dialog_title{font-weight:700;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:700;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_hbox table,.cke_dialog_ui_vbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_ui_hbox_first{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_file,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_textarea{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:active,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:hover{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:active,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:hover{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:active,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:hover{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:active span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:hover span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:hover{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background,.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_locked,.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .FlashPreviewBox,.cke_dialog .ImagePreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:#fff}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:#fff;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:700}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:active,a.cke_smile:focus,a.cke_smile:hover,a.cke_specialchar:active,a.cke_specialchar:focus,a.cke_specialchar:hover{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:active,a.cke_smile:focus,a.cke_specialchar:active,a.cke_specialchar:focus{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_btn_over,.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_password,.cke_dialog_ui_input_select,.cke_dialog_ui_input_text,.cke_dialog_ui_input_textarea{padding:0!important}.cke_btn_locked,.cke_btn_reset,.cke_btn_unlocked,.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input{border:1px solid transparent!important} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog_ie8.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog_ie8.css new file mode 100755 index 0000000000..9a71a5f1f2 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog_ie8.css @@ -0,0 +1 @@ +input.cke_dialog_ui_input_password,input.cke_dialog_ui_input_text,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_text:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:700}.cke_dialog_title{font-weight:700;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:700;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_hbox table,.cke_dialog_ui_vbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_ui_hbox_first{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_file,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_textarea{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:active,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:hover{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:active,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:hover{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:active,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:hover{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:active span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:hover span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:hover{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background,.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_locked,.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .FlashPreviewBox,.cke_dialog .ImagePreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:#fff}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:#fff;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:700}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:active,a.cke_smile:focus,a.cke_smile:hover,a.cke_specialchar:active,a.cke_specialchar:focus,a.cke_specialchar:hover{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:active,a.cke_smile:focus,a.cke_specialchar:active,a.cke_specialchar:focus{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_btn_over,.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}a.cke_dialog_ui_button_cancel:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_ok:focus span{display:block} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog_iequirks.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog_iequirks.css new file mode 100755 index 0000000000..84673524f1 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog_iequirks.css @@ -0,0 +1 @@ +input.cke_dialog_ui_input_password,input.cke_dialog_ui_input_text,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_text:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:700}.cke_dialog_title{font-weight:700;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:700;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_hbox table,.cke_dialog_ui_vbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_ui_hbox_first{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_file,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_textarea{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:active,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:hover{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:active,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:hover{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:active,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:hover{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:active span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:hover span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:hover{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background,.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_locked,.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .FlashPreviewBox,.cke_dialog .ImagePreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:#fff}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:#fff;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:700}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:active,a.cke_smile:focus,a.cke_smile:hover,a.cke_specialchar:active,a.cke_specialchar:focus,a.cke_specialchar:hover{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:active,a.cke_smile:focus,a.cke_specialchar:active,a.cke_specialchar:focus{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_btn_over,.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_dialog_footer{filter:""} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog_opera.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog_opera.css new file mode 100755 index 0000000000..24e047037a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/dialog_opera.css @@ -0,0 +1 @@ +input.cke_dialog_ui_input_password,input.cke_dialog_ui_input_text,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_text:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:700}.cke_dialog_title{font-weight:700;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:700;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_hbox table,.cke_dialog_ui_vbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_ui_hbox_first{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_file,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_textarea{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:active,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:hover{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:active,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:hover{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:active,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:hover{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:active span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:hover span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:hover{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background,.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_locked,.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .FlashPreviewBox,.cke_dialog .ImagePreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:#fff}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:#fff;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:700}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:active,a.cke_smile:focus,a.cke_smile:hover,a.cke_specialchar:active,a.cke_specialchar:focus,a.cke_specialchar:hover{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:active,a.cke_smile:focus,a.cke_specialchar:active,a.cke_specialchar:focus{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_btn_over,.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_dialog_footer{display:block;height:38px}.cke_ltr .cke_dialog_footer>*{float:right}.cke_rtl .cke_dialog_footer>*{float:left} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor.css new file mode 100755 index 0000000000..ac86dc2115 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor.css @@ -0,0 +1 @@ +.cke_reset{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all input[type=password],.cke_reset_all input[type=text],.cke_reset_all textarea{cursor:text}.cke_reset_all input[type=password][disabled],.cke_reset_all input[type=text][disabled],.cke_reset_all textarea[disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:0;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_bottom,.cke_contents,.cke_top{display:block;overflow:hidden}.cke_bottom,.cke_top{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:active,.cke_panel_listItem a:focus,.cke_panel_listItem a:hover{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:active,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:hover{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:700;white-space:nowrap;margin:0;padding:6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem p,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:active.cke_colorbox,a:focus.cke_colorbox,a:hover.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:active.cke_colorauto,a:active.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:hover.cke_colorauto,a:hover.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup :first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup :last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid #000;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on,.cke_hc a.cke_button_disabled:active,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:hover{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_disabled:active,a.cke_button_disabled:focus,a.cke_button_disabled:hover,a.cke_button_off:active,a.cke_button_off:focus,a.cke_button_off:hover{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:active,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:hover{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menuarrow,.cke_menubutton_icon,.cke_menubutton_label{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.7;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:active .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:hover .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:active .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:hover .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.7}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:hover{outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_off a.cke_combo_button:active,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_empty,.cke_path_item{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:700;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_empty,.cke_rtl .cke_path_item{float:right}a.cke_path_item:active,a.cke_path_item:focus,a.cke_path_item:hover{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:active,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:hover{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_div,.cke_wysiwyg_frame{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label,legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_button__find_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_rtl .cke_button__hiddenfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -216px!important;background-size:16px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -360px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -408px!important;background-size:16px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -456px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__hiddenfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__hiddenfield_icon,.cke_ltr.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important;background-size:16px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -600px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -696px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -744px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1128px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1176px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important;background-size:16px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -1224px!important;background-size:16px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -1272px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -1320px!important;background-size:16px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important;background-size:16px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -1368px!important;background-size:16px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -1416px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important;background-size:16px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -1464px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1512px!important;background-size:16px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1560px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -1608px!important;background-size:16px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -1656px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -1704px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -1752px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -1800px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important;background-size:16px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -1848px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -1896px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -1944px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important;background-size:16px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -1992px!important;background-size:16px!important}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor_gecko.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor_gecko.css new file mode 100755 index 0000000000..3fe693457e --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor_gecko.css @@ -0,0 +1 @@ +.cke_reset{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all input[type=password],.cke_reset_all input[type=text],.cke_reset_all textarea{cursor:text}.cke_reset_all input[type=password][disabled],.cke_reset_all input[type=text][disabled],.cke_reset_all textarea[disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:0;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_bottom,.cke_contents,.cke_top{display:block;overflow:hidden}.cke_bottom,.cke_top{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:active,.cke_panel_listItem a:focus,.cke_panel_listItem a:hover{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:active,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:hover{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:700;white-space:nowrap;margin:0;padding:6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem p,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:active.cke_colorbox,a:focus.cke_colorbox,a:hover.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:active.cke_colorauto,a:active.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:hover.cke_colorauto,a:hover.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup :first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup :last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid #000;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on,.cke_hc a.cke_button_disabled:active,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:hover{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_disabled:active,a.cke_button_disabled:focus,a.cke_button_disabled:hover,a.cke_button_off:active,a.cke_button_off:focus,a.cke_button_off:hover{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:active,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:hover{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menuarrow,.cke_menubutton_icon,.cke_menubutton_label{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.7;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:active .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:hover .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:active .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:hover .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.7}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:hover{outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_off a.cke_combo_button:active,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_empty,.cke_path_item{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:700;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_empty,.cke_rtl .cke_path_item{float:right}a.cke_path_item:active,a.cke_path_item:focus,a.cke_path_item:hover{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:active,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:hover{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_div,.cke_wysiwyg_frame{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label,legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor_ie.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor_ie.css new file mode 100755 index 0000000000..eaad25a951 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor_ie.css @@ -0,0 +1 @@ +.cke_reset{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all input[type=password],.cke_reset_all input[type=text],.cke_reset_all textarea{cursor:text}.cke_reset_all input[type=password][disabled],.cke_reset_all input[type=text][disabled],.cke_reset_all textarea[disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:0;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_bottom,.cke_contents,.cke_top{display:block;overflow:hidden}.cke_bottom,.cke_top{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:active,.cke_panel_listItem a:focus,.cke_panel_listItem a:hover{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:active,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:hover{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:700;white-space:nowrap;margin:0;padding:6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem p,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:active.cke_colorbox,a:focus.cke_colorbox,a:hover.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:active.cke_colorauto,a:active.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:hover.cke_colorauto,a:hover.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup :first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup :last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid #000;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on,.cke_hc a.cke_button_disabled:active,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:hover{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_disabled:active,a.cke_button_disabled:focus,a.cke_button_disabled:hover,a.cke_button_off:active,a.cke_button_off:focus,a.cke_button_off:hover{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:active,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:hover{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menuarrow,.cke_menubutton_icon,.cke_menubutton_label{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.7;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:active .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:hover .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:active .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:hover .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.7}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:hover{outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_off a.cke_combo_button:active,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_empty,.cke_path_item{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:700;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_empty,.cke_rtl .cke_path_item{float:right}a.cke_path_item:active,a.cke_path_item:focus,a.cke_path_item:hover{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:active,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:hover{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_div,.cke_wysiwyg_frame{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label,legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:active,a.cke_button_disabled:focus,a.cke_button_disabled:hover{filter:alpha(opacity=30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:active,.cke_button_off:focus,.cke_button_off:hover{filter:alpha(opacity=100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity=30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_bottom,.cke_hc .cke_button_on,.cke_hc .cke_combo_button,.cke_hc .cke_panel_grouptitle,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_toolgroup,.cke_hc .cke_top,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_combo_button:focus,.cke_hc a.cke_combo_button:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor_ie7.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor_ie7.css new file mode 100755 index 0000000000..d85ee4e9de --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor_ie7.css @@ -0,0 +1 @@ +.cke_reset{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all input[type=password],.cke_reset_all input[type=text],.cke_reset_all textarea{cursor:text}.cke_reset_all input[type=password][disabled],.cke_reset_all input[type=text][disabled],.cke_reset_all textarea[disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:0;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_bottom,.cke_contents,.cke_top{display:block;overflow:hidden}.cke_bottom,.cke_top{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:active,.cke_panel_listItem a:focus,.cke_panel_listItem a:hover{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:active,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:hover{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:700;white-space:nowrap;margin:0;padding:6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem p,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:active.cke_colorbox,a:focus.cke_colorbox,a:hover.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:active.cke_colorauto,a:active.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:hover.cke_colorauto,a:hover.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup :first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup :last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;border:0;border-radius:2px}.cke_hc .cke_button{border:1px solid #000;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on,.cke_hc a.cke_button_disabled:active,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:hover{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_disabled:active,a.cke_button_disabled:focus,a.cke_button_disabled:hover,a.cke_button_off:active,a.cke_button_off:focus,a.cke_button_off:hover{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{margin:4px 2px 0;height:16px;width:1px}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:active,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:hover{border:2px solid;padding:0}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.7;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:active .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:hover .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:active .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:hover .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.7}.cke_menuarrow{background-image:url(images/arrow.png);background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:hover{outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_off a.cke_combo_button:active,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_empty,.cke_path_item{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:700;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_empty,.cke_rtl .cke_path_item{float:right}a.cke_path_item:active,a.cke_path_item:focus,a.cke_path_item:hover{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:active,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:hover{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_div,.cke_wysiwyg_frame{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label,legend.cke_voice_label{display:none}.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_empty,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_toolgroup{float:none}.cke_rtl .cke_button,.cke_rtl .cke_button_icon,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_toolgroup{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_combo,.cke_toolgroup{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:silver}.cke_toolbox_collapser .cke_arrow{margin-top:0;border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menuarrow,.cke_menubutton_icon,.cke_menubutton_label{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_password,.cke_rtl input.cke_dialog_ui_input_text{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor_ie8.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor_ie8.css new file mode 100755 index 0000000000..f8bfb89f85 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor_ie8.css @@ -0,0 +1 @@ +.cke_reset{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all input[type=password],.cke_reset_all input[type=text],.cke_reset_all textarea{cursor:text}.cke_reset_all input[type=password][disabled],.cke_reset_all input[type=text][disabled],.cke_reset_all textarea[disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:0;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_bottom,.cke_contents,.cke_top{display:block;overflow:hidden}.cke_bottom,.cke_top{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:active,.cke_panel_listItem a:focus,.cke_panel_listItem a:hover{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:active,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:hover{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:700;white-space:nowrap;margin:0;padding:6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem p,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:active.cke_colorbox,a:focus.cke_colorbox,a:hover.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:active.cke_colorauto,a:active.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:hover.cke_colorauto,a:hover.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup :first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup :last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid #000;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on,.cke_hc a.cke_button_disabled:active,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:hover{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_disabled:active,a.cke_button_disabled:focus,a.cke_button_disabled:hover,a.cke_button_off:active,a.cke_button_off:focus,a.cke_button_off:hover{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:active,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:hover{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menuarrow,.cke_menubutton_icon,.cke_menubutton_label{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.7;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:active .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:hover .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:active .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:hover .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.7}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:hover{outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_off a.cke_combo_button:active,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_empty,.cke_path_item{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:700;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_empty,.cke_rtl .cke_path_item{float:right}a.cke_path_item:active,a.cke_path_item:focus,a.cke_path_item:hover{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:active,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:hover{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_div,.cke_wysiwyg_frame{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label,legend.cke_voice_label{display:none}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor_iequirks.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor_iequirks.css new file mode 100755 index 0000000000..80f7dfd255 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/editor_iequirks.css @@ -0,0 +1 @@ +.cke_reset{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all input[type=password],.cke_reset_all input[type=text],.cke_reset_all textarea{cursor:text}.cke_reset_all input[type=password][disabled],.cke_reset_all input[type=text][disabled],.cke_reset_all textarea[disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:0;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_bottom,.cke_contents,.cke_top{display:block;overflow:hidden}.cke_bottom,.cke_top{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:active,.cke_panel_listItem a:focus,.cke_panel_listItem a:hover{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:active,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:hover{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:700;white-space:nowrap;margin:0;padding:6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem p,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:active.cke_colorbox,a:focus.cke_colorbox,a:hover.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:active.cke_colorauto,a:active.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:hover.cke_colorauto,a:hover.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup :first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup :last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_hc .cke_button{border:1px solid #000;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on,.cke_hc a.cke_button_disabled:active,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:hover{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_disabled:active,a.cke_button_disabled:focus,a.cke_button_disabled:hover,a.cke_button_off:active,a.cke_button_off:focus,a.cke_button_off:hover{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:active,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:hover{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menuarrow,.cke_menubutton_icon,.cke_menubutton_label{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.7;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:active .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:hover .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:active .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:hover .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.7}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:hover{outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_off a.cke_combo_button:active,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_empty,.cke_path_item{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:700;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_empty,.cke_rtl .cke_path_item{float:right}a.cke_path_item:active,a.cke_path_item:focus,a.cke_path_item:hover{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:active,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:hover{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff}.cke_wysiwyg_div,.cke_wysiwyg_frame{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label,legend.cke_voice_label{display:none}.cke_bottom,.cke_contents,.cke_top{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_empty,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_toolgroup{float:none}.cke_rtl .cke_button,.cke_rtl .cke_button_icon,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_toolgroup{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/icons.png b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/icons.png new file mode 100755 index 0000000000..c1dc392164 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/icons.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/icons_hidpi.png b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/icons_hidpi.png new file mode 100755 index 0000000000..897e78962e Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/icons_hidpi.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/arrow.png b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/arrow.png new file mode 100755 index 0000000000..0d1eb39c67 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/arrow.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/close.png b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/close.png new file mode 100755 index 0000000000..b2acd4fc5c Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/close.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/hidpi/close.png b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/hidpi/close.png new file mode 100755 index 0000000000..da9fe62811 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/hidpi/close.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/hidpi/lock-open.png b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/hidpi/lock-open.png new file mode 100755 index 0000000000..7f63a94d47 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/hidpi/lock-open.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/hidpi/lock.png b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/hidpi/lock.png new file mode 100755 index 0000000000..0167a76fa3 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/hidpi/lock.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/hidpi/refresh.png b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/hidpi/refresh.png new file mode 100755 index 0000000000..75af754f13 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/hidpi/refresh.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/lock-open.png b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/lock-open.png new file mode 100755 index 0000000000..42bd5686f6 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/lock-open.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/lock.png b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/lock.png new file mode 100755 index 0000000000..2f7347a46b Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/lock.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/refresh.png b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/refresh.png new file mode 100755 index 0000000000..1908d6672b Binary files /dev/null and b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/images/refresh.png differ diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/readme.md b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/readme.md new file mode 100755 index 0000000000..422e006c83 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/readme.md @@ -0,0 +1,35 @@ +BootstrapCK Skin +==================== + +The BootstrapCK-Skin is a skin for [CKEditor4](http://ckeditor.com/) based on [Twitter Bootstrap3](http://getbootstrap.com/) styles. + +[Sass](http://sass-lang.com/) is used to rewrite the editor's styles and [Grunt](http://gruntjs.com/) to be able to watch, convert and minify the sass into css files. These files aren't really needed for the simple use of the skin, but handy if you want to make some adjustments to it. + +For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) +documentation. + +## Installation + +**Just skin please** + +Add the whole bootstrapck folder to the skin folder.<br /> +In ckeditor.js and config.js change the skin name to "bootstrapck".<br /> +Done! + +**The whole skin - sass - grunt package** + +All the sass files are included in the bootstrapck folder, so first follow the 'just skin please'-steps<br /> +Now add the Gruntfile.js and the package.json to de ckeditor folder. + + npm install + grunt build + +You can start tampering now. + +## Demo + +http://kunstmaan.github.io/BootstrapCK4-Skin/ + +### Previous version + +If you would like to get the Bootstrap2 skin for CKeditor3, [here](https://github.com/Kunstmaan/BootstrapCK-Skin)'s the previous version. diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/sample/bootstrapck-sample.html b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/sample/bootstrapck-sample.html new file mode 100755 index 0000000000..f38770aa09 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/sample/bootstrapck-sample.html @@ -0,0 +1,127 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + + <title>Kunstmaan/BootstrapCK4-Skin @ GitHub</title> + + <link rel="stylesheet" href="css/bootstrapck-sample.css"> +</head> + +<body> + <a href="https://github.com/Kunstmaan/BootstrapCK4-Skin"><img style="position: absolute; top: 0; right: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a> + + <div class="container"> + + <div class="download"> + <a href="https://github.com/Kunstmaan/BootstrapCK4-Skin/zipball/master" onClick="javascript: _gaq.push(['_trackEvent', 'Download', 'BootstrapCKSkin-master.zip']);"> + <img border="0" width="90" src="https://github.com/images/modules/download/zip.png"> + </a> + <a href="https://github.com/Kunstmaan/BootstrapCK4-Skin/tarball/master" onClick="javascript: _gaq.push(['_trackEvent', 'Download', 'BootstrapCKSkin-master.tar.gz']);"> + <img border="0" width="90" src="https://github.com/images/modules/download/tar.png"> + </a> + </div> + + <h1> + <a href="https://github.com/Kunstmaan/BootstrapCK4-Skin" onClick="javascript: _gaq.push(['_trackEvent', 'Outbound Links', 'github.com/Kunstmaan/BootstrapCK4-Skin']);">BootstrapCK4-Skin</a> + <span>by <a href="https://github.com/Kunstmaan"onClick="javascript: _gaq.push(['_trackEvent', 'Outbound Links', 'github.com/Kunstmaan']);">Kunstmaan</a></span> + </h1> + + <!-- Demo --> + <h2>Demo</h2> + <form action="sample_posteddata.php" method="post"> + <p> + <textarea class="ckeditor" id="editor1" name="editor1" cols="100" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> + </p> + </form> + + <p class="twitter">Like what you see? Let the world know! + <a href="http://twitter.com/share" class="twitter-share-button" data-url="http://kunstmaan.github.com/BootstrapCK4-Skin/" data-via="" data-count="horizontal" data-text="A CKEditor skin based on @twbootstrap by Kunstmaan">Tweet</a> + </p> + + <!-- About --> + <h2>About</h2> + <p>The BootstrapCK4-Skin is a skin for <a href="http://ckeditor.com/" target="_blank" onClick="javascript: _gaq.push(['_trackEvent', 'Outbound Links', 'ckeditor.com']);">CKEditor4</a> based on <a href="http://getbootstrap.com/" target="_blank" onClick="javascript: _gaq.push(['_trackEvent', 'Outbound Links', 'twitter.github.com/bootstrap/']);">Twitter Bootstrap3</a> styles.</p> + <p><a href="http://sass-lang.com/" target="_blank">Sass</a> is used to rewrite the editor's styles and <a href="http://gruntjs.com/" target="_blank">Grunt</a> to be able to watch, convert and minify the sass into css files. These files aren't really needed for the simple use of the skin, but handy if you want to make some adjustments to it.</p> + <p>For more information about skins, please check the <a href="http://docs.cksource.com/CKEditor_4.x/Skin_SDK" target="_blank">CKEditor Skin SDK</a></p> + + <!-- Installation --> + <h2>Installation</h2> + <h3>Just skin please</h3> + + <p>Add the whole bootstrapck folder to the skin folder.<br /> + In ckeditor.js and config.js change the skin name to "bootstrapck".<br /> + Done!</p> + + <h3>The whole skin - sass - grunt package</h3> + + <p>All the sass files are included in the bootstrapck folder, so first follow the 'just skin please'-steps<br /> + Now add the Gruntfile.js and the package.json to de ckeditor folder.</p> + <pre>npm install <br />grunt build</pre> + <p>You can start tampering now.</p> + <p>Or if you'd like to adjust the icons, use the bootstrapck-dev folder instead.</p> + + <!-- Authors / Contact --> + <h2>Authors</h2> + <p>Indri Kenens (indri.kenens@kunstmaan.be)</p> + + <h2>Contact</h2> + <p>Kunstmaan (support@kunstmaan.be)</p> + + <!-- Download --> + <h2>Download</h2> + <p> + You can download this project in either + <a href="https://github.com/Kunstmaan/BootstrapCK4-Skin/zipball/master" onClick="javascript: _gaq.push(['_trackEvent', 'Download', 'BootstrapCKSkin-master.zip']);">zip</a> or + <a href="https://github.com/Kunstmaan/BootstrapCK4-Skin/tarball/master" onClick="javascript: _gaq.push(['_trackEvent', 'Download', 'BootstrapCKSkin-master.tar.gz']);">tar formats.</a> + </p> + <p>You can also clone the project with <a href="http://git-scm.com" onClick="javascript: _gaq.push(['_trackEvent', 'Outbound Links', 'git-scm.com']);">Git</a> + by running: <pre>$ git clone git://github.com/Kunstmaan/BootstrapCK4-Skin</pre></p> + + <!-- Previous version --> + <h2>Previous version</h2> + <p>If you would like to get the Bootstrap2 skin for CKeditor3, <a href="https://github.com/Kunstmaan/BootstrapCK-Skin" target="_blank">here</a>'s the previous version.</p> + + <!-- Footer --> + <div class="footer"> + get the source code on GitHub : <a href="https://github.com/Kunstmaan/BootstrapCK4-Skin" onClick="javascript: _gaq.push(['_trackEvent', 'Outbound Links', 'github.com/Kunstmaan/BootstrapCK4-Skin']);">Kunstmaan/BootstrapCK4-Skin</a> + </div> + </div> + + +<!-- ckeditor --> +<script src="../../../ckeditor.js"></script> + +<!-- jQuery --> +<script src="js/jquery-1.11.0.min.js"></script> + +<!-- Google Analytics --> +<script src="js/analytics.js"></script> +<script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-27907146-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); +</script> + +<!-- Twitter --> +<script type="text/javascript"> + (function(){ + var twitterWidgets = document.createElement('script'); + twitterWidgets.type = 'text/javascript'; + twitterWidgets.async = true; + twitterWidgets.src = 'http://platform.twitter.com/widgets.js'; + twitterWidgets.onload = _ga.trackTwitter; + document.getElementsByTagName('head')[0].appendChild(twitterWidgets); + })(); +</script> + + +</body> +</html> diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/sample/css/bootstrapck-sample.css b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/sample/css/bootstrapck-sample.css new file mode 100755 index 0000000000..c135ef0416 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/sample/css/bootstrapck-sample.css @@ -0,0 +1 @@ +body{margin-top:1.0em;background-color:#fff;font-family:Helvetica,Arial,sans-serif;color:#404040}.container{margin:0 auto;width:900px;padding:0 0 20px}h1{font-size:40px;margin:40px 0 28px;padding:110px 0 9px;border-bottom:1px solid #ccc}h1 a,h1 a:visited,h1 a:focus,h1 a:hover{color:#404040;text-decoration:none}h1 span{font-size:18px;font-weight:normal;color:#bfbfbf}h1 span a,h1 span a:visited,h1 span a:focus,h1 span a:hover{color:#bfbfbf}h1 a{text-decoration:none}h2{font-size:23px;margin:10px 0 8px}h3{font-size:16px;margin:10px 0 8px}p{margin:0 0 30px;font-size:13px;line-height:18px}a,a:visited,a:focus{color:#0069d6;text-decoration:none}a:hover{color:#00438a;text-decoration:underline}.download{float:right}pre{background:#f5f5f5;color:#404040;padding:16px;border:1px solid rgba(0,0,0,0.05);border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.05) inset;margin:-20px 0 10px;line-height:200%}.twitter{margin:-20px 0 40px;color:#666}.twitter iframe{vertical-align:bottom;margin:0 0 0 5px}.footer{text-align:center;padding-top:20px;margin-top:60px;font-size:14px;color:#808080;border-top:1px solid #ccc}.footer a,.footer a:visited,.footer a:focus{color:#333}.footer a:hover{color:#000} \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/sample/js/analytics.js b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/sample/js/analytics.js new file mode 100755 index 0000000000..5097f40ac2 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/sample/js/analytics.js @@ -0,0 +1,4 @@ +var _ga=_ga||{},_gaq=_gaq||[];_ga.trackSocial=function(a,c){_ga.trackFacebook(a,c);_ga.trackTwitter(a,c)}; +_ga.trackFacebook=function(a,c){var d=_ga.buildTrackerName_(c);try{FB&&FB.Event&&FB.Event.subscribe&&(FB.Event.subscribe("edge.create",function(b){_gaq.push([d+"_trackSocial","facebook","like",b,a])}),FB.Event.subscribe("edge.remove",function(b){_gaq.push([d+"_trackSocial","facebook","unlike",b,a])}),FB.Event.subscribe("message.send",function(b){_gaq.push([d+"_trackSocial","facebook","send",b,a])}))}catch(e){}};_ga.buildTrackerName_=function(a){return a?a+".":""}; +_ga.trackTwitter=function(a,c){var d=_ga.buildTrackerName_(c);try{twttr&&twttr.events&&twttr.events.bind&&twttr.events.bind("tweet",function(b){if(b){var c;b.target&&"IFRAME"==b.target.nodeName&&(c=_ga.extractParamFromUri_(b.target.src,"url"));_gaq.push([d+"_trackSocial","twitter","tweet",c,a])}})}catch(e){}};_ga.extractParamFromUri_=function(a,c){if(a){var a=a.split("#")[0],d=a.split("?");if(1!=d.length)for(var d=decodeURI(d[1]),c=c+"=",d=d.split("&"),e=0,b;b=d[e];++e)if(0===b.indexOf(c))return unescape(b.split("=")[1])}}; +jQuery&&jQuery("a").click(function(){var a=jQuery(this).attr("href");null!=a&&(a.match(/^http/i)&&!a.match(document.domain)?_gaq.push(["_trackEvent","outgoing","click",a]):a.match(/\.(doc|pdf|xls|ppt|zip|txt|vsd|vxd|js|css|rar|exe|wma|mov|avi|wmv|mp3)$/i)?_gaq.push(["_trackEvent","download","click",a]):a.match(/^mailto:/i)&&_gaq.push(["_trackEvent","mailto","click",a]))}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/sample/js/jquery-1.11.0.min.js b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/sample/js/jquery-1.11.0.min.js new file mode 100755 index 0000000000..97cabeef5a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/sample/js/jquery-1.11.0.min.js @@ -0,0 +1,189 @@ +!function(o,ea){"object"==typeof module&&"object"==typeof module.exports?module.exports=o.document?ea(o,!0):function(o){if(!o.document)throw Error("jQuery requires a window with a document");return ea(o)}:ea(o)}("undefined"!=typeof window?window:this,function(o,ea){function Ba(a){var b=a.length,d=c.type(a);return"function"===d||c.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===d||0===b||"number"==typeof b&&0<b&&b-1 in a}function Ca(a,b,d){if(c.isFunction(b))return c.grep(a,function(a,c){return!!b.call(a, +c,a)!==d});if(b.nodeType)return c.grep(a,function(a){return a===b!==d});if("string"==typeof b){if(Yb.test(b))return c.filter(b,a,d);b=c.filter(b,a)}return c.grep(a,function(a){return 0<=c.inArray(a,b)!==d})}function Va(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}function Zb(a){var b=Wa[a]={};return c.each(a.match(H)||[],function(a,c){b[c]=!0}),b}function Xa(){l.addEventListener?(l.removeEventListener("DOMContentLoaded",v,!1),o.removeEventListener("load",v,!1)):(l.detachEvent("onreadystatechange", +v),o.detachEvent("onload",v))}function v(){(l.addEventListener||"load"===event.type||"complete"===l.readyState)&&(Xa(),c.ready())}function Ya(a,b,d){if(void 0===d&&1===a.nodeType){var e="data-"+b.replace($b,"-$1").toLowerCase();if(d=a.getAttribute(e),"string"==typeof d){try{d="true"===d?!0:"false"===d?!1:"null"===d?null:+d+""===d?+d:ac.test(d)?c.parseJSON(d):d}catch(f){}c.data(a,b,d)}else d=void 0}return d}function Da(a){for(var b in a)if(("data"!==b||!c.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; +return!0}function Za(a,b,d,e){if(c.acceptData(a)){var f,g,h=c.expando,i=a.nodeType,j=i?c.cache:a,m=i?a[h]:a[h]&&h;if(m&&j[m]&&(e||j[m].data)||void 0!==d||"string"!=typeof b)return m||(m=i?a[h]=A.pop()||c.guid++:h),j[m]||(j[m]=i?{}:{toJSON:c.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[m]=c.extend(j[m],b):j[m].data=c.extend(j[m].data,b)),g=j[m],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[c.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[c.camelCase(b)])):f=g,f}}function $a(a, +b,d){if(c.acceptData(a)){var e,f,g=a.nodeType,h=g?c.cache:a,i=g?a[c.expando]:c.expando;if(h[i]){if(b&&(e=d?h[i]:h[i].data)){c.isArray(b)?b=b.concat(c.map(b,c.camelCase)):b in e?b=[b]:(b=c.camelCase(b),b=b in e?[b]:b.split(" "));for(f=b.length;f--;)delete e[b[f]];if(d?!Da(e):!c.isEmptyObject(e))return}(d||(delete h[i].data,Da(h[i])))&&(g?c.cleanData([a],!0):n.deleteExpando||h!=h.window?delete h[i]:h[i]=null)}}}function ka(){return!0}function M(){return!1}function ab(){try{return l.activeElement}catch(a){}} +function bb(a){var b=cb.split("|"),a=a.createDocumentFragment();if(a.createElement)for(;b.length;)a.createElement(b.pop());return a}function s(a,b){var d,e,f=0,g=typeof a.getElementsByTagName!==z?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==z?a.querySelectorAll(b||"*"):void 0;if(!g){g=[];for(d=a.childNodes||a;null!=(e=d[f]);f++)!b||c.nodeName(e,b)?g.push(e):c.merge(g,s(e,b))}return void 0===b||b&&c.nodeName(a,b)?c.merge([a],g):g}function bc(a){Ea.test(a.type)&&(a.defaultChecked=a.checked)} +function db(a,b){return c.nodeName(a,"table")&&c.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function eb(a){return a.type=(null!==c.find.attr(a,"type"))+"/"+a.type,a}function fb(a){var b=cc.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){for(var d,e=0;null!=(d=a[e]);e++)c._data(d,"globalEval",!b||c._data(b[e],"globalEval"))}function gb(a,b){if(1===b.nodeType&&c.hasData(a)){var d, +e,f;e=c._data(a);var g=c._data(b,e),h=e.events;if(h)for(d in delete g.handle,g.events={},h){e=0;for(f=h[d].length;f>e;e++)c.event.add(b,d,h[d][e])}g.data&&(g.data=c.extend({},g.data))}}function hb(a,b){var d=c(b.createElement(a)).appendTo(b.body),e=o.getDefaultComputedStyle?o.getDefaultComputedStyle(d[0]).display:c.css(d[0],"display");return d.detach(),e}function ib(a){var b=l,d=jb[a];return d||(d=hb(a,b),"none"!==d&&d||(fa=(fa||c("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement), +b=(fa[0].contentWindow||fa[0].contentDocument).document,b.write(),b.close(),d=hb(a,b),fa.detach()),jb[a]=d),d}function kb(a,b){return{get:function(){var d=a();if(null!=d)return d?void delete this.get:(this.get=b).apply(this,arguments)}}}function lb(a,b){if(b in a)return b;for(var d=b.charAt(0).toUpperCase()+b.slice(1),c=b,f=mb.length;f--;)if(b=mb[f]+d,b in a)return b;return c}function nb(a,b){for(var d,e,f,g=[],h=0,i=a.length;i>h;h++)e=a[h],e.style&&(g[h]=c._data(e,"olddisplay"),d=e.style.display, +b?(g[h]||"none"!==d||(e.style.display=""),""===e.style.display&&N(e)&&(g[h]=c._data(e,"olddisplay",ib(e.nodeName)))):g[h]||(f=N(e),(d&&"none"!==d||!f)&&c._data(e,"olddisplay",f?d:c.css(e,"display"))));for(h=0;i>h;h++)e=a[h],e.style&&(b&&"none"!==e.style.display&&""!==e.style.display||(e.style.display=b?g[h]||"":"none"));return a}function ob(a,b,d){return(a=dc.exec(b))?Math.max(0,a[1]-(d||0))+(a[2]||"px"):b}function pb(a,b,d,e,f){for(var b=d===(e?"border":"content")?4:"width"===b?1:0,g=0;4>b;b+=2)"margin"=== +d&&(g+=c.css(a,d+T[b],!0,f)),e?("content"===d&&(g-=c.css(a,"padding"+T[b],!0,f)),"margin"!==d&&(g-=c.css(a,"border"+T[b]+"Width",!0,f))):(g+=c.css(a,"padding"+T[b],!0,f),"padding"!==d&&(g+=c.css(a,"border"+T[b]+"Width",!0,f)));return g}function qb(a,b,d){var e=!0,f="width"===b?a.offsetWidth:a.offsetHeight,g=U(a),h=n.boxSizing()&&"border-box"===c.css(a,"boxSizing",!1,g);if(0>=f||null==f){if(f=O(a,b,g),(0>f||null==f)&&(f=a.style[b]),V.test(f))return f;e=h&&(n.boxSizingReliable()||f===a.style[b]);f= +parseFloat(f)||0}return f+pb(a,b,d||(h?"border":"content"),e,g)+"px"}function D(a,b,d,c,f){return new D.prototype.init(a,b,d,c,f)}function rb(){return setTimeout(function(){F=void 0}),F=c.now()}function la(a,b){for(var d,c={height:a},f=0,b=b?1:0;4>f;f+=2-b)d=T[f],c["margin"+d]=c["padding"+d]=a;return b&&(c.opacity=c.width=a),c}function sb(a,b,d){for(var c,f=(ga[b]||[]).concat(ga["*"]),g=0,h=f.length;h>g;g++)if(c=f[g].call(d,b,a))return c}function ec(a,b){var d,e,f,g,h;for(d in a)if(e=c.camelCase(d), +f=b[e],g=a[d],c.isArray(g)&&(f=g[1],g=a[d]=g[0]),d!==e&&(a[e]=g,delete a[d]),h=c.cssHooks[e],h&&"expand"in h)for(d in g=h.expand(g),delete a[e],g)d in a||(a[d]=g[d],b[d]=f);else b[e]=f}function tb(a,b,d){var e,f=0,g=oa.length,h=c.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=F||rb(),b=Math.max(0,j.startTime+j.duration-b),d=1-(b/j.duration||0),c=0,f=j.tweens.length;f>c;c++)j.tweens[c].run(d);return h.notifyWith(a,[j,d,b]),1>d&&f?b:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a, +props:c.extend({},b),opts:c.extend(!0,{specialEasing:{}},d),originalProperties:b,originalOptions:d,startTime:F||rb(),duration:d.duration,tweens:[],createTween:function(b,d){var e=c.Tween(a,j.opts,b,d,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var d=0,c=b?j.tweens.length:0;if(e)return this;for(e=!0;c>d;d++)j.tweens[d].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),d=j.props;for(ec(d,j.opts.specialEasing);g>f;f++)if(b=oa[f].call(j,a,d,j.opts))return b; +return c.map(d,sb,j),c.isFunction(j.opts.start)&&j.opts.start.call(a,j),c.fx.timer(c.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function ub(a){return function(b,d){"string"!=typeof b&&(d=b,b="*");var e,f=0,g=b.toLowerCase().match(H)||[];if(c.isFunction(d))for(;e=g[f++];)"+"===e.charAt(0)?(e=e.slice(1)||"*",(a[e]=a[e]||[]).unshift(d)):(a[e]=a[e]||[]).push(d)}}function vb(a,b,d,e){function f(i){var j; +return g[i]=!0,c.each(a[i]||[],function(a,c){var i=c(b,d,e);return"string"!=typeof i||h||g[i]?h?!(j=i):void 0:(b.dataTypes.unshift(i),f(i),!1)}),j}var g={},h=a===Ga;return f(b.dataTypes[0])||!g["*"]&&f("*")}function Ha(a,b){var d,e,f=c.ajaxSettings.flatOptions||{};for(e in b)void 0!==b[e]&&((f[e]?a:d||(d={}))[e]=b[e]);return d&&c.extend(!0,a,d),a}function Ia(a,b,d,e){var f;if(c.isArray(b))c.each(b,function(b,c){d||fc.test(a)?e(a,c):Ia(a+"["+("object"==typeof c?b:"")+"]",c,d,e)});else if(d||"object"!== +c.type(b))e(a,b);else for(f in b)Ia(a+"["+f+"]",b[f],d,e)}function wb(){try{return new o.XMLHttpRequest}catch(a){}}function xb(a){return c.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}var A=[],L=A.slice,yb=A.concat,Ja=A.push,zb=A.indexOf,ra={},gc=ra.toString,W=ra.hasOwnProperty,Ka="".trim,n={},c=function(a,b){return new c.fn.init(a,b)},hc=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,ic=/^-ms-/,jc=/-([\da-z])/gi,kc=function(a,b){return b.toUpperCase()};c.fn=c.prototype={jquery:"1.11.0",constructor:c, +selector:"",length:0,toArray:function(){return L.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:L.call(this)},pushStack:function(a){a=c.merge(this.constructor(),a);return a.prevObject=this,a.context=this.context,a},each:function(a,b){return c.each(this,a,b)},map:function(a){return this.pushStack(c.map(this,function(b,d){return a.call(b,d,b)}))},slice:function(){return this.pushStack(L.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)}, +eq:function(a){var b=this.length,a=+a+(0>a?b:0);return this.pushStack(0<=a&&b>a?[this[a]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:Ja,sort:A.sort,splice:A.splice};c.extend=c.fn.extend=function(){var a,b,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,m=!1;"boolean"==typeof h&&(m=h,h=arguments[i]||{},i++);"object"==typeof h||c.isFunction(h)||(h={});for(i===j&&(h=this,i--);j>i;i++)if(null!=(f=arguments[i]))for(e in f)a=h[e],d=f[e],h!==d&&(m&&d&&(c.isPlainObject(d)|| +(b=c.isArray(d)))?(b?(b=!1,g=a&&c.isArray(a)?a:[]):g=a&&c.isPlainObject(a)?a:{},h[e]=c.extend(m,g,d)):void 0!==d&&(h[e]=d));return h};c.extend({expando:"jQuery"+("1.11.0"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw Error(a);},noop:function(){},isFunction:function(a){return"function"===c.type(a)},isArray:Array.isArray||function(a){return"array"===c.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return 0<=a-parseFloat(a)},isEmptyObject:function(a){for(var b in a)return!1; +return!0},isPlainObject:function(a){var b;if(!a||"object"!==c.type(a)||a.nodeType||c.isWindow(a))return!1;try{if(a.constructor&&!W.call(a,"constructor")&&!W.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(d){return!1}if(n.ownLast)for(b in a)return W.call(a,b);for(b in a);return void 0===b||W.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?ra[gc.call(a)]||"object":typeof a},globalEval:function(a){a&&c.trim(a)&&(o.execScript||function(a){o.eval.call(o, +a)})(a)},camelCase:function(a){return a.replace(ic,"ms-").replace(jc,kc)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,d){var c,f=0,g=a.length,h=Ba(a);if(d)if(h)for(;g>f&&!(c=b.apply(a[f],d),!1===c);f++);else for(f in a){if(c=b.apply(a[f],d),!1===c)break}else if(h)for(;g>f&&!(c=b.call(a[f],f,a[f]),!1===c);f++);else for(f in a)if(c=b.call(a[f],f,a[f]),!1===c)break;return a},trim:Ka&&!Ka.call(" ")?function(a){return null==a?"":Ka.call(a)}: +function(a){return null==a?"":(a+"").replace(hc,"")},makeArray:function(a,b){var d=b||[];return null!=a&&(Ba(Object(a))?c.merge(d,"string"==typeof a?[a]:a):Ja.call(d,a)),d},inArray:function(a,b,d){var c;if(b){if(zb)return zb.call(b,a,d);c=b.length;for(d=d?0>d?Math.max(0,c+d):d:0;c>d;d++)if(d in b&&b[d]===a)return d}return-1},merge:function(a,b){for(var d=+b.length,c=0,f=a.length;d>c;)a[f++]=b[c++];if(d!==d)for(;void 0!==b[c];)a[f++]=b[c++];return a.length=f,a},grep:function(a,b,d){for(var c=[],f= +0,g=a.length,h=!d;g>f;f++)d=!b(a[f],f),d!==h&&c.push(a[f]);return c},map:function(a,b,d){var c,f=0,g=a.length,h=[];if(Ba(a))for(;g>f;f++)c=b(a[f],f,d),null!=c&&h.push(c);else for(f in a)c=b(a[f],f,d),null!=c&&h.push(c);return yb.apply([],h)},guid:1,proxy:function(a,b){var d,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),c.isFunction(a)?(d=L.call(arguments,2),e=function(){return a.apply(b||this,d.concat(L.call(arguments)))},e.guid=a.guid=a.guid||c.guid++,e):void 0},now:function(){return+new Date}, +support:n});c.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){ra["[object "+b+"]"]=b.toLowerCase()});var ca=function(a){function b(a,b,c,d){var e,f,g,h,i;if((b?b.ownerDocument||b:E)!==K&&X(b),b=b||K,c=c||[],!a||"string"!=typeof a)return c;if(1!==(h=b.nodeType)&&9!==h)return[];if(P&&!d){if(e=ka.exec(a))if(g=e[1])if(9===h){if(f=b.getElementById(g),!f||!f.parentNode)return c;if(f.id===g)return c.push(f),c}else{if(b.ownerDocument&&(f=b.ownerDocument.getElementById(g))&& +w(b,f)&&f.id===g)return c.push(f),c}else{if(e[2])return Y.apply(c,b.getElementsByTagName(a)),c;if((g=e[3])&&p.getElementsByClassName&&b.getElementsByClassName)return Y.apply(c,b.getElementsByClassName(g)),c}if(p.qsa&&(!y||!y.test(a))){if(f=e=C,g=b,i=9===h&&a,1===h&&"object"!==b.nodeName.toLowerCase()){h=u(a);(e=b.getAttribute("id"))?f=e.replace(la,"\\$&"):b.setAttribute("id",f);f="[id='"+f+"'] ";for(g=h.length;g--;)h[g]=f+n(h[g]);g=V.test(a)&&q(b.parentNode)||b;i=h.join(",")}if(i)try{return Y.apply(c, +g.querySelectorAll(i)),c}catch(j){}finally{e||b.removeAttribute("id")}}}var k;a:{var a=a.replace(F,"$1"),m,l;f=u(a);if(!d&&1===f.length){if(k=f[0]=f[0].slice(0),2<k.length&&"ID"===(m=k[0]).type&&p.getById&&9===b.nodeType&&P&&r.relative[k[1].type]){if(b=(r.find.ID(m.matches[0].replace($,aa),b)||[])[0],!b){k=c;break a}a=a.slice(k.shift().value.length)}for(h=N.needsContext.test(a)?0:k.length;h--&&!(m=k[h],r.relative[e=m.type]);)if((l=r.find[e])&&(d=l(m.matches[0].replace($,aa),V.test(k[0].type)&&q(b.parentNode)|| +b))){if(k.splice(h,1),a=d.length&&n(k),!a){k=(Y.apply(c,d),c);break a}break}}k=(La(a,f)(d,b,!P,c,V.test(a)&&q(b.parentNode)||b),c)}return k}function d(){function a(c,d){return b.push(c+" ")>r.cacheLength&&delete a[b.shift()],a[c+" "]=d}var b=[];return a}function c(a){return a[C]=!0,a}function f(a){var b=K.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b)}}function g(a,b){for(var c=a.split("|"),d=a.length;d--;)r.attrHandle[c[d]]=b}function h(a, +b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||L)-(~a.sourceIndex||L);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function i(a){return function(b){return"input"===b.nodeName.toLowerCase()&&b.type===a}}function j(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function m(a){return c(function(b){return b=+b,c(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})} +function q(a){return a&&typeof a.getElementsByTagName!==A&&a}function k(){}function u(a,c){var d,e,f,g,h,i,k;if(h=Ab[a+" "])return c?0:h.slice(0);h=a;i=[];for(k=r.preFilter;h;){(!d||(e=W.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[]));d=!1;(e=ca.exec(h))&&(d=e.shift(),f.push({value:d,type:e[0].replace(F," ")}),h=h.slice(d.length));for(g in r.filter)!(e=N[g].exec(h))||k[g]&&!(e=k[g](e))||(d=e.shift(),f.push({value:d,type:g,matches:e}),h=h.slice(d.length));if(!d)break}return c?h.length:h?b.error(a): +Ab(a,i).slice(0)}function n(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function l(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=lc++;return b.first?function(b,c,f){for(;b=b[d];)if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,k=[I,f];if(g)for(;b=b[d];){if((1===b.nodeType||e)&&a(b,c,g))return!0}else for(;b=b[d];)if(1===b.nodeType||e){if(i=b[C]||(b[C]={}),(h=i[d])&&h[0]===I&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function o(a){return 1<a.length?function(b, +c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,k=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),k&&b.push(h));return g}function s(a,d,f,g,h,i){return g&&!g[C]&&(g=s(g)),h&&!h[C]&&(h=s(h,i)),c(function(c,e,i,k){var j,m,q=[],n=[],u=e.length,l;if(!(l=c)){l=d||"*";for(var J=i.nodeType?[i]:i,p=[],Z=0,o=J.length;o>Z;Z++)b(l,J[Z],p);l=p}l=!a||!c&&d?l:sa(l,q,a,i,k);J=f?h||(c?a:u||g)?[]:e:l;if(f&&f(l,J,i,k),g){j=sa(J,n);g(j,[], +i,k);for(i=j.length;i--;)(m=j[i])&&(J[n[i]]=!(l[n[i]]=m))}if(c){if(h||a){if(h){j=[];for(i=J.length;i--;)(m=J[i])&&j.push(l[i]=m);h(null,J=[],j,k)}for(i=J.length;i--;)(m=J[i])&&-1<(j=h?B.call(c,m):q[i])&&(c[j]=!(e[j]=m))}}else J=sa(J===e?J.splice(u,J.length):J),h?h(null,e,J,k):Y.apply(e,J)})}function D(a){var b,c,d,e=a.length,f=r.relative[a[0].type];c=f||r.relative[" "];for(var g=f?1:0,h=l(function(a){return a===b},c,!0),i=l(function(a){return-1<B.call(b,a)},c,!0),k=[function(a,c,d){return!f&&(d|| +c!==ta)||((b=c).nodeType?h(a,c,d):i(a,c,d))}];e>g;g++)if(c=r.relative[a[g].type])k=[l(o(k),c)];else{if(c=r.filter[a[g].type].apply(null,a[g].matches),c[C]){for(d=++g;e>d&&!r.relative[a[d].type];d++);return s(1<g&&o(k),1<g&&n(a.slice(0,g-1).concat({value:" "===a[g-2].type?"*":""})).replace(F,"$1"),c,d>g&&D(a.slice(g,d)),e>d&&D(a=a.slice(d)),e>d&&n(a))}k.push(c)}return o(k)}function mc(a,d){var f=0<d.length,g=0<a.length,h=function(c,e,h,i,k){var j,m,q,n=0,u="0",l=c&&[],ha=[],p=ta,Z=c||g&&r.find.TAG("*", +k),o=I+=null==p?1:Math.random()||0.1,ma=Z.length;for(k&&(ta=e!==K&&e);u!==ma&&null!=(j=Z[u]);u++){if(g&&j){for(m=0;q=a[m++];)if(q(j,e,h)){i.push(j);break}k&&(I=o)}f&&((j=!q&&j)&&n--,c&&l.push(j))}if(n+=u,f&&u!==n){for(m=0;q=d[m++];)q(l,ha,e,h);if(c){if(0<n)for(;u--;)l[u]||ha[u]||(ha[u]=T.call(i));ha=sa(ha)}Y.apply(i,ha);k&&!c&&0<ha.length&&1<n+d.length&&b.uniqueSort(i)}return k&&(I=o,ta=p),l};return f?c(h):h}var t,p,r,ma,Bb,La,ta,ba,na,X,K,G,P,y,ia,ua,w,C="sizzle"+-new Date,E=a.document,I=0,lc=0, +z=d(),Ab=d(),H=d(),v=function(a,b){return a===b&&(na=!0),0},A="undefined",L=-2147483648,Q={}.hasOwnProperty,x=[],T=x.pop,U=x.push,Y=x.push,O=x.slice,B=x.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+".replace("w","w#"),S="\\[[\\x20\\t\\r\\n\\f]*((?:\\\\.|[\\w-]|[^\\x00-\\xa0])+)[\\x20\\t\\r\\n\\f]*(?:([*^$|!~]?=)[\\x20\\t\\r\\n\\f]*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+R+")|)|)[\\x20\\t\\r\\n\\f]*\\]",M=":((?:\\\\.|[\\w-]|[^\\x00-\\xa0])+)(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+ +S.replace(3,8)+")*)|.*)\\)|)",F=RegExp("^[\\x20\\t\\r\\n\\f]+|((?:^|[^\\\\])(?:\\\\.)*)[\\x20\\t\\r\\n\\f]+$","g"),W=/^[\x20\t\r\n\f]*,[\x20\t\r\n\f]*/,ca=/^[\x20\t\r\n\f]*([>+~]|[\x20\t\r\n\f])[\x20\t\r\n\f]*/,da=RegExp("=[\\x20\\t\\r\\n\\f]*([^\\]'\"]*?)[\\x20\\t\\r\\n\\f]*\\]","g"),ea=RegExp(M),fa=RegExp("^"+R+"$"),N={ID:/^#((?:\\.|[\w-]|[^\x00-\xa0])+)/,CLASS:/^\.((?:\\.|[\w-]|[^\x00-\xa0])+)/,TAG:RegExp("^("+"(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+".replace("w","w*")+")"),ATTR:RegExp("^"+S),PSEUDO:RegExp("^"+ +M),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\([\\x20\\t\\r\\n\\f]*(even|odd|(([+-]|)(\\d*)n|)[\\x20\\t\\r\\n\\f]*(?:([+-]|)[\\x20\\t\\r\\n\\f]*(\\d+)|))[\\x20\\t\\r\\n\\f]*\\)|)","i"),bool:RegExp("^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$","i"),needsContext:RegExp("^[\\x20\\t\\r\\n\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\([\\x20\\t\\r\\n\\f]*((?:-\\d)?\\d*)[\\x20\\t\\r\\n\\f]*\\)|)(?=[^-]|$)", +"i")},ga=/^(?:input|select|textarea|button)$/i,ja=/^h\d$/i,qa=/^[^{]+\{\s*\[native \w/,ka=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,V=/[+~]/,la=/'|\\/g,$=RegExp("\\\\([\\da-f]{1,6}[\\x20\\t\\r\\n\\f]?|([\\x20\\t\\r\\n\\f])|.)","ig"),aa=function(a,b,c){a="0x"+b-65536;return a!==a||c?b:0>a?String.fromCharCode(a+65536):String.fromCharCode(a>>10|55296,1023&a|56320)};try{Y.apply(x=O.call(E.childNodes),E.childNodes),x[E.childNodes.length].nodeType}catch(oa){Y={apply:x.length?function(a,b){U.apply(a,O.call(b))}: +function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}p=b.support={};Bb=b.isXML=function(a){return(a=a&&(a.ownerDocument||a).documentElement)?"HTML"!==a.nodeName:!1};X=b.setDocument=function(a){var b,c=a?a.ownerDocument||a:E,a=c.defaultView;return c!==K&&9===c.nodeType&&c.documentElement?(K=c,G=c.documentElement,P=!Bb(c),a&&a!==a.top&&(a.addEventListener?a.addEventListener("unload",function(){X()},!1):a.attachEvent&&a.attachEvent("onunload",function(){X()})),p.attributes=f(function(a){return a.className= +"i",!a.getAttribute("className")}),p.getElementsByTagName=f(function(a){return a.appendChild(c.createComment("")),!a.getElementsByTagName("*").length}),p.getElementsByClassName=qa.test(c.getElementsByClassName)&&f(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),p.getById=f(function(a){return G.appendChild(a).id=C,!c.getElementsByName||!c.getElementsByName(C).length}),p.getById?(r.find.ID=function(a, +b){if(typeof b.getElementById!==A&&P){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},r.filter.ID=function(a){var b=a.replace($,aa);return function(a){return a.getAttribute("id")===b}}):(delete r.find.ID,r.filter.ID=function(a){var b=a.replace($,aa);return function(a){return(a=typeof a.getAttributeNode!==A&&a.getAttributeNode("id"))&&a.value===b}}),r.find.TAG=p.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c, +d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},r.find.CLASS=p.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&P?b.getElementsByClassName(a):void 0},ia=[],y=[],(p.qsa=qa.test(c.querySelectorAll))&&(f(function(a){a.innerHTML="<select t=''><option selected=''></option></select>";a.querySelectorAll("[t^='']").length&&y.push("[*^$]=[\\x20\\t\\r\\n\\f]*(?:''|\"\")");a.querySelectorAll("[selected]").length||y.push("\\[[\\x20\\t\\r\\n\\f]*(?:value|checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)"); +a.querySelectorAll(":checked").length||y.push(":checked")}),f(function(a){var b=c.createElement("input");b.setAttribute("type","hidden");a.appendChild(b).setAttribute("name","D");a.querySelectorAll("[name=d]").length&&y.push("name[\\x20\\t\\r\\n\\f]*[*^$|!~]?=");a.querySelectorAll(":enabled").length||y.push(":enabled",":disabled");a.querySelectorAll("*,:x");y.push(",.*:")})),(p.matchesSelector=qa.test(ua=G.webkitMatchesSelector||G.mozMatchesSelector||G.oMatchesSelector||G.msMatchesSelector))&&f(function(a){p.disconnectedMatch= +ua.call(a,"div");ua.call(a,"[s!='']:x");ia.push("!=",M)}),y=y.length&&RegExp(y.join("|")),ia=ia.length&&RegExp(ia.join("|")),b=qa.test(G.compareDocumentPosition),w=b||qa.test(G.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},v=b?function(a,b){if(a===b)return na=!0,0;var d= +!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!p.sortDetached&&b.compareDocumentPosition(a)===d?a===c||a.ownerDocument===E&&w(E,a)?-1:b===c||b.ownerDocument===E&&w(E,b)?1:ba?B.call(ba,a)-B.call(ba,b):0:4&d?-1:1)}:function(a,b){if(a===b)return na=!0,0;var d,e=0;d=a.parentNode;var f=b.parentNode,g=[a],i=[b];if(!d||!f)return a===c?-1:b===c?1:d?-1:f?1:ba?B.call(ba,a)-B.call(ba,b):0;if(d===f)return h(a, +b);for(d=a;d=d.parentNode;)g.unshift(d);for(d=b;d=d.parentNode;)i.unshift(d);for(;g[e]===i[e];)e++;return e?h(g[e],i[e]):g[e]===E?-1:i[e]===E?1:0},c):K};b.matches=function(a,c){return b(a,null,null,c)};b.matchesSelector=function(a,c){if((a.ownerDocument||a)!==K&&X(a),c=c.replace(da,"='$1']"),!(!p.matchesSelector||!P||ia&&ia.test(c)||y&&y.test(c)))try{var d=ua.call(a,c);if(d||p.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return 0<b(c,K,null,[a]).length};b.contains=function(a, +b){return(a.ownerDocument||a)!==K&&X(a),w(a,b)};b.attr=function(a,b){(a.ownerDocument||a)!==K&&X(a);var c=r.attrHandle[b.toLowerCase()],c=c&&Q.call(r.attrHandle,b.toLowerCase())?c(a,b,!P):void 0;return void 0!==c?c:p.attributes||!P?a.getAttribute(b):(c=a.getAttributeNode(b))&&c.specified?c.value:null};b.error=function(a){throw Error("Syntax error, unrecognized expression: "+a);};b.uniqueSort=function(a){var b,c=[],d=0,e=0;if(na=!p.detectDuplicates,ba=!p.sortStable&&a.slice(0),a.sort(v),na){for(;b= +a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return ba=null,a};ma=b.getText=function(a){var b,c="",d=0;if(b=a.nodeType)if(1===b||9===b||11===b){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=ma(a)}else{if(3===b||4===b)return a.nodeValue}else for(;b=a[d++];)c+=ma(b);return c};r=b.selectors={cacheLength:50,createPseudo:c,match:N,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling", +first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace($,aa),a[3]=(a[4]||a[5]||"").replace($,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||b.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&b.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return N.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&ea.test(c)&& +(b=u(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace($,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=z[a+" "];return b||(b=RegExp("(^|[\\x20\\t\\r\\n\\f])"+a+"([\\x20\\t\\r\\n\\f]|$)"))&&z(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")|| +"")})},ATTR:function(a,c,d){return function(e){e=b.attr(e,a);return null==e?"!="===c:c?(e+="","="===c?e===d:"!="===c?e!==d:"^="===c?d&&0===e.indexOf(d):"*="===c?d&&-1<e.indexOf(d):"$="===c?d&&e.slice(-d.length)===d:"~="===c?-1<(" "+e+" ").indexOf(d):"|="===c?e===d||e.slice(0,d.length+1)===d+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var k,j,m,q,n,c=f!==g?"nextSibling": +"previousSibling",u=b.parentNode,l=h&&b.nodeName.toLowerCase(),i=!i&&!h;if(u){if(f){for(;c;){for(j=b;j=j[c];)if(h?j.nodeName.toLowerCase()===l:1===j.nodeType)return!1;n=c="only"===a&&!n&&"nextSibling"}return!0}if(n=[g?u.firstChild:u.lastChild],g&&i){i=u[C]||(u[C]={});k=i[a]||[];q=k[0]===I&&k[1];m=k[0]===I&&k[2];for(j=q&&u.childNodes[q];j=++q&&j&&j[c]||(m=q=0)||n.pop();)if(1===j.nodeType&&++m&&j===b){i[a]=[I,q,m];break}}else if(i&&(k=(b[C]||(b[C]={}))[a])&&k[0]===I)m=k[1];else for(;(j=++q&&j&&j[c]|| +(m=q=0)||n.pop())&&(!(h?j.nodeName.toLowerCase()===l:1===j.nodeType)||!++m||!(i&&((j[C]||(j[C]={}))[a]=[I,m]),j===b)););return m-=e,m===d||0===m%d&&0<=m/d}}},PSEUDO:function(a,d){var f,g=r.pseudos[a]||r.setFilters[a.toLowerCase()]||b.error("unsupported pseudo: "+a);return g[C]?g(d):1<g.length?(f=[a,a,"",d],r.setFilters.hasOwnProperty(a.toLowerCase())?c(function(a,b){for(var c,e=g(a,d),f=e.length;f--;)c=B.call(a,e[f]),a[c]=!(b[c]=e[f])}):function(a){return g(a,0,f)}):g}},pseudos:{not:c(function(a){var b= +[],d=[],f=La(a.replace(F,"$1"));return f[C]?c(function(a,b,c,d){for(var e,c=f(a,null,d,[]),d=a.length;d--;)(e=c[d])&&(a[d]=!(b[d]=e))}):function(a,c,e){return b[0]=a,f(b,null,e,d),!d.pop()}}),has:c(function(a){return function(c){return 0<b(a,c).length}}),contains:c(function(a){return function(b){return-1<(b.textContent||b.innerText||ma(b)).indexOf(a)}}),lang:c(function(a){return fa.test(a||"")||b.error("unsupported lang: "+a),a=a.replace($,aa).toLowerCase(),function(b){var c;do if(c=P?b.lang:b.getAttribute("xml:lang")|| +b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===G},focus:function(a){return a===K.activeElement&&(!K.hasFocus||K.hasFocus())&&!(!a.type&&!a.href&&!~a.tabIndex)},enabled:function(a){return!1===a.disabled},disabled:function(a){return!0===a.disabled},checked:function(a){var b=a.nodeName.toLowerCase();return"input"=== +b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,!0===a.selected},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(6>a.nodeType)return!1;return!0},parent:function(a){return!r.pseudos.empty(a)},header:function(a){return ja.test(a.nodeName)},input:function(a){return ga.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&& +"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:m(function(){return[0]}),last:m(function(a,b){return[b-1]}),eq:m(function(a,b,c){return[0>c?c+b:c]}),even:m(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:m(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:m(function(a,b,c){for(b=0>c?c+b:c;0<=--b;)a.push(b);return a}),gt:m(function(a,b,c){for(c=0>c?c+b:c;++c<b;)a.push(c);return a})}};r.pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0, +file:!0,password:!0,image:!0})r.pseudos[t]=i(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=j(t);k.prototype=r.filters=r.pseudos;r.setFilters=new k;La=b.compile=function(a,b){var c,d=[],e=[],f=H[a+" "];if(!f){b||(b=u(a));for(c=b.length;c--;)f=D(b[c]),f[C]?d.push(f):e.push(f);f=H(a,mc(e,d))}return f};return p.sortStable=C.split("").sort(v).join("")===C,p.detectDuplicates=!!na,X(),p.sortDetached=f(function(a){return 1&a.compareDocumentPosition(K.createElement("div"))}),f(function(a){return a.innerHTML= +"<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||g("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),p.attributes&&f(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||g("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),f(function(a){return null==a.getAttribute("disabled")})||g("checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", +function(a,b,c){var d;return c?void 0:!0===a[b]?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),b}(o);c.find=ca;c.expr=ca.selectors;c.expr[":"]=c.expr.pseudos;c.unique=ca.uniqueSort;c.text=ca.getText;c.isXMLDoc=ca.isXML;c.contains=ca.contains;var Cb=c.expr.match.needsContext,Db=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Yb=/^.[^:#\[\.,]*$/;c.filter=function(a,b,d){var e=b[0];return d&&(a=":not("+a+")"),1===b.length&&1===e.nodeType?c.find.matchesSelector(e,a)?[e]:[]:c.find.matches(a,c.grep(b, +function(a){return 1===a.nodeType}))};c.fn.extend({find:function(a){var b,d=[],e=this,f=e.length;if("string"!=typeof a)return this.pushStack(c(a).filter(function(){for(b=0;f>b;b++)if(c.contains(e[b],this))return!0}));for(b=0;f>b;b++)c.find(a,e[b],d);return d=this.pushStack(1<f?c.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(Ca(this,a||[],!1))},not:function(a){return this.pushStack(Ca(this,a||[],!0))},is:function(a){return!!Ca(this,"string"== +typeof a&&Cb.test(a)?c(a):a||[],!1).length}});var ja,l=o.document,nc=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;(c.fn.init=function(a,b){var d,e;if(!a)return this;if("string"==typeof a){if(d="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&3<=a.length?[null,a,null]:nc.exec(a),!d||!d[1]&&b)return!b||b.jquery?(b||ja).find(a):this.constructor(b).find(a);if(d[1]){if(b=b instanceof c?b[0]:b,c.merge(this,c.parseHTML(d[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),Db.test(d[1])&&c.isPlainObject(b))for(d in b)c.isFunction(this[d])? +this[d](b[d]):this.attr(d,b[d]);return this}if(e=l.getElementById(d[2]),e&&e.parentNode){if(e.id!==d[2])return ja.find(a);this.length=1;this[0]=e}return this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):c.isFunction(a)?"undefined"!=typeof ja.ready?ja.ready(a):a(c):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),c.makeArray(a,this))}).prototype=c.fn;ja=c(l);var oc=/^(?:parents|prev(?:Until|All))/,pc={children:!0,contents:!0,next:!0, +prev:!0};c.extend({dir:function(a,b,d){for(var e=[],a=a[b];a&&9!==a.nodeType&&(void 0===d||1!==a.nodeType||!c(a).is(d));)1===a.nodeType&&e.push(a),a=a[b];return e},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}});c.fn.extend({has:function(a){var b,d=c(a,this),e=d.length;return this.filter(function(){for(b=0;e>b;b++)if(c.contains(this,d[b]))return!0})},closest:function(a,b){for(var d,e=0,f=this.length,g=[],h=Cb.test(a)||"string"!=typeof a?c(a,b||this.context): +0;f>e;e++)for(d=this[e];d&&d!==b;d=d.parentNode)if(11>d.nodeType&&(h?-1<h.index(d):1===d.nodeType&&c.find.matchesSelector(d,a))){g.push(d);break}return this.pushStack(1<g.length?c.unique(g):g)},index:function(a){return a?"string"==typeof a?c.inArray(this[0],c(a)):c.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(c.unique(c.merge(this.get(),c(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}}); +c.each({parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return Va(a,"nextSibling")},prev:function(a){return Va(a,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling", +d)},siblings:function(a){return c.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.merge([],a.childNodes)}},function(a,b){c.fn[a]=function(d,e){var f=c.map(this,b,d);return"Until"!==a.slice(-5)&&(e=d),e&&"string"==typeof e&&(f=c.filter(e,f)),1<this.length&&(pc[a]||(f=c.unique(f)),oc.test(a)&&(f=f.reverse())),this.pushStack(f)}});var H=/\S+/g,Wa={};c.Callbacks= +function(a){var a="string"==typeof a?Wa[a]||Zb(a):c.extend({},a),b,d,e,f,g,h,i=[],j=!a.once&&[],m=function(c){d=a.memory&&c;e=!0;g=h||0;h=0;f=i.length;for(b=!0;i&&f>g;g++)if(!1===i[g].apply(c[0],c[1])&&a.stopOnFalse){d=!1;break}b=!1;i&&(j?j.length&&m(j.shift()):d?i=[]:q.disable())},q={add:function(){if(i){var e=i.length;!function Z(b){c.each(b,function(b,d){var e=c.type(d);"function"===e?a.unique&&q.has(d)||i.push(d):d&&d.length&&"string"!==e&&Z(d)})}(arguments);b?f=i.length:d&&(h=e,m(d))}return this}, +remove:function(){return i&&c.each(arguments,function(a,d){for(var e;-1<(e=c.inArray(d,i,e));)i.splice(e,1),b&&(f>=e&&f--,g>=e&&g--)}),this},has:function(a){return a?-1<c.inArray(a,i):!(!i||!i.length)},empty:function(){return i=[],f=0,this},disable:function(){return i=j=d=void 0,this},disabled:function(){return!i},lock:function(){return j=void 0,d||q.disable(),this},locked:function(){return!j},fireWith:function(a,c){return!i||e&&!j||(c=c||[],c=[a,c.slice?c.slice():c],b?j.push(c):m(c)),this},fire:function(){return q.fireWith(this, +arguments),this},fired:function(){return!!e}};return q};c.extend({Deferred:function(a){var b=[["resolve","done",c.Callbacks("once memory"),"resolved"],["reject","fail",c.Callbacks("once memory"),"rejected"],["notify","progress",c.Callbacks("memory")]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},then:function(){var a=arguments;return c.Deferred(function(d){c.each(b,function(b,j){var m=c.isFunction(a[b])&&a[b];f[j[1]](function(){var a=m&& +m.apply(this,arguments);a&&c.isFunction(a.promise)?a.promise().done(d.resolve).fail(d.reject).progress(d.notify):d[j[0]+"With"](this===e?d.promise():this,m?[a]:arguments)})});a=null}).promise()},promise:function(a){return null!=a?c.extend(a,e):e}},f={};return e.pipe=e.then,c.each(b,function(a,c){var i=c[2],j=c[3];e[c[1]]=i.add;j&&i.add(function(){d=j},b[1^a][2].disable,b[2][2].lock);f[c[0]]=function(){return f[c[0]+"With"](this===f?e:this,arguments),this};f[c[0]+"With"]=i.fireWith}),e.promise(f), +a&&a.call(f,f),f},when:function(a){var b=0,d=L.call(arguments),e=d.length,f=1!==e||a&&c.isFunction(a.promise)?e:0,g=1===f?a:c.Deferred(),h=function(a,b,c){return function(d){b[a]=this;c[a]=1<arguments.length?L.call(arguments):d;c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,m;if(1<e){i=Array(e);j=Array(e);for(m=Array(e);e>b;b++)d[b]&&c.isFunction(d[b].promise)?d[b].promise().done(h(b,m,d)).fail(g.reject).progress(h(b,j,i)):--f}return f||g.resolveWith(m,d),g.promise()}});var va;c.fn.ready=function(a){return c.ready.promise().done(a), +this};c.extend({isReady:!1,readyWait:1,holdReady:function(a){a?c.readyWait++:c.ready(!0)},ready:function(a){if(!0===a?!--c.readyWait:!c.isReady){if(!l.body)return setTimeout(c.ready);c.isReady=!0;!0!==a&&0<--c.readyWait||(va.resolveWith(l,[c]),c.fn.trigger&&c(l).trigger("ready").off("ready"))}}});c.ready.promise=function(a){if(!va)if(va=c.Deferred(),"complete"===l.readyState)setTimeout(c.ready);else if(l.addEventListener)l.addEventListener("DOMContentLoaded",v,!1),o.addEventListener("load",v,!1); +else{l.attachEvent("onreadystatechange",v);o.attachEvent("onload",v);var b=!1;try{b=null==o.frameElement&&l.documentElement}catch(d){}b&&b.doScroll&&function f(){if(!c.isReady){try{b.doScroll("left")}catch(a){return setTimeout(f,50)}Xa();c.ready()}}()}return va.promise(a)};var z="undefined",Eb;for(Eb in c(n))break;n.ownLast="0"!==Eb;n.inlineBlockNeedsLayout=!1;c(function(){var a,b,c=l.getElementsByTagName("body")[0];c&&(a=l.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px", +b=l.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==z&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(n.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a))});(function(){var a=l.createElement("div");if(null==n.deleteExpando){n.deleteExpando=!0;try{delete a.test}catch(b){n.deleteExpando=!1}}})();c.acceptData=function(a){var b=c.noData[(a.nodeName+" ").toLowerCase()],d=+a.nodeType||1;return 1!==d&&9!==d?!1:!b|| +!0!==b&&a.getAttribute("classid")===b};var ac=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,$b=/([A-Z])/g;c.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?c.cache[a[c.expando]]:a[c.expando],!!a&&!Da(a)},data:function(a,b,c){return Za(a,b,c)},removeData:function(a,b){return $a(a,b)},_data:function(a,b,c){return Za(a,b,c,!0)},_removeData:function(a,b){return $a(a,b,!0)}});c.fn.extend({data:function(a,b){var d,e,f,g= +this[0],h=g&&g.attributes;if(void 0===a){if(this.length&&(f=c.data(g),1===g.nodeType&&!c._data(g,"parsedAttrs"))){for(d=h.length;d--;)e=h[d].name,0===e.indexOf("data-")&&(e=c.camelCase(e.slice(5)),Ya(g,e,f[e]));c._data(g,"parsedAttrs",!0)}return f}return"object"==typeof a?this.each(function(){c.data(this,a)}):1<arguments.length?this.each(function(){c.data(this,a,b)}):g?Ya(g,a,c.data(g,a)):void 0},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a, +b,d){var e;return a?(b=(b||"fx")+"queue",e=c._data(a,b),d&&(!e||c.isArray(d)?e=c._data(a,b,c.makeArray(d)):e.push(d)),e||[]):void 0},dequeue:function(a,b){var b=b||"fx",d=c.queue(a,b),e=d.length,f=d.shift(),g=c._queueHooks(a,b),h=function(){c.dequeue(a,b)};"inprogress"===f&&(f=d.shift(),e--);f&&("fx"===b&&d.unshift("inprogress"),delete g.stop,f.call(a,h,g));!e&&g&&g.empty.fire()},_queueHooks:function(a,b){var d=b+"queueHooks";return c._data(a,d)||c._data(a,d,{empty:c.Callbacks("once memory").add(function(){c._removeData(a, +b+"queue");c._removeData(a,d)})})}});c.fn.extend({queue:function(a,b){var d=2;return"string"!=typeof a&&(b=a,a="fx",d--),arguments.length<d?c.queue(this[0],a):void 0===b?this:this.each(function(){var d=c.queue(this,a,b);c._queueHooks(this,a);"fx"===a&&"inprogress"!==d[0]&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var d,e=1,f=c.Deferred(),g=this,h=this.length,i=function(){--e|| +f.resolveWith(g,[g])};"string"!=typeof a&&(b=a,a=void 0);for(a=a||"fx";h--;)(d=c._data(g[h],a+"queueHooks"))&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(b)}});var wa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],N=function(a,b){return a=b||a,"none"===c.css(a,"display")||!c.contains(a.ownerDocument,a)},B=c.access=function(a,b,d,e,f,g,h){var i=0,j=a.length,m=null==d;if("object"===c.type(d))for(i in f=!0,d)c.access(a,b,i,d[i],!0,g,h);else if(void 0!==e&&(f=!0, +c.isFunction(e)||(h=!0),m&&(h?(b.call(a,e),b=null):(m=b,b=function(a,b,d){return m.call(c(a),d)})),b))for(;j>i;i++)b(a[i],d,h?e:e.call(a[i],i,b(a[i],d)));return f?a:m?b.call(a):j?b(a[0],d):g},Ea=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=l.createElement("div"),c=l.createElement("input");if(b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a>",n.leadingWhitespace=3===b.firstChild.nodeType,n.tbody=!b.getElementsByTagName("tbody").length, +n.htmlSerialize=!!b.getElementsByTagName("link").length,n.html5Clone="<:nav></:nav>"!==l.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),n.appendChecked=c.checked,b.innerHTML="<textarea>x</textarea>",n.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",n.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,n.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick", +function(){n.noCloneEvent=!1}),b.cloneNode(!0).click()),null==n.deleteExpando){n.deleteExpando=!0;try{delete b.test}catch(e){n.deleteExpando=!1}}a=b=c=null}();(function(){var a,b,c=l.createElement("div");for(a in{submit:!0,change:!0,focusin:!0})b="on"+a,(n[a+"Bubbles"]=b in o)||(c.setAttribute(b,"t"),n[a+"Bubbles"]=!1===c.attributes[b].expando)})();var Ma=/^(?:input|select|textarea)$/i,qc=/^key/,rc=/^(?:mouse|contextmenu)|click/,Fb=/^(?:focusinfocus|focusoutblur)$/,Gb=/^([^.]*)(?:\.(.+)|)$/;c.event= +{global:{},add:function(a,b,d,e,f){var g,h,i,j,m,q,k,n,l,o;if(i=c._data(a)){d.handler&&(j=d,d=j.handler,f=j.selector);d.guid||(d.guid=c.guid++);(h=i.events)||(h=i.events={});(q=i.handle)||(q=i.handle=function(a){return typeof c===z||a&&c.event.triggered===a.type?void 0:c.event.dispatch.apply(q.elem,arguments)},q.elem=a);b=(b||"").match(H)||[""];for(i=b.length;i--;)g=Gb.exec(b[i])||[],l=o=g[1],g=(g[2]||"").split(".").sort(),l&&(m=c.event.special[l]||{},l=(f?m.delegateType:m.bindType)||l,m=c.event.special[l]|| +{},k=c.extend({type:l,origType:o,data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&c.expr.match.needsContext.test(f),namespace:g.join(".")},j),(n=h[l])||(n=h[l]=[],n.delegateCount=0,m.setup&&!1!==m.setup.call(a,e,g,q)||(a.addEventListener?a.addEventListener(l,q,!1):a.attachEvent&&a.attachEvent("on"+l,q))),m.add&&(m.add.call(a,k),k.handler.guid||(k.handler.guid=d.guid)),f?n.splice(n.delegateCount++,0,k):n.push(k),c.event.global[l]=!0);a=null}},remove:function(a,b,d,e,f){var g,h,i,j,m,q,k,n,l, +o,s,t=c.hasData(a)&&c._data(a);if(t&&(q=t.events)){b=(b||"").match(H)||[""];for(m=b.length;m--;)if(i=Gb.exec(b[m])||[],l=s=i[1],o=(i[2]||"").split(".").sort(),l){k=c.event.special[l]||{};l=(e?k.delegateType:k.bindType)||l;n=q[l]||[];i=i[2]&&RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)");for(j=g=n.length;g--;)h=n[g],!f&&s!==h.origType||d&&d.guid!==h.guid||i&&!i.test(h.namespace)||e&&e!==h.selector&&("**"!==e||!h.selector)||(n.splice(g,1),h.selector&&n.delegateCount--,k.remove&&k.remove.call(a, +h));j&&!n.length&&(k.teardown&&!1!==k.teardown.call(a,o,t.handle)||c.removeEvent(a,l,t.handle),delete q[l])}else for(l in q)c.event.remove(a,l+b[m],d,e,!0);c.isEmptyObject(q)&&(delete t.handle,c._removeData(a,"events"))}},trigger:function(a,b,d,e){var f,g,h,i,j,m,n=[d||l],k=W.call(a,"type")?a.type:a;m=W.call(a,"namespace")?a.namespace.split("."):[];if(h=f=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!Fb.test(k+c.event.triggered)&&(0<=k.indexOf(".")&&(m=k.split("."),k=m.shift(),m.sort()),g=0>k.indexOf(":")&& +"on"+k,a=a[c.expando]?a:new c.Event(k,"object"==typeof a&&a),a.isTrigger=e?2:3,a.namespace=m.join("."),a.namespace_re=a.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,a.result=void 0,a.target||(a.target=d),b=null==b?[a]:c.makeArray(b,[a]),j=c.event.special[k]||{},e||!j.trigger||!1!==j.trigger.apply(d,b))){if(!e&&!j.noBubble&&!c.isWindow(d)){i=j.delegateType||k;for(Fb.test(i+k)||(h=h.parentNode);h;h=h.parentNode)n.push(h),f=h;f===(d.ownerDocument||l)&&n.push(f.defaultView||f.parentWindow|| +o)}for(m=0;(h=n[m++])&&!a.isPropagationStopped();)a.type=1<m?i:j.bindType||k,(f=(c._data(h,"events")||{})[a.type]&&c._data(h,"handle"))&&f.apply(h,b),(f=g&&h[g])&&f.apply&&c.acceptData(h)&&(a.result=f.apply(h,b),!1===a.result&&a.preventDefault());if(a.type=k,!e&&!a.isDefaultPrevented()&&(!j._default||!1===j._default.apply(n.pop(),b))&&c.acceptData(d)&&g&&d[k]&&!c.isWindow(d)){(f=d[g])&&(d[g]=null);c.event.triggered=k;try{d[k]()}catch(u){}c.event.triggered=void 0;f&&(d[g]=f)}return a.result}},dispatch:function(a){var a= +c.event.fix(a),b,d,e,f,g,h=[],i=L.call(arguments);b=(c._data(this,"events")||{})[a.type]||[];var j=c.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!j.preDispatch||!1!==j.preDispatch.call(this,a)){h=c.event.handlers.call(this,a,b);for(b=0;(f=h[b++])&&!a.isPropagationStopped();){a.currentTarget=f.elem;for(g=0;(e=f.handlers[g++])&&!a.isImmediatePropagationStopped();)(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,d=((c.event.special[e.origType]||{}).handle|| +e.handler).apply(f.elem,i),void 0!==d&&!1===(a.result=d)&&(a.preventDefault(),a.stopPropagation()))}return j.postDispatch&&j.postDispatch.call(this,a),a.result}},handlers:function(a,b){var d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&(!a.button||"click"!==a.type))for(;j!=this;j=j.parentNode||this)if(1===j.nodeType&&(!0!==j.disabled||"click"!==a.type)){f=[];for(g=0;i>g;g++)e=b[g],d=e.selector+" ",void 0===f[d]&&(f[d]=e.needsContext?0<=c(d,this).index(j):c.find(d,this,null,[j]).length), +f[d]&&f.push(e);f.length&&h.push({elem:j,handlers:f})}return i<b.length&&h.push({elem:this,handlers:b.slice(i)}),h},fix:function(a){if(a[c.expando])return a;var b,d,e;b=a.type;var f=a,g=this.fixHooks[b];g||(this.fixHooks[b]=g=rc.test(b)?this.mouseHooks:qc.test(b)?this.keyHooks:{});e=g.props?this.props.concat(g.props):this.props;a=new c.Event(f);for(b=e.length;b--;)d=e[b],a[d]=f[d];return a.target||(a.target=f.srcElement||l),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey, +g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:["char","charCode","key","keyCode"],filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement; +return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||l,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ab()&&this.focus)try{return this.focus(), +!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ab()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return c.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return c.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,d,e){a=c.extend(new c.Event,d,{type:a,isSimulated:!0,originalEvent:{}}); +e?c.event.trigger(a,null,b):c.event.dispatch.call(b,a);a.isDefaultPrevented()&&d.preventDefault()}};c.removeEvent=l.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){b="on"+b;a.detachEvent&&(typeof a[b]===z&&(a[b]=null),a.detachEvent(b,c))};c.Event=function(a,b){return this instanceof c.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&(!1===a.returnValue||a.getPreventDefault&& +a.getPreventDefault())?ka:M):this.type=a,b&&c.extend(this,b),this.timeStamp=a&&a.timeStamp||c.now(),void(this[c.expando]=!0)):new c.Event(a,b)};c.Event.prototype={isDefaultPrevented:M,isPropagationStopped:M,isImmediatePropagationStopped:M,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ka;a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ka;a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble= +!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ka;this.stopPropagation()}};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={delegateType:b,bindType:b,handle:function(a){var e,f=a.relatedTarget,g=a.handleObj;return(!f||f!==this&&!c.contains(this,f))&&(a.type=g.origType,e=g.handler.apply(this,arguments),a.type=b),e}}});n.submitBubbles||(c.event.special.submit={setup:function(){return c.nodeName(this,"form")?!1:void c.event.add(this, +"click._submit keypress._submit",function(a){a=a.target;(a=c.nodeName(a,"input")||c.nodeName(a,"button")?a.form:void 0)&&!c._data(a,"submitBubbles")&&(c.event.add(a,"submit._submit",function(a){a._submit_bubble=true}),c._data(a,"submitBubbles",true))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&c.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return c.nodeName(this,"form")?!1:void c.event.remove(this,"._submit")}});n.changeBubbles|| +(c.event.special.change={setup:function(){return Ma.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(c.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),c.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1);c.event.simulate("change",this,a,!0)})),!1):void c.event.add(this,"beforeactivate._change",function(a){a=a.target;Ma.test(a.nodeName)&&!c._data(a,"changeBubbles")&& +(c.event.add(a,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||c.event.simulate("change",this.parentNode,a,!0)}),c._data(a,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return c.event.remove(this,"._change"),!Ma.test(this.nodeName)}});n.focusinBubbles||c.each({focus:"focusin",blur:"focusout"},function(a,b){var d= +function(a){c.event.simulate(b,a.target,c.event.fix(a),!0)};c.event.special[b]={setup:function(){var e=this.ownerDocument||this,f=c._data(e,b);f||e.addEventListener(a,d,!0);c._data(e,b,(f||0)+1)},teardown:function(){var e=this.ownerDocument||this,f=c._data(e,b)-1;f?c._data(e,b,f):(e.removeEventListener(a,d,!0),c._removeData(e,b))}}});c.fn.extend({on:function(a,b,d,e,f){var g,h;if("object"==typeof a){"string"!=typeof b&&(d=d||b,b=void 0);for(g in a)this.on(g,b,d,a[g],f);return this}if(null==d&&null== +e?(e=b,d=b=void 0):null==e&&("string"==typeof b?(e=d,d=void 0):(e=d,d=b,b=void 0)),!1===e)e=M;else if(!e)return this;return 1===f&&(h=e,e=function(a){return c().off(a),h.apply(this,arguments)},e.guid=h.guid||(h.guid=c.guid++)),this.each(function(){c.event.add(this,a,e,d,b)})},one:function(a,b,c,e){return this.on(a,b,c,e,1)},off:function(a,b,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,c(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler), +this;if("object"==typeof a){for(f in a)this.off(f,b,a[f]);return this}return(!1===b||"function"==typeof b)&&(d=b,b=void 0),!1===d&&(d=M),this.each(function(){c.event.remove(this,a,d,b)})},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){var d=this[0];return d?c.event.trigger(a,b,d,!0):void 0}});var cb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", +sc=/ jQuery\d+="(?:null|\d+)"/g,Hb=RegExp("<(?:"+cb+")[\\s/>]","i"),Na=/^\s+/,Ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Jb=/<([\w:]+)/,Kb=/<tbody/i,tc=/<|&#?\w+;/,uc=/<(?:script|style|link)/i,vc=/checked\s*(?:[^=]|=\s*.checked.)/i,Lb=/^$|\/(?:java|ecma)script/i,cc=/^true\/(.*)/,wc=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,t={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>", +"</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:n.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},Oa=bb(l).appendChild(l.createElement("div"));t.optgroup=t.option;t.tbody=t.tfoot=t.colgroup=t.caption=t.thead;t.th=t.td;c.extend({clone:function(a,b,d){var e,f,g,h,i,j=c.contains(a.ownerDocument,a);if(n.html5Clone||c.isXMLDoc(a)||!Hb.test("<"+ +a.nodeName+">")?g=a.cloneNode(!0):(Oa.innerHTML=a.outerHTML,Oa.removeChild(g=Oa.firstChild)),!(n.noCloneEvent&&n.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||c.isXMLDoc(a))){e=s(g);i=s(a);for(h=0;null!=(f=i[h]);++h)if(e[h]){var m=e[h],l=void 0,k=void 0,u=void 0;if(1===m.nodeType){if(l=m.nodeName.toLowerCase(),!n.noCloneEvent&&m[c.expando]){u=c._data(m);for(k in u.events)c.removeEvent(m,k,u.handle);m.removeAttribute(c.expando)}"script"===l&&m.text!==f.text?(eb(m).text=f.text,fb(m)):"object"=== +l?(m.parentNode&&(m.outerHTML=f.outerHTML),n.html5Clone&&f.innerHTML&&!c.trim(m.innerHTML)&&(m.innerHTML=f.innerHTML)):"input"===l&&Ea.test(f.type)?(m.defaultChecked=m.checked=f.checked,m.value!==f.value&&(m.value=f.value)):"option"===l?m.defaultSelected=m.selected=f.defaultSelected:("input"===l||"textarea"===l)&&(m.defaultValue=f.defaultValue)}}}if(b)if(d){i=i||s(a);e=e||s(g);for(h=0;null!=(f=i[h]);h++)gb(f,e[h])}else gb(a,g);return e=s(g,"script"),0<e.length&&Fa(e,!j&&s(a,"script")),g},buildFragment:function(a, +b,d,e){for(var f,g,h,i,j,m,l,k=a.length,u=bb(b),o=[],pa=0;k>pa;pa++)if(g=a[pa],g||0===g)if("object"===c.type(g))c.merge(o,g.nodeType?[g]:g);else if(tc.test(g)){i=i||u.appendChild(b.createElement("div"));j=(Jb.exec(g)||["",""])[1].toLowerCase();l=t[j]||t._default;i.innerHTML=l[1]+g.replace(Ib,"<$1></$2>")+l[2];for(f=l[0];f--;)i=i.lastChild;if(!n.leadingWhitespace&&Na.test(g)&&o.push(b.createTextNode(Na.exec(g)[0])),!n.tbody)for(f=(g="table"!==j||Kb.test(g)?"<table>"!==l[1]||Kb.test(g)?0:i:i.firstChild)&& +g.childNodes.length;f--;)c.nodeName(m=g.childNodes[f],"tbody")&&!m.childNodes.length&&g.removeChild(m);c.merge(o,i.childNodes);for(i.textContent="";i.firstChild;)i.removeChild(i.firstChild);i=u.lastChild}else o.push(b.createTextNode(g));i&&u.removeChild(i);n.appendChecked||c.grep(s(o,"input"),bc);for(pa=0;g=o[pa++];)if((!e||-1===c.inArray(g,e))&&(h=c.contains(g.ownerDocument,g),i=s(u.appendChild(g),"script"),h&&Fa(i),d))for(f=0;g=i[f++];)Lb.test(g.type||"")&&d.push(g);return u},cleanData:function(a, +b){for(var d,e,f,g,h=0,i=c.expando,j=c.cache,m=n.deleteExpando,l=c.event.special;null!=(d=a[h]);h++)if((b||c.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)l[e]?c.event.remove(d,e):c.removeEvent(d,e,g.handle);j[f]&&(delete j[f],m?delete d[i]:typeof d.removeAttribute!==z?d.removeAttribute(i):d[i]=null,A.push(f))}}});c.fn.extend({text:function(a){return B(this,function(a){return void 0===a?c.text(this):this.empty().append((this[0]&&this[0].ownerDocument||l).createTextNode(a))},null, +a,arguments.length)},append:function(){return this.domManip(arguments,function(a){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&db(this,a).appendChild(a)})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=db(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments, +function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var d,e=a?c.filter(a,this):this,f=0;null!=(d=e[f]);f++)b||1!==d.nodeType||c.cleanData(s(d)),d.parentNode&&(b&&c.contains(d.ownerDocument,d)&&Fa(s(d,"script")),d.parentNode.removeChild(d));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){for(1===a.nodeType&&c.cleanData(s(a,!1));a.firstChild;)a.removeChild(a.firstChild);a.options&&c.nodeName(a,"select")&&(a.options.length=0)}return this}, +clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return c.clone(this,a,b)})},html:function(a){return B(this,function(a){var d=this[0]||{},e=0,f=this.length;if(void 0===a)return 1===d.nodeType?d.innerHTML.replace(sc,""):void 0;if(!("string"!=typeof a||uc.test(a)||!n.htmlSerialize&&Hb.test(a)||!n.leadingWhitespace&&Na.test(a)||t[(Jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(Ib,"<$1></$2>");try{for(;f>e;e++)d=this[e]||{},1===d.nodeType&&(c.cleanData(s(d,!1)),d.innerHTML= +a);d=0}catch(g){}}d&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode;c.cleanData(s(this));a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){var a=yb.apply([],a),d,e,f,g,h=0,i=this.length,j=this,m=i-1,l=a[0],k=c.isFunction(l);if(k||1<i&&"string"==typeof l&&!n.checkClone&&vc.test(l))return this.each(function(c){var d= +j.eq(c);k&&(a[0]=l.call(this,c,d.html()));d.domManip(a,b)});if(i&&(g=c.buildFragment(a,this[0].ownerDocument,!1,this),d=g.firstChild,1===g.childNodes.length&&(g=d),d)){f=c.map(s(g,"script"),eb);for(e=f.length;i>h;h++)d=g,h!==m&&(d=c.clone(d,!0,!0),e&&c.merge(f,s(d,"script"))),b.call(this[h],d,h);if(e){g=f[f.length-1].ownerDocument;c.map(f,fb);for(h=0;e>h;h++)d=f[h],Lb.test(d.type||"")&&!c._data(d,"globalEval")&&c.contains(g,d)&&(d.src?c._evalUrl&&c._evalUrl(d.src):c.globalEval((d.text||d.textContent|| +d.innerHTML||"").replace(wc,"")))}g=d=null}return this}});c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(a){for(var e=0,f=[],g=c(a),h=g.length-1;h>=e;e++)a=e===h?this:this.clone(!0),c(g[e])[b](a),Ja.apply(f,a.get());return this.pushStack(f)}});var fa,jb={};!function(){var a,b,c=l.createElement("div");c.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";a=c.getElementsByTagName("a")[0]; +a.style.cssText="float:left;opacity:.5";n.opacity=/^0.5/.test(a.style.opacity);n.cssFloat=!!a.style.cssFloat;c.style.backgroundClip="content-box";c.cloneNode(!0).style.backgroundClip="";n.clearCloneStyle="content-box"===c.style.backgroundClip;a=c=null;n.shrinkWrapBlocks=function(){var a,c,d;if(null==b){if(a=l.getElementsByTagName("body")[0],!a)return;c=l.createElement("div");d=l.createElement("div");a.appendChild(c).appendChild(d);b=!1;typeof d.style.zoom!==z&&(d.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0;width:1px;padding:1px;zoom:1", +d.innerHTML="<div></div>",d.firstChild.style.width="5px",b=3!==d.offsetWidth);a.removeChild(c)}return b}}();var Mb=/^margin/,V=RegExp("^("+wa+")(?!px)[a-z%]+$","i"),U,O,xc=/^(top|right|bottom|left)$/;o.getComputedStyle?(U=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},O=function(a,b,d){var e,f,g,h,i=a.style;return d=d||U(a),h=d?d.getPropertyValue(b)||d[b]:void 0,d&&(""!==h||c.contains(a.ownerDocument,a)||(h=c.style(a,b)),V.test(h)&&Mb.test(b)&&(e=i.width,f=i.minWidth,g=i.maxWidth, +i.minWidth=i.maxWidth=i.width=h,h=d.width,i.width=e,i.minWidth=f,i.maxWidth=g)),void 0===h?h:h+""}):l.documentElement.currentStyle&&(U=function(a){return a.currentStyle},O=function(a,b,c){var e,f,g,h,i=a.style;return c=c||U(a),h=c?c[b]:void 0,null==h&&i&&i[b]&&(h=i[b]),V.test(h)&&!xc.test(b)&&(e=i.left,f=a.runtimeStyle,g=f&&f.left,g&&(f.left=a.currentStyle.left),i.left="fontSize"===b?"1em":h,h=i.pixelLeft+"px",i.left=e,g&&(f.left=g)),void 0===h?h:h+""||"auto"});!function(){function a(){var a,b,d= +l.getElementsByTagName("body")[0];d&&(a=l.createElement("div"),b=l.createElement("div"),a.style.cssText=j,d.appendChild(a).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%",c.swap(d,null!=d.style.zoom?{zoom:1}:{},function(){e=4===b.offsetWidth}),f=!0,g=!1,h=!0,o.getComputedStyle&&(g="1%"!==(o.getComputedStyle(b,null)||{}).top,f="4px"===(o.getComputedStyle(b, +null)||{width:"4px"}).width),d.removeChild(a),b=d=null)}var b,d,e,f,g,h,i=l.createElement("div"),j="border:0;width:0;height:0;position:absolute;top:0;left:-9999px";i.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";b=i.getElementsByTagName("a")[0];b.style.cssText="float:left;opacity:.5";n.opacity=/^0.5/.test(b.style.opacity);n.cssFloat=!!b.style.cssFloat;i.style.backgroundClip="content-box";i.cloneNode(!0).style.backgroundClip="";n.clearCloneStyle="content-box"===i.style.backgroundClip; +b=i=null;c.extend(n,{reliableHiddenOffsets:function(){if(null!=d)return d;var a,b,c,e=l.createElement("div"),f=l.getElementsByTagName("body")[0];if(f)return e.setAttribute("className","t"),e.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=l.createElement("div"),a.style.cssText=j,f.appendChild(a).appendChild(e),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",b=e.getElementsByTagName("td"),b[0].style.cssText="padding:0;margin:0;border:0;display:none",c=0=== +b[0].offsetHeight,b[0].style.display="",b[1].style.display="none",d=c&&0===b[0].offsetHeight,f.removeChild(a),d},boxSizing:function(){return null==e&&a(),e},boxSizingReliable:function(){return null==f&&a(),f},pixelPosition:function(){return null==g&&a(),g},reliableMarginRight:function(){var a,b,c,d;if(null==h&&o.getComputedStyle){if(a=l.getElementsByTagName("body")[0],!a)return;b=l.createElement("div");c=l.createElement("div");b.style.cssText=j;a.appendChild(b).appendChild(c);d=c.appendChild(l.createElement("div")); +d.style.cssText=c.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";d.style.marginRight=d.style.width="0";c.style.width="1px";h=!parseFloat((o.getComputedStyle(d,null)||{}).marginRight);a.removeChild(b)}return h}})}();c.swap=function(a,b,c,e){var f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];c=c.apply(a,e||[]);for(f in b)a.style[f]=g[f];return c};var Pa=/alpha\([^)]*\)/i,yc=/opacity\s*=\s*([^)]*)/,zc=/^(none|table(?!-c[ea]).+)/, +dc=RegExp("^("+wa+")(.*)$","i"),Ac=RegExp("^([+-])=("+wa+")","i"),Bc={position:"absolute",visibility:"hidden",display:"block"},Nb={letterSpacing:0,fontWeight:400},mb=["Webkit","O","Moz","ms"];c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=O(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":n.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(a&& +3!==a.nodeType&&8!==a.nodeType&&a.style){var f,g,h,i=c.camelCase(b),j=a.style;if(b=c.cssProps[i]||(c.cssProps[i]=lb(j,i)),h=c.cssHooks[b]||c.cssHooks[i],void 0===d)return h&&"get"in h&&void 0!==(f=h.get(a,!1,e))?f:j[b];if(g=typeof d,"string"===g&&(f=Ac.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(c.css(a,b)),g="number"),null!=d&&d===d&&("number"!==g||c.cssNumber[i]||(d+="px"),n.clearCloneStyle||""!==d||0!==b.indexOf("background")||(j[b]="inherit"),!(h&&"set"in h&&void 0===(d=h.set(a,d,e)))))try{j[b]="", +j[b]=d}catch(m){}}},css:function(a,b,d,e){var f,g,h,i=c.camelCase(b);return b=c.cssProps[i]||(c.cssProps[i]=lb(a.style,i)),h=c.cssHooks[b]||c.cssHooks[i],h&&"get"in h&&(g=h.get(a,!0,d)),void 0===g&&(g=O(a,b,e)),"normal"===g&&b in Nb&&(g=Nb[b]),""===d||d?(f=parseFloat(g),!0===d||c.isNumeric(f)?f||0:g):g}});c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(a,e,f){return e?0===a.offsetWidth&&zc.test(c.css(a,"display"))?c.swap(a,Bc,function(){return qb(a,b,f)}):qb(a,b,f):void 0},set:function(a, +e,f){var g=f&&U(a);return ob(a,e,f?pb(a,b,f,n.boxSizing()&&"border-box"===c.css(a,"boxSizing",!1,g),g):0)}}});n.opacity||(c.cssHooks.opacity={get:function(a,b){return yc.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?0.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var d=a.style,e=a.currentStyle,f=c.isNumeric(b)?"alpha(opacity="+100*b+")":"",g=e&&e.filter||d.filter||"";d.zoom=1;(1<=b||""===b)&&""===c.trim(g.replace(Pa,""))&&d.removeAttribute&&(d.removeAttribute("filter"), +""===b||e&&!e.filter)||(d.filter=Pa.test(g)?g.replace(Pa,f):g+" "+f)}});c.cssHooks.marginRight=kb(n.reliableMarginRight,function(a,b){return b?c.swap(a,{display:"inline-block"},O,[a,"marginRight"]):void 0});c.each({margin:"",padding:"",border:"Width"},function(a,b){c.cssHooks[a+b]={expand:function(c){for(var e=0,f={},c="string"==typeof c?c.split(" "):[c];4>e;e++)f[a+T[e]+b]=c[e]||c[e-2]||c[0];return f}};Mb.test(a)||(c.cssHooks[a+b].set=ob)});c.fn.extend({css:function(a,b){return B(this,function(a, +b,f){var g,h={},i=0;if(c.isArray(b)){f=U(a);for(g=b.length;g>i;i++)h[b[i]]=c.css(a,b[i],!1,f);return h}return void 0!==f?c.style(a,b,f):c.css(a,b)},a,b,1<arguments.length)},show:function(){return nb(this,!0)},hide:function(){return nb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){N(this)?c(this).show():c(this).hide()})}});c.Tween=D;D.prototype={constructor:D,init:function(a,b,d,e,f,g){this.elem=a;this.prop=d;this.easing=f||"swing";this.options= +b;this.start=this.now=this.cur();this.end=e;this.unit=g||(c.cssNumber[d]?"":"px")},cur:function(){var a=D.propHooks[this.prop];return a&&a.get?a.get(this):D.propHooks._default.get(this)},run:function(a){var b,d=D.propHooks[this.prop];return this.pos=b=this.options.duration?c.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),d&&d.set?d.set(this):D.propHooks._default.set(this), +this}};D.prototype.init.prototype=D.prototype;D.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=c.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){c.fx.step[a.prop]?c.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[c.cssProps[a.prop]]||c.cssHooks[a.prop])?c.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}};D.propHooks.scrollTop=D.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&& +(a.elem[a.prop]=a.now)}};c.easing={linear:function(a){return a},swing:function(a){return 0.5-Math.cos(a*Math.PI)/2}};c.fx=D.prototype.init;c.fx.step={};var F,xa,Cc=/^(?:toggle|show|hide)$/,Ob=RegExp("^(?:([+-])=|)("+wa+")([a-z%]*)$","i"),Dc=/queueHooks$/,oa=[function(a,b,d){var e,f,g,h,i,j,m,l=this,k={},o=a.style,t=a.nodeType&&N(a),s=c._data(a,"fxshow");d.queue||(h=c._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--; +c.queue(a,"fx").length||h.empty.fire()})}));1===a.nodeType&&("height"in b||"width"in b)&&(d.overflow=[o.overflow,o.overflowX,o.overflowY],j=c.css(a,"display"),m=ib(a.nodeName),"none"===j&&(j=m),"inline"===j&&"none"===c.css(a,"float")&&(n.inlineBlockNeedsLayout&&"inline"!==m?o.zoom=1:o.display="inline-block"));d.overflow&&(o.overflow="hidden",n.shrinkWrapBlocks()||l.always(function(){o.overflow=d.overflow[0];o.overflowX=d.overflow[1];o.overflowY=d.overflow[2]}));for(e in b)if(f=b[e],Cc.exec(f)){if(delete b[e], +g=g||"toggle"===f,f===(t?"hide":"show")){if("show"!==f||!s||void 0===s[e])continue;t=!0}k[e]=s&&s[e]||c.style(a,e)}if(!c.isEmptyObject(k))for(e in s?"hidden"in s&&(t=s.hidden):s=c._data(a,"fxshow",{}),g&&(s.hidden=!t),t?c(a).show():l.done(function(){c(a).hide()}),l.done(function(){var b;c._removeData(a,"fxshow");for(b in k)c.style(a,b,k[b])}),k)b=sb(t?s[e]:0,e,l),e in s||(s[e]=b.start,t&&(b.end=b.start,b.start="width"===e||"height"===e?1:0))}],ga={"*":[function(a,b){var d=this.createTween(a,b),e= +d.cur(),f=Ob.exec(b),g=f&&f[3]||(c.cssNumber[a]?"":"px"),h=(c.cssNumber[a]||"px"!==g&&+e)&&Ob.exec(c.css(d.elem,a)),i=1,j=20;if(h&&h[3]!==g){g=g||h[3];f=f||[];h=+e||1;do i=i||".5",h/=i,c.style(d.elem,a,h+g);while(i!==(i=d.cur()/e)&&1!==i&&--j)}return f&&(h=d.start=+h||+e||0,d.unit=g,d.end=f[1]?h+(f[1]+1)*f[2]:+f[2]),d}]};c.Animation=c.extend(tb,{tweener:function(a,b){c.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var d,e=0,f=a.length;f>e;e++)d=a[e],ga[d]=ga[d]||[],ga[d].unshift(b)},prefilter:function(a, +b){b?oa.unshift(a):oa.push(a)}});c.speed=function(a,b,d){var e=a&&"object"==typeof a?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};return e.duration=c.fx.off?0:"number"==typeof e.duration?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default,(null==e.queue||!0===e.queue)&&(e.queue="fx"),e.old=e.complete,e.complete=function(){c.isFunction(e.old)&&e.old.call(this);e.queue&&c.dequeue(this,e.queue)},e};c.fn.extend({fadeTo:function(a, +b,c,e){return this.filter(N).css("opacity",0).show().end().animate({opacity:b},a,c,e)},animate:function(a,b,d,e){var f=c.isEmptyObject(a),g=c.speed(b,d,e),b=function(){var b=tb(this,c.extend({},a),g);(f||c._data(this,"finish"))&&b.stop(!0)};return b.finish=b,f||!1===g.queue?this.each(b):this.queue(g.queue,b)},stop:function(a,b,d){var e=function(a){var b=a.stop;delete a.stop;b(d)};return"string"!=typeof a&&(d=b,b=a,a=void 0),b&&!1!==a&&this.queue(a||"fx",[]),this.each(function(){var b=!0,g=null!=a&& +a+"queueHooks",h=c.timers,i=c._data(this);if(g)i[g]&&i[g].stop&&e(i[g]);else for(g in i)i[g]&&i[g].stop&&Dc.test(g)&&e(i[g]);for(g=h.length;g--;)h[g].elem!==this||null!=a&&h[g].queue!==a||(h[g].anim.stop(d),b=!1,h.splice(g,1));(b||!d)&&c.dequeue(this,a)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var b,d=c._data(this),e=d[a+"queue"];b=d[a+"queueHooks"];var f=c.timers,g=e?e.length:0;d.finish=!0;c.queue(this,a,[]);b&&b.stop&&b.stop.call(this,!0);for(b=f.length;b--;)f[b].elem=== +this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)e[b]&&e[b].finish&&e[b].finish.call(this);delete d.finish})}});c.each(["toggle","show","hide"],function(a,b){var d=c.fn[b];c.fn[b]=function(a,c,g){return null==a||"boolean"==typeof a?d.apply(this,arguments):this.animate(la(b,!0),a,c,g)}});c.each({slideDown:la("show"),slideUp:la("hide"),slideToggle:la("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(a,c,f){return this.animate(b, +a,c,f)}});c.timers=[];c.fx.tick=function(){var a,b=c.timers,d=0;for(F=c.now();d<b.length;d++)a=b[d],a()||b[d]!==a||b.splice(d--,1);b.length||c.fx.stop();F=void 0};c.fx.timer=function(a){c.timers.push(a);a()?c.fx.start():c.timers.pop()};c.fx.interval=13;c.fx.start=function(){xa||(xa=setInterval(c.fx.tick,c.fx.interval))};c.fx.stop=function(){clearInterval(xa);xa=null};c.fx.speeds={slow:600,fast:200,_default:400};c.fn.delay=function(a,b){return a=c.fx?c.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b, +c){var f=setTimeout(b,a);c.stop=function(){clearTimeout(f)}})};(function(){var a,b,c,e,f=l.createElement("div");f.setAttribute("className","t");f.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";a=f.getElementsByTagName("a")[0];c=l.createElement("select");e=c.appendChild(l.createElement("option"));b=f.getElementsByTagName("input")[0];a.style.cssText="top:1px";n.getSetAttribute="t"!==f.className;n.style=/top/.test(a.getAttribute("style"));n.hrefNormalized="/a"===a.getAttribute("href"); +n.checkOn=!!b.value;n.optSelected=e.selected;n.enctype=!!l.createElement("form").enctype;c.disabled=!0;n.optDisabled=!e.disabled;b=l.createElement("input");b.setAttribute("value","");n.input=""===b.getAttribute("value");b.value="t";b.setAttribute("type","radio");n.radioValue="t"===b.value})();var Ec=/\r/g;c.fn.extend({val:function(a){var b,d,e,f=this[0];if(arguments.length)return e=c.isFunction(a),this.each(function(d){var f;1===this.nodeType&&(f=e?a.call(this,d,c(this).val()):a,null==f?f="":"number"== +typeof f?f+="":c.isArray(f)&&(f=c.map(f,function(a){return null==a?"":a+""})),b=c.valHooks[this.type]||c.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,f,"value")||(this.value=f))});if(f)return b=c.valHooks[f.type]||c.valHooks[f.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(d=b.get(f,"value"))?d:(d=f.value,"string"==typeof d?d.replace(Ec,""):null==d?"":d)}});c.extend({valHooks:{option:{get:function(a){var b=c.find.attr(a,"value");return null!=b?b:c.text(a)}},select:{get:function(a){for(var b, +d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(b=d[i],!(!b.selected&&i!==e||(n.optDisabled?b.disabled:null!==b.getAttribute("disabled"))||b.parentNode.disabled&&c.nodeName(b.parentNode,"optgroup"))){if(a=c(b).val(),f)return a;g.push(a)}return g},set:function(a,b){for(var d,e,f=a.options,g=c.makeArray(b),h=f.length;h--;)if(e=f[h],0<=c.inArray(c.valHooks.option.get(e),g))try{e.selected=d=!0}catch(i){e.scrollHeight}else e.selected=!1; +return d||(a.selectedIndex=-1),f}}}});c.each(["radio","checkbox"],function(){c.valHooks[this]={set:function(a,b){return c.isArray(b)?a.checked=0<=c.inArray(c(a).val(),b):void 0}};n.checkOn||(c.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var da,Pb,Q=c.expr.attrHandle,Qa=/^(?:checked|selected)$/i,R=n.getSetAttribute,ya=n.input;c.fn.extend({attr:function(a,b){return B(this,c.attr,a,b,1<arguments.length)},removeAttr:function(a){return this.each(function(){c.removeAttr(this, +a)})}});c.extend({attr:function(a,b,d){var e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return typeof a.getAttribute===z?c.prop(a,b,d):(1===g&&c.isXMLDoc(a)||(b=b.toLowerCase(),e=c.attrHooks[b]||(c.expr.match.bool.test(b)?Pb:da)),void 0===d?e&&"get"in e&&null!==(f=e.get(a,b))?f:(f=c.find.attr(a,b),null==f?void 0:f):null!==d?e&&"set"in e&&void 0!==(f=e.set(a,d,b))?f:(a.setAttribute(b,d+""),d):void c.removeAttr(a,b))},removeAttr:function(a,b){var d,e,f=0,g=b&&b.match(H);if(g&&1===a.nodeType)for(;d=g[f++];)e= +c.propFix[d]||d,c.expr.match.bool.test(d)?ya&&R||!Qa.test(d)?a[e]=!1:a[c.camelCase("default-"+d)]=a[e]=!1:c.attr(a,d,""),a.removeAttribute(R?d:e)},attrHooks:{type:{set:function(a,b){if(!n.radioValue&&"radio"===b&&c.nodeName(a,"input")){var d=a.value;return a.setAttribute("type",b),d&&(a.value=d),b}}}}});Pb={set:function(a,b,d){return!1===b?c.removeAttr(a,d):ya&&R||!Qa.test(d)?a.setAttribute(!R&&c.propFix[d]||d,d):a[c.camelCase("default-"+d)]=a[d]=!0,d}};c.each(c.expr.match.bool.source.match(/\w+/g), +function(a,b){var d=Q[b]||c.find.attr;Q[b]=ya&&R||!Qa.test(b)?function(a,b,c){var h,i;return c||(i=Q[b],Q[b]=h,h=null!=d(a,b,c)?b.toLowerCase():null,Q[b]=i),h}:function(a,b,d){return d?void 0:a[c.camelCase("default-"+b)]?b.toLowerCase():null}});ya&&R||(c.attrHooks.value={set:function(a,b,d){return c.nodeName(a,"input")?void(a.defaultValue=b):da&&da.set(a,b,d)}});R||(da={set:function(a,b,c){var e=a.getAttributeNode(c);return e||a.setAttributeNode(e=a.ownerDocument.createAttribute(c)),e.value=b+="", +"value"===c||b===a.getAttribute(c)?b:void 0}},Q.id=Q.name=Q.coords=function(a,b,c){var e;return c?void 0:(e=a.getAttributeNode(b))&&""!==e.value?e.value:null},c.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:da.set},c.attrHooks.contenteditable={set:function(a,b,c){da.set(a,""===b?!1:b,c)}},c.each(["width","height"],function(a,b){c.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}}));n.style||(c.attrHooks.style= +{get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var Fc=/^(?:input|select|textarea|button|object)$/i,Gc=/^(?:a|area)$/i;c.fn.extend({prop:function(a,b){return B(this,c.prop,a,b,1<arguments.length)},removeProp:function(a){return a=c.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}});c.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,d){var e,f,g,h=a.nodeType;if(a&&3!==h&&8!==h&&2!==h)return g= +1!==h||!c.isXMLDoc(a),g&&(b=c.propFix[b]||b,f=c.propHooks[b]),void 0!==d?f&&"set"in f&&void 0!==(e=f.set(a,d,b))?e:a[b]=d:f&&"get"in f&&null!==(e=f.get(a,b))?e:a[b]},propHooks:{tabIndex:{get:function(a){var b=c.find.attr(a,"tabindex");return b?parseInt(b,10):Fc.test(a.nodeName)||Gc.test(a.nodeName)&&a.href?0:-1}}}});n.hrefNormalized||c.each(["href","src"],function(a,b){c.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}});n.optSelected||(c.propHooks.selected={get:function(a){a=a.parentNode; +return a&&(a.selectedIndex,a.parentNode&&a.parentNode.selectedIndex),null}});c.each("tabIndex readOnly maxLength cellSpacing cellPadding rowSpan colSpan useMap frameBorder contentEditable".split(" "),function(){c.propFix[this.toLowerCase()]=this});n.enctype||(c.propFix.enctype="encoding");var Ra=/[\t\r\n\f]/g;c.fn.extend({addClass:function(a){var b,d,e,f,g,h=0,i=this.length;b="string"==typeof a&&a;if(c.isFunction(a))return this.each(function(b){c(this).addClass(a.call(this,b,this.className))});if(b)for(b= +(a||"").match(H)||[];i>h;h++)if(d=this[h],e=1===d.nodeType&&(d.className?(" "+d.className+" ").replace(Ra," "):" ")){for(g=0;f=b[g++];)0>e.indexOf(" "+f+" ")&&(e+=f+" ");e=c.trim(e);d.className!==e&&(d.className=e)}return this},removeClass:function(a){var b,d,e,f,g,h=0,i=this.length;b=0===arguments.length||"string"==typeof a&&a;if(c.isFunction(a))return this.each(function(b){c(this).removeClass(a.call(this,b,this.className))});if(b)for(b=(a||"").match(H)||[];i>h;h++)if(d=this[h],e=1===d.nodeType&& +(d.className?(" "+d.className+" ").replace(Ra," "):"")){for(g=0;f=b[g++];)for(;0<=e.indexOf(" "+f+" ");)e=e.replace(" "+f+" "," ");e=a?c.trim(e):"";d.className!==e&&(d.className=e)}return this},toggleClass:function(a,b){var d=typeof a;return"boolean"==typeof b&&"string"===d?b?this.addClass(a):this.removeClass(a):this.each(c.isFunction(a)?function(d){c(this).toggleClass(a.call(this,d,this.className,b),b)}:function(){if("string"===d)for(var b,f=0,g=c(this),h=a.match(H)||[];b=h[f++];)g.hasClass(b)?g.removeClass(b): +g.addClass(b);else(d===z||"boolean"===d)&&(this.className&&c._data(this,"__className__",this.className),this.className=this.className||!1===a?"":c._data(this,"__className__")||"")})},hasClass:function(a){for(var a=" "+a+" ",b=0,c=this.length;c>b;b++)if(1===this[b].nodeType&&0<=(" "+this[b].className+" ").replace(Ra," ").indexOf(a))return!0;return!1}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), +function(a,b){c.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}});c.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,e){return this.on(b,a,c,e)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var Sa=c.now(),Ta=/\?/,Hc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g; +c.parseJSON=function(a){if(o.JSON&&o.JSON.parse)return o.JSON.parse(a+"");var b,d=null,e=c.trim(a+"");return e&&!c.trim(e.replace(Hc,function(a,c,e,i){return b&&c&&(d=0),0===d?a:(b=e||c,d+=!i-!e,"")}))?Function("return "+e)():c.error("Invalid JSON: "+a)};c.parseXML=function(a){var b,d;if(!a||"string"!=typeof a)return null;try{o.DOMParser?(d=new DOMParser,b=d.parseFromString(a,"text/xml")):(b=new ActiveXObject("Microsoft.XMLDOM"),b.async="false",b.loadXML(a))}catch(e){b=void 0}return b&&b.documentElement&& +!b.getElementsByTagName("parsererror").length||c.error("Invalid XML: "+a),b};var S,x,Ic=/#.*$/,Qb=/([?&])_=[^&]*/,Jc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kc=/^(?:GET|HEAD)$/,Lc=/^\/\//,Rb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Sb={},Ga={},Tb="*/".concat("*");try{x=location.href}catch(Sc){x=l.createElement("a"),x.href="",x=x.href}S=Rb.exec(x.toLowerCase())||[];c.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:x,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(S[1]), +global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Tb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":c.parseJSON,"text xml":c.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ha(Ha(a, +c.ajaxSettings),b):Ha(c.ajaxSettings,a)},ajaxPrefilter:ub(Sb),ajaxTransport:ub(Ga),ajax:function(a,b){function d(a,b,d,e){var f,l,q,r,G=b;if(2!==z){z=2;i&&clearTimeout(i);m=void 0;h=e||"";p.readyState=0<a?4:0;e=200<=a&&300>a||304===a;if(d){q=k;for(var A=p,y,B,x,w,C=q.contents,E=q.dataTypes;"*"===E[0];)E.shift(),void 0===B&&(B=q.mimeType||A.getResponseHeader("Content-Type"));if(B)for(w in C)if(C[w]&&C[w].test(B)){E.unshift(w);break}if(E[0]in d)x=E[0];else{for(w in d){if(!E[0]||q.converters[w+" "+E[0]]){x= +w;break}y||(y=w)}x=x||y}q=x?(x!==E[0]&&E.unshift(x),d[x]):void 0}var I;a:{d=k;y=q;B=p;x=e;var v,H,F;q={};A=d.dataTypes.slice();if(A[1])for(v in d.converters)q[v.toLowerCase()]=d.converters[v];for(w=A.shift();w;)if(d.responseFields[w]&&(B[d.responseFields[w]]=y),!F&&x&&d.dataFilter&&(y=d.dataFilter(y,d.dataType)),F=w,w=A.shift())if("*"===w)w=F;else if("*"!==F&&F!==w){if(v=q[F+" "+w]||q["* "+w],!v)for(I in q)if(H=I.split(" "),H[1]===w&&(v=q[F+" "+H[0]]||q["* "+H[0]])){!0===v?v=q[I]:!0!==q[I]&&(w=H[0], +A.unshift(H[1]));break}if(!0!==v)if(v&&d["throws"])y=v(y);else try{y=v(y)}catch(L){I={state:"parsererror",error:v?L:"No conversion from "+F+" to "+w};break a}}I={state:"success",data:y}}q=I;e?(k.ifModified&&(r=p.getResponseHeader("Last-Modified"),r&&(c.lastModified[g]=r),r=p.getResponseHeader("etag"),r&&(c.etag[g]=r)),204===a||"HEAD"===k.type?G="nocontent":304===a?G="notmodified":(G=q.state,f=q.data,l=q.error,e=!l)):(l=G,(a||!G)&&(G="error",0>a&&(a=0)));p.status=a;p.statusText=(b||G)+"";e?s.resolveWith(n, +[f,G,p]):s.rejectWith(n,[p,G,l]);p.statusCode(D);D=void 0;j&&o.trigger(e?"ajaxSuccess":"ajaxError",[p,k,e?f:l]);t.fireWith(n,[p,G]);j&&(o.trigger("ajaxComplete",[p,k]),--c.active||c.event.trigger("ajaxStop"))}}"object"==typeof a&&(b=a,a=void 0);var b=b||{},e,f,g,h,i,j,m,l,k=c.ajaxSetup({},b),n=k.context||k,o=k.context&&(n.nodeType||n.jquery)?c(n):c.event,s=c.Deferred(),t=c.Callbacks("once memory"),D=k.statusCode||{},A={},B={},z=0,v="canceled",p={readyState:0,getResponseHeader:function(a){var b;if(2=== +z){if(!l)for(l={};b=Jc.exec(h);)l[b[1].toLowerCase()]=b[2];b=l[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===z?h:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return z||(a=B[c]=B[c]||a,A[a]=b),this},overrideMimeType:function(a){return z||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>z)for(b in a)D[b]=[D[b],a[b]];else p.always(a[p.status]);return this},abort:function(a){a=a||v;return m&&m.abort(a),d(0,a),this}};if(s.promise(p).complete= +t.add,p.success=p.done,p.error=p.fail,k.url=((a||k.url||x)+"").replace(Ic,"").replace(Lc,S[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=c.trim(k.dataType||"*").toLowerCase().match(H)||[""],null==k.crossDomain&&(e=Rb.exec(k.url.toLowerCase()),k.crossDomain=!(!e||e[1]===S[1]&&e[2]===S[2]&&(e[3]||("http:"===e[1]?"80":"443"))===(S[3]||("http:"===S[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=c.param(k.data,k.traditional)),vb(Sb,k,b,p),2===z)return p;(j=k.global)&& +0===c.active++&&c.event.trigger("ajaxStart");k.type=k.type.toUpperCase();k.hasContent=!Kc.test(k.type);g=k.url;k.hasContent||(k.data&&(g=k.url+=(Ta.test(g)?"&":"?")+k.data,delete k.data),!1===k.cache&&(k.url=Qb.test(g)?g.replace(Qb,"$1_="+Sa++):g+(Ta.test(g)?"&":"?")+"_="+Sa++));k.ifModified&&(c.lastModified[g]&&p.setRequestHeader("If-Modified-Since",c.lastModified[g]),c.etag[g]&&p.setRequestHeader("If-None-Match",c.etag[g]));(k.data&&k.hasContent&&!1!==k.contentType||b.contentType)&&p.setRequestHeader("Content-Type", +k.contentType);p.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Tb+"; q=0.01":""):k.accepts["*"]);for(f in k.headers)p.setRequestHeader(f,k.headers[f]);if(k.beforeSend&&(!1===k.beforeSend.call(n,p,k)||2===z))return p.abort();v="abort";for(f in{success:1,error:1,complete:1})p[f](k[f]);if(m=vb(Ga,k,b,p)){p.readyState=1;j&&o.trigger("ajaxSend",[p,k]);k.async&&0<k.timeout&&(i=setTimeout(function(){p.abort("timeout")},k.timeout)); +try{z=1,m.send(A,d)}catch(r){if(!(2>z))throw r;d(-1,r)}}else d(-1,"No Transport");return p},getJSON:function(a,b,d){return c.get(a,b,d,"json")},getScript:function(a,b){return c.get(a,void 0,b,"script")}});c.each(["get","post"],function(a,b){c[b]=function(a,e,f,g){return c.isFunction(e)&&(g=g||f,f=e,e=void 0),c.ajax({url:a,type:b,dataType:g,data:e,success:f})}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(a){return this.on(b,a)}}); +c._evalUrl=function(a){return c.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})};c.fn.extend({wrapAll:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapAll(a.call(this,b))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var a=this;a.firstChild&&1===a.firstChild.nodeType;)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(c.isFunction(a)? +function(b){c(this).wrapInner(a.call(this,b))}:function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){var b=c.isFunction(a);return this.each(function(d){c(this).wrapAll(b?a.call(this,d):a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()}});c.expr.filters.hidden=function(a){return 0>=a.offsetWidth&&0>=a.offsetHeight||!n.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display|| +c.css(a,"display"))};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)};var Mc=/%20/g,fc=/\[\]$/,Ub=/\r?\n/g,Nc=/^(?:submit|button|image|reset|file)$/i,Oc=/^(?:input|select|textarea|keygen)/i;c.param=function(a,b){var d,e=[],f=function(a,b){b=c.isFunction(b)?b():null==b?"":b;e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=c.ajaxSettings&&c.ajaxSettings.traditional),c.isArray(a)||a.jquery&&!c.isPlainObject(a))c.each(a,function(){f(this.name,this.value)}); +else for(d in a)Ia(d,a[d],b,f);return e.join("&").replace(Mc,"+")};c.fn.extend({serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=c.prop(this,"elements");return a?c.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!c(this).is(":disabled")&&Oc.test(this.nodeName)&&!Nc.test(a)&&(this.checked||!Ea.test(a))}).map(function(a,b){var d=c(this).val();return null==d?null:c.isArray(d)?c.map(d,function(a){return{name:b.name, +value:a.replace(Ub,"\r\n")}}):{name:b.name,value:d.replace(Ub,"\r\n")}}).get()}});c.ajaxSettings.xhr=void 0!==o.ActiveXObject?function(){var a;if(!(a=!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&wb()))a:{try{a=new o.ActiveXObject("Microsoft.XMLHTTP");break a}catch(b){}a=void 0}return a}:wb;var Pc=0,za={},Aa=c.ajaxSettings.xhr();o.ActiveXObject&&c(o).on("unload",function(){for(var a in za)za[a](void 0,!0)});n.cors=!!Aa&&"withCredentials"in Aa;(Aa=n.ajax=!!Aa)&&c.ajaxTransport(function(a){if(!a.crossDomain|| +n.cors){var b;return{send:function(d,e){var f,g=a.xhr(),h=++Pc;if(g.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(f in a.xhrFields)g[f]=a.xhrFields[f];a.mimeType&&g.overrideMimeType&&g.overrideMimeType(a.mimeType);a.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(a.hasContent&&a.data||null);b=function(d,f){var m,l,k;if(b&&(f||4===g.readyState))if(delete za[h],b=void 0,g.onreadystatechange= +c.noop,f)4!==g.readyState&&g.abort();else{k={};m=g.status;"string"==typeof g.responseText&&(k.text=g.responseText);try{l=g.statusText}catch(n){l=""}m||!a.isLocal||a.crossDomain?1223===m&&(m=204):m=k.text?200:404}k&&e(m,l,k,g.getAllResponseHeaders())};a.async?4===g.readyState?setTimeout(b):g.onreadystatechange=za[h]=b:b()},abort:function(){b&&b(void 0,!0)}}}});c.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/}, +converters:{"text script":function(a){return c.globalEval(a),a}}});c.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1);a.crossDomain&&(a.type="GET",a.global=!1)});c.ajaxTransport("script",function(a){if(a.crossDomain){var b,d=l.head||c("head")[0]||l.documentElement;return{send:function(c,f){b=l.createElement("script");b.async=!0;a.scriptCharset&&(b.charset=a.scriptCharset);b.src=a.url;b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&& +(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))};d.insertBefore(b,d.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var Vb=[],Ua=/(=)\?(?=&|$)|\?\?/;c.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Vb.pop()||c.expando+"_"+Sa++;return this[a]=!0,a}});c.ajaxPrefilter("json jsonp",function(a,b,d){var e,f,g,h=!1!==a.jsonp&&(Ua.test(a.url)?"url":"string"==typeof a.data&&!(a.contentType||"").indexOf("application/x-www-form-urlencoded")&& +Ua.test(a.data)&&"data");return h||"jsonp"===a.dataTypes[0]?(e=a.jsonpCallback=c.isFunction(a.jsonpCallback)?a.jsonpCallback():a.jsonpCallback,h?a[h]=a[h].replace(Ua,"$1"+e):!1!==a.jsonp&&(a.url+=(Ta.test(a.url)?"&":"?")+a.jsonp+"="+e),a.converters["script json"]=function(){return g||c.error(e+" was not called"),g[0]},a.dataTypes[0]="json",f=o[e],o[e]=function(){g=arguments},d.always(function(){o[e]=f;a[e]&&(a.jsonpCallback=b.jsonpCallback,Vb.push(e));g&&c.isFunction(f)&&f(g[0]);g=f=void 0}),"script"): +void 0});c.parseHTML=function(a,b,d){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(d=b,b=!1);var b=b||l,e=Db.exec(a),d=!d&&[];return e?[b.createElement(e[1])]:(e=c.buildFragment([a],b,d),d&&d.length&&c(d).remove(),c.merge([],e.childNodes))};var Wb=c.fn.load;c.fn.load=function(a,b,d){if("string"!=typeof a&&Wb)return Wb.apply(this,arguments);var e,f,g,h=this,i=a.indexOf(" ");return 0<=i&&(e=a.slice(i,a.length),a=a.slice(0,i)),c.isFunction(b)?(d=b,b=void 0):b&&"object"==typeof b&&(g="POST"), +0<h.length&&c.ajax({url:a,type:g,dataType:"html",data:b}).done(function(a){f=arguments;h.html(e?c("<div>").append(c.parseHTML(a)).find(e):a)}).complete(d&&function(a,b){h.each(d,f||[a.responseText,b,a])}),this};c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};var Xb=o.document.documentElement;c.offset={setOffset:function(a,b,d){var e,f,g,h,i,j,l=c.css(a,"position"),n=c(a),k={};"static"===l&&(a.style.position="relative");i=n.offset();g=c.css(a,"top"); +j=c.css(a,"left");("absolute"===l||"fixed"===l)&&-1<c.inArray("auto",[g,j])?(e=n.position(),h=e.top,f=e.left):(h=parseFloat(g)||0,f=parseFloat(j)||0);c.isFunction(b)&&(b=b.call(a,d,i));null!=b.top&&(k.top=b.top-i.top+h);null!=b.left&&(k.left=b.left-i.left+f);"using"in b?b.using.call(a,k):n.css(k)}};c.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){c.offset.setOffset(this,a,b)});var b,d,e={top:0,left:0},f=this[0],g=f&&f.ownerDocument;if(g)return b=g.documentElement, +c.contains(b,f)?(typeof f.getBoundingClientRect!==z&&(e=f.getBoundingClientRect()),d=xb(g),{top:e.top+(d.pageYOffset||b.scrollTop)-(b.clientTop||0),left:e.left+(d.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):e},position:function(){if(this[0]){var a,b,d={top:0,left:0},e=this[0];return"fixed"===c.css(e,"position")?b=e.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),c.nodeName(a[0],"html")||(d=a.offset()),d.top+=c.css(a[0],"borderTopWidth",!0),d.left+=c.css(a[0],"borderLeftWidth",!0)), +{top:b.top-d.top-c.css(e,"marginTop",!0),left:b.left-d.left-c.css(e,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||Xb;a&&!c.nodeName(a,"html")&&"static"===c.css(a,"position");)a=a.offsetParent;return a||Xb})}});c.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var d=/Y/.test(b);c.fn[a]=function(e){return B(this,function(a,e,h){var i=xb(a);return void 0===h?i?b in i?i[b]:i.document.documentElement[e]:a[e]:void(i?i.scrollTo(d? +c(i).scrollLeft():h,d?h:c(i).scrollTop()):a[e]=h)},a,e,arguments.length,null)}});c.each(["top","left"],function(a,b){c.cssHooks[b]=kb(n.pixelPosition,function(a,e){return e?(e=O(a,b),V.test(e)?c(a).position()[b]+"px":e):void 0})});c.each({Height:"height",Width:"width"},function(a,b){c.each({padding:"inner"+a,content:b,"":"outer"+a},function(d,e){c.fn[e]=function(e,g){var h=arguments.length&&(d||"boolean"!=typeof e),i=d||(!0===e||!0===g?"margin":"border");return B(this,function(b,d,e){var f;return c.isWindow(b)? +b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?c.css(b,d,i):c.style(b,d,e,i)},b,h?e:void 0,h,null)}})});c.fn.size=function(){return this.length};c.fn.andSelf=c.fn.addBack;"function"==typeof define&&define.amd&&define("jquery",[],function(){return c});var Qc=o.jQuery,Rc=o.$;return c.noConflict=function(a){return o.$===c&&(o.$=Rc),a&&o.jQuery===c&&(o.jQuery=Qc),c},typeof ea=== +z&&(o.jQuery=o.$=c),c}); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/gecko/editor_gecko.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/gecko/editor_gecko.scss new file mode 100755 index 0000000000..434adb6be0 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/gecko/editor_gecko.scss @@ -0,0 +1,25 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +editor_gecko.css +================== + +This file contains styles to used by all Gecko based browsers (Firefox) only. +*/ + +/* Base it on editor.css, overriding it with styles defined in this file. */ +@import "../../components/editor"; + +.cke_bottom +{ + padding-bottom: 3px; +} + +.cke_combo_text +{ + margin-bottom: -1px; + margin-top: 1px; +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie/dialog_ie.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie/dialog_ie.scss new file mode 100755 index 0000000000..8504feeb76 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie/dialog_ie.scss @@ -0,0 +1,62 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +dialog_ie.css +=============== + +This file contains styles to used by all versions of Internet Explorer only. +*/ + +/* Base it on dialog.css, overriding it with styles defined in this file. */ +@import "../../dialog/dialog"; + +/* IE doesn't leave enough padding in text input for cursor to blink in RTL. (#6087) */ +.cke_rtl input.cke_dialog_ui_input_text, +.cke_rtl input.cke_dialog_ui_input_password +{ + padding-right: 2px; +} +/* Compensate the padding added above on container. */ +.cke_rtl div.cke_dialog_ui_input_text, +.cke_rtl div.cke_dialog_ui_input_password +{ + padding-left: 2px; +} +.cke_rtl div.cke_dialog_ui_input_text { + padding-right: 1px; +} + +.cke_rtl .cke_dialog_ui_vbox_child, +.cke_rtl .cke_dialog_ui_hbox_child, +.cke_rtl .cke_dialog_ui_hbox_first, +.cke_rtl .cke_dialog_ui_hbox_last +{ + padding-right: 2px !important; +} + + +/* Disable filters for HC mode. */ +.cke_hc .cke_dialog_title, +.cke_hc .cke_dialog_footer, +.cke_hc a.cke_dialog_tab, +.cke_hc a.cke_dialog_ui_button, +.cke_hc a.cke_dialog_ui_button:hover, +.cke_hc a.cke_dialog_ui_button_ok, +.cke_hc a.cke_dialog_ui_button_ok:hover +{ + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +/* Remove border from dialog field wrappers in HC + to avoid double borders. */ +.cke_hc div.cke_dialog_ui_input_text, +.cke_hc div.cke_dialog_ui_input_password, +.cke_hc div.cke_dialog_ui_input_textarea, +.cke_hc div.cke_dialog_ui_input_select, +.cke_hc div.cke_dialog_ui_input_file +{ + border: 0; +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie/editor_ie.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie/editor_ie.scss new file mode 100755 index 0000000000..281cad6ad8 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie/editor_ie.scss @@ -0,0 +1,71 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +editor_ie.css +=============== + +This file contains styles to used by all versions of Internet Explorer only. +*/ + +/* Base it on editor.css, overriding it with styles defined in this file. */ +@import "../../components/editor"; + +a.cke_button_disabled, + +/* Those two are to overwrite the gradient filter since we cannot have both of them. */ +a.cke_button_disabled:hover, +a.cke_button_disabled:focus, +a.cke_button_disabled:active +{ + filter: alpha(opacity = 30); +} + +/* PNG Alpha Transparency Fix For IE<9 */ +.cke_button_disabled .cke_button_icon +{ + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff, endColorstr=#00ffffff); +} + +.cke_button_off:hover, +.cke_button_off:focus, +.cke_button_off:active +{ + filter: alpha(opacity = 100); +} + +.cke_combo_disabled .cke_combo_inlinelabel, +.cke_combo_disabled .cke_combo_open +{ + filter: alpha(opacity = 30); +} + +.cke_toolbox_collapser +{ + border: 1px solid #a6a6a6; +} + +.cke_toolbox_collapser .cke_arrow +{ + margin-top: 1px; +} + +/* Gradient filters must be removed for HC mode to reveal the background. */ +.cke_hc .cke_top, +.cke_hc .cke_bottom, +.cke_hc .cke_combo_button, +.cke_hc a.cke_combo_button:hover, +.cke_hc a.cke_combo_button:focus, +.cke_hc .cke_toolgroup, +.cke_hc .cke_button_on, +.cke_hc a.cke_button_off:hover, +.cke_hc a.cke_button_off:focus, +.cke_hc a.cke_button_off:active, +.cke_hc .cke_toolbox_collapser, +.cke_hc .cke_toolbox_collapser:hover, +.cke_hc .cke_panel_grouptitle +{ + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie7/dialog_ie7.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie7/dialog_ie7.scss new file mode 100755 index 0000000000..34a3e3a017 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie7/dialog_ie7.scss @@ -0,0 +1,68 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +dialog_ie7.css +=============== + +This file contains styles to used by Internet Explorer 7 only. +*/ + +/* Base it on dialog_ie.css, overriding it with styles defined in this file. */ +@import "../../dialog/dialog"; + +.cke_dialog_title +{ + /* gradient fix */ + zoom: 1; +} + +.cke_dialog_footer +{ + /* IE7 ignores footer's outline. Use border instead. */ + border-top: 1px solid #bfbfbf; +} + +/* IE7 needs position static #6806 */ +.cke_dialog_footer_buttons +{ + position: static; +} + +/* IE7 crops the bottom pixels of footer buttons (#9491) */ +.cke_dialog_footer_buttons a.cke_dialog_ui_button +{ + vertical-align: top; +} + +/* IE7 margin loose on float. */ +.cke_dialog .cke_resizer_ltr +{ + padding-left: 4px; +} +.cke_dialog .cke_resizer_rtl +{ + padding-right: 4px; +} + +/* IE7 doesn't support box-sizing and therefore we cannot + have sexy inputs which go well with the layout. */ +.cke_dialog_ui_input_text, +.cke_dialog_ui_input_password, +.cke_dialog_ui_input_textarea, +.cke_dialog_ui_input_select +{ + padding: 0 !important; +} + +/* Predefined border to avoid visual size change impact. */ +.cke_dialog_ui_checkbox_input, +.cke_dialog_ui_ratio_input, +.cke_btn_reset, +.cke_btn_locked, +.cke_btn_unlocked +{ + border: 1px solid transparent !important; +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie7/editor_ie7.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie7/editor_ie7.scss new file mode 100755 index 0000000000..536b535164 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie7/editor_ie7.scss @@ -0,0 +1,213 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +editor_ie7.css +=============== + +This file contains styles to used by Internet Explorer 7 only. +*/ + +/* Base it on editor_ie.css, overriding it with styles defined in this file. */ +@import "../../components/editor"; + +.cke_rtl .cke_toolgroup, +.cke_rtl .cke_toolbar_separator, +.cke_rtl .cke_button, +.cke_rtl .cke_button *, +.cke_rtl .cke_combo, +.cke_rtl .cke_combo *, +.cke_rtl .cke_path_item, +.cke_rtl .cke_path_item *, +.cke_rtl .cke_path_empty +{ + float: none; +} + +.cke_rtl .cke_toolgroup, +.cke_rtl .cke_toolbar_separator, +.cke_rtl .cke_combo_button, +.cke_rtl .cke_combo_button *, +.cke_rtl .cke_button, +.cke_rtl .cke_button_icon, +{ + display: inline-block; + vertical-align: top; +} + +.cke_toolbox +{ + display:inline-block; + padding-bottom: 5px; + height: 100%; +} +.cke_rtl .cke_toolbox +{ + padding-bottom: 0; +} + +.cke_toolbar +{ + margin-bottom: 5px; +} +.cke_rtl .cke_toolbar +{ + margin-bottom: 0; +} + +/* IE7: toolgroup must be adapted to toolbar items height. */ +.cke_toolgroup +{ + height: 26px; +} + +/* Avoid breaking elements that use background gradient when page zoom > 1 (#9548) */ +.cke_toolgroup, +.cke_combo +{ + position: relative; +} + +a.cke_button +{ + /* IE7: buttons must not float to wrap the toolbar in a whole. */ + float:none; + + /* IE7: buttons have to be aligned to top. Otherwise, some buttons like + * source and scayt are displayed a few pixels below the base line. + */ + vertical-align:top; +} + +.cke_toolbar_separator +{ + display: inline-block; + float: none; + vertical-align: top; + background-color: #c0c0c0; +} + +.cke_toolbox_collapser .cke_arrow +{ + margin-top: 0; +} +.cke_toolbox_collapser .cke_arrow +{ + border-width:4px; +} +.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow +{ + border-width:3px; +} + +.cke_rtl .cke_button_arrow +{ + padding-top: 8px; + margin-right: 2px; +} + +.cke_rtl .cke_combo_inlinelabel +{ + display: table-cell; + vertical-align: middle; +} + +/* + * Editor menus are display:table-driven. IE7 doesn't support this approach, + * hence this position&float hybrid fall-back. + */ +.cke_menubutton +{ + display: block; + height: 24px; +} + +.cke_menubutton_inner +{ + display: block; + position: relative; +} + +.cke_menubutton_icon +{ + height: 16px; + width: 16px; +} + +.cke_menubutton_icon, +.cke_menubutton_label, +.cke_menuarrow +{ + display: inline-block; +} + +.cke_menubutton_label +{ + width: auto; + vertical-align: top; + line-height: 24px; + height: 24px; + margin: 0 10px 0 0; +} + +.cke_menuarrow +{ + width: 5px; + height: 6px; + padding: 0; + position: absolute; + right: 8px; + top: 10px; + + background-position: 0 0; +} + +/* Menus in RTL mode. */ +.cke_rtl .cke_menubutton_icon +{ + position: absolute; + right: 0px; + top: 0px; +} + +.cke_rtl .cke_menubutton_label +{ + float: right; + clear: both; + margin: 0 24px 0 10px; +} + +.cke_hc .cke_rtl .cke_menubutton_label +{ + margin-right: 0; +} + + +.cke_rtl .cke_menuarrow +{ + left: 8px; + right: auto; + background-position: 0 -24px; +} + +.cke_hc .cke_menuarrow +{ + top: 5px; + padding: 0 5px; +} + +.cke_rtl input.cke_dialog_ui_input_text, +.cke_rtl input.cke_dialog_ui_input_password +{ + /* Positioning is required for IE7 on text inputs not to stretch dialog horizontally. (#8971)*/ + position: relative; +} + +/* Reset vertical paddings which put editing area under bottom UI space. (#9721) */ +.cke_wysiwyg_div +{ + padding-top: 0 !important; + padding-bottom: 0 !important; +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie8/dialog_ie8.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie8/dialog_ie8.scss new file mode 100755 index 0000000000..844a8aca2e --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie8/dialog_ie8.scss @@ -0,0 +1,24 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +dialog_ie8.css +=============== + +This file contains styles to used by Internet Explorer 8 only. +*/ + +/* Base it on dialog_ie.css, overriding it with styles defined in this file. */ +@import "../../dialog/dialog"; + +/* Without the following, IE8 cannot compensate footer button thick borders + on :focus/:active. */ +a.cke_dialog_ui_button_ok:focus span, +a.cke_dialog_ui_button_ok:active span, +a.cke_dialog_ui_button_cancel:focus span, +a.cke_dialog_ui_button_cancel:active span +{ + display: block; +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie8/editor_ie8.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie8/editor_ie8.scss new file mode 100755 index 0000000000..f323fcb115 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/ie8/editor_ie8.scss @@ -0,0 +1,27 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +editor_ie8.css +=============== + +This file contains styles to used by Internet Explorer 8 only. +*/ + +/* Base it on editor_ie.css, overriding it with styles defined in this file. */ +@import "../../components/editor"; + +.cke_toolbox_collapser .cke_arrow +{ + border-width:4px; +} +.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow +{ + border-width:3px; +} +.cke_toolbox_collapser .cke_arrow +{ + margin-top: 0; +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/iequirks/dialog_iequirks.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/iequirks/dialog_iequirks.scss new file mode 100755 index 0000000000..02bf7eb6fb --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/iequirks/dialog_iequirks.scss @@ -0,0 +1,21 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +dialog_ie7.css +=============== + +This file contains styles to used by Internet Explorer in +Quirks mode only. +*/ + +/* Base it on dialog_ie.css, overriding it with styles defined in this file. */ +@import "../../dialog/dialog"; + +/* [IE7-8] Filter on footer causes background artifacts when opening dialog. */ +.cke_dialog_footer +{ + filter: ""; +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/iequirks/editor_iequirks.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/iequirks/editor_iequirks.scss new file mode 100755 index 0000000000..6c12714f9d --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/iequirks/editor_iequirks.scss @@ -0,0 +1,79 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +editor_iequirks.css +=============== + +This file contains styles to used by all versions of Internet Explorer +in Quirks mode only. +*/ + +/* Base it on editor_ie.css, overriding it with styles defined in this file. */ +@import "../../components/editor"; + +.cke_top, +.cke_contents, +.cke_bottom +{ + width: 100%; /* hasLayout = true */ +} + +.cke_button_arrow +{ + font-size: 0; /* Set minimal font size, so arrow won't be streched by the text that doesn't exist. */ +} + +/* Bring back toolbar buttons in RTL. */ + +.cke_rtl .cke_toolgroup, +.cke_rtl .cke_toolbar_separator, +.cke_rtl .cke_button, +.cke_rtl .cke_button *, +.cke_rtl .cke_combo, +.cke_rtl .cke_combo *, +.cke_rtl .cke_path_item, +.cke_rtl .cke_path_item *, +.cke_rtl .cke_path_empty +{ + float: none; +} + +.cke_rtl .cke_toolgroup, +.cke_rtl .cke_toolbar_separator, +.cke_rtl .cke_combo_button, +.cke_rtl .cke_combo_button *, +.cke_rtl .cke_button, +.cke_rtl .cke_button_icon, +{ + display: inline-block; + vertical-align: top; +} + +/* Otherwise formatting toolbar breaks when editing a mixed content (#9893). */ +.cke_rtl .cke_button_icon +{ + float: none; +} + +.cke_resizer +{ + width: 10px; +} + +.cke_source +{ + white-space: normal; +} + +.cke_bottom +{ + position: static; /* Without this bottom space doesn't move when resizing editor. */ +} + +.cke_colorbox +{ + font-size: 0; /* Set minimal font size, so button won't be streched by the text that doesn't exist. */ +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/opera/dialog_opera.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/opera/dialog_opera.scss new file mode 100755 index 0000000000..d54f061f76 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/browser-specific/opera/dialog_opera.scss @@ -0,0 +1,31 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +dialog_opera.css +=============== + +This file contains styles to used by all versions of Opera only. +*/ + +/* Base it on dialog.css, overriding it with styles defined in this file. */ +@import "../../dialog/dialog"; + +/* Opera has problem with box-shadow and td with border-collapse: collapse */ +/* inset shadow is mis-aligned */ +.cke_dialog_footer +{ + display: block; + height: 38px; +} + +.cke_ltr .cke_dialog_footer > * +{ + float:right; +} +.cke_rtl .cke_dialog_footer > * +{ + float:left; +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_colorpanel.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_colorpanel.scss new file mode 100755 index 0000000000..102ef93c03 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_colorpanel.scss @@ -0,0 +1,119 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +colorpanel.css (part of editor.css) +===================================== + +The color panel is related to the contents part of the panels that are +displayed when clicking the color buttons of the toolbar. See panels.css for +styles related to the outer part of panels. + +The following is the visual representation of the color panel contents: + ++-- .cke_panel_block.cke_colorblock --+ +| +-- a.cke_colorauto --------------+ | +| | | | +| | AUTOMATIC COLOR | | +| | | | +| +---------------------------------+ | +| +-- table ------------------------+ | +| | | | +| | COLOR PALETTE | | +| | | | +| |---------------------------------| | +| | "More Colors" | | +| +---------------------------------+ | ++-------------------------------------+ + +The AUTOMATIC COLOR section is an <a> containing a table with two cells with +the following contents: + ++-- TD -----------------+ +-- TD -----------------+ +| +-- .cke_colorbox --+ | | | +| | | | | "Automatic" | +| +-------------------+ | | | ++-----------------------+ +-----------------------+ + +The COLOR PALETTE section instead is a table with a variable number of cells +(by default 8). Each cell represents a color box, with the following structure: + ++-- A.cke_colorbox ---------+ +| +-- SPAN.cke_colorbox --+ | +| | | | +| +-----------------------+ | ++---------------------------+ +*/ + +/* The container of the color palette. */ +.cke_colorblock { + padding: 3px; + font-size: 11px; + font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif; +} + +.cke_colorblock, +.cke_colorblock a { + text-decoration: none; + color: #000; +} + +/* The box which is to represent a single color on the color palette. + It is a small, square-shaped element which can be selected from the palette. */ +span.cke_colorbox { + width: 10px; + height: 10px; + border: 1px solid $gray; + float: left; +} + +.cke_rtl span.cke_colorbox { + float: right; +} + +/* The wrapper of the span.cke_colorbox. It provides an extra border and padding. */ +a.cke_colorbox { + border: 1px solid #fff; + padding: 2px; + float: left; + width: 12px; + height: 12px; + border-radius: 2px; +} + +.cke_rtl a.cke_colorbox { + float: right; +} + +/* Different states of the a.cke_colorbox wrapper. */ +a { + &:hover, &:focus, &:active { + &.cke_colorbox { + border: 1px solid $hr-border; + background-color: $gray-lighter; + } + } +} + +/* Buttons which are visible at the top/bottom of the color palette: + - cke_colorauto (TOP) applies the automatic color. + - cke_colormore (BOTTOM) executes the color dialog. +*/ +a.cke_colorauto, a.cke_colormore { + border: 1px solid #fff; + padding: 2px; + display: block; + cursor: pointer; +} + +/* Different states of cke_colorauto/cke_colormore buttons. */ +a { + &:hover, &:focus, &:active { + &.cke_colorauto, &.cke_colormore { + border: 1px solid $hr-border; + background-color: $gray-lighter; + } + } +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_elementspath.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_elementspath.scss new file mode 100755 index 0000000000..87098dae69 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_elementspath.scss @@ -0,0 +1,66 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +elementspath.css (part of editor.css) +======================================= + +This file styles the "Elements Path", whith is the list of element names +present at the the bottom bar of the CKEditor interface. + +The following is a visual representation of its main elements: + ++-- .cke_path ---------------------------------------------------------------+ +| +-- .cke_path_item ----+ +-- .cke_path_item ----+ +-- .cke_path_empty ---+ | +| | | | | | | | +| +----------------------+ +----------------------+ +----------------------+ | ++----------------------------------------------------------------------------+ +*/ + +/* The box that holds the entire elements path. */ +.cke_path { + float: left; + margin: -2px 0 2px; +} + +/* Each item of the elements path. */ +.cke_path_item, +/* Empty element available at the end of the elements path, to help us keeping + the proper box size when the elements path is empty. */ +.cke_path_empty { + display: inline-block; + float: left; + padding: 3px 4px; + margin-right: 2px; + cursor: default; + text-decoration: none; + outline: 0; + border: 0; + color: #4c4c4c; + font-weight: bold; + font-size: 11px; +} + +.cke_rtl { + .cke_path, .cke_path_item, .cke_path_empty { + float: right; + } +} + +/* The items are <a> elements, so we define its hover states here. */ +a.cke_path_item { + &:hover, &:focus, &:active { + background-color: #bfbfbf; + color: #333; + border-radius: 2px; + } +} + +.cke_hc a.cke_path_item { + &:hover, &:focus, &:active { + border: 2px solid; + padding: 1px 2px; + } +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_mainui.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_mainui.scss new file mode 100755 index 0000000000..df5985dd20 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_mainui.scss @@ -0,0 +1,189 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +mainui.css (part of editor.css) +================================= + +This file styles the basic structure of the CKEditor user interface - the box +that holds everything. + +CKEditor offers two main editing modes. The main UI blocks that compose these +modes are: + + For "Theme UI" mode, the one most generally used: + + +-- .cke_chrome ----------------------+ + |+-- .cke_inner ---------------------+| + || +-- .cke_top -------------------+ || + || | | || + || +-------------------------------+ || + || +-- .cke_contents --------------+ || + || | | || + || +-------------------------------+ || + || +-- .cke_bottom ----------------+ || + || | | || + || +-------------------------------+ || + |+-----------------------------------+| + +-------------------------------------+ + + For "Inline Editing" mode: + + +-- .cke_chrome .cke_float------------+ + |+-- .cke_inner ---------------------+| + || +-- .cke_top -------------------+ || + || | | || + || +-------------------------------+ || + |+-----------------------------------+| + +-------------------------------------+ + +Special outer level classes used in this file: + + .cke_hc: Available when the editor is rendered on "High Contrast". + +*/ + +/* The outer boundary of the interface. */ +.cke_chrome { + /* This is <span>, so transform it into a block.*/ + display: block; + border: 1px solid $hr-border; + border-radius: $border-radius; + padding: 0 3px; + background: $gray-lighter; +} + +/* The inner boundary of the interface. */ +.cke_inner { + /* This is <span>, so transform it into a block.*/ + display: block; + + -webkit-touch-callout: none; + + background: transparent; + padding: 0; +} + +/* Added to the outer boundary of the UI when in inline editing, + when the UI is floating. */ +.cke_float { + /* Make white the space between the outer and the inner borders. */ + border: none; + + .cke_inner { + /* As we don't have blocks following top (toolbar) we suppress the padding + as the toolbar defines its own margin. */ + padding-bottom: 0; + } + + .cke_top { + border: 1px solid $hr-border; + } +} + +/* Make the main spaces enlarge to hold potentially floated content. */ +.cke_top, .cke_contents, .cke_bottom { + /* These are <span>s, so transform them into blocks.*/ + display: block; + + /* Ideally this should be "auto", but it shows scrollbars in IE7. */ + overflow: hidden; +} + +.cke_top, .cke_bottom { + padding: 3px 0 0; + background: $gray-lighter; +} + +.cke_top { + /* Allow breaking toolbars when in a narrow editor. (#9947) */ + white-space: normal; +} + +.cke_contents { + background-color: #fff; + border: 1px solid $hr-border; + border-radius: $border-radius; +} + +.cke_bottom { + position: relative; +} + +/* On iOS we need to manually enable scrolling in the contents block. (#9945) */ +.cke_browser_ios .cke_contents { + overflow-y: auto; + -webkit-overflow-scrolling: touch; +} + +/* The resizer is the small UI element that is rendered at the bottom right + part of the editor. It makes is possible to resize the editor UI. */ +.cke_resizer { + /* To avoid using images for the resizer, we create a small triangle, + using some CSS magic. */ + width: 0; + height: 0; + overflow: hidden; + width: 0; + height: 0; + overflow: hidden; + border-width: 10px 10px 0 0; + border-color: transparent $gray-dark transparent transparent; + border-style: dashed solid dashed dashed; + + font-size: 0; + vertical-align: bottom; + + margin-top: 6px; + + /* A margin in case of no other element in the same container + to keep a distance to the bottom edge. */ + margin-bottom: 2px; +} + +.cke_hc .cke_resizer { + font-size: 15px; + width: auto; + height: auto; + border-width: 0; +} + +.cke_resizer_ltr { + cursor: se-resize; + + float: right; + margin-right: -4px; +} + +/* This class is added in RTL mode. This is a special case for the resizer + (usually the .cke_rtl class is used), because it may not necessarily be in + RTL mode if the main UI is RTL. It depends instead on the context where the + editor is inserted on. */ +.cke_resizer_rtl { + border-width: 10px 0 0 10px; + border-color: transparent transparent transparent $gray; + border-style: dashed dashed dashed solid; + + cursor: sw-resize; + + float: left; + margin-left: -4px; + right: auto; +} + +/* The editing area (where users type) can be rendered as an editable <div> + element (e.g. divarea plugin). In that case, this is the class applied to + that element. */ +.cke_wysiwyg_div { + display: block; + height: 100%; + overflow: auto; + padding: 0 8px; + outline-style: none; + + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_menu.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_menu.scss new file mode 100755 index 0000000000..34292d90d4 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_menu.scss @@ -0,0 +1,182 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +menu.css (part of editor.css) +=============================== + +This file styles menus used in the editor UI. These menus are the list of +options available inside some "floating panels", like menu buttons of the +toolbar or the context menu. + +Note that the menu itself doesn't include the floating element that holds it. +That element is styles in the panel.css file. + +The following is a visual representation of the main elements of a menu: + ++-- .cke_menu -----------------+ +| +-- .cke_menuitem --------+ | +| | +-- .cke_menubutton ---+ | | +| | | | | | +| | +----------------------+ | | +| +--------------------------+ | +| +-- .cke_menuseparator ----+ | +| ... | ++------------------------------+ + +This is the .cke_menubutton structure: +(Note that the menu button icon shares with toolbar button the common class .cke_button_icon to achieve the same outlook.) + ++-- .cke_menubutton -------------------------------------------------------------------------+ +| +-- .cke_menubutton_inner ---------------------------------------------------------------+ | +| | +-- .cke_menubutton_icon ---+ +-- .cke_menubutton_label --+ +-- .cke_cke_menuarrow --+ | | +| | | +-- .cke_button_icon ---+ | | | | | | | +| | | | | | | | | | | | +| | | +-----------------------+ | | | | | | | +| | +---------------------------+ +---------------------------+ +------------------------+ | | +| +----------------------------------------------------------------------------------------+ | ++--------------------------------------------------------------------------------------------+ + +Special outer level classes used in this file: + + .cke_hc: Available when the editor is rendered on "High Contrast". + .cke_rtl: Available when the editor UI is on RTL. +*/ + +/* .cke_menuitem is the element that holds the entire structure of each of the + menu items. */ + +.cke_menubutton { + /* The "button" inside a menu item is a <a> element. + Transforms it into a block. */ + display: block; +} + +.cke_button_icon { + opacity: .8; +} + +.cke_menuitem span { + /* Avoid the text selection cursor inside menu items. */ + cursor: default; +} + +.cke_menubutton { + &:hover, &:focus, &:active { + background-color: #D3D3D3; + display: block; + } +} + +.cke_hc .cke_menubutton { + padding: 2px; + &:hover, &:focus, &:active { + border: 2px solid; + padding: 0; + } +} + +.cke_menubutton_inner { + display: table-row; +} + +.cke_menubutton_icon, +.cke_menubutton_label, +.cke_menuarrow { + display: table-cell; +} + +/* The menu item icon. */ +.cke_menubutton_icon { + background-color: #D7D8D7; + opacity: 0.70; /* Safari, Opera and Mozilla */ + filter: alpha(opacity=70); /* IE */ + padding: 4px; +} + +.cke_hc .cke_menubutton_icon { + height: 16px; + width: 0; + padding: 4px 0; +} + +.cke_menubutton { + &:hover, &:focus, &:active { + .cke_menubutton_icon { + background-color: #D0D2D0; + } + } +} + +.cke_menubutton_disabled { + &:hover, &:focus, &:active { + .cke_menubutton_icon { + /* The icon will get opacity as well when hovered. */ + opacity: 0.3; + filter: alpha(opacity=30); + } + } +} + +/* The textual part of each menu item. */ +.cke_menubutton_label { + padding: 0 5px; + background-color: transparent; + width: 100%; + vertical-align: middle; +} + +.cke_menubutton_disabled .cke_menubutton_label { + /* Greyed label text indicates a disabled menu item. */ + opacity: 0.3; + filter: alpha(opacity=30); +} + +.cke_menubutton_on { + border: 1px solid #dedede; + background-color: #f2f2f2; + .cke_menubutton_icon { + padding-right: 3px; + } +} + +.cke_menubutton { + &:hover, &:focus, &:active { + background-color: #EFF0EF; + } +} + +.cke_panel_frame .cke_menubutton_label { + display: none; +} + +/* The separator used to separate menu item groups. */ +.cke_menuseparator { + background-color: #D3D3D3; + height: 1px; + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ +} + +/* The small arrow shown for item with sub-menus. */ +.cke_menuarrow { + background-image: url(images/arrow.png); + background-position: 0 10px; + background-repeat: no-repeat; + padding: 0 5px; + span { + display: none; + } +} + +.cke_rtl .cke_menuarrow { + background-position: 5px -13px; + background-repeat: no-repeat; +} + +.cke_hc .cke_menuarrow span { + vertical-align: middle; + display: inline; +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_panel.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_panel.scss new file mode 100755 index 0000000000..43bc23289b --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_panel.scss @@ -0,0 +1,199 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +panel.css (part of editor.css) +================================ + +Panels are floating elements that can hold different types of contents. +The following are common uses of it: + + - The element that toolbar combos display when opening them. + - The context menu. + - The list of items displayed by "menu buttons" (e.g. scayt). + - The panel shown when opening "panel buttons" (e.g. color buttons). + +Panel contents are wrapped into an iframe, so it is possible to have additional +CSS loaded inside them (e.g. to have more accurate preview on the styles combo). + +The following is a visual representation of the outer elements of a panel: + ++-- .cke_panel(*) ---------------------+ +| +-- IFRAME.cke_panel_frame --------+ | +| | +-- HTML.cke_panel_container --+ | | +| | | +-- .cke_panel_block ------+ | | | +| | | | | | | | +| | | | (contents here) | | | | +| | | | | | | | +| | | +--------------------------+ | | | +| | +------------------------------+ | | +| +----------------------------------+ | ++--------------------------------------+ + +(*) All kinds of panel share the above structure. Menu panels adds the + .cke_menu_panel class to the outer element, while toolbar combos add the + .cke_combopanel class. + +This file also defines styles for panel lists (used by combos). For menu-like +panel contents and color panels check menu.css and colorpanel.css. +*/ + +/* The box that holds an IFRAME. It's inserted into a host document and positioned + absolutely by the application. It floats above the host document/editor. */ +.cke_panel { + /* Restore the loading hide */ + visibility: visible; + width: 120px; + height: 100px; + overflow: hidden; + margin-top: 5px; + + background-color: #fff; + border: 1px solid $gray; + border-radius: $border-radius; +} + +/* This class represents panels which are used as context menus. */ +.cke_menu_panel { + padding: 0; + margin: 0; +} + +/* This class represents panels which are used by rich combos. */ +.cke_combopanel { + width: 150px; + height: 178px; +} + +/* The IFRAME the panel is wrapped into. */ +.cke_panel_frame { + width: 100%; + height: 100%; + font-size: 12px; + + overflow: auto; + overflow-x: hidden; +} + +/* The HTML document which is a direct descendant of the IFRAME */ +.cke_panel_container { + overflow-y: auto; + overflow-x: hidden; +} + +/* +Here we start the definition of panel lists (e.g. combo panels). The following +is its visual representation: + ++-- .cke_panel_block -----------------+ +| +-- .cke_panel_grouptitle --------+ | +| | | | +| +---------------------------------+ | +| +-- .cke_panel_list --------------+ | +| | +-- .cke_panel_listItem ------+ | | +| | | +-- a --------------------+ | | | +| | | | +-- span -------------+ | | | | +| | | | | | | | | | +| | | | +---------------------+ | | | | +| | | +-------------------------+ | | | +| | +-----------------------------+ | | +| | +-- .cke_panel_listItem ------+ | | +| | | +-- a --------------------+ | | | +| | | | +-- span -------------+ | | | | +| | | | | | | | | | +| | | | +---------------------+ | | | | +| | | +-------------------------+ | | | +| | +-----------------------------+ | | +| | ... | | +| +---------------------------------+ | ++-------------------------------------+ +*/ + + +/* The list of panel items. */ +.cke_panel_list { + list-style-type: none; + margin: 3px; + padding: 0; + white-space: nowrap; +} + +/* The item of .cke_panel_list */ +.cke_panel_listItem { + margin: 0; + padding-bottom: 1px; +} + +/* The child of .cke_panel_listItem. These elements contain spans which are + to display a real name of the property which is visible for an end-user. */ +.cke_panel_listItem a { + padding: 3px 4px; + display: block; + border: 1px solid #fff; + color: inherit !important; + text-decoration: none; + overflow: hidden; + text-overflow: ellipsis; + border-radius: 2px; + &:hover, &:focus, &:active { + background-color: $primary-lighter; + } +} + +/* IE6 */ +* html .cke_panel_listItem a { + width : 100%; + + /* IE is not able to inherit the color, so we must force it to black */ + color: #000; +} + +/* IE7 */ +*:first-child+html .cke_panel_listItem a { + /* IE is not able to inherit the color, so we must force it to black */ + color: #000; +} + +.cke_panel_listItem.cke_selected a { + background-color: $primary-light; + outline: none; +} + +.cke_hc .cke_panel_listItem a { + border-style: none; +} + +.cke_hc .cke_panel_listItem a { + &:hover, &:focus, &:active { + border: 2px solid; + padding: 1px 2px; + } +} + +/* The title of the entire panel which is visible on top of the list. */ +.cke_panel_grouptitle { + font-size: 11px; + font-weight: bold; + white-space: nowrap; + margin: 0; + padding: 6px 6px; + + color: #474747; + border-bottom: 1px solid $gray; + + background: $gray-lighter; + &:first-child { + border-radius: $border-radius $border-radius 0 0; + } +} + +/* The following styles set defaults of the elements used by the Paragraph + Format panel. */ +.cke_panel_listItem { + p, h1, h2, h3, h4, h5, h6, pre { + margin-top: 0px; + margin-bottom: 0px; + } +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_presets.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_presets.scss new file mode 100755 index 0000000000..97fc05a315 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_presets.scss @@ -0,0 +1,32 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* "Source" button label */ +.cke_button__source_label, +.cke_button__sourcedialog_label { + display: inline; +} + +/* "Font Size" combo width */ +.cke_combo__fontsize .cke_combo_text { + width: 30px; +} + +/* "Font Size" panel size */ +.cke_combopanel__fontsize { + width: 120px; +} + +/* Editable regions */ +.cke_source { + font-family: 'Courier New' , Monospace; + font-size: small; + background-color: #fff; + white-space: pre; +} + +.cke_wysiwyg_frame, .cke_wysiwyg_div { + background-color: #fff; +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_reset.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_reset.scss new file mode 100755 index 0000000000..52e18e8421 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_reset.scss @@ -0,0 +1,107 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +reset.css (part of editor.css) +================================ + +This file holds the "reset" requirements of CKEditor, as well as define the +default interface styles. + +CKEditor includes two main "reset" class names in the DOM structure created for +editors: + + * .cke_reset: Intended to reset a specific element, but not its children. + Because of this, only styles that will not be inherited can be defined. + + * .cke_reset_all: Intended to reset not only the element holding it, but + also its child elements. + +To understand why "reset" is needed, check the CKEditor Skin SDK: +http://docs.cksource.com/CKEditor_4.x/Skin_SDK/Reset +*/ + +/* Reset for single elements, not their children. */ +.cke_reset { + /* Do not include inheritable rules here. */ + margin: 0; + padding: 0; + border: 0; + background: transparent; + text-decoration: none; + width: auto; + height: auto; + vertical-align: baseline; + box-sizing: content-box; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + position: static; + -webkit-transition: none; + -moz-transition: none; + -ms-transition: none; + transition: none; +} + +/* Reset for elements and their children. */ +.cke_reset_all, .cke_reset_all * { + /* The following must be identical to .cke_reset. */ + margin: 0; + padding: 0; + border: 0; + background: transparent; + text-decoration: none; + width: auto; + height: auto; + vertical-align: baseline; + box-sizing: content-box; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + position: static; + -webkit-transition: none; + -moz-transition: none; + -ms-transition: none; + transition: none; + + /* These are rule inherited by all children elements. */ + border-collapse: collapse; + font: normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif; + color: $gray-darker; + text-align: left; + white-space: nowrap; + cursor: auto; + float: none; +} + +.cke_reset_all { + .cke_rtl * { + text-align: right; + } + /* Defaults for some elements. */ + iframe { + vertical-align: inherit; /** For IE */ + } + textarea { + white-space: pre; + } + textarea, input[type="text"], input[type="password"] { + cursor: text; + } + textarea[disabled], input[type="text"][disabled], input[type="password"][disabled] { + cursor: default; + } + fieldset { + padding: 10px; + margin-top: 10px; + border: 1px solid $hr-border; + legend { + padding: 0 5px; + } + } + select { + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + } +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_richcombo.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_richcombo.scss new file mode 100755 index 0000000000..975ca5ff14 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_richcombo.scss @@ -0,0 +1,174 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +richcombo.css (part of editor.css) +================================= + +This file holds the style set of the "Rich Combo" widget which is commonly used +in the toolbar. It doesn't, however, styles the panel that is displayed when +clicking on the combo, which is instead styled by panel.css. + +The visual representation of a rich combo widget looks as follows: + ++-- .cke_combo----------------------------------------------------------------------+ +| +-- .cke_combo_label --+ +-- .cke_combo_button ---------------------------------+ | +| | | | +-- .cke_combo_text --+ +-- .cke_combo_open -------+ | | +| | | | | | | +-- .cke_combo_arrow --+ | | | +| | | | | | | | | | | | +| | | | | | | +----------------------+ | | | +| | | | +---------------------+ +--------------------------+ | | +| +----------------------+ +------------------------------------------------------+ | ++-----------------------------------------------------------------------------------+ +*/ + +/* The box that hold the entire combo widget */ +.cke_combo { + display: inline-block; + float: left; +} + +.cke_rtl .cke_combo { + float: right; +} + +.cke_hc .cke_combo { + margin-top: -2px; +} + +/* The label of the combo widget. It is invisible by default, yet + it's important for semantics and accessibility. */ +.cke_combo_label { + display: none; + float: left; + line-height: 26px; + vertical-align: top; + margin-right: 5px; +} + +.cke_rtl .cke_combo_label { + float: right; + margin-left: 5px; + margin-right: 0; +} + +/* The container for combo text and arrow. */ +.cke_combo_button { + display: inline-block; + float: left; + margin: 0 6px 5px 0; + border: 1px solid $hr-border; + border-radius: $border-radius; + background: #fff; +} + +/* Different states of the container. */ +.cke_combo_off { + a.cke_combo_button { + &:hover, &:focus { + outline: none; + } + &:active { + border-color: $gray-darker; + } + } +} + +.cke_combo_on { + a.cke_combo_button { + border-color: $gray-darker; + } +} + +.cke_rtl .cke_combo_button { + float: right; + margin-left: 5px; + margin-right: 0; +} + +.cke_hc a.cke_combo_button { + padding: 3px; +} + +.cke_hc .cke_combo_on a.cke_combo_button { + border-width: 3px; + padding: 1px; +} +.cke_hc .cke_combo_off a.cke_combo_button { + &:hover, &:focus, &:active { + border-width: 3px; + padding: 1px; + } +} + +/* The label that shows the current value of the rich combo. + By default, it holds the name of the property. + See: .cke_combo_inlinelabel */ +.cke_combo_text { + line-height: 26px; + padding-left: 10px; + text-overflow: ellipsis; + overflow: hidden; + float: left; + cursor: default; + color: #474747; + width: 60px; +} + +.cke_rtl .cke_combo_text { + float: right; + text-align: right; + padding-left: 0; + padding-right: 10px; +} + +.cke_hc .cke_combo_text { + line-height: 18px; + font-size: 12px; +} + +/* The handler which opens the panel of rich combo properties. + It holds an arrow as a visual indicator. */ +.cke_combo_open { + cursor: default; + display: inline-block; + font-size: 0; + height: 19px; + line-height: 17px; + margin: 1px 7px 1px; + width: 5px; +} + +.cke_hc .cke_combo_open { + height: 12px; +} + +/* The arrow which is displayed inside of the .cke_combo_open handler. */ +.cke_combo_arrow { + margin: 11px 0 0; + float: left; + + /* Pure CSS Arrow */ + height: 0; + width: 0; + font-size: 0; + border-left: 3px solid transparent; + border-right: 3px solid transparent; + border-top: 3px solid $text-color; +} + +.cke_hc .cke_combo_arrow { + font-size: 10px; + width: auto; + border: 0; + margin-top: 3px; +} + +/* Disabled combo button styles. */ +.cke_combo_disabled { + .cke_combo_inlinelabel, .cke_combo_open { + opacity: 0.3; + } +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_toolbar.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_toolbar.scss new file mode 100755 index 0000000000..443c2d895d --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/_toolbar.scss @@ -0,0 +1,317 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +toolbar.css (part of editor.css) +================================== + +This files styles the CKEditor toolbar and its buttons. For toolbar combo +styles, check richcombo.css. + +The toolbar is rendered as a big container (called toolbox), which contains +smaller "toolbars". Each toolbar represents a group of items that cannot be +separated. The following is the visual representation of the toolbox. + ++-- .cke_toolbox ----------------------------------------------------------+ +| +-- .cke_toolbar --+ +-- .cke_toolbar --+ ... +-- .cke_toolbar_break --+ | +| | | | | | | | +| +------------------+ +------------------+ +------------------------+ | +| +-- .cke_toolbar --+ +-- .cke_toolbar --+ ... | +| | | | | | +| +------------------+ +------------------+ | ++--------------------------------------------------------------------------+ + +The following instead is the visual representation of a single toolbar: + ++-- .cke_toolbar ----------------------------------------------------------------+ +| +-- .cke_toolbar_start --+ +-- .cke_toolgroup (*) --+ +-- .cke_toolbar_end --+ | +| | | | | | | | +| +------------------------+ +------------------------+ +----------------------+ | ++--------------------------------------------------------------------------------+ +(*) .cke_toolgroup is available only when the toolbar items can be grouped + (buttons). If the items can't be group (combos), this box is not available + and the items are rendered straight in that place. + +This file also styles toolbar buttons, which are rendered inside the above +.cke_toolgroup containers. This is the visual representation of a button: + ++-- .cke_button -------------------------------------+ +| +-- .cke_button_icon --+ +-- .cke_button_label --+ | +| | | | | | +| +----------------------+ +-----------------------+ | ++----------------------------------------------------+ + +Special outer level classes used in this file: + + .cke_hc: Available when the editor is rendered on "High Contrast". + .cke_rtl: Available when the editor UI is on RTL. +*/ + +/* The box that holds each toolbar. */ +.cke_toolbar { + float: left; +} + +.cke_rtl .cke_toolbar { + float: right; +} + +/* The box that holds buttons. */ +.cke_toolgroup { + float: left; + margin: 0 6px 3px 0; + padding: 2px; + border: 1px solid $hr-border; + + border-radius: $border-radius; + + background: #fff; +} + +.cke_hc .cke_toolgroup { + border: 0; + margin-right: 10px; + margin-bottom: 10px; +} + +.cke_rtl .cke_toolgroup *:first-child { + border-radius: 0 $border-radius $border-radius 0; +} + +.cke_rtl .cke_toolgroup *:last-child { + border-radius: $border-radius 0 0 $border-radius; +} + +.cke_rtl .cke_toolgroup { + float: right; + margin-left: 6px; + margin-right: 0; +} + +/* A toolbar button . */ +a.cke_button { + display: inline-block; + height: 18px; + padding: 2px 4px; + outline: none; + cursor: default; + float: left; + border: 0; + border-radius: 2px; +} + +.cke_rtl .cke_button { + float: right; +} + +.cke_hc .cke_button { + border: 1px solid black; + + /* Compensate the added border */ + padding: 3px 5px; + margin: -2px 4px 0 -2px; +} + +/* This class is applied to the button when it is "active" (pushed). + This style indicates that the feature associated with the button is active + i.e. currently writing in bold or when spell checking is enabled. */ +.cke_button_on { + background: $primary-light; +} + +.cke_hc { + .cke_button_on { + border-width: 3px; + /* Compensate the border change */ + padding: 1px 3px; + } + a.cke_button_off, a.cke_button_disabled { + &:hover, &:focus, &:active { + border-width: 3px; + /* Compensate the border change */ + padding: 1px 3px; + } + } +} + +/* This class is applied to the button when the feature associated with the + button cannot be used (grayed-out). + i.e. paste button remains disabled when there is nothing in the clipboard to + be pasted. */ +.cke_button_disabled .cke_button_icon { + opacity: 0.3; +} + +.cke_hc .cke_button_disabled { + opacity: 0.5; +} + +a.cke_button_on { + &:hover, &:focus, &:active { + } +} + +a.cke_button_off, a.cke_button_disabled { + &:hover, &:focus, &:active { + background: $primary-lighter; + } +} + +/* The icon which is a visual representation of the button. */ +.cke_button_icon { + cursor: inherit; + background-repeat: no-repeat; + margin-top: 1px; + width: 16px; + height: 16px; + float: left; + display: inline-block; +} + +.cke_rtl .cke_button_icon { + float: right; +} + +.cke_hc .cke_button_icon { + display: none; +} + +/* The label of the button that stores the name of the feature. By default, + labels are invisible. They can be revealed on demand though. */ +.cke_button_label { + display: none; + padding-left: 3px; + margin-top: 1px; + line-height: 18px; + vertical-align: middle; + float: left; + cursor: default; + color: $gray-dark; +} + +.cke_rtl .cke_button_label { + padding-right: 3px; + padding-left: 0; + float: right; +} + +.cke_hc .cke_button_label { + padding: 0; + display: inline-block; + font-size: 12px; +} + +/* The small arrow available on buttons that can be expanded + (e.g. the color buttons). */ +.cke_button_arrow { + /* Arrow in CSS */ + display: inline-block; + margin: 8px 0 0 1px; + width: 0; + height: 0; + cursor: default; + vertical-align: top; + border-left: 3px solid transparent; + border-right: 3px solid transparent; + border-top: 3px solid #474747; +} + +.cke_rtl .cke_button_arrow { + margin-right: 5px; + margin-left: 0; +} + +.cke_hc .cke_button_arrow { + font-size: 10px; + margin: 3px -2px 0 3px; + width: auto; + border: 0; +} + +/* The vertical separator which is used within a single toolbar to split + buttons into sub-groups. */ +.cke_toolbar_separator { + float: left; + background-color: $hr-border; + margin: 4px 2px 0; + height: 16px; + width: 1px; +} + +.cke_rtl .cke_toolbar_separator { + float: right; +} + +.cke_hc .cke_toolbar_separator { + width: 0; + border-left: 1px solid; + margin: 1px 5px 0 0px; +} + +/* The dummy element that breaks toolbars. + Once it is placed, the very next toolbar is moved to the new row. */ +.cke_toolbar_break { + display: block; + clear: left; +} + +.cke_rtl .cke_toolbar_break { + clear: right; +} + +/* The button, which when clicked hides (collapses) all the toolbars. */ +.cke_toolbox_collapser { + width: 12px; + height: 11px; + float: right; + margin: 11px 0 0; + font-size: 0; + cursor: default; + text-align: center; + + border: 1px solid #a6a6a6; + border-bottom-color: #979797; + + border-radius: $border-radius; + + background: #e4e4e4; + &:hover { + background: #ccc; + } + &.cke_toolbox_collapser_min { + margin: 0 2px 4px; + .cke_arrow { + margin-top: 4px; + border-bottom-color: transparent; + border-top-color: #474747; + } + } + /* The CSS arrow, which belongs to the toolbar collapser. */ + .cke_arrow { + display: inline-block; + + /* Pure CSS Arrow */ + height: 0; + width: 0; + font-size: 0; + margin-top: 1px; + border-left: 3px solid transparent; + border-right: 3px solid transparent; + border-bottom: 3px solid #474747; + border-top: 3px solid transparent; + } +} + +.cke_rtl .cke_toolbox_collapser { + float: left; +} + +.cke_hc .cke_toolbox_collapser .cke_arrow { + font-size: 8px; + width: auto; + border: 0; + margin-top: 0; + margin-right: 2px; +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/editor.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/editor.scss new file mode 100755 index 0000000000..fb1ff302be --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/components/editor.scss @@ -0,0 +1,66 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +editor.css +============ + +This is he heart of the skin system. This is the file loaded by the editor to +style all elements inside its main interface. + +To make it easier to maintain, instead of including all styles here, we import +other files. +*/ + +/* Config files, where variables are defined */ +@import "../config/config"; + +/* "Reset" styles, necessary to avoid the editor UI being broken by external CSS. */ +@import "reset"; + +/* Styles the main interface structure (holding box). */ +@import "mainui"; + +/* Styles all "panels", which are the floating elements that appear when + opening toolbar combos, menu buttons, context menus, etc. */ +@import "panel"; + +/* Styles the color panel displayed by the color buttons. */ +@import "colorpanel"; + +/* Styles to toolbar. */ +@import "toolbar"; + +/* Styles menus, which are lists of selectable items (context menu, menu button). */ +@import "menu"; + +/* Styles toolbar combos. */ +@import "richcombo"; + +/* Styles the elements path bar, available at the bottom of the editor UI.*/ +@import "elementspath"; + +/* Contains hard-coded presets for "configurable-like" options of the UI + (e.g. display labels on specific buttons) */ +@import "presets"; + +/* Important! + To avoid showing the editor UI while its styles are still not available, the + editor creates it with visibility:hidden. Here, we restore the UI visibility. */ +.cke_chrome { + visibility: inherit; +} + +/* For accessibility purposes, several "voice labels" are present in the UI. + These are usually <span> elements that show not be visible, but that are + used by screen-readers to announce other elements. Here, we hide these + <spans>, in fact. */ +.cke_voice_label { + display: none; +} + +legend.cke_voice_label { + display: none; +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/config/_colors.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/config/_colors.scss new file mode 100755 index 0000000000..7e8c1489c2 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/config/_colors.scss @@ -0,0 +1,61 @@ +/* ========================================================================== + Colors + + This file is exclusively intended for setting up variables + Never add styles directly to this file + ========================================================================== */ + +// Grays +// ------------------------- + +$gray-darker: #333; +$gray-dark: #555; +$gray: #aaa; +$gray-light: #ddd; +$gray-lighter: #eee; + +// Primary +// ------------------------- +$primary: #428bca; +$primary-light: #92bce0; +$primary-lighter: #e1edf7; + +// Forms +// ------------------------- +$form-blue: #66afe9; + +// Blues +// ------------------------- +$blue-dark: #2274c9; +$blue-dark-hover: #1e68b4; +$blue: #3F8EDF; +$blue-hover: #2981db; + +// States +// ------------------------- + +$success: $blue; +$success-hover: $blue-hover; +$success-border: $blue-dark; +$success-border-hover: $blue-dark-hover; + +$warning: #f0ad4e; +$danger: #d9534f; +$info: #5bc0de; + +// Scaffolding +// ------------------------- + +$body-bg: #fff; +$text-color: $gray-darker; + +// Links +// ------------------------- + +$link-color: $primary; +$link-hover-color: darken($link-color, 15%); + +// Hr border color +// ------------------------- + +$hr-border: $gray-light; diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/config/_config.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/config/_config.scss new file mode 100755 index 0000000000..87bcc94ce0 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/config/_config.scss @@ -0,0 +1,9 @@ +/* ========================================================================== + Config + + This file is exclusively intended for setting up imports + Never add styles directly to this file + ========================================================================== */ + +@import "colors"; +@import "defaults"; diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/config/_defaults.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/config/_defaults.scss new file mode 100755 index 0000000000..b8a626203d --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/config/_defaults.scss @@ -0,0 +1,37 @@ +/* ========================================================================== + Defaults + + This file is exclusively intended for setting up variables + Never add styles directly to this file + ========================================================================== */ + +// Border radius +// ------------------------- + +$border-radius: 4px; + + +// Forms +// ------------------------- + +%input-style { + background-color: #fff; + outline: none; + width: 100%; + *width: 95%; + height: 30px; + padding: 4px 10px; + border: 1px solid $hr-border; + border-radius: $border-radius; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + &:focus { + border-color: $form-blue; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba($form-blue,.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba($form-blue,.6); + } +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/dialog/dialog.scss b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/dialog/dialog.scss new file mode 100755 index 0000000000..ecd5545103 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/skins/bootstrapck/scss/dialog/dialog.scss @@ -0,0 +1,822 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +/* +dialog.css +============ + +This file styles dialogs and all widgets available inside of it (tabs, buttons, +fields, etc.). + +Dialogs are a complex system because they're very flexible. The CKEditor API +makes it easy to create and customize dialogs by code, by making use of several +different widgets inside its contents. + +All dialogs share a main dialog strucuture, which can be visually represented +as follows: + ++-- .cke_dialog -------------------------------------------------+ +| +-- .cke_dialog_body ----------------------------------------+ | +| | +-- .cke_dialog_title --+ +-- .cke_dialog_close_button --+ | | +| | | | | | | | +| | +-----------------------+ +------------------------------+ | | +| | +-- .cke_dialog_tabs ------------------------------------+ | | +| | | | | | +| | +--------------------------------------------------------+ | | +| | +-- .cke_dialog_contents --------------------------------+ | | +| | | +-- .cke_dialog_contents_body -----------------------+ | | | +| | | | | | | | +| | | +----------------------------------------------------+ | | | +| | | +-- .cke_dialog_footer ------------------------------+ | | | +| | | | | | | | +| | | +----------------------------------------------------+ | | | +| | +--------------------------------------------------------+ | | +| +------------------------------------------------------------+ | ++----------------------------------------------------------------+ + +/* Config files, where variables are defined */ +@import "../config/config"; + +/* Comments in this file will give more details about each of the above blocks. +*/ + +/* The outer container of the dialog. */ +.cke_dialog { + /* Mandatory: Because the dialog.css file is loaded on demand, we avoid + showing an unstyled dialog by hidding it. Here, we restore its visibility. */ + visibility: visible; +} + +/* The inner boundary container. */ +.cke_dialog_body { + z-index: 1; + background: $gray-lighter; + border: 1px solid $hr-border; + + border-radius: $border-radius; +} + +/* This one is required by Firefox 3.6. Without it, + dialog tabs and resizer float outside of the dialog. + Although this rule doesn't seem to break anything on other + browsers, it doesn't work with broken jQueryUI - #9851. */ +.cke_browser_gecko19 .cke_dialog_body { + position: relative; +} + +/* Due to our reset we have to recover the styles of some elements. */ +.cke_dialog strong { + font-weight: bold; +} + +/* The dialog title. */ +.cke_dialog_title { + font-weight: bold; + font-size: 13px; + cursor: move; + position: relative; + color: $text-color; + border-bottom: 1px solid $hr-border; + padding: 10px 12px; + background: $gray-lighter; +} + +/* The outer part of the dialog contants, which contains the contents body + and the footer. */ +.cke_dialog_contents { + background-color: #fff; + overflow: auto; + padding: 15px 10px 5px 10px; + margin-top: 35px; + border-top: 1px solid $hr-border; + border-radius: 0 0 $border-radius $border-radius; +} + +/* The contents body part, which will hold all elements available in the dialog. */ +.cke_dialog_contents_body { + overflow: auto; + padding: 17px 10px 5px 10px; + margin-top: 22px; +} + +/* The dialog footer, which usually contains the "Ok" and "Cancel" buttons as + well as a resize handler. */ +.cke_dialog_footer { + text-align: right; + position: relative; + border-radius: 0 0 $border-radius $border-radius; + border-top: 1px solid $hr-border; + background: $gray-lighter; +} + +.cke_rtl .cke_dialog_footer { + text-align: left; +} + +.cke_hc .cke_dialog_footer { + outline: none; + border-top: 1px solid #fff; +} + +.cke_dialog .cke_resizer { + margin-top: 28px; +} + +.cke_dialog .cke_resizer_rtl { + margin-left: 5px; +} + +.cke_dialog .cke_resizer_ltr { + margin-right: 5px; +} + +/* +Dialog tabs +------------- + +Tabs are presented on some of the dialogs to make it possible to have its +contents split on different groups, visible one after the other. + +The main element that holds the tabs can be made hidden, in case of no tabs +available. + +The following is the visual representation of the tabs block: + ++-- .cke_dialog_tabs ------------------------------------+ +| +-- .cke_dialog_tab --+ +-- .cke_dialog_tab --+ ... | +| | | | | | +| +---------------------+ +---------------------+ | ++--------------------------------------------------------+ + +The .cke_dialog_tab_selected class is appended to the active tab. +*/ + +/* The main tabs container. */ +.cke_dialog_tabs { + height: 24px; + display: inline-block; + margin: 10px 0 0; + position: absolute; + z-index: 2; + left: 10px; +} + +.cke_rtl .cke_dialog_tabs { + right: 10px; +} + +/* A single tab (an <a> element). */ +a.cke_dialog_tab { + height: 16px; + padding: 4px 8px; + margin-right: 3px; + display: inline-block; + cursor: pointer; + line-height: 16px; + outline: none; + color: $gray-dark; + border: 1px solid $hr-border; + + border-radius: 3px 3px 0 0; + background: lighten($gray-lighter, 2%); +} + +.cke_rtl a.cke_dialog_tab { + margin-right: 0; + margin-left: 3px; +} + +/* A hover state of a regular inactive tab. */ +a.cke_dialog_tab:hover { + background: $gray-light; + text-decoration: none; +} + +a.cke_dialog_tab_selected +{ + background: #fff; + color: $text-color; + border-bottom-color: #fff; + cursor: default; + filter: none; +} + +/* A hover state for selected tab. */ +a.cke_dialog_tab_selected:hover { + background: #fff; +} + +.cke_hc a.cke_dialog_tab:hover, +.cke_hc a.cke_dialog_tab_selected +{ + border: 3px solid; + padding: 2px 6px; +} + +a.cke_dialog_tab_disabled +{ + color: #bababa; + cursor: default; +} + +/* selectbox inside tabs container */ +.cke_dialog_tabs { + .cke_dialog_ui_input_select { + top: -7px !important; + } +} + +/* The .cke_single_page class is appended to the dialog outer element in case + of dialogs that has no tabs. */ +.cke_single_page .cke_dialog_tabs +{ + display: none; +} + +.cke_single_page .cke_dialog_contents +{ + padding-top: 5px; + margin-top: 0; + border-top: none; +} + +/* The close button at the top of the dialog. */ + +.cke_dialog_close_button { + background-image: url(images/close.png); + background-repeat: no-repeat; + background-position: 0 0; + position: absolute; + cursor: pointer; + text-align: center; + height: 20px; + width: 20px; + top: 9px; + z-index: 5; +} + +.cke_hidpi .cke_dialog_close_button { + background-image: url(images/hidpi/close.png); + background-size: 16px; +} + +.cke_dialog_close_button span { + display: none; +} + +.cke_hc .cke_dialog_close_button span { + display: inline; + cursor: pointer; + font-weight: bold; + position: relative; + top: 3px; +} + +.cke_ltr .cke_dialog_close_button { + right: 5px; +} + +.cke_rtl .cke_dialog_close_button { + left: 6px; +} + + +/* +Dialog UI Elements +-------------------- + +The remaining styles define the UI elements that can be used inside dialog +contents. + +Most of the UI elements on dialogs contain a textual label. All of them share +the same labelling structure, having the label text inside an element with +.cke_dialog_ui_labeled_label and the element specific part inside the +.cke_dialog_ui_labeled_content class. +*/ + +/* If an element is supposed to be disabled, the .cke_disabled class is + appended to it. */ +div.cke_disabled .cke_dialog_ui_labeled_content div * { + background-color: #ddd; + cursor: default; +} + +/* +Horizontal-Box and Vertical-Box +--------------------------------- + +There are basic layou element used by the editor to properly align elements in +the dialog. They're basically tables that have each cell filled by UI elements. + +The following is the visual representation of a H-Box: + ++-- .cke_dialog_ui_hbox --------------------------------------------------------------------------------+ +| +-- .cke_dialog_ui_hbox_first --+ +-- .cke_dialog_ui_hbox_child --+ +-- .cke_dialog_ui_hbox_last --+ | +| + + + + + + | +| +-------------------------------+ +-------------------------------+ +------------------------------+ | ++-------------------------------------------------------------------------------------------------------+ + +It is possible to have nested V/H-Boxes. +*/ + +.cke_dialog_ui_vbox, .cke_dialog_ui_hbox { + table { + margin: auto; + } +} +.cke_dialog_ui_vbox { + margin-top: 5px; +} +.cke_dialog_ui_vbox_child { + padding: 5px 0px; +} + +.cke_dialog_ui_hbox { + width: 100%; +} + +.cke_dialog_ui_hbox_first, +.cke_dialog_ui_hbox_child, +.cke_dialog_ui_hbox_last { + vertical-align: top; +} + +/* To center a horizontal label-input (selection field dialog / find and replace) */ +.cke_dialog_ui_hbox_first, +.cke_dialog_ui_hbox_last { + > .cke_dialog_ui_labeled_label, > .cke_dialog_ui_html { + line-height: 30px; + } +} + +.cke_ltr .cke_dialog_ui_hbox_first, +.cke_ltr .cke_dialog_ui_hbox_child { + padding-right: 10px; +} + +.cke_rtl .cke_dialog_ui_hbox_first, +.cke_rtl .cke_dialog_ui_hbox_child { + padding-left: 10px; +} + +.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first, +.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child { + padding-right: 5px; +} + +.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first, +.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child { + padding-left: 5px; + padding-right: 0; +} + +/* Applies to all labeled dialog fields */ +.cke_hc div { + &.cke_dialog_ui_input_text, + &.cke_dialog_ui_input_password, + &.cke_dialog_ui_input_textarea, + &.cke_dialog_ui_input_select, + &.cke_dialog_ui_input_file { + border: 1px solid; + } +} + +/* +Text Input +------------ + +The basic text field to input text. + ++-- .cke_dialog_ui_text --------------------------+ +| +-- .cke_dialog_ui_labeled_label ------------+ | +| | | | +| +--------------------------------------------+ | +| +-- .cke_dialog_ui_labeled_content ----------+ | +| | +-- div.cke_dialog_ui_input_text --------+ | | +| | | +-- input.cke_dialog_ui_input_text --+ | | | +| | | | | | | | +| | | +------------------------------------+ | | | +| | +----------------------------------------+ | | +| +--------------------------------------------+ | ++-------------------------------------------------+ +*/ + +.cke_dialog_ui_text { + margin-bottom: 7px; +} +.cke_dialog_ui_select { + height: auto !important; + margin-bottom: 7px; +} + +/* +Textarea +---------- + +The textarea field to input larger text. + ++-- .cke_dialog_ui_textarea --------------------------+ +| +-- .cke_dialog_ui_labeled_label ----------------+ | +| | | | +| +------------------------------------------------+ | +| +-- .cke_dialog_ui_labeled_content --------------+ | +| | +-- div.cke_dialog_ui_input_textarea --------+ | | +| | | +-- input.cke_dialog_ui_input_textarea --+ | | | +| | | | | | | | +| | | +----------------------------------------+ | | | +| | +--------------------------------------------+ | | +| +------------------------------------------------+ | ++-----------------------------------------------------+ +*/ + +textarea.cke_dialog_ui_input_textarea { + overflow: auto; + resize: none; +} + +input.cke_dialog_ui_input_text, +input.cke_dialog_ui_input_password, +textarea.cke_dialog_ui_input_textarea { + @extend %input-style; +} + + +/* +Button +-------- + +The buttons used in the dialog footer or inside the contents. + ++-- a.cke_dialog_ui_button -----------+ +| +-- span.cke_dialog_ui_button --+ | +| | | | +| +-------------------------------+ | ++-------------------------------------+ +*/ + +/* The outer part of the button. */ +a.cke_dialog_ui_button { + display: inline-block; + *display: inline; + *zoom: 1; + + padding: 3px 0; + margin: 0; + + text-align: center; + color: $text-color; + vertical-align: middle; + cursor: pointer; + + border: 1px solid $hr-border; + border-radius: $border-radius; + background: #fff; + + &:hover, &:focus, &:active { + border-color: $gray; + background-color: $gray-lighter; + text-decoration: none; + } +} + +/* Buttons inside the content */ +.cke_dialog_page_contents { + a.cke_dialog_ui_button { + height: 22px; + line-height: 22px; + background-color: #f4f4f4; + &:hover, &:focus, &:active { + background-color: $gray-lighter; + } + } +} + +span.cke_dialog_ui_button { + padding: 0 12px; +} + +.cke_hc a.cke_dialog_ui_button { + &:hover, &:focus, &:active { + border: 3px solid; + padding-top: 1px; + padding-bottom: 1px; + + span { + padding-left: 10px; + padding-right: 10px; + } + } +} + +/* +a.cke_dialog_ui_button[style*="width"] +{ + display: block !important; + width: auto !important; +} +*/ +/* The inner part of the button (both in dialog tabs and dialog footer). */ +.cke_dialog_footer_buttons a.cke_dialog_ui_button span { + color: inherit; + font-size: 12px; + line-height: 20px; +} + +/* Special class appended to the Ok button. */ +a.cke_dialog_ui_button_ok { + color: #fff; + border-color: $success-border; + background: $success; + &:hover, &:focus, &:active { + border-color: $success-border-hover; + background: $success-hover; + } +} + +/* Special class appended to the Cancel button. */ +a.cke_dialog_ui_button_cancel { + background-color: #fff; + &:focus { + outline: none; + } +} + +span.cke_dialog_ui_button { + cursor: pointer; +} + +/* A special container that holds the footer buttons. */ +.cke_dialog_footer_buttons { + display: inline-table; + margin: 10px; + width: auto; + position: relative; + vertical-align: middle; +} + +/* +Styles for other dialog element types. +*/ + +div.cke_dialog_ui_input_select { + display: table; +} + +select.cke_dialog_ui_input_select { + height: 30px; + line-height: 30px; + + background-color: #fff; + padding: 4px 10px; + border: 1px solid $hr-border; + + outline: none; + border-radius: $border-radius; + + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075); +} + +.cke_dialog_ui_input_file { + width: 100%; + height: 30px; +} + +.cke_hc .cke_dialog_ui_labeled_content { + input, select, textarea { + &:focus { + outline: 1px dotted; + } + } +} + +/* + * Some utility CSS classes for dialog authors. + */ +.cke_dialog { + .cke_dark_background { + background-color: $gray-lighter; + } + .cke_light_background { + background-color: $gray-lighter; + } + .cke_centered { + text-align: center; + } + + a.cke_btn_reset { + float: right; + background: url(images/refresh.png) top left no-repeat; + width: 16px; + height: 16px; + border: 1px none; + font-size: 1px; + } + + a.cke_btn_locked, a.cke_btn_unlocked { + float: left; + width: 16px; + height: 16px; + background-repeat: no-repeat; + border: none 1px; + font-size: 1px; + } + a.cke_btn_locked { + background-image: url(images/lock.png); + .cke_icon { + display: none; + } + } + a.cke_btn_unlocked { + background-image: url(images/lock-open.png); + } + + .cke_btn_over { + border: outset 1px; + cursor: pointer; + } +} + +.cke_hidpi .cke_dialog { + a.cke_btn_reset { + background-size: 16px; + background-image: url(images/hidpi/refresh.png); + } + a.cke_btn_unlocked, a.cke_btn_locked { + background-size: 16px; + } + a.cke_btn_locked { + background-image: url(images/hidpi/lock.png); + } + a.cke_btn_unlocked { + background-image: url(images/hidpi/lock-open.png); + } +} + +.cke_rtl .cke_dialog { + a.cke_btn_reset { + float: left; + } + a.cke_btn_locked, a.cke_btn_unlocked { + float: right; + } +} + +/* +The rest of the file contains style used on several common plugins. There is a +tendency that these will be moved to the plugins code in the future. +*/ + +.cke_dialog { + .ImagePreviewBox, .FlashPreviewBox { + border: 1px solid $gray; + border-radius: $border-radius; + padding: 6px 10px; + margin-top: 5px; + background-color: white; + } + .ImagePreviewBox { + overflow: scroll; + height: 205px; + width: 300px; + table td { + white-space: normal; + } + } + .FlashPreviewBox { + white-space: normal; + overflow: auto; + height: 160px; + width: 390px; + } + .ImagePreviewLoader { + position: absolute; + white-space: normal; + overflow: hidden; + height: 160px; + width: 230px; + margin: 2px; + padding: 2px; + opacity: 0.9; + filter: alpha(opacity = 90); + + background-color: #e4e4e4; + } + .cke_pastetext { + width: 346px; + height: 170px; + textarea { + width: 340px; + height: 170px; + resize: none; + } + } + iframe.cke_pasteframe { + width: 346px; + height: 130px; + background-color: white; + border: 1px solid #aeb3b9; + border-radius: $border-radius; + } + .cke_hand { + cursor: pointer; + } +} + +.cke_disabled { + color: #a0a0a0; +} + +.cke_dialog_body { + .cke_label { + display: none; + } + label { + display: inline-block; + margin-bottom: 3px; + cursor: default; + &.cke_required { + font-weight: bold; + } + } +} + +.cke_dialog_ui_html { + line-height: 150%; +} + +a.cke_smile { + overflow: hidden; + display: block; + text-align: center; + padding: 0.3em 0; + img { + vertical-align: middle; + } +} + +a.cke_specialchar { + cursor: inherit; + display: block; + height: 1.25em; + padding: 0.2em 0.3em; + text-align: center; +} + +a.cke_smile, +a.cke_specialchar { + background-color: $gray-lighter; + border: 1px solid transparent; + vertical-align: top; + &:hover, &:focus, &:active { + background: #fff; + outline: 0; + } + &:hover { + border-color: $gray; + } + &:focus, &:active { + border-color: $primary; + } +} + +/** + * Styles specific to "cellProperties" dialog. + */ + +.cke_dialog_contents a.colorChooser { + display: block; + margin-top: 6px; + margin-left: 10px; + width: 80px; +} + +.cke_rtl .cke_dialog_contents a.colorChooser { + margin-right: 10px; +} + + +.cke_dialog_ui_checkbox { + display: inline-block; + margin-bottom: 5px; +} + +/* Compensate focus outline for some input elements. (#6200) */ +.cke_dialog_ui_checkbox_input:focus, +.cke_dialog_ui_radio_input:focus, +.cke_btn_over { + outline: 1px dotted #696969; +} + +.cke_iframe_shim { + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + filter: alpha(opacity = 0); + width: 100%; + height: 100%; +} diff --git a/html/moodle2/mod/hvp/editor/ckeditor/styles.js b/html/moodle2/mod/hvp/editor/ckeditor/styles.js new file mode 100755 index 0000000000..432f956806 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/ckeditor/styles.js @@ -0,0 +1,111 @@ +/** + * Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +// This file contains style definitions that can be used by CKEditor plugins. +// +// The most common use for it is the "stylescombo" plugin, which shows a combo +// in the editor toolbar, containing all styles. Other plugins instead, like +// the div plugin, use a subset of the styles on their feature. +// +// If you don't have plugins that depend on this file, you can simply ignore it. +// Otherwise it is strongly recommended to customize this file to match your +// website requirements and design properly. + +CKEDITOR.stylesSet.add( 'default', [ + /* Block Styles */ + + // These styles are already available in the "Format" combo ("format" plugin), + // so they are not needed here by default. You may enable them to avoid + // placing the "Format" combo in the toolbar, maintaining the same features. + /* + { name: 'Paragraph', element: 'p' }, + { name: 'Heading 1', element: 'h1' }, + { name: 'Heading 2', element: 'h2' }, + { name: 'Heading 3', element: 'h3' }, + { name: 'Heading 4', element: 'h4' }, + { name: 'Heading 5', element: 'h5' }, + { name: 'Heading 6', element: 'h6' }, + { name: 'Preformatted Text',element: 'pre' }, + { name: 'Address', element: 'address' }, + */ + + { name: 'Italic Title', element: 'h2', styles: { 'font-style': 'italic' } }, + { name: 'Subtitle', element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } }, + { + name: 'Special Container', + element: 'div', + styles: { + padding: '5px 10px', + background: '#eee', + border: '1px solid #ccc' + } + }, + + /* Inline Styles */ + + // These are core styles available as toolbar buttons. You may opt enabling + // some of them in the Styles combo, removing them from the toolbar. + // (This requires the "stylescombo" plugin) + /* + { name: 'Strong', element: 'strong', overrides: 'b' }, + { name: 'Emphasis', element: 'em' , overrides: 'i' }, + { name: 'Underline', element: 'u' }, + { name: 'Strikethrough', element: 'strike' }, + { name: 'Subscript', element: 'sub' }, + { name: 'Superscript', element: 'sup' }, + */ + + { name: 'Marker', element: 'span', attributes: { 'class': 'marker' } }, + + { name: 'Big', element: 'big' }, + { name: 'Small', element: 'small' }, + { name: 'Typewriter', element: 'tt' }, + + { name: 'Computer Code', element: 'code' }, + { name: 'Keyboard Phrase', element: 'kbd' }, + { name: 'Sample Text', element: 'samp' }, + { name: 'Variable', element: 'var' }, + + { name: 'Deleted Text', element: 'del' }, + { name: 'Inserted Text', element: 'ins' }, + + { name: 'Cited Work', element: 'cite' }, + { name: 'Inline Quotation', element: 'q' }, + + { name: 'Language: RTL', element: 'span', attributes: { 'dir': 'rtl' } }, + { name: 'Language: LTR', element: 'span', attributes: { 'dir': 'ltr' } }, + + /* Object Styles */ + + { + name: 'Styled image (left)', + element: 'img', + attributes: { 'class': 'left' } + }, + + { + name: 'Styled image (right)', + element: 'img', + attributes: { 'class': 'right' } + }, + + { + name: 'Compact table', + element: 'table', + attributes: { + cellpadding: '5', + cellspacing: '0', + border: '1', + bordercolor: '#ccc' + }, + styles: { + 'border-collapse': 'collapse' + } + }, + + { name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } }, + { name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } } +] ); + diff --git a/html/moodle2/mod/hvp/editor/composer.json b/html/moodle2/mod/hvp/editor/composer.json new file mode 100755 index 0000000000..1c3914c0dc --- /dev/null +++ b/html/moodle2/mod/hvp/editor/composer.json @@ -0,0 +1,32 @@ +{ + "name": "h5p/h5p-editor", + "type": "library", + "description": "H5P Editor functionality in PHP", + "keywords": ["h5p","hvp","editor","interactive","content","quiz"], + "homepage": "https://h5p.org", + "license": "GPL-3.0", + "authors": [ + { + "name": "Svein-Tore Griff With", + "email": "with@joubel.com", + "homepage": "http://joubel.com", + "role": "CEO" + }, + { + "name": "Frode Petterson", + "email": "frode.petterson@joubel.com", + "homepage": "http://joubel.com", + "role": "Developer" + } + ], + "require": { + "php": ">=5.3.0" + }, + "autoload": { + "files": [ + "h5peditor.class.php", + "h5peditor-file.class.php", + "h5peditor-storage.interface.php" + ] + } +} diff --git a/html/moodle2/mod/hvp/editor/h5peditor-file.class.php b/html/moodle2/mod/hvp/editor/h5peditor-file.class.php new file mode 100755 index 0000000000..b2c73eeea3 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/h5peditor-file.class.php @@ -0,0 +1,265 @@ +<?php + +/** + * Class + */ +class H5peditorFile { + private $result, $field, $interface; + public $type, $name, $path, $mime, $size; + + /** + * Constructor. Process data for file uploaded through the editor. + */ + function __construct($interface) { + $field = filter_input(INPUT_POST, 'field', FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES); + + // Check for file upload. + if ($field === NULL || empty($_FILES) || !isset($_FILES['file'])) { + return; + } + + $this->interface = $interface; + + // Create a new result object. + $this->result = new stdClass(); + + // Get the field. + $this->field = json_decode($field); + + // Check if uploaded base64 encoded file + if (isset($_POST) && isset($_POST['dataURI']) && $_POST['dataURI'] !== '') { + $data = $_POST['dataURI']; + + // Extract data from string + list($type, $data) = explode(';', $data); + list(, $data) = explode(',', $data); + $this->data = base64_decode($data); + + // Extract file type and extension + list(, $type) = explode(':', $type); + list(, $extension) = explode('/', $type); + $this->type = $type; + $this->extension = $extension; + $this->size = strlen($this->data); + } + else { + + // Handle temporarily uploaded form file + if (function_exists('finfo_file')) { + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $this->type = finfo_file($finfo, $_FILES['file']['tmp_name']); + finfo_close($finfo); + } + elseif (function_exists('mime_content_type')) { + // Deprecated, only when finfo isn't available. + $this->type = mime_content_type($_FILES['file']['tmp_name']); + } + else { + $this->type = $_FILES['file']['type']; + } + + $this->extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); + $this->size = $_FILES['file']['size']; + } + } + + /** + * Indicates if an uploaded file was found or not. + * + * @return boolean + */ + public function isLoaded() { + return is_object($this->result); + } + + /** + * Check current file up agains mime types and extensions in the given list. + * + * @param array $mimes List to check against. + * @return boolean + */ + public function check($mimes) { + $ext = strtolower($this->extension); + foreach ($mimes as $mime => $extension) { + if (is_array($extension)) { + // Multiple extensions + if (in_array($ext, $extension)) { + $this->type = $mime; + return TRUE; + } + } + elseif (/*$this->type === $mime && */$ext === $extension) { + // TODO: Either remove everything that has to do with mime types, or make it work + // Currently we're experiencing trouble with mime types on different servers... + $this->type = $mime; + return TRUE; + } + } + return FALSE; + } + + /** + * Validate the file. + * + * @return boolean + */ + public function validate() { + if (isset($this->result->error)) { + return FALSE; + } + + // Check for field type. + if (!isset($this->field->type)) { + $this->result->error = $this->interface->t('Unable to get field type.'); + return FALSE; + } + + // Check if mime type is allowed. + if ((isset($this->field->mimes) && !in_array($this->type, $this->field->mimes)) || substr($this->extension, 0, 3) === 'php') { + $this->result->error = $this->interface->t("File type isn't allowed."); + return FALSE; + } + + // Type specific validations. + switch ($this->field->type) { + default: + $this->result->error = $this->interface->t('Invalid field type.'); + return FALSE; + + case 'image': + $allowed = array( + 'image/png' => 'png', + 'image/jpeg' => array('jpg', 'jpeg'), + 'image/gif' => 'gif', + ); + if (!$this->check($allowed)) { + $this->result->error = $this->interface->t('Invalid image file format. Use jpg, png or gif.'); + return FALSE; + } + + // Get image size from base64 string + if (isset($this->data)) { + + if (!function_exists('getimagesizefromstring')) { + $uri = 'data://application/octet-stream;base64,' . base64_encode($this->data); + $image = getimagesize($uri); + } + else { + $image = getimagesizefromstring($this->data); + } + } + else { + // Image size from temp file + $image = @getimagesize($_FILES['file']['tmp_name']); + } + + if (!$image) { + $this->result->error = $this->interface->t('File is not an image.'); + return FALSE; + } + + $this->result->width = $image[0]; + $this->result->height = $image[1]; + $this->result->mime = $this->type; + break; + + case 'audio': + $allowed = array( + 'audio/mpeg' => 'mp3', + 'audio/mp3' => 'mp3', + 'audio/x-wav' => 'wav', + 'audio/wav' => 'wav', + //'application/ogg' => 'ogg', + 'audio/ogg' => 'ogg', + //'video/ogg' => 'ogg', + ); + if (!$this->check($allowed)) { + $this->result->error = $this->interface->t('Invalid audio file format. Use mp3 or wav.'); + return FALSE; + + } + + $this->result->mime = $this->type; + break; + + case 'video': + $allowed = array( + 'video/mp4' => 'mp4', + 'video/webm' => 'webm', + // 'application/ogg' => 'ogv', + 'video/ogg' => 'ogv', + ); + if (!$this->check($allowed)) { + $this->result->error = $this->interface->t('Invalid video file format. Use mp4 or webm.'); + return FALSE; + } + + $this->result->mime = $this->type; + break; + + case 'file': + // TODO: Try to get file extension for type and check that it matches the current extension. + $this->result->mime = $this->type; + } + + return TRUE; + } + + /** + * Get the type of the current file. + * + * @return string + */ + public function getType() { + return $this->field->type; + } + + /** + * Get the name of the current file. + * + * @return string + */ + public function getName() { + static $name; + + if (empty($name)) { + $name = uniqid($this->field->name . '-'); + + // Add extension to name + if (isset($this->data)) { + $name .= '.' . $this->extension; + } + else { + $matches = array(); + preg_match('/([a-z0-9]{1,})$/i', $_FILES['file']['name'], $matches); + if (isset($matches[0])) { + $name .= '.' . $matches[0]; + } + } + } + + return $name; + } + + /** + * Get file data if created from string. + * + * @return string|NULL + */ + public function getData() { + return (empty($this->data) ? NULL : $this->data); + } + + /** + * Print result from file processing. + */ + public function printResult() { + $this->result->path = $this->getType() . 's/' . $this->getName(); + + // text/plain is used to support IE + header('Cache-Control: no-cache'); + header('Content-type: text/plain; charset=utf-8'); + + print json_encode($this->result); + } +} diff --git a/html/moodle2/mod/hvp/editor/h5peditor-storage.interface.php b/html/moodle2/mod/hvp/editor/h5peditor-storage.interface.php new file mode 100755 index 0000000000..84874948b3 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/h5peditor-storage.interface.php @@ -0,0 +1,54 @@ +<?php + +/** + * A defined interface for the editor to communicate with the database of the + * web system. + */ +interface H5peditorStorage { + + /** + * Load language file(JSON) from database. + * This is used to translate the editor fields(title, description etc.) + * + * @param string $name The machine readable name of the library(content type) + * @param int $major Major part of version number + * @param int $minor Minor part of version number + * @param string $lang Language code + * @return string Translation in JSON format + */ + public function getLanguage($machineName, $majorVersion, $minorVersion, $language); + + /** + * "Callback" for mark the given file as a permanent file. + * Used when saving content that has new uploaded files. + * + * @param int $fileId + */ + public function keepFile($fileId); + + /** + * Decides which content types the editor should have. + * + * Two usecases: + * 1. No input, will list all the available content types. + * 2. Libraries supported are specified, load additional data and verify + * that the content types are available. Used by e.g. the Presentation Tool + * Editor that already knows which content types are supported in its + * slides. + * + * @param array $libraries List of library names + version to load info for + * @return array List of all libraries loaded + */ + public function getLibraries($libraries = NULL); + + /** + * Alter styles and scripts + * + * @param array $files + * List of files as objects with path and version as properties + * @param array $libraries + * List of libraries indexed by machineName with objects as values. The objects + * have majorVersion and minorVersion as properties. + */ + public function alterLibraryFiles(&$files, $libraries); +} diff --git a/html/moodle2/mod/hvp/editor/h5peditor.class.php b/html/moodle2/mod/hvp/editor/h5peditor.class.php new file mode 100755 index 0000000000..f45eba4da5 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/h5peditor.class.php @@ -0,0 +1,405 @@ +<?php + +class H5peditor { + + public static $styles = array( + 'libs/darkroom.css', + 'styles/css/application.css' + ); + public static $scripts = array( + 'scripts/h5peditor.js', + 'scripts/h5peditor-semantic-structure.js', + 'scripts/h5peditor-editor.js', + 'scripts/h5peditor-library-selector.js', + 'scripts/h5peditor-form.js', + 'scripts/h5peditor-text.js', + 'scripts/h5peditor-html.js', + 'scripts/h5peditor-number.js', + 'scripts/h5peditor-textarea.js', + 'scripts/h5peditor-file-uploader.js', + 'scripts/h5peditor-file.js', + 'scripts/h5peditor-image.js', + 'scripts/h5peditor-image-popup.js', + 'scripts/h5peditor-av.js', + 'scripts/h5peditor-group.js', + 'scripts/h5peditor-boolean.js', + 'scripts/h5peditor-list.js', + 'scripts/h5peditor-list-editor.js', + 'scripts/h5peditor-library.js', + 'scripts/h5peditor-library-list-cache.js', + 'scripts/h5peditor-select.js', + 'scripts/h5peditor-dimensions.js', + 'scripts/h5peditor-coordinates.js', + 'scripts/h5peditor-none.js', + 'ckeditor/ckeditor.js', + ); + private $h5p, $storage; + + /** + * Constructor for the core editor library. + * + * @param \H5PCore $h5p Instance of core + * @param \H5peditorStorage $storage Instance of h5peditor storage + */ + function __construct($h5p, $storage) { + $this->h5p = $h5p; + $this->storage = $storage; + } + + /** + * Get list of libraries. + * + * @return array + */ + public function getLibraries() { + if (isset($_POST['libraries'])) { + // Get details for the specified libraries. + $libraries = array(); + foreach ($_POST['libraries'] as $libraryName) { + $matches = array(); + preg_match_all('/(.+)\s(\d+)\.(\d+)$/', $libraryName, $matches); + if ($matches) { + $libraries[] = (object) array( + 'uberName' => $libraryName, + 'name' => $matches[1][0], + 'majorVersion' => $matches[2][0], + 'minorVersion' => $matches[3][0] + ); + } + } + } + + $libraries = $this->storage->getLibraries(!isset($libraries) ? NULL : $libraries); + + if ($this->h5p->development_mode & H5PDevelopment::MODE_LIBRARY) { + $devLibs = $this->h5p->h5pD->getLibraries(); + } + + for ($i = 0, $s = count($libraries); $i < $s; $i++) { + if (!empty($devLibs)) { + $lid = $libraries[$i]->name . ' ' . $libraries[$i]->majorVersion . '.' . $libraries[$i]->minorVersion; + if (isset($devLibs[$lid])) { + // Replace library with devlib + $libraries[$i] = (object) array( + 'uberName' => $lid, + 'name' => $devLibs[$lid]['machineName'], + 'title' => $devLibs[$lid]['title'], + 'majorVersion' => $devLibs[$lid]['majorVersion'], + 'minorVersion' => $devLibs[$lid]['minorVersion'], + 'runnable' => $devLibs[$lid]['runnable'], + 'restricted' => $libraries[$i]->restricted, + 'tutorialUrl' => $libraries[$i]->tutorialUrl, + 'isOld' => $libraries[$i]->isOld + ); + } + } + + // Some libraries rely on an LRS to work and must be enabled manually + if ($libraries[$i]->name === 'H5P.Questionnaire' && + !$this->h5p->h5pF->getOption('enable_lrs_content_types')) { + $libraries[$i]->restricted = TRUE; + } + } + + return json_encode($libraries); + } + + /** + * Move uploaded files, remove old files and update library usage. + * + * @param stdClass $content + * @param array $newLibrary + * @param array $newParameters + * @param array $oldLibrary + * @param array $oldParameters + */ + public function processParameters($content, $newLibrary, $newParameters, $oldLibrary = NULL, $oldParameters = NULL) { + $newFiles = array(); + $oldFiles = array(); + + // Keep track of current content ID (used when processing files) + $this->content = $content; + + // Find new libraries/content dependencies and files. + // Start by creating a fake library field to process. This way we get all the dependencies of the main library as well. + $field = (object) array( + 'type' => 'library' + ); + $libraryParams = (object) array( + 'library' => H5PCore::libraryToString($newLibrary), + 'params' => $newParameters + ); + $this->processField($field, $libraryParams, $newFiles); + + if ($oldLibrary !== NULL) { + // Find old files and libraries. + $this->processSemantics($oldFiles, $this->h5p->loadLibrarySemantics($oldLibrary['name'], $oldLibrary['majorVersion'], $oldLibrary['minorVersion']), $oldParameters); + + // Remove old files. + for ($i = 0, $s = count($oldFiles); $i < $s; $i++) { + if (!in_array($oldFiles[$i], $newFiles) && + preg_match('/^(\w+:\/\/|\.\.\/)/i', $oldFiles[$i]) === 0) { + $this->h5p->fs->removeContentFile($oldFiles[$i], $content); + // (optionally we could just have marked them as tmp files) + } + } + } + } + + /** + * Recursive function that moves the new files in to the h5p content folder and generates a list over the old files. + * Also locates all the librares. + * + * @param array $files + * @param array $libraries + * @param array $semantics + * @param array $params + */ + private function processSemantics(&$files, $semantics, &$params) { + for ($i = 0, $s = count($semantics); $i < $s; $i++) { + $field = $semantics[$i]; + if (!isset($params->{$field->name})) { + continue; + } + $this->processField($field, $params->{$field->name}, $files); + } + } + + /** + * Process a single field. + * + * @staticvar string $h5peditor_path + * @param object $field + * @param mixed $params + * @param array $files + */ + private function processField(&$field, &$params, &$files) { + switch ($field->type) { + case 'file': + case 'image': + if (isset($params->path)) { + $this->processFile($params, $files); + + // Process original image + if (isset($params->originalImage) && isset($params->originalImage->path)) { + $this->processFile($params->originalImage, $files); + } + } + break; + + case 'video': + case 'audio': + if (is_array($params)) { + for ($i = 0, $s = count($params); $i < $s; $i++) { + $this->processFile($params[$i], $files); + } + } + break; + + case 'library': + if (isset($params->library) && isset($params->params)) { + $library = H5PCore::libraryFromString($params->library); + $semantics = $this->h5p->loadLibrarySemantics($library['machineName'], $library['majorVersion'], $library['minorVersion']); + + // Process parameters for the library. + $this->processSemantics($files, $semantics, $params->params); + } + break; + + case 'group': + if (isset($params)) { + $isSubContent = isset($field->isSubContent) && $field->isSubContent == TRUE; + + if (count($field->fields) == 1 && !$isSubContent) { + $params = (object) array($field->fields[0]->name => $params); + } + $this->processSemantics($files, $field->fields, $params); + } + break; + + case 'list': + if (is_array($params)) { + for ($j = 0, $t = count($params); $j < $t; $j++) { + $this->processField($field->field, $params[$j], $files); + } + } + break; + } + } + + /** + * @param mixed $params + * @param array $files + */ + private function processFile(&$params, &$files) { + // File could be copied from another content folder. + $matches = array(); + if (preg_match($this->h5p->relativePathRegExp, $params->path, $matches)) { + + // Create a copy of the file + $this->h5p->fs->cloneContentFile($matches[5], $matches[4], $this->content); + + // Update Params with correct filename + $params->path = $matches[5]; + } + else { + // Check if file exists in content folder + $fileId = $this->h5p->fs->getContentFile($params->path, $this->content); + if ($fileId) { + // Mark the file as a keeper + $this->storage->keepFile($fileId); + } + else { + // File is not in content folder, try to copy it from the editor tmp dir + // to content folder. + $this->h5p->fs->cloneContentFile($params->path, 'editor', $this->content); + // (not removed in case someone has copied it) + // (will automatically be removed after 24 hours) + } + } + + $files[] = $params->path; + } + + /** + * TODO: Consider moving to core. + */ + public function getLibraryLanguage($machineName, $majorVersion, $minorVersion, $languageCode) { + if ($this->h5p->development_mode & H5PDevelopment::MODE_LIBRARY) { + // Try to get language development library first. + $language = $this->h5p->h5pD->getLanguage($machineName, $majorVersion, $minorVersion, $languageCode); + } + + if (isset($language) === FALSE) { + $language = $this->storage->getLanguage($machineName, $majorVersion, $minorVersion, $languageCode); + } + + return ($language === FALSE ? NULL : $language); + } + + /** + * Return all libraries used by the given editor library. + * + * @param string $machineName Library identfier part 1 + * @param int $majorVersion Library identfier part 2 + * @param int $minorVersion Library identfier part 3 + */ + public function findEditorLibraries($machineName, $majorVersion, $minorVersion) { + $library = $this->h5p->loadLibrary($machineName, $majorVersion, $minorVersion); + $dependencies = array(); + $this->h5p->findLibraryDependencies($dependencies, $library); + + // Order dependencies by weight + $orderedDependencies = array(); + for ($i = 1, $s = count($dependencies); $i <= $s; $i++) { + foreach ($dependencies as $dependency) { + if ($dependency['weight'] === $i && $dependency['type'] === 'editor') { + // Only load editor libraries. + $dependency['library']['id'] = $dependency['library']['libraryId']; + $orderedDependencies[$dependency['library']['libraryId']] = $dependency['library']; + break; + } + } + } + + return $orderedDependencies; + } + + /** + * Get all scripts, css and semantics data for a library + * + * @param string $machineName Library name + * @param int $majorVersion + * @param int $minorVersion + * @param string $prefix Optional part to add between URL and asset path + */ + public function getLibraryData($machineName, $majorVersion, $minorVersion, $languageCode, $prefix = '') { + $libraryData = new stdClass(); + + $libraries = $this->findEditorLibraries($machineName, $majorVersion, $minorVersion); + $libraryData->semantics = $this->h5p->loadLibrarySemantics($machineName, $majorVersion, $minorVersion); + $libraryData->language = $this->getLibraryLanguage($machineName, $majorVersion, $minorVersion, $languageCode); + + // Temporarily disable asset aggregation + $aggregateAssets = $this->h5p->aggregateAssets; + $this->h5p->aggregateAssets = FALSE; + // This is done to prevent files being loaded multiple times due to how + // the editor works. + + // Get list of JS and CSS files that belongs to the dependencies + $files = $this->h5p->getDependenciesFiles($libraries); + $this->storage->alterLibraryFiles($files, $libraries); + + // Restore asset aggregation setting + $this->h5p->aggregateAssets = $aggregateAssets; + + // Create base URL + $url = $this->h5p->url . $prefix; + + // Javascripts + if (!empty($files['scripts'])) { + foreach ($files['scripts'] as $script) { + if (preg_match ('/:\/\//', $script->path) === 1) { + // External file + $libraryData->javascript[$script->path . $script->version] = "\n" . file_get_contents($script->path); + } + else { + // Local file + $libraryData->javascript[$url . $script->path . $script->version] = "\n" . $this->h5p->fs->getContent($script->path); + } + } + } + + // Stylesheets + if (!empty($files['styles'])) { + foreach ($files['styles'] as $css) { + if (preg_match ('/:\/\//', $css->path) === 1) { + // External file + $libraryData->css[$css->path. $css->version] = file_get_contents($css->path); + } + else { + // Local file + H5peditor::buildCssPath(NULL, $url . dirname($css->path) . '/'); + $libraryData->css[$url . $css->path . $css->version] = preg_replace_callback('/url\([\'"]?(?![a-z]+:|\/+)([^\'")]+)[\'"]?\)/i', 'H5peditor::buildCssPath', $this->h5p->fs->getContent($css->path)); + } + } + } + + // Add translations for libraries. + foreach ($libraries as $library) { + $language = $this->getLibraryLanguage($library['machineName'], $library['majorVersion'], $library['minorVersion'], $languageCode); + if ($language !== NULL) { + $lang = '; H5PEditor.language["' . $library['machineName'] . '"] = ' . $language . ';'; + $libraryData->javascript[md5($lang)] = $lang; + } + } + + return json_encode($libraryData); + } + + /** + * This function will prefix all paths within a CSS file. + * Copied from Drupal 6. + * + * @staticvar type $_base + * @param type $matches + * @param type $base + * @return type + */ + public static function buildCssPath($matches, $base = NULL) { + static $_base; + // Store base path for preg_replace_callback. + if (isset($base)) { + $_base = $base; + } + + // Prefix with base and remove '../' segments where possible. + $path = $_base . $matches[1]; + $last = ''; + while ($path != $last) { + $last = $path; + $path = preg_replace('`(^|/)(?!\.\./)([^/]+)/\.\./`', '$1', $path); + } + return 'url('. $path .')'; + } +} diff --git a/html/moodle2/mod/hvp/editor/images/add.png b/html/moodle2/mod/hvp/editor/images/add.png new file mode 100755 index 0000000000..703e8132c8 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/images/add.png differ diff --git a/html/moodle2/mod/hvp/editor/images/binary-file.png b/html/moodle2/mod/hvp/editor/images/binary-file.png new file mode 100755 index 0000000000..69d2d2fd01 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/images/binary-file.png differ diff --git a/html/moodle2/mod/hvp/editor/images/collapse.png b/html/moodle2/mod/hvp/editor/images/collapse.png new file mode 100755 index 0000000000..eced95610b Binary files /dev/null and b/html/moodle2/mod/hvp/editor/images/collapse.png differ diff --git a/html/moodle2/mod/hvp/editor/images/down.png b/html/moodle2/mod/hvp/editor/images/down.png new file mode 100755 index 0000000000..b1d2783aa0 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/images/down.png differ diff --git a/html/moodle2/mod/hvp/editor/images/expand.png b/html/moodle2/mod/hvp/editor/images/expand.png new file mode 100755 index 0000000000..841742195b Binary files /dev/null and b/html/moodle2/mod/hvp/editor/images/expand.png differ diff --git a/html/moodle2/mod/hvp/editor/images/order.png b/html/moodle2/mod/hvp/editor/images/order.png new file mode 100755 index 0000000000..09edf0b323 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/images/order.png differ diff --git a/html/moodle2/mod/hvp/editor/images/remove.png b/html/moodle2/mod/hvp/editor/images/remove.png new file mode 100755 index 0000000000..39155ef4d9 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/images/remove.png differ diff --git a/html/moodle2/mod/hvp/editor/images/webm-file.png b/html/moodle2/mod/hvp/editor/images/webm-file.png new file mode 100755 index 0000000000..da54652728 Binary files /dev/null and b/html/moodle2/mod/hvp/editor/images/webm-file.png differ diff --git a/html/moodle2/mod/hvp/editor/language/de.js b/html/moodle2/mod/hvp/editor/language/de.js new file mode 100755 index 0000000000..5280fd89ca --- /dev/null +++ b/html/moodle2/mod/hvp/editor/language/de.js @@ -0,0 +1,61 @@ +H5PEditor.language.core = { + "missingTranslation": "[Fehlende \u00dcbersetzung :key]", + "loading": "L\u00e4dt :type, bitte warten...", + "selectLibrary": "Ausw\u00e4hlen der Bibliothek, die f\u00fcr den Inhalt verwendet werden soll.", + "unknownFieldPath": "\":path\" kann nicht gefunden werden.", + "notImageField": "\":path\" ist kein Bild.", + "notImageOrDimensionsField": "\":path\" ist kein Bild oder Dimensionsfeld.", + "requiredProperty": "Die :property wird ben\u00f6tigt und muss einen Wert besitzen.", + "onlyNumbers": "Der :property Wert kann nur Nummern beinhalten.", + "exceedsMax": "Der :property Wert \u00fcbersteigt das Maximum von :max.", + "belowMin": "Der :property Wert liegt unter dem Minimum von :min.", + "outOfStep": "Der :property Wert kann nur in Schritten von :step ge\u00e4ndert werden.", + "addFile": "Datei hinzuf\u00fcgen", + "removeFile": "Datei entfernen", + "confirmRemoval": "Diesen :type ganz sicher entfernen?", + "removeImage": "Bild entfernen", + "confirmImageRemoval": "Dies wird das Bild entfernen. Ganz sicher fortfahren?", + "changeFile": "Datei \u00e4ndern", + "changeLibrary": "Inhaltstyp \u00e4ndern?", + "semanticsError": "Semantischer Fehler: :error", + "missingProperty": "Im Feld :index fehlt :property property.", + "expandCollapse": "Erweitern\/Verkleinern", + "addEntity": ":entity hinzuf\u00fcgen", + "tooLong": "Wert des Feldes ist zu lang. Es sollte :max Buchstaben oder weniger beinhalten.", + "invalidFormat": "Der Feldwert beinhaltet ein ung\u00fcltiges Format oder verbotene Zeichen.", + "confirmChangeLibrary": "Wenn dies ausgef\u00fchrt wird, dann geht alles verloren, was mit dem aktuellen Inhaltstyp erstellt wurde. Ganz sicher den Inhaltstyp wechseln?", + "moreLibraries": "Nach <a href=\"http:\/\/h5p.org\/content-types-and-applications\" target=\"_blank\">more content types<\/a> auf h5p.org Ausschau halten", + "commonFields": "Einstellungen und Texte", + "commonFieldsDescription": "Hier k\u00f6nnen Einstellungen bearbeitet oder Texte \u00fcbersetzt werden, die in diesem Inhalt Verwendung finden.", + "uploading": "L\u00e4dt hoch, bitte warten...", + "noFollow": "Dem Feld \":path\" kann nicht gefolgt werden.", + "editCopyright": "Urheberrecht bearbeiten", + "close": "Schlie\u00dfen", + "tutorialAvailable": "Anleitung verf\u00fcgbar", + "editMode": "Bearbeitungsmodus", + "listLabel": "Liste", + "uploadError": "Datenuploadfehler", + "fileToLarge": "Die Datei, die hochgeladen werden soll, k\u00f6nnte zu gro\u00df sein.", + "noSemantics": "Fehler, das Formular des Inhaltstyps konnte nicht geladen werden.", + "editImage": "Bild bearbeiten", + "saveLabel": "Speichern", + "cancelLabel": "Abbrechen", + "resetToOriginalLabel": "Auf Original zur\u00fccksetzen", + "loadingImageEditor": "Bildeditor l\u00e4dt, bitte warten...", + "add": "Hinzuf\u00fcgen", + "unknownFileUploadError": "Unbekannter Fehler beim Dateiupload", + "selectFiletoUpload": "Datei zum Hochladen ausw\u00e4hlen", + "or": "oder", + "enterAudioUrl": "URL der Audiodatei eingeben", + "enterVideoUrl": "URL der Videodatei oder YouTube-Link eingeben", + "addVideoDescription": "H5P unterst\u00fctzt externe Videodateien im Format mp4, webm oder ogv, wie bei Vimeo Pro, und unterst\u00fctzt YouTube-Links.", + "insert": "Einf\u00fcgen", + "cancel": "Abbrechen", + "height": "H\u00f6he", + "width": "Breite", + "textField": "Textfeld", + "numberField": "Nummernfeld", + "orderItemUp": "Element nach vorne sortieren", + "orderItemDown": "Element nach hinten sortieren", + "removeItem": "Element entfernen" +}; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/language/en.js b/html/moodle2/mod/hvp/editor/language/en.js new file mode 100755 index 0000000000..48d722a575 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/language/en.js @@ -0,0 +1,63 @@ +H5PEditor.language.core = { + missingTranslation: '[Missing translation :key]', + loading: 'Loading, please wait...', + selectLibrary: 'Select the library you wish to use for your content.', + unknownFieldPath: 'Unable to find ":path".', + notImageField: '":path" is not an image.', + notImageOrDimensionsField: '":path" is not an image or dimensions field.', + requiredProperty: 'The :property is required and must have a value.', + onlyNumbers: 'The :property value can only contain numbers.', + exceedsMax: 'The :property value exceeds the maximum of :max.', + listExceedsMax: 'The list exceeds the maximum of :max items.', + belowMin: 'The :property value is below the minimum of :min.', + listBelowMin: 'The list needs at least :min items for the content to function properly.', + outOfStep: 'The :property value can only be changed in steps of :step.', + add: 'Add', + addFile: 'Add file', + removeFile: 'Remove file', + confirmRemoval: 'Are you sure you wish to remove this :type?', + removeImage: 'Remove image', + confirmImageRemoval: 'This will remove your image. Are you sure you wish to proceed?', + changeFile: 'Change file', + changeLibrary: 'Change content type?', + semanticsError: 'Semantics error: :error', + missingProperty: 'Field :index is missing its :property property.', + expandCollapse: 'Expand/Collapse', + addEntity: 'Add :entity', + tooLong: 'Field value is too long, should contain :max letters or less.', + invalidFormat: 'Field value contains an invalid format or characters that are forbidden.', + confirmChangeLibrary: 'By doing this you will lose all work done with the current content type. Are you sure you wish to change content type?', + moreLibraries: 'Look for <a href="http://h5p.org/content-types-and-applications" target="_blank">more content types</a> on h5p.org', + commonFields: 'Text overrides and translations', + commonFieldsDescription: 'Here you can edit settings or translate texts used in this content.', + uploading: 'Uploading, please wait...', + noFollow: 'Cannot follow field ":path".', + editCopyright: 'Edit copyright', + close: 'Close', + tutorialAvailable: 'Tutorial available', + editMode: 'Editing mode', + listLabel: 'List', + uploadError: 'File Upload Error', + fileToLarge: 'The file you are trying to upload might be too large.', + unknownFileUploadError: 'Unknown file upload error', + noSemantics: 'Error, could not load the content type form.', + editImage: 'Edit image', + saveLabel: 'Save', + cancelLabel: 'Cancel', + resetToOriginalLabel: 'Reset to original', + loadingImageEditor: 'Loading image editor, please wait...', + selectFiletoUpload: 'Select file to upload', + or: 'or', + enterAudioUrl: 'Enter audio source URL', + enterVideoUrl: 'Enter video source URL or YouTube link', + addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube links.', + insert: 'Insert', + cancel: 'Cancel', + height: 'height', + width: 'width', + textField: 'text field', + numberField: 'number field', + orderItemUp: 'Order item up', + orderItemDown: 'Order item down', + removeItem: 'Remove item' +}; diff --git a/html/moodle2/mod/hvp/editor/language/es.js b/html/moodle2/mod/hvp/editor/language/es.js new file mode 100755 index 0000000000..eb1a97cda6 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/language/es.js @@ -0,0 +1,63 @@ +H5PEditor.language.core = { + missingTranslation: '[Falta la traducción :key]', + loading: 'Cargando, por favor espera...', + selectLibrary: 'Selecciona la librería que quieres usar con tu contenido.', + unknownFieldPath: 'No se puede encontrar ":path".', + notImageField: '":path" no es una imagen.', + notImageOrDimensionsField: '":path" no es una imagen o un campo de dimensiones.', + requiredProperty: 'La :property es requerida y debe tener un valor.', + onlyNumbers: 'El valor de :property solo puede contener números.', + exceedsMax: 'El valor de :property excede el máximo de :max.', + listExceedsMax: 'The list exceeds the maximum of :max items.', + belowMin: 'El valor de :property excede el mínimo de :min.', + listBelowMin: 'The list needs at least :min items for the content to function properly.', + outOfStep: 'El valor de :property solo puede ser cambiado en pasos de :step.', + add: 'Add', + addFile: 'Añadir archivo', + removeFile: 'Eliminar archivo', + confirmRemoval: '¿Estás seguro de que quieres eliminar este :type?', + removeImage: 'Eliminar imagen', + confirmImageRemoval: 'Esto eliminará la imagen. ¿Seguro que desea continuar?', + changeFile: 'Cambiar archivo', + changeLibrary: 'Cambiar el tipo de contenido', + semanticsError: 'Error en semantics: :error', + missingProperty: 'El campo :index no contiene la propiedad :property.', + expandCollapse: 'Expandir/Colapsar', + addEntity: 'Añadir :entity', + tooLong: 'El valor del campo es demasiado largo, debería contener un máximo de :max lettras.', + invalidFormat: 'El valor del campo contiene un formato no válido o caracteres prohibidos.', + confirmChangeLibrary: 'Al hacer esto perderás todo el trabajo realizado con el tipo de contenido actual. ¿Estás seguro de que quieres cambiar el tipo de contenido?', + moreLibraries: 'Accede a <a href="http://h5p.org/content-types-and-applications" target="_blank">más tipos de contenido</a> en h5p.org', + commonFields: 'Parámetros y textos', + commonFieldsDescription: 'Aquí puedes editar parámetros o traducir textos utilizados en este contenido.', + uploading: 'Subiendo, por favor espera...', + noFollow: 'No se puede seguir el campo ":path".', + editCopyright: 'Editar copyright', + close: 'Cerrar', + tutorialAvailable: 'Tutorial disponible', + editMode: 'Modo de edición', + listLabel: 'Lista', + uploadError: 'Error en la subida del archivo', + fileToLarge: 'El archivo que intentas subir es demasiado grande.', + unknownFileUploadError: 'Unknown file upload error', + noSemantics: 'Error, no se ha podido cargar el formulario del tipo de contenido.', + editImage: 'Edit image', + saveLabel: 'Save', + cancelLabel: 'Cancel', + resetToOriginalLabel: 'Reset to original', + loadingImageEditor: 'Loading image editor, please wait...', + selectFiletoUpload: 'Select file to upload', + or: 'or', + enterAudioUrl: 'Enter audio source URL', + enterVideoUrl: 'Enter video source URL or YouTube link', + addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube links.', + insert: 'Insert', + cancel: 'Cancel', + height: 'height', + width: 'width', + textField: 'text field', + numberField: 'number field', + orderItemUp: 'Order item up', + orderItemDown: 'Order item down', + removeItem: 'Remove item' +}; diff --git a/html/moodle2/mod/hvp/editor/language/fr.js b/html/moodle2/mod/hvp/editor/language/fr.js new file mode 100755 index 0000000000..096f709557 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/language/fr.js @@ -0,0 +1,63 @@ +H5PEditor.language.core = { + missingTranslation: '[Traduction manquante :key]', + loading: 'Chargement en cours, merci de patienter...', + selectLibrary: 'Sélectionnez une activité pour votre exercice.', + unknownFieldPath: 'Impossible de trouver ":path".', + notImageField: '":path" n\'est pas une image.', + notImageOrDimensionsField: '":path" n est pas une image ou aux bonnes dimensions.', + requiredProperty: 'Le champ :property est obligatoire et ne peut être vide.', + onlyNumbers: 'Le champ :property ne peut contenir que des nombres.', + exceedsMax: 'La valeur du champ :property est supérieure au maximum de :max.', + listExceedsMax: 'The list exceeds the maximum of :max items.', + belowMin: 'La valeur du champ :property est inférieure au minimum de :min.', + listBelowMin: 'The list needs at least :min items for the content to function properly.', + outOfStep: 'La :property ne peut être effectuée que par étape :step.', + add: 'Ajouter', + addFile: 'Ajouter un fichier', + removeFile: 'Supprimer un fichier', + confirmRemoval: 'Voulez-vous vraiment supprimer :type&nbsp;?', + removeImage: 'Supprimer l\'image', + confirmImageRemoval: 'Votre image va être supprimée. Êtes- vous sûr de vouloir continuer&nbsp;?', + changeFile: 'Changer le fichier', + changeLibrary: 'Changer le type de contenu', + semanticsError: 'Erreur de langue: :error', + missingProperty: 'Le champ :index ne comporte pas la mention :property.', + expandCollapse: 'Dérouler/Enrouler', + addEntity: 'Ajouter :entity', + tooLong: 'Ce mot est trop long, il ne peut comporter que :max lettres ou moins.', + invalidFormat: 'Ce champ contient un format ou un caractère invalide.', + confirmChangeLibrary: 'Etes-vous certain de vouloir passer à une autre activité&nbsp;?', + moreLibraries: 'Visitez <a href="http://h5p.org/content-types-and-applications" target="_blank"> h5p.org pour plus de contenus</a>', + commonFields: 'Options et textes', + commonFieldsDescription: 'Vous pouvez ici éditer les options et les textes.', + uploading: 'Chargement en cours...', + noFollow: 'Impossible de suivre le champ ":path".', + editCopyright: 'Editer le copyright', + close: 'Fermer', + tutorialAvailable: 'Tutoriel disponible', + editMode: 'Mode de rédaction', + listLabel: 'Liste', + uploadError: 'Erreur pendant l\'envoi du fichier', + fileToLarge: 'Le fichier que vous envoyez est trop lourd.', + unknownFileUploadError: 'Unknown file upload error', + noSemantics: 'Erreur, impossible de charger ce type de contenu.', + editImage: 'Editer l\'image', + saveLabel: 'Enregistrer', + cancelLabel: 'Annuler', + resetToOriginalLabel: 'Réinitialiser', + loadingImageEditor: 'Editeur d\'image en cours de chargement, patientez...', + selectFiletoUpload: 'Choisissez le fichier à charger', + or: 'ou', + enterAudioUrl: 'Entrez l\'URL de la source audio', + enterVideoUrl: 'Entrez l\'URL de la source vidéo ou du lien YouTube', + addVideoDescription: 'H5P supporte toutes les sources vidéo externes aux fomats mp4, webm ou ogv, tels que Vimeo Pro, ainsi que les liens YouTube.', + insert: 'Insérer', + cancel: 'Annuler', + height: 'hauteur', + width: 'largeur', + textField: 'texte', + numberField: 'numérique', + orderItemUp: 'Order item up', + orderItemDown: 'Order item down', + removeItem: 'Remove item' +}; diff --git a/html/moodle2/mod/hvp/editor/language/it.js b/html/moodle2/mod/hvp/editor/language/it.js new file mode 100755 index 0000000000..f7cf7e441c --- /dev/null +++ b/html/moodle2/mod/hvp/editor/language/it.js @@ -0,0 +1,63 @@ +H5PEditor.language.core = { + missingTranslation: "[Traduzione mancante :key]", + loading: "Caricamento, si prega di attendere...", + selectLibrary: "Seleziona la libreria che userai per i tuoi contenuti.", + unknownFieldPath: "Impossibibile trovare :path.", + notImageField: ":path non è un'immagine.", + notImageOrDimensionsField: ":path non è un'immagine o dimensioni campo.", + requiredProperty: ":property è richiesta e deve avere un valore.", + onlyNumbers: "Il valore di :property può contenere solo numeri.", + exceedsMax: "Il valore di :property eccede il massimo di :max.", + listExceedsMax: 'The list exceeds the maximum of :max items.', + belowMin: "Il valore di :property eccede il minimo di :min.", + listBelowMin: 'The list needs at least :min items for the content to function properly.', + outOfStep: "Il valore di :property può essere modificato solo negli step di :step.", + add: 'Add', + addFile: "Aggiungi file", + removeFile: "Rimuovi file", + confirmRemoval: "Sei sicuro di voler rimuovere questo :type?", + removeImage: 'Rimuovi immagine', + confirmImageRemoval: 'Questo rimuoverà l\'immagine . Sei sicuro di voler procedere ?', + changeFile: "Cambia file", + changeLibrary: 'Cambiare tipo di contenuto', + semanticsError: "Errore semantico: :error", + missingProperty: "Nel campo :index manca la sua proprietà :property.", + expandCollapse: "Espandi/Collassa", + addEntity: "Aggiungi :entity", + tooLong: "Il valore del campo è troppo lungo, dovrebbe contenere al massimo :max lettere.", + invalidFormat: "Il valore del campo contiene un formato non valido o caratteri non consentiti.", + confirmChangeLibrary: "Sei sicuro di voler cambiare libreria?", + moreLibraries: "Cerca <a href=\"http://h5p.org/content-types-and-applications\" target=\"_blank\">più tipi di contentuto</a> su h5p.org", + commonFields: "Impostazioni e testi", + commonFieldsDescription: "Da qui puoi modificare le impostazioni o tradurre testi utilizzati in questo contenuto.", + uploading: "Caricamento, si prega di attendere...", + noFollow: "Impossibile seguire il campo :path.", + editCopyright: "Modifica copyright", + close: "Chiudi", + tutorialAvailable: "Tutorial disponibile", + editMode: "Modalità modifica", + listLabel: "Lista", + uploadError: 'File Upload Error', + fileToLarge: 'The file you are trying to upload might be too large.', + unknownFileUploadError: 'Unknown file upload error', + noSemantics: 'Error, could not load the content type form.', + editImage: 'Edit image', + saveLabel: 'Save', + cancelLabel: 'Cancel', + resetToOriginalLabel: 'Reset to original', + loadingImageEditor: 'Loading image editor, please wait...', + selectFiletoUpload: 'Select file to upload', + or: 'or', + enterAudioUrl: 'Enter audio source URL', + enterVideoUrl: 'Enter video source URL or YouTube link', + addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube links.', + insert: 'Insert', + cancel: 'Cancel', + height: 'height', + width: 'width', + textField: 'text field', + numberField: 'number field', + orderItemUp: 'Order item up', + orderItemDown: 'Order item down', + removeItem: 'Remove item' +}; diff --git a/html/moodle2/mod/hvp/editor/language/nb.js b/html/moodle2/mod/hvp/editor/language/nb.js new file mode 100755 index 0000000000..7913c75549 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/language/nb.js @@ -0,0 +1,63 @@ +H5PEditor.language.core = { + missingTranslation: '[Mangler oversettelse :key]', + loading: 'Laster, vennligst vent...', + selectLibrary: 'Velg biblioteket du ønsker å bruke for innholdet ditt.', + unknownFieldPath: 'Kan ikke finne ":path".', + notImageField: '":path" er ikke et bilde.', + notImageOrDimensionsField: '":path" er verken et bilde- eller dimensjonsfelt.', + requiredProperty: '":property" er påkrevd og må ha en verdi.', + onlyNumbers: '":property" kan bare innholde tall.', + exceedsMax: '":property" overstiger maksverdien på :max.', + listExceedsMax: 'Antallet elementer i listen overstiger maksantallet på :max elementer.', + belowMin: '":property" er mindre enn minimumsverdien på :min.', + listBelowMin: 'Listen trenger minst :min elementer for at innholdet skal virke.', + outOfStep: '":property" kan bare endres i steg på :step.', + add: 'Legg til', + addFile: 'Legg til fil', + removeFile: 'Fjern fil', + confirmRemoval: 'Er du sikker på at du ønsker å fjerne denne :type?', + removeImage: 'Fjern bilde', + confirmImageRemoval: 'Er du sikker på at du ønsker å fjerne dette bildet?', + changeFile: 'Bytt fil', + changeLibrary: 'Endre innholdstype', + semanticsError: 'Semantikkfeil: :error', + missingProperty: 'Feltet :index mangler :property attributten sin.', + expandCollapse: 'Utvid/Slå sammen', + addEntity: 'Legg til :entity', + tooLong: 'Feltets verdi er for lang, den må være på :max tegn eller mindre.', + invalidFormat: 'Feltets verdi er på et ugyldig format eller bruker ulovlige tegn.', + confirmChangeLibrary: 'Ved å gjøre dette mister du alt arbeid gjort med nåværende innholdstype. Er du sikker på at du ønsker å bytte innholdstype?', + moreLibraries: 'Se etter <a href="http://h5p.org/content-types-and-applications" target="_blank">flere innholdstyper</a> på h5p.org', + commonFields: 'Innstillinger og tekster', + commonFieldsDescription: 'Her kan du redigere innstillinger eller oversette tekster som brukes i dette innholdet.', + uploading: 'Laster opp fil, vennligst vent...', + noFollow: 'Kunne ikke følge feltet ":path".', + editCopyright: 'Rediger opphavsrett', + close: 'Lukk', + tutorialAvailable: 'Veiledning tilgjengelig', + editMode: 'Redigeringsmodus', + listLabel: 'Liste', + uploadError: 'Filopplasting feilet', + fileToLarge: 'Filen du prøver å laste opp kan være for stor.', + unknownFileUploadError: 'Ukjent filopplastingsfeil', + noSemantics: 'Feil, kunne ikke laste skjemaet for innholdstypen.', + editImage: 'Rediger bilde', + saveLabel: 'Lagre', + cancelLabel: 'Avbryt', + resetToOriginalLabel: 'Tilbakestill bilde', + loadingImageEditor: 'Laster inn bilderedigering, vennligst vent...', + selectFiletoUpload: 'Velg fil som skal lastes opp', + or: 'eller', + enterAudioUrl: 'Skriv inn nettadresse til lydkilde', + enterVideoUrl: 'Skriv inn nettadresse til videokilde eller YouTube-lenke', + addVideoDescription: 'H5P støtter alle eksterne videokilder på formatene mp4, webm eller ogv, slik som Vimeo Pro, og har støtte for YouTube-lenker.', + insert: 'Sett inn', + cancel: 'Avbryt', + height: 'Høyde', + width: 'Bredde', + textField: 'Tekstfelt', + numberField: 'Nummerfelt', + orderItemUp: 'Flytt element opp', + orderItemDown: 'Flytt element ned', + removeItem: 'Fjern element' +}; diff --git a/html/moodle2/mod/hvp/editor/language/nl.js b/html/moodle2/mod/hvp/editor/language/nl.js new file mode 100755 index 0000000000..2ec7836732 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/language/nl.js @@ -0,0 +1,63 @@ +H5PEditor.language.core = { + missingTranslation: '[Vertaling ontbreekt :key]', + loading: 'Laden, wachten alstublieft ...', + selectLibrary: 'Selecteer de library die je wilt gebruiken voor je content.', + unknownFieldPath: 'Kon ":path" niet vinden.', + notImageField: '":path" is geen afbeelding.', + notImageOrDimensionsField: '":path" is geen afbeelding of een veld voor afmetingen.', + requiredProperty: 'De :property is vereist en moet een waarde hebben.', + onlyNumbers: 'De :property waarde mag alleen cijfers bevatten.', + exceedsMax: 'De :property waarde is hoger dan het maximum :max.', + listExceedsMax: 'De lijst is groter dan het maximum van :max items.', + belowMin: 'De :property waarde is lager dan het minimum :min.', + listBelowMin: 'De lijst moet ten minste :min items bevatten voor het correct werken van de content.', + outOfStep: 'De :property waarde kan alleen worden gewijzigd in stappen van :step.', + add: 'Toevoegen', + addFile: 'Voeg bestand toe', + removeFile: 'Verwijder bestand', + confirmRemoval: 'Weet je zeker dat je dit :type wilt verwijderen?', + removeImage: 'Verwijder afbeelding', + confirmImageRemoval: 'Hiermee wordt je afbeelding verwijderd. Weet je zeker dat je wilt verdergaan?', + changeFile: 'Wijzig bestand', + changeLibrary: 'Content type wijzigen?', + semanticsError: 'Semantics fout: :error', + missingProperty: 'Veld :index mist :property eigenschap.', + expandCollapse: 'Uitvouwen/Invouwen', + addEntity: 'Voeg :entity toe', + tooLong: 'Veldwaarde is te lang, mag :max letters of minder bevatten.', + invalidFormat: 'Veldwaarde bevat een ongeldig format of karakters die verboden zijn.', + confirmChangeLibrary: 'Hierdoor verlies je al het werk dat je met het huidige content type hebt gedaan. Weet je zeker dat je het content type wilt wijzigen?', + moreLibraries: 'Vind <a href="http://h5p.org/content-types-and-applications" target="_blank">meer content types</a> op h5p.org', + commonFields: 'Tekst overschrijven en vertalingen', + commonFieldsDescription: 'Hier kun je instellingen bewerken of in dit content type gebruikte teksten vertalen.', + uploading: 'Uploaden, wachten alstublieft ...', + noFollow: 'Kan veld ":path" niet volgen.', + editCopyright: 'Copyright bewerken', + close: 'Sluiten', + tutorialAvailable: 'Tutorial beschikbaar', + editMode: 'Bewerkmodus', + listLabel: 'Lijst', + uploadError: 'Fout bij uploaden bestand', + fileToLarge: 'Het bestand dat je probeert te uploaden kan te groot zijn.', + unknownFileUploadError: 'Onbekende fout bij uploaden bestand', + noSemantics: 'Fout, kon het content type formulier niet laden.', + editImage: 'Afbeelding bewerken', + saveLabel: 'Opslaan', + cancelLabel: 'Annuleren', + resetToOriginalLabel: 'Terugzetten naar oorspronkelijk', + loadingImageEditor: 'Afbeeldingseditor laden, wachten alstublieft ...', + selectFiletoUpload: 'Selecteer bestand om te uploaden', + or: 'of', + enterAudioUrl: 'Voer audio bron URL in', + enterVideoUrl: 'Voer video bron URL of YouTube link in', + addVideoDescription: 'H5P ondersteunt alle externe videobronnen met format mp4, webm of ogv, zoals Vimeo Pro, en biedt ondersteuning voor YouTube links.', + insert: 'Invoegen', + cancel: 'Annuleren', + height: 'hoogte', + width: 'breedte', + textField: 'tekstveld', + numberField: 'getalveld', + orderItemUp: 'Order item up', + orderItemDown: 'Order item down', + removeItem: 'Item verwijderen' +}; diff --git a/html/moodle2/mod/hvp/editor/language/nn.js b/html/moodle2/mod/hvp/editor/language/nn.js new file mode 100755 index 0000000000..8710f80ebe --- /dev/null +++ b/html/moodle2/mod/hvp/editor/language/nn.js @@ -0,0 +1,63 @@ +H5PEditor.language.core = { + missingTranslation: '[Manglar oversettelse :key]', + loading: 'Lastar, ver venleg og vent...', + selectLibrary: 'Vel biblioteket du ønskjer å bruke for innhaldet ditt.', + unknownFieldPath: 'Kan ikkje finne ":path".', + notImageField: '":path" er ikkje eit bilete.', + notImageOrDimensionsField: '":path" er korkje eit bilete- eller dimensjonsfelt.', + requiredProperty: '":property" er påkravd og må ha ein verdi.', + onlyNumbers: '":property" kan berre innhalde tal.', + exceedsMax: '":property" overstig maksverdien på :max.', + listExceedsMax: 'Antallet elementer i listen overstiger maksantallet på :max elementer.', + belowMin: '":property" er mindre enn minimumsverdien på :min.', + listBelowMin: 'Listen trenger minst :min elementer for at innholdet skal virke.', + outOfStep: '":property" kan berre endrast i steg på :step.', + add: 'Legg til', + addFile: 'Legg til fil', + removeFile: 'Fjern fil', + confirmRemoval: 'Er du sikker på at du ønskjer å fjerne denne :type?', + removeImage: 'Fjern bilde', + confirmImageRemoval: 'Er du sikker på at du ønskjer å fjerne dette bildet?', + changeFile: 'Bytt fil', + changeLibrary: 'Endre innholdstype', + semanticsError: 'Semantikkfeil: :error', + missingProperty: 'Feltet :index manglar :property attributten sin.', + expandCollapse: 'Utvid/Slå saman', + addEntity: 'Legg til :entity', + tooLong: 'Feltets verdi er for lang, den må vere på :max tegn eller mindre.', + invalidFormat: 'Feltets verdi er på eit ugyldig format eller bruker ulovlege tegn.', + confirmChangeLibrary: 'Gjør du dette mister du alt arbeid gjort med nåværande innhaldstype. Er du sikker på at du ønskjer å byte innhaldstype?', + moreLibraries: 'Sjå etter <a href="http://h5p.org/content-types-and-applications" target="_blank">fleir innhaldstypar</a> på h5p.org', + commonFields: 'Innstillinger og tekstar', + commonFieldsDescription: 'Her kan du redigere innstillinger eller oversette tekstar som brukast i dette innhaldet.', + uploading: 'Lastar opp fil, ver venleg og vent...', + noFollow: 'Kunne ikkje følge feltet ":path".', + editCopyright: 'Rediger opphavsrett', + close: 'Lukk', + tutorialAvailable: 'Veiledning tilgjengelig', + editMode: 'Redigeringsmodus', + listLabel: 'Liste', + uploadError: 'Filopplasting feilet', + fileToLarge: 'Filen du prøver å laste opp kan være for stor.', + unknownFileUploadError: 'Ukjent filopplastingsfeil', + noSemantics: 'Feil, kunne ikke laste skjemaet for innholdstypen.', + editImage: 'Rediger bilete', + saveLabel: 'Lagre', + cancelLabel: 'Avbryt', + resetToOriginalLabel: 'Tilbakestill bilde', + loadingImageEditor: 'Laster inn bilderedigering, vennligst vent...', + selectFiletoUpload: 'Velg fil som skal lastes opp', + or: 'eller', + enterAudioUrl: 'Skriv inn nettadresse til lydkilde', + enterVideoUrl: 'Skriv inn nettadresse til videokilde eller YouTube-lenke', + addVideoDescription: 'H5P støtter alle eksterne videokilder på formatene mp4, webm eller ogv, slik som Vimeo Pro, og har støtte for YouTube-lenker.', + insert: 'Sett inn', + cancel: 'Avbryt', + height: 'Høyde', + width: 'Bredde', + textField: 'Tekstfelt', + numberField: 'Nummerfelt', + orderItemUp: 'Flytt element opp', + orderItemDown: 'Flytt element ned', + removeItem: 'Fjern element' +}; diff --git a/html/moodle2/mod/hvp/editor/language/pl.js b/html/moodle2/mod/hvp/editor/language/pl.js new file mode 100755 index 0000000000..8171298520 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/language/pl.js @@ -0,0 +1,63 @@ +H5PEditor.language.core = { + missingTranslation: '[Brakuje tłumaczenia :key]', + loading: 'Trwa ładowanie: proszę czekać...', + selectLibrary: 'Wybierz rodzaj zawartości, którą chcesz edytować.', + unknownFieldPath: 'Problem ze znalezieniem ":path".', + notImageField: '":path" nie jest zdjęciem', + notImageOrDimensionsField: '":path" is not an image or dimensions field.', + requiredProperty: 'The :property is required and must have a value.', + onlyNumbers: 'The :property value can only contain numbers.', + exceedsMax: 'The :property value exceeds the maximum of :max.', + listExceedsMax: 'The list exceeds the maximum of :max items.', + belowMin: 'The :property value is below the minimum of :min.', + listBelowMin: 'The list needs at least :min items for the content to function properly.', + outOfStep: 'The :property value can only be changed in steps of :step.', + add: 'Add', + addFile: 'Dodaj plik', + removeFile: 'Usuń plik', + confirmRemoval: 'Czy jesteś pewny, że chcesz to usunąć? :type?', + removeImage: 'Remove image', + confirmImageRemoval: 'This will remove your image. Are you sure you wish to proceed?', + changeFile: 'Zmień pik', + changeLibrary: 'Change content type?', + semanticsError: 'Semantics error: :error', + missingProperty: 'Field :index is missing its :property property.', + expandCollapse: 'Rozwiń', + addEntity: 'Add :entity', + tooLong: 'Field value is too long, should contain :max letters or less.', + invalidFormat: 'Field value contains an invalid format or characters that are forbidden.', + confirmChangeLibrary: 'Utracisz dotychszczas zapisaną zwartość. Czy jesteś pewny że chcesz to zrobić?', + moreLibraries: 'Look for <a href="http://h5p.org/content-types-and-applications" target="_blank">more content types</a> on h5p.org', + commonFields: 'Ustawienia oraz tekst', + commonFieldsDescription: 'Tutaj możesz etydować ustawienia i przetłumaczyć zawartość tego elementu', + uploading: 'Wrzucanie pliku na serwer, proszę czekać.', + noFollow: 'Cannot follow field ":path".', + editCopyright: 'Edytuj prawa autorskie', + close: 'Zamknij', + tutorialAvailable: 'Dostępny poradnik', + editMode: 'Tryb edycji', + listLabel: 'Lista', + uploadError: 'Niepowodzenie podczas wrzucania pliku', + fileToLarge: 'Plik, który próbujesz wrzucić jest zbyt duży', + unknownFileUploadError: 'Unknown file upload error', + noSemantics: 'Błąd, nie można wczytać tej zawartości.', + editImage: 'Edytuj zdjęcie', + saveLabel: 'Zapisz', + cancelLabel: 'Anuluj', + resetToOriginalLabel: 'Przywróć orygniał', + loadingImageEditor: 'Ładowanie edytora zdjęć, proszę czekać.', + selectFiletoUpload: 'Select file to upload', + or: 'or', + enterAudioUrl: 'Enter audio source URL', + enterVideoUrl: 'Enter video source URL or YouTube link', + addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube links.', + insert: 'Insert', + cancel: 'Cancel', + height: 'height', + width: 'width', + textField: 'text field', + numberField: 'number field', + orderItemUp: 'Order item up', + orderItemDown: 'Order item down', + removeItem: 'Remove item' +}; diff --git a/html/moodle2/mod/hvp/editor/language/tr.js b/html/moodle2/mod/hvp/editor/language/tr.js new file mode 100755 index 0000000000..701f3975d2 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/language/tr.js @@ -0,0 +1,63 @@ +H5PEditor.language.core = { + missingTranslation: '[Eksik çeviri :key]', + loading: ':type yükleniyor, bekleyin ...', + selectLibrary: 'İçeriğiniz için kullanmak istediğiniz kitaplığı seçin.', + unknownFieldPath: '":path" bulunamadı.', + notImageField: '":path" resim değil.', + notImageOrDimensionsField: '":path" resim ya da boyut alanı değil.', + requiredProperty: ':property gerekli ve bir değeri olmalı.', + onlyNumbers: ':property değeri yalnızca sayı içerebilir.', + exceedsMax: ':property değeri :max değerini aşıyor.', + listExceedsMax: 'The list exceeds the maximum of :max items.', + belowMin: ':property değeri :min değerinin altında.', + listBelowMin: 'The list needs at least :min items for the content to function properly.', + outOfStep: ':property değeri yalnızca :step aşamalarıyla değiştirilebilir.', + add: 'Add', + addFile: 'Dosya ekle', + removeFile: 'Dosya kaldır', + confirmRemoval: ':type kaldırılacak, emin misiniz?', + removeImage: 'Resmi kaldır', + confirmImageRemoval: 'Resim kaldırılacak. Devam etmek istediğinize emin misiniz?', + changeFile: 'Dosyayı değiştir', + changeLibrary: 'İçerik türü değiştirilsin mi?', + semanticsError: 'Semantik hata: :error', + missingProperty: ':index alanı :property değerinde eksik.', + expandCollapse: 'Genişlet/Daralt', + addEntity: ':entity ekle', + tooLong: 'Alan değeri çok uzun; en fazla :max harf ya da daha azı olmalı.', + invalidFormat: 'Alan değerinde izin verilmeyen geçersiz bir format ya da harf var.', + confirmChangeLibrary: 'Bunu yaptığınızda mevcut içerik tipiyle yapılmış tüm çalışmanızı yitireceksiniz. İçerik tipini değiştirmek istediğinize emin misiniz?', + moreLibraries: 'h5p.org adresinde <a href="http://h5p.org/content-types-and-applications" target="_blank">daha fazla içerik tipleri</a> ara', + commonFields: 'Ayarlar ve metinler', + commonFieldsDescription: 'Burada, bu içerikte kullanılan ayarları düzenleyebilir ya da metinleri çevirebilirsiniz.', + uploading: 'Yükleniyor, bekleyin ...', + noFollow: '":path" alanı izlenemedi.', + editCopyright: 'Telif hakkını düzenle', + close: 'Kapat', + tutorialAvailable: 'Kullanma yönergesi mevcut', + editMode: 'Düzenleme modu', + listLabel: 'Liste', + uploadError: 'Dosya Yükleme Hatası', + fileToLarge: 'Yüklemeye çalıştığınız dosya çok büyük olabilir.', + unknownFileUploadError: 'Bilinmeyen dosya yükleme hatası', + noSemantics: 'Hata; içerik türü formu yüklenemedi.', + editImage: 'Resmi düzenle', + saveLabel: 'Kaydet', + cancelLabel: 'İptal', + resetToOriginalLabel: 'Özgün biçimine sıfırla', + loadingImageEditor: 'Resim düzenleyici yükleniyor, bekleyin ...', + selectFiletoUpload: 'Select file to upload', + or: 'or', + enterAudioUrl: 'Enter audio source URL', + enterVideoUrl: 'Enter video source URL or YouTube link', + addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube links.', + insert: 'Insert', + cancel: 'Cancel', + height: 'height', + width: 'width', + textField: 'text field', + numberField: 'number field', + orderItemUp: 'Order item up', + orderItemDown: 'Order item down', + removeItem: 'Remove item' +}; diff --git a/html/moodle2/mod/hvp/editor/libs/darkroom.css b/html/moodle2/mod/hvp/editor/libs/darkroom.css new file mode 100755 index 0000000000..fba8d44a2b --- /dev/null +++ b/html/moodle2/mod/hvp/editor/libs/darkroom.css @@ -0,0 +1 @@ +.darkroom-container{position:relative}.darkroom-image-container{top:0;left:0}.darkroom-toolbar{display:block;position:absolute;top:-45px;left:0;background:#444;height:40px;min-width:40px;z-index:99;border-radius:2px;white-space:nowrap;padding:0 5px}.darkroom-toolbar:before{content:"";position:absolute;bottom:-7px;left:20px;width:0;height:0;border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #444}.darkroom-button-group{display:inline-block;margin:0;padding:0}.darkroom-button-group:last-child{border-right:none}.darkroom-button{box-sizing:border-box;background:transparent;border:none;outline:none;padding:2px 0 0 0;width:40px;height:40px}.darkroom-button:hover{cursor:pointer;background:#555}.darkroom-button:active{cursor:pointer;background:#333}.darkroom-button:disabled .darkroom-icon{fill:#666}.darkroom-button:disabled:hover{cursor:default;background:transparent}.darkroom-button.darkroom-button-active .darkroom-icon{fill:#33b5e5}.darkroom-button.darkroom-button-hidden{display:none}.darkroom-button.darkroom-button-success .darkroom-icon{fill:#99cc00}.darkroom-button.darkroom-button-warning .darkroom-icon{fill:#FFBB33}.darkroom-button.darkroom-button-danger .darkroom-icon{fill:#FF4444}.darkroom-icon{width:24px;height:24px;fill:#fff} diff --git a/html/moodle2/mod/hvp/editor/libs/darkroom.js b/html/moodle2/mod/hvp/editor/libs/darkroom.js new file mode 100755 index 0000000000..1d5a0efafc --- /dev/null +++ b/html/moodle2/mod/hvp/editor/libs/darkroom.js @@ -0,0 +1 @@ +!function(){"use strict";var element=document.createElement("div");element.id="darkroom-icons",element.style.height=0,element.style.width=0,element.style.position="absolute",element.style.visibility="hidden",element.innerHTML='<!-- inject:svg --><svg xmlns="http://www.w3.org/2000/svg"><symbol id="close" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/><path d="M0 0h24v24H0z" fill="none"/></symbol><symbol id="crop" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M17 15h2V7c0-1.1-.9-2-2-2H9v2h8v8zM7 17V1H5v4H1v2h4v10c0 1.1.9 2 2 2h10v4h2v-4h4v-2H7z"/></symbol><symbol id="done" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/></symbol><symbol id="redo" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16a8.002 8.002 0 0 1 7.6-5.5c1.95 0 3.73.72 5.12 1.88L13 16h9V7l-3.6 3.6z"/></symbol><symbol id="rotate-left" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M7.11 8.53L5.7 7.11C4.8 8.27 4.24 9.61 4.07 11h2.02c.14-.87.49-1.72 1.02-2.47zM6.09 13H4.07c.17 1.39.72 2.73 1.62 3.89l1.41-1.42c-.52-.75-.87-1.59-1.01-2.47zm1.01 5.32c1.16.9 2.51 1.44 3.9 1.61V17.9c-.87-.15-1.71-.49-2.46-1.03L7.1 18.32zM13 4.07V1L8.45 5.55 13 10V6.09c2.84.48 5 2.94 5 5.91s-2.16 5.43-5 5.91v2.02c3.95-.49 7-3.85 7-7.93s-3.05-7.44-7-7.93z"/></symbol><symbol id="rotate-right" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M15.55 5.55L11 1v3.07C7.06 4.56 4 7.92 4 12s3.05 7.44 7 7.93v-2.02c-2.84-.48-5-2.94-5-5.91s2.16-5.43 5-5.91V10l4.55-4.45zM19.93 11a7.906 7.906 0 0 0-1.62-3.89l-1.42 1.42c.54.75.88 1.6 1.02 2.47h2.02zM13 17.9v2.02c1.39-.17 2.74-.71 3.9-1.61l-1.44-1.44c-.75.54-1.59.89-2.46 1.03zm3.89-2.42l1.42 1.41c.9-1.16 1.45-2.5 1.62-3.89h-2.02c-.14.87-.48 1.72-1.02 2.48z"/></symbol><symbol id="save" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M17 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z"/></symbol><symbol id="undo" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z"/></symbol></svg><!-- endinject -->',document.body.appendChild(element)}(),function(){"use strict";function Darkroom(element,options,plugins){return this.constructor(element,options,plugins)}window.Darkroom=Darkroom,Darkroom.plugins=[],Darkroom.prototype={containerElement:null,canvas:null,image:null,sourceCanvas:null,sourceImage:null,originalImageElement:null,transformations:[],defaults:{minWidth:null,minHeight:null,maxWidth:null,maxHeight:null,ratio:null,backgroundColor:"#fff",plugins:{},initialize:function(){}},plugins:{},options:{},constructor:function(element,options,plugins){if(this.options=Darkroom.Utils.extend(options,this.defaults),"string"==typeof element&&(element=document.querySelector(element)),null!==element){var image=new Image;image.onload=function(){this._initializeDOM(element),this._initializeImage(),this._initializePlugins(Darkroom.plugins),this.refresh(function(){this.options.initialize.bind(this).call()}.bind(this))}.bind(this),image.src=element.src}},selfDestroy:function(){var container=this.containerElement,image=new Image;image.onload=function(){container.parentNode.replaceChild(image,container)},image.src=this.sourceImage.toDataURL()},addEventListener:function(eventName,callback){var el=this.canvas.getElement();el.addEventListener?el.addEventListener(eventName,callback):el.attachEvent&&el.attachEvent("on"+eventName,callback)},dispatchEvent:function(eventName){var event=document.createEvent("Event");event.initEvent(eventName,!0,!0),this.canvas.getElement().dispatchEvent(event)},refresh:function(next){var clone=new Image;clone.onload=function(){this._replaceCurrentImage(new fabric.Image(clone)),next&&next()}.bind(this),clone.src=this.sourceImage.toDataURL()},_replaceCurrentImage:function(newImage){this.image&&this.image.remove(),this.image=newImage,this.image.selectable=!1;var viewport=Darkroom.Utils.computeImageViewPort(this.image),canvasWidth=viewport.width,canvasHeight=viewport.height;if(null!==this.options.ratio){var canvasRatio=+this.options.ratio,currentRatio=canvasWidth/canvasHeight;currentRatio>canvasRatio?canvasHeight=canvasWidth/canvasRatio:canvasRatio>currentRatio&&(canvasWidth=canvasHeight*canvasRatio)}var scaleMin=1,scaleMax=1,scaleX=1,scaleY=1;null!==this.options.maxWidth&&this.options.maxWidth<canvasWidth&&(scaleX=this.options.maxWidth/canvasWidth),null!==this.options.maxHeight&&this.options.maxHeight<canvasHeight&&(scaleY=this.options.maxHeight/canvasHeight),scaleMin=Math.min(scaleX,scaleY),scaleX=1,scaleY=1,null!==this.options.minWidth&&this.options.minWidth>canvasWidth&&(scaleX=this.options.minWidth/canvasWidth),null!==this.options.minHeight&&this.options.minHeight>canvasHeight&&(scaleY=this.options.minHeight/canvasHeight),scaleMax=Math.max(scaleX,scaleY);var scale=scaleMax*scaleMin;canvasWidth*=scale,canvasHeight*=scale,this.image.setScaleX(1*scale),this.image.setScaleY(1*scale),this.canvas.add(this.image),canvasWidth-=2,canvasHeight-=2,this.canvas.setWidth(canvasWidth),this.canvas.setHeight(canvasHeight),this.canvas.centerObject(this.image),this.image.setCoords()},applyTransformation:function(transformation){this.transformations.push(transformation),transformation.applyTransformation(this.sourceCanvas,this.sourceImage,this._postTransformation.bind(this))},_postTransformation:function(newImage){newImage&&(this.sourceImage=newImage),this.refresh(function(){this.dispatchEvent("core:transformation")}.bind(this))},reinitializeImage:function(){this.sourceImage.remove(),this._initializeImage(),this._popTransformation(this.transformations.slice())},_popTransformation:function(transformations){if(0===transformations.length)return this.dispatchEvent("core:reinitialized"),void this.refresh();var transformation=transformations.shift(),next=function(newImage){newImage&&(this.sourceImage=newImage),this._popTransformation(transformations)};transformation.applyTransformation(this.sourceCanvas,this.sourceImage,next.bind(this))},_initializeDOM:function(imageElement){var mainContainerElement=document.createElement("div");mainContainerElement.className="darkroom-container";var toolbarElement=document.createElement("div");toolbarElement.className="darkroom-toolbar",mainContainerElement.appendChild(toolbarElement);var canvasContainerElement=document.createElement("div");canvasContainerElement.className="darkroom-image-container";var canvasElement=document.createElement("canvas");canvasContainerElement.appendChild(canvasElement),mainContainerElement.appendChild(canvasContainerElement);var sourceCanvasContainerElement=document.createElement("div");sourceCanvasContainerElement.className="darkroom-source-container",sourceCanvasContainerElement.style.display="none";var sourceCanvasElement=document.createElement("canvas");sourceCanvasContainerElement.appendChild(sourceCanvasElement),mainContainerElement.appendChild(sourceCanvasContainerElement),imageElement.parentNode.replaceChild(mainContainerElement,imageElement),imageElement.style.display="none",mainContainerElement.appendChild(imageElement),this.containerElement=mainContainerElement,this.originalImageElement=imageElement,this.toolbar=new Darkroom.UI.Toolbar(toolbarElement),this.canvas=new fabric.Canvas(canvasElement,{selection:!1,backgroundColor:this.options.backgroundColor}),this.sourceCanvas=new fabric.Canvas(sourceCanvasElement,{selection:!1,backgroundColor:this.options.backgroundColor})},_initializeImage:function(){this.sourceImage=new fabric.Image(this.originalImageElement,{selectable:!1,evented:!1,lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0,hasControls:!1,hasBorders:!1}),this.sourceCanvas.add(this.sourceImage);var viewport=Darkroom.Utils.computeImageViewPort(this.sourceImage),canvasWidth=viewport.width,canvasHeight=viewport.height;this.sourceCanvas.setWidth(canvasWidth),this.sourceCanvas.setHeight(canvasHeight),this.sourceCanvas.centerObject(this.sourceImage),this.sourceImage.setCoords()},_initializePlugins:function(plugins){for(var name in plugins){var plugin=plugins[name],options=this.options.plugins[name];options!==!1&&plugins.hasOwnProperty(name)&&(this.plugins[name]=new plugin(this,options))}}}}(),function(){"use strict";function Plugin(darkroom,options){this.darkroom=darkroom,this.options=Darkroom.Utils.extend(options,this.defaults),this.initialize()}Darkroom.Plugin=Plugin,Plugin.prototype={defaults:{},initialize:function(){}},Plugin.extend=function(protoProps){var child,parent=this;child=protoProps&&protoProps.hasOwnProperty("constructor")?protoProps.constructor:function(){return parent.apply(this,arguments)},Darkroom.Utils.extend(child,parent);var Surrogate=function(){this.constructor=child};return Surrogate.prototype=parent.prototype,child.prototype=new Surrogate,protoProps&&Darkroom.Utils.extend(child.prototype,protoProps),child.__super__=parent.prototype,child}}(),function(){"use strict";function Transformation(options){this.options=options}Darkroom.Transformation=Transformation,Transformation.prototype={applyTransformation:function(image){}},Transformation.extend=function(protoProps){var child,parent=this;child=protoProps&&protoProps.hasOwnProperty("constructor")?protoProps.constructor:function(){return parent.apply(this,arguments)},Darkroom.Utils.extend(child,parent);var Surrogate=function(){this.constructor=child};return Surrogate.prototype=parent.prototype,child.prototype=new Surrogate,protoProps&&Darkroom.Utils.extend(child.prototype,protoProps),child.__super__=parent.prototype,child}}(),function(){"use strict";function Toolbar(element){this.element=element}function ButtonGroup(element){this.element=element}function Button(element){this.element=element}Darkroom.UI={Toolbar:Toolbar,ButtonGroup:ButtonGroup,Button:Button},Toolbar.prototype={createButtonGroup:function(options){var buttonGroup=document.createElement("div");return buttonGroup.className="darkroom-button-group",this.element.appendChild(buttonGroup),new ButtonGroup(buttonGroup)}},ButtonGroup.prototype={createButton:function(options){var defaults={image:"help",type:"default",group:"default",hide:!1,disabled:!1};options=Darkroom.Utils.extend(options,defaults);var buttonElement=document.createElement("button");buttonElement.type="button",buttonElement.className="darkroom-button darkroom-button-"+options.type,buttonElement.innerHTML='<svg class="darkroom-icon"><use xlink:href="#'+options.image+'" /></svg>',this.element.appendChild(buttonElement);var button=new Button(buttonElement);return button.hide(options.hide),button.disable(options.disabled),button}},Button.prototype={addEventListener:function(eventName,listener){this.element.addEventListener?this.element.addEventListener(eventName,listener):this.element.attachEvent&&this.element.attachEvent("on"+eventName,listener)},removeEventListener:function(eventName,listener){this.element.removeEventListener&&this.element.removeEventListener(eventName,listener)},active:function(value){value?this.element.classList.add("darkroom-button-active"):this.element.classList.remove("darkroom-button-active")},hide:function(value){value?this.element.classList.add("darkroom-button-hidden"):this.element.classList.remove("darkroom-button-hidden")},disable:function(value){this.element.disabled=!!value}}}(),function(){"use strict";function extend(b,a){var prop;if(void 0===b)return a;for(prop in a)a.hasOwnProperty(prop)&&b.hasOwnProperty(prop)===!1&&(b[prop]=a[prop]);return b}function computeImageViewPort(image){return{height:Math.abs(image.getWidth()*Math.sin(image.getAngle()*Math.PI/180))+Math.abs(image.getHeight()*Math.cos(image.getAngle()*Math.PI/180)),width:Math.abs(image.getHeight()*Math.sin(image.getAngle()*Math.PI/180))+Math.abs(image.getWidth()*Math.cos(image.getAngle()*Math.PI/180))}}Darkroom.Utils={extend:extend,computeImageViewPort:computeImageViewPort}}(),function(window,document,Darkroom,fabric){"use strict";Darkroom.plugins.history=Darkroom.Plugin.extend({undoTransformations:[],initialize:function(){this._initButtons(),this.darkroom.addEventListener("core:transformation",this._onTranformationApplied.bind(this))},undo:function(){if(0!==this.darkroom.transformations.length){var lastTransformation=this.darkroom.transformations.pop();this.undoTransformations.unshift(lastTransformation),this.darkroom.reinitializeImage(),this._updateButtons()}},redo:function(){if(0!==this.undoTransformations.length){var cancelTransformation=this.undoTransformations.shift();this.darkroom.transformations.push(cancelTransformation),this.darkroom.reinitializeImage(),this._updateButtons()}},_initButtons:function(){var buttonGroup=this.darkroom.toolbar.createButtonGroup();return this.backButton=buttonGroup.createButton({image:"undo",disabled:!0}),this.forwardButton=buttonGroup.createButton({image:"redo",disabled:!0}),this.backButton.addEventListener("click",this.undo.bind(this)),this.forwardButton.addEventListener("click",this.redo.bind(this)),this},_updateButtons:function(){this.backButton.disable(0===this.darkroom.transformations.length),this.forwardButton.disable(0===this.undoTransformations.length)},_onTranformationApplied:function(){this.undoTransformations=[],this._updateButtons()}})}(window,document,Darkroom,fabric),function(){"use strict";var Rotation=Darkroom.Transformation.extend({applyTransformation:function(canvas,image,next){var angle=(image.getAngle()+this.options.angle)%360;image.rotate(angle);var width,height;height=Math.abs(image.getWidth()*Math.sin(angle*Math.PI/180))+Math.abs(image.getHeight()*Math.cos(angle*Math.PI/180)),width=Math.abs(image.getHeight()*Math.sin(angle*Math.PI/180))+Math.abs(image.getWidth()*Math.cos(angle*Math.PI/180)),canvas.setWidth(width),canvas.setHeight(height),canvas.centerObject(image),image.setCoords(),canvas.renderAll(),next()}});Darkroom.plugins.rotate=Darkroom.Plugin.extend({initialize:function(){var buttonGroup=this.darkroom.toolbar.createButtonGroup(),leftButton=buttonGroup.createButton({image:"rotate-left"}),rightButton=buttonGroup.createButton({image:"rotate-right"});leftButton.addEventListener("click",this.rotateLeft.bind(this)),rightButton.addEventListener("click",this.rotateRight.bind(this))},rotateLeft:function(){this.rotate(-90)},rotateRight:function(){this.rotate(90)},rotate:function(angle){this.darkroom.applyTransformation(new Rotation({angle:angle}))}})}(),function(){"use strict";var Crop=Darkroom.Transformation.extend({applyTransformation:function(canvas,image,next){var snapshot=new Image;snapshot.onload=function(){if(!(1>height||1>width)){var imgInstance=new fabric.Image(this,{selectable:!1,evented:!1,lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0,hasControls:!1,hasBorders:!1}),width=this.width,height=this.height;canvas.setWidth(width),canvas.setHeight(height),image.remove(),canvas.add(imgInstance),next(imgInstance)}};var viewport=Darkroom.Utils.computeImageViewPort(image),imageWidth=viewport.width,imageHeight=viewport.height,left=this.options.left*imageWidth,top=this.options.top*imageHeight,width=Math.min(this.options.width*imageWidth,imageWidth-left),height=Math.min(this.options.height*imageHeight,imageHeight-top);snapshot.src=canvas.toDataURL({left:left,top:top,width:width,height:height})}}),CropZone=fabric.util.createClass(fabric.Rect,{_render:function(ctx){this.callSuper("_render",ctx);var dashWidth=(ctx.canvas,7),flipX=this.flipX?-1:1,flipY=this.flipY?-1:1,scaleX=flipX/this.scaleX,scaleY=flipY/this.scaleY;ctx.scale(scaleX,scaleY),ctx.fillStyle="rgba(0, 0, 0, 0.5)",this._renderOverlay(ctx),void 0!==ctx.setLineDash?ctx.setLineDash([dashWidth,dashWidth]):void 0!==ctx.mozDash&&(ctx.mozDash=[dashWidth,dashWidth]),ctx.strokeStyle="rgba(0, 0, 0, 0.2)",this._renderBorders(ctx),this._renderGrid(ctx),ctx.lineDashOffset=dashWidth,ctx.strokeStyle="rgba(255, 255, 255, 0.4)",this._renderBorders(ctx),this._renderGrid(ctx),ctx.scale(1/scaleX,1/scaleY)},_renderOverlay:function(ctx){var canvas=ctx.canvas,x0=Math.ceil(-this.getWidth()/2-this.getLeft()),x1=Math.ceil(-this.getWidth()/2),x2=Math.ceil(this.getWidth()/2),x3=Math.ceil(this.getWidth()/2+(canvas.width-this.getWidth()-this.getLeft())),y0=Math.ceil(-this.getHeight()/2-this.getTop()),y1=Math.ceil(-this.getHeight()/2),y2=Math.ceil(this.getHeight()/2),y3=Math.ceil(this.getHeight()/2+(canvas.height-this.getHeight()-this.getTop()));ctx.beginPath(),ctx.moveTo(x0-1,y0-1),ctx.lineTo(x3+1,y0-1),ctx.lineTo(x3+1,y3+1),ctx.lineTo(x0-1,y3-1),ctx.lineTo(x0-1,y0-1),ctx.closePath(),ctx.moveTo(x1,y1),ctx.lineTo(x1,y2),ctx.lineTo(x2,y2),ctx.lineTo(x2,y1),ctx.lineTo(x1,y1),ctx.closePath(),ctx.fill()},_renderBorders:function(ctx){ctx.beginPath(),ctx.moveTo(-this.getWidth()/2,-this.getHeight()/2),ctx.lineTo(this.getWidth()/2,-this.getHeight()/2),ctx.lineTo(this.getWidth()/2,this.getHeight()/2),ctx.lineTo(-this.getWidth()/2,this.getHeight()/2),ctx.lineTo(-this.getWidth()/2,-this.getHeight()/2),ctx.stroke()},_renderGrid:function(ctx){ctx.beginPath(),ctx.moveTo(-this.getWidth()/2+1/3*this.getWidth(),-this.getHeight()/2),ctx.lineTo(-this.getWidth()/2+1/3*this.getWidth(),this.getHeight()/2),ctx.stroke(),ctx.beginPath(),ctx.moveTo(-this.getWidth()/2+2/3*this.getWidth(),-this.getHeight()/2),ctx.lineTo(-this.getWidth()/2+2/3*this.getWidth(),this.getHeight()/2),ctx.stroke(),ctx.beginPath(),ctx.moveTo(-this.getWidth()/2,-this.getHeight()/2+1/3*this.getHeight()),ctx.lineTo(this.getWidth()/2,-this.getHeight()/2+1/3*this.getHeight()),ctx.stroke(),ctx.beginPath(),ctx.moveTo(-this.getWidth()/2,-this.getHeight()/2+2/3*this.getHeight()),ctx.lineTo(this.getWidth()/2,-this.getHeight()/2+2/3*this.getHeight()),ctx.stroke()}});Darkroom.plugins.crop=Darkroom.Plugin.extend({startX:null,startY:null,isKeyCroping:!1,isKeyLeft:!1,isKeyUp:!1,defaults:{minHeight:1,minWidth:1,ratio:null,quickCropKey:!1},initialize:function(){var buttonGroup=this.darkroom.toolbar.createButtonGroup();this.cropButton=buttonGroup.createButton({image:"crop"}),this.okButton=buttonGroup.createButton({image:"done",type:"success",hide:!0}),this.cancelButton=buttonGroup.createButton({image:"close",type:"danger",hide:!0}),this.cropButton.addEventListener("click",this.toggleCrop.bind(this)),this.okButton.addEventListener("click",this.cropCurrentZone.bind(this)),this.cancelButton.addEventListener("click",this.releaseFocus.bind(this)),this.darkroom.canvas.on("mouse:down",this.onMouseDown.bind(this)),this.darkroom.canvas.on("mouse:move",this.onMouseMove.bind(this)),this.darkroom.canvas.on("mouse:up",this.onMouseUp.bind(this)),this.darkroom.canvas.on("object:moving",this.onObjectMoving.bind(this)),this.darkroom.canvas.on("object:scaling",this.onObjectScaling.bind(this)),fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keyup",this.onKeyUp.bind(this)),this.darkroom.addEventListener("core:transformation",this.releaseFocus.bind(this))},onObjectMoving:function(event){if(this.hasFocus()){var currentObject=event.target;if(currentObject===this.cropZone){var canvas=this.darkroom.canvas,x=currentObject.getLeft(),y=currentObject.getTop(),w=currentObject.getWidth(),h=currentObject.getHeight(),maxX=canvas.getWidth()-w,maxY=canvas.getHeight()-h;0>x&&currentObject.set("left",0),0>y&&currentObject.set("top",0),x>maxX&&currentObject.set("left",maxX),y>maxY&&currentObject.set("top",maxY),this.darkroom.dispatchEvent("crop:update")}}},onObjectScaling:function(event){if(this.hasFocus()){var preventScaling=!1,currentObject=event.target;if(currentObject===this.cropZone){var canvas=this.darkroom.canvas,pointer=canvas.getPointer(event.e),minX=(pointer.x,pointer.y,currentObject.getLeft()),minY=currentObject.getTop(),maxX=currentObject.getLeft()+currentObject.getWidth(),maxY=currentObject.getTop()+currentObject.getHeight();if(null!==this.options.ratio&&(0>minX||maxX>canvas.getWidth()||0>minY||maxY>canvas.getHeight())&&(preventScaling=!0),0>minX||maxX>canvas.getWidth()||preventScaling){var lastScaleX=this.lastScaleX||1;currentObject.setScaleX(lastScaleX)}if(0>minX&&currentObject.setLeft(0),0>minY||maxY>canvas.getHeight()||preventScaling){var lastScaleY=this.lastScaleY||1;currentObject.setScaleY(lastScaleY)}0>minY&&currentObject.setTop(0),currentObject.getWidth()<this.options.minWidth&&currentObject.scaleToWidth(this.options.minWidth),currentObject.getHeight()<this.options.minHeight&&currentObject.scaleToHeight(this.options.minHeight),this.lastScaleX=currentObject.getScaleX(),this.lastScaleY=currentObject.getScaleY(),this.darkroom.dispatchEvent("crop:update")}}},onMouseDown:function(event){if(this.hasFocus()){var canvas=this.darkroom.canvas;canvas.calcOffset();var pointer=canvas.getPointer(event.e),x=pointer.x,y=pointer.y,point=new fabric.Point(x,y),activeObject=canvas.getActiveObject();activeObject===this.cropZone||this.cropZone.containsPoint(point)||(canvas.discardActiveObject(),this.cropZone.setWidth(0),this.cropZone.setHeight(0),this.cropZone.setScaleX(1),this.cropZone.setScaleY(1),this.startX=x,this.startY=y)}},onMouseMove:function(event){if(this.isKeyCroping)return this.onMouseMoveKeyCrop(event);if(null!==this.startX&&null!==this.startY){var canvas=this.darkroom.canvas,pointer=canvas.getPointer(event.e),x=pointer.x,y=pointer.y;this._renderCropZone(this.startX,this.startY,x,y)}},onMouseMoveKeyCrop:function(event){var canvas=this.darkroom.canvas,zone=this.cropZone,pointer=canvas.getPointer(event.e),x=pointer.x,y=pointer.y;zone.left&&zone.top||(zone.setTop(y),zone.setLeft(x)),this.isKeyLeft=x<zone.left+zone.width/2,this.isKeyUp=y<zone.top+zone.height/2,this._renderCropZone(Math.min(zone.left,x),Math.min(zone.top,y),Math.max(zone.left+zone.width,x),Math.max(zone.top+zone.height,y))},onMouseUp:function(event){if(null!==this.startX&&null!==this.startY){var canvas=this.darkroom.canvas;this.cropZone.setCoords(),canvas.setActiveObject(this.cropZone),canvas.calcOffset(),this.startX=null,this.startY=null}},onKeyDown:function(event){!1===this.options.quickCropKey||event.keyCode!==this.options.quickCropKey||this.isKeyCroping||(this.isKeyCroping=!0,this.darkroom.canvas.discardActiveObject(),this.cropZone.setWidth(0),this.cropZone.setHeight(0),this.cropZone.setScaleX(1),this.cropZone.setScaleY(1),this.cropZone.setTop(0),this.cropZone.setLeft(0))},onKeyUp:function(event){!1!==this.options.quickCropKey&&event.keyCode===this.options.quickCropKey&&this.isKeyCroping&&(this.isKeyCroping=!1,this.startX=1,this.startY=1,this.onMouseUp())},selectZone:function(x,y,width,height,forceDimension){this.hasFocus()||this.requireFocus(),forceDimension?this.cropZone.set({left:x,top:y,width:width,height:height}):this._renderCropZone(x,y,x+width,y+height);var canvas=this.darkroom.canvas;canvas.bringToFront(this.cropZone),this.cropZone.setCoords(),canvas.setActiveObject(this.cropZone),canvas.calcOffset(),this.darkroom.dispatchEvent("crop:update")},toggleCrop:function(){this.hasFocus()?this.releaseFocus():this.requireFocus()},cropCurrentZone:function(){if(this.hasFocus()&&!(this.cropZone.width<1&&this.cropZone.height<1)){var image=this.darkroom.image,top=this.cropZone.getTop()-image.getTop(),left=this.cropZone.getLeft()-image.getLeft(),width=this.cropZone.getWidth(),height=this.cropZone.getHeight();0>top&&(height+=top,top=0),0>left&&(width+=left,left=0),this.darkroom.applyTransformation(new Crop({top:top/image.getHeight(),left:left/image.getWidth(),width:width/image.getWidth(),height:height/image.getHeight()}))}},hasFocus:function(){return void 0!==this.cropZone},requireFocus:function(){this.cropZone=new CropZone({fill:"transparent",hasBorders:!1,originX:"left",originY:"top",cornerColor:"#444",cornerSize:8,transparentCorners:!1,lockRotation:!0,hasRotatingPoint:!1}),null!==this.options.ratio&&this.cropZone.set("lockUniScaling",!0),this.darkroom.canvas.add(this.cropZone),this.darkroom.canvas.defaultCursor="crosshair",this.cropButton.active(!0),this.okButton.hide(!1),this.cancelButton.hide(!1)},releaseFocus:function(){void 0!==this.cropZone&&(this.cropZone.remove(),this.cropZone=void 0,this.cropButton.active(!1),this.okButton.hide(!0),this.cancelButton.hide(!0),this.darkroom.canvas.defaultCursor="default",this.darkroom.dispatchEvent("crop:update"))},_renderCropZone:function(fromX,fromY,toX,toY){var canvas=this.darkroom.canvas,isRight=toX>fromX,isLeft=!isRight,isDown=toY>fromY,isUp=!isDown,minWidth=Math.min(+this.options.minWidth,canvas.getWidth()),minHeight=Math.min(+this.options.minHeight,canvas.getHeight()),leftX=Math.min(fromX,toX),rightX=Math.max(fromX,toX),topY=Math.min(fromY,toY),bottomY=Math.max(fromY,toY);leftX=Math.max(0,leftX),rightX=Math.min(canvas.getWidth(),rightX),topY=Math.max(0,topY),bottomY=Math.min(canvas.getHeight(),bottomY),minWidth>rightX-leftX&&(isRight?rightX=leftX+minWidth:leftX=rightX-minWidth),minHeight>bottomY-topY&&(isDown?bottomY=topY+minHeight:topY=bottomY-minHeight),0>leftX&&(rightX+=Math.abs(leftX),leftX=0),rightX>canvas.getWidth()&&(leftX-=rightX-canvas.getWidth(),rightX=canvas.getWidth()),0>topY&&(bottomY+=Math.abs(topY),topY=0),bottomY>canvas.getHeight()&&(topY-=bottomY-canvas.getHeight(),bottomY=canvas.getHeight());var width=rightX-leftX,height=bottomY-topY,currentRatio=width/height;if(this.options.ratio&&+this.options.ratio!==currentRatio){var ratio=+this.options.ratio;if(this.isKeyCroping&&(isLeft=this.isKeyLeft,isUp=this.isKeyUp),ratio>currentRatio){var newWidth=height*ratio;isLeft&&(leftX-=newWidth-width),width=newWidth}else if(currentRatio>ratio){var newHeight=height/(ratio*height/width);isUp&&(topY-=newHeight-height),height=newHeight}if(0>leftX&&(leftX=0),0>topY&&(topY=0),leftX+width>canvas.getWidth()){var newWidth=canvas.getWidth()-leftX;height=newWidth*height/width,width=newWidth,isUp&&(topY=fromY-height)}if(topY+height>canvas.getHeight()){var newHeight=canvas.getHeight()-topY;width=width*newHeight/height,height=newHeight,isLeft&&(leftX=fromX-width)}}this.cropZone.left=leftX,this.cropZone.top=topY,this.cropZone.width=width,this.cropZone.height=height,this.darkroom.canvas.bringToFront(this.cropZone),this.darkroom.dispatchEvent("crop:update")}})}(),function(){"use strict";Darkroom.plugins.save=Darkroom.Plugin.extend({defaults:{callback:function(){this.darkroom.selfDestroy()}},initialize:function(){var buttonGroup=this.darkroom.toolbar.createButtonGroup();this.destroyButton=buttonGroup.createButton({image:"save"}),this.destroyButton.addEventListener("click",this.options.callback.bind(this))}})}(); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/libs/fabric.js b/html/moodle2/mod/hvp/editor/libs/fabric.js new file mode 100755 index 0000000000..cdf13ceb28 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/libs/fabric.js @@ -0,0 +1,8 @@ +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.13"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom("<!DOCTYPE html><html><head></head><body></body></html>"),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r<i;r++)n[r].call(this,t||{});return this}fabric.Observable={observe:t,stopObserving:n,fire:r,on:t,off:n,trigger:r}}(),fabric.Collection={add:function(){this._objects.push.apply(this._objects,arguments);for(var e=0,t=arguments.length;e<t;e++)this._onObjectAdded(arguments[e]);return this.renderOnAddRemove&&this.renderAll(),this},insertAt:function(e,t,n){var r=this.getObjects();return n?r[t]=e:r.splice(t,0,e),this._onObjectAdded(e),this.renderOnAddRemove&&this.renderAll(),this},remove:function(){var e=this.getObjects(),t;for(var n=0,r=arguments.length;n<r;n++)t=e.indexOf(arguments[n]),t!==-1&&(e.splice(t,1),this._onObjectRemoved(arguments[n]));return this.renderOnAddRemove&&this.renderAll(),this},forEachObject:function(e,t){var n=this.getObjects(),r=n.length;while(r--)e.call(t,n[r],r,n);return this},getObjects:function(e){return typeof e=="undefined"?this._objects:this._objects.filter(function(t){return t.type===e})},item:function(e){return this.getObjects()[e]},isEmpty:function(){return this.getObjects().length===0},size:function(){return this.getObjects().length},contains:function(e){return this.getObjects().indexOf(e)>-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},transformPoint:function(e,t,n){return n?new fabric.Point(t[0]*e.x+t[1]*e.y,t[2]*e.x+t[3]*e.y):new fabric.Point(t[0]*e.x+t[1]*e.y+t[4],t[2]*e.x+t[3]*e.y+t[5])},invertTransform:function(e){var t=e.slice(),n=1/(e[0]*e[3]-e[1]*e[2]);t=[n*e[3],-n*e[1],-n*e[2],n*e[0],0,0];var r=fabric.util.transformPoint({x:e[4],y:e[5]},t);return t[4]=-r.x,t[5]=-r.y,t},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},parseUnit:function(e,t){var n=/\D{0,2}$/.exec(e),r=parseFloat(e);t||(t=fabric.Text.DEFAULT_SVG_FONT_SIZE);switch(n[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*t;default:return r}},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s<r;++s)i=i[n[s]];return i},loadImage:function(e,t,n,r){if(!e){t&&t.call(n,e);return}var i=fabric.util.createImage();i.onload=function(){t&&t.call(n,i),i=i.onload=i.onerror=null},i.onerror=function(){fabric.log("Error loading "+i.src),t&&t.call(n,null,!0),i=i.onload=i.onerror=null},e.indexOf("data")!==0&&typeof r!="undefined"&&(i.crossOrigin=r),i.src=e},enlivenObjects:function(e,t,n,r){function i(){++o===u&&t&&t(s)}e=e||[];var s=[],o=0,u=e.length;if(!u){t&&t(s);return}e.forEach(function(e,t){if(!e||!e.type){i();return}var o=fabric.util.getKlass(e.type,n);o.async?o.fromObject(e,function(n,o){o||(s[t]=n,r&&r(e,s[t])),i()}):(s[t]=o.fromObject(e),r&&r(e,s[t]),i())})},groupSVGElements:function(e,t,n){var r;return r=new fabric.PathGroup(e,t),typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;r<i;r++)n[r]in e&&(t[n[r]]=e[n[r]])},drawDashedLine:function(e,r,i,s,o,u){var a=s-r,f=o-i,l=t(a*a+f*f),c=n(f,a),h=u.length,p=0,d=!0;e.save(),e.translate(r,i),e.moveTo(0,0),e.rotate(c),r=0;while(l>r)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(e,t,n,r){r>0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o<u;o+=4){var a=s.data[o];i=a<=0;if(i===!1)break}return s=null,i}}}(typeof exports!="undefined"?exports:this),function(){function i(t,n,i,u,a,f,l){var c=r.call(arguments);if(e[c])return e[c];var h=Math.PI,p=l*h/180,d=Math.sin(p),v=Math.cos(p),m=0,g=0;i=Math.abs(i),u=Math.abs(u);var y=-v*t*.5-d*n*.5,b=-v*n*.5+d*t*.5,w=i*i,E=u*u,S=b*b,x=y*y,T=w*E-w*S-E*x,N=0;if(T<0){var C=Math.sqrt(1-T/(w*E));i*=C,u*=C}else N=(a===f?-1:1)*Math.sqrt(T/(w*S+E*x));var k=N*i*b/u,L=-N*u*y/i,A=v*k-d*L+t*.5,O=d*k+v*L+n*.5,M=o(1,0,(y-k)/i,(b-L)/u),_=o((y-k)/i,(b-L)/u,(-y-k)/i,(-b-L)/u);f===0&&_>0?_-=2*h:f===1&&_<0&&(_+=2*h);var D=Math.ceil(Math.abs(_/h*2)),P=[],H=_/D,B=8/3*Math.sin(H/4)*Math.sin(H/4)/Math.sin(H/2),j=M+H;for(var F=0;F<D;F++)P[F]=s(M,j,v,d,i,u,A,O,B,m,g),m=P[F][4],g=P[F][5],M=j,j+=H;return e[c]=P,P}function s(e,n,i,s,o,u,a,f,l,c,h){var p=r.call(arguments);if(t[p])return t[p];var d=Math.cos(e),v=Math.sin(e),m=Math.cos(n),g=Math.sin(n),y=i*o*m-s*u*g+a,b=s*o*m+i*u*g+f,w=c+l*(-i*o*v-s*u*d),E=h+l*(-s*o*v+i*u*d),S=y+l*(i*o*g+s*u*m),x=b+l*(s*o*g-i*u*m);return t[p]=[w,E,S,x,y,b],t[p]}function o(e,t,n,r){var i=Math.atan2(t,e),s=Math.atan2(r,n);return s>=i?s-i:2*Math.PI-(i-s)}function u(e,t,i,s,o,u,a,f){var l=r.call(arguments);if(n[l])return n[l];var c=Math.sqrt,h=Math.min,p=Math.max,d=Math.abs,v=[],m=[[],[]],g,y,b,w,E,S,x,T;y=6*e-12*i+6*o,g=-3*e+9*i-9*o+3*a,b=3*i-3*e;for(var N=0;N<2;++N){N>0&&(y=6*t-12*s+6*u,g=-3*t+9*s-9*u+3*f,b=3*s-3*t);if(d(g)<1e-12){if(d(y)<1e-12)continue;w=-b/y,0<w&&w<1&&v.push(w);continue}x=y*y-4*b*g;if(x<0)continue;T=c(x),E=(-y+T)/(2*g),0<E&&E<1&&v.push(E),S=(-y-T)/(2*g),0<S&&S<1&&v.push(S)}var C,k,L=v.length,A=L,O;while(L--)w=v[L],O=1-w,C=O*O*O*e+3*O*O*w*i+3*O*w*w*o+w*w*w*a,m[0][L]=C,k=O*O*O*t+3*O*O*w*s+3*O*w*w*u+w*w*w*f,m[1][L]=k;m[0][A]=e,m[1][A]=t,m[0][A+1]=a,m[1][A+1]=f;var M=[{x:h.apply(null,m[0]),y:h.apply(null,m[1])},{x:p.apply(null,m[0]),y:p.apply(null,m[1])}];return n[l]=M,M}var e={},t={},n={},r=Array.prototype.join;fabric.util.drawArc=function(e,t,n,r){var s=r[0],o=r[1],u=r[2],a=r[3],f=r[4],l=r[5],c=r[6],h=[[],[],[],[]],p=i(l-t,c-n,s,o,a,f,u);for(var d=0,v=p.length;d<v;d++)h[d][0]=p[d][0]+t,h[d][1]=p[d][1]+n,h[d][2]=p[d][2]+t,h[d][3]=p[d][3]+n,h[d][4]=p[d][4]+t,h[d][5]=p[d][5]+n,e.bezierCurveTo.apply(e,h[d])},fabric.util.getBoundsOfArc=function(e,t,n,r,s,o,a,f,l){var c=0,h=0,p=[],d=[],v=i(f-e,l-t,n,r,o,a,s);for(var m=0,g=v.length;m<g;m++)p=u(c,h,v[m][0],v[m][1],v[m][2],v[m][3],v[m][4],v[m][5]),p[0].x+=e,p[0].y+=t,p[1].x+=e,p[1].y+=t,d.push(p[0]),d.push(p[1]),c=v[m][4],h=v[m][5];return d},fabric.util.getBoundsOfCurve=u}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s<o;s++)i[s]=r.length?t[s][n].apply(t[s],r):t[s][n].call(t[s]);return i}function n(e,t){return i(e,t,function(e,t){return e>=t})}function r(e,t){return i(e,t,function(e,t){return e<t})}function i(e,t,n){if(!e||e.length===0)return;var r=e.length-1,i=t?e[r][t]:e[r];if(t)while(r--)n(e[r][t],i)&&(i=e[r][t]);else while(r--)n(e[r],i)&&(i=e[r]);return i}var e=Array.prototype.slice;Array.prototype.indexOf||(Array.prototype.indexOf=function(e){if(this===void 0||this===null)throw new TypeError;var t=Object(this),n=t.length>>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i<n;i++)if(i in t&&t[i]===e)return i;return-1}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){for(var n=0,r=this.length>>>0;n<r;n++)n in this&&e.call(t,this[n],n,this)}),Array.prototype.map||(Array.prototype.map=function(e,t){var n=[];for(var r=0,i=this.length>>>0;r<i;r++)r in this&&(n[r]=e.call(t,this[r],r,this));return n}),Array.prototype.every||(Array.prototype.every=function(e,t){for(var n=0,r=this.length>>>0;n<r;n++)if(n in this&&!e.call(t,this[n],n,this))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(e,t){for(var n=0,r=this.length>>>0;n<r;n++)if(n in this&&e.call(t,this[n],n,this))return!0;return!1}),Array.prototype.filter||(Array.prototype.filter=function(e,t){var n=[],r;for(var i=0,s=this.length>>>0;i<s;i++)i in this&&(r=this[i],e.call(t,r,i,this)&&n.push(r));return n}),Array.prototype.reduce||(Array.prototype.reduce=function(e){var t=this.length>>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n<t;n++)n in this&&(r=e.call(null,r,this[n],n,this));return r}),fabric.util.array={invoke:t,min:r,max:n}}(),function(){function e(e,t){for(var n in t)e[n]=t[n];return e}function t(t){return e({},t)}fabric.util.object={extend:e,clone:t}}(),function(){function e(e){return e.replace(/-+(.)?/g,function(e,t){return t?t.toUpperCase():""})}function t(e,t){return e.charAt(0).toUpperCase()+(t?e.slice(1):e.slice(1).toLowerCase())}function n(e){return e.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&apos;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a<f;a++)r(u,o[a],n);return u.prototype.initialize||(u.prototype.initialize=t),u.prototype.constructor=u,u.prototype.callSuper=s,u}var e=Array.prototype.slice,t=function(){},n=function(){for(var e in{toString:1})if(e==="toString")return!1;return!0}(),r=function(e,t,r){for(var i in t)i in e.prototype&&typeof e.prototype[i]=="function"&&(t[i]+"").indexOf("callSuper")>-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r<i;r++){n=typeof e[t[r]];if(!/^(?:function|object|unknown)$/.test(n))return!1}return!0}function s(e,t){return{handler:t,wrappedHandler:o(e,t)}}function o(e,t){return function(r){t.call(n(e),r||fabric.window.event)}}function u(e,t){return function(n){if(c[e]&&c[e][t]){var r=c[e][t];for(var i=0,s=r.length;i<s;i++)r[i].call(this,n||fabric.window.event)}}}function d(t,n){t||(t=fabric.window.event);var r=t.target||(typeof t.srcElement!==e?t.srcElement:null),i=fabric.util.getScrollLeftTop(r,n);return{x:v(t)+i.left,y:m(t)+i.top}}function g(e,t,n){var r=e.type==="touchend"?"changedTouches":"touches";return e[r]&&e[r][0]?e[r][0][t]-(e[r][0][t]-e[r][0][n])||e[n]:e[n]}var e="unknown",n,r,i=function(){var e=0;return function(t){return t.__uniqueID||(t.__uniqueID="uniqueID__"+e++)}}();(function(){var e={};n=function(t){return e[t]},r=function(t,n){e[t]=n}})();var a=t(fabric.document.documentElement,"addEventListener","removeEventListener")&&t(fabric.window,"addEventListener","removeEventListener"),f=t(fabric.document.documentElement,"attachEvent","detachEvent")&&t(fabric.window,"attachEvent","detachEvent"),l={},c={},h,p;a?(h=function(e,t,n){e.addEventListener(t,n,!1)},p=function(e,t,n){e.removeEventListener(t,n,!1)}):f?(h=function(e,t,n){var o=i(e);r(o,e),l[o]||(l[o]={}),l[o][t]||(l[o][t]=[]);var u=s(o,n);l[o][t].push(u),e.attachEvent("on"+t,u.wrappedHandler)},p=function(e,t,n){var r=i(e),s;if(l[r]&&l[r][t])for(var o=0,u=l[r][t].length;o<u;o++)s=l[r][t][o],s&&s.handler===n&&(e.detachEvent("on"+t,s.wrappedHandler),l[r][t][o]=null)}):(h=function(e,t,n){var r=i(e);c[r]||(c[r]={});if(!c[r][t]){c[r][t]=[];var s=e["on"+t];s&&c[r][t].push(s),e["on"+t]=u(r,t)}c[r][t].push(n)},p=function(e,t,n){var r=i(e);if(c[r]&&c[r][t]){var s=c[r][t];for(var o=0,u=s.length;o<u;o++)s[o]===n&&s.splice(o,1)}}),fabric.util.addListener=h,fabric.util.removeListener=p;var v=function(t){return typeof t.clientX!==e?t.clientX:0},m=function(t){return typeof t.clientY!==e?t.clientY:0};fabric.isTouchSupported&&(v=function(e){return g(e,"pageX","clientX")},m=function(e){return g(e,"pageY","clientY")}),fabric.util.getPointer=d,fabric.util.object.extend(fabric.util,fabric.Observable)}(),function(){function e(e,t){var n=e.style;if(!n)return e;if(typeof t=="string")return e.style.cssText+=";"+t,t.indexOf("opacity")>-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e.nodeType===1&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e.nodeType===1&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){var n=fabric.document.defaultView.getComputedStyle(e,null);return n?n[t]:undefined}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e<Math.abs(t)?(e=t,r=n/4):r=n/(2*Math.PI)*Math.asin(t/e),{a:e,c:t,p:n,s:r}}function t(e,t,n){return e.a*Math.pow(2,10*(t-=1))*Math.sin((t*n-e.s)*2*Math.PI/e.p)}function n(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function r(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function i(e,t,n,r){return n*(e/=r)*e*e*e+t}function s(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function o(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function u(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function a(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function f(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function l(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function c(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function h(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function p(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function d(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function v(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function m(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function g(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function y(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function b(n,r,i,s){var o=1.70158,u=0,a=i;if(n===0)return r;n/=s;if(n===1)return r+i;u||(u=s*.3);var f=e(a,i,u,o);return-t(f,n,s)+r}function w(t,n,r,i){var s=1.70158,o=0,u=r;if(t===0)return n;t/=i;if(t===1)return n+r;o||(o=i*.3);var a=e(u,r,o,s);return a.a*Math.pow(2,-10*t)*Math.sin((t*i-a.s)*2*Math.PI/a.p)+a.c+n}function E(n,r,i,s){var o=1.70158,u=0,a=i;if(n===0)return r;n/=s/2;if(n===2)return r+i;u||(u=s*.3*1.5);var f=e(a,i,u,o);return n<1?-0.5*t(f,n,s)+r:f.a*Math.pow(2,-10*(n-=1))*Math.sin((n*s-f.s)*2*Math.PI/f.p)*.5+f.c+r}function S(e,t,n,r,i){return i===undefined&&(i=1.70158),n*(e/=r)*e*((i+1)*e-i)+t}function x(e,t,n,r,i){return i===undefined&&(i=1.70158),n*((e=e/r-1)*e*((i+1)*e+i)+1)+t}function T(e,t,n,r,i){return i===undefined&&(i=1.70158),e/=r/2,e<1?n/2*e*e*(((i*=1.525)+1)*e-i)+t:n/2*((e-=2)*e*(((i*=1.525)+1)*e+i)+2)+t}function N(e,t,n,r){return n-C(r-e,0,n,r)+t}function C(e,t,n,r){return(e/=r)<1/2.75?n*7.5625*e*e+t:e<2/2.75?n*(7.5625*(e-=1.5/2.75)*e+.75)+t:e<2.5/2.75?n*(7.5625*(e-=2.25/2.75)*e+.9375)+t:n*(7.5625*(e-=2.625/2.75)*e+.984375)+t}function k(e,t,n,r){return e<r/2?N(e*2,0,n,r)*.5+t:C(e*2-r,0,n,r)*.5+n*.5+t}fabric.util.ease={easeInQuad:function(e,t,n,r){return n*(e/=r)*e+t},easeOutQuad:function(e,t,n,r){return-n*(e/=r)*(e-2)+t},easeInOutQuad:function(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t},easeInCubic:function(e,t,n,r){return n*(e/=r)*e*e+t},easeOutCubic:n,easeInOutCubic:r,easeInQuart:i,easeOutQuart:s,easeInOutQuart:o,easeInQuint:u,easeOutQuint:a,easeInOutQuint:f,easeInSine:l,easeOutSine:c,easeInOutSine:h,easeInExpo:p,easeOutExpo:d,easeInOutExpo:v,easeInCirc:m,easeOutCirc:g,easeInOutCirc:y,easeInElastic:b,easeOutElastic:w,easeInOutElastic:E,easeInBack:S,easeOutBack:x,easeInOutBack:T,easeInBounce:N,easeOutBounce:C,easeInOutBounce:k}}(),function(e){"use strict";function l(e){return e in a?a[e]:e}function c(e,n,r,i){var s=Object.prototype.toString.call(n)==="[object Array]",a;return e!=="fill"&&e!=="stroke"||n!=="none"?e==="strokeDashArray"?n=n.replace(/,/g," ").split(/\s+/).map(function(e){return parseFloat(e)}):e==="transformMatrix"?r&&r.transformMatrix?n=u(r.transformMatrix,t.parseTransformAttribute(n)):n=t.parseTransformAttribute(n):e==="visible"?(n=n==="none"||n==="hidden"?!1:!0,r&&r.visible===!1&&(n=!1)):e==="originX"?n=n==="start"?"left":n==="end"?"right":"center":a=s?n.map(o):o(n,i):n="",!s&&isNaN(a)?n:a}function h(e){for(var n in f){if(!e[n]||typeof e[f[n]]=="undefined")continue;if(e[n].indexOf("url(")===0)continue;var r=new t.Color(e[n]);e[n]=r.setAlpha(s(r.getAlpha()*e[f[n]],2)).toRgba()}return e}function p(e,t){var n,r;e.replace(/;$/,"").split(";").forEach(function(e){var i=e.split(":");n=l(i[0].trim().toLowerCase()),r=c(n,i[1].trim()),t[n]=r})}function d(e,t){var n,r;for(var i in e){if(typeof e[i]=="undefined")continue;n=l(i.toLowerCase()),r=c(n,e[i]),t[n]=r}}function v(e,n){var r={};for(var i in t.cssRules[n])if(m(e,i.split(" ")))for(var s in t.cssRules[n][i])r[s]=t.cssRules[n][i][s];return r}function m(e,t){var n,r=!0;return n=y(e,t.pop()),n&&t.length&&(r=g(e,t)),n&&r&&t.length===0}function g(e,t){var n,r=!0;while(e.parentNode&&e.parentNode.nodeType===1&&t.length)r&&(n=t.pop()),e=e.parentNode,r=y(e,n);return t.length===0}function y(e,t){var n=e.nodeName,r=e.getAttribute("class"),i=e.getAttribute("id"),s;s=new RegExp("^"+n,"i"),t=t.replace(s,""),i&&t.length&&(s=new RegExp("#"+i+"(?![a-zA-Z\\-]+)","i"),t=t.replace(s,""));if(r&&t.length){r=r.split(" ");for(var o=r.length;o--;)s=new RegExp("\\."+r[o]+"(?![a-zA-Z\\-]+)","i"),t=t.replace(s,"")}return t.length===0}function b(e){var t=e.getElementsByTagName("use");while(t.length){var n=t[0],r=n.getAttribute("xlink:href").substr(1),i=n.getAttribute("x")||0,s=n.getAttribute("y")||0,o=e.getElementById(r).cloneNode(!0),u=(o.getAttribute("transform")||"")+" translate("+i+", "+s+")",a;for(var f=0,l=n.attributes,c=l.length;f<c;f++){var h=l.item(f);if(h.nodeName==="x"||h.nodeName==="y"||h.nodeName==="xlink:href")continue;h.nodeName==="transform"?u=h.nodeValue+" "+u:o.setAttribute(h.nodeName,h.nodeValue)}o.setAttribute("transform",u),o.setAttribute("instantiated_by_use","1"),o.removeAttribute("id"),a=n.parentNode,a.replaceChild(o,n)}}function w(e,n,r){var i=new RegExp("^\\s*("+t.reNum+"+)\\s*,?"+"\\s*("+t.reNum+"+)\\s*,?"+"\\s*("+t.reNum+"+)\\s*,?"+"\\s*("+t.reNum+"+)\\s*"+"$"),s=e.getAttribute("viewBox"),o=1,u=1,a=0,f=0,l,c,h,p;if(!s||!(s=s.match(i)))return;a=-parseFloat(s[1]),f=-parseFloat(s[2]),l=parseFloat(s[3]),c=parseFloat(s[4]),n&&n!==l&&(o=n/l),r&&r!==c&&(u=r/c),u=o=o>u?u:o;if(o===1&&u===1&&a===0&&f===0)return;h="matrix("+o+" 0"+" 0 "+u+" "+a*o+" "+f*u+")";if(e.tagName==="svg"){p=e.ownerDocument.createElement("g");while(e.firstChild!=null)p.appendChild(e.firstChild);e.appendChild(p)}else p=e,h+=p.getAttribute("transform");p.setAttribute("transform",h)}function S(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function x(e,t,n){t[n]&&t[n].toSVG&&e.push('<pattern x="0" y="0" id="',n,'Pattern" ','width="',t[n].source.width,'" height="',t[n].source.height,'" patternUnits="userSpaceOnUse">','<image x="0" y="0" ','width="',t[n].source.width,'" height="',t[n].source.height,'" xlink:href="',t[n].source.src,'"></image></pattern>')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.parseUnit,u=t.util.multiplyTransformMatrices,a={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},f={stroke:"strokeOpacity",fill:"fillOpacity"};t.cssRules={},t.gradientDefs={},t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,n){e[2]=Math.tan(t.util.degreesToRadians(n[0]))}function i(e,n){e[1]=Math.tan(t.util.degreesToRadians(n[0]))}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u=t.reNum,a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(u){var l=(new RegExp(v)).exec(u).filter(function(e){return e!==""&&e!=null}),c=l[1],h=l.slice(2).map(parseFloat);switch(c){case"translate":s(a,h);break;case"rotate":h[0]=t.util.degreesToRadians(h[0]),e(a,h);break;case"scale":n(a,h);break;case"skewX":r(a,h);break;case"skewY":i(a,h);break;case"matrix":a=h}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function r(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName)&&!e.getAttribute("instantiated_by_use"))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n=/^(symbol|image|marker|pattern|view)$/;return function(s,u,a){if(!s)return;b(s);var f=new Date,l=t.Object.__uid++,c=o(s.getAttribute("width")||"100%"),h=o(s.getAttribute("height")||"100%");w(s,c,h);var p=t.util.toArray(s.getElementsByTagName("*"));if(p.length===0&&t.isLikelyNode){p=s.selectNodes('//*[name(.)!="svg"]');var d=[];for(var v=0,m=p.length;v<m;v++)d[v]=p[v];p=d}var g=p.filter(function(t){return n.test(t.tagName)&&w(t,0,0),e.test(t.tagName)&&!r(t,/^(?:pattern|defs|symbol)$/)});if(!g||g&&!g.length){u&&u([],{});return}var y={width:c,height:h,widthAttr:c,heightAttr:h,svgUid:l};t.gradientDefs[l]=t.getGradientDefs(s),t.cssRules[l]=t.getCSSRules(s),t.parseElements(g,function(e){t.documentParsingTime=new Date-f,u&&u(e,y)},i(y),a)}}();var E={has:function(e,t){t(!1)},get:function(){},set:function(){}};n(t,{parseFontDeclaration:function(e,n){var r="(normal|italic)?\\s*(normal|small-caps)?\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*("+t.reNum+"(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|"+t.reNum+"))?\\s+(.*)",i=e.match(r);if(!i)return;var s=i[1],u=i[3],a=i[4],f=i[5],l=i[6];s&&(n.fontStyle=s),u&&(n.fontWeight=isNaN(parseFloat(u))?u:parseFloat(u)),a&&(n.fontSize=o(a)),l&&(n.fontFamily=l),f&&(n.lineHeight=f==="normal"?1:f)},getGradientDefs:function(e){var t=e.getElementsByTagName("linearGradient"),n=e.getElementsByTagName("radialGradient"),r,i,s=0,o,u,a=[],f={},l={};a.length=t.length+n.length,i=t.length;while(i--)a[s++]=t[i];i=n.length;while(i--)a[s++]=n[i];while(s--)r=a[s],u=r.getAttribute("xlink:href"),o=r.getAttribute("id"),u&&(l[o]=u.substr(1)),f[o]=r;for(o in l){var c=f[l[o]].cloneNode(!0);r=f[o];while(c.firstChild)r.appendChild(c.firstChild)}return f},parseAttributes:function(e,r,i){if(!e)return;var s,o={},u;typeof i=="undefined"&&(i=e.getAttribute("svgUid")),e.parentNode&&/^symbol|[g|a]$/i.test(e.parentNode.nodeName)&&(o=t.parseAttributes(e.parentNode,r,i)),u=o&&o.fontSize||e.getAttribute("font-size")||t.Text.DEFAULT_SVG_FONT_SIZE +;var a=r.reduce(function(t,n){return s=e.getAttribute(n),s&&(n=l(n),s=c(n,s,o,u),t[n]=s),t},{});return a=n(a,n(v(e,i),t.parseStyleAttribute(e))),a.font&&t.parseFontDeclaration(a.font,a),h(n(o,a))},parseElements:function(e,n,r,i){(new t.ElementsParser(e,n,r,i)).parse()},parseStyleAttribute:function(e){var t={},n=e.getAttribute("style");return n?(typeof n=="string"?p(n,t):d(n,t),t):t},parsePointsAttribute:function(e){if(!e)return null;e=e.replace(/,/g," ").trim(),e=e.split(/\s+/);var t=[],n,r;n=0,r=e.length;for(;n<r;n+=2)t.push({x:parseFloat(e[n]),y:parseFloat(e[n+1])});return t},getCSSRules:function(e){var n=e.getElementsByTagName("style"),r={},i;for(var s=0,o=n.length;s<o;s++){var u=n[s].textContent;u=u.replace(/\/\*[\s\S]*?\*\//g,"");if(u.trim()==="")continue;i=u.match(/[^{]*\{[\s\S]*?\}/g),i=i.map(function(e){return e.trim()}),i.forEach(function(e){var n=e.match(/([\s\S]*?)\s*\{([^}]*)\}/),i={},s=n[2].trim(),o=s.replace(/;$/,"").split(/\s*;\s*/);for(var u=0,a=o.length;u<a;u++){var f=o[u].split(/\s*:\s*/),h=l(f[0]),p=c(h,f[1],f[0]);i[h]=p}e=n[1],e.split(",").forEach(function(e){e=e.replace(/^svg/i,"").trim();if(e==="")return;r[e]=t.util.object.clone(i)})})}return r},loadSVGFromURL:function(e,n,r){function i(i){var s=i.responseXML;s&&!s.documentElement&&t.window.ActiveXObject&&i.responseText&&(s=new ActiveXObject("Microsoft.XMLDOM"),s.async="false",s.loadXML(i.responseText.replace(/<!DOCTYPE[\s\S]*?(\[[\s\S]*\])*?>/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){E.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),E.has(e,function(r){r?E.get(e,function(e){var t=S(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(/<!DOCTYPE[\s\S]*?(\[[\s\S]*\])*?>/i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n<r;n++){if(e[n].type!=="text"||!e[n].path)continue;t+=["@font-face {","font-family: ",e[n].fontFamily,"; ","src: url('",e[n].path,"')","}"].join("")}return t&&(t=['<style type="text/css">',"<![CDATA[",t,"]]>","</style>"].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return x(t,e,"backgroundColor"),x(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.svgUid=n&&n.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;e<t;e++)this.elements[e].setAttribute("svgUid",this.svgUid),function(e,t){setTimeout(function(){e.createObject(e.elements[t],t)},0)}(this,e)},fabric.ElementsParser.prototype.createObject=function(e,t){var n=fabric[fabric.util.string.capitalize(e.tagName)];if(n&&n.fromElement)try{this._createObject(n,e,t)}catch(r){fabric.log(r)}else this.checkIfDone()},fabric.ElementsParser.prototype._createObject=function(e,t,n){if(e.async)e.fromElement(t,this.createCallback(n,t),this.options);else{var r=e.fromElement(t,this.options);this.resolveGradient(r,"fill"),this.resolveGradient(r,"stroke"),this.reviver&&this.reviver(t,r),this.instances[n]=r,this.checkIfDone()}},fabric.ElementsParser.prototype.createCallback=function(e,t){var n=this;return function(r){n.resolveGradient(r,"fill"),n.resolveGradient(r,"stroke"),n.reviver&&n.reviver(t,r),n.instances[e]=r,n.checkIfDone()}},fabric.ElementsParser.prototype.resolveGradient=function(e,t){var n=e.get(t);if(!/^url\(/.test(n))return;var r=n.slice(5,n.length-1);fabric.gradientDefs[this.svgUid][r]&&e.set(t,fabric.Gradient.fromElement(fabric.gradientDefs[this.svgUid][r],e))},fabric.ElementsParser.prototype.checkIfDone=function(){--this.numElements===0&&(this.instances=this.instances.filter(function(e){return e!=null}),this.callback(this.instances))},function(e){"use strict";function n(e,t){this.x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.x<e.x&&this.y<e.y},lte:function(e){return this.x<=e.x&&this.y<=e.y},gt:function(e){return this.x>e.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o<s;o++){var u=r[o],a=r[(o+1)%s],f=n.intersectLineLine(e,t,u,a);i.appendPoints(f.points)}return i.points.length>0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s<i;s++){var o=e[s],u=e[(s+1)%i],a=n.intersectLinePolygon(o,u,t);r.appendPoints(a.points)}return r.points.length>0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]);if(e==="transparent"){this.setSource([255,255,255,0]);return}t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n<r?6:0);break;case n:i=(r-e)/f+2;break;case r:i=(e-n)/f+4}i/=6}return[Math.round(i*360),Math.round(s*100),Math.round(o*100)]},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHsl:function(){var e=this.getSource(),t=this._rgbToHsl(e[0],e[1],e[2]);return"hsl("+t[0]+","+t[1]+"%,"+t[2]+"%)"},toHsla:function(){var e=this.getSource(),t=this._rgbToHsl(e[0],e[1],e[2]);return"hsla("+t[0]+","+t[1]+"%,"+t[2]+"%,"+e[3]+")"},toHex:function(){var e=this.getSource(),t,n,r;return t=e[0].toString(16),t=t.length===1?"0"+t:t,n=e[1].toString(16),n=n.length===1?"0"+n:n,r=e[2].toString(16),r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)<Number(e)?0:255,this.setSource([n,n,n,r]),this},overlayWith:function(e){e instanceof n||(e=new n(e));var t=[],r=this.getAlpha(),i=.5,s=this.getSource(),o=e.getSource();for(var u=0;u<3;u++)t.push(Math.round(s[u]*(1-i)+o[u]*i));return t[3]=r,this.setSource(t),this}},t.Color.reRGBa=/^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/,t.Color.reHSLa=/^hsla?\(\s*(\d{1,3})\s*,\s*(\d{1,3}\%)\s*,\s*(\d{1,3}\%)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/,t.Color.reHex=/^#?([0-9a-f]{6}|[0-9a-f]{3})$/i,t.Color.colorNameMap={aqua:"#00FFFF",black:"#000000",blue:"#0000FF",fuchsia:"#FF00FF",gray:"#808080",green:"#008000",lime:"#00FF00",maroon:"#800000",navy:"#000080",olive:"#808000",orange:"#FFA500",purple:"#800080",red:"#FF0000",silver:"#C0C0C0",teal:"#008080",white:"#FFFFFF",yellow:"#FFFF00"},t.Color.fromRgb=function(e){return n.fromSource(n.sourceFromRgb(e))},t.Color.sourceFromRgb=function(e){var t=e.match(n.reRGBa);if(t){var r=parseInt(t[1],10)/(/%$/.test(t[1])?100:1)*(/%$/.test(t[1])?255:1),i=parseInt(t[2],10)/(/%$/.test(t[2])?100:1)*(/%$/.test(t[2])?255:1),s=parseInt(t[3],10)/(/%$/.test(t[3])?100:1)*(/%$/.test(t[3])?255:1);return[parseInt(r,10),parseInt(i,10),parseInt(s,10),t[4]?parseFloat(t[4]):1]}},t.Color.fromRgba=n.fromRgb,t.Color.fromHsl=function(e){return n.fromSource(n.sourceFromHsl(e))},t.Color.sourceFromHsl=function(e){var t=e.match(n.reHSLa);if(!t)return;var i=(parseFloat(t[1])%360+360)%360/360,s=parseFloat(t[2])/(/%$/.test(t[2])?100:1),o=parseFloat(t[3])/(/%$/.test(t[3])?100:1),u,a,f;if(s===0)u=a=f=o;else{var l=o<=.5?o*(s+1):o+s-o*s,c=o*2-l;u=r(c,l,i+1/3),a=r(c,l,i),f=r(c,l,i-1/3)}return[Math.round(u*255),Math.round(a*255),Math.round(f*255),t[4]?parseFloat(t[4]):1]},t.Color.fromHsla=n.fromHsl,t.Color.fromHex=function(e){return n.fromSource(n.sourceFromHex(e))},t.Color.sourceFromHex=function(e){if(e.match(n.reHex)){var t=e.slice(e.indexOf("#")+1),r=t.length===3,i=r?t.charAt(0)+t.charAt(0):t.substring(0,2),s=r?t.charAt(1)+t.charAt(1):t.substring(2,4),o=r?t.charAt(2)+t.charAt(2):t.substring(4,6);return[parseInt(i,16),parseInt(s,16),parseInt(o,16),1]}},t.Color.fromSource=function(e){var t=new n;return t.setSource(e),t}}(typeof exports!="undefined"?exports:this),function(){function e(e){var t=e.getAttribute("style"),n=e.getAttribute("offset"),r,i,s;n=parseFloat(n)/(/%$/.test(n)?100:1),n=n<0?0:n>1?1:n;if(t){var o=t.split(/\s*;\s*/);o[o.length-1]===""&&o.pop();for(var u=o.length;u--;){var a=o[u].split(/\s*:\s*/),f=a[0].trim(),l=a[1].trim();f==="stop-color"?r=l:f==="stop-opacity"&&(s=l)}}return r||(r=e.getAttribute("stop-color")||"rgb(0,0,0)"),s||(s=e.getAttribute("stop-opacity")),r=new fabric.Color(r),i=r.getAlpha(),s=isNaN(parseFloat(s))?1:parseFloat(s),s*=i,{offset:n,color:r.toRgb(),opacity:s}}function t(e){return{x1:e.getAttribute("x1")||0,y1:e.getAttribute("y1")||0,x2:e.getAttribute("x2")||"100%",y2:e.getAttribute("y2")||0}}function n(e){return{x1:e.getAttribute("fx")||e.getAttribute("cx")||"50%",y1:e.getAttribute("fy")||e.getAttribute("cy")||"50%",r1:0,x2:e.getAttribute("cx")||"50%",y2:e.getAttribute("cy")||"50%",r2:e.getAttribute("r")||"50%"}}function r(e,t,n){var r,i=0,s=1,o="";for(var u in t){r=parseFloat(t[u],10),typeof t[u]=="string"&&/^\d+%$/.test(t[u])?s=.01:s=1;if(u==="x1"||u==="x2"||u==="r2")s*=n==="objectBoundingBox"?e.width:1,i=n==="objectBoundingBox"?e.left||0:0;else if(u==="y1"||u==="y2")s*=n==="objectBoundingBox"?e.height:1,i=n==="objectBoundingBox"?e.top||0:0;t[u]=r*s+i}if(e.type==="ellipse"&&t.r2!==null&&n==="objectBoundingBox"&&e.rx!==e.ry){var a=e.ry/e.rx;o=" scale(1, "+a+")",t.y1&&(t.y1/=a),t.y2&&(t.y2/=a)}return o}fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(e){e||(e={});var t={};this.id=fabric.Object.__uid++,this.type=e.type||"linear",t={x1:e.coords.x1||0,y1:e.coords.y1||0,x2:e.coords.x2||0,y2:e.coords.y2||0},this.type==="radial"&&(t.r1=e.coords.r1||0,t.r2=e.coords.r2||0),this.coords=t,this.colorStops=e.colorStops.slice(),e.gradientTransform&&(this.gradientTransform=e.gradientTransform),this.offsetX=e.offsetX||this.offsetX,this.offsetY=e.offsetY||this.offsetY},addColorStop:function(e){for(var t in e){var n=new fabric.Color(e[t]);this.colorStops.push({offset:t,color:n.toRgb(),opacity:n.getAlpha()})}return this},toObject:function(){return{type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY}},toSVG:function(e){var t=fabric.util.object.clone(this.coords),n,r;this.colorStops.sort(function(e,t){return e.offset-t.offset});if(!e.group||e.group.type!=="path-group")for(var i in t)if(i==="x1"||i==="x2"||i==="r2")t[i]+=this.offsetX-e.width/2;else if(i==="y1"||i==="y2")t[i]+=this.offsetY-e.height/2;r='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(r+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),this.type==="linear"?n=["<linearGradient ",r,' x1="',t.x1,'" y1="',t.y1,'" x2="',t.x2,'" y2="',t.y2,'">\n']:this.type==="radial"&&(n=["<radialGradient ",r,' cx="',t.x2,'" cy="',t.y2,'" r="',t.r2,'" fx="',t.x1,'" fy="',t.y1,'">\n']);for(var s=0;s<this.colorStops.length;s++)n.push("<stop ",'offset="',this.colorStops[s].offset*100+"%",'" style="stop-color:',this.colorStops[s].color,this.colorStops[s].opacity!=null?";stop-opacity: "+this.colorStops[s].opacity:";",'"/>\n');return n.push(this.type==="linear"?"</linearGradient>\n":"</radialGradient>\n"),n.join("")},toLive:function(e,t){var n,r=fabric.util.object.clone(this.coords);if(!this.type)return;if(t.group&&t.group.type==="path-group")for(var i in r)if(i==="x1"||i==="x2")r[i]+=-this.offsetX+t.width/2;else if(i==="y1"||i==="y2")r[i]+=-this.offsetY+t.height/2;this.type==="linear"?n=e.createLinearGradient(r.x1,r.y1,r.x2,r.y2):this.type==="radial"&&(n=e.createRadialGradient(r.x1,r.y1,r.r1,r.x2,r.y2,r.r2));for(var s=0,o=this.colorStops.length;s<o;s++){var u=this.colorStops[s].color,a=this.colorStops[s].opacity,f=this.colorStops[s].offset;typeof a!="undefined"&&(u=(new fabric.Color(u)).setAlpha(a).toRgba()),n.addColorStop(parseFloat(f),u)}return n}}),fabric.util.object.extend(fabric.Gradient,{fromElement:function(i,s){var o=i.getElementsByTagName("stop"),u=i.nodeName==="linearGradient"?"linear":"radial",a=i.getAttribute("gradientUnits")||"objectBoundingBox",f=i.getAttribute("gradientTransform"),l=[],c={},h;u==="linear"?c=t(i):u==="radial"&&(c=n(i));for(var p=o.length;p--;)l.push(e(o[p]));h=r(s,c,a);var d=new fabric.Gradient({type:u,coords:c,colorStops:l,offsetX:-s.left,offsetY:-s.top});if(f||h!=="")d.gradientTransform=fabric.parseTransformAttribute((f||"")+h);return d},forObject:function(e,t){return t||(t={}),r(e,t.coords,"userSpaceOnUse"),new fabric.Gradient(t)}})}(),fabric.Pattern=fabric.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,initialize:function(e){e||(e={}),this.id=fabric.Object.__uid++;if(e.source)if(typeof e.source=="string")if(typeof fabric.util.getFunctionBody(e.source)!="undefined")this.source=new Function(fabric.util.getFunctionBody(e.source));else{var t=this;this.source=fabric.util.createImage(),fabric.util.loadImage(e.source,function(e){t.source=e})}else this.source=e.source;e.repeat&&(this.repeat=e.repeat),e.offsetX&&(this.offsetX=e.offsetX),e.offsetY&&(this.offsetY=e.offsetY)},toObject:function(){var e;return typeof this.source=="function"?e=String(this.source):typeof this.source.src=="string"&&(e=this.source.src),{source:e,repeat:this.repeat,offsetX:this.offsetX,offsetY:this.offsetY}},toSVG:function(e){var t=typeof this.source=="function"?this.source():this.source,n=t.width/e.getWidth(),r=t.height/e.getHeight(),i=this.offsetX/e.getWidth(),s=this.offsetY/e.getHeight(),o="";if(this.repeat==="repeat-x"||this.repeat==="no-repeat")r=1;if(this.repeat==="repeat-y"||this.repeat==="no-repeat")n=1;return t.src?o=t.src:t.toDataURL&&(o=t.toDataURL()),'<pattern id="SVGID_'+this.id+'" x="'+i+'" y="'+s+'" width="'+n+'" height="'+r+'">\n'+'<image x="0" y="0"'+' width="'+t.width+'" height="'+t.height+'" xlink:href="'+o+'"></image>\n'+"</pattern>\n"},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha",n=40,r=40;return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),e.width&&e.height&&(n=Math.abs(this.offsetX/e.getWidth())*100+20,r=Math.abs(this.offsetY/e.getHeight())*100+20),'<filter id="SVGID_'+this.id+'" y="-'+r+'%" height="'+(100+2*r)+'%" '+'x="-'+n+'%" width="'+(100+2*n)+'%" '+">\n"+' <feGaussianBlur in="'+t+'" stdDeviation="'+(this.blur?this.blur/3:0)+'"></feGaussianBlur>\n'+' <feOffset dx="'+this.offsetX+'" dy="'+this.offsetY+'"></feOffset>\n'+" <feMerge>\n"+" <feMergeNode></feMergeNode>\n"+' <feMergeNode in="SourceGraphic"></feMergeNode>\n'+" </feMerge>\n"+"</filter>\n"},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,preserveObjectStacking:!1,viewportTransform:[1,0,0,1,0,0],onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),this._setImageSmoothing(),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},_setImageSmoothing:function(){var e=this.getContext();e.imageSmoothingEnabled=this.imageSmoothingEnabled,e.webkitImageSmoothingEnabled=this.imageSmoothingEnabled,e.mozImageSmoothingEnabled=this.imageSmoothingEnabled,e.msImageSmoothingEnabled=this.imageSmoothingEnabled,e.oImageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this,r&&r.crossOrigin):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t&&t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice()},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e,t){return this.setDimensions({width:e},t)},setHeight:function(e,t){return this.setDimensions({height:e},t)},setDimensions:function(e,t){var n;t=t||{};for(var r in e)n=e[r],t.cssOnly||(this._setBackstoreDimension(r,e[r]),n+="px"),t.backstoreOnly||this._setCssDimension(r,n);return t.cssOnly||this.renderAll(),this.calcOffset(),this},_setBackstoreDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.upperCanvasEl&&(this.upperCanvasEl[e]=t),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this[e]=t,this},_setCssDimension:function(e,t){return this.lowerCanvasEl.style[e]=t,this.upperCanvasEl&&(this.upperCanvasEl.style[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t),this},getZoom:function(){return Math.sqrt(this.viewportTransform[0]*this.viewportTransform[3])},setViewportTransform:function(e){this.viewportTransform=e,this.renderAll();for(var t=0,n=this._objects.length;t<n;t++)this._objects[t].setCoords();return this},zoomToPoint:function(e,t){var n=e;e=fabric.util.transformPoint(e,fabric.util.invertTransform(this.viewportTransform)),this.viewportTransform[0]=t,this.viewportTransform[3]=t;var r=fabric.util.transformPoint(e,this.viewportTransform);this.viewportTransform[4]+=n.x-r.x,this.viewportTransform[5]+=n.y-r.y,this.renderAll();for(var i=0,s=this._objects.length;i<s;i++)this._objects[i].setCoords();return this},setZoom:function(e){return this.zoomToPoint(new fabric.Point(0,0),e),this},absolutePan:function(e){this.viewportTransform[4]=-e.x,this.viewportTransform[5]=-e.y,this.renderAll();for(var t=0,n=this._objects.length;t<n;t++)this._objects[t].setCoords();return this},relativePan:function(e){return this.absolutePan(new fabric.Point(-e.x-this.viewportTransform[4],-e.y-this.viewportTransform[5]))},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;e.save();var n=this.viewportTransform;e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),this._shouldRenderObject(t)&&t.render(e),e.restore(),this.controlsAboveOverlay||t._renderControls(e)},_shouldRenderObject:function(e){return e?e!==this.getActiveGroup()||!this.preserveObjectStacking:!1},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.canvas=this,e.setCoords(),this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t||this.preserveObjectStacking)for(n=0,r=this._objects.length;n<r;++n)this._draw(e,this._objects[n]);else for(n=0,r=this._objects.length;n<r;++n)this._objects[n]&&!t.contains(this._objects[n])&&this._draw(e,this._objects[n])},_renderActiveGroup:function(e,t){if(t){var n=[];this.forEachObject(function(e){t.contains(e)&&n.push(e)}),t._set("objects",n),this._draw(e,t)}},_renderBackground:function(e){this.backgroundColor&&(e.fillStyle=this.backgroundColor.toLive?this.backgroundColor.toLive(e):this.backgroundColor,e.fillRect(this.backgroundColor.offsetX||0,this.backgroundColor.offsetY||0,this.width,this.height)),this.backgroundImage&&this._draw(e,this.backgroundImage)},_renderOverlay:function(e){this.overlayColor&&(e.fillStyle=this.overlayColor.toLive?this.overlayColor.toLive(e):this.overlayColor,e.fillRect(this.overlayColor.offsetX||0,this.overlayColor.offsetY||0,this.width,this.height)),this.overlayImage&&this._draw(e,this.overlayImage)},renderTop:function(){var e=this.contextTop||this.contextContainer;this.clearContext(e),this.selection&&this._groupSelector&&this._drawSelection();var t=this.getActiveGroup();return t&&t.render(e),this._renderOverlay(e),this.fire("after:render"),this},getCenter:function(){return{top:this.getHeight()/2,left:this.getWidth()/2}},centerObjectH:function(e){return this._centerObject(e,new fabric.Point(this.getCenter().left,e.getCenterPoint().y)),this.renderAll(),this},centerObjectV:function(e){return this._centerObject(e,new fabric.Point(e.getCenterPoint().x,this.getCenter().top)),this.renderAll(),this},centerObject:function(e){var t=this.getCenter();return this._centerObject(e,new fabric.Point(t.left,t.top)),this.renderAll(),this},_centerObject:function(e,t){return e.setPositionByOrigin(t,"center","center"),this},toDatalessJSON:function(e){return this.toDatalessObject(e)},toObject:function(e){return this._toObjectMethod("toObject",e)},toDatalessObject:function(e){return this._toObjectMethod("toDatalessObject",e)},_toObjectMethod:function(t,n){var r=this.getActiveGroup();r&&this.discardActiveGroup();var i={objects:this._toObjects(t,n)};return e(i,this.__serializeBgOverlay()),fabric.util.populateWithProperties(this,i,n),r&&(this.setActiveGroup(new fabric.Group(r.getObjects(),{originX:"center",originY:"center"})),r.forEachObject(function(e){e.set("active",!0)}),this._currentTransform&&(this._currentTransform.target=this.getActiveGroup())),i},_toObjects:function(e,t){return this.getObjects().map(function(n){return this._toObject(n,e,t)},this)},_toObject:function(e,t,n){var r;this.includeDefaultValues||(r=e.includeDefaultValues,e.includeDefaultValues=!1);var i=e[t](n);return this.includeDefaultValues||(e.includeDefaultValues=r),i},__serializeBgOverlay:function(){var e={background:this.backgroundColor&&this.backgroundColor.toObject?this.backgroundColor.toObject():this.backgroundColor};return this.overlayColor&&(e.overlay=this.overlayColor.toObject?this.overlayColor.toObject():this.overlayColor),this.backgroundImage&&(e.backgroundImage=this.backgroundImage.toObject()),this.overlayImage&&(e.overlayImage=this.overlayImage.toObject()),e},svgViewportTransformation:!0,toSVG:function(e,t){e||(e={});var n=[];return this._setSVGPreamble(n,e),this._setSVGHeader(n,e),this._setSVGBgOverlayColor(n,"backgroundColor"),this._setSVGBgOverlayImage(n,"backgroundImage"),this._setSVGObjects(n,t),this._setSVGBgOverlayColor(n,"overlayColor"),this._setSVGBgOverlayImage(n,"overlayImage"),n.push("</svg>"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('<?xml version="1.0" encoding="',t.encoding||"UTF-8",'" standalone="no" ?>','<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" ','"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n')},_setSVGHeader:function(e,t){var n,r,i;t.viewBox?(n=t.viewBox.width,r=t.viewBox.height):(n=this.width,r=this.height,this.svgViewportTransformation||(i=this.viewportTransform,n/=i[0],r/=i[3])),e.push("<svg ",'xmlns="http://www.w3.org/2000/svg" ','xmlns:xlink="http://www.w3.org/1999/xlink" ','version="1.1" ','width="',n,'" ','height="',r,'" ',this.backgroundColor&&!this.backgroundColor.toLive?'style="background-color: '+this.backgroundColor+'" ':null,t.viewBox?'viewBox="'+t.viewBox.x+" "+t.viewBox.y+" "+t.viewBox.width+" "+t.viewBox.height+'" ':null,'xml:space="preserve">',"<desc>Created with Fabric.js ",fabric.version,"</desc>","<defs>",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"</defs>")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r<s;r++)e.push(i[r].toSVG(t));n&&(this.setActiveGroup(new fabric.Group(n.getObjects())),n.forEachObject(function(e){e.set("active",!0)}))},_setSVGBgOverlayImage:function(e,t){this[t]&&this[t].toSVG&&e.push(this[t].toSVG())},_setSVGBgOverlayColor:function(e,t){this[t]&&this[t].source?e.push('<rect x="',this[t].offsetX,'" y="',this[t].offsetY,'" ','width="',this[t].repeat==="repeat-y"||this[t].repeat==="no-repeat"?this[t].source.width:this.width,'" height="',this[t].repeat==="repeat-x"||this[t].repeat==="no-repeat"?this[t].source.height:this.height,'" fill="url(#'+t+'Pattern)"',"></rect>"):this[t]&&t==="overlayColor"&&e.push('<rect x="0" y="0" ','width="',this.width,'" height="',this.height,'" fill="',this[t],'"',"></rect>")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects +[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i<this._objects.length;++i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t+1;return r},moveTo:function(e,t){return n(this._objects,e),this._objects.splice(t,0,e),this.renderAll&&this.renderAll()},dispose:function(){return this.clear(),this.interactive&&this.removeListeners(),this},toString:function(){return"#<fabric.Canvas ("+this.complexity()+"): "+"{ objects: "+this.getObjects().length+" }>"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop,t=this.canvas.viewportTransform,n=this._points[0],r=this._points[1];e.save(),e.transform(t[0],t[1],t[2],t[3],t[4],t[5]),e.beginPath(),this._points.length===2&&n.x===r.x&&n.y===r.y&&(n.x-=.5,r.x+=.5),e.moveTo(n.x,n.y);for(var i=1,s=this._points.length;i<s;i++){var o=n.midPointFrom(r);e.quadraticCurveTo(n.x,n.y,o.x,o.y),n=this._points[i],r=this._points[i+1]}e.lineTo(n.x,n.y),e.stroke(),e.restore()},convertPointsToSVGPath:function(e){var t=[],n=new fabric.Point(e[0].x,e[0].y),r=new fabric.Point(e[1].x,e[1].y);t.push("M ",e[0].x," ",e[0].y," ");for(var i=1,s=e.length;i<s;i++){var o=n.midPointFrom(r);t.push("Q ",n.x," ",n.y," ",o.x," ",o.y," "),n=new fabric.Point(e[i].x,e[i].y),i+1<e.length&&(r=new fabric.Point(e[i+1].x,e[i+1].y))}return t.push("L ",n.x," ",n.y," "),t},createPath:function(e){var t=new fabric.Path(e,{fill:null,stroke:this.color,strokeWidth:this.width,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,originX:"center",originY:"center"});return this.shadow&&(this.shadow.affectStroke=!0,t.setShadow(this.shadow)),t},_finalizeAndAddPath:function(){var e=this.canvas.contextTop;e.closePath();var t=this.convertPointsToSVGPath(this._points).join("");if(t==="M 0 0 Q 0 0 0 0 L 0 0"){this.canvas.renderAll();return}var n=this.createPath(t);this.canvas.add(n),n.setCoords(),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderAll(),this.canvas.fire("path:created",{path:n})}})}(),fabric.CircleBrush=fabric.util.createClass(fabric.BaseBrush,{width:10,initialize:function(e){this.canvas=e,this.points=[]},drawDot:function(e){var t=this.addPoint(e),n=this.canvas.contextTop,r=this.canvas.viewportTransform;n.save(),n.transform(r[0],r[1],r[2],r[3],r[4],r[5]),n.fillStyle=t.fill,n.beginPath(),n.arc(t.x,t.y,t.radius,0,Math.PI*2,!1),n.closePath(),n.fill(),n.restore()},onMouseDown:function(e){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(e)},onMouseMove:function(e){this.drawDot(e)},onMouseUp:function(){var e=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;var t=[];for(var n=0,r=this.points.length;n<r;n++){var i=this.points[n],s=new fabric.Circle({radius:i.radius,left:i.x,top:i.y,originX:"center",originY:"center",fill:i.fill});this.shadow&&s.setShadow(this.shadow),t.push(s)}var o=new fabric.Group(t,{originX:"center",originY:"center"});o.canvas=this.canvas,this.canvas.add(o),this.canvas.fire("path:created",{path:o}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=e,this.canvas.renderAll()},addPoint:function(e){var t=new fabric.Point(e.x,e.y),n=fabric.util.getRandomInt(Math.max(0,this.width-20),this.width+20)/2,r=(new fabric.Color(this.color)).setAlpha(fabric.util.getRandomInt(0,100)/100).toRgba();return t.radius=n,t.fill=r,this.points.push(t),t}}),fabric.SprayBrush=fabric.util.createClass(fabric.BaseBrush,{width:10,density:20,dotWidth:1,dotWidthVariance:1,randomOpacity:!1,optimizeOverlapping:!0,initialize:function(e){this.canvas=e,this.sprayChunks=[]},onMouseDown:function(e){this.sprayChunks.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.addSprayChunk(e),this.render()},onMouseMove:function(e){this.addSprayChunk(e),this.render()},onMouseUp:function(){var e=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;var t=[];for(var n=0,r=this.sprayChunks.length;n<r;n++){var i=this.sprayChunks[n];for(var s=0,o=i.length;s<o;s++){var u=new fabric.Rect({width:i[s].width,height:i[s].width,left:i[s].x+1,top:i[s].y+1,originX:"center",originY:"center",fill:this.color});this.shadow&&u.setShadow(this.shadow),t.push(u)}}this.optimizeOverlapping&&(t=this._getOptimizedRects(t));var a=new fabric.Group(t,{originX:"center",originY:"center"});a.canvas=this.canvas,this.canvas.add(a),this.canvas.fire("path:created",{path:a}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=e,this.canvas.renderAll()},_getOptimizedRects:function(e){var t={},n;for(var r=0,i=e.length;r<i;r++)n=e[r].left+""+e[r].top,t[n]||(t[n]=e[r]);var s=[];for(n in t)s.push(t[n]);return s},render:function(){var e=this.canvas.contextTop;e.fillStyle=this.color;var t=this.canvas.viewportTransform;e.save(),e.transform(t[0],t[1],t[2],t[3],t[4],t[5]);for(var n=0,r=this.sprayChunkPoints.length;n<r;n++){var i=this.sprayChunkPoints[n];typeof i.opacity!="undefined"&&(e.globalAlpha=i.opacity),e.fillRect(i.x,i.y,i.width,i.width)}e.restore()},addSprayChunk:function(e){this.sprayChunkPoints=[];var t,n,r,i=this.width/2;for(var s=0;s<this.density;s++){t=fabric.util.getRandomInt(e.x-i,e.x+i),n=fabric.util.getRandomInt(e.y-i,e.y+i),this.dotWidthVariance?r=fabric.util.getRandomInt(Math.max(1,this.dotWidth-this.dotWidthVariance),this.dotWidth+this.dotWidthVariance):r=this.dotWidth;var o=new fabric.Point(t,n);o.width=r,this.randomOpacity&&(o.opacity=fabric.util.getRandomInt(0,100)/100),this.sprayChunkPoints.push(o)}this.sprayChunks.push(this.sprayChunkPoints)}}),fabric.PatternBrush=fabric.util.createClass(fabric.PencilBrush,{getPatternSrc:function(){var e=20,t=5,n=fabric.document.createElement("canvas"),r=n.getContext("2d");return n.width=n.height=e+t,r.fillStyle=this.color,r.beginPath(),r.arc(e/2,e/2,e/2,0,Math.PI*2,!1),r.closePath(),r.fill(),n},getPatternSrcFunction:function(){return String(this.getPatternSrc).replace("this.color",'"'+this.color+'"')},getPattern:function(){return this.canvas.contextTop.createPattern(this.source||this.getPatternSrc(),"repeat")},_setBrushStyles:function(){this.callSuper("_setBrushStyles"),this.canvas.contextTop.strokeStyle=this.getPattern()},createPath:function(e){var t=this.callSuper("createPath",e);return t.stroke=new fabric.Pattern({source:this.source||this.getPatternSrcFunction()}),t}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=fabric.util.radiansToDegrees,r=Math.atan2,i=Math.abs,s=.5;fabric.Canvas=fabric.util.createClass(fabric.StaticCanvas,{initialize:function(e,t){t||(t={}),this._initStatic(e,t),this._initInteractive(),this._createCacheCanvas(),fabric.Canvas.activeInstance=this},uniScaleTransform:!1,centeredScaling:!1,centeredRotation:!1,interactive:!0,selection:!0,selectionColor:"rgba(100, 100, 255, 0.3)",selectionDashArray:[],selectionBorderColor:"rgba(255, 255, 255, 0.3)",selectionLineWidth:1,hoverCursor:"move",moveCursor:"move",defaultCursor:"default",freeDrawingCursor:"crosshair",rotationCursor:"crosshair",containerClass:"canvas-container",perPixelTargetFind:!1,targetFindTolerance:0,skipTargetFind:!1,_initInteractive:function(){this._currentTransform=null,this._groupSelector=null,this._initWrapperElement(),this._createUpperCanvas(),this._initEventListeners(),this.freeDrawingBrush=fabric.PencilBrush&&new fabric.PencilBrush(this),this.calcOffset()},_resetCurrentTransform:function(e){var t=this._currentTransform;t.target.set({scaleX:t.original.scaleX,scaleY:t.original.scaleY,left:t.original.left,top:t.original.top}),this._shouldCenterTransform(e,t.target)?t.action==="rotate"?this._setOriginToCenter(t.target):(t.originX!=="center"&&(t.originX==="right"?t.mouseXSign=-1:t.mouseXSign=1),t.originY!=="center"&&(t.originY==="bottom"?t.mouseYSign=-1:t.mouseYSign=1),t.originX="center",t.originY="center"):(t.originX=t.original.originX,t.originY=t.original.originY)},containsPoint:function(e,t){var n=this.getPointer(e,!0),r=this._normalizePointer(t,n);return t.containsPoint(r)||t._findTargetCorner(n)},_normalizePointer:function(e,t){var n=this.getActiveGroup(),r=t.x,i=t.y,s=n&&e.type!=="group"&&n.contains(e),o;return s&&(o=new fabric.Point(n.left,n.top),o=fabric.util.transformPoint(o,this.viewportTransform,!0),r-=o.x,i-=o.y),{x:r,y:i}},isTargetTransparent:function(e,t,n){var r=e.hasBorders,i=e.transparentCorners;e.hasBorders=e.transparentCorners=!1,this._draw(this.contextCache,e),e.hasBorders=r,e.transparentCorners=i;var s=fabric.util.isTransparent(this.contextCache,t,n,this.targetFindTolerance);return this.clearContext(this.contextCache),s},_shouldClearSelection:function(e,t){var n=this.getActiveGroup(),r=this.getActiveObject();return!t||t&&n&&!n.contains(t)&&n!==t&&!e.shiftKey||t&&!t.evented||t&&!t.selectable&&r&&r!==t},_shouldCenterTransform:function(e,t){if(!t)return;var n=this._currentTransform,r;return n.action==="scale"||n.action==="scaleX"||n.action==="scaleY"?r=this.centeredScaling||t.centeredScaling:n.action==="rotate"&&(r=this.centeredRotation||t.centeredRotation),r?!e.altKey:e.altKey},_getOriginFromCorner:function(e,t){var n={x:e.originX,y:e.originY};if(t==="ml"||t==="tl"||t==="bl")n.x="right";else if(t==="mr"||t==="tr"||t==="br")n.x="left";if(t==="tl"||t==="mt"||t==="tr")n.y="bottom";else if(t==="bl"||t==="mb"||t==="br")n.y="top";return n},_getActionFromCorner:function(e,t){var n="drag";return t&&(n=t==="ml"||t==="mr"?"scaleX":t==="mt"||t==="mb"?"scaleY":t==="mtr"?"rotate":"scale"),n},_setupCurrentTransform:function(e,n){if(!n)return;var r=this.getPointer(e),i=n._findTargetCorner(this.getPointer(e,!0)),s=this._getActionFromCorner(n,i),o=this._getOriginFromCorner(n,i);this._currentTransform={target:n,action:s,scaleX:n.scaleX,scaleY:n.scaleY,offsetX:r.x-n.left,offsetY:r.y-n.top,originX:o.x,originY:o.y,ex:r.x,ey:r.y,left:n.left,top:n.top,theta:t(n.angle),width:n.width*n.scaleX,mouseXSign:1,mouseYSign:1},this._currentTransform.original={left:n.left,top:n.top,scaleX:n.scaleX,scaleY:n.scaleY,originX:o.x,originY:o.y},this._resetCurrentTransform(e)},_translateObject:function(e,t){var n=this._currentTransform.target;n.get("lockMovementX")||n.set("left",e-this._currentTransform.offsetX),n.get("lockMovementY")||n.set("top",t-this._currentTransform.offsetY)},_scaleObject:function(e,t,n){var r=this._currentTransform,i=r.target,s=i.get("lockScalingX"),o=i.get("lockScalingY"),u=i.get("lockScalingFlip");if(s&&o)return;var a=i.translateToOriginPoint(i.getCenterPoint(),r.originX,r.originY),f=i.toLocalPoint(new fabric.Point(e,t),r.originX,r.originY);this._setLocalMouse(f,r),this._setObjectScale(f,r,s,o,n,u),i.setPositionByOrigin(a,r.originX,r.originY)},_setObjectScale:function(e,t,n,r,i,s){var o=t.target,u=!1,a=!1,f=o.stroke?o.strokeWidth:0;t.newScaleX=e.x/(o.width+f/2),t.newScaleY=e.y/(o.height+f/2),s&&t.newScaleX<=0&&t.newScaleX<o.scaleX&&(u=!0),s&&t.newScaleY<=0&&t.newScaleY<o.scaleY&&(a=!0),i==="equally"&&!n&&!r?u||a||this._scaleObjectEqually(e,o,t):i?i==="x"&&!o.get("lockUniScaling")?u||n||o.set("scaleX",t.newScaleX):i==="y"&&!o.get("lockUniScaling")&&(a||r||o.set("scaleY",t.newScaleY)):(u||n||o.set("scaleX",t.newScaleX),a||r||o.set("scaleY",t.newScaleY)),u||a||this._flipObject(t,i)},_scaleObjectEqually:function(e,t,n){var r=e.y+e.x,i=t.stroke?t.strokeWidth:0,s=(t.height+i/2)*n.original.scaleY+(t.width+i/2)*n.original.scaleX;n.newScaleX=n.original.scaleX*r/s,n.newScaleY=n.original.scaleY*r/s,t.set("scaleX",n.newScaleX),t.set("scaleY",n.newScaleY)},_flipObject:function(e,t){e.newScaleX<0&&t!=="y"&&(e.originX==="left"?e.originX="right":e.originX==="right"&&(e.originX="left")),e.newScaleY<0&&t!=="x"&&(e.originY==="top"?e.originY="bottom":e.originY==="bottom"&&(e.originY="top"))},_setLocalMouse:function(e,t){var n=t.target;t.originX==="right"?e.x*=-1:t.originX==="center"&&(e.x*=t.mouseXSign*2,e.x<0&&(t.mouseXSign=-t.mouseXSign)),t.originY==="bottom"?e.y*=-1:t.originY==="center"&&(e.y*=t.mouseYSign*2,e.y<0&&(t.mouseYSign=-t.mouseYSign)),i(e.x)>n.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u%360},setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e,!0))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e,!0),r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t,n,r){r||(r=this.upperCanvasEl);var i=e(t,r),s=r.getBoundingClientRect(),o=s.width||0,u=s.height||0,a;if(!o||!u)"top"in s&&"bottom"in s&&(u=Math.abs(s.top-s.bottom)),"right"in s&&"left"in s&&(o=Math.abs(s.right-s.left));return this.calcOffset(),i.x=i.x-this._offset.left,i.y=i.y-this._offset.top,n||(i=fabric.util.transformPoint(i,fabric.util.invertTransform(this.viewportTransform))),o===0||u===0?a={width:1,height:1}:a={width:r.width/o,height:r.height/u},{x:i.x*a.width,y:i.y*a.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&e.set("active",!0)},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t<n;t++)e[t].set("active",!1);return this._discardActiveGroup(),this._discardActiveObject(),this},deactivateAllWithDispatch:function(e){var t=this.getActiveGroup()||this.getActiveObject();return t&&this.fire("before:selection:cleared",{target:t,e:e}),this.deactivateAll(),t&&this.fire("selection:cleared",{e:e}),this},drawControls:function(e){var t=this.getActiveGroup();t?this._drawGroupControls(e,t):this._drawObjectsControls(e)},_drawGroupControls:function(e,t){t._renderControls(e)},_drawObjectsControls:function(e){for(var t=0,n=this._objects.length;t<n;++t){if(!this._objects[t]||!this._objects[t].active)continue;this._objects[t]._renderControls(e),this.lastRenderedObjectWithControlsAboveOverlay=this._objects[t]}}});for(var o in fabric.StaticCanvas)o!=="prototype"&&(fabric.Canvas[o]=fabric.StaticCanvas[o]);fabric.isTouchSupported&&(fabric.Canvas.prototype._setCursorFromEvent=function(){}),fabric.Element=fabric.Canvas}(),function(){var e={mt:0,tr:1,mr:2,br:3,mb:4,bl:5,ml:6,tl:7},t=fabric.util.addListener,n=fabric.util.removeListener;fabric.util.object.extend(fabric.Canvas.prototype,{cursorMap:["n-resize","ne-resize","e-resize","se-resize","s-resize","sw-resize","w-resize","nw-resize"],_initEventListeners:function(){this._bindEvents(),t(fabric.window,"resize",this._onResize),t(this.upperCanvasEl,"mousedown",this._onMouseDown),t(this.upperCanvasEl,"mousemove",this._onMouseMove),t(this.upperCanvasEl,"mousewheel",this._onMouseWheel),t(this.upperCanvasEl,"touchstart",this._onMouseDown),t(this.upperCanvasEl,"touchmove",this._onMouseMove),typeof Event!="undefined"&&"add"in Event&&(Event.add(this.upperCanvasEl,"gesture",this._onGesture),Event.add(this.upperCanvasEl,"drag",this._onDrag),Event.add(this.upperCanvasEl,"orientation",this._onOrientationChange),Event.add(this.upperCanvasEl,"shake",this._onShake),Event.add(this.upperCanvasEl,"longpress",this._onLongPress))},_bindEvents:function(){this._onMouseDown=this._onMouseDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this)},removeListeners:function(){n(fabric.window,"resize",this._onResize),n(this.upperCanvasEl,"mousedown",this._onMouseDown),n(this.upperCanvasEl,"mousemove",this._onMouseMove),n(this.upperCanvasEl,"mousewheel",this._onMouseWheel),n(this.upperCanvasEl,"touchstart",this._onMouseDown),n(this.upperCanvasEl,"touchmove",this._onMouseMove),typeof Event!="undefined"&&"remove"in Event&&(Event.remove(this.upperCanvasEl,"gesture",this._onGesture),Event.remove(this.upperCanvasEl,"drag",this._onDrag),Event.remove(this.upperCanvasEl,"orientation",this._onOrientationChange),Event.remove(this.upperCanvasEl,"shake",this._onShake),Event.remove(this.upperCanvasEl,"longpress",this._onLongPress))},_onGesture:function(e,t){this.__onTransformGesture&&this.__onTransformGesture(e,t)},_onDrag:function(e,t){this.__onDrag&&this.__onDrag(e,t)},_onMouseWheel:function(e,t){this.__onMouseWheel&&this.__onMouseWheel(e,t)},_onOrientationChange:function(e,t){this.__onOrientationChange&&this.__onOrientationChange(e,t)},_onShake:function(e,t){this.__onShake&&this.__onShake(e,t)},_onLongPress:function(e,t){this.__onLongPress&&this.__onLongPress(e,t)},_onMouseDown:function(e){this.__onMouseDown(e),t(fabric.document,"touchend",this._onMouseUp),t(fabric.document,"touchmove",this._onMouseMove),n(this.upperCanvasEl,"mousemove",this._onMouseMove),n(this.upperCanvasEl,"touchmove",this._onMouseMove),e.type==="touchstart"?n(this.upperCanvasEl,"mousedown",this._onMouseDown):(t(fabric.document,"mouseup",this._onMouseUp),t(fabric.document,"mousemove",this._onMouseMove))},_onMouseUp:function(e){this.__onMouseUp(e),n(fabric.document,"mouseup",this._onMouseUp),n(fabric.document,"touchend",this._onMouseUp),n(fabric.document,"mousemove",this._onMouseMove),n(fabric.document,"touchmove",this._onMouseMove),t(this.upperCanvasEl,"mousemove",this._onMouseMove),t(this.upperCanvasEl,"touchmove",this._onMouseMove);if(e.type==="touchend"){var r=this;setTimeout(function(){t(r.upperCanvasEl,"mousedown",r._onMouseDown)},400)}},_onMouseMove:function(e){!this.allowTouchScrolling&&e.preventDefault&&e.preventDefault(),this.__onMouseMove(e)},_onResize:function(){this.calcOffset()},_shouldRender:function(e,t){var n=this.getActiveGroup()||this.getActiveObject();return!!(e&&(e.isMoving||e!==n)||!e&&!!n||!e&&!n&&!this._groupSelector||t&&this._previousPointer&&this.selection&&(t.x!==this._previousPointer.x||t.y!==this._previousPointer.y))},__onMouseUp:function(e){var t;if(this.isDrawingMode&&this._isCurrentlyDrawing){this._onMouseUpInDrawingMode(e);return}this._currentTransform?(this._finalizeCurrentTransform(),t=this._currentTransform.target):t=this.findTarget(e,!0);var n=this._shouldRender(t,this.getPointer(e));this._maybeGroupObjects(e),t&&(t.isMoving=!1),n&&this.renderAll(),this._handleCursorAndEvent(e,t)},_handleCursorAndEvent:function(e,t){this._setCursorFromEvent(e,t);var n=this;setTimeout(function(){n._setCursorFromEvent(e,t)},50),this.fire("mouse:up",{target:t,e:e}),t&&t.fire("mouseup",{e:e})},_finalizeCurrentTransform:function(){var e=this._currentTransform,t=e.target;t._scaling&&(t._scaling=!1),t.setCoords(),this.stateful&&t.hasStateChanged()&&(this.fire("object:modified",{target:t}),t.fire("modified")),this._restoreOriginXY(t)},_restoreOriginXY:function(e){if(this._previousOriginX&&this._previousOriginY){var t=e.translateToOriginPoint(e.getCenterPoint(),this._previousOriginX,this._previousOriginY);e.originX=this._previousOriginX,e.originY=this._previousOriginY,e.left=t.x,e.top=t.y,this._previousOriginX=null,this._previousOriginY=null}},_onMouseDownInDrawingMode:function(e){this._isCurrentlyDrawing=!0,this.discardActiveObject(e).renderAll(),this.clipTo&&fabric.util.clipContext(this,this.contextTop);var t=fabric.util.invertTransform(this.viewportTransform),n=fabric.util.transformPoint(this.getPointer(e,!0),t);this.freeDrawingBrush.onMouseDown(n),this.fire("mouse:down",{e:e});var r=this.findTarget(e);typeof r!="undefined"&&r.fire("mousedown",{e:e,target:r})},_onMouseMoveInDrawingMode:function(e){if(this._isCurrentlyDrawing){var t=fabric.util.invertTransform(this.viewportTransform),n=fabric.util.transformPoint(this.getPointer(e,!0),t);this.freeDrawingBrush.onMouseMove(n)}this.setCursor(this.freeDrawingCursor),this.fire("mouse:move",{e:e});var r=this.findTarget(e);typeof r!="undefined"&&r.fire("mousemove",{e:e,target:r})},_onMouseUpInDrawingMode:function(e){this._isCurrentlyDrawing=!1,this.clipTo&&this.contextTop.restore(),this.freeDrawingBrush.onMouseUp(),this.fire("mouse:up",{e:e});var t=this.findTarget(e);typeof t!="undefined"&&t.fire("mouseup",{e:e,target:t})},__onMouseDown:function(e){var t="which"in e?e.which===1:e.button===1;if(!t&&!fabric.isTouchSupported)return;if(this.isDrawingMode){this._onMouseDownInDrawingMode(e);return}if(this._currentTransform)return;var n=this.findTarget(e),r=this.getPointer(e,!0);this._previousPointer=r;var i=this._shouldRender(n,r),s=this._shouldGroup(e,n);this._shouldClearSelection(e,n)?this._clearSelection(e,n,r):s&&(this._handleGrouping(e,n),n=this.getActiveGroup()),n&&n.selectable&&!s&&(this._beforeTransform(e,n),this._setupCurrentTransform(e,n)),i&&this.renderAll(),this.fire("mouse:down",{target:n,e:e}),n&&n.fire("mousedown",{e:e})},_beforeTransform:function(e,t){var n;this.stateful&&t.saveState(),(n=t._findTargetCorner(this.getPointer(e)))&&this.onBeforeScaleRotate(t),t!==this.getActiveGroup()&&t!==this.getActiveObject()&&(this.deactivateAll(),this.setActiveObject(t,e))},_clearSelection:function(e,t,n){this.deactivateAllWithDispatch(e),t&&t.selectable?this.setActiveObject(t,e):this.selection&&(this._groupSelector={ex:n.x,ey:n.y,top:0,left:0})},_setOriginToCenter:function(e){this._previousOriginX=this._currentTransform.target.originX,this._previousOriginY=this._currentTransform.target.originY;var t=e.getCenterPoint();e.originX="center",e.originY="center",e.left=t.x,e.top=t.y,this._currentTransform.left=e.left,this._currentTransform.top=e.top},_setCenterToOrigin:function(e){var t=e.translateToOriginPoint(e.getCenterPoint(),this._previousOriginX,this._previousOriginY);e.originX=this._previousOriginX,e.originY=this._previousOriginY,e.left=t.x,e.top=t.y,this._previousOriginX=null,this._previousOriginY=null},__onMouseMove:function(e){var t,n;if(this.isDrawingMode){this._onMouseMoveInDrawingMode(e);return}if(typeof e.touches!="undefined"&&e.touches.length>1)return;var r=this._groupSelector;r?(n=this.getPointer(e,!0),r.left=n.x-r.ex,r.top=n.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(e):(t=this.findTarget(e),!t||t&&!t.selectable?this.setCursor(this.defaultCursor):this._setCursorFromEvent(e,t)),this.fire("mouse:move",{target:t,e:e}),t&&t.fire("mousemove",{e:e})},_transformObject:function(e){var t=this.getPointer(e),n=this._currentTransform;n.reset=!1,n.target.isMoving=!0,this._beforeScaleTransform(e,n),this._performTransformAction(e,n,t),this.renderAll()},_performTransformAction:function(e,t,n){var r=n.x,i=n.y,s=t.target,o=t.action;o==="rotate"?(this._rotateObject(r,i),this._fire("rotating",s,e)):o==="scale"?(this._onScale(e,t,r,i),this._fire("scaling",s,e)):o==="scaleX"?(this._scaleObject(r,i,"x"),this._fire("scaling",s,e)):o==="scaleY"?(this._scaleObject(r,i,"y"),this._fire("scaling",s,e)):(this._translateObject(r,i),this._fire("moving",s,e),this.setCursor(this.moveCursor))},_fire:function(e,t,n){this.fire("object:"+e,{target:t,e:n}),t.fire(e,{e:n})},_beforeScaleTransform:function(e,t){if(t.action==="scale"||t.action==="scaleX"||t.action==="scaleY"){var n=this._shouldCenterTransform(e,t.target);if(n&&(t.originX!=="center"||t.originY!=="center")||!n&&t.originX==="center"&&t.originY==="center")this._resetCurrentTransform(e),t.reset=!0}},_onScale:function(e,t,n,r){(e.shiftKey||this.uniScaleTransform)&&!t.target.get("lockUniScaling")?(t.currentAction="scale",this._scaleObject(n,r)):(!t.reset&&t.currentAction==="scale"&&this._resetCurrentTransform(e,t.target),t.currentAction="scaleEqually",this._scaleObject(n,r,"equally"))},_setCursorFromEvent:function(e,t){if(!t||!t.selectable)return this.setCursor(this.defaultCursor),!1;var n=this.getActiveGroup(),r=t._findTargetCorner&&(!n||!n.contains(t))&&t._findTargetCorner(this.getPointer(e,!0));return r?this._setCornerCursor(r,t):this.setCursor(t.hoverCursor||this.hoverCursor),!0},_setCornerCursor:function(t,n){if(t in e)this.setCursor(this._getRotatedCornerCursor(t,n));else{if(t!=="mtr"||!n.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(t,n){var r=Math.round(n.getAngle()%360/45);return r<0&&(r+=8),r+=e[t],r%=8,this.cursorMap[r]}})}(),function(){var e=Math.min,t=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(e,t){var n=this.getActiveObject();return e.shiftKey&&(this.getActiveGroup()||n&&n!==t)&&this.selection},_handleGrouping:function(e,t){if(t===this.getActiveGroup()){t=this.findTarget(e,!0);if(!t||t.isType("group"))return}this.getActiveGroup()?this._updateActiveGroup(t,e):this._createActiveGroup(t,e),this._activeGroup&&this._activeGroup.saveCoords()},_updateActiveGroup:function(e,t){var n=this.getActiveGroup();if(n.contains(e)){n.removeWithUpdate(e),this._resetObjectTransform(n),e.set("active",!1);if(n.size()===1){this.discardActiveGroup(t),this.setActiveObject(n.item(0));return}}else n.addWithUpdate(e),this._resetObjectTransform(n);this.fire("selection:created",{target:n,e:t}),n.set("active",!0)},_createActiveGroup:function(e,t){if(this._activeObject&&e!==this._activeObject){var n=this._createGroup(e);n.addWithUpdate(),this.setActiveGroup(n),this._activeObject=null,this.fire("selection:created",{target:n,e:t})}e.set("active",!0)},_createGroup:function(e){var t=this.getObjects(),n=t.indexOf(this._activeObject)<t.indexOf(e),r=n?[this._activeObject,e]:[e,this._activeObject];return new fabric.Group(r,{canvas:this})},_groupSelectedObjects:function(e){var t=this._collectObjects();t.length===1?this.setActiveObject(t[0],e):t.length>1&&(t=new fabric.Group(t.reverse(),{canvas:this}),t.addWithUpdate(),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u +;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(!e||e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockScalingFlip:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){this.group&&this.group.transform(e,t);var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#<fabric."+i(this.type)+">"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(e,n){if(this.width===0&&this.height===0||!this.visible)return;e.save(),this._setupCompositeOperation(e),n||this.transform(e),this._setStrokeStyles(e),this._setFillStyles(e),this.group&&this.group.type==="path-group"&&e.translate(-this.group.width/2,-this.group.height/2),this.transformMatrix&&e.transform.apply(e,this.transformMatrix),this._setOpacity(e),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreCompositeOperation(e),e.restore()},_setOpacity:function(e){this.group&&this.group._setOpacity(e),e.globalAlpha*=this.opacity},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e,this):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e,this):this.fill)},_renderControls:function(e,n){var r=this.getViewportTransform();e.save();if(this.active&&!n){var i;this.group&&(i=t.util.transformPoint(this.group.getCenterPoint(),r),e.translate(i.x,i.y),e.rotate(s(this.group.angle))),i=t.util.transformPoint(this.getCenterPoint(),r,null!=this.group),this.group&&(i.x*=this.group.scaleX,i.y*=this.group.scaleY),e.translate(i.x,i.y),e.rotate(s(this.angle)),this.drawBorders(e),this.drawControls(e)}e.restore()},_setShadow:function(e){if(!this.shadow)return;var t=this.canvas&&this.canvas._currentMultiplier||1;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur*t*(this.scaleX+this.scaleY)/2,e.shadowOffsetX=this.shadow.offsetX*t*this.scaleX,e.shadowOffsetY=this.shadow.offsetY*t*this.scaleY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;e.save();if(this.fill.gradientTransform){var t=this.fill.gradientTransform;e.transform.apply(e,t)}this.fill.toLive&&e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0),this.fillRule==="evenodd"?e.fill("evenodd"):e.fill(),e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke||this.strokeWidth===0)return;e.save();if(this.strokeDashArray)1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke();else{if(this.stroke.gradientTransform){var t=this.stroke.gradientTransform;e.transform.apply(e,t)}this._stroke?this._stroke(e):e.stroke()}this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",e?new t.Shadow(e):null)},setColor:function(e){return this.set("fill",e),this},setAngle:function(e){var t=(this.originX!=="center"||this.originY!=="center")&&this.centeredRotation;return t&&this._setOriginToCenter(),this.set("angle",e),t&&this._resetOrigin(),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupCompositeOperation:function(e){this.globalCompositeOperation&&(this._prevGlobalCompositeOperation=e.globalCompositeOperation,e.globalCompositeOperation=this.globalCompositeOperation)},_restoreCompositeOperation:function(e){this.globalCompositeOperation&&this._prevGlobalCompositeOperation&&(e.globalCompositeOperation=this._prevGlobalCompositeOperation)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var e=this.getCenterPoint();this.originX="center",this.originY="center",this.left=e.x,this.top=e.y},_resetOrigin:function(){var e=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=e.x,this.top=e.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y<e.y&&f.d.y<e.y)continue;if(f.o.y>=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)<this.minScaleLimit?e<0?-this.minScaleLimit:this.minScaleLimit:e},scale:function(e){return e=this._constrainScale(e),e<0&&(this.flipX=!this.flipX,this.flipY=!this.flipY,e*=-1),this.scaleX=e,this.scaleY=e,this.setCoords(),this},scaleToWidth:function(e){var t=this.getBoundingRectWidth()/this.getWidth();return this.scale(e/this.width/t)},scaleToHeight:function(e){var t=this.getBoundingRectHeight()/this.getHeight();return this.scale(e/this.height/t)},setCoords:function(){var t=this.strokeWidth,n=e(this.angle),r=this.getViewportTransform(),i=function(e){return fabric.util.transformPoint(e,r)},s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===0,f=this.type==="line"&&this.height===0,l=a||f,c=u&&f||!l,h=u&&a||!l;a?s=t:f&&(o=t),c&&(s+=s>0?t:-t),h&&(o+=o>0?t:-t),this.currentWidth=s*this.scaleX,this.currentHeight=o*this.scaleY,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var p=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),d=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),v=Math.cos(d+n)*p,m=Math.sin(d+n)*p,g=Math.sin(n),y=Math.cos(n),b=this.getCenterPoint(),w=new fabric.Point(this.currentWidth,this.currentHeight),E=new fabric.Point(b.x-v,b.y-m),S=new fabric.Point(E.x+w.x*y,E.y+w.x*g),x=new fabric.Point(E.x-w.y*g,E.y+w.y*y),T=new fabric.Point(E.x+w.x/2*y,E.y+w.x/2*g),N=i(E),C=i(S),k=i(new fabric.Point(S.x-w.y*g,S.y+w.y*y)),L=i(x),A=i(new fabric.Point(E.x-w.y/2*g,E.y+w.y/2*y)),O=i(T),M=i(new fabric.Point(S.x-w.y/2*g,S.y+w.y/2*y)),_=i(new fabric.Point(x.x+w.x/2*y,x.y+w.x/2*g)),D=i(new fabric.Point(T.x,T.y)),P=Math.cos(d+n)*this.padding*Math.sqrt(2),H=Math.sin(d+n)*this.padding*Math.sqrt(2);return N=N.add(new fabric.Point(-P,-H)),C=C.add(new fabric.Point(H,-P)),k=k.add(new fabric.Point(P,H)),L=L.add(new fabric.Point(-H,P)),A=A.add(new fabric.Point((-P-H)/2,(-H+P)/2)),O=O.add(new fabric.Point((H-P)/2,-(H+P)/2)),M=M.add(new fabric.Point((H+P)/2,(H-P)/2)),_=_.add(new fabric.Point((P-H)/2,(P+H)/2)),D=D.add(new fabric.Point((H-P)/2,-(H+P)/2)),this.oCoords={tl:N,tr:C,br:k,bl:L,ml:A,mt:O,mr:M,mb:_,mtr:D},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.fillRule,n=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",r=this.strokeWidth?this.strokeWidth:"0",i=this.strokeDashArray?this.strokeDashArray.join(" "):"",s=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",u=this.strokeMiterLimit?this.strokeMiterLimit:"4",a=typeof this.opacity!="undefined"?this.opacity:"1",f=this.visible?"":" visibility: hidden;",l=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",n,"; ","stroke-width: ",r,"; ","stroke-dasharray: ",i,"; ","stroke-linecap: ",s,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",u,"; ","fill: ",e,"; ","fill-rule: ",t,"; ","opacity: ",a,";",l,f].join("")},getSvgTransform:function(){if(this.group&&this.group.type==="path-group")return"";var e=fabric.util.toFixed,t=this.getAngle(),n=!this.canvas||this.canvas.svgViewportTransformation?this.getViewportTransform():[1,0,0,1,0,0],r=fabric.util.transformPoint(this.getCenterPoint(),n),i=fabric.Object.NUM_FRACTION_DIGITS,s=this.type==="path-group"?"":"translate("+e(r.x,i)+" "+e(r.y,i)+")",o=t!==0?" rotate("+e(t,i)+")":"",u=this.scaleX===1&&this.scaleY===1&&n[0]===1&&n[3]===1?"":" scale("+e(this.scaleX*n[0],i)+" "+e(this.scaleY*n[3],i)+")",a=this.type==="path-group"?this.width*n[0]:0,f=this.flipX?" matrix(-1 0 0 1 "+a+" 0) ":"",l=this.type==="path-group"?this.height*n[3]:0,c=this.flipY?" matrix(1 0 0 -1 0 "+l+")":"";return[s,o,u,f,c].join("")},getSvgTransformMatrix:function(){return this.transformMatrix?" matrix("+this.transformMatrix.join(" ")+")":""},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=function(){return typeof G_vmlCanvasManager!="undefined"};fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.getViewportTransform();e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor;var o=this.getWidth(),u=this.getHeight(),a=this.strokeWidth,f=this.strokeLineCap==="round"||this.strokeLineCap==="square",l=this.type==="line"&&this.width===0,c=this.type==="line"&&this.height===0,h=l||c,p=f&&c||!h,d=f&&l||!h;l?o=a/i:c&&(u=a/s),p&&(o+=a/i),d&&(u+=a/s);var v=fabric.util.transformPoint(new fabric.Point(o,u),r,!0),m=v.x,g=v.y;this.group&&(m*=this.group.scaleX,g*=this.group.scaleY),e.strokeRect(~~(-(m/2)-t)-.5,~~(-(g/2)-t)-.5,~~(m+n)+1,~~(g+n)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var y=(-g-t*2)/2;e.beginPath(),e.moveTo(0,y),e.lineTo(0,y-this.rotatingPointOffset),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.getViewportTransform(),i=this.strokeWidth,s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===0,f=this.type==="line"&&this.height===0,l=a||f,c=u&&f||!l,h=u&&a||!l;a?s=i:f&&(o=i),c&&(s+=i),h&&(o+=i),s*=this.scaleX,o*=this.scaleY;var p=fabric.util.transformPoint(new fabric.Point(s,o),r,!0),d=p.x,v=p.y,m=-(d/2),g=-(v/2),y=this.padding,b=n,w=n-t,E=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1,e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,E,m-b-y,g-b-y),this._drawControl("tr",e,E,m+d-b+y,g-b-y),this._drawControl("bl",e,E,m-b-y,g+v+w+y),this._drawControl("br",e,E,m+d+w+y,g+v+w+y),this.get("lockUniScaling")||(this._drawControl("mt",e,E,m+d/2-b,g-b-y),this._drawControl("mb",e,E,m+d/2-b,g+v+w+y),this._drawControl("mr",e,E,m+d+w+y,g+v/2-b),this._drawControl("ml",e,E,m-b-y,g+v/2-b)),this.hasRotatingPoint&&this._drawControl("mtr",e,E,m+d/2-b,g-this.rotatingPointOffset-this.cornerSize/2-y),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize;this.isControlVisible(e)&&(t()||this.transparentCorners||n.clearRect(i,s,o,o),n[r](i,s,o,o))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r<i;r++)t=e[r],n=r!==i-1,this._animate(t,arguments[0][t],arguments[1],n)}else this._animate.apply(this,arguments);return this},_animate:function(e,t,n,r){var i=this,s;t=t.toString(),n?n=fabric.util.object.clone(n):n={},~e.indexOf(".")&&(s=e.split("."));var o=s?this.get(s[0])[s[1]]:this.get(e);"from"in n||(n.from=o),~t.indexOf("=")?t=o+parseFloat(t.replace("=","")):t=parseFloat(t),fabric.util.animate({startValue:n.from,endValue:t,byValue:n.by,easing:n.easing,duration:n.duration,abort:n.abort&&function(){return n.abort.call(i)},onChange:function(t){s?i[s[0]][s[1]]=t:i.set(e,t);if(r)return;n.onChange&&n.onChange()},onComplete:function(){if(r)return;i.setCoords(),n.onComplete&&n.onComplete()}})}}),function(e){"use strict";function s(e,t){var n=e.origin,r=e.axis1,i=e.axis2,s=e.dimension,o=t.nearest,u=t.center,a=t.farthest;return function(){switch(this.get(n)){case o:return Math.min(this.get(r),this.get(i));case u:return Math.min(this.get(r),this.get(i))+.5*this.get(s);case a:return Math.max(this.get(r),this.get(i))}}}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1},i=t.StaticCanvas.supports("setLineDash");if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3] +),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in e?e.left:this._getLeftToOriginX(),this.top="top"in e?e.top:this._getTopToOriginY()},_set:function(e,t){return this.callSuper("_set",e,t),typeof r[e]!="undefined"&&this._setWidthHeight(),this},_getLeftToOriginX:s({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:s({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(e,t){e.beginPath();if(t){var n=this.getCenterPoint();e.translate(n.x-this.strokeWidth/2,n.y-this.strokeWidth/2)}if(!this.strokeDashArray||this.strokeDashArray&&i){var r=this.calcLinePoints();e.moveTo(r.x1,r.y1),e.lineTo(r.x2,r.y2)}e.lineWidth=this.strokeWidth;var s=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this.stroke&&this._renderStroke(e),e.strokeStyle=s},_renderDashedStroke:function(e){var n=this.calcLinePoints();e.beginPath(),t.util.drawDashedLine(e,n.x1,n.y1,n.x2,n.y2,this.strokeDashArray),e.closePath()},toObject:function(e){return n(this.callSuper("toObject",e),this.calcLinePoints())},calcLinePoints:function(){var e=this.x1<=this.x2?-1:1,t=this.y1<=this.y2?-1:1,n=e*this.width*.5,r=t*this.height*.5,i=e*this.width*-0.5,s=t*this.height*-0.5;return{x1:n,x2:i,y1:r,y2:s}},toSVG:function(e){var t=this._createBaseSVGMarkup(),n={x1:this.x1,x2:this.x2,y1:this.y1,y2:this.y2};if(!this.group||this.group.type!=="path-group")n=this.calcLinePoints();return t.push("<line ",'x1="',n.x1,'" y1="',n.y1,'" x2="',n.x2,'" y2="',n.y2,'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform(),this.getSvgTransformMatrix(),'"/>\n'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,startAngle:0,endAngle:n*2,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("radius",e.radius||0),this.startAngle=e.startAngle||this.startAngle,this.endAngle=e.endAngle||this.endAngle},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius"),startAngle:this.startAngle,endAngle:this.endAngle})},toSVG:function(e){var t=this._createBaseSVGMarkup(),r=0,i=0,s=(this.endAngle-this.startAngle)%(2*n);if(s===0)this.group&&this.group.type==="path-group"&&(r=this.left+this.radius,i=this.top+this.radius),t.push("<circle ",'cx="'+r+'" cy="'+i+'" ','r="',this.radius,'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform()," ",this.getSvgTransformMatrix(),'"/>\n');else{var o=Math.cos(this.startAngle)*this.radius,u=Math.sin(this.startAngle)*this.radius,a=Math.cos(this.endAngle)*this.radius,f=Math.sin(this.endAngle)*this.radius,l=s>n?"1":"0";t.push('<path d="M '+o+" "+u," A "+this.radius+" "+this.radius," 0 ",+l+" 1"," "+a+" "+f,'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform()," ",this.getSvgTransformMatrix(),'"/>\n')}return e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.arc(t?this.left+this.radius:0,t?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new t.Circle(r(s,n));return o.left-=o.radius,o.top-=o.radius,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("<polygon ",'points="',i,'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform(),'"/>'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0)},_set:function(e,t){this.callSuper("_set",e,t);switch(e){case"rx":this.rx=t,this.set("width",t*2);break;case"ry":this.ry=t,this.set("height",t*2)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=0,r=0;return this.group&&this.group.type==="path-group"&&(n=this.left+this.rx,r=this.top+this.ry),t.push("<ellipse ",'cx="',n,'" cy="',r,'" ','rx="',this.rx,'" ry="',this.ry,'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform(),this.getSvgTransformMatrix(),'"/>\n'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.save(),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left+this.rx:0,t?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES);i.left=i.left||0,i.top=i.top||0;var s=new t.Ellipse(r(i,n));return s.top-=s.ry,s.left-=s.rx,s},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e,t){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var n=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,i=this.width,s=this.height,o=t?this.left:-this.width/2,u=t?this.top:-this.height/2,a=n!==0||r!==0,f=.4477152502;e.beginPath(),e.moveTo(o+n,u),e.lineTo(o+i-n,u),a&&e.bezierCurveTo(o+i-f*n,u,o+i,u+f*r,o+i,u+r),e.lineTo(o+i,u+s-r),a&&e.bezierCurveTo(o+i,u+s-f*r,o+i-f*n,u+s,o+i-n,u+s),e.lineTo(o+n,u+s),a&&e.bezierCurveTo(o+f*n,u+s,o,u+s-f*r,o,u+s-r),e.lineTo(o,u+r),a&&e.bezierCurveTo(o,u+f*r,o+f*n,u,o+n,u),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.left,r=this.top;if(!this.group||this.group.type!=="path-group")n=-this.width/2,r=-this.height/2;return t.push("<rect ",'x="',n,'" y="',r,'" rx="',this.get("rx"),'" ry="',this.get("ry"),'" width="',this.width,'" height="',this.height,'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform(),this.getSvgTransformMatrix(),'"/>\n'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;r=r||{};var i=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);return i.left=i.left||0,i.top=i.top||0,new t.Rect(n(r?t.util.object.clone(r):{},i))},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,minX:0,minY:0,initialize:function(e,n){return t.Polygon.prototype.initialize.call(this,e,n)},_calcDimensions:function(){return t.Polygon.prototype._calcDimensions.call(this)},_applyPointOffset:function(){return t.Polygon.prototype._applyPointOffset.call(this)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){return t.Polygon.prototype.toSVG.call(this,e)},_render:function(e){t.Polygon.prototype.commonRender.call(this,e),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n,r;e.beginPath();for(var i=0,s=this.points.length;i<s;i++)n=this.points[i],r=this.points[i+1]||n,t.util.drawDashedLine(e,n.x,n.y,r.x,r.y,this.strokeDashArray)},complexity:function(){return this.get("points").length}}),t.Polyline.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat(),t.Polyline.fromElement=function(e,n){if(!e)return null;n||(n={});var r=t.parsePointsAttribute(e.getAttribute("points")),i=t.parseAttributes(e,t.Polyline.ATTRIBUTE_NAMES);return r===null?null:new t.Polyline(r,t.util.object.extend(i,n))},t.Polyline.fromObject=function(e){var n=e.points;return new t.Polyline(n,e,!0)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.toFixed;if(t.Polygon){t.warn("fabric.Polygon is already defined");return}t.Polygon=t.util.createClass(t.Object,{type:"polygon",points:null,minX:0,minY:0,initialize:function(e,t){t=t||{},this.points=e,this.callSuper("initialize",t),this._calcDimensions(),"top"in t||(this.top=this.minY),"left"in t||(this.left=this.minX)},_calcDimensions:function(){var e=this.points,t=r(e,"x"),n=r(e,"y"),s=i(e,"x"),o=i(e,"y");this.width=s-t||1,this.height=o-n||1,this.minX=t,this.minY=n},_applyPointOffset:function(){this.points.forEach(function(e){e.x-=this.minX+this.width/2,e.y-=this.minY+this.height/2},this)},toObject:function(e){return n(this.callSuper("toObject",e),{points:this.points.concat()})},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.points.length;r<i;r++)t.push(s(this.points[r].x,2),",",s(this.points[r].y,2)," ");return n.push("<",this.type," ",'points="',t.join(""),'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform()," ",this.getSvgTransformMatrix(),'"/>\n'),e?e(n.join("")):n.join("")},_render:function(e){this.commonRender(e),this._renderFill(e);if(this.stroke||this.strokeDashArray)e.closePath(),this._renderStroke(e)},commonRender:function(e){var t;e.beginPath(),this._applyPointOffset&&((!this.group||this.group.type!=="path-group")&&this._applyPointOffset(),this._applyPointOffset=null),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n<r;n++)t=this.points[n],e.lineTo(t.x,t.y)},_renderDashedStroke:function(e){t.Polyline.prototype._renderDashedStroke.call(this,e),e.closePath()},complexity:function(){return this.points.length}}),t.Polygon.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat(),t.Polygon.fromElement=function(e,r){if(!e)return null;r||(r={});var i=t.parsePointsAttribute(e.getAttribute("points")),s=t.parseAttributes(e,t.Polygon.ATTRIBUTE_NAMES);return i===null?null:new t.Polygon(i,n(s,r))},t.Polygon.fromObject=function(e){return new t.Polygon(e.points,e,!0)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.array.min,r=t.util.array.max,i=t.util.object.extend,s=Object.prototype.toString,o=t.util.drawArc,u={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},a={m:"l",M:"L"};if(t.Path){t.warn("fabric.Path is already defined");return}t.Path=t.util.createClass(t.Object,{type:"path",path:null,minX:0,minY:0,initialize:function(e,t){t=t||{},this.setOptions(t);if(!e)throw new Error("`path` argument is required");var n=s.call(e)==="[object Array]";this.path=n?e:e.match&&e.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);if(!this.path)return;n||(this.path=this._parsePath());var r=this._parseDimensions();this.minX=r.left,this.minY=r.top,this.width=r.width,this.height=r.height,r.left+=this.originX==="center"?this.width/2:this.originX==="right"?this.width:0,r.top+=this.originY==="center"?this.height/2:this.originY==="bottom"?this.height:0,this.top=this.top||r.top,this.left=this.left||r.left,this.pathOffset=this.pathOffset||{x:this.minX+this.width/2,y:this.minY+this.height/2},t.sourcePath&&this.setSourcePath(t.sourcePath)},_render:function(e){var t,n=null,r=0,i=0,s=0,u=0,a=0,f=0,l,c,h,p,d=-this.pathOffset.x,v=-this.pathOffset.y;this.group&&this.group.type==="path-group"&&(d=0,v=0),e.beginPath();for(var m=0,g=this.path.length;m<g;++m){t=this.path[m];switch(t[0]){case"l":s+=t[1],u+=t[2],e.lineTo(s+d,u+v);break;case"L":s=t[1],u=t[2],e.lineTo(s+d,u+v);break;case"h":s+=t[1],e.lineTo(s+d,u+v);break;case"H":s=t[1],e.lineTo(s+d,u+v);break;case"v":u+=t[1],e.lineTo(s+d,u+v);break;case"V":u=t[1],e.lineTo(s+d,u+v);break;case"m":s+=t[1],u+=t[2],r=s,i=u,e.moveTo(s+d,u+v);break;case"M":s=t[1],u=t[2],r=s,i=u,e.moveTo(s+d,u+v);break;case"c":l=s+t[5],c=u+t[6],a=s+t[3],f=u+t[4],e.bezierCurveTo(s+t[1]+d,u+t[2]+v,a+d,f+v,l+d,c+v),s=l,u=c;break;case"C":s=t[5],u=t[6],a=t[3],f=t[4],e.bezierCurveTo(t[1]+d,t[2]+v,a+d,f+v,s+d,u+v);break;case"s":l=s+t[3],c=u+t[4],a=a?2*s-a:s,f=f?2*u-f:u,e.bezierCurveTo(a+d,f+v,s+t[1]+d,u+t[2]+v,l+d,c+v),a=s+t[1],f=u+t[2],s=l,u=c;break;case"S":l=t[3],c=t[4],a=2*s-a,f=2*u-f,e.bezierCurveTo(a+d,f+v,t[1]+d,t[2]+v,l+d,c+v),s=l,u=c,a=t[1],f=t[2];break;case"q":l=s+t[3],c=u+t[4],a=s+t[1],f=u+t[2],e.quadraticCurveTo(a+d,f+v,l+d,c+v),s=l,u=c;break;case"Q":l=t[3],c=t[4],e.quadraticCurveTo(t[1]+d,t[2]+v,l+d,c+v),s=l,u=c,a=t[1],f=t[2];break;case"t":l=s+t[1],c=u+t[2],n[0].match(/[QqTt]/)===null?(a=s,f=u):n[0]==="t"?(a=2*s-h,f=2*u-p):n[0]==="q"&&(a=2*s-a,f=2*u-f),h=a,p=f,e.quadraticCurveTo(a+d,f+v,l+d,c+v),s=l,u=c,a=s+t[1],f=u+t[2];break;case"T":l=t[1],c=t[2],a=2*s-a,f=2*u-f,e.quadraticCurveTo(a+d,f+v,l+d,c+v),s=l,u=c;break;case"a":o(e,s+d,u+v,[t[1],t[2],t[3],t[4],t[5],t[6]+s+d,t[7]+u+v]),s+=t[6],u+=t[7];break;case"A":o(e,s+d,u+v,[t[1],t[2],t[3],t[4],t[5],t[6]+d,t[7]+v]),s=t[6],u=t[7];break;case"z":case"Z":s=r,u=i,e.closePath()}n=t}this._renderFill(e),this._renderStroke(e)},render:function(e,n){if(!this.visible)return;e.save(),this._setupCompositeOperation(e),n||this.transform(e),this._setStrokeStyles(e),this._setFillStyles(e),this.group&&this.group.type==="path-group"&&e.translate(-this.group.width/2,-this.group.height/2),this.transformMatrix&&e.transform.apply(e,this.transformMatrix),this._setOpacity(e),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreCompositeOperation(e),e.restore()},toString:function(){return"#<fabric.Path ("+this.complexity()+'): { "top": '+this.top+', "left": '+this.left+" }>"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup(),r="";for(var i=0,s=this.path.length;i<s;i++)t.push(this.path[i].join(" "));var o=t.join(" ");if(!this.group||this.group.type!=="path-group")r="translate("+ -this.pathOffset.x+", "+ -this.pathOffset.y+")";return n.push("<path ",'d="',o,'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform(),r,this.getSvgTransformMatrix(),'" stroke-linecap="round" ',"/>\n"),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var f=0,l,c=this.path.length;f<c;f++){n=this.path[f],o=n.slice(1).trim(),t.length=0;while(s=i.exec(o))t.push(s[0]);l=[n.charAt(0)];for(var h=0,p=t.length;h<p;h++)r=parseFloat(t[h]),isNaN(r)||l.push(r);var d=l[0],v=u[d.toLowerCase()],m=a[d]||d;if(l.length-1>v)for(var g=1,y=l.length;g<y;g+=v)e.push([d].concat(l.slice(g,g+v))),d=m;else e.push(l)}return e},_parseDimensions:function(){var e=[],i=[],s,o=null,u=0,a=0,f=0,l=0,c=0,h=0,p,d,v,m,g;for(var y=0,b=this.path.length;y<b;++y){s=this.path[y];switch(s[0]){case"l":f+=s[1],l+=s[2],g=[];break;case"L":f=s[1],l=s[2],g=[];break;case"h":f+=s[1],g=[];break;case"H":f=s[1],g=[];break;case"v":l+=s[1],g=[];break;case"V":l=s[1],g=[];break;case"m":f+=s[1],l+=s[2],u=f,a=l,g=[];break;case"M":f=s[1],l=s[2],u=f,a=l,g=[];break;case"c":p=f+s[5],d=l+s[6],c=f+s[3],h=l+s[4],g=t.util.getBoundsOfCurve(f,l,f+s[1],l+s[2],c,h,p,d),f=p,l=d;break;case"C":f=s[5],l=s[6],c=s[3],h=s[4],g=t.util.getBoundsOfCurve(f,l,s[1],s[2],c,h,f,l);break;case"s":p=f+s[3],d=l+s[4],c=c?2*f-c:f,h=h?2*l-h:l,g=t.util.getBoundsOfCurve(f,l,c,h,f+s[1],l+s[2],p,d),c=f+s[1],h=l+s[2],f=p,l=d;break;case"S":p=s[3],d=s[4],c=2*f-c,h=2*l-h,g=t.util.getBoundsOfCurve(f,l,c,h,s[1],s[2],p,d),f=p,l=d,c=s[1],h=s[2];break;case"q":p=f+s[3],d=l+s[4],c=f+s[1],h=l+s[2],g=t.util.getBoundsOfCurve(f,l,c,h,c,h,p,d),f=p,l=d;break;case"Q":c=s[1],h=s[2],g=t.util.getBoundsOfCurve(f,l,c,h,c,h,s[3],s[4]),f=s[3],l=s[4];break;case"t":p=f+s[1],d=l+s[2],o[0].match(/[QqTt]/)===null?(c=f,h=l):o[0]==="t"?(c=2*f-v,h=2*l-m):o[0]==="q"&&(c=2*f-c,h=2*l-h),v=c,m=h,g=t.util.getBoundsOfCurve(f,l,c,h,c,h,p,d),f=p,l=d,c=f+s[1],h=l+s[2];break;case"T":p=s[1],d=s[2],c=2*f-c,h=2*l-h,g=t.util.getBoundsOfCurve(f,l,c,h,c,h,p,d),f=p,l=d;break;case"a":g=t.util.getBoundsOfArc(f,l,s[1],s[2],s[3],s[4],s[5],s[6]+f,s[7]+l),f+=s[6],l+=s[7];break;case"A":g=t.util.getBoundsOfArc(f,l,s[1],s[2],s[3],s[4],s[5],s[6],s[7]),f=s[6],l=s[7];break;case"z":case"Z":f=u,l=a}o=s,g.forEach(function(t){e.push(t.x),i.push(t.y)}),e.push(f),i.push(l)}var w=n(e),E=n(i),S=r(e),x=r(i),T=S-w,N=x-E,C={left:w,top:E,width:T,height:N};return C}}),t.Path.fromObject=function(e,n){typeof e.path=="string"?t.loadSVGFromURL(e.path,function(r){var i=r[0],s=e.path;delete e.path,t.util.object.extend(i,e),i.setSourcePath(s),n(i)}):n(new t.Path(e.path,e))},t.Path.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat(["d"]),t.Path.fromElement=function(e,n,r){var s=t.parseAttributes(e,t.Path.ATTRIBUTE_NAMES);n&&n(new t.Path(s.d,i(s,r)))},t.Path.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.invoke,i=t.Object.prototype.toObject;if(t.PathGroup){t.warn("fabric.PathGroup is already defined");return}t.PathGroup=t.util.createClass(t.Path,{type:"path-group",fill:"",initialize:function(e,t){t=t||{},this.paths=e||[];for(var n=this.paths.length;n--;)this.paths[n].group=this;this.setOptions(t),t.widthAttr&&(this.scaleX=t.widthAttr/t.width),t.heightAttr&&(this.scaleY=t.heightAttr/t.height),this.setCoords(),t.sourcePath&&this.setSourcePath(t.sourcePath)},render:function(e){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),this.transform(e),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this.paths.length;r<i;++r)this.paths[r].render(e,!0);this.clipTo&&e.restore(),this._removeShadow(e),e.restore()},_set:function(e,t){if(e==="fill"&&t&&this.isSameColor()){var n=this.paths.length;while(n--)this.paths[n]._set(e,t)}return this.callSuper("_set",e,t)},toObject:function(e){var t=n(i.call(this,e),{paths:r(this.getObjects(),"toObject",e)});return this.sourcePath&&(t.sourcePath=this.sourcePath),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.paths=this.sourcePath),t},toSVG:function(e){var t=this.getObjects(),n="translate("+this.left+" "+this.top+")",r=["<g ",'style="',this.getSvgStyles(),'" ','transform="',n,this.getSvgTransform(),'" ',">\n"];for(var i=0,s=t.length;i<s;i++)r.push(t[i].toSVG(e));return r.push("</g>\n"),e?e(r.join("")):r.join("")},toString:function(){return"#<fabric.PathGroup ("+this.complexity()+"): { top: "+this.top+", left: "+this.left+" }>"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),t.originX&&(this.originX=t.originX),t.originY&&(this.originY=t.originY),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop(),r=this.getCenterPoint();e.set({originalLeft:t,originalTop:n,left:t-r.x,top:n-r.y}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#<fabric.Group: ("+this.complexity()+")>"},addWithUpdate:function(e){return this._restoreObjectsState(),e&&(this._objects.push(e),e.group=this),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e){if(!this.visible)return;e.save(),this.clipTo&&t.util.clipContext(this,e);for(var n=0,r=this._objects.length;n<r;n++)this._renderObject(this._objects[n],e);this.clipTo&&e.restore(),e.restore()},_renderControls:function(e,t){this.callSuper("_renderControls",e,t);for(var n=0,r=this._objects.length;n<r;n++)this._objects[n]._renderControls(e)},_renderObject:function(e,t){var n=e.hasRotatingPoint;if(!e.visible)return;e.hasRotatingPoint=!1,e.render(t),e.hasRotatingPoint=n},_restoreObjectsState:function(){return this._objects.forEach(this._restoreObjectState,this),this},_moveFlippedObject:function(e){var t=e.get("originX"),n=e.get("originY"),r=e.getCenterPoint();e.set({originX:"center",originY:"center",left:r.x,top:r.y}),this._toggleFlipping(e);var i=e.getPointByOrigin(t,n);return e.set({originX:t,originY:n,left:i.x,top:i.y}),this},_toggleFlipping:function(e){this.flipX&&(e.toggle("flipX"),e.set("left",-e.get("left")),e.setAngle(-e.getAngle())),this.flipY&&(e.toggle("flipY"),e.set("top",-e.get("top")),e.setAngle(-e.getAngle()))},_restoreObjectState:function(e){return this._setObjectPosition(e),e.setCoords(),e.hasControls=e.__origHasControls,delete e.__origHasControls,e.set("active",!1),e.setCoords(),delete e.group,this},_setObjectPosition:function(e){var t=this.getCenterPoint(),n=this._getRotatedLeftTop(e);e.set({angle:e.getAngle()+this.getAngle(),left:t.x+n.left,top:t.y+n.top,scaleX:e.get("scaleX")*this.get("scaleX"),scaleY:e.get("scaleY")*this.get("scaleY")})},_getRotatedLeftTop:function(e){var t=this.getAngle()*(Math.PI/180);return{left:-Math.sin(t)*e.getTop()*this.get("scaleY")+Math.cos(t)*e.getLeft()*this.get("scaleX"),top:Math.cos(t)*e.getTop()*this.get("scaleY")+Math.sin(t)*e.getLeft()*this.get("scaleX")}},destroy:function(){return this._objects.forEach(this._moveFlippedObject,this),this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(e){e.setCoords()}),this},_calcBounds:function(e){var t=[],n=[],r;for(var i=0,s=this._objects.length;i<s;++i){r=this._objects[i],r.setCoords();for(var o in r.oCoords)t.push(r.oCoords[o].x),n.push(r.oCoords[o].y)}this.set(this._getBounds(t,n,e))},_getBounds:function(e,n,s){var o=t.util.invertTransform(this.getViewportTransform()),u=t.util.transformPoint(new t.Point(r(e),r(n)),o),a=t.util.transformPoint(new t.Point(i(e),i(n)),o),f={width:a.x-u.x||0,height:a.y-u.y||0};return s||(f.left=u.x||0,f.top=u.y||0,this.originX==="center"&&(f.left+=f.width/2),this.originX==="right"&&(f.left+=f.width),this.originY==="center"&&(f.top+=f.height/2),this.originY==="bottom"&&(f.top+=f.height)),f},toSVG:function(e){var t=["<g ",'transform="',this.getSvgTransform(),'">\n'];for(var n=0,r=this._objects.length;n<r;n++)t.push(this._objects[n].toSVG(e));return t.push("</g>\n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t<n;t++)if(this._objects[t][e])return!0;return!1}return e in this.delegatedProperties?this._objects[0]&&this._objects[0].get(e):this[e]}}),t.Group.fromObject=function(e,n){t.util.enlivenObjects(e.objects,function(r){delete e.objects,n&&n(new t.Group(r,e))})},t.Group.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=fabric.util.object.extend;e.fabric||(e.fabric={});if(e.fabric.Image){fabric.warn("fabric.Image is already defined.");return}fabric.Image=fabric.util.createClass(fabric.Object,{type:"image",crossOrigin:"",alignX:"none",alignY:"none",meetOrSlice:"meet",_lastScaleX:1,_lastScaleY:1,initialize:function(e,t){t||(t={}),this.filters=[],this.resizeFilters=[],this.callSuper("initialize",t),this._initElement(e,t),this._initConfig(t),t.filters&&(this.filters=t.filters,this.applyFilters())},getElement:function(){return this._element},setElement:function(e,t,n){return this._element=e,this._originalElement=e,this._initConfig(n),this.filters.length!==0?this.applyFilters(t):t&&t(),this},setCrossOrigin:function(e){return this.crossOrigin=e,this._element.crossOrigin=e,this},getOriginalSize:function(){var e=this.getElement();return{width:e.width,height:e.height}},_stroke:function(e){e.save(),this._setStrokeStyles(e),e.beginPath(),e.strokeRect(-this.width/2,-this.height/2,this.width,this.height),e.closePath(),e.restore()},_renderDashedStroke:function(e){var t=-this.width/2,n=-this.height/2,r=this.width,i=this.height;e.save(),this._setStrokeStyles(e),e.beginPath(),fabric.util.drawDashedLine(e,t,n,t+r,n,this.strokeDashArray),fabric.util.drawDashedLine(e,t+r,n,t+r,n+i,this.strokeDashArray),fabric.util.drawDashedLine(e,t+r,n+i,t,n+i,this.strokeDashArray),fabric.util.drawDashedLine(e,t,n+i,t,n,this.strokeDashArray),e.closePath(),e.restore()},toObject:function(e){return t(this.callSuper("toObject",e),{src:this._originalElement.src||this._originalElement._src,filters:this.filters.map(function(e){return e&&e.toObject()}),crossOrigin:this.crossOrigin,alignX:this.alignX,alignY:this.alignY,meetOrSlice:this.meetOrSlice})},toSVG:function(e){var t=[],n=-this.width/2,r=-this.height/2,i="none";this.group&&this.group.type==="path-group"&&(n=this.left,r=this.top),this.alignX!=="none"&&this.alignY!=="none"&&(i="x"+this.alignX+"Y"+this.alignY+" "+this.meetOrSlice),t.push('<g transform="',this.getSvgTransform(),this.getSvgTransformMatrix(),'">\n','<image xlink:href="',this.getSvgSrc(),'" x="',n,'" y="',r,'" style="',this.getSvgStyles(),'" width="',this.width,'" height="',this.height,'" preserveAspectRatio="',i,'"',"></image>\n");if(this.stroke||this.strokeDashArray){var s=this.fill;this.fill=null,t.push("<rect ",'x="',n,'" y="',r,'" width="',this.width,'" height="',this.height,'" style="',this.getSvgStyles(),'"/>\n'),this.fill=s}return t.push("</g>\n"),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},setSrc:function(e,t,n){fabric.util.loadImage(e,function(e){return this.setElement(e,t,n)},this,n&&n.crossOrigin)},toString:function(){return'#<fabric.Image: { src: "'+this.getSrc()+'" }>'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e,t,n,r){t=t||this.filters,n=n||this._originalElement;if(!n)return;var i=n,s=fabric.util.createCanvasElement(),o=fabric.util.createImage(),u=this;return s.width=i.width,s.height=i.height,s.getContext("2d").drawImage(i,0,0,i.width,i.height),t.length===0?(this._element=n,e&&e(),s):(t.forEach(function(e){e&&e.applyTo(s,e.scaleX||u.scaleX,e.scaleY||u.scaleY),!r&&e.type==="Resize"&&(u.width*=e.scaleX,u.height*=e.scaleY)}),o.width=s.width,o.height=s.height,fabric.isLikelyNode?(o.src=s.toBuffer(undefined,fabric.Image.pngCompression),u._element=o,!r&&(u._filteredEl=o),e&&e()):(o.onload=function(){u._element=o,!r&&(u._filteredEl=o),e&&e(),o.onload=s=i=null},o.src=s.toDataURL("image/png")),s)},_render:function(e,t){var n,r,i=this._findMargins(),s;n=t?this.left:-this.width/2,r=t?this.top:-this.height/2,this.meetOrSlice==="slice"&&(e.beginPath(),e.rect(n,r,this.width,this.height),e.clip()),this.isMoving===!1&&this.resizeFilters.length&&this._needsResize()?(this._lastScaleX=this.scaleX,this._lastScaleY=this.scaleY,s=this.applyFilters(null,this.resizeFilters,this._filteredEl||this._originalElement,!1)):s=this._element,s&&e.drawImage(s,n+i.marginX,r+i.marginY,i.width,i.height),this._renderStroke(e)},_needsResize:function(){return this.scaleX!==this._lastScaleX||this.scaleY!==this._lastScaleY},_findMargins:function(){var e=this.width,t=this.height,n,r,i=0,s=0;if(this.alignX!=="none"||this.alignY!=="none")n=[this.width/this._element.width,this.height/this._element.height],r=this.meetOrSlice==="meet"?Math.min.apply(null,n):Math.max.apply(null,n),e=this._element.width*r,t=this._element.height*r,this.alignX==="Mid"&&(i=(this.width-e)/2),this.alignX==="Max"&&(i=this.width-e),this.alignY==="Mid"&&(s=(this.height-t)/2),this.alignY==="Max"&&(s=this.height- +t);return{width:e,height:t,marginX:i,marginY:s}},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES),s="xMidYMid",o="meet",u,a,f;i.preserveAspectRatio&&(f=i.preserveAspectRatio.split(" ")),f&&f.length&&(o=f.pop(),o!=="meet"&&o!=="slice"?(s=o,o="meet"):f.length&&(s=f.pop())),u=s!=="none"?s.slice(1,4):"none",a=s!=="none"?s.slice(5,8):"none",i.alignX=u,i.alignY=a,i.meetOrSlice=o,fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(e){e&&this.setOptions(e)},setOptions:function(e){for(var t in e)this[t]=e[t]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||0},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;s<o;s+=4)r[s]+=i,r[s+1]+=i,r[s+2]+=i;t.putImageData(n,0,0)},toObject:function(){return n(this.callSuper("toObject"),{brightness:this.brightness})}}),t.Image.filters.Brightness.fromObject=function(e){return new t.Image.filters.Brightness(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Convolute=t.util.createClass(t.Image.filters.BaseFilter,{type:"Convolute",initialize:function(e){e=e||{},this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];var n=t.util.createCanvasElement();this.tmpCtx=n.getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d<l;d++)for(var v=0;v<f;v++){var m=d,g=v,y=(d*f+v)*4,b=0,w=0,E=0,S=0;for(var x=0;x<i;x++)for(var T=0;T<i;T++){var N=m+x-s,C=g+T-s;if(N<0||N>a||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o<u;o+=4)r[o+3]=i+255*(s-o)/s;t.putImageData(n,0,0)},toObject:function(){return n(this.callSuper("toObject"),{threshold:this.threshold})}}),t.Image.filters.GradientTransparency.fromObject=function(e){return new t.Image.filters.GradientTransparency(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});t.Image.filters.Grayscale=t.util.createClass(t.Image.filters.BaseFilter,{type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width*n.height*4,s=0,o;while(s<i)o=(r[s]+r[s+1]+r[s+2])/3,r[s]=o,r[s+1]=o,r[s+2]=o,s+=4;t.putImageData(n,0,0)}}),t.Image.filters.Grayscale.fromObject=function(){return new t.Image.filters.Grayscale}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});t.Image.filters.Invert=t.util.createClass(t.Image.filters.BaseFilter,{type:"Invert",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=r.length,s;for(s=0;s<i;s+=4)r[s]=255-r[s],r[s+1]=255-r[s+1],r[s+2]=255-r[s+2];t.putImageData(n,0,0)}}),t.Image.filters.Invert.fromObject=function(){return new t.Image.filters.Invert}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Mask=t.util.createClass(t.Image.filters.BaseFilter,{type:"Mask",initialize:function(e){e=e||{},this.mask=e.mask,this.channel=[0,1,2,3].indexOf(e.channel)>-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;a<f;a+=4)i[a+3]=c[a+u];n.putImageData(r,0,0)},toObject:function(){return n(this.callSuper("toObject"),{mask:this.mask.toObject(),channel:this.channel})}}),t.Image.filters.Mask.fromObject=function(e,n){t.util.loadImage(e.mask.src,function(r){e.mask=new t.Image(r,e.mask),n&&n(new t.Image.filters.Mask(e))})},t.Image.filters.Mask.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Noise=t.util.createClass(t.Image.filters.BaseFilter,{type:"Noise",initialize:function(e){e=e||{},this.noise=e.noise||0},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.noise,s;for(var o=0,u=r.length;o<u;o+=4)s=(.5-Math.random())*i,r[o]+=s,r[o+1]+=s,r[o+2]+=s;t.putImageData(n,0,0)},toObject:function(){return n(this.callSuper("toObject"),{noise:this.noise})}}),t.Image.filters.Noise.fromObject=function(e){return new t.Image.filters.Noise(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Pixelate=t.util.createClass(t.Image.filters.BaseFilter,{type:"Pixelate",initialize:function(e){e=e||{},this.blocksize=e.blocksize||4},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.height,s=n.width,o,u,a,f,l,c,h;for(u=0;u<i;u+=this.blocksize)for(a=0;a<s;a+=this.blocksize){o=u*4*s+a*4,f=r[o],l=r[o+1],c=r[o+2],h=r[o+3];for(var p=u,d=u+this.blocksize;p<d;p++)for(var v=a,m=a+this.blocksize;v<m;v++)o=p*4*s+v*4,r[o]=f,r[o+1]=l,r[o+2]=c,r[o+3]=h}t.putImageData(n,0,0)},toObject:function(){return n(this.callSuper("toObject"),{blocksize:this.blocksize})}}),t.Image.filters.Pixelate.fromObject=function(e){return new t.Image.filters.Pixelate(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.RemoveWhite=t.util.createClass(t.Image.filters.BaseFilter,{type:"RemoveWhite",initialize:function(e){e=e||{},this.threshold=e.threshold||30,this.distance=e.distance||20},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=this.distance,o=255-i,u=Math.abs,a,f,l;for(var c=0,h=r.length;c<h;c+=4)a=r[c],f=r[c+1],l=r[c+2],a>o&&f>o&&l>o&&u(a-f)<s&&u(a-l)<s&&u(f-l)<s&&(r[c+3]=1);t.putImageData(n,0,0)},toObject:function(){return n(this.callSuper("toObject"),{threshold:this.threshold,distance:this.distance})}}),t.Image.filters.RemoveWhite.fromObject=function(e){return new t.Image.filters.RemoveWhite(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});t.Image.filters.Sepia=t.util.createClass(t.Image.filters.BaseFilter,{type:"Sepia",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=r.length,s,o;for(s=0;s<i;s+=4)o=.3*r[s]+.59*r[s+1]+.11*r[s+2],r[s]=o+100,r[s+1]=o+50,r[s+2]=o+255;t.putImageData(n,0,0)}}),t.Image.filters.Sepia.fromObject=function(){return new t.Image.filters.Sepia}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});t.Image.filters.Sepia2=t.util.createClass(t.Image.filters.BaseFilter,{type:"Sepia2",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=r.length,s,o,u,a;for(s=0;s<i;s+=4)o=r[s],u=r[s+1],a=r[s+2],r[s]=(o*.393+u*.769+a*.189)/1.351,r[s+1]=(o*.349+u*.686+a*.168)/1.203,r[s+2]=(o*.272+u*.534+a*.131)/2.14;t.putImageData(n,0,0)}}),t.Image.filters.Sepia2.fromObject=function(){return new t.Image.filters.Sepia2}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Tint=t.util.createClass(t.Image.filters.BaseFilter,{type:"Tint",initialize:function(e){e=e||{},this.color=e.color||"#000000",this.opacity=typeof e.opacity!="undefined"?e.opacity:(new t.Color(this.color)).getAlpha()},applyTo:function(e){var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=i.length,o,u,a,f,l,c,h,p,d;d=(new t.Color(this.color)).getSource(),u=d[0]*this.opacity,a=d[1]*this.opacity,f=d[2]*this.opacity,p=1-this.opacity;for(o=0;o<s;o+=4)l=i[o],c=i[o+1],h=i[o+2],i[o]=u+l*p,i[o+1]=a+c*p,i[o+2]=f+h*p;n.putImageData(r,0,0)},toObject:function(){return n(this.callSuper("toObject"),{color:this.color,opacity:this.opacity})}}),t.Image.filters.Tint.fromObject=function(e){return new t.Image.filters.Tint(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Multiply=t.util.createClass(t.Image.filters.BaseFilter,{type:"Multiply",initialize:function(e){e=e||{},this.color=e.color||"#000000"},applyTo:function(e){var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=i.length,o,u;u=(new t.Color(this.color)).getSource();for(o=0;o<s;o+=4)i[o]*=u[0]/255,i[o+1]*=u[1]/255,i[o+2]*=u[2]/255;n.putImageData(r,0,0)},toObject:function(){return n(this.callSuper("toObject"),{color:this.color})}}),t.Image.filters.Multiply.fromObject=function(e){return new t.Image.filters.Multiply(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric;t.Image.filters.Blend=t.util.createClass({type:"Blend",initialize:function(e){e=e||{},this.color=e.color||"#000",this.image=e.image||!1,this.mode=e.mode||"multiply",this.alpha=e.alpha||1},applyTo:function(e){var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s,o,u,a,f,l,c,h=!1;if(this.image){h=!0;var p=t.util.createCanvasElement();p.width=this.image.width,p.height=this.image.height;var d=new t.StaticCanvas(p);d.add(this.image);var v=d.getContext("2d");c=v.getImageData(0,0,d.width,d.height).data}else c=(new t.Color(this.color)).getSource(),s=c[0]*this.alpha,o=c[1]*this.alpha,u=c[2]*this.alpha;for(var m=0,g=i.length;m<g;m+=4){a=i[m],f=i[m+1],l=i[m+2],h&&(s=c[m]*this.alpha,o=c[m+1]*this.alpha,u=c[m+2]*this.alpha);switch(this.mode){case"multiply":i[m]=a*s/255,i[m+1]=f*o/255,i[m+2]=l*u/255;break;case"screen":i[m]=1-(1-a)*(1-s),i[m+1]=1-(1-f)*(1-o),i[m+2]=1-(1-l)*(1-u);break;case"add":i[m]=Math.min(255,a+s),i[m+1]=Math.min(255,f+o),i[m+2]=Math.min(255,l+u);break;case"diff":case"difference":i[m]=Math.abs(a-s),i[m+1]=Math.abs(f-o),i[m+2]=Math.abs(l-u);break;case"subtract":var y=a-s,b=f-o,w=l-u;i[m]=y<0?0:y,i[m+1]=b<0?0:b,i[m+2]=w<0?0:w;break;case"darken":i[m]=Math.min(a,s),i[m+1]=Math.min(f,o),i[m+2]=Math.min(l,u);break;case"lighten":i[m]=Math.max(a,s),i[m+1]=Math.max(f,o),i[m+2]=Math.max(l,u)}}n.putImageData(r,0,0)},toObject:function(){return{color:this.color,image:this.image,mode:this.mode,alpha:this.alpha}}}),t.Image.filters.Blend.fromObject=function(e){return new t.Image.filters.Blend(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.pow,r=Math.floor,i=Math.sqrt,s=Math.abs,o=Math.max,u=Math.round,a=Math.sin,f=Math.ceil;t.Image.filters.Resize=t.util.createClass(t.Image.filters.BaseFilter,{type:"Resize",resizeType:"hermite",scaleX:0,scaleY:0,lanczosLobes:3,applyTo:function(e,t,n){this.rcpScaleX=1/t,this.rcpScaleY=1/n;var r=e.width,i=e.height,s=u(r*t),o=u(i*n),a;this.resizeType==="sliceHack"&&(a=this.sliceByTwo(e,r,i,s,o)),this.resizeType==="hermite"&&(a=this.hermiteFastResize(e,r,i,s,o)),this.resizeType==="bilinear"&&(a=this.bilinearFiltering(e,r,i,s,o)),this.resizeType==="lanczos"&&(a=this.lanczosResize(e,r,i,s,o)),e.width=s,e.height=o,e.getContext("2d").putImageData(a,0,0)},sliceByTwo:function(e,n,i,s,u){var a=e.getContext("2d"),f,l=.5,c=.5,h=1,p=1,d=!1,v=!1,m=n,g=i,y=t.util.createCanvasElement(),b=y.getContext("2d");s=r(s),u=r(u),y.width=o(s,n),y.height=o(u,i),s>n&&(l=2,h=-1),u>i&&(c=2,p=-1),f=a.getImageData(0,0,n,i),e.width=o(s,n),e.height=o(u,i),a.putImageData(f,0,0);while(!d||!v)n=m,i=g,s*h<r(m*l*h)?m=r(m*l):(m=s,d=!0),u*p<r(g*c*p)?g=r(g*c):(g=u,v=!0),f=a.getImageData(0,0,n,i),b.putImageData(f,0,0),a.clearRect(0,0,m,g),a.drawImage(y,0,0,n,i,0,0,m,g);return a.getImageData(0,0,s,u)},lanczosResize:function(e,t,o,u,l){function c(e){return function(t){if(t>e)return 0;t*=Math.PI;if(s(t)<1e-16)return 1;var n=t/e;return a(t)*a(n)/t/n}}function h(e){var a,f,c,p,d,L,A,O,M,_,D;C.x=(e+.5)*b,k.x=r(C.x);for(a=0;a<l;a++){C.y=(a+.5)*w,k.y=r(C.y),d=0,L=0,A=0,O=0,M=0;for(f=k.x-x;f<=k.x+x;f++){if(f<0||f>=t)continue;_=r(1e3*s(f-C.x)),N[_]||(N[_]={});for(var P=k.y-T;P<=k.y+T;P++){if(P<0||P>=o)continue;D=r(1e3*s(P-C.y)),N[_][D]||(N[_][D]=y(i(n(_*E,2)+n(D*S,2))/1e3)),c=N[_][D],c>0&&(p=(P*t+f)*4,d+=c,L+=c*m[p],A+=c*m[p+1],O+=c*m[p+2],M+=c*m[p+3])}}p=(a*u+e)*4,g[p]=L/d,g[p+1]=A/d,g[p+2]=O/d,g[p+3]=M/d}return++e<u?h(e):v}var p=e.getContext("2d"),d=p.getImageData(0,0,t,o),v=p.getImageData(0,0,u,l),m=d.data,g=v.data,y=c(this.lanczosLobes),b=this.rcpScaleX,w=this.rcpScaleY,E=2/this.rcpScaleX,S=2/this.rcpScaleY,x=f(b*this.lanczosLobes/2),T=f(w*this.lanczosLobes/2),N={},C={},k={};return h(0)},bilinearFiltering:function(e,t,n,i,s){var o,u,a,f,l,c,h,p,d,v,m,g,y=0,b,w=this.rcpScaleX,E=this.rcpScaleY,S=e.getContext("2d"),x=4*(t-1),T=S.getImageData(0,0,t,n),N=T.data,C=S.getImageData(0,0,i,s),k=C.data;for(h=0;h<s;h++)for(p=0;p<i;p++){l=r(w*p),c=r(E*h),d=w*p-l,v=E*h-c,b=4*(c*t+l);for(m=0;m<4;m++)o=N[b+m],u=N[b+4+m],a=N[b+x+m],f=N[b+x+4+m],g=o*(1-d)*(1-v)+u*d*(1-v)+a*v*(1-d)+f*d*v,k[y++]=g}return C},hermiteFastResize:function(e,t,n,o,u){var a=this.rcpScaleX,l=this.rcpScaleY,c=f(a/2),h=f(l/2),p=e.getContext("2d"),d=p.getImageData(0,0,t,n),v=d.data,m=p.getImageData(0,0,o,u),g=m.data;for(var y=0;y<u;y++)for(var b=0;b<o;b++){var w=(b+y*o)*4,E=0,S=0,x=0,T=0,N=0,C=0,k=0,L=(y+.5)*l;for(var A=r(y*l);A<(y+1)*l;A++){var O=s(L-(A+.5))/h,M=(b+.5)*a,_=O*O;for(var D=r(b*a);D<(b+1)*a;D++){var P=s(M-(D+.5))/c,H=i(_+P*P);if(H>1&&H<-1)continue;E=2*H*H*H-3*H*H+1,E>0&&(P=4*(D+A*t),k+=E*v[P+3],x+=E,v[P+3]<255&&(E=E*v[P+3]/250),T+=E*v[P],N+=E*v[P+1],C+=E*v[P+2],S+=E)}}g[w]=T/S,g[w+1]=N/S,g[w+2]=C/S,g[w+3]=k/x}return m}}),t.Image.filters.Resize.fromObject=function(){return new t.Image.filters.Resize}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.object.clone,i=t.util.toFixed,s=t.StaticCanvas.supports("setLineDash");if(t.Text){t.warn("fabric.Text is already defined");return}var o=t.Object.prototype.stateProperties.concat();o.push("fontFamily","fontWeight","fontSize","text","textDecoration","textAlign","fontStyle","lineHeight","textBackgroundColor","useNative","path"),t.Text=t.util.createClass(t.Object,{_dimensionAffectingProps:{fontSize:!0,fontWeight:!0,fontFamily:!0,textDecoration:!0,fontStyle:!0,lineHeight:!0,stroke:!0,strokeWidth:!0,text:!0},_reNewline:/\r?\n/,type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",textDecoration:"",textAlign:"left",fontStyle:"",lineHeight:1.3,textBackgroundColor:"",path:null,useNative:!0,stateProperties:o,stroke:null,shadow:null,initialize:function(e,t){t=t||{},this.text=e,this.__skipDimension=!0,this.setOptions(t),this.__skipDimension=!1,this._initDimensions()},_initDimensions:function(){if(this.__skipDimension)return;var e=t.util.createCanvasElement();this._render(e.getContext("2d"))},toString:function(){return"#<fabric.Text ("+this.complexity()+'): { "text": "'+this.text+'", "fontFamily": "'+this.fontFamily+'" }>'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setOpacity(e),this._setShadow(e),this._setupCompositeOperation(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._restoreCompositeOperation(e),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;n<r;n++){var i=this._getLineWidth(e,t[n]),s=this._getLineLeftOffset(i);this._boundaries.push({height:this.fontSize*this.lineHeight,width:i,left:s})}},_setTextStyles:function(e){this._setFillStyles(e),this._setStrokeStyles(e),e.textBaseline="alphabetic",this.skipTextAlign||(e.textAlign=this.textAlign),e.font=this._getFontDeclaration()},_getTextHeight:function(e,t){return this.fontSize*t.length*this.lineHeight},_getTextWidth:function(e,t){var n=e.measureText(t[0]||"|").width;for(var r=1,i=t.length;r<i;r++){var s=e.measureText(t[r]).width;s>n&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d<v;d++)this._renderChars(e,t,a[d],r+p,i,s),p+=t.measureText(a[d]).width+h}else this._renderChars(e,t,n,r,i,s)},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},_renderTextFill:function(e,t){if(!this.fill&&!this._skipFillStrokeCheck)return;this._boundaries=[];var n=0;for(var r=0,i=t.length;r<i;r++){var s=this._getHeightOfLine(e,r,t);n+=s,this._renderTextLine("fillText",e,t[r],this._getLeftOffset(),this._getTopOffset()+n,r)}this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderTextStroke:function(e,t){if((!this.stroke||this.strokeWidth===0)&&!this._skipFillStrokeCheck)return;var n=0;e.save(),this.strokeDashArray&&(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),s&&e.setLineDash(this.strokeDashArray)),e.beginPath();for(var r=0,i=t.length;r<i;r++){var o=this._getHeightOfLine(e,r,t);n+=o,this._renderTextLine("strokeText",e,t[r],this._getLeftOffset(),this._getTopOffset()+n,r)}e.closePath(),e.restore()},_getHeightOfLine:function(){return this.fontSize*this.lineHeight},_renderTextBackground:function(e,t){this._renderTextBoxBackground(e),this._renderTextLinesBackground(e,t)},_renderTextBoxBackground:function(e){if(!this.backgroundColor)return;e.save(),e.fillStyle=this.backgroundColor,e.fillRect(this._getLeftOffset(),this._getTopOffset(),this.width,this.height),e.restore()},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor)return;e.save(),e.fillStyle=this.textBackgroundColor;for(var n=0,r=t.length;n<r;n++)if(t[n]!==""){var i=this._getLineWidth(e,t[n]),s=this._getLineLeftOffset(i);e.fillRect(this._getLeftOffset()+s,this._getTopOffset()+n*this.fontSize*this.lineHeight,i,this.fontSize*this.lineHeight)}e.restore()},_getLineLeftOffset:function(e){return this.textAlign==="center"?(this.width-e)/2:this.textAlign==="right"?this.width-e:0},_getLineWidth:function(e,t){return this.textAlign==="justify"?this.width:e.measureText(t).width},_renderTextDecoration:function(e,t){function i(i){for(var s=0,o=t.length;s<o;s++){var u=r._getLineWidth(e,t[s]),a=r._getLineLeftOffset(u);e.fillRect(r._getLeftOffset()+a,~~(i+s*r._getHeightOfLine(e,s,t)-n),u,1)}}if(!this.textDecoration)return;var n=this._getTextHeight(e,t)/2,r=this;this.textDecoration.indexOf("underline")>-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save(),t||this.transform(e);var n=this.group&&this.group.type==="path-group";n&&e.translate(-this.group.width/2,-this.group.height/2),this.transformMatrix&&e.transform.apply(e,this.transformMatrix),n&&e.translate(this.left,this.top),this._render(e),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize*this.lineHeight-.25*this.fontSize:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n+(this.group&&this.group.type==="path-group"?this.left:0),textTop:r+(this.group&&this.group.type==="path-group"?this.top:0),lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('<g transform="',this.getSvgTransform(),this.getSvgTransformMatrix(),'">\n',t.textBgRects.join(""),"<text ",this.fontFamily?'font-family="'+this.fontFamily.replace(/"/g,"'")+'" ':"",this.fontSize?'font-size="'+this.fontSize+'" ':"",this.fontStyle?'font-style="'+this.fontStyle+'" ':"",this.fontWeight?'font-weight="'+this.fontWeight+'" ':"",this.textDecoration?'text-decoration="'+this.textDecoration+'" ':"",'style="',this.getSvgStyles(),'" ','transform="translate(',i(r.textLeft,2)," ",i(r.textTop,2),')">',n.join(""),t.textSpans.join(""),"</text>\n","</g>\n")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s<o;s++)if(n[s]!==""){var a=this._boundaries&&this._boundaries[s]?this._boundaries[s].left:0;r.push('<tspan x="',i(a+u+this.shadow.offsetX,2),s===0||this.useNative?'" y':'" dy','="',i(this.useNative?e*s-this.height/2+this.shadow.offsetY:e+(s===0?this.shadow.offsetY:0),2),'" ',this._getFillAttributes(this.shadow.color),">",t.util.string.escapeXml(n[s]),"</tspan>"),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o<u;o++){n[o]!==""?(this._setSVGTextLineText(n[o],o,r,e,s,i),s=1):s++;if(!this.textBackgroundColor||!this._boundaries)continue;this._setSVGTextLineBg(i,o,t,e)}return{textSpans:r,textBgRects:i}},_setSVGTextLineText:function(e,n,r,s,o){var u=this._boundaries&&this._boundaries[n]?i(this._boundaries[n].left,2):0;r.push('<tspan x="',u,'" ',n===0||this.useNative?"y":"dy",'="',i(this.useNative?s*n-this.height/2:s*o,2),'" ',this._getFillAttributes(this.fill),">",t.util.string.escapeXml(e),"</tspan>")},_setSVGTextLineBg:function(e,t,n,r){e.push("<rect ",this._getFillAttributes(this.textBackgroundColor),' x="',i(n+this._boundaries[t].left,2),'" y="',i(r*t-this.height/2,2),'" width="',i(this._boundaries[t].width,2),'" height="',i(this._boundaries[t].height,2),'"></rect>\n')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("<rect ",this._getFillAttributes(this.backgroundColor),' x="',i(-this.width/2,2),'" y="',i(-this.height/2,2),'" width="',i(this.width,2),'" height="',i(this.height,2),'"></rect>')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r),n.top=n.top||0,n.left=n.left||0,"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE),n.originX||(n.originX="left"),n.top+=n.fontSize/4;var i=new t.Text(e.textContent,n),s=0;return i.originX==="left"&&(s=i.getWidth()/2),i.originX==="right"&&(s=-i.getWidth()/2),i.set({left:i.getLeft()+s,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r<t;r++)n.push(this.getSelectionStyles(r));return n}var i=this.get2DCursorLocation(e);return this.styles[i.lineIndex]?this.styles[i.lineIndex][i.charIndex]||{}:{}},setSelectionStyles:function(e){if(this.selectionStart===this.selectionEnd)this._extendStyles(this.selectionStart,e);else for(var t=this.selectionStart;t<this.selectionEnd;t++)this._extendStyles(t,e);return this},_extendStyles:function(e,t){var n=this.get2DCursorLocation(e);this.styles[n.lineIndex]||(this.styles[n.lineIndex]={}),this.styles[n.lineIndex][n.charIndex]||(this.styles[n.lineIndex][n.charIndex]={}),fabric.util.object.extend(this.styles[n.lineIndex][n.charIndex],t)},_render:function(e){this.callSuper("_render",e),this.ctx=e,this.isEditing&&this.renderCursorOrSelection()},renderCursorOrSelection:function(){if(!this.active)return;var e=this.text.split(""),t;this.selectionStart===this.selectionEnd?(t=this._getCursorBoundaries(e,"cursor"),this.renderCursor(t)):(t=this._getCursorBoundaries(e,"selection"),this.renderSelection(e,t))},get2DCursorLocation:function(e){typeof e=="undefined"&&(e=this.selectionStart);var t=this.text.slice(0,e),n=t.split(this._reNewline);return{lineIndex:n.length-1,charIndex:n[n.length-1].length}},getCurrentCharStyle:function(e,t){var n=this.styles[e]&&this.styles[e][t===0?0:t-1];return{fontSize:n&&n.fontSize||this.fontSize,fill:n&&n.fill||this.fill,textBackgroundColor:n&&n.textBackgroundColor||this.textBackgroundColor,textDecoration:n&&n.textDecoration||this.textDecoration,fontFamily:n&&n.fontFamily||this.fontFamily,fontWeight:n&&n.fontWeight||this.fontWeight,fontStyle:n&&n.fontStyle||this.fontStyle,stroke:n&&n.stroke||this.stroke,strokeWidth:n&&n.strokeWidth||this.strokeWidth}},getCurrentCharFontSize:function(e,t){return this.styles[e]&&this.styles[e][t===0?0:t-1]&&this.styles[e][t===0?0:t-1].fontSize||this.fontSize},getCurrentCharColor:function(e,t){return this.styles[e]&&this.styles[e][t===0?0:t-1]&&this.styles[e][t===0?0:t-1].fill||this.cursorColor},_getCursorBoundaries:function(e,t){var n=this.get2DCursorLocation(),r=this.text.split(this._reNewline),i=Math.round(this._getLeftOffset()),s=this._getTopOffset(),o=this._getCursorBoundariesOffsets(e,t,n,r);return{left:i,top:s,leftOffset:o.left+o.lineLeft,topOffset:o.top}},_getCursorBoundariesOffsets:function(e,t,n,r){var i=0,s=0,o=0,u=0,a=t==="cursor"?this._getHeightOfLine(this.ctx,0)-this.getCurrentCharFontSize(n.lineIndex,n.charIndex):0;for(var f=0;f<this.selectionStart;f++){if(e[f]==="\n"){u=0;var l=s+(t==="cursor"?1:0);a+=this._getCachedLineHeight(l),s++,o=0}else u+=this._getWidthOfChar(this.ctx,e[f],s,o),o++;i=this._getCachedLineOffset(s,r)}return this._clearCache(),{top:a,left:u,lineLeft:i}},_clearCache:function(){this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},_getCachedLineHeight:function(e){return this.__lineHeights[e]||(this.__lineHeights[e]=this._getHeightOfLine(this.ctx,e))},_getCachedLineWidth:function(e,t){return this.__lineWidths[e]||(this.__lineWidths[e]=this._getWidthOfLine(this.ctx,e,t))},_getCachedLineOffset:function(e,t){var n=this._getCachedLineWidth(e,t);return this.__lineOffsets[e]||(this.__lineOffsets[e]=this. +_getLineLeftOffset(n))},renderCursor:function(e){var t=this.ctx;t.save();var n=this.get2DCursorLocation(),r=n.lineIndex,i=n.charIndex,s=this.getCurrentCharFontSize(r,i),o=r===0&&i===0?this._getCachedLineOffset(r,this.text.split(this._reNewline)):e.leftOffset;t.fillStyle=this.getCurrentCharColor(r,i),t.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,t.fillRect(e.left+o,e.top+e.topOffset,this.cursorWidth/this.scaleX,s),t.restore()},renderSelection:function(e,t){var n=this.ctx;n.save(),n.fillStyle=this.selectionColor;var r=this.get2DCursorLocation(this.selectionStart),i=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=i.lineIndex,u=this.text.split(this._reNewline);for(var a=s;a<=o;a++){var f=this._getCachedLineOffset(a,u)||0,l=this._getCachedLineHeight(a),c=0;if(a===s)for(var h=0,p=u[a].length;h<p;h++)h>=r.charIndex&&(a!==o||h<i.charIndex)&&(c+=this._getWidthOfChar(n,u[a][h],a,h)),h<r.charIndex&&(f+=this._getWidthOfChar(n,u[a][h],a,h));else if(a>s&&a<o)c+=this._getCachedLineWidth(a,u)||5;else if(a===o)for(var d=0,v=i.charIndex;d<v;d++)c+=this._getWidthOfChar(n,u[a][d],a,d);n.fillRect(t.left+f,t.top+t.topOffset,c,l),t.topOffset+=l}n.restore()},_renderChars:function(e,t,n,r,i,s){if(this.isEmptyStyles())return this._renderCharsFast(e,t,n,r,i);this.skipTextAlign=!0,r-=this.textAlign==="center"?this.width/2:this.textAlign==="right"?this.width:0;var o=this.text.split(this._reNewline),u=this._getWidthOfLine(t,s,o),a=this._getHeightOfLine(t,s,o),f=this._getLineLeftOffset(u),l=n.split(""),c,h="";r+=f||0,t.save();for(var p=0,d=l.length;p<=d;p++){c=c||this.getCurrentCharStyle(s,p);var v=this.getCurrentCharStyle(s,p+1);if(this._hasStyleChanged(c,v)||p===d)this._renderChar(e,t,s,p-1,h,r,i,a),h="",c=v;h+=l[p]}t.restore()},_renderCharsFast:function(e,t,n,r,i){this.skipTextAlign=!1,e==="fillText"&&this.fill&&this.callSuper("_renderChars",e,t,n,r,i),e==="strokeText"&&this.stroke&&this.callSuper("_renderChars",e,t,n,r,i)},_renderChar:function(e,t,n,r,i,s,o,u){var a,f,l;if(this.styles&&this.styles[n]&&(a=this.styles[n][r])){var c=a.stroke||this.stroke,h=a.fill||this.fill;t.save(),f=this._applyCharStylesGetWidth(t,i,n,r,a),l=this._getHeightOfChar(t,i,n,r),h&&t.fillText(i,s,o),c&&t.strokeText(i,s,o),this._renderCharDecoration(t,a,s,o,f,u,l),t.restore(),t.translate(f,0)}else e==="strokeText"&&this.stroke&&t[e](i,s,o),e==="fillText"&&this.fill&&t[e](i,s,o),f=this._applyCharStylesGetWidth(t,i,n,r),this._renderCharDecoration(t,null,s,o,f,u),t.translate(t.measureText(i).width,0)},_hasStyleChanged:function(e,t){return e.fill!==t.fill||e.fontSize!==t.fontSize||e.textBackgroundColor!==t.textBackgroundColor||e.textDecoration!==t.textDecoration||e.fontFamily!==t.fontFamily||e.fontWeight!==t.fontWeight||e.fontStyle!==t.fontStyle||e.stroke!==t.stroke||e.strokeWidth!==t.strokeWidth},_renderCharDecoration:function(e,t,n,r,i,s,o){var u=t?t.textDecoration||this.textDecoration:this.textDecoration,a=(t?t.fontSize:null)||this.fontSize;if(!u)return;u.indexOf("underline")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;i<s;i++){var o=this._getHeightOfLine(e,i,t);if(t[i]===""){n+=o;continue}var u=this._getWidthOfLine(e,i,t),a=this._getLineLeftOffset(u);this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor,e.fillRect(this._getLeftOffset()+a,this._getTopOffset()+n+r,u,o));if(this.styles[i])for(var f=0,l=t[i].length;f<l;f++)if(this.styles[i]&&this.styles[i][f]&&this.styles[i][f].textBackgroundColor){var c=t[i][f];e.fillStyle=this.styles[i][f].textBackgroundColor,e.fillRect(this._getLeftOffset()+a+this._getWidthOfCharsAt(e,i,f,t),this._getTopOffset()+n+r,this._getWidthOfChar(e,c,i,f,t)+1,o)}n+=o}e.restore()},_getCacheProp:function(e,t){return e+t.fontFamily+t.fontSize+t.fontWeight+t.fontStyle+t.shadow},_applyCharStylesGetWidth:function(t,n,r,i,s){var o=s||this.styles[r]&&this.styles[r][i];o?o=e(o):o={},this._applyFontStyles(o);var u=this._getCacheProp(n,o);if(this.isEmptyStyles()&&this._charWidthsCache[u]&&this.caching)return this._charWidthsCache[u];typeof o.shadow=="string"&&(o.shadow=new fabric.Shadow(o.shadow));var a=o.fill||this.fill;return t.fillStyle=a.toLive?a.toLive(t):a,o.stroke&&(t.strokeStyle=o.stroke&&o.stroke.toLive?o.stroke.toLive(t):o.stroke),t.lineWidth=o.strokeWidth||this.strokeWidth,t.font=this._getFontDeclaration.call(o),this._setShadow.call(o,t),this.caching?(this._charWidthsCache[u]||(this._charWidthsCache[u]=t.measureText(n).width),this._charWidthsCache[u]):t.measureText(n).width},_applyFontStyles:function(e){e.fontFamily||(e.fontFamily=this.fontFamily),e.fontSize||(e.fontSize=this.fontSize),e.fontWeight||(e.fontWeight=this.fontWeight),e.fontStyle||(e.fontStyle=this.fontStyle)},_getStyleDeclaration:function(t,n){return this.styles[t]&&this.styles[t][n]?e(this.styles[t][n]):{}},_getWidthOfChar:function(e,t,n,r){if(this.textAlign==="justify"&&/\s/.test(t))return this._getWidthOfSpace(e,n);var i=this._getStyleDeclaration(n,r);this._applyFontStyles(i);var s=this._getCacheProp(t,i);if(this._charWidthsCache[s]&&this.caching)return this._charWidthsCache[s];if(e){e.save();var o=this._applyCharStylesGetWidth(e,t,n,r);return e.restore(),o}},_getHeightOfChar:function(e,t,n,r){return this.styles[n]&&this.styles[n][r]?this.styles[n][r].fontSize||this.fontSize:this.fontSize},_getWidthOfCharAt:function(e,t,n,r){r=r||this.text.split(this._reNewline);var i=r[t].split("")[n];return this._getWidthOfChar(e,i,t,n)},_getHeightOfCharAt:function(e,t,n,r){r=r||this.text.split(this._reNewline);var i=r[t].split("")[n];return this._getHeightOfChar(e,i,t,n)},_getWidthOfCharsAt:function(e,t,n,r){var i=0;for(var s=0;s<n;s++)i+=this._getWidthOfCharAt(e,t,s,r);return i},_getWidthOfLine:function(e,t,n){return this._getWidthOfCharsAt(e,t,n[t].length,n)},_getWidthOfSpace:function(e,t){var n=this.text.split(this._reNewline),r=n[t],i=r.split(/\s+/),s=this._getWidthOfWords(e,r,t),o=this.width-s,u=i.length-1,a=o/u;return a},_getWidthOfWords:function(e,t,n){var r=0;for(var i=0;i<t.length;i++){var s=t[i];s.match(/\s/)||(r+=this._getWidthOfChar(e,s,n,i))}return r},_getTextWidth:function(e,t){if(this.isEmptyStyles())return this.callSuper("_getTextWidth",e,t);var n=this._getWidthOfLine(e,0,t);for(var r=1,i=t.length;r<i;r++){var s=this._getWidthOfLine(e,r,t);s>n&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;o<u;o++){var a=this._getHeightOfChar(e,s[o],t,o);a>r&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r<i;r++)n+=this._getHeightOfLine(e,r,t);return n},_getTopOffset:function(){var e=fabric.Text.prototype._getTopOffset.call(this);return e-this.fontSize/this._fontSizeFraction},_renderTextBoxBackground:function(e){if(!this.backgroundColor)return;e.save(),e.fillStyle=this.backgroundColor,e.fillRect(this._getLeftOffset(),this._getTopOffset()+this.fontSize/this._fontSizeFraction,this.width,this.height),e.restore()},toObject:function(t){return fabric.util.object.extend(this.callSuper("toObject",t),{styles:e(this.styles)})}}),fabric.IText.fromObject=function(t){return new fabric.IText(t.text,e(t))},fabric.IText.instances=[]}(),function(){var e=fabric.util.object.clone;fabric.util.object.extend(fabric.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation()},initSelectedHandler:function(){this.on("selected",function(){var e=this;setTimeout(function(){e.selected=!0},100)})},initAddedHandler:function(){this.on("added",function(){this.canvas&&!this.canvas._hasITextHandlers&&(this.canvas._hasITextHandlers=!0,this._initCanvasHandlers())})},_initCanvasHandlers:function(){this.canvas.on("selection:cleared",function(){fabric.IText.prototype.exitEditingOnOthers.call()}),this.canvas.on("mouse:up",function(){fabric.IText.instances.forEach(function(e){e.__isMousedown=!1})}),this.canvas.on("object:selected",function(e){fabric.IText.prototype.exitEditingOnOthers.call(e.target)})},_tick:function(){if(this._abortCursorAnimation)return;var e=this;this.animate("_currentCursorOpacity",1,{duration:this.cursorDuration,onComplete:function(){e._onTickComplete()},onChange:function(){e.canvas&&e.canvas.renderAll()},abort:function(){return e._abortCursorAnimation}})},_onTickComplete:function(){if(this._abortCursorAnimation)return;var e=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){e.animate("_currentCursorOpacity",0,{duration:this.cursorDuration/2,onComplete:function(){e._tick()},onChange:function(){e.canvas&&e.canvas.renderAll()},abort:function(){return e._abortCursorAnimation}})},100)},initDelayedCursor:function(e){var t=this,n=e?0:this.cursorDelay;e&&(this._abortCursorAnimation=!0,clearTimeout(this._cursorTimeout1),this._currentCursorOpacity=1,this.canvas&&this.canvas.renderAll()),this._cursorTimeout2&&clearTimeout(this._cursorTimeout2),this._cursorTimeout2=setTimeout(function(){t._abortCursorAnimation=!1,t._tick()},n)},abortCursorAnimation:function(){this._abortCursorAnimation=!0,clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,this.canvas&&this.canvas.renderAll();var e=this;setTimeout(function(){e._abortCursorAnimation=!1},10)},selectAll:function(){this.selectionStart=0,this.selectionEnd=this.text.length,this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectedText:function(){return this.text.slice(this.selectionStart,this.selectionEnd)},findWordBoundaryLeft:function(e){var t=0,n=e-1;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n--;while(/\S/.test(this.text.charAt(n))&&n>-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n<this.text.length)t++,n++;return e+t},findLineBoundaryLeft:function(e){var t=0,n=e-1;while(!/\n/.test(this.text.charAt(n))&&n>-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n<this.text.length)t++,n++;return e+t},getNumNewLinesInSelectedText:function(){var e=this.getSelectedText(),t=0;for(var n=0,r=e.split(""),i=r.length;n<i;n++)r[n]==="\n"&&t++;return t},searchWordBoundary:function(e,t){var n=this._reSpace.test(this.text.charAt(e))?e-1:e,r=this.text.charAt(n),i=/[ \n\.,;!\?\-]/;while(!i.test(r)&&n>0&&n<this.text.length)n+=t,r=this.text.charAt(n);return i.test(r)&&r!=="\n"&&(n+=t===1?0:1),n},selectWord:function(e){var t=this.searchWordBoundary(e,-1),n=this.searchWordBoundary(e,1);this.setSelectionStart(t),this.setSelectionEnd(n),this.initDelayedCursor(!0)},selectLine:function(e){var t=this.findLineBoundaryLeft(e),n=this.findLineBoundaryRight(e);this.setSelectionStart(t),this.setSelectionEnd(n),this.initDelayedCursor(!0)},enterEditing:function(){if(this.isEditing||!this.editable)return;return this.exitEditingOnOthers(),this.isEditing=!0,this.initHiddenTextarea(),this._updateTextarea(),this._saveEditingProps(),this._setEditingProps(),this._tick(),this.canvas&&this.canvas.renderAll(),this.fire("editing:entered"),this.canvas&&this.canvas.fire("text:editing:entered",{target:this}),this},exitEditingOnOthers:function(){fabric.IText.instances.forEach(function(e){e.selected=!1,e.isEditing&&e.exitEditing()},this)},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(!this.hiddenTextarea)return;this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){if(!this._savedProps)return;this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor)},exitEditing:function(){return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),this.canvas&&this.canvas.fire("text:editing:exited",{target:this}),this},_removeExtraneousStyles:function(){var e=this.text.split(this._reNewline);for(var t in this.styles)e[t]||delete this.styles[t]},_removeCharsFromTo:function(e,t){var n=t;while(n!==e){var r=this.get2DCursorLocation(n).charIndex;n--;var i=this.get2DCursorLocation(n).charIndex,s=i>r;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;t<n;t++){var r=this.get2DCursorLocation(this.selectionStart+t),i=r.lineIndex,s=r.charIndex;this.insertCharStyleObject(i,s,e[t])}},shiftLineStyles:function(t,n){var r=e(this.styles);for(var i in this.styles){var s=parseInt(i,10);s>t&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.__lastSelected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?t<this.selectionStart?(this.setSelectionEnd(this.selectionStart),this.setSelectionStart(t)):this.setSelectionEnd(t):(this.setSelectionStart(t),this.setSelectionEnd(t))},_getLocalRotatedPointer:function(e){var t=this.canvas.getPointer(e),n=new fabric.Point(t.x,t.y),r=new fabric.Point(this.left,this.top),i=fabric.util.rotatePoint(n,r,fabric.util.degreesToRadians(-this.angle));return this.getLocalPointer(e,i)},getSelectionStartFromPointer:function(e){var t=this._getLocalRotatedPointer(e),n=this.text.split(this._reNewline),r=0,i=0,s=0,o=0,u;for(var a=0,f=n.length;a<f;a++){s+=this._getHeightOfLine(this.ctx,a)*this.scaleY;var l=this._getWidthOfLine(this.ctx,a,n),c=this._getLineLeftOffset(l);i=c*this.scaleX,this.flipX&&(n[a]=n[a].split("").reverse().join(""));for(var h=0,p=n[a].length;h<p;h++){var d=n[a][h];r=i,i+=this._getWidthOfChar(this.ctx,d,a,this.flipX?p-h:h)*this.scaleX;if(s<=t.y||i<=t.x){o++;continue}return this._getNewSelectionStartFromOffset(t,r,i,o+a,p)}if(t.y<s)return this._getNewSelectionStartFromOffset(t,r,i,o+a,p)}if(typeof u=="undefined")return this.text.length},_getNewSelectionStartFromOffset:function(e,t,n,r,i){var s=e.x-t,o=n-e.x,u=o>s?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: fixed; bottom: 20px; left: 0px; opacity: 0; width: 0px; height: 0px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.stopImmediatePropagation(),e.preventDefault(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(e){var t=this.getSelectedText(),n=this._getClipboardData(e);n&&n.setData("text",t),this.copiedText=t,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(e){var t=null,n=this._getClipboardData(e);n?t=n.getData("text"):t=this.copiedText,t&&this.insertChars(t)},cut:function(e){if(this.selectionStart===this.selectionEnd)return;this.copy(),this.removeChars(e)},_getClipboardData:function(e){return e&&(e.clipboardData||fabric.window.clipboardData)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey)return;e.which!==0&&this.insertChars(String.fromCharCode(e.which)),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey||e.keyCode===34)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;v<m;v++)i=a[v],p+=this._getWidthOfChar(this.ctx,i,d,v);var g=this._getIndexOnNextLine(c,l,p,r);return f.length+1+g},_getIndexOnNextLine:function(e,t,n,r){var i=e.lineIndex+1,s=this._getWidthOfLine(this.ctx,i,r),o=this._getLineLeftOffset(s),u=o,a=0,f;for(var l=0,c=t.length;l<c;l++){var h=t[l],p=this._getWidthOfChar(this.ctx,h,i,l);u+=p;if(u>n){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g<m?l+1:l;break}}return f||(a=t.length),a},moveCursorDown:function(e){this.abortCursorAnimation(),this._currentCursorOpacity=1;var t=this.getDownCursorOffset(e,this._selectionDirection==="right");e.shiftKey?this.moveCursorDownWithShift(t):this.moveCursorDownWithoutShift(t),this.initDelayedCursor()},moveCursorDownWithoutShift:function(e){this._selectionDirection="right",this.selectionStart+=e,this.selectionStart>this.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart,this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},swapSelectionPoints:function(){var e=this.selectionEnd;this.selectionEnd=this.selectionStart,this.selectionStart=e},moveCursorDownWithShift:function(e){this.selectionEnd===this.selectionStart&&(this._selectionDirection="right");var t=this._selectionDirection==="right"?"selectionEnd":"selectionStart";this[t]+=e,this.selectionEnd<this.selectionStart&&this._selectionDirection==="left"&&(this.swapSelectionPoints(),this._selectionDirection="right"),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey||e.keyCode===33)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;p<d;p++)a=s[p],c+=this._getWidthOfChar(this.ctx,a,h,p);var v=this._getIndexOnPrevLine(r,o,c,u);return o.length-v+s.length},_getIndexOnPrevLine:function(e,t,n,r){var i=e.lineIndex-1,s=this._getWidthOfLine(this.ctx,i,r),o=this._getLineLeftOffset(s),u=o,a=0,f;for(var l=0,c=t.length;l<c;l++){var h=t[l],p=this._getWidthOfChar(this.ctx,h,i,l);u+=p;if(u>n){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g<m?l:l-1;break}}return f||(a=t.length-1),a},moveCursorUp:function(e){this.abortCursorAnimation(),this._currentCursorOpacity=1;var t=this.getUpCursorOffset(e,this._selectionDirection==="right");e.shiftKey?this.moveCursorUpWithShift(t):this.moveCursorUpWithoutShift(t),this.initDelayedCursor()},moveCursorUpWithShift:function(e){this.selectionEnd===this.selectionStart&&(this._selectionDirection="left");var t=this._selectionDirection==="right"?"selectionEnd":"selectionStart";this[t]-=e,this.selectionEnd<this.selectionStart&&this._selectionDirection==="right"&&(this.swapSelectionPoints(),this._selectionDirection="left"),this.selectionStart<0&&(this.selectionStart=0),this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},moveCursorUpWithoutShift:function(e){this.selectionStart===this.selectionEnd&&(this.selectionStart-=e),this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd=this.selectionStart,this._selectionDirection="left",this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},moveCursorLeft:function(e){if(this.selectionStart===0&&this.selectionEnd===0)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorLeftWithShift(e):this.moveCursorLeftWithoutShift(e),this.initDelayedCursor()},_move:function(e,t,n){e.altKey?this[t]=this["findWordBoundary"+n](this[t]):e.metaKey||e.keyCode===35||e.keyCode===36?this[t]=this["findLineBoundary"+n](this[t]):this[t]+=n==="Left"?-1:1},_moveLeft:function(e,t){this._move(e,t,"Left")},_moveRight:function(e,t){this._move(e,t,"Right")},moveCursorLeftWithoutShift:function(e){this._selectionDirection="left",this.selectionEnd===this.selectionStart&&this._moveLeft(e,"selectionStart"),this.selectionEnd=this.selectionStart,this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},moveCursorLeftWithShift:function(e){this._selectionDirection==="right"&&this.selectionStart!==this.selectionEnd?this._moveLeft(e,"selectionEnd"):(this._selectionDirection="left",this._moveLeft(e,"selectionStart"),this.text.charAt(this.selectionStart)==="\n"&&this.selectionStart--,this.selectionStart<0&&(this.selectionStart=0)),this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},moveCursorRight:function(e){if(this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)),this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd),this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h<p;h++){var d=this.styles[t][h]||{};n.push(this._createTextCharSpan(u[h],d,f,l,o,a));var v=this._getWidthOfChar(this.ctx,u[h],t,h);d.textBackgroundColor&&s.push(this._createTextCharBg(d,f,l,c,v,a)),a+=v}},_getSVGLineLeftOffset:function(e){return this._boundaries&&this._boundaries[e]?fabric.util.toFixed(this._boundaries[e].left,2):0},_getSVGLineTopOffset:function(e){var t=0;for(var n=0;n<=e;n++)t+=this._getHeightOfLine(this.ctx,n);return t-this.height/2},_createTextCharBg:function(e,t,n,r,i,s){return['<rect fill="',e.textBackgroundColor,'" transform="translate(',-this.width/2," ",-this.height+r,")",'" x="',t+s,'" y="',n+r,'" width="',i,'" height="',r,'"></rect>'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['<tspan x="',n+s,'" ',i,'="',r,'" ',t.fontFamily?'font-family="'+t.fontFamily.replace(/"/g,"'")+'" ':"",t.fontSize?'font-size="'+t.fontSize+'" ':"",t.fontStyle?'font-style="'+t.fontStyle+'" ':"",t.fontWeight?'font-weight="'+t.fontWeight+'" ':"",t.textDecoration?'text-decoration="'+t.textDecoration+'" ':"",'style="',o,'">',fabric.util.string.escapeXml(e),"</tspan>"].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function( +e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e,t){return origSetWidth.call(this,e,t),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e,t){return origSetHeight.call(this,e,t),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-av.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-av.js new file mode 100755 index 0000000000..0c1e812d82 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-av.js @@ -0,0 +1,331 @@ +var H5PEditor = H5PEditor || {}; + +/** + * Audio/Video module. + * Makes it possible to add audio or video through file uploads and urls. + * + */ +H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) { + + /** + * Constructor. + * + * @param {mixed} parent + * @param {object} field + * @param {mixed} params + * @param {function} setValue + * @returns {_L3.C} + */ + function C(parent, field, params, setValue) { + var self = this; + + // Initialize inheritance + H5PEditor.FileUploader.call(self, field); + + this.parent = parent; + this.field = field; + this.params = params; + this.setValue = setValue; + this.changes = []; + + if (params !== undefined && params[0] !== undefined) { + this.setCopyright(params[0].copyright); + } + + // When uploading starts + self.on('upload', function () { + // Insert throbber + self.$uploading = $('<div class="h5peditor-uploading h5p-throbber">' + H5PEditor.t('core', 'uploading') + '</div>').insertAfter(self.$add.hide()); + + // Clear old error messages + self.$errors.html(''); + + // Close dialog + self.$addDialog.removeClass('h5p-open'); + }); + + // Handle upload complete + self.on('uploadComplete', function (event) { + var result = event.data; + + try { + if (result.error) { + throw result.error; + } + + // Set params if none is set + if (self.params === undefined) { + self.params = []; + self.setValue(self.field, self.params); + } + + // Add a new file/source + var file = { + path: result.data.path, + mime: result.data.mime, + copyright: self.copyright + }; + var index = (self.updateIndex !== undefined ? self.updateIndex : self.params.length); + self.params[index] = file; + self.addFile(index); + + // Trigger change callbacks (old event system) + for (var i = 0; i < self.changes.length; i++) { + self.changes[i](file); + } + } + catch (error) { + // Display errors + self.$errors.append(H5PEditor.createError(error)); + } + + if (self.$uploading !== undefined && self.$uploading.length !== 0) { + // Hide throbber and show add button + self.$uploading.remove(); + self.$add.show(); + } + }); + } + + C.prototype = Object.create(ns.FileUploader.prototype); + C.prototype.constructor = C; + + /** + * Append widget to given wrapper. + * + * @param {jQuery} $wrapper + */ + C.prototype.appendTo = function ($wrapper) { + var self = this; + + var imageHtml = + '<div class="file">' + C.createAdd(self.field.type) + '</div>' + + '<a class="h5p-copyright-button" href="#">' + H5PEditor.t('core', 'editCopyright') + '</a>' + + '<div class="h5p-editor-dialog">' + + '<a href="#" class="h5p-close" title="' + H5PEditor.t('core', 'close') + '"></a>' + + '</div>'; + + var html = H5PEditor.createFieldMarkup(this.field, imageHtml); + + var $container = $(html).appendTo($wrapper); + var $file = $container.children('.file'); + this.$add = $file.children('.h5p-add-file').click(function () { + self.$addDialog.addClass('h5p-open'); + }); + this.$addDialog = this.$add.next(); + var $url = this.$addDialog.find('.h5p-file-url'); + this.$addDialog.find('.h5p-cancel').click(function () { + self.updateIndex = undefined; + $url.val(''); + self.$addDialog.removeClass('h5p-open'); + }); + this.$addDialog.find('.h5p-file-upload').click(function () { + self.openFileSelector(); + }); + this.$addDialog.find('.h5p-insert').click(function () { + self.useUrl($url.val().trim()); + self.$addDialog.removeClass('h5p-open'); + $url.val(''); + }); + + this.$errors = $container.children('.h5p-errors'); + + if (this.params !== undefined) { + for (var i = 0; i < this.params.length; i++) { + this.addFile(i); + } + } + + var $dialog = $container.find('.h5p-editor-dialog'); + $container.find('.h5p-copyright-button').add($dialog.find('.h5p-close')).click(function () { + $dialog.toggleClass('h5p-open'); + return false; + }); + + var group = new H5PEditor.widgets.group(self, H5PEditor.copyrightSemantics, self.copyright, function (field, value) { + self.setCopyright(value); + }); + group.appendTo($dialog); + group.expand(); + group.$group.find('.title').remove(); + this.children = [group]; + }; + + /** + * Add file icon with actions. + * + * @param {Number} index + */ + C.prototype.addFile = function (index) { + var that = this; + var file = this.params[index]; + + if (that.updateIndex !== undefined) { + this.$add.parent().children(':eq(' + index + ')').find('.h5p-type').attr('title', file.mime).text(file.mime.split('/')[1]); + this.updateIndex = undefined; + return; + } + + var $file = $('<div class="h5p-thumbnail"><div class="h5p-type" title="' + file.mime + '">' + file.mime.split('/')[1] + '</div><div role="button" tabindex="1" class="h5p-remove" title="' + H5PEditor.t('core', 'removeFile') + '"></div></div>') + .insertBefore(this.$add) + .click(function () { + if (!that.$add.is(':visible')) { + return; // Do not allow editing of file while uploading + } + that.$addDialog.addClass('h5p-open').find('.h5p-file-url').val(that.params[index].path); + that.updateIndex = index; + }) + .children('.h5p-remove') + .click(function () { + if (that.$add.is(':visible')) { + confirmRemovalDialog.show($file.offset().top); + } + + return false; + }) + .end(); + + // Create remove file dialog + var confirmRemovalDialog = new H5P.ConfirmationDialog({ + headerText: H5PEditor.t('core', 'removeFile'), + dialogText: H5PEditor.t('core', 'confirmRemoval', {':type': 'file'}) + }).appendTo(document.body); + + // Remove file on confirmation + confirmRemovalDialog.on('confirmed', function () { + // Remove from params. + if (that.params.length === 1) { + delete that.params; + that.setValue(that.field); + } + else { + that.params.splice(index, 1); + } + + $file.remove(); + + for (var i = 0; i < that.changes.length; i++) { + that.changes[i](); + } + }); + }; + + C.prototype.useUrl = function (url) { + if (this.params === undefined) { + this.params = []; + this.setValue(this.field, this.params); + } + + var mime; + var matches = url.match(/\.(webm|mp4|ogv|m4a|mp3|ogg|oga|wav)/i); + if (matches !== null) { + mime = matches[matches.length - 1]; + } + else { + // Try to find a provider + for (var i = 0; i < C.providers.length; i++) { + if (C.providers[i].regexp.test(url)) { + mime = C.providers[i].name; + break; + } + } + } + + var file = { + path: url, + mime: this.field.type + '/' + (mime ? mime : 'unknown'), + copyright: this.copyright + }; + var index = (this.updateIndex !== undefined ? this.updateIndex : this.params.length); + this.params[index] = file; + this.addFile(index); + + for (var i = 0; i < this.changes.length; i++) { + this.changes[i](file); + } + }; + + /** + * Validate the field/widget. + * + * @returns {Boolean} + */ + C.prototype.validate = function () { + return true; + }; + + /** + * Remove this field/widget. + */ + C.prototype.remove = function () { + // TODO: Check what happens when removed during upload. + this.$errors.parent().remove(); + }; + + /** + * Sync copyright between all video files. + * + * @returns {undefined} + */ + C.prototype.setCopyright = function (value) { + this.copyright = value; + if (this.params !== undefined) { + for (var i = 0; i < this.params.length; i++) { + this.params[i].copyright = value; + } + } + }; + + /** + * Collect functions to execute once the tree is complete. + * + * @param {function} ready + * @returns {undefined} + */ + C.prototype.ready = function (ready) { + if (this.passReadies) { + this.parent.ready(ready); + } + else { + ready(); + } + }; + + /** + * HTML for add button. + * + * @param {string} type 'video' or 'audio' + * @returns {string} HTML + */ + C.createAdd = function (type) { + var inputPlaceholder = H5PEditor.t('core', type === 'audio' ? 'enterAudioUrl' : 'enterVideoUrl'); + var description = (type === 'audio' ? '' : '<div class="h5p-errors"></div><div class="h5peditor-field-description">' + H5PEditor.t('core', 'addVideoDescription') + '</div>'); + + return '<div role="button" tabindex="1" class="h5p-add-file" title="' + H5PEditor.t('core', 'addFile') + '"></div>' + + '<div class="h5p-add-dialog">' + + '<div class="h5p-dialog-box">' + + '<button class="h5peditor-button-textual h5p-file-upload">' + H5PEditor.t('core', 'selectFiletoUpload') + '</button>' + + '</div>' + + '<div class="h5p-or"><span>' + H5PEditor.t('core', 'or') + '</span></div>' + + '<div class="h5p-dialog-box">' + + '<input type="text" placeholder="' + inputPlaceholder + '" class="h5p-file-url h5peditor-text"/>' + + description + + '</div>' + + '<div class="h5p-buttons">' + + '<button class="h5peditor-button-textual h5p-insert">' + H5PEditor.t('core', 'insert') + '</button>' + + '<button class="h5peditor-button-textual h5p-cancel">' + H5PEditor.t('core', 'cancel') + '</button>' + + '</div>' + + '</div>'; + }; + + /** + * Providers incase mime type is unknown. + * @public + */ + C.providers = [{ + name: 'YouTube', + regexp: /^https?:\/\/((youtu.|y2u.)?be|(www.|m.)?youtube.com)\//i + }]; + + return C; +})(H5P.jQuery); diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-boolean.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-boolean.js new file mode 100755 index 0000000000..b113920b81 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-boolean.js @@ -0,0 +1,81 @@ +var H5PEditor = H5PEditor || {}; +var ns = H5PEditor; + +/** + * Creates a boolean field for the editor. + * + * @param {mixed} parent + * @param {object} field + * @param {mixed} params + * @param {function} setValue + * @returns {ns.Boolean} + */ +ns.Boolean = function (parent, field, params, setValue) { + if (params === undefined) { + this.value = false; + setValue(field, this.value); + } + else { + this.value = params; + } + + this.field = field; + this.setValue = setValue; + + // Setup event dispatching on change + this.changes = []; + this.triggerListeners = function (value) { + // Run callbacks + for (var i = 0; i < this.changes.length; i++) { + this.changes[i](value); + } + } +}; + +/** + * Create HTML for the boolean field. + */ +ns.Boolean.prototype.createHtml = function () { + var checked = (this.value !== undefined && this.value) ? ' checked' : ''; + var content = '<input type="checkbox"' + checked + ' />'; + + return ns.createBooleanFieldMarkup(this.field, content); +}; + +/** + * "Validate" the current boolean field. + */ +ns.Boolean.prototype.validate = function () { + return true; +}; + +/** + * Append the boolean field to the given wrapper. + * + * @param {jQuery} $wrapper + * @returns {undefined} + */ +ns.Boolean.prototype.appendTo = function ($wrapper) { + var that = this; + + this.$item = ns.$(this.createHtml()).appendTo($wrapper); + this.$input = this.$item.find('input'); + this.$errors = this.$item.find('.h5p-errors'); + + this.$input.change(function () { + // Validate + that.value = that.$input.is(':checked'); + that.setValue(that.field, that.value); + that.triggerListeners(that.value); + }); +}; + +/** + * Remove this item. + */ +ns.Boolean.prototype.remove = function () { + this.$item.remove(); +}; + +// Tell the editor what widget we are. +ns.widgets['boolean'] = ns.Boolean; diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-coordinates.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-coordinates.js new file mode 100755 index 0000000000..285a521930 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-coordinates.js @@ -0,0 +1,189 @@ +var H5PEditor = H5PEditor || {}; +var ns = H5PEditor; + +/** + * Creates a coordinates picker for the form. + * + * @param {mixed} parent + * @param {object} field + * @param {mixed} params + * @param {function} setValue + * @returns {ns.Coordinates} + */ +ns.Coordinates = function (parent, field, params, setValue) { + var that = this; + + this.parent = parent; + this.field = H5P.cloneObject(field, true); // TODO: Cloning is a quick fix, make sure this field doesn't change semantics! + + // Find image field to get max size from. + // TODO: Use followField? + this.findImageField('max', function (field) { + if (field instanceof ns.File) { + if (field.params !== undefined) { + that.setMax(field.params.width, field.params.height); + } + + field.changes.push(function (file) { + if (file === undefined) { + return; + } + // TODO: This callback should be removed when this item is removed. + that.setMax(file.params.width, file.params.height); + }); + } + else if (field instanceof ns.Dimensions) { + if (field.params !== undefined) { + that.setMax(field.params.width, field.params.height); + } + + field.changes.push(function (width, height) { + // TODO: This callback should be removed when this item is removed. + that.setMax(width, height); + }); + } + }); + + this.params = params; + this.setValue = setValue; +}; + +/** + * Set max coordinates. + * + * @param {string} x + * @param {string} y + * @returns {undefined} + */ +ns.Coordinates.prototype.setMax = function (x, y) { + this.field.max = { + x: parseInt(x), + y: parseInt(y) + }; + if (this.params !== undefined) { + this.$errors.html(''); + this.validate(); + } +}; + +/** + * Find the image field for the given property and then run the callback. + * + * @param {string} property + * @param {function} callback + * @returns {unresolved} + */ +ns.Coordinates.prototype.findImageField = function (property, callback) { + var that = this; + var str = 'string'; + + if (typeof this.field[property] !== str) { + return; + } + + // Find field when tree is ready. + this.parent.ready(function () { + if (typeof that.field[property] !== str) { + if (that.field[property] !== undefined) { + callback(that.field[property]); + } + return; // We've already found this field before. + } + var path = that.field[property]; + + that.field[property] = ns.findField(that.field[property], that.parent); + if (!that.field[property]) { + throw ns.t('core', 'unknownFieldPath', {':path': path}); + } + if (that.field[property].field.type !== 'image' && that.field[property].field.widget !== 'dimensions') { + throw ns.t('core', 'notImageOrDimensionsField', {':path': path}); + } + + callback(that.field[property]); + }); +}; + +/** + * Append the field to the wrapper. + * + * @param {jQuery} $wrapper + * @returns {undefined} + */ +ns.Coordinates.prototype.appendTo = function ($wrapper) { + var that = this; + + this.$item = ns.$(this.createHtml()).appendTo($wrapper); + this.$inputs = this.$item.find('input'); + this.$errors = this.$item.children('.h5p-errors'); + + this.$inputs.change(function () { + // Validate + var value = that.validate(); + + if (value) { + // Set param + that.params = value; + that.setValue(that.field, value); + } + }).click(function () { + return false; + }).click(function () { + return false; + }); +}; + +/** + * Create HTML for the coordinates picker. + */ +ns.Coordinates.prototype.createHtml = function () { + var input = ns.createText(this.params !== undefined ? this.params.x : undefined, 15, 'X') + ' , ' + ns.createText(this.params !== undefined ? this.params.y : undefined, 15, 'Y'); + return ns.createFieldMarkup(this.field, input); +}; + +/** + * Validate the current values. + */ +ns.Coordinates.prototype.validate = function () { + var that = this; + var coordinates = {}; + + this.$inputs.each(function (i) { + var $input = ns.$(this); + var value = H5P.trim($input.val()); + var property = i ? 'y' : 'x'; + + if (that.field.optional && !value.length) { + return true; + } + + if ((that.field.optional === undefined || !that.field.optional) && !value.length) { + that.$errors.append(ns.createError(ns.t('core', 'requiredProperty', {':property': property}))); + return false; + } + + if (value.length && !value.match(new RegExp('^[0-9]+$'))) { + that.$errors.append(ns.createError(ns.t('core', 'onlyNumbers', {':property': property}))); + return false; + } + + value = parseInt(value); + if (that.field.max !== undefined && value > that.field.max[property]) { + that.$errors.append(ns.createError(ns.t('core', 'exceedsMax', {':property': property, ':max': that.field.max[property]}))); + return false; + } + + coordinates[property] = value; + }); + + return ns.checkErrors(this.$errors, this.$inputs, coordinates); +}; + +/** + * Remove this item. + */ +ns.Coordinates.prototype.remove = function () { + this.$item.remove(); +}; + +// Tell the editor what widget we are. +ns.widgets.coordinates = ns.Coordinates; diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-dimensions.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-dimensions.js new file mode 100755 index 0000000000..6e60888bb2 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-dimensions.js @@ -0,0 +1,169 @@ +var H5PEditor = H5PEditor || {}; +var ns = H5PEditor; + +/** + * Adds a dimensions field to the form. + * + * TODO: Make it possible to lock width/height ratio. + * + * @param {mixed} parent + * @param {object} field + * @param {mixed} params + * @param {function} setValue + * @returns {ns.Dimensions} + */ +ns.Dimensions = function (parent, field, params, setValue) { + var that = this; + + this.parent = parent; + this.field = field; + this.changes = []; + + // Find image field to get max size from. + H5PEditor.followField(parent, field.max, function (file) { + that.setMax(file); + }); + + // Find image field to get default size from. + H5PEditor.followField(parent, field['default'], function (file, index) { + // Make sure we don't set size if we have one in the default params. + if (params.width === undefined) { + that.setSize(file); + } + }); + + this.params = params; + this.setValue = setValue; + + // Remove default field from params to avoid saving it. + if (this.params.field) { + this.params.field = undefined; + } +}; + +/** + * Set max dimensions. + * + * @param {Object} file + * @returns {unresolved} + */ +ns.Dimensions.prototype.setMax = function (file) { + if (file === undefined) { + return; + } + + this.max = { + width: parseInt(file.width), + height: parseInt(file.height) + }; +}; + +/** + * Set current dimensions. + * + * @param {string} width + * @param {string} height + * @returns {undefined} + */ +ns.Dimensions.prototype.setSize = function (file) { + if (file === undefined) { + return; + } + + this.params = { + width: parseInt(file.width), + height: parseInt(file.height) + }; + this.setValue(this.field, this.params); + + this.$inputs.filter(':eq(0)').val(file.width).next().val(file.height); + + for (var i = 0; i < this.changes.length; i++) { + this.changes[i](file.width, file.height); + } +}; + +/** + * Append the field to the given wrapper. + * + * @param {jQuery} $wrapper + * @returns {undefined} + */ +ns.Dimensions.prototype.appendTo = function ($wrapper) { + var that = this; + + this.$item = ns.$(this.createHtml()).appendTo($wrapper); + this.$inputs = this.$item.find('input'); + this.$errors = this.$item.children('.h5p-errors'); + + this.$inputs.change(function () { + // Validate + var value = that.validate(); + + if (value) { + // Set param + that.params = value; + that.setValue(that.field, value); + + for (var i = 0; i < that.changes.length; i++) { + that.changes[i](value.width, value.height); + } + } + }).click(function () { + return false; + }); +}; + +/** + * Create HTML for the field. + */ +ns.Dimensions.prototype.createHtml = function () { + var input = ns.createText(this.params !== undefined ? this.params.width : undefined, 15, ns.t('core', 'width')) + ' x ' + ns.createText(this.params !== undefined ? this.params.height : undefined, 15, ns.t('core', 'height')); + return ns.createFieldMarkup(this.field, input); +}; + +/** + * Validate the current text field. + */ +ns.Dimensions.prototype.validate = function () { + var that = this; + var size = {}; + + this.$errors.html(''); + + this.$inputs.each(function (i) { + var $input = ns.$(this); + var value = H5P.trim($input.val()); + var property = i ? 'height' : 'width'; + var propertyTranslated = ns.t('core', property); + + if ((that.field.optional === undefined || !that.field.optional) && !value.length) { + that.$errors.append(ns.createError(ns.t('core', 'requiredProperty', {':property': propertyTranslated}))); + return false; + } + else if (!value.match(new RegExp('^[0-9]+$'))) { + that.$errors.append(ns.createError(ns.t('core', 'onlyNumbers', {':property': propertyTranslated}))); + return false; + } + + value = parseInt(value); + if (that.max !== undefined && value > that.max[property]) { + that.$errors.append(ns.createError(ns.t('core', 'exceedsMax', {':property': propertyTranslated, ':max': that.max[property]}))); + return false; + } + + size[property] = value; + }); + + return ns.checkErrors(this.$errors, this.$inputs, size); +}; + +/** + * Remove this item. + */ +ns.Dimensions.prototype.remove = function () { + this.$item.remove(); +}; + +// Tell the editor what widget we are. +ns.widgets.dimensions = ns.Dimensions; diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-editor.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-editor.js new file mode 100755 index 0000000000..96324870ed --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-editor.js @@ -0,0 +1,204 @@ +/** + * @namespace + */ +var H5PEditor = (H5PEditor || {}); +var ns = H5PEditor; + +/** + * Construct the editor. + * + * @class H5PEditor.Editor + * @param {string} library + * @param {Object} defaultParams + */ +ns.Editor = function (library, defaultParams, replace) { + var self = this; + + // Create iframe and replace the given element with it + var iframe = ns.$('<iframe/>', { + css: { + display: 'block', + width: '100%', + height: '3em', + border: 'none', + zIndex: 101, + top: 0, + left: 0 + }, + 'class': 'h5p-editor-iframe', + frameBorder: '0' + }).replaceAll(replace).load(function () { + var $ = this.contentWindow.H5P.jQuery; + var LibrarySelector = this.contentWindow.H5PEditor.LibrarySelector; + this.contentWindow.H5P.$body = $(this.contentDocument.body); + var $container = $('body > .h5p-editor'); + + // Load libraries list + $.ajax({ + dataType: 'json', + url: ns.getAjaxUrl('libraries') + }).fail(function () { + $container.html('Error, unable to load libraries.'); + }).done(function (data) { + self.selector = new LibrarySelector(data, library, defaultParams); + self.selector.appendTo($container.html('')); + if (library) { + self.selector.$selector.change(); + } + }); + + // Start resizing the iframe + if (iframe.contentWindow.MutationObserver !== undefined) { + // If supported look for changes to DOM elements. This saves resources. + var running; + var limitedResize = function (mutations) { + if (!running) { + running = setTimeout(function () { + resize(); + running = null; + }, 40); // 25 fps cap + } + }; + + new iframe.contentWindow.MutationObserver(limitedResize).observe(iframe.contentWindow.document.body, { + childList: true, + attributes: true, + characterData: true, + subtree: true, + attributeOldValue: false, + characterDataOldValue: false + }); + H5P.$window.resize(limitedResize); + } + else { + // Use an interval for resizing the iframe + (function resizeInterval() { + resize(); + setTimeout(resizeInterval, 40); // No more than 25 times per second + })(); + } + }).get(0); + iframe.contentDocument.open(); + iframe.contentDocument.write( + '<!doctype html><html>' + + '<head>' + + ns.wrap('<link rel="stylesheet" href="', ns.assets.css, '">') + + ns.wrap('<script src="', ns.assets.js, '"></script>') + + '</head><body>' + + '<div class="h5p-editor">' + ns.t('core', 'loading') + '</div>' + + '</body></html>'); + iframe.contentDocument.close(); + iframe.contentDocument.documentElement.style.overflow = 'hidden'; + + /** + * Checks if iframe needs resizing, and then resize it. + * + * @private + */ + var resize = function () { + if (iframe.clientHeight === iframe.contentDocument.body.scrollHeight && + iframe.contentDocument.body.scrollHeight === iframe.contentWindow.document.body.clientHeight) { + return; // Do not resize unless page and scrolling differs + } + + // Retain parent size to avoid jumping/scrolling + var parentHeight = iframe.parentElement.style.height; + iframe.parentElement.style.height = iframe.parentElement.clientHeight + 'px'; + + // Reset iframe height, in case content has shrinked. + iframe.style.height = iframe.contentWindow.document.body.clientHeight + 'px'; + + // Resize iframe so all content is visible. Use scrollHeight to make sure we get everything + iframe.style.height = iframe.contentDocument.body.scrollHeight + 'px'; + + // Free parent + iframe.parentElement.style.height = parentHeight; + }; +}; + +/** + * Find out which library is used/selected. + * + * @alias H5PEditor.Editor#getLibrary + * @returns {string} Library name + */ +ns.Editor.prototype.getLibrary = function () { + if (this.selector !== undefined) { + return this.selector.$selector.val(); + } +}; + +/** + * Get parameters needed to start library. + * + * @alias H5PEditor.Editor#getParams + * @returns {Object} Library parameters + */ +ns.Editor.prototype.getParams = function () { + if (this.selector !== undefined) { + return this.selector.getParams(); + } +}; + +/** + * Editor translations index by library name or "core". + * + * @member {Object} H5PEditor.language + */ +ns.language = {}; + +/** + * Translate text strings. + * + * @method H5PEditor.t + * @param {string} library The library name(machineName), or "core". + * @param {string} key Translation string identifier. + * @param {Object} [vars] Placeholders and values to replace in the text. + * @returns {string} Translated string, or a text if string translation is missing. + */ +ns.t = function (library, key, vars) { + if (ns.language[library] === undefined) { + return 'Missing translations for library ' + library; + } + + var translation; + if (library === 'core') { + if (ns.language[library][key] === undefined) { + return 'Missing translation for ' + key; + } + translation = ns.language[library][key]; + } + else { + if (ns.language[library].libraryStrings === undefined || ns.language[library].libraryStrings[key] === undefined) { + return ns.t('core', 'missingTranslation', {':key': key}); + } + translation = ns.language[library].libraryStrings[key]; + } + + // Replace placeholder with variables. + for (var placeholder in vars) { + if (!vars[placeholder]) { + continue; + } + translation = translation.replace(placeholder, vars[placeholder]); + } + + return translation; +}; + +/** + * Wraps multiple content between a prefix and a suffix. + * + * @method H5PEditor.wrap + * @param {string} prefix Inserted before the content. + * @param {Array} content List of content to be wrapped. + * @param {string} suffix Inserted after the content. + * @returns {string} All content put together with prefix and suffix. + */ +ns.wrap = function (prefix, content, suffix) { + var result = ''; + for (var i = 0; i < content.length; i++) { + result += prefix + content[i] + suffix; + } + return result; +}; diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-file-uploader.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-file-uploader.js new file mode 100755 index 0000000000..3055c851e7 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-file-uploader.js @@ -0,0 +1,311 @@ +H5PEditor.FileUploader = (function ($, EventDispatcher) { + var nextIframe; + + /** + * File Upload API for H5P + * + * @class H5PEditor.FileUploader + * @extends H5P.EventDispatcher + * @param {Object} field Required for validating the uploaded file + */ + function FileUploader(field) { + var self = this; + + // Initialize event inheritance + EventDispatcher.call(self); + + var isUploadingData; + + /** + * Trigger uploading start. + * + * @private + * @param {string} [data] Optional for uploading string data (URI) + * @return {boolean} false if the iframe is unavailable and the caller should try again later + */ + var upload = function (data) { + if (!nextIframe.isReady()) { + return false; // Iframe isn't loaded. The caller should try again later + } + + isUploadingData = (data !== undefined); + + // Add event listeners + nextIframe.on('upload', function (event) { + self.trigger(event); + }); + nextIframe.on('uploadComplete', function (event) { + self.trigger(event); + }); + + // Update field + nextIframe.setField(field, data); + + return true; + }; + + /** + * Prepare an iframe and triggers the opening of the file selector + * @return {boolean} false if the iframe is unavailable and the caller should try again later + */ + self.openFileSelector = function () { + return upload(); + }; + + /** + * Prepare an iframe and trigger upload of the given data. + * + * @param {string} data + * @return {boolean} false if the iframe is unavailable and the caller should try again later + */ + self.uploadData = function (data) { + if (data === undefined) { + throw('Missing data.'); + } + return upload(data); + }; + + /** + * Makes it possible to check if it is data or a file being uploaded. + * + * @return {boolean} + */ + self.isUploadingData = function () { + return isUploadingData; + }; + + if (!nextIframe) { + // We must always have an iframe available for the next upload + nextIframe = new Iframe(); + } + } + + // Extends the event dispatcher + FileUploader.prototype = Object.create(EventDispatcher.prototype); + FileUploader.prototype.constructor = FileUploader; + + /** + * Iframe for file uploading. Only available for the FileUploader class. + * Iframes are discarded after the upload is completed. + * + * @private + * @class Iframe + * @extends H5P.EventDispatcher + */ + function Iframe() { + var self = this; + + // Initialize event inheritance + EventDispatcher.call(self); + + var ready = false; + var $iframe, $form, $file, $data, $field; + + /** + * @private + */ + var upload = function () { + // Iframe isn't really bound to a field until the upload starts + ready = false; + + // Trigger upload event and submit upload form + self.trigger('upload'); + $form.submit(); + + // This iframe is used, we must add another for the next upload + nextIframe = new Iframe(); + }; + + /** + * Create and insert iframe into the DOM. + * + * @private + */ + var insertIframe = function () { + $iframe = $('<iframe/>', { + css: { + position: 'absolute', + width: '1px', + height: '1px', + top: '-1px', + border: 0, + overflow: 'hidden' + }, + one: { + load: function () { + ready = true; + } + }, + appendTo: 'body' + }); + }; + + /** + * Create and add upload form to the iframe. + * + * @private + */ + var insertForm = function () { + // Create upload form + $form = $('<form/>', { + method: 'post', + enctype: 'multipart/form-data', + action: H5PEditor.getAjaxUrl('files') + }); + + // Create input fields + $file = $('<input/>', { + type: 'file', + name: 'file', + on: { + change: upload + }, + appendTo: $form + }); + $data = $('<input/>', { + type: 'hidden', + name: 'dataURI', + appendTo: $form + }); + $field = $('<input/>', { + type: 'hidden', + name: 'field', + appendTo: $form + }); + $('<input/>', { + type: 'hidden', + name: 'contentId', + value: H5PEditor.contentId ? H5PEditor.contentId : 0, + appendTo: $form + }); + + // Add form to iframe + var $body = $iframe.contents().find('body'); + $form.appendTo($body); + + // Add event handler for processing results + $iframe.on('load', processResponse); + }; + + /** + * Handler for processing server response when upload form is submitted. + * + * @private + */ + var processResponse = function () { + // Upload complete, get response text + var $body = $iframe.contents().find('body'); + var response = $body.text(); + + // Clean up all our DOM elements + $iframe.remove(); + + // Try to parse repsonse + if (response) { + var result; + var uploadComplete = { + error: null, + data: null + }; + + try { + result = JSON.parse(response); + } + catch (err) { + H5P.error(err); + // Add error data to event object + uploadComplete.error = H5PEditor.t('core', 'fileToLarge'); + } + + if (result !== undefined) { + if (result.error !== undefined) { + uploadComplete.error = result.error; + } + if (result.success === false) { + uploadComplete.error = (result.message ? result.message : H5PEditor.t('core', 'unknownFileUploadError')); + } + } + + if (uploadComplete.error === null) { + // No problems, add response data to event object + uploadComplete.data = result; + } + + // Allow the widget to process the result + self.trigger('uploadComplete', uploadComplete); + } + }; + + /** + * Prepare the upload form for the given field. + * Opens the file selector or if data is provided, submits the form + * straight away. + * + * @param {Object} field + * @param {string} [data] Optional URI + */ + self.setField = function (field, data) { + // Determine allowed file mimes + var mimes; + if (field.mimes) { + mimes = field.mimes.join(','); + } + else if (field.type === 'image') { + mimes = 'image/jpeg,image/png,image/gif'; + } + else if (field.type === 'audio') { + mimes = 'audio/mpeg,audio/x-wav,audio/ogg'; + } + else if (field.type === 'video') { + mimes = 'video/mp4,video/webm,video/ogg'; + } + + $file.attr('accept', mimes); + + // Set field + $field.val(JSON.stringify(field)); + + if (data !== undefined) { + // Upload given data + $data.val(data); + upload(); + } + else { + // Trigger file selector + $file.click(); + } + }; + + /** + * Indicates if this iframe is ready to be used + */ + self.isReady = function () { + if (!ready) { + return false; + } + + if (!$form) { + // Insert form if not present + insertForm(); + } + else { + // If present clear any event handlers (was used by another field) + self.off('upload'); + self.off('uploadComplete'); + } + + return true; + }; + + // Always insert iframe on construct + insertIframe(); + // The iframe must be loaded before the click event that sets the field, + // async clicking won't work for security reasons in the browser. + } + + // Extends the event dispatcher + Iframe.prototype = Object.create(EventDispatcher.prototype); + Iframe.prototype.constructor = Iframe; + + return FileUploader; +})(H5P.jQuery, H5P.EventDispatcher); diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-file.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-file.js new file mode 100755 index 0000000000..e8902bc95a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-file.js @@ -0,0 +1,223 @@ +var H5PEditor = H5PEditor || {}; +var ns = H5PEditor; + +/** + * Adds a file upload field to the form. + * + * @param {mixed} parent + * @param {object} field + * @param {mixed} params + * @param {function} setValue + * @returns {ns.File} + */ +ns.File = function (parent, field, params, setValue) { + var self = this; + + // Initialize inheritance + ns.FileUploader.call(self, field); + + this.parent = parent; + this.field = field; + this.params = params; + this.setValue = setValue; + this.library = parent.library + '/' + field.name; + + if (params !== undefined) { + this.copyright = params.copyright; + } + + this.changes = []; + this.passReadies = true; + parent.ready(function () { + self.passReadies = false; + }); + + // Create remove file dialog + this.confirmRemovalDialog = new H5P.ConfirmationDialog({ + headerText: H5PEditor.t('core', 'removeFile'), + dialogText: H5PEditor.t('core', 'confirmRemoval', {':type': 'file'}) + }).appendTo(document.body); + + // Remove file on confirmation + this.confirmRemovalDialog.on('confirmed', function () { + delete self.params; + self.setValue(self.field); + self.addFile(); + + for (var i = 0; i < self.changes.length; i++) { + self.changes[i](); + } + }); + + // When uploading starts + self.on('upload', function () { + // Insert throbber + self.$file.html('<div class="h5peditor-uploading h5p-throbber">' + ns.t('core', 'uploading') + '</div>'); + + // Clear old error messages + self.$errors.html(''); + }); + + // Handle upload complete + self.on('uploadComplete', function (event) { + var result = event.data; + + try { + if (result.error) { + throw result.error; + } + + self.params = self.params || {}; + self.params.path = result.data.path; + self.params.mime = result.data.mime; + self.params.copyright = self.copyright; + + // Make it possible for other widgets to process the result + self.trigger('fileUploaded', result.data); + + self.setValue(self.field, self.params); + + for (var i = 0; i < self.changes.length; i++) { + self.changes[i](self.params); + } + } + catch (error) { + self.$errors.append(ns.createError(error)); + } + + self.addFile(); + }); +}; + +ns.File.prototype = Object.create(ns.FileUploader.prototype); +ns.File.prototype.constructor = ns.File; + +/** + * Append field to the given wrapper. + * + * @param {jQuery} $wrapper + * @returns {undefined} + */ +ns.File.prototype.appendTo = function ($wrapper) { + var self = this; + + var fileHtml = + '<div class="file"></div>' + + '<a class="h5p-copyright-button" href="#">' + ns.t('core', 'editCopyright') + '</a>' + + '<div class="h5p-editor-dialog">' + + '<a href="#" class="h5p-close" title="' + ns.t('core', 'close') + '"></a>' + + '</div>'; + + var html = ns.createFieldMarkup(this.field, fileHtml); + + var $container = ns.$(html).appendTo($wrapper); + this.$copyrightButton = $container.find('.h5p-copyright-button'); + this.$file = $container.find('.file'); + this.$errors = $container.find('.h5p-errors'); + this.addFile(); + + var $dialog = $container.find('.h5p-editor-dialog'); + $container.find('.h5p-copyright-button').add($dialog.find('.h5p-close')).click(function () { + $dialog.toggleClass('h5p-open'); + return false; + }); + + var group = new ns.widgets.group(self, ns.copyrightSemantics, self.copyright, function (field, value) { + if (self.params !== undefined) { + self.params.copyright = value; + } + self.copyright = value; + }); + group.appendTo($dialog); + group.expand(); + group.$group.find('.title').remove(); + this.children = [group]; +}; + + +/** + * Sync copyright between all video files. + * + * @returns {undefined} + */ +ns.File.prototype.setCopyright = function (value) { + this.copyright = this.params.copyright = value; +}; + + +/** + * Creates thumbnail HTML and actions. + * + * @returns {Boolean} + */ +ns.File.prototype.addFile = function () { + var that = this; + + if (this.params === undefined) { + this.$file.html( + '<a href="#" class="add" title="' + ns.t('core', 'addFile') + '">' + + '<div class="h5peditor-field-file-upload-text">' + ns.t('core', 'add') + '</div>' + + '</a>' + ).children('.add').click(function () { + that.openFileSelector(); + return false; + }); + this.$copyrightButton.addClass('hidden'); + return; + } + + var thumbnail; + if (this.field.type === 'image') { + thumbnail = {}; + thumbnail.path = H5P.getPath(this.params.path, H5PEditor.contentId); + thumbnail.height = 100; + if (this.params.width !== undefined) { + thumbnail.width = thumbnail.height * (this.params.width / this.params.height); + } + } + else { + thumbnail = ns.fileIcon; + } + + this.$file.html('<a href="#" title="' + ns.t('core', 'changeFile') + '" class="thumbnail"><img ' + (thumbnail.width === undefined ? '' : ' width="' + thumbnail.width + '"') + 'height="' + thumbnail.height + '" alt="' + (this.field.label === undefined ? '' : this.field.label) + '"/><a href="#" class="remove" title="' + ns.t('core', 'removeFile') + '"></a></a>').children(':eq(0)').click(function () { + that.openFileSelector(); + return false; + }).children('img').attr('src', thumbnail.path).end().next().click(function (e) { + that.confirmRemovalDialog.show(H5P.jQuery(this).offset().top); + return false; + }); + that.$copyrightButton.removeClass('hidden'); +}; + +/** + * Validate this item + */ +ns.File.prototype.validate = function () { + return true; +}; + +/** + * Remove this item. + */ +ns.File.prototype.remove = function () { + // TODO: Check what happens when removed during upload. + this.$file.parent().remove(); +}; + +/** + * Collect functions to execute once the tree is complete. + * + * @param {function} ready + * @returns {undefined} + */ +ns.File.prototype.ready = function (ready) { + if (this.passReadies) { + this.parent.ready(ready); + } + else { + ready(); + } +}; + +// Tell the editor what widget we are. +ns.widgets.file = ns.File; diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-form.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-form.js new file mode 100755 index 0000000000..546b8fbc99 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-form.js @@ -0,0 +1,100 @@ +var H5PEditor = H5PEditor || {}; +var ns = H5PEditor; + +/** + * Construct a form from library semantics. + */ +ns.Form = function () { + var self = this; + + this.params = {}; + this.passReadies = false; + this.commonFields = {}; + this.$form = ns.$('' + + '<div class="h5peditor-form">' + + '<div class="tree"></div>' + + '<div class="common collapsed hidden">' + + '<div class="fields">' + + '<p class="desc">' + + ns.t('core', 'commonFieldsDescription') + + '</p>' + + '</div>' + + '</div>' + + '</div>' + ); + this.$common = this.$form.find('.common > .fields'); + this.library = ''; + + // Add title expand/collapse button + ns.$('<div/>', { + 'class': 'h5peditor-label', + title: ns.t('core', 'expandCollapse'), + role: 'button', + tabIndex: 0, + html: '<span class="icon"></span>' + ns.t('core', 'commonFields'), + on: { + click: function () { + self.$common.parent().toggleClass('collapsed'); + }, + keypress: function (event) { + if ((event.charCode || event.keyCode) === 32) { + self.$common.parent().toggleClass('collapsed'); + event.preventDefault(); + } + } + }, + prependTo: this.$common.parent() + }); + + // Alternate background colors + this.zebra = "odd"; +}; + +/** + * Replace the given element with our form. + * + * @param {jQuery} $element + * @returns {undefined} + */ +ns.Form.prototype.replace = function ($element) { + $element.replaceWith(this.$form); + this.offset = this.$form.offset(); + // Prevent inputs and selects in an h5peditor form from submitting the main + // framework form. + this.$form.on('keydown', 'input,select', function (event) { + if (event.keyCode === 13) { + // Prevent enter key from submitting form. + return false; + } + }); +}; + +/** + * Remove the current form. + */ +ns.Form.prototype.remove = function () { + ns.removeChildren(this.children); + this.$form.remove(); +}; + +/** + * Wrapper for processing the semantics. + * + * @param {Array} semantics + * @param {Object} defaultParams + * @returns {undefined} + */ +ns.Form.prototype.processSemantics = function (semantics, defaultParams) { + this.params = defaultParams; + ns.processSemanticsChunk(semantics, this.params, this.$form.children('.tree'), this); +}; + +/** + * Collect functions to execute once the tree is complete. + * + * @param {function} ready + * @returns {undefined} + */ +ns.Form.prototype.ready = function (ready) { + this.readies.push(ready); +}; diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-group.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-group.js new file mode 100755 index 0000000000..67a0b65a5e --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-group.js @@ -0,0 +1,339 @@ +var H5PEditor = H5PEditor || {}; +var ns = H5PEditor; + +/** + * Create a group of fields. + * + * @param {mixed} parent + * @param {object} field + * @param {mixed} params + * @param {function} setValue + * @returns {ns.Group} + */ +ns.Group = function (parent, field, params, setValue) { + // Support for events + H5P.EventDispatcher.call(this); + + if (field.label === undefined) { + field.label = field.name; + } + else if (field.label === 0) { + field.label = ''; + } + + this.parent = parent; + this.passReadies = true; + this.params = params; + this.setValue = setValue; + this.library = parent.library + '/' + field.name; + + if (field.deprecated !== undefined && field.deprecated) { + this.field = H5P.cloneObject(field, true); + var empties = 0; + for (var i = 0; i < this.field.fields.length; i++) { + var f = this.field.fields[i]; + if (params !== undefined && params[f.name] === '') { + delete params[f.name]; + } + if (params === undefined || params[f.name] === undefined) { + f.widget = 'none'; + empties++; + } + } + if (i === empties) { + this.field.fields = []; + } + } + else { + this.field = field; + } + + if (this.field.optional === true) { + // If this field is optional, make sure child fields are as well + for (var j = 0; j < this.field.fields.length; j++) { + this.field.fields[j].optional = true; + } + } +}; + +// Extends the event dispatcher +ns.Group.prototype = Object.create(H5P.EventDispatcher.prototype); +ns.Group.prototype.constructor = ns.Group; + +/** + * Append group to its wrapper. + * + * @param {jQuery} $wrapper + * @returns {undefined} + */ +ns.Group.prototype.appendTo = function ($wrapper) { + var that = this; + + if (this.field.fields.length === 0) { + // No fields or all are deprecated + this.setValue(this.field); + return; + } + + // Add fieldset wrapper for group + this.$group = ns.$('<fieldset/>', { + 'class': 'field group ' + H5PEditor.createImportance(this.field.importance) + ' field-name-' + this.field.name, + appendTo: $wrapper + }); + + // Add title expand/collapse button + this.$title = ns.$('<div/>', { + 'class': 'title', + title: ns.t('core', 'expandCollapse'), + role: 'button', + tabIndex: 0, + on: { + click: function () { + that.toggle(); + }, + keypress: function (event) { + if ((event.charCode || event.keyCode) === 32) { + that.toggle(); + event.preventDefault(); + } + } + }, + appendTo: this.$group + }); + + // Add content container + var $content = ns.$('<div/>', { + 'class': 'content', + appendTo: this.$group + }); + + if (this.hasSingleChild() && !this.isSubContent()) { + $content.addClass('h5peditor-single'); + this.children = []; + var field = this.field.fields[0]; + var widget = field.widget === undefined ? field.type : field.widget; + this.children[0] = new ns.widgets[widget](this, field, this.params, function (field, value) { + that.setValue(that.field, value); + }); + this.children[0].appendTo($content); + } + else { + if (this.params === undefined) { + this.params = {}; + this.setValue(this.field, this.params); + } + + this.params = this.initSubContent(this.params); + + ns.processSemanticsChunk(this.field.fields, this.params, $content, this); + } + + // Set summary + this.findSummary(); + + // Check if group should be expanded. + // Default is to be collapsed unless explicity defined in semantics by optional attribute expanded + if (this.field.expanded === true) { + this.expand(); + } +}; + +/** + * Return whether this group is Sub Content + * + * @private + * @return {boolean} + */ +ns.Group.prototype.hasSingleChild = function () { + return this.field.fields.length === 1; +}; + +/** + * Add generated 'subContentId' attribute, if group is "sub content (library-like embedded structure)" + * + * @param {object} params + * + * @private + * @return {object} + */ +ns.Group.prototype.initSubContent = function (params) { + // If group contains library-like sub content that needs UUIDs + if(this.isSubContent()){ + params['subContentId'] = params['subContentId'] || H5P.createUUID(); + } + + return params; +}; + +/** + * Return whether this group is Sub Content + * + * @private + * @return {boolean} + */ +ns.Group.prototype.isSubContent = function () { + return this.field.isSubContent === true; +}; + +/** + * Toggle expand/collapse for the given group. + */ +ns.Group.prototype.toggle = function () { + if (this.preventToggle) { + this.preventToggle = false; + return; + } + + if (this.$group.hasClass('expanded')) { + this.collapse(); + } + else { + this.expand(); + } +}; + +/** + * Expand the given group. + */ +ns.Group.prototype.expand = function () { + this.$group.addClass('expanded'); + this.trigger('expanded'); +}; + +/** + * Collapse the given group (if valid) + */ +ns.Group.prototype.collapse = function () { + // Do not collapse before valid! + var valid = true; + for (var i = 0; i < this.children.length; i++) { + if (this.children[i].validate() === false) { + valid = false; + } + } + if (valid) { + this.$group.removeClass('expanded'); + this.trigger('collapsed'); + } +}; + +/** + * Find summary to display in group header. + */ +ns.Group.prototype.findSummary = function () { + var that = this; + var summary; + for (var j = 0; j < this.children.length; j++) { + var child = this.children[j]; + if (child.field === undefined) { + continue; + } + var params = (that.hasSingleChild() && !that.isSubContent()) ? this.params : this.params[child.field.name]; + var widget = ns.getWidgetName(child.field); + + if (widget === 'text' || widget === 'html') { + if (params !== undefined && params !== '') { + summary = params.replace(/(<([^>]+)>)/ig, ""); + } + + child.$input.change(function () { + var params = (that.hasSingleChild() && !that.isSubContent()) ? that.params : that.params[child.field.name]; + if (params !== undefined && params !== '') { + that.setSummary(params.replace(/(<([^>]+)>)/ig, "")); + } + }); + break; + } + else if (widget === 'library') { + if (params !== undefined) { + summary = child.$select.children(':selected').text(); + } + child.change(function (library) { + that.setSummary(library.title); + }); + break; + } + } + this.setSummary(summary); +}; + +/** + * Set the given group summary. + * + * @param {string} summary + * @returns {undefined} + */ +ns.Group.prototype.setSummary = function (summary) { + var summaryText; + + // Parse html + var summaryTextNode = ns.$.parseHTML(summary); + + if (summaryTextNode !== null) { + summaryText = summaryTextNode[0].nodeValue; + } + + // Make it possible for parent to monitor summary changes + this.trigger('summary', summaryText); + + if (summaryText !== undefined) { + summaryText = this.field.label + ': ' + (summaryText.length > 48 ? summaryText.substr(0, 45) + '...' : summaryText); + } + else { + summaryText = this.field.label; + } + + this.$title.text(summaryText); +}; + +/** + * Validate all children. + */ +ns.Group.prototype.validate = function () { + var valid = true; + + if (this.children !== undefined) { + for (var i = 0; i < this.children.length; i++) { + if (this.children[i].validate() === false) { + valid = false; + } + } + } + + return valid; +}; + +/** + * Allows ancestors and widgets to do stuff with our children. + * + * @public + * @param {Function} task + */ +ns.Group.prototype.forEachChild = function (task) { + for (var i = 0; i < this.children.length; i++) { + task(this.children[i], i); + } +}; + +/** + * Collect functions to execute once the tree is complete. + * + * @param {function} ready + * @returns {undefined} + */ +ns.Group.prototype.ready = function (ready) { + this.parent.ready(ready); +}; + +/** + * Remove this item. + */ +ns.Group.prototype.remove = function () { + if (this.$group !== undefined) { + ns.removeChildren(this.children); + this.$group.remove(); + } +}; + +// Tell the editor what widget we are. +ns.widgets.group = ns.Group; diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-html.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-html.js new file mode 100755 index 0000000000..f93b905dde --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-html.js @@ -0,0 +1,509 @@ +var H5PEditor = H5PEditor || {}; +var ns = H5PEditor; + +/** + * Adds a html text field to the form. + * + * @param {type} parent + * @param {type} field + * @param {type} params + * @param {type} setValue + * @returns {undefined} + */ +ns.Html = function (parent, field, params, setValue) { + this.field = field; + this.value = params; + this.setValue = setValue; + this.tags = ns.$.merge(['br'], (this.field.tags || this.defaultTags)); +}; +ns.Html.first = true; + +ns.Html.prototype.defaultTags = ['strong', 'em', 'del', 'h2', 'h3', 'a', 'ul', 'ol', 'table', 'hr']; + +// This should probably be named "hasTag()" instead... +// And might be more efficient if this.tags.contains() were used? +ns.Html.prototype.inTags = function (value) { + return (ns.$.inArray(value.toLowerCase(), this.tags) >= 0); +}; + +ns.Html.prototype.createToolbar = function () { + var basicstyles = []; + var paragraph = []; + var formats = []; + var inserts = []; + var toolbar = []; + + // Basic styles + if (this.inTags("strong") || this.inTags("b")) { + basicstyles.push('Bold'); + // Might make "strong" duplicated in the tag lists. Which doesn't really + // matter. Note: CKeditor will only make strongs. + this.tags.push("strong"); + } + if (this.inTags("em") || this.inTags("i")) { + basicstyles.push('Italic'); + // Might make "em" duplicated in the tag lists. Which again + // doesn't really matter. Note: CKeditor will only make ems. + this.tags.push("em"); + } + if (this.inTags("u")) basicstyles.push('Underline'); + if (this.inTags("strike") || this.inTags("del") || this.inTags("s")) { + basicstyles.push('Strike'); + // Might make "strike" or "del" or both duplicated in the tag lists. Which + // again doesn't really matter. + this.tags.push("strike"); + this.tags.push("del"); + this.tags.push("s"); + } + if (this.inTags("sub")) basicstyles.push("Subscript"); + if (this.inTags("sup")) basicstyles.push("Superscript"); + if (basicstyles.length > 0) { + basicstyles.push("-"); + basicstyles.push("RemoveFormat"); + toolbar.push({ + name: 'basicstyles', + items: basicstyles + }); + } + + // Alignment is added to all wysiwygs + toolbar.push({ + name: "justify", + items: ["JustifyLeft", "JustifyCenter", "JustifyRight"] + }); + + // Paragraph styles + if (this.inTags("ul")) { + paragraph.push("BulletedList"); + this.tags.push("li"); + } + if (this.inTags("ol")) { + paragraph.push("NumberedList"); + this.tags.push("li"); + } + if (this.inTags("blockquote")) paragraph.push("Blockquote"); + if (paragraph.length > 0) { + toolbar.push(paragraph); + } + + // Links. + if (this.inTags("a")) { + var items = ["Link", "Unlink"]; + if (this.inTags("anchor")) { + items.push("Anchor"); + } + toolbar.push({ + name: "links", + items: items + }); + } + + // Inserts + if (this.inTags("img")) inserts.push("Image"); + if (this.inTags("table")) { + inserts.push("Table"); + ns.$.merge(this.tags, ["tr", "td", "th", "colgroup", "thead", "tbody", "tfoot"]); + } + if (this.inTags("hr")) inserts.push("HorizontalRule"); + if (inserts.length > 0) { + toolbar.push({ + name: "insert", + items: inserts + }); + } + + // Create wrapper for text styling options + var styles = { + name: "styles", + items: [] + }; + var colors = { + name: "colors", + items: [] + }; + + // Add format group if formatters in tags (h1, h2, etc). Formats use their + // own format_tags to filter available formats. + if (this.inTags("h1")) formats.push("h1"); + if (this.inTags("h2")) formats.push("h2"); + if (this.inTags("h3")) formats.push("h3"); + if (this.inTags("h4")) formats.push("h4"); + if (this.inTags("h5")) formats.push("h5"); + if (this.inTags("h6")) formats.push("h6"); + if (this.inTags("address")) formats.push("address"); + if (this.inTags("pre")) formats.push("pre"); + if (formats.length > 0 || this.inTags('p') || this.inTags('div')) { + formats.push("p"); // If the formats are shown, always have a paragraph.. + this.tags.push("p"); + styles.items.push('Format'); + } + + var ret = { + toolbar: toolbar + }; + + if (this.field.font !== undefined) { + this.tags.push('span'); + + /** + * Help set specified values for property. + * + * @private + * @param {Array} values list + * @param {string} prop Property + * @param {string} [defProp] Default property name + */ + var setValues = function (values, prop, defProp) { + ret[prop] = ''; + for (var i = 0; i < values.length; i++) { + var val = values[i]; + if (val.label && val.css) { + // Add label and CSS + ret[prop] += val.label + '/' + val.css + ';'; + + // Check if default value + if (defProp && val.default) { + ret[defProp] = val.label; + } + } + } + }; + + /** + * @private + * @param {Array} values + * @returns {string} + */ + var getColors = function (values) { + var colors = ''; + for (var i = 0; i < values.length; i++) { + var val = values[i]; + if (val.label && val.css) { + var css = val.css.match(/^#?([a-f0-9]{3}[a-f0-9]{3}?)$/i); + if (!css) { + continue; + } + + // Add label and CSS + if (colors) { + colors += ','; + } + colors += val.label + '/' + css[1]; + } + } + return colors; + }; + + if (this.field.font.family) { + // Font family chooser + styles.items.push('Font'); + + if (this.field.font.family instanceof Array) { + // Use specified families + setValues(this.field.font.family, 'font_names', 'font_defaultLabel'); + } + } + + if (this.field.font.size) { + // Font size chooser + styles.items.push('FontSize'); + + ret.fontSize_sizes = ''; + if (this.field.font.size instanceof Array) { + // Use specified sizes + setValues(this.field.font.size, 'fontSize_sizes', 'fontSize_defaultLabel'); + } + else { + ret.fontSize_defaultLabel = '100%'; + + // Standard font size that is used. (= 100%) + var defaultFont = 16; + + // Standard font sizes that is available. + var defaultAvailable = [8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72]; + for (var i = 0; i < defaultAvailable.length; i++) { + // Calculate percentage of standard font size. This enables scaling + // in content types without rounding errors across browsers. + var em = defaultAvailable[i] / 16; + ret.fontSize_sizes += (em * 100) + '%/' + em + 'em;'; + } + + } + + } + + if (this.field.font.color) { + // Text color chooser + colors.items.push('TextColor'); + + if (this.field.font.color instanceof Array) { + ret.colorButton_colors = getColors(this.field.font.color); + ret.colorButton_enableMore = false; + } + } + + if (this.field.font.background) { + // Text background color chooser + colors.items.push('BGColor'); + + if (this.field.font.background instanceof Array) { + ret.colorButton_colors = getColors(this.field.font.color); + ret.colorButton_enableMore = false; + } + } + } + + // Add the text styling options + if (styles.items.length) { + toolbar.push(styles); + } + if (colors.items.length) { + toolbar.push(colors); + } + + // Set format_tags if not empty. CKeditor does not like empty format_tags. + if (formats.length) { + ret.format_tags = formats.join(';'); + } + + // Enable selection of enterMode in module semantics. + if (this.field.enterMode === 'p' || formats.length > 0) { + this.tags.push('p'); + ret.enterMode = CKEDITOR.ENTER_P; + } else { + // Default to DIV, not allowing BR at all. + this.tags.push('div'); + ret.enterMode = CKEDITOR.ENTER_DIV; + } + + return ret; +}; + +/** + * Append field to wrapper. + * + * @param {type} $wrapper + * @returns {undefined} + */ +ns.Html.prototype.appendTo = function ($wrapper) { + var that = this; + + this.$item = ns.$(ns.createFieldMarkup(this.field, this.createHtml())).appendTo($wrapper); + + this.$input = this.$item.children('.ckeditor'); + this.$errors = this.$item.children('.h5p-errors'); + + var ckConfig = { + extraPlugins: "", + startupFocus: true, + enterMode: CKEDITOR.ENTER_DIV, + allowedContent: true, // Disables the ckeditor content filter, might consider using it later... Must make sure it doesn't remove math... + protectedSource: [] + }; + ns.$.extend(ckConfig, this.createToolbar()); + + // Look for additions in HtmlAddons + if (ns.HtmlAddons) { + for (var tag in ns.HtmlAddons) { + if (that.inTags(tag)) { + for (var provider in ns.HtmlAddons[tag]) { + ns.HtmlAddons[tag][provider](ckConfig, that.tags); + } + } + } + } + + this.$item.children('.ckeditor').focus(function () { + + // Blur is not fired on destroy. Therefore we need to keep track of it! + var blurFired = false; + + // Remove placeholder + that.$placeholder = that.$item.find('.h5peditor-ckeditor-placeholder').detach(); + + if (ns.Html.first) { + CKEDITOR.basePath = ns.basePath + '/ckeditor/'; + } + + if (ns.Html.current === that) { + return; + } + // Remove existing CK instance. + ns.Html.removeWysiwyg(); + + ns.Html.current = that; + ckConfig.width = this.offsetWidth - 8; // Avoid miscalculations + that.ckeditor = CKEDITOR.replace(this, ckConfig); + + that.ckeditor.on('focus', function () { + blurFired = false; + }); + + that.ckeditor.once('destroy', function () { + + // In some cases, the blur event is not fired. Need to be sure it is, so that + // validation and saving is done + if (!blurFired) { + blur(); + } + + // Display placeholder if: + // -- The value held by the field is empty AND + // -- The value shown in the UI is empty AND + // -- A placeholder is defined + var value = that.ckeditor !== undefined ? that.ckeditor.getData() : that.$input.html(); + if (that.$placeholder.length !== 0 && (value === undefined || value.length === 0) && (that.value === undefined || that.value.length === 0)) { + that.$placeholder.appendTo(that.$item.find('.ckeditor')); + } + }); + + var blur = function () { + blurFired = true; + // Do not validate if the field has been hidden. + if (that.$item.is(':visible')) { + that.validate(); + } + }; + + that.ckeditor.on('blur', blur); + + // Add events to ckeditor. It is beeing done here since we know it exists + // at this point... Use case from commit message: "Make the default + // linkTargetType blank for ckeditor" - STGW + if (ns.Html.first) { + CKEDITOR.on('dialogDefinition', function(e) { + // Take the dialog name and its definition from the event data. + var dialogName = e.data.name; + var dialogDefinition = e.data.definition; + + // Check if the definition is from the dialog window you are interested in (the "Link" dialog window). + if (dialogName === 'link') { + // Get a reference to the "Link Info" tab. + var targetTab = dialogDefinition.getContents('target'); + + // Set the default value for the URL field. + var urlField = targetTab.get('linkTargetType'); + urlField['default'] = '_blank'; + } + + // Override show event handler + var onShow = dialogDefinition.onShow; + dialogDefinition.onShow = function () { + if (onShow !== undefined) { + onShow.apply(this, arguments); + } + + // Grab current item + var $item = ns.Html.current.$item; + + // Position dialog above text field + var itemPos = $item.offset(); + var itemWidth = $item.width(); + var itemHeight = $item.height(); + var dialogSize = this.getSize(); + + var x = itemPos.left + (itemWidth / 2) - (dialogSize.width / 2); + var y = itemPos.top + (itemHeight / 2) - (dialogSize.height / 2); + + this.move(x, y, true); + }; + }); + ns.Html.first = false; + } + }); +}; + +/** + * Create HTML for the HTML field. + */ +ns.Html.prototype.createHtml = function () { + var html = '<div class="ckeditor" tabindex="0" contenteditable="true">'; + + if (this.value !== undefined) { + html += this.value; + } + else if (this.field.placeholder !== undefined) { + html += '<span class="h5peditor-ckeditor-placeholder">' + this.field.placeholder + '</span>'; + } + + html += '</div>'; + + return html; +}; + +/** + * Validate the current text field. + */ +ns.Html.prototype.validate = function () { + var that = this; + + if (that.$errors.children().length) { + that.$errors.empty(); + this.$input.addClass('error'); + } + + // Get contents from editor + var value = this.ckeditor !== undefined ? this.ckeditor.getData() : this.$input.html(); + + // Remove placeholder text if any: + value = value.replace(/<span class="h5peditor-ckeditor-placeholder">.*<\/span>/, ''); + + var $value = ns.$('<div>' + value + '</div>'); + var textValue = $value.text(); + + // Check if we have any text at all. + if (!this.field.optional && !textValue.length) { + // We can accept empty text, if there's an image instead. + if (! (this.inTags("img") && $value.find('img').length > 0)) { + this.$errors.append(ns.createError(ns.t('core', 'requiredProperty', {':property': ns.t('core', 'textField')}))); + } + } + + // Verify HTML tags. Removes tags not in allowed tags. Will replace with + // the tag's content. So if we get an unallowed container, the contents + // will remain, without the container. + $value.find('*').each(function () { + if (! that.inTags(this.tagName)) { + ns.$(this).replaceWith(ns.$(this).contents()); + } + }); + value = $value.html(); + + // Display errors and bail if set. + if (that.$errors.children().length) { + return false; + } else { + this.$input.removeClass('error'); + } + + this.value = value; + this.setValue(this.field, value); + this.$input.change(); // Trigger change event. + + return value; +}; + +/** + * Destroy H5PEditor existing CK instance. If it exists. + */ +ns.Html.removeWysiwyg = function () { + if (ns.Html.current !== undefined) { + try { + ns.Html.current.ckeditor.destroy(); + } + catch (e) { + // No-op, just stop error from propagating. This usually occurs if + // the CKEditor DOM has been removed together with other DOM data. + } + ns.Html.current = undefined; + } +}; + +/** + * Remove this item. + */ +ns.Html.prototype.remove = function () { + this.$item.remove(); +}; + +ns.widgets.html = ns.Html; diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-image-popup.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-image-popup.js new file mode 100755 index 0000000000..36b5666cec --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-image-popup.js @@ -0,0 +1,362 @@ +/*global H5PEditor, H5P, ns, Darkroom*/ +H5PEditor.ImageEditingPopup = (function ($, EventDispatcher) { + var instanceCounter = 0; + var scriptsLoaded = false; + + /** + * Popup for editing images + * + * @param {number} [ratio] Ratio that cropping must keep + * @constructor + */ + function ImageEditingPopup(ratio) { + EventDispatcher.call(this); + var self = this; + var uniqueId = instanceCounter; + var isShowing = false; + var isReset = false; + var topOffset = 0; + var maxWidth; + var maxHeight; + + // Create elements + var background = document.createElement('div'); + background.className = 'h5p-editing-image-popup-background hidden'; + + var popup = document.createElement('div'); + popup.className = 'h5p-editing-image-popup'; + background.appendChild(popup); + + var header = document.createElement('div'); + header.className = 'h5p-editing-image-header'; + popup.appendChild(header); + + var headerTitle = document.createElement('div'); + headerTitle.className = 'h5p-editing-image-header-title'; + headerTitle.textContent = 'Edit Image!'; + header.appendChild(headerTitle); + + var headerButtons = document.createElement('div'); + headerButtons.className = 'h5p-editing-image-header-buttons'; + header.appendChild(headerButtons); + + var editingContainer = document.createElement('div'); + editingContainer.className = 'h5p-editing-image-editing-container'; + popup.appendChild(editingContainer); + + var imageLoading = document.createElement('div'); + imageLoading.className = 'h5p-editing-image-loading'; + imageLoading.textContent = ns.t('core', 'loadingImageEditor'); + popup.appendChild(imageLoading); + + // Create editing image + var editingImage = new Image(); + editingImage.className = 'h5p-editing-image hidden'; + editingImage.id = 'h5p-editing-image-' + uniqueId; + editingContainer.appendChild(editingImage); + + // Close popup on background click + background.addEventListener('click', function () { + this.hide(); + }.bind(this)); + + // Prevent closing popup + popup.addEventListener('click', function (e) { + e.stopPropagation(); + }); + + // Make sure each ImageEditingPopup instance has a unique ID + instanceCounter += 1; + + /** + * Create header button + * + * @param {string} coreString Must be specified in core translations + * @param {string} className Unique button identifier that will be added to classname + * @param {function} clickEvent OnClick function + */ + var createButton = function (coreString, className, clickEvent) { + var button = document.createElement('button'); + button.textContent = ns.t('core', coreString); + button.className = className; + button.addEventListener('click', clickEvent); + headerButtons.appendChild(button); + }; + + /** + * Set max width and height for image editing tool + */ + var setDarkroomDimensions = function () { + + // Set max dimensions + var dims = ImageEditingPopup.staticDimensions; + maxWidth = H5P.$body.get(0).offsetWidth - dims.backgroundPaddingWidth - + dims.darkroomPadding; + + // Only use 65% of screen height + var maxScreenHeight = screen.height * dims.maxScreenHeightPercentage; + + // Calculate editor max height + var editorHeight = H5P.$body.get(0).offsetHeight - + dims.backgroundPaddingHeight - dims.popupHeaderHeight - + dims.darkroomToolbarHeight - dims.darkroomPadding; + + // Use smallest of screen height and editor height, + // we don't want to overflow editor or screen + maxHeight = maxScreenHeight < editorHeight ? maxScreenHeight : editorHeight; + }; + + /** + * Create image editing tool from image. + */ + var createDarkroom = function () { + window.requestAnimationFrame(function () { + self.darkroom = new Darkroom('#h5p-editing-image-' + uniqueId, { + initialize: function () { + // Reset transformations + this.transformations = []; + + H5P.$body.get(0).classList.add('h5p-editor-image-popup'); + background.classList.remove('hidden'); + imageLoading.classList.add('hidden'); + self.trigger('initialized'); + }, + maxWidth: maxWidth, + maxHeight: maxHeight, + plugins: { + crop: { + ratio: ratio || null + }, + save : false + } + }); + }); + }; + + /** + * Load a script dynamically + * + * @param {string} path Path to script + * @param {function} [callback] + */ + var loadScript = function (path, callback) { + $.ajax({ + url: path, + dataType: 'script', + success: function () { + if (callback) { + callback(); + } + }, + async: true + }); + }; + + /** + * Load scripts dynamically + */ + var loadScripts = function () { + loadScript(H5PEditor.basePath + 'libs/fabric.js', function () { + loadScript(H5PEditor.basePath + 'libs/darkroom.js', function () { + createDarkroom(); + scriptsLoaded = true; + }); + }); + }; + + /** + * Grab canvas data and pass data to listeners. + */ + var saveImage = function () { + + var isCropped = self.darkroom.plugins.crop.hasFocus(); + var canvas = self.darkroom.canvas.getElement(); + + var convertData = function () { + var newImage = self.darkroom.canvas.toDataURL(); + self.trigger('savedImage', newImage); + canvas.removeEventListener('crop:update', convertData, false); + }; + + // Check if image has changed + if (self.darkroom.transformations.length || isReset || isCropped) { + + if (isCropped) { + //self.darkroom.plugins.crop.okButton.element.click(); + self.darkroom.plugins.crop.cropCurrentZone(); + + canvas.addEventListener('crop:update', convertData, false); + } else { + convertData(); + } + } + + isReset = false; + }; + + /** + * Adjust popup offset. + * Make sure it is centered on top of offset. + * + * @param {Object} [offset] Offset that popup should center on. + * @param {number} [offset.top] Offset to top. + */ + this.adjustPopupOffset = function (offset) { + if (offset) { + topOffset = offset.top; + } + + // Only use 65% of screen height + var maxScreenHeight = screen.height * 0.65; + + // Calculate editor max height + var dims = ImageEditingPopup.staticDimensions; + var backgroundHeight = H5P.$body.get(0).offsetHeight - dims.backgroundPaddingHeight; + var popupHeightNoImage = dims.darkroomToolbarHeight + dims.popupHeaderHeight + + dims.darkroomPadding; + var editorHeight = backgroundHeight - popupHeightNoImage; + + // Available editor height + var availableHeight = maxScreenHeight < editorHeight ? maxScreenHeight : editorHeight; + + // Check if image is smaller than available height + var actualImageHeight; + if (editingImage.naturalHeight < availableHeight) { + actualImageHeight = editingImage.naturalHeight; + } + else { + actualImageHeight = availableHeight; + + // We must check ratio as well + var imageRatio = editingImage.naturalHeight / editingImage.naturalWidth; + var maxActualImageHeight = maxWidth * imageRatio; + if (maxActualImageHeight < actualImageHeight) { + actualImageHeight = maxActualImageHeight; + } + } + + var popupHeightWImage = actualImageHeight + popupHeightNoImage; + var offsetCentered = topOffset - (popupHeightWImage / 2) - + (dims.backgroundPaddingHeight / 2); + + // Min offset is 0 + offsetCentered = offsetCentered > 0 ? offsetCentered : 0; + + // Check that popup does not overflow editor + if (popupHeightWImage + offsetCentered > backgroundHeight) { + var newOffset = backgroundHeight - popupHeightWImage; + offsetCentered = newOffset < 0 ? 0 : newOffset; + } + + popup.style.top = offsetCentered + 'px'; + }; + + /** + * Set new image in editing tool + * + * @param {string} imgSrc Source of new image + */ + this.setImage = function (imgSrc) { + // Set new image + var darkroom = popup.querySelector('.darkroom-container'); + if (darkroom) { + darkroom.parentNode.removeChild(darkroom); + } + + editingImage.src = imgSrc; + imageLoading.classList.remove('hidden'); + editingImage.classList.add('hidden'); + editingContainer.appendChild(editingImage); + + createDarkroom(); + }; + + /** + * Show popup + * + * @param {Object} [offset] Offset that popup should center on. + * @param {string} [imageSrc] Source of image that will be edited + */ + this.show = function (offset, imageSrc) { + H5P.$body.get(0).appendChild(background); + setDarkroomDimensions(); + if (imageSrc) { + + // Load image editing scripts dynamically + if (!scriptsLoaded) { + editingImage.src = imageSrc; + loadScripts(); + } + else { + self.setImage(imageSrc); + } + + if (offset) { + var imageLoaded = function () { + this.adjustPopupOffset(offset); + editingImage.removeEventListener('load', imageLoaded); + }.bind(this); + + editingImage.addEventListener('load', imageLoaded); + } + } + else { + H5P.$body.get(0).classList.add('h5p-editor-image-popup'); + background.classList.remove('hidden'); + self.trigger('initialized'); + } + + isShowing = true; + }; + + /** + * Hide popup + */ + this.hide = function () { + isShowing = false; + H5P.$body.get(0).classList.remove('h5p-editor-image-popup'); + background.classList.add('hidden'); + H5P.$body.get(0).removeChild(background); + }; + + /** + * Toggle popup visibility + */ + this.toggle = function () { + if (isShowing) { + this.hide(); + } else { + this.show(); + } + }; + + // Create header buttons + createButton('resetToOriginalLabel', 'h5p-editing-image-reset-button h5p-remove', function () { + self.trigger('resetImage'); + isReset = true; + }); + createButton('cancelLabel', 'h5p-editing-image-cancel-button', function () { + self.trigger('canceled'); + self.hide(); + }); + createButton('saveLabel', 'h5p-editing-image-save-button h5p-done', function () { + saveImage(); + self.hide(); + }); + } + + ImageEditingPopup.prototype = Object.create(EventDispatcher.prototype); + ImageEditingPopup.prototype.constructor = ImageEditingPopup; + + ImageEditingPopup.staticDimensions = { + backgroundPaddingWidth: 32, + backgroundPaddingHeight: 96, + darkroomPadding: 64, + darkroomToolbarHeight: 40, + maxScreenHeightPercentage: 0.65, + popupHeaderHeight: 59 + }; + + return ImageEditingPopup; + +}(H5P.jQuery, H5P.EventDispatcher)); diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-image.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-image.js new file mode 100755 index 0000000000..b07a32452d --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-image.js @@ -0,0 +1,307 @@ +/*global H5P*/ +var H5PEditor = H5PEditor || {}; +var ns = H5PEditor; + +/** + * Adds an image upload field with image editing tool to the form. + * + * @param {Object} parent Parent widget of this widget + * @param {Object} field Semantic fields + * @param {Object} params Existing image parameters + * @param {function} setValue Function for updating parameters + * @returns {ns.widgets.image} + */ +ns.widgets.image = function (parent, field, params, setValue) { + var self = this; + + // Initialize inheritance + ns.File.call(self, parent, field, params, setValue); + + this.parent = parent; + this.field = field; + this.params = params; + this.setValue = setValue; + this.library = parent.library + '/' + field.name; + + if (params !== undefined) { + this.copyright = params.copyright; + } + + // Keep track of editing image + this.isEditing = false; + + // Keep track of type of image that is being uploaded + this.isOriginalImage = false; + + this.changes = []; + this.passReadies = true; + parent.ready(function () { + self.passReadies = false; + }); + + this.confirmationDialog = new H5P.ConfirmationDialog({ + headerText: H5PEditor.t('core', 'removeImage'), + bodyText: H5PEditor.t('core', 'confirmImageRemoval') + }); + + this.confirmationDialog.on('confirmed', function () { + self.removeImage(); + }); + + // When uploading starts + self.on('upload', function () { + // Hide edit image button + self.$editImage.addClass('hidden'); + + if (!self.isUploadingData()) { + // Uploading new original image + self.isOriginalImage = true; + } + }); + + // When a new file has been uploaded + self.on('fileUploaded', function (event) { + // Uploaded new original image + if (self.isOriginalImage) { + self.isOriginalImage = false; + delete self.params.originalImage; + } + + // Store width and height + self.params.width = event.data.width; + self.params.height = event.data.height; + + // Show edit image button + self.$editImage.removeClass('hidden'); + self.isEditing = false; + }); +}; + +ns.widgets.image.prototype = Object.create(ns.File.prototype); +ns.widgets.image.prototype.constructor = ns.widgets.image; + +/** + * Append field to the given wrapper. + * + * @param {jQuery} $wrapper + */ +ns.widgets.image.prototype.appendTo = function ($wrapper) { + var self = this; + + var htmlString = '<div class="file"></div>' + + '<div class="h5p-editor-image-buttons">' + + '<button class="h5peditor-button-textual h5p-editing-image-button">' + ns.t('core', 'editImage') + '</button>' + + '<button class="h5peditor-button-textual h5p-copyright-button">' + ns.t('core', 'editCopyright') + '</button>' + + '</div>' + + '<div class="h5p-editor-dialog">' + + '<a href="#" class="h5p-close" title="' + ns.t('core', 'close') + '"></a>' + + '</div>'; + + + var html = ns.createFieldMarkup(this.field, htmlString); + + var $container = ns.$(html).appendTo($wrapper); + this.$editImage = $container.find('.h5p-editing-image-button'); + this.$copyrightButton = $container.find('.h5p-copyright-button'); + this.$file = $container.find('.file'); + this.$errors = $container.find('.h5p-errors'); + this.addFile(); + + var $dialog = $container.find('.h5p-editor-dialog'); + $container.find('.h5p-copyright-button').add($dialog.find('.h5p-close')).click(function () { + $dialog.toggleClass('h5p-open'); + return false; + }); + + var editImagePopup = new H5PEditor.ImageEditingPopup(this.field.ratio); + editImagePopup.on('savedImage', function (e) { + + // Not editing any longer + self.isEditing = false; + + // No longer an original image + self.isOriginalImage = false; + + // Set current source as original image, if no original image + if (!self.params.originalImage) { + self.params.originalImage = { + path: self.params.path, + mime: self.params.mime, + height: self.params.height, + width: self.params.width + }; + } + + // Upload new image + self.uploadData(e.data); + }); + + editImagePopup.on('resetImage', function () { + var imagePath = self.params.originalImage ? self.params.originalImage.path + : self.params.path; + var imageSrc = H5P.getPath(imagePath, H5PEditor.contentId); + editImagePopup.setImage(imageSrc); + }); + + editImagePopup.on('canceled', function () { + self.isEditing = false; + }); + + editImagePopup.on('initialized', function () { + // Remove throbber from image + self.$editImage.removeClass('loading'); + }); + + $container.find('.h5p-editing-image-button').click(function () { + if (self.params && self.params.path) { + var imageSrc; + if (!self.isEditing) { + imageSrc = H5P.getPath(self.params.path, H5PEditor.contentId); + self.isEditing = true; + } + self.$editImage.toggleClass('loading'); + + // Add throbber to image + editImagePopup.show(ns.$(this).offset(), imageSrc); + } + }); + + var group = new ns.widgets.group(self, ns.copyrightSemantics, self.copyright, + function (field, value) { + if (self.params !== undefined) { + self.params.copyright = value; + } + self.copyright = value; + }); + group.appendTo($dialog); + group.expand(); + group.$group.find('.title').remove(); + this.children = [group]; +}; + + +/** + * Sync copyright. + */ +ns.widgets.image.prototype.setCopyright = function (value) { + this.copyright = this.params.copyright = value; +}; + + +/** + * Creates thumbnail HTML and actions. + * + * @returns {boolean} True if file was added, false if file was removed + */ +ns.widgets.image.prototype.addFile = function () { + var that = this; + + if (this.params === undefined) { + + // No image look + this.$file + .html( + '<a href="#" class="add" title="' + ns.t('core', 'addFile') + '">' + + '<div class="h5peditor-field-file-upload-text">' + ns.t('core', 'add') + '</div>' + + '</a>' + ) + .children('.add') + .click(function () { + that.openFileSelector(); + return false; + }); + + // Remove edit image button + this.$editImage.addClass('hidden'); + this.$copyrightButton.addClass('hidden'); + this.isEditing = false; + + return false; + } + + var source = H5P.getPath(this.params.path, H5PEditor.contentId); + var thumbnail = {}; + thumbnail.path = source; + thumbnail.height = 100; + if (this.params.width !== undefined) { + thumbnail.width = thumbnail.height * (this.params.width / this.params.height); + } + + var thumbnailWidth = thumbnail.width === undefined ? '' : ' width="' + thumbnail.width + '"'; + var altText = (this.field.label === undefined ? '' : this.field.label); + var fileHtmlString = + '<a href="#" title="' + ns.t('core', 'changeFile') + '" class="thumbnail">' + + '<img ' + thumbnailWidth + 'height="' + thumbnail.height + '" alt="' + altText + '"/>' + + '</a>' + + '<a href="#" class="remove" title="' + ns.t('core', 'removeFile') + '"></a>'; + + this.$file.html(fileHtmlString) + .children(':eq(0)') + .click(function () { + that.openFileSelector(); + return false; + }) + .children('img') + .attr('src', thumbnail.path) + .end() + .next() + .click(function () { + that.confirmRemovalDialog.show(that.$file.offset().top); + return false; + }); + + // Uploading original image + that.$editImage.removeClass('hidden'); + that.$copyrightButton.removeClass('hidden'); + + // Notify listeners that image was changed to params + that.trigger('changedImage', this.params); + + return true; +}; + +/** + * Remove image + */ +ns.widgets.image.prototype.removeImage = function () { + + // Notify listeners that we removed image with params + this.trigger('removedImage', this.params); + + delete this.params; + this.setValue(this.field); + this.addFile(); + + for (var i = 0; i < this.changes.length; i++) { + this.changes[i](); + } +}; + +/** + * Validate this item + */ +ns.widgets.image.prototype.validate = function () { + return true; +}; + +/** + * Remove this item. + */ +ns.widgets.image.prototype.remove = function () { + // TODO: Check what happens when removed during upload. + this.$file.parent().remove(); +}; + +/** + * Collect functions to execute once the tree is complete. + * + * @param {function} ready + */ +ns.widgets.image.prototype.ready = function (ready) { + if (this.passReadies) { + this.parent.ready(ready); + } + else { + ready(); + } +}; diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-init.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-init.js new file mode 100755 index 0000000000..992703ee4e --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-init.js @@ -0,0 +1,72 @@ +//var H5PEditor = (H5PEditor || {}); +(function ($, ns) { + H5PEditor.init = function ($form, $type, $upload, $create, $editor, $library, $params) { + H5PEditor.$ = H5P.jQuery; + H5PEditor.basePath = H5PIntegration.editor.libraryUrl; + H5PEditor.fileIcon = H5PIntegration.editor.fileIcon; + H5PEditor.ajaxPath = H5PIntegration.editor.ajaxPath; + H5PEditor.filesPath = H5PIntegration.editor.filesPath; + + // Semantics describing what copyright information can be stored for media. + H5PEditor.copyrightSemantics = H5PIntegration.editor.copyrightSemantics; + + // Required styles and scripts for the editor + H5PEditor.assets = H5PIntegration.editor.assets; + + // Required for assets + H5PEditor.baseUrl = ''; + + if (H5PIntegration.editor.nodeVersionId !== undefined) { + H5PEditor.contentId = H5PIntegration.editor.nodeVersionId; + } + + var h5peditor; + $create.hide(); + var library = $library.val(); + + $type.change(function () { + if ($type.filter(':checked').val() === 'upload') { + $create.hide(); + $upload.show(); + } + else { + $upload.hide(); + if (h5peditor === undefined) { + h5peditor = new ns.Editor(library, $params.val(), $editor[0]); + } + $create.show(); + } + }); + + if ($type.filter(':checked').val() === 'upload') { + $type.change(); + } + else { + $type.filter('input[value="create"]').attr('checked', true).change(); + } + + $form.submit(function () { + if (h5peditor !== undefined) { + var params = h5peditor.getParams(); + if (params !== undefined) { + $library.val(h5peditor.getLibrary()); + $params.val(JSON.stringify(params)); + } + } + }); + }; + + H5PEditor.getAjaxUrl = function (action, parameters) { + var url = H5PIntegration.editor.ajaxPath + action; + + if (parameters !== undefined) { + for (var property in parameters) { + if (parameters.hasOwnProperty(property)) { + url += '&' + property + '=' + parameters[property]; + } + } + } + + return url; + }; +})(H5P.jQuery, H5PEditor); diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-library-list-cache.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-library-list-cache.js new file mode 100755 index 0000000000..3eea4e0235 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-library-list-cache.js @@ -0,0 +1,104 @@ +/** @namespace H5PEditor */ +var H5PEditor = H5PEditor || {}; + +/** + * The library list cache + * + * @type Object + */ +var llc = H5PEditor.LibraryListCache = { + libraryCache: {}, + librariesComingIn: {}, + librariesMissing: {}, + que: [] +}; + +/** + * Get data for a list of libraries + * + * @param {Array} libraries - list of libraries to load info for (uber names) + * @param {Function} handler - Callback when list of libraries is loaded + * @param {Function} thisArg - Context for the callback function + */ +llc.getLibraries = function(libraries, handler, thisArg) { + var cachedLibraries = []; + var status = 'hasAll'; + for (var i = 0; i < libraries.length; i++) { + if (libraries[i] in llc.libraryCache) { + // Libraries that are missing on the server are set to null... + if (llc.libraryCache[libraries[i]] !== null) { + cachedLibraries.push(llc.libraryCache[libraries[i]]); + } + } + else if (libraries[i] in llc.librariesComingIn) { + if (status === 'hasAll') { + status = 'onTheWay'; + } + } + else { + status = 'requestThem'; + llc.librariesComingIn[libraries[i]] = true; + } + } + switch (status) { + case 'hasAll': + handler.call(thisArg, cachedLibraries); + break; + case 'onTheWay': + llc.que.push({libraries: libraries, handler: handler, thisArg: thisArg}); + break; + case 'requestThem': + var ajaxParams = { + type: "POST", + url: H5PEditor.getAjaxUrl('libraries'), + success: function(data) { + llc.setLibraries(data, libraries); + handler.call(thisArg, data); + llc.runQue(); + }, + data: { + 'libraries': libraries + }, + dataType: "json" + }; + H5PEditor.$.ajax(ajaxParams); + break; + } +}; + +/** + * Call all qued handlers + */ +llc.runQue = function() { + var l = llc.que.length; + for (var i = 0; i < l; i++) { + var handlerObject = llc.que.shift(); + llc.getLibraries(handlerObject.libraries, handlerObject.handler, handlerObject.thisArg); + } +}; + +/** + * We've got new libraries from the server, save them + * + * @param {Array} libraries - Libraries with info from server + * @param {Array} requestedLibraries - List of what libraries we requested + */ +llc.setLibraries = function(libraries, requestedLibraries) { + var reqLibraries = requestedLibraries.slice(); + for (var i = 0; i < libraries.length; i++) { + llc.libraryCache[libraries[i].uberName] = libraries[i]; + if (libraries[i].uberName in llc.librariesComingIn) { + delete llc.librariesComingIn[libraries[i].uberName]; + } + var index = reqLibraries.indexOf(libraries[i].uberName); + if (index > -1) { + reqLibraries.splice(index, 1); + } + } + for (var i = 0; i < reqLibraries.length; i++) { + llc.libraryCache[reqLibraries[i]] = null; + if (reqLibraries[i] in llc.librariesComingIn) { + delete llc.librariesComingIn[libraries[i]]; + } + } +}; diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-library-selector.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-library-selector.js new file mode 100755 index 0000000000..bd5f8613aa --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-library-selector.js @@ -0,0 +1,182 @@ +var H5PEditor = H5PEditor || {}; +var ns = H5PEditor; + +/** + * Construct a library selector. + * + * @param {Array} libraries + * @param {String} defaultLibrary + * @param {Object} defaultParams + * @returns {ns.LibrarySelector} + */ +ns.LibrarySelector = function (libraries, defaultLibrary, defaultParams) { + var that = this; + var firstTime = true; + var options = '<option value="-">-</option>'; + + try { + this.defaultParams = JSON.parse(defaultParams); + if (!(this.defaultParams instanceof Object)) { + throw true; + } + } + catch (event) { + // Content parameters are broken. Reset. (This allows for broken content to be reused without deleting it) + this.defaultParams = {}; + // TODO: Inform the user? + } + + this.defaultLibrary = this.currentLibrary = defaultLibrary; + this.defaultLibraryParameterized = defaultLibrary ? defaultLibrary.replace('.', '-').toLowerCase() : undefined; + + for (var i = 0; i < libraries.length; i++) { + var library = libraries[i]; + var libraryName = ns.libraryToString(library); + + // Never deny editing existing content + // For new content deny old or restricted libs. + if (this.defaultLibrary === libraryName || + ((library.restricted === undefined || !library.restricted) && + library.isOld !== true + ) + ) { + options += '<option value="' + libraryName + '"'; + if (libraryName === defaultLibrary || library.name === this.defaultLibraryParameterized) { + options += ' selected="selected"'; + } + if (library.tutorialUrl !== undefined) { + options += ' data-tutorial-url="' + library.tutorialUrl + '"'; + } + options += '>' + library.title + (library.isOld===true ? ' (deprecated)' : '') + '</option>'; + } + } + + //Add tutorial link: + this.$tutorialUrl = ns.$('<a class="h5p-tutorial-url" target="_blank">' + ns.t('core', 'tutorialAvailable') + '</a>').hide(); + + // Create confirm dialog + var changeLibraryDialog = new H5P.ConfirmationDialog({ + headerText: H5PEditor.t('core', 'changeLibrary'), + dialogText: H5PEditor.t('core', 'confirmChangeLibrary') + }).appendTo(document.body); + + // Change library on confirmed + changeLibraryDialog.on('confirmed', function () { + changeLibraryToSelector(); + }); + + // Revert selector on cancel + changeLibraryDialog.on('canceled', function () { + that.$selector.val(that.currentLibrary); + }); + + // Change library to selected + var changeLibraryToSelector = function () { + var library = that.$selector.val(); + that.loadSemantics(library); + that.currentLibrary = library; + + if (library !== '-') { + firstTime = false; + } + + var tutorialUrl = that.$selector.find(':selected').data('tutorial-url'); + that.$tutorialUrl.attr('href', tutorialUrl).toggle(tutorialUrl !== undefined && tutorialUrl !== null && tutorialUrl.length !== 0); + }; + + this.$selector = ns.$('<select name="h5peditor-library" title="' + ns.t('core', 'selectLibrary') + '">' + options + '</select>').change(function () { + // Use timeout to avoid bug in Chrome >44, when confirm is used inside change event. + // Ref. https://code.google.com/p/chromium/issues/detail?id=525629 + setTimeout(function () { + if (!firstTime) { + changeLibraryDialog.show(that.$selector.offset().top); + } + else { + changeLibraryToSelector(); + } + }, 0); + }); +}; + +/** + * Append the selector html to the given container. + * + * @param {jQuery} $element + * @returns {undefined} + */ +ns.LibrarySelector.prototype.appendTo = function ($element) { + this.$parent = $element; + + this.$selector.appendTo($element); + this.$tutorialUrl.appendTo($element); + + $element.append('<div class="h5p-more-libraries">' + ns.t('core', 'moreLibraries') + '</div>'); +}; + +/** + * Display loading message and load library semantics. + * + * @param {String} library + * @returns {unresolved} + */ +ns.LibrarySelector.prototype.loadSemantics = function (library) { + var that = this; + + if (this.form !== undefined) { + // Remove old form. + this.form.remove(); + } + + if (library === '-') { + // No library chosen. + this.$parent.attr('class', 'h5peditor'); + return; + } + this.$parent.attr('class', 'h5peditor ' + library.split(' ')[0].toLowerCase().replace('.', '-') + '-editor'); + + // Display loading message + var $loading = ns.$('<div class="h5peditor-loading h5p-throbber">' + ns.t('core', 'loading') + '</div>').appendTo(this.$parent); + + this.$selector.attr('disabled', true); + + ns.loadLibrary(library, function (semantics) { + if (!semantics) { + that.form = ns.$('<div/>', { + 'class': 'h5p-errors', + text: H5PEditor.t('core', 'noSemantics'), + insertAfter: $loading + }); + } + else { + that.form = new ns.Form(); + that.form.replace($loading); + that.form.processSemantics(semantics, (library === that.defaultLibrary || library === that.defaultLibraryParameterized ? that.defaultParams : {})); + } + + that.$selector.attr('disabled', false); + $loading.remove(); + }); +}; + +/** + * Return params needed to start library. + */ +ns.LibrarySelector.prototype.getParams = function () { + if (this.form === undefined) { + return; + } + + // Only return if all fields has validated. + var valid = true; + + if (this.form.children !== undefined) { + for (var i = 0; i < this.form.children.length; i++) { + if (this.form.children[i].validate() === false) { + valid = false; + } + } + } + + //return valid ? this.form.params : false; + return this.form.params; // TODO: Switch to the line above when we are able to tell the user where the validation fails +}; diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-library.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-library.js new file mode 100755 index 0000000000..2e6f912937 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-library.js @@ -0,0 +1,323 @@ +var H5PEditor = (H5PEditor || {}); +var ns = H5PEditor; + +/** + * Callback for setting new parameters. + * + * @callback H5PEditor.newParams + * @param {Object} field Current field details. + * @param {Object} params New parameters. + */ + +/** + * Create a field where one can select and include another library to the form. + * + * @class H5PEditor.Library + * @extends H5P.EventDispatcher + * @param {Object} parent Parent field in editor. + * @param {Object} field Details for current field. + * @param {Object} params Default parameters. + * @param {newParams} setValue Callback for setting new parameters. + */ +ns.Library = function (parent, field, params, setValue) { + var self = this; + H5P.EventDispatcher.call(this); + if (params === undefined) { + this.params = { + params: {} + }; + // If you do a console log here it might show that this.params is + // something else than what we set it to. One of life's big mysteries... + setValue(field, this.params); + } else { + this.params = params; + } + this.field = field; + this.parent = parent; + this.changes = []; + this.optionsLoaded = false; + this.library = parent.library + '/' + field.name; + + this.passReadies = true; + parent.ready(function () { + self.passReadies = false; + }); + + // Confirmation dialog for changing library + this.confirmChangeLibrary = new H5P.ConfirmationDialog({ + headerText: H5PEditor.t('core', 'changeLibrary'), + dialogText: H5PEditor.t('core', 'confirmChangeLibrary') + }).appendTo(document.body); + + // Load library on confirmation + this.confirmChangeLibrary.on('confirmed', function () { + self.loadLibrary(self.$select.val()); + }); + + // Revert to current library on cancel + this.confirmChangeLibrary.on('canceled', function () { + self.$select.val(self.currentLibrary); + }); +}; + +ns.Library.prototype = Object.create(H5P.EventDispatcher.prototype); +ns.Library.prototype.constructor = ns.Library; + +/** + * Append the library selector to the form. + * + * @alias H5PEditor.Library#appendTo + * @param {H5P.jQuery} $wrapper + */ +ns.Library.prototype.appendTo = function ($wrapper) { + var that = this; + var html = ''; + if (this.field.label !== 0) { + html = '<label class="h5peditor-label' + (this.field.optional ? '' : ' h5peditor-required') + '">' + (this.field.label === undefined ? this.field.name : this.field.label) + '</label>'; + } + + html += ns.createDescription(this.field.description); + html = '<div class="field ' + this.field.type + '">' + html + '<select>' + ns.createOption('-', 'Loading...') + '</select>'; + + // TODO: Remove errors, it is deprecated + html += '<div class="errors h5p-errors"></div><div class="libwrap"></div></div>'; + + this.$myField = ns.$(html).appendTo($wrapper); + this.$select = this.$myField.children('select'); + this.$libraryWrapper = this.$myField.children('.libwrap'); + ns.LibraryListCache.getLibraries(that.field.options, that.librariesLoaded, that); +}; + +/** + * Handler for when the library list has been loaded + * + * @alias H5PEditor.Library#librariesLoaded + * @param {Array} libList + */ +ns.Library.prototype.librariesLoaded = function (libList) { + this.libraries = libList; + var self = this; + var options = ns.createOption('-', '-'); + for (var i = 0; i < self.libraries.length; i++) { + var library = self.libraries[i]; + if (library.uberName === self.params.library || + (library.title !== undefined && (library.restricted === undefined || !library.restricted))) { + options += ns.createOption(library.uberName, library.title, library.uberName === self.params.library); + } + } + + self.$select.html(options).change(function () { + // Use timeout to avoid bug in Chrome >44, when confirm is used inside change event. + // Ref. https://code.google.com/p/chromium/issues/detail?id=525629 + setTimeout(function () { + + // Check if library is selected + if (self.params.library) { + + // Confirm changing library + self.confirmChangeLibrary.show(self.$select.offset().top); + } else { + + // Load new library + self.loadLibrary(self.$select.val()); + } + }, 0); + }); + + if (self.libraries.length === 1) { + self.$select.hide(); + self.$myField.children('.h5peditor-label').hide(); + self.loadLibrary(self.$select.children(':last').val(), true); + } + + if (self.runChangeCallback === true) { + // In case a library has been selected programmatically trigger change events, e.g. a default library. + self.change(); + self.runChangeCallback = false; + } + // Load default library. + if (this.params.library !== undefined) { + self.loadLibrary(this.params.library, true); + } +}; + +/** + * Load the selected library. + * + * @alias H5PEditor.Library#loadLibrary + * @param {string} libraryName On the form machineName.majorVersion.minorVersion + * @param {boolean} [preserveParams] + */ +ns.Library.prototype.loadLibrary = function (libraryName, preserveParams) { + var that = this; + + this.removeChildren(); + + if (libraryName === '-') { + delete this.params.library; + delete this.params.params; + delete this.params.subContentId; + this.$libraryWrapper.attr('class', 'libwrap'); + return; + } + + this.$libraryWrapper.html(ns.t('core', 'loading')).attr('class', 'libwrap ' + libraryName.split(' ')[0].toLowerCase().replace('.', '-') + '-editor'); + + ns.loadLibrary(libraryName, function (semantics) { + that.currentLibrary = libraryName; + that.params.library = libraryName; + + if (preserveParams === undefined || !preserveParams) { + // Reset params + that.params.params = {}; + } + if (that.params.subContentId === undefined) { + that.params.subContentId = H5P.createUUID(); + } + + ns.processSemanticsChunk(semantics, that.params.params, that.$libraryWrapper.html(''), that); + + if (that.libraries !== undefined) { + that.change(); + } + else { + that.runChangeCallback = true; + } + }); +}; + +/** + * Add the given callback or run it. + * + * @alias H5PEditor.Library#change + * @param {Function} callback + */ +ns.Library.prototype.change = function (callback) { + if (callback !== undefined) { + // Add callback + this.changes.push(callback); + } + else { + // Find library + var library, i; + for (i = 0; i < this.libraries.length; i++) { + if (this.libraries[i].uberName === this.currentLibrary) { + library = this.libraries[i]; + break; + } + } + + // Run callbacks + for (i = 0; i < this.changes.length; i++) { + this.changes[i](library); + } + } +}; + +/** + * Validate this field and its children. + * + * @alias H5PEditor.Library#validate + * @returns {boolean} + */ +ns.Library.prototype.validate = function () { + var valid = true; + + if (this.children) { + for (var i = 0; i < this.children.length; i++) { + if (this.children[i].validate() === false) { + valid = false; + } + } + } + else if (this.libraries && this.libraries.length) { + valid = false; + } + + return (this.field.optional ? true : valid); +}; + +/** + * Collect functions to execute once the tree is complete. + * + * @alias H5PEditor.Library#ready + * @param {Function} ready + */ +ns.Library.prototype.ready = function (ready) { + if (this.passReadies) { + this.parent.ready(ready); + } + else { + this.readies.push(ready); + } +}; + +/** + * Custom remove children that supports common fields. + * + * * @alias H5PEditor.Library#removeChildren + */ +ns.Library.prototype.removeChildren = function () { + if (this.currentLibrary === '-' || this.children === undefined) { + return; + } + + var ancestor = ns.findAncestor(this.parent); + + for (var libraryPath in ancestor.commonFields) { + var library = libraryPath.split('/')[0]; + + if (library === this.currentLibrary) { + var remove = false; + + for (var fieldName in ancestor.commonFields[libraryPath]) { + var field = ancestor.commonFields[libraryPath][fieldName]; + if (field.parents.length === 1) { + field.instance.remove(); + remove = true; + } + + for (var i = 0; i < field.parents.length; i++) { + if (field.parents[i] === this) { + field.parents.splice(i, 1); + field.setValues.splice(i, 1); + } + } + } + + if (remove) { + delete ancestor.commonFields[libraryPath]; + } + } + } + ns.removeChildren(this.children); +}; + +/** + * Allows ancestors and widgets to do stuff with our children. + * + * @alias H5PEditor.Library#forEachChild + * @param {Function} task + */ +ns.Library.prototype.forEachChild = function (task) { + for (var i = 0; i < this.children.length; i++) { + if (task(this.children[i], i)) { + return; + } + } +}; + +/** + * Called when this item is being removed. + * + * @alias H5PEditor.Library#remove + */ +ns.Library.prototype.remove = function () { + this.removeChildren(); + if (this.$select !== undefined) { + this.$select.parent().remove(); + } +}; + +// Tell the editor what widget we are. +ns.widgets.library = ns.Library; diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-list-editor.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-list-editor.js new file mode 100755 index 0000000000..56652455c4 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-list-editor.js @@ -0,0 +1,393 @@ +/** @namespace H5PEditor */ +var H5PEditor = H5PEditor || {}; + +H5PEditor.ListEditor = (function ($) { + + /** + * Draws the list. + * + * @class + * @param {List} list + */ + function ListEditor(list) { + var self = this; + + var entity = list.getEntity(); + // Create list html + var $list = $('<ul/>', { + 'class': 'h5p-ul' + }); + + // Create add button + var $button = ns.createButton(list.getImportance(), H5PEditor.t('core', 'addEntity', {':entity': entity}), function () { + list.addItem(); + }, true); + + // Used when dragging items around + var adjustX, adjustY, marginTop, formOffset; + + /** + * @private + * @param {jQuery} $item + * @param {jQuery} $placeholder + * @param {Number} x + * @param {Number} y + */ + var moveItem = function ($item, $placeholder, x, y) { + var currentIndex; + + // Adjust so the mouse is placed on top of the icon. + x = x - adjustX; + y = y - adjustY; + $item.css({ + top: y - marginTop - formOffset.top, + left: x - formOffset.left + }); + + // Try to move up. + var $prev = $item.prev().prev(); + if ($prev.length && y < $prev.offset().top + ($prev.height() / 2)) { + $prev.insertAfter($item); + + currentIndex = $item.index(); + list.moveItem(currentIndex, currentIndex - 1); + + return; + } + + // Try to move down. + var $next = $item.next(); + if ($next.length && y + $item.height() > $next.offset().top + ($next.height() / 2)) { + $next.insertBefore($placeholder); + + currentIndex = $item.index() - 2; + list.moveItem(currentIndex, currentIndex + 1); + } + }; + + /** + * Adds UI items to the widget. + * + * @public + * @param {Object} item + */ + self.addItem = function (item) { + var $placeholder, mouseDownAt; + var $item = $('<li/>', { + 'class' : 'h5p-li', + }); + + // Create confirmation dialog for removing list item + var confirmRemovalDialog = new H5P.ConfirmationDialog({ + dialogText: H5PEditor.t('core', 'confirmRemoval', {':type': entity}) + }).appendTo(document.body); + + // Remove list item on confirmation + confirmRemovalDialog.on('confirmed', function () { + list.removeItem($item.index()); + $item.remove(); + }); + + /** + * Mouse move callback + * + * @private + * @param {Object} event + */ + var move = function (event) { + if (mouseDownAt) { + // Have not started moving yet + + if (! (event.pageX > mouseDownAt.x + 5 || event.pageX < mouseDownAt.x - 5 || + event.pageY > mouseDownAt.y + 5 || event.pageY < mouseDownAt.y - 5) ) { + return; // Not ready to start moving + } + + // Prevent wysiwyg becoming unresponsive + H5PEditor.Html.removeWysiwyg(); + + // Prepare to start moving + mouseDownAt = null; + + var offset = $item.offset(); + adjustX = event.pageX - offset.left; + adjustY = event.pageY - offset.top; + marginTop = parseInt($item.css('marginTop')); + formOffset = $list.offsetParent().offset(); + // TODO: Couldn't formOffset and margin be added? + + var width = $item.width(); + var height = $item.height(); + + $item.addClass('moving').css({ + width: width, + height: height + }); + $placeholder = $('<li/>', { + 'class': 'placeholder h5p-li', + css: { + width: width, + height: height + } + }).insertBefore($item); + } + + moveItem($item, $placeholder, event.pageX, event.pageY); + }; + + /** + * Mouse button release callback + * + * @private + */ + var up = function (event) { + + // Stop listening for mouse move events + H5P.$window + .unbind('mousemove', move) + .unbind('mouseup', up); + + // Enable text select again + H5P.$body + .css({ + '-moz-user-select': '', + '-webkit-user-select': '', + 'user-select': '', + '-ms-user-select': '' + }) + .attr('unselectable', 'off') + [0].onselectstart = H5P.$body[0].ondragstart = null; + + if (!mouseDownAt) { + // Not your regular click, we have been moving + $item.removeClass('moving').css({ + width: 'auto', + height: 'auto' + }); + $placeholder.remove(); + + if (item instanceof H5PEditor.Group) { + // Avoid groups expand/collapse toggling + item.preventToggle = true; + } + } + }; + + /** + * Mouse button down callback + * + * @private + */ + var down = function (event) { + if (event.which !== 1) { + return; // Only allow left mouse button + } + + mouseDownAt = { + x: event.pageX, + y: event.pageY + }; + + // Start listening for mouse move events + H5P.$window + .mousemove(move) + .mouseup(up); + + // Prevent text select + H5P.$body + .css({ + '-moz-user-select': 'none', + '-webkit-user-select': 'none', + 'user-select': 'none', + '-ms-user-select': 'none' + }) + .attr('unselectable', 'on') + [0].onselectstart = H5P.$body[0].ondragstart = function () { + return false; + }; + }; + + /** + * Order current list item up + * + * @private + */ + var moveItemUp = function () { + var $prev = $item.prev(); + if (!$prev.length) { + return; // Cannot move item further up + } + + // Prevent wysiwyg becoming unresponsive + H5PEditor.Html.removeWysiwyg(); + + var currentIndex = $item.index(); + $prev.insertAfter($item); + list.moveItem(currentIndex, currentIndex - 1); + }; + + /** + * Order current ist item down + * + * @private + */ + var moveItemDown = function () { + var $next = $item.next(); + if (!$next.length) { + return; // Cannot move item further down + } + + // Prevent wysiwyg becoming unresponsive + H5PEditor.Html.removeWysiwyg(); + + var currentIndex = $item.index(); + $next.insertBefore($item); + list.moveItem(currentIndex, currentIndex + 1); + }; + + // List item title bar + var $titleBar = $('<div/>', { + 'class': 'list-item-title-bar', + appendTo: $item + }); + + // Container for list actions + var $listActions = $('<div/>', { + class: 'list-actions', + appendTo: $titleBar + }); + + // Append order button + var $orderGroup = $('<div/>', { + class : 'order-group', + appendTo: $listActions + }); + + H5PEditor.createButton('order-up', H5PEditor.t('core', 'orderItemUp'), moveItemUp).appendTo($orderGroup); + H5PEditor.createButton('order-down', H5PEditor.t('core', 'orderItemDown'), moveItemDown).appendTo($orderGroup); + + H5PEditor.createButton('remove', H5PEditor.t('core', 'removeItem'), function () { + confirmRemovalDialog.show($(this).offset().top); + }).appendTo($listActions); + + // Append new field item to content wrapper + if (item instanceof H5PEditor.Group) { + // Append to item + item.appendTo($item); + $item.addClass('listgroup'); + $titleBar.addClass(list.getImportance()); + + // Move label + $item.children('.field').children('.title').appendTo($titleBar).addClass('h5peditor-label'); + + // Handle expand and collapse + item.on('expanded', function () { + $item.addClass('expanded').removeClass('collapsed'); + }); + item.on('collapsed', function () { + $item.removeClass('expanded').addClass('collapsed'); + }); + } + else { + // Append content wrapper + var $content = $('<div/>', { + 'class' : 'content' + }).appendTo($item); + + // Add importance to items not in groups + $titleBar.addClass(list.getImportance()); + + // Append field + item.appendTo($content); + + if (item.field.label !== 0) { + // Try to find and move the label to the title bar + $content.children('.field').find('.h5peditor-label:first').removeClass('h5peditor-required').appendTo($titleBar); + } + } + + // Append item to list + $item.appendTo($list); + + if (item instanceof H5PEditor.Group) { + // Good UX: automatically expand groups if not explicitly disabled by semantics + item.expand(); + + item.children.some(function (child) { + var isTextField = self.isTextField(child); + if (isTextField) { + // Change label to reflect content of list group + setListgroupTitle(item.field.label, parseHtml(child.value)); + + // Update label when description has changed + child.$input.change(function () { + setListgroupTitle(item.field.label, parseHtml(child.value)); + }); + } + return isTextField; + }); + } + + $titleBar.children('.h5peditor-label').mousedown(down); + + /** + * Parses a html string with special character codes into a text string + * + * @param {string} html + * @returns {string} Parsed html string + */ + function parseHtml(html) { + return $('<p>').html(html).text(); + } + + /** + * Add text to the listgroups title element. + * + * @private + * @param {string} label + * @param {string} text + */ + function setListgroupTitle(label, text) { + var title = label; + if (text !== undefined && text !== '') { + title += ': ' + text; + } + $titleBar.children('.title').html(title); + } + }; + + /** + * Determine if child is a text field + * + * @param {Object} child + * @returns {boolean} True if child is a text field + */ + self.isTextField = function (child) { + var widget = ns.getWidgetName(child.field); + return widget === 'html' || widget === 'text'; + }; + + /** + * Puts this widget at the end of the given container. + * + * @public + * @param {jQuery} $container + */ + self.appendTo = function ($container) { + $list.appendTo($container); + $button.appendTo($container); + }; + + /** + * Remove this widget from the editor DOM. + * + * @public + */ + self.remove = function () { + $list.remove(); + $button.remove(); + }; + } + + return ListEditor; +})(H5P.jQuery); diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-list.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-list.js new file mode 100755 index 0000000000..80bc665e2a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-list.js @@ -0,0 +1,338 @@ +/** @namespace H5PEditor */ +var H5PEditor = H5PEditor || {}; + +H5PEditor.List = (function ($) { + /** + * List structure. + * + * @class + * @param {*} parent structure + * @param {Object} field Semantic description of field + * @param {Array} [parameters] Default parameters for this field + * @param {Function} setValue Call to set our parameters + */ + function List(parent, field, parameters, setValue) { + var self = this; + + // Initialize semantics structure inheritance + H5PEditor.SemanticStructure.call(self, field, { + name: 'ListEditor', + label: H5PEditor.t('core', 'listLabel') + }); + + // Make it possible to travel up tree. + self.parent = parent; // (Could this be done a better way in the future?) + + /** + * Keep track of child fields. Should not be exposed directly, + * create functions for using or finding the children. + * + * @private + * @type {Array} + */ + var children = []; + + // Prepare the old ready callback system + var readyCallbacks = []; + var passReadyCallbacks = true; + parent.ready(function () { + passReadyCallbacks = false; + }); // (In the future we should use the event system for this, i.e. self.once('ready')) + + // Listen for widget changes + self.on('changeWidget', function () { + // Append all items to new widget + for (var i = 0; i < children.length; i++) { + self.widget.addItem(children[i], i); + } + }); + + /** + * Add all items to list without appending to DOM. + * + * @public + */ + var init = function () { + var i; + if (parameters !== undefined && parameters.length) { + for (i = 0; i < parameters.length; i++) { + if (parameters[i] === null) { + parameters[i] = undefined; + } + addItem(i); + } + } + else { + if (field.defaultNum === undefined) { + // Use min or 1 if no default item number is set. + field.defaultNum = (field.min !== undefined ? field.min : 1); + } + // Add default number of fields. + for (i = 0; i < field.defaultNum; i++) { + addItem(i); + } + } + }; + + /** + * Make sure list is created when setting a parameter. + * + * @private + * @param {number} index + * @param {*} value + */ + var setParameters = function (index, value) { + if (parameters === undefined) { + // Create new parameters for list + parameters = []; + setValue(field, parameters); + } + parameters[index] = value; + }; + + /** + * Add item to list. + * + * @private + * @param {Number} index + * @param {*} [paramsOverride] Override params using this value. + */ + var addItem = function (index, paramsOverride) { + var childField = field.field; + var widget = H5PEditor.getWidgetName(childField); + + if ((parameters === undefined || parameters[index] === undefined) && childField['default'] !== undefined) { + // Use default value + setParameters(index, childField['default']); + } + if (paramsOverride !== undefined) { + // Use override params + setParameters(index, paramsOverride); + } + + var child = children[index] = new H5PEditor.widgets[widget](self, childField, parameters === undefined ? undefined : parameters[index], function (myChildField, value) { + var i = findIndex(child); + setParameters(i === undefined ? index : i, value); + }); + + return child; + }; + + /** + * Finds the index for the given child. + * + * @private + * @param {Object} child field instance + * @returns {Number} index + */ + var findIndex = function (child) { + for (var i = 0; i < children.length; i++) { + if (children[i] === child) { + return i; + } + } + }; + + /** + * Get the singular form of the items added in the list. + * + * @public + * @returns {String} The entity type + */ + self.getEntity = function () { + return (field.entity === undefined ? 'item' : field.entity); + }; + + /** + * Adds a new list item and child field at the end of the list + * + * @public + * @param {*} [paramsOverride] Override params using this value. + * @returns {Boolean} + */ + self.addItem = function (paramsOverride) { + var id = children.length; + if (field.max === id) { + return false; + } + + var child = addItem(id, paramsOverride); + self.widget.addItem(child, id); + + if (!passReadyCallbacks) { + // Run collected ready callbacks + for (var i = 0; i < readyCallbacks.length; i++) { + readyCallbacks[i](); + } + readyCallbacks = []; // Reset + } + + return true; + }; + + /** + * Removes the list item at the given index. + * + * @public + * @param {Number} index + */ + self.removeItem = function (index) { + // Remove child field + children[index].remove(); + children.splice(index, 1); + + if (parameters !== undefined) { + // Clean up parameters + parameters.splice(index, 1); + if (!parameters.length) { + // Create new parameters for list + parameters = undefined; + setValue(field); + } + } + }; + + /** + * Removes all items. + * This is useful if a widget wants to reset the list. + * + * @public + */ + self.removeAllItems = function () { + if (parameters === undefined) { + return; + } + + // Remove child fields + for (var i = 0; i < children.length; i++) { + children[i].remove(); + } + children = []; + + // Clean up parameters + parameters = undefined; + setValue(field); + }; + + /** + * Change the order of the items in the list. + * Be aware that this may change the index of other existing items. + * + * @public + * @param {Number} currentIndex + * @param {Number} newIndex + */ + self.moveItem = function (currentIndex, newIndex) { + // Update child fields + var child = children.splice(currentIndex, 1); + children.splice(newIndex, 0, child[0]); + + // Update parameters + if (parameters) { + var params = parameters.splice(currentIndex, 1); + parameters.splice(newIndex, 0, params[0]); + } + }; + + /** + * Allows ancestors and widgets to do stuff with our children. + * + * @public + * @param {Function} task + */ + self.forEachChild = function (task) { + for (var i = 0; i < children.length; i++) { + task(children[i], i); + } + }; + + /** + * Collect callback to run when the editor is ready. If this item isn't + * ready yet, jusy pass them on to the parent item. + * + * @public + * @param {Function} ready + */ + self.ready = function (ready) { + if (passReadyCallbacks) { + parent.ready(ready); + } + else { + readyCallbacks.push(ready); + } + }; + + /** + * Make sure that this field and all child fields are valid. + * + * @public + * @returns {Boolean} + */ + self.validate = function () { + var self = this; + var valid = true; + + // Remove old error messages + self.clearErrors(); + + // Make sure child fields are valid + for (var i = 0; i < children.length; i++) { + if (children[i].validate() === false) { + valid = false; + } + } + + // Validate our self + if (field.max !== undefined && field.max > 0 && + children !== undefined && children.length > field.max) { + // Invalid, more parameters than max allowed. + valid = false; + self.setError(H5PEditor.t('core', 'listExceedsMax', {':max': field.max})); + } + if (field.min !== undefined && field.min > 0 && + (children === undefined || children.length < field.min)) { + // Invalid, less parameters than min allowed. + valid = false; + self.setError(H5PEditor.t('core', 'listBelowMin', {':min': field.min})); + } + + return valid; + }; + + self.getImportance = function () { + if (field.importance !== undefined) { + return H5PEditor.createImportance(field.importance); + } + else if (field.field.importance !== undefined) { + return H5PEditor.createImportance(field.field.importance); + } + else { + return ''; + } + }; + + /** + * Creates a copy of the current valid value. A copy is created to avoid + * mistakes like directly editing the parameter values, which will cause + * inconsistencies between the parameters and the editor widgets. + * + * @public + * @returns {Array} + */ + self.getValue = function () { + return (parameters === undefined ? parameters : $.extend(true, [], parameters)); + }; + + // Start the party! + init(); + } + + // Extends the semantics structure + List.prototype = Object.create(H5PEditor.SemanticStructure.prototype); + List.prototype.constructor = List; + + return List; +})(H5P.jQuery); + +// Register widget +H5PEditor.widgets.list = H5PEditor.List; diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-none.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-none.js new file mode 100755 index 0000000000..781cdbb15b --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-none.js @@ -0,0 +1,54 @@ +var H5PEditor = H5PEditor || {}; +var ns = H5PEditor; + +/** + * Create a field without html + * + * @param {mixed} parent + * @param {object} field + * @param {mixed} params + * @param {function} setValue + */ +ns.None = function (parent, field, params, setValue) { + this.parent = parent; + this.field = field; + this.params = params; + this.setValue = setValue; +}; + +/** + * Implementation of appendTo + * + * None doesn't append anything + * + * @param {jQuery} $wrapper + */ +ns.None.prototype.appendTo = function ($wrapper) {}; + +/** + * Implementation of validate + * + * None allways validates + */ +ns.None.prototype.validate = function () { + return true; +}; + +/** + * Collect functions to execute once the tree is complete. + * + * @param {function} ready + */ +ns.None.prototype.ready = function (ready) { + this.parent.ready(ready); +}; + +/** + * Remove this item. + */ +ns.None.prototype.remove = function () { + ns.removeChildren(this.children); +}; + +// Tell the editor what widget we are. +ns.widgets.none = ns.None; \ No newline at end of file diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-number.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-number.js new file mode 100755 index 0000000000..06dc5718a0 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-number.js @@ -0,0 +1,146 @@ +var H5PEditor = H5PEditor || {}; +var ns = H5PEditor; + +/** + * Create a number picker field for the form. + * + * @param {mixed} parent + * @param {Object} field + * @param {mixed} params + * @param {function} setValue + * @returns {ns.Number} + */ +ns.Number = function (parent, field, params, setValue) { + this.field = field; + this.value = params; + this.setValue = setValue; +}; + +/** + * Append field to wrapper. + * + * @param {jQuery} $wrapper + * @returns {undefined} + */ +ns.Number.prototype.appendTo = function ($wrapper) { + var that = this; + + this.$item = ns.$(this.createHtml()).appendTo($wrapper); + this.$errors = this.$item.find('.h5p-errors'); + var $inputs = this.$item.find('input'); + if ($inputs.length === 1) { + this.$input = $inputs; + } + else { + this.$range = $inputs.filter(':first'); + this.$input = this.$range.next(); + } + + this.$input.change(function () { + // Validate + var value = that.validate(); + + if (value !== false) { + // Set param + that.value = value; + that.setValue(that.field, value); + if (that.$range !== undefined) { + that.$range.val(value); + } + } + }); + + if (this.$range !== undefined) { + if (this.$range.attr('type') === 'range') { + this.$range.change(function () { + that.$input.val(that.$range.val()).change(); + }); + + // Add some styles for IE. + if (H5PEditor.isIE) { + this.$range.css('margin-top', 0); + this.$input.css('margin-top', '7px'); + } + } + else { + this.$range.remove(); + } + } +}; + +/** + * Create HTML for the field. + */ +ns.Number.prototype.createHtml = function () { + var input = ns.createText(this.value, 15); + /* TODO: Add back in when FF gets support for input:range.... + *if (this.field.min !== undefined && this.field.max !== undefined && this.field.step !== undefined) { + input = '<input type="range" min="' + this.field.min + '" max="' + this.field.max + '" step="' + this.field.step + '"' + (this.value === undefined ? '' : ' value="' + this.value + '"') + '/>' + input; + } + */ + + return ns.createFieldMarkup(this.field, input); +}; + +/** + * Validate the current text field. + */ +ns.Number.prototype.validate = function () { + var that = this; + + var value = H5P.trim(this.$input.val()); + var decimals = this.field.decimals !== undefined && this.field.decimals; + + if (this.$errors.html().length > 0) { + this.$input.addClass('error'); + } + + // Clear errors before showing new ones + this.$errors.html(''); + + if (!value.length) { + if (that.field.optional === true) { + // Field is optional and does not have a value, nothing more to validate + return; + } + + // Field must have a value + this.$errors.append(ns.createError(ns.t('core', 'requiredProperty', {':property': ns.t('core', 'numberField')}))); + } + else if (decimals && !value.match(new RegExp('^-?[0-9]+(.|,)[0-9]{1,}$'))) { + this.$errors.append(ns.createError(ns.t('core', 'onlyNumbers', {':property': that.field.label}))); + } + else if (!decimals && !value.match(new RegExp('^-?[0-9]+$'))) { + this.$errors.append(ns.createError(ns.t('core', 'onlyNumbers', {':property': that.field.label}))); + } + else { + if (decimals) { + value = parseFloat(value.replace(',', '.')); + } + else { + value = parseInt(value); + } + + if (this.field.max !== undefined && value > this.field.max) { + this.$errors.append(ns.createError(ns.t('core', 'exceedsMax', {':property': that.field.label, ':max': this.field.max}))); + } + else if (this.field.min !== undefined && value < this.field.min) { + this.$errors.append(ns.createError(ns.t('core', 'belowMin', {':property': that.field.label, ':min': this.field.min}))); + } + else if (this.field.step !== undefined && value % this.field.step) { + this.$errors.append(ns.createError(ns.t('core', 'outOfStep', {':property': that.field.label, ':step': this.field.step}))); + } + } + + return ns.checkErrors(this.$errors, this.$input, value); +}; + +/** + * Remove this item. + */ +ns.Number.prototype.remove = function () { + this.$item.remove(); +}; + +// Tell the editor what widget we are. +ns.widgets.number = ns.Number; diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-select.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-select.js new file mode 100755 index 0000000000..e781f692ca --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-select.js @@ -0,0 +1,109 @@ +var H5PEditor = H5PEditor || {}; + +H5PEditor.widgets.select = H5PEditor.Select = (function (E) { + /** + * Initialize a new widget. + * + * @param {object} parent + * @param {object} field + * @param {object} params + * @param {function} setValue + * @returns {_L3.C} + */ + function C(parent, field, params, setValue) { + this.field = field; + this.value = params; + this.setValue = setValue; + + // Setup event dispatching on change + this.changes = []; + this.triggerListeners = function (value) { + // Run callbacks + for (var i = 0; i < this.changes.length; i++) { + this.changes[i](value); + } + } + } + + /** + * Append widget to the DOM. + * + * @param {jQuery} $wrapper + * @returns {undefined} + */ + C.prototype.appendTo = function ($wrapper) { + var that = this; + + this.$item = E.$(this.createHtml()).appendTo($wrapper); + this.$select = this.$item.find('select'); + this.$errors = this.$item.children('.h5p-errors'); + + this.$select.change(function () { + var val = that.validate(); + if (val !== false) { + that.value = val; + that.setValue(that.field, val); + that.triggerListeners(val); + } + }); + }; + + /** + * Generate HTML for the widget. + * + * @returns {String} HTML. + */ + C.prototype.createHtml = function () { + if (this.field.optional === true || this.field.default === undefined) { + var options = E.createOption('-', '-'); + } + for (var i = 0; i < this.field.options.length; i++) { + var option = this.field.options[i]; + options += E.createOption(option.value, option.label, option.value === this.value); + } + + var select = '<select>' + options + '</select>'; + + return E.createFieldMarkup(this.field, select); + }; + + + /** + * Validate this field. + * + * @returns {Boolean} + */ + C.prototype.validate = function () { + var value = this.$select.val(); + if (value === '-') { + value = undefined; // No value selected + } + + if (this.field.optional !== true && value === undefined) { + // Not optional and no value selected, print required error + this.$errors.append(ns.createError(ns.t('core', 'requiredProperty', {':property': ns.t('core', 'textField')}))); + + return false; + } + + // All valid. Remove old errors + var $errors = this.$errors.children(); + if ($errors.length) { + $errors.remove(); + } + + return value; + }; + + + /** + * Remove widget from DOM. + * + * @returns {undefined} + */ + C.prototype.remove = function () { + this.$item.remove(); + }; + + return C; +})(H5PEditor); diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-semantic-structure.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-semantic-structure.js new file mode 100755 index 0000000000..c021aa80b2 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-semantic-structure.js @@ -0,0 +1,290 @@ +/** @namespace H5PEditor */ +var H5PEditor = H5PEditor || {}; + +H5PEditor.SemanticStructure = (function ($) { + var self = this; + + /** + * The base of the semantic structure system. + * All semantic structure class types will inherit this class. + * + * @class + * @param {Object} field + * @param {Object} defaultWidget + */ + function SemanticStructure(field, defaultWidget) { + var self = this; + + // Initialize event inheritance + H5P.EventDispatcher.call(self); + + /** + * Determine this fields label. Used in error messages. + * @public + */ + self.label = (field.label === undefined ? field.name : field.label); + + // Support old editor libraries + self.field = {}; + + /** + * Global instance variables. + * @private + */ + var $widgetSelect, $wrapper, $inner, $errors, $content, + $description, $helpText, widgets; + + /** + * Initialize. Wrapped to avoid leaking variables + * @private + */ + var init = function () { + // Create field wrapper + $wrapper = $('<div/>', { + 'class': 'field ' + field.type + ' ' + H5PEditor.createImportance(field.importance) + }); + + /* We want to be in control of the label, description and errors + containers to give the editor some structure. Also we do not provide + direct access to the field object to avoid cluttering semantics.json with + non-semantic properties and options. Getters and setters will be + created for what is needed. */ + + // Create field label + var $label; + if (field.label !== 0) { + // Add label + $label = createLabel(self.label, field.optional).appendTo($wrapper); + } + + widgets = getValidWidgets(); + if (widgets.length > 1) { + // Create widget select box + $widgetSelect = $('<ul/>', { + 'class': 'h5peditor-widget-select', + title: H5PEditor.t('core', 'editMode'), + appendTo: $wrapper + }); + for (var i = 0; i < widgets.length; i++) { + addWidgetOption(widgets[i], i === 0); + } + + // Allow custom styling when selector is present + $wrapper.addClass('h5peditor-widgets'); + } + + // Create inner wrapper + $inner = $('<div/>', { + 'class': 'h5peditor-widget-wrapper' + (widgets.length > 1 ? ' content' : ' '), + appendTo: $wrapper + }); + + $content = $('<div/>', { + 'class': 'h5peditor-field-content' + }); + + // Create errors container + $errors = $('<div/>', { + 'class': 'h5p-errors' + }); + + // Create description + if (field.description !== undefined) { + $description = $('<div/>', { + 'class': 'h5peditor-field-description', + text: field.description + }); + } + + // Create help text + $helpText = $('<div/>', { + 'class': 'h5p-help-text' + }); + }; + + /** + * Add widget select option. + * + * @private + */ + var addWidgetOption = function (widget, active) { + var $option = $('<li/>', { + 'class': 'h5peditor-widget-option' + (active ? ' ' + CLASS_WIDGET_ACTIVE : ''), + text: widget.label, + role: 'button', + tabIndex: 1, + on: { + click: function () { + // Update UI + $widgetSelect.children('.' + CLASS_WIDGET_ACTIVE).removeClass(CLASS_WIDGET_ACTIVE); + $option.addClass(CLASS_WIDGET_ACTIVE); + + // Change Widget + changeWidget(widget.name); + } + } + }).appendTo($widgetSelect); + }; + + /** + * Get a list of widgets that are valid and loaded. + * + * @private + * @throws {TypeError} widgets must be an array + * @returns {Array} List of valid widgets + */ + var getValidWidgets = function () { + if (field.widgets === undefined) { + // No widgets specified use default + return [defaultWidget]; + } + if (!(field.widgets instanceof Array)) { + throw TypeError('widgets must be an array'); + } + + // Check if specified widgets are valid + var validWidgets = []; + for (var i = 0; i < field.widgets.length; i++) { + var widget = field.widgets[i]; + if (getWidget(widget.name)) { + validWidgets.push(widget); + } + } + + if (!validWidgets.length) { + // There are no valid widgets, add default + validWidgets.push(self.default); + } + + return validWidgets; + }; + + /** + * Finds the widget class with the given name. + * + * @private + * @param {String} name + * @returns {Class} + */ + var getWidget = function (name) { + return H5PEditor[name]; + }; + + /** + * Change the UI widget. + * + * @private + * @param {String} name + */ + var changeWidget = function (name) { + if (self.widget !== undefined) { + // Validate our fields first to makes sure all "stored" from their widgets + self.validate(); + + // Remove old widgets + self.widget.remove(); + } + + // TODO: Improve error handling? + var widget = getWidget(name); + self.widget = new widget(self); + self.trigger('changeWidget'); + self.widget.appendTo($inner); + + // Add errors container and description. + $errors.appendTo($inner); + if ($description !== undefined) { + $description.appendTo($inner); + } + + if (self.widget.helpText !== undefined) { + $helpText.html(self.widget.helpText).appendTo($inner); + } + else { + $helpText.detach(); + } + }; + + /** + * Appends the field widget to the given container. + * + * @public + * @param {jQuery} $container + */ + self.appendTo = function ($container) { + // Use first widget by default + changeWidget(widgets[0].name); + + $wrapper.appendTo($container); + }; + + /** + * Remove this field and widget. + * + * @public + */ + self.remove = function () { + self.widget.remove(); + $wrapper.remove(); + }; + + /** + * Remove this field and widget. + * + * @public + * @param {String} message + */ + self.setError = function (message) { + $errors.append(H5PEditor.createError(message)); + }; + + /** + * Clear error messages. + * + * @public + */ + self.clearErrors = function () { + $errors.html(''); + }; + + /** + * Get the name of this field. + * + * @public + * @returns {String} Name of the current field + */ + self.getName = function () { + return field.name; + }; + + // Must be last + init(); + } + + // Extends the event dispatcher + SemanticStructure.prototype = Object.create(H5P.EventDispatcher.prototype); + SemanticStructure.prototype.constructor = SemanticStructure; + + /** + * Create generic editor label. + * + * @private + * @param {String} text + * @returns {jQuery} + */ + var createLabel = function (text, optional) { + return $('<label/>', { + 'class': 'h5peditor-label' + (optional ? '' : ' h5peditor-required'), + text: text + }); + }; + + + + /** + * @constant + */ + var CLASS_WIDGET_ACTIVE = 'h5peditor-widget-active'; + + return SemanticStructure; +})(H5P.jQuery); diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-text.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-text.js new file mode 100755 index 0000000000..dbb2a4ae2a --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-text.js @@ -0,0 +1,113 @@ +var H5PEditor = H5PEditor || {}; +var ns = H5PEditor; + +/** + * Create a text field for the form. + * + * @param {mixed} parent + * @param {Object} field + * @param {mixed} params + * @param {function} setValue + * @returns {ns.Text} + */ +ns.Text = function (parent, field, params, setValue) { + this.field = field; + this.value = params; + this.setValue = setValue; + this.changeCallbacks = []; +}; + +/** + * Append field to wrapper. + * + * @param {type} $wrapper + * @returns {undefined} + */ +ns.Text.prototype.appendTo = function ($wrapper) { + var that = this; + + this.$item = ns.$(this.createHtml()).appendTo($wrapper); + this.$input = this.$item.find('input'); + this.$errors = this.$item.children('.h5p-errors'); + + this.$input.change(function () { + // Validate + var value = that.validate(); + + if (value !== false) { + // Set param + if (H5P.trim(value) === '') { + // Avoid storing empty strings. (will be valid if field is optional) + delete that.value; + that.setValue(that.field); + } + else { + that.value = value; + that.setValue(that.field, ns.htmlspecialchars(value)); + } + + for (var i = 0; i < that.changeCallbacks.length; i++) { + that.changeCallbacks[i](value); + } + } + }); +}; + +/** + * Run callback when value changes. + * + * @param {function} callback + * @returns {Number|@pro;length@this.changeCallbacks} + */ +ns.Text.prototype.change = function (callback) { + this.changeCallbacks.push(callback); + callback(); + + return this.changeCallbacks.length - 1; +}; + +/** + * Create HTML for the text field. + */ +ns.Text.prototype.createHtml = function () { + var input = ns.createText(this.value, this.field.maxLength, this.field.placeholder); + return ns.createFieldMarkup(this.field, input); +}; + +/** + * Validate the current text field. + */ +ns.Text.prototype.validate = function () { + var that = this; + + var value = H5P.trim(this.$input.val()); + + if (this.$errors.html().length > 0) { + this.$input.addClass('error'); + } + + // Clear errors before showing new ones + this.$errors.html(''); + + if ((that.field.optional === undefined || !that.field.optional) && !value.length) { + this.$errors.append(ns.createError(ns.t('core', 'requiredProperty', {':property': ns.t('core', 'textField')}))); + } + else if (value.length > this.field.maxLength) { + this.$errors.append(ns.createError(ns.t('core', 'tooLong', {':max': this.field.maxLength}))); + } + else if (this.field.regexp !== undefined && value.length && !value.match(new RegExp(this.field.regexp.pattern, this.field.regexp.modifiers))) { + this.$errors.append(ns.createError(ns.t('core', 'invalidFormat'))); + } + + return ns.checkErrors(this.$errors, this.$input, value); +}; + +/** + * Remove this item. + */ +ns.Text.prototype.remove = function () { + this.$item.remove(); +}; + +// Tell the editor what widget we are. +ns.widgets.text = ns.Text; diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor-textarea.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor-textarea.js new file mode 100755 index 0000000000..ff62a4ff63 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor-textarea.js @@ -0,0 +1,95 @@ +// DEPRECATED: This widget will be removed and replaced with the HTML widget +var H5PEditor = H5PEditor || {}; +var ns = H5PEditor; + +/** + * Create a text field for the form. + * + * @param {mixed} parent + * @param {Object} field + * @param {mixed} params + * @param {function} setValue + * @returns {ns.Textarea} + */ +ns.Textarea = function (parent, field, params, setValue) { + this.field = field; + this.value = params; + this.setValue = setValue; +}; + +/** + * Append field to wrapper. + * + * @param {jQuery} $wrapper + * @returns {undefined} + */ +ns.Textarea.prototype.appendTo = function ($wrapper) { + var that = this; + + this.$item = ns.$(this.createHtml()).appendTo($wrapper); + this.$input = this.$item.find('textarea'); + this.$errors = this.$item.find('.h5p-errors'); + + this.$input.change(function () { + // Validate + var value = that.validate(); + + if (value !== false) { + // Set param + that.setValue(that.field, ns.htmlspecialchars(value)); + } + }); +}; + +/** + * Create HTML for the text field. + */ +ns.Textarea.prototype.createHtml = function () { + var input = '<textarea cols="30" rows="4"'; + if (this.field.placeholder !== undefined) { + input += ' placeholder="' + this.field.placeholder + '"'; + } + input += '>'; + if (this.value !== undefined) { + input += this.value; + } + input += '</textarea>'; + + return ns.createFieldMarkup(this.field, input); +}; + +/** + * Validate the current text field. + */ +ns.Textarea.prototype.validate = function () { + var value = H5P.trim(this.$input.val()); + + if (this.$errors.html().length > 0) { + this.$input.addClass('error'); + } + + // Clear errors before showing new ones + this.$errors.html(''); + + if ((this.field.optional === undefined || !this.field.optional) && !value.length) { + this.$errors.append(ns.createError(ns.t('core', 'requiredProperty', {':property': ns.t('core', 'textField')}))); + } + else if (value.length > this.field.maxLength) { + this.$errors.append(ns.createError(ns.t('core', 'tooLong', {':max': this.field.maxLength}))); + } + else if (this.field.regexp !== undefined && !value.match(new RegExp(this.field.regexp.pattern, this.field.regexp.modifiers))) { + this.$errors.append(ns.createError(ns.t('core', 'invalidFormat'))); + } + + return ns.checkErrors(this.$errors, this.$input, value); +}; + +/** + * Remove this item. + */ +ns.Textarea.prototype.remove = function () { + this.$item.remove(); +}; + +// Tell the editor what semantic field we are. +ns.widgets.textarea = ns.Textarea; diff --git a/html/moodle2/mod/hvp/editor/scripts/h5peditor.js b/html/moodle2/mod/hvp/editor/scripts/h5peditor.js new file mode 100755 index 0000000000..9378bd938e --- /dev/null +++ b/html/moodle2/mod/hvp/editor/scripts/h5peditor.js @@ -0,0 +1,706 @@ +/** + * This file contains helper functions for the editor. + */ + +// Use resources set in parent window +var ns = H5PEditor = window.parent.H5PEditor; +ns.$ = H5P.jQuery; + +// Load needed resources from parent. +H5PIntegration = window.parent.H5PIntegration; + +/** + * Keep track of our widgets. + */ +ns.widgets = {}; + +/** + * Keeps track of which semantics are loaded. + */ +ns.loadedSemantics = {}; + +/** + * Keeps track of callbacks to run once a semantic gets loaded. + */ +ns.semanticsLoaded = {}; + +/** + * Indiciates if the user is using Internet Explorer. + */ +ns.isIE = navigator.userAgent.match(/; MSIE \d+.\d+;/) !== null; + +/** + * Loads the given library, inserts any css and js and + * then runs the callback with the samantics as an argument. + * + * @param {string} libraryName + * On the form machineName.majorVersion.minorVersion + * @param {function} callback + * @returns {undefined} + */ +ns.loadLibrary = function (libraryName, callback) { + switch (ns.loadedSemantics[libraryName]) { + default: + // Get semantics from cache. + callback(ns.loadedSemantics[libraryName]); + break; + + case 0: + // Add to queue. + ns.semanticsLoaded[libraryName].push(callback); + break; + + case undefined: + // Load semantics. + ns.loadedSemantics[libraryName] = 0; // Indicates that others should queue. + ns.semanticsLoaded[libraryName] = []; // Other callbacks to run once loaded. + var library = ns.libraryFromString(libraryName); + + var url = ns.getAjaxUrl('libraries', library); + + // Add content language to URL + if (ns.contentLanguage !== undefined) { + url += (url.indexOf('?') === -1 ? '?' : '&') + 'language=' + ns.contentLanguage; + } + + // Fire away! + ns.$.ajax({ + url: url, + success: function (libraryData) { + var semantics = libraryData.semantics; + if (libraryData.language !== null) { + var language = JSON.parse(libraryData.language); + semantics = ns.$.extend(true, [], semantics, language.semantics); + } + libraryData.semantics = semantics; + ns.loadedSemantics[libraryName] = libraryData.semantics; + + // Add CSS. + if (libraryData.css !== undefined) { + var css = ''; + for (var path in libraryData.css) { + if (!H5P.cssLoaded(path)) { + css += libraryData.css[path]; + H5PIntegration.loadedCss.push(path); + } + } + if (css) { + ns.$('head').append('<style type="text/css">' + css + '</style>'); + } + } + + // Add JS. + if (libraryData.javascript !== undefined) { + var js = ''; + for (var path in libraryData.javascript) { + if (!H5P.jsLoaded(path)) { + js += libraryData.javascript[path]; + H5PIntegration.loadedJs.push(path); + } + } + if (js) { + eval.apply(window, [js]); + } + } + + callback(libraryData.semantics); + + // Run queue. + for (var i = 0; i < ns.semanticsLoaded[libraryName].length; i++) { + ns.semanticsLoaded[libraryName][i](libraryData.semantics); + } + }, + error: function(jqXHR, textStatus, errorThrown) { + if (window['console'] !== undefined) { + console.log('Ajax request failed'); + console.log(jqXHR); + console.log(textStatus); + console.log(errorThrown); + } + }, + dataType: 'json' + }); + } +}; + +/** + * Recursive processing of the semantics chunks. + * + * @param {array} semanticsChunk + * @param {object} params + * @param {jQuery} $wrapper + * @param {mixed} parent + * @returns {undefined} + */ +ns.processSemanticsChunk = function (semanticsChunk, params, $wrapper, parent) { + var ancestor; + parent.children = []; + + if (parent.passReadies === undefined) { + throw 'Widget tried to run processSemanticsChunk without handling ready callbacks. [field:' + parent.field.type + ':' + parent.field.name + ']'; + } + + if (!parent.passReadies) { + // If the parent can't pass ready callbacks we need to take care of them. + parent.readies = []; + } + + for (var i = 0; i < semanticsChunk.length; i++) { + var field = semanticsChunk[i]; + + // Check generic field properties. + if (field.name === undefined) { + throw ns.t('core', 'missingProperty', {':index': i, ':property': 'name'}); + } + if (field.type === undefined) { + throw ns.t('core', 'missingProperty', {':index': i, ':property': 'type'}); + } + + // Set default value. + if (params[field.name] === undefined && field['default'] !== undefined) { + params[field.name] = field['default']; + } + + var widget = ns.getWidgetName(field); + + // TODO: Remove later, this is here for debugging purposes. + if (ns.widgets[widget] === undefined) { + $wrapper.append('<div>[field:' + field.type + ':' + widget + ':' + field.name + ']</div>'); + continue; + } + + // Add common fields to bottom of form. + if (field.common !== undefined && field.common) { + if (ancestor === undefined) { + ancestor = ns.findAncestor(parent); + } + + ns.addCommonField(field, parent, params, ancestor); + continue; + } + + var fieldInstance = new ns.widgets[widget](parent, field, params[field.name], function (field, value) { + if (value === undefined) { + delete params[field.name]; + } + else { + params[field.name] = value; + } + }); + fieldInstance.appendTo($wrapper); + parent.children.push(fieldInstance); + } + + if (!parent.passReadies) { + // Run ready callbacks. + for (var i = 0; i < parent.readies.length; i++) { + parent.readies[i](); + } + delete parent.readies; + } +}; + +/** + * Add a field to the common container. + * + * @param {object} field + * @param {object} parent + * @param {object} params + * @param {object} ancestor + * @returns {undefined} + */ +ns.addCommonField = function (field, parent, params, ancestor) { + var commonField; + if (ancestor.commonFields[parent.library] === undefined) { + ancestor.commonFields[parent.library] = {}; + } + + ancestor.commonFields[parent.library][parent.currentLibrary] = + ancestor.commonFields[parent.library][parent.currentLibrary] || {}; + + if (ancestor.commonFields[parent.library][parent.currentLibrary][field.name] === undefined) { + var widget = ns.getWidgetName(field); + ancestor.commonFields[parent.library][parent.currentLibrary][field.name] = { + instance: new ns.widgets[widget](parent, field, params[field.name], function (field, value) { + for (var i = 0; i < commonField.setValues.length; i++) { + commonField.setValues[i](field, value); + } + }), + setValues: [], + parents: [] + }; + } + + commonField = ancestor.commonFields[parent.library][parent.currentLibrary][field.name]; + commonField.parents.push(ns.findLibraryAncestor(parent)); + commonField.setValues.push(function (field, value) { + if (value === undefined) { + delete params[field.name]; + } + else { + params[field.name] = value; + } + }); + + if (commonField.setValues.length === 1) { + ancestor.$common.parent().removeClass('hidden'); + commonField.instance.appendTo(ancestor.$common); + commonField.params = params[field.name]; + } + else { + params[field.name] = commonField.params; + } + + parent.children.push(commonField.instance); +}; + +/** + * Find the nearest library ancestor. Used when adding commonfields. + * + * @param {object} parent + * @returns {ns.findLibraryAncestor.parent|@exp;ns@call;findLibraryAncestor} + */ +ns.findLibraryAncestor = function (parent) { + if (parent.parent === undefined || parent.field.type === 'library') { + return parent; + } + return ns.findLibraryAncestor(parent.parent); +}; + +/** + * getParentZebra + * + * Alternate the background color of fields + * + * @param parent + * @returns {string} to determine background color of callee + */ +ns.getParentZebra = function (parent) { + if (parent.zebra) { + return parent.zebra; + } + else { + return ns.getParentZebra(parent.parent); + } +}; + +/** + * Find the nearest ancestor which handles commonFields. + * + * @param {type} parent + * @returns {@exp;ns@call;findAncestor|ns.findAncestor.parent} + */ +ns.findAncestor = function (parent) { + if (parent.commonFields === undefined) { + return ns.findAncestor(parent.parent); + } + return parent; +}; + +/** + * Call remove on the given children. + * + * @param {Array} children + * @returns {unresolved} + */ +ns.removeChildren = function (children) { + if (children === undefined) { + return; + } + + for (var i = 0; i < children.length; i++) { + // Common fields will be removed by library. + var isCommonField = (children[i].field === undefined || + children[i].field.common === undefined || + !children[i].field.common); + + var hasRemove = (children[i].remove instanceof Function || + typeof children[i].remove === 'function'); + + if (isCommonField && hasRemove) { + children[i].remove(); + } + } +}; + +/** + * Find field from path. + * + * @param {String} path + * @param {Object} parent + * @returns {@exp;ns.Form@call;findField|Boolean} + */ +ns.findField = function (path, parent) { + if (typeof path === 'string') { + path = path.split('/'); + } + + if (path[0] === '..') { + path.splice(0, 1); + return ns.findField(path, parent.parent); + } + if (parent.children) { + for (var i = 0; i < parent.children.length; i++) { + if (parent.children[i].field.name === path[0]) { + path.splice(0, 1); + if (path.length) { + return ns.findField(path, parent.children[i]); + } + else { + return parent.children[i]; + } + } + } + } + + return false; +}; + +/** + * Follow a field and get all changes to its params. + * + * @param {Object} parent The parent object of the field. + * @param {String} path Relative to parent object. + * @param {Function} callback Gets called for params changes. + * @returns {undefined} + */ +ns.followField = function (parent, path, callback) { + if (path === undefined) { + return; + } + + // Find field when tree is ready. + parent.ready(function () { + var def; + + if (path instanceof Object) { + // We have an object with default values + def = H5P.cloneObject(path); + + if (path.field === undefined) { + callback(path, null); + return; // Exit if we have no field to follow. + } + + path = def.field; + delete def.field; + } + + var field = ns.findField(path, parent); + + if (!field) { + throw ns.t('core', 'unknownFieldPath', {':path': path}); + } + if (field.changes === undefined) { + throw ns.t('core', 'noFollow', {':path': path}); + } + + var params = (field.params === undefined ? def : field.params); + callback(params, field.changes.length + 1); + + field.changes.push(function () { + var params = (field.params === undefined ? def : field.params); + callback(params); + }); + }); +}; + +/** + * Create HTML wrapper for error messages. + * + * @param {String} message + * @returns {String} + */ +ns.createError = function (message) { + return '<p>' + message + '</p>'; +}; + +/** + * Turn a numbered importance into a string. + * + * @param {string} importance + * @returns {String} + */ +ns.createImportance = function (importance) { + return importance ? 'importance-' + importance : ''; +}; + +/** + * Create HTML wrapper for field items. + * Makes sure the different elements are placed in an consistent order. + * + * @param {string} type + * @param {string} [label] + * @param {string} [description] + * @param {string} [content] + * @deprecated since version 1.12 (Jan. 2017, will be removed Jan. 2018). Use createFieldMarkup instead. + * @see createFieldMarkup + * @returns {string} HTML + */ +ns.createItem = function (type, label, description, content) { + return '<div class="field ' + type + '">' + + (label ? label : '') + + (description ? '<div class="h5peditor-field-description">' + description + '</div>' : '') + + (content ? content : '') + + '<div class="h5p-errors"></div>' + + '</div>'; +}; + +/** + * An object describing the semantics of a field + * @typedef {Object} SemanticField + * @property {string} name + * @property {string} type + * @property {string} label + * @property {string} [importance] + * @property {string} [description] + * @property {string} [widget] + * @property {boolean} [optional] + */ + +/** + * Create HTML wrapper for a field item. + * Replacement for createItem() + * + * @since 1.12 + * @param {SemanticField} field + * @param {string} content + * + * @return {string} + */ +ns.createFieldMarkup = function (field, content) { + content = content || ''; + var markup = this.createLabel(field) + this.createDescription(field.description) + content; + + return this.wrapFieldMarkup(field, markup); +}; + +/** + * Create HTML wrapper for a boolean field item. + * + * @param {SemanticField} field + * @param {string} content + * + * @return {string} + */ +ns.createBooleanFieldMarkup = function (field, content) { + var markup = + '<label class="h5peditor-label">' + content + (field.label || field.name || '') + '</label>' + + this.createDescription(field.description); + + return this.wrapFieldMarkup(field, markup); +}; + +/** + * Wraps a field with some metadata classes, and adds error field + * + * @param {SemanticField} field + * @param {string} markup + * + * @private + * @return {string} + */ +ns.wrapFieldMarkup = function (field, markup) { + // removes undefined and joins + var wrapperClasses = this.joinNonEmptyStrings(['field', 'field-name-' + field.name, field.type, ns.createImportance(field.importance), field.widget]); + + // wrap and return + return '<div class="' + wrapperClasses + '">' + + markup + + '<div class="h5p-errors"></div>' + + '</div>'; +}; + +/** + * Joins an array of strings if they are defined and non empty + * + * @param {string[]} arr + * @param {string} [separator] Default is space + * @return {string} + */ +ns.joinNonEmptyStrings = function (arr, separator) { + separator = separator || ' '; + + return arr.filter(function (str) { + return str !== undefined && str.length > 0; + }).join(separator); +}; + +/** + * Create HTML for select options. + * + * @param {String} value + * @param {String} text + * @param {Boolean} selected + * @returns {String} + */ +ns.createOption = function (value, text, selected) { + return '<option value="' + value + '"' + (selected !== undefined && selected ? ' selected="selected"' : '') + '>' + text + '</option>'; +}; + +/** + * Create HTML for text input. + * + * @param {String} value + * @param {number} maxLength + * @param {String} placeholder + * + * @returns {String} + */ +ns.createText = function (value, maxLength, placeholder) { + var html = '<input class="h5peditor-text" type="text"'; + + if (value !== undefined) { + html += ' value="' + value + '"'; + } + + if (placeholder !== undefined) { + html += ' placeholder="' + placeholder + '"'; + } + + html += ' maxlength="' + (maxLength === undefined ? 255 : maxLength) + '"/>'; + + return html; +}; + +/** + * Create a label to wrap content in. + * + * @param {SemanticField} field + * @param {String} [content] + * @returns {String} + */ +ns.createLabel = function (field, content) { + var html = '<label class="h5peditor-label-wrapper">'; + + if (field.label !== 0) { + html += '<span class="h5peditor-label' + (field.optional ? '' : ' h5peditor-required') + '">' + (field.label === undefined ? field.name : field.label) + '</span>'; + } + + return html + (content || '') + '</label>'; +}; + +/** + * Create a description + * @param {String} description + * @returns {string} + */ +ns.createDescription = function (description) { + var html = ''; + if (description !== undefined) { + html += '<div class="h5peditor-field-description">' + description + '</div>'; + } + return html; +}; + +/** + * Check if any errors has been set. + * + * @param {jQuery} $errors + * @param {jQuery} $input + * @param {String} value + * @returns {mixed} + */ +ns.checkErrors = function ($errors, $input, value) { + if ($errors.children().length) { + $input.keyup(function (event) { + if (event.keyCode === 9) { // TAB + return; + } + $errors.html(''); + $input.removeClass('error'); + $input.unbind('keyup'); + }); + + return false; + } + return value; +}; + +/** + * @param {object} library + * with machineName, majorVersion and minorVersion params + * @returns {string} + * Concatinated version of the library + */ +ns.libraryToString = function (library) { + return library.name + ' ' + library.majorVersion + '.' + library.minorVersion; +}; + +/** + * TODO: Remove from here, and use from H5P instead(move this to the h5p.js...) + * + * @param {string} library + * library in the format machineName majorVersion.minorVersion + * @returns + * library as an object with machineName, majorVersion and minorVersion properties + * return false if the library parameter is invalid + */ +ns.libraryFromString = function (library) { + var regExp = /(.+)\s(\d+)\.(\d+)$/g; + var res = regExp.exec(library); + if (res !== null) { + return { + 'machineName': res[1], + 'majorVersion': res[2], + 'minorVersion': res[3] + }; + } + else { + H5P.error('Invalid überName'); + return false; + } +}; + +/** + * Helper function for detecting field widget. + * + * @param {Object} field + * @returns {String} Widget name + */ +ns.getWidgetName = function (field) { + return (field.widget === undefined ? field.type : field.widget); +}; + +/** + * Mimics how php's htmlspecialchars works (the way we uses it) + */ +ns.htmlspecialchars = function(string) { + return string.toString().replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&#039;').replace(/"/g, '&quot;'); +}; + +/** + * Makes it easier to add consistent buttons across the editor widget. + * + * @param {string} id Typical CSS class format + * @param {string} title Human readable format + * @param {function} handler Action handler when triggered + * @param {boolean} [displayTitle=false] Show button with text + * @return {H5P.jQuery} + */ +ns.createButton = function (id, title, handler, displayTitle) { + var options = { + class: 'h5peditor-button ' + (displayTitle ? 'h5peditor-button-textual ' : '') + id, + role: 'button', + tabIndex: 0, + 'aria-disabled': 'false', + on: { + click: function (event) { + handler.call(this); + }, + keydown: function (event) { + switch (event.which) { + case 13: // Enter + case 32: // Space + handler.call(this); + event.preventDefault(); + } + } + } + }; + + // Determine if we're a icon only button or have a textual label + options[displayTitle ? 'html' : 'aria-label'] = title; + + return ns.$('<div/>', options); +}; diff --git a/html/moodle2/mod/hvp/editor/styles/config.rb b/html/moodle2/mod/hvp/editor/styles/config.rb new file mode 100755 index 0000000000..5dbec4d8d8 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/styles/config.rb @@ -0,0 +1,24 @@ +# Require any additional compass plugins here. + +# Set this to the root of your project when deployed: +http_path = "/" +css_dir = "css" +sass_dir = "scss" +images_dir = "../images" +javascripts_dir = "../scripts" + +# You can select your preferred output style here (can be overridden via the command line): +# output_style = :expanded or :nested or :compact or :compressed + +# To enable relative paths to assets via compass helper functions. Uncomment: +# relative_assets = true + +# To disable debugging comments that display the original location of your selectors. Uncomment: +# line_comments = false + + +# If you prefer the indented syntax, you might want to regenerate this +# project again passing --syntax sass, or you can uncomment this: +# preferred_syntax = :sass +# and then run: +# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass diff --git a/html/moodle2/mod/hvp/editor/styles/css/application.css b/html/moodle2/mod/hvp/editor/styles/css/application.css new file mode 100755 index 0000000000..b540997991 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/styles/css/application.css @@ -0,0 +1,1484 @@ +/* line 4, ../scss/_form-field.scss */ +.field { + margin: 20px 0; + font-size: 16px; + padding: 0; +} +/* line 10, ../scss/_mixins.scss */ +.field:first-child { + margin-top: 0; +} +/* line 14, ../scss/_mixins.scss */ +.field:last-child { + margin-bottom: 0; +} +/* line 11, ../scss/_form-field.scss */ +.tree > .field.group:last-child { + margin-bottom: 0; +} +/* line 15, ../scss/_form-field.scss */ +.fields > .field.group { + margin: 10px 0; +} +/* line 10, ../scss/_mixins.scss */ +.fields > .field.group:first-child { + margin-top: 0; +} +/* line 14, ../scss/_mixins.scss */ +.fields > .field.group:last-child { + margin-bottom: 0; +} +/* line 19, ../scss/_form-field.scss */ +.field.boolean .h5peditor-label { + display: inline; +} +/* line 23, ../scss/_form-field.scss */ +.field.video, .field.image, .field.file, .field.audio { + position: relative; +} +/* line 27, ../scss/_form-field.scss */ +.field .h5p-editor-image-buttons { + float: left; + clear: both; +} +/* line 32, ../scss/_form-field.scss */ +.field .library { + border: 0; +} +/* line 36, ../scss/_form-field.scss */ +.field.importance-high > .h5peditor-label-wrapper > .h5peditor-label { + font-size: 18px; + color: #356593; +} + +/* line 4, ../scss/_form-groups.scss */ +.group > .title, .h5p-li > .list-item-title-bar, .common > .h5peditor-label { + visibility: inherit; + cursor: pointer; +} + +/* line 8, ../scss/_form-groups.scss */ +.group.importance-high > .title, .h5p-li > .list-item-title-bar.importance-high { + background: #2579C6; + border: 1px solid #1f67a8; + height: 42px; +} + +/* line 13, ../scss/_form-groups.scss */ +.group.importance-high > .title, .h5p-li > .list-item-title-bar.importance-high > .h5peditor-label, .h5p-li > .list-item-title-bar.importance-high > .title { + font-size: 16px; + font-weight: 600; + line-height: 42px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* line 21, ../scss/_form-groups.scss */ +.group > .title, .h5p-li > .list-item-title-bar { + background: #747275; + border: 1px solid #636164; + height: 38px; +} + +/* line 26, ../scss/_form-groups.scss */ +.group > .title, .h5p-li > .list-item-title-bar > .h5peditor-label, .h5p-li > .list-item-title-bar.importance-medium > .h5peditor-label { + font-size: 16px; + font-weight: 600; + color: #FFFFFF; + line-height: 38px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* line 36, ../scss/_form-groups.scss */ +.group.importance-low > .title, .h5p-li > .list-item-title-bar.importance-low, .common > .h5peditor-label { + background: #f5f5f5; + height: 38px; + border: 1px solid #d0d0d1; +} + +/* line 41, ../scss/_form-groups.scss */ +.group.importance-low > .title, .h5p-li > .list-item-title-bar.importance-low > .h5peditor-label, .h5p-li > .list-item-title-bar.importance-low > .title, .common > .h5peditor-label { + font-size: 16px; + font-weight: 400; + color: #212121; + line-height: 38px; +} + +/* line 48, ../scss/_form-groups.scss */ +.group { + border: none; +} +/* line 51, ../scss/_form-groups.scss */ +.group > .title { + padding: 0 10px; + outline: none; +} +/* line 59, ../scss/_form-groups.scss */ +.group > .content { + display: none; + margin: 0; + padding: 20px; + border: 1px solid #d0d0d1; + border-top: none; + background: #FFFFFF; +} +/* line 68, ../scss/_form-groups.scss */ +.group.importance-high > .title { + color: #FFFFFF; +} +/* line 74, ../scss/_form-groups.scss */ +.group.importance-low > .title { + color: #212121; +} +/* line 79, ../scss/_form-groups.scss */ +.group.importance-low > .title:focus:before { + outline: 1px dashed; +} + +/* line 87, ../scss/_form-groups.scss */ +.common .content, .content .content { + background-color: #fcfcfc; +} +/* line 90, ../scss/_form-groups.scss */ +.common .content .content, .content .content .content { + background-color: #FFFFFF; +} +/* line 93, ../scss/_form-groups.scss */ +.common .content .content .content, .content .content .content .content { + background-color: #fcfcfc; +} +/* line 96, ../scss/_form-groups.scss */ +.common .content .content .content .content, .content .content .content .content .content { + background-color: #FFFFFF; +} +/* line 99, ../scss/_form-groups.scss */ +.common .content .content .content .content .content, .content .content .content .content .content .content { + background-color: #fcfcfc; +} +/* line 102, ../scss/_form-groups.scss */ +.common .content .content .content .content .content .content, .content .content .content .content .content .content .content { + background-color: #FFFFFF; +} + +/* line 112, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar { + color: #FFFFFF; +} +/* line 117, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar > .h5peditor-label { + overflow: hidden; + margin: 0 54px 0 0; + padding: 0 10px; + white-space: nowrap; + line-height: 38px; + outline: none; + text-overflow: ellipsis; +} +/* line 141, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar > .list-actions { + height: 100%; + float: right; + position: relative; +} +/* line 147, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar .remove { + cursor: pointer; + width: 1.25em; + height: 38px; + font-size: 1.75em; + display: inline-block; +} +/* line 154, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar .remove:hover { + opacity: 1; + text-decoration: none; +} +/* line 160, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar .remove:after { + font-family: "H5P"; + content: "\e890"; + opacity: 0.7; + display: inline-block; + line-height: 38px; +} +/* line 168, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar .remove:hover:after { + opacity: 1; +} +/* line 172, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar .order-group { + text-align: center; + float: right; + background: #636164; + font-size: 16px; + cursor: pointer; +} +/* line 180, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar .order-up, .h5p-li > .list-item-title-bar .order-down { + width: 19px; + height: 19px; + line-height: 19px; +} +/* line 185, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar .order-up:hover, .h5p-li > .list-item-title-bar .order-down:hover { + background: #636164; +} +/* line 189, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar .order-up:after, .h5p-li > .list-item-title-bar .order-down:after { + font-family: "H5P"; + content: "\e58e"; + display: inline-block; +} +/* line 196, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar .order-down:after { + content: "\e58f"; +} +/* line 203, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-high > .title { + border: none; + margin: 0 74px 0 0; +} +/* line 209, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-high .remove { + height: 42px; + line-height: 42px; + font-size: 40px; +} +/* line 214, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-high .remove:after { + line-height: 42px; + opacity: 0.7; +} +/* line 218, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-high .remove:hover:after { + opacity: 1; +} +/* line 223, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-high .order-group { + background: #1f67a8; + font-size: 18px; +} +/* line 228, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-high .order-up, .h5p-li > .list-item-title-bar.importance-high .order-down { + width: 21px; + height: 21px; + line-height: 21px; +} +/* line 233, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-high .order-up:hover, .h5p-li > .list-item-title-bar.importance-high .order-down:hover { + background: #1f67a8; +} +/* line 242, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-low > .title { + border: none; + margin: 0 54px 0 0; +} +/* line 247, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-low > .title:before { + color: #212121; +} +/* line 250, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-low > .title:focus:before { + outline: 1px dashed #212121; +} +/* line 255, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-low .remove { + height: 38px; + line-height: 38px; + font-size: 30px; +} +/* line 260, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-low .remove:after { + line-height: 38px; +} +/* line 264, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-low .remove:after { + color: #212121; + opacity: 0.7; +} +/* line 268, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-low .remove:hover:after { + opacity: 1; +} +/* line 272, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-low .order-up, .h5p-li > .list-item-title-bar.importance-low .order-down { + width: 19px; + height: 19px; + background: #d0d0d1; + font-size: 16px; + line-height: 19px; +} +/* line 279, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-low .order-up:hover, .h5p-li > .list-item-title-bar.importance-low .order-down:hover { + background: #deddde; +} +/* line 283, ../scss/_form-groups.scss */ +.h5p-li > .list-item-title-bar.importance-low .order-up:after, .h5p-li > .list-item-title-bar.importance-low .order-down:after { + color: #212121; +} + +/* line 291, ../scss/_form-groups.scss */ +.group.expanded > .content, +.listgroup.expanded > .content { + display: block; +} + +/* line 296, ../scss/_form-groups.scss */ +.listgroup > .list-item-title-bar > .h5peditor-label { + cursor: pointer; +} + +/* line 301, ../scss/_form-groups.scss */ +.list-item-title-bar > .title:before, +.group > .title:before { + content: "\e566"; + font-family: "H5P"; + margin-right: 5px; +} +/* line 307, ../scss/_form-groups.scss */ +.list-item-title-bar > .title:focus:before, +.group > .title:focus:before { + outline: 1px dashed #FFFFFF; +} + +/* line 311, ../scss/_form-groups.scss */ +.listgroup.expanded > .list-item-title-bar > .h5peditor-label:before, +.expanded > .title:before { + content: "\e565"; +} + +/* line 315, ../scss/_form-groups.scss */ +.listgroup > .group.field { + margin: 0; + padding: 0; + min-width: 0; +} + +@-moz-document url-prefix() { + /* line 321, ../scss/_form-groups.scss */ + .listgroup > .group.field { + display: table-column; + } +} +/* line 325, ../scss/_form-groups.scss */ +.content { + display: block; + margin: 0; + padding: 20px; + border: 1px solid #d0d0d1; + border-top: none; + background: #FFFFFF; +} + +/* line 334, ../scss/_form-groups.scss */ +.common { + margin-top: 20px; +} +/* line 337, ../scss/_form-groups.scss */ +.common > .h5peditor-label { + margin: 0; + padding: 0 10px; + cursor: pointer; + font-size: 1em; +} +/* line 346, ../scss/_form-groups.scss */ +.common > .h5peditor-label > .icon:before { + content: "\e565"; + font-family: "H5P"; + margin-right: 5px; +} +/* line 351, ../scss/_form-groups.scss */ +.common > .h5peditor-label:hover > .icon { + opacity: 1; +} +/* line 355, ../scss/_form-groups.scss */ +.common > .h5peditor-label:focus { + outline: none; +} +/* line 359, ../scss/_form-groups.scss */ +.common > .h5peditor-label:focus > .icon:before { + outline: 1px dashed; +} +/* line 363, ../scss/_form-groups.scss */ +.common > .fields { + min-height: 2em; + padding: 20px; + border: 1px solid #d0d0d1; + border-top: none; + background: #FFFFFF; +} +/* line 370, ../scss/_form-groups.scss */ +.common > .fields > .desc { + margin: 0; + font-size: 0.875em; + color: #666; +} +/* line 376, ../scss/_form-groups.scss */ +.common > .fields p:first-child { + margin-bottom: 20px; +} +/* line 382, ../scss/_form-groups.scss */ +.common.collapsed > .h5peditor-label > .icon:before { + content: "\e566"; +} +/* line 385, ../scss/_form-groups.scss */ +.common.collapsed > .fields { + display: none; +} +/* line 390, ../scss/_form-groups.scss */ +.common.hidden { + display: none; +} + +/* line 397, ../scss/_form-groups.scss */ +.h5peditor-button[aria-label]:before { + content: attr(aria-label); + visibility: hidden; + position: absolute; + top: 115%; + right: -10%; + z-index: 2; + padding: 0.25em 0.75em; + background: #212121; + color: #FFFFFF; + white-space: nowrap; + font-size: 14px; + line-height: 1.5; + box-shadow: 0 0 0.5em #858585; +} +/* line 415, ../scss/_form-groups.scss */ +.h5peditor-button[aria-label]:hover:before { + visibility: visible; +} +/* line 419, ../scss/_form-groups.scss */ +.h5peditor-button[aria-label][aria-disabled="true"]:before { + display: none; +} + +/* line 4, ../scss/_h5peditor-image-edit.scss */ +.h5peditor .h5p-editing-image-button { + background: linear-gradient(to bottom, #fff 0, #f2f2f2 100%); + font-size: 14px; + color: #212121; + line-height: 28px; + padding-right: 20px; + margin-right: 0.5em; + height: 30px; + padding-left: 0; + font-weight: normal; +} +/* line 15, ../scss/_h5peditor-image-edit.scss */ +.h5peditor .h5p-editing-image-button:hover:not([disabled]) { + background: linear-gradient(to bottom, #fff 0, #d0d0d1 100%); + border-color: #999; +} +/* line 21, ../scss/_h5peditor-image-edit.scss */ +.h5peditor .h5p-editing-image-button:before { + font-family: "H5P"; + content: "\e900"; + color: #666; + padding-right: 0.3em; + padding-left: 0.45em; + vertical-align: middle; + font-size: 1.5em; + line-height: 0.9; +} +/* line 32, ../scss/_h5peditor-image-edit.scss */ +.h5peditor .h5p-editing-image-button.loading:before { + content: "\e901"; +} +/* line 36, ../scss/_h5peditor-image-edit.scss */ +.h5peditor .h5p-editing-image-button.hidden, +.h5peditor .h5p-copyright-button.hidden { + display: none !important; +} +/* line 41, ../scss/_h5peditor-image-edit.scss */ +.h5peditor .ui-dialog .h5p-editing-image-button, +.h5peditor .ui-dialog .h5p-copyright-button { + padding-left: 0.5em; +} + +/* line 1, ../scss/_h5peditor-image-edit-popup.scss */ +body.h5p-editor-image-popup { + position: relative; +} + +/* line 5, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-popup-background { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.8); + padding: 3em 1em; + box-sizing: border-box; + z-index: 101; +} + +/* line 19, ../scss/_h5peditor-image-edit-popup.scss */ +#darkroom-icons { + top: 0; + left: 0; +} + +/* line 24, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-popup-background.hidden { + display: none; +} + +/* line 28, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-popup { + display: inline-block; + position: relative; + top: 0; + left: 50%; + height: auto; + width: 100%; + max-height: 100%; + -webkit-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); + background: #fff; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* line 45, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-header { + padding: 1em 0.75em; +} + +/* line 49, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image { + max-height: 100%; + max-width: 100%; +} + +/* line 54, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image.hidden { + display: none; +} + +/* line 59, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-popup .darkroom-toolbar { + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + top: 0; +} +/* line 67, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-popup .darkroom-toolbar:before { + content: initial; +} +/* line 71, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-popup .darkroom-image-container { + padding: 32px 2em; +} +/* line 75, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-popup .darkroom-image-container .canvas-container { + box-shadow: 0 0 8px 3px rgba(0, 0, 0, 0.6); + margin: auto; +} + +/* line 81, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-header-title { + display: inline-block; + font-size: 1.25em; +} + +/* line 86, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-header-buttons { + display: inline-block; + float: right; +} + +/* line 90, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-loading { + padding: 1em; +} + +/* line 94, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-loading.hidden { + display: none; +} + +/* line 98, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-editing-container { + background: #666; +} + +/* line 103, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-header-buttons button { + padding: 0.5em 1.75em; + margin: 0 0 0 1em; + border: 1px solid #ccc; + border-radius: 0.25em; + color: #333; + cursor: pointer; + background: #f2f2f2; + background: -webkit-linear-gradient(top, #fff 0, #f2f2f2 100%); + background: -ms-linear-gradient(top, #fff 0, #f2f2f2 100%); +} +/* line 117, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-header-buttons button:hover { + background: #ededed; +} +/* line 121, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-header-buttons .h5p-done { + color: #fff; + border-color: #20588F; + background: #3673B5; + background: -webkit-linear-gradient(top, #5A94D3 0, #3673B5 100%); + background: -ms-linear-gradient(top, #5A94D3 0, #3673B5 100%); +} +/* line 130, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-header-buttons .h5p-done:hover { + background: #3275bc; + background: -webkit-linear-gradient(top, #3275bc 0, #285585 100%); + background: -ms-linear-gradient(top, #3275bc 0, #285585 100%); +} +/* line 136, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-header-buttons .h5p-remove { + background: none; + border: none; + color: #a00; + padding-right: 0; + padding-left: 0; + border-radius: 0; +} +/* line 145, ../scss/_h5peditor-image-edit-popup.scss */ +.h5p-editing-image-header-buttons .h5p-remove:hover { + background: none; + color: #e40000; +} + +/* + START HFP-409 + @deprecated (can be removed after May 2017) + Styling that lets old vtabs styling work with the editor upgrade, in Dec 2016 release +*/ +/* line 10, ../scss/_deprecated.scss */ +.h5p-vtab-wrapper > .h5p-vtab-forms .h5p-remove:after { + color: #d0d0d1; +} + +/* END HFP-409 */ +/* line 16, ../scss/application.scss */ +html, body { + margin: 0; + padding: 0; + color: #212121; + font-family: "Open Sans", sans-serif; + max-width: 960px; + position: relative; +} + +/* line 24, ../scss/application.scss */ +a { + text-decoration: none; +} + +/* line 28, ../scss/application.scss */ +.h5peditor { + font-size: 16px; + /* Placeholders - need to be on separate lines. If not, + the browsers will invalidate them */ + /* Copyright button for video & audio */ +} +/* line 31, ../scss/application.scss */ +.h5peditor .h5p-more-libraries { + font-size: 0.875em; + margin-top: 0.4em; +} +/* line 35, ../scss/application.scss */ +.h5peditor .h5peditor-single > .field.library { + border: 0; + padding: 0; +} +/* line 40, ../scss/application.scss */ +.h5peditor .errors p, +.h5peditor .h5p-errors { + color: #da0001; +} +/* line 44, ../scss/application.scss */ +.h5peditor textarea { + resize: vertical; +} +/* line 47, ../scss/application.scss */ +.h5peditor textarea, +.h5peditor .h5peditor-text, +.h5peditor .ckeditor { + -moz-box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.12); + -webkit-box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.12); + box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.12); + box-sizing: border-box; + margin: 0; + padding: 10px; + min-height: 40px; + border: 1px solid #d0d0d1; + background: #FFFFFF; + outline: none; + font-size: 16px; + word-wrap: break-word; +} +/* line 61, ../scss/application.scss */ +.h5peditor textarea.error, +.h5peditor .h5peditor-text.error, +.h5peditor .ckeditor.error { + border-color: red; +} +/* line 65, ../scss/application.scss */ +.h5peditor .h5peditor-text, .h5peditor textarea { + width: 100%; + box-sizing: border-box; +} +/* line 69, ../scss/application.scss */ +.h5peditor .h5peditor-text.error, .h5peditor textarea.error { + border-color: red; +} +/* line 75, ../scss/application.scss */ +.h5peditor ::-webkit-input-placeholder { + color: #858585; +} +/* line 78, ../scss/application.scss */ +.h5peditor :-moz-placeholder { + color: #858585; +} +/* line 81, ../scss/application.scss */ +.h5peditor ::-moz-placeholder { + color: #858585; +} +/* line 84, ../scss/application.scss */ +.h5peditor :-ms-input-placeholder { + color: #858585; +} +/* line 87, ../scss/application.scss */ +.h5peditor .h5peditor-ckeditor-placeholder { + color: #858585; +} +/* line 90, ../scss/application.scss */ +.h5peditor select { + padding: 10px 30px 10px 8px; + font-family: "Open Sans", sans-serif; + font-size: 16px; + border: 1px solid #d0d0d1; + background: #FFFFFF url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAJCAYAAADpeqZqAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAf0lEQVQY053RsQ2EMAyF4d/XwCgpkUiXXZgja6S8haigRYyRDR4NQnCXIIElN7Y/y5JNEk/jA8BinTcfbcYVp2Zz3ny0hQ4AiXYcWAERUmaSk8SREy4FMiCGcUVq/xtnWKmXN4aU+VYWXdAvbFDt5Cu6O/UW7bCnjyUgCXvzpw2xjbiHyolgTgAAAABJRU5ErkJggg==') no-repeat; + background-position: calc(100% - 10px); + -moz-box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.12); + -webkit-box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.12); + box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.12); + -moz-appearance: none; + -webkit-appearance: none; +} +/* line 101, ../scss/application.scss */ +.h5peditor select::-ms-expand { + display: none; +} +/* line 104, ../scss/application.scss */ +.h5peditor a:focus { + outline: none; +} +/* line 107, ../scss/application.scss */ +.h5peditor textarea:focus, +.h5peditor .h5peditor-text:focus { + outline: none; + background-color: #FFFFFF; + border-color: #53a0ff; +} +/* line 113, ../scss/application.scss */ +.h5peditor .h5p-ul { + padding: 0; + margin: 0; + list-style: none; +} +/* line 118, ../scss/application.scss */ +.h5peditor .h5p-ul .h5p-li { + margin: 10px 0; + padding: 0; + list-style: none; +} +/* line 10, ../scss/_mixins.scss */ +.h5peditor .h5p-ul .h5p-li:first-child { + margin-top: 0; +} +/* line 14, ../scss/_mixins.scss */ +.h5peditor .h5p-ul .h5p-li:last-child { + margin-bottom: 0; +} +/* line 123, ../scss/application.scss */ +.h5peditor .h5p-ul .h5p-li.placeholder { + box-sizing: border-box; + background: #e8f2fa; + border: dashed 2px #2782d1; +} +/* line 129, ../scss/application.scss */ +.h5peditor .h5p-ul .h5p-li:hover { + text-decoration: none; +} +/* line 133, ../scss/application.scss */ +.h5peditor .h5p-ul .h5p-li:nth-child(2).moving { + margin-top: 0; +} +/* line 137, ../scss/application.scss */ +.h5peditor .h5p-ul .h5p-li:nth-last-child(2).placeholder { + margin-bottom: 0; +} +/* line 142, ../scss/application.scss */ +.h5peditor .dimensions input, .h5peditor .coordinates input, .h5peditor .number input { + width: 75px; +} +/* line 145, ../scss/application.scss */ +.h5peditor .number input[type="range"] { + width: 300px; + float: left; + margin: 7px 8px 0 0; +} +/* line 150, ../scss/application.scss */ +.h5peditor .h5p-errors { + clear: both; +} +/* line 153, ../scss/application.scss */ +.h5peditor .h5p-add-file { + float: left; + position: relative; + background: transparent; + border: 2px dashed #dddddd; + color: #dddddd; + margin: 0.5em; + width: 4em; + height: 3em; + cursor: pointer; + outline: none; + box-sizing: border-box; + -moz-box-sizing: border-box; +} +/* line 167, ../scss/application.scss */ +.h5peditor .h5p-add-file:focus, +.h5peditor .h5p-add-file:hover { + color: #999; + border-color: #999; +} +/* line 172, ../scss/application.scss */ +.h5peditor .h5p-add-file:after { + position: absolute; + content: "+"; + font-size: 2em; + line-height: 1.425em; + width: 100%; + height: 100%; + text-align: center; +} +/* line 181, ../scss/application.scss */ +.h5peditor .h5p-add-dialog { + position: absolute; + z-index: 1; + visibility: hidden; + opacity: 0; + background: #fff; + left: 1em; + right: 1em; + top: 1em; + border: 1px solid #cdcdcd; + box-sizing: border-box; + -moz-box-sizing: border-box; + -moz-box-shadow: 0 0 8px #666; + -webkit-box-shadow: 0 0 8px #666; + box-shadow: 0 0 8px #666; + -moz-transition: visibility 0s 0.2s, opacity 0.2s; + -o-transition: visibility 0s 0.2s, opacity 0.2s; + -webkit-transition: visibility 0s, opacity 0.2s; + -webkit-transition-delay: 0.2s, 0s; + transition: visibility 0s 0.2s, opacity 0.2s; +} +/* line 196, ../scss/application.scss */ +.h5peditor .h5p-add-dialog.h5p-open { + visibility: visible; + opacity: 1; + -moz-transition: visibility 0s 0s, opacity 0.2s; + -o-transition: visibility 0s 0s, opacity 0.2s; + -webkit-transition: visibility 0s, opacity 0.2s; + -webkit-transition-delay: 0s, 0s; + transition: visibility 0s 0s, opacity 0.2s; +} +/* line 202, ../scss/application.scss */ +.h5peditor .h5p-add-dialog .h5p-dialog-box { + text-align: center; + padding: 1em 0.5em; +} +/* line 207, ../scss/application.scss */ +.h5peditor .h5p-add-dialog .h5p-buttons { + padding: 0.5em; + border-top: 1px solid #cdcdcd; + background: #ddd; + text-align: right; +} +/* line 213, ../scss/application.scss */ +.h5peditor .h5p-add-dialog .h5p-cancel { + margin-left: 0.5em; + color: #b83c3c; + background: transparent; + border: 0; + cursor: pointer; +} +/* line 220, ../scss/application.scss */ +.h5peditor .h5p-add-dialog .h5p-cancel:focus, +.h5peditor .h5p-add-dialog .h5p-cancel:hover { + color: #e20d0d; + background: transparent; +} +/* line 226, ../scss/application.scss */ +.h5peditor .h5p-or { + border-bottom: 1px solid #cdcdcd; + padding: 0; + margin: 0 1em; + text-align: center; + height: 0.5em; + line-height: 1em; +} +/* line 233, ../scss/application.scss */ +.h5peditor .h5p-or > span { + background: #fff; + padding: 0 0.5em; +} +/* line 238, ../scss/application.scss */ +.h5peditor .h5p-file-url { + text-align: center; +} +/* line 241, ../scss/application.scss */ +.h5peditor .h5p-thumbnail { + margin: 0.5em; + width: 4em; + height: 3em; + display: block; + float: left; + position: relative; + -moz-box-shadow: 0 0 10px 0 #666666; + -webkit-box-shadow: 0 0 10px 0 #666666; + box-shadow: 0 0 10px 0 #666666; + border: 1px solid #fff; + box-sizing: border-box; + -moz-box-sizing: border-box; +} +/* line 253, ../scss/application.scss */ +.h5peditor .h5p-thumbnail .h5p-remove { + position: absolute; + top: 0; + right: 0; + cursor: pointer; + outline: none; + width: 1em; + height: 1em; + line-height: 1em; + overflow: hidden; + text-indent: -0.4em; + padding: 0.065em; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60); + opacity: 0.6; +} +/* line 267, ../scss/application.scss */ +.h5peditor .h5p-thumbnail .h5p-remove:hover, +.h5peditor .h5p-thumbnail .h5p-remove:focus { + filter: progid:DXImageTransform.Microsoft.Alpha(enabled=false); + opacity: 1; +} +/* line 271, ../scss/application.scss */ +.h5peditor .h5p-thumbnail .h5p-remove:after { + font-family: "H5P"; + font-size: 1.4em; + color: #fff; + content: "\e890"; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60); + opacity: 0.6; +} +/* line 279, ../scss/application.scss */ +.h5peditor .h5p-type { + position: absolute; + width: 100%; + height: 100%; + font-size: 0.75em; + line-height: 4em; + display: block; + text-align: center; + background: #000; + color: #fff; + cursor: pointer; +} +/* line 291, ../scss/application.scss */ +.h5peditor .file { + position: relative; + float: left; +} +/* line 295, ../scss/application.scss */ +.h5peditor .file.field { + float: none; +} +/* line 298, ../scss/application.scss */ +.h5peditor .file .thumbnail { + display: inline-block; + margin: 10px 10px 10px 0; + -moz-box-shadow: 0 0 10px 0 #666666; + -webkit-box-shadow: 0 0 10px 0 #666666; + box-shadow: 0 0 10px 0 #666666; + border: 1px solid #fff; + cursor: pointer; +} +/* line 305, ../scss/application.scss */ +.h5peditor .file .add { + display: inline-block; + cursor: pointer; + padding: 0.5em 1.5em 0.5em 1.2em; + background: linear-gradient(to bottom, #fbfbfb 0, #f2f2f2 100%); + border: 1px solid #d0d0d1; + border-radius: 0.25em; + color: #222222; + font-weight: bold; +} +/* line 315, ../scss/application.scss */ +.h5peditor .file .add:hover { + background: #ededed; +} +/* line 319, ../scss/application.scss */ +.h5peditor .file .add:focus { + box-shadow: 0 0 16px 0 rgba(133, 188, 255, 0.84); +} +/* line 323, ../scss/application.scss */ +.h5peditor .file .add .h5peditor-field-file-upload-text:before { + font-family: "H5P"; + content: "\e902"; + color: #39c943; + margin-right: 1em; +} +/* line 330, ../scss/application.scss */ +.h5peditor .file .remove { + display: block; + position: absolute; + top: 7px; + right: 7px; + cursor: pointer; +} +/* line 337, ../scss/application.scss */ +.h5peditor .file .remove:before { + font-family: "H5P"; + font-size: 1.4em; + color: #fff; + content: "\e890"; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60); + opacity: 0.6; + text-shadow: rgba(0, 0, 0, 0.4) 0 0 4px, rgba(0, 0, 0, 0.4) 0 0 4px, rgba(0, 0, 0, 0.4) 0 0 4px; +} +/* line 345, ../scss/application.scss */ +.h5peditor .file .remove:hover { + text-decoration: none; +} +/* line 348, ../scss/application.scss */ +.h5peditor .file .remove:hover:before { + color: #fff; + filter: progid:DXImageTransform.Microsoft.Alpha(enabled=false); + opacity: 1; + text-shadow: rgba(0, 0, 0, 0.4) 0 0 4px, rgba(0, 0, 0, 0.4) 0 0 4px, rgba(0, 0, 0, 0.4) 0 0 4px; +} +/* line 353, ../scss/application.scss */ +.h5peditor .file img { + max-width: 100%; + vertical-align: bottom; +} +/* line 358, ../scss/application.scss */ +.h5peditor .video .file, .h5peditor .audio .file { + position: static; + overflow: visible; +} +/* line 361, ../scss/application.scss */ +.h5peditor .video .file .thumbnail, .h5peditor .video .file .add, .h5peditor .audio .file .thumbnail, .h5peditor .audio .file .add { + float: left; +} +/* line 364, ../scss/application.scss */ +.h5peditor .video .file .add, .h5peditor .audio .file .add { + margin-top: 8px; +} +/* line 367, ../scss/application.scss */ +.h5peditor .video .file .thumbnail, .h5peditor .audio .file .thumbnail { + overflow: visible; + position: relative; + cursor: auto; +} +/* line 372, ../scss/application.scss */ +.h5peditor .video .file .remove, .h5peditor .audio .file .remove { + top: -3px; + right: -5px; +} +/* line 376, ../scss/application.scss */ +.h5peditor .video .file .type, .h5peditor .audio .file .type { + padding: 16px 8px 4px; + background: #000; + color: #fff; + font-size: 10px; +} +/* line 382, ../scss/application.scss */ +.h5peditor .video .file .h5peditor-uploading, .h5peditor .audio .file .h5peditor-uploading { + float: left; + margin: 0.5em; +} +/* line 387, ../scss/application.scss */ +.h5peditor .libwrap { + margin-top: 20px; +} +/* line 390, ../scss/application.scss */ +.h5peditor .libwrap:empty { + margin-top: 0; +} +/* line 394, ../scss/application.scss */ +.h5peditor input[type="checkbox"] { + margin: 4px 4px 4px 0; + vertical-align: bottom; +} +/* line 398, ../scss/application.scss */ +.h5peditor .moving { + position: absolute; + z-index: 1; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); + opacity: 0.8; + -webkit-transform: translateZ(0); +} +/* line 404, ../scss/application.scss */ +.h5peditor .moving .h5peditor-label { + cursor: grabbing; + cursor: -moz-grabbing; + cursor: -webkit-grabbing; +} +/* line 411, ../scss/application.scss */ +.h5peditor .h5peditor-uploading, .h5peditor .h5peditor-loading { + padding-top: 10px; + padding-bottom: 6px; + font-size: 14px; +} +/* line 416, ../scss/application.scss */ +.h5peditor .h5peditor-loading { + padding: 0.875em 0 1em 3.25em; + font-style: italic; +} +/* line 421, ../scss/application.scss */ +.h5peditor .h5p-copyright-button { + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + border-radius: 0.25em; + height: 30px; + background: linear-gradient(to bottom, #fff 0, #f2f2f2 100%); + border: 1px solid #d0d0d1; + color: #212121; + font-size: 14px; + line-height: 28px; + padding-right: 20px; + padding-left: 0; + clear: both; + font-weight: normal; +} +/* line 434, ../scss/application.scss */ +.h5peditor .h5p-copyright-button:before { + font-family: "H5P"; + content: "\e88f"; + color: #666; + padding: 0 0.25em 0 0.25em; + vertical-align: middle; + font-size: 1.5em; + line-height: 0.9; +} +/* line 444, ../scss/application.scss */ +.h5peditor .h5p-copyright-button:hover:not([disabled]) { + background: linear-gradient(to bottom, #fff 0, #d0d0d1 100%); + text-decoration: none; + border-color: #999; +} +/* line 452, ../scss/application.scss */ +.h5peditor .field.file > .h5p-copyright-button, +.h5peditor .field.video > .h5p-copyright-button, +.h5peditor .field.audio > .h5p-copyright-button { + float: left; +} +/* line 458, ../scss/application.scss */ +.h5peditor .h5p-editor-dialog { + position: absolute; + z-index: 1; + margin: 5.5em 0 1em; + visibility: hidden; + opacity: 0; + height: 0; + overflow: hidden; + background: #fff; + -moz-box-shadow: 0 0 8px #666; + -webkit-box-shadow: 0 0 8px #666; + box-shadow: 0 0 8px #666; + -moz-transition: visibility 0s 0.2s, height 0s 0.2s, opacity 0.2s, margin-top 0.2s; + -o-transition: visibility 0s 0.2s, height 0s 0.2s, opacity 0.2s, margin-top 0.2s; + -webkit-transition: visibility 0s, height 0s, opacity 0.2s, margin-top 0.2s; + -webkit-transition-delay: 0.2s, 0.2s, 0s, 0s; + transition: visibility 0s 0.2s, height 0s 0.2s, opacity 0.2s, margin-top 0.2s; +} +/* line 470, ../scss/application.scss */ +.h5peditor .h5p-editor-dialog.h5p-open { + margin-top: 3.5em; + visibility: visible; + opacity: 1; + height: auto; + -moz-transition: visibility 0s 0s, height 0s 0s, opacity 0.2s, margin-top 0.2s; + -o-transition: visibility 0s 0s, height 0s 0s, opacity 0.2s, margin-top 0.2s; + -webkit-transition: visibility 0s, height 0s, opacity 0.2s, margin-top 0.2s; + -webkit-transition-delay: 0s, 0s, 0s, 0s; + transition: visibility 0s 0s, height 0s 0s, opacity 0.2s, margin-top 0.2s; +} +/* line 478, ../scss/application.scss */ +.h5peditor .h5p-editor-dialog > .field { + margin: 0; + border: 0; + box-shadow: none; +} +/* line 484, ../scss/application.scss */ +.h5peditor .h5p-editor-dialog .content { + border: none; + background: #FFFFFF; +} +/* line 488, ../scss/application.scss */ +.h5peditor .h5p-editor-dialog .content .h5peditor-label { + font-size: 18px; + font-weight: 600; +} +/* line 494, ../scss/application.scss */ +.h5peditor .h5p-editor-dialog .h5p-close { + color: #494949; +} +/* line 497, ../scss/application.scss */ +.h5peditor .h5p-editor-dialog .h5p-close:before { + font-size: 2em; + right: -0.125em; + top: 0; + position: absolute; + font-family: "H5P"; + content: "\e894"; + line-height: 1em; + -moz-transition: scale 0.2s; + -o-transition: scale 0.2s; + -webkit-transition: scale 0.2s; + transition: scale 0.2s; +} +/* line 508, ../scss/application.scss */ +.h5peditor .h5p-editor-dialog .h5p-close:hover:before { + -moz-transform: scale(1.1, 1.1); + -ms-transform: scale(1.1, 1.1); + -webkit-transform: scale(1.1, 1.1); + transform: scale(1.1, 1.1); +} +/* line 514, ../scss/application.scss */ +.h5peditor .h5p-li > .content > .library { + border: 0; + padding: 0; +} + +/* Placed this outside of .h5peditor context above. Don't want it to be more + specific than neccessary (because of overriding) */ +/* line 521, ../scss/application.scss */ +.h5peditor-button-textual { + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + border-radius: 0.25em; + background: #747275; + background-image: linear-gradient(#7b797c 50%, transparent 50%, transparent); + display: inline-block; + width: auto; + margin: 10px 0 0 0; + padding: 0 20px; + box-sizing: border-box; + height: 38px; + border: 1px solid #d0d0d1; + font-size: 16px; + font-family: "Open Sans", sans-serif; + line-height: 38px; + color: #FFFFFF; + cursor: pointer; + font-weight: 600; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* line 542, ../scss/application.scss */ +.h5peditor-button-textual:before, .h5peditor-button-textual:after { + color: #FFFFFF; +} +/* line 547, ../scss/application.scss */ +.h5peditor-button-textual:hover { + background: #636164; + background-image: linear-gradient(#6b696c 50%, transparent 50%, transparent); + text-decoration: none; +} +/* line 554, ../scss/application.scss */ +.h5peditor-button-textual.importance-high { + background: #2579C6; + background-image: linear-gradient(#3080c9 50%, transparent 50%, transparent); + border-color: #1f67a8; + text-transform: uppercase; + height: 42px; + line-height: 42px; +} +/* line 563, ../scss/application.scss */ +.h5peditor-button-textual.importance-high:hover:not([disabled]) { + background: #1f67a8; + background-image: linear-gradient(#2a6fac 50%, transparent 50%, transparent); + border-color: #1f67a8; +} +/* line 571, ../scss/application.scss */ +.h5peditor-button-textual.importance-low { + background: #f5f5f5; + background-image: linear-gradient(#eeeeef 50%, transparent 50%, transparent); + border-color: #d0d0d1; + color: #212121; +} +/* line 578, ../scss/application.scss */ +.h5peditor-button-textual.importance-low:before, .h5peditor-button-textual.importance-low:after { + color: #212121; +} +/* line 583, ../scss/application.scss */ +.h5peditor-button-textual.importance-low:hover:not([disabled]) { + background: #deddde; + background-image: linear-gradient(#deddde 50%, transparent 50%, transparent); + border-color: #deddde; +} + +/* line 591, ../scss/application.scss */ +.h5peditor-field-description, +.h5p-help-text { + font-size: 12px; + margin-top: 4px; + margin-bottom: 8px; + font-weight: 500; + color: #434446; + line-height: 15px; + letter-spacing: 0.5px; +} + +/* line 602, ../scss/application.scss */ +.h5peditor-form { + position: relative; + padding: 20px; + background: #fcfcfc; + border: 1px solid #d0d0d1; +} + +/* line 609, ../scss/application.scss */ +.h5peditor-label { + display: block; + margin-bottom: 6px; + font-weight: 600; + font-size: 16px; + color: #454347; +} + +/* line 617, ../scss/application.scss */ +#h5peditor-uploader { + position: absolute; + width: 1px; + height: 1px; + top: -1px; + border: 0; + overflow: hidden; +} + +/* line 626, ../scss/application.scss */ +.h5p-tutorial-url { + font-size: 0.875em; +} + +/* line 630, ../scss/application.scss */ +.h5p-tutorial-url:before { + font-family: "H5P"; + content: "\e889"; + font-size: 1.5em; + position: relative; + top: .2em; + left: .2em; +} + +/* line 639, ../scss/application.scss */ +.h5peditor-widget-select { + overflow: hidden; + margin: 0 0 -1px; + padding: 0; + list-style: none; +} + +/* line 645, ../scss/application.scss */ +.h5peditor-widget-option { + float: right; + border: 1px solid #ccc; + border-bottom: 0; + margin-left: 0.5em; + padding: 0.6em 1em; + color: #0E1A25; + font-size: 0.875em; + background: #f5f5f5; + line-height: 1.285714286em; + cursor: pointer; + outline: none; +} + +/* line 658, ../scss/application.scss */ +.h5peditor-widget-option:hover { + color: #000; +} + +/* line 661, ../scss/application.scss */ +.h5peditor-widget-option:active { + color: #8e636a; + /* Pink chocolate */ +} + +/* line 664, ../scss/application.scss */ +.h5peditor-widget-active { + background: #fff; + line-height: 1.357142857em; +} + +/* line 668, ../scss/application.scss */ +.h5peditor-widgets > .h5peditor-widget-wrapper { + border: 1px solid #ccc; + margin: 0 0 0.25em; + padding: 0.5em; +} + +/* line 673, ../scss/application.scss */ +.h5peditor-widgets > .h5peditor-label { + float: left; + margin-top: 5px; +} + +/* line 677, ../scss/application.scss */ +.h5p-editor-iframe { + margin-bottom: 1em; +} + +/* line 680, ../scss/application.scss */ +.h5peditor-required:after { + content: "*"; + color: #da0001; + margin-left: 0.25em; +} + +/* Help CKEditor blend into the H5PEditor */ +/* line 687, ../scss/application.scss */ +.h5peditor .cke_bottom, +.h5peditor .cke_top { + background: #d0d0d1; +} + +/* line 691, ../scss/application.scss */ +.h5peditor .cke_chrome { + border: 1px solid #f5f5f5; + background: #d0d0d1; +} + +/* line 695, ../scss/application.scss */ +.h5peditor .cke_contents, +.h5peditor .cke_toolgroup, +.h5peditor .cke_combo_button { + border: 1px solid #f5f5f5; +} diff --git a/html/moodle2/mod/hvp/editor/styles/scss/_deprecated.scss b/html/moodle2/mod/hvp/editor/styles/scss/_deprecated.scss new file mode 100755 index 0000000000..58311bacaa --- /dev/null +++ b/html/moodle2/mod/hvp/editor/styles/scss/_deprecated.scss @@ -0,0 +1,13 @@ +@import 'variables'; + +// This styling is here for backwards compatibility between releases, and can be removed later + +/* + START HFP-409 + @deprecated (can be removed after May 2017) + Styling that lets old vtabs styling work with the editor upgrade, in Dec 2016 release +*/ +.h5p-vtab-wrapper > .h5p-vtab-forms .h5p-remove:after { + color: $form-border-color; +} +/* END HFP-409 */ diff --git a/html/moodle2/mod/hvp/editor/styles/scss/_form-field.scss b/html/moodle2/mod/hvp/editor/styles/scss/_form-field.scss new file mode 100755 index 0000000000..4fe63ff727 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/styles/scss/_form-field.scss @@ -0,0 +1,40 @@ +@import 'variables'; +@import 'mixins'; + +.field { + @include field-margin($padding); + font-size: $font-size-normal; + padding: 0; + + // Assumes last group is `Behavioural settings`, which should + // be grouped with the bottom group `Settings and texts`. + .tree > &.group:last-child { + margin-bottom: 0; + } + + .fields > &.group { + @include field-margin($min-padding); + } + + &.boolean .h5peditor-label { + display: inline; + } + + &.video, &.image, &.file, &.audio { + position: relative; + } + + .h5p-editor-image-buttons { + float: left; + clear: both; + } + + .library { + border: 0; + } + + &.importance-high > .h5peditor-label-wrapper > .h5peditor-label { + font-size: $font-size-large; + color: #356593; + } +} diff --git a/html/moodle2/mod/hvp/editor/styles/scss/_form-groups.scss b/html/moodle2/mod/hvp/editor/styles/scss/_form-groups.scss new file mode 100755 index 0000000000..baccba7f97 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/styles/scss/_form-groups.scss @@ -0,0 +1,422 @@ +@import 'variables'; +@import 'mixins'; + +%title-bar-base { + visibility: inherit; + cursor: pointer; +} +%title-bar-importance-high { + background: $form-item-importance-high-background; + border: 1px solid $form-item-importance-high-border-color; + height: $form-item-height-large; +} +%title-bar-text-importance-high { + font-size: $font-size-normal; + font-weight: 600; + line-height: $form-item-height-large; + // Fix white text on dark background blockiness + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +%title-bar-importance-medium { + background: $form-item-importance-medium-background; + border: 1px solid $form-item-importance-medium-border-color; + height: $form-item-height-normal; +} +%title-bar-text-importance-medium { + font-size: $font-size-normal; + font-weight: 600; + color: $white; + line-height: $form-item-height-normal; + // Fix white text on dark background blockiness + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +%title-bar-importance-low { + background: $form-item-importance-low-background; + height: $form-item-height-normal; + border: 1px solid $form-border-color; +} +%title-bar-text-importance-low { + font-size: $font-size-normal; + font-weight: 400; + color: $text-color; + line-height: $form-item-height-normal; +} + +.group { + border: none; + + & > .title { + @extend %title-bar-base; + @extend %title-bar-importance-medium; + @extend %title-bar-text-importance-medium; + padding: 0 $min-padding; + outline: none; + } + + & > .content { + display: none; + margin: 0; + padding: $padding; + border: 1px solid $form-border-color; + border-top: none; + background: $form-content-background; + } + + &.importance-high > .title { + @extend %title-bar-importance-high; + @extend %title-bar-text-importance-high; + color: $white; + } + + &.importance-low > .title { + @extend %title-bar-importance-low; + @extend %title-bar-text-importance-low; + color: $text-color; + + &:focus:before { + outline: 1px dashed; + } + } +} + +// Zebra pattern for lists and groups +.common, .content { + .content { + background-color: $form-background; + + .content { + background-color: $white; + + .content { + background-color: $form-background; + + .content { + background-color: $white; + + .content { + background-color: $form-background; + + .content { + background-color: $white; + } + } + } + } + } + } +} + +.h5p-li > .list-item-title-bar { + @extend %title-bar-base; + @extend %title-bar-importance-medium; + color: $white; + + & > .h5peditor-label { + @extend %title-bar-text-importance-medium; + + overflow: hidden; + margin: 0 $form-item-buttons-width-normal 0 0; + padding: 0 $min-padding; + white-space: nowrap; + line-height: $form-item-height-normal; + outline: none; + text-overflow: ellipsis; + } + + &.importance-high > .h5peditor-label { + @extend %title-bar-text-importance-high; + } + + &.importance-medium > .h5peditor-label { + @extend %title-bar-text-importance-medium; + } + + &.importance-low > .h5peditor-label { + @extend %title-bar-text-importance-low; + } + + & > .list-actions { + height: 100%; + float: right; + position: relative; + } + + .remove { + cursor: pointer; + width: 1.25em; + height: $form-item-height-normal; + font-size: 1.75em; + display: inline-block; + + &:hover { + opacity: 1; + text-decoration: none; + } + } + + .remove:after { + font-family: $icon-font-family; + content: "\e890"; + opacity: 0.7; + display: inline-block; + line-height: $form-item-height-normal; + } + + .remove:hover:after { + opacity: 1; + } + + .order-group { + text-align: center; + float: right; + background: $form-item-importance-medium-border-color; + font-size: $font-size-normal; + cursor: pointer; + } + + .order-up, .order-down { + width: $form-item-height-normal / 2; + height: $form-item-height-normal / 2; + line-height: $form-item-height-normal / 2; + + &:hover { + background: $form-item-importance-medium-background-hover; + } + + &:after { + font-family: $icon-font-family; + content: "\e58e"; + display: inline-block; + } + } + + .order-down:after { + content: "\e58f"; + } + + &.importance-high { + @extend %title-bar-importance-high; + + & > .title { + @extend %title-bar-text-importance-high; + border: none; + margin: 0 $form-item-buttons-width-large 0 0; + } + + .remove { + height: $form-item-height-large; + line-height: $form-item-height-large; + font-size: 40px; + + &:after { + line-height: $form-item-height-large; + opacity: 0.7; + } + &:hover:after { + opacity: 1; + } + } + + .order-group { + background: $form-item-importance-high-border-color; + font-size: $font-size-large; + } + + .order-up, .order-down { + width: $form-item-height-large / 2; + height: $form-item-height-large / 2; + line-height: $form-item-height-large / 2; + + &:hover { + background: $form-item-importance-high-background-hover; + } + } + } + + &.importance-low { + @extend %title-bar-importance-low; + + & > .title { + @extend %title-bar-text-importance-low; + border: none; + margin: 0 $form-item-buttons-width-normal 0 0; + + &:before { + color: $text-color; + } + &:focus:before { + outline: 1px dashed $text-color; + } + } + + .remove { + height: $form-item-height-normal; + line-height: $form-item-height-normal; + font-size: 30px; + + &:after { + line-height: $form-item-height-normal; + } + } + .remove:after { + color: $text-color; + opacity: 0.7; + } + .remove:hover:after { + opacity: 1; + } + + .order-up, .order-down { + width: $form-item-height-normal / 2; + height: $form-item-height-normal / 2; + background: $form-item-importance-low-border-color; + font-size: $font-size-normal; + line-height: $form-item-height-normal / 2; + + &:hover { + background: $form-item-importance-low-background-hover; + } + + &:after { + color: $text-color; + } + } + } +} +.group.expanded, +.listgroup.expanded { + & > .content { + display: block; + } +} + +.listgroup > .list-item-title-bar > .h5peditor-label { + cursor: pointer; +} +.list-item-title-bar > .title, +.group > .title { + &:before { + content: "\e566"; + font-family: $icon-font-family; + margin-right: $min-padding/2; + } + + &:focus:before { + outline: 1px dashed $white; + } +} +.listgroup.expanded > .list-item-title-bar > .h5peditor-label:before, +.expanded > .title:before { + content: "\e565"; +} +.listgroup > .group.field { + margin: 0; + padding: 0; + min-width: 0; +} +@-moz-document url-prefix() { + .listgroup > .group.field { + display: table-column; + } +} +.content { + display: block; + margin: 0; + padding: $padding; + border: 1px solid $form-border-color; + border-top: none; + background: $form-content-background; +} + +.common { + margin-top: $padding; + + & > .h5peditor-label { + @extend %title-bar-base; + @extend %title-bar-importance-low; + @extend %title-bar-text-importance-low; + margin: 0; + padding: 0 $min-padding; + cursor: pointer; + font-size: 1em; + + & > .icon:before { + content: "\e565"; + font-family: $icon-font-family; + margin-right: 5px; + } + &:hover > .icon { + opacity: 1; + } + + &:focus { + outline: none; + } + + &:focus > .icon:before { + outline: 1px dashed; + } + } + & > .fields { + min-height: 2em; + padding: $padding; + border: 1px solid $form-border-color; + border-top: none; + background: $form-content-background; + + & > .desc { + margin: 0; + font-size: 0.875em; + color: #666; + } + + p:first-child { + margin-bottom: $padding; + } + } + + &.collapsed { + & > .h5peditor-label > .icon:before { + content: "\e566"; + } + & > .fields { + display: none; + } + } + + &.hidden { + display: none; + } +} + +.h5peditor-button[aria-label] { + + &:before { + content: attr(aria-label); + visibility: hidden; + + position: absolute; + top: 115%; + right: -10%; + z-index: 2; + + padding: 0.25em 0.75em; + background: $text-color; + color: $white; + white-space: nowrap; + font-size: $font-size-small; + line-height: 1.5; + box-shadow: 0 0 0.5em $form-input-placeholder-color; + } + + &:hover:before { + visibility: visible; + } + + &[aria-disabled="true"]:before { + display: none; + } +} diff --git a/html/moodle2/mod/hvp/editor/styles/scss/_h5peditor-image-edit-popup.scss b/html/moodle2/mod/hvp/editor/styles/scss/_h5peditor-image-edit-popup.scss new file mode 100755 index 0000000000..20119276f4 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/styles/scss/_h5peditor-image-edit-popup.scss @@ -0,0 +1,149 @@ +body.h5p-editor-image-popup { + position: relative; +} + +.h5p-editing-image-popup-background { + position: absolute; + top: 0; + left: 0; + + width: 100%; + height: 100%; + + background: rgba(0,0,0,0.8); + padding: 3em 1em; + box-sizing: border-box; + z-index: 101; +} + +#darkroom-icons { + top:0; + left:0; +} + +.h5p-editing-image-popup-background.hidden { + display: none; +} + +.h5p-editing-image-popup { + display: inline-block; + position: relative; + top: 0; + left: 50%; + height: auto; + width: 100%; + max-height: 100%; + -webkit-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); + background: #fff; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.h5p-editing-image-header { + padding: 1em 0.75em; +} + +.h5p-editing-image { + max-height:100%; + max-width:100%; +} + +.h5p-editing-image.hidden { + display: none; +} + +.h5p-editing-image-popup { + .darkroom-toolbar { + position: relative; + -webkit-border-radius:0; + -moz-border-radius:0; + border-radius:0; + top:0; + } + + .darkroom-toolbar:before { + content: initial; + } + + .darkroom-image-container { + padding: 32px 2em; + } + + .darkroom-image-container .canvas-container { + box-shadow: 0 0 8px 3px rgba(0, 0, 0, 0.6); + margin: auto; + } +} + +.h5p-editing-image-header-title { + display: inline-block; + font-size: 1.25em; +} + +.h5p-editing-image-header-buttons { + display: inline-block; + float: right; +} +.h5p-editing-image-loading { + padding: 1em; +} + +.h5p-editing-image-loading.hidden { + display: none; +} + +.h5p-editing-image-editing-container { + background: #666; +} + +.h5p-editing-image-header-buttons { + button { + padding: 0.5em 1.75em; + margin: 0 0 0 1em; + + border: 1px solid #ccc; + border-radius: 0.25em; + color: #333; + cursor: pointer; + + background: #f2f2f2; + background: -webkit-linear-gradient(top,#fff 0,#f2f2f2 100%); + background: -ms-linear-gradient(top,#fff 0,#f2f2f2 100%); + } + + button:hover { + background: #ededed; + } + + .h5p-done { + color: #fff; + border-color: #20588F; + + background: #3673B5; + background: -webkit-linear-gradient(top,#5A94D3 0,#3673B5 100%); + background: -ms-linear-gradient(top,#5A94D3 0,#3673B5 100%); + } + + .h5p-done:hover { + background: #3275bc; + background: -webkit-linear-gradient(top,#3275bc 0,#285585 100%); + background: -ms-linear-gradient(top,#3275bc 0,#285585 100%); + } + + .h5p-remove { + background: none; + border: none; + color: #a00; + padding-right: 0; + padding-left: 0; + border-radius: 0; + } + + .h5p-remove:hover { + background: none; + color: #e40000; + } +} diff --git a/html/moodle2/mod/hvp/editor/styles/scss/_h5peditor-image-edit.scss b/html/moodle2/mod/hvp/editor/styles/scss/_h5peditor-image-edit.scss new file mode 100755 index 0000000000..5dbc8694fc --- /dev/null +++ b/html/moodle2/mod/hvp/editor/styles/scss/_h5peditor-image-edit.scss @@ -0,0 +1,45 @@ +@import 'variables'; + +.h5peditor { + .h5p-editing-image-button { + background: linear-gradient(to bottom, #fff 0, #f2f2f2 100%); + font-size: $font-size-small; + color: $black; + line-height: $form-item-height-small; + padding-right: $padding; + margin-right: 0.5em; + height: 30px; + padding-left: 0; + font-weight: normal; + + &:hover:not([disabled]) { + background: linear-gradient(to bottom, #fff 0, #d0d0d1 100%); + border-color: #999; + } + } + + .h5p-editing-image-button:before { + font-family: $icon-font-family; + content: "\e900"; + color: #666; + padding-right: 0.3em; + padding-left: 0.45em; + vertical-align: middle; + font-size: 1.5em; + line-height: 0.9; + } + + .h5p-editing-image-button.loading:before { + content: "\e901"; + } + + .h5p-editing-image-button.hidden, + .h5p-copyright-button.hidden { + display: none !important; + } + + .ui-dialog .h5p-editing-image-button, + .ui-dialog .h5p-copyright-button { + padding-left: 0.5em; + } +} diff --git a/html/moodle2/mod/hvp/editor/styles/scss/_mixins.scss b/html/moodle2/mod/hvp/editor/styles/scss/_mixins.scss new file mode 100755 index 0000000000..e78e5c6715 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/styles/scss/_mixins.scss @@ -0,0 +1,17 @@ +@mixin button-background($background, $highlight) { + background: $background; + background-image: + linear-gradient($highlight 50%, transparent 50%, transparent); +} + +@mixin field-margin($margin) { + margin: $margin 0; + + &:first-child { + margin-top: 0; + } + + &:last-child { + margin-bottom: 0; + } +} diff --git a/html/moodle2/mod/hvp/editor/styles/scss/_variables.scss b/html/moodle2/mod/hvp/editor/styles/scss/_variables.scss new file mode 100755 index 0000000000..5029fea2cf --- /dev/null +++ b/html/moodle2/mod/hvp/editor/styles/scss/_variables.scss @@ -0,0 +1,56 @@ +// General editor +$black: #212121; +$white: #FFFFFF; +$blue: #285c8b; + +$text-color: $black; + +$font-family: 'Open Sans', sans-serif; + +$icon-font-family: 'H5P'; + +$font-size-large: 18px; +$font-size-normal: 16px; +$font-size-small: 14px; + +$min-padding: 10px; +$padding: 20px; + +// Form +$form-background: #fcfcfc; +$form-border-color: #d0d0d1; +$form-content-background: $white; + +$form-input-color: $white; +$form-input-placeholder-color: #858585; +$form-input-box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.12); + +$form-item-importance-high-background: #2579C6; +$form-item-importance-high-background-highlight: #3080c9; +$form-item-importance-high-border-color: #1f67a8; +$form-item-importance-high-background-hover: #1f67a8; +$form-item-importance-high-background-hover-highlight: #2a6fac; + +$form-item-importance-medium-background: #747275; +$form-item-importance-medium-background-highlight: #7b797c; +$form-item-importance-medium-border-color: #636164; +$form-item-importance-medium-background-hover: #636164; +$form-item-importance-medium-background-hover-highlight: #6b696c; + +$form-item-importance-low-background: #f5f5f5; +$form-item-importance-low-background-highlight: #eeeeef; +$form-item-importance-low-border-color: #d0d0d1; +$form-item-importance-low-background-hover: #deddde; +$form-item-importance-low-background-hover-highlight: #deddde; + +$form-item-height-large: 42px; // 44px total with border +$form-item-height-normal: 38px; // 40px total with border +$form-item-height-small: 28px; // 30px total with border + +$form-item-buttons-width-large: 74px; +$form-item-buttons-width-normal: 54px; +$form-item-buttons-width-small: 54px; + +// Label +$form-label: #454347; +$form-label-importance-high: #356593; diff --git a/html/moodle2/mod/hvp/editor/styles/scss/application.scss b/html/moodle2/mod/hvp/editor/styles/scss/application.scss new file mode 100755 index 0000000000..1894da3360 --- /dev/null +++ b/html/moodle2/mod/hvp/editor/styles/scss/application.scss @@ -0,0 +1,699 @@ +@import "compass/css3/border-radius"; +@import "compass/css3/box-shadow"; +@import "compass/css3/opacity"; +@import "compass/css3/text-shadow"; +@import "compass/css3/transition"; +@import "compass/css3/transform"; + +@import "variables"; +@import "mixins"; +@import "form-field"; +@import "form-groups"; +@import "h5peditor-image-edit"; +@import "h5peditor-image-edit-popup"; +@import "deprecated"; + +html, body { + margin: 0; + padding: 0; + color: $text-color; + font-family: $font-family; + max-width: 960px; + position: relative; +} +a { + text-decoration: none; +} + +.h5peditor { + font-size: 16px; + + .h5p-more-libraries { + font-size: 0.875em; + margin-top: 0.4em; + } + .h5peditor-single > .field.library { + border: 0; + padding: 0; + } + + .errors p, + .h5p-errors { + color: #da0001; + } + textarea { + resize: vertical; + } + textarea, + .h5peditor-text, + .ckeditor { + @include box-shadow($form-input-box-shadow); + box-sizing: border-box; + margin: 0; + padding: $min-padding; + min-height: 40px; + border: 1px solid $form-border-color; + background: $form-input-color; + outline: none; + font-size: 16px; + word-wrap: break-word; + + &.error { + border-color: red; + } + } + .h5peditor-text, textarea { + width: 100%; + box-sizing: border-box; + + &.error { + border-color: red; + } + } + /* Placeholders - need to be on separate lines. If not, + the browsers will invalidate them */ + ::-webkit-input-placeholder { + color: $form-input-placeholder-color; + } + :-moz-placeholder { + color: $form-input-placeholder-color; + } + ::-moz-placeholder { + color: $form-input-placeholder-color; + } + :-ms-input-placeholder { + color: $form-input-placeholder-color; + } + .h5peditor-ckeditor-placeholder { + color: $form-input-placeholder-color; + } + select { + padding: 10px 30px 10px 8px; + font-family: "Open Sans", sans-serif; + font-size: 16px; + border: 1px solid $form-border-color;; + background: $form-input-color inline-image('down.png') no-repeat; + background-position: calc(100% - 10px); + @include box-shadow($form-input-box-shadow); + -moz-appearance: none; + -webkit-appearance: none; + } + select::-ms-expand { + display: none; + } + a:focus { + outline: none; + } + textarea:focus, + .h5peditor-text:focus { + outline: none; + background-color: $white; + border-color: #53a0ff; + } + .h5p-ul { + padding: 0; + margin: 0; + list-style: none; + + .h5p-li { + @include field-margin($min-padding); + padding: 0; + list-style: none; + + &.placeholder { + box-sizing: border-box; + background: #e8f2fa; + border: dashed 2px #2782d1; + } + + &:hover { + text-decoration: none; + } + + &:nth-child(2).moving { + margin-top: 0; + } + + &:nth-last-child(2).placeholder { + margin-bottom: 0; + } + } + } + .dimensions input, .coordinates input, .number input { + width: 75px; + } + .number input[type="range"] { + width: 300px; + float: left; + margin: 7px 8px 0 0; + } + .h5p-errors { + clear: both; + } + .h5p-add-file { + float: left; + position: relative; + background: transparent; + border: 2px dashed #dddddd; + color: #dddddd; + margin: 0.5em; + width: 4em; + height: 3em; + cursor: pointer; + outline: none; + box-sizing: border-box; + -moz-box-sizing: border-box; + } + .h5p-add-file:focus, + .h5p-add-file:hover { + color: #999; + border-color: #999; + } + .h5p-add-file:after { + position: absolute; + content: "+"; + font-size: 2em; + line-height: 1.425em; + width: 100%; + height: 100%; + text-align: center; + } + .h5p-add-dialog { + position: absolute; + z-index: 1; + visibility: hidden; + opacity: 0; + background: #fff; + left: 1em; + right: 1em; + top: 1em; + border: 1px solid #cdcdcd; + box-sizing: border-box; + -moz-box-sizing: border-box; + @include box-shadow(0 0 8px #666); + @include transition(visibility 0s 0.2s, opacity 0.2s); + + &.h5p-open { + visibility: visible; + opacity: 1; + @include transition(visibility 0s 0s, opacity 0.2s); + } + + .h5p-dialog-box { + text-align: center; + padding: 1em 0.5em; + } + + .h5p-buttons { + padding: 0.5em; + border-top: 1px solid #cdcdcd; + background: #ddd; + text-align: right; + } + .h5p-cancel { + margin-left: 0.5em; + color: #b83c3c; + background: transparent; + border: 0; + cursor: pointer; + } + .h5p-cancel:focus, + .h5p-cancel:hover { + color: #e20d0d; + background: transparent; + } + } + .h5p-or { + border-bottom: 1px solid #cdcdcd; + padding: 0; + margin: 0 1em; + text-align: center; + height: 0.5em; + line-height: 1em; + & > span { + background: #fff; + padding: 0 0.5em; + } + } + .h5p-file-url { + text-align: center; + } + .h5p-thumbnail { + margin: 0.5em; + width: 4em; + height: 3em; + display: block; + float: left; + position: relative; + @include box-shadow(0 0 10px 0 #666666); + border: 1px solid #fff; + box-sizing: border-box; + -moz-box-sizing: border-box; + + .h5p-remove { + position: absolute; + top: 0; + right: 0; + cursor: pointer; + outline: none; + width: 1em; + height: 1em; + line-height: 1em; + overflow: hidden; + text-indent: -0.4em; + padding: 0.065em; + @include opacity(0.6); + } + .h5p-remove:hover, + .h5p-remove:focus { + @include opacity(1); + } + .h5p-remove:after { + font-family: $icon-font-family; + font-size: 1.4em; + color: #fff; + content: "\e890"; + @include opacity(0.6); + } + } + .h5p-type { + position: absolute; + width: 100%; + height: 100%; + font-size: 0.75em; + line-height: 4em; + display: block; + text-align: center; + background: #000; + color: #fff; + cursor: pointer; + } + .file { + position: relative; + float: left; + + &.field { + float: none; + } + .thumbnail { + display: inline-block; + margin: 10px 10px 10px 0; + @include box-shadow(0 0 10px 0 #666666); + border: 1px solid #fff; + cursor: pointer; + } + .add { + display: inline-block; + cursor: pointer; + padding: 0.5em 1.5em 0.5em 1.2em; + background: linear-gradient(to bottom, #fbfbfb 0, #f2f2f2 100%); + border: 1px solid #d0d0d1; + border-radius: 0.25em; + color: #222222; + font-weight: bold; + + &:hover { + background: #ededed; + } + + &:focus { + box-shadow: 0 0 16px 0 rgba(133,188,255,0.84); + } + + .h5peditor-field-file-upload-text:before { + font-family: $icon-font-family; + content: "\e902"; + color: #39c943; + margin-right: 1em; + } + } + .remove { + display: block; + position: absolute; + top: 7px; + right: 7px; + cursor: pointer; + } + .remove:before { + font-family: $icon-font-family; + font-size: 1.4em; + color: #fff; + content: "\e890"; + @include opacity(0.6); + @include text-shadow(rgba(black, 0.4) 0 0 4px, rgba(black, 0.4) 0 0 4px, rgba(black, 0.4) 0 0 4px); + } + .remove:hover { + text-decoration: none; + } + .remove:hover:before { + color: #fff; + @include opacity(1); + @include text-shadow(rgba(black, 0.4) 0 0 4px, rgba(black, 0.4) 0 0 4px, rgba(black, 0.4) 0 0 4px); + } + img { + max-width: 100%; + vertical-align: bottom; + } + } + .video .file, .audio .file { + position: static; + overflow: visible; + .thumbnail, .add { + float: left; + } + .add { + margin-top: 8px; + } + .thumbnail { + overflow: visible; + position: relative; + cursor: auto; + } + .remove { + top: -3px; + right: -5px; + } + .type { + padding: 16px 8px 4px; + background: #000; + color: #fff; + font-size: 10px; + } + .h5peditor-uploading { + float: left; + margin: 0.5em; + } + } + .libwrap { + margin-top: $padding; + + &:empty { + margin-top: 0; + } + } + input[type="checkbox"] { + margin: 4px 4px 4px 0; + vertical-align: bottom; + } + .moving { + position: absolute; + z-index: 1; + @include opacity(0.8); + -webkit-transform: translateZ(0); + + .h5peditor-label { + cursor: grabbing; + cursor: -moz-grabbing; + cursor: -webkit-grabbing; + } + } + + .h5peditor-uploading, .h5peditor-loading { + padding-top: 10px; + padding-bottom: 6px; + font-size: 14px; + } + .h5peditor-loading { + padding: 0.875em 0 1em 3.25em; + font-style: italic; + } + + .h5p-copyright-button { + @include border-radius(0.25em); + height: 30px; + background: linear-gradient(to bottom, #fff 0, #f2f2f2 100%); + border: 1px solid $form-border-color; + color: $black; + font-size: $font-size-small; + line-height: $form-item-height-small; + padding-right: $padding; + padding-left: 0; + clear: both; + font-weight: normal; + + &:before { + font-family: $icon-font-family; + content: "\e88f"; + color: #666; + padding: 0 0.25em 0 0.25em; + vertical-align: middle; + font-size: 1.5em; + line-height: 0.9; + } + + &:hover:not([disabled]) { + background: linear-gradient(to bottom, #fff 0, #d0d0d1 100%); + text-decoration: none; + border-color: #999; + } + } + + /* Copyright button for video & audio */ + .field.file > .h5p-copyright-button, + .field.video > .h5p-copyright-button, + .field.audio > .h5p-copyright-button { + float: left; + } + + .h5p-editor-dialog { + position: absolute; + z-index: 1; + margin: 5.5em 0 1em; + visibility: hidden; + opacity: 0; + height: 0; + overflow: hidden; + background: #fff; + @include box-shadow(0 0 8px #666); + @include transition(visibility 0s 0.2s, height 0s 0.2s, opacity 0.2s, margin-top 0.2s); + + &.h5p-open { + margin-top: 3.5em; + visibility: visible; + opacity: 1; + height: auto; + @include transition(visibility 0s 0s, height 0s 0s, opacity 0.2s, margin-top 0.2s); + } + + & > .field { + margin: 0; + border: 0; + box-shadow: none; + } + + .content { + border: none; + background: $white; + + .h5peditor-label { + font-size: $font-size-large; + font-weight: 600; + } + } + + .h5p-close { + color: #494949; + + &:before { + font-size: 2em; + right: -0.125em; + top: 0; + position: absolute; + font-family: $icon-font-family; + content: "\e894"; + line-height: 1em; + @include transition(scale 0.2s); + } + + &:hover:before { + @include scale(1.1, 1.1); + } + } + } + + .h5p-li > .content > .library { + border: 0; + padding: 0; + } +} +/* Placed this outside of .h5peditor context above. Don't want it to be more + specific than neccessary (because of overriding) */ +.h5peditor-button-textual { + @include border-radius(0.25em); + @include button-background( + $form-item-importance-medium-background, + $form-item-importance-medium-background-highlight); + display: inline-block; + width: auto; + margin: $min-padding 0 0 0; + padding: 0 $padding; + box-sizing: border-box; + height: $form-item-height-normal; + border: 1px solid $form-border-color; + font-size: $font-size-normal; + font-family: $font-family; + line-height: $form-item-height-normal; + color: $white; + cursor: pointer; + font-weight: 600; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + &:before, + &:after { + color: $white; + } + + &:hover { + @include button-background( + $form-item-importance-medium-background-hover, + $form-item-importance-medium-background-hover-highlight); + text-decoration: none; + } + + &.importance-high { + @include button-background( + $form-item-importance-high-background, + $form-item-importance-high-background-highlight); + border-color: $form-item-importance-high-border-color; + text-transform: uppercase; + height: $form-item-height-large; + line-height: $form-item-height-large; + + &:hover:not([disabled]) { + @include button-background( + $form-item-importance-high-background-hover, + $form-item-importance-high-background-hover-highlight); + border-color: $form-item-importance-high-background-hover; + } + } + + &.importance-low { + @include button-background( + $form-item-importance-low-background, + $form-item-importance-low-background-highlight); + border-color: $form-item-importance-low-border-color; + color: $black; + + &:before, + &:after { + color: $black; + } + + &:hover:not([disabled]) { + @include button-background( + $form-item-importance-low-background-hover, + $form-item-importance-low-background-hover-highlight); + border-color: $form-item-importance-low-background-hover; + } + } +} +.h5peditor-field-description, +.h5p-help-text { + font-size: 12px; + margin-top: 4px; + margin-bottom: 8px; + font-weight: 500; + color: #434446; + line-height: 15px; + letter-spacing: 0.5px; +} + +.h5peditor-form { + position: relative; + padding: 20px; + background: $form-background; + border: 1px solid $form-border-color; +} + +.h5peditor-label { + display: block; + margin-bottom: 6px; + font-weight: 600; + font-size: $font-size-normal; + color: $form-label; +} + +#h5peditor-uploader { + position: absolute; + width: 1px; + height: 1px; + top: -1px; + border: 0; + overflow: hidden; +} + +.h5p-tutorial-url { + font-size: 0.875em; +} + +.h5p-tutorial-url:before { + font-family: $icon-font-family; + content: "\e889"; + font-size: 1.5em; + position: relative; + top: .2em; + left: .2em; +} + +.h5peditor-widget-select { + overflow: hidden; + margin: 0 0 -1px; + padding: 0; + list-style: none; +} +.h5peditor-widget-option { + float: right; + border: 1px solid #ccc; + border-bottom: 0; + margin-left: 0.5em; + padding: 0.6em 1em; + color: #0E1A25; + font-size: 0.875em; + background: #f5f5f5; + line-height: 1.285714286em; + cursor: pointer; + outline: none; +} +.h5peditor-widget-option:hover { + color: #000; +} +.h5peditor-widget-option:active { + color: #8e636a; /* Pink chocolate */ +} +.h5peditor-widget-active { + background: #fff; + line-height: 1.357142857em; +} +.h5peditor-widgets > .h5peditor-widget-wrapper { + border: 1px solid #ccc; + margin: 0 0 0.25em; + padding: 0.5em; +} +.h5peditor-widgets > .h5peditor-label { + float: left; + margin-top: 5px; +} +.h5p-editor-iframe { + margin-bottom: 1em; +} +.h5peditor-required:after { + content: "*"; + color: #da0001; + margin-left: 0.25em; +} + +/* Help CKEditor blend into the H5PEditor */ +.h5peditor .cke_bottom, +.h5peditor .cke_top { + background: #d0d0d1; +} +.h5peditor .cke_chrome { + border: 1px solid #f5f5f5; + background: #d0d0d1; +} +.h5peditor .cke_contents, +.h5peditor .cke_toolgroup, +.h5peditor .cke_combo_button { + border: 1px solid #f5f5f5; +} diff --git a/html/moodle2/mod/hvp/grade.php b/html/moodle2/mod/hvp/grade.php new file mode 100755 index 0000000000..e55f67efaf --- /dev/null +++ b/html/moodle2/mod/hvp/grade.php @@ -0,0 +1,133 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * View all results for H5P Content + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +require_once(dirname(__FILE__) . '/../../config.php'); + +$id = required_param('id', PARAM_INT); +$userid = optional_param('userid', 0, PARAM_INT); + +if (! $cm = get_coursemodule_from_id('hvp', $id)) { + print_error('invalidcoursemodule'); +} +if (! $course = $DB->get_record('course', array('id' => $cm->course))) { + print_error('coursemisconf'); +} +require_course_login($course, false, $cm); + +if ($userid === (int)$USER->id) { + // If it's the same user, redirect to content. + redirect(new moodle_url('/mod/hvp/view.php', array('id' => $cm->id))); +} + +// Load H5P Content. +$hvp = $DB->get_record_sql( + "SELECT h.id, + h.name AS title, + hl.machine_name, + hl.major_version, + hl.minor_version + FROM {hvp} h + JOIN {hvp_libraries} hl ON hl.id = h.main_library_id + WHERE h.id = ?", + array($cm->instance)); + +if ($hvp === false) { + print_error('invalidhvp'); +} + +// Log content result view +new \mod_hvp\event( + 'results', 'content', + $hvp->id, $hvp->title, + $hvp->machine_name, "{$hvp->major_version}.{$hvp->minor_version}" +); + +// Set page properties. +$pageurl = new moodle_url('/mod/hvp/grade.php', array('id' => $hvp->id)); +$PAGE->set_url($pageurl); +$title = "Results for {$hvp->title}"; +$PAGE->set_title($title); +$PAGE->set_heading($course->fullname); + +// List all results for specific content +$dataviewid = 'h5p-results'; + +// Add required assets for data views +$PAGE->requires->js(new moodle_url($CFG->httpswwwroot . '/mod/hvp/library/js/jquery.js'), true); +$PAGE->requires->js(new moodle_url($CFG->httpswwwroot . '/mod/hvp/library/js/h5p-utils.js'), true); +$PAGE->requires->js(new moodle_url($CFG->httpswwwroot . '/mod/hvp/library/js/h5p-data-view.js'), true); +$PAGE->requires->js(new moodle_url($CFG->httpswwwroot . '/mod/hvp/dataviews.js'), true); +$PAGE->requires->css(new moodle_url($CFG->httpswwwroot . '/mod/hvp/styles.css')); + +// Add JavaScript settings to data views +$settings = array( + 'dataViews' => array( + "{$dataviewid}" => array( + 'source' => "{$CFG->httpswwwroot}/mod/hvp/ajax.php?action=results&content_id={$hvp->id}", + 'headers' => array( + (object) array( + 'text' => get_string('user', 'hvp'), + 'sortable' => true + ), + (object) array( + 'text' => get_string('score', 'hvp'), + 'sortable' => true + ), + (object) array( + 'text' => get_string('maxscore', 'hvp'), + 'sortable' => true + ), + (object) array( + 'text' => get_string('finished', 'hvp'), + 'sortable' => true + ) + ), + 'filters' => array(true), + 'order' => (object) array( + 'by' => 3, + 'dir' => 0 + ), + 'l10n' => array( + 'loading' => get_string('loadingdata', 'hvp'), + 'ajaxFailed' => get_string('ajaxfailed', 'hvp'), + 'noData' => get_string('nodata', 'hvp'), + 'currentPage' => get_string('currentpage', 'hvp'), + 'nextPage' => get_string('nextpage', 'hvp'), + 'previousPage' => get_string('previouspage', 'hvp'), + 'search' => get_string('search', 'hvp'), + 'empty' => get_string('empty', 'hvp') + ) + ) + ) +); +$PAGE->requires->data_for_js('H5PIntegration', $settings, true); + +// Print page HTML +echo $OUTPUT->header(); +echo '<div class="clearer"></div>'; + +// Print H5P Content +echo "<h2>{$title}</h2>"; +echo '<div id="h5p-results">' . get_string('javascriptloading', 'hvp') . '</div>'; + +echo $OUTPUT->footer(); diff --git a/html/moodle2/mod/hvp/index.php b/html/moodle2/mod/hvp/index.php new file mode 100755 index 0000000000..25f9ed36dd --- /dev/null +++ b/html/moodle2/mod/hvp/index.php @@ -0,0 +1,142 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * Form for creating new H5P Content + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +require_once('../../config.php'); + +// Get Course ID +$id = optional_param('id', 0, PARAM_INT); + +// Set URL +$url = new \moodle_url('/mod/hvp/index.php', array('id' => $id)); +$PAGE->set_url($url); + +// Load Course +$course = $DB->get_record('course', array('id' => $id)); +if (!$course) { + print_error('invalidcourseid'); +} + +// Require login +require_course_login($course); +$PAGE->set_pagelayout('incourse'); +$coursecontext = context_course::instance($course->id); + +// Trigger instances list viewed event. +$params = array( + 'context' => context_course::instance($course->id) +); +$event = \mod_hvp\event\course_module_instance_list_viewed::create($params); +$event->add_record_snapshot('course', $course); +$event->trigger(); + +// Set title and heading +$PAGE->set_title($course->shortname . ': ' . get_string('modulenameplural', 'mod_hvp')); +$PAGE->set_heading($course->fullname); + +echo $OUTPUT->header(); + +// Load H5P list data +$rawh5ps = $DB->get_records_sql("SELECT cm.id AS coursemodule, + cw.section, + cm.visible, + h.name, + hl.title AS librarytitle + FROM {course_modules} cm, + {course_sections} cw, + {modules} md, + {hvp} h, + {hvp_libraries} hl + WHERE cm.course = ? + AND cm.instance = h.id + AND cm.section = cw.id + AND md.name = 'hvp' + AND md.id = cm.module + AND hl.id = h.main_library_id + ", array($course->id)); +if (!$rawh5ps) { + notice(get_string('noh5ps', 'mod_hvp'), "../../course/view.php?id={$course->id}"); + die; +} + +$modinfo = get_fast_modinfo($course, NULL); +if (empty($modinfo->instances['hvp'])) { + $h5ps = $rawh5ps; +} +else { + // Lets try to order these bad boys + $h5ps = array(); + foreach($modinfo->instances['hvp'] as $cm) { + if (!$cm->uservisible || !isset($rawh5ps[$cm->id])) { + continue; // Not visible or not found + } + if (!empty($cm->extra)) { + $rawh5ps[$cm->id]->extra = $cm->extra; + } + $h5ps[] = $rawh5ps[$cm->id]; + } +} + +// Print H5P list +$table = new html_table(); +$table->attributes['class'] = 'generaltable mod_index'; + +$table->head = array(); +$table->align = array(); + +$usesections = course_format_uses_sections($course->format); +if ($usesections) { + // Section name + $table->head[] = get_string('sectionname', 'format_'.$course->format); + $table->align[] = 'center'; +} + +// Activity name +$table->head[] = get_string('name'); +$table->align[] = 'left'; + +// Content type +$table->head[] = 'Content Type'; +$table->align[] = 'left'; + +// Add data rows +foreach ($h5ps as $h5p) { + $row = array(); + + if ($usesections) { + // Section name + $row[] = get_section_name($course, $h5p->section); + } + + // Activity name + $attrs = ($h5p->visible ? '' : ' class="dimmed"'); + $row[] = "<a href=\"view.php?id={$h5p->coursemodule}\"{$attrs}>{$h5p->name}</a>"; + + // Activity type + $row[] = $h5p->librarytitle; + + $table->data[] = $row; +} + +echo html_writer::table($table); + +echo $OUTPUT->footer(); diff --git a/html/moodle2/mod/hvp/lang/de/hvp.php b/html/moodle2/mod/hvp/lang/de/hvp.php new file mode 100755 index 0000000000..96e9fbee8d --- /dev/null +++ b/html/moodle2/mod/hvp/lang/de/hvp.php @@ -0,0 +1,264 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +$string['modulename'] = 'Interaktiver Inhalt'; +$string['modulename_help'] = 'Das H5P Aktivitätenmodul ermöglicht das Erstellen von interaktiven Inhalten, wie interaktive Videos, Fragebögen, Drag-and-Drop-Fragen, Multiple-Choice-Fragen, Präsentationen und vieles mehr. +Zusätzlich zu den Funktionen als Tool für rich content, ermöglicht H5P es, H5P-Dateien zu importieren und exportieren, um die Inhalte effektiv wiederverwenden und teilen zu können. +Nutzerinteraktion und Punkte werden mittels der xAPI verfolgt und sind im Moodle Notenbuch verfügbar. +Interaktive H5P-Inhalte können durch das Hochladen von .h5p-Dateien hinzugefügt werden. Das Erstellen und Herunterladen von .h5p-Dateien ist unter h5p.org möglich.'; +$string['modulename_link'] = 'https://h5p.org/moodle-more-help'; +$string['modulenameplural'] = 'H5Ps'; +$string['pluginadministration'] = 'H5P'; +$string['pluginname'] = 'H5P'; +$string['hvp:addinstance'] = 'Neue H5P-Aktivität erstellen'; +$string['intro'] = 'Einleitung'; +$string['h5pfile'] = 'H5P-Datei'; +$string['fullscreen'] = 'Vollbild'; +$string['disablefullscreen'] = 'Vollbild beenden'; +$string['download'] = 'Herunterladen'; +$string['copyright'] = 'Nutzungsrechte'; +$string['embed'] = 'Einbinden'; +$string['showadvanced'] = 'Erweitert anzeigen'; +$string['hideadvanced'] = 'Erweitert ausblenden'; +$string['resizescript'] = 'Fügen Sie dieses Skript auf Ihrer Website ein, um die Größe des Inhalts dynamisch ändern zu können:'; +$string['size'] = 'Größe'; +$string['close'] = 'Schließen'; +$string['title'] = 'Titel'; +$string['author'] = 'Autor'; +$string['year'] = 'Jahr'; +$string['source'] = 'Quelle'; +$string['license'] = 'Lizenz'; +$string['thumbnail'] = 'Vorschau'; +$string['nocopyright'] = 'Für diesen Inhalt sind keine Informationen zu Urheberrechten verfügbar.'; +$string['downloadtitle'] = 'Diesen Inhalt als H5P-Datei herunterladen'; +$string['copyrighttitle'] = 'Informationen zum Urheberrecht für diesen Inhalt anzeigen.'; +$string['embedtitle'] = 'Code zur Einbettung dieses Inhalts anzeigen.'; +$string['h5ptitle'] = 'Besuche H5P.org um mehr coole Inhalte zu sehen.'; +$string['contentchanged'] = 'Dieser Inhalt hat sich seit der letzten Nutzung verändert.'; +$string['startingover'] = "Jetzt geht\'s los."; +$string['confirmdialogheader'] = 'Bestätigen'; +$string['confirmdialogbody'] = 'Zum Fortfahren bestätigen. Dieser Vorgang kann nicht rückgängig gemacht werden.'; +$string['cancellabel'] = 'Abbrechen'; +$string['confirmlabel'] = 'Bestätigen'; + +// Update message email for admin +$string['messageprovider:updates'] = 'Benachrichtigung über verfügbare H5P-Aktualisierungen'; +$string['updatesavailabletitle'] = 'Neue H5P-Aktualisierungen sind verfügbar'; +$string['updatesavailablemsgpt1'] = 'Für die auf dieser Moodle-Seite installierten H5P-Inhaltstypen sind Aktualisierungen verfügbar.'; +$string['updatesavailablemsgpt2'] = 'Für weitere Informationen bitte dem Link unten folgen.'; +$string['updatesavailablemsgpt3'] = 'Das letzte Update wurde freigegeben am: {$a}'; +$string['updatesavailablemsgpt4'] = 'Installiert ist die Verion vom: {$a}'; + +$string['lookforupdates'] = 'Nach H5P-Aktualisierungen suchen'; +$string['removetmpfiles'] = 'Entfernen alter temporärer H5P-Dateien'; +$string['removeoldlogentries'] = 'Entfernen alter H5P-Logdateien'; + +// Admin settings. +$string['displayoptionnevershow'] = 'Nie zeigen'; +$string['displayoptionalwaysshow'] = 'Immer zeigen'; +$string['displayoptionpermissions'] = 'Nur zeigen, wenn der Nutzer H5P exportieren darf'; +$string['displayoptionauthoron'] = 'Vom Autor gesteuert, Standard ist an'; +$string['displayoptionauthoroff'] = 'Vom Autor gesteuert, Standard ist aus'; +$string['displayoptions'] = 'Optionen anzeigen'; +$string['enableframe'] = 'Menüleiste und Rahmen anzeigen.'; +$string['enabledownload'] = 'Download-Knopf'; +$string['enableembed'] = 'Einbetten-Knopf'; +$string['enablecopyright'] = 'Urheberrecht-Knopf'; +$string['enableabout'] = 'Über-H5P-Knopf'; + + +$string['externalcommunication'] = 'Externe Kommunikation'; +$string['externalcommunication_help'] = 'Die Entwicklung von H5P durch die Übermittlung von anonymen Nutzungsdaten unterstützen. Wenn diese Option ausgeschalten wird, wird diese Seite nicht mehr die akutellsten H5P-Updates erhalten. Mehr Informationen darüber,<a {$a}>welche Daten gesammelt werden</a> sind auf h5p.org verfügbar.'; +$string['enablesavecontentstate'] = 'Inhalte automatisch speichern'; +$string['enablesavecontentstate_help'] = 'Automatisch den Status des interaktiven Inhalts für jeden Nutzer speichern. Das bedeutet, dass die Nutzer da weitermachen können, wo sie aufgehört haben.'; +$string['contentstatefrequency'] = 'Speicherhäufigkeit'; +$string['contentstatefrequency_help'] = 'Wie oft (in Sekunden) soll der Inhalt des Nutzers automatisch gespeichert werden? Bei Problemen mit zu vielen AJAX-Anfragen erhöhen.'; + +// Admin menu. +$string['settings'] = 'H5P-Einstellungen'; +$string['libraries'] = 'H5P-Bibliotheken'; + +// Update libraries section. +$string['updatelibraries'] = 'Alle Bibliotheken installieren'; +$string['updatesavailable'] = 'Es sind Aktualisierungen für die H5P-Inhaltstypen vorhanden.'; +$string['whyupdatepart1'] = 'Informationen, warum es wichtig ist und welche Vorteile Aktualisierungen bringen, sind unter "<a {$a}>Warum H5P aktualisieren?</a>" verfügbar.'; +$string['whyupdatepart2'] = 'Auf dieser Seite befinden sich außerdem auch die verschiedenen Änderungsprotokolle. Darin werden die neuesten Features und die behobenen Fehler aufgelistet.'; +$string['currentversion'] = 'Aktuelle Version'; +$string['availableversion'] = 'Verfügbare Aktualisierung'; +$string['usebuttonbelow'] = 'Mit dem Knopf unten können automatisch alle Inhaltstypen heruntergeladen und aktualisert werden.'; +$string['downloadandupdate'] = 'Herunterladen & Aktualisieren'; +$string['missingh5purl'] = 'Die URL für die H5P-Datei fehlt'; +$string['unabletodownloadh5p'] = 'Herunterladen der H5P-Datei nicht möglich'; + +// Upload libraries section. +$string['uploadlibraries'] = 'Bibliotheken hochladen'; +$string['options'] = 'Optionen'; +$string['onlyupdate'] = 'Nur bereits bestehende Bibliotheken aktualisieren'; +$string['disablefileextensioncheck'] = 'Prüfung der Dateiendung deaktivieren'; +$string['disablefileextensioncheckwarning'] = "Warnung! Das deaktivieren der Prüfung kann zu Sicherheitsproblemen führen, da das Hochladen von php-Dateien möglich wird. Dadurch könnten Hacker in der Lage sein, schadhaften Code in die Website einzuschleusen. Bitte stellen Sie sicher, dass Sie genau wissen, was sie tun."; +$string['upload'] = 'Hochladen'; + +// Installed libraries section. +$string['installedlibraries'] = 'Installierte Bibliotheken'; +$string['invalidtoken'] = 'Ungültiger Sicherheitsschlüssel.'; +$string['missingparameters'] = 'Fehlende Parameter'; + +// H5P library list headers on admin page. +$string['librarylisttitle'] = 'Titel'; +$string['librarylistrestricted'] = 'Eingeschränkt'; +$string['librarylistinstances'] = 'Instanzen'; +$string['librarylistinstancedependencies'] = 'Instanzabhägigkeiten'; +$string['librarylistlibrarydependencies'] = 'Bibliotheksabhängigkeiten'; +$string['librarylistactions'] = 'Aktionen'; + +// H5P library page labels. +$string['addlibraries'] = 'Bibliotheken hinzufügen'; +$string['installedlibraries'] = 'Installierte Bibliotheken'; +$string['notapplicable'] = 'Nicht verfügbar'; +$string['upgradelibrarycontent'] = 'Inhalt der Bibliothek aktualisieren'; + +// Upgrade H5P content page. +$string['upgrade'] = 'Aktualisiere H5P'; +$string['upgradeheading'] = 'Aktualisiere {$a} Inhalt'; +$string['upgradenoavailableupgrades'] = 'Für diese Bibliothek sind keine Aktualisierungen verfügbar.'; +$string['enablejavascript'] = 'Bitte JavaScript aktivieren.'; +$string['upgrademessage'] = 'Es sollen {$a} Inhaltsinstanzen aktualisiert werden. Bitte die Version der Aktualisierung festlegen.'; +$string['upgradeinprogress'] = 'Aktualisieren auf %ver...'; +$string['upgradeerror'] = 'Ein Fehler trat beim Auswerten der Parameter auf:'; +$string['upgradeerrordata'] = 'Konnte die Daten der Bibliothek %lib nicht laden.'; +$string['upgradeerrorscript'] = 'Konnte das Aktualisierungsskript für %lib nicht laden.'; +$string['upgradeerrorcontent'] = 'Konnte den Inhalt %id nicht aktualisieren:'; +$string['upgradeerrorparamsbroken'] = 'Falsche Parameter.'; +$string['upgradedone'] = '{$a} Inhaltsinstanzen wurde(n) erfolgreich aktualisiert.'; +$string['upgradereturn'] = 'Zurück'; +$string['upgradenothingtodo'] = "Es gibt keine aktualisierbaren Inhaltsinstanzen."; +$string['upgradebuttonlabel'] = 'Aktualisieren'; +$string['upgradeinvalidtoken'] = 'Fehler: Ungültiger Sicherheitsschlüssel!'; +$string['upgradelibrarymissing'] = 'Fehler: Die Bibliothek fehlt!'; + +// Results / report page. +$string['user'] = 'Nutzer'; +$string['score'] = 'Punkte'; +$string['maxscore'] = 'Maximale Punktzahl'; +$string['finished'] = 'Beendet'; +$string['loadingdata'] = 'Lade Daten.'; +$string['ajaxfailed'] = 'Fehler beim Laden der Daten.'; +$string['nodata'] = "Es sind keine Daten vorhanden, die den Kriterien entsprechen."; +$string['currentpage'] = 'Seite $current von $total'; +$string['nextpage'] = 'Nächste Seite'; +$string['previouspage'] = 'Vorherige Seite'; +$string['search'] = 'Suchen'; +$string['empty'] = 'Keine Ergebnisse verfügbar'; + +//Editor +$string['javascriptloading'] = 'Warte auf JavaScript'; +$string['action'] = 'Aktion'; +$string['upload'] = 'Hochladen'; +$string['create'] = 'Erstellen'; +$string['editor'] = 'Bearbeiten'; + +$string['invalidlibrary'] = 'Ungültige Bibliothek'; +$string['nosuchlibrary'] = 'Bibliothek nicht vorhanden'; +$string['noparameters'] = 'Keine Parameter'; +$string['invalidparameters'] = 'Ungültige Parameter'; +$string['missingcontentuserdata'] = 'Fehler: Konnte den Nutzerinhalt nicht finden'; + +$string['maximumgrade'] = 'Beste Bewertung'; +$string['maximumgradeerror'] = 'Bitte gib einen positive ganze Zahl als maximale Punktzahl für diese Aktivität an.'; + +// Capabilities +$string['hvp:addinstance'] = 'Neue H5P-Aktivität hinzufügen'; +$string['hvp:restrictlibraries'] = 'H5P-Bibliothek beschränken'; +$string['hvp:updatelibraries'] = 'Aktualisieren einer H5P-Bibliothek'; +$string['hvp:userestrictedlibraries'] = 'Verwendung eingeschränkter H5P-Bibliotheken'; +$string['hvp:savecontentuserdata'] = 'H5P-Nutzerinhalt speichern'; +$string['hvp:saveresults'] = 'Ergebnis des H5P-Inhalts speichern'; +$string['hvp:viewresults'] = 'Ergebnis des H5P-Inhalts ansehen'; +$string['hvp:getcachedassets'] = 'Zwischengespeicherte H5P-Inhaltswerte erhalten'; +$string['hvp:getcontent'] = 'H5P-Dateiinhalt im Kurs verwenden/ansehen'; +$string['hvp:getexport'] = 'Exportierte H5P Datei im Kurs verwenden'; +$string['hvp:updatesavailable'] = 'Nachricht erhalten, wenn H5P-Aktualisierungen verfügbar sind'; + +// Capabilities error messages +$string['nopermissiontoupgrade'] = 'Die nötigen Rechte, um die Bibliothek zu aktualisieren, sind nicht vorhanden.'; +$string['nopermissiontorestrict'] = 'Die nötigen Rechte, um Bibliotheken zu beschränken, sind nicht vorhanden.'; +$string['nopermissiontosavecontentuserdata'] = 'Die nötigen Rechte, um Nutzerinhalte zu speichern, sind nicht vorhanden.'; +$string['nopermissiontosaveresult'] = 'Die nötigen Rechte, um die Ergebnisse dieses Inhalts zu speichern, sind nicht vorhanden.'; +$string['nopermissiontoviewresult'] = 'Die nötigen Rechte, um die Ergebnisse dieses Inhalts anzusehen, sind nicht vorhanden.'; + +// Editor translations +$string['noziparchive'] = 'Diese PHP-Version unterstützt ZipArchive nicht.'; +$string['noextension'] = 'Die hochgeladene Datei ist kein gültiges HTML5-Paket (Keine .h5p Dateiendung)'; +$string['nounzip'] = 'Die hochgeladene Datei ist kein gültiges HTML5-Paket (Kann nicht entpackt werden)'; +$string['noparse'] = 'Konnte die zentrale h5p.json-Datei nicht analysieren'; +$string['nojson'] = 'Die zentrale h5p.json-Datei ist ungültig'; +$string['invalidcontentfolder'] = 'Ungültiger Inhaltsordner'; +$string['nocontent'] = 'Konnte die content.json-Datei nicht finden oder analysieren'; +$string['librarydirectoryerror'] = 'Der Name des Bibliotheksverzeichnisses muss machineName oder machineName-majorVersion.minorVersion (aus library.json) entsprechen. (Verzeichnis: {$a->%directoryName} , machineName: {$a->%machineName}, majorVersion: {$a->%majorVersion}, minorVersion: {$a->%minorVersion})'; +$string['missingcontentfolder'] = 'Ein gültiger Inhaltsordner fehlt'; +$string['invalidmainjson'] = 'Eine gültige zentrale h5p.json-Datei fehlt'; +$string['missinglibrary'] = 'Die benötigte Bibliothek {$a->@library} fehlt'; +$string['missinguploadpermissions'] = "Hinweis: Die Bibliotheken mögen in den hochgeladenen Dateien zwar enthalten sein, aber die nötigen Rechte, um neue Bibliotheken hochzuladen, fehlen. Dazu bitte den Seitenadministrator kontaktieren."; +$string['invalidlibraryname'] = 'Ungültiger Bibliotheksname: {$a->%name}'; +$string['missinglibraryjson'] = 'Konnte die Datei library.json mit gültigem json-format für die Bibliothek {$a->%name} nicht finden.'; +$string['invalidsemanticsjson'] = 'Ungültige semantics.json Datei wurde in die Bibliothek {$a->%name} eingefügt'; +$string['invalidlanguagefile'] = 'Ungültige Sprachdatei {$a->%file} in Bibliothek {$a->%library}'; +$string['invalidlanguagefile2'] = 'Ungültige Sprachdatei {$a->%languageFile} wurde in die Bibliothek {$a->%name} eingefügt'; +$string['missinglibraryfile'] = 'Die Datei "{$a->%file}" fehlt in der Bibliothek "{$a->%name}"'; +$string['invalidlibrarydataboolean'] = 'Ungültige Daten für {$a->%property} in {$a->%library}. Boolean wurde erwartet.'; +$string['invalidlibrarydata'] = 'Ungültige Daten für {$a->%property} in {$a->%library}'; +$string['invalidlibraryproperty'] = 'Kann das Merkmal {$a->%property} in {$a->%library} nicht lesen'; +$string['missinglibraryproperty'] = 'Das benötigte Merkmal {$a->%property} fehlt in {$a->%library}'; +$string['invalidlibraryoption'] = 'Nicht erlaubte Option {$a->%option} in {$a->%library}'; +$string['addedandupdatelibraries'] = '{$a->%new} neue H5P-Bibliotheken hinzugefügt und {$a->%old} alte aktualisiert.'; +$string['addednewlibraries'] = '{$a->%new} neue H5P-Bibliotheken hinzugefügt.'; +$string['updatedlibraries'] = '{$a->%old} H5P-Bibliotheken aktualisiert.'; +$string['missingdependency'] = 'Fehlende Abhängigkeit {$a->@dep} wird von {$a->@lib} benötigt.'; +$string['invalidstring'] = 'Der übergebene string ist nicht gültig gemäß des regulären Ausdrucks in semantics. (value: \"{$a->%value}\", regexp: \"{$a->%regexp}\")'; +$string['invalidfile'] = 'Datei "{$a->%filename}" nicht erlaubt. Es sind nur Dateien mit den folgenden Endungen erlaubt: {$a->%files-allowed}.'; +$string['invalidmultiselectoption'] = 'Ungültige Option bei der Mehrfachauswahl ausgewählt.'; +$string['invalidselectoption'] = 'Ungültige Option bei der Auswahl ausgewählt.'; +$string['invalidsemanticstype'] = 'Interner H5P-Fehler: Unbekannter Inhaltstyp "{$a->@type}" in semantics. Inhalt wird entfernt!'; +$string['invalidsemantics'] = 'Laut semantics ist die im Inhalt verwendete Bibliothek keine gültige.'; +$string['copyrightinfo'] = 'Urheberrechtsinformationen'; +$string['years'] = 'Jahr(e)'; +$string['undisclosed'] = 'Unbestimmt'; +$string['attribution'] = 'Namensnennung 4.0 (CC BY)'; +$string['attributionsa'] = 'Namensnennung-Weitergabe unter gleichen Bedingungen 4.0 (CC BY-SA)'; +$string['attributionnd'] = 'Namensnennung-KeineBearbeitung 4.0 (CC BY-ND)'; +$string['attributionnc'] = 'Namensnennung-NichtKommerziell 4.0 (CC BY-NC)'; +$string['attributionncsa'] = 'Namensnennung-NichtKommerziell-Weitergabe unter gleichen Bedingungen 4.0 (CC BY-NC-SA)'; +$string['attributionncnd'] = 'Namensnennung-NichtKommerziell-KeineBearbeitung 4.0 (CC BY-NC-ND)'; +$string['gpl'] = 'General Public License v3'; +$string['pd'] = 'Gemeingut'; +$string['pddl'] = 'Gemeingut Einsatz und Lizenz'; +$string['pdm'] = 'Gemeingut Zeichen'; +$string['copyrightstring'] = 'Urheberrecht'; +$string['unabletocreatedir'] = 'Erstellen des Verzeichnisses nicht möglich.'; +$string['unabletogetfieldtype'] = 'Bestimmen des Feldtyps nicht möglich.'; +$string['filetypenotallowed'] = 'Dateityp nicht erlaubt.'; +$string['invalidfieldtype'] = 'Ungültiger Feldtyp.'; +$string['invalidimageformat'] = 'Ungültiges Bild-Dateiformat. Verwende jpg, png oder gif.'; +$string['filenotimage'] = 'Die Datei ist kein Bild.'; +$string['invalidaudioformat'] = 'Ungültiges Audio-Dateiformat. Verwende mp3 oder wav.'; +$string['invalidvideoformat'] = 'Ungültiges Video-Dateiformat. Verwende mp4 oder webm.'; +$string['couldnotsave'] = 'Konnte die Datei nicht speichern.'; +$string['couldnotcopy'] = 'Konnte die Datei nicht kopieren.'; + +// Welcome messages +$string['welcomeheader'] = 'Willkommen in der Welt von H5P!'; +$string['welcomegettingstarted'] = 'Um mit H5P und Moodle loszulegen, befindet sich hier ein <a {$a->moodle_tutorial}>Tutorial</a> und es gibt<a {$a->example_content}>Beispielinhalte</a> auf H5P.org als Inspiration.<br>Für das bestmögliche Erlebnis wurden die beliebtesten Inhaltstypen installiert!'; +$string['welcomecommunity'] = 'Wir hoffen, dass Ihnen H5P gefällt und bieten die Möglichkeit, im <a {$a->forums}>Forum</a> und im Chat-Room <a {$a->gitter}>H5P bei Gitter</a> aktiv zu werden.'; +$string['welcomecontactus'] = 'Für Feedback bitte nicht zögern, uns zu <a {$a}>kontaktieren</a>. Wir nehmen Feedback sehr ernst und bemühen uns, H5P jeden Tag besser zu machen!'; diff --git a/html/moodle2/mod/hvp/lang/en/hvp.php b/html/moodle2/mod/hvp/lang/en/hvp.php new file mode 100755 index 0000000000..cfd77bbed9 --- /dev/null +++ b/html/moodle2/mod/hvp/lang/en/hvp.php @@ -0,0 +1,272 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +$string['modulename'] = 'Interactive Content'; +$string['modulename_help'] = 'The H5P activity module enables you to create interactive content such as Interactive Videos, Question Sets, Drag and Drop Questions, Multi-Choice Questions, Presentations and much more. + +In addition to being an authoring tool for rich content, H5P enables you to import and export H5P files for effective reuse and sharing of content. + +User interactions and scores are tracked using xAPI and are available through the Moodle Gradebook. + +You add interactive H5P content by uploading a .h5p file. You can create and download .h5p files on h5p.org'; +$string['modulename_link'] = 'https://h5p.org/moodle-more-help'; +$string['modulenameplural'] = 'Interactive Content'; +$string['pluginadministration'] = 'H5P'; +$string['pluginname'] = 'H5P'; +$string['intro'] = 'Introduction'; +$string['h5pfile'] = 'H5P File'; +$string['fullscreen'] = 'Fullscreen'; +$string['disablefullscreen'] = 'Disable fullscreen'; +$string['download'] = 'Download'; +$string['copyright'] = 'Rights of use'; +$string['embed'] = 'Embed'; +$string['showadvanced'] = 'Show advanced'; +$string['hideadvanced'] = 'Hide advanced'; +$string['resizescript'] = 'Include this script on your website if you want dynamic sizing of the embedded content:'; +$string['size'] = 'Size'; +$string['close'] = 'Close'; +$string['title'] = 'Title'; +$string['author'] = 'Author'; +$string['year'] = 'Year'; +$string['source'] = 'Source'; +$string['license'] = 'License'; +$string['thumbnail'] = 'Thumbnail'; +$string['nocopyright'] = 'No copyright information available for this content.'; +$string['downloadtitle'] = 'Download this content as a H5P file.'; +$string['copyrighttitle'] = 'View copyright information for this content.'; +$string['embedtitle'] = 'View the embed code for this content.'; +$string['h5ptitle'] = 'Visit H5P.org to check out more cool content.'; +$string['contentchanged'] = 'This content has changed since you last used it.'; +$string['startingover'] = "You'll be starting over."; +$string['confirmdialogheader'] = 'Confirm action'; +$string['confirmdialogbody'] = 'Please confirm that you wish to proceed. This action is not reversible.'; +$string['cancellabel'] = 'Cancel'; +$string['confirmlabel'] = 'Confirm'; +$string['noh5ps'] = 'There\'s no interactive content available for this course.'; + +// Update message email for admin +$string['messageprovider:updates'] = 'Notification of available H5P updates'; +$string['updatesavailabletitle'] = 'New H5P updates are available'; +$string['updatesavailablemsgpt1'] = 'There are updates available for the H5P content types you\'ve installed on your Moodle site.'; +$string['updatesavailablemsgpt2'] = 'Head over to the page linked to below for further instructions.'; +$string['updatesavailablemsgpt3'] = 'The latest update was released on: {$a}'; +$string['updatesavailablemsgpt4'] = 'Your are running a version from: {$a}'; + +$string['lookforupdates'] = 'Look for H5P updates'; +$string['removetmpfiles'] = 'Remove old H5P temporary files'; +$string['removeoldlogentries'] = 'Remove old H5P log entries'; + +// Admin settings. +$string['displayoptionnevershow'] = 'Never show'; +$string['displayoptionalwaysshow'] = 'Always show'; +$string['displayoptionpermissions'] = 'Show only if user has permissions to export H5P'; +$string['displayoptionauthoron'] = 'Controlled by author, default is on'; +$string['displayoptionauthoroff'] = 'Controlled by author, default is off'; +$string['displayoptions'] = 'Display Options'; +$string['enableframe'] = 'Display action bar and frame'; +$string['enabledownload'] = 'Download button'; +$string['enableembed'] = 'Embed button'; +$string['enablecopyright'] = 'Copyright button'; +$string['enableabout'] = 'About H5P button'; + +$string['externalcommunication'] = 'External communication'; +$string['externalcommunication_help'] = 'Aid in the development of H5P by contributing anonymous usage data. Disabling this option will prevent your site from fetching the newest H5P updates. You can read more about <a {$a}>which data is collected</a> on h5p.org.'; +$string['enablesavecontentstate'] = 'Save content state'; +$string['enablesavecontentstate_help'] = 'Automatically save the current state of interactive content for each user. This means that the user may pick up where he left off.'; +$string['contentstatefrequency'] = 'Save content state frequency'; +$string['contentstatefrequency_help'] = 'In seconds, how often do you wish the user to auto save their progress. Increase this number if you\'re having issues with many ajax requests'; +$string['enabledlrscontenttypes'] = 'Enable LRS dependent content types'; +$string['enabledlrscontenttypes_help'] = 'Makes it possible to use content types that rely upon a Learning Record Store to function properly, like the Questionnaire content type.'; + +// Admin menu. +$string['settings'] = 'H5P Settings'; +$string['libraries'] = 'H5P Libraries'; + +// Update libraries section. +$string['updatelibraries'] = 'Update All Libraries'; +$string['updatesavailable'] = 'There are updates available for your H5P content types.'; +$string['whyupdatepart1'] = 'You can read about why it\'s important to update and the benefits from doing so on the <a {$a}>Why Update H5P</a> page.'; +$string['whyupdatepart2'] = 'The page also list the different changelogs, where you can read about the new features introduced and the issues that have been fixed.'; +$string['currentversion'] = 'You are running'; +$string['availableversion'] = 'Available update'; +$string['usebuttonbelow'] = 'You can use the button below to automatically download and update all of your content types.'; +$string['downloadandupdate'] = 'Download & Update'; +$string['missingh5purl'] = 'Missing URL for H5P file'; +$string['unabletodownloadh5p'] = 'Unable to download H5P file'; + +// Upload libraries section. +$string['uploadlibraries'] = 'Upload Libraries'; +$string['options'] = 'Options'; +$string['onlyupdate'] = 'Only update existing libraries'; +$string['disablefileextensioncheck'] = 'Disable file extension check'; +$string['disablefileextensioncheckwarning'] = "Warning! Disabling the file extension check may have security implications as it allows for uploading of php files. That in turn could make it possible for attackers to execute malicious code on your site. Please make sure you know exactly what you're uploading."; +$string['upload'] = 'Upload'; + +// Installed libraries section. +$string['installedlibraries'] = 'Installed Libraries'; +$string['invalidtoken'] = 'Invalid security token.'; +$string['missingparameters'] = 'Missing parameters'; + +// H5P library list headers on admin page. +$string['librarylisttitle'] = 'Title'; +$string['librarylistrestricted'] = 'Restricted'; +$string['librarylistinstances'] = 'Instances'; +$string['librarylistinstancedependencies'] = 'Instance dependencies'; +$string['librarylistlibrarydependencies'] = 'Library dependencies'; +$string['librarylistactions'] = 'Actions'; + +// H5P library page labels. +$string['addlibraries'] = 'Add libraries'; +$string['installedlibraries'] = 'Installed libraries'; +$string['notapplicable'] = 'N/A'; +$string['upgradelibrarycontent'] = 'Upgrade library content'; + +// Upgrade H5P content page. +$string['upgrade'] = 'Upgrade H5P'; +$string['upgradeheading'] = 'Upgrade {$a} content'; +$string['upgradenoavailableupgrades'] = 'There are no available upgrades for this library.'; +$string['enablejavascript'] = 'Please enable JavaScript.'; +$string['upgrademessage'] = 'You are about to upgrade {$a} content instance(s). Please select upgrade version.'; +$string['upgradeinprogress'] = 'Upgrading to %ver...'; +$string['upgradeerror'] = 'An error occurred while processing parameters:'; +$string['upgradeerrordata'] = 'Could not load data for library %lib.'; +$string['upgradeerrorscript'] = 'Could not load upgrades script for %lib.'; +$string['upgradeerrorcontent'] = 'Could not upgrade content %id:'; +$string['upgradeerrorparamsbroken'] = 'Parameters are broken.'; +$string['upgradedone'] = 'You have successfully upgraded {$a} content instance(s).'; +$string['upgradereturn'] = 'Return'; +$string['upgradenothingtodo'] = "There's no content instances to upgrade."; +$string['upgradebuttonlabel'] = 'Upgrade'; +$string['upgradeinvalidtoken'] = 'Error: Invalid security token!'; +$string['upgradelibrarymissing'] = 'Error: Your library is missing!'; + +// Results / report page. +$string['user'] = 'User'; +$string['score'] = 'Score'; +$string['maxscore'] = 'Maximum Score'; +$string['finished'] = 'Finished'; +$string['loadingdata'] = 'Loading data.'; +$string['ajaxfailed'] = 'Failed to load data.'; +$string['nodata'] = "There's no data available that matches your criteria."; +$string['currentpage'] = 'Page $current of $total'; +$string['nextpage'] = 'Next page'; +$string['previouspage'] = 'Previous page'; +$string['search'] = 'Search'; +$string['empty'] = 'No results available'; + +// Editor +$string['javascriptloading'] = 'Waiting for JavaScript...'; +$string['action'] = 'Action'; +$string['upload'] = 'Upload'; +$string['create'] = 'Create'; +$string['editor'] = 'Editor'; + +$string['invalidlibrary'] = 'Invalid library'; +$string['nosuchlibrary'] = 'No such library'; +$string['noparameters'] = 'No parameters'; +$string['invalidparameters'] = 'Invalid Parameters'; +$string['missingcontentuserdata'] = 'Error: Could not find content user data'; + +$string['maximumgrade'] = 'Maximum grade'; +$string['maximumgradeerror'] = 'Please enter a valid positive integer as the max points available for this activity'; + +// Capabilities +$string['hvp:addinstance'] = 'Add a new H5P Activity'; +$string['hvp:restrictlibraries'] = 'Restrict a H5P library'; +$string['hvp:updatelibraries'] = 'Update the version of an H5P library'; +$string['hvp:userestrictedlibraries'] = 'Use restricted H5P libraries'; +$string['hvp:savecontentuserdata'] = 'Save H5P content user data'; +$string['hvp:saveresults'] = 'Save result for H5P content'; +$string['hvp:viewresults'] = 'View result for H5P content'; +$string['hvp:getcachedassets'] = 'Get cached H5P content assets'; +$string['hvp:getcontent'] = 'Get/view content of H5P file in course'; +$string['hvp:getexport'] = 'Get export file from H5P in course'; +$string['hvp:updatesavailable'] = 'Get notification when H5P updates are available'; + +// Capabilities error messages +$string['nopermissiontoupgrade'] = 'You do not have permission to upgrade libraries.'; +$string['nopermissiontorestrict'] = 'You do not have permission to restrict libraries.'; +$string['nopermissiontosavecontentuserdata'] = 'You do not have permission to save content user data.'; +$string['nopermissiontosaveresult'] = 'You do not have permission to save result for this content.'; +$string['nopermissiontoviewresult'] = 'You do not have permission to view results for this content.'; + +// Editor translations +$string['noziparchive'] = 'Your PHP version does not support ZipArchive.'; +$string['noextension'] = 'The file you uploaded is not a valid HTML5 Package (It does not have the .h5p file extension)'; +$string['nounzip'] = 'The file you uploaded is not a valid HTML5 Package (We are unable to unzip it)'; +$string['noparse'] = 'Could not parse the main h5p.json file'; +$string['nojson'] = 'The main h5p.json file is not valid'; +$string['invalidcontentfolder'] = 'Invalid content folder'; +$string['nocontent'] = 'Could not find or parse the content.json file'; +$string['librarydirectoryerror'] = 'Library directory name must match machineName or machineName-majorVersion.minorVersion (from library.json). (Directory: {$a->%directoryName} , machineName: {$a->%machineName}, majorVersion: {$a->%majorVersion}, minorVersion: {$a->%minorVersion})'; +$string['missingcontentfolder'] = 'A valid content folder is missing'; +$string['invalidmainjson'] = 'A valid main h5p.json file is missing'; +$string['missinglibrary'] = 'Missing required library {$a->@library}'; +$string['missinguploadpermissions'] = "Note that the libraries may exist in the file you uploaded, but you're not allowed to upload new libraries. Contact the site administrator about this."; +$string['invalidlibraryname'] = 'Invalid library name: {$a->%name}'; +$string['missinglibraryjson'] = 'Could not find library.json file with valid json format for library {$a->%name}'; +$string['invalidsemanticsjson'] = 'Invalid semantics.json file has been included in the library {$a->%name}'; +$string['invalidlanguagefile'] = 'Invalid language file {$a->%file} in library {$a->%library}'; +$string['invalidlanguagefile2'] = 'Invalid language file {$a->%languageFile} has been included in the library {$a->%name}'; +$string['missinglibraryfile'] = 'The file "{$a->%file}" is missing from library: "{$a->%name}"'; +$string['missingcoreversion'] = 'The system was unable to install the <em>{$a->%component}</em> component from the package, it requires a newer version of the H5P plugin. This site is currently running version {$a->%current}, whereas the required version is {$a->%required} or higher. You should consider upgrading and then try again.'; +$string['invalidlibrarydataboolean'] = 'Invalid data provided for {$a->%property} in {$a->%library}. Boolean expected.'; +$string['invalidlibrarydata'] = 'Invalid data provided for {$a->%property} in {$a->%library}'; +$string['invalidlibraryproperty'] = 'Can\'t read the property {$a->%property} in {$a->%library}'; +$string['missinglibraryproperty'] = 'The required property {$a->%property} is missing from {$a->%library}'; +$string['invalidlibraryoption'] = 'Illegal option {$a->%option} in {$a->%library}'; +$string['addedandupdatelibraries'] = 'Added {$a->%new} new H5P libraries and updated {$a->%old} old.'; +$string['addednewlibraries'] = 'Added {$a->%new} new H5P libraries.'; +$string['updatedlibraries'] = 'Updated {$a->%old} H5P libraries.'; +$string['missingdependency'] = 'Missing dependency {$a->@dep} required by {$a->@lib}.'; +$string['invalidstring'] = 'Provided string is not valid according to regexp in semantics. (value: \"{$a->%value}\", regexp: \"{$a->%regexp}\")'; +$string['invalidfile'] = 'File "{$a->%filename}" not allowed. Only files with the following extensions are allowed: {$a->%files-allowed}.'; +$string['invalidmultiselectoption'] = 'Invalid selected option in multi-select.'; +$string['invalidselectoption'] = 'Invalid selected option in select.'; +$string['invalidsemanticstype'] = 'H5P internal error: unknown content type "{$a->@type}" in semantics. Removing content!'; +$string['copyrightinfo'] = 'Copyright information'; +$string['years'] = 'Year(s)'; +$string['undisclosed'] = 'Undisclosed'; +$string['attribution'] = 'Attribution 4.0'; +$string['attributionsa'] = 'Attribution-ShareAlike 4.0'; +$string['attributionnd'] = 'Attribution-NoDerivs 4.0'; +$string['attributionnc'] = 'Attribution-NonCommercial 4.0'; +$string['attributionncsa'] = 'Attribution-NonCommercial-ShareAlike 4.0'; +$string['attributionncnd'] = 'Attribution-NonCommercial-NoDerivs 4.0'; +$string['gpl'] = 'General Public License v3'; +$string['pd'] = 'Public Domain'; +$string['pddl'] = 'Public Domain Dedication and Licence'; +$string['pdm'] = 'Public Domain Mark'; +$string['copyrightstring'] = 'Copyright'; +$string['unabletocreatedir'] = 'Unable to create directory.'; +$string['unabletogetfieldtype'] = 'Unable to get field type.'; +$string['filetypenotallowed'] = 'File type isn\'t allowed.'; +$string['invalidfieldtype'] = 'Invalid field type.'; +$string['invalidimageformat'] = 'Invalid image file format. Use jpg, png or gif.'; +$string['filenotimage'] = 'File is not an image.'; +$string['invalidaudioformat'] = 'Invalid audio file format. Use mp3 or wav.'; +$string['invalidvideoformat'] = 'Invalid video file format. Use mp4 or webm.'; +$string['couldnotsave'] = 'Could not save file.'; +$string['couldnotcopy'] = 'Could not copy file.'; + +// Welcome messages +$string['welcomeheader'] = 'Welcome to the world of H5P!'; +$string['welcomegettingstarted'] = 'To get started with H5P and Moodle take a look at our <a {$a->moodle_tutorial}>tutorial</a> and check out the <a {$a->example_content}>example content</a> at H5P.org for inspiration.<br>The most popuplar content types have been installed for your convenience!'; +$string['welcomecommunity'] = 'We hope you will enjoy H5P and get engaged in our growing community through our <a {$a->forums}>forums</a> and chat room <a {$a->gitter}>H5P at Gitter</a>'; +$string['welcomecontactus'] = 'If you have any feedback, don\'t hesitate to <a {$a}>contact us</a>. We take feedback very seriously and are dedicated to making H5P better every day!'; +$string['missingmbstring'] = 'The mbstring PHP extension is not loaded. H5P need this to function properly'; +$string['wrongversion'] = 'The version of the H5P library {$a->%machineName} used in this content is not valid. Content contains {$a->%contentLibrary}, but it should be {$a->%semanticsLibrary}.'; +$string['invalidlibrary'] = 'The H5P library {$a->%library} used in the content is not valid'; diff --git a/html/moodle2/mod/hvp/lang/fr/hvp.php b/html/moodle2/mod/hvp/lang/fr/hvp.php new file mode 100755 index 0000000000..4eaaa686fd --- /dev/null +++ b/html/moodle2/mod/hvp/lang/fr/hvp.php @@ -0,0 +1,268 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +$string['modulename'] = 'Contenu interactif'; +$string['modulename_help'] = 'L\'activité H5P vous permet de créer des contenus interactifs tels que des vidéos interactives, des jeux de questions, des questions en glisser/déposer, des QCM, des présentations et bien plus encore. + +En plus d\'être un outil auteur pour générer des contenus riches, H5P vous permet d\'importer ou d\'exporter vos ressources pour les réutiliser et les partager. + +Les interactions utilisateur et les scores sont gérés par xAPI et disponibles dans le carnet de notes de moodle. + +Vous pouvez ajouter des contenus interactifs H5P en uploadant des fichiers avec l\'extension .h5p. Vous pouvez créer et télécharger de tels fichiers sur le site h5p.org'; +$string['modulename_link'] = 'https://h5p.org/moodle-more-help'; +$string['modulenameplural'] = 'Contenus interactifs'; +$string['pluginadministration'] = 'H5P'; +$string['pluginname'] = 'H5P'; +$string['intro'] = 'Introduction'; +$string['h5pfile'] = 'Fichier H5P'; +$string['fullscreen'] = 'Plein écran'; +$string['disablefullscreen'] = 'Désactiver le plein écran'; +$string['download'] = 'Télécharger'; +$string['copyright'] = 'Droits d\'utilisation'; +$string['embed'] = 'Embed'; +$string['showadvanced'] = 'Afficher les options avancées'; +$string['hideadvanced'] = 'Masquer les options avancées'; +$string['resizescript'] = 'Incluez ce script dans votre site web si vous voulez bénéficier du redimensionnement dynamique de votre contenu embarqué:'; +$string['size'] = 'Taille'; +$string['close'] = 'Fermer'; +$string['title'] = 'Titre'; +$string['author'] = 'Auteur'; +$string['year'] = 'Année'; +$string['source'] = 'Source'; +$string['license'] = 'Licence'; +$string['thumbnail'] = 'Miniatures'; +$string['nocopyright'] = 'Aucune information de copyright disponible pour ce contenu.'; +$string['downloadtitle'] = 'Télécharger ce contenu au format H5P.'; +$string['copyrighttitle'] = 'Voir les informations de droit d\'auteur pour ce contenu.'; +$string['embedtitle'] = 'Voir le code embarqué pour ce contenu.'; +$string['h5ptitle'] = 'Visitez H5P.org pour accéder à d\'autres ressources aussi cools.'; +$string['contentchanged'] = 'Ce contenu a changé depuis votre dernière utilisation.'; +$string['startingover'] = "Vous allez recommencer."; +$string['confirmdialogheader'] = 'Confirmez l\'action'; +$string['confirmdialogbody'] = 'Merci de confirmer votre action. Cette opération est irréversible.'; +$string['cancellabel'] = 'Annuler'; +$string['confirmlabel'] = 'Confirmer'; +$string['noh5ps'] = 'Il n\'y a aucune ressource interactive disponible pour ce cours.'; + +// Update message email for admin +$string['messageprovider:updates'] = 'Notifications des mises à jour H5P disponibles'; +$string['updatesavailabletitle'] = 'De nouvelles mises à jour H5P sont disponibles'; +$string['updatesavailablemsgpt1'] = 'Des mises à jour de H5P sont disponibles pour certaines activités installées sur votre moodle.'; +$string['updatesavailablemsgpt2'] = 'Cliquez sur le lien ci-dessous pour plus d\'informations.'; +$string['updatesavailablemsgpt3'] = 'La dernière mise à jour a été installée le : {$a}'; +$string['updatesavailablemsgpt4'] = 'Vous utilisez la version issue de : {$a}'; + +$string['lookforupdates'] = 'Rechercher des mises à jour H5P'; +$string['removetmpfiles'] = 'Supprimer les anciens fichiers temporaires H5P'; +$string['removeoldlogentries'] = 'Supprimer les anciennes entrées de logs H5P'; + +// Admin settings. +$string['displayoptionnevershow'] = 'Never show'; +$string['displayoptionalwaysshow'] = 'Always show'; +$string['displayoptionpermissions'] = 'Show only if user has permissions to export H5P'; +$string['displayoptionauthoron'] = 'Controlled by author, default is on'; +$string['displayoptionauthoroff'] = 'Controlled by author, default is off'; +$string['displayoptions'] = 'Afficher les options'; +$string['enableframe'] = 'Afficher la barre de menu des actions'; +$string['enabledownload'] = 'Bouton de téléchargement'; +$string['enableembed'] = 'Bouton d\'intégration'; +$string['enablecopyright'] = 'Bouton de copyright'; +$string['enableabout'] = 'Bouton à propos de H5P'; + +$string['externalcommunication'] = 'communication externe'; +$string['externalcommunication_help'] = 'Aidez au développement de H5P en fournissant des données de façon anonyme. Désactiver cette option empêchera votre site de détecter les nouvelles mise à jour H5P. <a {$a}>En savoir plus</a> sur les données collectées sur le site h5p.org.'; +$string['enablesavecontentstate'] = 'Sauvegarder l\'état du contenu actuel'; +$string['enablesavecontentstate_help'] = 'Sauvegarder automatiquement l\'état actuel du contenu interactif pour chaque utilisateur. Ceci signifie que l\'utilisateur pourra reprendre là où il en est resté la fois précédente.'; +$string['contentstatefrequency'] = 'Fréquence des sauvegardes d\'état de vos contenus'; +$string['contentstatefrequency_help'] = 'Fréquence des sauvegardes automatiques de la progression des utilisateurs en secondes. Augmentez ce nombre si vous rencontrez des problèmes avec des requêtes ajax'; + +// Admin menu. +$string['settings'] = 'Paramètres H5P'; +$string['libraries'] = 'Bibliothèques H5P'; + +// Update libraries section. +$string['updatelibraries'] = 'Mettre à jour toutes les bibliothèques'; +$string['updatesavailable'] = 'Des mises à jour sont disponibles pour vos activités H5P.'; +$string['whyupdatepart1'] = 'Lisez pourquoi il est important de mettre à jour et les bénéfices que vous en tirez sur la page <a {$a}>Pourquoi mettre à jour H5P</a> .'; +$string['whyupdatepart2'] = 'Cette page liste également les changelogs qui mentionnent les nouvelles fonctionnalités ainsi que les bugs fixés.'; +$string['currentversion'] = 'Votre version actuelle est'; +$string['availableversion'] = 'Versions disponibles'; +$string['usebuttonbelow'] = 'Vous pouvez utiliser le bouton ci-dessous pour télécharger et mettre à jour automatiquement vos activités H5P.'; +$string['downloadandupdate'] = 'Télécharger et mettre à jour'; +$string['missingh5purl'] = 'Il manque l\'url du fichier H5P'; +$string['unabletodownloadh5p'] = 'Impossible de télécharger le fichier H5P'; + +// Upload libraries section. +$string['uploadlibraries'] = 'Uploader les bibliothèques'; +$string['options'] = 'Options'; +$string['onlyupdate'] = 'Ne mettre à jour que les bibliothèques existantes'; +$string['disablefileextensioncheck'] = 'Désactiver la vérification des extensions de fichiers'; +$string['disablefileextensioncheckwarning'] = "Attention! Désactiver la vérification des extensions de fichiers peut entrainer des failles de sécurité puisqu\'il est alors possible de télécharger des fichiers php. Ceci permettrait à un attaquant d\'executer du code malicieux sur vos site. Vérifiez bien que vous savez ce que vous uploadez."; +$string['upload'] = 'Uploader'; + +// Installed libraries section. +$string['installedlibraries'] = 'Bibliothèques installées'; +$string['invalidtoken'] = 'Token de sécurité invalide.'; +$string['missingparameters'] = 'Paramètres manquants'; + +// H5P library list headers on admin page. +$string['librarylisttitle'] = 'Titre'; +$string['librarylistrestricted'] = 'Restreint'; +$string['librarylistinstances'] = 'Instances'; +$string['librarylistinstancedependencies'] = 'Dépendances d\'instance'; +$string['librarylistlibrarydependencies'] = 'Dépendances des bibliothèques'; +$string['librarylistactions'] = 'Actions'; + +// H5P library page labels. +$string['addlibraries'] = 'Ajouter des bibliothèques'; +$string['installedlibraries'] = 'Bibliothèques installées'; +$string['notapplicable'] = 'N/A'; +$string['upgradelibrarycontent'] = 'Mettre à jour les contenus des bibliothèques'; + +// Upgrade H5P content page. +$string['upgrade'] = 'Mettre à jour H5P'; +$string['upgradeheading'] = 'Mettre à jour le contenu {$a}'; +$string['upgradenoavailableupgrades'] = 'Il n\'y a aucune mise à jour disponible pour cette bibliothèque.'; +$string['enablejavascript'] = 'Merci d`activer JavaScript.'; +$string['upgrademessage'] = 'Vous êtes sur le point de mettre à jour {$a} instance(s). Sélectionnez la version.'; +$string['upgradeinprogress'] = 'Mise à jour vers la version %ver en cours...'; +$string['upgradeerror'] = 'Une erreur est survenue durant l\'analyse des paramètres:'; +$string['upgradeerrordata'] = 'Impossible de charger les données pour la bibliothèque %lib.'; +$string['upgradeerrorscript'] = 'Impossible de charger les scripts de mise à jour pour %lib.'; +$string['upgradeerrorcontent'] = 'Impossible de mettre à jour le contenu %id:'; +$string['upgradeerrorparamsbroken'] = 'Les paramètres sont invalides.'; +$string['upgradedone'] = 'Vous avez mis à jour {$a} instance(s) avec succès.'; +$string['upgradereturn'] = 'Retour'; +$string['upgradenothingtodo'] = "Il n\'y a aucune instance à mettre à jour."; +$string['upgradebuttonlabel'] = 'Mettre à jour'; +$string['upgradeinvalidtoken'] = 'Erreur : Token de sécruité invalide!'; +$string['upgradelibrarymissing'] = 'Erreur : Votre bibliothèque est manquante!'; + +// Results / report page. +$string['user'] = 'Utilisateur'; +$string['score'] = 'Score'; +$string['maxscore'] = 'Score Maximum'; +$string['finished'] = 'Terminé'; +$string['loadingdata'] = 'Chargement des données.'; +$string['ajaxfailed'] = 'Le chargement des données a échoué.'; +$string['nodata'] = "Il n\'y a aucune donnée correspondant à vos critères."; +$string['currentpage'] = 'Page $current sur $total'; +$string['nextpage'] = 'Page suivante'; +$string['previouspage'] = 'Page précédente'; +$string['search'] = 'Rechercher'; +$string['empty'] = 'Aucun résultat disponible'; + +// Editor +$string['javascriptloading'] = 'Chargement de JavaScript...'; +$string['action'] = 'Action'; +$string['upload'] = 'Uploader'; +$string['create'] = 'Créer'; +$string['editor'] = 'Editeur'; + +$string['invalidlibrary'] = 'Bibliothèque invalide'; +$string['nosuchlibrary'] = 'Aucune bibliothèque de ce type'; +$string['noparameters'] = 'Pas de paramètres'; +$string['invalidparameters'] = 'Paramètres invalides'; +$string['missingcontentuserdata'] = 'Erreur : impossible de trouver les données utilisateur'; + +$string['maximumgrade'] = 'Maximum grade'; +$string['maximumgradeerror'] = 'Please enter a valid positive integer as the max points available for this activity'; + +// Capabilities +$string['hvp:addinstance'] = 'Ajouter une nouvelle activité H5P'; +$string['hvp:restrictlibraries'] = 'Restreindre une bibliothèque H5P'; +$string['hvp:updatelibraries'] = 'Mettre à jour la version d\'une bibliothèque H5P'; +$string['hvp:userestrictedlibraries'] = 'Utiliser des bibliothèques H5P restreintes'; +$string['hvp:savecontentuserdata'] = 'Sauvegarder les données utilisateur H5P'; +$string['hvp:saveresults'] = 'Sauvegarder les résultats'; +$string['hvp:viewresults'] = 'Visualiser les résultats'; +$string['hvp:getcachedassets'] = 'Récupérer les assets mis en cache'; +$string['hvp:getcontent'] = 'Visualiser le contenu d\'un fichier H5P dans un cours'; +$string['hvp:getexport'] = 'Récupérer un fichier H5P dans un cours'; +$string['hvp:updatesavailable'] = 'Être notifié quand des mises à jour H5P sont disponibles'; + +// Capabilities error messages +$string['nopermissiontoupgrade'] = 'Vous n\'avez pas les droits pour mettre à jour les bibliothèques.'; +$string['nopermissiontorestrict'] = 'Vous n\'avez pas les droits pour restreindre les biliothèques.'; +$string['nopermissiontosavecontentuserdata'] = 'Vous n\'avez pas les droits pour sauvegarder les données utilisateur.'; +$string['nopermissiontosaveresult'] = 'Vous n\'avez pas les droits pour sauvegarder les résultats pour ce contenu.'; +$string['nopermissiontoviewresult'] = 'Vous n\'avez pas les droits pour visualiser les résultats de ce contenu.'; + +// Editor translations +$string['noziparchive'] = 'Votre version de PHP ne supporte pas ZipArchive.'; +$string['noextension'] = 'Le fichier que vous avez uploadé n\'est pas un package HTML5 valide (il n\'a pas l\'extension .h5p)'; +$string['nounzip'] = 'Le fichier que vous avez uploadé n\'est pas un package HTML5 valide (impossible de le décompresser)'; +$string['noparse'] = 'Impossible de parser le fichier h5p.json'; +$string['nojson'] = 'Le fichier h5p.json n\'est pas valide'; +$string['invalidcontentfolder'] = 'Répertoire de contenu invalide'; +$string['nocontent'] = 'Impossible de trouver ou de parser le fichier content.json'; +$string['librarydirectoryerror'] = 'Le nom du répertoire des bibliothèques doit être de la forme machineName ou machineName-majorVersion.minorVersion (issue de library.json). (Répertoire: {$a->%directoryName} , machineName: {$a->%machineName}, majorVersion: {$a->%majorVersion}, minorVersion: {$a->%minorVersion})'; +$string['missingcontentfolder'] = 'Un répertoire valide de contenu est manquant'; +$string['invalidmainjson'] = 'Un fichier h5p.json valide est manquant'; +$string['missinglibrary'] = 'La bibliothèque requise {$a->@library} est manquante'; +$string['missinguploadpermissions'] = "Notez que les bibliothèques doivent exister dans le fichier uploadé, mais vous n\'avez pas autorisé l\'upload de nouvelles bibliothèques. Contactez votre administrateur."; +$string['invalidlibraryname'] = 'Nom de bibliothèque non valide: {$a->%name}'; +$string['missinglibraryjson'] = 'Impossible de trouver le fichier library.json file avec un format json valide pour la bibliothèque {$a->%name}'; +$string['invalidsemanticsjson'] = 'Le fichier semantics.json inclu dans la bibliothèque {$a->%name} n\'est pas valide'; +$string['invalidlanguagefile'] = 'Le fichier de langue {$a->%file} de la bibliothèque {$a->%library} n\'est pas valide'; +$string['invalidlanguagefile2'] = 'Le fichier de langue {$a->%languageFile} inclu dans la bibliothèque {$a->%name} n\'est pas valide'; +$string['missinglibraryfile'] = 'Le fichier "{$a->%file}" de la bibliothèque "{$a->%name}" est manquant.'; +$string['missingcoreversion'] = 'Le système n\'est pas en mesure d\'installer le composant <em>{$a->%component}</em> depuis le package, ceci nécessite une version plus récente du plugin H5P. Ce site utilise actuellement la version {$a->%current}, alors que la version requise est {$a->%required} ou supérieur. Vous devriez faire une mise à jour et essayer à nouveau.'; +$string['invalidlibrarydataboolean'] = 'La donnée fournie pour la proriété {$a->%property} de la bibliothèque {$a->%library} n\'est pas valide. Booléen attendu.'; +$string['invalidlibrarydata'] = 'La donnée fournie pour la proriété {$a->%property} de la bibliothèque {$a->%library} n\'est pas valide'; +$string['invalidlibraryproperty'] = 'Impossible de lire la propriété {$a->%property} de la bibliothèque {$a->%library}'; +$string['missinglibraryproperty'] = 'La propriété requise {$a->%property} de la bibliothèque {$a->%library} est manquante'; +$string['invalidlibraryoption'] = 'L\'option {$a->%option} de la bibliothèque {$a->%library} n\'est pas autorisée'; +$string['addedandupdatelibraries'] = '{$a->%new} nouvelles bibliothèques H5P ont été ajoutées et {$a->%old} déjà existantes ont été mises à jour.'; +$string['addednewlibraries'] = '{$a->%new} nouvelles bibliothèques H5P ont été ajoutées.'; +$string['updatedlibraries'] = '{$a->%old} bibliothèques H5P ont été mises à jour.'; +$string['missingdependency'] = 'la dépendance {$a->@dep} requise par {$a->@lib} est manquante.'; +$string['invalidstring'] = 'La chaine fournie n\'est pas valide selon l\'expression régulière suivante : (value: \"{$a->%value}\", regexp: \"{$a->%regexp}\")'; +$string['invalidfile'] = 'Le fichier "{$a->%filename}" n\est pas autorisé. Seuls les fichiers avec les extensions suivantes sont autorisés : {$a->%files-allowed}.'; +$string['invalidmultiselectoption'] = 'éléments selectionnés dans un multi-select non valides.'; +$string['invalidselectoption'] = 'élément sélectionné dans un select non valide.'; +$string['invalidsemanticstype'] = 'Erreur interne H5P: Type de contenu "{$a->@type}" non valide. Supprimez ce contenu!'; +$string['invalidsemantics'] = 'La bibliothèque utilisée dans cette ressource n\'est pas valide'; +$string['copyrightinfo'] = 'Information copyright'; +$string['years'] = 'Année(s)'; +$string['undisclosed'] = 'Masqué'; +$string['attribution'] = 'Attribution 4.0'; +$string['attributionsa'] = 'Attribution - Partage dans les Mêmes Conditions 4.0'; +$string['attributionnd'] = 'Attribution - Pas de Modification 4.0'; +$string['attributionnc'] = 'Attribution - Non Commercial 4.0'; +$string['attributionncsa'] = 'Attribution - Non Commercial- Partage dans les Mêmes Conditions 4.0'; +$string['attributionncnd'] = 'Attribution - Non Commercial- Non Commercial 4.0'; +$string['gpl'] = 'Licence GPL v3'; +$string['pd'] = 'Domaine Public'; +$string['pddl'] = 'Transfert dans le Domaine Public et Licence'; +$string['pdm'] = 'Marque du domaine public'; +$string['copyrightstring'] = 'Copyright'; +$string['unabletocreatedir'] = 'Impossible de créer le répertoire.'; +$string['unabletogetfieldtype'] = 'Impossible de récupérer le type de champ.'; +$string['filetypenotallowed'] = 'Type de fichier non autorisé.'; +$string['invalidfieldtype'] = 'Type de champ invalide.'; +$string['invalidimageformat'] = 'Format de fichier image non valide. Utilisez jpg, png ou gif.'; +$string['filenotimage'] = 'Ce fichier n\'est pas une image.'; +$string['invalidaudioformat'] = 'Format de fichier audio non valide. Utilisez mp3 ou wav.'; +$string['invalidvideoformat'] = 'Format de fichier vidéo non valide. Utilisez mp4 ou webm.'; +$string['couldnotsave'] = 'Impossible de sauvegarder le fichier.'; +$string['couldnotcopy'] = 'Impossible de copier le fichier.'; + +// Welcome messages +$string['welcomeheader'] = 'Bienvenue dans le monde H5P!'; +$string['welcomegettingstarted'] = 'Pour démarrer avec H5P et Moodle, consultez nos tutoriels <a {$a->moodle_tutorial}>tutorial</a> et testez <a {$a->example_content}>nos exemples</a> sur le site H5P.org pour vous en inspirer.<br>Pour vous simplifier la taĉhe, les modules les plus populaires ont déjà été installés!'; +$string['welcomecommunity'] = 'Nous espérons que vous allez apprécier H5P et rejoindre notre communauté en constante augmentation au travers de nos <a {$a->forums}>forums</a> et notre chat <a {$a->gitter}>H5P sur Gitter</a>'; +$string['welcomecontactus'] = 'Si vous avez des suggestions, n\'hésitez pas à <a {$a}>nous contacter</a>. Nous prenons toutes les suggestions très sérieuse en considération pour rendre H5P meilleur chaque jour !'; diff --git a/html/moodle2/mod/hvp/lang/he/hvp.php b/html/moodle2/mod/hvp/lang/he/hvp.php new file mode 100755 index 0000000000..0f367ab60c --- /dev/null +++ b/html/moodle2/mod/hvp/lang/he/hvp.php @@ -0,0 +1,264 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +$string['modulename'] = 'תוכן אינטראקטיבי'; +$string['modulename_help'] = 'פעילות H5P מאפשר יצירה של תוכן דינמי ואינטראקטיבי כגון: סרטוני וידאו משובצים בשאלות מסוגים שונים, מצגות הכוללות שאלות מגוונות, משחקוני למידה, שאלות גרירה למיניהן, רב־בררה, ועוד סוגים רבים... +בנוסף, ניתן ליבא וליצא חבילות לומדה לשימוש חוזר בתכנים קיימים. הפעילות מבצעת מקב למידה מבוסס על תקן xAPI ומדווחת ציונים לגליון הציונים של ה Moodle. +ניתן להעלות קבצי h5p ממאגר עצמי הלמידה (OER) של אתר h5p.org'; +$string['modulename_link'] = 'https://h5p.org/moodle-more-help'; +$string['modulenameplural'] = 'תוכן אינטראקטיבי'; +$string['pluginadministration'] = 'H5P'; +$string['pluginname'] = 'H5P'; +$string['intro'] = 'הנחיה לתלמידים'; +$string['h5pfile'] = 'קובץ H5P'; +$string['fullscreen'] = 'מסך־מלא'; +$string['disablefullscreen'] = 'תצוגה רגילה'; +$string['download'] = 'הורדה'; +$string['copyright'] = 'זכויות יוצרים'; +$string['embed'] = 'שיבוץ'; +$string['showadvanced'] = 'תצוגת תכונות מתקדמות'; +$string['hideadvanced'] = 'הסתרת תכונות מתקדמות'; +$string['resizescript'] = 'Include this script on your website if you want dynamic sizing of the embedded content:'; +$string['size'] = 'גודל'; +$string['close'] = 'סגירה'; +$string['title'] = 'כותרת'; +$string['author'] = 'יוצר/ת'; +$string['year'] = 'שנה'; +$string['source'] = 'מקור'; +$string['license'] = 'רשיון'; +$string['thumbnail'] = 'תמונה ממוזערת'; +$string['nocopyright'] = 'לא קיים מידע אודות זכויות יוצרים עבור תוכן זה.'; +$string['downloadtitle'] = 'הורדת תוכן זה כקובץ H5P.'; +$string['copyrighttitle'] = 'צפיה בזכויות היוצרים של תוכן זה.'; +$string['embedtitle'] = 'תצוגת קוד השיבוץ של תוכן זה.'; +$string['h5ptitle'] = 'בקרו באתר H5P.org לחיפוש ואיחזור של תוכן נוסף.'; +$string['contentchanged'] = 'התוכן של רכיב זה עודכן מאז השימוש האחרון שלכם בפעילות זו.'; +$string['startingover'] = "הפעילות תוצג מההתחלה."; +$string['confirmdialogheader'] = 'אישור פעולה'; +$string['confirmdialogbody'] = 'יש לאשר פעולה זו. שימו לב! לא ניתן יהיה לחזור למצב הנוכחי.'; +$string['cancellabel'] = 'ביטול'; +$string['confirmlabel'] = 'אישור'; +$string['noh5ps'] = 'לא קיים תוכן H5P אינטראקטיבי בקורס זה.'; + +// Update message email for admin +$string['messageprovider:updates'] = 'Notification of available H5P updates'; +$string['updatesavailabletitle'] = 'New H5P updates are available'; +$string['updatesavailablemsgpt1'] = 'There are updates available for the H5P content types you\'ve installed on your Moodle site.'; +$string['updatesavailablemsgpt2'] = 'Head over to the page linked to below for further instructions.'; +$string['updatesavailablemsgpt3'] = 'The latest update was released on: {$a}'; +$string['updatesavailablemsgpt4'] = 'Your are running a version from: {$a}'; + +$string['lookforupdates'] = 'Look for H5P updates'; +$string['removetmpfiles'] = 'Remove old H5P temporary files'; +$string['removeoldlogentries'] = 'Remove old H5P log entries'; + +// Admin settings. +$string['displayoptionnevershow'] = 'Never show'; +$string['displayoptionalwaysshow'] = 'Always show'; +$string['displayoptionpermissions'] = 'Show only if user has permissions to export H5P'; +$string['displayoptionauthoron'] = 'Controlled by author, default is on'; +$string['displayoptionauthoroff'] = 'Controlled by author, default is off'; +$string['displayoptions'] = 'Display Options'; +$string['enableframe'] = 'Display action bar and frame'; +$string['enabledownload'] = 'Download button'; +$string['enableembed'] = 'Embed button'; +$string['enablecopyright'] = 'Copyright button'; +$string['enableabout'] = 'About H5P button'; + +$string['externalcommunication'] = 'External communication'; +$string['externalcommunication_help'] = 'Aid in the development of H5P by contributing anonymous usage data. Disabling this option will prevent your site from fetching the newest H5P updates. You can read more about <a {$a}>which data is collected</a> on h5p.org.'; +$string['enablesavecontentstate'] = 'Save content state'; +$string['enablesavecontentstate_help'] = 'Automatically save the current state of interactive content for each user. This means that the user may pick up where he left off.'; +$string['contentstatefrequency'] = 'Save content state frequency'; +$string['contentstatefrequency_help'] = 'In seconds, how often do you wish the user to auto save their progress. Increase this number if you\'re having issues with many ajax requests'; + +// Admin menu. +$string['settings'] = 'H5P Settings'; +$string['libraries'] = 'H5P Libraries'; + +// Update libraries section. +$string['updatelibraries'] = 'Update All Libraries'; +$string['updatesavailable'] = 'There are updates available for your H5P content types.'; +$string['whyupdatepart1'] = 'You can read about why it\'s important to update and the benefits from doing so on the <a {$a}>Why Update H5P</a> page.'; +$string['whyupdatepart2'] = 'The page also list the different changelogs, where you can read about the new features introduced and the issues that have been fixed.'; +$string['currentversion'] = 'You are running'; +$string['availableversion'] = 'Available update'; +$string['usebuttonbelow'] = 'You can use the button below to automatically download and update all of your content types.'; +$string['downloadandupdate'] = 'Download & Update'; +$string['missingh5purl'] = 'Missing URL for H5P file'; +$string['unabletodownloadh5p'] = 'Unable to download H5P file'; + +// Upload libraries section. +$string['uploadlibraries'] = 'Upload Libraries'; +$string['options'] = 'Options'; +$string['onlyupdate'] = 'Only update existing libraries'; +$string['disablefileextensioncheck'] = 'Disable file extension check'; +$string['disablefileextensioncheckwarning'] = "Warning! Disabling the file extension check may have security implications as it allows for uploading of php files. That in turn could make it possible for attackers to execute malicious code on your site. Please make sure you know exactly what you're uploading."; +$string['upload'] = 'Upload'; + +// Installed libraries section. +$string['installedlibraries'] = 'Installed Libraries'; +$string['invalidtoken'] = 'Invalid security token.'; +$string['missingparameters'] = 'Missing parameters'; + +// H5P library list headers on admin page. +$string['librarylisttitle'] = 'Title'; +$string['librarylistrestricted'] = 'Restricted'; +$string['librarylistinstances'] = 'Instances'; +$string['librarylistinstancedependencies'] = 'Instance dependencies'; +$string['librarylistlibrarydependencies'] = 'Library dependencies'; +$string['librarylistactions'] = 'Actions'; + +// H5P library page labels. +$string['addlibraries'] = 'Add libraries'; +$string['installedlibraries'] = 'Installed libraries'; +$string['notapplicable'] = 'N/A'; +$string['upgradelibrarycontent'] = 'Upgrade library content'; + +// Upgrade H5P content page. +$string['upgrade'] = 'Upgrade H5P'; +$string['upgradeheading'] = 'Upgrade {$a} content'; +$string['upgradenoavailableupgrades'] = 'There are no available upgrades for this library.'; +$string['enablejavascript'] = 'Please enable JavaScript.'; +$string['upgrademessage'] = 'You are about to upgrade {$a} content instance(s). Please select upgrade version.'; +$string['upgradeinprogress'] = 'Upgrading to %ver...'; +$string['upgradeerror'] = 'An error occurred while processing parameters:'; +$string['upgradeerrordata'] = 'Could not load data for library %lib.'; +$string['upgradeerrorscript'] = 'Could not load upgrades script for %lib.'; +$string['upgradeerrorcontent'] = 'Could not upgrade content %id:'; +$string['upgradeerrorparamsbroken'] = 'Parameters are broken.'; +$string['upgradedone'] = 'You have successfully upgraded {$a} content instance(s).'; +$string['upgradereturn'] = 'Return'; +$string['upgradenothingtodo'] = "There's no content instances to upgrade."; +$string['upgradebuttonlabel'] = 'Upgrade'; +$string['upgradeinvalidtoken'] = 'Error: Invalid security token!'; +$string['upgradelibrarymissing'] = 'Error: Your library is missing!'; + +// Results / report page. +$string['user'] = 'משתמש'; +$string['score'] = 'ניקוד'; +$string['maxscore'] = 'ניקוד מירבי'; +$string['finished'] = 'הסתיים'; +$string['loadingdata'] = 'מאחזר את התוכן.'; +$string['ajaxfailed'] = 'התרחשה שגיאה, התוכן לא זמין.'; +$string['nodata'] = "לא קיימים תכנים העונים על בקשת החיפוש שלך."; +$string['currentpage'] = 'עמוד $current מתוך $total'; +$string['nextpage'] = 'לעמוד הבא'; +$string['previouspage'] = 'לעמוד הקודם'; +$string['search'] = 'חיפוש'; +$string['empty'] = 'לא נמצאו תכנים'; + +// Editor +$string['javascriptloading'] = 'מחכים ל JavaScript...'; +$string['action'] = 'פעולה'; +$string['upload'] = 'העלאה'; +$string['create'] = 'יצירה'; +$string['editor'] = 'עורך'; + +$string['invalidlibrary'] = 'ספריה לא תקינה'; +$string['nosuchlibrary'] = 'לא קיימת ספריה כזו'; +$string['noparameters'] = 'חסרים משתני אתחול'; +$string['invalidparameters'] = 'משתני אתחול לא תקינים'; +$string['missingcontentuserdata'] = 'התרחשה תקלה: לא זמינים נתוני השימוש של התלמיד עבור פעילות זו'; + +$string['maximumgrade'] = 'Maximum grade'; +$string['maximumgradeerror'] = 'Please enter a valid positive integer as the max points available for this activity'; + +// Capabilities +$string['hvp:addinstance'] = 'הוספת פעילות H5P חדשה'; +$string['hvp:restrictlibraries'] = 'הגבלת גישה לספריית H5P'; +$string['hvp:updatelibraries'] = 'עדכון גרסה של ספריית H5P'; +$string['hvp:userestrictedlibraries'] = 'שימוש בספריות H5P שמורות'; +$string['hvp:savecontentuserdata'] = 'שמירת נתוני משתמש מתוך פעילות H5P'; +$string['hvp:saveresults'] = 'שמירת תוצאות שימוש ברכיב H5P'; +$string['hvp:viewresults'] = 'צפיה בתוצאות שימוש ברכיב H5P'; +$string['hvp:getcachedassets'] = 'אחזור משאבי מטמון של רכיב H5P'; +$string['hvp:getcontent'] = 'צפיה בתוכן פעילות H5P מתוך הקורס'; +$string['hvp:getexport'] = 'יצוא תוכן פעילות H5P מתוך הקורס'; +$string['hvp:updatesavailable'] = 'קבלת התראות כאשר זמין רכיב H5P חדש'; + +// Capabilities error messages +$string['nopermissiontoupgrade'] = 'You do not have permission to upgrade libraries.'; +$string['nopermissiontorestrict'] = 'You do not have permission to restrict libraries.'; +$string['nopermissiontosavecontentuserdata'] = 'You do not have permission to save content user data.'; +$string['nopermissiontosaveresult'] = 'You do not have permission to save result for this content.'; +$string['nopermissiontoviewresult'] = 'You do not have permission to view results for this content.'; + +// Editor translations +$string['noziparchive'] = 'Your PHP version does not support ZipArchive.'; +$string['noextension'] = 'The file you uploaded is not a valid HTML5 Package (It does not have the .h5p file extension)'; +$string['nounzip'] = 'The file you uploaded is not a valid HTML5 Package (We are unable to unzip it)'; +$string['noparse'] = 'Could not parse the main h5p.json file'; +$string['nojson'] = 'The main h5p.json file is not valid'; +$string['invalidcontentfolder'] = 'Invalid content folder'; +$string['nocontent'] = 'Could not find or parse the content.json file'; +$string['librarydirectoryerror'] = 'Library directory name must match machineName or machineName-majorVersion.minorVersion (from library.json). (Directory: {$a->%directoryName} , machineName: {$a->%machineName}, majorVersion: {$a->%majorVersion}, minorVersion: {$a->%minorVersion})'; +$string['missingcontentfolder'] = 'A valid content folder is missing'; +$string['invalidmainjson'] = 'A valid main h5p.json file is missing'; +$string['missinglibrary'] = 'Missing required library {$a->@library}'; +$string['missinguploadpermissions'] = "Note that the libraries may exist in the file you uploaded, but you're not allowed to upload new libraries. Contact the site administrator about this."; +$string['invalidlibraryname'] = 'Invalid library name: {$a->%name}'; +$string['missinglibraryjson'] = 'Could not find library.json file with valid json format for library {$a->%name}'; +$string['invalidsemanticsjson'] = 'Invalid semantics.json file has been included in the library {$a->%name}'; +$string['invalidlanguagefile'] = 'Invalid language file {$a->%file} in library {$a->%library}'; +$string['invalidlanguagefile2'] = 'Invalid language file {$a->%languageFile} has been included in the library {$a->%name}'; +$string['missinglibraryfile'] = 'The file "{$a->%file}" is missing from library: "{$a->%name}"'; +$string['missingcoreversion'] = 'The system was unable to install the <em>{$a->%component}</em> component from the package, it requires a newer version of the H5P plugin. This site is currently running version {$a->%current}, whereas the required version is {$a->%required} or higher. You should consider upgrading and then try again.'; +$string['invalidlibrarydataboolean'] = 'Invalid data provided for {$a->%property} in {$a->%library}. Boolean expected.'; +$string['invalidlibrarydata'] = 'Invalid data provided for {$a->%property} in {$a->%library}'; +$string['invalidlibraryproperty'] = 'Can\'t read the property {$a->%property} in {$a->%library}'; +$string['missinglibraryproperty'] = 'The required property {$a->%property} is missing from {$a->%library}'; +$string['invalidlibraryoption'] = 'Illegal option {$a->%option} in {$a->%library}'; +$string['addedandupdatelibraries'] = 'Added {$a->%new} new H5P libraries and updated {$a->%old} old.'; +$string['addednewlibraries'] = 'Added {$a->%new} new H5P libraries.'; +$string['updatedlibraries'] = 'Updated {$a->%old} H5P libraries.'; +$string['missingdependency'] = 'Missing dependency {$a->@dep} required by {$a->@lib}.'; +$string['invalidstring'] = 'Provided string is not valid according to regexp in semantics. (value: \"{$a->%value}\", regexp: \"{$a->%regexp}\")'; +$string['invalidfile'] = 'File "{$a->%filename}" not allowed. Only files with the following extensions are allowed: {$a->%files-allowed}.'; +$string['invalidmultiselectoption'] = 'Invalid selected option in multi-select.'; +$string['invalidselectoption'] = 'Invalid selected option in select.'; +$string['invalidsemanticstype'] = 'H5P internal error: unknown content type "{$a->@type}" in semantics. Removing content!'; +$string['invalidsemantics'] = 'Library used in content is not a valid library according to semantics'; +$string['copyrightinfo'] = 'Copyright information'; +$string['years'] = 'Year(s)'; +$string['undisclosed'] = 'Undisclosed'; +$string['attribution'] = 'Attribution 4.0'; +$string['attributionsa'] = 'Attribution-ShareAlike 4.0'; +$string['attributionnd'] = 'Attribution-NoDerivs 4.0'; +$string['attributionnc'] = 'Attribution-NonCommercial 4.0'; +$string['attributionncsa'] = 'Attribution-NonCommercial-ShareAlike 4.0'; +$string['attributionncnd'] = 'Attribution-NonCommercial-NoDerivs 4.0'; +$string['gpl'] = 'General Public License v3'; +$string['pd'] = 'Public Domain'; +$string['pddl'] = 'Public Domain Dedication and Licence'; +$string['pdm'] = 'Public Domain Mark'; +$string['copyrightstring'] = 'Copyright'; +$string['unabletocreatedir'] = 'Unable to create directory.'; +$string['unabletogetfieldtype'] = 'Unable to get field type.'; +$string['filetypenotallowed'] = 'File type isn\'t allowed.'; +$string['invalidfieldtype'] = 'Invalid field type.'; +$string['invalidimageformat'] = 'Invalid image file format. Use jpg, png or gif.'; +$string['filenotimage'] = 'File is not an image.'; +$string['invalidaudioformat'] = 'Invalid audio file format. Use mp3 or wav.'; +$string['invalidvideoformat'] = 'Invalid video file format. Use mp4 or webm.'; +$string['couldnotsave'] = 'Could not save file.'; +$string['couldnotcopy'] = 'Could not copy file.'; + +// Welcome messages +$string['welcomeheader'] = 'ברוכים הבאים לעולם של H5P!'; +$string['welcomegettingstarted'] = 'כדי להתחיל בהכרת רכיב H5P במערכת Moodle ניתן לבחור ב<a {$a->moodle_tutorial}>מדריך</a> וגם <a {$a->example_content}>תוכן לדוגמה</a> באתר H5P.org לקבלת השראה.<br>התוכן הפופולארי ביותר הותקן וכעת זמין לנוחיותכם!'; +$string['welcomecommunity'] = 'אנו מקווים שתהנו פעילות ברכיב H5P ושתמצאו עניין וזמן להצטרף לקהילת המשתמשים ויצרני התוכן העולמית שלנו בעזרת הקישורים הבאים <a {$a->forums}>פורומים, קבוצות דיון</a> וחדרי רב־שיח <a {$a->gitter}>H5P at Gitter</a>'; +$string['welcomecontactus'] = 'נשמח לקבל כל משוב <a {$a}>יצירת קשר</a>. אנו מתייחסים למשוב באופן מאוד רציני ומחוייבים ליצירת חווית שימוש איכותית ומשופרת ברכיב H5P !'; diff --git a/html/moodle2/mod/hvp/lang/no/hvp.php b/html/moodle2/mod/hvp/lang/no/hvp.php new file mode 100755 index 0000000000..7dd218f24f --- /dev/null +++ b/html/moodle2/mod/hvp/lang/no/hvp.php @@ -0,0 +1,272 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +$string['modulename'] = 'Interaktivt innhold'; +$string['modulename_help'] = 'Aktivitetsmodulen H5P gjør deg istand til å lage interaktivt innhold som feks Interaktive videoer, spørsmåls-sett, dra og slipp, flervalg, presentasjoner og mye mer. + +I tillegg til å være et forfatterverktøy for rikt innhold, gjør H5P det mulig å importere og eksportere H5P-filer for effektiv gjenbruk og deling av innhold. + +Brukerinteraksjoner og poeng spores vha xAPI og er tilgjengelig gjennom Moodles karakterbok + +Du kan legge til eksisterende interaktivt H5P-innhold fra andre nettsider ved å laste opp en .h5p-fil. Du kan lage og laste ned .h5p-filer på feks h5p.org'; +$string['modulename_link'] = 'https://h5p.org/moodle-more-help'; +$string['modulenameplural'] = 'Interaktivt innhold'; +$string['pluginadministration'] = 'H5P'; +$string['pluginname'] = 'H5P'; +$string['intro'] = 'Introduksjon'; +$string['h5pfile'] = 'H5P-fil'; +$string['fullscreen'] = 'Fullskjermsvisning'; +$string['disablefullscreen'] = 'Gå ut av fullskjermsvisning'; +$string['download'] = 'Last ned'; +$string['copyright'] = 'Opphavsrett'; +$string['embed'] = 'Inkluder'; +$string['showadvanced'] = 'Vis avanserte instillinger'; +$string['hideadvanced'] = 'Skjul avanserte instillinger'; +$string['resizescript'] = 'Inkluder dette scriptet på din nettside hvis du ønsker dynamisk endring av størrelse på inkludert innhold:'; +$string['size'] = 'Størrelse'; +$string['close'] = 'Lukk'; +$string['title'] = 'Tittel'; +$string['author'] = 'Forfatter'; +$string['year'] = 'År'; +$string['source'] = 'Kilde'; +$string['license'] = 'Lisens'; +$string['thumbnail'] = 'Miniatyrbilde'; +$string['nocopyright'] = 'Informasjon om opphavsrett ikke tilgjengelig for dette innholdet.'; +$string['downloadtitle'] = 'Last ned dette innholdet som en H5P-fil.'; +$string['copyrighttitle'] = 'Informasjon om opphavsrett for dette innholdet.'; +$string['embedtitle'] = 'Vis HTML-kode du kan bruke for å inkludere innholdet på en annen nettside.'; +$string['h5ptitle'] = 'Besøk H5P.org for å se mer interaktivt innhold.'; +$string['contentchanged'] = 'Dette innholdet har endret seg siden sist du brukte det.'; +$string['startingover'] = 'Du starter på nytt.'; +$string['confirmdialogheader'] = 'Bekreft handling'; +$string['confirmdialogbody'] = 'Er du sikker på at du ønsker å gjøre dette? Handlingen er ikke reversibel.'; +$string['cancellabel'] = 'Avbryt'; +$string['confirmlabel'] = 'Bekreft'; +$string['noh5ps'] = 'Der finnes ikke noe interaktivt innhold for dette kurset.'; + +// Update message email for admin +$string['messageprovider:updates'] = 'Varsel om tilgjengelige H5P-oppdateringer'; +$string['updatesavailabletitle'] = 'Nye H5P-oppdateringer er tilgjengelig'; +$string['updatesavailablemsgpt1'] = 'Der er tilgjengelige oppdateringer for H5P-innholdstypene du har i din Moodle-installasjon.'; +$string['updatesavailablemsgpt2'] = 'Naviger til lenka under for ytterligere instruksjoner.'; +$string['updatesavailablemsgpt3'] = 'Den seneste oppdateringen ble sluppet: {$a}'; +$string['updatesavailablemsgpt4'] = 'Du kjører en versjon fra: {$a}'; + +$string['lookforupdates'] = 'Se etter H5P-oppdateringer'; +$string['removetmpfiles'] = 'Fjern gamle midlertidige filer'; +$string['removeoldlogentries'] = 'Fjern gamle H5P-loggmeldinger'; + +// Admin settings. +$string['displayoptionnevershow'] = 'Vis aldri'; +$string['displayoptionalwaysshow'] = 'Vis alltid'; +$string['displayoptionpermissions'] = 'Vis kun for brukere som har tilgang til å eksportere H5Per'; +$string['displayoptionauthoron'] = 'Settes av forfatter, standard på'; +$string['displayoptionauthoroff'] = 'Settes av forfatter, standard av'; +$string['displayoptions'] = 'Visningsinnstillinger'; +$string['enableframe'] = 'Vis handlingslinjen og rammen'; +$string['enabledownload'] = 'Nedlastings-knapp'; +$string['enableembed'] = 'Inkluder-knapp'; +$string['enablecopyright'] = 'Opphavsretts-knapp'; +$string['enableabout'] = 'Om H5P-knapp'; + +$string['externalcommunication'] = 'Ekstern kommuniksjon'; +$string['externalcommunication_help'] = 'Bidra til utviklingen av H5P ved å bidra med anonym bruksdata. Ved å skru av denne innstillingen vil du hindre installasjonen i å hente de seneste H5P-oppdateringene. Du kan lese mer om <a {$a}>hvilke data som samles</a> på h5p.org.'; +$string['enablesavecontentstate'] = 'Lagre tilstanden til innholdet'; +$string['enablesavecontentstate_help'] = 'Automatisk lagring av hva brukeren har svart og hvor langt brukeren har kommet. Dette betyr brukeren kan fortsette der han avsluttet.'; +$string['contentstatefrequency'] = 'Frekvens for tilstandslagring'; +$string['contentstatefrequency_help'] = 'Hvor ofte skal man lagre tilstanden (i antall sekunder). Øk dette tallet hvis du har problemer med for mange ajax-forespørsler'; +$string['enabledlrscontenttypes'] = 'Skru på LRS-avhengige innholdstyper'; +$string['enabledlrscontenttypes_help'] = 'Gjør det mulig å bruke innholdstyper som er avhengig av en såkalt Learning Record Store for å virke, slik som Questionnaire-innholdstypen.'; + +// Admin menu. +$string['settings'] = 'H5P-innstillinger'; +$string['libraries'] = 'H5P-bibliotek'; + +// Update libraries section. +$string['updatelibraries'] = 'Oppdater alle bibliotek'; +$string['updatesavailable'] = 'Der finnes tilgjengelige oppdateringer for H5P-innholdstypene dine.'; +$string['whyupdatepart1'] = 'Du kan lese mer om hvorfor det er viktig å holde seg oppdatert og godene ved å gjøre det på <a {$a}>Why Update H5P</a>-siden.'; +$string['whyupdatepart2'] = 'Denne siden viser også en liste over de forskjellige endringene, hvor du kan lese om nye funksjoner som introduseres og problemer som er fikset.'; +$string['currentversion'] = 'Du har'; +$string['availableversion'] = 'Tilgjengelig oppdatering'; +$string['usebuttonbelow'] = 'Du kan bruke knappen under for å automatisk laste ned og oppdatere alle innholdstypene dine.'; +$string['downloadandupdate'] = 'Last ned & oppdater'; +$string['missingh5purl'] = 'Mangler URL for H5P-fil'; +$string['unabletodownloadh5p'] = 'Ute av stand til å laste ned H5P-fil'; + +// Upload libraries section. +$string['uploadlibraries'] = 'Last opp bilbliotek'; +$string['options'] = 'Innstillinger'; +$string['onlyupdate'] = 'Oppdater kun eksisterende bibliotek'; +$string['disablefileextensioncheck'] = 'Slå av sjekk for fil-endelser'; +$string['disablefileextensioncheckwarning'] = 'Advarsel! Det å slå av sjekk for fil-endelser kan ha alvorlige sikkerhetsimplikasjoner, siden man da tillater å laste opp php-filer. Dette kan gjøre det mulig for eksterne å kjøre ondsinnet kode på ditt nettsted. Gjør dette kun hvis du vet hva du holder på med.'; +$string['upload'] = 'Last opp'; + +// Installed libraries section. +$string['installedlibraries'] = 'Installerte bibliotek'; +$string['invalidtoken'] = 'Ufyldig sikkerhetsnøkkel.'; +$string['missingparameters'] = 'Mangler parametre'; + +// H5P library list headers on admin page. +$string['librarylisttitle'] = 'Tittel'; +$string['librarylistrestricted'] = 'Begrenset'; +$string['librarylistinstances'] = 'Instanser'; +$string['librarylistinstancedependencies'] = 'Instansavhengigheter'; +$string['librarylistlibrarydependencies'] = 'Biblioteksavhengigheter'; +$string['librarylistactions'] = 'Handlinger'; + +// H5P library page labels. +$string['addlibraries'] = 'Legg til bibliotek'; +$string['installedlibraries'] = 'Installerte bibliotek'; +$string['notapplicable'] = '--'; +$string['upgradelibrarycontent'] = 'Oppgrader H5P-innhold'; + +// Upgrade H5P content page. +$string['upgrade'] = 'Oppgrader H5P'; +$string['upgradeheading'] = 'Oppgrader {$a}-innhold'; +$string['upgradenoavailableupgrades'] = 'Det finnes ingen oppgraderinger for dette biblioteket.'; +$string['enablejavascript'] = 'Vær vennlig å slå på JavaScript-støtte i nettleseren din.'; +$string['upgrademessage'] = 'Du er iferd med å oppgradere {$a} innholdsinstans(er). Men først må du velge hvilke versjon du ønsker å oppgradere til.'; +$string['upgradeinprogress'] = 'Oppgraderer til %ver...'; +$string['upgradeerror'] = 'En fil skjedde under prosesseringen:'; +$string['upgradeerrordata'] = 'Klarte ikke å laste data for biblioteket %lib.'; +$string['upgradeerrorscript'] = 'Klarte ikke å laste oppgraderingskoden til %lib.'; +$string['upgradeerrorcontent'] = 'Klarte ikke å oppgradere innholdet med ID: %id:'; +$string['upgradeerrorparamsbroken'] = 'Parameterne er ødelagt.'; +$string['upgradedone'] = 'Du har nå oppgrader {$a} innholdsinstans(er).'; +$string['upgradereturn'] = 'Gå tilbake'; +$string['upgradenothingtodo'] = 'Det finnes ikke noe innhold å oppgradere'; +$string['upgradebuttonlabel'] = 'Oppgrader'; +$string['upgradeinvalidtoken'] = 'Feil: Ugyldig sikkerhetsnøkkel!'; +$string['upgradelibrarymissing'] = 'Feil: Et bibliotek mangler!'; + +// Results / report page. +$string['user'] = 'Bruker'; +$string['score'] = 'Poeng'; +$string['maxscore'] = 'Max poeng'; +$string['finished'] = 'Ferdig'; +$string['loadingdata'] = 'Laster data.'; +$string['ajaxfailed'] = 'Feilet ved lasting av data.'; +$string['nodata'] = 'Det finnes ikke data som passer til kriteriene.'; +$string['currentpage'] = 'Side $current av $total'; +$string['nextpage'] = 'Neste side'; +$string['previouspage'] = 'Forrige side'; +$string['search'] = 'Søk'; +$string['empty'] = 'Ingen resultater tilgjengelig'; + +// Editor +$string['javascriptloading'] = 'Venter på JavaScript...'; +$string['action'] = 'Handling'; +$string['upload'] = 'Laste opp'; +$string['create'] = 'Lag ny'; +$string['editor'] = 'Innholdstype'; + +$string['invalidlibrary'] = 'Ugyldig bibliotek'; +$string['nosuchlibrary'] = 'Biblioteket finnes ikke'; +$string['noparameters'] = 'Ingen parametre'; +$string['invalidparameters'] = 'Ugyldige parametre'; +$string['missingcontentuserdata'] = 'Feil: Kunne ikke finne innholdsbrukerdata'; + +$string['maximumgrade'] = 'Maximum grade'; +$string['maximumgradeerror'] = 'Please enter a valid positive integer as the max points available for this activity'; + +// Capabilities +$string['hvp:addinstance'] = 'Legg til en ny H5P-aktivitet'; +$string['hvp:restrictlibraries'] = 'Begrense et H5P-bibliotek'; +$string['hvp:updatelibraries'] = 'Oppdatere versjonen til et H5P-bibliotek'; +$string['hvp:userestrictedlibraries'] = 'Bruke begrenset H5P-bibliotek'; +$string['hvp:savecontentuserdata'] = 'Lagre H5P-brukerdata'; +$string['hvp:saveresults'] = 'Lagre resultater for H5P-innhold'; +$string['hvp:viewresults'] = 'Vise resultater for H5P-innhold'; +$string['hvp:getcachedassets'] = 'Tilgang til bufret H5P-innholdsressurser'; +$string['hvp:getcontent'] = 'Tilgang til innholdet til H5P-fil i kurs'; +$string['hvp:getexport'] = 'Tilgang til eksportfil fra H5P i kurs'; +$string['hvp:updatesavailable'] = 'Få varsel når H5P-oppdateringer er tilgjengelige'; + +// Capabilities error messages +$string['nopermissiontoupgrade'] = 'Du har ikke tillatelse til å oppgradere bibliotek.'; +$string['nopermissiontorestrict'] = 'Du har ikke tillatelse til å begrense tilgang til bibliotek.'; +$string['nopermissiontosavecontentuserdata'] = 'Du har ikke tillatelse til å lagre brukerdata.'; +$string['nopermissiontosaveresult'] = 'Du har ikke tillatelse til å lagre resultater for dette innholdet.'; +$string['nopermissiontoviewresult'] = 'Du har ikke tillatelse til å se resultater for dette innholdet.'; + +// Editor translations +$string['noziparchive'] = 'PHP-versjonen du bruker støtter ikke ZipArchive.'; +$string['noextension'] = 'Fila du lastet opp er ikke en gyldig H5P (Den har ikke .h5p som filendelse)'; +$string['nounzip'] = 'Fila du lastet opp er ikke en gyldig H5P (Jeg klarer ikke å unzippe den)'; +$string['noparse'] = 'Jeg klarte ikke å tolke h5p.json-fila'; +$string['nojson'] = 'h5p.json-fila er ugyldig'; +$string['invalidcontentfolder'] = 'Ugyldig innholdskatalog'; +$string['nocontent'] = 'Kunne ikke finne eller tolke content.json-fila'; +$string['librarydirectoryerror'] = 'Biblioteks-katalogavnet må være lik machineName eller machineName-majorVersion.minorVersion (fra library.json). (Katalog: {$a->%directoryName} , machineName: {$a->%machineName}, majorVersion: {$a->%majorVersion}, minorVersion: {$a->%minorVersion})'; +$string['missingcontentfolder'] = 'Finner ingen gyldig innholdskatalog'; +$string['invalidmainjson'] = 'Finner ingen gyldig h5p.json-fil'; +$string['missinglibrary'] = 'Mangler et påkrevd bibliotek {$a->@library}'; +$string['missinguploadpermissions'] = 'Vær oppmerksom på at bibliotekene kan skistere i den opplastede fila, men at du ikke tillates å laste opp nye bibliotek. Kontakt nettstedsadministratoren.'; +$string['invalidlibraryname'] = 'Ugyldig biblioteksnavn: {$a->%name}'; +$string['missinglibraryjson'] = 'Klarte ikke å finne en library.json-fil med gyldig json format for bibliotek {$a->%name}'; +$string['invalidsemanticsjson'] = 'En ugyldig semantics.json-fil er inkludert i biblioteket {$a->%name}'; +$string['invalidlanguagefile'] = 'En ugyldig språkfil {$a->%file} i biblioteket {$a->%library}'; +$string['invalidlanguagefile2'] = 'En ugyldig språkfil {$a->%languageFile} er inkludert i biblioteket {$a->%name}'; +$string['missinglibraryfile'] = 'Fila "{$a->%file}" mangler i biblioteket: "{$a->%name}"'; +$string['missingcoreversion'] = 'Systemet kunne ikke installere <em>{$a->%component}</em>-komponenten fra pakken, den krever en nyere versjon av H5P-utvidelsen. Dette nettstedet kjører versjon {$a->%current}, mens påkrevd versjon er {$a->%required} eller høyere. Du bør vurdere å oppgradere for deretter å prøve på nytt.'; +$string['invalidlibrarydataboolean'] = 'Ugyldig data angitt for {$a->%property} i {$a->%library}. Boolsk verdi forventet.'; +$string['invalidlibrarydata'] = 'Ugyldig data angitt for {$a->%property} i {$a->%library}'; +$string['invalidlibraryproperty'] = 'Kan ikke lese feltet {$a->%property} i {$a->%library}'; +$string['missinglibraryproperty'] = 'Det obligatoriske feltet {$a->%property} finnes ikke i {$a->%library}'; +$string['invalidlibraryoption'] = 'Ulovlig verdi {$a->%option} i {$a->%library}'; +$string['addedandupdatelibraries'] = 'La til {$a->%new} nye H5P-bibliotek og oppdaterte {$a->%old} eksisterende.'; +$string['addednewlibraries'] = 'La til {$a->%new} nye H5P-bibliotek.'; +$string['updatedlibraries'] = 'Oppdaterte {$a->%old} eksisterende H5P-bibliotek.'; +$string['missingdependency'] = 'Mangler avhengigheten {$a->@dep} som kreves av {$a->@lib}.'; +$string['invalidstring'] = 'Angitt streng er ugyldig iforhold til det regulære uttrykket i semantikken. (verdi: \"{$a->%value}\", regexp: \"{$a->%regexp}\")'; +$string['invalidfile'] = 'Fila "{$a->%filename}" er ikke tillatt. Bare filer med de følgende filendingene er tillatt: {$a->%files-allowed}.'; +$string['invalidmultiselectoption'] = 'Ugyldig valg gjort i flervalg.'; +$string['invalidselectoption'] = 'Ugyldig valg gjort.'; +$string['invalidsemanticstype'] = 'Intern H5P-feil: ukjent innholdstype "{$a->@type}" i semantikken. Fjerner det aktuelle innholdet!'; +$string['copyrightinfo'] = 'Opphavsrettsinformasjon'; +$string['years'] = 'År'; +$string['undisclosed'] = 'Undisclosed'; +$string['attribution'] = 'Attribution 4.0'; +$string['attributionsa'] = 'Attribution-ShareAlike 4.0'; +$string['attributionnd'] = 'Attribution-NoDerivs 4.0'; +$string['attributionnc'] = 'Attribution-NonCommercial 4.0'; +$string['attributionncsa'] = 'Attribution-NonCommercial-ShareAlike 4.0'; +$string['attributionncnd'] = 'Attribution-NonCommercial-NoDerivs 4.0'; +$string['gpl'] = 'General Public License v3'; +$string['pd'] = 'Public Domain'; +$string['pddl'] = 'Public Domain Dedication and Licence'; +$string['pdm'] = 'Public Domain Mark'; +$string['copyrightstring'] = 'Opphavsrett'; +$string['unabletocreatedir'] = 'Ikke istand til å opprette katalog.'; +$string['unabletogetfieldtype'] = 'Ikke istand til å hente felt-type.'; +$string['filetypenotallowed'] = 'Filtypen er ikke tillatt.'; +$string['invalidfieldtype'] = 'Ugyldig felt-type.'; +$string['invalidimageformat'] = 'Ugyldig bidlefilformat. Bruk jpg, png eller gif.'; +$string['filenotimage'] = 'Fila er ikke et bilde.'; +$string['invalidaudioformat'] = 'Ugyldig lydfilformat. Bruk mp3 eller wav.'; +$string['invalidvideoformat'] = 'Ugyldig videofilformat. Bruk mp4 eller webm.'; +$string['couldnotsave'] = 'Klarte ikke å lagre fila.'; +$string['couldnotcopy'] = 'Klarte ikke å kopiere fila.'; + +// Welcome messages +$string['welcomeheader'] = 'Welcome to the world of H5P!'; +$string['welcomegettingstarted'] = 'To get started with H5P and Moodle take a look at our <a {$a->moodle_tutorial}>tutorial</a> and check out the <a {$a->example_content}>example content</a> at H5P.org for inspiration.<br>The most popuplar content types have been installed for your convenience!'; +$string['welcomecommunity'] = 'We hope you will enjoy H5P and get engaged in our growing community through our <a {$a->forums}>forums</a> and chat room <a {$a->gitter}>H5P at Gitter</a>'; +$string['welcomecontactus'] = 'If you have any feedback, don\'t hesitate to <a {$a}>contact us</a>. We take feedback very seriously and are dedicated to making H5P better every day!'; +$string['missingmbstring'] = 'PHP-utvidelsen mbstring mangler. H5P trenger denne for å kunne virke'; +$string['wrongversion'] = 'En ugyldig versjon av H5P-biblioteket {$a->%machineName} er brukt i innholdet. Innholdet bruker {$a->%contentLibrary}, mens det skal bruke {$a->%semanticsLibrary}.'; +$string['invalidlibrary'] = 'H5P-biblioteket {$a->%library} brukt i innholdet er ugyldig'; diff --git a/html/moodle2/mod/hvp/lang/tr/hvp.php b/html/moodle2/mod/hvp/lang/tr/hvp.php new file mode 100755 index 0000000000..fefa907b80 --- /dev/null +++ b/html/moodle2/mod/hvp/lang/tr/hvp.php @@ -0,0 +1,268 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +$string['modulename'] = 'Etkileşimsel İçerik'; +$string['modulename_help'] = 'H5P etkinlik modülü Etkileşimsel Videolar, Soru Setleri, Sürükle ve Bırak Sorular, Çoktan Seçmeli Sorular, Sunumlar ve daha bir çoğu etkileşimsel içerik türünü oluşturmanızı sağlar. + +Bir zengin içerik oluşturma gereci olmasının yanında, H5P içeriğin yeniden kullanımı ve paylaşılması için H5P dosyalarının içeri ve dışarı aktarılmasına da olanak sağlar. + +Kullanıcının etkileşim ve skorları xAPI kullanılarak saklanır ve Moodle Puan Defterine kaydedilir. + +Etkileşimsel H5P içerik bir .h5p dosya yüklenerek eklenebilir. .h5p dosyalarını h5p.org üzerinde oluşturup indirebilirsiniz'; +$string['modulename_link'] = 'https://h5p.org/moodle-more-help'; +$string['modulenameplural'] = 'Etkileşimsel İçerik'; +$string['pluginadministration'] = 'H5P'; +$string['pluginname'] = 'H5P'; +$string['intro'] = 'Giriş'; +$string['h5pfile'] = 'H5P Dosyası'; +$string['fullscreen'] = 'Tam Ekran'; +$string['disablefullscreen'] = 'Tam ekranı kapat'; +$string['download'] = 'İndir'; +$string['copyright'] = 'Kullanım hakları'; +$string['embed'] = 'Kat'; +$string['showadvanced'] = 'İleri düzeyi göster'; +$string['hideadvanced'] = 'İleri düzeyi gizle'; +$string['resizescript'] = 'Katılan içeriğin dinamik boyutlandırılmasını istiyorsanız web sitenize bu dizgeyi dahil edin:'; +$string['size'] = 'Boyut'; +$string['close'] = 'Kapat'; +$string['title'] = 'Başlık'; +$string['author'] = 'Yazan'; +$string['year'] = 'Yıl'; +$string['source'] = 'Kaynak'; +$string['license'] = 'Lisans'; +$string['thumbnail'] = 'Küçük resim'; +$string['nocopyright'] = 'Bu içerik için telif hakkı bilgisi yok.'; +$string['downloadtitle'] = 'Bu içeriği bir H5P dosyası olarak indir.'; +$string['copyrighttitle'] = 'Bu içeriğin telif hakkı bilgisine bak.'; +$string['embedtitle'] = 'Bu içeriğin katma koduna bak.'; +$string['h5ptitle'] = 'Daha fazla içerik için H5P.org adresine gidin.'; +$string['contentchanged'] = 'Son kullandığınızdan bu yana bu içerik değişti.'; +$string['startingover'] = "Yeniden başlayacaksınız."; +$string['confirmdialogheader'] = 'Eylemi onayla'; +$string['confirmdialogbody'] = 'Devam etmeyi istediğinizi onaylayın. Bu eylem geri alınamaz.'; +$string['cancellabel'] = 'İptal'; +$string['confirmlabel'] = 'Onayla'; +$string['noh5ps'] = 'Bu kurs içn etkileşimsel içerik yok.'; + +// Update message email for admin +$string['messageprovider:updates'] = 'Mevcut H5P güncellemeleri için bildirim'; +$string['updatesavailabletitle'] = 'Yeni H5P güncellemeleri var.'; +$string['updatesavailablemsgpt1'] = 'Moodle sitenize yüklediğiniz H5P içerik tipleri için güncellemeler var.'; +$string['updatesavailablemsgpt2'] = 'Daha fazla yönerge için aşağıda bağlantısı verilen sayfaya gidin.'; +$string['updatesavailablemsgpt3'] = 'En son güncellemenin yayınlanma tarihi: {$a}'; +$string['updatesavailablemsgpt4'] = 'İşletmekte olduğunuz sürümün tarihi: {$a}'; + +$string['lookforupdates'] = 'H5P güncellemelerine bak'; +$string['removetmpfiles'] = 'Eski H5P geçici dosyalarını kaldır'; +$string['removeoldlogentries'] = 'Eski H5P kütük girdilerini kaldır'; + +// Admin settings. +$string['displayoptionnevershow'] = 'Never show'; +$string['displayoptionalwaysshow'] = 'Always show'; +$string['displayoptionpermissions'] = 'Show only if user has permissions to export H5P'; +$string['displayoptionauthoron'] = 'Controlled by author, default is on'; +$string['displayoptionauthoroff'] = 'Controlled by author, default is off'; +$string['displayoptions'] = 'Seçenekleri Göster'; +$string['enableframe'] = 'Eylem çubuğunu ve çerçevesini göster'; +$string['enabledownload'] = 'İndirme tuşu'; +$string['enableembed'] = 'Katma tuşu'; +$string['enablecopyright'] = 'Telif hakkı tuşu'; +$string['enableabout'] = 'H5P bilgisi tuşu'; + +$string['externalcommunication'] = 'Harici iletişim'; +$string['externalcommunication_help'] = 'Anonim kullanım bilgisi sağlayarak H5P gelişimine katkı sağlayın. Bu seçenek devre dışı kalırsa siteniz en yeni H5P güncellemeleri hakkında bilgileri alamaz. Bu konuda daha fazla bilgi h5p.org adresinde <a {$a}>hangi veriler</a> sayfasında.'; +$string['enablesavecontentstate'] = 'İçerik durumunu kaydet'; +$string['enablesavecontentstate_help'] = 'Her bir kullanıcı için mevcut etkileşimsel çerik durumunu kendiliğinden kaydet. Böylece kullanıcı bıraktığı yerden devam edebilir.'; +$string['contentstatefrequency'] = 'İçerik durumunu kaydetme sıklığı'; +$string['contentstatefrequency_help'] = 'Saniye değeriyle, kullanıcının ilerlemesi ne sıklıkla kendiliğinden kaydedilsin. Ajax istemleriyle sorun yaşıyorsanız bu sayıyı artırın.'; + +// Admin menu. +$string['settings'] = 'H5P Ayarları'; +$string['libraries'] = 'H5P Kitaplıkları'; + +// Update libraries section. +$string['updatelibraries'] = 'Tüm Kitaplıkları İçeri Aktar'; +$string['updatesavailable'] = 'H5P içerik tipleriniz için güncellemeler var.'; +$string['whyupdatepart1'] = '<a {$a}>H5P neden güncellenmeli</a> sayfasında güncellemenin neden gerektiğini ve avantajlarını okuyabilirsiniz.'; +$string['whyupdatepart2'] = 'Sayfada ayrıca değişiklik kütükleri de yer almakta; burada yeni getirilen özelikleri ve yapılan düzeltmeleri görebilirsiniz.'; +$string['currentversion'] = 'Şu anki sürümünüz'; +$string['availableversion'] = 'Mevcut güncelleme'; +$string['usebuttonbelow'] = 'Aşağıdaki tuşu kullanarak içerik türlerinizin tamamının kendiliğinden indirilip yüklenmesini sağlayabilirsiniz.'; +$string['downloadandupdate'] = 'İndir ve Güncelle'; +$string['missingh5purl'] = 'H5P dosyası için eksik URL'; +$string['unabletodownloadh5p'] = 'H5P dosya indirilemedi'; + +// Upload libraries section. +$string['uploadlibraries'] = 'Kitaplıkları Yükle'; +$string['options'] = 'Seçenekler'; +$string['onlyupdate'] = 'Yalnızca mevcut kitaplıkları güncelle'; +$string['disablefileextensioncheck'] = 'Dosya uzantısı denetimini devreden çıkar'; +$string['disablefileextensioncheckwarning'] = "Dikkat! Dosya uzantısı denetimini devreden çıkarmak, php uzantılı dosyaların da yüklenmesine olanak vereceği için, güvenlik sorunu oluşturabilir. Bu tür dosyalar sitenize zararlı kodların yüklenmesini sağlayabilir. Ne yükleneceğinden emin olmadıkça bu seçeneği kullanmayın."; +$string['upload'] = 'Yükle'; + +// Installed libraries section. +$string['installedlibraries'] = 'Kurulu Kitaplıklar'; +$string['invalidtoken'] = 'Güvenlik bilgisi geçersiz.'; +$string['missingparameters'] = 'Parametreler eksik'; + +// H5P library list headers on admin page. +$string['librarylisttitle'] = 'Başlık'; +$string['librarylistrestricted'] = 'Kısıtlı'; +$string['librarylistinstances'] = 'Oluşumlar'; +$string['librarylistinstancedependencies'] = 'Oluşum bağımlılıkları'; +$string['librarylistlibrarydependencies'] = 'Kitaplık bağımlılıkları'; +$string['librarylistactions'] = 'Eylemler'; + +// H5P library page labels. +$string['addlibraries'] = 'Kitaplık ekle'; +$string['installedlibraries'] = 'Kurulu kitaplıklar'; +$string['notapplicable'] = 'Yok'; +$string['upgradelibrarycontent'] = 'Kitaplık içeriğini yükselt'; + +// Upgrade H5P content page. +$string['upgrade'] = 'H5P yazılımını yükselt'; +$string['upgradeheading'] = '{$a} içeriğini yükselt'; +$string['upgradenoavailableupgrades'] = 'Bu kitaplık için mevcut yükseltme yok.'; +$string['enablejavascript'] = 'JavaScript devreye sokulmalı.'; +$string['upgrademessage'] = '{$a} içerik oluşumu yükseltilecek. Yükseltme sürümünü seçin.'; +$string['upgradeinprogress'] = '%ver sürümüne yükseltiliyor ...'; +$string['upgradeerror'] = 'Parametreler işlenirken bir sorun oluştu:'; +$string['upgradeerrordata'] = '%lib kitaplığı için veriler yüklenemedi.'; +$string['upgradeerrorscript'] = '%lib kitaplığı için yükseltme dizgesi yüklenemedi.'; +$string['upgradeerrorcontent'] = '%id içeriği yükseltilemedi:'; +$string['upgradeerrorparamsbroken'] = 'Parametreler bozuk.'; +$string['upgradedone'] = '{$a} içerik oluşumu başarıyla yükseltildi.'; +$string['upgradereturn'] = 'Geri dön'; +$string['upgradenothingtodo'] = "Yükseltilecek içerik oluşumu yok."; +$string['upgradebuttonlabel'] = 'Yükselt'; +$string['upgradeinvalidtoken'] = 'Hata: Güvenlik bilgisi geçersiz!'; +$string['upgradelibrarymissing'] = 'Hata: Kitaplığınız yok!'; + +// Results / report page. +$string['user'] = 'Kullanıcı'; +$string['score'] = 'Skor'; +$string['maxscore'] = 'En yüksek skor'; +$string['finished'] = 'Bitti'; +$string['loadingdata'] = 'Veri yükleniyor.'; +$string['ajaxfailed'] = 'Veri yüklenemedi.'; +$string['nodata'] = "Ölçütünüze uyan veri yok."; +$string['currentpage'] = 'Sayfa $current / $total'; +$string['nextpage'] = 'Sonraki sayfa'; +$string['previouspage'] = 'Önceki sayfa'; +$string['search'] = 'Ara'; +$string['empty'] = 'Sonuç yok'; + +// Editor +$string['javascriptloading'] = 'JavaScript bekleniyor ...'; +$string['action'] = 'Eylem'; +$string['upload'] = 'Yükle'; +$string['create'] = 'Oluştur'; +$string['editor'] = 'Editör'; + +$string['invalidlibrary'] = 'Kitaplık geçersz'; +$string['nosuchlibrary'] = 'Böyle bir kitaplık yok'; +$string['noparameters'] = 'Parametre yok'; +$string['invalidparameters'] = 'Parametreler geçersiz'; +$string['missingcontentuserdata'] = 'Hata: İçerik kullanıcısı verisi bulunamadı'; + +$string['maximumgrade'] = 'Maximum grade'; +$string['maximumgradeerror'] = 'Please enter a valid positive integer as the max points available for this activity'; + +// Capabilities +$string['hvp:addinstance'] = 'Yeni bir H5P Etkinliği ekle'; +$string['hvp:restrictlibraries'] = 'Bir H5P kitaplığını kısıtla'; +$string['hvp:updatelibraries'] = 'Bir H5P kitaplığı sürümünü yükle'; +$string['hvp:userestrictedlibraries'] = 'Kısıtlı H5P kitaplıkları kullan'; +$string['hvp:savecontentuserdata'] = 'H5P içerik kullanıcısı verisini kaydet'; +$string['hvp:saveresults'] = 'H5P içeriği için sonucu kaydet'; +$string['hvp:viewresults'] = 'H5P içeriği için sonucu gör'; +$string['hvp:getcachedassets'] = 'Ön belleğe alınmış H5P içerik değerlerini al'; +$string['hvp:getcontent'] = 'Kurs içìndeki H5P dosyası içeriğini al/gör'; +$string['hvp:getexport'] = 'Kurs içindeki H5P içeriğinden dışa aktarma dosyası al'; +$string['hvp:updatesavailable'] = 'H5P güncellemeleri olduğunda bildirim al'; + +// Capabilities error messages +$string['nopermissiontoupgrade'] = 'Kitaplıkları yükseltme yetkiniz yok.'; +$string['nopermissiontorestrict'] = 'Kitaplıkları kısıtlama yetkiniz yok.'; +$string['nopermissiontosavecontentuserdata'] = 'İçerik kullanıcısı verilerini kaydetme yetkiniz yok.'; +$string['nopermissiontosaveresult'] = 'Bu içerik için sonucu kaydetme yetkiniz yok.'; +$string['nopermissiontoviewresult'] = 'Bu içerik için sonuçları görme yetkiniz yokY.'; + +// Editor translations +$string['noziparchive'] = 'PHP sürümünüz ZipArchive desteklemiyor.'; +$string['noextension'] = 'Yüklediğiniz dosya geçerli bir HTML5 Paketi değil (Dosya uzantısı .h5p değil.)'; +$string['nounzip'] = 'Yüklediğiniz dosya geçerli bir HTML5 Paketi değil (Dosya açılamadı)'; +$string['noparse'] = 'Ana h5p.json dosyası işlenemedi'; +$string['nojson'] = 'Ana h5p.json dosyası geçersiz'; +$string['invalidcontentfolder'] = 'İçerik klasörü geçersiz'; +$string['nocontent'] = 'content.json dosyası bulunamadı ya da işlenemedi'; +$string['librarydirectoryerror'] = 'Kitaplık dizin adı machineName ya da machineName-majorVersion.minorVersion (library.json gereksinimi) ile uyuşmalı. (Dizin: {$a->%directoryName} , machineName: {$a->%machineName}, majorVersion: {$a->%majorVersion}, minorVersion: {$a->%minorVersion})'; +$string['missingcontentfolder'] = 'Geçerli bir içerik klasörü eksik'; +$string['invalidmainjson'] = 'Geçerli bir ana h5p.json dosyası yok'; +$string['missinglibrary'] = 'Gereken kitaplık eksik {$a->@library}'; +$string['missinguploadpermissions'] = "Yüklediğiniz dosyada kitaplıklar olabilir ama yeni kitaplık yükleme izniniz yok. Bu konuda site yönetimiyle iletişime geçin."; +$string['invalidlibraryname'] = 'Kitaplık adı geçersiz: {$a->%name}'; +$string['missinglibraryjson'] = 'Geçerli json formatında library.json dosyası bu kitaplık {$a->%name} için bulunamadı'; +$string['invalidsemanticsjson'] = 'semantics.json dosyası kitaplık {$a->%name} içìn geçersiz'; +$string['invalidlanguagefile'] = 'Dil dosyası {$a->%file} kitaplık {$a->%library} için geçersiz'; +$string['invalidlanguagefile2'] = '{$a->%name} kitaplığında geçersiz dil dosyası {$a->%languageFile}'; +$string['missinglibraryfile'] = '"{$a->%file}" dosyası bu kitaplıkta yok: "{$a->%name}"'; +$string['missingcoreversion'] = 'Sistem bu paketten <em>{$a->%component}</em> içeriğini yükleyemedi; H5P eklentisinin daha üst bir sürümü gerekiyor. Bu sitede şu an kullanılan sürüm {$a->%current}; gereken sürüm ise en az {$a->%required}. Yükseltip yeniden deneyebilirsiniz.'; +$string['invalidlibrarydataboolean'] = '{$a->%library} kitaplığında {$a->%property} için geçersiz veri. Boolean olmalı.'; +$string['invalidlibrarydata'] = '{$a->%library} kitaplığında {$a->%property} için geçersiz veri sağlandı'; +$string['invalidlibraryproperty'] = '{$a->%library} kitaplığında {$a->%property} okunamıyor'; +$string['missinglibraryproperty'] = '{$a->%library} kitaplığında gerekli {$a->%property} özelliği yok'; +$string['invalidlibraryoption'] = '{$a->%library} kitaplığında geçersiz seçenek {$a->%option}'; +$string['addedandupdatelibraries'] = '{$a->%new} yeni H5P kitaplığı yüklendi ve {$a->%old} kitaplık güncellendi.'; +$string['addednewlibraries'] = '{$a->%new} yeni H5P kitaplığı yüklendi.'; +$string['updatedlibraries'] = '$a->%old} H5P kitaplığı güncellendi.'; +$string['missingdependency'] = '{$a->@lib} için gereken bağımlılık {$a->@dep} yok.'; +$string['invalidstring'] = 'Semantikteki regexp değerine göre sağlanan dizge geçersiz. (value: \"{$a->%value}\", regexp: \"{$a->%regexp}\")'; +$string['invalidfile'] = 'Dosya "{$a->%filename}" için izin yok. İzin verilen dosya uzantıları: {$a->%files-allowed}.'; +$string['invalidmultiselectoption'] = 'Birden fazla seçenekte geçersiz seçili unsur.'; +$string['invalidselectoption'] = 'Seçimde geçersiz seçili unsur.'; +$string['invalidsemanticstype'] = 'H5P dahili hatası: semantikte bilinmeyen içerik türü "{$a->@type}". İçerik kaldırılıyor!'; +$string['invalidsemantics'] = 'Semantiğe göre, içerikte kullanılan kitaplık geçerli bir kitaplık değil'; +$string['copyrightinfo'] = 'Telif hakkı bilgisi'; +$string['years'] = 'Yıl'; +$string['undisclosed'] = 'Belirtilmedi'; +$string['attribution'] = 'Attribution 4.0'; +$string['attributionsa'] = 'Attribution-ShareAlike 4.0'; +$string['attributionnd'] = 'Attribution-NoDerivs 4.0'; +$string['attributionnc'] = 'Attribution-NonCommercial 4.0'; +$string['attributionncsa'] = 'Attribution-NonCommercial-ShareAlike 4.0'; +$string['attributionncnd'] = 'Attribution-NonCommercial-NoDerivs 4.0'; +$string['gpl'] = 'General Public License v3'; +$string['pd'] = 'Public Domain'; +$string['pddl'] = 'Public Domain Dedication and Licence'; +$string['pdm'] = 'Public Domain Mark'; +$string['copyrightstring'] = 'Telif hakkı'; +$string['unabletocreatedir'] = 'Dizin oluşturulamadı.'; +$string['unabletogetfieldtype'] = 'Alan türü alınamadı.'; +$string['filetypenotallowed'] = 'Dosya türüne izin yok.'; +$string['invalidfieldtype'] = 'Alan türü geçersiz.'; +$string['invalidimageformat'] = 'Resim dosyası türü geçersiz.jpg, png ya da gif kullanın.'; +$string['filenotimage'] = 'Bu bir resim dosyası değil.'; +$string['invalidaudioformat'] = 'Ses dosyası türü geçersiz. mp3 ya da wav kullanın.'; +$string['invalidvideoformat'] = 'Video dosyası türü geçersiz. mp4 ya da webm kullanın.'; +$string['couldnotsave'] = 'Dosya kaydedilemedi.'; +$string['couldnotcopy'] = 'Dosya kopyalanamadı.'; + +// Welcome messages +$string['welcomeheader'] = 'H5P dünyasına hoşgeldiniz!'; +$string['welcomegettingstarted'] = 'H5P ve Moodle kullanımına bakmak için <a {$a->moodle_tutorial}>kullanım</a> turumuza bakabilir ve h5p.org üzerinde <a {$a->example_content}>örnek içerik</a>le bir fikir edinebilirsiniz.<br>En popüler içerik tipleri kullanmanız için yüklendi.'; +$string['welcomecommunity'] = 'Umarız H5P kullanmaktan memnun kalır ve sürekli büyüyen topluluğumuza<a {$a->forums}>forumlarımız</a> ve <a {$a->gitter}>Gitter adresinde H5P</a> üzerindeki sohbet odamızla katılırsınız'; +$string['welcomecontactus'] = 'Herhangi bir geribildiriminiz varsa<a {$a}>bize iletin</a>. Geribildirimleri titizlikle ele alıyor ve her geçen gün H5P yazılımını geliştirmeye çabalıyoruz!'; diff --git a/html/moodle2/mod/hvp/lib.php b/html/moodle2/mod/hvp/lib.php new file mode 100755 index 0000000000..6f5b829a67 --- /dev/null +++ b/html/moodle2/mod/hvp/lib.php @@ -0,0 +1,392 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * Library of interface functions and constants for module hvp. + * + * All the core Moodle functions, neeeded to allow the module to work + * integrated in Moodle should be placed here. + * + * All the hvp specific functions, needed to implement all the module + * logic, should go to locallib.php. This will help to save some memory when + * Moodle is performing actions across all modules. + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +defined('MOODLE_INTERNAL') || die(); + +require_once('autoloader.php'); + + /* Moodle core API */ + +/** + * Returns the information on whether the module supports a feature + * + * See {@link plugin_supports()} for more info. + * + * @param string $feature FEATURE_xx constant for requested feature + * @return mixed true if the feature is supported, null if unknown + */ +function hvp_supports($feature) { + switch($feature) { + case FEATURE_GROUPS: + return true; + case FEATURE_GROUPINGS: + return true; + case FEATURE_GROUPMEMBERSONLY: + return true; + case FEATURE_MOD_INTRO: + return true; + case FEATURE_COMPLETION_TRACKS_VIEWS: + return true; + case FEATURE_COMPLETION_HAS_RULES: + return false; + case FEATURE_GRADE_HAS_GRADE: + return true; + case FEATURE_GRADE_OUTCOMES: + return false; + case FEATURE_BACKUP_MOODLE2: + return true; + case FEATURE_SHOW_DESCRIPTION: + return true; + + default: + return null; + } +} + +/** + * Saves a new instance of the hvp into the database + * + * Given an object containing all the necessary data, + * (defined by the form in mod_form.php) this function + * will create a new instance and return the id number + * of the new instance. + * + * @param stdClass $hvp Submitted data from the form in mod_form.php + * @return int The id of the newly inserted newmodule record + */ +function hvp_add_instance($hvp) { + // Save content + $hvp->id = hvp_save_content($hvp); + + // Set and create grade item. + hvp_grade_item_update($hvp); + + return $hvp->id; +} + +/** + * Updates an instance of the hvp in the database + * + * Given an object containing all the necessary data, + * (defined by the form in mod_form.php) this function + * will update an existing instance with new data. + * + * @param stdClass $hvp An object from the form in mod_form.php + * @return boolean Success/Fail + */ +function hvp_update_instance($hvp) { + // Make ID available for core to save + $hvp->id = $hvp->instance; + + // Save content + hvp_save_content($hvp); + hvp_grade_item_update($hvp); + return true; +} + +/** + * Does the actual process of saving the H5P content that's submitted through + * the activity form + * + * @param stdClass $hvp + * @return int Content ID + */ +function hvp_save_content($hvp) { + // Determine disabled content features + $hvp->disable = hvp_get_disabled_content_features($hvp); + + // Determine if we're uploading or creating + if ($hvp->h5paction === 'upload') { + // Save uploaded package + $hvp->uploaded = true; + $h5pstorage = \mod_hvp\framework::instance('storage'); + $h5pstorage->savePackage((array)$hvp); + $hvp->id = $h5pstorage->contentId; + } + else { + // Save newly created or edited content + $core = \mod_hvp\framework::instance(); + $editor = \mod_hvp\framework::instance('editor'); + + if (!empty($hvp->id)) { + // Load existing content to get old parameters for comparison + $content = $core->loadContent($hvp->id); + $oldlib = $content['library']; + $oldparams = json_decode($content['params']); + } + + // Make params and library available for core to save + $hvp->params = $hvp->h5pparams; + $hvp->library = H5PCore::libraryFromString($hvp->h5plibrary); + $hvp->library['libraryId'] = $core->h5pF->getLibraryId($hvp->library['machineName'], $hvp->library['majorVersion'], $hvp->library['minorVersion']); + + $hvp->id = $core->saveContent((array)$hvp); + // We need to process the parameters to move any images or files and + // to determine which dependencies the content has. + + // Prepare current parameters + $params = json_decode($hvp->params); + + // Move any uploaded images or files. Determine content dependencies. + $editor->processParameters($hvp, $hvp->library, $params, isset($oldlib) ? $oldlib : NULL, isset($oldparams) ? $oldparams : NULL); + } + + return $hvp->id; +} + +/** + * Help determine which content features have been disabled through the + * activity form submitted. + * + * @param stdClass $hvp + * @return int Disabled flags + */ +function hvp_get_disabled_content_features($hvp) { + $disablesettings = array( + \H5PCore::DISPLAY_OPTION_FRAME => isset($hvp->frame) ? $hvp->frame : 0, + \H5PCore::DISPLAY_OPTION_DOWNLOAD => isset($hvp->export) ? $hvp->export : 0, + \H5PCore::DISPLAY_OPTION_COPYRIGHT => isset($hvp->copyright) ? $hvp->copyright : 0 + ); + $core = \mod_hvp\framework::instance(); + return $core->getStorableDisplayOptions($disablesettings, 0); +} + +/** + * Removes an instance of the hvp from the database + * + * Given an ID of an instance of this module, + * this function will permanently delete the instance + * and any data that depends on it. + * + * @param int $id Id of the module instance + * @return boolean Success/Failure + */ +function hvp_delete_instance($id) { + global $DB; + + // Load content record + if (! $hvp = $DB->get_record('hvp', array('id' => "$id"))) { + return false; + } + + // Load CM + $cm = \get_coursemodule_from_instance('hvp', $id); + + // Delete content + $h5pstorage = \mod_hvp\framework::instance('storage'); + $h5pstorage->deletePackage(array('id' => $hvp->id, 'slug' => $hvp->slug, 'coursemodule' => $cm->id)); + + // Get library details + $library = $DB->get_record_sql( + "SELECT machine_name AS name, major_version, minor_version + FROM {hvp_libraries} + WHERE id = ?", + array($hvp->main_library_id) + ); + + // Log content delete + new \mod_hvp\event( + 'content', 'delete', + $hvp->id, $hvp->name, + $library->name, $library->major_version . '.' . $library->minor_version + ); + + return true; +} + +/** + * Serves the files from the hvp file areas + * + * @package mod_hvp + * @category files + * + * @param stdClass $course the course object + * @param stdClass $cm the course module object + * @param stdClass $context the newmodule's context + * @param string $filearea the name of the file area + * @param array $args extra arguments (itemid, path) + * @param bool $forcedownload whether or not force download + * @param array $options additional options affecting the file serving + * + * @return true|false Success + */ +function hvp_pluginfile($course, $cm, $context, $filearea, $args, $forcedownload, $options = array()) { + switch ($filearea) { + default: + return false; // Invalid file area. + + case 'libraries': + case 'cachedassets': + if ($context->contextlevel != CONTEXT_SYSTEM) { + return false; // Invalid context. + } + + // Check permissions + if (!has_capability('mod/hvp:getcachedassets', $context)) { + return false; + } + + $itemid = 0; + break; + + case 'content': + if ($context->contextlevel != CONTEXT_MODULE) { + return false; // Invalid context. + } + + // Check permissions + if (!has_capability('mod/hvp:getcontent', $context)) { + return false; + } + + $itemid = array_shift($args); + break; + + case 'exports': + if ($context->contextlevel != CONTEXT_COURSE) { + return false; // Invalid context. + } + + // Get core: + $h5pinterface = \mod_hvp\framework::instance('interface'); + $h5pcore = \mod_hvp\framework::instance('core'); + + // Get content id from filename: + if (!preg_match('/(\d*).h5p/', $args[0], $matches)) { + // did not find any content ID :( + return false; + } + + $contentid = $matches[0]; + $content = $h5pinterface->loadContent($contentid); + $displayOptions = $h5pcore->getDisplayOptionsForView($content['disable'], $contentid); + + // Check permissions + if (!$displayOptions['export']) { + return false; + } + + $itemid = 0; + break; + + case 'editor': + if ($context->contextlevel != CONTEXT_COURSE) { + return false; // Invalid context. + } + + // Check permissions + if (!has_capability('mod/hvp:addinstance', $context)) { + return false; + } + + $itemid = 0; + break; + } + + $filename = array_pop($args); + $filepath = (!$args ? '/' : '/' .implode('/', $args) . '/'); + + $fs = get_file_storage(); + $file = $fs->get_file($context->id, 'mod_hvp', $filearea, $itemid, $filepath, $filename); + if (!$file) { + return false; // No such file. + } + + send_stored_file($file, 86400, 0, $forcedownload, $options); + + return true; +} + +/** + * Create/update grade item for given hvp + * + * @category grade + * @param stdClass $hvp object with extra cmidnumber + * @param mixed $grades Optional array/object of grade(s); 'reset' means reset grades in gradebook + * @return int, 0 if ok, error code otherwise + */ +function hvp_grade_item_update($hvp, $grades=null) { + global $CFG; + + if (!function_exists('grade_update')) { // Workaround for buggy PHP versions. + require_once($CFG->libdir . '/gradelib.php'); + } + + $params = array('itemname' => $hvp->name, 'idnumber' => $hvp->cmidnumber); + + if (isset($hvp->maximumgrade)) { + $params['gradetype'] = GRADE_TYPE_VALUE; + $params['grademax'] = $hvp->maximumgrade; + } + + // Recalculate rawgrade relative to grademax + if (isset($hvp->rawgrade) && isset($hvp->rawgrademax)) { + // Get max grade Obs: do not try to use grade_get_grades because it + // requires context which we don't have inside an ajax + // $gradinginfo = grade_get_grades($hvp->course, 'mod', 'hvp', $hvp->id); + $gradeitem = grade_item::fetch(array( + 'itemtype' => 'mod', + 'itemmodule' => 'hvp', + 'iteminstance' => $hvp->id, + 'courseid' => $hvp->course + )); + + if (isset($gradeitem) && isset($gradeitem->grademax)) { + $grades->rawgrade = ($hvp->rawgrade / $hvp->rawgrademax) * $gradeitem->grademax; + } + } + + if ($grades === 'reset') { + $params['reset'] = true; + $grades = null; + } + + return grade_update('mod/hvp', $hvp->course, 'mod', 'hvp', $hvp->id, 0, $grades, $params); +} + +/** + * Update activity grades + * + * @category grade + * @param stdClass $hvp Null means all hvps (with extra cmidnumber property) + * @param int $userid specific user only, 0 means all + * @param bool $nullifnone If true and the user has no grade then a grade item with rawgrade == null will be inserted + */ +function hvp_update_grades($hvp=null, $userid=0, $nullifnone=true) { + if ($userid and $nullifnone) { + $grade = new stdClass(); + $grade->userid = $userid; + $grade->rawgrade = null; + hvp_grade_item_update($hvp, $grade); + + } else { + hvp_grade_item_update($hvp); + } +} diff --git a/html/moodle2/mod/hvp/library/LICENSE.txt b/html/moodle2/mod/hvp/library/LICENSE.txt new file mode 100755 index 0000000000..3d90694ade --- /dev/null +++ b/html/moodle2/mod/hvp/library/LICENSE.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. \ No newline at end of file diff --git a/html/moodle2/mod/hvp/library/README.txt b/html/moodle2/mod/hvp/library/README.txt new file mode 100755 index 0000000000..c31d1452d3 --- /dev/null +++ b/html/moodle2/mod/hvp/library/README.txt @@ -0,0 +1,14 @@ +This folder contains the general H5P library. The files within this folder are not specific to any framework. + +Any interaction with an LMS, CMS or other frameworks is done through interfaces. Platforms need to implement +the H5PFrameworkInterface(in h5p.classes.php) and also do the following: + + - Provide a form for uploading H5P packages. + - Place the uploaded H5P packages in a temporary directory + +++ + +See existing implementations for details. For instance the Drupal H5P module located at drupal.org/project/h5p + +We will make available documentation and tutorials for creating platform integrations in the future. + +The H5P PHP library is GPL licensed due to GPL code being used for purifying HTML provided by authors. diff --git a/html/moodle2/mod/hvp/library/composer.json b/html/moodle2/mod/hvp/library/composer.json new file mode 100755 index 0000000000..f25fb0ece6 --- /dev/null +++ b/html/moodle2/mod/hvp/library/composer.json @@ -0,0 +1,34 @@ +{ + "name": "h5p/h5p-core", + "type": "library", + "description": "H5P Core functionality in PHP", + "keywords": ["h5p","hvp","interactive","content","quiz"], + "homepage": "https://h5p.org", + "license": "GPL-3.0", + "authors": [ + { + "name": "Svein-Tore Griff With", + "email": "with@joubel.com", + "homepage": "http://joubel.com", + "role": "CEO" + }, + { + "name": "Frode Petterson", + "email": "frode.petterson@joubel.com", + "homepage": "http://joubel.com", + "role": "Developer" + } + ], + "require": { + "php": ">=5.3.0" + }, + "autoload": { + "files": [ + "h5p.classes.php", + "h5p-development.class.php", + "h5p-file-storage.interface.php", + "h5p-default-storage.class.php", + "h5p-event-base.class.php" + ] + } +} diff --git a/html/moodle2/mod/hvp/library/doc/spec_en.html b/html/moodle2/mod/hvp/library/doc/spec_en.html new file mode 100755 index 0000000000..e604156a72 --- /dev/null +++ b/html/moodle2/mod/hvp/library/doc/spec_en.html @@ -0,0 +1,168 @@ +<h2>Overview</h2> +<p>H5P is a file format for content/applications made using modern, open web technologies (HTML5). The format enables easy installation and transfer of applications/content on different CMSes, LMSes and other platforms. An H5P can be uploaded and published on a platform in mostly the same way one would publish a Flash file today. H5P files may also be updated by simply uploading a new version of the file, the same way as one would using Flash.</p> +<p>H5P opens for extensive reuse of code and wide flexibility regarding what may be developed as an H5P.</p> +<p>The system uses package files containing all necessary files and libraries for the application to function. These files are based on open formats.</p> +<h2>Overview of package files</h2> +<p>Package files are normal <em>zip</em> files, with a naming convention of <i>&lt;filename&gt;.h5p</i> to distinguish from any random zip file. This zip file then requires a specific file structure as described below.</p> +<p>There will be a file in JSON format named h5p.json describing the contents of the package and how the system should interpret and use it. This file contains information about title, content type, usage, copyright, licensing, version, language etc. This is described in detail below.</p> +<p>There shall be a folder for each included H5P library used by the package. These generic libraries may be reused by other H5P packages. As an example, a multi-choice question task may be used as a standalone block, or be included in a larger H5P package generating a game with quizzes.</p> +<h2>Package file structure</h2> +<p>A package contains the following elements:</p> +<ol> +<li>A mandatory file in the root folder named <i>h5p.json</i></li> +<li>An optional image file named <i>h5p.jpg</i>. This is an icon or an image of the application, 512 × 512 pixels. This image may be used by the platform as a preview of the application, and could be included in OG meta tags for use with social media.</li> +<li>One content folder, named <i>content</i>. This will contain the preset configuration for the application, as well as any required media files.</li> +<li>One or more library directories named the same as the library's internal name.</li> +</ol> +<h2>h5p.json</h2> +<p>The <i>h5p.json</i> file is a normal JSON text file containing a JSON object with the following predefined properties.</p> +<p>Mandatory properties:</p> +<ul> +<li>title - Name of the package. Would typically be used as header for a page displaying the package.</li> +<li>language - Standard language code. Use 'en' for english, 'nb' for norwegian "bokmål". Neutral content use "und".</li> +<li>machineName - Machine readable name of the library. This is the name that will be used for the library folder in the package too.</li> +<li>preloadedDependencies - Libraries that must be loaded on init. Specified as a list of objects with machineName, majorVersion and minorVersion. One would normally list all dependencies here to allow the platform displaying the package to merge JS and CSS files before returning the page.</li> +<li>embedTypes - List of ways to embed the package in the web page. Currently "div" and "iframe" are supported.</li> +</ul><p>Optional properties:</p> +<ul><li>contentType - Textual description of the type of content.</li> +<li>description - Textual description of the package.</li> +<li>author - Name of author.</li> +<li>license - Code for the content license. Use the following Creative Commons codes: cc-by, cc-by-sa, cc-by-nd, cc-by-nc, cc-by-nc-sa, cc-by-nc-nd. In addition for public domain: pd, and closed license: cr. More may be added later.</li> +<li>dynamicDependencies - Libraries that may be loaded dynamically during execution.</li> +<li>width - Width of the package content in cases where the package is not dynamically resizable.</li> +<li>height - Height of the package content.</li> +<li>metaKeywords - Suggestion for keywords for the application, as a string. May be used for OG meta tags for social media.</li> +<li>metaDescription - Suggestion for application metaDescription. May be used for OG meta tags for social media.</li> +</ul> +<h3>Eksempel på h5p.json:</h3> +<code>{ <br/> + "title": "Biologi-spillet",<br/> + "contentType": "Game",<br/> + "utilization": "Lær om biologi",<br/> + "language": "nb",<br/> + "author": "Amendor AS", <br/> + "license": "cc-by-sa", <br/> + "preloadedDependencies": [ <br/> + {<br/> + "machineName": "H5P.Boardgame", <br/> + "majorVersion": 1, <br/> + "minorVersion": 0<br/> + }, {<br/> + "machineName": "H5P.QuestionSet", <br/> + "majorVersion": 1, <br/> + "minorVersion": 0<br/> + }, {<br/> + "machineName": "H5P.MultiChoice", <br/> + "majorVersion": 1, "minorVersion": 0<br/> + }, {<br/> + "machineName": "EmbeddedJS", <br/> + "majorVersion": 1, <br/> + "minorVersion": 0<br/> + } ], <br/> + "embedTypes": ["div", "iframe"], <br/> + "w": 635, <br/> + "h": 500 <br/> +}</code> +<h2>The content folder</h2> +<p>Contains all the content for the package and its libraries. There shall be no content inside the library folders. The content folder shall contain a file named <i>content.json</i>, containing the JSON object that will be passed to the initializer for the main package library.</p> + +<p>Content required by libraries invoked from the main package library will get their contents passed from the main library. The JSON for this will be found within the main content.json for the package, and passed during initialization.</p> + +<h2>Library folders</h2> + +<p>A library folder contains all logic, stylesheets and graphics that will be common for all instances of a library. There shall be no content or interface text directly in these folders. All text displayed to the end user shall be passed as part of the library configuration. This make the libraries language independent.</p> + +<p>The root of a library folder shall contain a file name <i>library.json</i> formatted similar to the package's <i>hp5.json</i>, but with a few differences. The library shall also have one or more images in the root folder, named <i>library.jpg</i>, <i>library1.jpg</i> etc. Image sizes 512px × 512px, and will be used in the H5P editor tool.</p> + +<p>Libraries are not allowed to modify the document tree in ways that will have consequences for the web site or will be noticeable by the user without the library explicitly being initialized from the main package library or another invoked library.</p> + +<p>The library shall always include a JavaScript object function named the same as the defined library <i>machineName</i> (defined in <i>library.json</i> and used as the library folder name). This object will be instantiated with the library options as parameter. The resulting object must contain a function <i>attach(target)</i> that will be called after instantiation to attach the library DOM to the main DOM inside <i>target</i></p> + +<h3>Example</h3> +<p>A library called H5P.multichoice would typically be instantiated and attached to the page like this:</p> +<code>var multichoice = new H5P.multichoice(contentFromJson, contentId); <br/> +multichoice.attach($multichoiceContainer);</code> + +<h2>library.json</h2> +<p>Mandatory properties:</p> +<ul> +<li>title - Human readable name of the library. May be used in the H5P editor and overviews of installed libraries.</li> +<li>majorVersion - Version major number. (The x in x.y.z). Positive integer.</li> +<li>minorVersion - Version minor number. (The y in x.y.z). Positive integer.</li> +<li>patchVersion - Version patch number. (The z in x.y.z). Positive integer. The system will automatically update to the latest patchVersion installed for all packages that use the library with the same major and minor version number. A new patch version must therefore not change any behaviour of the library, only fix errors.</li> +<li>machineName - Machine readable name for the library. Same as the folder name used.</li> +<li>preloadedJs - List of path to the javascript files required for the library. At least one file need to be present (the one defining the library object). Paths are relative to the library root folder.</li> +</ul> +<p>Optional properties:</p> +<ul> +<li>author - Author name as text.</li> +<li>license - Code describing the library license. Use the following creative commons codes: cc-by, cc-by-sa, cc-by-nd, cc-by-nc, cc-by-nc-sa, cc-by-nc-nd. In addition use <i>pd</i> for public domain, and <i>cr</i> for closed source</li> +<li>description - Textual description of the library.</li> +<li>preloadedDependencies - Libraries that need to be loaded for this library to work. Specified as a list of objects with <i>machineName</i>, <i>majorVersion</i> and <i>minorVersion</i> for the required libraries.</li> +<li>dynamicDependencies - Libraries that may be loaded dynamically during library execution. Specified as a list of objects like preloadedDependencies above.</li> +<li>preloadedCss - List of paths to CSS files to be loaded with the library. Paths are relative to the library root folder.</li> +<li>w - Width in pixels for libraries that use a fixed width. Mandatory if the library shall be embedded in an iframe (see embedTypes below).</li> +<li>h - Height in pixels for libraries that use a fixed height. Mandatory if the library shall be embedded in an iframe (see embedTypes below).</li> +<li>embedTypes - List of possible ways to embed the package in the page. Available values are <i>div</i> and <i>iframe</i>.</li> +</ul> +<h3>Eksempel på library.json:</h3> +<code>{<br/> + "title": "Boardgame", <br/> + "description": "The user is presented with a board with several hotspots. By clicking a hotspot he invokes a mini-game.", <br/> + "majorVersion": 1, <br/> + "minorVersion": 0, <br/> + "patchVersion": 6, <br/> + "runnable": 1, <br/> + "machineName": "H5P.Boardgame", <br/> + "author": "Amendor AS", <br/> + "license": "cc-by-sa", <br/> + "preloadedDependencies": [ <br/> + {<br/> + "machineName": "EmbeddedJS", <br/> + "majorVersion": 1, <br/> + "minorVersion": 0<br/> + }, {<br/> + "machineName": "H5P.MultiChoice",<br/> + "majorVersion": 1,<br/> + "minorVersion": 0<br/> + }, {<br/> + "machineName": "H5P.QuestionSet",<br/> + "majorVersion": 1,<br/> + "minorVersion": 0<br/> + } ],<br/> + "preloadedCss": [ {"path": "css/boardgame.css"} ], <br/> + "preloadedJs": [ {"path": "js/boardgame.js"} ], <br/> + "w": 635, <br/> + "h": 500 }</code> + +<h2>Allowed file types</h2> +<p>Files that require server side execution or that cannot be regarded an open standard shall not be used. Allowed file types: js, json, png, jpg, gif, svg, css, mp3, wav (audio: PCM), m4a (audio: AAC), mp4 (video: H.264, audio: AAC/MP3), ogg (video: Theora, audio: Vorbis) and webm (video VP8, audio: Vorbis). Administrators of web sites implementing H5P may open for accepting further formats. HTML files shall not be used. HTML for each library shall be inserted from the library scripts to ease code reuse. (By avoiding content being defined in said HTML).</p> +<h2>API functions</h2> +<p>The following JavaScript functions are available through h5p:</p> +<ul> +<li>H5P.getUserData(namespace, variable)</li> +<li>H5P.setUserData(namespace, variable, data)</li> +<li>H5P.getUserStart(namespace)</li> +<li>H5P.setUserStop(namespace)</li> +<li>H5P.deleteUserData(namespace, variable)</li> +<li>H5P.getGlobalData(namespace, variable)</li> +<li>H5P.setGlobalData(namespace, variable, data)</li> +<li>H5P.deleteGlobalData(namespace, variable)</li> +</ul> +<p>I tillegg er følgende api funksjoner tilgjengelig via ndla:</p> +<ul> +<li>H5P.setUserScore(contentId, score, maxScore)</li> +</ul> +<h2>Best practices</h2> +<p>H5P is a very open standard. This is positive for flexibility. Most content may be produces as H5P. But this also allows for bad code, security weaknesses, code that may be difficult to reuse. Therefore the following best practices should be followed to get the most from H5P:</p> +<ul> +<li>Think reusability when creating a library. H5P support dependencies between libraries, so the same small quiz-library may be used in various larger packages or libraries.</li> +<li>H5P supports library updates. This enables all content using a common library to be updated at once. This must be accounted for when writing new libraries. A library should be as general as possible. The content format should be thought out so there are no changes to the required content data when a library is updated. Note: Multiple versions of a library may exists at the same time, only patch level updates will be automatically installed.</li> +<li>An H5P should not interact directly with the containing web site. It shall only affect elements within its own generated DOM tree. Elements shall also only be injected within the target defined on initialization. This is to avoid dependencies to a specific platform or web page.</li> +<li>Prefix objects, global functions, etc with h5p to minimize the chance of namespace conflicts with the rest of the web page. Remember that there may also be multiple H5P objects inserted on a page, so plan ahead to avoid conflicts.</li> +<li>Content should be responsive.</li> +<li>Content should be WCAG 2 AA compliant</li> +<li>All generated HTML should validate.</li> +<li>All CSS should validate (some browser specific non-standard CSS may at times be required)</li> +<li>Best practices for JavaScript, HTML, etc. should of course also be followed when writing an H5P.</li> +</ul> diff --git a/html/moodle2/mod/hvp/library/embed.php b/html/moodle2/mod/hvp/library/embed.php new file mode 100755 index 0000000000..ad7139c49e --- /dev/null +++ b/html/moodle2/mod/hvp/library/embed.php @@ -0,0 +1,19 @@ +<!doctype html> +<html lang="<?php print $lang; ?>" class="h5p-iframe"> +<head> + <meta charset="utf-8"> + <title><?php print $content['title']; ?></title> + <?php for ($i = 0, $s = count($scripts); $i < $s; $i++): ?> + <script src="<?php print $scripts[$i]; ?>"></script> + <?php endfor; ?> + <?php for ($i = 0, $s = count($styles); $i < $s; $i++): ?> + <link rel="stylesheet" href="<?php print $styles[$i]; ?>"> + <?php endfor; ?> +</head> +<body> + <div class="h5p-content" data-content-id="<?php print $content['id']; ?>"></div> + <script> + H5PIntegration = <?php print json_encode($integration); ?>; + </script> +</body> +</html> diff --git a/html/moodle2/mod/hvp/library/fonts/h5p-core-16.eot b/html/moodle2/mod/hvp/library/fonts/h5p-core-16.eot new file mode 100755 index 0000000000..239079bac7 Binary files /dev/null and b/html/moodle2/mod/hvp/library/fonts/h5p-core-16.eot differ diff --git a/html/moodle2/mod/hvp/library/fonts/h5p-core-16.svg b/html/moodle2/mod/hvp/library/fonts/h5p-core-16.svg new file mode 100755 index 0000000000..cf586555ae --- /dev/null +++ b/html/moodle2/mod/hvp/library/fonts/h5p-core-16.svg @@ -0,0 +1,58 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata> +<json> +<![CDATA[ +{ + "fontFamily": "h5p", + "description": "Font generated by IcoMoon.", + "majorVersion": 1, + "minorVersion": 1, + "version": "Version 1.1", + "fontId": "h5p", + "psName": "h5p", + "subFamily": "Regular", + "fullName": "h5p" +} +]]> +</json> +</metadata> +<defs> +<font id="icomoon" horiz-adv-x="1024"> +<font-face units-per-em="1024" ascent="960" descent="-64" /> +<missing-glyph horiz-adv-x="1024" /> +<glyph unicode="&#x20;" horiz-adv-x="512" d="" /> +<glyph unicode="&#xe565;" glyph-name="uniE565" d="M234 539h556l-278-278z" /> +<glyph unicode="&#xe566;" glyph-name="uniE566" d="M381 138v524l262-262z" /> +<glyph unicode="&#xe58e;" glyph-name="uniE58E" d="M512 596.667l256-256-60-60-196 196-196-196-60 60z" /> +<glyph unicode="&#xe58f;" glyph-name="uniE58F" d="M708 572.667l60-60-256-256-256 256 60 60 196-196z" /> +<glyph unicode="&#xe600;" glyph-name="uniE88D" d="M386.662 874.394h71.27v-71.27h-71.27v71.27zM566.067 874.394h71.27v-71.27h-71.27v71.27zM386.662 718.131h71.27v-71.27h-71.27v71.27zM566.067 718.131h71.27v-71.27h-71.27v71.27zM386.662 561.766h71.27v-71.27h-71.27v71.27zM566.067 561.766h71.27v-71.27h-71.27v71.27zM386.662 405.504h71.27v-71.27h-71.27v71.27zM566.067 405.504h71.27v-71.27h-71.27v71.27zM386.662 249.139h71.27v-71.27h-71.27v71.27zM566.067 249.139h71.27v-71.27h-71.27v71.27zM386.662 92.877h71.27v-71.27h-71.27v71.27zM566.067 92.877h71.27v-71.27h-71.27v71.27z" /> +<glyph unicode="&#xe601;" glyph-name="uniE601" d="M454.299 395.255l-116.917 116.917-84.781-84.707 201.696-201.697 317.097 317.097-84.781 84.706z" /> +<glyph unicode="&#xe888;" glyph-name="uniE888" horiz-adv-x="1321" d="M660.48 703.59c-140.288 0-253.952-113.664-253.952-253.952 0-122.47 86.63-224.666 202.138-248.627v206.234h-86.835c-11.264 0-14.541 7.168-7.373 16.179l133.12 164.659c7.168 9.011 18.842 9.011 26.010 0l133.12-164.659c7.373-8.602 3.686-16.179-7.373-16.179h-86.835v-206.234c115.507 23.962 202.138 126.157 202.138 248.627-0.205 140.288-113.869 253.952-254.157 253.952z" /> +<glyph unicode="&#xe889;" glyph-name="uniE889" horiz-adv-x="1321" d="M662.118 701.952c-140.288 0-253.952-113.664-253.952-253.952s113.664-253.952 253.952-253.952 253.952 113.664 253.952 253.952-113.664 253.952-253.952 253.952zM621.773 652.8h83.763v-65.946h-83.763v65.946zM748.749 273.92h-173.67v50.995h49.562v159.13h-49.562v50.995h133.53v-210.125h40.346v-50.995z" /> +<glyph unicode="&#xe88a;" glyph-name="uniE88A" horiz-adv-x="1321" d="M925.491 236.646l-114.688 114.688c27.238 37.888 43.213 84.378 43.213 134.554 0 127.59-103.834 231.424-231.424 231.424s-231.424-103.834-231.424-231.424c0-127.59 103.834-231.424 231.424-231.424 50.176 0 96.666 15.974 134.554 43.213l114.688-114.688c5.325-5.325 13.926-5.325 19.251 0l34.406 34.406c5.325 5.12 5.325 13.926 0 19.251zM622.797 318.566c-92.365 0-167.117 74.752-167.117 167.117s74.752 167.117 167.117 167.117c92.365 0 167.117-74.752 167.117-167.117s-74.752-167.117-167.117-167.117z" /> +<glyph unicode="&#xe88c;" glyph-name="uniE88C" horiz-adv-x="1321" d="M495.845 602.867c4.186 4.186 2.79 8.372-3.255 8.835l-111.615 11.86c-6.046 0.697-10.464-3.721-9.766-9.766l11.86-111.615c0.697-6.046 4.65-7.441 8.835-3.255l103.942 103.942zM421.202 534.968l64.876-64.876c4.186-4.186 11.161-4.186 15.581 0l23.254 23.254c4.186 4.186 4.186 11.161 0 15.581l-64.876 64.876zM932.774 498.924c4.186-4.186 8.372-2.79 8.835 3.255l11.86 111.615c0.697 6.046-3.721 10.464-9.766 9.766l-111.615-11.86c-6.046-0.697-7.441-4.65-3.255-8.835l103.942-103.942zM864.873 573.799l-64.876-64.876c-4.186-4.186-4.186-11.161 0-15.581l23.254-23.254c4.186-4.186 11.161-4.186 15.581 0l64.876 64.876zM828.83 284.064c-4.186-4.186-2.79-8.372 3.255-8.835l111.615-11.86c6.046-0.697 10.464 3.721 9.766 9.766l-11.86 111.615c-0.697 6.046-4.65 7.441-8.835 3.255l-103.942-103.942zM903.707 351.733l-64.876 64.876c-4.186 4.186-11.161 4.186-15.581 0l-23.254-23.254c-4.186-4.186-4.186-11.161 0-15.581l64.876-64.876zM391.903 388.008c-4.186 4.186-8.372 2.79-8.835-3.255l-11.86-111.615c-0.697-6.046 3.721-10.464 9.766-9.766l111.615 11.86c6.046 0.697 7.441 4.65 3.255 8.835l-103.942 103.942zM459.802 313.131l64.876 64.876c4.186 4.186 4.186 11.161 0 15.581l-23.254 23.254c-4.186 4.186-11.161 4.186-15.581 0l-64.876-64.876zM284.938 707.273v-518.547h751.079v518.547h-751.079zM990.906 233.837h-660.857v428.325h660.623v-428.325z" /> +<glyph unicode="&#xe88e;" glyph-name="uniE88E" horiz-adv-x="1321" d="M1062.773 608.822c-21.364 20.404-53.527 31.205-96.254 31.205h-148.821v-76.81h-168.504l-14.162-60.968c11.762 5.521 28.565 9.602 40.087 12.483 11.521 2.88 23.044 1.681 34.325 1.681 38.405 0 69.369-12.001 93.131-35.285 23.763-23.044 35.765-52.567 35.765-87.611 0-24.722-6.241-48.488-18.484-71.529-12.243-22.804-29.764-41.766-52.327-53.768-8.161-4.321-17.043-2.4-26.644-12.001h141.62v144.021h70.811c47.767 0 83.292 9.843 106.335 31.684 23.285 21.844 34.806 51.848 34.806 90.494 0.241 37.205-10.321 66.009-31.684 86.411zM965.8 488.087c-9.12-7.921-25.204-11.284-48.006-11.284h-35.285v86.411h39.846c22.084 0 37.205-5.281 45.125-13.683 7.921-8.401 12.001-18.722 12.001-30.724 0-12.483-4.562-22.804-13.683-30.724zM671.518 446.559c-20.642 0-38.646-12.001-47.287-29.285l-103.694 15.122 46.807 207.629h-100.095v-163.222h-122.417v163.222h-120.017v-384.053h120.017v144.021h122.417v-144.021h148.579c-17.522 9.602-32.643 13.202-45.125 22.563-12.721 9.602-22.804 20.883-30.724 32.885s-13.921 25.685-19.203 43.686l103.694 15.122c8.642-17.283 26.403-29.044 47.047-29.044 29.044 0 52.567 23.522 52.567 52.567s-23.522 52.807-52.567 52.807z" /> +<glyph unicode="&#xe88f;" glyph-name="uniE88F" horiz-adv-x="1321" d="M1030.554 429.363c1.638-3.277 0-3.277-1.638-6.349-20.89-22.323-46.49-35.226-76.8-41.574-12.902-1.638-25.6-3.277-36.864-3.277-12.493 0-18.637 0-27.238 1.638-1.638 0.205-3.277 1.638-4.71 3.277-67.174 60.826-135.987 121.651-203.162 182.477-1.638 1.638-4.71 1.638-6.349 1.638-23.962-6.349-47.923-12.902-73.523-19.251-25.6-4.71-51.2-1.638-75.162 12.902-12.902 7.987-22.323 19.251-28.877 33.587-4.71 9.626 1.638 22.323 12.902 25.6 43.213 12.902 86.426 28.877 128 44.851 12.902 4.71 27.238 7.987 41.574 6.349 4.71 0 9.626-3.277 14.336-4.71 41.574-15.974 83.149-30.31 124.723-46.49 1.638-1.638 4.71-1.638 7.987 0 30.31 7.987 62.464 17.613 92.774 25.6 3.277 1.638 4.71 0 6.349-1.638zM420.864 437.35c19.251 9.626 36.864 6.349 51.2-9.626 12.902-12.902 12.902-28.877 3.277-49.562 19.251 3.277 33.587-3.277 43.213-19.251 11.264-17.613 7.987-33.587-6.349-49.562 4.71 0 11.264 0 15.974-1.638 14.336-3.277 25.6-12.902 30.31-27.238s1.638-27.238-7.987-36.864c-4.71-6.349-11.264-11.264-15.974-17.613s-11.264-11.264-15.974-17.613c-14.336-14.336-38.502-15.974-52.838-1.638-30.31 30.31-55.91 64.102-83.149 97.69-17.613 22.323-33.587 43.213-49.562 65.536-7.987 9.626-12.902 19.251-14.336 31.949 0 7.987 1.638 15.974 7.987 22.323 9.626 9.626 17.613 19.251 27.238 28.877 17.613 17.613 47.923 12.698 62.464-7.987 1.434-1.434 3.072-4.506 4.506-7.782zM571.392 224.563l27.238-28.877c17.613-15.974 46.49-12.902 57.549 7.987l-3.277 3.277c-22.323 22.323-46.49 46.49-68.813 68.813-3.277 3.277-4.71 7.987-3.277 12.902 1.638 4.71 4.71 7.987 9.626 9.626 4.71 1.638 9.626 0 12.902-4.71 14.336-14.336 30.31-30.31 44.851-44.851 14.336-14.336 30.31-28.877 44.851-44.851 7.987-9.626 19.251-11.264 30.31-9.626 14.336 3.277 23.962 11.264 30.31 25.6 1.638 3.277 0 4.71-1.638 6.349-43.213 43.213-86.426 84.787-128 128-3.277 3.277-6.349 7.987-4.71 14.336 1.638 9.626 12.902 14.336 22.323 7.987 1.638-1.638 3.277-1.638 3.277-3.277 43.213-43.213 88.064-88.064 131.277-131.277 3.277-3.277 4.71-3.277 7.987-3.277 17.613 1.638 33.587 15.974 36.864 33.587 0 3.277 0 4.71-1.638 6.349-49.562 49.562-99.123 99.123-148.89 148.89-3.277 3.277-4.71 6.349-4.71 11.264 0 4.71 3.277 11.264 7.987 12.698 4.71 1.638 9.626 1.638 14.336-3.277 3.277-3.277 7.987-7.987 11.264-11.264 35.226-35.226 70.451-70.451 105.677-105.677 11.264-11.264 22.323-20.89 31.949-31.949 1.638-1.638 4.71-3.277 6.349-1.638 23.962 4.71 38.502 30.31 28.877 54.477l38.298-1.638c0-0.205 0-0.41 0.205-0.614 1.434-7.987 1.434-17.203-0.205-24.986-6.349-30.31-23.962-49.562-52.838-59.187-1.638 0-3.277-1.638-3.277-3.277-9.626-31.949-33.587-52.838-67.174-55.91-3.277 0-3.277-1.638-4.71-3.277-17.613-33.587-57.549-49.562-91.136-36.864-4.71 1.638-9.626 4.71-14.336 6.349-6.349-6.349-14.336-12.698-22.323-15.974-27.238-12.698-57.549-6.349-78.438 14.336-9.626 9.626-19.251 19.251-30.31 28.877 7.987 7.987 14.336 15.974 23.962 25.6l1.434-1.024zM404.89 744.55c31.949-9.626 62.464-20.89 94.413-30.31 33.587-11.264 65.536-20.89 99.123-31.949 1.638 0 1.638 0 3.277-1.638-17.613-6.349-33.587-11.264-49.562-17.613-1.638 0-3.277 0-4.71 0-44.851 14.336-91.136 28.877-135.987 43.213-3.277 1.638-4.71 0-7.987-1.638l-80.077-185.549c0-9.626 4.71-17.613 11.264-25.6 3.277-4.71 6.349-7.987 7.987-9.626-7.987-7.987-14.336-15.974-22.323-25.6-15.974 19.251-28.877 38.502-30.31 64.102l89.498 212.787c-0.41-0.205 12.902 13.312 25.395 9.421z" /> +<glyph unicode="&#xe890;" glyph-name="uniE890" horiz-adv-x="1321" d="M660.48 701.952c-140.288 0-253.952-113.664-253.952-253.952s113.664-253.952 253.952-253.952 253.952 113.664 253.952 253.952-113.664 253.952-253.952 253.952zM796.058 371.2c6.963-6.963 6.963-18.022 0-24.986l-33.997-33.997c-6.963-6.963-18.022-6.963-24.986 0l-76.8 76.8-76.595-76.595c-6.963-6.963-18.022-6.963-24.986 0l-33.997 33.997c-6.963 6.963-6.963 18.022 0 24.986l76.8 76.8-76.8 76.8c-6.963 6.963-6.963 18.022 0 24.986l33.997 33.997c6.963 6.963 18.022 6.963 24.986 0l76.8-76.8 76.8 76.8c6.963 6.963 18.022 6.963 24.986 0l33.997-33.997c6.963-6.963 6.963-18.022 0-24.986l-77.005-77.005 76.8-76.8z" /> +<glyph unicode="&#xe891;" glyph-name="uniE891" horiz-adv-x="1321" d="M324.468 566.591c-4.186-4.186-2.79-8.372 3.255-8.835l111.615-11.86c6.046-0.697 10.464 3.721 9.766 9.766l-11.86 111.615c-0.697 6.046-4.65 7.441-8.835 3.255l-103.942-103.942zM399.112 634.259l-64.644 64.876c-4.186 4.186-11.161 4.186-15.581 0l-23.254-23.254c-4.186-4.186-4.186-11.161 0-15.581l64.876-64.876zM896.497 670.533c-4.186 4.186-8.372 2.79-8.835-3.255l-11.86-111.615c-0.697-6.046 3.721-10.464 9.766-9.766l111.615 11.86c6.046 0.697 7.441 4.65 3.255 8.835l-103.942 103.942zM964.165 595.657l64.876 64.876c4.186 4.186 4.186 11.161 0 15.581l-23.254 23.254c-4.186 4.186-11.161 4.186-15.581 0l-64.876-64.876zM1000.44 320.34c4.186 4.186 2.79 8.372-3.255 8.835l-111.615 11.86c-6.046 0.697-10.464-3.721-9.766-9.766l11.86-111.615c0.697-6.046 4.65-7.441 8.835-3.255l103.942 103.942zM925.564 252.441l64.876-64.876c4.186-4.186 11.161-4.186 15.581 0l23.254 23.254c4.186 4.186 4.186 11.161 0 15.581l-64.876 64.876zM428.41 216.398c4.186-4.186 8.372-2.79 8.835 3.255l11.86 111.615c0.697 6.046-3.721 10.464-9.766 9.766l-111.615-11.86c-6.046-0.697-7.441-4.65-3.255-8.835l103.942-103.942zM360.51 291.273l-64.876-64.876c-4.186-4.186-4.186-11.161 0-15.581l23.254-23.254c4.186-4.186 11.161-4.186 15.581 0l64.876 64.876zM477.939 572.404v-248.809h365.076v248.809h-365.076zM797.905 368.707h-274.854v158.355h274.621v-158.355z" /> +<glyph unicode="&#xe892;" glyph-name="uniE892" horiz-adv-x="1321" d="M599.553 337.314c4.419-3.023 8.138-9.998 8.138-15.581v-58.599c0-5.348-3.721-7.441-8.138-4.419l-220.906 148.123c-4.419 3.023-8.138 9.998-8.138 15.348v50.228c0 5.348 3.721 12.323 8.138 15.581l220.906 149.517c4.419 3.023 8.138 1.162 8.138-4.419v-58.599c0-5.348-3.721-12.556-8.138-15.581l-152.773-106.731c-4.419-3.023-4.419-8.138 0-11.161l152.773-103.71zM874.175 440.559c4.419 3.023 4.65 8.138 0 11.161l-152.773 106.731c-4.419 3.023-8.138 10.232-8.138 15.581v58.599c0 5.348 3.721 7.441 8.138 4.419l220.906-149.517c4.419-3.023 8.138-9.998 8.138-15.581v-50.228c0-5.348-3.721-12.323-8.138-15.348l-220.906-148.123c-4.419-3.023-8.138-1.162-8.138 4.419v58.599c0 5.348 3.721 12.323 8.138 15.581l152.773 103.71z" /> +<glyph unicode="&#xe893;" glyph-name="uniE893" horiz-adv-x="1321" d="M502.17 522.957c-12.902 0-16.998-8.192-8.806-18.227l152.166-188.006c8.192-10.035 21.504-10.035 29.696 0l152.166 188.006c8.192 10.035 4.301 18.227-8.806 18.227h-316.416zM719.462 512.512v139.878c0 12.902-10.65 23.552-23.552 23.552h-70.656c-12.902 0-23.552-10.65-23.552-23.552v-139.878zM798.106 375.91c-8.602 0-20.070-5.53-25.6-12.288l-75.162-92.979c-5.325-6.758-15.36-16.589-22.118-21.914 0 0-4.506-3.686-14.746-3.686s-14.746 3.686-14.746 3.686c-6.758 5.325-16.589 15.36-22.118 21.914l-75.162 92.979c-5.325 6.758-16.998 12.288-25.6 12.288h-130.253c-8.602 0-15.77-6.963-15.77-15.77v-141.722c0-8.602 6.963-15.77 15.77-15.77h535.962c8.602 0 15.77 6.963 15.77 15.77v141.722c0 8.602-6.963 15.77-15.77 15.77h-130.458zM448.102 261.018c-15.565 0-28.262 12.698-28.262 28.262s12.698 28.262 28.262 28.262 28.262-12.698 28.262-28.262c-0.205-15.565-12.698-28.262-28.262-28.262z" /> +<glyph unicode="&#xe894;" glyph-name="uniE894" horiz-adv-x="1321" d="M742.605 448l107.11 107.11c9.626 9.626 9.626 25.19 0 34.816l-47.309 47.309c-9.626 9.626-25.19 9.626-34.816 0l-107.11-107.11-107.11 107.11c-9.626 9.626-25.19 9.626-34.816 0l-47.309-47.309c-9.626-9.626-9.626-25.19 0-34.816l107.11-107.11-107.11-107.11c-9.626-9.626-9.626-25.19 0-34.816l47.309-47.309c9.626-9.626 25.19-9.626 34.816 0l107.11 107.11 107.11-107.11c9.626-9.626 25.19-9.626 34.816 0l47.309 47.309c9.626 9.626 9.626 25.19 0 34.816l-107.11 107.11z" /> +<glyph unicode="&#xe900;" glyph-name="edit-image" d="M300.237 770.97c69.018 23.142 133.325 14.234 189.133-33.28 56.627-48.128 77.619-110.592 63.181-183.808-2.355-12.186 0.307-19.456 8.704-27.853 93.901-93.389 156.774-156.467 250.47-250.163 5.427-5.427 10.957-10.854 15.667-16.896 39.424-50.278 16.794-124.006-44.237-142.029-36.966-10.957-68.403 0-95.334 27.034-95.642 96.051-160.973 160.973-256.614 257.024-6.963 6.963-12.8 8.909-22.63 6.758-117.76-26.317-229.171 60.826-231.731 181.453-0.614 26.419 3.584 52.326 15.974 77.926 34.816-34.816 68.506-67.789 101.274-101.786 10.445-10.752 20.992-15.36 36.045-15.36 14.643 0 25.19 3.891 34.816 14.848 10.752 12.39 23.040 23.347 34.611 35.021 14.336 14.438 14.336 46.080-0.205 60.518-35.123 35.226-70.349 70.349-106.598 106.496 3.891 2.253 5.632 3.482 7.475 4.096zM703.386 212.89c-0.41-24.269 20.685-45.466 44.851-45.158 23.757 0.41 44.032 20.992 43.93 44.544-0.102 23.757-20.275 44.032-44.237 44.134-23.859 0.307-44.237-19.661-44.544-43.52z" /> +<glyph unicode="&#xe901;" glyph-name="hourglass" d="M733.286 138.752c-147.763 0-295.526 0-443.29 0 0 2.048 0.102 4.096 0 6.144-0.307 13.824-1.024 32.666-0.922 46.49 0.41 39.731 6.861 78.131 19.046 115.2 17.203 52.224 43.725 96.256 81.306 130.355 4.506 4.096 9.216 7.885 13.722 11.776-0.205 0.717-0.307 1.126-0.41 1.229-1.331 1.229-2.765 2.355-4.198 3.584-28.058 22.63-50.688 51.405-68.403 85.606-30.618 59.085-43.52 123.597-41.165 192.614 0.205 7.168 0.614 18.33 0.922 25.498 147.763 0 295.526 0 443.29 0 0.205-1.331 0.512-2.662 0.614-3.994 2.662-36.966 1.229-77.722-5.939-113.869-14.336-72.909-44.544-133.837-95.027-179.405-4.096-3.686-8.294-7.066-12.39-10.547 0.205-0.717 0.307-1.126 0.512-1.331 0.819-0.717 1.638-1.434 2.458-2.15 42.189-33.894 71.68-79.872 90.931-135.782 11.776-34.202 18.637-69.837 20.070-106.701 0.819-19.763-0.614-44.851-1.126-64.717zM687.309 181.965c0 6.554 0.205 12.493 0 18.432-1.331 37.581-7.27 74.138-19.866 108.749-17.92 49.562-45.568 88.269-88.678 108.646-2.458 1.126-2.97 3.072-2.97 5.837 0.102 16.691 0.102 33.485 0 50.176 0 3.994 1.331 5.427 4.096 6.963 9.114 5.325 18.432 10.24 26.829 16.896 29.696 23.552 49.152 56.934 62.362 95.744 10.342 30.413 15.77 62.259 17.818 94.822 0.614 9.114 0.102 18.227 0.102 27.546-116.634 0-233.574 0-351.027 0 0.307-8.704 0.614-16.998 1.024-25.395 1.946-37.274 8.499-73.216 21.504-107.213 18.125-47.104 45.261-83.558 86.528-103.117 2.253-1.024 2.867-2.662 2.867-5.427-0.102-17.203-0.102-34.509 0-51.712 0-3.072-1.024-4.506-3.277-5.632-5.632-2.867-11.366-5.734-16.691-9.216-34.304-22.733-56.832-57.754-71.987-100.147-12.493-35.123-18.125-71.987-19.661-109.875-0.205-5.325 0-10.752 0-16.282 117.35 0.205 234.189 0.205 351.027 0.205zM410.214 601.293c68.096 0 135.373 0 203.674 0-3.789-6.554-7.168-12.595-10.752-18.227-10.957-16.998-24.269-30.618-39.731-41.472s-27.75-25.293-32.768-46.592c-1.638-6.963-2.765-14.336-2.867-21.606-0.307-17.203-0.205-34.406 0.307-51.712 0.717-28.058 12.493-48.947 32.154-62.566 43.008-30.003 65.843-75.878 75.776-132.506 0.307-1.638 0.307-3.379 0.614-5.53-83.149 0-166.093 0-249.242 0 2.662 20.685 7.885 40.346 15.462 59.085 13.312 32.973 32.768 59.187 59.494 77.722 16.589 11.469 28.365 27.955 32.358 50.995 0.819 4.813 1.331 9.83 1.434 14.746 0.102 18.637 0.614 37.274-0.205 55.808-1.126 24.678-11.981 43.213-28.57 57.139-9.216 7.782-18.944 14.746-27.648 23.142-11.981 11.162-21.197 25.395-29.491 41.574z" /> +<glyph unicode="&#xe902;" glyph-name="plus-icon1" d="M1024 378.248c0-38.751-31.485-69.752-69.752-69.752h-302.744v-302.744c0-38.751-31.485-69.752-69.752-69.752h-139.504c-38.751 0-69.752 31.485-69.752 69.752v302.744h-302.744c-38.751 0-69.752 31.485-69.752 69.752v139.504c0 38.751 31.485 69.752 69.752 69.752h302.744v302.744c0 38.751 31.485 69.752 69.752 69.752h139.504c38.751 0 69.752-31.485 69.752-69.752v-302.744h302.744c38.751 0 69.752-31.485 69.752-69.752v-139.504z" /> +<glyph unicode="&#xe903;" glyph-name="background" d="M1010.557 764.785v-632.986c0-22.795-8.183-42.667-24.548-59.032s-35.653-24.548-59.032-24.548h-832.292c-22.795 0-42.667 8.183-59.032 24.548s-24.548 35.653-24.548 59.032v632.986c0 22.795 8.183 42.667 24.548 59.032s35.653 24.548 59.032 24.548h832.877c22.795 0 42.667-8.183 59.032-24.548 15.781-16.365 23.963-36.237 23.963-59.032zM926.977 781.735h-832.292c-4.676 0-8.183-1.753-11.689-4.676-3.507-3.507-4.676-7.014-4.676-11.689v-632.986c0-4.676 1.753-8.183 4.676-11.689 3.507-3.507 7.014-4.676 11.689-4.676h832.877c4.676 0 8.183 1.753 11.689 4.676 3.507 3.507 4.676 7.014 4.676 11.689v632.402c0 4.676-1.753 8.183-4.676 11.689-3.507 3.507-7.598 5.26-12.274 5.26zM315.032 685.881c19.288-19.288 29.224-43.251 29.224-70.721s-9.936-51.434-29.224-70.721c-19.288-19.288-43.251-29.224-70.721-29.224-28.055 0-51.434 9.936-70.721 29.224s-29.224 43.251-29.224 70.721 9.936 51.434 29.224 70.721c19.288 19.288 43.251 29.224 70.721 29.224 28.055 0 51.434-9.936 70.721-29.224zM877.297 415.269v-233.205h-732.932v99.945l166.575 166.575 82.995-82.995 266.521 265.936 216.84-216.256z" /> +<glyph unicode="&#xe904;" glyph-name="dnd" d="M665.717 261.553h-541.224c-61.954 0-112.219 50.265-112.219 112.219v399.781c0 61.954 50.265 112.219 112.219 112.219h541.224c61.954 0 112.219-50.265 112.219-112.219v-399.781c-0.584-61.954-50.849-112.219-112.219-112.219zM124.493 818.557c-25.132 0-45.005-20.457-45.005-45.005v-399.781c0-25.132 20.457-45.005 45.005-45.005h541.224c25.132 0 45.005 20.457 45.005 45.005v399.781c0 25.132-20.457 45.005-45.005 45.005h-541.224zM825.863-6.721h-98.776v66.63h98.776v-66.63zM627.726-6.721h-98.776v66.63h98.776v-66.63zM429.589-6.721h-70.721c-13.443 0-26.886 2.338-39.16 7.014l23.379 62.539c5.26-1.753 10.521-2.922 15.781-2.922h70.721v-66.63zM934.575-0.877l-20.457 63.708c18.703 5.845 31.562 23.963 31.562 43.251v0.584h66.63v-0.584c0-49.096-31.562-92.347-77.735-106.959zM313.863 109.005h-66.63v98.776h66.63v-98.776zM1012.311 204.858h-66.63v98.776h66.63v-98.776zM1012.311 402.995h-66.63v98.776h66.63v-98.776zM915.872 547.361c-5.26 1.753-10.521 2.922-15.781 2.922h-70.721v67.215h70.721c13.443 0 26.886-2.338 39.16-7.014l-23.379-63.123z" /> +<glyph unicode="&#xe905;" glyph-name="interactions" d="M773.26 276.749c-5.26 0-10.521-0.584-15.781-1.753-12.858 15.781-32.146 24.548-52.603 24.548-9.936 0-19.288-1.753-28.055-5.845-13.443 12.274-30.977 19.872-49.096 19.872-2.922 0-5.845 0-9.352-0.584v62.539c0 40.329-32.146 74.813-73.059 74.813-40.329 0-73.059-32.731-73.059-73.059v-156.055c-11.105 6.429-23.963 9.936-36.822 9.936-39.744 0-72.475-33.315-72.475-73.059 0-15.781 5.26-31.562 14.612-43.836l109.297-146.119c13.443-18.119 35.653-29.224 58.447-29.224h205.151c25.132 0 47.342 16.95 53.187 41.498l26.301 105.205c5.26 21.041 8.183 42.667 8.183 64.292v61.954c-1.169 35.068-29.224 64.877-64.877 64.877zM174.174 581.845c0 178.849 145.534 323.799 323.799 323.799 178.849 0 323.799-145.534 323.799-323.799 0-82.995-31.562-158.977-82.995-216.256 16.365-2.338 31.562-8.183 44.42-17.534 52.018 63.708 83.58 144.95 83.58 233.79 0 203.982-165.991 369.388-369.388 369.388-202.813 0-368.804-165.406-368.804-369.388 0-142.027 80.658-265.936 198.721-327.306 13.443 12.858 29.808 22.795 48.511 27.47-118.064 47.927-201.644 164.237-201.644 299.836zM740.53 581.845c0 133.845-108.712 242.557-242.557 242.557s-242.557-108.712-242.557-242.557c0-108.128 71.306-199.89 168.913-230.868v47.927c-72.475 29.224-123.909 99.945-123.909 182.941 0.584 108.712 88.84 196.968 197.553 196.968s196.968-88.256 196.968-196.968c0-51.434-19.872-98.192-52.018-133.26 0.584-4.676 1.169-9.352 1.169-14.027v-46.174c58.447 44.42 96.438 114.557 96.438 193.461z" /> +<glyph unicode="&#xe906;" glyph-name="iv" d="M1016.402 125.954c0-14.612-8.767-27.47-21.626-33.315-4.676-1.753-9.352-2.922-14.027-2.922-9.352 0-18.703 3.507-25.132 10.521l-226.192 226.192v-92.932c0-89.425-72.475-161.9-161.9-161.9h-395.105c-89.425 0-161.9 72.475-161.9 161.9v395.689c0.584 88.84 72.475 161.315 161.9 161.315h395.105c89.425 0 161.9-72.475 161.9-161.9v-92.347l226.192 225.607c7.014 7.014 15.781 10.521 25.132 10.521 4.676 0 9.352-1.169 14.027-2.922 12.858-5.845 21.626-18.703 21.626-33.315v-610.192z" /> +<glyph unicode="&#xe907;" glyph-name="settings" d="M988.932 539.178l-119.233 18.119c-6.429 21.626-15.781 42.667-26.886 63.708 22.21 30.393 45.589 59.032 67.799 88.84 3.507 4.676 5.26 9.352 5.26 14.612s-1.169 10.521-4.676 14.027c-27.47 37.991-72.475 78.32-106.959 109.881-4.676 4.091-10.521 6.429-16.365 6.429s-11.689-1.753-15.781-5.845l-91.763-68.968c-18.703 9.936-37.991 17.534-58.447 23.963l-18.119 122.74c-1.169 11.105-11.689 22.795-23.379 22.795h-142.612c-11.689 0-20.457-11.105-23.379-21.626-10.521-38.575-14.027-82.411-18.703-122.155-19.872-6.429-40.329-15.781-59.032-25.717l-89.425 69.553c-5.26 4.091-11.105 6.429-16.95 6.429-22.21 0-109.297-94.685-125.078-115.726-3.507-4.676-5.845-9.352-5.845-15.196s2.338-11.105 6.429-15.781c23.963-29.224 47.342-58.447 68.968-89.425-10.521-19.288-18.703-38.575-25.132-59.616l-120.986-18.119c-9.936-1.753-18.703-13.443-18.703-23.379v-143.781c0-11.105 9.352-21.626 20.457-23.379l119.233-17.534c6.429-22.21 15.781-43.251 26.886-64.292-22.21-30.393-45.589-59.032-67.799-88.84-3.507-4.676-5.26-9.352-5.26-14.612s1.169-10.521 4.676-14.612c27.47-37.406 72.475-77.735 106.959-108.712 4.676-4.676 10.521-7.014 16.365-7.014s11.689 1.753 16.365 5.845l91.178 68.968c18.703-9.936 37.991-17.534 58.447-23.963l18.119-121.571c1.169-11.105 11.689-21.626 23.379-21.626h143.781c11.689 0 20.457 9.936 23.379 20.457 10.521 38.575 14.027 81.826 18.703 121.571 19.872 6.429 40.329 15.196 59.032 25.132l89.425-69.553c5.26-3.507 11.105-5.845 16.95-5.845 22.21 0 109.297 95.269 125.078 115.726 4.091 4.676 5.845 9.352 5.845 15.196s-2.338 11.689-6.429 16.365c-23.963 29.224-47.342 57.863-68.968 89.425 10.521 18.703 18.119 37.991 25.132 59.032l120.986 18.119c10.521 1.753 19.288 13.443 19.288 23.379v143.781c-2.338 10.521-11.105 21.041-22.21 22.795zM508.493 216.548c-123.909 0-224.438 100.53-224.438 224.438s99.945 224.438 224.438 224.438 224.438-100.53 224.438-224.438-100.53-224.438-224.438-224.438z" /> +<glyph unicode="&#xe908;" glyph-name="summary" d="M510.247 954.74c-278.21 0-503.817-225.607-503.817-503.817s225.607-503.817 503.817-503.817 503.817 225.607 503.817 503.817c0 278.21-225.607 503.817-503.817 503.817zM510.247 44.128c-224.438 0-406.795 182.356-406.795 406.795s182.356 406.795 406.795 406.795 406.795-182.356 406.795-406.795c0-224.438-182.356-406.795-406.795-406.795zM652.274 574.831c-11.689 11.689-30.393 11.689-42.667 0l-129.753-129.753-69.553 69.553c-11.689 11.689-30.393 11.689-42.667 0l-47.927-47.927c-11.689-11.689-11.689-30.393 0-42.667l138.521-138.521c11.689-11.689 30.393-11.689 42.667 0l199.306 199.306c5.26 5.26 8.183 12.274 8.767 19.288-2.338 7.598-4.676 15.196-8.183 22.21 0 0.584-0.584 0.584-0.584 1.169l-47.927 47.342z" /> +<glyph unicode="&#xe909;" glyph-name="hotspot" d="M512 960c-282.301 0-512-229.699-512-512s229.699-512 512-512 512 229.699 512 512-229.699 512-512 512zM961.461 448c0-247.817-201.644-449.461-449.461-449.461s-450.046 201.644-450.046 449.461 201.644 449.461 449.461 449.461 450.046-201.644 450.046-449.461zM512 795.178c-191.708 0-347.178-156.055-347.178-347.178s155.47-347.178 347.178-347.178 347.178 156.055 347.178 347.178-156.055 347.178-347.178 347.178zM793.132 448c0-154.886-126.247-281.132-281.132-281.132s-281.132 126.247-281.132 281.132c0 154.886 126.247 281.132 281.132 281.132s281.132-126.247 281.132-281.132z" /> +<glyph unicode="&#xe90a;" glyph-name="tutorial" d="M1005.736 538.764l-482.84-152.472c-3.632 0-3.632 0-3.632 0s-3.632 0-3.632 0l-279.538 87.132c-25.406-18.16-43.566-65.34-43.566-123.434 18.16-10.896 29.038-25.406 29.038-47.198 0-18.16-10.896-36.302-25.406-47.198l25.406-185.149c0-3.632 0-7.264-3.632-10.896s-7.264-3.632-10.896-3.632h-83.5c-3.632 0-7.264 3.632-10.896 3.632-3.632 3.632-3.632 7.264-3.632 10.896l25.406 185.149c-14.528 10.896-25.406 25.406-25.406 47.198s10.896 39.934 29.038 47.198c3.632 50.83 14.528 105.274 43.566 141.594l-141.594 43.566c-7.264 3.632-10.896 7.264-10.896 14.528s3.632 10.896 10.896 14.528l479.208 152.472c3.632 0 3.632 0 3.632 0s3.632 0 3.632 0l482.84-152.472c7.264-3.632 10.896-7.264 10.896-14.528-3.632-3.632-7.264-10.896-14.528-10.896zM795.17 277.368c3.632-61.726-123.434-108.906-275.906-108.906s-279.538 50.83-275.906 108.906l7.264 134.33 246.868-76.236c7.264-3.632 14.528-3.632 21.774-3.632s14.528 0 21.774 3.632l246.868 76.236 7.264-134.33z" /> +<glyph unicode="&#xe90b;" glyph-name="example" d="M658.811 693.628c-42.347 0-81.876-11.294-115.758-33.882v-364.215c36.7 16.941 73.411 28.235 115.758 28.235 70.582 0 121.405-19.759 186.34-47.994l-47.994 386.792c-42.347 19.759-93.17 31.053-138.346 31.053zM373.654 693.628c-47.994 0-95.988-8.465-141.164-28.235l-47.994-386.792c64.935 28.235 115.758 47.994 186.34 47.994 45.176 0 81.876-8.465 121.405-28.235v358.568c-33.882 25.406-76.229 36.7-118.576 36.7zM161.908 710.569l-67.764-533.614c70.582-22.588 135.517 56.47 268.216 53.641 107.282-2.818 155.287-64.935 155.287-64.935s62.117 70.582 172.228 67.764c76.229-2.818 197.634-101.635 248.457-59.288l-67.764 533.614c0 0-112.929 62.117-175.046 59.288-90.352-2.818-172.228-36.7-172.228-36.7s-98.817 42.347-160.934 39.529c-112.929-5.647-200.452-59.288-200.452-59.288zM805.622 233.425c-47.994 22.588-95.988 33.882-149.64 33.882s-104.464-16.941-141.164-56.47c-39.529 39.529-87.523 56.47-141.164 56.47-50.823 0-101.635-11.294-149.64-33.882-31.053-14.112-62.117-22.588-95.988-22.588h-2.818l59.288 482.791c53.641 31.053 121.405 47.994 183.511 47.994 50.823 0 104.464-11.294 146.811-39.529 42.347 28.235 95.988 39.529 146.811 39.529 62.117 0 127.052-16.941 183.511-47.994l62.117-479.962c-36.7-2.818-67.764 5.647-101.635 19.759z" /> +<glyph unicode="&#xe90c;" d="M885.459 448c0-206.256-167.203-373.459-373.459-373.459s-373.459 167.203-373.459 373.459c0 206.256 167.203 373.459 373.459 373.459s373.459-167.203 373.459-373.459z" /> +<glyph unicode="&#xe90d;" d="M512-64c-283.106 0-512 228.894-512 512s228.894 512 512 512 512-228.894 512-512-228.894-512-512-512zM512 929.882c-265.035 0-481.882-216.847-481.882-481.882s216.847-481.882 481.882-481.882 481.882 216.847 481.882 481.882-216.847 481.882-481.882 481.882z" /> +<glyph unicode="&#xe90e;" d="M617.412 300.424v-39.153c0-6.024-3.012-9.035-6.024-15.059-3.012-3.012-9.035-6.024-15.059-6.024h-159.624c-6.024 0-9.035 3.012-15.059 6.024s-6.024 9.035-6.024 15.059v39.153c0 6.024 3.012 9.035 6.024 15.059 3.012 3.012 9.035 6.024 15.059 6.024h21.082v120.471h-21.082c-6.024 0-9.035 3.012-15.059 6.024-3.012 3.012-6.024 9.035-6.024 15.059v39.153c0 6.024 3.012 9.035 6.024 15.059s9.035 6.024 15.059 6.024h120.471c6.024 0 9.035-3.012 15.059-6.024 3.012-3.012 6.024-9.035 6.024-15.059v-180.706h21.082c6.024 0 9.035-3.012 15.059-6.024 3.012-6.024 3.012-9.035 3.012-15.059zM578.259 661.835v-60.235c0-6.024-3.012-9.035-6.024-15.059-3.012-3.012-9.035-6.024-15.059-6.024h-81.318c-6.024 0-9.035 3.012-15.059 6.024-3.012 3.012-6.024 9.035-6.024 15.059v60.235c0 6.024 3.012 9.035 6.024 15.059 3.012 3.012 9.035 6.024 15.059 6.024h81.318c6.024 0 9.035-3.012 15.059-6.024 3.012-3.012 6.024-9.035 6.024-15.059z" /> +</font></defs></svg> diff --git a/html/moodle2/mod/hvp/library/fonts/h5p-core-16.ttf b/html/moodle2/mod/hvp/library/fonts/h5p-core-16.ttf new file mode 100755 index 0000000000..daf1571175 Binary files /dev/null and b/html/moodle2/mod/hvp/library/fonts/h5p-core-16.ttf differ diff --git a/html/moodle2/mod/hvp/library/fonts/h5p-core-16.woff b/html/moodle2/mod/hvp/library/fonts/h5p-core-16.woff new file mode 100755 index 0000000000..d654df4315 Binary files /dev/null and b/html/moodle2/mod/hvp/library/fonts/h5p-core-16.woff differ diff --git a/html/moodle2/mod/hvp/library/h5p-default-storage.class.php b/html/moodle2/mod/hvp/library/h5p-default-storage.class.php new file mode 100755 index 0000000000..82b4f2275c --- /dev/null +++ b/html/moodle2/mod/hvp/library/h5p-default-storage.class.php @@ -0,0 +1,475 @@ +<?php + +/** + * File info? + */ + +/** + * The default file storage class for H5P. Will carry out the requested file + * operations using PHP's standard file operation functions. + * + * Some implementations of H5P that doesn't use the standard file system will + * want to create their own implementation of the \H5P\FileStorage interface. + * + * @package H5P + * @copyright 2016 Joubel AS + * @license MIT + */ +class H5PDefaultStorage implements \H5PFileStorage { + private $path, $alteditorpath; + + /** + * The great Constructor! + * + * @param string $path + * The base location of H5P files + * @param string $alteditorpath + * Optional. Use a different editor path + */ + function __construct($path, $alteditorpath = NULL) { + // Set H5P storage path + $this->path = $path; + $this->alteditorpath = $alteditorpath; + } + + /** + * Store the library folder. + * + * @param array $library + * Library properties + */ + public function saveLibrary($library) { + $dest = $this->path . '/libraries/' . \H5PCore::libraryToString($library, TRUE); + + // Make sure destination dir doesn't exist + \H5PCore::deleteFileTree($dest); + + // Move library folder + self::copyFileTree($library['uploadDirectory'], $dest); + } + + /** + * Store the content folder. + * + * @param string $source + * Path on file system to content directory. + * @param array $content + * Content properties + */ + public function saveContent($source, $content) { + $dest = "{$this->path}/content/{$content['id']}"; + + // Remove any old content + \H5PCore::deleteFileTree($dest); + + self::copyFileTree($source, $dest); + } + + /** + * Remove content folder. + * + * @param array $content + * Content properties + */ + public function deleteContent($content) { + \H5PCore::deleteFileTree("{$this->path}/content/{$content['id']}"); + } + + /** + * Creates a stored copy of the content folder. + * + * @param string $id + * Identifier of content to clone. + * @param int $newId + * The cloned content's identifier + */ + public function cloneContent($id, $newId) { + $path = $this->path . '/content/'; + if (file_exists($path . $id)) { + self::copyFileTree($path . $id, $path . $newId); + } + } + + /** + * Get path to a new unique tmp folder. + * + * @return string + * Path + */ + public function getTmpPath() { + $temp = "{$this->path}/temp"; + self::dirReady($temp); + return "{$temp}/" . uniqid('h5p-'); + } + + /** + * Fetch content folder and save in target directory. + * + * @param int $id + * Content identifier + * @param string $target + * Where the content folder will be saved + */ + public function exportContent($id, $target) { + $source = "{$this->path}/content/{$id}"; + if (file_exists($source)) { + // Copy content folder if it exists + self::copyFileTree($source, $target); + } + else { + // No contnet folder, create emty dir for content.json + self::dirReady($target); + } + } + + /** + * Fetch library folder and save in target directory. + * + * @param array $library + * Library properties + * @param string $target + * Where the library folder will be saved + * @param string $developmentPath + * Folder that library resides in + */ + public function exportLibrary($library, $target, $developmentPath=NULL) { + $folder = \H5PCore::libraryToString($library, TRUE); + $srcPath = ($developmentPath === NULL ? "/libraries/{$folder}" : $developmentPath); + self::copyFileTree("{$this->path}{$srcPath}", "{$target}/{$folder}"); + } + + /** + * Save export in file system + * + * @param string $source + * Path on file system to temporary export file. + * @param string $filename + * Name of export file. + * @throws Exception Unable to save the file + */ + public function saveExport($source, $filename) { + $this->deleteExport($filename); + + if (!self::dirReady("{$this->path}/exports")) { + throw new Exception("Unable to create directory for H5P export file."); + } + + if (!copy($source, "{$this->path}/exports/{$filename}")) { + throw new Exception("Unable to save H5P export file."); + } + } + + /** + * Removes given export file + * + * @param string $filename + */ + public function deleteExport($filename) { + $target = "{$this->path}/exports/{$filename}"; + if (file_exists($target)) { + unlink($target); + } + } + + /** + * Check if the given export file exists + * + * @param string $filename + * @return boolean + */ + public function hasExport($filename) { + $target = "{$this->path}/exports/{$filename}"; + return file_exists($target); + } + + /** + * Will concatenate all JavaScrips and Stylesheets into two files in order + * to improve page performance. + * + * @param array $files + * A set of all the assets required for content to display + * @param string $key + * Hashed key for cached asset + */ + public function cacheAssets(&$files, $key) { + foreach ($files as $type => $assets) { + if (empty($assets)) { + continue; // Skip no assets + } + + $content = ''; + foreach ($assets as $asset) { + // Get content from asset file + $assetContent = file_get_contents($this->path . $asset->path); + $cssRelPath = preg_replace('/[^\/]+$/', '', $asset->path); + + // Get file content and concatenate + if ($type === 'scripts') { + $content .= $assetContent . ";\n"; + } + else { + // Rewrite relative URLs used inside stylesheets + $content .= preg_replace_callback( + '/url\([\'"]?([^"\')]+)[\'"]?\)/i', + function ($matches) use ($cssRelPath) { + if (preg_match("/^(data:|([a-z0-9]+:)?\/)/i", $matches[1]) === 1) { + return $matches[0]; // Not relative, skip + } + return 'url("../' . $cssRelPath . $matches[1] . '")'; + }, + $assetContent) . "\n"; + } + } + + self::dirReady("{$this->path}/cachedassets"); + $ext = ($type === 'scripts' ? 'js' : 'css'); + $outputfile = "/cachedassets/{$key}.{$ext}"; + file_put_contents($this->path . $outputfile, $content); + $files[$type] = array((object) array( + 'path' => $outputfile, + 'version' => '' + )); + } + } + + /** + * Will check if there are cache assets available for content. + * + * @param string $key + * Hashed key for cached asset + * @return array + */ + public function getCachedAssets($key) { + $files = array(); + + $js = "/cachedassets/{$key}.js"; + if (file_exists($this->path . $js)) { + $files['scripts'] = array((object) array( + 'path' => $js, + 'version' => '' + )); + } + + $css = "/cachedassets/{$key}.css"; + if (file_exists($this->path . $css)) { + $files['styles'] = array((object) array( + 'path' => $css, + 'version' => '' + )); + } + + return empty($files) ? NULL : $files; + } + + /** + * Remove the aggregated cache files. + * + * @param array $keys + * The hash keys of removed files + */ + public function deleteCachedAssets($keys) { + foreach ($keys as $hash) { + foreach (array('js', 'css') as $ext) { + $path = "{$this->path}/cachedassets/{$hash}.{$ext}"; + if (file_exists($path)) { + unlink($path); + } + } + } + } + + /** + * Read file content of given file and then return it. + * + * @param string $file_path + * @return string + */ + public function getContent($file_path) { + return file_get_contents($this->path . $file_path); + } + + /** + * Save files uploaded through the editor. + * The files must be marked as temporary until the content form is saved. + * + * @param \H5peditorFile $file + * @param int $contentid + */ + public function saveFile($file, $contentId) { + // Prepare directory + if (empty($contentId)) { + // Should be in editor tmp folder + $path = ($this->alteditorpath !== NULL ? $this->alteditorpath : $this->path . '/editor'); + } + else { + // Should be in content folder + $path = $this->path . '/content/' . $contentId; + } + $path .= '/' . $file->getType() . 's'; + self::dirReady($path); + + // Add filename to path + $path .= '/' . $file->getName(); + + $fileData = $file->getData(); + if ($fileData) { + file_put_contents($path, $fileData); + } + else { + copy($_FILES['file']['tmp_name'], $path); + } + + return $path; + } + + /** + * Copy a file from another content or editor tmp dir. + * Used when copy pasting content in H5P Editor. + * + * @param string $file path + name + * @param string|int $fromid Content ID or 'editor' string + * @param int $toid Target Content ID + */ + public function cloneContentFile($file, $fromId, $toId) { + // Determine source path + if ($fromId === 'editor') { + $sourcepath = ($this->alteditorpath !== NULL ? $this->alteditorpath : "{$this->path}/editor"); + } + else { + $sourcepath = "{$this->path}/content/{$fromId}"; + } + $sourcepath .= '/' . $file; + + // Determine target path + $filename = basename($file); + $filedir = str_replace($filename, '', $file); + $targetpath = "{$this->path}/content/{$toId}/{$filedir}"; + + // Make sure it's ready + self::dirReady($targetpath); + + $targetpath .= $filename; + + // Check to see if source exist and if target doesn't + if (!file_exists($sourcepath) || file_exists($targetpath)) { + return; // Nothing to copy from or target already exists + } + + copy($sourcepath, $targetpath); + } + + /** + * Checks to see if content has the given file. + * Used when saving content. + * + * @param string $file path + name + * @param int $contentId + * @return string File ID or NULL if not found + */ + public function getContentFile($file, $contentId) { + $path = "{$this->path}/content/{$contentId}/{$file}"; + return file_exists($path) ? $path : NULL; + } + + /** + * Checks to see if content has the given file. + * Used when saving content. + * + * @param string $file path + name + * @param int $contentid + * @return string|int File ID or NULL if not found + */ + public function removeContentFile($file, $contentId) { + $path = "{$this->path}/content/{$contentId}/{$file}"; + if (file_exists($path)) { + unlink($path); + } + } + + /** + * Recursive function for copying directories. + * + * @param string $source + * From path + * @param string $destination + * To path + * @return boolean + * Indicates if the directory existed. + * + * @throws Exception Unable to copy the file + */ + private static function copyFileTree($source, $destination) { + if (!self::dirReady($destination)) { + throw new \Exception('unabletocopy'); + } + + $ignoredFiles = self::getIgnoredFiles("{$source}/.h5pignore"); + + $dir = opendir($source); + if ($dir === FALSE) { + trigger_error('Unable to open directory ' . $source, E_USER_WARNING); + throw new \Exception('unabletocopy'); + } + + while (false !== ($file = readdir($dir))) { + if (($file != '.') && ($file != '..') && $file != '.git' && $file != '.gitignore' && !in_array($file, $ignoredFiles)) { + if (is_dir("{$source}/{$file}")) { + self::copyFileTree("{$source}/{$file}", "{$destination}/{$file}"); + } + else { + copy("{$source}/{$file}", "{$destination}/{$file}"); + } + } + } + closedir($dir); + } + + /** + * Retrieve array of file names from file. + * + * @param string $file + * @return array Array with files that should be ignored + */ + private static function getIgnoredFiles($file) { + if (file_exists($file) === FALSE) { + return array(); + } + + $contents = file_get_contents($file); + if ($contents === FALSE) { + return array(); + } + + return preg_split('/\s+/', $contents); + } + + /** + * Recursive function that makes sure the specified directory exists and + * is writable. + * + * @param string $path + * @return bool + */ + private static function dirReady($path) { + if (!file_exists($path)) { + $parent = preg_replace("/\/[^\/]+\/?$/", '', $path); + if (!self::dirReady($parent)) { + return FALSE; + } + + mkdir($path, 0777, true); + } + + if (!is_dir($path)) { + trigger_error('Path is not a directory ' . $path, E_USER_WARNING); + return FALSE; + } + + if (!is_writable($path)) { + trigger_error('Unable to write to ' . $path . ' – check directory permissions –', E_USER_WARNING); + return FALSE; + } + + return TRUE; + } +} diff --git a/html/moodle2/mod/hvp/library/h5p-development.class.php b/html/moodle2/mod/hvp/library/h5p-development.class.php new file mode 100755 index 0000000000..cb63d4524f --- /dev/null +++ b/html/moodle2/mod/hvp/library/h5p-development.class.php @@ -0,0 +1,180 @@ +<?php + +/** + * This is a data layer which uses the file system so it isn't specific to any framework. + */ +class H5PDevelopment { + + const MODE_NONE = 0; + const MODE_CONTENT = 1; + const MODE_LIBRARY = 2; + + private $h5pF, $libraries, $language, $filesPath; + + /** + * Constructor. + * + * @param H5PFrameworkInterface|object $H5PFramework + * The frameworks implementation of the H5PFrameworkInterface + * @param string $filesPath + * Path to where H5P should store its files + * @param $language + * @param array $libraries Optional cache input. + */ + public function __construct(H5PFrameworkInterface $H5PFramework, $filesPath, $language, $libraries = NULL) { + $this->h5pF = $H5PFramework; + $this->language = $language; + $this->filesPath = $filesPath; + if ($libraries !== NULL) { + $this->libraries = $libraries; + } + else { + $this->findLibraries($filesPath . '/development'); + } + } + + /** + * Get contents of file. + * + * @param string $file File path. + * @return mixed String on success or NULL on failure. + */ + private function getFileContents($file) { + if (file_exists($file) === FALSE) { + return NULL; + } + + $contents = file_get_contents($file); + if ($contents === FALSE) { + return NULL; + } + + return $contents; + } + + /** + * Scans development directory and find all libraries. + * + * @param string $path Libraries development folder + */ + private function findLibraries($path) { + $this->libraries = array(); + + if (is_dir($path) === FALSE) { + return; + } + + $contents = scandir($path); + + for ($i = 0, $s = count($contents); $i < $s; $i++) { + if ($contents[$i]{0} === '.') { + continue; // Skip hidden stuff. + } + + $libraryPath = $path . '/' . $contents[$i]; + $libraryJSON = $this->getFileContents($libraryPath . '/library.json'); + if ($libraryJSON === NULL) { + continue; // No JSON file, skip. + } + + $library = json_decode($libraryJSON, TRUE); + if ($library === NULL) { + continue; // Invalid JSON. + } + + // TODO: Validate props? Not really needed, is it? this is a dev site. + + // Save/update library. + $library['libraryId'] = $this->h5pF->getLibraryId($library['machineName'], $library['majorVersion'], $library['minorVersion']); + $this->h5pF->saveLibraryData($library, $library['libraryId'] === FALSE); + + $library['path'] = 'development/' . $contents[$i]; + $this->libraries[H5PDevelopment::libraryToString($library['machineName'], $library['majorVersion'], $library['minorVersion'])] = $library; + } + + // TODO: Should we remove libraries without files? Not really needed, but must be cleaned up some time, right? + + // Go trough libraries and insert dependencies. Missing deps. will just be ignored and not available. (I guess?!) + $this->h5pF->lockDependencyStorage(); + foreach ($this->libraries as $library) { + $this->h5pF->deleteLibraryDependencies($library['libraryId']); + // This isn't optimal, but without it we would get duplicate warnings. + // TODO: You might get PDOExceptions if two or more requests does this at the same time!! + $types = array('preloaded', 'dynamic', 'editor'); + foreach ($types as $type) { + if (isset($library[$type . 'Dependencies'])) { + $this->h5pF->saveLibraryDependencies($library['libraryId'], $library[$type . 'Dependencies'], $type); + } + } + } + $this->h5pF->unlockDependencyStorage(); + // TODO: Deps must be inserted into h5p_nodes_libraries as well... ? But only if they are used?! + } + + /** + * @return array Libraries in development folder. + */ + public function getLibraries() { + return $this->libraries; + } + + /** + * Get library + * + * @param string $name of the library. + * @param int $majorVersion of the library. + * @param int $minorVersion of the library. + * @return array library. + */ + public function getLibrary($name, $majorVersion, $minorVersion) { + $library = H5PDevelopment::libraryToString($name, $majorVersion, $minorVersion); + return isset($this->libraries[$library]) === TRUE ? $this->libraries[$library] : NULL; + } + + /** + * Get semantics for the given library. + * + * @param string $name of the library. + * @param int $majorVersion of the library. + * @param int $minorVersion of the library. + * @return string Semantics + */ + public function getSemantics($name, $majorVersion, $minorVersion) { + $library = H5PDevelopment::libraryToString($name, $majorVersion, $minorVersion); + if (isset($this->libraries[$library]) === FALSE) { + return NULL; + } + return $this->getFileContents($this->filesPath . $this->libraries[$library]['path'] . '/semantics.json'); + } + + /** + * Get translations for the given library. + * + * @param string $name of the library. + * @param int $majorVersion of the library. + * @param int $minorVersion of the library. + * @param $language + * @return string Translation + */ + public function getLanguage($name, $majorVersion, $minorVersion, $language) { + $library = H5PDevelopment::libraryToString($name, $majorVersion, $minorVersion); + + if (isset($this->libraries[$library]) === FALSE) { + return NULL; + } + + return $this->getFileContents($this->filesPath . $this->libraries[$library]['path'] . '/language/' . $language . '.json'); + } + + /** + * Writes library as string on the form "name majorVersion.minorVersion" + * + * @param string $name Machine readable library name + * @param integer $majorVersion + * @param $minorVersion + * @return string Library identifier. + */ + public static function libraryToString($name, $majorVersion, $minorVersion) { + return $name . ' ' . $majorVersion . '.' . $minorVersion; + } +} diff --git a/html/moodle2/mod/hvp/library/h5p-event-base.class.php b/html/moodle2/mod/hvp/library/h5p-event-base.class.php new file mode 100755 index 0000000000..f7ba49119b --- /dev/null +++ b/html/moodle2/mod/hvp/library/h5p-event-base.class.php @@ -0,0 +1,191 @@ +<?php + +/** + * The base class for H5P events. Extend to track H5P events in your system. + * + * @package H5P + * @copyright 2016 Joubel AS + * @license MIT + */ +abstract class H5PEventBase { + // Constants + const LOG_NONE = 0; + const LOG_ALL = 1; + const LOG_ACTIONS = 2; + + // Static options + public static $log_level = self::LOG_ACTIONS; + public static $log_time = 2592000; // 30 Days + + // Protected variables + protected $id, $type, $sub_type, $content_id, $content_title, $library_name, $library_version, $time; + + /** + * Adds event type, h5p library and timestamp to event before saving it. + * + * Common event types with sub type: + * content, <none> – content view + * embed – viewed through embed code + * shortcode – viewed through internal shortcode + * edit – opened in editor + * delete – deleted + * create – created through editor + * create upload – created through upload + * update – updated through editor + * update upload – updated through upload + * upgrade – upgraded + * + * results, <none> – view own results + * content – view results for content + * set – new results inserted or updated + * + * settings, <none> – settings page loaded + * + * library, <none> – loaded in editor + * create – new library installed + * update – old library updated + * + * @param string $type + * Name of event type + * @param string $sub_type + * Name of event sub type + * @param string $content_id + * Identifier for content affected by the event + * @param string $content_title + * Content title (makes it easier to know which content was deleted etc.) + * @param string $library_name + * Name of the library affected by the event + * @param string $library_version + * Library version + */ + function __construct($type, $sub_type = NULL, $content_id = NULL, $content_title = NULL, $library_name = NULL, $library_version = NULL) { + $this->type = $type; + $this->sub_type = $sub_type; + $this->content_id = $content_id; + $this->content_title = $content_title; + $this->library_name = $library_name; + $this->library_version = $library_version; + $this->time = time(); + + if (self::validLogLevel($type, $sub_type)) { + $this->save(); + } + if (self::validStats($type, $sub_type)) { + $this->saveStats(); + } + } + + /** + * Determines if the event type should be saved/logged. + * + * @param string $type + * Name of event type + * @param string $sub_type + * Name of event sub type + * @return boolean + */ + private static function validLogLevel($type, $sub_type) { + switch (self::$log_level) { + default: + case self::LOG_NONE: + return FALSE; + case self::LOG_ALL: + return TRUE; // Log everything + case self::LOG_ACTIONS: + if (self::isAction($type, $sub_type)) { + return TRUE; // Log actions + } + return FALSE; + } + } + + /** + * Check if the event should be included in the statistics counter. + * + * @param string $type + * Name of event type + * @param string $sub_type + * Name of event sub type + * @return boolean + */ + private static function validStats($type, $sub_type) { + if ( ($type === 'content' && $sub_type === 'shortcode insert') || // Count number of shortcode inserts + ($type === 'library' && $sub_type === NULL) || // Count number of times library is loaded in editor + ($type === 'results' && $sub_type === 'content') ) { // Count number of times results page has been opened + return TRUE; + } + elseif (self::isAction($type, $sub_type)) { // Count all actions + return TRUE; + } + return FALSE; + } + + /** + * Check if event type is an action. + * + * @param string $type + * Name of event type + * @param string $sub_type + * Name of event sub type + * @return boolean + */ + private static function isAction($type, $sub_type) { + if ( ($type === 'content' && in_array($sub_type, array('create', 'create upload', 'update', 'update upload', 'upgrade', 'delete'))) || + ($type === 'library' && in_array($sub_type, array('create', 'update'))) ) { + return TRUE; // Log actions + } + return FALSE; + } + + /** + * A helper which makes it easier for systems to save the data. + * Add all relevant properties to a assoc. array. + * There are no NULL values. Empty string or 0 is used instead. + * Used by both Drupal and WordPress. + * + * @return array with keyed values + */ + protected function getDataArray() { + return array( + 'created_at' => $this->time, + 'type' => $this->type, + 'sub_type' => empty($this->sub_type) ? '' : $this->sub_type, + 'content_id' => empty($this->content_id) ? 0 : $this->content_id, + 'content_title' => empty($this->content_title) ? '' : $this->content_title, + 'library_name' => empty($this->library_name) ? '' : $this->library_name, + 'library_version' => empty($this->library_version) ? '' : $this->library_version + ); + } + + /** + * A helper which makes it easier for systems to save the data. + * Used in WordPress. + * + * @return array with strings + */ + protected function getFormatArray() { + return array( + '%d', + '%s', + '%s', + '%d', + '%s', + '%s', + '%s' + ); + } + + /** + * Stores the event data in the database. + * + * Must be overridden by plugin. + */ + abstract protected function save(); + + /** + * Add current event data to statistics counter. + * + * Must be overridden by plugin. + */ + abstract protected function saveStats(); +} diff --git a/html/moodle2/mod/hvp/library/h5p-file-storage.interface.php b/html/moodle2/mod/hvp/library/h5p-file-storage.interface.php new file mode 100755 index 0000000000..92b4275336 --- /dev/null +++ b/html/moodle2/mod/hvp/library/h5p-file-storage.interface.php @@ -0,0 +1,174 @@ +<?php + +/** + * File info? + */ + +/** + * Interface needed to handle storage and export of H5P Content. + */ +interface H5PFileStorage { + + /** + * Store the library folder. + * + * @param array $library + * Library properties + */ + public function saveLibrary($library); + + /** + * Store the content folder. + * + * @param string $source + * Path on file system to content directory. + * @param array $content + * Content properties + */ + public function saveContent($source, $content); + + /** + * Remove content folder. + * + * @param array $content + * Content properties + */ + public function deleteContent($content); + + /** + * Creates a stored copy of the content folder. + * + * @param string $id + * Identifier of content to clone. + * @param int $newId + * The cloned content's identifier + */ + public function cloneContent($id, $newId); + + /** + * Get path to a new unique tmp folder. + * + * @return string + * Path + */ + public function getTmpPath(); + + /** + * Fetch content folder and save in target directory. + * + * @param int $id + * Content identifier + * @param string $target + * Where the content folder will be saved + */ + public function exportContent($id, $target); + + /** + * Fetch library folder and save in target directory. + * + * @param array $library + * Library properties + * @param string $target + * Where the library folder will be saved + */ + public function exportLibrary($library, $target); + + /** + * Save export in file system + * + * @param string $source + * Path on file system to temporary export file. + * @param string $filename + * Name of export file. + */ + public function saveExport($source, $filename); + + /** + * Removes given export file + * + * @param string $filename + */ + public function deleteExport($filename); + + /** + * Check if the given export file exists + * + * @param string $filename + * @return boolean + */ + public function hasExport($filename); + + /** + * Will concatenate all JavaScrips and Stylesheets into two files in order + * to improve page performance. + * + * @param array $files + * A set of all the assets required for content to display + * @param string $key + * Hashed key for cached asset + */ + public function cacheAssets(&$files, $key); + + /** + * Will check if there are cache assets available for content. + * + * @param string $key + * Hashed key for cached asset + * @return array + */ + public function getCachedAssets($key); + + /** + * Remove the aggregated cache files. + * + * @param array $keys + * The hash keys of removed files + */ + public function deleteCachedAssets($keys); + + /** + * Read file content of given file and then return it. + * + * @param string $file_path + * @return string contents + */ + public function getContent($file_path); + + /** + * Save files uploaded through the editor. + * The files must be marked as temporary until the content form is saved. + * + * @param \H5peditorFile $file + * @param int $contentid + */ + public function saveFile($file, $contentId); + + /** + * Copy a file from another content or editor tmp dir. + * Used when copy pasting content in H5P. + * + * @param string $file path + name + * @param string|int $fromid Content ID or 'editor' string + * @param int $toid Target Content ID + */ + public function cloneContentFile($file, $fromId, $toId); + + /** + * Checks to see if content has the given file. + * Used when saving content. + * + * @param string $file path + name + * @param int $contentId + * @return string|int File ID or NULL if not found + */ + public function getContentFile($file, $contentId); + + /** + * Remove content files that are no longer used. + * Used when saving content. + * + * @param string $file path + name + * @param int $contentId + */ + public function removeContentFile($file, $contentId); +} diff --git a/html/moodle2/mod/hvp/library/h5p.classes.php b/html/moodle2/mod/hvp/library/h5p.classes.php new file mode 100755 index 0000000000..658aac89f5 --- /dev/null +++ b/html/moodle2/mod/hvp/library/h5p.classes.php @@ -0,0 +1,3777 @@ +<?php +/** + * Interface defining functions the h5p library needs the framework to implement + */ +interface H5PFrameworkInterface { + + /** + * Returns info for the current platform + * + * @return array + * An associative array containing: + * - name: The name of the platform, for instance "Wordpress" + * - version: The version of the platform, for instance "4.0" + * - h5pVersion: The version of the H5P plugin/module + */ + public function getPlatformInfo(); + + + /** + * Fetches a file from a remote server using HTTP GET + * + * @param $url + * @param $data + * @return string The content (response body). NULL if something went wrong + */ + public function fetchExternalData($url, $data); + + /** + * Set the tutorial URL for a library. All versions of the library is set + * + * @param string $machineName + * @param string $tutorialUrl + */ + public function setLibraryTutorialUrl($machineName, $tutorialUrl); + + /** + * Show the user an error message + * + * @param string $message + * The error message + */ + public function setErrorMessage($message); + + /** + * Show the user an information message + * + * @param string $message + * The error message + */ + public function setInfoMessage($message); + + /** + * Translation function + * + * @param string $message + * The english string to be translated. + * @param array $replacements + * An associative array of replacements to make after translation. Incidences + * of any key in this array are replaced with the corresponding value. Based + * on the first character of the key, the value is escaped and/or themed: + * - !variable: inserted as is + * - @variable: escape plain text to HTML + * - %variable: escape text and theme as a placeholder for user-submitted + * content + * @return string Translated string + * Translated string + */ + public function t($message, $replacements = array()); + + /** + * Get the Path to the last uploaded h5p + * + * @return string + * Path to the folder where the last uploaded h5p for this session is located. + */ + public function getUploadedH5pFolderPath(); + + /** + * Get the path to the last uploaded h5p file + * + * @return string + * Path to the last uploaded h5p + */ + public function getUploadedH5pPath(); + + /** + * Get a list of the current installed libraries + * + * @return array + * Associative array containing one entry per machine name. + * For each machineName there is a list of libraries(with different versions) + */ + public function loadLibraries(); + + /** + * Returns the URL to the library admin page + * + * @return string + * URL to admin page + */ + public function getAdminUrl(); + + /** + * Get id to an existing library. + * If version number is not specified, the newest version will be returned. + * + * @param string $machineName + * The librarys machine name + * @param int $majorVersion + * Optional major version number for library + * @param int $minorVersion + * Optional minor version number for library + * @return int + * The id of the specified library or FALSE + */ + public function getLibraryId($machineName, $majorVersion = NULL, $minorVersion = NULL); + + /** + * Get file extension whitelist + * + * The default extension list is part of h5p, but admins should be allowed to modify it + * + * @param boolean $isLibrary + * TRUE if this is the whitelist for a library. FALSE if it is the whitelist + * for the content folder we are getting + * @param string $defaultContentWhitelist + * A string of file extensions separated by whitespace + * @param string $defaultLibraryWhitelist + * A string of file extensions separated by whitespace + */ + public function getWhitelist($isLibrary, $defaultContentWhitelist, $defaultLibraryWhitelist); + + /** + * Is the library a patched version of an existing library? + * + * @param object $library + * An associative array containing: + * - machineName: The library machineName + * - majorVersion: The librarys majorVersion + * - minorVersion: The librarys minorVersion + * - patchVersion: The librarys patchVersion + * @return boolean + * TRUE if the library is a patched version of an existing library + * FALSE otherwise + */ + public function isPatchedLibrary($library); + + /** + * Is H5P in development mode? + * + * @return boolean + * TRUE if H5P development mode is active + * FALSE otherwise + */ + public function isInDevMode(); + + /** + * Is the current user allowed to update libraries? + * + * @return boolean + * TRUE if the user is allowed to update libraries + * FALSE if the user is not allowed to update libraries + */ + public function mayUpdateLibraries(); + + /** + * Store data about a library + * + * Also fills in the libraryId in the libraryData object if the object is new + * + * @param object $libraryData + * Associative array containing: + * - libraryId: The id of the library if it is an existing library. + * - title: The library's name + * - machineName: The library machineName + * - majorVersion: The library's majorVersion + * - minorVersion: The library's minorVersion + * - patchVersion: The library's patchVersion + * - runnable: 1 if the library is a content type, 0 otherwise + * - fullscreen(optional): 1 if the library supports fullscreen, 0 otherwise + * - embedTypes(optional): list of supported embed types + * - preloadedJs(optional): list of associative arrays containing: + * - path: path to a js file relative to the library root folder + * - preloadedCss(optional): list of associative arrays containing: + * - path: path to css file relative to the library root folder + * - dropLibraryCss(optional): list of associative arrays containing: + * - machineName: machine name for the librarys that are to drop their css + * - semantics(optional): Json describing the content structure for the library + * - language(optional): associative array containing: + * - languageCode: Translation in json format + * @param bool $new + * @return + */ + public function saveLibraryData(&$libraryData, $new = TRUE); + + /** + * Insert new content. + * + * @param array $content + * An associative array containing: + * - id: The content id + * - params: The content in json format + * - library: An associative array containing: + * - libraryId: The id of the main library for this content + * @param int $contentMainId + * Main id for the content if this is a system that supports versions + */ + public function insertContent($content, $contentMainId = NULL); + + /** + * Update old content. + * + * @param array $content + * An associative array containing: + * - id: The content id + * - params: The content in json format + * - library: An associative array containing: + * - libraryId: The id of the main library for this content + * @param int $contentMainId + * Main id for the content if this is a system that supports versions + */ + public function updateContent($content, $contentMainId = NULL); + + /** + * Resets marked user data for the given content. + * + * @param int $contentId + */ + public function resetContentUserData($contentId); + + /** + * Save what libraries a library is depending on + * + * @param int $libraryId + * Library Id for the library we're saving dependencies for + * @param array $dependencies + * List of dependencies as associative arrays containing: + * - machineName: The library machineName + * - majorVersion: The library's majorVersion + * - minorVersion: The library's minorVersion + * @param string $dependency_type + * What type of dependency this is, the following values are allowed: + * - editor + * - preloaded + * - dynamic + */ + public function saveLibraryDependencies($libraryId, $dependencies, $dependency_type); + + /** + * Give an H5P the same library dependencies as a given H5P + * + * @param int $contentId + * Id identifying the content + * @param int $copyFromId + * Id identifying the content to be copied + * @param int $contentMainId + * Main id for the content, typically used in frameworks + * That supports versions. (In this case the content id will typically be + * the version id, and the contentMainId will be the frameworks content id + */ + public function copyLibraryUsage($contentId, $copyFromId, $contentMainId = NULL); + + /** + * Deletes content data + * + * @param int $contentId + * Id identifying the content + */ + public function deleteContentData($contentId); + + /** + * Delete what libraries a content item is using + * + * @param int $contentId + * Content Id of the content we'll be deleting library usage for + */ + public function deleteLibraryUsage($contentId); + + /** + * Saves what libraries the content uses + * + * @param int $contentId + * Id identifying the content + * @param array $librariesInUse + * List of libraries the content uses. Libraries consist of associative arrays with: + * - library: Associative array containing: + * - dropLibraryCss(optional): comma separated list of machineNames + * - machineName: Machine name for the library + * - libraryId: Id of the library + * - type: The dependency type. Allowed values: + * - editor + * - dynamic + * - preloaded + */ + public function saveLibraryUsage($contentId, $librariesInUse); + + /** + * Get number of content/nodes using a library, and the number of + * dependencies to other libraries + * + * @param int $libraryId + * Library identifier + * @return array + * Associative array containing: + * - content: Number of content using the library + * - libraries: Number of libraries depending on the library + */ + public function getLibraryUsage($libraryId); + + /** + * Loads a library + * + * @param string $machineName + * The library's machine name + * @param int $majorVersion + * The library's major version + * @param int $minorVersion + * The library's minor version + * @return array|FALSE + * FALSE if the library does not exist. + * Otherwise an associative array containing: + * - libraryId: The id of the library if it is an existing library. + * - title: The library's name + * - machineName: The library machineName + * - majorVersion: The library's majorVersion + * - minorVersion: The library's minorVersion + * - patchVersion: The library's patchVersion + * - runnable: 1 if the library is a content type, 0 otherwise + * - fullscreen(optional): 1 if the library supports fullscreen, 0 otherwise + * - embedTypes(optional): list of supported embed types + * - preloadedJs(optional): comma separated string with js file paths + * - preloadedCss(optional): comma separated sting with css file paths + * - dropLibraryCss(optional): list of associative arrays containing: + * - machineName: machine name for the librarys that are to drop their css + * - semantics(optional): Json describing the content structure for the library + * - preloadedDependencies(optional): list of associative arrays containing: + * - machineName: Machine name for a library this library is depending on + * - majorVersion: Major version for a library this library is depending on + * - minorVersion: Minor for a library this library is depending on + * - dynamicDependencies(optional): list of associative arrays containing: + * - machineName: Machine name for a library this library is depending on + * - majorVersion: Major version for a library this library is depending on + * - minorVersion: Minor for a library this library is depending on + * - editorDependencies(optional): list of associative arrays containing: + * - machineName: Machine name for a library this library is depending on + * - majorVersion: Major version for a library this library is depending on + * - minorVersion: Minor for a library this library is depending on + */ + public function loadLibrary($machineName, $majorVersion, $minorVersion); + + /** + * Loads library semantics. + * + * @param string $machineName + * Machine name for the library + * @param int $majorVersion + * The library's major version + * @param int $minorVersion + * The library's minor version + * @return string + * The library's semantics as json + */ + public function loadLibrarySemantics($machineName, $majorVersion, $minorVersion); + + /** + * Makes it possible to alter the semantics, adding custom fields, etc. + * + * @param array $semantics + * Associative array representing the semantics + * @param string $machineName + * The library's machine name + * @param int $majorVersion + * The library's major version + * @param int $minorVersion + * The library's minor version + */ + public function alterLibrarySemantics(&$semantics, $machineName, $majorVersion, $minorVersion); + + /** + * Delete all dependencies belonging to given library + * + * @param int $libraryId + * Library identifier + */ + public function deleteLibraryDependencies($libraryId); + + /** + * Start an atomic operation against the dependency storage + */ + public function lockDependencyStorage(); + + /** + * Stops an atomic operation against the dependency storage + */ + public function unlockDependencyStorage(); + + + /** + * Delete a library from database and file system + * + * @param stdClass $library + * Library object with id, name, major version and minor version. + */ + public function deleteLibrary($library); + + /** + * Load content. + * + * @param int $id + * Content identifier + * @return array + * Associative array containing: + * - contentId: Identifier for the content + * - params: json content as string + * - embedType: csv of embed types + * - title: The contents title + * - language: Language code for the content + * - libraryId: Id for the main library + * - libraryName: The library machine name + * - libraryMajorVersion: The library's majorVersion + * - libraryMinorVersion: The library's minorVersion + * - libraryEmbedTypes: CSV of the main library's embed types + * - libraryFullscreen: 1 if fullscreen is supported. 0 otherwise. + */ + public function loadContent($id); + + /** + * Load dependencies for the given content of the given type. + * + * @param int $id + * Content identifier + * @param int $type + * Dependency types. Allowed values: + * - editor + * - preloaded + * - dynamic + * @return array + * List of associative arrays containing: + * - libraryId: The id of the library if it is an existing library. + * - machineName: The library machineName + * - majorVersion: The library's majorVersion + * - minorVersion: The library's minorVersion + * - patchVersion: The library's patchVersion + * - preloadedJs(optional): comma separated string with js file paths + * - preloadedCss(optional): comma separated sting with css file paths + * - dropCss(optional): csv of machine names + */ + public function loadContentDependencies($id, $type = NULL); + + /** + * Get stored setting. + * + * @param string $name + * Identifier for the setting + * @param string $default + * Optional default value if settings is not set + * @return mixed + * Whatever has been stored as the setting + */ + public function getOption($name, $default = NULL); + + /** + * Stores the given setting. + * For example when did we last check h5p.org for updates to our libraries. + * + * @param string $name + * Identifier for the setting + * @param mixed $value Data + * Whatever we want to store as the setting + */ + public function setOption($name, $value); + + /** + * This will update selected fields on the given content. + * + * @param int $id Content identifier + * @param array $fields Content fields, e.g. filtered or slug. + */ + public function updateContentFields($id, $fields); + + /** + * Will clear filtered params for all the content that uses the specified + * library. This means that the content dependencies will have to be rebuilt, + * and the parameters re-filtered. + * + * @param int $library_id + */ + public function clearFilteredParameters($library_id); + + /** + * Get number of contents that has to get their content dependencies rebuilt + * and parameters re-filtered. + * + * @return int + */ + public function getNumNotFiltered(); + + /** + * Get number of contents using library as main library. + * + * @param int $libraryId + * @return int + */ + public function getNumContent($libraryId); + + /** + * Determines if content slug is used. + * + * @param string $slug + * @return boolean + */ + public function isContentSlugAvailable($slug); + + /** + * Generates statistics from the event log per library + * + * @param string $type Type of event to generate stats for + * @return array Number values indexed by library name and version + */ + public function getLibraryStats($type); + + /** + * Aggregate the current number of H5P authors + * @return int + */ + public function getNumAuthors(); + + /** + * Stores hash keys for cached assets, aggregated JavaScripts and + * stylesheets, and connects it to libraries so that we know which cache file + * to delete when a library is updated. + * + * @param string $key + * Hash key for the given libraries + * @param array $libraries + * List of dependencies(libraries) used to create the key + */ + public function saveCachedAssets($key, $libraries); + + /** + * Locate hash keys for given library and delete them. + * Used when cache file are deleted. + * + * @param int $library_id + * Library identifier + * @return array + * List of hash keys removed + */ + public function deleteCachedAssets($library_id); + + /** + * Get the amount of content items associated to a library + * return int + */ + public function getLibraryContentCount(); + + /** + * Will trigger after the export file is created. + */ + public function afterExportCreated(); + + /** + * Check if user has permissions to an action + * + * @method hasPermission + * @param [H5PPermission] $permission Permission type, ref H5PPermission + * @param [int] $id Id need by platform to determine permission + * @return boolean + */ + public function hasPermission($permission, $id = NULL); +} + +/** + * This class is used for validating H5P files + */ +class H5PValidator { + public $h5pF; + public $h5pC; + + // Schemas used to validate the h5p files + private $h5pRequired = array( + 'title' => '/^.{1,255}$/', + 'language' => '/^[-a-zA-Z]{1,10}$/', + 'preloadedDependencies' => array( + 'machineName' => '/^[\w0-9\-\.]{1,255}$/i', + 'majorVersion' => '/^[0-9]{1,5}$/', + 'minorVersion' => '/^[0-9]{1,5}$/', + ), + 'mainLibrary' => '/^[$a-z_][0-9a-z_\.$]{1,254}$/i', + 'embedTypes' => array('iframe', 'div'), + ); + + private $h5pOptional = array( + 'contentType' => '/^.{1,255}$/', + 'author' => '/^.{1,255}$/', + 'license' => '/^(cc-by|cc-by-sa|cc-by-nd|cc-by-nc|cc-by-nc-sa|cc-by-nc-nd|pd|cr|MIT|GPL1|GPL2|GPL3|MPL|MPL2)$/', + 'dynamicDependencies' => array( + 'machineName' => '/^[\w0-9\-\.]{1,255}$/i', + 'majorVersion' => '/^[0-9]{1,5}$/', + 'minorVersion' => '/^[0-9]{1,5}$/', + ), + 'w' => '/^[0-9]{1,4}$/', + 'h' => '/^[0-9]{1,4}$/', + 'metaKeywords' => '/^.{1,}$/', + 'metaDescription' => '/^.{1,}$/', + ); + + // Schemas used to validate the library files + private $libraryRequired = array( + 'title' => '/^.{1,255}$/', + 'majorVersion' => '/^[0-9]{1,5}$/', + 'minorVersion' => '/^[0-9]{1,5}$/', + 'patchVersion' => '/^[0-9]{1,5}$/', + 'machineName' => '/^[\w0-9\-\.]{1,255}$/i', + 'runnable' => '/^(0|1)$/', + ); + + private $libraryOptional = array( + 'author' => '/^.{1,255}$/', + 'license' => '/^(cc-by|cc-by-sa|cc-by-nd|cc-by-nc|cc-by-nc-sa|cc-by-nc-nd|pd|cr|MIT|GPL1|GPL2|GPL3|MPL|MPL2)$/', + 'description' => '/^.{1,}$/', + 'dynamicDependencies' => array( + 'machineName' => '/^[\w0-9\-\.]{1,255}$/i', + 'majorVersion' => '/^[0-9]{1,5}$/', + 'minorVersion' => '/^[0-9]{1,5}$/', + ), + 'preloadedDependencies' => array( + 'machineName' => '/^[\w0-9\-\.]{1,255}$/i', + 'majorVersion' => '/^[0-9]{1,5}$/', + 'minorVersion' => '/^[0-9]{1,5}$/', + ), + 'editorDependencies' => array( + 'machineName' => '/^[\w0-9\-\.]{1,255}$/i', + 'majorVersion' => '/^[0-9]{1,5}$/', + 'minorVersion' => '/^[0-9]{1,5}$/', + ), + 'preloadedJs' => array( + 'path' => '/^((\\\|\/)?[a-z_\-\s0-9\.]+)+\.js$/i', + ), + 'preloadedCss' => array( + 'path' => '/^((\\\|\/)?[a-z_\-\s0-9\.]+)+\.css$/i', + ), + 'dropLibraryCss' => array( + 'machineName' => '/^[\w0-9\-\.]{1,255}$/i', + ), + 'w' => '/^[0-9]{1,4}$/', + 'h' => '/^[0-9]{1,4}$/', + 'embedTypes' => array('iframe', 'div'), + 'fullscreen' => '/^(0|1)$/', + 'coreApi' => array( + 'majorVersion' => '/^[0-9]{1,5}$/', + 'minorVersion' => '/^[0-9]{1,5}$/', + ), + ); + + /** + * Constructor for the H5PValidator + * + * @param H5PFrameworkInterface $H5PFramework + * The frameworks implementation of the H5PFrameworkInterface + * @param H5PCore $H5PCore + */ + public function __construct($H5PFramework, $H5PCore) { + $this->h5pF = $H5PFramework; + $this->h5pC = $H5PCore; + $this->h5pCV = new H5PContentValidator($this->h5pF, $this->h5pC); + } + + /** + * Validates a .h5p file + * + * @param bool $skipContent + * @param bool $upgradeOnly + * @return bool TRUE if the .h5p file is valid + * TRUE if the .h5p file is valid + */ + public function isValidPackage($skipContent = FALSE, $upgradeOnly = FALSE) { + // Check dependencies, make sure Zip is present + if (!class_exists('ZipArchive')) { + $this->h5pF->setErrorMessage($this->h5pF->t('Your PHP version does not support ZipArchive.')); + return FALSE; + } + + // Create a temporary dir to extract package in. + $tmpDir = $this->h5pF->getUploadedH5pFolderPath(); + $tmpPath = $this->h5pF->getUploadedH5pPath(); + + // Extract and then remove the package file. + $zip = new ZipArchive; + + // Only allow files with the .h5p extension: + if (strtolower(substr($tmpPath, -3)) !== 'h5p') { + $this->h5pF->setErrorMessage($this->h5pF->t('The file you uploaded is not a valid HTML5 Package (It does not have the .h5p file extension)')); + H5PCore::deleteFileTree($tmpDir); + return FALSE; + } + + if ($zip->open($tmpPath) === true) { + $zip->extractTo($tmpDir); + $zip->close(); + } + else { + $this->h5pF->setErrorMessage($this->h5pF->t('The file you uploaded is not a valid HTML5 Package (We are unable to unzip it)')); + H5PCore::deleteFileTree($tmpDir); + return FALSE; + } + unlink($tmpPath); + + // Process content and libraries + $valid = TRUE; + $libraries = array(); + $files = scandir($tmpDir); + $mainH5pData = null; + $libraryJsonData = null; + $contentJsonData = null; + $mainH5pExists = $imageExists = $contentExists = FALSE; + foreach ($files as $file) { + if (in_array(substr($file, 0, 1), array('.', '_'))) { + continue; + } + $filePath = $tmpDir . DIRECTORY_SEPARATOR . $file; + // Check for h5p.json file. + if (strtolower($file) == 'h5p.json') { + if ($skipContent === TRUE) { + continue; + } + + $mainH5pData = $this->getJsonData($filePath); + if ($mainH5pData === FALSE) { + $valid = FALSE; + $this->h5pF->setErrorMessage($this->h5pF->t('Could not parse the main h5p.json file')); + } + else { + $validH5p = $this->isValidH5pData($mainH5pData, $file, $this->h5pRequired, $this->h5pOptional); + if ($validH5p) { + $mainH5pExists = TRUE; + } + else { + $valid = FALSE; + $this->h5pF->setErrorMessage($this->h5pF->t('The main h5p.json file is not valid')); + } + } + } + // Check for h5p.jpg? + elseif (strtolower($file) == 'h5p.jpg') { + $imageExists = TRUE; + } + // Content directory holds content. + elseif ($file == 'content') { + // We do a separate skipContent check to avoid having the content folder being treated as a library + if ($skipContent) { + continue; + } + if (!is_dir($filePath)) { + $this->h5pF->setErrorMessage($this->h5pF->t('Invalid content folder')); + $valid = FALSE; + continue; + } + $contentJsonData = $this->getJsonData($filePath . DIRECTORY_SEPARATOR . 'content.json'); + if ($contentJsonData === FALSE) { + $this->h5pF->setErrorMessage($this->h5pF->t('Could not find or parse the content.json file')); + $valid = FALSE; + continue; + } + else { + $contentExists = TRUE; + // In the future we might let the libraries provide validation functions for content.json + } + + if (!$this->h5pCV->validateContentFiles($filePath)) { + // validateContentFiles adds potential errors to the queue + $valid = FALSE; + continue; + } + } + + // The rest should be library folders + elseif ($this->h5pF->mayUpdateLibraries()) { + if (!is_dir($filePath)) { + // Ignore this. Probably a file that shouldn't have been included. + continue; + } + + $libraryH5PData = $this->getLibraryData($file, $filePath, $tmpDir); + + if ($libraryH5PData !== FALSE) { + // Library's directory name must be: + // - <machineName> + // - or - + // - <machineName>-<majorVersion>.<minorVersion> + // where machineName, majorVersion and minorVersion is read from library.json + if ($libraryH5PData['machineName'] !== $file && H5PCore::libraryToString($libraryH5PData, TRUE) !== $file) { + $this->h5pF->setErrorMessage($this->h5pF->t('Library directory name must match machineName or machineName-majorVersion.minorVersion (from library.json). (Directory: %directoryName , machineName: %machineName, majorVersion: %majorVersion, minorVersion: %minorVersion)', array( + '%directoryName' => $file, + '%machineName' => $libraryH5PData['machineName'], + '%majorVersion' => $libraryH5PData['majorVersion'], + '%minorVersion' => $libraryH5PData['minorVersion']))); + $valid = FALSE; + continue; + } + $libraryH5PData['uploadDirectory'] = $filePath; + $libraries[H5PCore::libraryToString($libraryH5PData)] = $libraryH5PData; + } + else { + $valid = FALSE; + } + } + } + if ($skipContent === FALSE) { + if (!$contentExists) { + $this->h5pF->setErrorMessage($this->h5pF->t('A valid content folder is missing')); + $valid = FALSE; + } + if (!$mainH5pExists) { + $this->h5pF->setErrorMessage($this->h5pF->t('A valid main h5p.json file is missing')); + $valid = FALSE; + } + } + if ($valid) { + if ($upgradeOnly) { + // When upgrading, we only add the already installed libraries, and + // the new dependent libraries + $upgrades = array(); + foreach ($libraries as $libString => &$library) { + // Is this library already installed? + if ($this->h5pF->getLibraryId($library['machineName']) !== FALSE) { + $upgrades[$libString] = $library; + } + } + while ($missingLibraries = $this->getMissingLibraries($upgrades)) { + foreach ($missingLibraries as $libString => $missing) { + $library = $libraries[$libString]; + if ($library) { + $upgrades[$libString] = $library; + } + } + } + + $libraries = $upgrades; + } + + $this->h5pC->librariesJsonData = $libraries; + + if ($skipContent === FALSE) { + $this->h5pC->mainJsonData = $mainH5pData; + $this->h5pC->contentJsonData = $contentJsonData; + $libraries['mainH5pData'] = $mainH5pData; // Check for the dependencies in h5p.json as well as in the libraries + } + + $missingLibraries = $this->getMissingLibraries($libraries); + foreach ($missingLibraries as $libString => $missing) { + if ($this->h5pC->getLibraryId($missing, $libString)) { + unset($missingLibraries[$libString]); + } + } + + if (!empty($missingLibraries)) { + foreach ($missingLibraries as $libString => $library) { + $this->h5pF->setErrorMessage($this->h5pF->t('Missing required library @library', array('@library' => $libString))); + } + if (!$this->h5pF->mayUpdateLibraries()) { + $this->h5pF->setInfoMessage($this->h5pF->t("Note that the libraries may exist in the file you uploaded, but you're not allowed to upload new libraries. Contact the site administrator about this.")); + } + } + $valid = empty($missingLibraries) && $valid; + } + if (!$valid) { + H5PCore::deleteFileTree($tmpDir); + } + return $valid; + } + + /** + * Validates a H5P library + * + * @param string $file + * Name of the library folder + * @param string $filePath + * Path to the library folder + * @param string $tmpDir + * Path to the temporary upload directory + * @return boolean|array + * H5P data from library.json and semantics if the library is valid + * FALSE if the library isn't valid + */ + public function getLibraryData($file, $filePath, $tmpDir) { + if (preg_match('/^[\w0-9\-\.]{1,255}$/i', $file) === 0) { + $this->h5pF->setErrorMessage($this->h5pF->t('Invalid library name: %name', array('%name' => $file))); + return FALSE; + } + $h5pData = $this->getJsonData($filePath . DIRECTORY_SEPARATOR . 'library.json'); + if ($h5pData === FALSE) { + $this->h5pF->setErrorMessage($this->h5pF->t('Could not find library.json file with valid json format for library %name', array('%name' => $file))); + return FALSE; + } + + // validate json if a semantics file is provided + $semanticsPath = $filePath . DIRECTORY_SEPARATOR . 'semantics.json'; + if (file_exists($semanticsPath)) { + $semantics = $this->getJsonData($semanticsPath, TRUE); + if ($semantics === FALSE) { + $this->h5pF->setErrorMessage($this->h5pF->t('Invalid semantics.json file has been included in the library %name', array('%name' => $file))); + return FALSE; + } + else { + $h5pData['semantics'] = $semantics; + } + } + + // validate language folder if it exists + $languagePath = $filePath . DIRECTORY_SEPARATOR . 'language'; + if (is_dir($languagePath)) { + $languageFiles = scandir($languagePath); + foreach ($languageFiles as $languageFile) { + if (in_array($languageFile, array('.', '..'))) { + continue; + } + if (preg_match('/^(-?[a-z]+){1,7}\.json$/i', $languageFile) === 0) { + $this->h5pF->setErrorMessage($this->h5pF->t('Invalid language file %file in library %library', array('%file' => $languageFile, '%library' => $file))); + return FALSE; + } + $languageJson = $this->getJsonData($languagePath . DIRECTORY_SEPARATOR . $languageFile, TRUE); + if ($languageJson === FALSE) { + $this->h5pF->setErrorMessage($this->h5pF->t('Invalid language file %languageFile has been included in the library %name', array('%languageFile' => $languageFile, '%name' => $file))); + return FALSE; + } + $parts = explode('.', $languageFile); // $parts[0] is the language code + $h5pData['language'][$parts[0]] = $languageJson; + } + } + + $validLibrary = $this->isValidH5pData($h5pData, $file, $this->libraryRequired, $this->libraryOptional); + + $validLibrary = $this->h5pCV->validateContentFiles($filePath, TRUE) && $validLibrary; + + if (isset($h5pData['preloadedJs'])) { + $validLibrary = $this->isExistingFiles($h5pData['preloadedJs'], $tmpDir, $file) && $validLibrary; + } + if (isset($h5pData['preloadedCss'])) { + $validLibrary = $this->isExistingFiles($h5pData['preloadedCss'], $tmpDir, $file) && $validLibrary; + } + if ($validLibrary) { + return $h5pData; + } + else { + return FALSE; + } + } + + /** + * Use the dependency declarations to find any missing libraries + * + * @param array $libraries + * A multidimensional array of libraries keyed with machineName first and majorVersion second + * @return array + * A list of libraries that are missing keyed with machineName and holds objects with + * machineName, majorVersion and minorVersion properties + */ + private function getMissingLibraries($libraries) { + $missing = array(); + foreach ($libraries as $library) { + if (isset($library['preloadedDependencies'])) { + $missing = array_merge($missing, $this->getMissingDependencies($library['preloadedDependencies'], $libraries)); + } + if (isset($library['dynamicDependencies'])) { + $missing = array_merge($missing, $this->getMissingDependencies($library['dynamicDependencies'], $libraries)); + } + if (isset($library['editorDependencies'])) { + $missing = array_merge($missing, $this->getMissingDependencies($library['editorDependencies'], $libraries)); + } + } + return $missing; + } + + /** + * Helper function for getMissingLibraries, searches for dependency required libraries in + * the provided list of libraries + * + * @param array $dependencies + * A list of objects with machineName, majorVersion and minorVersion properties + * @param array $libraries + * An array of libraries keyed with machineName + * @return + * A list of libraries that are missing keyed with machineName and holds objects with + * machineName, majorVersion and minorVersion properties + */ + private function getMissingDependencies($dependencies, $libraries) { + $missing = array(); + foreach ($dependencies as $dependency) { + $libString = H5PCore::libraryToString($dependency); + if (!isset($libraries[$libString])) { + $missing[$libString] = $dependency; + } + } + return $missing; + } + + /** + * Figure out if the provided file paths exists + * + * Triggers error messages if files doesn't exist + * + * @param array $files + * List of file paths relative to $tmpDir + * @param string $tmpDir + * Path to the directory where the $files are stored. + * @param string $library + * Name of the library we are processing + * @return boolean + * TRUE if all the files excists + */ + private function isExistingFiles($files, $tmpDir, $library) { + foreach ($files as $file) { + $path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $file['path']); + if (!file_exists($tmpDir . DIRECTORY_SEPARATOR . $library . DIRECTORY_SEPARATOR . $path)) { + $this->h5pF->setErrorMessage($this->h5pF->t('The file "%file" is missing from library: "%name"', array('%file' => $path, '%name' => $library))); + return FALSE; + } + } + return TRUE; + } + + /** + * Validates h5p.json and library.json data + * + * Error messages are triggered if the data isn't valid + * + * @param array $h5pData + * h5p data + * @param string $library_name + * Name of the library we are processing + * @param array $required + * Validation pattern for required properties + * @param array $optional + * Validation pattern for optional properties + * @return boolean + * TRUE if the $h5pData is valid + */ + private function isValidH5pData($h5pData, $library_name, $required, $optional) { + $valid = $this->isValidRequiredH5pData($h5pData, $required, $library_name); + $valid = $this->isValidOptionalH5pData($h5pData, $optional, $library_name) && $valid; + + // Check the library's required API version of Core. + // If no requirement is set this implicitly means 1.0. + if (isset($h5pData['coreApi']) && !empty($h5pData['coreApi'])) { + if (($h5pData['coreApi']['majorVersion'] > H5PCore::$coreApi['majorVersion']) || + ( ($h5pData['coreApi']['majorVersion'] == H5PCore::$coreApi['majorVersion']) && + ($h5pData['coreApi']['minorVersion'] > H5PCore::$coreApi['minorVersion']) )) { + + $this->h5pF->setErrorMessage( + $this->h5pF->t('The system was unable to install the <em>%component</em> component from the package, it requires a newer version of the H5P plugin. This site is currently running version %current, whereas the required version is %required or higher. You should consider upgrading and then try again.', + array( + '%component' => (isset($h5pData['title']) ? $h5pData['title'] : $library_name), + '%current' => H5PCore::$coreApi['majorVersion'] . '.' . H5PCore::$coreApi['minorVersion'], + '%required' => $h5pData['coreApi']['majorVersion'] . '.' . $h5pData['coreApi']['minorVersion'] + ) + ) + ); + + $valid = false; + } + } + + return $valid; + } + + /** + * Helper function for isValidH5pData + * + * Validates the optional part of the h5pData + * + * Triggers error messages + * + * @param array $h5pData + * h5p data + * @param array $requirements + * Validation pattern + * @param string $library_name + * Name of the library we are processing + * @return boolean + * TRUE if the optional part of the $h5pData is valid + */ + private function isValidOptionalH5pData($h5pData, $requirements, $library_name) { + $valid = TRUE; + + foreach ($h5pData as $key => $value) { + if (isset($requirements[$key])) { + $valid = $this->isValidRequirement($value, $requirements[$key], $library_name, $key) && $valid; + } + // Else: ignore, a package can have parameters that this library doesn't care about, but that library + // specific implementations does care about... + } + + return $valid; + } + + /** + * Validate a requirement given as regexp or an array of requirements + * + * @param mixed $h5pData + * The data to be validated + * @param mixed $requirement + * The requirement the data is to be validated against, regexp or array of requirements + * @param string $library_name + * Name of the library we are validating(used in error messages) + * @param string $property_name + * Name of the property we are validating(used in error messages) + * @return boolean + * TRUE if valid, FALSE if invalid + */ + private function isValidRequirement($h5pData, $requirement, $library_name, $property_name) { + $valid = TRUE; + + if (is_string($requirement)) { + if ($requirement == 'boolean') { + if (!is_bool($h5pData)) { + $this->h5pF->setErrorMessage($this->h5pF->t("Invalid data provided for %property in %library. Boolean expected.", array('%property' => $property_name, '%library' => $library_name))); + $valid = FALSE; + } + } + else { + // The requirement is a regexp, match it against the data + if (is_string($h5pData) || is_int($h5pData)) { + if (preg_match($requirement, $h5pData) === 0) { + $this->h5pF->setErrorMessage($this->h5pF->t("Invalid data provided for %property in %library", array('%property' => $property_name, '%library' => $library_name))); + $valid = FALSE; + } + } + else { + $this->h5pF->setErrorMessage($this->h5pF->t("Invalid data provided for %property in %library", array('%property' => $property_name, '%library' => $library_name))); + $valid = FALSE; + } + } + } + elseif (is_array($requirement)) { + // We have sub requirements + if (is_array($h5pData)) { + if (is_array(current($h5pData))) { + foreach ($h5pData as $sub_h5pData) { + $valid = $this->isValidRequiredH5pData($sub_h5pData, $requirement, $library_name) && $valid; + } + } + else { + $valid = $this->isValidRequiredH5pData($h5pData, $requirement, $library_name) && $valid; + } + } + else { + $this->h5pF->setErrorMessage($this->h5pF->t("Invalid data provided for %property in %library", array('%property' => $property_name, '%library' => $library_name))); + $valid = FALSE; + } + } + else { + $this->h5pF->setErrorMessage($this->h5pF->t("Can't read the property %property in %library", array('%property' => $property_name, '%library' => $library_name))); + $valid = FALSE; + } + return $valid; + } + + /** + * Validates the required h5p data in libraray.json and h5p.json + * + * @param mixed $h5pData + * Data to be validated + * @param array $requirements + * Array with regexp to validate the data against + * @param string $library_name + * Name of the library we are validating (used in error messages) + * @return boolean + * TRUE if all the required data exists and is valid, FALSE otherwise + */ + private function isValidRequiredH5pData($h5pData, $requirements, $library_name) { + $valid = TRUE; + foreach ($requirements as $required => $requirement) { + if (is_int($required)) { + // We have an array of allowed options + return $this->isValidH5pDataOptions($h5pData, $requirements, $library_name); + } + if (isset($h5pData[$required])) { + $valid = $this->isValidRequirement($h5pData[$required], $requirement, $library_name, $required) && $valid; + } + else { + $this->h5pF->setErrorMessage($this->h5pF->t('The required property %property is missing from %library', array('%property' => $required, '%library' => $library_name))); + $valid = FALSE; + } + } + return $valid; + } + + /** + * Validates h5p data against a set of allowed values(options) + * + * @param array $selected + * The option(s) that has been specified + * @param array $allowed + * The allowed options + * @param string $library_name + * Name of the library we are validating (used in error messages) + * @return boolean + * TRUE if the specified data is valid, FALSE otherwise + */ + private function isValidH5pDataOptions($selected, $allowed, $library_name) { + $valid = TRUE; + foreach ($selected as $value) { + if (!in_array($value, $allowed)) { + $this->h5pF->setErrorMessage($this->h5pF->t('Illegal option %option in %library', array('%option' => $value, '%library' => $library_name))); + $valid = FALSE; + } + } + return $valid; + } + + /** + * Fetch json data from file + * + * @param string $filePath + * Path to the file holding the json string + * @param boolean $return_as_string + * If true the json data will be decoded in order to validate it, but will be + * returned as string + * @return mixed + * FALSE if the file can't be read or the contents can't be decoded + * string if the $return as string parameter is set + * array otherwise + */ + private function getJsonData($filePath, $return_as_string = FALSE) { + $json = file_get_contents($filePath); + if ($json === FALSE) { + return FALSE; // Cannot read from file. + } + $jsonData = json_decode($json, TRUE); + if ($jsonData === NULL) { + return FALSE; // JSON cannot be decoded or the recursion limit has been reached. + } + return $return_as_string ? $json : $jsonData; + } + + /** + * Helper function that copies an array + * + * @param array $array + * The array to be copied + * @return array + * Copy of $array. All objects are cloned + */ + private function arrayCopy(array $array) { + $result = array(); + foreach ($array as $key => $val) { + if (is_array($val)) { + $result[$key] = self::arrayCopy($val); + } + elseif (is_object($val)) { + $result[$key] = clone $val; + } + else { + $result[$key] = $val; + } + } + return $result; + } +} + +/** + * This class is used for saving H5P files + */ +class H5PStorage { + + public $h5pF; + public $h5pC; + + public $contentId = NULL; // Quick fix so WP can get ID of new content. + + /** + * Constructor for the H5PStorage + * + * @param H5PFrameworkInterface|object $H5PFramework + * The frameworks implementation of the H5PFrameworkInterface + * @param H5PCore $H5PCore + */ + public function __construct(H5PFrameworkInterface $H5PFramework, H5PCore $H5PCore) { + $this->h5pF = $H5PFramework; + $this->h5pC = $H5PCore; + } + + /** + * Saves a H5P file + * + * @param null $content + * @param int $contentMainId + * The main id for the content we are saving. This is used if the framework + * we're integrating with uses content id's and version id's + * @param bool $skipContent + * @param array $options + * @return bool TRUE if one or more libraries were updated + * TRUE if one or more libraries were updated + * FALSE otherwise + */ + public function savePackage($content = NULL, $contentMainId = NULL, $skipContent = FALSE, $options = array()) { + if ($this->h5pF->mayUpdateLibraries()) { + // Save the libraries we processed during validation + $this->saveLibraries(); + } + + if (!$skipContent) { + $basePath = $this->h5pF->getUploadedH5pFolderPath(); + $current_path = $basePath . DIRECTORY_SEPARATOR . 'content'; + + // Save content + if ($content === NULL) { + $content = array(); + } + if (!is_array($content)) { + $content = array('id' => $content); + } + + // Find main library version + foreach ($this->h5pC->mainJsonData['preloadedDependencies'] as $dep) { + if ($dep['machineName'] === $this->h5pC->mainJsonData['mainLibrary']) { + $dep['libraryId'] = $this->h5pC->getLibraryId($dep); + $content['library'] = $dep; + break; + } + } + + $content['params'] = file_get_contents($current_path . DIRECTORY_SEPARATOR . 'content.json'); + + if (isset($options['disable'])) { + $content['disable'] = $options['disable']; + } + $content['id'] = $this->h5pC->saveContent($content, $contentMainId); + $this->contentId = $content['id']; + + try { + // Save content folder contents + $this->h5pC->fs->saveContent($current_path, $content); + } + catch (Exception $e) { + $this->h5pF->setErrorMessage($e->getMessage()); + } + + // Remove temp content folder + H5PCore::deleteFileTree($basePath); + } + } + + /** + * Helps savePackage. + * + * @return int Number of libraries saved + */ + private function saveLibraries() { + // Keep track of the number of libraries that have been saved + $newOnes = 0; + $oldOnes = 0; + + // Go through libraries that came with this package + foreach ($this->h5pC->librariesJsonData as $libString => &$library) { + // Find local library identifier + $libraryId = $this->h5pC->getLibraryId($library, $libString); + + // Assume new library + $new = TRUE; + if ($libraryId) { + // Found old library + $library['libraryId'] = $libraryId; + + if ($this->h5pF->isPatchedLibrary($library)) { + // This is a newer version than ours. Upgrade! + $new = FALSE; + } + else { + $library['saveDependencies'] = FALSE; + // This is an older version, no need to save. + continue; + } + } + + // Indicate that the dependencies of this library should be saved. + $library['saveDependencies'] = TRUE; + + // Save library meta data + $this->h5pF->saveLibraryData($library, $new); + + // Save library folder + $this->h5pC->fs->saveLibrary($library); + + // Remove cached assets that uses this library + if ($this->h5pC->aggregateAssets && isset($library['libraryId'])) { + $removedKeys = $this->h5pF->deleteCachedAssets($library['libraryId']); + $this->h5pC->fs->deleteCachedAssets($removedKeys); + } + + // Remove tmp folder + H5PCore::deleteFileTree($library['uploadDirectory']); + + if ($new) { + $newOnes++; + } + else { + $oldOnes++; + } + } + + // Go through the libraries again to save dependencies. + foreach ($this->h5pC->librariesJsonData as &$library) { + if (!$library['saveDependencies']) { + continue; + } + + // TODO: Should the table be locked for this operation? + + // Remove any old dependencies + $this->h5pF->deleteLibraryDependencies($library['libraryId']); + + // Insert the different new ones + if (isset($library['preloadedDependencies'])) { + $this->h5pF->saveLibraryDependencies($library['libraryId'], $library['preloadedDependencies'], 'preloaded'); + } + if (isset($library['dynamicDependencies'])) { + $this->h5pF->saveLibraryDependencies($library['libraryId'], $library['dynamicDependencies'], 'dynamic'); + } + if (isset($library['editorDependencies'])) { + $this->h5pF->saveLibraryDependencies($library['libraryId'], $library['editorDependencies'], 'editor'); + } + + // Make sure libraries dependencies, parameter filtering and export files gets regenerated for all content who uses this library. + $this->h5pF->clearFilteredParameters($library['libraryId']); + } + + // Tell the user what we've done. + if ($newOnes && $oldOnes) { + $message = $this->h5pF->t('Added %new new H5P libraries and updated %old old.', array('%new' => $newOnes, '%old' => $oldOnes)); + } + elseif ($newOnes) { + $message = $this->h5pF->t('Added %new new H5P libraries.', array('%new' => $newOnes)); + } + elseif ($oldOnes) { + $message = $this->h5pF->t('Updated %old H5P libraries.', array('%old' => $oldOnes)); + } + + if (isset($message)) { + $this->h5pF->setInfoMessage($message); + } + } + + /** + * Delete an H5P package + * + * @param $content + */ + public function deletePackage($content) { + $this->h5pC->fs->deleteContent($content); + $this->h5pC->fs->deleteExport(($content['slug'] ? $content['slug'] . '-' : '') . $content['id'] . '.h5p'); + $this->h5pF->deleteContentData($content['id']); + } + + /** + * Copy/clone an H5P package + * + * May for instance be used if the content is being revisioned without + * uploading a new H5P package + * + * @param int $contentId + * The new content id + * @param int $copyFromId + * The content id of the content that should be cloned + * @param int $contentMainId + * The main id of the new content (used in frameworks that support revisioning) + */ + public function copyPackage($contentId, $copyFromId, $contentMainId = NULL) { + $this->h5pC->fs->cloneContent($copyFromId, $contentId); + $this->h5pF->copyLibraryUsage($contentId, $copyFromId, $contentMainId); + } +} + +/** +* This class is used for exporting zips +*/ +Class H5PExport { + public $h5pF; + public $h5pC; + + /** + * Constructor for the H5PExport + * + * @param H5PFrameworkInterface|object $H5PFramework + * The frameworks implementation of the H5PFrameworkInterface + * @param H5PCore $H5PCore + * Reference to an instance of H5PCore + */ + public function __construct(H5PFrameworkInterface $H5PFramework, H5PCore $H5PCore) { + $this->h5pF = $H5PFramework; + $this->h5pC = $H5PCore; + } + + /** + * Return path to h5p package. + * + * Creates package if not already created + * + * @param array $content + * @return string + */ + public function createExportFile($content) { + + // Get path to temporary folder, where export will be contained + $tmpPath = $this->h5pC->fs->getTmpPath(); + mkdir($tmpPath, 0777, true); + + try { + // Create content folder and populate with files + $this->h5pC->fs->exportContent($content['id'], "{$tmpPath}/content"); + } + catch (Exception $e) { + $this->h5pF->setErrorMessage($this->h5pF->t($e->getMessage())); + H5PCore::deleteFileTree($tmpPath); + return FALSE; + } + + // Update content.json with content from database + file_put_contents("{$tmpPath}/content/content.json", $content['params']); + + // Make embedType into an array + $embedTypes = explode(', ', $content['embedType']); + + // Build h5p.json + $h5pJson = array ( + 'title' => $content['title'], + 'language' => (isset($content['language']) && strlen(trim($content['language'])) !== 0) ? $content['language'] : 'und', + 'mainLibrary' => $content['library']['name'], + 'embedTypes' => $embedTypes, + ); + + // Add dependencies to h5p + foreach ($content['dependencies'] as $dependency) { + $library = $dependency['library']; + + try { + $exportFolder = NULL; + + // Determine path of export library + if (isset($this->h5pC) && isset($this->h5pC->h5pD)) { + + // Tries to find library in development folder + $isDevLibrary = $this->h5pC->h5pD->getLibrary( + $library['machineName'], + $library['majorVersion'], + $library['minorVersion'] + ); + + if ($isDevLibrary !== NULL) { + $exportFolder = "/" . $library['path']; + } + } + + // Export required libraries + $this->h5pC->fs->exportLibrary($library, $tmpPath, $exportFolder); + } + catch (Exception $e) { + $this->h5pF->setErrorMessage($this->h5pF->t($e->getMessage())); + H5PCore::deleteFileTree($tmpPath); + return FALSE; + } + + // Do not add editor dependencies to h5p json. + if ($dependency['type'] === 'editor') { + continue; + } + + // Add to h5p.json dependencies + $h5pJson[$dependency['type'] . 'Dependencies'][] = array( + 'machineName' => $library['machineName'], + 'majorVersion' => $library['majorVersion'], + 'minorVersion' => $library['minorVersion'] + ); + } + + // Save h5p.json + $results = print_r(json_encode($h5pJson), true); + file_put_contents("{$tmpPath}/h5p.json", $results); + + // Get a complete file list from our tmp dir + $files = array(); + self::populateFileList($tmpPath, $files); + + // Get path to temporary export target file + $tmpFile = $this->h5pC->fs->getTmpPath(); + + // Create new zip instance. + $zip = new ZipArchive(); + $zip->open($tmpFile, ZipArchive::CREATE | ZipArchive::OVERWRITE); + + // Add all the files from the tmp dir. + foreach ($files as $file) { + // Please note that the zip format has no concept of folders, we must + // use forward slashes to separate our directories. + $zip->addFile(realpath($file->absolutePath), $file->relativePath); + } + + // Close zip and remove tmp dir + $zip->close(); + H5PCore::deleteFileTree($tmpPath); + + try { + // Save export + $this->h5pC->fs->saveExport($tmpFile, $content['slug'] . '-' . $content['id'] . '.h5p'); + } + catch (Exception $e) { + $this->h5pF->setErrorMessage($this->h5pF->t($e->getMessage())); + return false; + } + + unlink($tmpFile); + $this->h5pF->afterExportCreated(); + + return true; + } + + /** + * Recursive function the will add the files of the given directory to the + * given files list. All files are objects with an absolute path and + * a relative path. The relative path is forward slashes only! Great for + * use in zip files and URLs. + * + * @param string $dir path + * @param array $files list + * @param string $relative prefix. Optional + */ + private static function populateFileList($dir, &$files, $relative = '') { + $strip = strlen($dir) + 1; + $contents = glob($dir . DIRECTORY_SEPARATOR . '*'); + if (!empty($contents)) { + foreach ($contents as $file) { + $rel = $relative . substr($file, $strip); + if (is_dir($file)) { + self::populateFileList($file, $files, $rel . '/'); + } + else { + $files[] = (object) array( + 'absolutePath' => $file, + 'relativePath' => $rel + ); + } + } + } + } + + /** + * Delete .h5p file + * + * @param array $content object + */ + public function deleteExport($content) { + $this->h5pC->fs->deleteExport(($content['slug'] ? $content['slug'] . '-' : '') . $content['id'] . '.h5p'); + } + + /** + * Add editor libraries to the list of libraries + * + * These are not supposed to go into h5p.json, but must be included with the rest + * of the libraries + * + * TODO This is a private function that is not currently being used + * + * @param array $libraries + * List of libraries keyed by machineName + * @param array $editorLibraries + * List of libraries keyed by machineName + * @return array List of libraries keyed by machineName + */ + private function addEditorLibraries($libraries, $editorLibraries) { + foreach ($editorLibraries as $editorLibrary) { + $libraries[$editorLibrary['machineName']] = $editorLibrary; + } + return $libraries; + } +} + +abstract class H5PPermission { + const DOWNLOAD_H5P = 0; + const EMBED_H5P = 1; +} + +abstract class H5PDisplayOptionBehaviour { + const NEVER_SHOW = 0; + const CONTROLLED_BY_AUTHOR_DEFAULT_ON = 1; + const CONTROLLED_BY_AUTHOR_DEFAULT_OFF = 2; + const ALWAYS_SHOW = 3; + const CONTROLLED_BY_PERMISSIONS = 4; +} + + +/** + * Functions and storage shared by the other H5P classes + */ +class H5PCore { + + public static $coreApi = array( + 'majorVersion' => 1, + 'minorVersion' => 12 + ); + public static $styles = array( + 'styles/h5p.css', + 'styles/h5p-confirmation-dialog.css', + 'styles/h5p-core-button.css' + ); + public static $scripts = array( + 'js/jquery.js', + 'js/h5p.js', + 'js/h5p-event-dispatcher.js', + 'js/h5p-x-api-event.js', + 'js/h5p-x-api.js', + 'js/h5p-content-type.js', + 'js/h5p-confirmation-dialog.js', + 'js/h5p-action-bar.js' + ); + public static $adminScripts = array( + 'js/jquery.js', + 'js/h5p-utils.js', + ); + + public static $defaultContentWhitelist = 'json png jpg jpeg gif bmp tif tiff svg eot ttf woff woff2 otf webm mp4 ogg mp3 txt pdf rtf doc docx xls xlsx ppt pptx odt ods odp xml csv diff patch swf md textile'; + public static $defaultLibraryWhitelistExtras = 'js css'; + + public $librariesJsonData, $contentJsonData, $mainJsonData, $h5pF, $fs, $h5pD, $disableFileCheck; + const SECONDS_IN_WEEK = 604800; + + private $exportEnabled; + + // Disable flags + const DISABLE_NONE = 0; + const DISABLE_FRAME = 1; + const DISABLE_DOWNLOAD = 2; + const DISABLE_EMBED = 4; + const DISABLE_COPYRIGHT = 8; + const DISABLE_ABOUT = 16; + + const DISPLAY_OPTION_FRAME = 'frame'; + const DISPLAY_OPTION_DOWNLOAD = 'export'; + const DISPLAY_OPTION_EMBED = 'embed'; + const DISPLAY_OPTION_COPYRIGHT = 'copyright'; + const DISPLAY_OPTION_ABOUT = 'icon'; + + // Map flags to string + public static $disable = array( + self::DISABLE_FRAME => self::DISPLAY_OPTION_FRAME, + self::DISABLE_DOWNLOAD => self::DISPLAY_OPTION_DOWNLOAD, + self::DISABLE_EMBED => self::DISPLAY_OPTION_EMBED, + self::DISABLE_COPYRIGHT => self::DISPLAY_OPTION_COPYRIGHT + ); + + /** + * Constructor for the H5PCore + * + * @param H5PFrameworkInterface $H5PFramework + * The frameworks implementation of the H5PFrameworkInterface + * @param string|\H5PFileStorage $path H5P file storage directory or class. + * @param string $url To file storage directory. + * @param string $language code. Defaults to english. + * @param boolean $export enabled? + */ + public function __construct(H5PFrameworkInterface $H5PFramework, $path, $url, $language = 'en', $export = FALSE) { + $this->h5pF = $H5PFramework; + + $this->fs = ($path instanceof \H5PFileStorage ? $path : new \H5PDefaultStorage($path)); + + $this->url = $url; + $this->exportEnabled = $export; + $this->development_mode = H5PDevelopment::MODE_NONE; + + $this->aggregateAssets = FALSE; // Off by default.. for now + + $this->detectSiteType(); + $this->fullPluginPath = preg_replace('/\/[^\/]+[\/]?$/', '' , dirname(__FILE__)); + + // Standard regex for converting copied files paths + $this->relativePathRegExp = '/^((\.\.\/){1,2})(.*content\/)?(\d+|editor)\/(.+)$/'; + } + + + + /** + * Save content and clear cache. + * + * @param array $content + * @param null|int $contentMainId + * @return int Content ID + */ + public function saveContent($content, $contentMainId = NULL) { + if (isset($content['id'])) { + $this->h5pF->updateContent($content, $contentMainId); + } + else { + $content['id'] = $this->h5pF->insertContent($content, $contentMainId); + } + + // Some user data for content has to be reset when the content changes. + $this->h5pF->resetContentUserData($contentMainId ? $contentMainId : $content['id']); + + return $content['id']; + } + + /** + * Load content. + * + * @param int $id for content. + * @return object + */ + public function loadContent($id) { + $content = $this->h5pF->loadContent($id); + + if ($content !== NULL) { + $content['library'] = array( + 'id' => $content['libraryId'], + 'name' => $content['libraryName'], + 'majorVersion' => $content['libraryMajorVersion'], + 'minorVersion' => $content['libraryMinorVersion'], + 'embedTypes' => $content['libraryEmbedTypes'], + 'fullscreen' => $content['libraryFullscreen'], + ); + unset($content['libraryId'], $content['libraryName'], $content['libraryEmbedTypes'], $content['libraryFullscreen']); + +// // TODO: Move to filterParameters? +// if (isset($this->h5pD)) { +// // TODO: Remove Drupal specific stuff +// $json_content_path = file_create_path(file_directory_path() . '/' . variable_get('h5p_default_path', 'h5p') . '/content/' . $id . '/content.json'); +// if (file_exists($json_content_path) === TRUE) { +// $json_content = file_get_contents($json_content_path); +// if (json_decode($json_content, TRUE) !== FALSE) { +// drupal_set_message(t('Invalid json in json content'), 'warning'); +// } +// $content['params'] = $json_content; +// } +// } + } + + return $content; + } + + /** + * Filter content run parameters, rebuild content dependency cache and export file. + * + * @param Object|array $content + * @return Object NULL on failure. + */ + public function filterParameters(&$content) { + if (!empty($content['filtered']) && + (!$this->exportEnabled || + ($content['slug'] && + $this->fs->hasExport($content['slug'] . '-' . $content['id'] . '.h5p')))) { + return $content['filtered']; + } + + // Validate and filter against main library semantics. + $validator = new H5PContentValidator($this->h5pF, $this); + $params = (object) array( + 'library' => H5PCore::libraryToString($content['library']), + 'params' => json_decode($content['params']) + ); + if (!$params->params) { + return NULL; + } + $validator->validateLibrary($params, (object) array('options' => array($params->library))); + + $params = json_encode($params->params); + + // Update content dependencies. + $content['dependencies'] = $validator->getDependencies(); + + // Sometimes the parameters are filtered before content has been created + if ($content['id']) { + $this->h5pF->deleteLibraryUsage($content['id']); + $this->h5pF->saveLibraryUsage($content['id'], $content['dependencies']); + + if (!$content['slug']) { + $content['slug'] = $this->generateContentSlug($content); + + // Remove old export file + $this->fs->deleteExport($content['id'] . '.h5p'); + } + + if ($this->exportEnabled) { + // Recreate export file + $exporter = new H5PExport($this->h5pF, $this); + $exporter->createExportFile($content); + } + + // Cache. + $this->h5pF->updateContentFields($content['id'], array( + 'filtered' => $params, + 'slug' => $content['slug'] + )); + } + return $params; + } + + /** + * Generate content slug + * + * @param array $content object + * @return string unique content slug + */ + private function generateContentSlug($content) { + $slug = H5PCore::slugify($content['title']); + + $available = NULL; + while (!$available) { + if ($available === FALSE) { + // If not available, add number suffix. + $matches = array(); + if (preg_match('/(.+-)([0-9]+)$/', $slug, $matches)) { + $slug = $matches[1] . (intval($matches[2]) + 1); + } + else { + $slug .= '-2'; + } + } + $available = $this->h5pF->isContentSlugAvailable($slug); + } + + return $slug; + } + + /** + * Find the files required for this content to work. + * + * @param int $id for content. + * @param null $type + * @return array + */ + public function loadContentDependencies($id, $type = NULL) { + $dependencies = $this->h5pF->loadContentDependencies($id, $type); + + if (isset($this->h5pD)) { + $developmentLibraries = $this->h5pD->getLibraries(); + + foreach ($dependencies as $key => $dependency) { + $libraryString = H5PCore::libraryToString($dependency); + if (isset($developmentLibraries[$libraryString])) { + $developmentLibraries[$libraryString]['dependencyType'] = $dependencies[$key]['dependencyType']; + $dependencies[$key] = $developmentLibraries[$libraryString]; + } + } + } + + return $dependencies; + } + + /** + * Get all dependency assets of the given type + * + * @param array $dependency + * @param string $type + * @param array $assets + * @param string $prefix Optional. Make paths relative to another dir. + */ + private function getDependencyAssets($dependency, $type, &$assets, $prefix = '') { + // Check if dependency has any files of this type + if (empty($dependency[$type]) || $dependency[$type][0] === '') { + return; + } + + // Check if we should skip CSS. + if ($type === 'preloadedCss' && (isset($dependency['dropCss']) && $dependency['dropCss'] === '1')) { + return; + } + foreach ($dependency[$type] as $file) { + $assets[] = (object) array( + 'path' => $prefix . '/' . $dependency['path'] . '/' . trim(is_array($file) ? $file['path'] : $file), + 'version' => $dependency['version'] + ); + } + } + + /** + * Combines path with cache buster / version. + * + * @param array $assets + * @return array + */ + public function getAssetsUrls($assets) { + $urls = array(); + + foreach ($assets as $asset) { + $url = $asset->path; + + // Add URL prefix if not external + if (strpos($asset->path, '://') === FALSE) { + $url = $this->url . $url; + } + + // Add version/cache buster if set + if (isset($asset->version)) { + $url .= $asset->version; + } + + $urls[] = $url; + } + + return $urls; + } + + /** + * Return file paths for all dependencies files. + * + * @param array $dependencies + * @param string $prefix Optional. Make paths relative to another dir. + * @return array files. + */ + public function getDependenciesFiles($dependencies, $prefix = '') { + // Build files list for assets + $files = array( + 'scripts' => array(), + 'styles' => array() + ); + + $key = null; + + // Avoid caching empty files + if (empty($dependencies)) { + return $files; + } + + if ($this->aggregateAssets) { + // Get aggregated files for assets + $key = self::getDependenciesHash($dependencies); + + $cachedAssets = $this->fs->getCachedAssets($key); + if ($cachedAssets !== NULL) { + return array_merge($files, $cachedAssets); // Using cached assets + } + } + + // Using content dependencies + foreach ($dependencies as $dependency) { + if (isset($dependency['path']) === FALSE) { + $dependency['path'] = 'libraries/' . H5PCore::libraryToString($dependency, TRUE); + $dependency['preloadedJs'] = explode(',', $dependency['preloadedJs']); + $dependency['preloadedCss'] = explode(',', $dependency['preloadedCss']); + } + $dependency['version'] = "?ver={$dependency['majorVersion']}.{$dependency['minorVersion']}.{$dependency['patchVersion']}"; + $this->getDependencyAssets($dependency, 'preloadedJs', $files['scripts'], $prefix); + $this->getDependencyAssets($dependency, 'preloadedCss', $files['styles'], $prefix); + } + + if ($this->aggregateAssets) { + // Aggregate and store assets + $this->fs->cacheAssets($files, $key); + + // Keep track of which libraries have been cached in case they are updated + $this->h5pF->saveCachedAssets($key, $dependencies); + } + + return $files; + } + + private static function getDependenciesHash(&$dependencies) { + // Build hash of dependencies + $toHash = array(); + + // Use unique identifier for each library version + foreach ($dependencies as $dep) { + $toHash[] = "{$dep['machineName']}-{$dep['majorVersion']}.{$dep['minorVersion']}.{$dep['patchVersion']}"; + } + + // Sort in case the same dependencies comes in a different order + sort($toHash); + + // Calculate hash sum + return hash('sha1', implode('', $toHash)); + } + + /** + * Load library semantics. + * + * @param $name + * @param $majorVersion + * @param $minorVersion + * @return string + */ + public function loadLibrarySemantics($name, $majorVersion, $minorVersion) { + $semantics = NULL; + if (isset($this->h5pD)) { + // Try to load from dev lib + $semantics = $this->h5pD->getSemantics($name, $majorVersion, $minorVersion); + } + + if ($semantics === NULL) { + // Try to load from DB. + $semantics = $this->h5pF->loadLibrarySemantics($name, $majorVersion, $minorVersion); + } + + if ($semantics !== NULL) { + $semantics = json_decode($semantics); + $this->h5pF->alterLibrarySemantics($semantics, $name, $majorVersion, $minorVersion); + } + + return $semantics; + } + + /** + * Load library. + * + * @param $name + * @param $majorVersion + * @param $minorVersion + * @return array or null. + */ + public function loadLibrary($name, $majorVersion, $minorVersion) { + $library = NULL; + if (isset($this->h5pD)) { + // Try to load from dev + $library = $this->h5pD->getLibrary($name, $majorVersion, $minorVersion); + if ($library !== NULL) { + $library['semantics'] = $this->h5pD->getSemantics($name, $majorVersion, $minorVersion); + } + } + + if ($library === NULL) { + // Try to load from DB. + $library = $this->h5pF->loadLibrary($name, $majorVersion, $minorVersion); + } + + return $library; + } + + /** + * Deletes a library + * + * @param stdClass $libraryId + */ + public function deleteLibrary($libraryId) { + $this->h5pF->deleteLibrary($libraryId); + } + + /** + * Recursive. Goes through the dependency tree for the given library and + * adds all the dependencies to the given array in a flat format. + * + * @param $dependencies + * @param array $library To find all dependencies for. + * @param int $nextWeight An integer determining the order of the libraries + * when they are loaded + * @param bool $editor Used internally to force all preloaded sub dependencies + * of an editor dependency to be editor dependencies. + * @return int + */ + public function findLibraryDependencies(&$dependencies, $library, $nextWeight = 1, $editor = FALSE) { + foreach (array('dynamic', 'preloaded', 'editor') as $type) { + $property = $type . 'Dependencies'; + if (!isset($library[$property])) { + continue; // Skip, no such dependencies. + } + + if ($type === 'preloaded' && $editor === TRUE) { + // All preloaded dependencies of an editor library is set to editor. + $type = 'editor'; + } + + foreach ($library[$property] as $dependency) { + $dependencyKey = $type . '-' . $dependency['machineName']; + if (isset($dependencies[$dependencyKey]) === TRUE) { + continue; // Skip, already have this. + } + + $dependencyLibrary = $this->loadLibrary($dependency['machineName'], $dependency['majorVersion'], $dependency['minorVersion']); + if ($dependencyLibrary) { + $dependencies[$dependencyKey] = array( + 'library' => $dependencyLibrary, + 'type' => $type + ); + $nextWeight = $this->findLibraryDependencies($dependencies, $dependencyLibrary, $nextWeight, $type === 'editor'); + $dependencies[$dependencyKey]['weight'] = $nextWeight++; + } + else { + // This site is missing a dependency! + $this->h5pF->setErrorMessage($this->h5pF->t('Missing dependency @dep required by @lib.', array('@dep' => H5PCore::libraryToString($dependency), '@lib' => H5PCore::libraryToString($library)))); + } + } + } + return $nextWeight; + } + + /** + * Check if a library is of the version we're looking for + * + * Same version means that the majorVersion and minorVersion is the same + * + * @param array $library + * Data from library.json + * @param array $dependency + * Definition of what library we're looking for + * @return boolean + * TRUE if the library is the same version as the dependency + * FALSE otherwise + */ + public function isSameVersion($library, $dependency) { + if ($library['machineName'] != $dependency['machineName']) { + return FALSE; + } + if ($library['majorVersion'] != $dependency['majorVersion']) { + return FALSE; + } + if ($library['minorVersion'] != $dependency['minorVersion']) { + return FALSE; + } + return TRUE; + } + + /** + * Recursive function for removing directories. + * + * @param string $dir + * Path to the directory we'll be deleting + * @return boolean + * Indicates if the directory existed. + */ + public static function deleteFileTree($dir) { + if (!is_dir($dir)) { + return false; + } + $files = array_diff(scandir($dir), array('.','..')); + foreach ($files as $file) { + (is_dir("$dir/$file")) ? self::deleteFileTree("$dir/$file") : unlink("$dir/$file"); + } + return rmdir($dir); + } + + /** + * Writes library data as string on the form {machineName} {majorVersion}.{minorVersion} + * + * @param array $library + * With keys machineName, majorVersion and minorVersion + * @param boolean $folderName + * Use hyphen instead of space in returned string. + * @return string + * On the form {machineName} {majorVersion}.{minorVersion} + */ + public static function libraryToString($library, $folderName = FALSE) { + return (isset($library['machineName']) ? $library['machineName'] : $library['name']) . ($folderName ? '-' : ' ') . $library['majorVersion'] . '.' . $library['minorVersion']; + } + + /** + * Parses library data from a string on the form {machineName} {majorVersion}.{minorVersion} + * + * @param string $libraryString + * On the form {machineName} {majorVersion}.{minorVersion} + * @return array|FALSE + * With keys machineName, majorVersion and minorVersion. + * Returns FALSE only if string is not parsable in the normal library + * string formats "Lib.Name-x.y" or "Lib.Name x.y" + */ + public static function libraryFromString($libraryString) { + $re = '/^([\w0-9\-\.]{1,255})[\-\ ]([0-9]{1,5})\.([0-9]{1,5})$/i'; + $matches = array(); + $res = preg_match($re, $libraryString, $matches); + if ($res) { + return array( + 'machineName' => $matches[1], + 'majorVersion' => $matches[2], + 'minorVersion' => $matches[3] + ); + } + return FALSE; + } + + /** + * Determine the correct embed type to use. + * + * @param $contentEmbedType + * @param $libraryEmbedTypes + * @return string 'div' or 'iframe'. + */ + public static function determineEmbedType($contentEmbedType, $libraryEmbedTypes) { + // Detect content embed type + $embedType = strpos(strtolower($contentEmbedType), 'div') !== FALSE ? 'div' : 'iframe'; + + if ($libraryEmbedTypes !== NULL && $libraryEmbedTypes !== '') { + // Check that embed type is available for library + $embedTypes = strtolower($libraryEmbedTypes); + if (strpos($embedTypes, $embedType) === FALSE) { + // Not available, pick default. + $embedType = strpos($embedTypes, 'div') !== FALSE ? 'div' : 'iframe'; + } + } + + return $embedType; + } + + /** + * Get the absolute version for the library as a human readable string. + * + * @param object $library + * @return string + */ + public static function libraryVersion($library) { + return $library->major_version . '.' . $library->minor_version . '.' . $library->patch_version; + } + + /** + * Determine which versions content with the given library can be upgraded to. + * + * @param object $library + * @param array $versions + * @return array + */ + public function getUpgrades($library, $versions) { + $upgrades = array(); + + foreach ($versions as $upgrade) { + if ($upgrade->major_version > $library->major_version || $upgrade->major_version === $library->major_version && $upgrade->minor_version > $library->minor_version) { + $upgrades[$upgrade->id] = H5PCore::libraryVersion($upgrade); + } + } + + return $upgrades; + } + + /** + * Converts all the properties of the given object or array from + * snake_case to camelCase. Useful after fetching data from the database. + * + * Note that some databases does not support camelCase. + * + * @param mixed $arr input + * @param boolean $obj return object + * @return mixed object or array + */ + public static function snakeToCamel($arr, $obj = false) { + $newArr = array(); + + foreach ($arr as $key => $val) { + $next = -1; + while (($next = strpos($key, '_', $next + 1)) !== FALSE) { + $key = substr_replace($key, strtoupper($key{$next + 1}), $next, 2); + } + + $newArr[$key] = $val; + } + + return $obj ? (object) $newArr : $newArr; + } + + /** + * Detects if the site was accessed from localhost, + * through a local network or from the internet. + */ + public function detectSiteType() { + $type = $this->h5pF->getOption('site_type', 'local'); + + // Determine remote/visitor origin + if ($type === 'network' || + ($type === 'local' && + isset($_SERVER['REMOTE_ADDR']) && + !preg_match('/^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*\:)*?:?0*1$/i', $_SERVER['REMOTE_ADDR']))) { + if (isset($_SERVER['REMOTE_ADDR']) && filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE)) { + // Internet + $this->h5pF->setOption('site_type', 'internet'); + } + elseif ($type === 'local') { + // Local network + $this->h5pF->setOption('site_type', 'network'); + } + } + } + + /** + * Get a list of installed libraries, different minor versions will + * return separate entries. + * + * @return array + * A distinct array of installed libraries + */ + public function getLibrariesInstalled() { + $librariesInstalled = array(); + $libs = $this->h5pF->loadLibraries(); + + foreach($libs as $libName => $library) { + foreach($library as $libVersion) { + $librariesInstalled[$libName.' '.$libVersion->major_version.'.'.$libVersion->minor_version] = $libVersion->patch_version; + } + } + + return $librariesInstalled; + } + + /** + * Easy way to combine similar data sets. + * + * @param array $inputs Multiple arrays with data + * @return array + */ + public function combineArrayValues($inputs) { + $results = array(); + foreach ($inputs as $index => $values) { + foreach ($values as $key => $value) { + $results[$key][$index] = $value; + } + } + return $results; + } + + /** + * Fetch a list of libraries' metadata from h5p.org. + * Save URL tutorial to database. Each platform implementation + * is responsible for invoking this, eg using cron + * @param bool $fetchingDisabled + */ + public function fetchLibrariesMetadata($fetchingDisabled = FALSE) { + // Gather data + $uuid = $this->h5pF->getOption('site_uuid', ''); + $platform = $this->h5pF->getPlatformInfo(); + $data = array( + 'api_version' => 2, + 'uuid' => $uuid, + 'platform_name' => $platform['name'], + 'platform_version' => $platform['version'], + 'h5p_version' => $platform['h5pVersion'], + 'disabled' => $fetchingDisabled ? 1 : 0, + 'local_id' => hash('crc32', $this->fullPluginPath), + 'type' => $this->h5pF->getOption('site_type', 'local'), + 'num_authors' => $this->h5pF->getNumAuthors(), + 'libraries' => json_encode($this->combineArrayValues(array( + 'patch' => $this->getLibrariesInstalled(), + 'content' => $this->h5pF->getLibraryContentCount(), + 'loaded' => $this->h5pF->getLibraryStats('library'), + 'created' => $this->h5pF->getLibraryStats('content create'), + 'createdUpload' => $this->h5pF->getLibraryStats('content create upload'), + 'deleted' => $this->h5pF->getLibraryStats('content delete'), + 'resultViews' => $this->h5pF->getLibraryStats('results content'), + 'shortcodeInserts' => $this->h5pF->getLibraryStats('content shortcode insert') + ))) + ); + + // Send request + $protocol = (extension_loaded('openssl') ? 'https' : 'http'); + $result = $this->h5pF->fetchExternalData("{$protocol}://h5p.org/libraries-metadata.json", $data); + if (empty($result)) { + return; + } + + // Process results + $json = json_decode($result); + if (empty($json)) { + return; + } + + // Handle libraries metadata + if (isset($json->libraries)) { + foreach ($json->libraries as $machineName => $libInfo) { + if (isset($libInfo->tutorialUrl)) { + $this->h5pF->setLibraryTutorialUrl($machineName, $libInfo->tutorialUrl); + } + } + } + + // Handle new uuid + if ($uuid === '' && isset($json->uuid)) { + $this->h5pF->setOption('site_uuid', $json->uuid); + } + + // Handle latest version of H5P + if (!empty($json->latest)) { + $this->h5pF->setOption('update_available', $json->latest->releasedAt); + $this->h5pF->setOption('update_available_path', $json->latest->path); + } + } + + /** + * Create representation of display options as int + * + * @param array $sources + * @param int $current + * @return int + */ + public function getStorableDisplayOptions(&$sources, $current) { + // Download - force setting it if always on or always off + $download = $this->h5pF->getOption(self::DISPLAY_OPTION_DOWNLOAD, H5PDisplayOptionBehaviour::ALWAYS_SHOW); + if ($download == H5PDisplayOptionBehaviour::ALWAYS_SHOW || + $download == H5PDisplayOptionBehaviour::NEVER_SHOW) { + $sources[self::DISPLAY_OPTION_DOWNLOAD] = ($download == H5PDisplayOptionBehaviour::ALWAYS_SHOW); + } + + // Embed - force setting it if always on or always off + $embed = $this->h5pF->getOption(self::DISPLAY_OPTION_EMBED, H5PDisplayOptionBehaviour::ALWAYS_SHOW); + if ($embed == H5PDisplayOptionBehaviour::ALWAYS_SHOW || + $embed == H5PDisplayOptionBehaviour::NEVER_SHOW) { + $sources[self::DISPLAY_OPTION_EMBED] = ($embed == H5PDisplayOptionBehaviour::ALWAYS_SHOW); + } + + foreach (H5PCore::$disable as $bit => $option) { + if (!isset($sources[$option]) || !$sources[$option]) { + $current |= $bit; // Disable + } + else { + $current &= ~$bit; // Enable + } + } + return $current; + } + + /** + * Determine display options visibility and value on edit + * + * @param int $disable + * @return array + */ + public function getDisplayOptionsForEdit($disable = NULL) { + $display_options = array(); + + $current_display_options = $disable === NULL ? array() : $this->getDisplayOptionsAsArray($disable); + + if ($this->h5pF->getOption(self::DISPLAY_OPTION_FRAME, TRUE)) { + $display_options[self::DISPLAY_OPTION_FRAME] = + isset($current_display_options[self::DISPLAY_OPTION_FRAME]) ? + $current_display_options[self::DISPLAY_OPTION_FRAME] : + TRUE; + + // Download + $export = $this->h5pF->getOption(self::DISPLAY_OPTION_DOWNLOAD, H5PDisplayOptionBehaviour::ALWAYS_SHOW); + if ($export == H5PDisplayOptionBehaviour::CONTROLLED_BY_AUTHOR_DEFAULT_ON || + $export == H5PDisplayOptionBehaviour::CONTROLLED_BY_AUTHOR_DEFAULT_OFF) { + $display_options[self::DISPLAY_OPTION_DOWNLOAD] = + isset($current_display_options[self::DISPLAY_OPTION_DOWNLOAD]) ? + $current_display_options[self::DISPLAY_OPTION_DOWNLOAD] : + ($export == H5PDisplayOptionBehaviour::CONTROLLED_BY_AUTHOR_DEFAULT_ON); + } + + // Embed + $embed = $this->h5pF->getOption(self::DISPLAY_OPTION_EMBED, H5PDisplayOptionBehaviour::ALWAYS_SHOW); + if ($embed == H5PDisplayOptionBehaviour::CONTROLLED_BY_AUTHOR_DEFAULT_ON || + $embed == H5PDisplayOptionBehaviour::CONTROLLED_BY_AUTHOR_DEFAULT_OFF) { + $display_options[self::DISPLAY_OPTION_EMBED] = + isset($current_display_options[self::DISPLAY_OPTION_EMBED]) ? + $current_display_options[self::DISPLAY_OPTION_EMBED] : + ($embed == H5PDisplayOptionBehaviour::CONTROLLED_BY_AUTHOR_DEFAULT_ON); + } + + // Copyright + if ($this->h5pF->getOption(self::DISPLAY_OPTION_COPYRIGHT, TRUE)) { + $display_options[self::DISPLAY_OPTION_COPYRIGHT] = + isset($current_display_options[self::DISPLAY_OPTION_COPYRIGHT]) ? + $current_display_options[self::DISPLAY_OPTION_COPYRIGHT] : + TRUE; + } + } + + return $display_options; + } + + /** + * Helper function used to figure out embed & download behaviour + * + * @param string $option_name + * @param H5PPermission $permission + * @param int $id + * @param bool &$value + */ + private function setDisplayOptionOverrides($option_name, $permission, $id, &$value) { + $behaviour = $this->h5pF->getOption($option_name, H5PDisplayOptionBehaviour::ALWAYS_SHOW); + // If never show globally, force hide + if ($behaviour == H5PDisplayOptionBehaviour::NEVER_SHOW) { + $value = false; + } + elseif ($behaviour == H5PDisplayOptionBehaviour::ALWAYS_SHOW) { + // If always show or permissions say so, force show + $value = true; + } + elseif ($behaviour == H5PDisplayOptionBehaviour::CONTROLLED_BY_PERMISSIONS) { + $value = $this->h5pF->hasPermission($permission, $id); + } + } + + /** + * Determine display option visibility when viewing H5P + * + * @param int $display_options + * @param int $id Might be content id or user id. + * Depends on what the platform needs to be able to determine permissions. + * @return array + */ + public function getDisplayOptionsForView($disable, $id) { + $display_options = $this->getDisplayOptionsAsArray($disable); + + if ($this->h5pF->getOption(self::DISPLAY_OPTION_FRAME, TRUE) == FALSE) { + $display_options[self::DISPLAY_OPTION_FRAME] = false; + } + else { + $this->setDisplayOptionOverrides(self::DISPLAY_OPTION_DOWNLOAD, H5PPermission::DOWNLOAD_H5P, $id, $display_options[self::DISPLAY_OPTION_DOWNLOAD]); + $this->setDisplayOptionOverrides(self::DISPLAY_OPTION_EMBED, H5PPermission::EMBED_H5P, $id, $display_options[self::DISPLAY_OPTION_EMBED]); + + if ($this->h5pF->getOption(self::DISPLAY_OPTION_COPYRIGHT, TRUE) == FALSE) { + $display_options[self::DISPLAY_OPTION_COPYRIGHT] = false; + } + } + + return $display_options; + } + + /** + * Convert display options as single byte to array + * + * @param int $disable + * @return array + */ + private function getDisplayOptionsAsArray($disable) { + return array( + self::DISPLAY_OPTION_FRAME => !($disable & H5PCore::DISABLE_FRAME), + self::DISPLAY_OPTION_DOWNLOAD => !($disable & H5PCore::DISABLE_DOWNLOAD), + self::DISPLAY_OPTION_EMBED => !($disable & H5PCore::DISABLE_EMBED), + self::DISPLAY_OPTION_COPYRIGHT => !($disable & H5PCore::DISABLE_COPYRIGHT), + self::DISPLAY_OPTION_ABOUT => !!$this->h5pF->getOption(self::DISPLAY_OPTION_ABOUT, TRUE), + ); + } + + /** + * Small helper for getting the library's ID. + * + * @param array $library + * @param string [$libString] + * @return int Identifier, or FALSE if non-existent + */ + public function getLibraryId($library, $libString = NULL) { + if (!$libString) { + $libString = self::libraryToString($library); + } + + if (!isset($libraryIdMap[$libString])) { + $libraryIdMap[$libString] = $this->h5pF->getLibraryId($library['machineName'], $library['majorVersion'], $library['minorVersion']); + } + + return $libraryIdMap[$libString]; + } + + /** + * Convert strings of text into simple kebab case slugs. + * Very useful for readable urls etc. + * + * @param string $input + * @return string + */ + public static function slugify($input) { + // Down low + $input = strtolower($input); + + // Replace common chars + $input = str_replace( + array('æ', 'ø', 'ö', 'ó', 'ô', 'Ò', 'Õ', 'Ý', 'ý', 'ÿ', 'ā', 'ă', 'ą', 'œ', 'å', 'ä', 'á', 'à', 'â', 'ã', 'ç', 'ć', 'ĉ', 'ċ', 'č', 'é', 'è', 'ê', 'ë', 'í', 'ì', 'î', 'ï', 'ú', 'ñ', 'ü', 'ù', 'û', 'ß', 'ď', 'đ', 'ē', 'ĕ', 'ė', 'ę', 'ě', 'ĝ', 'ğ', 'ġ', 'ģ', 'ĥ', 'ħ', 'ĩ', 'ī', 'ĭ', 'į', 'ı', 'ij', 'ĵ', 'ķ', 'ĺ', 'ļ', 'ľ', 'ŀ', 'ł', 'ń', 'ņ', 'ň', 'ʼn', 'ō', 'ŏ', 'ő', 'ŕ', 'ŗ', 'ř', 'ś', 'ŝ', 'ş', 'š', 'ţ', 'ť', 'ŧ', 'ũ', 'ū', 'ŭ', 'ů', 'ű', 'ų', 'ŵ', 'ŷ', 'ź', 'ż', 'ž', 'ſ', 'ƒ', 'ơ', 'ư', 'ǎ', 'ǐ', 'ǒ', 'ǔ', 'ǖ', 'ǘ', 'ǚ', 'ǜ', 'ǻ', 'ǽ', 'ǿ'), + array('ae', 'oe', 'o', 'o', 'o', 'oe', 'o', 'o', 'y', 'y', 'y', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'c', 'c', 'c', 'c', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'u', 'n', 'u', 'u', 'u', 'es', 'd', 'd', 'e', 'e', 'e', 'e', 'e', 'g', 'g', 'g', 'g', 'h', 'h', 'i', 'i', 'i', 'i', 'i', 'ij', 'j', 'k', 'l', 'l', 'l', 'l', 'l', 'n', 'n', 'n', 'n', 'o', 'o', 'o', 'r', 'r', 'r', 's', 's', 's', 's', 't', 't', 't', 'u', 'u', 'u', 'u', 'u', 'u', 'w', 'y', 'z', 'z', 'z', 's', 'f', 'o', 'u', 'a', 'i', 'o', 'u', 'u', 'u', 'u', 'u', 'a', 'ae', 'oe'), + $input); + + // Replace everything else + $input = preg_replace('/[^a-z0-9]/', '-', $input); + + // Prevent double hyphen + $input = preg_replace('/-{2,}/', '-', $input); + + // Prevent hyphen in beginning or end + $input = trim($input, '-'); + + // Prevent to long slug + if (strlen($input) > 91) { + $input = substr($input, 0, 92); + } + + // Prevent empty slug + if ($input === '') { + $input = 'interactive'; + } + + return $input; + } + + /** + * Makes it easier to print response when AJAX request succeeds. + * + * @param mixed $data + * @since 1.6.0 + */ + public static function ajaxSuccess($data = NULL) { + $response = array( + 'success' => TRUE + ); + if ($data !== NULL) { + $response['data'] = $data; + } + self::printJson($response); + } + + /** + * Makes it easier to print response when AJAX request fails. + * Will exit after printing error. + * + * @param string $message + * @since 1.6.0 + */ + public static function ajaxError($message = NULL) { + $response = array( + 'success' => FALSE + ); + if ($message !== NULL) { + $response['message'] = $message; + } + self::printJson($response); + } + + /** + * Print JSON headers with UTF-8 charset and json encode response data. + * Makes it easier to respond using JSON. + * + * @param mixed $data + */ + private static function printJson($data) { + header('Cache-Control: no-cache'); + header('Content-type: application/json; charset=utf-8'); + print json_encode($data); + } + + /** + * Get a new H5P security token for the given action. + * + * @param string $action + * @return string token + */ + public static function createToken($action) { + if (!isset($_SESSION['h5p_token'])) { + // Create an unique key which is used to create action tokens for this session. + $_SESSION['h5p_token'] = uniqid(); + } + + // Timefactor + $time_factor = self::getTimeFactor(); + + // Create and return token + return substr(hash('md5', $action . $time_factor . $_SESSION['h5p_token']), -16, 13); + } + + /** + * Create a time based number which is unique for each 12 hour. + * @return int + */ + private static function getTimeFactor() { + return ceil(time() / (86400 / 2)); + } + + /** + * Verify if the given token is valid for the given action. + * + * @param string $action + * @param string $token + * @return boolean valid token + */ + public static function validToken($action, $token) { + $time_factor = self::getTimeFactor(); + return $token === substr(hash('md5', $action . $time_factor . $_SESSION['h5p_token']), -16, 13) || // Under 12 hours + $token === substr(hash('md5', $action . ($time_factor - 1) . $_SESSION['h5p_token']), -16, 13); // Between 12-24 hours + } +} + +/** + * Functions for validating basic types from H5P library semantics. + * @property bool allowedStyles + */ +class H5PContentValidator { + public $h5pF; + public $h5pC; + private $typeMap, $libraries, $dependencies, $nextWeight; + private static $allowed_styleable_tags = array('span', 'p', 'div'); + + /** + * Constructor for the H5PContentValidator + * + * @param object $H5PFramework + * The frameworks implementation of the H5PFrameworkInterface + * @param object $H5PCore + * The main H5PCore instance + */ + public function __construct($H5PFramework, $H5PCore) { + $this->h5pF = $H5PFramework; + $this->h5pC = $H5PCore; + $this->typeMap = array( + 'text' => 'validateText', + 'number' => 'validateNumber', + 'boolean' => 'validateBoolean', + 'list' => 'validateList', + 'group' => 'validateGroup', + 'file' => 'validateFile', + 'image' => 'validateImage', + 'video' => 'validateVideo', + 'audio' => 'validateAudio', + 'select' => 'validateSelect', + 'library' => 'validateLibrary', + ); + $this->nextWeight = 1; + + // Keep track of the libraries we load to avoid loading it multiple times. + $this->libraries = array(); + + // Keep track of all dependencies for the given content. + $this->dependencies = array(); + } + + /** + * Get the flat dependency tree. + * + * @return array + */ + public function getDependencies() { + return $this->dependencies; + } + + /** + * Validate given text value against text semantics. + * @param $text + * @param $semantics + */ + public function validateText(&$text, $semantics) { + if (!is_string($text)) { + $text = ''; + } + if (isset($semantics->tags)) { + // Not testing for empty array allows us to use the 4 defaults without + // specifying them in semantics. + $tags = array_merge(array('div', 'span', 'p', 'br'), $semantics->tags); + + // Add related tags for table etc. + if (in_array('table', $tags)) { + $tags = array_merge($tags, array('tr', 'td', 'th', 'colgroup', 'thead', 'tbody', 'tfoot')); + } + if (in_array('b', $tags) && ! in_array('strong', $tags)) { + $tags[] = 'strong'; + } + if (in_array('i', $tags) && ! in_array('em', $tags)) { + $tags[] = 'em'; + } + if (in_array('ul', $tags) || in_array('ol', $tags) && ! in_array('li', $tags)) { + $tags[] = 'li'; + } + if (in_array('del', $tags) || in_array('strike', $tags) && ! in_array('s', $tags)) { + $tags[] = 's'; + } + + // Determine allowed style tags + $stylePatterns = array(); + // All styles must be start to end patterns (^...$) + if (isset($semantics->font)) { + if (isset($semantics->font->size) && $semantics->font->size) { + $stylePatterns[] = '/^font-size: *[0-9.]+(em|px|%) *;?$/i'; + } + if (isset($semantics->font->family) && $semantics->font->family) { + $stylePatterns[] = '/^font-family: *[a-z0-9," ]+;?$/i'; + } + if (isset($semantics->font->color) && $semantics->font->color) { + $stylePatterns[] = '/^color: *(#[a-f0-9]{3}[a-f0-9]{3}?|rgba?\([0-9, ]+\)) *;?$/i'; + } + if (isset($semantics->font->background) && $semantics->font->background) { + $stylePatterns[] = '/^background-color: *(#[a-f0-9]{3}[a-f0-9]{3}?|rgba?\([0-9, ]+\)) *;?$/i'; + } + if (isset($semantics->font->spacing) && $semantics->font->spacing) { + $stylePatterns[] = '/^letter-spacing: *[0-9.]+(em|px|%) *;?$/i'; + } + if (isset($semantics->font->height) && $semantics->font->height) { + $stylePatterns[] = '/^line-height: *[0-9.]+(em|px|%|) *;?$/i'; + } + } + + // Alignment is allowed for all wysiwyg texts + $stylePatterns[] = '/^text-align: *(center|left|right);?$/i'; + + // Strip invalid HTML tags. + $text = $this->filter_xss($text, $tags, $stylePatterns); + } + else { + // Filter text to plain text. + $text = htmlspecialchars($text, ENT_QUOTES, 'UTF-8', FALSE); + } + + // Check if string is within allowed length + if (isset($semantics->maxLength)) { + if (!extension_loaded('mbstring')) { + $this->h5pF->setErrorMessage($this->h5pF->t('The mbstring PHP extension is not loaded. H5P need this to function properly'), 'error'); + } + else { + $text = mb_substr($text, 0, $semantics->maxLength); + } + } + + // Check if string is according to optional regexp in semantics + if (!($text === '' && isset($semantics->optional) && $semantics->optional) && isset($semantics->regexp)) { + // Escaping '/' found in patterns, so that it does not break regexp fencing. + $pattern = '/' . str_replace('/', '\\/', $semantics->regexp->pattern) . '/'; + $pattern .= isset($semantics->regexp->modifiers) ? $semantics->regexp->modifiers : ''; + if (preg_match($pattern, $text) === 0) { + // Note: explicitly ignore return value FALSE, to avoid removing text + // if regexp is invalid... + $this->h5pF->setErrorMessage($this->h5pF->t('Provided string is not valid according to regexp in semantics. (value: "%value", regexp: "%regexp")', array('%value' => $text, '%regexp' => $pattern))); + $text = ''; + } + } + } + + /** + * Validates content files + * + * @param string $contentPath + * The path containing content files to validate. + * @param bool $isLibrary + * @return bool TRUE if all files are valid + * TRUE if all files are valid + * FALSE if one or more files fail validation. Error message should be set accordingly by validator. + */ + public function validateContentFiles($contentPath, $isLibrary = FALSE) { + if ($this->h5pC->disableFileCheck === TRUE) { + return TRUE; + } + + // Scan content directory for files, recurse into sub directories. + $files = array_diff(scandir($contentPath), array('.','..')); + $valid = TRUE; + $whitelist = $this->h5pF->getWhitelist($isLibrary, H5PCore::$defaultContentWhitelist, H5PCore::$defaultLibraryWhitelistExtras); + + $wl_regex = '/\.(' . preg_replace('/ +/i', '|', preg_quote($whitelist)) . ')$/i'; + + foreach ($files as $file) { + $filePath = $contentPath . DIRECTORY_SEPARATOR . $file; + if (is_dir($filePath)) { + $valid = $this->validateContentFiles($filePath, $isLibrary) && $valid; + } + else { + // Snipped from drupal 6 "file_validate_extensions". Using own code + // to avoid 1. creating a file-like object just to test for the known + // file name, 2. testing against a returned error array that could + // never be more than 1 element long anyway, 3. recreating the regex + // for every file. + if (!extension_loaded('mbstring')) { + $this->h5pF->setErrorMessage($this->h5pF->t('The mbstring PHP extension is not loaded. H5P need this to function properly'), 'error'); + $valid = FALSE; + } + else if (!preg_match($wl_regex, mb_strtolower($file))) { + $this->h5pF->setErrorMessage($this->h5pF->t('File "%filename" not allowed. Only files with the following extensions are allowed: %files-allowed.', array('%filename' => $file, '%files-allowed' => $whitelist)), 'error'); + $valid = FALSE; + } + } + } + return $valid; + } + + /** + * Validate given value against number semantics + * @param $number + * @param $semantics + */ + public function validateNumber(&$number, $semantics) { + // Validate that $number is indeed a number + if (!is_numeric($number)) { + $number = 0; + } + // Check if number is within valid bounds. Move within bounds if not. + if (isset($semantics->min) && $number < $semantics->min) { + $number = $semantics->min; + } + if (isset($semantics->max) && $number > $semantics->max) { + $number = $semantics->max; + } + // Check if number is within allowed bounds even if step value is set. + if (isset($semantics->step)) { + $testNumber = $number - (isset($semantics->min) ? $semantics->min : 0); + $rest = $testNumber % $semantics->step; + if ($rest !== 0) { + $number -= $rest; + } + } + // Check if number has proper number of decimals. + if (isset($semantics->decimals)) { + $number = round($number, $semantics->decimals); + } + } + + /** + * Validate given value against boolean semantics + * @param $bool + * @return bool + */ + public function validateBoolean(&$bool) { + return is_bool($bool); + } + + /** + * Validate select values + * @param $select + * @param $semantics + */ + public function validateSelect(&$select, $semantics) { + $optional = isset($semantics->optional) && $semantics->optional; + $strict = FALSE; + if (isset($semantics->options) && !empty($semantics->options)) { + // We have a strict set of options to choose from. + $strict = TRUE; + $options = array(); + foreach ($semantics->options as $option) { + $options[$option->value] = TRUE; + } + } + + if (isset($semantics->multiple) && $semantics->multiple) { + // Multi-choice generates array of values. Test each one against valid + // options, if we are strict. First make sure we are working on an + // array. + if (!is_array($select)) { + $select = array($select); + } + + foreach ($select as $key => &$value) { + if ($strict && !$optional && !isset($options[$value])) { + $this->h5pF->setErrorMessage($this->h5pF->t('Invalid selected option in multi-select.')); + unset($select[$key]); + } + else { + $select[$key] = htmlspecialchars($value, ENT_QUOTES, 'UTF-8', FALSE); + } + } + } + else { + // Single mode. If we get an array in here, we chop off the first + // element and use that instead. + if (is_array($select)) { + $select = $select[0]; + } + + if ($strict && !$optional && !isset($options[$select])) { + $this->h5pF->setErrorMessage($this->h5pF->t('Invalid selected option in select.')); + $select = $semantics->options[0]->value; + } + $select = htmlspecialchars($select, ENT_QUOTES, 'UTF-8', FALSE); + } + } + + /** + * Validate given list value against list semantics. + * Will recurse into validating each item in the list according to the type. + * @param $list + * @param $semantics + */ + public function validateList(&$list, $semantics) { + $field = $semantics->field; + $function = $this->typeMap[$field->type]; + + // Check that list is not longer than allowed length. We do this before + // iterating to avoid unnecessary work. + if (isset($semantics->max)) { + array_splice($list, $semantics->max); + } + + if (!is_array($list)) { + $list = array(); + } + + // Validate each element in list. + foreach ($list as $key => &$value) { + if (!is_int($key)) { + array_splice($list, $key, 1); + continue; + } + $this->$function($value, $field); + if ($value === NULL) { + array_splice($list, $key, 1); + } + } + + if (count($list) === 0) { + $list = NULL; + } + } + + /** + * Validate a file like object, such as video, image, audio and file. + * @param $file + * @param $semantics + * @param array $typeValidKeys + */ + private function _validateFilelike(&$file, $semantics, $typeValidKeys = array()) { + // Do not allow to use files from other content folders. + $matches = array(); + if (preg_match($this->h5pC->relativePathRegExp, $file->path, $matches)) { + $file->path = $matches[5]; + } + + // Make sure path and mime does not have any special chars + $file->path = htmlspecialchars($file->path, ENT_QUOTES, 'UTF-8', FALSE); + if (isset($file->mime)) { + $file->mime = htmlspecialchars($file->mime, ENT_QUOTES, 'UTF-8', FALSE); + } + + // Remove attributes that should not exist, they may contain JSON escape + // code. + $validKeys = array_merge(array('path', 'mime', 'copyright'), $typeValidKeys); + if (isset($semantics->extraAttributes)) { + $validKeys = array_merge($validKeys, $semantics->extraAttributes); // TODO: Validate extraAttributes + } + $this->filterParams($file, $validKeys); + + if (isset($file->width)) { + $file->width = intval($file->width); + } + + if (isset($file->height)) { + $file->height = intval($file->height); + } + + if (isset($file->codecs)) { + $file->codecs = htmlspecialchars($file->codecs, ENT_QUOTES, 'UTF-8', FALSE); + } + + if (isset($file->quality)) { + if (!is_object($file->quality) || !isset($file->quality->level) || !isset($file->quality->label)) { + unset($file->quality); + } + else { + $this->filterParams($file->quality, array('level', 'label')); + $file->quality->level = intval($file->quality->level); + $file->quality->label = htmlspecialchars($file->quality->label, ENT_QUOTES, 'UTF-8', FALSE); + } + } + + if (isset($file->copyright)) { + $this->validateGroup($file->copyright, $this->getCopyrightSemantics()); + } + } + + /** + * Validate given file data + * @param $file + * @param $semantics + */ + public function validateFile(&$file, $semantics) { + $this->_validateFilelike($file, $semantics); + } + + /** + * Validate given image data + * @param $image + * @param $semantics + */ + public function validateImage(&$image, $semantics) { + $this->_validateFilelike($image, $semantics, array('width', 'height', 'originalImage')); + } + + /** + * Validate given video data + * @param $video + * @param $semantics + */ + public function validateVideo(&$video, $semantics) { + foreach ($video as &$variant) { + $this->_validateFilelike($variant, $semantics, array('width', 'height', 'codecs', 'quality')); + } + } + + /** + * Validate given audio data + * @param $audio + * @param $semantics + */ + public function validateAudio(&$audio, $semantics) { + foreach ($audio as &$variant) { + $this->_validateFilelike($variant, $semantics); + } + } + + /** + * Validate given group value against group semantics. + * Will recurse into validating each group member. + * @param $group + * @param $semantics + * @param bool $flatten + */ + public function validateGroup(&$group, $semantics, $flatten = TRUE) { + // Groups with just one field are compressed in the editor to only output + // the child content. (Exemption for fake groups created by + // "validateBySemantics" above) + $function = null; + $field = null; + + $isSubContent = isset($semantics->isSubContent) && $semantics->isSubContent === TRUE; + + if (count($semantics->fields) == 1 && $flatten && !$isSubContent) { + $field = $semantics->fields[0]; + $function = $this->typeMap[$field->type]; + $this->$function($group, $field); + } + else { + foreach ($group as $key => &$value) { + // If subContentId is set, keep value + if($isSubContent && ($key == 'subContentId')){ + continue; + } + + // Find semantics for name=$key + $found = FALSE; + foreach ($semantics->fields as $field) { + if ($field->name == $key) { + if (isset($semantics->optional) && $semantics->optional) { + $field->optional = TRUE; + } + $function = $this->typeMap[$field->type]; + $found = TRUE; + break; + } + } + if ($found) { + if ($function) { + $this->$function($value, $field); + if ($value === NULL) { + unset($group->$key); + } + } + else { + // We have a field type in semantics for which we don't have a + // known validator. + $this->h5pF->setErrorMessage($this->h5pF->t('H5P internal error: unknown content type "@type" in semantics. Removing content!', array('@type' => $field->type))); + unset($group->$key); + } + } + else { + // If validator is not found, something exists in content that does + // not have a corresponding semantics field. Remove it. + // $this->h5pF->setErrorMessage($this->h5pF->t('H5P internal error: no validator exists for @key', array('@key' => $key))); + unset($group->$key); + } + } + } + if (!(isset($semantics->optional) && $semantics->optional)) { + if ($group === NULL) { + // Error no value. Errors aren't printed... + return; + } + foreach ($semantics->fields as $field) { + if (!(isset($field->optional) && $field->optional)) { + // Check if field is in group. + if (! property_exists($group, $field->name)) { + //$this->h5pF->setErrorMessage($this->h5pF->t('No value given for mandatory field ' . $field->name)); + } + } + } + } + } + + /** + * Validate given library value against library semantics. + * Check if provided library is within allowed options. + * + * Will recurse into validating the library's semantics too. + * @param $value + * @param $semantics + */ + public function validateLibrary(&$value, $semantics) { + if (!isset($value->library)) { + $value = NULL; + return; + } + if (!in_array($value->library, $semantics->options)) { + $message = NULL; + // Create an understandable error message: + $machineNameArray = explode(' ', $value->library); + $machineName = $machineNameArray[0]; + foreach ($semantics->options as $semanticsLibrary) { + $semanticsMachineNameArray = explode(' ', $semanticsLibrary); + $semanticsMachineName = $semanticsMachineNameArray[0]; + if ($machineName === $semanticsMachineName) { + // Using the wrong version of the library in the content + $message = $this->h5pF->t('The version of the H5P library %machineName used in this content is not valid. Content contains %contentLibrary, but it should be %semanticsLibrary.', array( + '%machineName' => $machineName, + '%contentLibrary' => $value->library, + '%semanticsLibrary' => $semanticsLibrary + )); + break; + } + } + // Using a library in content that is not present at all in semantics + if ($message === NULL) { + $message = $this->h5pF->t('The H5P library %library used in the content is not valid', array( + '%library' => $value->library + )); + } + + $this->h5pF->setErrorMessage($message); + $value = NULL; + return; + } + + if (!isset($this->libraries[$value->library])) { + $libSpec = H5PCore::libraryFromString($value->library); + $library = $this->h5pC->loadLibrary($libSpec['machineName'], $libSpec['majorVersion'], $libSpec['minorVersion']); + $library['semantics'] = $this->h5pC->loadLibrarySemantics($libSpec['machineName'], $libSpec['majorVersion'], $libSpec['minorVersion']); + $this->libraries[$value->library] = $library; + } + else { + $library = $this->libraries[$value->library]; + } + + $this->validateGroup($value->params, (object) array( + 'type' => 'group', + 'fields' => $library['semantics'], + ), FALSE); + $validKeys = array('library', 'params', 'subContentId'); + if (isset($semantics->extraAttributes)) { + $validKeys = array_merge($validKeys, $semantics->extraAttributes); + } + $this->filterParams($value, $validKeys); + if (isset($value->subContentId) && ! preg_match('/^\{?[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\}?$/', $value->subContentId)) { + unset($value->subContentId); + } + + // Find all dependencies for this library + $depKey = 'preloaded-' . $library['machineName']; + if (!isset($this->dependencies[$depKey])) { + $this->dependencies[$depKey] = array( + 'library' => $library, + 'type' => 'preloaded' + ); + + $this->nextWeight = $this->h5pC->findLibraryDependencies($this->dependencies, $library, $this->nextWeight); + $this->dependencies[$depKey]['weight'] = $this->nextWeight++; + } + } + + /** + * Check params for a whitelist of allowed properties + * + * @param array/object $params + * @param array $whitelist + */ + public function filterParams(&$params, $whitelist) { + foreach ($params as $key => $value) { + if (!in_array($key, $whitelist)) { + unset($params->{$key}); + } + } + } + + // XSS filters copied from drupal 7 common.inc. Some modifications done to + // replace Drupal one-liner functions with corresponding flat PHP. + + /** + * Filters HTML to prevent cross-site-scripting (XSS) vulnerabilities. + * + * Based on kses by Ulf Harnhammar, see http://sourceforge.net/projects/kses. + * For examples of various XSS attacks, see: http://ha.ckers.org/xss.html. + * + * This code does four things: + * - Removes characters and constructs that can trick browsers. + * - Makes sure all HTML entities are well-formed. + * - Makes sure all HTML tags and attributes are well-formed. + * - Makes sure no HTML tags contain URLs with a disallowed protocol (e.g. + * javascript:). + * + * @param $string + * The string with raw HTML in it. It will be stripped of everything that can + * cause an XSS attack. + * @param array $allowed_tags + * An array of allowed tags. + * + * @param bool $allowedStyles + * @return mixed|string An XSS safe version of $string, or an empty string if $string is not + * An XSS safe version of $string, or an empty string if $string is not + * valid UTF-8. + * @ingroup sanitation + */ + private function filter_xss($string, $allowed_tags = array('a', 'em', 'strong', 'cite', 'blockquote', 'code', 'ul', 'ol', 'li', 'dl', 'dt', 'dd'), $allowedStyles = FALSE) { + if (strlen($string) == 0) { + return $string; + } + // Only operate on valid UTF-8 strings. This is necessary to prevent cross + // site scripting issues on Internet Explorer 6. (Line copied from + // drupal_validate_utf8) + if (preg_match('/^./us', $string) != 1) { + return ''; + } + + $this->allowedStyles = $allowedStyles; + + // Store the text format. + $this->_filter_xss_split($allowed_tags, TRUE); + // Remove NULL characters (ignored by some browsers). + $string = str_replace(chr(0), '', $string); + // Remove Netscape 4 JS entities. + $string = preg_replace('%&\s*\{[^}]*(\}\s*;?|$)%', '', $string); + + // Defuse all HTML entities. + $string = str_replace('&', '&amp;', $string); + // Change back only well-formed entities in our whitelist: + // Decimal numeric entities. + $string = preg_replace('/&amp;#([0-9]+;)/', '&#\1', $string); + // Hexadecimal numeric entities. + $string = preg_replace('/&amp;#[Xx]0*((?:[0-9A-Fa-f]{2})+;)/', '&#x\1', $string); + // Named entities. + $string = preg_replace('/&amp;([A-Za-z][A-Za-z0-9]*;)/', '&\1', $string); + return preg_replace_callback('% + ( + <(?=[^a-zA-Z!/]) # a lone < + | # or + <!--.*?--> # a comment + | # or + <[^>]*(>|$) # a string that starts with a <, up until the > or the end of the string + | # or + > # just a > + )%x', array($this, '_filter_xss_split'), $string); + } + + /** + * Processes an HTML tag. + * + * @param $m + * An array with various meaning depending on the value of $store. + * If $store is TRUE then the array contains the allowed tags. + * If $store is FALSE then the array has one element, the HTML tag to process. + * @param bool $store + * Whether to store $m. + * @return string If the element isn't allowed, an empty string. Otherwise, the cleaned up + * If the element isn't allowed, an empty string. Otherwise, the cleaned up + * version of the HTML element. + */ + private function _filter_xss_split($m, $store = FALSE) { + static $allowed_html; + + if ($store) { + $allowed_html = array_flip($m); + return $allowed_html; + } + + $string = $m[1]; + + if (substr($string, 0, 1) != '<') { + // We matched a lone ">" character. + return '&gt;'; + } + elseif (strlen($string) == 1) { + // We matched a lone "<" character. + return '&lt;'; + } + + if (!preg_match('%^<\s*(/\s*)?([a-zA-Z0-9\-]+)([^>]*)>?|(<!--.*?-->)$%', $string, $matches)) { + // Seriously malformed. + return ''; + } + + $slash = trim($matches[1]); + $elem = &$matches[2]; + $attrList = &$matches[3]; + $comment = &$matches[4]; + + if ($comment) { + $elem = '!--'; + } + + if (!isset($allowed_html[strtolower($elem)])) { + // Disallowed HTML element. + return ''; + } + + if ($comment) { + return $comment; + } + + if ($slash != '') { + return "</$elem>"; + } + + // Is there a closing XHTML slash at the end of the attributes? + $attrList = preg_replace('%(\s?)/\s*$%', '\1', $attrList, -1, $count); + $xhtml_slash = $count ? ' /' : ''; + + // Clean up attributes. + + $attr2 = implode(' ', $this->_filter_xss_attributes($attrList, (in_array($elem, self::$allowed_styleable_tags) ? $this->allowedStyles : FALSE))); + $attr2 = preg_replace('/[<>]/', '', $attr2); + $attr2 = strlen($attr2) ? ' ' . $attr2 : ''; + + return "<$elem$attr2$xhtml_slash>"; + } + + /** + * Processes a string of HTML attributes. + * + * @param $attr + * @param array|bool|object $allowedStyles + * @return array Cleaned up version of the HTML attributes. + * Cleaned up version of the HTML attributes. + */ + private function _filter_xss_attributes($attr, $allowedStyles = FALSE) { + $attrArr = array(); + $mode = 0; + $attrName = ''; + $skip = false; + + while (strlen($attr) != 0) { + // Was the last operation successful? + $working = 0; + switch ($mode) { + case 0: + // Attribute name, href for instance. + if (preg_match('/^([-a-zA-Z]+)/', $attr, $match)) { + $attrName = strtolower($match[1]); + $skip = ($attrName == 'style' || substr($attrName, 0, 2) == 'on'); + $working = $mode = 1; + $attr = preg_replace('/^[-a-zA-Z]+/', '', $attr); + } + break; + + case 1: + // Equals sign or valueless ("selected"). + if (preg_match('/^\s*=\s*/', $attr)) { + $working = 1; $mode = 2; + $attr = preg_replace('/^\s*=\s*/', '', $attr); + break; + } + + if (preg_match('/^\s+/', $attr)) { + $working = 1; $mode = 0; + if (!$skip) { + $attrArr[] = $attrName; + } + $attr = preg_replace('/^\s+/', '', $attr); + } + break; + + case 2: + // Attribute value, a URL after href= for instance. + if (preg_match('/^"([^"]*)"(\s+|$)/', $attr, $match)) { + if ($allowedStyles && $attrName === 'style') { + // Allow certain styles + foreach ($allowedStyles as $pattern) { + if (preg_match($pattern, $match[1])) { + // All patterns are start to end patterns, and CKEditor adds one span per style + $attrArr[] = 'style="' . $match[1] . '"'; + break; + } + } + break; + } + + $thisVal = $this->filter_xss_bad_protocol($match[1]); + + if (!$skip) { + $attrArr[] = "$attrName=\"$thisVal\""; + } + $working = 1; + $mode = 0; + $attr = preg_replace('/^"[^"]*"(\s+|$)/', '', $attr); + break; + } + + if (preg_match("/^'([^']*)'(\s+|$)/", $attr, $match)) { + $thisVal = $this->filter_xss_bad_protocol($match[1]); + + if (!$skip) { + $attrArr[] = "$attrName='$thisVal'"; + } + $working = 1; $mode = 0; + $attr = preg_replace("/^'[^']*'(\s+|$)/", '', $attr); + break; + } + + if (preg_match("%^([^\s\"']+)(\s+|$)%", $attr, $match)) { + $thisVal = $this->filter_xss_bad_protocol($match[1]); + + if (!$skip) { + $attrArr[] = "$attrName=\"$thisVal\""; + } + $working = 1; $mode = 0; + $attr = preg_replace("%^[^\s\"']+(\s+|$)%", '', $attr); + } + break; + } + + if ($working == 0) { + // Not well formed; remove and try again. + $attr = preg_replace('/ + ^ + ( + "[^"]*("|$) # - a string that starts with a double quote, up until the next double quote or the end of the string + | # or + \'[^\']*(\'|$)| # - a string that starts with a quote, up until the next quote or the end of the string + | # or + \S # - a non-whitespace character + )* # any number of the above three + \s* # any number of whitespaces + /x', '', $attr); + $mode = 0; + } + } + + // The attribute list ends with a valueless attribute like "selected". + if ($mode == 1 && !$skip) { + $attrArr[] = $attrName; + } + return $attrArr; + } + +// TODO: Remove Drupal related stuff in docs. + + /** + * Processes an HTML attribute value and strips dangerous protocols from URLs. + * + * @param $string + * The string with the attribute value. + * @param bool $decode + * (deprecated) Whether to decode entities in the $string. Set to FALSE if the + * $string is in plain text, TRUE otherwise. Defaults to TRUE. This parameter + * is deprecated and will be removed in Drupal 8. To process a plain-text URI, + * call _strip_dangerous_protocols() or check_url() instead. + * @return string Cleaned up and HTML-escaped version of $string. + * Cleaned up and HTML-escaped version of $string. + */ + private function filter_xss_bad_protocol($string, $decode = TRUE) { + // Get the plain text representation of the attribute value (i.e. its meaning). + // @todo Remove the $decode parameter in Drupal 8, and always assume an HTML + // string that needs decoding. + if ($decode) { + $string = html_entity_decode($string, ENT_QUOTES, 'UTF-8'); + } + return htmlspecialchars($this->_strip_dangerous_protocols($string), ENT_QUOTES, 'UTF-8', FALSE); + } + + /** + * Strips dangerous protocols (e.g. 'javascript:') from a URI. + * + * This function must be called for all URIs within user-entered input prior + * to being output to an HTML attribute value. It is often called as part of + * check_url() or filter_xss(), but those functions return an HTML-encoded + * string, so this function can be called independently when the output needs to + * be a plain-text string for passing to t(), l(), drupal_attributes(), or + * another function that will call check_plain() separately. + * + * @param $uri + * A plain-text URI that might contain dangerous protocols. + * @return string A plain-text URI stripped of dangerous protocols. As with all plain-text + * A plain-text URI stripped of dangerous protocols. As with all plain-text + * strings, this return value must not be output to an HTML page without + * check_plain() being called on it. However, it can be passed to functions + * expecting plain-text strings. + * @see check_url() + */ + private function _strip_dangerous_protocols($uri) { + static $allowed_protocols; + + if (!isset($allowed_protocols)) { + $allowed_protocols = array_flip(array('ftp', 'http', 'https', 'mailto')); + } + + // Iteratively remove any invalid protocol found. + do { + $before = $uri; + $colonPos = strpos($uri, ':'); + if ($colonPos > 0) { + // We found a colon, possibly a protocol. Verify. + $protocol = substr($uri, 0, $colonPos); + // If a colon is preceded by a slash, question mark or hash, it cannot + // possibly be part of the URL scheme. This must be a relative URL, which + // inherits the (safe) protocol of the base document. + if (preg_match('![/?#]!', $protocol)) { + break; + } + // Check if this is a disallowed protocol. Per RFC2616, section 3.2.3 + // (URI Comparison) scheme comparison must be case-insensitive. + if (!isset($allowed_protocols[strtolower($protocol)])) { + $uri = substr($uri, $colonPos + 1); + } + } + } while ($before != $uri); + + return $uri; + } + + public function getCopyrightSemantics() { + static $semantics; + + if ($semantics === NULL) { + $semantics = (object) array( + 'name' => 'copyright', + 'type' => 'group', + 'label' => $this->h5pF->t('Copyright information'), + 'fields' => array( + (object) array( + 'name' => 'title', + 'type' => 'text', + 'label' => $this->h5pF->t('Title'), + 'placeholder' => 'La Gioconda', + 'optional' => TRUE + ), + (object) array( + 'name' => 'author', + 'type' => 'text', + 'label' => $this->h5pF->t('Author'), + 'placeholder' => 'Leonardo da Vinci', + 'optional' => TRUE + ), + (object) array( + 'name' => 'year', + 'type' => 'text', + 'label' => $this->h5pF->t('Year(s)'), + 'placeholder' => '1503 - 1517', + 'optional' => TRUE + ), + (object) array( + 'name' => 'source', + 'type' => 'text', + 'label' => $this->h5pF->t('Source'), + 'placeholder' => 'http://en.wikipedia.org/wiki/Mona_Lisa', + 'optional' => true, + 'regexp' => (object) array( + 'pattern' => '^http[s]?://.+', + 'modifiers' => 'i' + ) + ), + (object) array( + 'name' => 'license', + 'type' => 'select', + 'label' => $this->h5pF->t('License'), + 'default' => 'U', + 'options' => array( + (object) array( + 'value' => 'U', + 'label' => $this->h5pF->t('Undisclosed') + ), + (object) array( + 'value' => 'CC BY', + 'label' => $this->h5pF->t('Attribution 4.0') + ), + (object) array( + 'value' => 'CC BY-SA', + 'label' => $this->h5pF->t('Attribution-ShareAlike 4.0') + ), + (object) array( + 'value' => 'CC BY-ND', + 'label' => $this->h5pF->t('Attribution-NoDerivs 4.0') + ), + (object) array( + 'value' => 'CC BY-NC', + 'label' => $this->h5pF->t('Attribution-NonCommercial 4.0') + ), + (object) array( + 'value' => 'CC BY-NC-SA', + 'label' => $this->h5pF->t('Attribution-NonCommercial-ShareAlike 4.0') + ), + (object) array( + 'value' => 'CC BY-NC-ND', + 'label' => $this->h5pF->t('Attribution-NonCommercial-NoDerivs 4.0') + ), + (object) array( + 'value' => 'GNU GPL', + 'label' => $this->h5pF->t('General Public License v3') + ), + (object) array( + 'value' => 'PD', + 'label' => $this->h5pF->t('Public Domain') + ), + (object) array( + 'value' => 'ODC PDDL', + 'label' => $this->h5pF->t('Public Domain Dedication and Licence') + ), + (object) array( + 'value' => 'CC PDM', + 'label' => $this->h5pF->t('Public Domain Mark') + ), + (object) array( + 'value' => 'C', + 'label' => $this->h5pF->t('Copyright') + ) + ) + ) + ) + ); + } + + return $semantics; + } +} diff --git a/html/moodle2/mod/hvp/library/images/h5p.svg b/html/moodle2/mod/hvp/library/images/h5p.svg new file mode 100755 index 0000000000..9e628b5ece --- /dev/null +++ b/html/moodle2/mod/hvp/library/images/h5p.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 345 150" enable-background="new 0 0 345 150" xml:space="preserve"> +<g> + <path fill="#FFFFFF" d="M325.7,14.7C317.6,6.9,305.3,3,289,3h-43.5H234v31h-66l-5.4,22.2c4.5-2.1,10.9-4.2,15.3-5.3 + c4.4-1.1,8.8-0.9,13.1-0.9c14.6,0,26.5,4.5,35.6,13.3c9.1,8.8,13.6,20,13.6,33.4c0,9.4-2.3,18.5-7,27.2c-4.7,8.7-11.3,15.4-19.9,20 + c-3.1,1.6-6.5,3.1-10.2,4.1h42.4H259V95h25c18.2,0,31.7-4.2,40.6-12.5c8.9-8.3,13.3-19.9,13.3-34.6 + C337.9,33.6,333.8,22.5,325.7,14.7z M288.7,60.6c-3.5,3-9.6,4.4-18.3,4.4H259V33h13.2c8.4,0,14.2,1.5,17.2,4.7 + c3.1,3.2,4.6,6.9,4.6,11.5C294,53.9,292.2,57.6,288.7,60.6z"/> + <path fill="#FFFFFF" d="M176.5,76.3c-7.9,0-14.7,4.6-18,11.2L119,81.9L136.8,3h-23.6H101v62H51V3H7v145h44V95h50v53h12.2h42 + c-6.7-2-12.5-4.6-17.2-8.1c-4.8-3.6-8.7-7.7-11.7-12.3c-3-4.6-5.3-9.7-7.3-16.5l39.6-5.7c3.3,6.6,10.1,11.1,17.9,11.1 + c11.1,0,20.1-9,20.1-20.1S187.5,76.3,176.5,76.3z"/> +</g> +</svg> diff --git a/html/moodle2/mod/hvp/library/images/h5p_logo.png b/html/moodle2/mod/hvp/library/images/h5p_logo.png new file mode 100755 index 0000000000..4fb7864162 Binary files /dev/null and b/html/moodle2/mod/hvp/library/images/h5p_logo.png differ diff --git a/html/moodle2/mod/hvp/library/images/h5p_logo.svg b/html/moodle2/mod/hvp/library/images/h5p_logo.svg new file mode 100755 index 0000000000..7fc90bb661 --- /dev/null +++ b/html/moodle2/mod/hvp/library/images/h5p_logo.svg @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="36px" height="36px" viewBox="0 0 36 36" enable-background="new 0 0 36 36" xml:space="preserve"> +<g> + <path fill="#FFFFFF" d="M0.126,13.306h3.07l0.365,3.476h3.354L6.55,13.306h3.083l1.044,9.934H7.594l-0.422-4.018H3.818L4.24,23.24 + H1.17L0.126,13.306z"/> + <path fill="#FFFFFF" d="M27.738,13.306h5.103c1.111,0,1.916,0.264,2.414,0.793c0.498,0.529,0.696,1.281,0.593,2.257 + c-0.105,1.003-0.489,1.787-1.152,2.351c-0.662,0.565-1.613,0.847-2.85,0.847h-1.681l-0.387,3.686h-3.083L27.738,13.306z + M30.376,17.541h0.752c0.592,0,1.018-0.103,1.279-0.308c0.261-0.205,0.408-0.469,0.442-0.789c0.033-0.312-0.043-0.576-0.228-0.793 + c-0.185-0.217-0.564-0.325-1.138-0.325h-0.874L30.376,17.541z"/> + <g> + <polygon fill="#E24E26" points="12.431,25.515 11.035,9.851 26.38,9.851 24.982,25.512 18.698,27.254 "/> + <polygon fill="#F06529" points="18.707,25.923 23.785,24.515 24.98,11.132 18.707,11.132 "/> + <polygon fill="#EAEAEA" points="18.707,16.941 16.165,16.941 15.99,14.974 18.707,14.974 18.707,13.053 18.701,13.053 + 13.89,13.053 13.936,13.568 14.408,18.862 18.707,18.862 "/> + <polygon fill="#EAEAEA" points="18.707,21.93 18.699,21.933 16.56,21.355 16.423,19.823 15.383,19.823 14.494,19.823 + 14.763,22.839 18.699,23.932 18.707,23.929 "/> + <polygon fill="#FFFFFF" points="18.701,16.941 18.701,18.862 21.066,18.862 20.843,21.354 18.701,21.932 18.701,23.931 + 22.639,22.839 22.668,22.514 23.119,17.457 23.166,16.941 22.649,16.941 "/> + <polygon fill="#FFFFFF" points="18.701,13.053 18.701,14.246 18.701,14.969 18.701,14.974 23.335,14.974 23.335,14.974 + 23.341,14.974 23.38,14.542 23.467,13.568 23.513,13.053 "/> + </g> +</g> +</svg> diff --git a/html/moodle2/mod/hvp/library/images/throbber.gif b/html/moodle2/mod/hvp/library/images/throbber.gif new file mode 100755 index 0000000000..1560b646cf Binary files /dev/null and b/html/moodle2/mod/hvp/library/images/throbber.gif differ diff --git a/html/moodle2/mod/hvp/library/js/h5p-action-bar.js b/html/moodle2/mod/hvp/library/js/h5p-action-bar.js new file mode 100755 index 0000000000..730cc77ea6 --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-action-bar.js @@ -0,0 +1,100 @@ +/** + * @class + * @augments H5P.EventDispatcher + * @param {Object} displayOptions + * @param {boolean} displayOptions.export Triggers the display of the 'Download' button + * @param {boolean} displayOptions.copyright Triggers the display of the 'Copyright' button + * @param {boolean} displayOptions.embed Triggers the display of the 'Embed' button + * @param {boolean} displayOptions.icon Triggers the display of the 'H5P icon' link + */ +H5P.ActionBar = (function ($, EventDispatcher) { + "use strict"; + + function ActionBar(displayOptions) { + EventDispatcher.call(this); + + /** @alias H5P.ActionBar# */ + var self = this; + + var hasActions = false; + + // Create action bar + var $actions = H5P.jQuery('<ul class="h5p-actions"></ul>'); + + /** + * Helper for creating action bar buttons. + * + * @private + * @param {string} type + * @param {string} customClass Instead of type class + */ + var addActionButton = function (type, customClass) { + /** + * Handles selection of action + */ + var handler = function () { + self.trigger(type); + }; + H5P.jQuery('<li/>', { + 'class': 'h5p-button h5p-' + (customClass ? customClass : type), + role: 'button', + tabindex: 0, + title: H5P.t(type + 'Description'), + html: H5P.t(type), + on: { + click: handler, + keypress: function (e) { + if (e.which === 32) { + handler(); + e.preventDefault(); // (since return false will block other inputs) + } + } + }, + appendTo: $actions + }); + + hasActions = true; + }; + + // Register action bar buttons + if (displayOptions.export) { + // Add export button + addActionButton('download', 'export'); + } + if (displayOptions.copyright) { + addActionButton('copyrights'); + } + if (displayOptions.embed) { + addActionButton('embed'); + } + if (displayOptions.icon) { + // Add about H5P button icon + H5P.jQuery('<li><a class="h5p-link" href="http://h5p.org" target="_blank" title="' + H5P.t('h5pDescription') + '"></a></li>').appendTo($actions); + hasActions = true; + } + + /** + * Returns a reference to the dom element + * + * @return {H5P.jQuery} + */ + self.getDOMElement = function () { + return $actions; + }; + + /** + * Does the actionbar contain actions? + * + * @return {Boolean} + */ + self.hasActions = function () { + return hasActions; + }; + } + + ActionBar.prototype = Object.create(EventDispatcher.prototype); + ActionBar.prototype.constructor = ActionBar; + + return ActionBar; + +})(H5P.jQuery, H5P.EventDispatcher); diff --git a/html/moodle2/mod/hvp/library/js/h5p-confirmation-dialog.js b/html/moodle2/mod/hvp/library/js/h5p-confirmation-dialog.js new file mode 100755 index 0000000000..d9f4fe82c5 --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-confirmation-dialog.js @@ -0,0 +1,356 @@ +/*global H5P*/ +H5P.ConfirmationDialog = (function (EventDispatcher) { + "use strict"; + + /** + * Create a confirmation dialog + * + * @param [options] Options for confirmation dialog + * @param [options.instance] Instance that uses confirmation dialog + * @param [options.headerText] Header text + * @param [options.dialogText] Dialog text + * @param [options.cancelText] Cancel dialog button text + * @param [options.confirmText] Confirm dialog button text + * @constructor + */ + function ConfirmationDialog(options) { + EventDispatcher.call(this); + var self = this; + + // Make sure confirmation dialogs have unique id + H5P.ConfirmationDialog.uniqueId += 1; + var uniqueId = H5P.ConfirmationDialog.uniqueId; + + // Default options + options = options || {}; + options.headerText = options.headerText || H5P.t('confirmDialogHeader'); + options.dialogText = options.dialogText || H5P.t('confirmDialogBody'); + options.cancelText = options.cancelText || H5P.t('cancelLabel'); + options.confirmText = options.confirmText || H5P.t('confirmLabel'); + + /** + * Handle confirming event + * @param {Event} e + */ + function dialogConfirmed(e) { + self.hide(); + self.trigger('confirmed'); + e.preventDefault(); + } + + /** + * Handle dialog canceled + * @param {Event} e + */ + function dialogCanceled(e) { + self.hide(); + self.trigger('canceled'); + e.preventDefault(); + } + + /** + * Flow focus to element + * @param {HTMLElement} element Next element to be focused + * @param {Event} e Original tab event + */ + function flowTo(element, e) { + element.focus(); + e.preventDefault(); + } + + // Offset of exit button + var exitButtonOffset = 2 * 16; + var shadowOffset = 8; + + // Determine if we are too large for our container and must resize + var resizeIFrame = false; + + // Create background + var popupBackground = document.createElement('div'); + popupBackground.classList + .add('h5p-confirmation-dialog-background', 'hidden', 'hiding'); + + // Create outer popup + var popup = document.createElement('div'); + popup.classList.add('h5p-confirmation-dialog-popup', 'hidden'); + popup.setAttribute('role', 'dialog'); + popup.setAttribute('aria-labelledby', 'h5p-confirmation-dialog-dialog-text-' + uniqueId); + popupBackground.appendChild(popup); + popup.addEventListener('keydown', function (e) { + if (e.which === 27) {// Esc key + // Exit dialog + dialogCanceled(e); + } + }); + + // Popup header + var header = document.createElement('div'); + header.classList.add('h5p-confirmation-dialog-header'); + popup.appendChild(header); + + // Header text + var headerText = document.createElement('div'); + headerText.classList.add('h5p-confirmation-dialog-header-text'); + headerText.innerHTML = options.headerText; + header.appendChild(headerText); + + // Popup body + var body = document.createElement('div'); + body.classList.add('h5p-confirmation-dialog-body'); + popup.appendChild(body); + + // Popup text + var text = document.createElement('div'); + text.classList.add('h5p-confirmation-dialog-text'); + text.innerHTML = options.dialogText; + text.id = 'h5p-confirmation-dialog-dialog-text-' + uniqueId; + body.appendChild(text); + + // Popup buttons + var buttons = document.createElement('div'); + buttons.classList.add('h5p-confirmation-dialog-buttons'); + body.appendChild(buttons); + + // Cancel button + var cancelButton = document.createElement('button'); + cancelButton.classList.add('h5p-core-cancel-button'); + cancelButton.textContent = options.cancelText; + + // Confirm button + var confirmButton = document.createElement('button'); + confirmButton.classList.add('h5p-core-button', + 'h5p-confirmation-dialog-confirm-button'); + confirmButton.textContent = options.confirmText; + + // Exit button + var exitButton = document.createElement('button'); + exitButton.classList.add('h5p-confirmation-dialog-exit'); + exitButton.setAttribute('aria-hidden', 'true'); + exitButton.tabIndex = -1; + exitButton.title = options.cancelText; + + // Cancel handler + cancelButton.addEventListener('click', dialogCanceled); + cancelButton.addEventListener('keydown', function (e) { + if (e.which === 32) { // Space + dialogCanceled(e); + } + else if (e.which === 9 && e.shiftKey) { // Shift-tab + flowTo(confirmButton, e); + } + }); + buttons.appendChild(cancelButton); + + // Confirm handler + confirmButton.addEventListener('click', dialogConfirmed); + confirmButton.addEventListener('keydown', function (e) { + if (e.which === 32) { // Space + dialogConfirmed(e); + } + else if (e.which === 9 && !e.shiftKey) { // Tab + flowTo(cancelButton, e); + } + }); + buttons.appendChild(confirmButton); + + // Exit handler + exitButton.addEventListener('click', dialogCanceled); + exitButton.addEventListener('keydown', function (e) { + if (e.which === 32) { // Space + dialogCanceled(e); + } + }); + popup.appendChild(exitButton); + + // Wrapper element + var wrapperElement; + + // Focus capturing + var focusPredator; + + // Maintains hidden state of elements + var wrapperSiblingsHidden = []; + var popupSiblingsHidden = []; + + // Element with focus before dialog + var previouslyFocused; + + /** + * Set parent of confirmation dialog + * @param {HTMLElement} wrapper + * @returns {H5P.ConfirmationDialog} + */ + this.appendTo = function (wrapper) { + wrapperElement = wrapper; + return this; + }; + + /** + * Capture the focus element, send it to confirmation button + * @param {Event} e Original focus event + */ + var captureFocus = function (e) { + if (!popupBackground.contains(e.target)) { + e.preventDefault(); + confirmButton.focus(); + } + }; + + /** + * Hide siblings of element from assistive technology + * + * @param {HTMLElement} element + * @returns {Array} The previous hidden state of all siblings + */ + var hideSiblings = function (element) { + var hiddenSiblings = []; + var siblings = element.parentNode.children; + var i; + for (i = 0; i < siblings.length; i += 1) { + // Preserve hidden state + hiddenSiblings[i] = siblings[i].getAttribute('aria-hidden') ? + true : false; + + if (siblings[i] !== element) { + siblings[i].setAttribute('aria-hidden', true); + } + } + return hiddenSiblings; + }; + + /** + * Restores assistive technology state of element's siblings + * + * @param {HTMLElement} element + * @param {Array} hiddenSiblings Hidden state of all siblings + */ + var restoreSiblings = function (element, hiddenSiblings) { + var siblings = element.parentNode.children; + var i; + for (i = 0; i < siblings.length; i += 1) { + if (siblings[i] !== element && !hiddenSiblings[i]) { + siblings[i].removeAttribute('aria-hidden'); + } + } + }; + + /** + * Start capturing focus of parent and send it to dialog + */ + var startCapturingFocus = function () { + focusPredator = wrapperElement.parentNode || wrapperElement; + focusPredator.addEventListener('focus', captureFocus, true); + }; + + /** + * Clean up event listener for capturing focus + */ + var stopCapturingFocus = function () { + focusPredator.removeAttribute('aria-hidden'); + focusPredator.removeEventListener('focus', captureFocus, true); + }; + + /** + * Hide siblings in underlay from assistive technologies + */ + var disableUnderlay = function () { + wrapperSiblingsHidden = hideSiblings(wrapperElement); + popupSiblingsHidden = hideSiblings(popupBackground); + }; + + /** + * Restore state of underlay for assistive technologies + */ + var restoreUnderlay = function () { + restoreSiblings(wrapperElement, wrapperSiblingsHidden); + restoreSiblings(popupBackground, popupSiblingsHidden); + }; + + /** + * Fit popup to container. Makes sure it doesn't overflow. + * @params {number} [offsetTop] Offset of popup + */ + var fitToContainer = function (offsetTop) { + var popupOffsetTop = parseInt(popup.style.top, 10); + if (offsetTop) { + popupOffsetTop = offsetTop; + } + + // Overflows height + if (popupOffsetTop + popup.offsetHeight > wrapperElement.offsetHeight) { + popupOffsetTop = wrapperElement.offsetHeight - popup.offsetHeight - shadowOffset; + } + + if (popupOffsetTop - exitButtonOffset <= 0) { + popupOffsetTop = exitButtonOffset + shadowOffset; + + // We are too big and must resize + resizeIFrame = true; + } + popup.style.top = popupOffsetTop + 'px'; + }; + + /** + * Show confirmation dialog + * @params {number} offsetTop Offset top + * @returns {H5P.ConfirmationDialog} + */ + this.show = function (offsetTop) { + // Capture focused item + previouslyFocused = document.activeElement; + wrapperElement.appendChild(popupBackground); + startCapturingFocus(); + disableUnderlay(); + popupBackground.classList.remove('hidden'); + fitToContainer(offsetTop); + setTimeout(function () { + popup.classList.remove('hidden'); + popupBackground.classList.remove('hiding'); + + setTimeout(function () { + // Focus confirm button + confirmButton.focus(); + + // Resize iFrame if necessary + if (resizeIFrame && options.instance) { + var minHeight = parseInt(popup.offsetHeight, 10) + + exitButtonOffset + (2 * shadowOffset); + wrapperElement.style.minHeight = minHeight + 'px'; + options.instance.trigger('resize'); + resizeIFrame = false; + } + }, 100); + }, 0); + + return this; + }; + + /** + * Hide confirmation dialog + * @returns {H5P.ConfirmationDialog} + */ + this.hide = function () { + popupBackground.classList.add('hiding'); + popup.classList.add('hidden'); + + // Restore focus + stopCapturingFocus(); + previouslyFocused.focus(); + restoreUnderlay(); + setTimeout(function () { + popupBackground.classList.add('hidden'); + wrapperElement.removeChild(popupBackground); + }, 100); + + return this; + }; + } + + ConfirmationDialog.prototype = Object.create(EventDispatcher.prototype); + ConfirmationDialog.prototype.constructor = ConfirmationDialog; + + return ConfirmationDialog; + +}(H5P.EventDispatcher)); + +H5P.ConfirmationDialog.uniqueId = -1; diff --git a/html/moodle2/mod/hvp/library/js/h5p-content-type.js b/html/moodle2/mod/hvp/library/js/h5p-content-type.js new file mode 100755 index 0000000000..c76859d99e --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-content-type.js @@ -0,0 +1,41 @@ +/** + * H5P.ContentType is a base class for all content types. Used by newRunnable() + * + * Functions here may be overridable by the libraries. In special cases, + * it is also possible to override H5P.ContentType on a global level. + * + * NOTE that this doesn't actually 'extend' the event dispatcher but instead + * it creates a single instance which all content types shares as their base + * prototype. (in some cases this may be the root of strange event behavior) + * + * @class + * @augments H5P.EventDispatcher + */ +H5P.ContentType = function (isRootLibrary, library) { + + function ContentType() {} + + // Inherit from EventDispatcher. + ContentType.prototype = new H5P.EventDispatcher(); + + /** + * Is library standalone or not? Not beeing standalone, means it is + * included in another library + * + * @return {Boolean} + */ + ContentType.prototype.isRoot = function () { + return isRootLibrary; + }; + + /** + * Returns the file path of a file in the current library + * @param {string} filePath The path to the file relative to the library folder + * @return {string} The full path to the file + */ + ContentType.prototype.getLibraryFilePath = function (filePath) { + return H5P.getLibraryPath(this.libraryInfo.versionedNameNoSpaces) + '/' + filePath; + }; + + return ContentType; +}; diff --git a/html/moodle2/mod/hvp/library/js/h5p-content-upgrade-process.js b/html/moodle2/mod/hvp/library/js/h5p-content-upgrade-process.js new file mode 100755 index 0000000000..dda3d2a791 --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-content-upgrade-process.js @@ -0,0 +1,283 @@ +/*jshint -W083 */ +var H5PUpgrades = H5PUpgrades || {}; + +H5P.ContentUpgradeProcess = (function (Version) { + + /** + * @class + * @namespace H5P + */ + function ContentUpgradeProcess(name, oldVersion, newVersion, params, id, loadLibrary, done) { + var self = this; + + // Make params possible to work with + try { + params = JSON.parse(params); + if (!(params instanceof Object)) { + throw true; + } + } + catch (event) { + return done({ + type: 'errorParamsBroken', + id: id + }); + } + + self.loadLibrary = loadLibrary; + self.upgrade(name, oldVersion, newVersion, params, function (err, result) { + if (err) { + return done(err); + } + + done(null, JSON.stringify(params)); + }); + } + + /** + * + */ + ContentUpgradeProcess.prototype.upgrade = function (name, oldVersion, newVersion, params, done) { + var self = this; + + // Load library details and upgrade routines + self.loadLibrary(name, newVersion, function (err, library) { + if (err) { + return done(err); + } + + // Run upgrade routines on params + self.processParams(library, oldVersion, newVersion, params, function (err, params) { + if (err) { + return done(err); + } + + // Check if any of the sub-libraries need upgrading + asyncSerial(library.semantics, function (index, field, next) { + self.processField(field, params[field.name], function (err, upgradedParams) { + if (upgradedParams) { + params[field.name] = upgradedParams; + } + next(err); + }); + }, function (err) { + done(err, params); + }); + }); + }); + }; + + /** + * Run upgrade hooks on params. + * + * @public + * @param {Object} library + * @param {Version} oldVersion + * @param {Version} newVersion + * @param {Object} params + * @param {Function} next + */ + ContentUpgradeProcess.prototype.processParams = function (library, oldVersion, newVersion, params, next) { + if (H5PUpgrades[library.name] === undefined) { + if (library.upgradesScript) { + // Upgrades script should be loaded so the upgrades should be here. + return next({ + type: 'scriptMissing', + library: library.name + ' ' + newVersion + }); + } + + // No upgrades script. Move on + return next(null, params); + } + + // Run upgrade hooks. Start by going through major versions + asyncSerial(H5PUpgrades[library.name], function (major, minors, nextMajor) { + if (major < oldVersion.major || major > newVersion.major) { + // Older than the current version or newer than the selected + nextMajor(); + } + else { + // Go through the minor versions for this major version + asyncSerial(minors, function (minor, upgrade, nextMinor) { + minor =+ minor; + if (minor <= oldVersion.minor || minor > newVersion.minor) { + // Older than or equal to the current version or newer than the selected + nextMinor(); + } + else { + // We found an upgrade hook, run it + var unnecessaryWrapper = (upgrade.contentUpgrade !== undefined ? upgrade.contentUpgrade : upgrade); + + try { + unnecessaryWrapper(params, function (err, upgradedParams) { + params = upgradedParams; + nextMinor(err); + }); + } + catch (err) { + if (console && console.log) { + console.log("Error", err.stack); + console.log("Error", err.name); + console.log("Error", err.message); + } + next(err); + } + } + }, nextMajor); + } + }, function (err) { + next(err, params); + }); + }; + + /** + * Process parameter fields to find and upgrade sub-libraries. + * + * @public + * @param {Object} field + * @param {Object} params + * @param {Function} done + */ + ContentUpgradeProcess.prototype.processField = function (field, params, done) { + var self = this; + + if (params === undefined) { + return done(); + } + + switch (field.type) { + case 'library': + if (params.library === undefined || params.params === undefined) { + return done(); + } + + // Look for available upgrades + var usedLib = params.library.split(' ', 2); + for (var i = 0; i < field.options.length; i++) { + var availableLib = field.options[i].split(' ', 2); + if (availableLib[0] === usedLib[0]) { + if (availableLib[1] === usedLib[1]) { + return done(); // Same version + } + + // We have different versions + var usedVer = new Version(usedLib[1]); + var availableVer = new Version(availableLib[1]); + if (usedVer.major > availableVer.major || (usedVer.major === availableVer.major && usedVer.minor >= availableVer.minor)) { + return done(); // Larger or same version that's available + } + + // A newer version is available, upgrade params + return self.upgrade(availableLib[0], usedVer, availableVer, params.params, function (err, upgraded) { + if (!err) { + params.library = availableLib[0] + ' ' + availableVer.major + '.' + availableVer.minor; + params.params = upgraded; + } + done(err, params); + }); + } + } + done(); + break; + + case 'group': + if (field.fields.length === 1 && field.isSubContent !== true) { + // Single field to process, wrapper will be skipped + self.processField(field.fields[0], params, function (err, upgradedParams) { + if (upgradedParams) { + params = upgradedParams; + } + done(err, params); + }); + } + else { + // Go through all fields in the group + asyncSerial(field.fields, function (index, subField, next) { + var paramsToProcess = params ? params[subField.name] : null; + self.processField(subField, paramsToProcess, function (err, upgradedParams) { + if (upgradedParams) { + params[subField.name] = upgradedParams; + } + next(err); + }); + + }, function (err) { + done(err, params); + }); + } + break; + + case 'list': + // Go trough all params in the list + asyncSerial(params, function (index, subParams, next) { + self.processField(field.field, subParams, function (err, upgradedParams) { + if (upgradedParams) { + params[index] = upgradedParams; + } + next(err); + }); + }, function (err) { + done(err, params); + }); + break; + + default: + done(); + } + }; + + /** + * Helps process each property on the given object asynchronously in serial order. + * + * @private + * @param {Object} obj + * @param {Function} process + * @param {Function} finished + */ + var asyncSerial = function (obj, process, finished) { + var id, isArray = obj instanceof Array; + + // Keep track of each property that belongs to this object. + if (!isArray) { + var ids = []; + for (id in obj) { + if (obj.hasOwnProperty(id)) { + ids.push(id); + } + } + } + + var i = -1; // Keeps track of the current property + + /** + * Private. Process the next property + */ + var next = function () { + id = isArray ? i : ids[i]; + process(id, obj[id], check); + }; + + /** + * Private. Check if we're done or have an error. + * + * @param {String} err + */ + var check = function (err) { + // We need to use a real async function in order for the stack to clear. + setTimeout(function () { + i++; + if (i === (isArray ? obj.length : ids.length) || (err !== undefined && err !== null)) { + finished(err); + } + else { + next(); + } + }, 0); + }; + + check(); // Start + }; + + return ContentUpgradeProcess; +})(H5P.Version); diff --git a/html/moodle2/mod/hvp/library/js/h5p-content-upgrade-worker.js b/html/moodle2/mod/hvp/library/js/h5p-content-upgrade-worker.js new file mode 100755 index 0000000000..274cbd8ef9 --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-content-upgrade-worker.js @@ -0,0 +1,62 @@ +var H5P = H5P || {}; +importScripts('h5p-version.js', 'h5p-content-upgrade-process.js'); + +var libraryLoadedCallback; + +/** + * Register message handlers + */ +var messageHandlers = { + newJob: function (job) { + // Start new job + new H5P.ContentUpgradeProcess(job.name, new H5P.Version(job.oldVersion), new H5P.Version(job.newVersion), job.params, job.id, function loadLibrary(name, version, next) { + // TODO: Cache? + postMessage({ + action: 'loadLibrary', + name: name, + version: version.toString() + }); + libraryLoadedCallback = next; + }, function done(err, result) { + if (err) { + // Return error + postMessage({ + action: 'error', + id: job.id, + err: err.message ? err.message : err + }); + + return; + } + + // Return upgraded content + postMessage({ + action: 'done', + id: job.id, + params: result + }); + }); + }, + libraryLoaded: function (data) { + var library = data.library; + if (library.upgradesScript) { + try { + importScripts(library.upgradesScript); + } + catch (err) { + libraryLoadedCallback(err); + return; + } + } + libraryLoadedCallback(null, data.library); + } +}; + +/** + * Handle messages from our master + */ +onmessage = function (event) { + if (event.data.action !== undefined && messageHandlers[event.data.action]) { + messageHandlers[event.data.action].call(this, event.data); + } +}; diff --git a/html/moodle2/mod/hvp/library/js/h5p-content-upgrade.js b/html/moodle2/mod/hvp/library/js/h5p-content-upgrade.js new file mode 100755 index 0000000000..a67338884e --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-content-upgrade.js @@ -0,0 +1,423 @@ +/*jshint -W083 */ + +(function ($, Version) { + var info, $container, librariesCache = {}, scriptsCache = {}; + + // Initialize + $(document).ready(function () { + // Get library info + info = H5PAdminIntegration.libraryInfo; + + // Get and reset container + $container = $('#h5p-admin-container').html('<p>' + info.message + '</p>'); + + // Make it possible to select version + var $version = $(getVersionSelect(info.versions)).appendTo($container); + + // Add "go" button + $('<button/>', { + class: 'h5p-admin-upgrade-button', + text: info.buttonLabel, + click: function () { + // Start new content upgrade + new ContentUpgrade($version.val()); + } + }).appendTo($container); + }); + + /** + * Generate html for version select. + * + * @param {Object} versions + * @returns {String} + */ + var getVersionSelect = function (versions) { + var html = ''; + for (var id in versions) { + html += '<option value="' + id + '">' + versions[id] + '</option>'; + } + if (html !== '') { + html = '<select>' + html + '</select>'; + return html; + } + }; + + /** + * Displays a throbber in the status field. + * + * @param {String} msg + * @returns {_L1.Throbber} + */ + function Throbber(msg) { + var $throbber = H5PUtils.throbber(msg); + $container.html('').append($throbber); + + /** + * Makes it possible to set the progress. + * + * @param {String} progress + */ + this.setProgress = function (progress) { + $throbber.text(msg + ' ' + progress); + }; + } + + /** + * Start a new content upgrade. + * + * @param {Number} libraryId + * @returns {_L1.ContentUpgrade} + */ + function ContentUpgrade(libraryId) { + var self = this; + + // Get selected version + self.version = new Version(info.versions[libraryId]); + self.version.libraryId = libraryId; + + // Create throbber with loading text and progress + self.throbber = new Throbber(info.inProgress.replace('%ver', self.version)); + + self.started = new Date().getTime(); + self.io = 0; + + // Track number of working + self.working = 0; + + var start = function () { + // Get the next batch + self.nextBatch({ + libraryId: libraryId, + token: info.token + }); + }; + + if (window.Worker !== undefined) { + // Prepare our workers + self.initWorkers(); + start(); + } + else { + // No workers, do the job ourselves + self.loadScript(info.scriptBaseUrl + '/h5p-content-upgrade-process.js' + info.buster, start); + } + } + + /** + * Initialize workers + */ + ContentUpgrade.prototype.initWorkers = function () { + var self = this; + + // Determine number of workers (defaults to 4) + var numWorkers = (window.navigator !== undefined && window.navigator.hardwareConcurrency ? window.navigator.hardwareConcurrency : 4); + self.workers = new Array(numWorkers); + + // Register message handlers + var messageHandlers = { + done: function (result) { + self.workDone(result.id, result.params, this); + }, + error: function (error) { + self.printError(error.err); + + // Stop everything + self.terminate(); + }, + loadLibrary: function (details) { + var worker = this; + self.loadLibrary(details.name, new Version(details.version), function (err, library) { + if (err) { + // Reset worker? + return; + } + + worker.postMessage({ + action: 'libraryLoaded', + library: library + }); + }); + } + }; + + for (var i = 0; i < numWorkers; i++) { + self.workers[i] = new Worker(info.scriptBaseUrl + '/h5p-content-upgrade-worker.js' + info.buster); + self.workers[i].onmessage = function (event) { + if (event.data.action !== undefined && messageHandlers[event.data.action]) { + messageHandlers[event.data.action].call(this, event.data); + } + }; + } + }; + + /** + * Get the next batch and start processing it. + * + * @param {Object} outData + */ + ContentUpgrade.prototype.nextBatch = function (outData) { + var self = this; + + // Track time spent on IO + var start = new Date().getTime(); + $.post(info.infoUrl, outData, function (inData) { + self.io += new Date().getTime() - start; + if (!(inData instanceof Object)) { + // Print errors from backend + return self.setStatus(inData); + } + if (inData.left === 0) { + var total = new Date().getTime() - self.started; + + if (window.console && console.log) { + console.log('The upgrade process took ' + (total / 1000) + ' seconds. (' + (Math.round((self.io / (total / 100)) * 100) / 100) + ' % IO)' ); + } + + // Terminate workers + self.terminate(); + + // Nothing left to process + return self.setStatus(info.done); + } + + self.left = inData.left; + self.token = inData.token; + + // Start processing + self.processBatch(inData.params); + }); + }; + + /** + * Set current status message. + * + * @param {String} msg + */ + ContentUpgrade.prototype.setStatus = function (msg) { + $container.html(msg); + }; + + /** + * Process the given parameters. + * + * @param {Object} parameters + */ + ContentUpgrade.prototype.processBatch = function (parameters) { + var self = this; + + // Track upgraded params + self.upgraded = {}; + + // Track current batch + self.parameters = parameters; + + // Create id mapping + self.ids = []; + for (var id in parameters) { + if (parameters.hasOwnProperty(id)) { + self.ids.push(id); + } + } + + // Keep track of current content + self.current = -1; + + if (self.workers !== undefined) { + // Assign each worker content to upgrade + for (var i = 0; i < self.workers.length; i++) { + self.assignWork(self.workers[i]); + } + } + else { + + self.assignWork(); + } + }; + + /** + * + */ + ContentUpgrade.prototype.assignWork = function (worker) { + var self = this; + + var id = self.ids[self.current + 1]; + if (id === undefined) { + return false; // Out of work + } + self.current++; + self.working++; + + if (worker) { + worker.postMessage({ + action: 'newJob', + id: id, + name: info.library.name, + oldVersion: info.library.version, + newVersion: self.version.toString(), + params: self.parameters[id] + }); + } + else { + new H5P.ContentUpgradeProcess(info.library.name, new Version(info.library.version), self.version, self.parameters[id], id, function loadLibrary(name, version, next) { + self.loadLibrary(name, version, function (err, library) { + if (library.upgradesScript) { + self.loadScript(library.upgradesScript, function (err) { + if (err) { + err = info.errorScript.replace('%lib', name + ' ' + version); + } + next(err, library); + }); + } + else { + next(null, library); + } + }); + + }, function done(err, result) { + if (err) { + self.printError(err); + return ; + } + + self.workDone(id, result); + }); + } + }; + + /** + * + */ + ContentUpgrade.prototype.workDone = function (id, result, worker) { + var self = this; + + self.working--; + self.upgraded[id] = result; + + // Update progress message + self.throbber.setProgress(Math.round((info.total - self.left + self.current) / (info.total / 100)) + ' %'); + + // Assign next job + if (self.assignWork(worker) === false && self.working === 0) { + // All workers have finsihed. + self.nextBatch({ + libraryId: self.version.libraryId, + token: self.token, + params: JSON.stringify(self.upgraded) + }); + } + }; + + /** + * + */ + ContentUpgrade.prototype.terminate = function () { + var self = this; + + if (self.workers) { + // Stop all workers + for (var i = 0; i < self.workers.length; i++) { + self.workers[i].terminate(); + } + } + }; + + var librariesLoadedCallbacks = {}; + + /** + * Load library data needed for content upgrade. + * + * @param {String} name + * @param {Version} version + * @param {Function} next + */ + ContentUpgrade.prototype.loadLibrary = function (name, version, next) { + var self = this; + + var key = name + '/' + version.major + '/' + version.minor; + + if (librariesCache[key] === true) { + // Library is being loaded, que callback + if (librariesLoadedCallbacks[key] === undefined) { + librariesLoadedCallbacks[key] = [next]; + return; + } + librariesLoadedCallbacks[key].push(next); + return; + } + else if (librariesCache[key] !== undefined) { + // Library has been loaded before. Return cache. + next(null, librariesCache[key]); + return; + } + + // Track time spent loading + var start = new Date().getTime(); + librariesCache[key] = true; + $.ajax({ + dataType: 'json', + cache: true, + url: info.libraryBaseUrl + '/' + key + }).fail(function () { + self.io += new Date().getTime() - start; + next(info.errorData.replace('%lib', name + ' ' + version)); + }).done(function (library) { + self.io += new Date().getTime() - start; + librariesCache[key] = library; + next(null, library); + + if (librariesLoadedCallbacks[key] !== undefined) { + for (var i = 0; i < librariesLoadedCallbacks[key].length; i++) { + librariesLoadedCallbacks[key][i](null, library); + } + } + delete librariesLoadedCallbacks[key]; + }); + }; + + /** + * Load script with upgrade hooks. + * + * @param {String} url + * @param {Function} next + */ + ContentUpgrade.prototype.loadScript = function (url, next) { + var self = this; + + if (scriptsCache[url] !== undefined) { + next(); + return; + } + + // Track time spent loading + var start = new Date().getTime(); + $.ajax({ + dataType: 'script', + cache: true, + url: url + }).fail(function () { + self.io += new Date().getTime() - start; + next(true); + }).done(function () { + scriptsCache[url] = true; + self.io += new Date().getTime() - start; + next(); + }); + }; + + /** + * + */ + ContentUpgrade.prototype.printError = function (error) { + var self = this; + + if (error.type === 'errorParamsBroken') { + error = info.errorContent.replace('%id', error.id) + ' ' + info.errorParamsBroken; + } + else if (error.type === 'scriptMissing') { + error = info.errorScript.replace('%lib', error.library); + } + + self.setStatus('<p>' + info.error + '<br/>' + error + '</p>'); + }; + +})(H5P.jQuery, H5P.Version); diff --git a/html/moodle2/mod/hvp/library/js/h5p-data-view.js b/html/moodle2/mod/hvp/library/js/h5p-data-view.js new file mode 100755 index 0000000000..fb315719b4 --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-data-view.js @@ -0,0 +1,378 @@ +var H5PDataView = (function ($) { + + /** + * Initialize a new H5P data view. + * + * @class + * @param {Object} container + * Element to clear out and append to. + * @param {String} source + * URL to get data from. Data format: {num: 123, rows:[[1,2,3],[2,4,6]]} + * @param {Array} headers + * List with column headers. Can be strings or objects with options like + * "text" and "sortable". E.g. + * [{text: 'Col 1', sortable: true}, 'Col 2', 'Col 3'] + * @param {Object} l10n + * Localization / translations. e.g. + * { + * loading: 'Loading data.', + * ajaxFailed: 'Failed to load data.', + * noData: "There's no data available that matches your criteria.", + * currentPage: 'Page $current of $total', + * nextPage: 'Next page', + * previousPage: 'Previous page', + * search: 'Search' + * } + * @param {Object} classes + * Custom html classes to use on elements. + * e.g. {tableClass: 'fixed'}. + * @param {Array} filters + * Make it possible to filter/search in the given column. + * e.g. [null, true, null, null] will make it possible to do a text + * search in column 2. + * @param {Function} loaded + * Callback for when data has been loaded. + * @param {Object} order + */ + function H5PDataView(container, source, headers, l10n, classes, filters, loaded, order) { + var self = this; + + self.$container = $(container).addClass('h5p-data-view').html(''); + + self.source = source; + self.headers = headers; + self.l10n = l10n; + self.classes = (classes === undefined ? {} : classes); + self.filters = (filters === undefined ? [] : filters); + self.loaded = loaded; + self.order = order; + + self.limit = 20; + self.offset = 0; + self.filterOn = []; + self.facets = {}; + + self.loadData(); + } + + /** + * Load data from source URL. + */ + H5PDataView.prototype.loadData = function () { + var self = this; + + // Throbb + self.setMessage(H5PUtils.throbber(self.l10n.loading)); + + // Create URL + var url = self.source; + url += (url.indexOf('?') === -1 ? '?' : '&') + 'offset=' + self.offset + '&limit=' + self.limit; + + // Add sorting + if (self.order !== undefined) { + url += '&sortBy=' + self.order.by + '&sortDir=' + self.order.dir; + } + + // Add filters + var filtering; + for (var i = 0; i < self.filterOn.length; i++) { + if (self.filterOn[i] === undefined) { + continue; + } + + filtering = true; + url += '&filters[' + i + ']=' + encodeURIComponent(self.filterOn[i]); + } + + // Add facets + for (var col in self.facets) { + if (!self.facets.hasOwnProperty(col)) { + continue; + } + + url += '&facets[' + col + ']=' + self.facets[col].id; + } + + // Fire ajax request + $.ajax({ + dataType: 'json', + cache: true, + url: url + }).fail(function () { + // Error handling + self.setMessage($('<p/>', {text: self.l10n.ajaxFailed})); + }).done(function (data) { + if (!data.rows.length) { + self.setMessage($('<p/>', {text: filtering ? self.l10n.noData : self.l10n.empty})); + } + else { + // Update table data + self.updateTable(data.rows); + } + + // Update pagination widget + self.updatePagination(data.num); + + if (self.loaded !== undefined) { + self.loaded(); + } + }); + }; + + /** + * Display the given message to the user. + * + * @param {jQuery} $message wrapper with message + */ + H5PDataView.prototype.setMessage = function ($message) { + var self = this; + + if (self.table === undefined) { + self.$container.html('').append($message); + } + else { + self.table.setBody($message); + } + }; + + /** + * Update table data. + * + * @param {Array} rows + */ + H5PDataView.prototype.updateTable = function (rows) { + var self = this; + + if (self.table === undefined) { + // Clear out container + self.$container.html(''); + + // Add filters + self.addFilters(); + + // Add facets + self.$facets = $('<div/>', { + 'class': 'h5p-facet-wrapper', + appendTo: self.$container + }); + + // Create new table + self.table = new H5PUtils.Table(self.classes, self.headers); + self.table.setHeaders(self.headers, function (order) { + // Sorting column or direction has changed. + self.order = order; + self.loadData(); + }, self.order); + self.table.appendTo(self.$container); + } + + // Process cell data before updating table + for (var i = 0; i < self.headers.length; i++) { + if (self.headers[i].facet === true) { + // Process rows for col, expect object or array + for (var j = 0; j < rows.length; j++) { + rows[j][i] = self.createFacets(rows[j][i], i); + } + } + } + + // Add/update rows + var $tbody = self.table.setRows(rows); + + // Add event handlers for facets + $('.h5p-facet', $tbody).click(function () { + var $facet = $(this); + self.filterByFacet($facet.data('col'), $facet.data('id'), $facet.text()); + }).keypress(function (event) { + if (event.which === 32) { + var $facet = $(this); + self.filterByFacet($facet.data('col'), $facet.data('id'), $facet.text()); + } + }); + }; + + /** + * Create button for adding facet to filter. + * + * @param (object|Array) input + * @param number col ID of column + */ + H5PDataView.prototype.createFacets = function (input, col) { + var self = this; + var facets = ''; + + if (input instanceof Array) { + // Facet can be filtered on multiple values at the same time + for (var i = 0; i < input.length; i++) { + if (facets !== '') { + facets += ', '; + } + facets += '<span class="h5p-facet" role="button" tabindex="0" data-id="' + input[i].id + '" data-col="' + col + '">' + input[i].title + '</span>'; + } + } + else { + // Single value facet filtering + facets += '<span class="h5p-facet" role="button" tabindex="0" data-id="' + input.id + '" data-col="' + col + '">' + input.title + '</span>'; + } + + return facets === '' ? '—' : facets; + }; + + /** + * Adds a filter based on the given facet. + * + * @param number col ID of column we're filtering + * @param number id ID to filter on + * @param string text Human readable label for the filter + */ + H5PDataView.prototype.filterByFacet = function (col, id, text) { + var self = this; + + if (self.facets[col] !== undefined) { + if (self.facets[col].id === id) { + return; // Don't use the same filter again + } + + // Remove current filter for this col + self.facets[col].$tag.remove(); + } + + // Add to UI + self.facets[col] = { + id: id, + '$tag': $('<span/>', { + 'class': 'h5p-facet-tag', + text: text, + appendTo: self.$facets, + }) + }; + + /** + * Callback for removing filter. + * + * @private + */ + var remove = function () { + self.facets[col].$tag.remove(); + delete self.facets[col]; + self.loadData(); + }; + + // Remove button + $('<span/>', { + role: 'button', + tabindex: 0, + appendTo: self.facets[col].$tag, + text: self.l10n.remove, + title: self.l10n.remove, + on: { + click: remove, + keypress: function (event) { + if (event.which === 32) { + remove(); + } + } + } + }); + + // Load data with new filter + self.loadData(); + }; + + /** + * Update pagination widget. + * + * @param {Number} num size of data collection + */ + H5PDataView.prototype.updatePagination = function (num) { + var self = this; + + if (self.pagination === undefined) { + if (self.table === undefined) { + // No table, no pagination + return; + } + + // Create new widget + var $pagerContainer = $('<div/>', {'class': 'h5p-pagination'}); + self.pagination = new H5PUtils.Pagination(num, self.limit, function (offset) { + // Handle page changes in pagination widget + self.offset = offset; + self.loadData(); + }, self.l10n); + + self.pagination.appendTo($pagerContainer); + self.table.setFoot($pagerContainer); + } + else { + // Update existing widget + self.pagination.update(num, self.limit); + } + }; + + /** + * Add filters. + */ + H5PDataView.prototype.addFilters = function () { + var self = this; + + for (var i = 0; i < self.filters.length; i++) { + if (self.filters[i] === true) { + // Add text input filter for col i + self.addTextFilter(i); + } + } + }; + + /** + * Add text filter for given col num. + * + * @param {Number} col + */ + H5PDataView.prototype.addTextFilter = function (col) { + var self = this; + + /** + * Find input value and filter on it. + * @private + */ + var search = function () { + var filterOn = $input.val().replace(/^\s+|\s+$/g, ''); + if (filterOn === '') { + filterOn = undefined; + } + if (filterOn !== self.filterOn[col]) { + self.filterOn[col] = filterOn; + self.loadData(); + } + }; + + // Add text field for filtering + var typing; + var $input = $('<input/>', { + type: 'text', + placeholder: self.l10n.search, + on: { + 'blur': function () { + clearTimeout(typing); + search(); + }, + 'keyup': function (event) { + if (event.keyCode === 13) { + clearTimeout(typing); + search(); + return false; + } + else { + clearTimeout(typing); + typing = setTimeout(function () { + search(); + }, 500); + } + } + } + }).appendTo(self.$container); + }; + + return H5PDataView; +})(H5P.jQuery); diff --git a/html/moodle2/mod/hvp/library/js/h5p-display-options.js b/html/moodle2/mod/hvp/library/js/h5p-display-options.js new file mode 100755 index 0000000000..5e24dd5f1a --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-display-options.js @@ -0,0 +1,23 @@ +/** + * Utility that makes it possible to hide fields when a checkbox is unchecked + */ +(function ($) { + function setupHiding () { + var $toggler = $(this); + + // Getting the field which should be hidden: + var $subject = $($toggler.data('h5p-visibility-subject-selector')); + + var toggle = function () { + $subject.toggle($toggler.is(':checked')); + }; + + $toggler.change(toggle); + toggle(); + } + + $(document).ready(function () { + // Get the checkboxes making other fields being hidden: + $('.h5p-visibility-toggler').each(setupHiding); + }); +})(H5P.jQuery); diff --git a/html/moodle2/mod/hvp/library/js/h5p-embed.js b/html/moodle2/mod/hvp/library/js/h5p-embed.js new file mode 100755 index 0000000000..28d6935cc5 --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-embed.js @@ -0,0 +1,75 @@ +/*jshint multistr: true */ + +/** + * Converts old script tag embed to iframe + */ +var H5POldEmbed = H5POldEmbed || (function () { + var head = document.getElementsByTagName('head')[0]; + var resizer = false; + + /** + * Loads the resizing script + */ + var loadResizer = function (url) { + var data, callback = 'H5POldEmbed'; + resizer = true; + + // Callback for when content data is loaded. + window[callback] = function (content) { + // Add resizing script to head + var resizer = document.createElement('script'); + resizer.src = content; + head.appendChild(resizer); + + // Clean up + head.removeChild(data); + delete window[callback]; + }; + + // Create data script + data = document.createElement('script'); + data.src = url + (url.indexOf('?') === -1 ? '?' : '&') + 'callback=' + callback; + head.appendChild(data); + }; + + /** + * Replaced script tag with iframe + */ + var addIframe = function (script) { + // Add iframe + var iframe = document.createElement('iframe'); + iframe.src = script.getAttribute('data-h5p'); + iframe.frameBorder = false; + iframe.allowFullscreen = true; + var parent = script.parentNode; + parent.insertBefore(iframe, script); + parent.removeChild(script); + }; + + /** + * Go throught all script tags with the data-h5p attribute and load content. + */ + function H5POldEmbed() { + var scripts = document.getElementsByTagName('script'); + var h5ps = []; // Use seperate array since scripts grow in size. + for (var i = 0; i < scripts.length; i++) { + var script = scripts[i]; + if (script.src.indexOf('/h5p-resizer.js') !== -1) { + resizer = true; + } + else if (script.hasAttribute('data-h5p')) { + h5ps.push(script); + } + } + for (i = 0; i < h5ps.length; i++) { + if (!resizer) { + loadResizer(h5ps[i].getAttribute('data-h5p')); + } + addIframe(h5ps[i]); + } + } + + return H5POldEmbed; +})(); + +new H5POldEmbed(); diff --git a/html/moodle2/mod/hvp/library/js/h5p-event-dispatcher.js b/html/moodle2/mod/hvp/library/js/h5p-event-dispatcher.js new file mode 100755 index 0000000000..e233a00e04 --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-event-dispatcher.js @@ -0,0 +1,258 @@ +var H5P = H5P || {}; + +/** + * The Event class for the EventDispatcher. + * + * @class + * @param {string} type + * @param {*} data + * @param {Object} [extras] + * @param {boolean} [extras.bubbles] + * @param {boolean} [extras.external] + */ +H5P.Event = function(type, data, extras) { + this.type = type; + this.data = data; + var bubbles = false; + + // Is this an external event? + var external = false; + + // Is this event scheduled to be sent externally? + var scheduledForExternal = false; + + if (extras === undefined) { + extras = {}; + } + if (extras.bubbles === true) { + bubbles = true; + } + if (extras.external === true) { + external = true; + } + + /** + * Prevent this event from bubbling up to parent + */ + this.preventBubbling = function() { + bubbles = false; + }; + + /** + * Get bubbling status + * + * @returns {boolean} + * true if bubbling false otherwise + */ + this.getBubbles = function() { + return bubbles; + }; + + /** + * Try to schedule an event for externalDispatcher + * + * @returns {boolean} + * true if external and not already scheduled, otherwise false + */ + this.scheduleForExternal = function() { + if (external && !scheduledForExternal) { + scheduledForExternal = true; + return true; + } + return false; + }; +}; + +/** + * Callback type for event listeners. + * + * @callback H5P.EventCallback + * @param {H5P.Event} event + */ + +H5P.EventDispatcher = (function () { + + /** + * The base of the event system. + * Inherit this class if you want your H5P to dispatch events. + * + * @class + * @memberof H5P + */ + function EventDispatcher() { + var self = this; + + /** + * Keep track of listeners for each event. + * + * @private + * @type {Object} + */ + var triggers = {}; + + /** + * Add new event listener. + * + * @throws {TypeError} + * listener must be a function + * @param {string} type + * Event type + * @param {H5P.EventCallback} listener + * Event listener + * @param {Object} [thisArg] + * Optionally specify the this value when calling listener. + */ + this.on = function (type, listener, thisArg) { + if (typeof listener !== 'function') { + throw TypeError('listener must be a function'); + } + + // Trigger event before adding to avoid recursion + self.trigger('newListener', {'type': type, 'listener': listener}); + + var trigger = {'listener': listener, 'thisArg': thisArg}; + if (!triggers[type]) { + // First + triggers[type] = [trigger]; + } + else { + // Append + triggers[type].push(trigger); + } + }; + + /** + * Add new event listener that will be fired only once. + * + * @throws {TypeError} + * listener must be a function + * @param {string} type + * Event type + * @param {H5P.EventCallback} listener + * Event listener + * @param {Object} thisArg + * Optionally specify the this value when calling listener. + */ + this.once = function (type, listener, thisArg) { + if (!(listener instanceof Function)) { + throw TypeError('listener must be a function'); + } + + var once = function (event) { + self.off(event.type, once); + listener.call(this, event); + }; + + self.on(type, once, thisArg); + }; + + /** + * Remove event listener. + * If no listener is specified, all listeners will be removed. + * + * @throws {TypeError} + * listener must be a function + * @param {string} type + * Event type + * @param {H5P.EventCallback} listener + * Event listener + */ + this.off = function (type, listener) { + if (listener !== undefined && !(listener instanceof Function)) { + throw TypeError('listener must be a function'); + } + + if (triggers[type] === undefined) { + return; + } + + if (listener === undefined) { + // Remove all listeners + delete triggers[type]; + self.trigger('removeListener', type); + return; + } + + // Find specific listener + for (var i = 0; i < triggers[type].length; i++) { + if (triggers[type][i].listener === listener) { + triggers[type].splice(i, 1); + self.trigger('removeListener', type, {'listener': listener}); + break; + } + } + + // Clean up empty arrays + if (!triggers[type].length) { + delete triggers[type]; + } + }; + + /** + * Try to call all event listeners for the given event type. + * + * @private + * @param {string} Event type + */ + var call = function (type, event) { + if (triggers[type] === undefined) { + return; + } + + // Clone array (prevents triggers from being modified during the event) + var handlers = triggers[type].slice(); + + // Call all listeners + for (var i = 0; i < handlers.length; i++) { + var trigger = handlers[i]; + var thisArg = (trigger.thisArg ? trigger.thisArg : this); + trigger.listener.call(thisArg, event); + } + }; + + /** + * Dispatch event. + * + * @param {string|H5P.Event} event + * Event object or event type as string + * @param {*} [eventData] + * Custom event data(used when event type as string is used as first + * argument). + * @param {Object} [extras] + * @param {boolean} [extras.bubbles] + * @param {boolean} [extras.external] + */ + this.trigger = function (event, eventData, extras) { + if (event === undefined) { + return; + } + if (event instanceof String || typeof event === 'string') { + event = new H5P.Event(event, eventData, extras); + } + else if (eventData !== undefined) { + event.data = eventData; + } + + // Check to see if this event should go externally after all triggering and bubbling is done + var scheduledForExternal = event.scheduleForExternal(); + + // Call all listeners + call.call(this, event.type, event); + + // Call all * listeners + call.call(this, '*', event); + + // Bubble + if (event.getBubbles() && self.parent instanceof H5P.EventDispatcher && + (self.parent.trigger instanceof Function || typeof self.parent.trigger === 'function')) { + self.parent.trigger(event); + } + + if (scheduledForExternal) { + H5P.externalDispatcher.trigger.call(this, event); + } + }; + } + + return EventDispatcher; +})(); diff --git a/html/moodle2/mod/hvp/library/js/h5p-library-details.js b/html/moodle2/mod/hvp/library/js/h5p-library-details.js new file mode 100755 index 0000000000..be3ace8beb --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-library-details.js @@ -0,0 +1,301 @@ +var H5PLibraryDetails= H5PLibraryDetails || {}; + +(function ($) { + + H5PLibraryDetails.PAGER_SIZE = 20; + /** + * Initializing + */ + H5PLibraryDetails.init = function () { + H5PLibraryDetails.$adminContainer = H5P.jQuery(H5PAdminIntegration.containerSelector); + H5PLibraryDetails.library = H5PAdminIntegration.libraryInfo; + + // currentContent holds the current list if data (relevant for filtering) + H5PLibraryDetails.currentContent = H5PLibraryDetails.library.content; + + // The current page index (for pager) + H5PLibraryDetails.currentPage = 0; + + // The current filter + H5PLibraryDetails.currentFilter = ''; + + // We cache the filtered results, so we don't have to do unneccessary searches + H5PLibraryDetails.filterCache = []; + + // Append library info + H5PLibraryDetails.$adminContainer.append(H5PLibraryDetails.createLibraryInfo()); + + // Append node list + H5PLibraryDetails.$adminContainer.append(H5PLibraryDetails.createContentElement()); + }; + + /** + * Create the library details view + */ + H5PLibraryDetails.createLibraryInfo = function () { + var $libraryInfo = $('<div class="h5p-library-info"></div>'); + + $.each(H5PLibraryDetails.library.info, function (title, value) { + $libraryInfo.append(H5PUtils.createLabeledField(title, value)); + }); + + return $libraryInfo; + }; + + /** + * Create the content list with searching and paging + */ + H5PLibraryDetails.createContentElement = function () { + if (H5PLibraryDetails.library.notCached !== undefined) { + return H5PUtils.getRebuildCache(H5PLibraryDetails.library.notCached); + } + + if (H5PLibraryDetails.currentContent === undefined) { + H5PLibraryDetails.$content = $('<div class="h5p-content empty">' + H5PLibraryDetails.library.translations.noContent + '</div>'); + } + else { + H5PLibraryDetails.$content = $('<div class="h5p-content"><h3>' + H5PLibraryDetails.library.translations.contentHeader + '</h3></div>'); + H5PLibraryDetails.createSearchElement(); + H5PLibraryDetails.createPageSizeSelector(); + H5PLibraryDetails.createContentTable(); + H5PLibraryDetails.createPagerElement(); + return H5PLibraryDetails.$content; + } + }; + + /** + * Creates the content list + */ + H5PLibraryDetails.createContentTable = function () { + // Remove it if it exists: + if(H5PLibraryDetails.$contentTable) { + H5PLibraryDetails.$contentTable.remove(); + } + + H5PLibraryDetails.$contentTable = H5PUtils.createTable(); + + var i = (H5PLibraryDetails.currentPage*H5PLibraryDetails.PAGER_SIZE); + var lastIndex = (i+H5PLibraryDetails.PAGER_SIZE); + + if(lastIndex > H5PLibraryDetails.currentContent.length) { + lastIndex = H5PLibraryDetails.currentContent.length; + } + for(; i<lastIndex; i++) { + var content = H5PLibraryDetails.currentContent[i]; + H5PLibraryDetails.$contentTable.append(H5PUtils.createTableRow(['<a href="' + content.url + '">' + content.title + '</a>'])); + } + + // Appends it to the browser DOM + H5PLibraryDetails.$contentTable.insertAfter(H5PLibraryDetails.$search); + }; + + /** + * Creates the pager element on the bottom of the list + */ + H5PLibraryDetails.createPagerElement = function () { + + // Only create pager if needed: + if(H5PLibraryDetails.currentContent.length > H5PLibraryDetails.PAGER_SIZE) { + + H5PLibraryDetails.$previous = $('<button type="button" class="previous h5p-admin"><</button>'); + H5PLibraryDetails.$next = $('<button type="button" class="next h5p-admin">></button>'); + + H5PLibraryDetails.$previous.on('click', function () { + if(H5PLibraryDetails.$previous.hasClass('disabled')) { + return; + } + + H5PLibraryDetails.currentPage--; + H5PLibraryDetails.updatePager(); + H5PLibraryDetails.createContentTable(); + }); + + H5PLibraryDetails.$next.on('click', function () { + if(H5PLibraryDetails.$next.hasClass('disabled')) { + return; + } + + H5PLibraryDetails.currentPage++; + H5PLibraryDetails.updatePager(); + H5PLibraryDetails.createContentTable(); + }); + + // This is the Page x of y widget: + H5PLibraryDetails.$pagerInfo = $('<span class="pager-info"></span>'); + + H5PLibraryDetails.$pager = $('<div class="h5p-content-pager"></div>').append(H5PLibraryDetails.$previous, H5PLibraryDetails.$pagerInfo, H5PLibraryDetails.$next); + H5PLibraryDetails.$content.append(H5PLibraryDetails.$pager); + + H5PLibraryDetails.$pagerInfo.on('click', function () { + var width = H5PLibraryDetails.$pagerInfo.innerWidth(); + H5PLibraryDetails.$pagerInfo.hide(); + + // User has updated the pageNumber + var pageNumerUpdated = function() { + var newPageNum = $gotoInput.val()-1; + var intRegex = /^\d+$/; + + $goto.remove(); + H5PLibraryDetails.$pagerInfo.css({display: 'inline-block'}); + + // Check if input value is valid, and that it has actually changed + if(!(intRegex.test(newPageNum) && newPageNum >= 0 && newPageNum < H5PLibraryDetails.getNumPages() && newPageNum != H5PLibraryDetails.currentPage)) { + return; + } + + H5PLibraryDetails.currentPage = newPageNum; + H5PLibraryDetails.updatePager(); + H5PLibraryDetails.createContentTable(); + }; + + // We create an input box where the user may type in the page number + // he wants to be displayed. + // Reson for doing this is when user has ten-thousands of elements in list, + // this is the easiest way of getting to a specified page + var $gotoInput = $('<input/>', { + type: 'number', + min : 1, + max: H5PLibraryDetails.getNumPages(), + on: { + // Listen to blur, and the enter-key: + 'blur': pageNumerUpdated, + 'keyup': function (event) { + if (event.keyCode === 13) { + pageNumerUpdated(); + } + } + } + }).css({width: width}); + var $goto = $('<span/>', { + 'class': 'h5p-pager-goto' + }).css({width: width}).append($gotoInput).insertAfter(H5PLibraryDetails.$pagerInfo); + + $gotoInput.focus(); + }); + + H5PLibraryDetails.updatePager(); + } + }; + + /** + * Calculates number of pages + */ + H5PLibraryDetails.getNumPages = function () { + return Math.ceil(H5PLibraryDetails.currentContent.length / H5PLibraryDetails.PAGER_SIZE); + }; + + /** + * Update the pager text, and enables/disables the next and previous buttons as needed + */ + H5PLibraryDetails.updatePager = function () { + H5PLibraryDetails.$pagerInfo.css({display: 'inline-block'}); + + if(H5PLibraryDetails.getNumPages() > 0) { + var message = H5PUtils.translateReplace(H5PLibraryDetails.library.translations.pageXOfY, { + '$x': (H5PLibraryDetails.currentPage+1), + '$y': H5PLibraryDetails.getNumPages() + }); + H5PLibraryDetails.$pagerInfo.html(message); + } + else { + H5PLibraryDetails.$pagerInfo.html(''); + } + + H5PLibraryDetails.$previous.toggleClass('disabled', H5PLibraryDetails.currentPage <= 0); + H5PLibraryDetails.$next.toggleClass('disabled', H5PLibraryDetails.currentContent.length < (H5PLibraryDetails.currentPage+1)*H5PLibraryDetails.PAGER_SIZE); + }; + + /** + * Creates the search element + */ + H5PLibraryDetails.createSearchElement = function () { + + H5PLibraryDetails.$search = $('<div class="h5p-content-search"><input placeholder="' + H5PLibraryDetails.library.translations.filterPlaceholder + '" type="search"></div>'); + + var performSeach = function () { + var searchString = $('.h5p-content-search > input').val(); + + // If search string same as previous, just do nothing + if(H5PLibraryDetails.currentFilter === searchString) { + return; + } + + if (searchString.trim().length === 0) { + // If empty search, use the complete list + H5PLibraryDetails.currentContent = H5PLibraryDetails.library.content; + } + else if(H5PLibraryDetails.filterCache[searchString]) { + // If search is cached, no need to filter + H5PLibraryDetails.currentContent = H5PLibraryDetails.filterCache[searchString]; + } + else { + var listToFilter = H5PLibraryDetails.library.content; + + // Check if we can filter the already filtered results (for performance) + if(searchString.length > 1 && H5PLibraryDetails.currentFilter === searchString.substr(0, H5PLibraryDetails.currentFilter.length)) { + listToFilter = H5PLibraryDetails.currentContent; + } + H5PLibraryDetails.currentContent = $.grep(listToFilter, function(content) { + return content.title && content.title.match(new RegExp(searchString, 'i')); + }); + } + + H5PLibraryDetails.currentFilter = searchString; + // Cache the current result + H5PLibraryDetails.filterCache[searchString] = H5PLibraryDetails.currentContent; + H5PLibraryDetails.currentPage = 0; + H5PLibraryDetails.createContentTable(); + + // Display search results: + if (H5PLibraryDetails.$searchResults) { + H5PLibraryDetails.$searchResults.remove(); + } + if (searchString.trim().length > 0) { + H5PLibraryDetails.$searchResults = $('<span class="h5p-admin-search-results">' + H5PLibraryDetails.currentContent.length + ' hits on ' + H5PLibraryDetails.currentFilter + '</span>'); + H5PLibraryDetails.$search.append(H5PLibraryDetails.$searchResults); + } + H5PLibraryDetails.updatePager(); + }; + + var inputTimer; + $('input', H5PLibraryDetails.$search).on('change keypress paste input', function () { + // Here we start the filtering + // We wait at least 500 ms after last input to perform search + if(inputTimer) { + clearTimeout(inputTimer); + } + + inputTimer = setTimeout( function () { + performSeach(); + }, 500); + }); + + H5PLibraryDetails.$content.append(H5PLibraryDetails.$search); + }; + + /** + * Creates the page size selector + */ + H5PLibraryDetails.createPageSizeSelector = function () { + H5PLibraryDetails.$search.append('<div class="h5p-admin-pager-size-selector">' + H5PLibraryDetails.library.translations.pageSizeSelectorLabel + ':<span data-page-size="10">10</span><span class="selected" data-page-size="20">20</span><span data-page-size="50">50</span><span data-page-size="100">100</span><span data-page-size="200">200</span></div>'); + + // Listen to clicks on the page size selector: + $('.h5p-admin-pager-size-selector > span', H5PLibraryDetails.$search).on('click', function () { + H5PLibraryDetails.PAGER_SIZE = $(this).data('page-size'); + $('.h5p-admin-pager-size-selector > span', H5PLibraryDetails.$search).removeClass('selected'); + $(this).addClass('selected'); + H5PLibraryDetails.currentPage = 0; + H5PLibraryDetails.createContentTable(); + H5PLibraryDetails.updatePager(); + }); + }; + + // Initialize me: + $(document).ready(function () { + if (!H5PLibraryDetails.initialized) { + H5PLibraryDetails.initialized = true; + H5PLibraryDetails.init(); + } + }); + +})(H5P.jQuery); diff --git a/html/moodle2/mod/hvp/library/js/h5p-library-list.js b/html/moodle2/mod/hvp/library/js/h5p-library-list.js new file mode 100755 index 0000000000..3cd5d45902 --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-library-list.js @@ -0,0 +1,140 @@ +/*jshint multistr: true */ +var H5PLibraryList = H5PLibraryList || {}; + +(function ($) { + + /** + * Initializing + */ + H5PLibraryList.init = function () { + var $adminContainer = H5P.jQuery(H5PAdminIntegration.containerSelector).html(''); + + var libraryList = H5PAdminIntegration.libraryList; + if (libraryList.notCached) { + $adminContainer.append(H5PUtils.getRebuildCache(libraryList.notCached)); + } + + // Create library list + $adminContainer.append(H5PLibraryList.createLibraryList(H5PAdminIntegration.libraryList)); + }; + + /** + * Create the library list + * + * @param {object} libraries List of libraries and headers + */ + H5PLibraryList.createLibraryList = function (libraries) { + var t = H5PAdminIntegration.l10n; + if(libraries.listData === undefined || libraries.listData.length === 0) { + return $('<div>' + t.NA + '</div>'); + } + + // Create table + var $table = H5PUtils.createTable(libraries.listHeaders); + $table.addClass('libraries'); + + // Add libraries + $.each (libraries.listData, function (index, library) { + var $libraryRow = H5PUtils.createTableRow([ + library.title, + '<input class="h5p-admin-restricted" type="checkbox"/>', + { + text: library.numContent, + class: 'h5p-admin-center' + }, + { + text: library.numContentDependencies, + class: 'h5p-admin-center' + }, + { + text: library.numLibraryDependencies, + class: 'h5p-admin-center' + }, + '<div class="h5p-admin-buttons-wrapper">' + + '<button class="h5p-admin-upgrade-library"></button>' + + (library.detailsUrl ? '<button class="h5p-admin-view-library" title="' + t.viewLibrary + '"></button>' : '') + + (library.deleteUrl ? '<button class="h5p-admin-delete-library"></button>' : '') + + '</div>' + ]); + + H5PLibraryList.addRestricted($('.h5p-admin-restricted', $libraryRow), library.restrictedUrl, library.restricted); + + var hasContent = !(library.numContent === '' || library.numContent === 0); + if (library.upgradeUrl === null) { + $('.h5p-admin-upgrade-library', $libraryRow).remove(); + } + else if (library.upgradeUrl === false || !hasContent) { + $('.h5p-admin-upgrade-library', $libraryRow).attr('disabled', true); + } + else { + $('.h5p-admin-upgrade-library', $libraryRow).attr('title', t.upgradeLibrary).click(function () { + window.location.href = library.upgradeUrl; + }); + } + + // Open details view when clicked + $('.h5p-admin-view-library', $libraryRow).on('click', function () { + window.location.href = library.detailsUrl; + }); + + var $deleteButton = $('.h5p-admin-delete-library', $libraryRow); + if (libraries.notCached !== undefined || + hasContent || + (library.numContentDependencies !== '' && + library.numContentDependencies !== 0) || + (library.numLibraryDependencies !== '' && + library.numLibraryDependencies !== 0)) { + // Disabled delete if content. + $deleteButton.attr('disabled', true); + } + else { + // Go to delete page om click. + $deleteButton.attr('title', t.deleteLibrary).on('click', function () { + window.location.href = library.deleteUrl; + }); + } + + $table.append($libraryRow); + }); + + return $table; + }; + + H5PLibraryList.addRestricted = function ($checkbox, url, selected) { + if (selected === null) { + $checkbox.remove(); + } + else { + $checkbox.change(function () { + $checkbox.attr('disabled', true); + + $.ajax({ + dataType: 'json', + url: url, + cache: false + }).fail(function () { + $checkbox.attr('disabled', false); + + // Reset + $checkbox.attr('checked', !$checkbox.is(':checked')); + }).done(function (result) { + url = result.url; + $checkbox.attr('disabled', false); + }); + }); + + if (selected) { + $checkbox.attr('checked', true); + } + } + }; + + // Initialize me: + $(document).ready(function () { + if (!H5PLibraryList.initialized) { + H5PLibraryList.initialized = true; + H5PLibraryList.init(); + } + }); + +})(H5P.jQuery); diff --git a/html/moodle2/mod/hvp/library/js/h5p-resizer.js b/html/moodle2/mod/hvp/library/js/h5p-resizer.js new file mode 100755 index 0000000000..7461b10db2 --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-resizer.js @@ -0,0 +1,127 @@ +// H5P iframe Resizer +(function () { + if (!window.postMessage || !window.addEventListener || window.h5pResizerInitialized) { + return; // Not supported + } + window.h5pResizerInitialized = true; + + // Map actions to handlers + var actionHandlers = {}; + + /** + * Prepare iframe resize. + * + * @private + * @param {Object} iframe Element + * @param {Object} data Payload + * @param {Function} respond Send a response to the iframe + */ + actionHandlers.hello = function (iframe, data, respond) { + // Make iframe responsive + iframe.style.width = '100%'; + + // Tell iframe that it needs to resize when our window resizes + var resize = function (event) { + if (iframe.contentWindow) { + // Limit resize calls to avoid flickering + respond('resize'); + } + else { + // Frame is gone, unregister. + window.removeEventListener('resize', resize); + } + }; + window.addEventListener('resize', resize, false); + + // Respond to let the iframe know we can resize it + respond('hello'); + }; + + /** + * Prepare iframe resize. + * + * @private + * @param {Object} iframe Element + * @param {Object} data Payload + * @param {Function} respond Send a response to the iframe + */ + actionHandlers.prepareResize = function (iframe, data, respond) { + // Do not resize unless page and scrolling differs + if (iframe.clientHeight !== data.scrollHeight || + data.scrollHeight !== data.clientHeight) { + + // Reset iframe height, in case content has shrinked. + iframe.style.height = data.clientHeight + 'px'; + respond('resizePrepared'); + } + }; + + /** + * Resize parent and iframe to desired height. + * + * @private + * @param {Object} iframe Element + * @param {Object} data Payload + * @param {Function} respond Send a response to the iframe + */ + actionHandlers.resize = function (iframe, data, respond) { + // Resize iframe so all content is visible. Use scrollHeight to make sure we get everything + iframe.style.height = data.scrollHeight + 'px'; + }; + + /** + * Keyup event handler. Exits full screen on escape. + * + * @param {Event} event + */ + var escape = function (event) { + if (event.keyCode === 27) { + exitFullScreen(); + } + }; + + // Listen for messages from iframes + window.addEventListener('message', function receiveMessage(event) { + if (event.data.context !== 'h5p') { + return; // Only handle h5p requests. + } + + // Find out who sent the message + var iframe, iframes = document.getElementsByTagName('iframe'); + for (var i = 0; i < iframes.length; i++) { + if (iframes[i].contentWindow === event.source) { + iframe = iframes[i]; + break; + } + } + + if (!iframe) { + return; // Cannot find sender + } + + // Find action handler handler + if (actionHandlers[event.data.action]) { + actionHandlers[event.data.action](iframe, event.data, function respond(action, data) { + if (data === undefined) { + data = {}; + } + data.action = action; + data.context = 'h5p'; + event.source.postMessage(data, event.origin); + }); + } + }, false); + + // Let h5p iframes know we're ready! + var iframes = document.getElementsByTagName('iframe'); + var ready = { + context: 'h5p', + action: 'ready' + }; + for (var i = 0; i < iframes.length; i++) { + if (iframes[i].src.indexOf('h5p') !== -1) { + iframes[i].contentWindow.postMessage(ready, '*'); + } + } + +})(); diff --git a/html/moodle2/mod/hvp/library/js/h5p-utils.js b/html/moodle2/mod/hvp/library/js/h5p-utils.js new file mode 100755 index 0000000000..3ed1fefff4 --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-utils.js @@ -0,0 +1,505 @@ +var H5PUtils = H5PUtils || {}; + +(function ($) { + /** + * Generic function for creating a table including the headers + * + * @param {array} headers List of headers + */ + H5PUtils.createTable = function (headers) { + var $table = $('<table class="h5p-admin-table' + (H5PAdminIntegration.extraTableClasses !== undefined ? ' ' + H5PAdminIntegration.extraTableClasses : '') + '"></table>'); + + if(headers) { + var $thead = $('<thead></thead>'); + var $tr = $('<tr></tr>'); + + $.each(headers, function (index, value) { + if (!(value instanceof Object)) { + value = { + html: value + }; + } + + $('<th/>', value).appendTo($tr); + }); + + $table.append($thead.append($tr)); + } + + return $table; + }; + + /** + * Generic function for creating a table row + * + * @param {array} rows Value list. Object name is used as class name in <TD> + */ + H5PUtils.createTableRow = function (rows) { + var $tr = $('<tr></tr>'); + + $.each(rows, function (index, value) { + if (!(value instanceof Object)) { + value = { + html: value + }; + } + + $('<td/>', value).appendTo($tr); + }); + + return $tr; + }; + + /** + * Generic function for creating a field containing label and value + * + * @param {string} label The label displayed in front of the value + * @param {string} value The value + */ + H5PUtils.createLabeledField = function (label, value) { + var $field = $('<div class="h5p-labeled-field"></div>'); + + $field.append('<div class="h5p-label">' + label + '</div>'); + $field.append('<div class="h5p-value">' + value + '</div>'); + + return $field; + }; + + /** + * Replaces placeholder fields in translation strings + * + * @param {string} template The translation template string in the following format: "$name is a $sex" + * @param {array} replacors An js object with key and values. Eg: {'$name': 'Frode', '$sex': 'male'} + */ + H5PUtils.translateReplace = function (template, replacors) { + $.each(replacors, function (key, value) { + template = template.replace(new RegExp('\\'+key, 'g'), value); + }); + return template; + }; + + /** + * Get throbber with given text. + * + * @param {String} text + * @returns {$} + */ + H5PUtils.throbber = function (text) { + return $('<div/>', { + class: 'h5p-throbber', + text: text + }); + }; + + /** + * Makes it possbile to rebuild all content caches from admin UI. + * @param {Object} notCached + * @returns {$} + */ + H5PUtils.getRebuildCache = function (notCached) { + var $container = $('<div class="h5p-admin-rebuild-cache"><p class="message">' + notCached.message + '</p><p class="progress">' + notCached.progress + '</p></div>'); + var $button = $('<button>' + notCached.button + '</button>').appendTo($container).click(function () { + var $spinner = $('<div/>', {class: 'h5p-spinner'}).replaceAll($button); + var parts = ['|', '/', '-', '\\']; + var current = 0; + var spinning = setInterval(function () { + $spinner.text(parts[current]); + current++; + if (current === parts.length) current = 0; + }, 100); + + var $counter = $container.find('.progress'); + var build = function () { + $.post(notCached.url, function (left) { + if (left === '0') { + clearInterval(spinning); + $container.remove(); + location.reload(); + } + else { + var counter = $counter.text().split(' '); + counter[0] = left; + $counter.text(counter.join(' ')); + build(); + } + }); + }; + build(); + }); + + return $container; + }; + + /** + * Generic table class with useful helpers. + * + * @class + * @param {Object} classes + * Custom html classes to use on elements. + * e.g. {tableClass: 'fixed'}. + */ + H5PUtils.Table = function (classes) { + var numCols; + var sortByCol; + var $sortCol; + var sortCol; + var sortDir; + + // Create basic table + var tableOptions = {}; + if (classes.table !== undefined) { + tableOptions['class'] = classes.table; + } + var $table = $('<table/>', tableOptions); + var $thead = $('<thead/>').appendTo($table); + var $tfoot = $('<tfoot/>').appendTo($table); + var $tbody = $('<tbody/>').appendTo($table); + + /** + * Add columns to given table row. + * + * @private + * @param {jQuery} $tr Table row + * @param {(String|Object)} col Column properties + * @param {Number} id Used to seperate the columns + */ + var addCol = function ($tr, col, id) { + var options = { + on: {} + }; + + if (!(col instanceof Object)) { + options.text = col; + } + else { + if (col.text !== undefined) { + options.text = col.text; + } + if (col.class !== undefined) { + options.class = col.class; + } + + if (sortByCol !== undefined && col.sortable === true) { + // Make sortable + options.role = 'button'; + options.tabIndex = 0; + + // This is the first sortable column, use as default sort + if (sortCol === undefined) { + sortCol = id; + sortDir = 0; + } + + // This is the sort column + if (sortCol === id) { + options['class'] = 'h5p-sort'; + if (sortDir === 1) { + options['class'] += ' h5p-reverse'; + } + } + + options.on.click = function () { + sort($th, id); + }; + options.on.keypress = function (event) { + if ((event.charCode || event.keyCode) === 32) { // Space + sort($th, id); + } + }; + } + } + + // Append + var $th = $('<th>', options).appendTo($tr); + if (sortCol === id) { + $sortCol = $th; // Default sort column + } + }; + + /** + * Updates the UI when a column header has been clicked. + * Triggers sorting callback. + * + * @private + * @param {jQuery} $th Table header + * @param {Number} id Used to seperate the columns + */ + var sort = function ($th, id) { + if (id === sortCol) { + // Change sorting direction + if (sortDir === 0) { + sortDir = 1; + $th.addClass('h5p-reverse'); + } + else { + sortDir = 0; + $th.removeClass('h5p-reverse'); + } + } + else { + // Change sorting column + $sortCol.removeClass('h5p-sort').removeClass('h5p-reverse'); + $sortCol = $th.addClass('h5p-sort'); + sortCol = id; + sortDir = 0; + } + + sortByCol({ + by: sortCol, + dir: sortDir + }); + }; + + /** + * Set table headers. + * + * @public + * @param {Array} cols + * Table header data. Can be strings or objects with options like + * "text" and "sortable". E.g. + * [{text: 'Col 1', sortable: true}, 'Col 2', 'Col 3'] + * @param {Function} sort Callback which is runned when sorting changes + * @param {Object} [order] + */ + this.setHeaders = function (cols, sort, order) { + numCols = cols.length; + sortByCol = sort; + + if (order) { + sortCol = order.by; + sortDir = order.dir; + } + + // Create new head + var $newThead = $('<thead/>'); + var $tr = $('<tr/>').appendTo($newThead); + for (var i = 0; i < cols.length; i++) { + addCol($tr, cols[i], i); + } + + // Update DOM + $thead.replaceWith($newThead); + $thead = $newThead; + }; + + /** + * Set table rows. + * + * @public + * @param {Array} rows Table rows with cols: [[1,'hello',3],[2,'asd',6]] + */ + this.setRows = function (rows) { + var $newTbody = $('<tbody/>'); + + for (var i = 0; i < rows.length; i++) { + var $tr = $('<tr/>').appendTo($newTbody); + + for (var j = 0; j < rows[i].length; j++) { + $('<td>', { + html: rows[i][j] + }).appendTo($tr); + } + } + + $tbody.replaceWith($newTbody); + $tbody = $newTbody; + + return $tbody; + }; + + /** + * Set custom table body content. This can be a message or a throbber. + * Will cover all table columns. + * + * @public + * @param {jQuery} $content Custom content + */ + this.setBody = function ($content) { + var $newTbody = $('<tbody/>'); + var $tr = $('<tr/>').appendTo($newTbody); + $('<td>', { + colspan: numCols + }).append($content).appendTo($tr); + $tbody.replaceWith($newTbody); + $tbody = $newTbody; + }; + + /** + * Set custom table foot content. This can be a pagination widget. + * Will cover all table columns. + * + * @public + * @param {jQuery} $content Custom content + */ + this.setFoot = function ($content) { + var $newTfoot = $('<tfoot/>'); + var $tr = $('<tr/>').appendTo($newTfoot); + $('<td>', { + colspan: numCols + }).append($content).appendTo($tr); + $tfoot.replaceWith($newTfoot); + }; + + + /** + * Appends the table to the given container. + * + * @public + * @param {jQuery} $container + */ + this.appendTo = function ($container) { + $table.appendTo($container); + }; + }; + + /** + * Generic pagination class. Creates a useful pagination widget. + * + * @class + * @param {Number} num Total number of items to pagiate. + * @param {Number} limit Number of items to dispaly per page. + * @param {Function} goneTo + * Callback which is fired when the user wants to go to another page. + * @param {Object} l10n + * Localization / translations. e.g. + * { + * currentPage: 'Page $current of $total', + * nextPage: 'Next page', + * previousPage: 'Previous page' + * } + */ + H5PUtils.Pagination = function (num, limit, goneTo, l10n) { + var current = 0; + var pages = Math.ceil(num / limit); + + // Create components + + // Previous button + var $left = $('<button/>', { + html: '&lt;', + 'class': 'button', + title: l10n.previousPage + }).click(function () { + goTo(current - 1); + }); + + // Current page text + var $text = $('<span/>').click(function () { + $input.width($text.width()).show().val(current + 1).focus(); + $text.hide(); + }); + + // Jump to page input + var $input = $('<input/>', { + type: 'number', + min : 1, + max: pages, + on: { + 'blur': function () { + gotInput(); + }, + 'keyup': function (event) { + if (event.keyCode === 13) { + gotInput(); + return false; + } + } + } + }).hide(); + + // Next button + var $right = $('<button/>', { + html: '&gt;', + 'class': 'button', + title: l10n.nextPage + }).click(function () { + goTo(current + 1); + }); + + /** + * Check what page the user has typed in and jump to it. + * + * @private + */ + var gotInput = function () { + var page = parseInt($input.hide().val()); + if (!isNaN(page)) { + goTo(page - 1); + } + $text.show(); + }; + + /** + * Update UI elements. + * + * @private + */ + var updateUI = function () { + var next = current + 1; + + // Disable or enable buttons + $left.attr('disabled', current === 0); + $right.attr('disabled', next === pages); + + // Update counter + $text.html(l10n.currentPage.replace('$current', next).replace('$total', pages)); + }; + + /** + * Try to go to the requested page. + * + * @private + * @param {Number} page + */ + var goTo = function (page) { + if (page === current || page < 0 || page >= pages) { + return; // Invalid page number + } + current = page; + + updateUI(); + + // Fire callback + goneTo(page * limit); + }; + + /** + * Update number of items and limit. + * + * @public + * @param {Number} newNum Total number of items to pagiate. + * @param {Number} newLimit Number of items to dispaly per page. + */ + this.update = function (newNum, newLimit) { + if (newNum !== num || newLimit !== limit) { + // Update num and limit + num = newNum; + limit = newLimit; + pages = Math.ceil(num / limit); + $input.attr('max', pages); + + if (current >= pages) { + // Content is gone, move to last page. + goTo(pages - 1); + return; + } + + updateUI(); + } + }; + + /** + * Append the pagination widget to the given container. + * + * @public + * @param {jQuery} $container + */ + this.appendTo = function ($container) { + $left.add($text).add($input).add($right).appendTo($container); + }; + + // Update UI + updateUI(); + }; + +})(H5P.jQuery); diff --git a/html/moodle2/mod/hvp/library/js/h5p-version.js b/html/moodle2/mod/hvp/library/js/h5p-version.js new file mode 100755 index 0000000000..221e5f1a64 --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-version.js @@ -0,0 +1,27 @@ +H5P.Version = (function () { + /** + * Make it easy to keep track of version details. + * + * @class + * @namespace H5P + * @param {String} version + */ + function Version(version) { + var versionSplit = version.split('.', 3); + + // Public + this.major =+ versionSplit[0]; + this.minor =+ versionSplit[1]; + + /** + * Public. Custom string for this object. + * + * @returns {String} + */ + this.toString = function () { + return version; + }; + } + + return Version; +})(); diff --git a/html/moodle2/mod/hvp/library/js/h5p-x-api-event.js b/html/moodle2/mod/hvp/library/js/h5p-x-api-event.js new file mode 100755 index 0000000000..17c4648edd --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-x-api-event.js @@ -0,0 +1,317 @@ +var H5P = H5P || {}; + +/** + * Used for xAPI events. + * + * @class + * @extends H5P.Event + */ +H5P.XAPIEvent = function () { + H5P.Event.call(this, 'xAPI', {'statement': {}}, {bubbles: true, external: true}); +}; + +H5P.XAPIEvent.prototype = Object.create(H5P.Event.prototype); +H5P.XAPIEvent.prototype.constructor = H5P.XAPIEvent; + +/** + * Set scored result statements. + * + * @param {number} score + * @param {number} maxScore + * @param {object} instance + * @param {boolean} completion + * @param {boolean} success + */ +H5P.XAPIEvent.prototype.setScoredResult = function (score, maxScore, instance, completion, success) { + this.data.statement.result = {}; + + if (typeof score !== 'undefined') { + if (typeof maxScore === 'undefined') { + this.data.statement.result.score = {'raw': score}; + } + else { + this.data.statement.result.score = { + 'min': 0, + 'max': maxScore, + 'raw': score + }; + if (maxScore > 0) { + this.data.statement.result.score.scaled = Math.round(score / maxScore * 10000) / 10000; + } + } + } + + if (typeof completion === 'undefined') { + this.data.statement.result.completion = (this.getVerb() === 'completed' || this.getVerb() === 'answered'); + } + else { + this.data.statement.result.completion = completion; + } + + if (typeof success !== 'undefined') { + this.data.statement.result.success = success; + } + + if (instance && instance.activityStartTime) { + var duration = Math.round((Date.now() - instance.activityStartTime ) / 10) / 100; + // xAPI spec allows a precision of 0.01 seconds + + this.data.statement.result.duration = 'PT' + duration + 'S'; + } +}; + +/** + * Set a verb. + * + * @param {string} verb + * Verb in short form, one of the verbs defined at + * {@link http://adlnet.gov/expapi/verbs/|ADL xAPI Vocabulary} + * + */ +H5P.XAPIEvent.prototype.setVerb = function (verb) { + if (H5P.jQuery.inArray(verb, H5P.XAPIEvent.allowedXAPIVerbs) !== -1) { + this.data.statement.verb = { + 'id': 'http://adlnet.gov/expapi/verbs/' + verb, + 'display': { + 'en-US': verb + } + }; + } + else if (verb.id !== undefined) { + this.data.statement.verb = verb; + } +}; + +/** + * Get the statements verb id. + * + * @param {boolean} full + * if true the full verb id prefixed by http://adlnet.gov/expapi/verbs/ + * will be returned + * @returns {string} + * Verb or null if no verb with an id has been defined + */ +H5P.XAPIEvent.prototype.getVerb = function (full) { + var statement = this.data.statement; + if ('verb' in statement) { + if (full === true) { + return statement.verb; + } + return statement.verb.id.slice(31); + } + else { + return null; + } +}; + +/** + * Set the object part of the statement. + * + * The id is found automatically (the url to the content) + * + * @param {Object} instance + * The H5P instance + */ +H5P.XAPIEvent.prototype.setObject = function (instance) { + if (instance.contentId) { + this.data.statement.object = { + 'id': this.getContentXAPIId(instance), + 'objectType': 'Activity', + 'definition': { + 'extensions': { + 'http://h5p.org/x-api/h5p-local-content-id': instance.contentId + } + } + }; + if (instance.subContentId) { + this.data.statement.object.definition.extensions['http://h5p.org/x-api/h5p-subContentId'] = instance.subContentId; + // Don't set titles on main content, title should come from publishing platform + if (typeof instance.getTitle === 'function') { + this.data.statement.object.definition.name = { + "en-US": instance.getTitle() + }; + } + } + else { + if (H5PIntegration && H5PIntegration.contents && H5PIntegration.contents['cid-' + instance.contentId].title) { + this.data.statement.object.definition.name = { + "en-US": H5P.createTitle(H5PIntegration.contents['cid-' + instance.contentId].title) + }; + } + } + } +}; + +/** + * Set the context part of the statement. + * + * @param {Object} instance + * The H5P instance + */ +H5P.XAPIEvent.prototype.setContext = function (instance) { + if (instance.parent && (instance.parent.contentId || instance.parent.subContentId)) { + var parentId = instance.parent.subContentId === undefined ? instance.parent.contentId : instance.parent.subContentId; + this.data.statement.context = { + "contextActivities": { + "parent": [ + { + "id": this.getContentXAPIId(instance.parent), + "objectType": "Activity" + } + ] + } + }; + } + if (instance.libraryInfo) { + if (this.data.statement.context === undefined) { + this.data.statement.context = {"contextActivities":{}}; + } + this.data.statement.context.contextActivities.category = [ + { + "id": "http://h5p.org/libraries/" + instance.libraryInfo.versionedNameNoSpaces, + "objectType": "Activity" + } + ]; + } +}; + +/** + * Set the actor. Email and name will be added automatically. + */ +H5P.XAPIEvent.prototype.setActor = function () { + if (H5PIntegration.user !== undefined) { + this.data.statement.actor = { + 'name': H5PIntegration.user.name, + 'mbox': 'mailto:' + H5PIntegration.user.mail, + 'objectType': 'Agent' + }; + } + else { + var uuid; + try { + if (localStorage.H5PUserUUID) { + uuid = localStorage.H5PUserUUID; + } + else { + uuid = H5P.createUUID(); + localStorage.H5PUserUUID = uuid; + } + } + catch (err) { + // LocalStorage and Cookies are probably disabled. Do not track the user. + uuid = 'not-trackable-' + H5P.createUUID(); + } + this.data.statement.actor = { + 'account': { + 'name': uuid, + 'homePage': H5PIntegration.siteUrl + }, + 'objectType': 'Agent' + }; + } +}; + +/** + * Get the max value of the result - score part of the statement + * + * @returns {number} + * The max score, or null if not defined + */ +H5P.XAPIEvent.prototype.getMaxScore = function() { + return this.getVerifiedStatementValue(['result', 'score', 'max']); +}; + +/** + * Get the raw value of the result - score part of the statement + * + * @returns {number} + * The score, or null if not defined + */ +H5P.XAPIEvent.prototype.getScore = function() { + return this.getVerifiedStatementValue(['result', 'score', 'raw']); +}; + +/** + * Get content xAPI ID. + * + * @param {Object} instance + * The H5P instance + */ +H5P.XAPIEvent.prototype.getContentXAPIId = function (instance) { + var xAPIId; + if (instance.contentId && H5PIntegration && H5PIntegration.contents) { + xAPIId = H5PIntegration.contents['cid-' + instance.contentId].url; + if (instance.subContentId) { + xAPIId += '?subContentId=' + instance.subContentId; + } + } + return xAPIId; +}; + +/** + * Check if this event is sent from a child (i.e not from grandchild) + * + * @return {Boolean} + */ +H5P.XAPIEvent.prototype.isFromChild = function () { + var parentId = this.getVerifiedStatementValue(['context', 'contextActivities', 'parent', 0, 'id']); + return !parentId || parentId.indexOf('subContentId') === -1; +} + +/** + * Figure out if a property exists in the statement and return it + * + * @param {string[]} keys + * List describing the property we're looking for. For instance + * ['result', 'score', 'raw'] for result.score.raw + * @returns {*} + * The value of the property if it is set, null otherwise. + */ +H5P.XAPIEvent.prototype.getVerifiedStatementValue = function(keys) { + var val = this.data.statement; + for (var i = 0; i < keys.length; i++) { + if (val[keys[i]] === undefined) { + return null; + } + val = val[keys[i]]; + } + return val; +}; + +/** + * List of verbs defined at {@link http://adlnet.gov/expapi/verbs/|ADL xAPI Vocabulary} + * + * @type Array + */ +H5P.XAPIEvent.allowedXAPIVerbs = [ + 'answered', + 'asked', + 'attempted', + 'attended', + 'commented', + 'completed', + 'exited', + 'experienced', + 'failed', + 'imported', + 'initialized', + 'interacted', + 'launched', + 'mastered', + 'passed', + 'preferred', + 'progressed', + 'registered', + 'responded', + 'resumed', + 'scored', + 'shared', + 'suspended', + 'terminated', + 'voided', + + // Custom verbs used for action toolbar below content + 'downloaded', + 'accessed-embed', + 'accessed-copyright' +]; diff --git a/html/moodle2/mod/hvp/library/js/h5p-x-api.js b/html/moodle2/mod/hvp/library/js/h5p-x-api.js new file mode 100755 index 0000000000..47fe516cdd --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p-x-api.js @@ -0,0 +1,119 @@ +var H5P = H5P || {}; + +/** + * The external event dispatcher. Others, outside of H5P may register and + * listen for H5P Events here. + * + * @type {H5P.EventDispatcher} + */ +H5P.externalDispatcher = new H5P.EventDispatcher(); + +// EventDispatcher extensions + +/** + * Helper function for triggering xAPI added to the EventDispatcher. + * + * @param {string} verb + * The short id of the verb we want to trigger + * @param {Oject} [extra] + * Extra properties for the xAPI statement + */ +H5P.EventDispatcher.prototype.triggerXAPI = function (verb, extra) { + this.trigger(this.createXAPIEventTemplate(verb, extra)); +}; + +/** + * Helper function to create event templates added to the EventDispatcher. + * + * Will in the future be used to add representations of the questions to the + * statements. + * + * @param {string} verb + * Verb id in short form + * @param {Object} [extra] + * Extra values to be added to the statement + * @returns {H5P.XAPIEvent} + * Instance + */ +H5P.EventDispatcher.prototype.createXAPIEventTemplate = function (verb, extra) { + var event = new H5P.XAPIEvent(); + + event.setActor(); + event.setVerb(verb); + if (extra !== undefined) { + for (var i in extra) { + event.data.statement[i] = extra[i]; + } + } + if (!('object' in event.data.statement)) { + event.setObject(this); + } + if (!('context' in event.data.statement)) { + event.setContext(this); + } + return event; +}; + +/** + * Helper function to create xAPI completed events + * + * DEPRECATED - USE triggerXAPIScored instead + * + * @deprecated + * since 1.5, use triggerXAPIScored instead. + * @param {number} score + * Will be set as the 'raw' value of the score object + * @param {number} maxScore + * will be set as the "max" value of the score object + * @param {boolean} success + * will be set as the "success" value of the result object + */ +H5P.EventDispatcher.prototype.triggerXAPICompleted = function (score, maxScore, success) { + this.triggerXAPIScored(score, maxScore, 'completed', true, success); +}; + +/** + * Helper function to create scored xAPI events + * + * @param {number} score + * Will be set as the 'raw' value of the score object + * @param {number} maxScore + * Will be set as the "max" value of the score object + * @param {string} verb + * Short form of adl verb + * @param {boolean} completion + * Is this a statement from a completed activity? + * @param {boolean} success + * Is this a statement from an activity that was done successfully? + */ +H5P.EventDispatcher.prototype.triggerXAPIScored = function (score, maxScore, verb, completion, success) { + var event = this.createXAPIEventTemplate(verb); + event.setScoredResult(score, maxScore, this, completion, success); + this.trigger(event); +}; + +H5P.EventDispatcher.prototype.setActivityStarted = function() { + if (this.activityStartTime === undefined) { + // Don't trigger xAPI events in the editor + if (this.contentId !== undefined && + H5PIntegration.contents !== undefined && + H5PIntegration.contents['cid-' + this.contentId] !== undefined) { + this.triggerXAPI('attempted'); + } + this.activityStartTime = Date.now(); + } +}; + +/** + * Internal H5P function listening for xAPI completed events and stores scores + * + * @param {H5P.XAPIEvent} event + */ +H5P.xAPICompletedListener = function (event) { + if ((event.getVerb() === 'completed' || event.getVerb() === 'answered') && !event.getVerifiedStatementValue(['context', 'contextActivities', 'parent'])) { + var score = event.getScore(); + var maxScore = event.getMaxScore(); + var contentId = event.getVerifiedStatementValue(['object', 'definition', 'extensions', 'http://h5p.org/x-api/h5p-local-content-id']); + H5P.setFinished(contentId, score, maxScore); + } +}; diff --git a/html/moodle2/mod/hvp/library/js/h5p.js b/html/moodle2/mod/hvp/library/js/h5p.js new file mode 100755 index 0000000000..8ad80c9636 --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/h5p.js @@ -0,0 +1,2048 @@ +/*jshint multistr: true */ +// TODO: Should we split up the generic parts needed by the editor(and others), and the parts needed to "run" H5Ps? + +/** @namespace */ +var H5P = H5P || {}; + +/** + * Tells us if we're inside of an iframe. + * @member {boolean} + */ +H5P.isFramed = (window.self !== window.parent); + +/** + * jQuery instance of current window. + * @member {H5P.jQuery} + */ +H5P.$window = H5P.jQuery(window); + +/** + * List over H5P instances on the current page. + * @member {Array} + */ +H5P.instances = []; + +// Detect if we support fullscreen, and what prefix to use. +if (document.documentElement.requestFullScreen) { + /** + * Browser prefix to use when entering fullscreen mode. + * undefined means no fullscreen support. + * @member {string} + */ + H5P.fullScreenBrowserPrefix = ''; +} +else if (document.documentElement.webkitRequestFullScreen) { + H5P.safariBrowser = navigator.userAgent.match(/version\/([.\d]+)/i); + H5P.safariBrowser = (H5P.safariBrowser === null ? 0 : parseInt(H5P.safariBrowser[1])); + + // Do not allow fullscreen for safari < 7. + if (H5P.safariBrowser === 0 || H5P.safariBrowser > 6) { + H5P.fullScreenBrowserPrefix = 'webkit'; + } +} +else if (document.documentElement.mozRequestFullScreen) { + H5P.fullScreenBrowserPrefix = 'moz'; +} +else if (document.documentElement.msRequestFullscreen) { + H5P.fullScreenBrowserPrefix = 'ms'; +} + +/** + * Keep track of when the H5Ps where started. + * + * @type {Object[]} + */ +H5P.opened = {}; + +/** + * Initialize H5P content. + * Scans for ".h5p-content" in the document and initializes H5P instances where found. + * + * @param {Object} target DOM Element + */ +H5P.init = function (target) { + // Useful jQuery object. + if (H5P.$body === undefined) { + H5P.$body = H5P.jQuery(document.body); + } + + // Determine if we can use full screen + if (H5P.fullscreenSupported === undefined) { + /** + * Use this variable to check if fullscreen is supported. Fullscreen can be + * restricted when embedding since not all browsers support the native + * fullscreen, and the semi-fullscreen solution doesn't work when embedded. + * @type {boolean} + */ + H5P.fullscreenSupported = !(H5P.isFramed && H5P.externalEmbed !== false) || !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled); + // We should consider document.msFullscreenEnabled when they get their + // element sizing corrected. Ref. https://connect.microsoft.com/IE/feedback/details/838286/ie-11-incorrectly-reports-dom-element-sizes-in-fullscreen-mode-when-fullscreened-element-is-within-an-iframe + } + + // Deprecated variable, kept to maintain backwards compatability + if (H5P.canHasFullScreen === undefined) { + /** + * @deprecated since version 1.11 + * @type {boolean} + */ + H5P.canHasFullScreen = H5P.fullscreenSupported; + } + + // H5Ps added in normal DIV. + var $containers = H5P.jQuery('.h5p-content:not(.h5p-initialized)', target).each(function () { + var $element = H5P.jQuery(this).addClass('h5p-initialized'); + var $container = H5P.jQuery('<div class="h5p-container"></div>').appendTo($element); + var contentId = $element.data('content-id'); + var contentData = H5PIntegration.contents['cid-' + contentId]; + if (contentData === undefined) { + return H5P.error('No data for content id ' + contentId + '. Perhaps the library is gone?'); + } + var library = { + library: contentData.library, + params: JSON.parse(contentData.jsonContent) + }; + + H5P.getUserData(contentId, 'state', function (err, previousState) { + if (previousState) { + library.userDatas = { + state: previousState + }; + } + else if (previousState === null && H5PIntegration.saveFreq) { + // Content has been reset. Display dialog. + delete contentData.contentUserData; + var dialog = new H5P.Dialog('content-user-data-reset', 'Data Reset', '<p>' + H5P.t('contentChanged') + '</p><p>' + H5P.t('startingOver') + '</p><div class="h5p-dialog-ok-button" tabIndex="0" role="button">OK</div>', $container); + H5P.jQuery(dialog).on('dialog-opened', function (event, $dialog) { + + var closeDialog = function (event) { + if (event.type === 'click' || event.which === 32) { + dialog.close(); + H5P.deleteUserData(contentId, 'state', 0); + } + }; + + $dialog.find('.h5p-dialog-ok-button').click(closeDialog).keypress(closeDialog); + }); + dialog.open(); + } + // If previousState is false we don't have a previous state + }); + + // Create new instance. + var instance = H5P.newRunnable(library, contentId, $container, true, {standalone: true}); + + // Check if we should add and display a fullscreen button for this H5P. + if (contentData.fullScreen == 1 && H5P.fullscreenSupported) { + H5P.jQuery('<div class="h5p-content-controls"><div role="button" tabindex="0" class="h5p-enable-fullscreen" title="' + H5P.t('fullscreen') + '"></div></div>').prependTo($container).children().click(function () { + H5P.fullScreen($container, instance); + }); + } + + /** + * Create action bar + */ + var displayOptions = contentData.displayOptions; + var displayFrame = false; + if (displayOptions.frame) { + // Special handling of copyrights + if (displayOptions.copyright) { + var copyrights = H5P.getCopyrights(instance, library.params, contentId); + if (!copyrights) { + displayOptions.copyright = false; + } + } + + // Create action bar + var actionBar = new H5P.ActionBar(displayOptions); + var $actions = actionBar.getDOMElement(); + + actionBar.on('download', function () { + window.location.href = contentData.exportUrl; + instance.triggerXAPI('downloaded'); + }); + actionBar.on('copyrights', function () { + var dialog = new H5P.Dialog('copyrights', H5P.t('copyrightInformation'), copyrights, $container); + dialog.open(); + instance.triggerXAPI('accessed-copyright'); + }); + actionBar.on('embed', function () { + H5P.openEmbedDialog($actions, contentData.embedCode, contentData.resizeCode, { + width: $element.width(), + height: $element.height() + }); + instance.triggerXAPI('accessed-embed'); + }); + + if (actionBar.hasActions()) { + displayFrame = true; + $actions.insertAfter($container); + } + } + + $element.addClass(displayFrame ? 'h5p-frame' : 'h5p-no-frame'); + + // Keep track of when we started + H5P.opened[contentId] = new Date(); + + // Handle events when the user finishes the content. Useful for logging exercise results. + H5P.on(instance, 'finish', function (event) { + if (event.data !== undefined) { + H5P.setFinished(contentId, event.data.score, event.data.maxScore, event.data.time); + } + }); + + // Listen for xAPI events. + H5P.on(instance, 'xAPI', H5P.xAPICompletedListener); + + // Auto save current state if supported + if (H5PIntegration.saveFreq !== false && ( + instance.getCurrentState instanceof Function || + typeof instance.getCurrentState === 'function')) { + + var saveTimer, save = function () { + var state = instance.getCurrentState(); + if (state !== undefined) { + H5P.setUserData(contentId, 'state', state, {deleteOnChange: true}); + } + if (H5PIntegration.saveFreq) { + // Continue autosave + saveTimer = setTimeout(save, H5PIntegration.saveFreq * 1000); + } + }; + + if (H5PIntegration.saveFreq) { + // Start autosave + saveTimer = setTimeout(save, H5PIntegration.saveFreq * 1000); + } + + // xAPI events will schedule a save in three seconds. + H5P.on(instance, 'xAPI', function (event) { + var verb = event.getVerb(); + if (verb === 'completed' || verb === 'progressed') { + clearTimeout(saveTimer); + saveTimer = setTimeout(save, 3000); + } + }); + } + + if (H5P.isFramed) { + var resizeDelay; + if (H5P.externalEmbed === false) { + // Internal embed + // Make it possible to resize the iframe when the content changes size. This way we get no scrollbars. + var iframe = window.parent.document.getElementById('h5p-iframe-' + contentId); + var resizeIframe = function () { + if (window.parent.H5P.isFullscreen) { + return; // Skip if full screen. + } + + // Retain parent size to avoid jumping/scrolling + var parentHeight = iframe.parentElement.style.height; + iframe.parentElement.style.height = iframe.parentElement.clientHeight + 'px'; + + // Reset iframe height, in case content has shrinked. + iframe.style.height = '1px'; + + // Resize iframe so all content is visible. + iframe.style.height = (iframe.contentDocument.body.scrollHeight) + 'px'; + + // Free parent + iframe.parentElement.style.height = parentHeight; + }; + + H5P.on(instance, 'resize', function () { + // Use a delay to make sure iframe is resized to the correct size. + clearTimeout(resizeDelay); + resizeDelay = setTimeout(function () { + resizeIframe(); + }, 1); + }); + } + else if (H5P.communicator) { + // External embed + var parentIsFriendly = false; + + // Handle that the resizer is loaded after the iframe + H5P.communicator.on('ready', function () { + H5P.communicator.send('hello'); + }); + + // Handle hello message from our parent window + H5P.communicator.on('hello', function () { + // Initial setup/handshake is done + parentIsFriendly = true; + + // Make iframe responsive + document.body.style.height = 'auto'; + + // Hide scrollbars for correct size + document.body.style.overflow = 'hidden'; + + // Content need to be resized to fit the new iframe size + H5P.trigger(instance, 'resize'); + }); + + // When resize has been prepared tell parent window to resize + H5P.communicator.on('resizePrepared', function (data) { + H5P.communicator.send('resize', { + scrollHeight: document.body.scrollHeight + }); + }); + + H5P.communicator.on('resize', function () { + H5P.trigger(instance, 'resize'); + }); + + H5P.on(instance, 'resize', function () { + if (H5P.isFullscreen) { + return; // Skip iframe resize + } + + // Use a delay to make sure iframe is resized to the correct size. + clearTimeout(resizeDelay); + resizeDelay = setTimeout(function () { + // Only resize if the iframe can be resized + if (parentIsFriendly) { + H5P.communicator.send('prepareResize', { + scrollHeight: document.body.scrollHeight, + clientHeight: document.body.clientHeight + }); + } + else { + H5P.communicator.send('hello'); + } + }, 0); + }); + } + } + + if (!H5P.isFramed || H5P.externalEmbed === false) { + // Resize everything when window is resized. + H5P.jQuery(window.parent).resize(function () { + if (window.parent.H5P.isFullscreen) { + // Use timeout to avoid bug in certain browsers when exiting fullscreen. Some browser will trigger resize before the fullscreenchange event. + H5P.trigger(instance, 'resize'); + } + else { + H5P.trigger(instance, 'resize'); + } + }); + } + + H5P.instances.push(instance); + + // Resize content. + H5P.trigger(instance, 'resize'); + }); + + // Insert H5Ps that should be in iframes. + H5P.jQuery('iframe.h5p-iframe:not(.h5p-initialized)', target).each(function () { + var contentId = H5P.jQuery(this).addClass('h5p-initialized').data('content-id'); + this.contentDocument.open(); + this.contentDocument.write('<!doctype html><html class="h5p-iframe"><head>' + H5P.getHeadTags(contentId) + '</head><body><div class="h5p-content" data-content-id="' + contentId + '"/></body></html>'); + this.contentDocument.close(); + }); +}; + +/** + * Loop through assets for iframe content and create a set of tags for head. + * + * @private + * @param {number} contentId + * @returns {string} HTML + */ +H5P.getHeadTags = function (contentId) { + var createStyleTags = function (styles) { + var tags = ''; + for (var i = 0; i < styles.length; i++) { + tags += '<link rel="stylesheet" href="' + styles[i] + '">'; + } + return tags; + }; + + var createScriptTags = function (scripts) { + var tags = ''; + for (var i = 0; i < scripts.length; i++) { + tags += '<script src="' + scripts[i] + '"></script>'; + } + return tags; + }; + + return '<base target="_parent">' + + createStyleTags(H5PIntegration.core.styles) + + createStyleTags(H5PIntegration.contents['cid-' + contentId].styles) + + createScriptTags(H5PIntegration.core.scripts) + + createScriptTags(H5PIntegration.contents['cid-' + contentId].scripts) + + '<script>H5PIntegration = window.parent.H5PIntegration; var H5P = H5P || {}; H5P.externalEmbed = false;</script>'; +}; + +/** + * When embedded the communicator helps talk to the parent page. + * + * @type {Communicator} + */ +H5P.communicator = (function () { + /** + * @class + * @private + */ + function Communicator() { + var self = this; + + // Maps actions to functions + var actionHandlers = {}; + + // Register message listener + window.addEventListener('message', function receiveMessage(event) { + if (window.parent !== event.source || event.data.context !== 'h5p') { + return; // Only handle messages from parent and in the correct context + } + + if (actionHandlers[event.data.action] !== undefined) { + actionHandlers[event.data.action](event.data); + } + } , false); + + + /** + * Register action listener. + * + * @param {string} action What you are waiting for + * @param {function} handler What you want done + */ + self.on = function (action, handler) { + actionHandlers[action] = handler; + }; + + /** + * Send a message to the all mighty father. + * + * @param {string} action + * @param {Object} [data] payload + */ + self.send = function (action, data) { + if (data === undefined) { + data = {}; + } + data.context = 'h5p'; + data.action = action; + + // Parent origin can be anything + window.parent.postMessage(data, '*'); + }; + } + + return (window.postMessage && window.addEventListener ? new Communicator() : undefined); +})(); + +/** + * Enter semi fullscreen for the given H5P instance + * + * @param {H5P.jQuery} $element Content container. + * @param {Object} instance + * @param {function} exitCallback Callback function called when user exits fullscreen. + * @param {H5P.jQuery} $body For internal use. Gives the body of the iframe. + */ +H5P.semiFullScreen = function ($element, instance, exitCallback, body) { + H5P.fullScreen($element, instance, exitCallback, body, true); +}; + +/** + * Enter fullscreen for the given H5P instance. + * + * @param {H5P.jQuery} $element Content container. + * @param {Object} instance + * @param {function} exitCallback Callback function called when user exits fullscreen. + * @param {H5P.jQuery} $body For internal use. Gives the body of the iframe. + * @param {Boolean} forceSemiFullScreen + */ +H5P.fullScreen = function ($element, instance, exitCallback, body, forceSemiFullScreen) { + if (H5P.exitFullScreen !== undefined) { + return; // Cannot enter new fullscreen until previous is over + } + + if (H5P.isFramed && H5P.externalEmbed === false) { + // Trigger resize on wrapper in parent window. + window.parent.H5P.fullScreen($element, instance, exitCallback, H5P.$body.get(), forceSemiFullScreen); + H5P.isFullscreen = true; + H5P.exitFullScreen = function () { + window.parent.H5P.exitFullScreen(); + }; + H5P.on(instance, 'exitFullScreen', function () { + H5P.isFullscreen = false; + H5P.exitFullScreen = undefined; + }); + return; + } + + var $container = $element; + var $classes, $iframe; + if (body === undefined) { + $body = H5P.$body; + } + else { + // We're called from an iframe. + $body = H5P.jQuery(body); + $classes = $body.add($element.get()); + var iframeSelector = '#h5p-iframe-' + $element.parent().data('content-id'); + $iframe = H5P.jQuery(iframeSelector); + $element = $iframe.parent(); // Put iframe wrapper in fullscreen, not container. + } + + $classes = $element.add(H5P.$body).add($classes); + + /** + * Prepare for resize by setting the correct styles. + * + * @private + * @param {string} classes CSS + */ + var before = function (classes) { + $classes.addClass(classes); + + if ($iframe !== undefined) { + // Set iframe to its default size(100%). + $iframe.css('height', ''); + } + }; + + /** + * Gets called when fullscreen mode has been entered. + * Resizes and sets focus on content. + * + * @private + */ + var entered = function () { + // Do not rely on window resize events. + H5P.trigger(instance, 'resize'); + H5P.trigger(instance, 'focus'); + H5P.trigger(instance, 'enterFullScreen'); + }; + + /** + * Gets called when fullscreen mode has been exited. + * Resizes and sets focus on content. + * + * @private + * @param {string} classes CSS + */ + var done = function (classes) { + H5P.isFullscreen = false; + $classes.removeClass(classes); + + // Do not rely on window resize events. + H5P.trigger(instance, 'resize'); + H5P.trigger(instance, 'focus'); + + H5P.exitFullScreen = undefined; + if (exitCallback !== undefined) { + exitCallback(); + } + + H5P.trigger(instance, 'exitFullScreen'); + }; + + H5P.isFullscreen = true; + if (H5P.fullScreenBrowserPrefix === undefined || forceSemiFullScreen === true) { + // Create semi fullscreen. + + if (H5P.isFramed) { + return; // TODO: Should we support semi-fullscreen for IE9 & 10 ? + } + + before('h5p-semi-fullscreen'); + var $disable = H5P.jQuery('<div role="button" tabindex="0" class="h5p-disable-fullscreen" title="' + H5P.t('disableFullscreen') + '"></div>').appendTo($container.find('.h5p-content-controls')); + var keyup, disableSemiFullscreen = H5P.exitFullScreen = function () { + if (prevViewportContent) { + // Use content from the previous viewport tag + h5pViewport.content = prevViewportContent; + } + else { + // Remove viewport tag + head.removeChild(h5pViewport); + } + $disable.remove(); + $body.unbind('keyup', keyup); + done('h5p-semi-fullscreen'); + }; + keyup = function (event) { + if (event.keyCode === 27) { + disableSemiFullscreen(); + } + }; + $disable.click(disableSemiFullscreen); + $body.keyup(keyup); + + // Disable zoom + var prevViewportContent, h5pViewport; + var metaTags = document.getElementsByTagName('meta'); + for (var i = 0; i < metaTags.length; i++) { + if (metaTags[i].name === 'viewport') { + // Use the existing viewport tag + h5pViewport = metaTags[i]; + prevViewportContent = h5pViewport.content; + break; + } + } + if (!prevViewportContent) { + // Create a new viewport tag + h5pViewport = document.createElement('meta'); + h5pViewport.name = 'viewport'; + } + h5pViewport.content = 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0'; + if (!prevViewportContent) { + // Insert the new viewport tag + var head = document.getElementsByTagName('head')[0]; + head.appendChild(h5pViewport); + } + + entered(); + } + else { + // Create real fullscreen. + + before('h5p-fullscreen'); + var first, eventName = (H5P.fullScreenBrowserPrefix === 'ms' ? 'MSFullscreenChange' : H5P.fullScreenBrowserPrefix + 'fullscreenchange'); + document.addEventListener(eventName, function () { + if (first === undefined) { + // We are entering fullscreen mode + first = false; + entered(); + return; + } + + // We are exiting fullscreen + done('h5p-fullscreen'); + document.removeEventListener(eventName, arguments.callee, false); + }); + + if (H5P.fullScreenBrowserPrefix === '') { + $element[0].requestFullScreen(); + } + else { + var method = (H5P.fullScreenBrowserPrefix === 'ms' ? 'msRequestFullscreen' : H5P.fullScreenBrowserPrefix + 'RequestFullScreen'); + var params = (H5P.fullScreenBrowserPrefix === 'webkit' && H5P.safariBrowser === 0 ? Element.ALLOW_KEYBOARD_INPUT : undefined); + $element[0][method](params); + } + + // Allows everone to exit + H5P.exitFullScreen = function () { + if (H5P.fullScreenBrowserPrefix === '') { + document.exitFullscreen(); + } + else if (H5P.fullScreenBrowserPrefix === 'moz') { + document.mozCancelFullScreen(); + } + else { + document[H5P.fullScreenBrowserPrefix + 'ExitFullscreen'](); + } + }; + } +}; + +/** + * Find the path to the content files based on the id of the content. + * Also identifies and returns absolute paths. + * + * @param {string} path + * Relative to content folder or absolute. + * @param {number} contentId + * ID of the content requesting the path. + * @returns {string} + * Complete URL to path. + */ +H5P.getPath = function (path, contentId) { + var hasProtocol = function (path) { + return path.match(/^[a-z0-9]+:\/\//i); + }; + + if (hasProtocol(path)) { + return path; + } + + var prefix; + if (contentId !== undefined) { + // Check for custom override URL + if (H5PIntegration.contents !== undefined && + H5PIntegration.contents['cid-' + contentId]) { + prefix = H5PIntegration.contents['cid-' + contentId].contentUrl; + } + if (!prefix) { + prefix = H5PIntegration.url + '/content/' + contentId; + } + } + else if (window.H5PEditor !== undefined) { + prefix = H5PEditor.filesPath; + } + else { + return; + } + + if (!hasProtocol(prefix)) { + // Use absolute urls + prefix = window.location.protocol + "//" + window.location.host + prefix; + } + + return prefix + '/' + path; +}; + +/** + * THIS FUNCTION IS DEPRECATED, USE getPath INSTEAD + * Will be remove march 2016. + * + * Find the path to the content files folder based on the id of the content + * + * @deprecated + * Will be removed march 2016. + * @param contentId + * Id of the content requesting the path + * @returns {string} + * URL + */ +H5P.getContentPath = function (contentId) { + return H5PIntegration.url + '/content/' + contentId; +}; + +/** + * Get library class constructor from H5P by classname. + * Note that this class will only work for resolve "H5P.NameWithoutDot". + * Also check out {@link H5P.newRunnable} + * + * Used from libraries to construct instances of other libraries' objects by name. + * + * @param {string} name Name of library + * @returns {Object} Class constructor + */ +H5P.classFromName = function (name) { + var arr = name.split("."); + return this[arr[arr.length - 1]]; +}; + +/** + * A safe way of creating a new instance of a runnable H5P. + * + * @param {Object} library + * Library/action object form params. + * @param {number} contentId + * Identifies the content. + * @param {H5P.jQuery} [$attachTo] + * Element to attach the instance to. + * @param {boolean} [skipResize] + * Skip triggering of the resize event after attaching. + * @param {Object} [extras] + * Extra parameters for the H5P content constructor + * @returns {Object} + * Instance. + */ +H5P.newRunnable = function (library, contentId, $attachTo, skipResize, extras) { + var nameSplit, versionSplit, machineName; + try { + nameSplit = library.library.split(' ', 2); + machineName = nameSplit[0]; + versionSplit = nameSplit[1].split('.', 2); + } + catch (err) { + return H5P.error('Invalid library string: ' + library.library); + } + + if ((library.params instanceof Object) !== true || (library.params instanceof Array) === true) { + H5P.error('Invalid library params for: ' + library.library); + return H5P.error(library.params); + } + + // Find constructor function + var constructor; + try { + nameSplit = nameSplit[0].split('.'); + constructor = window; + for (var i = 0; i < nameSplit.length; i++) { + constructor = constructor[nameSplit[i]]; + } + if (typeof constructor !== 'function') { + throw null; + } + } + catch (err) { + return H5P.error('Unable to find constructor for: ' + library.library); + } + + if (extras === undefined) { + extras = {}; + } + if (library.subContentId) { + extras.subContentId = library.subContentId; + } + + if (library.userDatas && library.userDatas.state && H5PIntegration.saveFreq) { + extras.previousState = library.userDatas.state; + } + + // Makes all H5P libraries extend H5P.ContentType: + var standalone = extras.standalone || false; + // This order makes it possible for an H5P library to override H5P.ContentType functions! + constructor.prototype = H5P.jQuery.extend({}, H5P.ContentType(standalone).prototype, constructor.prototype); + + var instance; + // Some old library versions have their own custom third parameter. + // Make sure we don't send them the extras. + // (they will interpret it as something else) + if (H5P.jQuery.inArray(library.library, ['H5P.CoursePresentation 1.0', 'H5P.CoursePresentation 1.1', 'H5P.CoursePresentation 1.2', 'H5P.CoursePresentation 1.3']) > -1) { + instance = new constructor(library.params, contentId); + } + else { + instance = new constructor(library.params, contentId, extras); + } + + if (instance.$ === undefined) { + instance.$ = H5P.jQuery(instance); + } + + if (instance.contentId === undefined) { + instance.contentId = contentId; + } + if (instance.subContentId === undefined && library.subContentId) { + instance.subContentId = library.subContentId; + } + if (instance.parent === undefined && extras && extras.parent) { + instance.parent = extras.parent; + } + if (instance.libraryInfo === undefined) { + instance.libraryInfo = { + versionedName: library.library, + versionedNameNoSpaces: machineName + '-' + versionSplit[0] + '.' + versionSplit[1], + machineName: machineName, + majorVersion: versionSplit[0], + minorVersion: versionSplit[1] + }; + } + + if ($attachTo !== undefined) { + $attachTo.toggleClass('h5p-standalone', standalone); + instance.attach($attachTo); + H5P.trigger(instance, 'domChanged', { + '$target': $attachTo, + 'library': machineName, + 'key': 'newLibrary' + }, {'bubbles': true, 'external': true}); + + if (skipResize === undefined || !skipResize) { + // Resize content. + H5P.trigger(instance, 'resize'); + } + } + return instance; +}; + +/** + * Used to print useful error messages. (to JavaScript error console) + * + * @param {*} err Error to print. + */ +H5P.error = function (err) { + if (window.console !== undefined && console.error !== undefined) { + console.error(err.stack ? err.stack : err); + } +}; + +/** + * Translate text strings. + * + * @param {string} key + * Translation identifier, may only contain a-zA-Z0-9. No spaces or special chars. + * @param {Object} [vars] + * Data for placeholders. + * @param {string} [ns] + * Translation namespace. Defaults to H5P. + * @returns {string} + * Translated text + */ +H5P.t = function (key, vars, ns) { + if (ns === undefined) { + ns = 'H5P'; + } + + if (H5PIntegration.l10n[ns] === undefined) { + return '[Missing translation namespace "' + ns + '"]'; + } + + if (H5PIntegration.l10n[ns][key] === undefined) { + return '[Missing translation "' + key + '" in "' + ns + '"]'; + } + + var translation = H5PIntegration.l10n[ns][key]; + + if (vars !== undefined) { + // Replace placeholder with variables. + for (var placeholder in vars) { + translation = translation.replace(placeholder, vars[placeholder]); + } + } + + return translation; +}; + +/** + * Creates a new popup dialog over the H5P content. + * + * @class + * @param {string} name + * Used for html class. + * @param {string} title + * Used for header. + * @param {string} content + * Displayed inside the dialog. + * @param {H5P.jQuery} $element + * Which DOM element the dialog should be inserted after. + */ +H5P.Dialog = function (name, title, content, $element) { + /** @alias H5P.Dialog# */ + var self = this; + var $dialog = H5P.jQuery('<div class="h5p-popup-dialog h5p-' + name + '-dialog">\ + <div class="h5p-inner">\ + <h2>' + title + '</h2>\ + <div class="h5p-scroll-content">' + content + '</div>\ + <div class="h5p-close" role="button" tabindex="0" title="' + H5P.t('close') + '">\ + </div>\ + </div>') + .insertAfter($element) + .click(function () { + self.close(); + }) + .children('.h5p-inner') + .click(function () { + return false; + }) + .find('.h5p-close') + .click(function () { + self.close(); + }) + .end() + .find('a') + .click(function (e) { + e.stopPropagation(); + }) + .end() + .end(); + + /** + * Opens the dialog. + */ + self.open = function () { + setTimeout(function () { + $dialog.addClass('h5p-open'); // Fade in + // Triggering an event, in case something has to be done after dialog has been opened. + H5P.jQuery(self).trigger('dialog-opened', [$dialog]); + }, 1); + }; + + /** + * Closes the dialog. + */ + self.close = function () { + $dialog.removeClass('h5p-open'); // Fade out + setTimeout(function () { + $dialog.remove(); + }, 200); + }; +}; + +/** + * Gather copyright information for the given content. + * + * @param {Object} instance + * H5P instance to get copyright information for. + * @param {Object} parameters + * Parameters of the content instance. + * @param {number} contentId + * Identifies the H5P content + * @returns {string} Copyright information. + */ +H5P.getCopyrights = function (instance, parameters, contentId) { + var copyrights; + + if (instance.getCopyrights !== undefined) { + try { + // Use the instance's own copyright generator + copyrights = instance.getCopyrights(); + } + catch (err) { + // Failed, prevent crashing page. + } + } + + if (copyrights === undefined) { + // Create a generic flat copyright list + copyrights = new H5P.ContentCopyrights(); + H5P.findCopyrights(copyrights, parameters, contentId); + } + + if (copyrights !== undefined) { + // Convert to string + copyrights = copyrights.toString(); + } + return copyrights; +}; + +/** + * Gather a flat list of copyright information from the given parameters. + * + * @param {H5P.ContentCopyrights} info + * Used to collect all information in. + * @param {(Object|Array)} parameters + * To search for file objects in. + * @param {number} contentId + * Used to insert thumbnails for images. + */ +H5P.findCopyrights = function (info, parameters, contentId) { + // Cycle through parameters + for (var field in parameters) { + if (!parameters.hasOwnProperty(field)) { + continue; // Do not check + } + + /* + * TODO: Make parameters clean again + * Some content types adds jQuery or other objects to parameters + * in order to determine override settings for sub-content-types. + * For instance Question Set tells Multiple Choice that it should + * attach Multi Choice's confirmation dialog to a Question Set + * jQuery element, so that the confirmation dialog will not be restricted + * to the space confined by Multi Choice. + * Ideally this should not be added to parameters, we must make a better + * solution. We should likely be adding these to sub-content through + * functions/setters instead of passing them down as params. + * + * This solution is implemented as a hack that will ignore all parameters + * inside a "overrideSettings" field, this should suffice for now since + * all overridden objects are added to this field, however this is not very + * robust solution and will very likely lead to problems in the future. + */ + if (field === 'overrideSettings') { + continue; + } + + var value = parameters[field]; + + if (value instanceof Array) { + // Cycle through array + H5P.findCopyrights(info, value, contentId); + } + else if (value instanceof Object) { + // Check if object is a file with copyrights + if (value.copyright === undefined || + value.copyright.license === undefined || + value.path === undefined || + value.mime === undefined) { + + // Nope, cycle throught object + H5P.findCopyrights(info, value, contentId); + } + else { + // Found file, add copyrights + var copyrights = new H5P.MediaCopyright(value.copyright); + if (value.width !== undefined && value.height !== undefined) { + copyrights.setThumbnail(new H5P.Thumbnail(H5P.getPath(value.path, contentId), value.width, value.height)); + } + info.addMedia(copyrights); + } + } + } +}; + +/** + * Display a dialog containing the embed code. + * + * @param {H5P.jQuery} $element + * Element to insert dialog after. + * @param {string} embedCode + * The embed code. + * @param {string} resizeCode + * The advanced resize code + * @param {Object} size + * The content's size. + * @param {number} size.width + * @param {number} size.height + */ +H5P.openEmbedDialog = function ($element, embedCode, resizeCode, size) { + var fullEmbedCode = embedCode + resizeCode; + var dialog = new H5P.Dialog('embed', H5P.t('embed'), '<textarea class="h5p-embed-code-container" autocorrect="off" autocapitalize="off" spellcheck="false"></textarea>' + H5P.t('size') + ': <input type="text" value="' + Math.ceil(size.width) + '" class="h5p-embed-size"/> × <input type="text" value="' + Math.ceil(size.height) + '" class="h5p-embed-size"/> px<br/><div role="button" tabindex="0" class="h5p-expander">' + H5P.t('showAdvanced') + '</div><div class="h5p-expander-content"><p>' + H5P.t('advancedHelp') + '</p><textarea class="h5p-embed-code-container" autocorrect="off" autocapitalize="off" spellcheck="false">' + resizeCode + '</textarea></div>', $element); + + // Selecting embed code when dialog is opened + H5P.jQuery(dialog).on('dialog-opened', function (event, $dialog) { + var $inner = $dialog.find('.h5p-inner'); + var $scroll = $inner.find('.h5p-scroll-content'); + var diff = $scroll.outerHeight() - $scroll.innerHeight(); + var positionInner = function () { + var height = $inner.height(); + if ($scroll[0].scrollHeight + diff > height) { + $inner.css('height', ''); // 100% + } + else { + $inner.css('height', 'auto'); + height = $inner.height(); + } + $inner.css('marginTop', '-' + (height / 2) + 'px'); + }; + + // Handle changing of width/height + var $w = $dialog.find('.h5p-embed-size:eq(0)'); + var $h = $dialog.find('.h5p-embed-size:eq(1)'); + var getNum = function ($e, d) { + var num = parseFloat($e.val()); + if (isNaN(num)) { + return d; + } + return Math.ceil(num); + }; + var updateEmbed = function () { + $dialog.find('.h5p-embed-code-container:first').val(fullEmbedCode.replace(':w', getNum($w, size.width)).replace(':h', getNum($h, size.height))); + }; + + $w.change(updateEmbed); + $h.change(updateEmbed); + updateEmbed(); + + // Select text and expand textareas + $dialog.find('.h5p-embed-code-container').each(function(index, value) { + H5P.jQuery(this).css('height', this.scrollHeight + 'px').focus(function() { + H5P.jQuery(this).select(); + }); + }); + $dialog.find('.h5p-embed-code-container').eq(0).select(); + positionInner(); + + // Expand advanced embed + var expand = function () { + var $expander = H5P.jQuery(this); + var $content = $expander.next(); + if ($content.is(':visible')) { + $expander.removeClass('h5p-open').text(H5P.t('showAdvanced')); + $content.hide(); + } + else { + $expander.addClass('h5p-open').text(H5P.t('hideAdvanced')); + $content.show(); + } + $dialog.find('.h5p-embed-code-container').each(function(index, value) { + H5P.jQuery(this).css('height', this.scrollHeight + 'px'); + }); + positionInner(); + }; + $dialog.find('.h5p-expander').click(expand).keypress(function (event) { + if (event.keyCode === 32) { + expand.apply(this); + } + }); + }); + + dialog.open(); +}; + +/** + * Copyrights for a H5P Content Library. + * + * @class + */ +H5P.ContentCopyrights = function () { + var label; + var media = []; + var content = []; + + /** + * Set label. + * + * @param {string} newLabel + */ + this.setLabel = function (newLabel) { + label = newLabel; + }; + + /** + * Add sub content. + * + * @param {H5P.MediaCopyright} newMedia + */ + this.addMedia = function (newMedia) { + if (newMedia !== undefined) { + media.push(newMedia); + } + }; + + /** + * Add sub content. + * + * @param {H5P.ContentCopyrights} newContent + */ + this.addContent = function (newContent) { + if (newContent !== undefined) { + content.push(newContent); + } + }; + + /** + * Print content copyright. + * + * @returns {string} HTML. + */ + this.toString = function () { + var html = ''; + + // Add media rights + for (var i = 0; i < media.length; i++) { + html += media[i]; + } + + // Add sub content rights + for (i = 0; i < content.length; i++) { + html += content[i]; + } + + + if (html !== '') { + // Add a label to this info + if (label !== undefined) { + html = '<h3>' + label + '</h3>' + html; + } + + // Add wrapper + html = '<div class="h5p-content-copyrights">' + html + '</div>'; + } + + return html; + }; +}; + +/** + * A ordered list of copyright fields for media. + * + * @class + * @param {Object} copyright + * Copyright information fields. + * @param {Object} [labels] + * Translation of labels. + * @param {Array} [order] + * Order of the fields. + * @param {Object} [extraFields] + * Add extra copyright fields. + */ +H5P.MediaCopyright = function (copyright, labels, order, extraFields) { + var thumbnail; + var list = new H5P.DefinitionList(); + + /** + * Get translated label for field. + * + * @private + * @param {string} fieldName + * @returns {string} + */ + var getLabel = function (fieldName) { + if (labels === undefined || labels[fieldName] === undefined) { + return H5P.t(fieldName); + } + + return labels[fieldName]; + }; + + /** + * Get humanized value for field. + * + * @private + * @param {string} fieldName + * @param {string} value + * @returns {string} + */ + var humanizeValue = function (fieldName, value) { + if (fieldName === 'license') { + return H5P.copyrightLicenses[value]; + } + + return value; + }; + + if (copyright !== undefined) { + // Add the extra fields + for (var field in extraFields) { + if (extraFields.hasOwnProperty(field)) { + copyright[field] = extraFields[field]; + } + } + + if (order === undefined) { + // Set default order + order = ['title', 'author', 'year', 'source', 'license']; + } + + for (var i = 0; i < order.length; i++) { + var fieldName = order[i]; + if (copyright[fieldName] !== undefined) { + list.add(new H5P.Field(getLabel(fieldName), humanizeValue(fieldName, copyright[fieldName]))); + } + } + } + + /** + * Set thumbnail. + * + * @param {H5P.Thumbnail} newThumbnail + */ + this.setThumbnail = function (newThumbnail) { + thumbnail = newThumbnail; + }; + + /** + * Checks if this copyright is undisclosed. + * I.e. only has the license attribute set, and it's undisclosed. + * + * @returns {boolean} + */ + this.undisclosed = function () { + if (list.size() === 1) { + var field = list.get(0); + if (field.getLabel() === getLabel('license') && field.getValue() === humanizeValue('license', 'U')) { + return true; + } + } + return false; + }; + + /** + * Print media copyright. + * + * @returns {string} HTML. + */ + this.toString = function () { + var html = ''; + + if (this.undisclosed()) { + return html; // No need to print a copyright with a single undisclosed license. + } + + if (thumbnail !== undefined) { + html += thumbnail; + } + html += list; + + if (html !== '') { + html = '<div class="h5p-media-copyright">' + html + '</div>'; + } + + return html; + }; +}; + +/** + * Maps copyright license codes to their human readable counterpart. + * + * @type {Object} + */ +H5P.copyrightLicenses = { + 'U': 'Undisclosed', + 'CC BY': '<a href="http://creativecommons.org/licenses/by/4.0/legalcode" target="_blank">Attribution 4.0</a>', + 'CC BY-SA': '<a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode" target="_blank">Attribution-ShareAlike 4.0</a>', + 'CC BY-ND': '<a href="https://creativecommons.org/licenses/by-nd/4.0/legalcode" target="_blank">Attribution-NoDerivs 4.0</a>', + 'CC BY-NC': '<a href="https://creativecommons.org/licenses/by-nc/4.0/legalcode" target="_blank">Attribution-NonCommercial 4.0</a>', + 'CC BY-NC-SA': '<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode" target="_blank">Attribution-NonCommercial-ShareAlike 4.0</a>', + 'CC BY-NC-ND': '<a href="https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode" target="_blank">Attribution-NonCommercial-NoDerivs 4.0</a>', + 'GNU GPL': '<a href="http://www.gnu.org/licenses/gpl-3.0-standalone.html" target="_blank">General Public License v3</a>', + 'PD': 'Public Domain', + 'ODC PDDL': '<a href="http://opendatacommons.org/licenses/pddl/1.0/" target="_blank">Public Domain Dedication and Licence</a>', + 'CC PDM': 'Public Domain Mark', + 'C': 'Copyright' +}; + +/** + * A simple and elegant class for creating thumbnails of images. + * + * @class + * @param {string} source + * @param {number} width + * @param {number} height + */ +H5P.Thumbnail = function (source, width, height) { + var thumbWidth, thumbHeight = 100; + if (width !== undefined) { + thumbWidth = Math.round(thumbHeight * (width / height)); + } + + /** + * Print thumbnail. + * + * @returns {string} HTML. + */ + this.toString = function () { + return '<img src="' + source + '" alt="' + H5P.t('thumbnail') + '" class="h5p-thumbnail" height="' + thumbHeight + '"' + (thumbWidth === undefined ? '' : ' width="' + thumbWidth + '"') + '/>'; + }; +}; + +/** + * Simple data structure class for storing a single field. + * + * @class + * @param {string} label + * @param {string} value + */ +H5P.Field = function (label, value) { + /** + * Public. Get field label. + * + * @returns {String} + */ + this.getLabel = function () { + return label; + }; + + /** + * Public. Get field value. + * + * @returns {String} + */ + this.getValue = function () { + return value; + }; +}; + +/** + * Simple class for creating a definition list. + * + * @class + */ +H5P.DefinitionList = function () { + var fields = []; + + /** + * Add field to list. + * + * @param {H5P.Field} field + */ + this.add = function (field) { + fields.push(field); + }; + + /** + * Get Number of fields. + * + * @returns {number} + */ + this.size = function () { + return fields.length; + }; + + /** + * Get field at given index. + * + * @param {number} index + * @returns {H5P.Field} + */ + this.get = function (index) { + return fields[index]; + }; + + /** + * Print definition list. + * + * @returns {string} HTML. + */ + this.toString = function () { + var html = ''; + for (var i = 0; i < fields.length; i++) { + var field = fields[i]; + html += '<dt>' + field.getLabel() + '</dt><dd>' + field.getValue() + '</dd>'; + } + return (html === '' ? html : '<dl class="h5p-definition-list">' + html + '</dl>'); + }; +}; + +/** + * THIS FUNCTION/CLASS IS DEPRECATED AND WILL BE REMOVED. + * + * Helper object for keeping coordinates in the same format all over. + * + * @deprecated + * Will be removed march 2016. + * @class + * @param {number} x + * @param {number} y + * @param {number} w + * @param {number} h + */ +H5P.Coords = function (x, y, w, h) { + if ( !(this instanceof H5P.Coords) ) + return new H5P.Coords(x, y, w, h); + + /** @member {number} */ + this.x = 0; + /** @member {number} */ + this.y = 0; + /** @member {number} */ + this.w = 1; + /** @member {number} */ + this.h = 1; + + if (typeof(x) === 'object') { + this.x = x.x; + this.y = x.y; + this.w = x.w; + this.h = x.h; + } else { + if (x !== undefined) { + this.x = x; + } + if (y !== undefined) { + this.y = y; + } + if (w !== undefined) { + this.w = w; + } + if (h !== undefined) { + this.h = h; + } + } + return this; +}; + +/** + * Parse library string into values. + * + * @param {string} library + * library in the format "machineName majorVersion.minorVersion" + * @returns {Object} + * library as an object with machineName, majorVersion and minorVersion properties + * return false if the library parameter is invalid + */ +H5P.libraryFromString = function (library) { + var regExp = /(.+)\s(\d+)\.(\d+)$/g; + var res = regExp.exec(library); + if (res !== null) { + return { + 'machineName': res[1], + 'majorVersion': res[2], + 'minorVersion': res[3] + }; + } + else { + return false; + } +}; + +/** + * Get the path to the library + * + * @param {string} library + * The library identifier in the format "machineName-majorVersion.minorVersion". + * @returns {string} + * The full path to the library. + */ +H5P.getLibraryPath = function (library) { + return (H5PIntegration.libraryUrl !== undefined ? H5PIntegration.libraryUrl + '/' : H5PIntegration.url + '/libraries/') + library; +}; + +/** + * Recursivly clone the given object. + * + * @param {Object|Array} object + * Object to clone. + * @param {boolean} [recursive] + * @returns {Object|Array} + * A clone of object. + */ +H5P.cloneObject = function (object, recursive) { + // TODO: Consider if this needs to be in core. Doesn't $.extend do the same? + var clone = object instanceof Array ? [] : {}; + + for (var i in object) { + if (object.hasOwnProperty(i)) { + if (recursive !== undefined && recursive && typeof object[i] === 'object') { + clone[i] = H5P.cloneObject(object[i], recursive); + } + else { + clone[i] = object[i]; + } + } + } + + return clone; +}; + +/** + * Remove all empty spaces before and after the value. + * + * @param {string} value + * @returns {string} + */ +H5P.trim = function (value) { + return value.replace(/^\s+|\s+$/g, ''); + + // TODO: Only include this or String.trim(). What is best? + // I'm leaning towards implementing the missing ones: http://kangax.github.io/compat-table/es5/ + // So should we make this function deprecated? +}; + +/** + * Check if JavaScript path/key is loaded. + * + * @param {string} path + * @returns {boolean} + */ +H5P.jsLoaded = function (path) { + H5PIntegration.loadedJs = H5PIntegration.loadedJs || []; + return H5P.jQuery.inArray(path, H5PIntegration.loadedJs) !== -1; +}; + +/** + * Check if styles path/key is loaded. + * + * @param {string} path + * @returns {boolean} + */ +H5P.cssLoaded = function (path) { + H5PIntegration.loadedCss = H5PIntegration.loadedCss || []; + return H5P.jQuery.inArray(path, H5PIntegration.loadedCss) !== -1; +}; + +/** + * Shuffle an array in place. + * + * @param {Array} array + * Array to shuffle + * @returns {Array} + * The passed array is returned for chaining. + */ +H5P.shuffleArray = function (array) { + // TODO: Consider if this should be a part of core. I'm guessing very few libraries are going to use it. + if (!(array instanceof Array)) { + return; + } + + var i = array.length, j, tempi, tempj; + if ( i === 0 ) return false; + while ( --i ) { + j = Math.floor( Math.random() * ( i + 1 ) ); + tempi = array[i]; + tempj = array[j]; + array[i] = tempj; + array[j] = tempi; + } + return array; +}; + +/** + * Post finished results for user. + * + * @deprecated + * Do not use this function directly, trigger the finish event instead. + * Will be removed march 2016 + * @param {number} contentId + * Identifies the content + * @param {number} score + * Achieved score/points + * @param {number} maxScore + * The maximum score/points that can be achieved + * @param {number} [time] + * Reported time consumption/usage + */ +H5P.setFinished = function (contentId, score, maxScore, time) { + var validScore = typeof score === 'number' || score instanceof Number; + if (validScore && H5PIntegration.postUserStatistics === true) { + /** + * Return unix timestamp for the given JS Date. + * + * @private + * @param {Date} date + * @returns {Number} + */ + var toUnix = function (date) { + return Math.round(date.getTime() / 1000); + }; + + // Post the results + H5P.jQuery.post(H5PIntegration.ajax.setFinished, { + contentId: contentId, + score: score, + maxScore: maxScore, + opened: toUnix(H5P.opened[contentId]), + finished: toUnix(new Date()), + time: time + }); + } +}; + +// Add indexOf to browsers that lack them. (IEs) +if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function (needle) { + for (var i = 0; i < this.length; i++) { + if (this[i] === needle) { + return i; + } + } + return -1; + }; +} + +// Need to define trim() since this is not available on older IEs, +// and trim is used in several libs +if (String.prototype.trim === undefined) { + String.prototype.trim = function () { + return H5P.trim(this); + }; +} + +/** + * Trigger an event on an instance + * + * Helper function that triggers an event if the instance supports event handling + * + * @param {Object} instance + * Instance of H5P content + * @param {string} eventType + * Type of event to trigger + * @param {*} data + * @param {Object} extras + */ +H5P.trigger = function (instance, eventType, data, extras) { + // Try new event system first + if (instance.trigger !== undefined) { + instance.trigger(eventType, data, extras); + } + // Try deprecated event system + else if (instance.$ !== undefined && instance.$.trigger !== undefined) { + instance.$.trigger(eventType); + } +}; + +/** + * Register an event handler + * + * Helper function that registers an event handler for an event type if + * the instance supports event handling + * + * @param {Object} instance + * Instance of H5P content + * @param {string} eventType + * Type of event to listen for + * @param {H5P.EventCallback} handler + * Callback that gets triggered for events of the specified type + */ +H5P.on = function (instance, eventType, handler) { + // Try new event system first + if (instance.on !== undefined) { + instance.on(eventType, handler); + } + // Try deprecated event system + else if (instance.$ !== undefined && instance.$.on !== undefined) { + instance.$.on(eventType, handler); + } +}; + +/** + * Generate random UUID + * + * @returns {string} UUID + */ +H5P.createUUID = function () { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(char) { + var random = Math.random()*16|0, newChar = char === 'x' ? random : (random&0x3|0x8); + return newChar.toString(16); + }); +}; + +/** + * Create title + * + * @param {string} rawTitle + * @param {number} maxLength + * @returns {string} + */ +H5P.createTitle = function (rawTitle, maxLength) { + if (!rawTitle) { + return ''; + } + if (maxLength === undefined) { + maxLength = 60; + } + var title = H5P.jQuery('<div></div>') + .text( + // Strip tags + rawTitle.replace(/(<([^>]+)>)/ig,"") + // Escape + ).text(); + if (title.length > maxLength) { + title = title.substr(0, maxLength - 3) + '...'; + } + return title; +}; + +// Wrap in privates +(function ($) { + + /** + * Creates ajax requests for inserting, updateing and deleteing + * content user data. + * + * @private + * @param {number} contentId What content to store the data for. + * @param {string} dataType Identifies the set of data for this content. + * @param {string} subContentId Identifies sub content + * @param {function} [done] Callback when ajax is done. + * @param {object} [data] To be stored for future use. + * @param {boolean} [preload=false] Data is loaded when content is loaded. + * @param {boolean} [invalidate=false] Data is invalidated when content changes. + * @param {boolean} [async=true] + */ + function contentUserDataAjax(contentId, dataType, subContentId, done, data, preload, invalidate, async) { + if (H5PIntegration.user === undefined) { + // Not logged in, no use in saving. + done('Not signed in.'); + return; + } + + var options = { + url: H5PIntegration.ajax.contentUserData.replace(':contentId', contentId).replace(':dataType', dataType).replace(':subContentId', subContentId ? subContentId : 0), + dataType: 'json', + async: async === undefined ? true : async + }; + if (data !== undefined) { + options.type = 'POST'; + options.data = { + data: (data === null ? 0 : data), + preload: (preload ? 1 : 0), + invalidate: (invalidate ? 1 : 0) + }; + } + else { + options.type = 'GET'; + } + if (done !== undefined) { + options.error = function (xhr, error) { + done(error); + }; + options.success = function (response) { + if (!response.success) { + done(response.message); + return; + } + + if (response.data === false || response.data === undefined) { + done(); + return; + } + + done(undefined, response.data); + }; + } + + $.ajax(options); + } + + /** + * Get user data for given content. + * + * @param {number} contentId + * What content to get data for. + * @param {string} dataId + * Identifies the set of data for this content. + * @param {function} done + * Callback with error and data parameters. + * @param {string} [subContentId] + * Identifies which data belongs to sub content. + */ + H5P.getUserData = function (contentId, dataId, done, subContentId) { + if (!subContentId) { + subContentId = 0; // Default + } + + H5PIntegration.contents = H5PIntegration.contents || {}; + var content = H5PIntegration.contents['cid-' + contentId] || {}; + var preloadedData = content.contentUserData; + if (preloadedData && preloadedData[subContentId] && preloadedData[subContentId][dataId] !== undefined) { + if (preloadedData[subContentId][dataId] === 'RESET') { + done(undefined, null); + return; + } + try { + done(undefined, JSON.parse(preloadedData[subContentId][dataId])); + } + catch (err) { + done(err); + } + } + else { + contentUserDataAjax(contentId, dataId, subContentId, function (err, data) { + if (err || data === undefined) { + done(err, data); + return; // Error or no data + } + + // Cache in preloaded + if (content.contentUserData === undefined) { + content.contentUserData = preloadedData = {}; + } + if (preloadedData[subContentId] === undefined) { + preloadedData[subContentId] = {}; + } + preloadedData[subContentId][dataId] = data; + + // Done. Try to decode JSON + try { + done(undefined, JSON.parse(data)); + } + catch (e) { + done(e); + } + }); + } + }; + + /** + * Async error handling. + * + * @callback H5P.ErrorCallback + * @param {*} error + */ + + /** + * Set user data for given content. + * + * @param {number} contentId + * What content to get data for. + * @param {string} dataId + * Identifies the set of data for this content. + * @param {Object} data + * The data that is to be stored. + * @param {Object} [extras] + * Extra properties + * @param {string} [extras.subContentId] + * Identifies which data belongs to sub content. + * @param {boolean} [extras.preloaded=true] + * If the data should be loaded when content is loaded. + * @param {boolean} [extras.deleteOnChange=false] + * If the data should be invalidated when the content changes. + * @param {H5P.ErrorCallback} [extras.errorCallback] + * Callback with error as parameters. + * @param {boolean} [extras.async=true] + */ + H5P.setUserData = function (contentId, dataId, data, extras) { + var options = H5P.jQuery.extend(true, {}, { + subContentId: 0, + preloaded: true, + deleteOnChange: false, + async: true + }, extras); + + try { + data = JSON.stringify(data); + } + catch (err) { + if (options.errorCallback) { + options.errorCallback(err); + } + return; // Failed to serialize. + } + + var content = H5PIntegration.contents['cid-' + contentId]; + if (content === undefined) { + content = H5PIntegration.contents['cid-' + contentId] = {}; + } + if (!content.contentUserData) { + content.contentUserData = {}; + } + var preloadedData = content.contentUserData; + if (preloadedData[options.subContentId] === undefined) { + preloadedData[options.subContentId] = {}; + } + if (data === preloadedData[options.subContentId][dataId]) { + return; // No need to save this twice. + } + + preloadedData[options.subContentId][dataId] = data; + contentUserDataAjax(contentId, dataId, options.subContentId, function (error, data) { + if (options.errorCallback && error) { + options.errorCallback(error); + } + }, data, options.preloaded, options.deleteOnChange, options.async); + }; + + /** + * Delete user data for given content. + * + * @param {number} contentId + * What content to remove data for. + * @param {string} dataId + * Identifies the set of data for this content. + * @param {string} [subContentId] + * Identifies which data belongs to sub content. + */ + H5P.deleteUserData = function (contentId, dataId, subContentId) { + if (!subContentId) { + subContentId = 0; // Default + } + + // Remove from preloaded/cache + var preloadedData = H5PIntegration.contents['cid-' + contentId].contentUserData; + if (preloadedData && preloadedData[subContentId] && preloadedData[subContentId][dataId]) { + delete preloadedData[subContentId][dataId]; + } + + contentUserDataAjax(contentId, dataId, subContentId, undefined, null); + }; + + // Init H5P when page is fully loadded + $(document).ready(function () { + + /** + * Indicates if H5P is embedded on an external page using iframe. + * @member {boolean} H5P.externalEmbed + */ + + // Relay events to top window. This must be done before H5P.init + // since events may be fired on initialization. + if (H5P.isFramed && H5P.externalEmbed === false) { + H5P.externalDispatcher.on('*', function (event) { + window.parent.H5P.externalDispatcher.trigger.call(this, event); + }); + } + + /** + * Prevent H5P Core from initializing. Must be overriden before document ready. + * @member {boolean} H5P.preventInit + */ + if (!H5P.preventInit) { + // Note that this start script has to be an external resource for it to + // load in correct order in IE9. + H5P.init(document.body); + } + + if (H5PIntegration.saveFreq !== false) { + // When was the last state stored + var lastStoredOn = 0; + // Store the current state of the H5P when leaving the page. + var storeCurrentState = function () { + // Make sure at least 250 ms has passed since last save + var currentTime = new Date().getTime(); + if (currentTime - lastStoredOn > 250) { + lastStoredOn = currentTime; + for (var i = 0; i < H5P.instances.length; i++) { + var instance = H5P.instances[i]; + if (instance.getCurrentState instanceof Function || + typeof instance.getCurrentState === 'function') { + var state = instance.getCurrentState(); + if (state !== undefined) { + // Async is not used to prevent the request from being cancelled. + H5P.setUserData(instance.contentId, 'state', state, {deleteOnChange: true, async: false}); + } + } + } + } + }; + // iPad does not support beforeunload, therefore using unload + H5P.$window.one('beforeunload unload', function () { + // Only want to do this once + H5P.$window.off('pagehide beforeunload unload'); + storeCurrentState(); + }); + // pagehide is used on iPad when tabs are switched + H5P.$window.on('pagehide', storeCurrentState); + } + }); + +})(H5P.jQuery); diff --git a/html/moodle2/mod/hvp/library/js/jquery.js b/html/moodle2/mod/hvp/library/js/jquery.js new file mode 100755 index 0000000000..85467772ad --- /dev/null +++ b/html/moodle2/mod/hvp/library/js/jquery.js @@ -0,0 +1,15 @@ +/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license +*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj; +return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="<a name='"+x+"'></a><div name='"+x+"'></div>",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&&gt(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:b.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l) +}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window); + +// Snap this specific version of jQuery into H5P. jQuery.noConflict will +// revert the globals to what they were before this file was loaded. +var H5P = H5P || {}; + +/** + * jQuery v1.9.1 + * + * @member + */ +H5P.jQuery = jQuery.noConflict(true); diff --git a/html/moodle2/mod/hvp/library/styles/h5p-admin.css b/html/moodle2/mod/hvp/library/styles/h5p-admin.css new file mode 100755 index 0000000000..b972c1dee2 --- /dev/null +++ b/html/moodle2/mod/hvp/library/styles/h5p-admin.css @@ -0,0 +1,340 @@ +/* Administration interface styling */ + +.h5p-content { + border: 1px solid #DDD; + border-radius: 3px; + padding: 10px; +} + +.h5p-admin-table, +.h5p-admin-table > tbody { + border: none; + width: 100%; +} + +.h5p-admin-table tr:nth-child(odd), +.h5p-data-view tr:nth-child(odd) { + background-color: #F9F9F9; +} +.h5p-admin-table tbody tr:hover { + background-color: #EEE; +} +.h5p-admin-table.empty { + padding: 1em; + background-color: #EEE; + font-size: 1.2em; + font-weight: bold; +} + +.h5p-admin-table.libraries th:last-child, +.h5p-admin-table.libraries td:last-child { + text-align: right; +} + +.h5p-admin-buttons-wrapper { + white-space: nowrap; +} + +.h5p-admin-table.libraries button { + font-size: 2em; + cursor: pointer; + border: 1px solid #AAA; + border-radius: .2em; + background-color: #e0e0e0; + text-shadow: 0 0 0.5em #fff; + padding: 0; + line-height: 1em; + width: 1.125em; + height: 1.05em; + text-indent: -0.125em; + margin: 0.125em 0.125em 0 0.125em; +} +.h5p-admin-upgrade-library:before { + font-family: 'H5P'; + content: "\e888"; +} +.h5p-admin-view-library:before { + font-family: 'H5P'; + content: "\e889"; +} +.h5p-admin-delete-library:before { + font-family: 'H5P'; + content: "\e890"; +} + +.h5p-admin-table.libraries button:hover { + background-color: #d0d0d0; +} +.h5p-admin-table.libraries button:disabled:hover { + background-color: #e0e0e0; + cursor: default; +} + +.h5p-admin-upgrade-library { + color: #339900; +} +.h5p-admin-view-library { + color: #0066cc; +} +.h5p-admin-delete-library { + color: #990000; +} +.h5p-admin-delete-library:disabled, +.h5p-admin-upgrade-library:disabled { + cursor: default; + color: #c0c0c0; +} + +.h5p-library-info { + padding: 1em 1em; + margin: 1em 0; + + width: 350px; + + border: 1px solid #DDD; + border-radius: 3px; +} + +/* Labeled field (label + value) */ +.h5p-labeled-field { + border-bottom: 1px solid #ccc; +} +.h5p-labeled-field:last-child { + border-bottom: none; +} + +.h5p-labeled-field .h5p-label { + display: inline-block; + min-width: 150px; + font-size: 1.2em; + font-weight: bold; + padding: 0.2em; +} + +.h5p-labeled-field .h5p-value { + display: inline-block; + padding: 0.2em; +} + +/* Search element */ +.h5p-content-search { + display: inline-block; + position: relative; + + width: 100%; + padding: 5px 0; + margin-top: 10px; + + border: 1px solid #CCC; + border-radius: 3px; + box-shadow: 2px 2px 5px #888888; +} +.h5p-content-search:before { + font-family: 'H5P'; + vertical-align: bottom; + content: "\e88a"; + font-size: 2em; + line-height: 1.25em; +} +.h5p-content-search input { + font-size: 120%; + line-height: 120%; +} +.h5p-admin-search-results { + margin-left: 10px; + color: #888; +} + +.h5p-admin-pager-size-selector { + position: absolute; + right: 10px; + top: .75em; + display: inline-block; +} +.h5p-admin-pager-size-selector > span { + padding: 5px; + margin-left: 10px; + cursor: pointer; + border: 1px solid #CCC; + border-radius: 3px; +} +.h5p-admin-pager-size-selector > span.selected { + background-color: #edf5fa; +} +.h5p-admin-pager-size-selector > span:hover { + background-color: #555; + color: #FFF; +} + +/* Generic "javascript"-action button */ +button.h5p-admin { + border: 1px solid #AAA; + border-radius: 5px; + padding: 3px 10px; + background-color: #EEE; + cursor: pointer; + display: inline-block; + text-align: center; + color: #222; +} +button.h5p-admin:hover { + background-color: #555; + color: #FFF; +} +button.h5p-admin.disabled, +button.h5p-admin.disabled:hover { + cursor: auto; + color: #CCC; + background-color: #FFF; +} + +/* Pager element */ +.h5p-content-pager { + display: inline-block; + border: 1px solid #CCC; + border-radius: 3px; + box-shadow: 2px 2px 5px #888888; + width: 100%; + text-align: center; + padding: 3px 0; +} +.h5p-content-pager > button { + min-width: 80px; + font-size: 130%; + line-height: 130%; + border: none; + background: none; + font-family: 'H5P'; + font-size: 1.4em; +} +.h5p-content-pager > button:focus { + outline: 0; +} +.h5p-content-pager > button:last-child { + margin-left: 10px; +} +.h5p-content-pager > .pager-info { + cursor: pointer; + padding: 5px; + border-radius: 3px; +} +.h5p-content-pager > .pager-info:hover { + background-color: #555; + color: #FFF; +} +.h5p-content-pager > .pager-info, +.h5p-content-pager > .h5p-pager-goto { + margin: 0 10px; + line-height: 130%; + display: inline-block; +} + +.h5p-admin-header { + margin-top: 1.5em; +} +#h5p-library-upload-form.h5p-admin-upload-libraries-form { + position: relative; + margin: 0; + +} +.h5p-admin-upload-libraries-form .form-submit { + position: absolute; + top: 0; + right: 0; +} +.h5p-spinner { + padding: 0 0.5em; + font-size: 1.5em; + font-weight: bold; +} +#h5p-admin-container .h5p-admin-center { + text-align: center; +} +.h5p-pagination { + text-align: center; +} +.h5p-pagination > span, .h5p-pagination > input { + margin: 0 1em; +} +.h5p-data-view input[type="text"] { + margin-bottom: 0.5em; + margin-right: 0.5em; + float: left; +} +.h5p-data-view input[type="text"]::-ms-clear { + display: none; +} + +.h5p-data-view th[role="button"] { + cursor: pointer; +} +.h5p-data-view th[role="button"].h5p-sort:after, +.h5p-data-view th[role="button"]:hover:after, +.h5p-data-view th[role="button"].h5p-sort.h5p-reverse:hover:after { + content: "\25BE"; + position: relative; + left: 0.5em; + top: -1px; +} +.h5p-data-view th[role="button"].h5p-sort.h5p-reverse:after, +.h5p-data-view th[role="button"].h5p-sort:hover:after { + content: "\25B4"; + top: -2px; +} +.h5p-data-view th[role="button"]:hover:after, +.h5p-data-view th[role="button"].h5p-sort.h5p-reverse:hover:after, +.h5p-data-view th[role="button"].h5p-sort:hover:after { + color: #999; +} +.h5p-data-view .h5p-facet { + cursor: pointer; + color: #0073aa; + outline: none; +} +.h5p-data-view .h5p-facet:hover, +.h5p-data-view .h5p-facet:active { + color: #00a0d2; +} +.h5p-data-view .h5p-facet:focus { + color: #124964; + box-shadow: 0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8); +} +.h5p-data-view .h5p-facet-wrapper { + line-height: 23px; +} +.h5p-data-view .h5p-facet-tag { + margin: 2px 0 0 0.5em; + font-size: 12px; + background: #e8e8e8; + border: 1px solid #cbcbcc; + border-radius: 5px; + color: #5d5d5d; + padding: 0 24px 0 10px; + display: inline-block; + position: relative; +} +.h5p-data-view .h5p-facet-tag > span { + position: absolute; + right: 0; + top: auto; + bottom: auto; + font-size: 18px; + color: #a2a2a2; + outline: none; + width: 21px; + text-indent: 4px; + letter-spacing: 10px; + overflow: hidden; + cursor: pointer; +} +.h5p-data-view .h5p-facet-tag > span:before { + content: "×"; + font-weight: bold; +} +.h5p-data-view .h5p-facet-tag > span:hover, +.h5p-data-view .h5p-facet-tag > span:focus { + color: #a20000; +} +.h5p-data-view .h5p-facet-tag > span:active { + color: #d20000; +} diff --git a/html/moodle2/mod/hvp/library/styles/h5p-confirmation-dialog.css b/html/moodle2/mod/hvp/library/styles/h5p-confirmation-dialog.css new file mode 100755 index 0000000000..8ada3cda7b --- /dev/null +++ b/html/moodle2/mod/hvp/library/styles/h5p-confirmation-dialog.css @@ -0,0 +1,116 @@ +.h5p-confirmation-dialog-background { + position: absolute; + height: 100%; + width: 100%; + left: 0; + top: 0; + + background: rgba(44, 44, 44, 0.9); + opacity: 1; + visibility: visible; + -webkit-transition: opacity 0.1s, linear 0s, visibility 0s linear 0s; + transition: opacity 0.1s linear 0s, visibility 0s linear 0s; + + z-index: 201; +} + +.h5p-confirmation-dialog-background.hidden { + display: none; +} + +.h5p-confirmation-dialog-background.hiding { + opacity: 0; + visibility: hidden; + -webkit-transition: opacity 0.1s, linear 0s, visibility 0s linear 0.1s; + transition: opacity 0.1s linear 0s, visibility 0s linear 0.1s; +} + +.h5p-confirmation-dialog-popup:focus { + outline: none; +} + +.h5p-confirmation-dialog-popup { + position: absolute; + display: flex; + flex-direction: column; + justify-content: center; + + box-sizing: border-box; + max-width: 35em; + min-width: 25em; + + top: 2em; + left: 50%; + -webkit-transform: translate(-50%, 0%); + -ms-transform: translate(-50%, 0%); + transform: translate(-50%, 0%); + + color: #555; + box-shadow: 0 0 6px 6px rgba(10,10,10,0.3); + + -webkit-transition: transform 0.1s ease-in; + transition: transform 0.1s ease-in; +} + +.h5p-confirmation-dialog-popup.hidden { + -webkit-transform: translate(-50%, 50%); + -ms-transform: translate(-50%, 50%); + transform: translate(-50%, 50%); +} + +.h5p-confirmation-dialog-header { + padding: 1.5em; + background: #fff; + color: #356593; +} + +.h5p-confirmation-dialog-header-text { + font-size: 1.25em; +} + +.h5p-confirmation-dialog-body { + background: #fafbfc; + border-top: solid 1px #dde0e9; + padding: 1.25em 1.5em; +} + +.h5p-confirmation-dialog-text { + margin-bottom: 1.5em; +} + +.h5p-confirmation-dialog-buttons { + float: right; +} + +button.h5p-confirmation-dialog-exit:visited, +button.h5p-confirmation-dialog-exit:link, +button.h5p-confirmation-dialog-exit { + position: absolute; + background: none; + border: none; + font-size: 2.5em; + top: -0.9em; + right: -1.15em; + color: #fff; + cursor: pointer; + text-decoration: none; +} + +button.h5p-confirmation-dialog-exit:focus, +button.h5p-confirmation-dialog-exit:hover { + color: #E4ECF5; +} + +.h5p-confirmation-dialog-exit:before { + font-family: "H5P"; + content: "\e890"; +} + +.h5p-core-button.h5p-confirmation-dialog-confirm-button { + padding-left: 0.75em; + margin-bottom: 0; +} + +.h5p-core-button.h5p-confirmation-dialog-confirm-button:before { + content: "\e601"; +} diff --git a/html/moodle2/mod/hvp/library/styles/h5p-core-button.css b/html/moodle2/mod/hvp/library/styles/h5p-core-button.css new file mode 100755 index 0000000000..0ac05f288d --- /dev/null +++ b/html/moodle2/mod/hvp/library/styles/h5p-core-button.css @@ -0,0 +1,60 @@ +button.h5p-core-button:visited, +button.h5p-core-button:link, +button.h5p-core-button { + font-family: "Open Sans", sans-serif; + font-weight: 600; + font-size: 1em; + line-height: 1.2; + padding: 0.5em 1.25em; + border-radius: 2em; + + background: #2579c6; + color: #fff; + + cursor: pointer; + border: none; + box-shadow: none; + outline: none; + + display: inline-block; + text-align: center; + text-shadow: none; + vertical-align: baseline; + text-decoration: none; + + -webkit-transition: initial; + transition: initial; +} +button.h5p-core-button:focus { + background: #1f67a8; +} +button.h5p-core-button:hover { + background: rgba(31, 103, 168, 0.83); +} +button.h5p-core-button:active { + background: #104888; +} +button.h5p-core-button:before { + font-family: 'H5P'; + padding-right: 0.15em; + font-size: 1.5em; + vertical-align: middle; + line-height: 0.7; +} +button.h5p-core-cancel-button:visited, +button.h5p-core-cancel-button:link, +button.h5p-core-cancel-button { + border: none; + background: none; + color: #a00; + margin-right: 1em; + font-size: 1em; + text-decoration: none; + cursor: pointer; +} +button.h5p-core-cancel-button:hover, +button.h5p-core-cancel-button:focus { + background: none; + border: none; + color: #e40000; +} diff --git a/html/moodle2/mod/hvp/library/styles/h5p.css b/html/moodle2/mod/hvp/library/styles/h5p.css new file mode 100755 index 0000000000..9afdfbb0bb --- /dev/null +++ b/html/moodle2/mod/hvp/library/styles/h5p.css @@ -0,0 +1,439 @@ +/* General CSS for H5P. Licensed under the MIT License.*/ + +/* Custom H5P font to use for icons. */ +@font-face { + font-family: 'h5p'; + src: url('../fonts/h5p-core-16.eot?80e76o'); + src: url('../fonts/h5p-core-16.eot?80e76o#iefix') format('embedded-opentype'), + url('../fonts/h5p-core-16.ttf?80e76o') format('truetype'), + url('../fonts/h5p-core-16.woff?80e76o') format('woff'), + url('../fonts/h5p-core-16.svg?80e76o#h5p-core-15') format('svg'); + font-weight: normal; + font-style: normal; +} + +html.h5p-iframe, html.h5p-iframe > body { + font-family: Sans-Serif; /* Use the browser's default sans-serif font. (Since Heletica doesn't look nice on Windows, and Arial on OS X.) */ + width: 100%; + height: 100%; + margin: 0; + padding: 0; +} +.h5p-semi-fullscreen, .h5p-fullscreen, html.h5p-iframe .h5p-container { + overflow: hidden; +} +.h5p-content { + position: relative; + background: #fefefe; + border: 1px solid #EEE; + border-bottom: none; + box-sizing: border-box; + -moz-box-sizing: border-box; +} +html.h5p-iframe .h5p-content { + font-size: 16px; + line-height: 1.5em; + width: 100%; + height: auto; +} +html.h5p-iframe .h5p-fullscreen .h5p-content, +html.h5p-iframe .h5p-semi-fullscreen .h5p-content { + height: 100%; +} +.h5p-content.h5p-no-frame, +.h5p-fullscreen .h5p-content, +.h5p-semi-fullscreen .h5p-content { + border: 0; +} +.h5p-container { + position: relative; + z-index: 1; +} +.h5p-iframe-wrapper.h5p-fullscreen { + background-color: #000; +} +body.h5p-semi-fullscreen { + position: fixed; + width: 100%; + height: 100%; +} +.h5p-container.h5p-semi-fullscreen { + position: fixed; + top: 0; + left: 0; + z-index: 101; + width: 100%; + height: 100%; + background-color: #FFF; +} + +.h5p-content-controls { + margin: 0; + position: absolute; + right: 0; + top: 0; + z-index: 3; +} +.h5p-fullscreen .h5p-content-controls { + display: none; +} + +.h5p-content-controls > a:link, .h5p-content-controls > a:visited, a.h5p-disable-fullscreen:link, a.h5p-disable-fullscreen:visited { + color: #e5eef6; +} + +.h5p-enable-fullscreen:before { + font-family: 'H5P'; + content: "\e88c"; +} +.h5p-disable-fullscreen:before { + font-family: 'H5P'; + content: "\e891"; +} +.h5p-enable-fullscreen, .h5p-disable-fullscreen { + cursor: pointer; + color: #EEE; + background: rgb(0,0,0); + background: rgba(0,0,0,0.3); + line-height: 0.975em; + font-size: 2em; + width: 1.125em; + height: 0.925em; + text-indent: -0.0875em; + outline: none; +} +.h5p-disable-fullscreen { + line-height: 0.925em; + width: 1.1em; + height: 0.9em; +} +.h5p-enable-fullscreen:hover, .h5p-disable-fullscreen:hover { + background: rgba(0,0,0,0.5); +} +.h5p-semi-fullscreen .h5p-enable-fullscreen { + display: none; +} + +div.h5p-fullscreen { + width: 100%; + height: 100%; +} +.h5p-iframe-wrapper { + width: auto; + height: auto; +} + +.h5p-fullscreen .h5p-iframe-wrapper, +.h5p-semi-fullscreen .h5p-iframe-wrapper { + width: 100%; + height: 100%; +} + +.h5p-iframe-wrapper.h5p-semi-fullscreen { + width: auto; + height: auto; + background: black; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 100001; +} +.h5p-iframe-wrapper.h5p-semi-fullscreen .buttons { + position: absolute; + top: 0; + right: 0; + z-index: 20; +} +.h5p-iframe-wrapper iframe.h5p-iframe { + width: 100%; + height: 100%; + z-index: 10; + overflow: hidden; + border: 0; + display: block; +} + +.h5p-content ul.h5p-actions { + box-sizing: border-box; + -moz-box-sizing: border-box; + overflow: hidden; + list-style: none; + padding: 0px 10px; + margin: 0; + height: 25px; + font-size: 12px; + background: #FAFAFA; + border-top: 1px solid #EEE; + border-bottom: 1px solid #EEE; + clear: both; + font-family: Sans-Serif; +} +.h5p-fullscreen .h5p-actions, .h5p-semi-fullscreen .h5p-actions { + display: none; +} +.h5p-actions > .h5p-button { + float: left; + cursor: pointer; + margin: 0 0.5em 0 0; + background: none; + padding: 0 0.75em 0 0.25em; + vertical-align: top; + color: #999; + text-decoration: none; + outline: none; + line-height: 23px; +} +.h5p-actions > .h5p-button:hover { + color: #666; +} +.h5p-actions > .h5p-button:active, +.h5p-actions > .h5p-button:focus, +.h5p-actions .h5p-link:active, +.h5p-actions .h5p-link:focus { + color: #666; +} +.h5p-actions > .h5p-button:focus, +.h5p-actions .h5p-link:focus { + outline-style: solid; + outline-width: thin; + outline-offset: -2px; + outline-color: #9ecaed; +} +.h5p-actions > .h5p-button:before { + font-family: 'H5P'; + font-size: 1em; + padding-right: 0; + font-size: 1.7em; + line-height: 1.125em; + vertical-align: middle; +} +.h5p-actions > .h5p-button.h5p-export:before { + content: "\e893"; +} +.h5p-actions > .h5p-button.h5p-copyrights:before { + content: "\e88f"; +} +.h5p-actions > .h5p-button.h5p-embed:before { + content: "\e892"; +} +.h5p-actions .h5p-link { + float: right; + margin-right: 0; + font-size: 2.0em; + line-height: 23px; + overflow: hidden; + color: #999; + text-decoration: none; + outline: none; +} +.h5p-actions .h5p-link:before { + font-family: 'H5P'; + content: "\e88e"; + vertical-align: bottom; +} +.h5p-actions > li { + margin: 0; + list-style: none; +} +.h5p-popup-dialog { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 100; + padding: 2em; + box-sizing: border-box; + -moz-box-sizing: border-box; + opacity: 0; + -webkit-transition: opacity 0.2s; + -moz-transition: opacity 0.2s; + -o-transition: opacity 0.2s; + transition: opacity 0.2s; + background:#000; + background:rgba(0,0,0,0.75); +} +.h5p-popup-dialog.h5p-open { + opacity: 1; +} +.h5p-popup-dialog .h5p-inner { + box-sizing: border-box; + -moz-box-sizing: border-box; + background: #fff; + height: 100%; + max-height: 100%; + position: relative; +} +.h5p-popup-dialog .h5p-inner > h2 { + position: absolute; + box-sizing: border-box; + -moz-box-sizing: border-box; + width: 100%; + margin: 0; + background: #eee; + display: block; + color: #656565; + font-size: 1.25em; + padding: 0.325em 0.5em 0.25em; + line-height: 1.25em; + border-bottom: 1px solid #ccc; +} +.h5p-embed-dialog .h5p-inner { + width: 300px; + left: 50%; + top: 50%; + margin: 0 0 0 -150px; + transition: margin 250ms linear 100ms; +} +.h5p-embed-dialog .h5p-embed-code-container, +.h5p-embed-size { + resize: none; + outline: none; + width: 100%; + padding: 0.375em 0.5em 0.25em; + margin: 0; + overflow: hidden; + border: 1px solid #ccc; + box-shadow: 0 1px 2px 0 #d0d0d0 inset; + font-size: 0.875em; + letter-spacing: 0.065em; + font-family: sans-serif; + white-space: pre; + line-height: 1.5em; + height: 2.0714em; + background: #f5f5f5; + box-sizing: border-box; + -moz-box-sizing: border-box; +} +.h5p-embed-dialog .h5p-embed-code-container:focus { + height: 5em; +} +.h5p-embed-size { + width: 3.5em; + text-align: right; + margin: 0.5em 0; + line-height: 2em; +} +.h5p-popup-dialog .h5p-scroll-content { + border-top: 2.25em solid transparent; + padding: 1em; + box-sizing: border-box; + -moz-box-sizing: border-box; + height: 100%; + overflow: auto; + overflow-x: hidden; + overflow-y: auto; + color: #555555; +} +.h5p-popup-dialog .h5p-scroll-content::-webkit-scrollbar { + width: 8px; +} +.h5p-popup-dialog .h5p-scroll-content::-webkit-scrollbar-track { + background: #e0e0e0; +} +.h5p-popup-dialog .h5p-scroll-content::-webkit-scrollbar-thumb { + box-shadow: 0 0 10px #000 inset; + border-radius: 4px; +} +.h5p-popup-dialog .h5p-close { + cursor: pointer; + outline:none +} +.h5p-popup-dialog .h5p-close:after { + font-family: 'H5P'; + content: "\e894"; + font-size: 2em; + position: absolute; + right: 0; + top: 0; + width: 1.125em; + height: 1.125em; + line-height: 1.125em; + color: #656565; + cursor: pointer; + text-indent: -0.065em; +} +.h5p-popup-dialog .h5p-close:hover:after, +.h5p-popup-dialog .h5p-close:focus:after { + color: #454545; +} +.h5p-popup-dialog .h5p-close:active:after { + color: #252525; +} +.h5p-poopup-dialog h2 { + margin: 0.25em 0 0.5em; +} +.h5p-popup-dialog h3 { + margin: 0.75em 0 0.25em; +} +.h5p-popup-dialog dl { + margin: 0.25em 0 0.75em; +} +.h5p-popup-dialog dt { + float: left; + margin: 0 0.75em 0 0; +} +.h5p-popup-dialog dt:after { + content: ':'; +} +.h5p-popup-dialog dd { + margin: 0; +} +.h5p-expander { + cursor: pointer; + font-size: 1.125em; + outline: none; + margin: 0.5em 0 0; + display: inline-block; +} +.h5p-expander:before { + content: "+"; + width: 1em; + display: inline-block; + font-weight: bold; +} +.h5p-expander.h5p-open:before { + content: "-"; + text-indent: 0.125em; +} +.h5p-expander:hover, +.h5p-expander:focus { + color: #303030; +} +.h5p-expander:active { + color: #202020; +} +.h5p-expander-content { + display: none; +} +.h5p-expander-content p { + margin: 0.5em 0; +} +.h5p-content-copyrights { + border-left: 0.25em solid #d0d0d0; + margin-left: 0.25em; + padding-left: 0.25em; +} +.h5p-throbber { + background: url('../images/throbber.gif?ver=1.2.1') 10px center no-repeat; + padding-left: 38px; + min-height: 30px; + line-height: 30px; +} +.h5p-dialog-ok-button { + cursor: default; + float: right; + outline: none; + border: 2px solid #ccc; + padding: 0.25em 0.75em 0.125em; + background: #eee; +} +.h5p-dialog-ok-button:hover, +.h5p-dialog-ok-button:focus { + background: #fafafa; +} +.h5p-dialog-ok-button:active { + background: #eeffee; +} diff --git a/html/moodle2/mod/hvp/library_list.php b/html/moodle2/mod/hvp/library_list.php new file mode 100755 index 0000000000..757b5e3d92 --- /dev/null +++ b/html/moodle2/mod/hvp/library_list.php @@ -0,0 +1,145 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * Responsible for displaying the library list page + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +require_once("../../config.php"); +require_once($CFG->libdir.'/adminlib.php'); +require_once("locallib.php"); + +// No guest autologin. +require_login(0, false); + +$pageurl = new moodle_url('/mod/hvp/library_list.php'); +$PAGE->set_url($pageurl); + +// Inform moodle which menu entry currently is active! +admin_externalpage_setup('h5plibraries'); + +$PAGE->set_title("{$SITE->shortname}: " . get_string('libraries', 'hvp')); + +// Create form for automatically downloading and installing updates +$update_available = \get_config('mod_hvp', 'update_available'); +$current_update = \get_config('mod_hvp', 'current_update'); +if ($update_available !== false && $current_update !== false && $current_update < $update_available) { + $updateform = new \mod_hvp\update_libraries_form(); + if ($formdata = $updateform->get_data()) { + // Update successful, hide form. + $updateform = null; + } +} + +// Create upload libraries form +$uploadform = new \mod_hvp\upload_libraries_form(); +if ($formdata = $uploadform->get_data()) { + // Handle submitted valid form + $h5pStorage = \mod_hvp\framework::instance('storage'); + $h5pStorage->savePackage(null, null, true); +} + +$core = \mod_hvp\framework::instance(); +$numNotFiltered = $core->h5pF->getNumNotFiltered(); +$libraries = $core->h5pF->loadLibraries(); + +// Add settings for each library +$settings = array(); +$i = 0; +foreach ($libraries as $versions) { + foreach ($versions as $library) { + $usage = $core->h5pF->getLibraryUsage($library->id, $numNotFiltered ? true : false); + if ($library->runnable) { + $upgrades = $core->getUpgrades($library, $versions); + $upgradeUrl = empty($upgrades) ? false : (new moodle_url('/mod/hvp/upgrade_content_page.php', array( + 'library_id' => $library->id + )))->out(false); + + $restricted = (isset($library->restricted) && $library->restricted == 1 ? true : false); + $restricted_url = (new moodle_url('/mod/hvp/ajax.php', array( + 'action' => 'restrict_library', + 'token' => \H5PCore::createToken('library_' . $library->id), + 'restrict' => ($restricted ? 0 : 1), + 'library_id' => $library->id + )))->out(false); + } + else { + $upgradeUrl = null; + $restricted = null; + $restricted_url = null; + } + + $settings['libraryList']['listData'][] = array( + 'title' => $library->title . ' (' . \H5PCore::libraryVersion($library) . ')', + 'restricted' => $restricted, + 'restrictedUrl' => $restricted_url, + 'numContent' => $core->h5pF->getNumContent($library->id), + 'numContentDependencies' => $usage['content'] === -1 ? '' : $usage['content'], + 'numLibraryDependencies' => $usage['libraries'], + 'upgradeUrl' => $upgradeUrl, + 'detailsUrl' => null, // Not implemented in Moodle + 'deleteUrl' => null // Not implemented in Moodle + ); + + $i++; + } +} + +// All translations are made server side +$settings['libraryList']['listHeaders'] = array( + get_string('librarylisttitle', 'hvp'), + get_string('librarylistrestricted', 'hvp'), + get_string('librarylistinstances', 'hvp'), + get_string('librarylistinstancedependencies', 'hvp'), + get_string('librarylistlibrarydependencies', 'hvp'), + get_string('librarylistactions', 'hvp') +); + +// Add js +$lib_url = $CFG->httpswwwroot . '/mod/hvp/library/'; + +hvp_admin_add_generic_css_and_js($PAGE, $lib_url, $settings); +$PAGE->requires->js(new moodle_url($lib_url . 'js/h5p-library-list.js' . hvp_get_cache_buster()), true); + +// RENDER PAGE OUTPUT + +echo $OUTPUT->header(); + +// Print any messages +\mod_hvp\framework::printMessages('info', \mod_hvp\framework::messages('info')); +\mod_hvp\framework::printMessages('error', \mod_hvp\framework::messages('error')); + +// Page Header +echo '<h2>' . get_string('libraries', 'hvp') . '</h2>'; + +if (isset($updateform)) { + // Update All Libraries + echo '<h3 class="h5p-admin-header">' . get_string('updatelibraries', 'hvp') . '</h3>'; + $updateform->display(); +} + +// Upload Form +echo '<h3 class="h5p-admin-header">' . get_string('uploadlibraries', 'hvp') . '</h3>'; +$uploadform->display(); + +// Installed Libraries List +echo '<h3 class="h5p-admin-header">' . get_string('installedlibraries', 'hvp') . '</h3>'; +echo '<div id="h5p-admin-container"></div>'; + +echo $OUTPUT->footer(); diff --git a/html/moodle2/mod/hvp/locallib.php b/html/moodle2/mod/hvp/locallib.php new file mode 100755 index 0000000000..7b4dfea80f --- /dev/null +++ b/html/moodle2/mod/hvp/locallib.php @@ -0,0 +1,381 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * Internal library of functions for module hvp + * + * All the hvp specific functions, needed to implement the module + * logic, should go here. Never include this file from your lib.php! + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +defined('MOODLE_INTERNAL') || die(); + +require_once('autoloader.php'); + +/** + * Get array with settings for hvp core + * + * @return array Settings + */ +function hvp_get_core_settings() { + global $USER, $CFG, $COURSE; + + $systemcontext = \context_system::instance(); + $coursecontext = \context_course::instance($COURSE->id); + + $basepath = $CFG->httpswwwroot . '/'; + $ajaxpath = "{$basepath}mod/hvp/ajax.php?contextId={$coursecontext->id}&token="; + + $settings = array( + 'baseUrl' => $basepath, + 'url' => "{$basepath}pluginfile.php/{$coursecontext->id}/mod_hvp", + 'libraryUrl' => "{$basepath}pluginfile.php/{$systemcontext->id}/mod_hvp/libraries", + 'postUserStatistics' => true, + 'ajax' => array( + 'setFinished' => $ajaxpath . \H5PCore::createToken('result') . '&action=set_finished', + 'contentUserData' => $ajaxpath . \H5PCore::createToken('contentuserdata') . '&action=contents_user_data&content_id=:contentId&data_type=:dataType&sub_content_id=:subContentId', + ), + 'saveFreq' => get_config('mod_hvp', 'enable_save_content_state') ? get_config('mod_hvp', 'content_state_frequency') : false, + 'siteUrl' => $CFG->wwwroot, + 'l10n' => array( + 'H5P' => array( + 'fullscreen' => get_string('fullscreen', 'hvp'), + 'disableFullscreen' => get_string('disablefullscreen', 'hvp'), + 'download' => get_string('download', 'hvp'), + 'copyrights' => get_string('copyright', 'hvp'), + 'copyrightInformation' => get_string('copyright', 'hvp'), + 'close' => get_string('close', 'hvp'), + 'title' => get_string('title', 'hvp'), + 'author' => get_string('author', 'hvp'), + 'year' => get_string('year', 'hvp'), + 'source' => get_string('source', 'hvp'), + 'license' => get_string('license', 'hvp'), + 'thumbnail' => get_string('thumbnail', 'hvp'), + 'noCopyrights' => get_string('nocopyright', 'hvp'), + 'downloadDescription' => get_string('downloadtitle', 'hvp'), + 'copyrightsDescription' => get_string('copyrighttitle', 'hvp'), + 'h5pDescription' => get_string('h5ptitle', 'hvp'), + 'contentChanged' => get_string('contentchanged', 'hvp'), + 'startingOver' => get_string('startingover', 'hvp'), + 'confirmDialogHeader' => get_string('confirmdialogheader', 'hvp'), + 'confirmDialogBody' => get_string('confirmdialogbody', 'hvp'), + 'cancelLabel' => get_string('cancellabel', 'hvp'), + 'confirmLabel' => get_string('confirmlabel', 'hvp') + ) + ), + 'user' => array( + 'name' => $USER->firstname . ' ' . $USER->lastname, + 'mail' => $USER->email + ) + ); + + return $settings; +} + +/** + * Get assets (scripts and styles) for hvp core. + * + * @return array + */ +function hvp_get_core_assets() { + global $CFG, $PAGE; + + // Get core settings. + $settings = \hvp_get_core_settings(); + $settings['core'] = array( + 'styles' => array(), + 'scripts' => array() + ); + $settings['loadedJs'] = array(); + $settings['loadedCss'] = array(); + + // Make sure files are reloaded for each plugin update. + $cachebuster = \hvp_get_cache_buster(); + + // Use relative URL to support both http and https. + $liburl = $CFG->httpswwwroot . '/mod/hvp/library/'; + $relpath = '/' . preg_replace('/^[^:]+:\/\/[^\/]+\//', '', $liburl); + + // Add core stylesheets. + foreach (\H5PCore::$styles as $style) { + $settings['core']['styles'][] = $relpath . $style . $cachebuster; + $PAGE->requires->css(new moodle_url($liburl . $style . $cachebuster)); + } + // Add core JavaScript. + foreach (\H5PCore::$scripts as $script) { + $settings['core']['scripts'][] = $relpath . $script . $cachebuster; + $PAGE->requires->js(new moodle_url($liburl . $script . $cachebuster), true); + } + + return $settings; +} + +/** + * Add required assets for displaying the editor. + * + * @param int $id Content being edited. null for creating new content + */ +function hvp_add_editor_assets($id = null) { + global $PAGE, $CFG, $COURSE; + $settings = \hvp_get_core_assets(); + + // Use jQuery and styles from core. + $assets = array( + 'css' => $settings['core']['styles'], + 'js' => $settings['core']['scripts'] + ); + + // Use relative URL to support both http and https. + $url = $CFG->httpswwwroot . '/mod/hvp/'; + $url = '/' . preg_replace('/^[^:]+:\/\/[^\/]+\//', '', $url); + + // Make sure files are reloaded for each plugin update. + $cachebuster = \hvp_get_cache_buster(); + + // Add editor styles + foreach (H5peditor::$styles as $style) { + $assets['css'][] = $url . 'editor/' . $style . $cachebuster; + } + + // Add editor JavaScript + foreach (H5peditor::$scripts as $script) { + // We do not want the creator of the iframe inside the iframe + if ($script !== 'scripts/h5peditor-editor.js') { + $assets['js'][] = $url . 'editor/' . $script . $cachebuster; + } + } + + // Add JavaScript with library framework integration (editor part) + $PAGE->requires->js(new moodle_url('/mod/hvp/editor/scripts/h5peditor-editor.js' . $cachebuster), true); + $PAGE->requires->js(new moodle_url('/mod/hvp/editor/scripts/h5peditor-init.js' . $cachebuster), true); + $PAGE->requires->js(new moodle_url('/mod/hvp/editor.js' . $cachebuster), true); + + // Add translations + $language = \mod_hvp\framework::get_language(); + $languagescript = "editor/language/{$language}.js"; + if (!file_exists("{$CFG->dirroot}/mod/hvp/{$languagescript}")) { + $languagescript = 'editor/language/en.js'; + } + $PAGE->requires->js(new moodle_url('/mod/hvp/' . $languagescript . $cachebuster), true); + + // Add JavaScript settings + $context = \context_course::instance($COURSE->id); + $filespathbase = "{$CFG->httpswwwroot}/pluginfile.php/{$context->id}/mod_hvp/"; + $contentvalidator = $core = \mod_hvp\framework::instance('contentvalidator'); + $editorajaxtoken = \H5PCore::createToken('editorajax'); + $settings['editor'] = array( + 'filesPath' => $filespathbase . ($id ? "content/{$id}" : 'editor'), + 'fileIcon' => array( + 'path' => $url . 'editor/images/binary-file.png', + 'width' => 50, + 'height' => 50, + ), + 'ajaxPath' => "{$url}ajax.php?contextId={$context->id}&token={$editorajaxtoken}&action=", + 'libraryUrl' => $url . 'editor/', + 'copyrightSemantics' => $contentvalidator->getCopyrightSemantics(), + 'assets' => $assets + ); + + if ($id !== null) { + $settings['editor']['nodeVersionId'] = $id; + + // Find cm context + $cm = \get_coursemodule_from_instance('hvp', $id); + $context = \context_module::instance($cm->id); + + // Override content URL + $settings['contents']['cid-'.$id]['contentUrl'] = "{$CFG->httpswwwroot}/pluginfile.php/{$context->id}/mod_hvp/content/{$id}"; + } + + $PAGE->requires->data_for_js('H5PIntegration', $settings, true); +} + +/** + * Add core JS and CSS to page. + * + * @param moodle_page $page + * @param moodle_url|string $liburl + * @param array|null $settings + * @throws \coding_exception + */ +function hvp_admin_add_generic_css_and_js($page, $liburl, $settings = null) { + foreach (\H5PCore::$adminScripts as $script) { + $page->requires->js(new moodle_url($liburl . $script . hvp_get_cache_buster()), true); + } + + if ($settings === null) { + $settings = array(); + } + + $settings['containerSelector'] = '#h5p-admin-container'; + $settings['l10n'] = array( + 'NA' => get_string('notapplicable', 'hvp'), + 'viewLibrary' => '', + 'deleteLibrary' => '', + 'upgradeLibrary' => get_string('upgradelibrarycontent', 'hvp') + ); + + $page->requires->data_for_js('H5PAdminIntegration', $settings, true); + $page->requires->css(new moodle_url($liburl . 'styles/h5p.css' . hvp_get_cache_buster())); + $page->requires->css(new moodle_url($liburl . 'styles/h5p-admin.css' . hvp_get_cache_buster())); + + // Add settings: + $page->requires->data_for_js('h5p', hvp_get_core_settings(), true); +} + +/** + * Get a query string with the plugin version number to include at the end + * of URLs. This is used to force the browser to reload the asset when the + * plugin is updated. + * + * @return string + */ +function hvp_get_cache_buster() { + return '?ver=' . get_config('mod_hvp', 'version'); +} + +/** + * Restrict access to a given content type. + * + * @param int $library_id + * @param bool $restrict + */ +function hvp_restrict_library($libraryid, $restrict) { + global $DB; + $DB->update_record('hvp_libraries', (object) array( + 'id' => $libraryid, + 'restricted' => $restrict ? 1 : 0 + )); +} + +/** + * Handle content upgrade progress + * + * @method hvp_content_upgrade_progress + * @param int $library_id + * @return object An object including the json content for the H5P instances + * (maximum 40) that should be upgraded. + */ +function hvp_content_upgrade_progress($libraryid) { + global $DB; + + $tolibraryid = filter_input(INPUT_POST, 'libraryId'); + + // Verify security token. + if (!\H5PCore::validToken('contentupgrade', required_param('token', PARAM_RAW))) { + print get_string('upgradeinvalidtoken', 'hvp'); + return; + } + + // Get the library we're upgrading to. + $tolibrary = $DB->get_record('hvp_libraries', array( + 'id' => $tolibraryid + )); + if (!$tolibrary) { + print get_string('upgradelibrarymissing', 'hvp'); + return; + } + + // Prepare response. + $out = new stdClass(); + $out->params = array(); + $out->token = \H5PCore::createToken('contentupgrade'); + + // Prepare our interface. + $interface = \mod_hvp\framework::instance('interface'); + + // Get updated params. + $params = filter_input(INPUT_POST, 'params'); + if ($params !== null) { + // Update params. + $params = json_decode($params); + foreach ($params as $id => $param) { + $DB->update_record('hvp', (object) array( + 'id' => $id, + 'main_library_id' => $tolibrary->id, + 'json_content' => $param, + 'filtered' => '' + )); + + // Log content upgrade successful + new \mod_hvp\event( + 'content', 'upgrade', + $id, $DB->get_field_sql("SELECT name FROM {hvp} WHERE id = ?", array($id)), + $tolibrary->machine_name, $tolibrary->major_version . '.' . $tolibrary->minor_version + ); + } + } + + // Get number of contents for this library. + $out->left = $interface->getNumContent($libraryid); + + if ($out->left) { + // Find the 40 first contents using this library version and add to params. + $results = $DB->get_records_sql( + "SELECT id, json_content as params + FROM {hvp} + WHERE main_library_id = ? + ORDER BY name ASC", array($libraryid), 0 , 40 + ); + + foreach ($results as $content) { + $out->params[$content->id] = $content->params; + } + } + + return $out; +} + +/** + * Gets the information needed when content is upgraded + * + * @method hvp_get_library_upgrade_info + * @param string $name + * @param int $major + * @param int $minor + * @return object Library metadata including name, version, semantics and path + * to upgrade script + */ +function hvp_get_library_upgrade_info($name, $major, $minor) { + global $CFG; + + $library = (object) array( + 'name' => $name, + 'version' => (object) array( + 'major' => $major, + 'minor' => $minor + ) + ); + + $core = \mod_hvp\framework::instance(); + + $library->semantics = $core->loadLibrarySemantics($library->name, $library->version->major, $library->version->minor); + if ($library->semantics === null) { + http_response_code(404); + return; + } + + $context = \context_system::instance(); + $libraryfoldername = "{$library->name}-{$library->version->major}.{$library->version->minor}"; + if (\mod_hvp\file_storage::fileExists($context->id, 'libraries', '/' . $libraryfoldername . '/', 'upgrades.js')) { + $basepath = $CFG->httpswwwroot . '/'; + $library->upgradesScript = "{$basepath}pluginfile.php/{$context->id}/mod_hvp/libraries/{$libraryfoldername}/upgrades.js"; + } + + return $library; +} diff --git a/html/moodle2/mod/hvp/mod_form.php b/html/moodle2/mod/hvp/mod_form.php new file mode 100755 index 0000000000..9358e8c33f --- /dev/null +++ b/html/moodle2/mod/hvp/mod_form.php @@ -0,0 +1,275 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * Form for creating new H5P Content + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->dirroot . '/course/moodleform_mod.php'); + +class mod_hvp_mod_form extends moodleform_mod { + + public function definition() { + global $CFG, $DB, $OUTPUT, $COURSE; + + $mform =& $this->_form; + + // Name. + $mform->addElement('text', 'name', get_string('name')); + $mform->setType('name', PARAM_TEXT); + $mform->addRule('name', get_string('maximumchars', '', 255), 'maxlength', 255, 'client'); + + // Intro. + if (method_exists($this, 'standard_intro_elements')) { + $this->standard_intro_elements(); + } + else { + $this->add_intro_editor(false, get_string('intro', 'hvp')); + } + + // Max grade + $mform->addElement('text', 'maximumgrade', get_string('maximumgrade', 'hvp')); + $mform->setType('maximumgrade', PARAM_INT); + $mform->setDefault('maximumgrade', 10); + + // Action. + $h5paction = array(); + $h5paction[] = $mform->createElement('radio', 'h5paction', '', get_string('upload', 'hvp'), 'upload'); + $h5paction[] = $mform->createElement('radio', 'h5paction', '', get_string('create', 'hvp'), 'create'); + $mform->addGroup($h5paction, 'h5pactiongroup', get_string('action', 'hvp'), array('<br/>'), false); + $mform->setDefault('h5paction', 'create'); + + // Upload. + $mform->addElement('filepicker', 'h5pfile', get_string('h5pfile', 'hvp'), null, + array('maxbytes' => $COURSE->maxbytes, 'accepted_types' => '*')); + + // Editor placeholder. + if ($CFG->theme == 'boost') { + $h5peditor = array(); + $h5peditor[] = $mform->createElement('html', '<div class="h5p-editor">' . get_string('javascriptloading', 'hvp') . '</div>'); + $mform->addGroup($h5peditor, 'h5peditorgroup', get_string('editor', 'hvp')); + } + else { + $mform->addElement('static', 'h5peditor', get_string('editor', 'hvp'), '<div class="h5p-editor">' . get_string('javascriptloading', 'hvp') . '</div>'); + } + + // Hidden fields. + $mform->addElement('hidden', 'h5plibrary', ''); + $mform->setType('h5plibrary', PARAM_RAW); + $mform->addElement('hidden', 'h5pparams', ''); + $mform->setType('h5pparams', PARAM_RAW); + + $core = \mod_hvp\framework::instance(); + $displayOptions = $core->getDisplayOptionsForEdit(); + if (isset($displayOptions[\H5PCore::DISPLAY_OPTION_FRAME])) { + // Display options group. + $mform->addElement('header', 'displayoptions', get_string('displayoptions', 'hvp')); + + $mform->addElement('checkbox', \H5PCore::DISPLAY_OPTION_FRAME, get_string('enableframe', 'hvp')); + $mform->setType(\H5PCore::DISPLAY_OPTION_FRAME, PARAM_BOOL); + $mform->setDefault(\H5PCore::DISPLAY_OPTION_FRAME, true); + + if (isset($displayOptions[\H5PCore::DISPLAY_OPTION_DOWNLOAD])) { + $mform->addElement('checkbox', \H5PCore::DISPLAY_OPTION_DOWNLOAD, get_string('enabledownload', 'hvp')); + $mform->setType(\H5PCore::DISPLAY_OPTION_DOWNLOAD, PARAM_BOOL); + $mform->setDefault(\H5PCore::DISPLAY_OPTION_DOWNLOAD, $displayOptions[\H5PCore::DISPLAY_OPTION_DOWNLOAD]); + $mform->disabledIf(\H5PCore::DISPLAY_OPTION_DOWNLOAD, 'frame'); + } + + if (isset($displayOptions[\H5PCore::DISPLAY_OPTION_COPYRIGHT])) { + $mform->addElement('checkbox', \H5PCore::DISPLAY_OPTION_COPYRIGHT, get_string('enablecopyright', 'hvp')); + $mform->setType(\H5PCore::DISPLAY_OPTION_COPYRIGHT, PARAM_BOOL); + $mform->setDefault(\H5PCore::DISPLAY_OPTION_COPYRIGHT, $displayOptions[\H5PCore::DISPLAY_OPTION_COPYRIGHT]); + $mform->disabledIf(\H5PCore::DISPLAY_OPTION_COPYRIGHT, 'frame'); + } + } + + $this->standard_coursemodule_elements(); + + $this->add_action_buttons(); + } + + public function data_preprocessing(&$defaultvalues) { + global $DB; + + $content = null; + if (!empty($defaultvalues['id'])) { + // Load Content + $core = \mod_hvp\framework::instance(); + $content = $core->loadContent($defaultvalues['id']); + if ($content === null) { + print_error('invalidhvp'); + } + } + + // Set default maxgrade + if (isset($content) && isset($content['id']) + && isset($defaultvalues) && isset($defaultvalues['course'])) { + + // Get the gradeitem and set maxgrade + $gradeitem = grade_item::fetch(array( + 'itemtype' => 'mod', + 'itemmodule' => 'hvp', + 'iteminstance' => $content['id'], + 'courseid' => $defaultvalues['course'] + )); + + if (isset($gradeitem) && isset($gradeitem->grademax)) { + $defaultvalues['maximumgrade'] = $gradeitem->grademax; + } + } + + // Aaah.. we meet again h5pfile! + $draftitemid = file_get_submitted_draft_itemid('h5pfile'); + file_prepare_draft_area($draftitemid, $this->context->id, 'mod_hvp', 'package', 0); + $defaultvalues['h5pfile'] = $draftitemid; + + // Individual display options are not stored, must be extracted from disable. + if (isset($defaultvalues['disable'])) { + $h5pcore = \mod_hvp\framework::instance('core'); + $displayoptions = $h5pcore->getDisplayOptionsForEdit($defaultvalues['disable']); + if (isset ($displayoptions[\H5PCore::DISPLAY_OPTION_FRAME])) { + $defaultvalues[\H5PCore::DISPLAY_OPTION_FRAME] = $displayoptions[\H5PCore::DISPLAY_OPTION_FRAME]; + } + if (isset($displayoptions[\H5PCore::DISPLAY_OPTION_DOWNLOAD])) { + $defaultvalues[\H5PCore::DISPLAY_OPTION_DOWNLOAD] = $displayoptions[\H5PCore::DISPLAY_OPTION_DOWNLOAD]; + } + if (isset($displayoptions[\H5PCore::DISPLAY_OPTION_COPYRIGHT])) { + $defaultvalues[\H5PCore::DISPLAY_OPTION_COPYRIGHT] = $displayoptions[\H5PCore::DISPLAY_OPTION_COPYRIGHT]; + } + } + + // Determine default action + if ($content === null && $DB->get_field_sql("SELECT id FROM {hvp_libraries} WHERE runnable = 1", null, IGNORE_MULTIPLE) === false) { + $defaultvalues['h5paction'] = 'upload'; + } + + // Set editor defaults + $defaultvalues['h5plibrary'] = ($content === null ? 0 : H5PCore::libraryToString($content['library'])); + $defaultvalues['h5pparams'] = ($content === null ? '{}' : $core->filterParameters($content)); + + // Add required editor assets. + require_once 'locallib.php'; + \hvp_add_editor_assets($content === null ? null : $defaultvalues['id']); + + // Log editor opened + if ($content === null) { + new \mod_hvp\event('content', 'new'); + } + else { + new \mod_hvp\event( + 'content', 'edit', + $content['id'], + $content['title'], + $content['library']['name'], + $content['library']['majorVersion'] . '.' . $content['library']['minorVersion'] + ); + } + } + + public function validation($data, $files) { + global $CFG; + + $errors = parent::validation($data, $files); + + // Validate max grade as a non-negative numeric value + if (!is_numeric($data['maximumgrade']) || $data['maximumgrade'] < 0) { + $errors['maximumgrade'] = get_string('maximumgradeerror', 'hvp'); + } + + if ($data['h5paction'] === 'upload') { + // Validate uploaded H5P file + if (empty($data['h5pfile'])) { + // Field missing + $errors['h5pfile'] = get_string('required'); + } + else { + $files = $this->get_draft_files('h5pfile'); + if (count($files) < 1) { + // No file uploaded + $errors['h5pfile'] = get_string('required'); + } + else { + // Prepare to validate package + $file = reset($files); + $interface = \mod_hvp\framework::instance('interface'); + + $path = $CFG->tempdir . uniqid('/hvp-'); + $interface->getUploadedH5pFolderPath($path); + $path .= '.h5p'; + $interface->getUploadedH5pPath($path); + $file->copy_content_to($path); + + $h5pvalidator = \mod_hvp\framework::instance('validator'); + if (! $h5pvalidator->isValidPackage()) { + // Errors while validating the package + $infomessages = implode('<br/>', \mod_hvp\framework::messages('info')); + $errormessages = implode('<br/>', \mod_hvp\framework::messages('error')); + $errors['h5pfile'] = ($errormessages ? $errormessages . '<br/>' : '') . $infomessages; + } + } + } + } + else { + // Validate library and params used in editor + $core = \mod_hvp\framework::instance(); + + // Get library array from string + $library = H5PCore::libraryFromString($data['h5plibrary']); + if (!$library) { + $errors['h5peditor'] = get_string('invalidlibrary', 'hvp'); + } + else { + // Check that library exists + $library['libraryId'] = $core->h5pF->getLibraryId($library['machineName'], $library['majorVersion'], $library['minorVersion']); + if (!$library['libraryId']) { + $errors['h5peditor'] = get_string('nosuchlibrary', 'hvp'); + } + else { + $data['h5plibrary'] = $library; + + // Verify that parameters are valid + if (empty($data['h5pparams'])) { + $errors['h5peditor'] = get_string('noparameters', 'hvp'); + } + else { + $params = json_decode($data['h5pparams']); + if ($params === NULL) { + $errors['h5peditor'] = get_string('invalidparameters', 'hvp'); + } + else { + $data['h5pparams'] = $params; + } + } + } + } + } + return $errors; + } + + public function get_data() { + $data = parent::get_data(); + if (!$data) { + return false; + } + return $data; + } +} diff --git a/html/moodle2/mod/hvp/pix/icon.png b/html/moodle2/mod/hvp/pix/icon.png new file mode 100755 index 0000000000..3aeb6a20b7 Binary files /dev/null and b/html/moodle2/mod/hvp/pix/icon.png differ diff --git a/html/moodle2/mod/hvp/pix/icon.svg b/html/moodle2/mod/hvp/pix/icon.svg new file mode 100755 index 0000000000..b484160505 --- /dev/null +++ b/html/moodle2/mod/hvp/pix/icon.svg @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#1D1D1D;} + .st1{fill:#FFFFFF;} +</style> +<g> + <rect class="st0" width="1000" height="1000"/> + <g> + <path class="st1" d="M880,347.5c-20.1-19.2-50.3-28.5-90.6-28.5H682h-29v73H490.7l-13.3,56.3c11.1-5.2,26.8-9.7,37.7-12.3 + c10.9-2.6,21.7-1.8,32.3-1.8c36.1,0,65.3,11.2,87.8,33c22.5,21.8,33.7,49.4,33.7,82.5c0,23.3-5.8,45.7-17.3,67.2 + c-11.6,21.5-28,38.4-49.2,49.7c-7.6,4.1-16,3.8-25.2,10.4H682h29V545h66.1c44.9,0,78.3-10.1,100.2-30.6 + c21.9-20.5,32.8-48.8,32.8-85.2C910.1,393.8,900.1,366.7,880,347.5z M788.6,460.4c-8.7,7.5-23.8,10.6-45.3,10.6H711v-79h36.8 + c20.8,0,35,3.8,42.6,11.7c7.5,7.9,11.3,17.1,11.3,28.4C801.7,443.7,797.3,452.9,788.6,460.4z"/> + <path class="st1" d="M511.5,499.3c-19.5,0-36.3,11.3-44.4,27.6l-97.6-13.3L413.6,319h-58.3H323v152H206V319H94v358h112V545h117 + v132h32.3H459c-16.6-6.6-30.8-11.6-42.5-20.4c-11.9-8.9-21.5-19.3-28.9-30.6c-7.4-11.3-13.2-24-18.1-40.9l97.7-14.1 + c8.1,16.2,24.9,27.3,44.3,27.3c27.4,0,49.6-22.2,49.6-49.6C561,521.5,538.8,499.3,511.5,499.3z"/> + </g> +</g> +</svg> diff --git a/html/moodle2/mod/hvp/renderer.php b/html/moodle2/mod/hvp/renderer.php new file mode 100755 index 0000000000..8298599836 --- /dev/null +++ b/html/moodle2/mod/hvp/renderer.php @@ -0,0 +1,76 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * Defines the renderer for the hvp (H5P) module. + * + * @package mod_hvp + * @copyright 2016 onward Eiz Edddin Al Katrib <eiz@barasoft.co.uk> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +/** + * The renderer for the hvp module. + * + * @copyright 2016 onward Eiz Edddin Al Katrib <eiz@barasoft.co.uk> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class mod_hvp_renderer extends plugin_renderer_base { + + /** + * Alter which stylesheets are loaded for H5P. This is useful for adding + * your own custom styles or replacing existing ones. + * + * @param object $scripts List of stylesheets that will be loaded + * @param array $libraries Array of libraries indexed by the library's machineName + * @param string $embedType Possible values: div, iframe, external, editor + */ + public function hvp_alter_styles(&$scripts, $libraries, $embedType) {} + + /** + * Alter which scripts are loaded for H5P. Useful for adding your + * own custom scripts or replacing existing ones. + * + * @param object $scripts List of JavaScripts that will be loaded + * @param array $libraries Array of libraries indexed by the library's machineName + * @param string $embedType Possible values: div, iframe, external, editor + */ + public function hvp_alter_scripts(&$scripts, $libraries, $embedType) {} + + /** + * Alter semantics before they are processed. This is useful for changing + * how the editor looks and how content parameters are filtered. + * + * @param object $semantics Semantics as object + * @param string $name Machine name of library + * @param int $majorVersion Major version of library + * @param int $minorVersion Minor version of library + */ + public function hvp_alter_semantics(&$semantics, $name, $majorVersion, $minorVersion) {} + + /** + * Alter parameters of H5P content after it has been filtered through + * semantics. This is useful for adapting the content to the current context. + * + * @param object $parameters The content parameters for the library + * @param string $name The machine readable name of the library + * @param int $majorVersion Major version of the library + * @param int $minorVersion Minor version of the library + */ + public function hvp_alter_filtered_parameters(&$parameters, $name, $majorVersion, $minorVersion) {} +} diff --git a/html/moodle2/mod/hvp/settings.php b/html/moodle2/mod/hvp/settings.php new file mode 100755 index 0000000000..7d78c41b76 --- /dev/null +++ b/html/moodle2/mod/hvp/settings.php @@ -0,0 +1,85 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * Administration settings definitions for the hvp module. + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +// Make sure we are called from an internal Moodle site. +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->dirroot . '/mod/hvp/lib.php'); + +// Make sure core is loaded: +$core = \mod_hvp\framework::instance('core'); + +// Redefine the H5P admin menu entry to be expandable. +$modltifolder = new admin_category('modhvpfolder', new lang_string('pluginname', 'mod_hvp'), $module->is_enabled() === false); +// Add the Settings admin menu entry. +$ADMIN->add('modsettings', $modltifolder); +$settings->visiblename = new lang_string('settings', 'mod_hvp'); +// Add the Libraries admin menu entry: +$ADMIN->add('modhvpfolder', $settings); +$ADMIN->add('modhvpfolder', new admin_externalpage('h5plibraries', + get_string('libraries', 'hvp'), new moodle_url('/mod/hvp/library_list.php'))); + +if ($ADMIN->fulltree) { + // Settings is stored on the global $CFG object. + + // Stats tracking + $settings->add( + new admin_setting_configcheckbox('mod_hvp/external_communication', + get_string('externalcommunication', 'hvp'), + get_string('externalcommunication_help', 'hvp', 'href="https://h5p.org/tracking-the-usage-of-h5p" target="_blank"'), + 1)); + + // Content state. + $settings->add( + new admin_setting_configcheckbox('mod_hvp/enable_save_content_state', + get_string('enablesavecontentstate', 'hvp'), + get_string('enablesavecontentstate_help', 'hvp'), 0)); + $settings->add( + new admin_setting_configtext('mod_hvp/content_state_frequency', + get_string('contentstatefrequency', 'hvp'), + get_string('contentstatefrequency_help', 'hvp'), 30, PARAM_INT)); + + // Content state. + $settings->add( + new admin_setting_configcheckbox('mod_hvp/enable_lrs_content_types', + get_string('enabledlrscontenttypes', 'hvp'), + get_string('enabledlrscontenttypes_help', 'hvp'), 0)); + + $choices = array( + H5PDisplayOptionBehaviour::NEVER_SHOW => get_string('displayoptionnevershow', 'hvp'), + H5PDisplayOptionBehaviour::ALWAYS_SHOW => get_string('displayoptionalwaysshow', 'hvp'), + H5PDisplayOptionBehaviour::CONTROLLED_BY_PERMISSIONS => get_string('displayoptionpermissions', 'hvp'), + H5PDisplayOptionBehaviour::CONTROLLED_BY_AUTHOR_DEFAULT_ON => get_string('displayoptionauthoron', 'hvp'), + H5PDisplayOptionBehaviour::CONTROLLED_BY_AUTHOR_DEFAULT_OFF => get_string('displayoptionauthoroff', 'hvp') + ); + + // Display options for H5P frame. + $settings->add(new admin_setting_heading('mod_hvp/display_options', get_string('displayoptions', 'hvp'), '')); + $settings->add(new admin_setting_configcheckbox('mod_hvp/frame', get_string('enableframe', 'hvp'), '', 1)); + $settings->add(new admin_setting_configselect('mod_hvp/export', get_string('enabledownload', 'hvp'), '', H5PDisplayOptionBehaviour::ALWAYS_SHOW, $choices)); + $settings->add(new admin_setting_configcheckbox('mod_hvp/copyright', get_string('enablecopyright', 'hvp'), '', 1)); + $settings->add(new admin_setting_configcheckbox('mod_hvp/icon', get_string('enableabout', 'hvp'), '', 1)); +} + +// Prevent Moodle from adding settings block in standard location. +$settings = null; diff --git a/html/moodle2/mod/hvp/styles.css b/html/moodle2/mod/hvp/styles.css new file mode 100755 index 0000000000..af6996f2cb --- /dev/null +++ b/html/moodle2/mod/hvp/styles.css @@ -0,0 +1,68 @@ +.h5p-data-view table { + width: 100%; + border: 1px solid #e5e5e5; + box-shadow: 0 1px 1px rgba(0,0,0,.04); + table-layout: fixed; +} +.h5p-data-view td, +.h5p-data-view th { + padding: 8px 10px; + color: #555; + vertical-align: top; + font-size: 13px; + line-height: 1.5em; + word-wrap: break-word; +} +.h5p-data-view th { + font-size: 14px; + font-weight: normal; + line-height: 1.4em; + color: #32373c; +} +.h5p-data-view thead th { + border-bottom: 1px solid #e1e1e1; +} +.h5p-data-view tfoot td { + border-top: 1px solid #e1e1e1; + font-size: 14px; +} +.h5p-data-view tr:nth-child(odd) { + background-color: #F9F9F9; +} +.h5p-pagination { + text-align: center; + line-height: 2em; +} +.h5p-pagination > span, .h5p-pagination > input { + margin: 0 1em; +} +.h5p-pagination button { + margin: 0; +} +.h5p-data-view input[type="text"] { + margin-bottom: 0.5em; +} +.h5p-data-view input[type="text"]::-ms-clear { + display: none; +} +.h5p-data-view th[role="button"] { + cursor: pointer; +} +.h5p-data-view th[role="button"].h5p-sort:after, +.h5p-data-view th[role="button"]:hover:after, +.h5p-data-view th[role="button"].h5p-sort.h5p-reverse:hover:after { + content: "\25BE"; + position: relative; + left: 0.5em; + top: -1px; +} +.h5p-data-view th[role="button"].h5p-sort.h5p-reverse:after, +.h5p-data-view th[role="button"].h5p-sort:hover:after { + content: "\25B4"; + top: -2px; +} +.h5p-data-view th[role="button"]:hover:after, +.h5p-data-view th[role="button"].h5p-sort.h5p-reverse:hover:after, +.h5p-data-view th[role="button"].h5p-sort:hover:after { + color: #999; +} diff --git a/html/moodle2/mod/hvp/upgrade_content_page.php b/html/moodle2/mod/hvp/upgrade_content_page.php new file mode 100755 index 0000000000..9e61401f2d --- /dev/null +++ b/html/moodle2/mod/hvp/upgrade_content_page.php @@ -0,0 +1,102 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * Responsible for displaying the content upgrade page + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +require_once("../../config.php"); +require_once($CFG->libdir.'/adminlib.php'); +require_once("locallib.php"); + +// No guest autologin. +require_login(0, false); + +$libraryid = required_param('library_id', PARAM_INT); +$pageurl = new moodle_url('/mod/hvp/upgrade_content_page.php', array('library_id' => $libraryid)); +$PAGE->set_url($pageurl); +admin_externalpage_setup('h5plibraries'); +$PAGE->set_title("{$SITE->shortname}: " . get_string('upgrade', 'hvp')); + +// Inform moodle which menu entry currently is active! +$core = \mod_hvp\framework::instance(); +global $DB; +$results = $DB->get_records_sql('SELECT hl2.id as id, hl2.machine_name as name, hl2.title, hl2.major_version, + hl2.minor_version, hl2.patch_version + FROM {hvp_libraries} hl1 JOIN {hvp_libraries} hl2 ON hl1.machine_name = hl2.machine_name + WHERE hl1.id = ? + ORDER BY hl2.title ASC, hl2.major_version ASC, hl2.minor_version ASC', array($libraryid)); +$versions = array(); +foreach ($results as $result) { + $versions[$result->id] = $result; +} +$library = $versions[$libraryid]; +$upgrades = $core->getUpgrades($library, $versions); + +$PAGE->set_heading(get_string('upgradeheading', 'hvp', $library->title . ' (' . \H5PCore::libraryVersion($library) . ')')); + +// Get num of contents that can be upgraded. +$numcontents = $core->h5pF->getNumContent($libraryid); +if (count($versions) < 2) { + echo $OUTPUT->header(); + echo get_string('upgradenoavailableupgrades', 'hvp'); +} else if ($numcontents === 0) { + echo $OUTPUT->header(); + echo get_string('upgradenothingtodo', 'hvp'); +} else { + $settings = array( + 'libraryInfo' => array( + 'message' => get_string('upgrademessage', 'hvp', $numcontents), + 'inProgress' => get_string('upgradeinprogress', 'hvp'), + 'error' => get_string('upgradeerror', 'hvp'), + 'errorData' => get_string('upgradeerrordata', 'hvp'), + 'errorScript' => get_string('upgradeerrorscript', 'hvp'), + 'errorContent' => get_string('upgradeerrorcontent', 'hvp'), + 'errorParamsBroken' => get_string('upgradeerrorparamsbroken', 'hvp'), + 'done' => get_string('upgradedone', 'hvp', $numcontents) . + ' <a href="' . (new moodle_url('/mod/hvp/library_list.php'))->out(false) . '">' . + get_string('upgradereturn', 'hvp') . '</a>', + 'library' => array( + 'name' => $library->name, + 'version' => $library->major_version . '.' . $library->minor_version, + ), + 'libraryBaseUrl' => (new moodle_url('/mod/hvp/ajax.php', + array('action' => 'getlibrarydataforupgrade')))->out(false) . '&library=', + 'scriptBaseUrl' => (new moodle_url('/mod/hvp/library/js'))->out(false), + 'buster' => hvp_get_cache_buster(), + 'versions' => $upgrades, + 'contents' => $numcontents, + 'buttonLabel' => get_string('upgradebuttonlabel', 'hvp'), + 'infoUrl' => (new moodle_url('/mod/hvp/ajax.php', array('action' => 'libraryupgradeprogress', + 'library_id' => $libraryid)))->out(false), + 'total' => $numcontents, + 'token' => \H5PCore::createToken('contentupgrade') + ) + ); + + // Add JavaScripts. + $liburl = $CFG->httpswwwroot . '/mod/hvp/library/'; + hvp_admin_add_generic_css_and_js($PAGE, $liburl, $settings); + $PAGE->requires->js(new moodle_url($liburl . 'js/h5p-version.js' . hvp_get_cache_buster()), true); + $PAGE->requires->js(new moodle_url($liburl . 'js/h5p-content-upgrade.js' . hvp_get_cache_buster()), true); + echo $OUTPUT->header(); + echo '<div id="h5p-admin-container">' . get_string('enablejavascript', 'hvp') . '</div>'; +} + +echo $OUTPUT->footer(); diff --git a/html/moodle2/mod/hvp/version.php b/html/moodle2/mod/hvp/version.php new file mode 100755 index 0000000000..891e7dfe0a --- /dev/null +++ b/html/moodle2/mod/hvp/version.php @@ -0,0 +1,31 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * @package mod + * @subpackage hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$plugin->version = 2017031300; +$plugin->requires = 2013051403; +$plugin->cron = 0; +$plugin->component = 'mod_hvp'; +$plugin->maturity = MATURITY_STABLE; +$plugin->release = '1.0'; diff --git a/html/moodle2/mod/hvp/view.php b/html/moodle2/mod/hvp/view.php new file mode 100755 index 0000000000..c512d471f6 --- /dev/null +++ b/html/moodle2/mod/hvp/view.php @@ -0,0 +1,201 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * View H5P Content + * + * @package mod_hvp + * @copyright 2016 Joubel AS <contact@joubel.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +require_once("../../config.php"); +require_once("locallib.php"); + +$id = required_param('id', PARAM_INT); + +$url = new \moodle_url('/mod/hvp/view.php', array('id' => $id)); +$PAGE->set_url($url); + +if (! $cm = get_coursemodule_from_id('hvp', $id)) { + print_error('invalidcoursemodule'); +} +if (! $course = $DB->get_record('course', array('id' => $cm->course))) { + print_error('coursemisconf'); +} + +require_course_login($course, false, $cm); + +// Load H5P Core. +$core = \mod_hvp\framework::instance(); + +// Load H5P Content. +$content = $core->loadContent($cm->instance); +if ($content === null) { + print_error('invalidhvp'); +} + +// Log view +new \mod_hvp\event( + 'content', NULL, + $content['id'], $content['title'], + $content['library']['name'], + $content['library']['majorVersion'] . '.' . $content['library']['minorVersion'] +); + +$PAGE->set_title(format_string($content['title'])); +$PAGE->set_heading($course->fullname); + +// Mark viewed by user (if required). +$completion = new completion_info($course); +$completion->set_module_viewed($cm); + +// Attach scripts, styles, etc. from core. +$settings = hvp_get_core_assets(); + +// Display options: +$displayOptions = $core->getDisplayOptionsForView($content['disable'], $content['id']); +// Embed is not supported in Moodle. +$displayOptions[\H5PCore::DISPLAY_OPTION_EMBED] = false; + +// Filter content parameters. +$safeparameters = $core->filterParameters($content); +$decoded_params = json_decode($safeparameters); +$hvpoutput = $PAGE->get_renderer('mod_hvp'); +$hvpoutput->hvp_alter_filtered_parameters( + $decoded_params, + $content['library']['name'], + $content['library']['majorVersion'], + $content['library']['minorVersion'] +); +$safeparameters = json_encode($decoded_params); + +$export = ''; +if ($displayOptions[\H5PCore::DISPLAY_OPTION_DOWNLOAD] && (!isset($CFG->mod_hvp_export) || $CFG->mod_hvp_export === true)) { + // Find course context. + $context = \context_course::instance($course->id); + $hvppath = "{$CFG->httpswwwroot}/pluginfile.php/{$context->id}/mod_hvp"; + $exportfilename = ($content['slug'] ? $content['slug'] . '-' : '') . $content['id'] . '.h5p'; + $export = "{$hvppath}/exports/{$exportfilename}"; +} + +// Find cm context +$context = \context_module::instance($cm->id); + +// Add JavaScript settings for this content. +$cid = 'cid-' . $content['id']; +$settings['contents'][$cid] = array( + 'library' => \H5PCore::libraryToString($content['library']), + 'jsonContent' => $safeparameters, + 'fullScreen' => $content['library']['fullscreen'], + 'exportUrl' => $export, + 'title' => $content['title'], + 'displayOptions' => $displayOptions, + 'url' => "{$CFG->httpswwwroot}/mod/hvp/view.php?id={$id}", + 'contentUrl' => "{$CFG->httpswwwroot}/pluginfile.php/{$context->id}/mod_hvp/content/" . $content['id'], + 'contentUserData' => array( + 0 => \mod_hvp\content_user_data::load_pre_loaded_user_data($content['id']) + ) +); + +// Get assets for this content. +$preloadeddependencies = $core->loadContentDependencies($content['id'], 'preloaded'); +$files = $core->getDependenciesFiles($preloadeddependencies); + +// Determine embed type. +$embedtype = \H5PCore::determineEmbedType($content['embedType'], $content['library']['embedTypes']); + +// Add additional asset files if required. +$hvpoutput->hvp_alter_scripts($files['scripts'], $preloadeddependencies, $embedtype); +$hvpoutput->hvp_alter_styles($files['styles'], $preloadeddependencies, $embedtype); + +if ($embedtype === 'div') { + $context = \context_system::instance(); + $hvppath = "/pluginfile.php/{$context->id}/mod_hvp"; + + // Schedule JavaScripts for loading through Moodle. + foreach ($files['scripts'] as $script) { + $url = $script->path . $script->version; + + // Add URL prefix if not external + $isExternal = strpos($script->path, '://'); + if ($isExternal === FALSE) { + $url = $hvppath . $url; + } + $settings['loadedJs'][] = $url; + $PAGE->requires->js(new moodle_url($isExternal ? $url : $CFG->httpswwwroot . $url), true); + } + + // Schedule stylesheets for loading through Moodle. + foreach ($files['styles'] as $style) { + $url = $style->path . $style->version; + + // Add URL prefix if not external + $isExternal = strpos($style->path, '://'); + if ($isExternal === FALSE) { + $url = $hvppath . $url; + } + $settings['loadedCss'][] = $url; + $PAGE->requires->css(new moodle_url($isExternal ? $url : $CFG->httpswwwroot . $url)); + } +} else { + // JavaScripts and stylesheets will be loaded through h5p.js. + $settings['contents'][$cid]['scripts'] = $core->getAssetsUrls($files['scripts']); + $settings['contents'][$cid]['styles'] = $core->getAssetsUrls($files['styles']); +} + +// Print JavaScript settings to page. +$PAGE->requires->data_for_js('H5PIntegration', $settings, true); + +// Print page HTML. +echo $OUTPUT->header(); +echo $OUTPUT->heading(format_string($content['title'])); +echo '<div class="clearer"></div>'; + +// Print any messages. +\mod_hvp\framework::printMessages('info', \mod_hvp\framework::messages('info')); +\mod_hvp\framework::printMessages('error', \mod_hvp\framework::messages('error')); + +// Print intro. +if (trim(strip_tags($content['intro']))) { + echo $OUTPUT->box_start('mod_introbox', 'hvpintro'); + echo format_module_intro('hvp', (object) array( + 'intro' => $content['intro'], + 'introformat' => $content['introformat'], + ), $cm->id); + echo $OUTPUT->box_end(); +} + +// Print H5P Content +if ($embedtype === 'div') { + echo '<div class="h5p-content" data-content-id="' . $content['id'] . '"></div>'; +} else { + echo '<div class="h5p-iframe-wrapper"><iframe id="h5p-iframe-' . $content['id'] . + '" class="h5p-iframe" data-content-id="' . $content['id'] . + '" style="height:1px" src="about:blank" frameBorder="0" scrolling="no"></iframe></div>'; +} + +// Find cm context +$context = \context_module::instance($cm->id); + +// Trigger module viewed event. +$event = \mod_hvp\event\course_module_viewed::create(array( + 'objectid' => $cm->instance, + 'context' => $context +)); +$event->add_record_snapshot('course_modules', $cm); +$event->trigger(); + +echo $OUTPUT->footer(); diff --git a/html/moodle2/question/type/essaywiris/version.php b/html/moodle2/question/type/essaywiris/version.php index 25f2516a6b..529f9a2fe8 100644 --- a/html/moodle2/question/type/essaywiris/version.php +++ b/html/moodle2/question/type/essaywiris/version.php @@ -16,11 +16,11 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017030800; -$plugin->release = '3.50.1.1021'; +$plugin->version = 2017041000; +$plugin->release = '3.51.0.1022'; $plugin->requires = 2011060313; $plugin->maturity = MATURITY_STABLE; $plugin->component = 'qtype_essaywiris'; $plugin->dependencies = array ( - 'qtype_wq' => 2017030800 + 'qtype_wq' => 2017041000 ); diff --git a/html/moodle2/question/type/matchwiris/version.php b/html/moodle2/question/type/matchwiris/version.php index 4836422bab..e26a1b3e5c 100644 --- a/html/moodle2/question/type/matchwiris/version.php +++ b/html/moodle2/question/type/matchwiris/version.php @@ -16,11 +16,11 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017030800; -$plugin->release = '3.50.1.1021'; +$plugin->version = 2017041000; +$plugin->release = '3.51.0.1022'; $plugin->requires = 2011060313; $plugin->maturity = MATURITY_STABLE; $plugin->component = 'qtype_matchwiris'; $plugin->dependencies = array ( - 'qtype_wq' => 2017030800 + 'qtype_wq' => 2017041000 ); diff --git a/html/moodle2/question/type/multianswerwiris/question.php b/html/moodle2/question/type/multianswerwiris/question.php index 9ce935335f..d6cb99d3c6 100644 --- a/html/moodle2/question/type/multianswerwiris/question.php +++ b/html/moodle2/question/type/multianswerwiris/question.php @@ -159,7 +159,13 @@ private function set_shortanswer_matching_answers(array $response) { $qi = $this->wirisquestioninstance; // Call service. - $request = $builder->newEvalMultipleAnswersRequest($teacheranswers, $studentanswers, $q, $qi); + for ($i = 0; $i < count($studentanswers); $i++) { + $qi->setStudentAnswer($i, $studentanswers[$i]); + } + for ($i = 0; $i < count($teacheranswers); $i++) { + $q->setCorrectAnswer($i, $teacheranswers[$i]); + } + $request = $builder->newFeedbackRequest($this->join_feedback_text(), $q, $qi); $resp = $this->call_wiris_service($request); $qi->update($resp); @@ -273,6 +279,36 @@ public function join_all_text() { return $text; } + /** + * @return String Return all the question text without feedback texts. + */ + public function join_question_text() { + $text = parent::join_question_text(); + // Subquestions. + if (method_exists($question, 'join_question_text')) { + $text .= ' ' .$question->join_question_text(); + } + return $text; + } + + + /** + * + * @return String Return the general feedback text in a single string so WIRIS + * quizzes can extract the variable placeholders. + */ + public function join_feedback_text() { + $text = parent::join_feedback_text(); + // Subquestions. + foreach ($this->subquestions as $key => $question) { + // Numerical question type is also possible but don't have the method. + if (method_exists($question, 'join_feedback_text')) { + $text .= ' ' . $question->join_feedback_text(); + } + } + return $text; + } + public function get_renderer(moodle_page $page) { // Disable Strict standard errors before calling the parent because the // subquestions are not of class question_graded_automatically and diff --git a/html/moodle2/question/type/multianswerwiris/version.php b/html/moodle2/question/type/multianswerwiris/version.php index 8e4c27cef2..391c804e88 100644 --- a/html/moodle2/question/type/multianswerwiris/version.php +++ b/html/moodle2/question/type/multianswerwiris/version.php @@ -16,11 +16,11 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017030800; -$plugin->release = '3.50.1.1021'; +$plugin->version = 2017041000; +$plugin->release = '3.51.0.1022'; $plugin->requires = 2011060313; $plugin->maturity = MATURITY_STABLE; $plugin->component = 'qtype_multianswerwiris'; $plugin->dependencies = array ( - 'qtype_wq' => 2017030800 + 'qtype_wq' => 2017041000 ); diff --git a/html/moodle2/question/type/multichoicewiris/version.php b/html/moodle2/question/type/multichoicewiris/version.php index e86eb4a5d8..7c4ddce65d 100644 --- a/html/moodle2/question/type/multichoicewiris/version.php +++ b/html/moodle2/question/type/multichoicewiris/version.php @@ -16,11 +16,11 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017030800; -$plugin->release = '3.50.1.1021'; +$plugin->version = 2017041000; +$plugin->release = '3.51.0.1022'; $plugin->requires = 2011060313; $plugin->maturity = MATURITY_STABLE; $plugin->component = 'qtype_multichoicewiris'; $plugin->dependencies = array ( - 'qtype_wq' => 2017030800 + 'qtype_wq' => 2017041000 ); diff --git a/html/moodle2/question/type/shortanswerwiris/question.php b/html/moodle2/question/type/shortanswerwiris/question.php index a9a5848e75..7f0cad5dcb 100644 --- a/html/moodle2/question/type/shortanswerwiris/question.php +++ b/html/moodle2/question/type/shortanswerwiris/question.php @@ -62,6 +62,21 @@ public function join_all_text() { return $text; } + /** + * + * @return String Return the general feedback text in a single string so WIRIS + * quizzes can extract the variable placeholders. + */ + public function join_feedback_text() { + $text = parent::join_feedback_text(); + // Answer feedback. + foreach ($this->base->answers as $key => $value) { + $text .= ' ' . $value->feedback; + } + + return $text; + } + public function grade_response(array $response) { $answer = $this->get_matching_answer($response); if ($answer) { @@ -155,15 +170,20 @@ public function get_matching_answer(array $response) { // Build array of correct answers. $correctvalues = array(); $correctanswers = array(); + $i = 0; foreach ($this->base->answers as $answer) { $correctvalues[] = $answer->answer; $correctanswers[] = $answer; + $this->wirisquestion->setCorrectAnswer($i, $answer->answer); + $i++; } // Load instance. $qi = $this->wirisquestioninstance; + // Set correct answer to question instance. + $qi->setStudentAnswer(0, $response['answer']); + // Make call. - $request = $builder->newEvalMultipleAnswersRequest($correctvalues, array($response['answer']), - $this->wirisquestion, $qi); + $request = $builder->newFeedbackRequest($this->join_feedback_text(), $this->wirisquestion, $qi); $response = $this->call_wiris_service($request); $qi->update($response); @@ -179,6 +199,8 @@ public function get_matching_answer(array $response) { } // Backup matching answer. $matchinganswerid = 0; + // Reset variable. + $this->step->set_var('_matching_answer_grade', null); if (!empty($answer)) { $matchinganswerid = $answer->id; if ($max < 1.0) { diff --git a/html/moodle2/question/type/shortanswerwiris/version.php b/html/moodle2/question/type/shortanswerwiris/version.php index d0926a199d..0e7b8acd6e 100644 --- a/html/moodle2/question/type/shortanswerwiris/version.php +++ b/html/moodle2/question/type/shortanswerwiris/version.php @@ -16,11 +16,11 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017030800; -$plugin->release = '3.50.1.1021'; +$plugin->version = 2017041000; +$plugin->release = '3.51.0.1022'; $plugin->requires = 2011060313; $plugin->maturity = MATURITY_STABLE; $plugin->component = 'qtype_shortanswerwiris'; $plugin->dependencies = array ( - 'qtype_wq' => 2017030800 + 'qtype_wq' => 2017041000 ); diff --git a/html/moodle2/question/type/truefalsewiris/version.php b/html/moodle2/question/type/truefalsewiris/version.php index f62f6f48d3..9b723f8c2e 100644 --- a/html/moodle2/question/type/truefalsewiris/version.php +++ b/html/moodle2/question/type/truefalsewiris/version.php @@ -16,10 +16,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017030800; -$plugin->release = '3.50.1.1021'; +$plugin->version = 2017041000; +$plugin->release = '3.51.0.1022'; $plugin->requires = 2011060313; $plugin->component = 'qtype_truefalsewiris'; $plugin->dependencies = array ( - 'qtype_wq' => 2017030800 + 'qtype_wq' => 2017041000 ); diff --git a/html/moodle2/question/type/wq/info.php b/html/moodle2/question/type/wq/info.php index 4fb9c9fcb4..ade6ab2993 100644 --- a/html/moodle2/question/type/wq/info.php +++ b/html/moodle2/question/type/wq/info.php @@ -162,44 +162,44 @@ function wrs_createtablerow($testname, $reporttext, $solutionlink, $condition) { $output .= html_writer::start_tag('tr', array('class' => 'wrs_filter wrs_plugin')); $expectedplugins = array( - 'TrueFalse' => [ + 'TrueFalse' => array( 'name' => get_string('info_test4_pluginname1', 'qtype_wq'), 'path' => $CFG->dirroot . '/question/type/truefalsewiris', 'url' => 'https://moodle.org/plugins/qtype_truefalsewiris' - ], - 'ShortAnswer' => [ + ), + 'ShortAnswer' => array( 'name' => get_string('info_test4_pluginname2', 'qtype_wq'), 'path' => $CFG->dirroot . '/question/type/shortanswerwiris', 'url' => 'https://moodle.org/plugins/qtype_shortanswerwiris' - ], - 'MultiAnswer' => [ + ), + 'MultiAnswer' => array( 'name' => get_string('info_test4_pluginname3', 'qtype_wq'), 'path' => $CFG->dirroot . '/question/type/multianswerwiris', 'url' => 'https://moodle.org/plugins/qtype_multianswerwiris' - ], - 'MultipleChoice' => [ + ), + 'MultipleChoice' => array( 'name' => get_string('info_test4_pluginname4', 'qtype_wq'), 'path' => $CFG->dirroot . '/question/type/multichoicewiris', 'url' => 'https://moodle.org/plugins/qtype_multichoicewiris' - ], - 'Matching' => [ + ), + 'Matching' => array( 'name' => get_string('info_test4_pluginname5', 'qtype_wq'), 'path' => $CFG->dirroot . '/question/type/matchwiris', 'url' => 'https://moodle.org/plugins/qtype_matchwiris' - ], - 'Essay' => [ + ), + 'Essay' => array( 'name' => get_string('info_test4_pluginname6', 'qtype_wq'), 'path' => $CFG->dirroot . '/question/type/essaywiris', 'url' => 'https://moodle.org/plugins/qtype_essaywiris' - ], - 'WQ' => [ + ), + 'WQ' => array( 'name' => get_string('info_test4_pluginname7', 'qtype_wq'), 'path' => $CFG->dirroot . '/question/type/wq', 'url' => 'https://moodle.org/plugins/qtype_shortanswerwiris' - ] + ) ); -$missingplugins = []; -$installedplugins = []; +$missingplugins = array(); +$installedplugins = array(); foreach ($expectedplugins as $key => $plugin) { if (! empty($plugin['path']) ) { diff --git a/html/moodle2/question/type/wq/question.php b/html/moodle2/question/type/wq/question.php index 12cf466d69..e6bd79fd2a 100644 --- a/html/moodle2/question/type/wq/question.php +++ b/html/moodle2/question/type/wq/question.php @@ -280,6 +280,26 @@ public function join_all_text() { return $text; } + /** + * @return String Return all the question text without feedback texts. + */ + public function join_question_text() { + $text = $this->questiontext; + foreach ($this->hints as $hint) { + $tet .= ' ' . $hint->hint; + } + return $text; + } + + /** + * + * @return String Return the general feedback text in a single string so WIRIS + * quizzes can extract the variable placeholders. + */ + public function join_feedback_text() { + return $this->generalfeedback; + } + public function call_wiris_service($request) { global $COURSE; global $USER; diff --git a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/HTMLTools.class.php b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/HTMLTools.class.php index ae00e06baa..996e6d7474 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/HTMLTools.class.php +++ b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/HTMLTools.class.php @@ -4,6 +4,41 @@ class com_wiris_quizzes_impl_HTMLTools { public function __construct() { ; } + public function getAnswerVariables($answers, $keyword) { + $h = new Hash(); + $i = null; + { + $_g1 = 0; $_g = $answers->length; + while($_g1 < $_g) { + $i1 = $_g1++; + $a = $answers[$i1]; + if(!$h->exists($a->type)) { + $h->set($a->type, new Hash()); + } + $h->get($a->type)->set($keyword . _hx_string_rec(($i1 + 1), ""), $a->content); + unset($i1,$a); + } + } + if($answers->length === 1) { + $h->get(_hx_array_get($answers, 0)->type)->set($keyword, _hx_array_get($answers, 0)->content); + } + return $h; + } + public function expandAnswersText($text, $answers, $keyword) { + if($answers === null || $answers->length === 0 || _hx_index_of($text, "#" . $keyword, null) === -1) { + return $text; + } + $h = $this->getAnswerVariables($answers, $keyword); + $textvariables = $h->get(com_wiris_quizzes_impl_MathContent::$TYPE_TEXT); + return $this->expandVariablesText($text, $textvariables); + } + public function expandAnswers($text, $answers, $keyword) { + if($answers === null || $answers->length === 0 || _hx_index_of($text, "#" . $keyword, null) === -1) { + return $text; + } + $h = $this->getAnswerVariables($answers, $keyword); + return $this->expandVariables($text, $h); + } public function setItemSeparator($sep) { $this->separator = (($sep === null) ? "," : $sep); } @@ -1429,8 +1464,43 @@ static function addMathTag($mathml) { static function stripRootTag($xml, $tag) { $xml = trim($xml); if(StringTools::startsWith($xml, "<" . $tag)) { - $xml = _hx_substr($xml, _hx_index_of($xml, ">", null) + 1, null); - $xml = _hx_substr($xml, 0, _hx_last_index_of($xml, "<", null)); + $depth = 1; + $lastOpen = _hx_last_index_of($xml, "<", null); + $lastClose = _hx_last_index_of($xml, ">", null); + $j1 = _hx_index_of($xml, "<" . $tag, 1); + $j2 = _hx_index_of($xml, "</" . $tag, 1); + $j3 = _hx_index_of($xml, "/>", null); + if(_hx_index_of($xml, ">", null) - $j3 !== 1) { + $j3 = -1; + } + while($depth > 0) { + if(($j1 === -1 || $j2 < $j1) && ($j3 === -1 || $j2 < $j3)) { + $depth--; + if($depth > 0) { + $j2 = _hx_index_of($xml, "</" . $tag, $j2 + 1); + } + } else { + if($j1 !== -1 && ($j3 === -1 || $j1 < $j3)) { + $depth++; + $j3 = _hx_index_of($xml, "/>", $j1); + if(_hx_index_of($xml, ">", $j1) - $j3 !== 1) { + $j3 = -1; + } + $j1 = _hx_index_of($xml, "<" . $tag, $j1 + 1); + } else { + $depth--; + $j3 = -1; + } + } + } + if($j2 === $lastOpen) { + $ini = _hx_index_of($xml, ">", null) + 1; + $xml = _hx_substr($xml, $ini, $lastOpen - $ini); + } else { + if($j3 + 1 === $lastClose) { + $xml = ""; + } + } } return $xml; } @@ -1612,6 +1682,19 @@ static function convertEditor2Newlines($mml) { static function emptyCasSession($value) { return $value === null || _hx_index_of($value, "<mo", null) === -1 && _hx_index_of($value, "<mi", null) === -1 && _hx_index_of($value, "<mn", null) === -1 && _hx_index_of($value, "<csymbol", null) === -1; } + static function casSessionLang($value) { + $start = _hx_index_of($value, "<session", null); + if($start === -1) { + return null; + } + $end = _hx_index_of($value, ">", $start + 1); + $start = _hx_index_of($value, "lang", $start); + if($start === -1 || $start > $end) { + return null; + } + $start = _hx_index_of($value, "\"", $start) + 1; + return _hx_substr($value, $start, 2); + } function __toString() { return 'com.wiris.quizzes.impl.HTMLTools'; } } function com_wiris_quizzes_impl_HTMLTools_0(&$this, &$close, &$e, &$i, &$it, &$n, &$open, &$sb, &$separators) { diff --git a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/HTMLToolsUnitTests.class.php b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/HTMLToolsUnitTests.class.php index 63a8e86c6d..3e08ff0057 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/HTMLToolsUnitTests.class.php +++ b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/HTMLToolsUnitTests.class.php @@ -5,6 +5,22 @@ public function __construct() { if(!php_Boot::$skip_constructor) { $this->h = new com_wiris_quizzes_impl_HTMLTools(); }} + public function unitTestStripRootTag() { + $inputs = new _hx_array(array("<math><mi>x</mi></math>", "<math><math/></math>", "<math></math><math/>", "<math><mi>e</mi><mo>+</mo><math><mi>i</mi></math></math>", "<math><math></math><math/><math></math></math><math></math>")); + $outputs = new _hx_array(array("<mi>x</mi>", "<math/>", "<math></math><math/>", "<mi>e</mi><mo>+</mo><math><mi>i</mi></math>", "<math><math></math><math/><math></math></math><math></math>")); + $i = null; + { + $_g1 = 0; $_g = $inputs->length; + while($_g1 < $_g) { + $i1 = $_g1++; + $result = com_wiris_quizzes_impl_HTMLTools::stripRootTag($inputs[$i1], "math"); + if(!($result === $outputs[$i1])) { + throw new HException("Failed srtip root tag test: " . _hx_string_rec($i1, "") . "\x0AExpected: " . $outputs[$i1] . "\x0ABut got: " . $result); + } + unset($result,$i1); + } + } + } public function unitTestUtf8() { $s = com_wiris_quizzes_impl_HTMLToolsUnitTests_0($this) . "a" . com_wiris_quizzes_impl_HTMLToolsUnitTests_1($this) . "a"; $i = com_wiris_system_Utf8::getIterator($s); @@ -267,6 +283,7 @@ public function unitTestUpdateReservedWords() { } } public function run() { + $this->unitTestStripRootTag(); $this->unitTestParseCompoundAnswers(); $this->unitTestUpdateReservedWords(); $this->unitTestReplaceVariablesInHTML(); diff --git a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/QuestionImpl.class.php b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/QuestionImpl.class.php index 2a6c4f7b1e..b0ab317952 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/QuestionImpl.class.php +++ b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/QuestionImpl.class.php @@ -341,7 +341,7 @@ public function update($response) { $tag = $s->getTagName($r); if($tag === com_wiris_quizzes_impl_ResultGetTranslation::$tagName) { $rgt = $r; - $this->wirisCasSession = $rgt->wirisCasSession; + $this->wirisCasSession = trim($rgt->wirisCasSession); unset($rgt); } unset($tag,$s,$r,$i1); diff --git a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/QuestionInstanceImpl.class.php b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/QuestionInstanceImpl.class.php index 5264a3e361..f4e6185efc 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/QuestionInstanceImpl.class.php +++ b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/QuestionInstanceImpl.class.php @@ -155,10 +155,12 @@ public function getAssertionChecks($correctAnswer, $studentAnswer) { unset($j,$i1,$ca); } } - return $res; + $resarray = new _hx_array(array()); + $resarray = $res->copy(); + return $resarray; } } - return null; + return new _hx_array(array()); } public function getStudentAnswersLength() { return com_wiris_quizzes_impl_QuestionInstanceImpl_0($this); @@ -596,26 +598,21 @@ public function getCompoundAnswerChecks($correctAnswer, $studentAnswer, $index) public function getAnswerGrade($correctAnswer, $studentAnswer, $q) { $grade = 0.0; $question = (($q !== null) ? _hx_deref(($q))->getImpl() : null); - if($question !== null && $question->getAssertionIndex(com_wiris_quizzes_impl_Assertion::$EQUIVALENT_FUNCTION, $correctAnswer, $studentAnswer) !== -1) { - $checks = $this->checks->get(_hx_string_rec($studentAnswer, "") . ""); - $grade = $this->prodChecks($checks, $correctAnswer, $studentAnswer); - } else { - if($question !== null && $question->getLocalData(com_wiris_quizzes_impl_LocalData::$KEY_OPENANSWER_COMPOUND_ANSWER) === com_wiris_quizzes_impl_LocalData::$VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE && $question->getLocalData(com_wiris_quizzes_impl_LocalData::$KEY_OPENANSWER_COMPOUND_ANSWER_GRADE) === com_wiris_quizzes_impl_LocalData::$VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTE) { - $distribution = $this->getCompoundGradeDistribution($question->getLocalData(com_wiris_quizzes_impl_LocalData::$KEY_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTION)); - $i = null; - { - $_g1 = 0; $_g = $distribution->length; - while($_g1 < $_g) { - $i1 = $_g1++; - $checks = $this->getCompoundAnswerChecks($correctAnswer, $studentAnswer, $i1); - if($checks !== null) { - if($this->andChecks($checks)) { - $grade += $distribution[$i1]; - } - } - unset($i1,$checks); - } + if($question !== null && $question->getLocalData(com_wiris_quizzes_impl_LocalData::$KEY_OPENANSWER_COMPOUND_ANSWER) === com_wiris_quizzes_impl_LocalData::$VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE && $question->getLocalData(com_wiris_quizzes_impl_LocalData::$KEY_OPENANSWER_COMPOUND_ANSWER_GRADE) === com_wiris_quizzes_impl_LocalData::$VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTE) { + $distribution = $this->getCompoundGradeDistribution($question->getLocalData(com_wiris_quizzes_impl_LocalData::$KEY_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTION)); + $i = null; + { + $_g1 = 0; $_g = $distribution->length; + while($_g1 < $_g) { + $i1 = $_g1++; + $grade += $distribution->a[$i1] * $this->getCompoundAnswerGrade($correctAnswer, $studentAnswer, $i1, $q); + unset($i1); } + } + } else { + if($question !== null && $question->getAssertionIndex(com_wiris_quizzes_impl_Assertion::$EQUIVALENT_FUNCTION, $correctAnswer, $studentAnswer) !== -1) { + $checks = $this->checks->get(_hx_string_rec($studentAnswer, "") . ""); + $grade = $this->prodChecks($checks, $correctAnswer, $studentAnswer); } else { $correct = $this->isAnswerMatching($correctAnswer, $studentAnswer); $grade = (($correct) ? 1.0 : 0.0); @@ -851,12 +848,14 @@ public function expandVariablesText($text) { if(com_wiris_quizzes_impl_MathContent::getMathType($text) === com_wiris_quizzes_impl_MathContent::$TYPE_MATHML) { $text = $h->mathMLToText($text); } - if($this->variables === null || $this->variables->get(com_wiris_quizzes_impl_MathContent::$TYPE_TEXT) === null) { - return $text; - } else { + if($this->variables !== null && $this->variables->get(com_wiris_quizzes_impl_MathContent::$TYPE_TEXT) !== null) { $textvars = $this->variables->get(com_wiris_quizzes_impl_MathContent::$TYPE_TEXT); - return $h->expandVariablesText($text, $textvars); + $text = $h->expandVariablesText($text, $textvars); + } + if($this->userData->answers !== null) { + $text = $h->expandAnswersText($text, $this->userData->answers, $this->getAnswerParameterName()); } + return $text; } public function addAllHashElements($src, $dest) { if($src !== null) { @@ -884,12 +883,25 @@ public function expandVariablesMathMLEval($equation) { return $h->expandVariables($equation, $vars); } } + public function getAnswerParameterName() { + $keyword = $this->getLocalData(com_wiris_quizzes_api_QuizzesConstants::$OPTION_STUDENT_ANSWER_PARAMETER_NAME); + if($keyword === null) { + $keyword = "answer"; + $lang = $this->getLocalData(com_wiris_quizzes_impl_QuestionInstanceImpl::$KEY_ALGORITHM_LANGUAGE); + if($lang !== null && !($lang === com_wiris_quizzes_impl_QuestionInstanceImpl::$DEF_ALGORITHM_LANGUAGE)) { + $keyword = com_wiris_quizzes_impl_Translator::getInstance($lang)->t($keyword); + } + } + return $keyword; + } public function expandVariablesMathML($equation) { $h = new com_wiris_quizzes_impl_HTMLTools(); if(com_wiris_quizzes_impl_MathContent::getMathType($equation) === com_wiris_quizzes_impl_MathContent::$TYPE_TEXT) { $equation = $h->textToMathML($equation); } - return $h->expandVariables($equation, $this->variables); + $equation = $h->expandVariables($equation, $this->variables); + $equation = $h->expandAnswers($equation, $this->userData->answers, $this->getAnswerParameterName()); + return $equation; } public function expandVariables($text) { if($text === null) { @@ -897,7 +909,9 @@ public function expandVariables($text) { } $h = new com_wiris_quizzes_impl_HTMLTools(); $h->setItemSeparator($this->getLocalData(com_wiris_quizzes_impl_LocalData::$KEY_ITEM_SEPARATOR)); - return $h->expandVariables($text, $this->variables); + $text = $h->expandVariables($text, $this->variables); + $text = $h->expandAnswers($text, $this->userData->answers, $this->getAnswerParameterName()); + return $text; } public function defaultLocalData($name) { return null; @@ -987,6 +1001,8 @@ public function __call($m, $a) { } static $tagName = "questionInstance"; static $base64; + static $DEF_ALGORITHM_LANGUAGE = "en"; + static $KEY_ALGORITHM_LANGUAGE = "sessionLang"; function __toString() { return 'com.wiris.quizzes.impl.QuestionInstanceImpl'; } } function com_wiris_quizzes_impl_QuestionInstanceImpl_0(&$this) { diff --git a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/QuizzesBuilderImpl.class.php b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/QuizzesBuilderImpl.class.php index 5249484a67..41d28c194c 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/QuizzesBuilderImpl.class.php +++ b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/QuizzesBuilderImpl.class.php @@ -284,7 +284,7 @@ public function newFeedbackRequest($html, $question, $instance) { $r = $this->newEvalMultipleAnswersRequest(null, null, $question, $instance); $qr = $r; $qi = $instance; - $this->setVariables($html, $qi, $qr); + $this->setVariables($html, $question, $qi, $qr); return $r; } public function newEvalMultipleAnswersRequest($correctAnswers, $userAnswers, $question, $instance) { @@ -494,10 +494,14 @@ public function newEvalMultipleAnswersRequest($correctAnswers, $userAnswers, $qu $ass = $qq->assertions[$i1]; if($ass->isEquivalence()) { $usedcorrectanswers[$ass->getCorrectAnswer()] = true; - $usedanswers[$ass->getAnswer()] = true; + if($ass->getAnswer() < $usedanswers->length) { + $usedanswers[$ass->getAnswer()] = true; + } } else { if($ass->isCheck()) { - $usedanswers[$ass->getAnswer()] = true; + if($ass->getAnswer() < $usedanswers->length) { + $usedanswers[$ass->getAnswer()] = true; + } } } unset($i1,$ass); @@ -573,13 +577,58 @@ public function extractQuestionInstanceVariableNames($qi) { public function getConfiguration() { return com_wiris_quizzes_impl_ConfigurationImpl::getInstance(); } - public function setVariables($html, $qi, $qr) { + public function removeAnswerVariables($variables, $q, $qi) { + $qq = _hx_deref(($q))->getImpl(); + if($qq->getOption(com_wiris_quizzes_api_QuizzesConstants::$OPTION_STUDENT_ANSWER_PARAMETER) === "true") { + $name = $qq->getOption(com_wiris_quizzes_api_QuizzesConstants::$OPTION_STUDENT_ANSWER_PARAMETER_NAME); + $defname = $qq->defaultOption(com_wiris_quizzes_api_QuizzesConstants::$OPTION_STUDENT_ANSWER_PARAMETER_NAME); + if($defname === $name) { + $lang = com_wiris_quizzes_impl_HTMLTools::casSessionLang($qq->getAlgorithm()); + $name = com_wiris_quizzes_impl_Translator::getInstance($lang)->t($name); + } + $n = 0; + $i = null; + { + $_g1 = 0; $_g = $variables->length; + while($_g1 < $_g) { + $i1 = $_g1++; + if(StringTools::startsWith($variables[$i1], $name)) { + $after = _hx_substr($variables[$i1], strlen($name), null); + if(strlen($after) === 0 || com_wiris_util_type_IntegerTools::isInt($after) && Std::parseInt($after) <= $qi->getStudentAnswersLength()) { + $variables[$i1] = null; + $n++; + } + unset($after); + } + unset($i1); + } + } + if($n > 0) { + $newvariables = new _hx_array(array()); + $j = 0; + { + $_g1 = 0; $_g = $variables->length; + while($_g1 < $_g) { + $i1 = $_g1++; + if($variables[$i1] !== null) { + $newvariables[$j++] = $variables[$i1]; + } + unset($i1); + } + } + $variables = $newvariables; + } + } + return $variables; + } + public function setVariables($html, $q, $qi, $qr) { $variables = null; if($html === null) { $variables = $this->extractQuestionInstanceVariableNames($qi); } else { $h = new com_wiris_quizzes_impl_HTMLTools(); $variables = $h->extractVariableNames($html); + $variables = $this->removeAnswerVariables($variables, $q, $qi); } if($variables->length > 0) { $qr->variables($variables, com_wiris_quizzes_impl_MathContent::$TYPE_TEXT); @@ -601,7 +650,7 @@ public function newVariablesRequest($html, $question, $instance) { $qr = new com_wiris_quizzes_impl_QuestionRequestImpl(); $qr->question = $q; $qr->userData = $qi->userData; - $this->setVariables($html, $qi, $qr); + $this->setVariables($html, $q, $qi, $qr); return $qr; } public function readQuestionInstance($xml) { @@ -633,6 +682,20 @@ public function newQuestionInstanceImpl($question) { if("," === $q->getOption(com_wiris_quizzes_api_QuizzesConstants::$OPTION_DECIMAL_SEPARATOR) || "," === $q->getOption(com_wiris_quizzes_api_QuizzesConstants::$OPTION_DIGIT_GROUP_SEPARATOR) && StringTools::startsWith($q->getOption(com_wiris_quizzes_api_QuizzesConstants::$OPTION_FLOAT_FORMAT), ",")) { $qi->setLocalData(com_wiris_quizzes_impl_LocalData::$KEY_ITEM_SEPARATOR, ";"); } + if($q->getOption(com_wiris_quizzes_api_QuizzesConstants::$OPTION_STUDENT_ANSWER_PARAMETER) === "true") { + $answername = $q->getOption(com_wiris_quizzes_api_QuizzesConstants::$OPTION_STUDENT_ANSWER_PARAMETER_NAME); + if($q->defaultOption(com_wiris_quizzes_api_QuizzesConstants::$OPTION_STUDENT_ANSWER_PARAMETER_NAME) === $answername) { + $alg = $q->getAlgorithm(); + if($alg !== null) { + $lang = com_wiris_quizzes_impl_HTMLTools::casSessionLang($alg); + if($lang !== null && !(com_wiris_quizzes_impl_QuestionInstanceImpl::$DEF_ALGORITHM_LANGUAGE === $lang)) { + $qi->setLocalData(com_wiris_quizzes_impl_QuestionInstanceImpl::$KEY_ALGORITHM_LANGUAGE, $lang); + } + } + } else { + $qi->setLocalData(com_wiris_quizzes_api_QuizzesConstants::$OPTION_STUDENT_ANSWER_PARAMETER_NAME, $answername); + } + } } return $qi; } diff --git a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/Strings.class.php b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/Strings.class.php index c3218ab335..fddf22d3b9 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/Strings.class.php +++ b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/impl/Strings.class.php @@ -5,4 +5,4 @@ public function __construct(){} static $lang; function __toString() { return 'com.wiris.quizzes.impl.Strings'; } } -com_wiris_quizzes_impl_Strings::$lang = new _hx_array(array(new _hx_array(array("lang", "en")), new _hx_array(array("comparisonwithstudentanswer", "Comparison with student answer")), new _hx_array(array("otheracceptedanswers", "Other accepted answers")), new _hx_array(array("equivalent_literal", "Literally equal")), new _hx_array(array("equivalent_literal_correct_feedback", "The answer is literally equal to the correct one.")), new _hx_array(array("equivalent_symbolic", "Mathematically equal")), new _hx_array(array("equivalent_symbolic_correct_feedback", "The answer is mathematically equal to the correct one.")), new _hx_array(array("equivalent_set", "Equal as sets")), new _hx_array(array("equivalent_set_correct_feedback", "The answer set is equal to the correct one.")), new _hx_array(array("equivalent_equations", "Equivalent equations")), new _hx_array(array("equivalent_equations_correct_feedback", "The answer has the same solutions as the correct one.")), new _hx_array(array("equivalent_function", "Grading function")), new _hx_array(array("equivalent_function_correct_feedback", "The answer is correct.")), new _hx_array(array("equivalent_all", "Any answer")), new _hx_array(array("any", "any")), new _hx_array(array("gradingfunction", "Grading function")), new _hx_array(array("additionalproperties", "Additional properties")), new _hx_array(array("structure", "Structure")), new _hx_array(array("none", "none")), new _hx_array(array("None", "None")), new _hx_array(array("check_integer_form", "has integer form")), new _hx_array(array("check_integer_form_correct_feedback", "The answer is an integer.")), new _hx_array(array("check_fraction_form", "has fraction form")), new _hx_array(array("check_fraction_form_correct_feedback", "The answer is a fraction.")), new _hx_array(array("check_polynomial_form", "has polynomial form")), new _hx_array(array("check_polynomial_form_correct_feedback", "The answer is a polynomial.")), new _hx_array(array("check_rational_function_form", "has rational function form")), new _hx_array(array("check_rational_function_form_correct_feedback", "The answer is a rational function.")), new _hx_array(array("check_elemental_function_form", "is a combination of elementary functions")), new _hx_array(array("check_elemental_function_form_correct_feedback", "The answer is an elementary expression.")), new _hx_array(array("check_scientific_notation", "is expressed in scientific notation")), new _hx_array(array("check_scientific_notation_correct_feedback", "The answer is expressed in scientific notation.")), new _hx_array(array("more", "More")), new _hx_array(array("check_simplified", "is simplified")), new _hx_array(array("check_simplified_correct_feedback", "The answer is simplified.")), new _hx_array(array("check_expanded", "is expanded")), new _hx_array(array("check_expanded_correct_feedback", "The answer is expanded.")), new _hx_array(array("check_factorized", "is factorized")), new _hx_array(array("check_factorized_correct_feedback", "The answer is factorized.")), new _hx_array(array("check_rationalized", "is rationalized")), new _hx_array(array("check_rationalized_correct_feedback", "The answer is rationalized.")), new _hx_array(array("check_no_common_factor", "doesn't have common factors")), new _hx_array(array("check_no_common_factor_correct_feedback", "The answer doesn't have common factors.")), new _hx_array(array("check_minimal_radicands", "has minimal radicands")), new _hx_array(array("check_minimal_radicands_correct_feedback", "The answer has minimal radicands.")), new _hx_array(array("check_divisible", "is divisible by")), new _hx_array(array("check_divisible_correct_feedback", "The answer is divisible by \${value}.")), new _hx_array(array("check_common_denominator", "has a single common denominator")), new _hx_array(array("check_common_denominator_correct_feedback", "The answer has a single common denominator.")), new _hx_array(array("check_unit", "has unit equivalent to")), new _hx_array(array("check_unit_correct_feedback", "The unit of the answer is \${unit}.")), new _hx_array(array("check_unit_literal", "has unit literally equal to")), new _hx_array(array("check_unit_literal_correct_feedback", "The unit of the answer is \${unit}.")), new _hx_array(array("check_no_more_decimals", "has less or equal decimals than")), new _hx_array(array("check_no_more_decimals_correct_feedback", "The answer has \${digits} or less decimals.")), new _hx_array(array("check_no_more_digits", "has less or equal digits than")), new _hx_array(array("check_no_more_digits_correct_feedback", "The answer has \${digits} or less digits.")), new _hx_array(array("syntax_expression", "General")), new _hx_array(array("syntax_expression_description", "(formulas, expressions, equations, matrices...)")), new _hx_array(array("syntax_expression_correct_feedback", "The answer syntax is correct.")), new _hx_array(array("syntax_quantity", "Quantity")), new _hx_array(array("syntax_quantity_description", "(numbers, measure units, fractions, mixed fractions, ratios...)")), new _hx_array(array("syntax_quantity_correct_feedback", "The answer syntax is correct.")), new _hx_array(array("syntax_list", "List")), new _hx_array(array("syntax_list_description", "(lists without comma separator or brackets)")), new _hx_array(array("syntax_list_correct_feedback", "The answer syntax is correct.")), new _hx_array(array("syntax_string", "Text")), new _hx_array(array("syntax_string_description", "(words, sentences, character strings)")), new _hx_array(array("syntax_string_correct_feedback", "The answer syntax is correct.")), new _hx_array(array("none", "none")), new _hx_array(array("edit", "Edit")), new _hx_array(array("accept", "OK")), new _hx_array(array("cancel", "Cancel")), new _hx_array(array("explog", "exp/log")), new _hx_array(array("trigonometric", "trigonometric")), new _hx_array(array("hyperbolic", "hyperbolic")), new _hx_array(array("arithmetic", "arithmetic")), new _hx_array(array("all", "all")), new _hx_array(array("tolerance", "Tolerance")), new _hx_array(array("relative", "relative")), new _hx_array(array("relativetolerance", "Relative tolerance")), new _hx_array(array("precision", "Precision")), new _hx_array(array("implicit_times_operator", "Invisible times operator")), new _hx_array(array("times_operator", "Times operator")), new _hx_array(array("imaginary_unit", "Imaginary unit")), new _hx_array(array("mixedfractions", "Mixed fractions")), new _hx_array(array("constants", "Constants")), new _hx_array(array("functions", "Functions")), new _hx_array(array("userfunctions", "User functions")), new _hx_array(array("units", "Units")), new _hx_array(array("unitprefixes", "Unit prefixes")), new _hx_array(array("syntaxparams", "Syntax options")), new _hx_array(array("syntaxparams_expression", "Options for general")), new _hx_array(array("syntaxparams_quantity", "Options for quantity")), new _hx_array(array("syntaxparams_list", "Options for list")), new _hx_array(array("allowedinput", "Allowed input")), new _hx_array(array("manual", "Manual")), new _hx_array(array("correctanswer", "Correct answer")), new _hx_array(array("variables", "Variables")), new _hx_array(array("validation", "Validation")), new _hx_array(array("preview", "Preview")), new _hx_array(array("correctanswertabhelp", "Insert the correct answer using WIRIS editor. Select also the behaviour for the formula editor when used by the student.\x0A")), new _hx_array(array("assertionstabhelp", "Select which properties the student answer has to verify. For example, if it has to be simplified, factorized, expressed using physical units or have a specific numerical precision.")), new _hx_array(array("variablestabhelp", "Write an algorithm with WIRIS cas to create random variables: numbers, expressions, plots or a grading function.\x0AYou can also specify the output format of the variables shown to the student.\x0A")), new _hx_array(array("testtabhelp", "Insert a possible student answer to simulate the behaviour of the question. You are using the same tool that the student will use.\x0ANote that you can also test the evaluation criteria, success and automatic feedback.\x0A")), new _hx_array(array("start", "Start")), new _hx_array(array("test", "Test")), new _hx_array(array("clicktesttoevaluate", "Click Test button to validate the current answer.")), new _hx_array(array("correct", "Correct!")), new _hx_array(array("incorrect", "Incorrect!")), new _hx_array(array("partiallycorrect", "Partially correct!")), new _hx_array(array("inputmethod", "Input method")), new _hx_array(array("compoundanswer", "Compound answer")), new _hx_array(array("answerinputinlineeditor", "WIRIS editor embedded")), new _hx_array(array("answerinputpopupeditor", "WIRIS editor in popup")), new _hx_array(array("answerinputplaintext", "Plain text input field")), new _hx_array(array("showauxiliarcas", "Include WIRIS cas")), new _hx_array(array("initialcascontent", "Initial content")), new _hx_array(array("tolerancedigits", "Tolerance digits")), new _hx_array(array("validationandvariables", "Validation and variables")), new _hx_array(array("algorithmlanguage", "Algorithm language")), new _hx_array(array("calculatorlanguage", "Calculator language")), new _hx_array(array("hasalgorithm", "Has algorithm")), new _hx_array(array("comparison", "Comparison")), new _hx_array(array("properties", "Properties")), new _hx_array(array("studentanswer", "Student answer")), new _hx_array(array("poweredbywiris", "Powered by WIRIS")), new _hx_array(array("yourchangeswillbelost", "Your changes will be lost if you leave the window.")), new _hx_array(array("outputoptions", "Output options")), new _hx_array(array("catalan", "Català")), new _hx_array(array("english", "English")), new _hx_array(array("spanish", "Español")), new _hx_array(array("estonian", "Eesti")), new _hx_array(array("basque", "Euskara")), new _hx_array(array("french", "Français")), new _hx_array(array("german", "Deutsch")), new _hx_array(array("italian", "Italiano")), new _hx_array(array("dutch", "Nederlands")), new _hx_array(array("portuguese", "Português (Portugal)")), new _hx_array(array("javaAppletMissing", "Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>.")), new _hx_array(array("allanswerscorrect", "All answers must be correct")), new _hx_array(array("distributegrade", "Distribute grade")), new _hx_array(array("no", "No")), new _hx_array(array("add", "Add")), new _hx_array(array("replaceeditor", "Replace editor")), new _hx_array(array("list", "List")), new _hx_array(array("questionxml", "Question XML")), new _hx_array(array("grammarurl", "Grammar URL")), new _hx_array(array("reservedwords", "Reserved words")), new _hx_array(array("forcebrackets", "Lists always need curly brackets \"{}\".")), new _hx_array(array("commaasitemseparator", "Use comma \",\" as list item separator.")), new _hx_array(array("confirmimportdeprecated", "Import the question? \x0AThe question you are about to open contains deprecated features. The import process may change slightly the behavior of the question. It is highly recommended that you carefully test de question after import.")), new _hx_array(array("comparesets", "Compare as sets")), new _hx_array(array("nobracketslist", "Lists without brackets")), new _hx_array(array("warningtoleranceprecision", "Less precision digits than tolerance digits.")), new _hx_array(array("actionimport", "Import")), new _hx_array(array("actionexport", "Export")), new _hx_array(array("usecase", "Match case")), new _hx_array(array("usespaces", "Match spaces")), new _hx_array(array("notevaluate", "Keep arguments unevaluated")), new _hx_array(array("separators", "Separators")), new _hx_array(array("comma", "Comma")), new _hx_array(array("commarole", "Role of the comma ',' character")), new _hx_array(array("point", "Point")), new _hx_array(array("pointrole", "Role of the point '.' character")), new _hx_array(array("space", "Space")), new _hx_array(array("spacerole", "Role of the space character")), new _hx_array(array("decimalmark", "Decimal digits")), new _hx_array(array("digitsgroup", "Digit groups")), new _hx_array(array("listitems", "List items")), new _hx_array(array("nothing", "Nothing")), new _hx_array(array("intervals", "Intervals")), new _hx_array(array("warningprecision15", "Precision must be between 1 and 15.")), new _hx_array(array("decimalSeparator", "Decimal")), new _hx_array(array("thousandsSeparator", "Thousands")), new _hx_array(array("notation", "Notation")), new _hx_array(array("invisible", "Invisible")), new _hx_array(array("auto", "Auto")), new _hx_array(array("fixedDecimal", "Fixed")), new _hx_array(array("floatingDecimal", "Decimal")), new _hx_array(array("scientific", "Scientific")), new _hx_array(array("example", "Example")), new _hx_array(array("warningreltolfixedprec", "Relative tolerance with fixed decimal notation.")), new _hx_array(array("warningabstolfloatprec", "Absolute tolerance with floating decimal notation.")), new _hx_array(array("answerinputinlinehand", "WIRIS hand embedded")), new _hx_array(array("absolutetolerance", "Absolute tolerance")), new _hx_array(array("clicktoeditalgorithm", "Your browser doesn't <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">support Java</a>. Click the button to download and run WIRIS cas application to edit the question algorithm.")), new _hx_array(array("launchwiriscas", "Launch WIRIS cas")), new _hx_array(array("sendinginitialsession", "Sending initial session...")), new _hx_array(array("waitingforupdates", "Waiting for updates...")), new _hx_array(array("sessionclosed", "Comunication closed.")), new _hx_array(array("gotsession", "Received revision \${n}.")), new _hx_array(array("thecorrectansweris", "The correct answer is")), new _hx_array(array("poweredby", "Powered by")), new _hx_array(array("refresh", "Renew correct answer")), new _hx_array(array("fillwithcorrect", "Fill with correct answer")), new _hx_array(array("lang", "es")), new _hx_array(array("comparisonwithstudentanswer", "Comparación con la respuesta del estudiante")), new _hx_array(array("otheracceptedanswers", "Otras respuestas aceptadas")), new _hx_array(array("equivalent_literal", "Literalmente igual")), new _hx_array(array("equivalent_literal_correct_feedback", "La respuesta es literalmente igual a la correcta.")), new _hx_array(array("equivalent_symbolic", "Matemáticamente igual")), new _hx_array(array("equivalent_symbolic_correct_feedback", "La respuesta es matemáticamente igual a la correcta.")), new _hx_array(array("equivalent_set", "Igual como conjuntos")), new _hx_array(array("equivalent_set_correct_feedback", "El conjunto de respuestas es igual al correcto.")), new _hx_array(array("equivalent_equations", "Ecuaciones equivalentes")), new _hx_array(array("equivalent_equations_correct_feedback", "La respuesta tiene las soluciones requeridas.")), new _hx_array(array("equivalent_function", "Función de calificación")), new _hx_array(array("equivalent_function_correct_feedback", "La respuesta es correcta.")), new _hx_array(array("equivalent_all", "Cualquier respuesta")), new _hx_array(array("any", "cualquier")), new _hx_array(array("gradingfunction", "Función de calificación")), new _hx_array(array("additionalproperties", "Propiedades adicionales")), new _hx_array(array("structure", "Estructura")), new _hx_array(array("none", "ninguno")), new _hx_array(array("None", "Ninguno")), new _hx_array(array("check_integer_form", "tiene forma de número entero")), new _hx_array(array("check_integer_form_correct_feedback", "La respuesta es un número entero.")), new _hx_array(array("check_fraction_form", "tiene forma de fracción")), new _hx_array(array("check_fraction_form_correct_feedback", "La respuesta es una fracción.")), new _hx_array(array("check_polynomial_form", "tiene forma de polinomio")), new _hx_array(array("check_polynomial_form_correct_feedback", "La respuesta es un polinomio.")), new _hx_array(array("check_rational_function_form", "tiene forma de función racional")), new _hx_array(array("check_rational_function_form_correct_feedback", "La respuesta es una función racional.")), new _hx_array(array("check_elemental_function_form", "es una combinación de funciones elementales")), new _hx_array(array("check_elemental_function_form_correct_feedback", "La respuesta es una expresión elemental.")), new _hx_array(array("check_scientific_notation", "está expresada en notación científica")), new _hx_array(array("check_scientific_notation_correct_feedback", "La respuesta está expresada en notación científica.")), new _hx_array(array("more", "Más")), new _hx_array(array("check_simplified", "está simplificada")), new _hx_array(array("check_simplified_correct_feedback", "La respuesta está simplificada.")), new _hx_array(array("check_expanded", "está expandida")), new _hx_array(array("check_expanded_correct_feedback", "La respuesta está expandida.")), new _hx_array(array("check_factorized", "está factorizada")), new _hx_array(array("check_factorized_correct_feedback", "La respuesta está factorizada.")), new _hx_array(array("check_rationalized", "está racionalizada")), new _hx_array(array("check_rationalized_correct_feedback", "La respuseta está racionalizada.")), new _hx_array(array("check_no_common_factor", "no tiene factores comunes")), new _hx_array(array("check_no_common_factor_correct_feedback", "La respuesta no tiene factores comunes.")), new _hx_array(array("check_minimal_radicands", "tiene radicandos minimales")), new _hx_array(array("check_minimal_radicands_correct_feedback", "La respuesta tiene los radicandos minimales.")), new _hx_array(array("check_divisible", "es divisible por")), new _hx_array(array("check_divisible_correct_feedback", "La respuesta es divisible por \${value}.")), new _hx_array(array("check_common_denominator", "tiene denominador común")), new _hx_array(array("check_common_denominator_correct_feedback", "La respuesta tiene denominador común.")), new _hx_array(array("check_unit", "tiene unidad equivalente a")), new _hx_array(array("check_unit_correct_feedback", "La unidad de respuesta es \${unit}.")), new _hx_array(array("check_unit_literal", "tiene unidad literalmente igual a")), new _hx_array(array("check_unit_literal_correct_feedback", "La unidad de respuesta es \${unit}.")), new _hx_array(array("check_no_more_decimals", "tiene menos decimales o exactamente")), new _hx_array(array("check_no_more_decimals_correct_feedback", "La respuesta tiene \${digits} o menos decimales.")), new _hx_array(array("check_no_more_digits", "tiene menos dígitos o exactamente")), new _hx_array(array("check_no_more_digits_correct_feedback", "La respuesta tiene \${digits} o menos dígitos.")), new _hx_array(array("syntax_expression", "General")), new _hx_array(array("syntax_expression_description", "(fórmulas, expresiones, ecuaciones, matrices ...)")), new _hx_array(array("syntax_expression_correct_feedback", "La sintaxis de la respuesta es correcta.")), new _hx_array(array("syntax_quantity", "Cantidad")), new _hx_array(array("syntax_quantity_description", "(números, unidades de medida, fracciones, fracciones mixtas, razones...)")), new _hx_array(array("syntax_quantity_correct_feedback", "La sintaxis de la respuesta es correcta.")), new _hx_array(array("syntax_list", "Lista")), new _hx_array(array("syntax_list_description", "(listas sin coma separadora o paréntesis)")), new _hx_array(array("syntax_list_correct_feedback", "La sintaxis de la respuesta es correcta.")), new _hx_array(array("syntax_string", "Texto")), new _hx_array(array("syntax_string_description", "(palabras, frases, cadenas de caracteres)")), new _hx_array(array("syntax_string_correct_feedback", "La sintaxis de la respuesta es correcta.")), new _hx_array(array("none", "ninguno")), new _hx_array(array("edit", "Editar")), new _hx_array(array("accept", "Aceptar")), new _hx_array(array("cancel", "Cancelar")), new _hx_array(array("explog", "exp/log")), new _hx_array(array("trigonometric", "trigonométricas")), new _hx_array(array("hyperbolic", "hiperbólicas")), new _hx_array(array("arithmetic", "aritmética")), new _hx_array(array("all", "todo")), new _hx_array(array("tolerance", "Tolerancia")), new _hx_array(array("relative", "relativa")), new _hx_array(array("relativetolerance", "Tolerancia relativa")), new _hx_array(array("precision", "Precisión")), new _hx_array(array("implicit_times_operator", "Omitir producto")), new _hx_array(array("times_operator", "Operador producto")), new _hx_array(array("imaginary_unit", "Unidad imaginaria")), new _hx_array(array("mixedfractions", "Fracciones mixtas")), new _hx_array(array("constants", "Constantes")), new _hx_array(array("functions", "Funciones")), new _hx_array(array("userfunctions", "Funciones de usuario")), new _hx_array(array("units", "Unidades")), new _hx_array(array("unitprefixes", "Prefijos de unidades")), new _hx_array(array("syntaxparams", "Opciones de sintaxis")), new _hx_array(array("syntaxparams_expression", "Opciones para general")), new _hx_array(array("syntaxparams_quantity", "Opciones para cantidad")), new _hx_array(array("syntaxparams_list", "Opciones para lista")), new _hx_array(array("allowedinput", "Entrada permitida")), new _hx_array(array("manual", "Manual")), new _hx_array(array("correctanswer", "Respuesta correcta")), new _hx_array(array("variables", "Variables")), new _hx_array(array("validation", "Validación")), new _hx_array(array("preview", "Vista previa")), new _hx_array(array("correctanswertabhelp", "Introduzca la respuesta correcta utilizando WIRIS editor. Seleccione también el comportamiento del editor de fórmulas cuando sea utilizado por el estudiante.\x0A")), new _hx_array(array("assertionstabhelp", "Seleccione las propiedades que deben cumplir las respuestas de estudiante. Por ejemplo, si tiene que estar simplificado, factorizado, expresado utilizando unidades físicas o tener una precisión numérica específica.")), new _hx_array(array("variablestabhelp", "Escriba un algoritmo con WIRIS CAS para crear variables aleatorias: números, expresiones, gráficas o funciones de calificación.\x0ATambién puede especificar el formato de salida de las variables que se muestran a los estudiantes.\x0A")), new _hx_array(array("testtabhelp", "Insertar una posible respuesta de estudiante para simular el comportamiento de la pregunta. Está usted utilizando la misma herramienta que el estudiante utilizará.\x0AObserve que también se pueden probar los criterios de evaluación, el éxito y la retroalimentación automática.\x0A")), new _hx_array(array("start", "Inicio")), new _hx_array(array("test", "Prueba")), new _hx_array(array("clicktesttoevaluate", "Haga clic en botón de prueba para validar la respuesta actual.")), new _hx_array(array("correct", "¡correcto!")), new _hx_array(array("incorrect", "¡incorrecto!")), new _hx_array(array("partiallycorrect", "¡parcialmente correcto!")), new _hx_array(array("inputmethod", "Método de entrada")), new _hx_array(array("compoundanswer", "Respuesta compuesta")), new _hx_array(array("answerinputinlineeditor", "WIRIS editor incrustado")), new _hx_array(array("answerinputpopupeditor", "WIRIS editor en una ventana emergente")), new _hx_array(array("answerinputplaintext", "Campo de entrada de texto llano")), new _hx_array(array("showauxiliarcas", "Incluir WIRIS CAS")), new _hx_array(array("initialcascontent", "Contenido inicial")), new _hx_array(array("tolerancedigits", "Dígitos de tolerancia")), new _hx_array(array("validationandvariables", "Validación y variables")), new _hx_array(array("algorithmlanguage", "Idioma del algoritmo")), new _hx_array(array("calculatorlanguage", "Idioma de la calculadora")), new _hx_array(array("hasalgorithm", "Tiene algoritmo")), new _hx_array(array("comparison", "Comparación")), new _hx_array(array("properties", "Propiedades")), new _hx_array(array("studentanswer", "Respuesta del estudiante")), new _hx_array(array("poweredbywiris", "Powered by WIRIS")), new _hx_array(array("yourchangeswillbelost", "Sus cambios se perderán si abandona la ventana.")), new _hx_array(array("outputoptions", "Opciones de salida")), new _hx_array(array("catalan", "Català")), new _hx_array(array("english", "English")), new _hx_array(array("spanish", "Español")), new _hx_array(array("estonian", "Eesti")), new _hx_array(array("basque", "Euskara")), new _hx_array(array("french", "Français")), new _hx_array(array("german", "Deutsch")), new _hx_array(array("italian", "Italiano")), new _hx_array(array("dutch", "Nederlands")), new _hx_array(array("portuguese", "Português (Portugal)")), new _hx_array(array("javaAppletMissing", "Aviso! Este componente requiere <a href=\"http://www.java.com/es/\">instalar el plugin de Java</a> o quizás es suficiente <a href=\"http://www.java.com/es/download/help/enable_browser.xml\">activar el plugin de Java</a>.")), new _hx_array(array("allanswerscorrect", "Todas las respuestas deben ser correctas")), new _hx_array(array("distributegrade", "Distribuir la nota")), new _hx_array(array("no", "No")), new _hx_array(array("add", "Añadir")), new _hx_array(array("replaceeditor", "Sustituir editor")), new _hx_array(array("list", "Lista")), new _hx_array(array("questionxml", "Question XML")), new _hx_array(array("grammarurl", "Grammar URL")), new _hx_array(array("reservedwords", "Palabras reservadas")), new _hx_array(array("forcebrackets", "Las listas siempre necesitan llaves \"{}\".")), new _hx_array(array("commaasitemseparator", "Utiliza la coma \",\" como separador de elementos de listas.")), new _hx_array(array("confirmimportdeprecated", "Importar la pregunta?\x0AEsta pregunta tiene características obsoletas. El proceso de importación puede modificar el comportamiento de la pregunta. Revise cuidadosamente la pregunta antes de utilizarla.")), new _hx_array(array("comparesets", "Compara como conjuntos")), new _hx_array(array("nobracketslist", "Listas sin llaves")), new _hx_array(array("warningtoleranceprecision", "Precisión menor que la tolerancia.")), new _hx_array(array("actionimport", "Importar")), new _hx_array(array("actionexport", "Exportar")), new _hx_array(array("usecase", "Coincidir mayúsculas y minúsculas")), new _hx_array(array("usespaces", "Coincidir espacios")), new _hx_array(array("notevaluate", "Mantener los argumentos sin evaluar")), new _hx_array(array("separators", "Separadores")), new _hx_array(array("comma", "Coma")), new _hx_array(array("commarole", "Rol del caracter coma ','")), new _hx_array(array("point", "Punto")), new _hx_array(array("pointrole", "Rol del caracter punto '.'")), new _hx_array(array("space", "Espacio")), new _hx_array(array("spacerole", "Rol del caracter espacio")), new _hx_array(array("decimalmark", "Decimales")), new _hx_array(array("digitsgroup", "Miles")), new _hx_array(array("listitems", "Elementos de lista")), new _hx_array(array("nothing", "Ninguno")), new _hx_array(array("intervals", "Intervalos")), new _hx_array(array("warningprecision15", "La precisión debe estar entre 1 y 15.")), new _hx_array(array("decimalSeparator", "Decimales")), new _hx_array(array("thousandsSeparator", "Miles")), new _hx_array(array("notation", "Notación")), new _hx_array(array("invisible", "Invisible")), new _hx_array(array("auto", "Auto")), new _hx_array(array("fixedDecimal", "Fija")), new _hx_array(array("floatingDecimal", "Decimal")), new _hx_array(array("scientific", "Científica")), new _hx_array(array("example", "Ejemplo")), new _hx_array(array("warningreltolfixedprec", "Tolerancia relativa con notación de coma fija.")), new _hx_array(array("warningabstolfloatprec", "Tolerancia absoluta con notación de coma flotante.")), new _hx_array(array("answerinputinlinehand", "WIRIS hand incrustado")), new _hx_array(array("absolutetolerance", "Tolerancia absoluta")), new _hx_array(array("clicktoeditalgorithm", "Su navegador no <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">soporta applets Java</a>. Clica el botón para descargar y ejecutar la aplicación WIRIS cas para editar el algoritmo de la pregunta.")), new _hx_array(array("launchwiriscas", "Lanzar WIRIS cas")), new _hx_array(array("sendinginitialsession", "Enviando algoritmo inicial.")), new _hx_array(array("waitingforupdates", "Esperando actualizaciones.")), new _hx_array(array("sessionclosed", "Comunicación cerrada.")), new _hx_array(array("gotsession", "Revisión \${n} recibida.")), new _hx_array(array("thecorrectansweris", "La respuesta correcta es")), new _hx_array(array("poweredby", "Creado por")), new _hx_array(array("refresh", "Renovar la respuesta correcta")), new _hx_array(array("fillwithcorrect", "Rellenar con la respuesta correcta")), new _hx_array(array("lang", "ca")), new _hx_array(array("comparisonwithstudentanswer", "Comparació amb la resposta de l'estudiant")), new _hx_array(array("otheracceptedanswers", "Altres respostes acceptades")), new _hx_array(array("equivalent_literal", "Literalment igual")), new _hx_array(array("equivalent_literal_correct_feedback", "La resposta és literalment igual a la correcta.")), new _hx_array(array("equivalent_symbolic", "Matemàticament igual")), new _hx_array(array("equivalent_symbolic_correct_feedback", "La resposta és matemàticament igual a la correcta.")), new _hx_array(array("equivalent_set", "Igual com a conjunts")), new _hx_array(array("equivalent_set_correct_feedback", "El conjunt de respostes és igual al correcte.")), new _hx_array(array("equivalent_equations", "Equacions equivalents")), new _hx_array(array("equivalent_equations_correct_feedback", "La resposta té les solucions requerides.")), new _hx_array(array("equivalent_function", "Funció de qualificació")), new _hx_array(array("equivalent_function_correct_feedback", "La resposta és correcta.")), new _hx_array(array("equivalent_all", "Qualsevol resposta")), new _hx_array(array("any", "qualsevol")), new _hx_array(array("gradingfunction", "Funció de qualificació")), new _hx_array(array("additionalproperties", "Propietats addicionals")), new _hx_array(array("structure", "Estructura")), new _hx_array(array("none", "cap")), new _hx_array(array("None", "Cap")), new _hx_array(array("check_integer_form", "té forma de nombre enter")), new _hx_array(array("check_integer_form_correct_feedback", "La resposta és un nombre enter.")), new _hx_array(array("check_fraction_form", "té forma de fracció")), new _hx_array(array("check_fraction_form_correct_feedback", "La resposta és una fracció.")), new _hx_array(array("check_polynomial_form", "té forma de polinomi")), new _hx_array(array("check_polynomial_form_correct_feedback", "La resposta és un polinomi.")), new _hx_array(array("check_rational_function_form", "té forma de funció racional")), new _hx_array(array("check_rational_function_form_correct_feedback", "La resposta és una funció racional.")), new _hx_array(array("check_elemental_function_form", "és una combinació de funcions elementals")), new _hx_array(array("check_elemental_function_form_correct_feedback", "La resposta és una expressió elemental.")), new _hx_array(array("check_scientific_notation", "està expressada en notació científica")), new _hx_array(array("check_scientific_notation_correct_feedback", "La resposta està expressada en notació científica.")), new _hx_array(array("more", "Més")), new _hx_array(array("check_simplified", "està simplificada")), new _hx_array(array("check_simplified_correct_feedback", "La resposta està simplificada.")), new _hx_array(array("check_expanded", "està expandida")), new _hx_array(array("check_expanded_correct_feedback", "La resposta està expandida.")), new _hx_array(array("check_factorized", "està factoritzada")), new _hx_array(array("check_factorized_correct_feedback", "La resposta està factoritzada.")), new _hx_array(array("check_rationalized", "està racionalitzada")), new _hx_array(array("check_rationalized_correct_feedback", "La resposta está racionalitzada.")), new _hx_array(array("check_no_common_factor", "no té factors comuns")), new _hx_array(array("check_no_common_factor_correct_feedback", "La resposta no té factors comuns.")), new _hx_array(array("check_minimal_radicands", "té radicands minimals")), new _hx_array(array("check_minimal_radicands_correct_feedback", "La resposta té els radicands minimals.")), new _hx_array(array("check_divisible", "és divisible per")), new _hx_array(array("check_divisible_correct_feedback", "La resposta és divisible per \${value}.")), new _hx_array(array("check_common_denominator", "té denominador comú")), new _hx_array(array("check_common_denominator_correct_feedback", "La resposta té denominador comú.")), new _hx_array(array("check_unit", "té unitat equivalent a")), new _hx_array(array("check_unit_correct_feedback", "La unitat de resposta és \${unit}.")), new _hx_array(array("check_unit_literal", "té unitat literalment igual a")), new _hx_array(array("check_unit_literal_correct_feedback", "La unitat de resposta és \${unit}.")), new _hx_array(array("check_no_more_decimals", "té menys decimals o exactament")), new _hx_array(array("check_no_more_decimals_correct_feedback", "La resposta té \${digits} o menys decimals.")), new _hx_array(array("check_no_more_digits", "té menys dígits o exactament")), new _hx_array(array("check_no_more_digits_correct_feedback", "La resposta té \${digits} o menys dígits.")), new _hx_array(array("syntax_expression", "General")), new _hx_array(array("syntax_expression_description", "(fórmules, expressions, equacions, matrius ...)")), new _hx_array(array("syntax_expression_correct_feedback", "La sintaxi de la resposta és correcta.")), new _hx_array(array("syntax_quantity", "Quantitat")), new _hx_array(array("syntax_quantity_description", "(nombres, unitats de mesura, fraccions, fraccions mixtes, raons...)")), new _hx_array(array("syntax_quantity_correct_feedback", "La sintaxi de la resposta és correcta.")), new _hx_array(array("syntax_list", "Llista")), new _hx_array(array("syntax_list_description", "(llistes sense coma separadora o parèntesis)")), new _hx_array(array("syntax_list_correct_feedback", "La sintaxi de la resposta és correcta.")), new _hx_array(array("syntax_string", "Text")), new _hx_array(array("syntax_string_description", "(paraules, frases, cadenas de caràcters)")), new _hx_array(array("syntax_string_correct_feedback", "La sintaxi de la resposta és correcta.")), new _hx_array(array("none", "cap")), new _hx_array(array("edit", "Editar")), new _hx_array(array("accept", "Acceptar")), new _hx_array(array("cancel", "Cancel·lar")), new _hx_array(array("explog", "exp/log")), new _hx_array(array("trigonometric", "trigonomètriques")), new _hx_array(array("hyperbolic", "hiperbòliques")), new _hx_array(array("arithmetic", "aritmètica")), new _hx_array(array("all", "tot")), new _hx_array(array("tolerance", "Tolerància")), new _hx_array(array("relative", "relativa")), new _hx_array(array("relativetolerance", "Tolerància relativa")), new _hx_array(array("precision", "Precisió")), new _hx_array(array("implicit_times_operator", "Ometre producte")), new _hx_array(array("times_operator", "Operador producte")), new _hx_array(array("imaginary_unit", "Unitat imaginària")), new _hx_array(array("mixedfractions", "Fraccions mixtes")), new _hx_array(array("constants", "Constants")), new _hx_array(array("functions", "Funcions")), new _hx_array(array("userfunctions", "Funcions d'usuari")), new _hx_array(array("units", "Unitats")), new _hx_array(array("unitprefixes", "Prefixos d'unitats")), new _hx_array(array("syntaxparams", "Opcions de sintaxi")), new _hx_array(array("syntaxparams_expression", "Opcions per a general")), new _hx_array(array("syntaxparams_quantity", "Opcions per a quantitat")), new _hx_array(array("syntaxparams_list", "Opcions per a llista")), new _hx_array(array("allowedinput", "Entrada permesa")), new _hx_array(array("manual", "Manual")), new _hx_array(array("correctanswer", "Resposta correcta")), new _hx_array(array("variables", "Variables")), new _hx_array(array("validation", "Validació")), new _hx_array(array("preview", "Vista prèvia")), new _hx_array(array("correctanswertabhelp", "Introduïu la resposta correcta utilitzant WIRIS editor. Seleccioneu també el comportament de l'editor de fórmules quan sigui utilitzat per l'estudiant.\x0A")), new _hx_array(array("assertionstabhelp", "Seleccioneu les propietats que han de complir les respostes d'estudiant. Per exemple, si ha d'estar simplificat, factoritzat, expressat utilitzant unitats físiques o tenir una precisió numèrica específica.")), new _hx_array(array("variablestabhelp", "Escriviu un algorisme amb WIRIS CAS per crear variables aleatòries: números, expressions, gràfiques o funcions de qualificació.\x0ATambé podeu especificar el format de sortida de les variables que es mostren als estudiants.\x0A")), new _hx_array(array("testtabhelp", "Inserir una possible resposta d'estudiant per simular el comportament de la pregunta. Està utilitzant la mateixa eina que l'estudiant utilitzarà per entrar la resposta.\x0AObserve que también se pueden probar los criterios de evaluación, el éxito y la retroalimentación automática.\x0A")), new _hx_array(array("start", "Inici")), new _hx_array(array("test", "Prova")), new _hx_array(array("clicktesttoevaluate", "Feu clic a botó de prova per validar la resposta actual.")), new _hx_array(array("correct", "Correcte!")), new _hx_array(array("incorrect", "Incorrecte!")), new _hx_array(array("partiallycorrect", "Parcialment correcte!")), new _hx_array(array("inputmethod", "Mètode d'entrada")), new _hx_array(array("compoundanswer", "Resposta composta")), new _hx_array(array("answerinputinlineeditor", "WIRIS editor incrustat")), new _hx_array(array("answerinputpopupeditor", "WIRIS editor en una finestra emergent")), new _hx_array(array("answerinputplaintext", "Camp d'entrada de text pla")), new _hx_array(array("showauxiliarcas", "Incloure WIRIS CAS")), new _hx_array(array("initialcascontent", "Contingut inicial")), new _hx_array(array("tolerancedigits", "Dígits de tolerància")), new _hx_array(array("validationandvariables", "Validació i variables")), new _hx_array(array("algorithmlanguage", "Idioma de l'algorisme")), new _hx_array(array("calculatorlanguage", "Idioma de la calculadora")), new _hx_array(array("hasalgorithm", "Té algorisme")), new _hx_array(array("comparison", "Comparació")), new _hx_array(array("properties", "Propietats")), new _hx_array(array("studentanswer", "Resposta de l'estudiant")), new _hx_array(array("poweredbywiris", "Powered by WIRIS")), new _hx_array(array("yourchangeswillbelost", "Els seus canvis es perdran si abandona la finestra.")), new _hx_array(array("outputoptions", "Opcions de sortida")), new _hx_array(array("catalan", "Català")), new _hx_array(array("english", "English")), new _hx_array(array("spanish", "Español")), new _hx_array(array("estonian", "Eesti")), new _hx_array(array("basque", "Euskara")), new _hx_array(array("french", "Français")), new _hx_array(array("german", "Deutsch")), new _hx_array(array("italian", "Italiano")), new _hx_array(array("dutch", "Nederlands")), new _hx_array(array("portuguese", "Português (Portugal)")), new _hx_array(array("javaAppletMissing", "Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>.")), new _hx_array(array("allanswerscorrect", "Totes les respostes han de ser correctes")), new _hx_array(array("distributegrade", "Distribueix la nota")), new _hx_array(array("no", "No")), new _hx_array(array("add", "Afegir")), new _hx_array(array("replaceeditor", "Substitueix l'editor")), new _hx_array(array("list", "Llista")), new _hx_array(array("questionxml", "Question XML")), new _hx_array(array("grammarurl", "Grammar URL")), new _hx_array(array("reservedwords", "Paraules reservades")), new _hx_array(array("forcebrackets", "Les llistes sempre necessiten claus \"{}\".")), new _hx_array(array("commaasitemseparator", "Utilitza la coma \",\" com a separador d'elements de llistes.")), new _hx_array(array("confirmimportdeprecated", "Importar la pregunta?\x0AAquesta pregunta conté característiques obsoletes. El procés d'importació pot canviar lleugerament el comportament de la pregunta. És altament recomanat comprovar cuidadosament la pregunta després de la importació.")), new _hx_array(array("comparesets", "Compara com a conjunts")), new _hx_array(array("nobracketslist", "Llistes sense claus")), new _hx_array(array("warningtoleranceprecision", "Hi ha menys dígits de precisió que dígits de tolerància.")), new _hx_array(array("actionimport", "Importar")), new _hx_array(array("actionexport", "Exportar")), new _hx_array(array("usecase", "Coincideix majúscules i minúscules")), new _hx_array(array("usespaces", "Coincideix espais")), new _hx_array(array("notevaluate", "Mantén els arguments sense avaluar")), new _hx_array(array("separators", "Separadors")), new _hx_array(array("comma", "Coma")), new _hx_array(array("commarole", "Rol del caràcter coma ','")), new _hx_array(array("point", "Punt")), new _hx_array(array("pointrole", "Rol del caràcter punt '.'")), new _hx_array(array("space", "Espai")), new _hx_array(array("spacerole", "Rol del caràcter espai")), new _hx_array(array("decimalmark", "Decimals")), new _hx_array(array("digitsgroup", "Milers")), new _hx_array(array("listitems", "Elements de llista")), new _hx_array(array("nothing", "Cap")), new _hx_array(array("intervals", "Intervals")), new _hx_array(array("warningprecision15", "La precisió ha de ser entre 1 i 15.")), new _hx_array(array("decimalSeparator", "Decimals")), new _hx_array(array("thousandsSeparator", "Milers")), new _hx_array(array("notation", "Notació")), new _hx_array(array("invisible", "Invisible")), new _hx_array(array("auto", "Auto")), new _hx_array(array("fixedDecimal", "Fixa")), new _hx_array(array("floatingDecimal", "Decimal")), new _hx_array(array("scientific", "Científica")), new _hx_array(array("example", "Exemple")), new _hx_array(array("warningreltolfixedprec", "Tolerància relativa amb notació de coma fixa.")), new _hx_array(array("warningabstolfloatprec", "Tolerància absoluta amb notació de coma flotant.")), new _hx_array(array("answerinputinlinehand", "WIRIS hand incrustat")), new _hx_array(array("absolutetolerance", "Tolerància absoluta")), new _hx_array(array("clicktoeditalgorithm", "El seu navegador no <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">suporta applets Java</a>. Clica el botó per a descarregar i executar l'aplicació WIRIS cas per a editar l'algorisme de la pregunta.")), new _hx_array(array("launchwiriscas", "Llançar WIRIS cas")), new _hx_array(array("sendinginitialsession", "Enviant algorisme inicial.")), new _hx_array(array("waitingforupdates", "Esperant actualitzacions.")), new _hx_array(array("sessionclosed", "Comunicació tancada.")), new _hx_array(array("gotsession", "Revisió \${n} rebuda.")), new _hx_array(array("thecorrectansweris", "La resposta correcta és")), new _hx_array(array("poweredby", "Creat per")), new _hx_array(array("refresh", "Renova la resposta correcta")), new _hx_array(array("fillwithcorrect", "Omple amb la resposta correcta")), new _hx_array(array("lang", "it")), new _hx_array(array("comparisonwithstudentanswer", "Confronto con la risposta dello studente")), new _hx_array(array("otheracceptedanswers", "Altre risposte accettate")), new _hx_array(array("equivalent_literal", "Letteralmente uguale")), new _hx_array(array("equivalent_literal_correct_feedback", "La risposta è letteralmente uguale a quella corretta.")), new _hx_array(array("equivalent_symbolic", "Matematicamente uguale")), new _hx_array(array("equivalent_symbolic_correct_feedback", "La risposta è matematicamente uguale a quella corretta.")), new _hx_array(array("equivalent_set", "Uguale come serie")), new _hx_array(array("equivalent_set_correct_feedback", "La risposta è una serie uguale a quella corretta.")), new _hx_array(array("equivalent_equations", "Equazioni equivalenti")), new _hx_array(array("equivalent_equations_correct_feedback", "La risposta ha le stesse soluzioni di quella corretta.")), new _hx_array(array("equivalent_function", "Funzione di classificazione")), new _hx_array(array("equivalent_function_correct_feedback", "La risposta è corretta.")), new _hx_array(array("equivalent_all", "Qualsiasi risposta")), new _hx_array(array("any", "qualsiasi")), new _hx_array(array("gradingfunction", "Funzione di classificazione")), new _hx_array(array("additionalproperties", "Proprietà aggiuntive")), new _hx_array(array("structure", "Struttura")), new _hx_array(array("none", "nessuno")), new _hx_array(array("None", "Nessuno")), new _hx_array(array("check_integer_form", "corrisponde a un numero intero")), new _hx_array(array("check_integer_form_correct_feedback", "La risposta è un numero intero.")), new _hx_array(array("check_fraction_form", "corrisponde a una frazione")), new _hx_array(array("check_fraction_form_correct_feedback", "La risposta è una frazione.")), new _hx_array(array("check_polynomial_form", "corrisponde a un polinomio")), new _hx_array(array("check_polynomial_form_correct_feedback", "La risposta è un polinomio.")), new _hx_array(array("check_rational_function_form", "corrisponde a una funzione razionale")), new _hx_array(array("check_rational_function_form_correct_feedback", "La risposta è una funzione razionale.")), new _hx_array(array("check_elemental_function_form", "è una combinazione di funzioni elementari")), new _hx_array(array("check_elemental_function_form_correct_feedback", "La risposta è un'espressione elementare.")), new _hx_array(array("check_scientific_notation", "è espressa in notazione scientifica")), new _hx_array(array("check_scientific_notation_correct_feedback", "La risposta è espressa in notazione scientifica.")), new _hx_array(array("more", "Altro")), new _hx_array(array("check_simplified", "è semplificata")), new _hx_array(array("check_simplified_correct_feedback", "La risposta è semplificata.")), new _hx_array(array("check_expanded", "è espansa")), new _hx_array(array("check_expanded_correct_feedback", "La risposta è espansa.")), new _hx_array(array("check_factorized", "è scomposta in fattori")), new _hx_array(array("check_factorized_correct_feedback", "La risposta è scomposta in fattori.")), new _hx_array(array("check_rationalized", "è razionalizzata")), new _hx_array(array("check_rationalized_correct_feedback", "La risposta è razionalizzata.")), new _hx_array(array("check_no_common_factor", "non ha fattori comuni")), new _hx_array(array("check_no_common_factor_correct_feedback", "La risposta non ha fattori comuni.")), new _hx_array(array("check_minimal_radicands", "ha radicandi minimi")), new _hx_array(array("check_minimal_radicands_correct_feedback", "La risposta contiene radicandi minimi.")), new _hx_array(array("check_divisible", "è divisibile per")), new _hx_array(array("check_divisible_correct_feedback", "La risposta è divisibile per \${value}.")), new _hx_array(array("check_common_denominator", "ha un solo denominatore comune")), new _hx_array(array("check_common_denominator_correct_feedback", "La risposta ha un solo denominatore comune.")), new _hx_array(array("check_unit", "ha un'unità equivalente a")), new _hx_array(array("check_unit_correct_feedback", "La risposta è l'unità \${unit}.")), new _hx_array(array("check_unit_literal", "ha un'unità letteralmente uguale a")), new _hx_array(array("check_unit_literal_correct_feedback", "La risposta è l'unità \${unit}.")), new _hx_array(array("check_no_more_decimals", "ha un numero inferiore o uguale di decimali rispetto a")), new _hx_array(array("check_no_more_decimals_correct_feedback", "La risposta ha \${digits} o meno decimali.")), new _hx_array(array("check_no_more_digits", "ha un numero inferiore o uguale di cifre rispetto a")), new _hx_array(array("check_no_more_digits_correct_feedback", "La risposta ha \${digits} o meno cifre.")), new _hx_array(array("syntax_expression", "Generale")), new _hx_array(array("syntax_expression_description", "(formule, espressioni, equazioni, matrici etc.)")), new _hx_array(array("syntax_expression_correct_feedback", "La sintassi della risposta è corretta.")), new _hx_array(array("syntax_quantity", "Quantità")), new _hx_array(array("syntax_quantity_description", "(numeri, unità di misura, frazioni, frazioni miste, proporzioni etc.)")), new _hx_array(array("syntax_quantity_correct_feedback", "La sintassi della risposta è corretta.")), new _hx_array(array("syntax_list", "Elenco")), new _hx_array(array("syntax_list_description", "(elenchi senza virgola di separazione o parentesi)")), new _hx_array(array("syntax_list_correct_feedback", "La sintassi della risposta è corretta.")), new _hx_array(array("syntax_string", "Testo")), new _hx_array(array("syntax_string_description", "(parole, frasi, stringhe di caratteri)")), new _hx_array(array("syntax_string_correct_feedback", "La sintassi della risposta è corretta.")), new _hx_array(array("none", "nessuno")), new _hx_array(array("edit", "Modifica")), new _hx_array(array("accept", "Accetta")), new _hx_array(array("cancel", "Annulla")), new _hx_array(array("explog", "esponenziale/logaritmica")), new _hx_array(array("trigonometric", "trigonometrica")), new _hx_array(array("hyperbolic", "iperbolica")), new _hx_array(array("arithmetic", "aritmetica")), new _hx_array(array("all", "tutto")), new _hx_array(array("tolerance", "Tolleranza")), new _hx_array(array("relative", "relativa")), new _hx_array(array("relativetolerance", "Tolleranza relativa")), new _hx_array(array("precision", "Precisione")), new _hx_array(array("implicit_times_operator", "Operatore prodotto non visibile")), new _hx_array(array("times_operator", "Operatore prodotto")), new _hx_array(array("imaginary_unit", "Unità immaginaria")), new _hx_array(array("mixedfractions", "Frazioni miste")), new _hx_array(array("constants", "Costanti")), new _hx_array(array("functions", "Funzioni")), new _hx_array(array("userfunctions", "Funzioni utente")), new _hx_array(array("units", "Unità")), new _hx_array(array("unitprefixes", "Prefissi unità")), new _hx_array(array("syntaxparams", "Opzioni di sintassi")), new _hx_array(array("syntaxparams_expression", "Opzioni per elementi generali")), new _hx_array(array("syntaxparams_quantity", "Opzioni per la quantità")), new _hx_array(array("syntaxparams_list", "Opzioni per elenchi")), new _hx_array(array("allowedinput", "Input consentito")), new _hx_array(array("manual", "Manuale")), new _hx_array(array("correctanswer", "Risposta corretta")), new _hx_array(array("variables", "Variabili")), new _hx_array(array("validation", "Verifica")), new _hx_array(array("preview", "Anteprima")), new _hx_array(array("correctanswertabhelp", "Inserisci la risposta corretta utilizzando l'editor WIRIS. Seleziona anche un comportamento per l'editor di formule se utilizzato dallo studente.\x0ANon potrai archiviare la risposta se non si tratta di un'espressione valida.\x0A")), new _hx_array(array("assertionstabhelp", "Seleziona quali proprietà deve verificare la risposta dello studente. Ad esempio, se la risposta deve essere semplificata, scomposta in fattori o espressa in unità fisiche o se ha una precisione numerica specifica.")), new _hx_array(array("variablestabhelp", "Scrivi un algoritmo con WIRIS cas per creare variabili casuali: numeri, espressioni, diagrammi o funzioni di classificazione.\x0APuoi anche specificare il formato delle variabili mostrate allo studente.\x0A")), new _hx_array(array("testtabhelp", "Inserisci la risposta di un possibile studente per simulare il comportamento della domanda. Per questa operazione, utilizzi lo stesso strumento che utilizzerà lo studente.\x0ANota: puoi anche testare i criteri di valutazione, di risposta corretta e il feedback automatico.\x0A")), new _hx_array(array("start", "Inizio")), new _hx_array(array("test", "Test")), new _hx_array(array("clicktesttoevaluate", "Fai clic sul pulsante Test per verificare la risposta attuale.")), new _hx_array(array("correct", "Risposta corretta.")), new _hx_array(array("incorrect", "Risposta sbagliata.")), new _hx_array(array("partiallycorrect", "Risposta corretta in parte.")), new _hx_array(array("inputmethod", "Metodo di input")), new _hx_array(array("compoundanswer", "Risposta composta")), new _hx_array(array("answerinputinlineeditor", "WIRIS editor integrato")), new _hx_array(array("answerinputpopupeditor", "WIRIS editor nella finestra a comparsa")), new _hx_array(array("answerinputplaintext", "Campo di input testo semplice")), new _hx_array(array("showauxiliarcas", "Includi WIRIS cas")), new _hx_array(array("initialcascontent", "Contenuto iniziale")), new _hx_array(array("tolerancedigits", "Cifre di tolleranza")), new _hx_array(array("validationandvariables", "Verifica e variabili")), new _hx_array(array("algorithmlanguage", "Lingua algoritmo")), new _hx_array(array("calculatorlanguage", "Lingua calcolatrice")), new _hx_array(array("hasalgorithm", "Ha l'algoritmo")), new _hx_array(array("comparison", "Confronto")), new _hx_array(array("properties", "Proprietà")), new _hx_array(array("studentanswer", "Risposta dello studente")), new _hx_array(array("poweredbywiris", "Realizzato con WIRIS")), new _hx_array(array("yourchangeswillbelost", "Se chiudi la finestra, le modifiche andranno perse.")), new _hx_array(array("outputoptions", "Opzioni risultato")), new _hx_array(array("catalan", "Català")), new _hx_array(array("english", "English")), new _hx_array(array("spanish", "Español")), new _hx_array(array("estonian", "Eesti")), new _hx_array(array("basque", "Euskara")), new _hx_array(array("french", "Français")), new _hx_array(array("german", "Deutsch")), new _hx_array(array("italian", "Italiano")), new _hx_array(array("dutch", "Nederlands")), new _hx_array(array("portuguese", "Português (Portugal)")), new _hx_array(array("javaAppletMissing", "Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>.")), new _hx_array(array("allanswerscorrect", "Tutte le risposte devono essere corrette")), new _hx_array(array("distributegrade", "Fornisci voto")), new _hx_array(array("no", "No")), new _hx_array(array("add", "Aggiungi")), new _hx_array(array("replaceeditor", "Sostituisci editor")), new _hx_array(array("list", "Elenco")), new _hx_array(array("questionxml", "XML domanda")), new _hx_array(array("grammarurl", "URL grammatica")), new _hx_array(array("reservedwords", "Parole riservate")), new _hx_array(array("forcebrackets", "Gli elenchi devono sempre contenere le parentesi graffe \"{}\".")), new _hx_array(array("commaasitemseparator", "Utilizza la virgola \",\" per separare gli elementi di un elenco.")), new _hx_array(array("confirmimportdeprecated", "Vuoi importare la domanda?\x0A La domanda che vuoi aprire contiene funzionalità obsolete. Il processo di importazione potrebbe modificare leggermente il comportamento della domanda. Ti consigliamo di controllare attentamente la domanda dopo l'importazione.")), new _hx_array(array("comparesets", "Confronta come serie")), new _hx_array(array("nobracketslist", "Elenchi senza parentesi")), new _hx_array(array("warningtoleranceprecision", "Le cifre di precisione sono inferiori a quelle di tolleranza.")), new _hx_array(array("actionimport", "Importazione")), new _hx_array(array("actionexport", "Esportazione")), new _hx_array(array("usecase", "Rispetta maiuscole/minuscole")), new _hx_array(array("usespaces", "Rispetta spazi")), new _hx_array(array("notevaluate", "Mantieni argomenti non valutati")), new _hx_array(array("separators", "Separatori")), new _hx_array(array("comma", "Virgola")), new _hx_array(array("commarole", "Ruolo della virgola “,”")), new _hx_array(array("point", "Punto")), new _hx_array(array("pointrole", "Ruolo del punto “.”")), new _hx_array(array("space", "Spazio")), new _hx_array(array("spacerole", "Ruolo dello spazio")), new _hx_array(array("decimalmark", "Cifre decimali")), new _hx_array(array("digitsgroup", "Gruppi di cifre")), new _hx_array(array("listitems", "Elenca elementi")), new _hx_array(array("nothing", "Niente")), new _hx_array(array("intervals", "Intervalli")), new _hx_array(array("warningprecision15", "La precisione deve essere compresa tra 1 e 15.")), new _hx_array(array("decimalSeparator", "Decimale")), new _hx_array(array("thousandsSeparator", "Migliaia")), new _hx_array(array("notation", "Notazione")), new _hx_array(array("invisible", "Invisibile")), new _hx_array(array("auto", "Automatico")), new _hx_array(array("fixedDecimal", "Fisso")), new _hx_array(array("floatingDecimal", "Decimale")), new _hx_array(array("scientific", "Scientifica")), new _hx_array(array("example", "Esempio")), new _hx_array(array("warningreltolfixedprec", "Tolleranza relativa con notazione decimale fissa.")), new _hx_array(array("warningabstolfloatprec", "Tolleranza assoluta con notazione decimale fluttuante.")), new _hx_array(array("answerinputinlinehand", "Applicazione WIRIS hand incorporata")), new _hx_array(array("absolutetolerance", "Tolleranza assoluta")), new _hx_array(array("clicktoeditalgorithm", "Il tuo browser non <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">supporta Java</a>. Fai clic sul pulsante per scaricare ed eseguire l’applicazione WIRIS cas che consente di modificare l’algoritmo della domanda.")), new _hx_array(array("launchwiriscas", "Avvia WIRIS cas")), new _hx_array(array("sendinginitialsession", "Invio della sessione iniziale...")), new _hx_array(array("waitingforupdates", "In attesa degli aggiornamenti...")), new _hx_array(array("sessionclosed", "Comunicazione chiusa.")), new _hx_array(array("gotsession", "Ricevuta revisione \${n}.")), new _hx_array(array("thecorrectansweris", "La risposta corretta è")), new _hx_array(array("poweredby", "Offerto da")), new _hx_array(array("refresh", "Rinnova la risposta corretta")), new _hx_array(array("fillwithcorrect", "Inserisci la risposta corretta")), new _hx_array(array("lang", "fr")), new _hx_array(array("comparisonwithstudentanswer", "Comparaison avec la réponse de l'étudiant")), new _hx_array(array("otheracceptedanswers", "Autres réponses acceptées")), new _hx_array(array("equivalent_literal", "Strictement égal")), new _hx_array(array("equivalent_literal_correct_feedback", "La réponse est strictement égale à la bonne réponse.")), new _hx_array(array("equivalent_symbolic", "Mathématiquement égal")), new _hx_array(array("equivalent_symbolic_correct_feedback", "La réponse est mathématiquement égale à la bonne réponse.")), new _hx_array(array("equivalent_set", "Égal en tant qu'ensembles")), new _hx_array(array("equivalent_set_correct_feedback", "L'ensemble de réponses est égal à la bonne réponse.")), new _hx_array(array("equivalent_equations", "Équations équivalentes")), new _hx_array(array("equivalent_equations_correct_feedback", "La réponse partage les mêmes solutions que la bonne réponse.")), new _hx_array(array("equivalent_function", "Fonction de gradation")), new _hx_array(array("equivalent_function_correct_feedback", "C'est la bonne réponse.")), new _hx_array(array("equivalent_all", "N'importe quelle réponse")), new _hx_array(array("any", "quelconque")), new _hx_array(array("gradingfunction", "Fonction de gradation")), new _hx_array(array("additionalproperties", "Propriétés supplémentaires")), new _hx_array(array("structure", "Structure")), new _hx_array(array("none", "aucune")), new _hx_array(array("None", "Aucune")), new _hx_array(array("check_integer_form", "a la forme d'un entier.")), new _hx_array(array("check_integer_form_correct_feedback", "La réponse est un nombre entier.")), new _hx_array(array("check_fraction_form", "a la forme d'une fraction")), new _hx_array(array("check_fraction_form_correct_feedback", "La réponse est une fraction.")), new _hx_array(array("check_polynomial_form", "a la forme d'un polynôme")), new _hx_array(array("check_polynomial_form_correct_feedback", "La réponse est un polynôme.")), new _hx_array(array("check_rational_function_form", "a la forme d'une fonction rationnelle")), new _hx_array(array("check_rational_function_form_correct_feedback", "La réponse est une fonction rationnelle.")), new _hx_array(array("check_elemental_function_form", "est une combinaison de fonctions élémentaires")), new _hx_array(array("check_elemental_function_form_correct_feedback", "La réponse est une expression élémentaire.")), new _hx_array(array("check_scientific_notation", "est exprimé en notation scientifique")), new _hx_array(array("check_scientific_notation_correct_feedback", "La réponse est exprimée en notation scientifique.")), new _hx_array(array("more", "Plus")), new _hx_array(array("check_simplified", "est simplifié")), new _hx_array(array("check_simplified_correct_feedback", "La réponse est simplifiée.")), new _hx_array(array("check_expanded", "est développé")), new _hx_array(array("check_expanded_correct_feedback", "La réponse est développée.")), new _hx_array(array("check_factorized", "est factorisé")), new _hx_array(array("check_factorized_correct_feedback", "La réponse est factorisée.")), new _hx_array(array("check_rationalized", " : rationalisé")), new _hx_array(array("check_rationalized_correct_feedback", "La réponse est rationalisée.")), new _hx_array(array("check_no_common_factor", "n'a pas de facteurs communs")), new _hx_array(array("check_no_common_factor_correct_feedback", "La réponse n'a pas de facteurs communs.")), new _hx_array(array("check_minimal_radicands", "a des radicandes minimaux")), new _hx_array(array("check_minimal_radicands_correct_feedback", "La réponse a des radicandes minimaux.")), new _hx_array(array("check_divisible", "est divisible par")), new _hx_array(array("check_divisible_correct_feedback", "La réponse est divisible par \${value}.")), new _hx_array(array("check_common_denominator", "a un seul dénominateur commun")), new _hx_array(array("check_common_denominator_correct_feedback", "La réponse inclut un seul dénominateur commun.")), new _hx_array(array("check_unit", "inclut une unité équivalente à")), new _hx_array(array("check_unit_correct_feedback", "La bonne unité est \${unit}.")), new _hx_array(array("check_unit_literal", "a une unité strictement égale à")), new _hx_array(array("check_unit_literal_correct_feedback", "La bonne unité est \${unit}.")), new _hx_array(array("check_no_more_decimals", "a le même nombre ou moins de décimales que")), new _hx_array(array("check_no_more_decimals_correct_feedback", "La réponse inclut au plus \${digits} décimales.")), new _hx_array(array("check_no_more_digits", "a le même nombre ou moins de chiffres que")), new _hx_array(array("check_no_more_digits_correct_feedback", "La réponse inclut au plus \${digits} chiffres.")), new _hx_array(array("syntax_expression", "Général")), new _hx_array(array("syntax_expression_description", "(formules, expressions, équations, matrices…)")), new _hx_array(array("syntax_expression_correct_feedback", "La syntaxe de la réponse est correcte.")), new _hx_array(array("syntax_quantity", "Quantité")), new _hx_array(array("syntax_quantity_description", "(nombres, unités de mesure, fractions, fractions mixtes, proportions…)")), new _hx_array(array("syntax_quantity_correct_feedback", "La syntaxe de la réponse est correcte.")), new _hx_array(array("syntax_list", "Liste")), new _hx_array(array("syntax_list_description", "(listes sans virgule ou crochets de séparation)")), new _hx_array(array("syntax_list_correct_feedback", "La syntaxe de la réponse est correcte.")), new _hx_array(array("syntax_string", "Texte")), new _hx_array(array("syntax_string_description", "(mots, phrases, suites de caractères)")), new _hx_array(array("syntax_string_correct_feedback", "La syntaxe de la réponse est correcte.")), new _hx_array(array("none", "aucune")), new _hx_array(array("edit", "Modifier")), new _hx_array(array("accept", "Accepter")), new _hx_array(array("cancel", "Annuler")), new _hx_array(array("explog", "exp/log")), new _hx_array(array("trigonometric", "trigonométrique")), new _hx_array(array("hyperbolic", "hyperbolique")), new _hx_array(array("arithmetic", "arithmétique")), new _hx_array(array("all", "toutes")), new _hx_array(array("tolerance", "Tolérance")), new _hx_array(array("relative", "relative")), new _hx_array(array("relativetolerance", "Tolérance relative")), new _hx_array(array("precision", "Précision")), new _hx_array(array("implicit_times_operator", "Opérateur de multiplication invisible")), new _hx_array(array("times_operator", "Opérateur de multiplication")), new _hx_array(array("imaginary_unit", "Unité imaginaire")), new _hx_array(array("mixedfractions", "Fractions mixtes")), new _hx_array(array("constants", "Constantes")), new _hx_array(array("functions", "Fonctions")), new _hx_array(array("userfunctions", "Fonctions personnalisées")), new _hx_array(array("units", "Unités")), new _hx_array(array("unitprefixes", "Préfixes d'unité")), new _hx_array(array("syntaxparams", "Options de syntaxe")), new _hx_array(array("syntaxparams_expression", "Options générales")), new _hx_array(array("syntaxparams_quantity", "Options de quantité")), new _hx_array(array("syntaxparams_list", "Options de liste")), new _hx_array(array("allowedinput", "Entrée autorisée")), new _hx_array(array("manual", "Manuel")), new _hx_array(array("correctanswer", "Bonne réponse")), new _hx_array(array("variables", "Variables")), new _hx_array(array("validation", "Validation")), new _hx_array(array("preview", "Aperçu")), new _hx_array(array("correctanswertabhelp", "Insérer la bonne réponse à l'aide du WIRIS Editor. Sélectionner aussi le comportement de l'éditeur de formule lorsque l'étudiant y fait appel.\x0A")), new _hx_array(array("assertionstabhelp", "Sélectionner les propriétés que la réponse de l'étudiant doit satisfaire. Par exemple, si elle doit être simplifiée, factorisée, exprimée dans une unité physique ou présenter une précision chiffrée spécifique.")), new _hx_array(array("variablestabhelp", "Écrire un algorithme à l'aide de WIRIS CAS pour créer des variables aléatoires : des nombres, des expressions, des courbes ou une fonction de gradation. \x0AVous pouvez aussi spécifier un format des variables pour l'affichage à l'étudiant.\x0A")), new _hx_array(array("testtabhelp", "Insérer une réponse possible de l'étudiant afin de simuler le comportement de la question. Vous utilisez le même outil que l'étudiant. \x0ANotez que vous pouvez aussi tester le critère d'évaluation, de réussite et les commentaires automatiques.\x0A")), new _hx_array(array("start", "Démarrer")), new _hx_array(array("test", "Tester")), new _hx_array(array("clicktesttoevaluate", "Cliquer sur le bouton Test pour valider la réponse actuelle.")), new _hx_array(array("correct", "Correct !")), new _hx_array(array("incorrect", "Incorrect !")), new _hx_array(array("partiallycorrect", "Partiellement correct !")), new _hx_array(array("inputmethod", "Méthode de saisie")), new _hx_array(array("compoundanswer", "Réponse composée")), new _hx_array(array("answerinputinlineeditor", "WIRIS Editor intégré")), new _hx_array(array("answerinputpopupeditor", "WIRIS Editor dans une fenêtre")), new _hx_array(array("answerinputplaintext", "Champ de saisie de texte brut")), new _hx_array(array("showauxiliarcas", "Inclure WIRIS CAS")), new _hx_array(array("initialcascontent", "Contenu initial")), new _hx_array(array("tolerancedigits", "Tolérance en chiffres")), new _hx_array(array("validationandvariables", "Validation et variables")), new _hx_array(array("algorithmlanguage", "Langage d'algorithme")), new _hx_array(array("calculatorlanguage", "Langage de calcul")), new _hx_array(array("hasalgorithm", "Possède un algorithme")), new _hx_array(array("comparison", "Comparaison")), new _hx_array(array("properties", "Propriétés")), new _hx_array(array("studentanswer", "Réponse de l'étudiant")), new _hx_array(array("poweredbywiris", "Développé par WIRIS")), new _hx_array(array("yourchangeswillbelost", "Vous perdrez vos modifications si vous fermez la fenêtre.")), new _hx_array(array("outputoptions", "Options de sortie")), new _hx_array(array("catalan", "Català")), new _hx_array(array("english", "English")), new _hx_array(array("spanish", "Español")), new _hx_array(array("estonian", "Eesti")), new _hx_array(array("basque", "Euskara")), new _hx_array(array("french", "Français")), new _hx_array(array("german", "Deutsch")), new _hx_array(array("italian", "Italiano")), new _hx_array(array("dutch", "Nederlands")), new _hx_array(array("portuguese", "Português (Portugal)")), new _hx_array(array("javaAppletMissing", "Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>.")), new _hx_array(array("allanswerscorrect", "Toutes les réponses doivent être correctes")), new _hx_array(array("distributegrade", "Degré de distribution")), new _hx_array(array("no", "Non")), new _hx_array(array("add", "Ajouter")), new _hx_array(array("replaceeditor", "Remplacer l'éditeur")), new _hx_array(array("list", "Liste")), new _hx_array(array("questionxml", "Question XML")), new _hx_array(array("grammarurl", "URL de la grammaire")), new _hx_array(array("reservedwords", "Mots réservés")), new _hx_array(array("forcebrackets", "Les listes requièrent l'utilisation d'accolades « {} ».")), new _hx_array(array("commaasitemseparator", "Utiliser une virgule « , » comme séparateur d'éléments de liste.")), new _hx_array(array("confirmimportdeprecated", "Importer la question ? \x0ALa question que vous êtes sur le point d'ouvrir contient des fonctionnalités obsolètes. Il se peut que la procédure d'importation modifie légèrement le comportement de la question. Il est fortement recommandé de tester attentivement la question après l'importation.")), new _hx_array(array("comparesets", "Comparer en tant qu'ensembles")), new _hx_array(array("nobracketslist", "Listes sans crochets")), new _hx_array(array("warningtoleranceprecision", "Moins de chiffres pour la précision que pour la tolérance.")), new _hx_array(array("actionimport", "Importer")), new _hx_array(array("actionexport", "Exporter")), new _hx_array(array("usecase", "Respecter la casse")), new _hx_array(array("usespaces", "Respecter les espaces")), new _hx_array(array("notevaluate", "Conserver les arguments non évalués")), new _hx_array(array("separators", "Séparateurs")), new _hx_array(array("comma", "Virgule")), new _hx_array(array("commarole", "Rôle du signe virgule « , »")), new _hx_array(array("point", "Point")), new _hx_array(array("pointrole", "Rôle du signe point « . »")), new _hx_array(array("space", "Espace")), new _hx_array(array("spacerole", "Rôle du signe espace")), new _hx_array(array("decimalmark", "Chiffres après la virgule")), new _hx_array(array("digitsgroup", "Groupes de chiffres")), new _hx_array(array("listitems", "Éléments de liste")), new _hx_array(array("nothing", "Rien")), new _hx_array(array("intervals", "Intervalles")), new _hx_array(array("warningprecision15", "La précision doit être entre 1 et 15.")), new _hx_array(array("decimalSeparator", "Virgule")), new _hx_array(array("thousandsSeparator", "Milliers")), new _hx_array(array("notation", "Notation")), new _hx_array(array("invisible", "Invisible")), new _hx_array(array("auto", "Auto.")), new _hx_array(array("fixedDecimal", "Fixe")), new _hx_array(array("floatingDecimal", "Décimale")), new _hx_array(array("scientific", "Scientifique")), new _hx_array(array("example", "Exemple")), new _hx_array(array("warningreltolfixedprec", "Tolérance relative avec la notation en mode virgule fixe.")), new _hx_array(array("warningabstolfloatprec", "Tolérance absolue avec la notation en mode virgule flottante.")), new _hx_array(array("answerinputinlinehand", "WIRIS écriture manuscrite intégrée")), new _hx_array(array("absolutetolerance", "Tolérance absolue")), new _hx_array(array("clicktoeditalgorithm", "Votre navigateur ne prend <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">pas en charge Java</a>. Cliquez sur le bouton pour télécharger et exécuter l’application WIRIS CAS et modifier l’algorithme de votre question.")), new _hx_array(array("launchwiriscas", "Lancer WIRIS CAS")), new _hx_array(array("sendinginitialsession", "Envoi de la session de départ…")), new _hx_array(array("waitingforupdates", "Attente des actualisations…")), new _hx_array(array("sessionclosed", "Transmission fermée.")), new _hx_array(array("gotsession", "Révision reçue \${n}.")), new _hx_array(array("thecorrectansweris", "La bonne réponse est")), new _hx_array(array("poweredby", "Basé sur")), new _hx_array(array("refresh", "Confirmer la réponse correcte")), new _hx_array(array("fillwithcorrect", "Remplir avec la réponse correcte")), new _hx_array(array("lang", "de")), new _hx_array(array("comparisonwithstudentanswer", "Vergleich mit Schülerantwort")), new _hx_array(array("otheracceptedanswers", "Weitere akzeptierte Antworten")), new _hx_array(array("equivalent_literal", "Im Wortsinn äquivalent")), new _hx_array(array("equivalent_literal_correct_feedback", "Die Antwort ist im Wortsinn äquivalent zur richtigen.")), new _hx_array(array("equivalent_symbolic", "Mathematisch äquivalent")), new _hx_array(array("equivalent_symbolic_correct_feedback", "Die Antwort ist mathematisch äquivalent zur richtigen Antwort.")), new _hx_array(array("equivalent_set", "Äquivalent als Sätze")), new _hx_array(array("equivalent_set_correct_feedback", "Der Fragensatz ist äquivalent zum richtigen.")), new _hx_array(array("equivalent_equations", "Äquivalente Gleichungen")), new _hx_array(array("equivalent_equations_correct_feedback", "Die Antwort hat die gleichen Lösungen wie die richtige.")), new _hx_array(array("equivalent_function", "Benotungsfunktion")), new _hx_array(array("equivalent_function_correct_feedback", "Die Antwort ist richtig.")), new _hx_array(array("equivalent_all", "Jede Antwort")), new _hx_array(array("any", "Irgendeine")), new _hx_array(array("gradingfunction", "Benotungsfunktion")), new _hx_array(array("additionalproperties", "Zusätzliche Eigenschaften")), new _hx_array(array("structure", "Struktur")), new _hx_array(array("none", "Keine")), new _hx_array(array("None", "Keine")), new _hx_array(array("check_integer_form", "hat Form einer ganzen Zahl")), new _hx_array(array("check_integer_form_correct_feedback", "Die Antwort ist eine ganze Zahl.")), new _hx_array(array("check_fraction_form", "hat Form einer Bruchzahl")), new _hx_array(array("check_fraction_form_correct_feedback", "Die Antwort ist eine Bruchzahl.")), new _hx_array(array("check_polynomial_form", "hat Form eines Polynoms")), new _hx_array(array("check_polynomial_form_correct_feedback", "Die Antwort ist ein Polynom.")), new _hx_array(array("check_rational_function_form", "hat Form einer rationalen Funktion")), new _hx_array(array("check_rational_function_form_correct_feedback", "Die Antwort ist eine rationale Funktion.")), new _hx_array(array("check_elemental_function_form", "ist eine Kombination aus elementaren Funktionen")), new _hx_array(array("check_elemental_function_form_correct_feedback", "Die Antwort ist ein elementarer Ausdruck.")), new _hx_array(array("check_scientific_notation", "ist in wissenschaftlicher Schreibweise ausgedrückt")), new _hx_array(array("check_scientific_notation_correct_feedback", "Die Antwort ist in wissenschaftlicher Schreibweise ausgedrückt.")), new _hx_array(array("more", "Mehr")), new _hx_array(array("check_simplified", "ist vereinfacht")), new _hx_array(array("check_simplified_correct_feedback", "Die Antwort ist vereinfacht.")), new _hx_array(array("check_expanded", "ist erweitert")), new _hx_array(array("check_expanded_correct_feedback", "Die Antwort ist erweitert.")), new _hx_array(array("check_factorized", "ist faktorisiert")), new _hx_array(array("check_factorized_correct_feedback", "Die Antwort ist faktorisiert.")), new _hx_array(array("check_rationalized", "ist rationalisiert")), new _hx_array(array("check_rationalized_correct_feedback", "Die Antwort ist rationalisiert.")), new _hx_array(array("check_no_common_factor", "hat keine gemeinsamen Faktoren")), new _hx_array(array("check_no_common_factor_correct_feedback", "Die Antwort hat keine gemeinsamen Faktoren.")), new _hx_array(array("check_minimal_radicands", "weist minimale Radikanden auf")), new _hx_array(array("check_minimal_radicands_correct_feedback", "Die Antwort weist minimale Radikanden auf.")), new _hx_array(array("check_divisible", "ist teilbar durch")), new _hx_array(array("check_divisible_correct_feedback", "Die Antwort ist teilbar durch \${value}.")), new _hx_array(array("check_common_denominator", "hat einen einzigen gemeinsamen Nenner")), new _hx_array(array("check_common_denominator_correct_feedback", "Die Antwort hat einen einzigen gemeinsamen Nenner.")), new _hx_array(array("check_unit", "hat äquivalente Einheit zu")), new _hx_array(array("check_unit_correct_feedback", "Die Einheit der Antwort ist \${unit}.")), new _hx_array(array("check_unit_literal", "hat Einheit im Wortsinn äquivalent zu")), new _hx_array(array("check_unit_literal_correct_feedback", "Die Einheit der Antwort ist \${unit}.")), new _hx_array(array("check_no_more_decimals", "hat weniger als oder gleich viele Dezimalstellen wie")), new _hx_array(array("check_no_more_decimals_correct_feedback", "Die Antwort hat \${digits} oder weniger Dezimalstellen.")), new _hx_array(array("check_no_more_digits", "hat weniger oder gleich viele Stellen wie")), new _hx_array(array("check_no_more_digits_correct_feedback", "Die Antwort hat \${digits} oder weniger Stellen.")), new _hx_array(array("syntax_expression", "Allgemein")), new _hx_array(array("syntax_expression_description", "(Formeln, Ausdrücke, Gleichungen, Matrizen ...)")), new _hx_array(array("syntax_expression_correct_feedback", "Die Syntax der Antwort ist richtig.")), new _hx_array(array("syntax_quantity", "Menge")), new _hx_array(array("syntax_quantity_description", "(Zahlen, Maßeinheiten, Brüche, gemischte Brüche, Verhältnisse ...)")), new _hx_array(array("syntax_quantity_correct_feedback", "Die Syntax der Antwort ist richtig.")), new _hx_array(array("syntax_list", "Liste")), new _hx_array(array("syntax_list_description", "(Listen ohne Komma als Trennzeichen oder Klammern)")), new _hx_array(array("syntax_list_correct_feedback", "Die Syntax der Antwort ist richtig.")), new _hx_array(array("syntax_string", "Text")), new _hx_array(array("syntax_string_description", "(Wörter, Sätze, Zeichenketten)")), new _hx_array(array("syntax_string_correct_feedback", "Die Syntax der Antwort ist richtig.")), new _hx_array(array("none", "Keine")), new _hx_array(array("edit", "Bearbeiten")), new _hx_array(array("accept", "Akzeptieren")), new _hx_array(array("cancel", "Abbrechen")), new _hx_array(array("explog", "exp/log")), new _hx_array(array("trigonometric", "Trigonometrische")), new _hx_array(array("hyperbolic", "Hyperbolische")), new _hx_array(array("arithmetic", "Arithmetische")), new _hx_array(array("all", "Alle")), new _hx_array(array("tolerance", "Toleranz")), new _hx_array(array("relative", "Relative")), new _hx_array(array("relativetolerance", "Relative Toleranz")), new _hx_array(array("precision", "Genauigkeit")), new _hx_array(array("implicit_times_operator", "Unsichtbares Multiplikationszeichen")), new _hx_array(array("times_operator", "Multiplikationszeichen")), new _hx_array(array("imaginary_unit", "Imaginäre Einheit")), new _hx_array(array("mixedfractions", "Gemischte Brüche")), new _hx_array(array("constants", "Konstanten")), new _hx_array(array("functions", "Funktionen")), new _hx_array(array("userfunctions", "Nutzerfunktionen")), new _hx_array(array("units", "Einheiten")), new _hx_array(array("unitprefixes", "Einheitenpräfixe")), new _hx_array(array("syntaxparams", "Syntaxoptionen")), new _hx_array(array("syntaxparams_expression", "Optionen für Allgemein")), new _hx_array(array("syntaxparams_quantity", "Optionen für Menge")), new _hx_array(array("syntaxparams_list", "Optionen für Liste")), new _hx_array(array("allowedinput", "Zulässige Eingabe")), new _hx_array(array("manual", "Anleitung")), new _hx_array(array("correctanswer", "Richtige Antwort")), new _hx_array(array("variables", "Variablen")), new _hx_array(array("validation", "Validierung")), new _hx_array(array("preview", "Vorschau")), new _hx_array(array("correctanswertabhelp", "Geben Sie die richtige Antwort unter Verwendung des WIRIS editors ein. Wählen Sie auch die Verhaltensweise des Formel-Editors, wenn er vom Schüler verwendet wird.\x0A")), new _hx_array(array("assertionstabhelp", "Wählen Sie die Eigenschaften, welche die Schülerantwort erfüllen muss: Ob Sie zum Beispiel vereinfacht, faktorisiert, durch physikalische Einheiten ausgedrückt werden oder eine bestimmte numerische Genauigkeit aufweisen soll.")), new _hx_array(array("variablestabhelp", "Schreiben Sie einen Algorithmus mit WIRIS cas, um zufällige Variablen zu erstellen: Zahlen, Ausdrücke, grafische Darstellungen oder eine Benotungsfunktion. Sie können auch das Ausgabeformat bestimmen, in welchem die Variablen dem Schüler angezeigt werden.\x0A")), new _hx_array(array("testtabhelp", "Geben Sie eine mögliche Schülerantwort ein, um die Verhaltensweise der Frage zu simulieren. Sie verwenden das gleiche Tool, das der Schüler verwenden wird. Beachten Sie bitte, dass Sie auch die Bewertungskriterien, den Erfolg und das automatische Feedback testen können.\x0A")), new _hx_array(array("start", "Start")), new _hx_array(array("test", "Testen")), new _hx_array(array("clicktesttoevaluate", "Klicken Sie auf die Schaltfläche „Testen“, um die aktuelle Antwort zu validieren.")), new _hx_array(array("correct", "Richtig!")), new _hx_array(array("incorrect", "Falsch!")), new _hx_array(array("partiallycorrect", "Teilweise richtig!")), new _hx_array(array("inputmethod", "Eingabemethode")), new _hx_array(array("compoundanswer", "Zusammengesetzte Antwort")), new _hx_array(array("answerinputinlineeditor", "WIRIS editor eingebettet")), new _hx_array(array("answerinputpopupeditor", "WIRIS editor in Popup")), new _hx_array(array("answerinputplaintext", "Eingabefeld mit reinem Text")), new _hx_array(array("showauxiliarcas", "WIRIS cas einbeziehen")), new _hx_array(array("initialcascontent", "Anfangsinhalt")), new _hx_array(array("tolerancedigits", "Toleranzstellen")), new _hx_array(array("validationandvariables", "Validierung und Variablen")), new _hx_array(array("algorithmlanguage", "Algorithmussprache")), new _hx_array(array("calculatorlanguage", "Sprache des Rechners")), new _hx_array(array("hasalgorithm", "Hat Algorithmus")), new _hx_array(array("comparison", "Vergleich")), new _hx_array(array("properties", "Eigenschaften")), new _hx_array(array("studentanswer", "Schülerantwort")), new _hx_array(array("poweredbywiris", "Powered by WIRIS")), new _hx_array(array("yourchangeswillbelost", "Bei Verlassen des Fensters gehen Ihre Änderungen verloren.")), new _hx_array(array("outputoptions", "Ausgabeoptionen")), new _hx_array(array("catalan", "Català")), new _hx_array(array("english", "English")), new _hx_array(array("spanish", "Español")), new _hx_array(array("estonian", "Eesti")), new _hx_array(array("basque", "Euskara")), new _hx_array(array("french", "Français")), new _hx_array(array("german", "Deutsch")), new _hx_array(array("italian", "Italiano")), new _hx_array(array("dutch", "Nederlands")), new _hx_array(array("portuguese", "Português (Portugal)")), new _hx_array(array("javaAppletMissing", "Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>.")), new _hx_array(array("allanswerscorrect", "Alle Antworten müssen richtig sein.")), new _hx_array(array("distributegrade", "Note zuweisen")), new _hx_array(array("no", "Nein")), new _hx_array(array("add", "Hinzufügen")), new _hx_array(array("replaceeditor", "Editor ersetzen")), new _hx_array(array("list", "Liste")), new _hx_array(array("questionxml", "Frage-XML")), new _hx_array(array("grammarurl", "Grammatik-URL")), new _hx_array(array("reservedwords", "Reservierte Wörter")), new _hx_array(array("forcebrackets", "Listen benötigen immer geschweifte Klammern „{}“.")), new _hx_array(array("commaasitemseparator", "Verwenden Sie ein Komma „,“ zur Trennung von Listenelementen.")), new _hx_array(array("confirmimportdeprecated", "Frage importieren? Die Frage, die Sie öffnen möchten, beinhaltet veraltete Merkmale. Durch den Importvorgang kann die Verhaltensweise der Frage leicht verändert werden. Es wird dringend empfohlen, die Frage nach dem Importieren gründlich zu überprüfen.")), new _hx_array(array("comparesets", "Als Mengen vergleichen")), new _hx_array(array("nobracketslist", "Listen ohne Klammern")), new _hx_array(array("warningtoleranceprecision", "Weniger Genauigkeitstellen als Toleranzstellen.")), new _hx_array(array("actionimport", "Importieren")), new _hx_array(array("actionexport", "Exportieren")), new _hx_array(array("usecase", "Schreibung anpassen")), new _hx_array(array("usespaces", "Abstände anpassen")), new _hx_array(array("notevaluate", "Argumente unausgewertet lassen")), new _hx_array(array("separators", "Trennzeichen")), new _hx_array(array("comma", "Komma")), new _hx_array(array("commarole", "Funktion des Kommazeichens „,“")), new _hx_array(array("point", "Punkt")), new _hx_array(array("pointrole", "Funktion des Punktzeichens „.“")), new _hx_array(array("space", "Leerzeichen")), new _hx_array(array("spacerole", "Funktion des Leerzeichens")), new _hx_array(array("decimalmark", "Dezimalstellen")), new _hx_array(array("digitsgroup", "Zahlengruppen")), new _hx_array(array("listitems", "Listenelemente")), new _hx_array(array("nothing", "Nichts")), new _hx_array(array("intervals", "Intervalle")), new _hx_array(array("warningprecision15", "Die Präzision muss zwischen 1 und 15 liegen.")), new _hx_array(array("decimalSeparator", "Dezimalstelle")), new _hx_array(array("thousandsSeparator", "Tausender")), new _hx_array(array("notation", "Notation")), new _hx_array(array("invisible", "Unsichtbar")), new _hx_array(array("auto", "Automatisch")), new _hx_array(array("fixedDecimal", "Feste")), new _hx_array(array("floatingDecimal", "Dezimalstelle")), new _hx_array(array("scientific", "Wissenschaftlich")), new _hx_array(array("example", "Beispiel")), new _hx_array(array("warningreltolfixedprec", "Relative Toleranz mit fester Dezimalnotation.")), new _hx_array(array("warningabstolfloatprec", "Absolute Toleranz mit fließender Dezimalnotation.")), new _hx_array(array("answerinputinlinehand", "WIRIS hand eingebettet")), new _hx_array(array("absolutetolerance", "Absolute Toleranz")), new _hx_array(array("clicktoeditalgorithm", "Ihr Browser <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">unterstützt kein Java</a>. Klicken Sie auf die Schaltfläche, um die Anwendung WIRIS cas herunterzuladen und auszuführen. Mit dieser können Sie den Fragen-Algorithmus bearbeiten.")), new _hx_array(array("launchwiriscas", "WIRIS cas starten")), new _hx_array(array("sendinginitialsession", "Ursprüngliche Sitzung senden ...")), new _hx_array(array("waitingforupdates", "Auf Updates warten ...")), new _hx_array(array("sessionclosed", "Kommunikation geschlossen.")), new _hx_array(array("gotsession", "Empfangene Überarbeitung \${n}.")), new _hx_array(array("thecorrectansweris", "Die richtige Antwort ist")), new _hx_array(array("poweredby", "Angetrieben durch ")), new _hx_array(array("refresh", "Korrekte Antwort erneuern")), new _hx_array(array("fillwithcorrect", "Mit korrekter Antwort ausfüllen")), new _hx_array(array("lang", "el")), new _hx_array(array("comparisonwithstudentanswer", "Σύγκριση με απάντηση μαθητή")), new _hx_array(array("otheracceptedanswers", "Άλλες αποδεκτές απαντήσεις")), new _hx_array(array("equivalent_literal", "Κυριολεκτικά ίση")), new _hx_array(array("equivalent_literal_correct_feedback", "Η απάντηση είναι κυριολεκτικά ίση με τη σωστή.")), new _hx_array(array("equivalent_symbolic", "Μαθηματικά ίση")), new _hx_array(array("equivalent_symbolic_correct_feedback", "Η απάντηση είναι μαθηματικά ίση με τη σωστή.")), new _hx_array(array("equivalent_set", "Ίσα σύνολα")), new _hx_array(array("equivalent_set_correct_feedback", "Το σύνολο της απάντησης είναι ίσο με το σωστό.")), new _hx_array(array("equivalent_equations", "Ισοδύναμες εξισώσεις")), new _hx_array(array("equivalent_equations_correct_feedback", "Η απάντηση έχει τις ίδιες λύσεις με τη σωστή.")), new _hx_array(array("equivalent_function", "Συνάρτηση βαθμολόγησης")), new _hx_array(array("equivalent_function_correct_feedback", "Η απάντηση είναι σωστή.")), new _hx_array(array("equivalent_all", "Οποιαδήποτε απάντηση")), new _hx_array(array("any", "οποιαδήποτε")), new _hx_array(array("gradingfunction", "Συνάρτηση βαθμολόγησης")), new _hx_array(array("additionalproperties", "Πρόσθετες ιδιότητες")), new _hx_array(array("structure", "Δομή")), new _hx_array(array("none", "καμία")), new _hx_array(array("None", "Καμία")), new _hx_array(array("check_integer_form", "έχει μορφή ακέραιου")), new _hx_array(array("check_integer_form_correct_feedback", "Η απάντηση είναι ένας ακέραιος.")), new _hx_array(array("check_fraction_form", "έχει μορφή κλάσματος")), new _hx_array(array("check_fraction_form_correct_feedback", "Η απάντηση είναι ένα κλάσμα.")), new _hx_array(array("check_polynomial_form", "έχει πολυωνυμική μορφή")), new _hx_array(array("check_polynomial_form_correct_feedback", "Η απάντηση είναι ένα πολυώνυμο.")), new _hx_array(array("check_rational_function_form", "έχει μορφή λογικής συνάρτησης")), new _hx_array(array("check_rational_function_form_correct_feedback", "Η απάντηση είναι μια λογική συνάρτηση.")), new _hx_array(array("check_elemental_function_form", "είναι συνδυασμός στοιχειωδών συναρτήσεων")), new _hx_array(array("check_elemental_function_form_correct_feedback", "Η απάντηση είναι μια στοιχειώδης έκφραση.")), new _hx_array(array("check_scientific_notation", "εκφράζεται με επιστημονική σημειογραφία")), new _hx_array(array("check_scientific_notation_correct_feedback", "Η απάντηση εκφράζεται με επιστημονική σημειογραφία.")), new _hx_array(array("more", "Περισσότερες")), new _hx_array(array("check_simplified", "είναι απλοποιημένη")), new _hx_array(array("check_simplified_correct_feedback", "Η απάντηση είναι απλοποιημένη.")), new _hx_array(array("check_expanded", "είναι ανεπτυγμένη")), new _hx_array(array("check_expanded_correct_feedback", "Η απάντηση είναι ανεπτυγμένη.")), new _hx_array(array("check_factorized", "είναι παραγοντοποιημένη")), new _hx_array(array("check_factorized_correct_feedback", "Η απάντηση είναι παραγοντοποιημένη.")), new _hx_array(array("check_rationalized", "είναι αιτιολογημένη")), new _hx_array(array("check_rationalized_correct_feedback", "Η απάντηση είναι αιτιολογημένη.")), new _hx_array(array("check_no_common_factor", "δεν έχει κοινούς συντελεστές")), new _hx_array(array("check_no_common_factor_correct_feedback", "Η απάντηση δεν έχει κοινούς συντελεστές.")), new _hx_array(array("check_minimal_radicands", "έχει ελάχιστα υπόρριζα")), new _hx_array(array("check_minimal_radicands_correct_feedback", "Η απάντηση έχει ελάχιστα υπόρριζα.")), new _hx_array(array("check_divisible", "διαιρείται με το")), new _hx_array(array("check_divisible_correct_feedback", "Η απάντηση διαιρείται με το \${value}.")), new _hx_array(array("check_common_denominator", "έχει έναν κοινό παρονομαστή")), new _hx_array(array("check_common_denominator_correct_feedback", "Η απάντηση έχει έναν κοινό παρονομαστή.")), new _hx_array(array("check_unit", "έχει μονάδα ισοδύναμη με")), new _hx_array(array("check_unit_correct_feedback", "Η μονάδα της απάντηση είναι \${unit}.")), new _hx_array(array("check_unit_literal", "έχει μονάδα κυριολεκτικά ίση με")), new _hx_array(array("check_unit_literal_correct_feedback", "Η μονάδα της απάντηση είναι \${unit}.")), new _hx_array(array("check_no_more_decimals", "έχει λιγότερα ή ίσα δεκαδικά του")), new _hx_array(array("check_no_more_decimals_correct_feedback", "Η απάντηση έχει \${digits} ή λιγότερα δεκαδικά.")), new _hx_array(array("check_no_more_digits", "έχει λιγότερα ή ίσα ψηφία του")), new _hx_array(array("check_no_more_digits_correct_feedback", "Η απάντηση έχει \${digits} ή λιγότερα ψηφία.")), new _hx_array(array("syntax_expression", "Γενικά")), new _hx_array(array("syntax_expression_description", "(τύποι, εκφράσεις, εξισώσεις, μήτρες...)")), new _hx_array(array("syntax_expression_correct_feedback", "Η σύνταξη της απάντησης είναι σωστή.")), new _hx_array(array("syntax_quantity", "Ποσότητα")), new _hx_array(array("syntax_quantity_description", "(αριθμοί, μονάδες μέτρησης, κλάσματα, μικτά κλάσματα, αναλογίες,...)")), new _hx_array(array("syntax_quantity_correct_feedback", "Η σύνταξη της απάντησης είναι σωστή.")), new _hx_array(array("syntax_list", "Λίστα")), new _hx_array(array("syntax_list_description", "(λίστες χωρίς διαχωριστικό κόμμα ή παρενθέσεις)")), new _hx_array(array("syntax_list_correct_feedback", "Η σύνταξη της απάντησης είναι σωστή.")), new _hx_array(array("syntax_string", "Κείμενο")), new _hx_array(array("syntax_string_description", "(λέξεις, προτάσεις, συμβολοσειρές χαρακτήρων)")), new _hx_array(array("syntax_string_correct_feedback", "Η σύνταξη της απάντησης είναι σωστή.")), new _hx_array(array("none", "καμία")), new _hx_array(array("edit", "Επεξεργασία")), new _hx_array(array("accept", "ΟΚ")), new _hx_array(array("cancel", "Άκυρο")), new _hx_array(array("explog", "exp/log")), new _hx_array(array("trigonometric", "τριγωνομετρική")), new _hx_array(array("hyperbolic", "υπερβολική")), new _hx_array(array("arithmetic", "αριθμητική")), new _hx_array(array("all", "όλες")), new _hx_array(array("tolerance", "Ανοχή")), new _hx_array(array("relative", "σχετική")), new _hx_array(array("relativetolerance", "Σχετική ανοχή")), new _hx_array(array("precision", "Ακρίβεια")), new _hx_array(array("implicit_times_operator", "Μη ορατός τελεστής επί")), new _hx_array(array("times_operator", "Τελεστής επί")), new _hx_array(array("imaginary_unit", "Φανταστική μονάδα")), new _hx_array(array("mixedfractions", "Μικτά κλάσματα")), new _hx_array(array("constants", "Σταθερές")), new _hx_array(array("functions", "Συναρτήσεις")), new _hx_array(array("userfunctions", "Συναρτήσεις χρήστη")), new _hx_array(array("units", "Μονάδες")), new _hx_array(array("unitprefixes", "Προθέματα μονάδων")), new _hx_array(array("syntaxparams", "Επιλογές σύνταξης")), new _hx_array(array("syntaxparams_expression", "Επιλογές για γενικά")), new _hx_array(array("syntaxparams_quantity", "Επιλογές για ποσότητα")), new _hx_array(array("syntaxparams_list", "Επιλογές για λίστα")), new _hx_array(array("allowedinput", "Επιτρεπόμενο στοιχείο εισόδου")), new _hx_array(array("manual", "Εγχειρίδιο")), new _hx_array(array("correctanswer", "Σωστή απάντηση")), new _hx_array(array("variables", "Μεταβλητές")), new _hx_array(array("validation", "Επικύρωση")), new _hx_array(array("preview", "Προεπισκόπηση")), new _hx_array(array("correctanswertabhelp", "Εισαγάγετε τη σωστή απάντηση χρησιμοποιώντας τον επεξεργαστή WIRIS. Επιλέξτε επίσης τη συμπεριφορά για τον επεξεργαστή τύπων, όταν χρησιμοποιείται από τον μαθητή.")), new _hx_array(array("assertionstabhelp", "Επιλέξτε τις ιδιότητες που πρέπει να ικανοποιεί η απάντηση του μαθητή. Για παράδειγμα, εάν πρέπει να είναι απλοποιημένη, παραγοντοποιημένη, εκφρασμένη σε φυσικές μονάδες ή να έχει συγκεκριμένη αριθμητική ακρίβεια.")), new _hx_array(array("variablestabhelp", "Γράψτε έναν αλγόριθμο με το WIRIS cas για να δημιουργήσετε τυχαίες μεταβλητές: αριθμούς, εκφράσεις, σχεδιαγράμματα ή μια συνάρτηση βαθμολόγησης. Μπορείτε επίσης να καθορίσετε τη μορφή εξόδου των μεταβλητών που θα εμφανίζονται στον μαθητή.")), new _hx_array(array("testtabhelp", "Εισαγάγετε μια πιθανή απάντηση του μαθητή για να προσομοιώσετε τη συμπεριφορά της ερώτησης. Χρησιμοποιείτε το ίδιο εργαλείο με αυτό που θα χρησιμοποιήσει ο μαθητής. Σημειώνεται ότι μπορείτε επίσης να ελέγξετε τα κριτήρια αξιολόγησης, την επιτυχία και τα αυτόματα σχόλια.")), new _hx_array(array("start", "Έναρξη")), new _hx_array(array("test", "Δοκιμή")), new _hx_array(array("clicktesttoevaluate", "Κάντε κλικ στο κουμπί «Δοκιμή» για να επικυρώσετε τη σωστή απάντηση.")), new _hx_array(array("correct", "Σωστό!")), new _hx_array(array("incorrect", "Λάθος!")), new _hx_array(array("partiallycorrect", "Εν μέρει σωστό!")), new _hx_array(array("inputmethod", "Μέθοδος εισόδου")), new _hx_array(array("compoundanswer", "Σύνθετη απάντηση")), new _hx_array(array("answerinputinlineeditor", "Επεξεργαστής WIRIS ενσωματωμένος")), new _hx_array(array("answerinputpopupeditor", "Επεξεργαστής WIRIS σε αναδυόμενο πλαίσιο")), new _hx_array(array("answerinputplaintext", "Πεδίο εισόδου απλού κειμένου")), new _hx_array(array("showauxiliarcas", "Συμπερίληψη WIRIS cas")), new _hx_array(array("initialcascontent", "Αρχικό περιεχόμενο")), new _hx_array(array("tolerancedigits", "Ψηφία ανοχής")), new _hx_array(array("validationandvariables", "Επικύρωση και μεταβλητές")), new _hx_array(array("algorithmlanguage", "Γλώσσα αλγόριθμου")), new _hx_array(array("calculatorlanguage", "Γλώσσα υπολογιστή")), new _hx_array(array("hasalgorithm", "Έχει αλγόριθμο")), new _hx_array(array("comparison", "Σύγκριση")), new _hx_array(array("properties", "Ιδιότητες")), new _hx_array(array("studentanswer", "Απάντηση μαθητή")), new _hx_array(array("poweredbywiris", "Παρέχεται από τη WIRIS")), new _hx_array(array("yourchangeswillbelost", "Οι αλλαγές σας θα χαθούν εάν αποχωρήσετε από το παράθυρο.")), new _hx_array(array("outputoptions", "Επιλογές εξόδου")), new _hx_array(array("catalan", "Català")), new _hx_array(array("english", "English")), new _hx_array(array("spanish", "Español")), new _hx_array(array("estonian", "Eesti")), new _hx_array(array("basque", "Euskara")), new _hx_array(array("french", "Français")), new _hx_array(array("german", "Deutsch")), new _hx_array(array("italian", "Italiano")), new _hx_array(array("dutch", "Nederlands")), new _hx_array(array("portuguese", "Português (Portugal)")), new _hx_array(array("javaAppletMissing", "Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>.")), new _hx_array(array("allanswerscorrect", "Όλες οι απαντήσεις πρέπει να είναι σωστές")), new _hx_array(array("distributegrade", "Κατανομή βαθμών")), new _hx_array(array("no", "Όχι")), new _hx_array(array("add", "Προσθήκη")), new _hx_array(array("replaceeditor", "Αντικατάσταση επεξεργαστή")), new _hx_array(array("list", "Λίστα")), new _hx_array(array("questionxml", "XML ερώτησης")), new _hx_array(array("grammarurl", "URL γραμματικής")), new _hx_array(array("reservedwords", "Ανεστραμμένες λέξεις")), new _hx_array(array("forcebrackets", "Για τις λίστες χρειάζονται πάντα άγκιστρα «{}».")), new _hx_array(array("commaasitemseparator", "Χρησιμοποιήστε το κόμμα «,» ως διαχωριστικό στοιχείων λίστας.")), new _hx_array(array("confirmimportdeprecated", "Εισαγωγή της ερώτησης; Η ερώτηση που πρόκειται να ανοίξετε περιέχει δυνατότητες που έχουν καταργηθεί. Η διαδικασία εισαγωγής μπορεί να αλλάξει λίγο τη συμπεριφορά της ερώτησης. Θα πρέπει να εξετάσετε προσεκτικά την ερώτηση μετά από την εισαγωγή της.")), new _hx_array(array("comparesets", "Σύγκριση ως συνόλων")), new _hx_array(array("nobracketslist", "Λίστες χωρίς άγκιστρα")), new _hx_array(array("warningtoleranceprecision", "Λιγότερα ψηφία ακρίβειας από τα ψηφία ανοχής.")), new _hx_array(array("actionimport", "Εισαγωγή")), new _hx_array(array("actionexport", "Εξαγωγή")), new _hx_array(array("usecase", "Συμφωνία πεζών-κεφαλαίων")), new _hx_array(array("usespaces", "Συμφωνία διαστημάτων")), new _hx_array(array("notevaluate", "Διατήρηση των ορισμάτων χωρίς αξιολόγηση")), new _hx_array(array("separators", "Διαχωριστικά")), new _hx_array(array("comma", "Κόμμα")), new _hx_array(array("commarole", "Ρόλος του χαρακτήρα «,» (κόμμα)")), new _hx_array(array("point", "Τελεία")), new _hx_array(array("pointrole", "Ρόλος του χαρακτήρα «.» (τελεία)")), new _hx_array(array("space", "Διάστημα")), new _hx_array(array("spacerole", "Ρόλος του χαρακτήρα διαστήματος")), new _hx_array(array("decimalmark", "Δεκαδικά ψηφία")), new _hx_array(array("digitsgroup", "Ομάδες ψηφίων")), new _hx_array(array("listitems", "Στοιχεία λίστας")), new _hx_array(array("nothing", "Τίποτα")), new _hx_array(array("intervals", "Διαστήματα")), new _hx_array(array("warningprecision15", "Η ακρίβεια πρέπει να είναι μεταξύ 1 και 15.")), new _hx_array(array("decimalSeparator", "Δεκαδικό")), new _hx_array(array("thousandsSeparator", "Χιλιάδες")), new _hx_array(array("notation", "Σημειογραφία")), new _hx_array(array("invisible", "Μη ορατό")), new _hx_array(array("auto", "Αυτόματα")), new _hx_array(array("fixedDecimal", "Σταθερό")), new _hx_array(array("floatingDecimal", "Δεκαδικό")), new _hx_array(array("scientific", "Επιστημονικό")), new _hx_array(array("example", "Παράδειγμα")), new _hx_array(array("warningreltolfixedprec", "Σχετική ανοχή με σημειογραφία σταθερής υποδιαστολής.")), new _hx_array(array("warningabstolfloatprec", "Απόλυτη ανοχή με σημειογραφία κινητής υποδιαστολής.")), new _hx_array(array("answerinputinlinehand", "WIRIS ενσωματωμένο")), new _hx_array(array("absolutetolerance", "Απόλυτη ανοχή")), new _hx_array(array("clicktoeditalgorithm", "Το πρόγραμμα περιήγησης που χρησιμοποιείτε δεν <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">υποστηρίζει Java</a>. Κάντε κλικ στο κουμπί για τη λήψη και την εκτέλεση της εφαρμογής WIRIS cas για επεξεργασία του αλγόριθμου ερώτησης.")), new _hx_array(array("launchwiriscas", "Εκκίνηση του WIRIS cas")), new _hx_array(array("sendinginitialsession", "Αποστολή αρχικής περιόδου σύνδεσης...")), new _hx_array(array("waitingforupdates", "Αναμονή για ενημερώσεις...")), new _hx_array(array("sessionclosed", "Η επικοινωνία έκλεισε.")), new _hx_array(array("gotsession", "Λήφθηκε αναθεώρηση \${n}.")), new _hx_array(array("thecorrectansweris", "Η σωστή απάντηση είναι")), new _hx_array(array("poweredby", "Με την υποστήριξη της")), new _hx_array(array("refresh", "Ανανέωση της σωστής απάντησης")), new _hx_array(array("fillwithcorrect", "Συμπλήρωση με τη σωστή απάντηση")), new _hx_array(array("lang", "pt_br")), new _hx_array(array("comparisonwithstudentanswer", "Comparação com a resposta do aluno")), new _hx_array(array("otheracceptedanswers", "Outras respostas aceitas")), new _hx_array(array("equivalent_literal", "Literalmente igual")), new _hx_array(array("equivalent_literal_correct_feedback", "A resposta é literalmente igual à correta.")), new _hx_array(array("equivalent_symbolic", "Matematicamente igual")), new _hx_array(array("equivalent_symbolic_correct_feedback", "A resposta é matematicamente igual à correta.")), new _hx_array(array("equivalent_set", "Iguais aos conjuntos")), new _hx_array(array("equivalent_set_correct_feedback", "O conjunto de respostas é igual ao correto.")), new _hx_array(array("equivalent_equations", "Equações equivalentes")), new _hx_array(array("equivalent_equations_correct_feedback", "A resposta tem as mesmas soluções da correta.")), new _hx_array(array("equivalent_function", "Cálculo da nota")), new _hx_array(array("equivalent_function_correct_feedback", "A resposta está correta.")), new _hx_array(array("equivalent_all", "Qualquer reposta")), new _hx_array(array("any", "qualquer")), new _hx_array(array("gradingfunction", "Cálculo da nota")), new _hx_array(array("additionalproperties", "Propriedades adicionais")), new _hx_array(array("structure", "Estrutura")), new _hx_array(array("none", "nenhuma")), new _hx_array(array("None", "Nenhuma")), new _hx_array(array("check_integer_form", "tem forma de número inteiro")), new _hx_array(array("check_integer_form_correct_feedback", "A resposta é um número inteiro.")), new _hx_array(array("check_fraction_form", "tem forma de fração")), new _hx_array(array("check_fraction_form_correct_feedback", "A resposta é uma fração.")), new _hx_array(array("check_polynomial_form", "tem forma polinomial")), new _hx_array(array("check_polynomial_form_correct_feedback", "A resposta é um polinomial.")), new _hx_array(array("check_rational_function_form", "tem forma de função racional")), new _hx_array(array("check_rational_function_form_correct_feedback", "A resposta é uma função racional.")), new _hx_array(array("check_elemental_function_form", "é uma combinação de funções elementárias")), new _hx_array(array("check_elemental_function_form_correct_feedback", "A resposta é uma expressão elementar.")), new _hx_array(array("check_scientific_notation", "é expressa em notação científica")), new _hx_array(array("check_scientific_notation_correct_feedback", "A resposta é expressa em notação científica.")), new _hx_array(array("more", "Mais")), new _hx_array(array("check_simplified", "é simplificada")), new _hx_array(array("check_simplified_correct_feedback", "A resposta é simplificada.")), new _hx_array(array("check_expanded", "é expandida")), new _hx_array(array("check_expanded_correct_feedback", "A resposta é expandida.")), new _hx_array(array("check_factorized", "é fatorizada")), new _hx_array(array("check_factorized_correct_feedback", "A resposta é fatorizada.")), new _hx_array(array("check_rationalized", "é racionalizada")), new _hx_array(array("check_rationalized_correct_feedback", "A resposta é racionalizada.")), new _hx_array(array("check_no_common_factor", "não tem fatores comuns")), new _hx_array(array("check_no_common_factor_correct_feedback", "A resposta não tem fatores comuns.")), new _hx_array(array("check_minimal_radicands", "tem radiciação mínima")), new _hx_array(array("check_minimal_radicands_correct_feedback", "A resposta tem radiciação mínima.")), new _hx_array(array("check_divisible", "é divisível por")), new _hx_array(array("check_divisible_correct_feedback", "A resposta é divisível por \${value}.")), new _hx_array(array("check_common_denominator", "tem um único denominador comum")), new _hx_array(array("check_common_denominator_correct_feedback", "A resposta tem um único denominador comum.")), new _hx_array(array("check_unit", "tem unidade equivalente a")), new _hx_array(array("check_unit_correct_feedback", "A unidade da resposta é \${unit}.")), new _hx_array(array("check_unit_literal", "tem unidade literalmente igual a")), new _hx_array(array("check_unit_literal_correct_feedback", "A unidade da resposta é \${unit}.")), new _hx_array(array("check_no_more_decimals", "tem menos ou os mesmos decimais que")), new _hx_array(array("check_no_more_decimals_correct_feedback", "A resposta tem \${digits} decimais ou menos.")), new _hx_array(array("check_no_more_digits", "tem menos ou os mesmos dígitos que")), new _hx_array(array("check_no_more_digits_correct_feedback", "A resposta tem \${digits} dígitos ou menos.")), new _hx_array(array("syntax_expression", "Geral")), new _hx_array(array("syntax_expression_description", "(fórmulas, expressões, equações, matrizes...)")), new _hx_array(array("syntax_expression_correct_feedback", "A sintaxe da resposta está correta.")), new _hx_array(array("syntax_quantity", "Quantidade")), new _hx_array(array("syntax_quantity_description", "(números, unidades de medida, frações, frações mistas, proporções...)")), new _hx_array(array("syntax_quantity_correct_feedback", "A sintaxe da resposta está correta.")), new _hx_array(array("syntax_list", "Lista")), new _hx_array(array("syntax_list_description", "(listas sem separação por vírgula ou chaves)")), new _hx_array(array("syntax_list_correct_feedback", "A sintaxe da resposta está correta.")), new _hx_array(array("syntax_string", "Texto")), new _hx_array(array("syntax_string_description", "(palavras, frases, sequências de caracteres)")), new _hx_array(array("syntax_string_correct_feedback", "A sintaxe da resposta está correta.")), new _hx_array(array("none", "nenhuma")), new _hx_array(array("edit", "Editar")), new _hx_array(array("accept", "OK")), new _hx_array(array("cancel", "Cancelar")), new _hx_array(array("explog", "exp/log")), new _hx_array(array("trigonometric", "trigonométrica")), new _hx_array(array("hyperbolic", "hiperbólica")), new _hx_array(array("arithmetic", "aritmética")), new _hx_array(array("all", "tudo")), new _hx_array(array("tolerance", "Tolerância")), new _hx_array(array("relative", "relativa")), new _hx_array(array("relativetolerance", "Tolerância relativa")), new _hx_array(array("precision", "Precisão")), new _hx_array(array("implicit_times_operator", "Sinal de multiplicação invisível")), new _hx_array(array("times_operator", "Sinal de multiplicação")), new _hx_array(array("imaginary_unit", "Unidade imaginária")), new _hx_array(array("mixedfractions", "Frações mistas")), new _hx_array(array("constants", "Constantes")), new _hx_array(array("functions", "Funções")), new _hx_array(array("userfunctions", "Funções do usuário")), new _hx_array(array("units", "Unidades")), new _hx_array(array("unitprefixes", "Prefixos das unidades")), new _hx_array(array("syntaxparams", "Opções de sintaxe")), new _hx_array(array("syntaxparams_expression", "Opções gerais")), new _hx_array(array("syntaxparams_quantity", "Opções de quantidade")), new _hx_array(array("syntaxparams_list", "Opções de lista")), new _hx_array(array("allowedinput", "Entrada permitida")), new _hx_array(array("manual", "Manual")), new _hx_array(array("correctanswer", "Resposta correta")), new _hx_array(array("variables", "Variáveis")), new _hx_array(array("validation", "Validação")), new _hx_array(array("preview", "Prévia")), new _hx_array(array("correctanswertabhelp", "Insira a resposta correta usando o WIRIS editor. Selecione também o comportamento do editor de fórmulas quando usado pelo aluno.")), new _hx_array(array("assertionstabhelp", "Selecione quais propriedades a resposta do aluno deve verificar. Por exemplo, se ela deve ser simplificada, fatorizada, expressa em unidades físicas ou ter uma precisão numérica específica.")), new _hx_array(array("variablestabhelp", "Escreva um algoritmo com o WIRIS cas para criar variáveis aleatórias: números, expressões, gráficos ou cálculo de nota. Você também pode especificar o formato de saída das variáveis exibidas para o aluno.")), new _hx_array(array("testtabhelp", "Insira um estudante em potencial para simular o comportamento da questão. Você está usando a mesma ferramenta que o aluno usará. Note que também é possível testar o critério de avaliação, sucesso e comentário automático.")), new _hx_array(array("start", "Iniciar")), new _hx_array(array("test", "Testar")), new _hx_array(array("clicktesttoevaluate", "Clique no botão Testar para validar a resposta atual.")), new _hx_array(array("correct", "Correta!")), new _hx_array(array("incorrect", "Incorreta!")), new _hx_array(array("partiallycorrect", "Parcialmente correta!")), new _hx_array(array("inputmethod", "Método de entrada")), new _hx_array(array("compoundanswer", "Resposta composta")), new _hx_array(array("answerinputinlineeditor", "WIRIS editor integrado")), new _hx_array(array("answerinputpopupeditor", "WIRIS editor em pop up")), new _hx_array(array("answerinputplaintext", "Campo de entrada de texto simples")), new _hx_array(array("showauxiliarcas", "Incluir WIRIS cas")), new _hx_array(array("initialcascontent", "Conteúdo inicial")), new _hx_array(array("tolerancedigits", "Dígitos de tolerância")), new _hx_array(array("validationandvariables", "Validação e variáveis")), new _hx_array(array("algorithmlanguage", "Linguagem do algoritmo")), new _hx_array(array("calculatorlanguage", "Linguagem da calculadora")), new _hx_array(array("hasalgorithm", "Tem algoritmo")), new _hx_array(array("comparison", "Comparação")), new _hx_array(array("properties", "Propriedades")), new _hx_array(array("studentanswer", "Resposta do aluno")), new _hx_array(array("poweredbywiris", "Fornecido por WIRIS")), new _hx_array(array("yourchangeswillbelost", "As alterações serão perdidas se você sair da janela.")), new _hx_array(array("outputoptions", "Opções de saída")), new _hx_array(array("catalan", "Català")), new _hx_array(array("english", "English")), new _hx_array(array("spanish", "Español")), new _hx_array(array("estonian", "Eesti")), new _hx_array(array("basque", "Euskara")), new _hx_array(array("french", "Français")), new _hx_array(array("german", "Deutsch")), new _hx_array(array("italian", "Italiano")), new _hx_array(array("dutch", "Nederlands")), new _hx_array(array("portuguese", "Português (Portugal)")), new _hx_array(array("javaAppletMissing", "Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>.")), new _hx_array(array("allanswerscorrect", "Todas as respostas devem estar corretas")), new _hx_array(array("distributegrade", "Distribuir notas")), new _hx_array(array("no", "Não")), new _hx_array(array("add", "Adicionar")), new _hx_array(array("replaceeditor", "Substituir editor")), new _hx_array(array("list", "Lista")), new _hx_array(array("questionxml", "XML da pergunta")), new _hx_array(array("grammarurl", "URL da gramática")), new _hx_array(array("reservedwords", "Palavras reservadas")), new _hx_array(array("forcebrackets", "As listas sempre precisam de chaves “{}”.")), new _hx_array(array("commaasitemseparator", "Use vírgula “,” para separar itens na lista.")), new _hx_array(array("confirmimportdeprecated", "Importar questão? A questão prestes a ser aberta contém recursos ultrapassados. O processo de importação pode alterar um pouco o comportamento da questão. É recomendável que você teste a questão atentamente após importá-la.")), new _hx_array(array("comparesets", "Comparar como conjuntos")), new _hx_array(array("nobracketslist", "Listas sem chaves")), new _hx_array(array("warningtoleranceprecision", "Menos dígitos de precisão do que dígitos de tolerância.")), new _hx_array(array("actionimport", "Importar")), new _hx_array(array("actionexport", "Exportar")), new _hx_array(array("usecase", "Coincidir maiúsculas/minúsculas")), new _hx_array(array("usespaces", "Coincidir espaços")), new _hx_array(array("notevaluate", "Manter argumentos não avaliados")), new _hx_array(array("separators", "Separadores")), new _hx_array(array("comma", "Vírgula")), new _hx_array(array("commarole", "Função do caractere vírgula “,”")), new _hx_array(array("point", "Ponto")), new _hx_array(array("pointrole", "Função do caractere ponto “.”")), new _hx_array(array("space", "Espaço")), new _hx_array(array("spacerole", "Função do caractere espaço")), new _hx_array(array("decimalmark", "Dígitos decimais")), new _hx_array(array("digitsgroup", "Grupos de dígitos")), new _hx_array(array("listitems", "Itens da lista")), new _hx_array(array("nothing", "Nada")), new _hx_array(array("intervals", "Intervalos")), new _hx_array(array("warningprecision15", "A precisão deve estar entre 1 e 15.")), new _hx_array(array("decimalSeparator", "Decimal")), new _hx_array(array("thousandsSeparator", "Milhares")), new _hx_array(array("notation", "Notação")), new _hx_array(array("invisible", "Invisível")), new _hx_array(array("auto", "Automática")), new _hx_array(array("fixedDecimal", "Fixa")), new _hx_array(array("floatingDecimal", "Decimal")), new _hx_array(array("scientific", "Científica")), new _hx_array(array("example", "Exemplo")), new _hx_array(array("warningreltolfixedprec", "Tolerância relativa com notação decimal fixa.")), new _hx_array(array("warningabstolfloatprec", "Tolerância absoluta com notação decimal flutuante.")), new _hx_array(array("answerinputinlinehand", "WIRIS hand integrado")), new _hx_array(array("absolutetolerance", "Tolerância absoluta")), new _hx_array(array("clicktoeditalgorithm", "O navegador não é <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">compatível com Java</a>. Clique no botão para baixar e executar o aplicativo WIRIS cas e editar o algoritmo da questão.")), new _hx_array(array("launchwiriscas", "Abrir WIRIS cas")), new _hx_array(array("sendinginitialsession", "Enviando sessão inicial...")), new _hx_array(array("waitingforupdates", "Aguardando atualizações...")), new _hx_array(array("sessionclosed", "Comunicação fechada.")), new _hx_array(array("gotsession", "Revisão \${n} recebida.")), new _hx_array(array("thecorrectansweris", "A resposta correta é")), new _hx_array(array("poweredby", "Fornecido por")), new _hx_array(array("refresh", "Renovar resposta correta")), new _hx_array(array("fillwithcorrect", "Preencher resposta correta")))); +com_wiris_quizzes_impl_Strings::$lang = new _hx_array(array(new _hx_array(array("lang", "en")), new _hx_array(array("comparisonwithstudentanswer", "Comparison with student answer")), new _hx_array(array("otheracceptedanswers", "Other accepted answers")), new _hx_array(array("equivalent_literal", "Literally equal")), new _hx_array(array("equivalent_literal_correct_feedback", "The answer is literally equal to the correct one.")), new _hx_array(array("equivalent_symbolic", "Mathematically equal")), new _hx_array(array("equivalent_symbolic_correct_feedback", "The answer is mathematically equal to the correct one.")), new _hx_array(array("equivalent_set", "Equal as sets")), new _hx_array(array("equivalent_set_correct_feedback", "The answer set is equal to the correct one.")), new _hx_array(array("equivalent_equations", "Equivalent equations")), new _hx_array(array("equivalent_equations_correct_feedback", "The answer has the same solutions as the correct one.")), new _hx_array(array("equivalent_function", "Grading function")), new _hx_array(array("equivalent_function_correct_feedback", "The answer is correct.")), new _hx_array(array("equivalent_all", "Any answer")), new _hx_array(array("any", "any")), new _hx_array(array("gradingfunction", "Grading function")), new _hx_array(array("additionalproperties", "Additional properties")), new _hx_array(array("structure", "Structure")), new _hx_array(array("none", "none")), new _hx_array(array("None", "None")), new _hx_array(array("check_integer_form", "has integer form")), new _hx_array(array("check_integer_form_correct_feedback", "The answer is an integer.")), new _hx_array(array("check_fraction_form", "has fraction form")), new _hx_array(array("check_fraction_form_correct_feedback", "The answer is a fraction.")), new _hx_array(array("check_polynomial_form", "has polynomial form")), new _hx_array(array("check_polynomial_form_correct_feedback", "The answer is a polynomial.")), new _hx_array(array("check_rational_function_form", "has rational function form")), new _hx_array(array("check_rational_function_form_correct_feedback", "The answer is a rational function.")), new _hx_array(array("check_elemental_function_form", "is a combination of elementary functions")), new _hx_array(array("check_elemental_function_form_correct_feedback", "The answer is an elementary expression.")), new _hx_array(array("check_scientific_notation", "is expressed in scientific notation")), new _hx_array(array("check_scientific_notation_correct_feedback", "The answer is expressed in scientific notation.")), new _hx_array(array("more", "More")), new _hx_array(array("check_simplified", "is simplified")), new _hx_array(array("check_simplified_correct_feedback", "The answer is simplified.")), new _hx_array(array("check_expanded", "is expanded")), new _hx_array(array("check_expanded_correct_feedback", "The answer is expanded.")), new _hx_array(array("check_factorized", "is factorized")), new _hx_array(array("check_factorized_correct_feedback", "The answer is factorized.")), new _hx_array(array("check_rationalized", "is rationalized")), new _hx_array(array("check_rationalized_correct_feedback", "The answer is rationalized.")), new _hx_array(array("check_no_common_factor", "doesn't have common factors")), new _hx_array(array("check_no_common_factor_correct_feedback", "The answer doesn't have common factors.")), new _hx_array(array("check_minimal_radicands", "has minimal radicands")), new _hx_array(array("check_minimal_radicands_correct_feedback", "The answer has minimal radicands.")), new _hx_array(array("check_divisible", "is divisible by")), new _hx_array(array("check_divisible_correct_feedback", "The answer is divisible by \${value}.")), new _hx_array(array("check_common_denominator", "has a single common denominator")), new _hx_array(array("check_common_denominator_correct_feedback", "The answer has a single common denominator.")), new _hx_array(array("check_unit", "has unit equivalent to")), new _hx_array(array("check_unit_correct_feedback", "The unit of the answer is \${unit}.")), new _hx_array(array("check_unit_literal", "has unit literally equal to")), new _hx_array(array("check_unit_literal_correct_feedback", "The unit of the answer is \${unit}.")), new _hx_array(array("check_no_more_decimals", "has less or equal decimals than")), new _hx_array(array("check_no_more_decimals_correct_feedback", "The answer has \${digits} or less decimals.")), new _hx_array(array("check_no_more_digits", "has less or equal digits than")), new _hx_array(array("check_no_more_digits_correct_feedback", "The answer has \${digits} or less digits.")), new _hx_array(array("syntax_expression", "General")), new _hx_array(array("syntax_expression_description", "(formulas, expressions, equations, matrices...)")), new _hx_array(array("syntax_expression_correct_feedback", "The answer syntax is correct.")), new _hx_array(array("syntax_quantity", "Quantity")), new _hx_array(array("syntax_quantity_description", "(numbers, measure units, fractions, mixed fractions, ratios...)")), new _hx_array(array("syntax_quantity_correct_feedback", "The answer syntax is correct.")), new _hx_array(array("syntax_list", "List")), new _hx_array(array("syntax_list_description", "(lists without comma separator or brackets)")), new _hx_array(array("syntax_list_correct_feedback", "The answer syntax is correct.")), new _hx_array(array("syntax_string", "Text")), new _hx_array(array("syntax_string_description", "(words, sentences, character strings)")), new _hx_array(array("syntax_string_correct_feedback", "The answer syntax is correct.")), new _hx_array(array("none", "none")), new _hx_array(array("edit", "Edit")), new _hx_array(array("accept", "OK")), new _hx_array(array("cancel", "Cancel")), new _hx_array(array("explog", "exp/log")), new _hx_array(array("trigonometric", "trigonometric")), new _hx_array(array("hyperbolic", "hyperbolic")), new _hx_array(array("arithmetic", "arithmetic")), new _hx_array(array("all", "all")), new _hx_array(array("tolerance", "Tolerance")), new _hx_array(array("relative", "relative")), new _hx_array(array("relativetolerance", "Relative tolerance")), new _hx_array(array("precision", "Precision")), new _hx_array(array("implicit_times_operator", "Invisible times operator")), new _hx_array(array("times_operator", "Times operator")), new _hx_array(array("imaginary_unit", "Imaginary unit")), new _hx_array(array("mixedfractions", "Mixed fractions")), new _hx_array(array("constants", "Constants")), new _hx_array(array("functions", "Functions")), new _hx_array(array("userfunctions", "User functions")), new _hx_array(array("units", "Units")), new _hx_array(array("unitprefixes", "Unit prefixes")), new _hx_array(array("syntaxparams", "Syntax options")), new _hx_array(array("syntaxparams_expression", "Options for general")), new _hx_array(array("syntaxparams_quantity", "Options for quantity")), new _hx_array(array("syntaxparams_list", "Options for list")), new _hx_array(array("allowedinput", "Allowed input")), new _hx_array(array("manual", "Manual")), new _hx_array(array("correctanswer", "Correct answer")), new _hx_array(array("variables", "Variables")), new _hx_array(array("validation", "Validation")), new _hx_array(array("preview", "Preview")), new _hx_array(array("correctanswertabhelp", "Insert the correct answer using WIRIS editor. Select also the behaviour for the formula editor when used by the student.\x0A")), new _hx_array(array("assertionstabhelp", "Select which properties the student answer has to verify. For example, if it has to be simplified, factorized, expressed using physical units or have a specific numerical precision.")), new _hx_array(array("variablestabhelp", "Write an algorithm with WIRIS cas to create random variables: numbers, expressions, plots or a grading function.\x0AYou can also specify the output format of the variables shown to the student.\x0A")), new _hx_array(array("testtabhelp", "Insert a possible student answer to simulate the behaviour of the question. You are using the same tool that the student will use.\x0ANote that you can also test the evaluation criteria, success and automatic feedback.\x0A")), new _hx_array(array("start", "Start")), new _hx_array(array("test", "Test")), new _hx_array(array("clicktesttoevaluate", "Click Test button to validate the current answer.")), new _hx_array(array("correct", "Correct!")), new _hx_array(array("incorrect", "Incorrect!")), new _hx_array(array("partiallycorrect", "Partially correct!")), new _hx_array(array("inputmethod", "Input method")), new _hx_array(array("compoundanswer", "Compound answer")), new _hx_array(array("answerinputinlineeditor", "WIRIS editor embedded")), new _hx_array(array("answerinputpopupeditor", "WIRIS editor in popup")), new _hx_array(array("answerinputplaintext", "Plain text input field")), new _hx_array(array("showauxiliarcas", "Include WIRIS cas")), new _hx_array(array("initialcascontent", "Initial content")), new _hx_array(array("tolerancedigits", "Tolerance digits")), new _hx_array(array("validationandvariables", "Validation and variables")), new _hx_array(array("algorithmlanguage", "Algorithm language")), new _hx_array(array("calculatorlanguage", "Calculator language")), new _hx_array(array("hasalgorithm", "Has algorithm")), new _hx_array(array("comparison", "Comparison")), new _hx_array(array("properties", "Properties")), new _hx_array(array("studentanswer", "Student answer")), new _hx_array(array("poweredbywiris", "Powered by WIRIS")), new _hx_array(array("yourchangeswillbelost", "Your changes will be lost if you leave the window.")), new _hx_array(array("outputoptions", "Output options")), new _hx_array(array("catalan", "Català")), new _hx_array(array("english", "English")), new _hx_array(array("spanish", "Español")), new _hx_array(array("estonian", "Eesti")), new _hx_array(array("basque", "Euskara")), new _hx_array(array("french", "Français")), new _hx_array(array("german", "Deutsch")), new _hx_array(array("italian", "Italiano")), new _hx_array(array("dutch", "Nederlands")), new _hx_array(array("portuguese", "Português (Portugal)")), new _hx_array(array("javaAppletMissing", "Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>.")), new _hx_array(array("allanswerscorrect", "All answers must be correct")), new _hx_array(array("distributegrade", "Distribute grade")), new _hx_array(array("no", "No")), new _hx_array(array("add", "Add")), new _hx_array(array("replaceeditor", "Replace editor")), new _hx_array(array("list", "List")), new _hx_array(array("questionxml", "Question XML")), new _hx_array(array("grammarurl", "Grammar URL")), new _hx_array(array("reservedwords", "Reserved words")), new _hx_array(array("forcebrackets", "Lists always need curly brackets \"{}\".")), new _hx_array(array("commaasitemseparator", "Use comma \",\" as list item separator.")), new _hx_array(array("confirmimportdeprecated", "Import the question? \x0AThe question you are about to open contains deprecated features. The import process may change slightly the behavior of the question. It is highly recommended that you carefully test de question after import.")), new _hx_array(array("comparesets", "Compare as sets")), new _hx_array(array("nobracketslist", "Lists without brackets")), new _hx_array(array("warningtoleranceprecision", "Less precision digits than tolerance digits.")), new _hx_array(array("actionimport", "Import")), new _hx_array(array("actionexport", "Export")), new _hx_array(array("usecase", "Match case")), new _hx_array(array("usespaces", "Match spaces")), new _hx_array(array("notevaluate", "Keep arguments unevaluated")), new _hx_array(array("separators", "Separators")), new _hx_array(array("comma", "Comma")), new _hx_array(array("commarole", "Role of the comma ',' character")), new _hx_array(array("point", "Point")), new _hx_array(array("pointrole", "Role of the point '.' character")), new _hx_array(array("space", "Space")), new _hx_array(array("spacerole", "Role of the space character")), new _hx_array(array("decimalmark", "Decimal digits")), new _hx_array(array("digitsgroup", "Digit groups")), new _hx_array(array("listitems", "List items")), new _hx_array(array("nothing", "Nothing")), new _hx_array(array("intervals", "Intervals")), new _hx_array(array("warningprecision15", "Precision must be between 1 and 15.")), new _hx_array(array("decimalSeparator", "Decimal")), new _hx_array(array("thousandsSeparator", "Thousands")), new _hx_array(array("notation", "Notation")), new _hx_array(array("invisible", "Invisible")), new _hx_array(array("auto", "Auto")), new _hx_array(array("fixedDecimal", "Fixed")), new _hx_array(array("floatingDecimal", "Decimal")), new _hx_array(array("scientific", "Scientific")), new _hx_array(array("example", "Example")), new _hx_array(array("warningreltolfixedprec", "Relative tolerance with fixed decimal notation.")), new _hx_array(array("warningabstolfloatprec", "Absolute tolerance with floating decimal notation.")), new _hx_array(array("answerinputinlinehand", "WIRIS hand embedded")), new _hx_array(array("absolutetolerance", "Absolute tolerance")), new _hx_array(array("clicktoeditalgorithm", "Click the button to download and run WIRIS cas application to edit the question algorithm. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Learn more</a>.")), new _hx_array(array("launchwiriscas", "Edit algorithm")), new _hx_array(array("sendinginitialsession", "Sending initial session...")), new _hx_array(array("waitingforupdates", "Waiting for updates...")), new _hx_array(array("sessionclosed", "All changes saved")), new _hx_array(array("gotsession", "Changes saved (revision \${n}).")), new _hx_array(array("thecorrectansweris", "The correct answer is")), new _hx_array(array("poweredby", "Powered by")), new _hx_array(array("refresh", "Renew correct answer")), new _hx_array(array("fillwithcorrect", "Fill with correct answer")), new _hx_array(array("runcalculator", "Run calculator")), new _hx_array(array("clicktoruncalculator", "Click the button to download and run WIRIS cas application to make the calculations you need. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Learn more</a>.")), new _hx_array(array("answer", "answer")), new _hx_array(array("lang", "es")), new _hx_array(array("comparisonwithstudentanswer", "Comparación con la respuesta del estudiante")), new _hx_array(array("otheracceptedanswers", "Otras respuestas aceptadas")), new _hx_array(array("equivalent_literal", "Literalmente igual")), new _hx_array(array("equivalent_literal_correct_feedback", "La respuesta es literalmente igual a la correcta.")), new _hx_array(array("equivalent_symbolic", "Matemáticamente igual")), new _hx_array(array("equivalent_symbolic_correct_feedback", "La respuesta es matemáticamente igual a la correcta.")), new _hx_array(array("equivalent_set", "Igual como conjuntos")), new _hx_array(array("equivalent_set_correct_feedback", "El conjunto de respuestas es igual al correcto.")), new _hx_array(array("equivalent_equations", "Ecuaciones equivalentes")), new _hx_array(array("equivalent_equations_correct_feedback", "La respuesta tiene las soluciones requeridas.")), new _hx_array(array("equivalent_function", "Función de calificación")), new _hx_array(array("equivalent_function_correct_feedback", "La respuesta es correcta.")), new _hx_array(array("equivalent_all", "Cualquier respuesta")), new _hx_array(array("any", "cualquier")), new _hx_array(array("gradingfunction", "Función de calificación")), new _hx_array(array("additionalproperties", "Propiedades adicionales")), new _hx_array(array("structure", "Estructura")), new _hx_array(array("none", "ninguno")), new _hx_array(array("None", "Ninguno")), new _hx_array(array("check_integer_form", "tiene forma de número entero")), new _hx_array(array("check_integer_form_correct_feedback", "La respuesta es un número entero.")), new _hx_array(array("check_fraction_form", "tiene forma de fracción")), new _hx_array(array("check_fraction_form_correct_feedback", "La respuesta es una fracción.")), new _hx_array(array("check_polynomial_form", "tiene forma de polinomio")), new _hx_array(array("check_polynomial_form_correct_feedback", "La respuesta es un polinomio.")), new _hx_array(array("check_rational_function_form", "tiene forma de función racional")), new _hx_array(array("check_rational_function_form_correct_feedback", "La respuesta es una función racional.")), new _hx_array(array("check_elemental_function_form", "es una combinación de funciones elementales")), new _hx_array(array("check_elemental_function_form_correct_feedback", "La respuesta es una expresión elemental.")), new _hx_array(array("check_scientific_notation", "está expresada en notación científica")), new _hx_array(array("check_scientific_notation_correct_feedback", "La respuesta está expresada en notación científica.")), new _hx_array(array("more", "Más")), new _hx_array(array("check_simplified", "está simplificada")), new _hx_array(array("check_simplified_correct_feedback", "La respuesta está simplificada.")), new _hx_array(array("check_expanded", "está expandida")), new _hx_array(array("check_expanded_correct_feedback", "La respuesta está expandida.")), new _hx_array(array("check_factorized", "está factorizada")), new _hx_array(array("check_factorized_correct_feedback", "La respuesta está factorizada.")), new _hx_array(array("check_rationalized", "está racionalizada")), new _hx_array(array("check_rationalized_correct_feedback", "La respuseta está racionalizada.")), new _hx_array(array("check_no_common_factor", "no tiene factores comunes")), new _hx_array(array("check_no_common_factor_correct_feedback", "La respuesta no tiene factores comunes.")), new _hx_array(array("check_minimal_radicands", "tiene radicandos minimales")), new _hx_array(array("check_minimal_radicands_correct_feedback", "La respuesta tiene los radicandos minimales.")), new _hx_array(array("check_divisible", "es divisible por")), new _hx_array(array("check_divisible_correct_feedback", "La respuesta es divisible por \${value}.")), new _hx_array(array("check_common_denominator", "tiene denominador común")), new _hx_array(array("check_common_denominator_correct_feedback", "La respuesta tiene denominador común.")), new _hx_array(array("check_unit", "tiene unidad equivalente a")), new _hx_array(array("check_unit_correct_feedback", "La unidad de respuesta es \${unit}.")), new _hx_array(array("check_unit_literal", "tiene unidad literalmente igual a")), new _hx_array(array("check_unit_literal_correct_feedback", "La unidad de respuesta es \${unit}.")), new _hx_array(array("check_no_more_decimals", "tiene menos decimales o exactamente")), new _hx_array(array("check_no_more_decimals_correct_feedback", "La respuesta tiene \${digits} o menos decimales.")), new _hx_array(array("check_no_more_digits", "tiene menos dígitos o exactamente")), new _hx_array(array("check_no_more_digits_correct_feedback", "La respuesta tiene \${digits} o menos dígitos.")), new _hx_array(array("syntax_expression", "General")), new _hx_array(array("syntax_expression_description", "(fórmulas, expresiones, ecuaciones, matrices ...)")), new _hx_array(array("syntax_expression_correct_feedback", "La sintaxis de la respuesta es correcta.")), new _hx_array(array("syntax_quantity", "Cantidad")), new _hx_array(array("syntax_quantity_description", "(números, unidades de medida, fracciones, fracciones mixtas, razones...)")), new _hx_array(array("syntax_quantity_correct_feedback", "La sintaxis de la respuesta es correcta.")), new _hx_array(array("syntax_list", "Lista")), new _hx_array(array("syntax_list_description", "(listas sin coma separadora o paréntesis)")), new _hx_array(array("syntax_list_correct_feedback", "La sintaxis de la respuesta es correcta.")), new _hx_array(array("syntax_string", "Texto")), new _hx_array(array("syntax_string_description", "(palabras, frases, cadenas de caracteres)")), new _hx_array(array("syntax_string_correct_feedback", "La sintaxis de la respuesta es correcta.")), new _hx_array(array("none", "ninguno")), new _hx_array(array("edit", "Editar")), new _hx_array(array("accept", "Aceptar")), new _hx_array(array("cancel", "Cancelar")), new _hx_array(array("explog", "exp/log")), new _hx_array(array("trigonometric", "trigonométricas")), new _hx_array(array("hyperbolic", "hiperbólicas")), new _hx_array(array("arithmetic", "aritmética")), new _hx_array(array("all", "todo")), new _hx_array(array("tolerance", "Tolerancia")), new _hx_array(array("relative", "relativa")), new _hx_array(array("relativetolerance", "Tolerancia relativa")), new _hx_array(array("precision", "Precisión")), new _hx_array(array("implicit_times_operator", "Omitir producto")), new _hx_array(array("times_operator", "Operador producto")), new _hx_array(array("imaginary_unit", "Unidad imaginaria")), new _hx_array(array("mixedfractions", "Fracciones mixtas")), new _hx_array(array("constants", "Constantes")), new _hx_array(array("functions", "Funciones")), new _hx_array(array("userfunctions", "Funciones de usuario")), new _hx_array(array("units", "Unidades")), new _hx_array(array("unitprefixes", "Prefijos de unidades")), new _hx_array(array("syntaxparams", "Opciones de sintaxis")), new _hx_array(array("syntaxparams_expression", "Opciones para general")), new _hx_array(array("syntaxparams_quantity", "Opciones para cantidad")), new _hx_array(array("syntaxparams_list", "Opciones para lista")), new _hx_array(array("allowedinput", "Entrada permitida")), new _hx_array(array("manual", "Manual")), new _hx_array(array("correctanswer", "Respuesta correcta")), new _hx_array(array("variables", "Variables")), new _hx_array(array("validation", "Validación")), new _hx_array(array("preview", "Vista previa")), new _hx_array(array("correctanswertabhelp", "Introduzca la respuesta correcta utilizando WIRIS editor. Seleccione también el comportamiento del editor de fórmulas cuando sea utilizado por el estudiante.\x0A")), new _hx_array(array("assertionstabhelp", "Seleccione las propiedades que deben cumplir las respuestas de estudiante. Por ejemplo, si tiene que estar simplificado, factorizado, expresado utilizando unidades físicas o tener una precisión numérica específica.")), new _hx_array(array("variablestabhelp", "Escriba un algoritmo con WIRIS CAS para crear variables aleatorias: números, expresiones, gráficas o funciones de calificación.\x0ATambién puede especificar el formato de salida de las variables que se muestran a los estudiantes.\x0A")), new _hx_array(array("testtabhelp", "Insertar una posible respuesta de estudiante para simular el comportamiento de la pregunta. Está usted utilizando la misma herramienta que el estudiante utilizará.\x0AObserve que también se pueden probar los criterios de evaluación, el éxito y la retroalimentación automática.\x0A")), new _hx_array(array("start", "Inicio")), new _hx_array(array("test", "Prueba")), new _hx_array(array("clicktesttoevaluate", "Haga clic en botón de prueba para validar la respuesta actual.")), new _hx_array(array("correct", "¡correcto!")), new _hx_array(array("incorrect", "¡incorrecto!")), new _hx_array(array("partiallycorrect", "¡parcialmente correcto!")), new _hx_array(array("inputmethod", "Método de entrada")), new _hx_array(array("compoundanswer", "Respuesta compuesta")), new _hx_array(array("answerinputinlineeditor", "WIRIS editor incrustado")), new _hx_array(array("answerinputpopupeditor", "WIRIS editor en una ventana emergente")), new _hx_array(array("answerinputplaintext", "Campo de entrada de texto llano")), new _hx_array(array("showauxiliarcas", "Incluir WIRIS CAS")), new _hx_array(array("initialcascontent", "Contenido inicial")), new _hx_array(array("tolerancedigits", "Dígitos de tolerancia")), new _hx_array(array("validationandvariables", "Validación y variables")), new _hx_array(array("algorithmlanguage", "Idioma del algoritmo")), new _hx_array(array("calculatorlanguage", "Idioma de la calculadora")), new _hx_array(array("hasalgorithm", "Tiene algoritmo")), new _hx_array(array("comparison", "Comparación")), new _hx_array(array("properties", "Propiedades")), new _hx_array(array("studentanswer", "Respuesta del estudiante")), new _hx_array(array("poweredbywiris", "Powered by WIRIS")), new _hx_array(array("yourchangeswillbelost", "Sus cambios se perderán si abandona la ventana.")), new _hx_array(array("outputoptions", "Opciones de salida")), new _hx_array(array("catalan", "Català")), new _hx_array(array("english", "English")), new _hx_array(array("spanish", "Español")), new _hx_array(array("estonian", "Eesti")), new _hx_array(array("basque", "Euskara")), new _hx_array(array("french", "Français")), new _hx_array(array("german", "Deutsch")), new _hx_array(array("italian", "Italiano")), new _hx_array(array("dutch", "Nederlands")), new _hx_array(array("portuguese", "Português (Portugal)")), new _hx_array(array("javaAppletMissing", "Aviso! Este componente requiere <a href=\"http://www.java.com/es/\">instalar el plugin de Java</a> o quizás es suficiente <a href=\"http://www.java.com/es/download/help/enable_browser.xml\">activar el plugin de Java</a>.")), new _hx_array(array("allanswerscorrect", "Todas las respuestas deben ser correctas")), new _hx_array(array("distributegrade", "Distribuir la nota")), new _hx_array(array("no", "No")), new _hx_array(array("add", "Añadir")), new _hx_array(array("replaceeditor", "Sustituir editor")), new _hx_array(array("list", "Lista")), new _hx_array(array("questionxml", "Question XML")), new _hx_array(array("grammarurl", "Grammar URL")), new _hx_array(array("reservedwords", "Palabras reservadas")), new _hx_array(array("forcebrackets", "Las listas siempre necesitan llaves \"{}\".")), new _hx_array(array("commaasitemseparator", "Utiliza la coma \",\" como separador de elementos de listas.")), new _hx_array(array("confirmimportdeprecated", "Importar la pregunta?\x0AEsta pregunta tiene características obsoletas. El proceso de importación puede modificar el comportamiento de la pregunta. Revise cuidadosamente la pregunta antes de utilizarla.")), new _hx_array(array("comparesets", "Compara como conjuntos")), new _hx_array(array("nobracketslist", "Listas sin llaves")), new _hx_array(array("warningtoleranceprecision", "Precisión menor que la tolerancia.")), new _hx_array(array("actionimport", "Importar")), new _hx_array(array("actionexport", "Exportar")), new _hx_array(array("usecase", "Coincidir mayúsculas y minúsculas")), new _hx_array(array("usespaces", "Coincidir espacios")), new _hx_array(array("notevaluate", "Mantener los argumentos sin evaluar")), new _hx_array(array("separators", "Separadores")), new _hx_array(array("comma", "Coma")), new _hx_array(array("commarole", "Rol del caracter coma ','")), new _hx_array(array("point", "Punto")), new _hx_array(array("pointrole", "Rol del caracter punto '.'")), new _hx_array(array("space", "Espacio")), new _hx_array(array("spacerole", "Rol del caracter espacio")), new _hx_array(array("decimalmark", "Decimales")), new _hx_array(array("digitsgroup", "Miles")), new _hx_array(array("listitems", "Elementos de lista")), new _hx_array(array("nothing", "Ninguno")), new _hx_array(array("intervals", "Intervalos")), new _hx_array(array("warningprecision15", "La precisión debe estar entre 1 y 15.")), new _hx_array(array("decimalSeparator", "Decimales")), new _hx_array(array("thousandsSeparator", "Miles")), new _hx_array(array("notation", "Notación")), new _hx_array(array("invisible", "Invisible")), new _hx_array(array("auto", "Auto")), new _hx_array(array("fixedDecimal", "Fija")), new _hx_array(array("floatingDecimal", "Decimal")), new _hx_array(array("scientific", "Científica")), new _hx_array(array("example", "Ejemplo")), new _hx_array(array("warningreltolfixedprec", "Tolerancia relativa con notación de coma fija.")), new _hx_array(array("warningabstolfloatprec", "Tolerancia absoluta con notación de coma flotante.")), new _hx_array(array("answerinputinlinehand", "WIRIS hand incrustado")), new _hx_array(array("absolutetolerance", "Tolerancia absoluta")), new _hx_array(array("clicktoeditalgorithm", "Clica el botón para descargar y ejecutar la aplicación WIRIS cas para editar el algoritmo de la pregunta. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Aprende más</a>.")), new _hx_array(array("launchwiriscas", "Editar algoritmo")), new _hx_array(array("sendinginitialsession", "Enviando algoritmo inicial.")), new _hx_array(array("waitingforupdates", "Esperando actualizaciones.")), new _hx_array(array("sessionclosed", "Todos los cambios guardados.")), new _hx_array(array("gotsession", "Cambios guardados (revisión \${n}).")), new _hx_array(array("thecorrectansweris", "La respuesta correcta es")), new _hx_array(array("poweredby", "Creado por")), new _hx_array(array("refresh", "Renovar la respuesta correcta")), new _hx_array(array("fillwithcorrect", "Rellenar con la respuesta correcta")), new _hx_array(array("runcalculator", "Ejecutar calculadora")), new _hx_array(array("clicktoruncalculator", "Clica el botón para descargar y ejecutar la aplicación WIRIS cas para hacer los cálculos que necesite. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Aprende más</a>.")), new _hx_array(array("answer", "respuesta")), new _hx_array(array("lang", "ca")), new _hx_array(array("comparisonwithstudentanswer", "Comparació amb la resposta de l'estudiant")), new _hx_array(array("otheracceptedanswers", "Altres respostes acceptades")), new _hx_array(array("equivalent_literal", "Literalment igual")), new _hx_array(array("equivalent_literal_correct_feedback", "La resposta és literalment igual a la correcta.")), new _hx_array(array("equivalent_symbolic", "Matemàticament igual")), new _hx_array(array("equivalent_symbolic_correct_feedback", "La resposta és matemàticament igual a la correcta.")), new _hx_array(array("equivalent_set", "Igual com a conjunts")), new _hx_array(array("equivalent_set_correct_feedback", "El conjunt de respostes és igual al correcte.")), new _hx_array(array("equivalent_equations", "Equacions equivalents")), new _hx_array(array("equivalent_equations_correct_feedback", "La resposta té les solucions requerides.")), new _hx_array(array("equivalent_function", "Funció de qualificació")), new _hx_array(array("equivalent_function_correct_feedback", "La resposta és correcta.")), new _hx_array(array("equivalent_all", "Qualsevol resposta")), new _hx_array(array("any", "qualsevol")), new _hx_array(array("gradingfunction", "Funció de qualificació")), new _hx_array(array("additionalproperties", "Propietats addicionals")), new _hx_array(array("structure", "Estructura")), new _hx_array(array("none", "cap")), new _hx_array(array("None", "Cap")), new _hx_array(array("check_integer_form", "té forma de nombre enter")), new _hx_array(array("check_integer_form_correct_feedback", "La resposta és un nombre enter.")), new _hx_array(array("check_fraction_form", "té forma de fracció")), new _hx_array(array("check_fraction_form_correct_feedback", "La resposta és una fracció.")), new _hx_array(array("check_polynomial_form", "té forma de polinomi")), new _hx_array(array("check_polynomial_form_correct_feedback", "La resposta és un polinomi.")), new _hx_array(array("check_rational_function_form", "té forma de funció racional")), new _hx_array(array("check_rational_function_form_correct_feedback", "La resposta és una funció racional.")), new _hx_array(array("check_elemental_function_form", "és una combinació de funcions elementals")), new _hx_array(array("check_elemental_function_form_correct_feedback", "La resposta és una expressió elemental.")), new _hx_array(array("check_scientific_notation", "està expressada en notació científica")), new _hx_array(array("check_scientific_notation_correct_feedback", "La resposta està expressada en notació científica.")), new _hx_array(array("more", "Més")), new _hx_array(array("check_simplified", "està simplificada")), new _hx_array(array("check_simplified_correct_feedback", "La resposta està simplificada.")), new _hx_array(array("check_expanded", "està expandida")), new _hx_array(array("check_expanded_correct_feedback", "La resposta està expandida.")), new _hx_array(array("check_factorized", "està factoritzada")), new _hx_array(array("check_factorized_correct_feedback", "La resposta està factoritzada.")), new _hx_array(array("check_rationalized", "està racionalitzada")), new _hx_array(array("check_rationalized_correct_feedback", "La resposta está racionalitzada.")), new _hx_array(array("check_no_common_factor", "no té factors comuns")), new _hx_array(array("check_no_common_factor_correct_feedback", "La resposta no té factors comuns.")), new _hx_array(array("check_minimal_radicands", "té radicands minimals")), new _hx_array(array("check_minimal_radicands_correct_feedback", "La resposta té els radicands minimals.")), new _hx_array(array("check_divisible", "és divisible per")), new _hx_array(array("check_divisible_correct_feedback", "La resposta és divisible per \${value}.")), new _hx_array(array("check_common_denominator", "té denominador comú")), new _hx_array(array("check_common_denominator_correct_feedback", "La resposta té denominador comú.")), new _hx_array(array("check_unit", "té unitat equivalent a")), new _hx_array(array("check_unit_correct_feedback", "La unitat de resposta és \${unit}.")), new _hx_array(array("check_unit_literal", "té unitat literalment igual a")), new _hx_array(array("check_unit_literal_correct_feedback", "La unitat de resposta és \${unit}.")), new _hx_array(array("check_no_more_decimals", "té menys decimals o exactament")), new _hx_array(array("check_no_more_decimals_correct_feedback", "La resposta té \${digits} o menys decimals.")), new _hx_array(array("check_no_more_digits", "té menys dígits o exactament")), new _hx_array(array("check_no_more_digits_correct_feedback", "La resposta té \${digits} o menys dígits.")), new _hx_array(array("syntax_expression", "General")), new _hx_array(array("syntax_expression_description", "(fórmules, expressions, equacions, matrius ...)")), new _hx_array(array("syntax_expression_correct_feedback", "La sintaxi de la resposta és correcta.")), new _hx_array(array("syntax_quantity", "Quantitat")), new _hx_array(array("syntax_quantity_description", "(nombres, unitats de mesura, fraccions, fraccions mixtes, raons...)")), new _hx_array(array("syntax_quantity_correct_feedback", "La sintaxi de la resposta és correcta.")), new _hx_array(array("syntax_list", "Llista")), new _hx_array(array("syntax_list_description", "(llistes sense coma separadora o parèntesis)")), new _hx_array(array("syntax_list_correct_feedback", "La sintaxi de la resposta és correcta.")), new _hx_array(array("syntax_string", "Text")), new _hx_array(array("syntax_string_description", "(paraules, frases, cadenas de caràcters)")), new _hx_array(array("syntax_string_correct_feedback", "La sintaxi de la resposta és correcta.")), new _hx_array(array("none", "cap")), new _hx_array(array("edit", "Editar")), new _hx_array(array("accept", "Acceptar")), new _hx_array(array("cancel", "Cancel·lar")), new _hx_array(array("explog", "exp/log")), new _hx_array(array("trigonometric", "trigonomètriques")), new _hx_array(array("hyperbolic", "hiperbòliques")), new _hx_array(array("arithmetic", "aritmètica")), new _hx_array(array("all", "tot")), new _hx_array(array("tolerance", "Tolerància")), new _hx_array(array("relative", "relativa")), new _hx_array(array("relativetolerance", "Tolerància relativa")), new _hx_array(array("precision", "Precisió")), new _hx_array(array("implicit_times_operator", "Ometre producte")), new _hx_array(array("times_operator", "Operador producte")), new _hx_array(array("imaginary_unit", "Unitat imaginària")), new _hx_array(array("mixedfractions", "Fraccions mixtes")), new _hx_array(array("constants", "Constants")), new _hx_array(array("functions", "Funcions")), new _hx_array(array("userfunctions", "Funcions d'usuari")), new _hx_array(array("units", "Unitats")), new _hx_array(array("unitprefixes", "Prefixos d'unitats")), new _hx_array(array("syntaxparams", "Opcions de sintaxi")), new _hx_array(array("syntaxparams_expression", "Opcions per a general")), new _hx_array(array("syntaxparams_quantity", "Opcions per a quantitat")), new _hx_array(array("syntaxparams_list", "Opcions per a llista")), new _hx_array(array("allowedinput", "Entrada permesa")), new _hx_array(array("manual", "Manual")), new _hx_array(array("correctanswer", "Resposta correcta")), new _hx_array(array("variables", "Variables")), new _hx_array(array("validation", "Validació")), new _hx_array(array("preview", "Vista prèvia")), new _hx_array(array("correctanswertabhelp", "Introduïu la resposta correcta utilitzant WIRIS editor. Seleccioneu també el comportament de l'editor de fórmules quan sigui utilitzat per l'estudiant.\x0A")), new _hx_array(array("assertionstabhelp", "Seleccioneu les propietats que han de complir les respostes d'estudiant. Per exemple, si ha d'estar simplificat, factoritzat, expressat utilitzant unitats físiques o tenir una precisió numèrica específica.")), new _hx_array(array("variablestabhelp", "Escriviu un algorisme amb WIRIS CAS per crear variables aleatòries: números, expressions, gràfiques o funcions de qualificació.\x0ATambé podeu especificar el format de sortida de les variables que es mostren als estudiants.\x0A")), new _hx_array(array("testtabhelp", "Inserir una possible resposta d'estudiant per simular el comportament de la pregunta. Està utilitzant la mateixa eina que l'estudiant utilitzarà per entrar la resposta.\x0AObserve que también se pueden probar los criterios de evaluación, el éxito y la retroalimentación automática.\x0A")), new _hx_array(array("start", "Inici")), new _hx_array(array("test", "Prova")), new _hx_array(array("clicktesttoevaluate", "Feu clic a botó de prova per validar la resposta actual.")), new _hx_array(array("correct", "Correcte!")), new _hx_array(array("incorrect", "Incorrecte!")), new _hx_array(array("partiallycorrect", "Parcialment correcte!")), new _hx_array(array("inputmethod", "Mètode d'entrada")), new _hx_array(array("compoundanswer", "Resposta composta")), new _hx_array(array("answerinputinlineeditor", "WIRIS editor incrustat")), new _hx_array(array("answerinputpopupeditor", "WIRIS editor en una finestra emergent")), new _hx_array(array("answerinputplaintext", "Camp d'entrada de text pla")), new _hx_array(array("showauxiliarcas", "Incloure WIRIS CAS")), new _hx_array(array("initialcascontent", "Contingut inicial")), new _hx_array(array("tolerancedigits", "Dígits de tolerància")), new _hx_array(array("validationandvariables", "Validació i variables")), new _hx_array(array("algorithmlanguage", "Idioma de l'algorisme")), new _hx_array(array("calculatorlanguage", "Idioma de la calculadora")), new _hx_array(array("hasalgorithm", "Té algorisme")), new _hx_array(array("comparison", "Comparació")), new _hx_array(array("properties", "Propietats")), new _hx_array(array("studentanswer", "Resposta de l'estudiant")), new _hx_array(array("poweredbywiris", "Powered by WIRIS")), new _hx_array(array("yourchangeswillbelost", "Els seus canvis es perdran si abandona la finestra.")), new _hx_array(array("outputoptions", "Opcions de sortida")), new _hx_array(array("catalan", "Català")), new _hx_array(array("english", "English")), new _hx_array(array("spanish", "Español")), new _hx_array(array("estonian", "Eesti")), new _hx_array(array("basque", "Euskara")), new _hx_array(array("french", "Français")), new _hx_array(array("german", "Deutsch")), new _hx_array(array("italian", "Italiano")), new _hx_array(array("dutch", "Nederlands")), new _hx_array(array("portuguese", "Português (Portugal)")), new _hx_array(array("javaAppletMissing", "Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>.")), new _hx_array(array("allanswerscorrect", "Totes les respostes han de ser correctes")), new _hx_array(array("distributegrade", "Distribueix la nota")), new _hx_array(array("no", "No")), new _hx_array(array("add", "Afegir")), new _hx_array(array("replaceeditor", "Substitueix l'editor")), new _hx_array(array("list", "Llista")), new _hx_array(array("questionxml", "Question XML")), new _hx_array(array("grammarurl", "Grammar URL")), new _hx_array(array("reservedwords", "Paraules reservades")), new _hx_array(array("forcebrackets", "Les llistes sempre necessiten claus \"{}\".")), new _hx_array(array("commaasitemseparator", "Utilitza la coma \",\" com a separador d'elements de llistes.")), new _hx_array(array("confirmimportdeprecated", "Importar la pregunta?\x0AAquesta pregunta conté característiques obsoletes. El procés d'importació pot canviar lleugerament el comportament de la pregunta. És altament recomanat comprovar cuidadosament la pregunta després de la importació.")), new _hx_array(array("comparesets", "Compara com a conjunts")), new _hx_array(array("nobracketslist", "Llistes sense claus")), new _hx_array(array("warningtoleranceprecision", "Hi ha menys dígits de precisió que dígits de tolerància.")), new _hx_array(array("actionimport", "Importar")), new _hx_array(array("actionexport", "Exportar")), new _hx_array(array("usecase", "Coincideix majúscules i minúscules")), new _hx_array(array("usespaces", "Coincideix espais")), new _hx_array(array("notevaluate", "Mantén els arguments sense avaluar")), new _hx_array(array("separators", "Separadors")), new _hx_array(array("comma", "Coma")), new _hx_array(array("commarole", "Rol del caràcter coma ','")), new _hx_array(array("point", "Punt")), new _hx_array(array("pointrole", "Rol del caràcter punt '.'")), new _hx_array(array("space", "Espai")), new _hx_array(array("spacerole", "Rol del caràcter espai")), new _hx_array(array("decimalmark", "Decimals")), new _hx_array(array("digitsgroup", "Milers")), new _hx_array(array("listitems", "Elements de llista")), new _hx_array(array("nothing", "Cap")), new _hx_array(array("intervals", "Intervals")), new _hx_array(array("warningprecision15", "La precisió ha de ser entre 1 i 15.")), new _hx_array(array("decimalSeparator", "Decimals")), new _hx_array(array("thousandsSeparator", "Milers")), new _hx_array(array("notation", "Notació")), new _hx_array(array("invisible", "Invisible")), new _hx_array(array("auto", "Auto")), new _hx_array(array("fixedDecimal", "Fixa")), new _hx_array(array("floatingDecimal", "Decimal")), new _hx_array(array("scientific", "Científica")), new _hx_array(array("example", "Exemple")), new _hx_array(array("warningreltolfixedprec", "Tolerància relativa amb notació de coma fixa.")), new _hx_array(array("warningabstolfloatprec", "Tolerància absoluta amb notació de coma flotant.")), new _hx_array(array("answerinputinlinehand", "WIRIS hand incrustat")), new _hx_array(array("absolutetolerance", "Tolerància absoluta")), new _hx_array(array("clicktoeditalgorithm", "Clica el botó per a descarregar i executar l'aplicació WIRIS cas per a editar l'algorisme de la pregunta. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Aprèn-ne més</a>.")), new _hx_array(array("launchwiriscas", "Editar algorisme")), new _hx_array(array("sendinginitialsession", "Enviant algorisme inicial.")), new _hx_array(array("waitingforupdates", "Esperant actualitzacions.")), new _hx_array(array("sessionclosed", "S'han desat tots els canvis.")), new _hx_array(array("gotsession", "Canvis desats (revisió \${n}).")), new _hx_array(array("thecorrectansweris", "La resposta correcta és")), new _hx_array(array("poweredby", "Creat per")), new _hx_array(array("refresh", "Renova la resposta correcta")), new _hx_array(array("fillwithcorrect", "Omple amb la resposta correcta")), new _hx_array(array("runcalculator", "Executar calculadora")), new _hx_array(array("clicktoruncalculator", "Clica el botó per a descarregar i executar l'aplicació WIRIS cas per a fer els càlculs que necessiti. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Aprèn-ne més</a>.")), new _hx_array(array("answer", "resposta")), new _hx_array(array("lang", "it")), new _hx_array(array("comparisonwithstudentanswer", "Confronto con la risposta dello studente")), new _hx_array(array("otheracceptedanswers", "Altre risposte accettate")), new _hx_array(array("equivalent_literal", "Letteralmente uguale")), new _hx_array(array("equivalent_literal_correct_feedback", "La risposta è letteralmente uguale a quella corretta.")), new _hx_array(array("equivalent_symbolic", "Matematicamente uguale")), new _hx_array(array("equivalent_symbolic_correct_feedback", "La risposta è matematicamente uguale a quella corretta.")), new _hx_array(array("equivalent_set", "Uguale come serie")), new _hx_array(array("equivalent_set_correct_feedback", "La risposta è una serie uguale a quella corretta.")), new _hx_array(array("equivalent_equations", "Equazioni equivalenti")), new _hx_array(array("equivalent_equations_correct_feedback", "La risposta ha le stesse soluzioni di quella corretta.")), new _hx_array(array("equivalent_function", "Funzione di classificazione")), new _hx_array(array("equivalent_function_correct_feedback", "La risposta è corretta.")), new _hx_array(array("equivalent_all", "Qualsiasi risposta")), new _hx_array(array("any", "qualsiasi")), new _hx_array(array("gradingfunction", "Funzione di classificazione")), new _hx_array(array("additionalproperties", "Proprietà aggiuntive")), new _hx_array(array("structure", "Struttura")), new _hx_array(array("none", "nessuno")), new _hx_array(array("None", "Nessuno")), new _hx_array(array("check_integer_form", "corrisponde a un numero intero")), new _hx_array(array("check_integer_form_correct_feedback", "La risposta è un numero intero.")), new _hx_array(array("check_fraction_form", "corrisponde a una frazione")), new _hx_array(array("check_fraction_form_correct_feedback", "La risposta è una frazione.")), new _hx_array(array("check_polynomial_form", "corrisponde a un polinomio")), new _hx_array(array("check_polynomial_form_correct_feedback", "La risposta è un polinomio.")), new _hx_array(array("check_rational_function_form", "corrisponde a una funzione razionale")), new _hx_array(array("check_rational_function_form_correct_feedback", "La risposta è una funzione razionale.")), new _hx_array(array("check_elemental_function_form", "è una combinazione di funzioni elementari")), new _hx_array(array("check_elemental_function_form_correct_feedback", "La risposta è un'espressione elementare.")), new _hx_array(array("check_scientific_notation", "è espressa in notazione scientifica")), new _hx_array(array("check_scientific_notation_correct_feedback", "La risposta è espressa in notazione scientifica.")), new _hx_array(array("more", "Altro")), new _hx_array(array("check_simplified", "è semplificata")), new _hx_array(array("check_simplified_correct_feedback", "La risposta è semplificata.")), new _hx_array(array("check_expanded", "è espansa")), new _hx_array(array("check_expanded_correct_feedback", "La risposta è espansa.")), new _hx_array(array("check_factorized", "è scomposta in fattori")), new _hx_array(array("check_factorized_correct_feedback", "La risposta è scomposta in fattori.")), new _hx_array(array("check_rationalized", "è razionalizzata")), new _hx_array(array("check_rationalized_correct_feedback", "La risposta è razionalizzata.")), new _hx_array(array("check_no_common_factor", "non ha fattori comuni")), new _hx_array(array("check_no_common_factor_correct_feedback", "La risposta non ha fattori comuni.")), new _hx_array(array("check_minimal_radicands", "ha radicandi minimi")), new _hx_array(array("check_minimal_radicands_correct_feedback", "La risposta contiene radicandi minimi.")), new _hx_array(array("check_divisible", "è divisibile per")), new _hx_array(array("check_divisible_correct_feedback", "La risposta è divisibile per \${value}.")), new _hx_array(array("check_common_denominator", "ha un solo denominatore comune")), new _hx_array(array("check_common_denominator_correct_feedback", "La risposta ha un solo denominatore comune.")), new _hx_array(array("check_unit", "ha un'unità equivalente a")), new _hx_array(array("check_unit_correct_feedback", "La risposta è l'unità \${unit}.")), new _hx_array(array("check_unit_literal", "ha un'unità letteralmente uguale a")), new _hx_array(array("check_unit_literal_correct_feedback", "La risposta è l'unità \${unit}.")), new _hx_array(array("check_no_more_decimals", "ha un numero inferiore o uguale di decimali rispetto a")), new _hx_array(array("check_no_more_decimals_correct_feedback", "La risposta ha \${digits} o meno decimali.")), new _hx_array(array("check_no_more_digits", "ha un numero inferiore o uguale di cifre rispetto a")), new _hx_array(array("check_no_more_digits_correct_feedback", "La risposta ha \${digits} o meno cifre.")), new _hx_array(array("syntax_expression", "Generale")), new _hx_array(array("syntax_expression_description", "(formule, espressioni, equazioni, matrici etc.)")), new _hx_array(array("syntax_expression_correct_feedback", "La sintassi della risposta è corretta.")), new _hx_array(array("syntax_quantity", "Quantità")), new _hx_array(array("syntax_quantity_description", "(numeri, unità di misura, frazioni, frazioni miste, proporzioni etc.)")), new _hx_array(array("syntax_quantity_correct_feedback", "La sintassi della risposta è corretta.")), new _hx_array(array("syntax_list", "Elenco")), new _hx_array(array("syntax_list_description", "(elenchi senza virgola di separazione o parentesi)")), new _hx_array(array("syntax_list_correct_feedback", "La sintassi della risposta è corretta.")), new _hx_array(array("syntax_string", "Testo")), new _hx_array(array("syntax_string_description", "(parole, frasi, stringhe di caratteri)")), new _hx_array(array("syntax_string_correct_feedback", "La sintassi della risposta è corretta.")), new _hx_array(array("none", "nessuno")), new _hx_array(array("edit", "Modifica")), new _hx_array(array("accept", "Accetta")), new _hx_array(array("cancel", "Annulla")), new _hx_array(array("explog", "esponenziale/logaritmica")), new _hx_array(array("trigonometric", "trigonometrica")), new _hx_array(array("hyperbolic", "iperbolica")), new _hx_array(array("arithmetic", "aritmetica")), new _hx_array(array("all", "tutto")), new _hx_array(array("tolerance", "Tolleranza")), new _hx_array(array("relative", "relativa")), new _hx_array(array("relativetolerance", "Tolleranza relativa")), new _hx_array(array("precision", "Precisione")), new _hx_array(array("implicit_times_operator", "Operatore prodotto non visibile")), new _hx_array(array("times_operator", "Operatore prodotto")), new _hx_array(array("imaginary_unit", "Unità immaginaria")), new _hx_array(array("mixedfractions", "Frazioni miste")), new _hx_array(array("constants", "Costanti")), new _hx_array(array("functions", "Funzioni")), new _hx_array(array("userfunctions", "Funzioni utente")), new _hx_array(array("units", "Unità")), new _hx_array(array("unitprefixes", "Prefissi unità")), new _hx_array(array("syntaxparams", "Opzioni di sintassi")), new _hx_array(array("syntaxparams_expression", "Opzioni per elementi generali")), new _hx_array(array("syntaxparams_quantity", "Opzioni per la quantità")), new _hx_array(array("syntaxparams_list", "Opzioni per elenchi")), new _hx_array(array("allowedinput", "Input consentito")), new _hx_array(array("manual", "Manuale")), new _hx_array(array("correctanswer", "Risposta corretta")), new _hx_array(array("variables", "Variabili")), new _hx_array(array("validation", "Verifica")), new _hx_array(array("preview", "Anteprima")), new _hx_array(array("correctanswertabhelp", "Inserisci la risposta corretta utilizzando l'editor WIRIS. Seleziona anche un comportamento per l'editor di formule se utilizzato dallo studente.\x0ANon potrai archiviare la risposta se non si tratta di un'espressione valida.\x0A")), new _hx_array(array("assertionstabhelp", "Seleziona quali proprietà deve verificare la risposta dello studente. Ad esempio, se la risposta deve essere semplificata, scomposta in fattori o espressa in unità fisiche o se ha una precisione numerica specifica.")), new _hx_array(array("variablestabhelp", "Scrivi un algoritmo con WIRIS cas per creare variabili casuali: numeri, espressioni, diagrammi o funzioni di classificazione.\x0APuoi anche specificare il formato delle variabili mostrate allo studente.\x0A")), new _hx_array(array("testtabhelp", "Inserisci la risposta di un possibile studente per simulare il comportamento della domanda. Per questa operazione, utilizzi lo stesso strumento che utilizzerà lo studente.\x0ANota: puoi anche testare i criteri di valutazione, di risposta corretta e il feedback automatico.\x0A")), new _hx_array(array("start", "Inizio")), new _hx_array(array("test", "Test")), new _hx_array(array("clicktesttoevaluate", "Fai clic sul pulsante Test per verificare la risposta attuale.")), new _hx_array(array("correct", "Risposta corretta.")), new _hx_array(array("incorrect", "Risposta sbagliata.")), new _hx_array(array("partiallycorrect", "Risposta corretta in parte.")), new _hx_array(array("inputmethod", "Metodo di input")), new _hx_array(array("compoundanswer", "Risposta composta")), new _hx_array(array("answerinputinlineeditor", "WIRIS editor integrato")), new _hx_array(array("answerinputpopupeditor", "WIRIS editor nella finestra a comparsa")), new _hx_array(array("answerinputplaintext", "Campo di input testo semplice")), new _hx_array(array("showauxiliarcas", "Includi WIRIS cas")), new _hx_array(array("initialcascontent", "Contenuto iniziale")), new _hx_array(array("tolerancedigits", "Cifre di tolleranza")), new _hx_array(array("validationandvariables", "Verifica e variabili")), new _hx_array(array("algorithmlanguage", "Lingua algoritmo")), new _hx_array(array("calculatorlanguage", "Lingua calcolatrice")), new _hx_array(array("hasalgorithm", "Ha l'algoritmo")), new _hx_array(array("comparison", "Confronto")), new _hx_array(array("properties", "Proprietà")), new _hx_array(array("studentanswer", "Risposta dello studente")), new _hx_array(array("poweredbywiris", "Realizzato con WIRIS")), new _hx_array(array("yourchangeswillbelost", "Se chiudi la finestra, le modifiche andranno perse.")), new _hx_array(array("outputoptions", "Opzioni risultato")), new _hx_array(array("catalan", "Català")), new _hx_array(array("english", "English")), new _hx_array(array("spanish", "Español")), new _hx_array(array("estonian", "Eesti")), new _hx_array(array("basque", "Euskara")), new _hx_array(array("french", "Français")), new _hx_array(array("german", "Deutsch")), new _hx_array(array("italian", "Italiano")), new _hx_array(array("dutch", "Nederlands")), new _hx_array(array("portuguese", "Português (Portugal)")), new _hx_array(array("javaAppletMissing", "Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>.")), new _hx_array(array("allanswerscorrect", "Tutte le risposte devono essere corrette")), new _hx_array(array("distributegrade", "Fornisci voto")), new _hx_array(array("no", "No")), new _hx_array(array("add", "Aggiungi")), new _hx_array(array("replaceeditor", "Sostituisci editor")), new _hx_array(array("list", "Elenco")), new _hx_array(array("questionxml", "XML domanda")), new _hx_array(array("grammarurl", "URL grammatica")), new _hx_array(array("reservedwords", "Parole riservate")), new _hx_array(array("forcebrackets", "Gli elenchi devono sempre contenere le parentesi graffe \"{}\".")), new _hx_array(array("commaasitemseparator", "Utilizza la virgola \",\" per separare gli elementi di un elenco.")), new _hx_array(array("confirmimportdeprecated", "Vuoi importare la domanda?\x0A La domanda che vuoi aprire contiene funzionalità obsolete. Il processo di importazione potrebbe modificare leggermente il comportamento della domanda. Ti consigliamo di controllare attentamente la domanda dopo l'importazione.")), new _hx_array(array("comparesets", "Confronta come serie")), new _hx_array(array("nobracketslist", "Elenchi senza parentesi")), new _hx_array(array("warningtoleranceprecision", "Le cifre di precisione sono inferiori a quelle di tolleranza.")), new _hx_array(array("actionimport", "Importazione")), new _hx_array(array("actionexport", "Esportazione")), new _hx_array(array("usecase", "Rispetta maiuscole/minuscole")), new _hx_array(array("usespaces", "Rispetta spazi")), new _hx_array(array("notevaluate", "Mantieni argomenti non valutati")), new _hx_array(array("separators", "Separatori")), new _hx_array(array("comma", "Virgola")), new _hx_array(array("commarole", "Ruolo della virgola “,”")), new _hx_array(array("point", "Punto")), new _hx_array(array("pointrole", "Ruolo del punto “.”")), new _hx_array(array("space", "Spazio")), new _hx_array(array("spacerole", "Ruolo dello spazio")), new _hx_array(array("decimalmark", "Cifre decimali")), new _hx_array(array("digitsgroup", "Gruppi di cifre")), new _hx_array(array("listitems", "Elenca elementi")), new _hx_array(array("nothing", "Niente")), new _hx_array(array("intervals", "Intervalli")), new _hx_array(array("warningprecision15", "La precisione deve essere compresa tra 1 e 15.")), new _hx_array(array("decimalSeparator", "Decimale")), new _hx_array(array("thousandsSeparator", "Migliaia")), new _hx_array(array("notation", "Notazione")), new _hx_array(array("invisible", "Invisibile")), new _hx_array(array("auto", "Automatico")), new _hx_array(array("fixedDecimal", "Fisso")), new _hx_array(array("floatingDecimal", "Decimale")), new _hx_array(array("scientific", "Scientifica")), new _hx_array(array("example", "Esempio")), new _hx_array(array("warningreltolfixedprec", "Tolleranza relativa con notazione decimale fissa.")), new _hx_array(array("warningabstolfloatprec", "Tolleranza assoluta con notazione decimale fluttuante.")), new _hx_array(array("answerinputinlinehand", "Applicazione WIRIS hand incorporata")), new _hx_array(array("absolutetolerance", "Tolleranza assoluta")), new _hx_array(array("clicktoeditalgorithm", "Il tuo browser non <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">supporta Java</a>. Fai clic sul pulsante per scaricare ed eseguire l’applicazione WIRIS cas che consente di modificare l’algoritmo della domanda.")), new _hx_array(array("launchwiriscas", "Avvia WIRIS cas")), new _hx_array(array("sendinginitialsession", "Invio della sessione iniziale...")), new _hx_array(array("waitingforupdates", "In attesa degli aggiornamenti...")), new _hx_array(array("sessionclosed", "Comunicazione chiusa.")), new _hx_array(array("gotsession", "Ricevuta revisione \${n}.")), new _hx_array(array("thecorrectansweris", "La risposta corretta è")), new _hx_array(array("poweredby", "Offerto da")), new _hx_array(array("refresh", "Rinnova la risposta corretta")), new _hx_array(array("fillwithcorrect", "Inserisci la risposta corretta")), new _hx_array(array("runcalculator", "Run calculator")), new _hx_array(array("clicktoruncalculator", "Click the button to download and run WIRIS cas application to make the calculations you need. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Learn more</a>.")), new _hx_array(array("answer", "answer")), new _hx_array(array("lang", "fr")), new _hx_array(array("comparisonwithstudentanswer", "Comparaison avec la réponse de l'étudiant")), new _hx_array(array("otheracceptedanswers", "Autres réponses acceptées")), new _hx_array(array("equivalent_literal", "Strictement égal")), new _hx_array(array("equivalent_literal_correct_feedback", "La réponse est strictement égale à la bonne réponse.")), new _hx_array(array("equivalent_symbolic", "Mathématiquement égal")), new _hx_array(array("equivalent_symbolic_correct_feedback", "La réponse est mathématiquement égale à la bonne réponse.")), new _hx_array(array("equivalent_set", "Égal en tant qu'ensembles")), new _hx_array(array("equivalent_set_correct_feedback", "L'ensemble de réponses est égal à la bonne réponse.")), new _hx_array(array("equivalent_equations", "Équations équivalentes")), new _hx_array(array("equivalent_equations_correct_feedback", "La réponse partage les mêmes solutions que la bonne réponse.")), new _hx_array(array("equivalent_function", "Fonction de gradation")), new _hx_array(array("equivalent_function_correct_feedback", "C'est la bonne réponse.")), new _hx_array(array("equivalent_all", "N'importe quelle réponse")), new _hx_array(array("any", "quelconque")), new _hx_array(array("gradingfunction", "Fonction de gradation")), new _hx_array(array("additionalproperties", "Propriétés supplémentaires")), new _hx_array(array("structure", "Structure")), new _hx_array(array("none", "aucune")), new _hx_array(array("None", "Aucune")), new _hx_array(array("check_integer_form", "a la forme d'un entier.")), new _hx_array(array("check_integer_form_correct_feedback", "La réponse est un nombre entier.")), new _hx_array(array("check_fraction_form", "a la forme d'une fraction")), new _hx_array(array("check_fraction_form_correct_feedback", "La réponse est une fraction.")), new _hx_array(array("check_polynomial_form", "a la forme d'un polynôme")), new _hx_array(array("check_polynomial_form_correct_feedback", "La réponse est un polynôme.")), new _hx_array(array("check_rational_function_form", "a la forme d'une fonction rationnelle")), new _hx_array(array("check_rational_function_form_correct_feedback", "La réponse est une fonction rationnelle.")), new _hx_array(array("check_elemental_function_form", "est une combinaison de fonctions élémentaires")), new _hx_array(array("check_elemental_function_form_correct_feedback", "La réponse est une expression élémentaire.")), new _hx_array(array("check_scientific_notation", "est exprimé en notation scientifique")), new _hx_array(array("check_scientific_notation_correct_feedback", "La réponse est exprimée en notation scientifique.")), new _hx_array(array("more", "Plus")), new _hx_array(array("check_simplified", "est simplifié")), new _hx_array(array("check_simplified_correct_feedback", "La réponse est simplifiée.")), new _hx_array(array("check_expanded", "est développé")), new _hx_array(array("check_expanded_correct_feedback", "La réponse est développée.")), new _hx_array(array("check_factorized", "est factorisé")), new _hx_array(array("check_factorized_correct_feedback", "La réponse est factorisée.")), new _hx_array(array("check_rationalized", " : rationalisé")), new _hx_array(array("check_rationalized_correct_feedback", "La réponse est rationalisée.")), new _hx_array(array("check_no_common_factor", "n'a pas de facteurs communs")), new _hx_array(array("check_no_common_factor_correct_feedback", "La réponse n'a pas de facteurs communs.")), new _hx_array(array("check_minimal_radicands", "a des radicandes minimaux")), new _hx_array(array("check_minimal_radicands_correct_feedback", "La réponse a des radicandes minimaux.")), new _hx_array(array("check_divisible", "est divisible par")), new _hx_array(array("check_divisible_correct_feedback", "La réponse est divisible par \${value}.")), new _hx_array(array("check_common_denominator", "a un seul dénominateur commun")), new _hx_array(array("check_common_denominator_correct_feedback", "La réponse inclut un seul dénominateur commun.")), new _hx_array(array("check_unit", "inclut une unité équivalente à")), new _hx_array(array("check_unit_correct_feedback", "La bonne unité est \${unit}.")), new _hx_array(array("check_unit_literal", "a une unité strictement égale à")), new _hx_array(array("check_unit_literal_correct_feedback", "La bonne unité est \${unit}.")), new _hx_array(array("check_no_more_decimals", "a le même nombre ou moins de décimales que")), new _hx_array(array("check_no_more_decimals_correct_feedback", "La réponse inclut au plus \${digits} décimales.")), new _hx_array(array("check_no_more_digits", "a le même nombre ou moins de chiffres que")), new _hx_array(array("check_no_more_digits_correct_feedback", "La réponse inclut au plus \${digits} chiffres.")), new _hx_array(array("syntax_expression", "Général")), new _hx_array(array("syntax_expression_description", "(formules, expressions, équations, matrices…)")), new _hx_array(array("syntax_expression_correct_feedback", "La syntaxe de la réponse est correcte.")), new _hx_array(array("syntax_quantity", "Quantité")), new _hx_array(array("syntax_quantity_description", "(nombres, unités de mesure, fractions, fractions mixtes, proportions…)")), new _hx_array(array("syntax_quantity_correct_feedback", "La syntaxe de la réponse est correcte.")), new _hx_array(array("syntax_list", "Liste")), new _hx_array(array("syntax_list_description", "(listes sans virgule ou crochets de séparation)")), new _hx_array(array("syntax_list_correct_feedback", "La syntaxe de la réponse est correcte.")), new _hx_array(array("syntax_string", "Texte")), new _hx_array(array("syntax_string_description", "(mots, phrases, suites de caractères)")), new _hx_array(array("syntax_string_correct_feedback", "La syntaxe de la réponse est correcte.")), new _hx_array(array("none", "aucune")), new _hx_array(array("edit", "Modifier")), new _hx_array(array("accept", "Accepter")), new _hx_array(array("cancel", "Annuler")), new _hx_array(array("explog", "exp/log")), new _hx_array(array("trigonometric", "trigonométrique")), new _hx_array(array("hyperbolic", "hyperbolique")), new _hx_array(array("arithmetic", "arithmétique")), new _hx_array(array("all", "toutes")), new _hx_array(array("tolerance", "Tolérance")), new _hx_array(array("relative", "relative")), new _hx_array(array("relativetolerance", "Tolérance relative")), new _hx_array(array("precision", "Précision")), new _hx_array(array("implicit_times_operator", "Opérateur de multiplication invisible")), new _hx_array(array("times_operator", "Opérateur de multiplication")), new _hx_array(array("imaginary_unit", "Unité imaginaire")), new _hx_array(array("mixedfractions", "Fractions mixtes")), new _hx_array(array("constants", "Constantes")), new _hx_array(array("functions", "Fonctions")), new _hx_array(array("userfunctions", "Fonctions personnalisées")), new _hx_array(array("units", "Unités")), new _hx_array(array("unitprefixes", "Préfixes d'unité")), new _hx_array(array("syntaxparams", "Options de syntaxe")), new _hx_array(array("syntaxparams_expression", "Options générales")), new _hx_array(array("syntaxparams_quantity", "Options de quantité")), new _hx_array(array("syntaxparams_list", "Options de liste")), new _hx_array(array("allowedinput", "Entrée autorisée")), new _hx_array(array("manual", "Manuel")), new _hx_array(array("correctanswer", "Bonne réponse")), new _hx_array(array("variables", "Variables")), new _hx_array(array("validation", "Validation")), new _hx_array(array("preview", "Aperçu")), new _hx_array(array("correctanswertabhelp", "Insérer la bonne réponse à l'aide du WIRIS Editor. Sélectionner aussi le comportement de l'éditeur de formule lorsque l'étudiant y fait appel.\x0A")), new _hx_array(array("assertionstabhelp", "Sélectionner les propriétés que la réponse de l'étudiant doit satisfaire. Par exemple, si elle doit être simplifiée, factorisée, exprimée dans une unité physique ou présenter une précision chiffrée spécifique.")), new _hx_array(array("variablestabhelp", "Écrire un algorithme à l'aide de WIRIS CAS pour créer des variables aléatoires : des nombres, des expressions, des courbes ou une fonction de gradation. \x0AVous pouvez aussi spécifier un format des variables pour l'affichage à l'étudiant.\x0A")), new _hx_array(array("testtabhelp", "Insérer une réponse possible de l'étudiant afin de simuler le comportement de la question. Vous utilisez le même outil que l'étudiant. \x0ANotez que vous pouvez aussi tester le critère d'évaluation, de réussite et les commentaires automatiques.\x0A")), new _hx_array(array("start", "Démarrer")), new _hx_array(array("test", "Tester")), new _hx_array(array("clicktesttoevaluate", "Cliquer sur le bouton Test pour valider la réponse actuelle.")), new _hx_array(array("correct", "Correct !")), new _hx_array(array("incorrect", "Incorrect !")), new _hx_array(array("partiallycorrect", "Partiellement correct !")), new _hx_array(array("inputmethod", "Méthode de saisie")), new _hx_array(array("compoundanswer", "Réponse composée")), new _hx_array(array("answerinputinlineeditor", "WIRIS Editor intégré")), new _hx_array(array("answerinputpopupeditor", "WIRIS Editor dans une fenêtre")), new _hx_array(array("answerinputplaintext", "Champ de saisie de texte brut")), new _hx_array(array("showauxiliarcas", "Inclure WIRIS CAS")), new _hx_array(array("initialcascontent", "Contenu initial")), new _hx_array(array("tolerancedigits", "Tolérance en chiffres")), new _hx_array(array("validationandvariables", "Validation et variables")), new _hx_array(array("algorithmlanguage", "Langage d'algorithme")), new _hx_array(array("calculatorlanguage", "Langage de calcul")), new _hx_array(array("hasalgorithm", "Possède un algorithme")), new _hx_array(array("comparison", "Comparaison")), new _hx_array(array("properties", "Propriétés")), new _hx_array(array("studentanswer", "Réponse de l'étudiant")), new _hx_array(array("poweredbywiris", "Développé par WIRIS")), new _hx_array(array("yourchangeswillbelost", "Vous perdrez vos modifications si vous fermez la fenêtre.")), new _hx_array(array("outputoptions", "Options de sortie")), new _hx_array(array("catalan", "Català")), new _hx_array(array("english", "English")), new _hx_array(array("spanish", "Español")), new _hx_array(array("estonian", "Eesti")), new _hx_array(array("basque", "Euskara")), new _hx_array(array("french", "Français")), new _hx_array(array("german", "Deutsch")), new _hx_array(array("italian", "Italiano")), new _hx_array(array("dutch", "Nederlands")), new _hx_array(array("portuguese", "Português (Portugal)")), new _hx_array(array("javaAppletMissing", "Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>.")), new _hx_array(array("allanswerscorrect", "Toutes les réponses doivent être correctes")), new _hx_array(array("distributegrade", "Degré de distribution")), new _hx_array(array("no", "Non")), new _hx_array(array("add", "Ajouter")), new _hx_array(array("replaceeditor", "Remplacer l'éditeur")), new _hx_array(array("list", "Liste")), new _hx_array(array("questionxml", "Question XML")), new _hx_array(array("grammarurl", "URL de la grammaire")), new _hx_array(array("reservedwords", "Mots réservés")), new _hx_array(array("forcebrackets", "Les listes requièrent l'utilisation d'accolades « {} ».")), new _hx_array(array("commaasitemseparator", "Utiliser une virgule « , » comme séparateur d'éléments de liste.")), new _hx_array(array("confirmimportdeprecated", "Importer la question ? \x0ALa question que vous êtes sur le point d'ouvrir contient des fonctionnalités obsolètes. Il se peut que la procédure d'importation modifie légèrement le comportement de la question. Il est fortement recommandé de tester attentivement la question après l'importation.")), new _hx_array(array("comparesets", "Comparer en tant qu'ensembles")), new _hx_array(array("nobracketslist", "Listes sans crochets")), new _hx_array(array("warningtoleranceprecision", "Moins de chiffres pour la précision que pour la tolérance.")), new _hx_array(array("actionimport", "Importer")), new _hx_array(array("actionexport", "Exporter")), new _hx_array(array("usecase", "Respecter la casse")), new _hx_array(array("usespaces", "Respecter les espaces")), new _hx_array(array("notevaluate", "Conserver les arguments non évalués")), new _hx_array(array("separators", "Séparateurs")), new _hx_array(array("comma", "Virgule")), new _hx_array(array("commarole", "Rôle du signe virgule « , »")), new _hx_array(array("point", "Point")), new _hx_array(array("pointrole", "Rôle du signe point « . »")), new _hx_array(array("space", "Espace")), new _hx_array(array("spacerole", "Rôle du signe espace")), new _hx_array(array("decimalmark", "Chiffres après la virgule")), new _hx_array(array("digitsgroup", "Groupes de chiffres")), new _hx_array(array("listitems", "Éléments de liste")), new _hx_array(array("nothing", "Rien")), new _hx_array(array("intervals", "Intervalles")), new _hx_array(array("warningprecision15", "La précision doit être entre 1 et 15.")), new _hx_array(array("decimalSeparator", "Virgule")), new _hx_array(array("thousandsSeparator", "Milliers")), new _hx_array(array("notation", "Notation")), new _hx_array(array("invisible", "Invisible")), new _hx_array(array("auto", "Auto.")), new _hx_array(array("fixedDecimal", "Fixe")), new _hx_array(array("floatingDecimal", "Décimale")), new _hx_array(array("scientific", "Scientifique")), new _hx_array(array("example", "Exemple")), new _hx_array(array("warningreltolfixedprec", "Tolérance relative avec la notation en mode virgule fixe.")), new _hx_array(array("warningabstolfloatprec", "Tolérance absolue avec la notation en mode virgule flottante.")), new _hx_array(array("answerinputinlinehand", "WIRIS écriture manuscrite intégrée")), new _hx_array(array("absolutetolerance", "Tolérance absolue")), new _hx_array(array("clicktoeditalgorithm", "Votre navigateur ne prend <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">pas en charge Java</a>. Cliquez sur le bouton pour télécharger et exécuter l’application WIRIS CAS et modifier l’algorithme de votre question.")), new _hx_array(array("launchwiriscas", "Lancer WIRIS CAS")), new _hx_array(array("sendinginitialsession", "Envoi de la session de départ…")), new _hx_array(array("waitingforupdates", "Attente des actualisations…")), new _hx_array(array("sessionclosed", "Transmission fermée.")), new _hx_array(array("gotsession", "Révision reçue \${n}.")), new _hx_array(array("thecorrectansweris", "La bonne réponse est")), new _hx_array(array("poweredby", "Basé sur")), new _hx_array(array("refresh", "Confirmer la réponse correcte")), new _hx_array(array("fillwithcorrect", "Remplir avec la réponse correcte")), new _hx_array(array("runcalculator", "Run calculator")), new _hx_array(array("clicktoruncalculator", "Click the button to download and run WIRIS cas application to make the calculations you need. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Learn more</a>.")), new _hx_array(array("answer", "answer")), new _hx_array(array("lang", "de")), new _hx_array(array("comparisonwithstudentanswer", "Vergleich mit Schülerantwort")), new _hx_array(array("otheracceptedanswers", "Weitere akzeptierte Antworten")), new _hx_array(array("equivalent_literal", "Im Wortsinn äquivalent")), new _hx_array(array("equivalent_literal_correct_feedback", "Die Antwort ist im Wortsinn äquivalent zur richtigen.")), new _hx_array(array("equivalent_symbolic", "Mathematisch äquivalent")), new _hx_array(array("equivalent_symbolic_correct_feedback", "Die Antwort ist mathematisch äquivalent zur richtigen Antwort.")), new _hx_array(array("equivalent_set", "Äquivalent als Sätze")), new _hx_array(array("equivalent_set_correct_feedback", "Der Fragensatz ist äquivalent zum richtigen.")), new _hx_array(array("equivalent_equations", "Äquivalente Gleichungen")), new _hx_array(array("equivalent_equations_correct_feedback", "Die Antwort hat die gleichen Lösungen wie die richtige.")), new _hx_array(array("equivalent_function", "Benotungsfunktion")), new _hx_array(array("equivalent_function_correct_feedback", "Die Antwort ist richtig.")), new _hx_array(array("equivalent_all", "Jede Antwort")), new _hx_array(array("any", "Irgendeine")), new _hx_array(array("gradingfunction", "Benotungsfunktion")), new _hx_array(array("additionalproperties", "Zusätzliche Eigenschaften")), new _hx_array(array("structure", "Struktur")), new _hx_array(array("none", "Keine")), new _hx_array(array("None", "Keine")), new _hx_array(array("check_integer_form", "hat Form einer ganzen Zahl")), new _hx_array(array("check_integer_form_correct_feedback", "Die Antwort ist eine ganze Zahl.")), new _hx_array(array("check_fraction_form", "hat Form einer Bruchzahl")), new _hx_array(array("check_fraction_form_correct_feedback", "Die Antwort ist eine Bruchzahl.")), new _hx_array(array("check_polynomial_form", "hat Form eines Polynoms")), new _hx_array(array("check_polynomial_form_correct_feedback", "Die Antwort ist ein Polynom.")), new _hx_array(array("check_rational_function_form", "hat Form einer rationalen Funktion")), new _hx_array(array("check_rational_function_form_correct_feedback", "Die Antwort ist eine rationale Funktion.")), new _hx_array(array("check_elemental_function_form", "ist eine Kombination aus elementaren Funktionen")), new _hx_array(array("check_elemental_function_form_correct_feedback", "Die Antwort ist ein elementarer Ausdruck.")), new _hx_array(array("check_scientific_notation", "ist in wissenschaftlicher Schreibweise ausgedrückt")), new _hx_array(array("check_scientific_notation_correct_feedback", "Die Antwort ist in wissenschaftlicher Schreibweise ausgedrückt.")), new _hx_array(array("more", "Mehr")), new _hx_array(array("check_simplified", "ist vereinfacht")), new _hx_array(array("check_simplified_correct_feedback", "Die Antwort ist vereinfacht.")), new _hx_array(array("check_expanded", "ist erweitert")), new _hx_array(array("check_expanded_correct_feedback", "Die Antwort ist erweitert.")), new _hx_array(array("check_factorized", "ist faktorisiert")), new _hx_array(array("check_factorized_correct_feedback", "Die Antwort ist faktorisiert.")), new _hx_array(array("check_rationalized", "ist rationalisiert")), new _hx_array(array("check_rationalized_correct_feedback", "Die Antwort ist rationalisiert.")), new _hx_array(array("check_no_common_factor", "hat keine gemeinsamen Faktoren")), new _hx_array(array("check_no_common_factor_correct_feedback", "Die Antwort hat keine gemeinsamen Faktoren.")), new _hx_array(array("check_minimal_radicands", "weist minimale Radikanden auf")), new _hx_array(array("check_minimal_radicands_correct_feedback", "Die Antwort weist minimale Radikanden auf.")), new _hx_array(array("check_divisible", "ist teilbar durch")), new _hx_array(array("check_divisible_correct_feedback", "Die Antwort ist teilbar durch \${value}.")), new _hx_array(array("check_common_denominator", "hat einen einzigen gemeinsamen Nenner")), new _hx_array(array("check_common_denominator_correct_feedback", "Die Antwort hat einen einzigen gemeinsamen Nenner.")), new _hx_array(array("check_unit", "hat äquivalente Einheit zu")), new _hx_array(array("check_unit_correct_feedback", "Die Einheit der Antwort ist \${unit}.")), new _hx_array(array("check_unit_literal", "hat Einheit im Wortsinn äquivalent zu")), new _hx_array(array("check_unit_literal_correct_feedback", "Die Einheit der Antwort ist \${unit}.")), new _hx_array(array("check_no_more_decimals", "hat weniger als oder gleich viele Dezimalstellen wie")), new _hx_array(array("check_no_more_decimals_correct_feedback", "Die Antwort hat \${digits} oder weniger Dezimalstellen.")), new _hx_array(array("check_no_more_digits", "hat weniger oder gleich viele Stellen wie")), new _hx_array(array("check_no_more_digits_correct_feedback", "Die Antwort hat \${digits} oder weniger Stellen.")), new _hx_array(array("syntax_expression", "Allgemein")), new _hx_array(array("syntax_expression_description", "(Formeln, Ausdrücke, Gleichungen, Matrizen ...)")), new _hx_array(array("syntax_expression_correct_feedback", "Die Syntax der Antwort ist richtig.")), new _hx_array(array("syntax_quantity", "Menge")), new _hx_array(array("syntax_quantity_description", "(Zahlen, Maßeinheiten, Brüche, gemischte Brüche, Verhältnisse ...)")), new _hx_array(array("syntax_quantity_correct_feedback", "Die Syntax der Antwort ist richtig.")), new _hx_array(array("syntax_list", "Liste")), new _hx_array(array("syntax_list_description", "(Listen ohne Komma als Trennzeichen oder Klammern)")), new _hx_array(array("syntax_list_correct_feedback", "Die Syntax der Antwort ist richtig.")), new _hx_array(array("syntax_string", "Text")), new _hx_array(array("syntax_string_description", "(Wörter, Sätze, Zeichenketten)")), new _hx_array(array("syntax_string_correct_feedback", "Die Syntax der Antwort ist richtig.")), new _hx_array(array("none", "Keine")), new _hx_array(array("edit", "Bearbeiten")), new _hx_array(array("accept", "Akzeptieren")), new _hx_array(array("cancel", "Abbrechen")), new _hx_array(array("explog", "exp/log")), new _hx_array(array("trigonometric", "Trigonometrische")), new _hx_array(array("hyperbolic", "Hyperbolische")), new _hx_array(array("arithmetic", "Arithmetische")), new _hx_array(array("all", "Alle")), new _hx_array(array("tolerance", "Toleranz")), new _hx_array(array("relative", "Relative")), new _hx_array(array("relativetolerance", "Relative Toleranz")), new _hx_array(array("precision", "Genauigkeit")), new _hx_array(array("implicit_times_operator", "Unsichtbares Multiplikationszeichen")), new _hx_array(array("times_operator", "Multiplikationszeichen")), new _hx_array(array("imaginary_unit", "Imaginäre Einheit")), new _hx_array(array("mixedfractions", "Gemischte Brüche")), new _hx_array(array("constants", "Konstanten")), new _hx_array(array("functions", "Funktionen")), new _hx_array(array("userfunctions", "Nutzerfunktionen")), new _hx_array(array("units", "Einheiten")), new _hx_array(array("unitprefixes", "Einheitenpräfixe")), new _hx_array(array("syntaxparams", "Syntaxoptionen")), new _hx_array(array("syntaxparams_expression", "Optionen für Allgemein")), new _hx_array(array("syntaxparams_quantity", "Optionen für Menge")), new _hx_array(array("syntaxparams_list", "Optionen für Liste")), new _hx_array(array("allowedinput", "Zulässige Eingabe")), new _hx_array(array("manual", "Anleitung")), new _hx_array(array("correctanswer", "Richtige Antwort")), new _hx_array(array("variables", "Variablen")), new _hx_array(array("validation", "Validierung")), new _hx_array(array("preview", "Vorschau")), new _hx_array(array("correctanswertabhelp", "Geben Sie die richtige Antwort unter Verwendung des WIRIS editors ein. Wählen Sie auch die Verhaltensweise des Formel-Editors, wenn er vom Schüler verwendet wird.\x0A")), new _hx_array(array("assertionstabhelp", "Wählen Sie die Eigenschaften, welche die Schülerantwort erfüllen muss: Ob Sie zum Beispiel vereinfacht, faktorisiert, durch physikalische Einheiten ausgedrückt werden oder eine bestimmte numerische Genauigkeit aufweisen soll.")), new _hx_array(array("variablestabhelp", "Schreiben Sie einen Algorithmus mit WIRIS cas, um zufällige Variablen zu erstellen: Zahlen, Ausdrücke, grafische Darstellungen oder eine Benotungsfunktion. Sie können auch das Ausgabeformat bestimmen, in welchem die Variablen dem Schüler angezeigt werden.\x0A")), new _hx_array(array("testtabhelp", "Geben Sie eine mögliche Schülerantwort ein, um die Verhaltensweise der Frage zu simulieren. Sie verwenden das gleiche Tool, das der Schüler verwenden wird. Beachten Sie bitte, dass Sie auch die Bewertungskriterien, den Erfolg und das automatische Feedback testen können.\x0A")), new _hx_array(array("start", "Start")), new _hx_array(array("test", "Testen")), new _hx_array(array("clicktesttoevaluate", "Klicken Sie auf die Schaltfläche „Testen“, um die aktuelle Antwort zu validieren.")), new _hx_array(array("correct", "Richtig!")), new _hx_array(array("incorrect", "Falsch!")), new _hx_array(array("partiallycorrect", "Teilweise richtig!")), new _hx_array(array("inputmethod", "Eingabemethode")), new _hx_array(array("compoundanswer", "Zusammengesetzte Antwort")), new _hx_array(array("answerinputinlineeditor", "WIRIS editor eingebettet")), new _hx_array(array("answerinputpopupeditor", "WIRIS editor in Popup")), new _hx_array(array("answerinputplaintext", "Eingabefeld mit reinem Text")), new _hx_array(array("showauxiliarcas", "WIRIS cas einbeziehen")), new _hx_array(array("initialcascontent", "Anfangsinhalt")), new _hx_array(array("tolerancedigits", "Toleranzstellen")), new _hx_array(array("validationandvariables", "Validierung und Variablen")), new _hx_array(array("algorithmlanguage", "Algorithmussprache")), new _hx_array(array("calculatorlanguage", "Sprache des Rechners")), new _hx_array(array("hasalgorithm", "Hat Algorithmus")), new _hx_array(array("comparison", "Vergleich")), new _hx_array(array("properties", "Eigenschaften")), new _hx_array(array("studentanswer", "Schülerantwort")), new _hx_array(array("poweredbywiris", "Powered by WIRIS")), new _hx_array(array("yourchangeswillbelost", "Bei Verlassen des Fensters gehen Ihre Änderungen verloren.")), new _hx_array(array("outputoptions", "Ausgabeoptionen")), new _hx_array(array("catalan", "Català")), new _hx_array(array("english", "English")), new _hx_array(array("spanish", "Español")), new _hx_array(array("estonian", "Eesti")), new _hx_array(array("basque", "Euskara")), new _hx_array(array("french", "Français")), new _hx_array(array("german", "Deutsch")), new _hx_array(array("italian", "Italiano")), new _hx_array(array("dutch", "Nederlands")), new _hx_array(array("portuguese", "Português (Portugal)")), new _hx_array(array("javaAppletMissing", "Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>.")), new _hx_array(array("allanswerscorrect", "Alle Antworten müssen richtig sein.")), new _hx_array(array("distributegrade", "Note zuweisen")), new _hx_array(array("no", "Nein")), new _hx_array(array("add", "Hinzufügen")), new _hx_array(array("replaceeditor", "Editor ersetzen")), new _hx_array(array("list", "Liste")), new _hx_array(array("questionxml", "Frage-XML")), new _hx_array(array("grammarurl", "Grammatik-URL")), new _hx_array(array("reservedwords", "Reservierte Wörter")), new _hx_array(array("forcebrackets", "Listen benötigen immer geschweifte Klammern „{}“.")), new _hx_array(array("commaasitemseparator", "Verwenden Sie ein Komma „,“ zur Trennung von Listenelementen.")), new _hx_array(array("confirmimportdeprecated", "Frage importieren? Die Frage, die Sie öffnen möchten, beinhaltet veraltete Merkmale. Durch den Importvorgang kann die Verhaltensweise der Frage leicht verändert werden. Es wird dringend empfohlen, die Frage nach dem Importieren gründlich zu überprüfen.")), new _hx_array(array("comparesets", "Als Mengen vergleichen")), new _hx_array(array("nobracketslist", "Listen ohne Klammern")), new _hx_array(array("warningtoleranceprecision", "Weniger Genauigkeitstellen als Toleranzstellen.")), new _hx_array(array("actionimport", "Importieren")), new _hx_array(array("actionexport", "Exportieren")), new _hx_array(array("usecase", "Schreibung anpassen")), new _hx_array(array("usespaces", "Abstände anpassen")), new _hx_array(array("notevaluate", "Argumente unausgewertet lassen")), new _hx_array(array("separators", "Trennzeichen")), new _hx_array(array("comma", "Komma")), new _hx_array(array("commarole", "Funktion des Kommazeichens „,“")), new _hx_array(array("point", "Punkt")), new _hx_array(array("pointrole", "Funktion des Punktzeichens „.“")), new _hx_array(array("space", "Leerzeichen")), new _hx_array(array("spacerole", "Funktion des Leerzeichens")), new _hx_array(array("decimalmark", "Dezimalstellen")), new _hx_array(array("digitsgroup", "Zahlengruppen")), new _hx_array(array("listitems", "Listenelemente")), new _hx_array(array("nothing", "Nichts")), new _hx_array(array("intervals", "Intervalle")), new _hx_array(array("warningprecision15", "Die Präzision muss zwischen 1 und 15 liegen.")), new _hx_array(array("decimalSeparator", "Dezimalstelle")), new _hx_array(array("thousandsSeparator", "Tausender")), new _hx_array(array("notation", "Notation")), new _hx_array(array("invisible", "Unsichtbar")), new _hx_array(array("auto", "Automatisch")), new _hx_array(array("fixedDecimal", "Feste")), new _hx_array(array("floatingDecimal", "Dezimalstelle")), new _hx_array(array("scientific", "Wissenschaftlich")), new _hx_array(array("example", "Beispiel")), new _hx_array(array("warningreltolfixedprec", "Relative Toleranz mit fester Dezimalnotation.")), new _hx_array(array("warningabstolfloatprec", "Absolute Toleranz mit fließender Dezimalnotation.")), new _hx_array(array("answerinputinlinehand", "WIRIS hand eingebettet")), new _hx_array(array("absolutetolerance", "Absolute Toleranz")), new _hx_array(array("clicktoeditalgorithm", "Ihr Browser <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">unterstützt kein Java</a>. Klicken Sie auf die Schaltfläche, um die Anwendung WIRIS cas herunterzuladen und auszuführen. Mit dieser können Sie den Fragen-Algorithmus bearbeiten.")), new _hx_array(array("launchwiriscas", "WIRIS cas starten")), new _hx_array(array("sendinginitialsession", "Ursprüngliche Sitzung senden ...")), new _hx_array(array("waitingforupdates", "Auf Updates warten ...")), new _hx_array(array("sessionclosed", "Kommunikation geschlossen.")), new _hx_array(array("gotsession", "Empfangene Überarbeitung \${n}.")), new _hx_array(array("thecorrectansweris", "Die richtige Antwort ist")), new _hx_array(array("poweredby", "Angetrieben durch ")), new _hx_array(array("refresh", "Korrekte Antwort erneuern")), new _hx_array(array("fillwithcorrect", "Mit korrekter Antwort ausfüllen")), new _hx_array(array("runcalculator", "Run calculator")), new _hx_array(array("clicktoruncalculator", "Click the button to download and run WIRIS cas application to make the calculations you need. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Learn more</a>.")), new _hx_array(array("answer", "answer")), new _hx_array(array("lang", "el")), new _hx_array(array("comparisonwithstudentanswer", "Σύγκριση με απάντηση μαθητή")), new _hx_array(array("otheracceptedanswers", "Άλλες αποδεκτές απαντήσεις")), new _hx_array(array("equivalent_literal", "Κυριολεκτικά ίση")), new _hx_array(array("equivalent_literal_correct_feedback", "Η απάντηση είναι κυριολεκτικά ίση με τη σωστή.")), new _hx_array(array("equivalent_symbolic", "Μαθηματικά ίση")), new _hx_array(array("equivalent_symbolic_correct_feedback", "Η απάντηση είναι μαθηματικά ίση με τη σωστή.")), new _hx_array(array("equivalent_set", "Ίσα σύνολα")), new _hx_array(array("equivalent_set_correct_feedback", "Το σύνολο της απάντησης είναι ίσο με το σωστό.")), new _hx_array(array("equivalent_equations", "Ισοδύναμες εξισώσεις")), new _hx_array(array("equivalent_equations_correct_feedback", "Η απάντηση έχει τις ίδιες λύσεις με τη σωστή.")), new _hx_array(array("equivalent_function", "Συνάρτηση βαθμολόγησης")), new _hx_array(array("equivalent_function_correct_feedback", "Η απάντηση είναι σωστή.")), new _hx_array(array("equivalent_all", "Οποιαδήποτε απάντηση")), new _hx_array(array("any", "οποιαδήποτε")), new _hx_array(array("gradingfunction", "Συνάρτηση βαθμολόγησης")), new _hx_array(array("additionalproperties", "Πρόσθετες ιδιότητες")), new _hx_array(array("structure", "Δομή")), new _hx_array(array("none", "καμία")), new _hx_array(array("None", "Καμία")), new _hx_array(array("check_integer_form", "έχει μορφή ακέραιου")), new _hx_array(array("check_integer_form_correct_feedback", "Η απάντηση είναι ένας ακέραιος.")), new _hx_array(array("check_fraction_form", "έχει μορφή κλάσματος")), new _hx_array(array("check_fraction_form_correct_feedback", "Η απάντηση είναι ένα κλάσμα.")), new _hx_array(array("check_polynomial_form", "έχει πολυωνυμική μορφή")), new _hx_array(array("check_polynomial_form_correct_feedback", "Η απάντηση είναι ένα πολυώνυμο.")), new _hx_array(array("check_rational_function_form", "έχει μορφή λογικής συνάρτησης")), new _hx_array(array("check_rational_function_form_correct_feedback", "Η απάντηση είναι μια λογική συνάρτηση.")), new _hx_array(array("check_elemental_function_form", "είναι συνδυασμός στοιχειωδών συναρτήσεων")), new _hx_array(array("check_elemental_function_form_correct_feedback", "Η απάντηση είναι μια στοιχειώδης έκφραση.")), new _hx_array(array("check_scientific_notation", "εκφράζεται με επιστημονική σημειογραφία")), new _hx_array(array("check_scientific_notation_correct_feedback", "Η απάντηση εκφράζεται με επιστημονική σημειογραφία.")), new _hx_array(array("more", "Περισσότερες")), new _hx_array(array("check_simplified", "είναι απλοποιημένη")), new _hx_array(array("check_simplified_correct_feedback", "Η απάντηση είναι απλοποιημένη.")), new _hx_array(array("check_expanded", "είναι ανεπτυγμένη")), new _hx_array(array("check_expanded_correct_feedback", "Η απάντηση είναι ανεπτυγμένη.")), new _hx_array(array("check_factorized", "είναι παραγοντοποιημένη")), new _hx_array(array("check_factorized_correct_feedback", "Η απάντηση είναι παραγοντοποιημένη.")), new _hx_array(array("check_rationalized", "είναι αιτιολογημένη")), new _hx_array(array("check_rationalized_correct_feedback", "Η απάντηση είναι αιτιολογημένη.")), new _hx_array(array("check_no_common_factor", "δεν έχει κοινούς συντελεστές")), new _hx_array(array("check_no_common_factor_correct_feedback", "Η απάντηση δεν έχει κοινούς συντελεστές.")), new _hx_array(array("check_minimal_radicands", "έχει ελάχιστα υπόρριζα")), new _hx_array(array("check_minimal_radicands_correct_feedback", "Η απάντηση έχει ελάχιστα υπόρριζα.")), new _hx_array(array("check_divisible", "διαιρείται με το")), new _hx_array(array("check_divisible_correct_feedback", "Η απάντηση διαιρείται με το \${value}.")), new _hx_array(array("check_common_denominator", "έχει έναν κοινό παρονομαστή")), new _hx_array(array("check_common_denominator_correct_feedback", "Η απάντηση έχει έναν κοινό παρονομαστή.")), new _hx_array(array("check_unit", "έχει μονάδα ισοδύναμη με")), new _hx_array(array("check_unit_correct_feedback", "Η μονάδα της απάντηση είναι \${unit}.")), new _hx_array(array("check_unit_literal", "έχει μονάδα κυριολεκτικά ίση με")), new _hx_array(array("check_unit_literal_correct_feedback", "Η μονάδα της απάντηση είναι \${unit}.")), new _hx_array(array("check_no_more_decimals", "έχει λιγότερα ή ίσα δεκαδικά του")), new _hx_array(array("check_no_more_decimals_correct_feedback", "Η απάντηση έχει \${digits} ή λιγότερα δεκαδικά.")), new _hx_array(array("check_no_more_digits", "έχει λιγότερα ή ίσα ψηφία του")), new _hx_array(array("check_no_more_digits_correct_feedback", "Η απάντηση έχει \${digits} ή λιγότερα ψηφία.")), new _hx_array(array("syntax_expression", "Γενικά")), new _hx_array(array("syntax_expression_description", "(τύποι, εκφράσεις, εξισώσεις, μήτρες...)")), new _hx_array(array("syntax_expression_correct_feedback", "Η σύνταξη της απάντησης είναι σωστή.")), new _hx_array(array("syntax_quantity", "Ποσότητα")), new _hx_array(array("syntax_quantity_description", "(αριθμοί, μονάδες μέτρησης, κλάσματα, μικτά κλάσματα, αναλογίες,...)")), new _hx_array(array("syntax_quantity_correct_feedback", "Η σύνταξη της απάντησης είναι σωστή.")), new _hx_array(array("syntax_list", "Λίστα")), new _hx_array(array("syntax_list_description", "(λίστες χωρίς διαχωριστικό κόμμα ή παρενθέσεις)")), new _hx_array(array("syntax_list_correct_feedback", "Η σύνταξη της απάντησης είναι σωστή.")), new _hx_array(array("syntax_string", "Κείμενο")), new _hx_array(array("syntax_string_description", "(λέξεις, προτάσεις, συμβολοσειρές χαρακτήρων)")), new _hx_array(array("syntax_string_correct_feedback", "Η σύνταξη της απάντησης είναι σωστή.")), new _hx_array(array("none", "καμία")), new _hx_array(array("edit", "Επεξεργασία")), new _hx_array(array("accept", "ΟΚ")), new _hx_array(array("cancel", "Άκυρο")), new _hx_array(array("explog", "exp/log")), new _hx_array(array("trigonometric", "τριγωνομετρική")), new _hx_array(array("hyperbolic", "υπερβολική")), new _hx_array(array("arithmetic", "αριθμητική")), new _hx_array(array("all", "όλες")), new _hx_array(array("tolerance", "Ανοχή")), new _hx_array(array("relative", "σχετική")), new _hx_array(array("relativetolerance", "Σχετική ανοχή")), new _hx_array(array("precision", "Ακρίβεια")), new _hx_array(array("implicit_times_operator", "Μη ορατός τελεστής επί")), new _hx_array(array("times_operator", "Τελεστής επί")), new _hx_array(array("imaginary_unit", "Φανταστική μονάδα")), new _hx_array(array("mixedfractions", "Μικτά κλάσματα")), new _hx_array(array("constants", "Σταθερές")), new _hx_array(array("functions", "Συναρτήσεις")), new _hx_array(array("userfunctions", "Συναρτήσεις χρήστη")), new _hx_array(array("units", "Μονάδες")), new _hx_array(array("unitprefixes", "Προθέματα μονάδων")), new _hx_array(array("syntaxparams", "Επιλογές σύνταξης")), new _hx_array(array("syntaxparams_expression", "Επιλογές για γενικά")), new _hx_array(array("syntaxparams_quantity", "Επιλογές για ποσότητα")), new _hx_array(array("syntaxparams_list", "Επιλογές για λίστα")), new _hx_array(array("allowedinput", "Επιτρεπόμενο στοιχείο εισόδου")), new _hx_array(array("manual", "Εγχειρίδιο")), new _hx_array(array("correctanswer", "Σωστή απάντηση")), new _hx_array(array("variables", "Μεταβλητές")), new _hx_array(array("validation", "Επικύρωση")), new _hx_array(array("preview", "Προεπισκόπηση")), new _hx_array(array("correctanswertabhelp", "Εισαγάγετε τη σωστή απάντηση χρησιμοποιώντας τον επεξεργαστή WIRIS. Επιλέξτε επίσης τη συμπεριφορά για τον επεξεργαστή τύπων, όταν χρησιμοποιείται από τον μαθητή.")), new _hx_array(array("assertionstabhelp", "Επιλέξτε τις ιδιότητες που πρέπει να ικανοποιεί η απάντηση του μαθητή. Για παράδειγμα, εάν πρέπει να είναι απλοποιημένη, παραγοντοποιημένη, εκφρασμένη σε φυσικές μονάδες ή να έχει συγκεκριμένη αριθμητική ακρίβεια.")), new _hx_array(array("variablestabhelp", "Γράψτε έναν αλγόριθμο με το WIRIS cas για να δημιουργήσετε τυχαίες μεταβλητές: αριθμούς, εκφράσεις, σχεδιαγράμματα ή μια συνάρτηση βαθμολόγησης. Μπορείτε επίσης να καθορίσετε τη μορφή εξόδου των μεταβλητών που θα εμφανίζονται στον μαθητή.")), new _hx_array(array("testtabhelp", "Εισαγάγετε μια πιθανή απάντηση του μαθητή για να προσομοιώσετε τη συμπεριφορά της ερώτησης. Χρησιμοποιείτε το ίδιο εργαλείο με αυτό που θα χρησιμοποιήσει ο μαθητής. Σημειώνεται ότι μπορείτε επίσης να ελέγξετε τα κριτήρια αξιολόγησης, την επιτυχία και τα αυτόματα σχόλια.")), new _hx_array(array("start", "Έναρξη")), new _hx_array(array("test", "Δοκιμή")), new _hx_array(array("clicktesttoevaluate", "Κάντε κλικ στο κουμπί «Δοκιμή» για να επικυρώσετε τη σωστή απάντηση.")), new _hx_array(array("correct", "Σωστό!")), new _hx_array(array("incorrect", "Λάθος!")), new _hx_array(array("partiallycorrect", "Εν μέρει σωστό!")), new _hx_array(array("inputmethod", "Μέθοδος εισόδου")), new _hx_array(array("compoundanswer", "Σύνθετη απάντηση")), new _hx_array(array("answerinputinlineeditor", "Επεξεργαστής WIRIS ενσωματωμένος")), new _hx_array(array("answerinputpopupeditor", "Επεξεργαστής WIRIS σε αναδυόμενο πλαίσιο")), new _hx_array(array("answerinputplaintext", "Πεδίο εισόδου απλού κειμένου")), new _hx_array(array("showauxiliarcas", "Συμπερίληψη WIRIS cas")), new _hx_array(array("initialcascontent", "Αρχικό περιεχόμενο")), new _hx_array(array("tolerancedigits", "Ψηφία ανοχής")), new _hx_array(array("validationandvariables", "Επικύρωση και μεταβλητές")), new _hx_array(array("algorithmlanguage", "Γλώσσα αλγόριθμου")), new _hx_array(array("calculatorlanguage", "Γλώσσα υπολογιστή")), new _hx_array(array("hasalgorithm", "Έχει αλγόριθμο")), new _hx_array(array("comparison", "Σύγκριση")), new _hx_array(array("properties", "Ιδιότητες")), new _hx_array(array("studentanswer", "Απάντηση μαθητή")), new _hx_array(array("poweredbywiris", "Παρέχεται από τη WIRIS")), new _hx_array(array("yourchangeswillbelost", "Οι αλλαγές σας θα χαθούν εάν αποχωρήσετε από το παράθυρο.")), new _hx_array(array("outputoptions", "Επιλογές εξόδου")), new _hx_array(array("catalan", "Català")), new _hx_array(array("english", "English")), new _hx_array(array("spanish", "Español")), new _hx_array(array("estonian", "Eesti")), new _hx_array(array("basque", "Euskara")), new _hx_array(array("french", "Français")), new _hx_array(array("german", "Deutsch")), new _hx_array(array("italian", "Italiano")), new _hx_array(array("dutch", "Nederlands")), new _hx_array(array("portuguese", "Português (Portugal)")), new _hx_array(array("javaAppletMissing", "Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>.")), new _hx_array(array("allanswerscorrect", "Όλες οι απαντήσεις πρέπει να είναι σωστές")), new _hx_array(array("distributegrade", "Κατανομή βαθμών")), new _hx_array(array("no", "Όχι")), new _hx_array(array("add", "Προσθήκη")), new _hx_array(array("replaceeditor", "Αντικατάσταση επεξεργαστή")), new _hx_array(array("list", "Λίστα")), new _hx_array(array("questionxml", "XML ερώτησης")), new _hx_array(array("grammarurl", "URL γραμματικής")), new _hx_array(array("reservedwords", "Ανεστραμμένες λέξεις")), new _hx_array(array("forcebrackets", "Για τις λίστες χρειάζονται πάντα άγκιστρα «{}».")), new _hx_array(array("commaasitemseparator", "Χρησιμοποιήστε το κόμμα «,» ως διαχωριστικό στοιχείων λίστας.")), new _hx_array(array("confirmimportdeprecated", "Εισαγωγή της ερώτησης; Η ερώτηση που πρόκειται να ανοίξετε περιέχει δυνατότητες που έχουν καταργηθεί. Η διαδικασία εισαγωγής μπορεί να αλλάξει λίγο τη συμπεριφορά της ερώτησης. Θα πρέπει να εξετάσετε προσεκτικά την ερώτηση μετά από την εισαγωγή της.")), new _hx_array(array("comparesets", "Σύγκριση ως συνόλων")), new _hx_array(array("nobracketslist", "Λίστες χωρίς άγκιστρα")), new _hx_array(array("warningtoleranceprecision", "Λιγότερα ψηφία ακρίβειας από τα ψηφία ανοχής.")), new _hx_array(array("actionimport", "Εισαγωγή")), new _hx_array(array("actionexport", "Εξαγωγή")), new _hx_array(array("usecase", "Συμφωνία πεζών-κεφαλαίων")), new _hx_array(array("usespaces", "Συμφωνία διαστημάτων")), new _hx_array(array("notevaluate", "Διατήρηση των ορισμάτων χωρίς αξιολόγηση")), new _hx_array(array("separators", "Διαχωριστικά")), new _hx_array(array("comma", "Κόμμα")), new _hx_array(array("commarole", "Ρόλος του χαρακτήρα «,» (κόμμα)")), new _hx_array(array("point", "Τελεία")), new _hx_array(array("pointrole", "Ρόλος του χαρακτήρα «.» (τελεία)")), new _hx_array(array("space", "Διάστημα")), new _hx_array(array("spacerole", "Ρόλος του χαρακτήρα διαστήματος")), new _hx_array(array("decimalmark", "Δεκαδικά ψηφία")), new _hx_array(array("digitsgroup", "Ομάδες ψηφίων")), new _hx_array(array("listitems", "Στοιχεία λίστας")), new _hx_array(array("nothing", "Τίποτα")), new _hx_array(array("intervals", "Διαστήματα")), new _hx_array(array("warningprecision15", "Η ακρίβεια πρέπει να είναι μεταξύ 1 και 15.")), new _hx_array(array("decimalSeparator", "Δεκαδικό")), new _hx_array(array("thousandsSeparator", "Χιλιάδες")), new _hx_array(array("notation", "Σημειογραφία")), new _hx_array(array("invisible", "Μη ορατό")), new _hx_array(array("auto", "Αυτόματα")), new _hx_array(array("fixedDecimal", "Σταθερό")), new _hx_array(array("floatingDecimal", "Δεκαδικό")), new _hx_array(array("scientific", "Επιστημονικό")), new _hx_array(array("example", "Παράδειγμα")), new _hx_array(array("warningreltolfixedprec", "Σχετική ανοχή με σημειογραφία σταθερής υποδιαστολής.")), new _hx_array(array("warningabstolfloatprec", "Απόλυτη ανοχή με σημειογραφία κινητής υποδιαστολής.")), new _hx_array(array("answerinputinlinehand", "WIRIS ενσωματωμένο")), new _hx_array(array("absolutetolerance", "Απόλυτη ανοχή")), new _hx_array(array("clicktoeditalgorithm", "Το πρόγραμμα περιήγησης που χρησιμοποιείτε δεν <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">υποστηρίζει Java</a>. Κάντε κλικ στο κουμπί για τη λήψη και την εκτέλεση της εφαρμογής WIRIS cas για επεξεργασία του αλγόριθμου ερώτησης.")), new _hx_array(array("launchwiriscas", "Εκκίνηση του WIRIS cas")), new _hx_array(array("sendinginitialsession", "Αποστολή αρχικής περιόδου σύνδεσης...")), new _hx_array(array("waitingforupdates", "Αναμονή για ενημερώσεις...")), new _hx_array(array("sessionclosed", "Η επικοινωνία έκλεισε.")), new _hx_array(array("gotsession", "Λήφθηκε αναθεώρηση \${n}.")), new _hx_array(array("thecorrectansweris", "Η σωστή απάντηση είναι")), new _hx_array(array("poweredby", "Με την υποστήριξη της")), new _hx_array(array("refresh", "Ανανέωση της σωστής απάντησης")), new _hx_array(array("fillwithcorrect", "Συμπλήρωση με τη σωστή απάντηση")), new _hx_array(array("runcalculator", "Run calculator")), new _hx_array(array("clicktoruncalculator", "Click the button to download and run WIRIS cas application to make the calculations you need. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Learn more</a>.")), new _hx_array(array("answer", "answer")), new _hx_array(array("lang", "pt_br")), new _hx_array(array("comparisonwithstudentanswer", "Comparação com a resposta do aluno")), new _hx_array(array("otheracceptedanswers", "Outras respostas aceitas")), new _hx_array(array("equivalent_literal", "Literalmente igual")), new _hx_array(array("equivalent_literal_correct_feedback", "A resposta é literalmente igual à correta.")), new _hx_array(array("equivalent_symbolic", "Matematicamente igual")), new _hx_array(array("equivalent_symbolic_correct_feedback", "A resposta é matematicamente igual à correta.")), new _hx_array(array("equivalent_set", "Iguais aos conjuntos")), new _hx_array(array("equivalent_set_correct_feedback", "O conjunto de respostas é igual ao correto.")), new _hx_array(array("equivalent_equations", "Equações equivalentes")), new _hx_array(array("equivalent_equations_correct_feedback", "A resposta tem as mesmas soluções da correta.")), new _hx_array(array("equivalent_function", "Cálculo da nota")), new _hx_array(array("equivalent_function_correct_feedback", "A resposta está correta.")), new _hx_array(array("equivalent_all", "Qualquer reposta")), new _hx_array(array("any", "qualquer")), new _hx_array(array("gradingfunction", "Cálculo da nota")), new _hx_array(array("additionalproperties", "Propriedades adicionais")), new _hx_array(array("structure", "Estrutura")), new _hx_array(array("none", "nenhuma")), new _hx_array(array("None", "Nenhuma")), new _hx_array(array("check_integer_form", "tem forma de número inteiro")), new _hx_array(array("check_integer_form_correct_feedback", "A resposta é um número inteiro.")), new _hx_array(array("check_fraction_form", "tem forma de fração")), new _hx_array(array("check_fraction_form_correct_feedback", "A resposta é uma fração.")), new _hx_array(array("check_polynomial_form", "tem forma polinomial")), new _hx_array(array("check_polynomial_form_correct_feedback", "A resposta é um polinomial.")), new _hx_array(array("check_rational_function_form", "tem forma de função racional")), new _hx_array(array("check_rational_function_form_correct_feedback", "A resposta é uma função racional.")), new _hx_array(array("check_elemental_function_form", "é uma combinação de funções elementárias")), new _hx_array(array("check_elemental_function_form_correct_feedback", "A resposta é uma expressão elementar.")), new _hx_array(array("check_scientific_notation", "é expressa em notação científica")), new _hx_array(array("check_scientific_notation_correct_feedback", "A resposta é expressa em notação científica.")), new _hx_array(array("more", "Mais")), new _hx_array(array("check_simplified", "é simplificada")), new _hx_array(array("check_simplified_correct_feedback", "A resposta é simplificada.")), new _hx_array(array("check_expanded", "é expandida")), new _hx_array(array("check_expanded_correct_feedback", "A resposta é expandida.")), new _hx_array(array("check_factorized", "é fatorizada")), new _hx_array(array("check_factorized_correct_feedback", "A resposta é fatorizada.")), new _hx_array(array("check_rationalized", "é racionalizada")), new _hx_array(array("check_rationalized_correct_feedback", "A resposta é racionalizada.")), new _hx_array(array("check_no_common_factor", "não tem fatores comuns")), new _hx_array(array("check_no_common_factor_correct_feedback", "A resposta não tem fatores comuns.")), new _hx_array(array("check_minimal_radicands", "tem radiciação mínima")), new _hx_array(array("check_minimal_radicands_correct_feedback", "A resposta tem radiciação mínima.")), new _hx_array(array("check_divisible", "é divisível por")), new _hx_array(array("check_divisible_correct_feedback", "A resposta é divisível por \${value}.")), new _hx_array(array("check_common_denominator", "tem um único denominador comum")), new _hx_array(array("check_common_denominator_correct_feedback", "A resposta tem um único denominador comum.")), new _hx_array(array("check_unit", "tem unidade equivalente a")), new _hx_array(array("check_unit_correct_feedback", "A unidade da resposta é \${unit}.")), new _hx_array(array("check_unit_literal", "tem unidade literalmente igual a")), new _hx_array(array("check_unit_literal_correct_feedback", "A unidade da resposta é \${unit}.")), new _hx_array(array("check_no_more_decimals", "tem menos ou os mesmos decimais que")), new _hx_array(array("check_no_more_decimals_correct_feedback", "A resposta tem \${digits} decimais ou menos.")), new _hx_array(array("check_no_more_digits", "tem menos ou os mesmos dígitos que")), new _hx_array(array("check_no_more_digits_correct_feedback", "A resposta tem \${digits} dígitos ou menos.")), new _hx_array(array("syntax_expression", "Geral")), new _hx_array(array("syntax_expression_description", "(fórmulas, expressões, equações, matrizes...)")), new _hx_array(array("syntax_expression_correct_feedback", "A sintaxe da resposta está correta.")), new _hx_array(array("syntax_quantity", "Quantidade")), new _hx_array(array("syntax_quantity_description", "(números, unidades de medida, frações, frações mistas, proporções...)")), new _hx_array(array("syntax_quantity_correct_feedback", "A sintaxe da resposta está correta.")), new _hx_array(array("syntax_list", "Lista")), new _hx_array(array("syntax_list_description", "(listas sem separação por vírgula ou chaves)")), new _hx_array(array("syntax_list_correct_feedback", "A sintaxe da resposta está correta.")), new _hx_array(array("syntax_string", "Texto")), new _hx_array(array("syntax_string_description", "(palavras, frases, sequências de caracteres)")), new _hx_array(array("syntax_string_correct_feedback", "A sintaxe da resposta está correta.")), new _hx_array(array("none", "nenhuma")), new _hx_array(array("edit", "Editar")), new _hx_array(array("accept", "OK")), new _hx_array(array("cancel", "Cancelar")), new _hx_array(array("explog", "exp/log")), new _hx_array(array("trigonometric", "trigonométrica")), new _hx_array(array("hyperbolic", "hiperbólica")), new _hx_array(array("arithmetic", "aritmética")), new _hx_array(array("all", "tudo")), new _hx_array(array("tolerance", "Tolerância")), new _hx_array(array("relative", "relativa")), new _hx_array(array("relativetolerance", "Tolerância relativa")), new _hx_array(array("precision", "Precisão")), new _hx_array(array("implicit_times_operator", "Sinal de multiplicação invisível")), new _hx_array(array("times_operator", "Sinal de multiplicação")), new _hx_array(array("imaginary_unit", "Unidade imaginária")), new _hx_array(array("mixedfractions", "Frações mistas")), new _hx_array(array("constants", "Constantes")), new _hx_array(array("functions", "Funções")), new _hx_array(array("userfunctions", "Funções do usuário")), new _hx_array(array("units", "Unidades")), new _hx_array(array("unitprefixes", "Prefixos das unidades")), new _hx_array(array("syntaxparams", "Opções de sintaxe")), new _hx_array(array("syntaxparams_expression", "Opções gerais")), new _hx_array(array("syntaxparams_quantity", "Opções de quantidade")), new _hx_array(array("syntaxparams_list", "Opções de lista")), new _hx_array(array("allowedinput", "Entrada permitida")), new _hx_array(array("manual", "Manual")), new _hx_array(array("correctanswer", "Resposta correta")), new _hx_array(array("variables", "Variáveis")), new _hx_array(array("validation", "Validação")), new _hx_array(array("preview", "Prévia")), new _hx_array(array("correctanswertabhelp", "Insira a resposta correta usando o WIRIS editor. Selecione também o comportamento do editor de fórmulas quando usado pelo aluno.")), new _hx_array(array("assertionstabhelp", "Selecione quais propriedades a resposta do aluno deve verificar. Por exemplo, se ela deve ser simplificada, fatorizada, expressa em unidades físicas ou ter uma precisão numérica específica.")), new _hx_array(array("variablestabhelp", "Escreva um algoritmo com o WIRIS cas para criar variáveis aleatórias: números, expressões, gráficos ou cálculo de nota. Você também pode especificar o formato de saída das variáveis exibidas para o aluno.")), new _hx_array(array("testtabhelp", "Insira um estudante em potencial para simular o comportamento da questão. Você está usando a mesma ferramenta que o aluno usará. Note que também é possível testar o critério de avaliação, sucesso e comentário automático.")), new _hx_array(array("start", "Iniciar")), new _hx_array(array("test", "Testar")), new _hx_array(array("clicktesttoevaluate", "Clique no botão Testar para validar a resposta atual.")), new _hx_array(array("correct", "Correta!")), new _hx_array(array("incorrect", "Incorreta!")), new _hx_array(array("partiallycorrect", "Parcialmente correta!")), new _hx_array(array("inputmethod", "Método de entrada")), new _hx_array(array("compoundanswer", "Resposta composta")), new _hx_array(array("answerinputinlineeditor", "WIRIS editor integrado")), new _hx_array(array("answerinputpopupeditor", "WIRIS editor em pop up")), new _hx_array(array("answerinputplaintext", "Campo de entrada de texto simples")), new _hx_array(array("showauxiliarcas", "Incluir WIRIS cas")), new _hx_array(array("initialcascontent", "Conteúdo inicial")), new _hx_array(array("tolerancedigits", "Dígitos de tolerância")), new _hx_array(array("validationandvariables", "Validação e variáveis")), new _hx_array(array("algorithmlanguage", "Linguagem do algoritmo")), new _hx_array(array("calculatorlanguage", "Linguagem da calculadora")), new _hx_array(array("hasalgorithm", "Tem algoritmo")), new _hx_array(array("comparison", "Comparação")), new _hx_array(array("properties", "Propriedades")), new _hx_array(array("studentanswer", "Resposta do aluno")), new _hx_array(array("poweredbywiris", "Fornecido por WIRIS")), new _hx_array(array("yourchangeswillbelost", "As alterações serão perdidas se você sair da janela.")), new _hx_array(array("outputoptions", "Opções de saída")), new _hx_array(array("catalan", "Català")), new _hx_array(array("english", "English")), new _hx_array(array("spanish", "Español")), new _hx_array(array("estonian", "Eesti")), new _hx_array(array("basque", "Euskara")), new _hx_array(array("french", "Français")), new _hx_array(array("german", "Deutsch")), new _hx_array(array("italian", "Italiano")), new _hx_array(array("dutch", "Nederlands")), new _hx_array(array("portuguese", "Português (Portugal)")), new _hx_array(array("javaAppletMissing", "Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>.")), new _hx_array(array("allanswerscorrect", "Todas as respostas devem estar corretas")), new _hx_array(array("distributegrade", "Distribuir notas")), new _hx_array(array("no", "Não")), new _hx_array(array("add", "Adicionar")), new _hx_array(array("replaceeditor", "Substituir editor")), new _hx_array(array("list", "Lista")), new _hx_array(array("questionxml", "XML da pergunta")), new _hx_array(array("grammarurl", "URL da gramática")), new _hx_array(array("reservedwords", "Palavras reservadas")), new _hx_array(array("forcebrackets", "As listas sempre precisam de chaves “{}”.")), new _hx_array(array("commaasitemseparator", "Use vírgula “,” para separar itens na lista.")), new _hx_array(array("confirmimportdeprecated", "Importar questão? A questão prestes a ser aberta contém recursos ultrapassados. O processo de importação pode alterar um pouco o comportamento da questão. É recomendável que você teste a questão atentamente após importá-la.")), new _hx_array(array("comparesets", "Comparar como conjuntos")), new _hx_array(array("nobracketslist", "Listas sem chaves")), new _hx_array(array("warningtoleranceprecision", "Menos dígitos de precisão do que dígitos de tolerância.")), new _hx_array(array("actionimport", "Importar")), new _hx_array(array("actionexport", "Exportar")), new _hx_array(array("usecase", "Coincidir maiúsculas/minúsculas")), new _hx_array(array("usespaces", "Coincidir espaços")), new _hx_array(array("notevaluate", "Manter argumentos não avaliados")), new _hx_array(array("separators", "Separadores")), new _hx_array(array("comma", "Vírgula")), new _hx_array(array("commarole", "Função do caractere vírgula “,”")), new _hx_array(array("point", "Ponto")), new _hx_array(array("pointrole", "Função do caractere ponto “.”")), new _hx_array(array("space", "Espaço")), new _hx_array(array("spacerole", "Função do caractere espaço")), new _hx_array(array("decimalmark", "Dígitos decimais")), new _hx_array(array("digitsgroup", "Grupos de dígitos")), new _hx_array(array("listitems", "Itens da lista")), new _hx_array(array("nothing", "Nada")), new _hx_array(array("intervals", "Intervalos")), new _hx_array(array("warningprecision15", "A precisão deve estar entre 1 e 15.")), new _hx_array(array("decimalSeparator", "Decimal")), new _hx_array(array("thousandsSeparator", "Milhares")), new _hx_array(array("notation", "Notação")), new _hx_array(array("invisible", "Invisível")), new _hx_array(array("auto", "Automática")), new _hx_array(array("fixedDecimal", "Fixa")), new _hx_array(array("floatingDecimal", "Decimal")), new _hx_array(array("scientific", "Científica")), new _hx_array(array("example", "Exemplo")), new _hx_array(array("warningreltolfixedprec", "Tolerância relativa com notação decimal fixa.")), new _hx_array(array("warningabstolfloatprec", "Tolerância absoluta com notação decimal flutuante.")), new _hx_array(array("answerinputinlinehand", "WIRIS hand integrado")), new _hx_array(array("absolutetolerance", "Tolerância absoluta")), new _hx_array(array("clicktoeditalgorithm", "O navegador não é <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">compatível com Java</a>. Clique no botão para baixar e executar o aplicativo WIRIS cas e editar o algoritmo da questão.")), new _hx_array(array("launchwiriscas", "Abrir WIRIS cas")), new _hx_array(array("sendinginitialsession", "Enviando sessão inicial...")), new _hx_array(array("waitingforupdates", "Aguardando atualizações...")), new _hx_array(array("sessionclosed", "Comunicação fechada.")), new _hx_array(array("gotsession", "Revisão \${n} recebida.")), new _hx_array(array("thecorrectansweris", "A resposta correta é")), new _hx_array(array("poweredby", "Fornecido por")), new _hx_array(array("refresh", "Renovar resposta correta")), new _hx_array(array("fillwithcorrect", "Preencher resposta correta")), new _hx_array(array("runcalculator", "Run calculator")), new _hx_array(array("clicktoruncalculator", "Click the button to download and run WIRIS cas application to make the calculations you need. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Learn more</a>.")), new _hx_array(array("answer", "answer")))); diff --git a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/service/ServiceRouter.class.php b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/service/ServiceRouter.class.php index 9d0eb9cbd3..a21e237831 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/service/ServiceRouter.class.php +++ b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/service/ServiceRouter.class.php @@ -144,7 +144,11 @@ public function getUrlMime($url) { while($it->hasNext()) { $service = $it->next(); if(StringTools::startsWith($url, com_wiris_quizzes_service_ServiceRouter::$router->get($service))) { - return com_wiris_quizzes_service_ServiceRouter::$serviceMimes->get($service); + if($service === "grammar" && _hx_index_of($url, "json=true", null) !== -1) { + return "application/json"; + } else { + return com_wiris_quizzes_service_ServiceRouter::$serviceMimes->get($service); + } } unset($service); } diff --git a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/test/Tester.class.php b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/test/Tester.class.php index 550ea2389a..9c28493a47 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/test/Tester.class.php +++ b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/test/Tester.class.php @@ -30,70 +30,78 @@ public function onServiceResponse($id, $res, $q, $qi) { if($id === "compound3") { $this->responseCompound3($res, $q, $qi); } else { - if($id === "images1") { - $this->responseImages1($res, $q, $qi); + if($id === "compound4") { + $this->responseCompound4($res, $q, $qi); } else { - if($id === "images2") { - $this->responseImages2($res, $q, $qi); + if($id === "images1") { + $this->responseImages1($res, $q, $qi); } else { - if($id === "lang1") { - $this->responseLang1($res, $q, $qi); + if($id === "images2") { + $this->responseImages2($res, $q, $qi); } else { - if($id === "openquestion1") { - $this->responseOpenQuestion1($res); + if($id === "lang1") { + $this->responseLang1($res, $q, $qi); } else { - if($id === "tolerance1") { - $this->responseTolerance1($res); + if($id === "openquestion1") { + $this->responseOpenQuestion1($res); } else { - if($id === "randomquestion1") { - $this->responseRandomQuestion1($res, $q, $qi); + if($id === "tolerance1") { + $this->responseTolerance1($res); } else { - if($id === "randomquestion2") { - $this->responseRandomQuestion2($res, $q, $qi); + if($id === "randomquestion1") { + $this->responseRandomQuestion1($res, $q, $qi); } else { - if($id === "encodings1") { - $this->responseEncodings1($res, $q, $qi); + if($id === "randomquestion2") { + $this->responseRandomQuestion2($res, $q, $qi); } else { - if($id === "encodings2") { - $this->responseEncodings2($res, $q, $qi); + if($id === "encodings1") { + $this->responseEncodings1($res, $q, $qi); } else { - if($id === "translation1") { - $this->responseTranslation1($res, $q); + if($id === "encodings2") { + $this->responseEncodings2($res, $q, $qi); } else { - if($id === "bugs1") { - $this->responseBugs1($res, $q, $qi); + if($id === "translation1") { + $this->responseTranslation1($res, $q); } else { - if($id === "multianswer") { - $this->responseMultianswer($res, $q, $qi); + if($id === "bugs1") { + $this->responseBugs1($res, $q, $qi); } else { - if($id === "multianswer2") { - $this->responseMultianswer2($res, $q, $qi); + if($id === "multianswer") { + $this->responseMultianswer($res, $q, $qi); } else { - if($id === "anyanswer1") { - $this->responseAnyAnswer1($res, $q, $qi); + if($id === "multianswer2") { + $this->responseMultianswer2($res, $q, $qi); } else { - if($id === "floateval1") { - $this->responseFloatEval1($res, $q, $qi); + if($id === "anyanswer1") { + $this->responseAnyAnswer1($res, $q, $qi); } else { - if($id === "handwritingConstraints") { - $this->responseHandwritingConstraints($res, $q, $qi); + if($id === "floateval1") { + $this->responseFloatEval1($res, $q, $qi); } else { - if($id === "parameters") { - $this->responseParameters($res, $q, $qi); + if($id === "handwritingConstraints") { + $this->responseHandwritingConstraints($res, $q, $qi); } else { - if($id === "unicode1") { - $this->responseUnicode1($res, $q, $qi); + if($id === "parameters") { + $this->responseParameters($res, $q, $qi); } else { - if($id === "unicode2") { - $this->responseUnicode2($res, $q, $qi); + if($id === "unicode1") { + $this->responseUnicode1($res, $q, $qi); } else { - if($id === "floatformat1") { - $this->responseFloatFormat1($res, $q, $qi); + if($id === "unicode2") { + $this->responseUnicode2($res, $q, $qi); } else { - if($id === "feedback") { - $this->responseFeedback($res, $q, $qi); + if($id === "floatformat1") { + $this->responseFloatFormat1($res, $q, $qi); } else { - throw new HException("Unknown test id."); + if($id === "feedback") { + $this->responseFeedback($res, $q, $qi); + } else { + if($id === "feedback2") { + $this->responseFeedback2($res, $q, $qi); + } else { + throw new HException(new com_wiris_system_Exception("Unknown test id.", null)); + } + } } } } @@ -118,17 +126,31 @@ public function onServiceResponse($id, $res, $q, $qi) { } } } - haxe_Log::trace("Test " . $id . " OK!", _hx_anonymous(array("fileName" => "Tester.hx", "lineNumber" => 954, "className" => "com.wiris.quizzes.test.Tester", "methodName" => "onServiceResponse"))); + haxe_Log::trace("Test " . $id . " OK!", _hx_anonymous(array("fileName" => "Tester.hx", "lineNumber" => 1024, "className" => "com.wiris.quizzes.test.Tester", "methodName" => "onServiceResponse"))); $this->endCall(); }catch(Exception $e) { $_ex_ = ($e instanceof HException) ? $e->e : $e; $e = $_ex_; { - haxe_Log::trace("Failed test " . $id . "!!!", _hx_anonymous(array("fileName" => "Tester.hx", "lineNumber" => 957, "className" => "com.wiris.quizzes.test.Tester", "methodName" => "onServiceResponse"))); + haxe_Log::trace("Failed test " . $id . "!!!", _hx_anonymous(array("fileName" => "Tester.hx", "lineNumber" => 1027, "className" => "com.wiris.quizzes.test.Tester", "methodName" => "onServiceResponse"))); throw new HException($e); } } } + public function responseFeedback2($s, $q, $qi) { + $qi->update($s); + if(!($qi->getAnswerGrade(0, 0, $q) === 1.0)) { + throw new HException("Failed test!"); + } + $t = $qi->expandVariables("#answer"); + if(!($t === "<math><mn>122</mn><mo>+</mn><mn>1</mn></math>")) { + throw new HException("Failed test!"); + } + $t = $qi->expandVariablesMathML("<math><mo>#</mo><mi>a</mi><mi>nswer</mi><mn>1</mn></math>"); + if(!($t === "<math><mrow><mn>122</mn><mo>+</mn><mn>1</mn></mrow></math>")) { + throw new HException("Failed test!"); + } + } public function responseFeedback($s, $q, $qi) { $qi->update($s); if(!($qi->getAnswerGrade(0, 0, $q) === 1.0)) { @@ -138,20 +160,32 @@ public function responseFeedback($s, $q, $qi) { if(!($t === "124")) { throw new HException("Failed test!"); } + $t = $qi->expandVariables("#answer"); + if(!($t === "122+1")) { + throw new HException("Failed test!"); + } + $t = $qi->expandVariablesText("#answer1"); + if(!($t === "122+1")) { + throw new HException("Failed test!"); + } } public function testFeedback() { - $b = com_wiris_quizzes_impl_QuizzesBuilderImpl::getInstance(); + $b = com_wiris_quizzes_api_QuizzesBuilder::getInstance(); $s = "<session lang=\"en\" version=\"2.0\"><library closed=\"false\"><mtext style=\"color:#ffc800\" xml:lang=\"en\">variables</mtext><group><command><input><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mi>parameter</mi><mo>&nbsp;</mo><mi>answer</mi><mo>=</mo><mn>0</mn></math></input></command><command><input><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mi>c</mi><mo>=</mo><mi>answer</mi><mo>+</mo><mn>1</mn></math></input></command></group></library></session>"; - $html = "#c"; + $html = "#c #answer #answer1"; $q = $b->newQuestion(); $q->setAlgorithm($s); $q->setCorrectAnswer(0, "123"); $q->setOption(com_wiris_quizzes_api_QuizzesConstants::$OPTION_STUDENT_ANSWER_PARAMETER, "true"); $i = $b->newQuestionInstance($q); - $i->setStudentAnswer(0, "123"); + $i->setStudentAnswer(0, "122+1"); $r = $b->newFeedbackRequest($html, $q, $i); $this->numCalls++; $b->getQuizzesService()->executeAsync($r, new com_wiris_quizzes_test_TestIdServiceListener("feedback", $this, $q, $i)); + $i = $b->newQuestionInstance($q); + $i->setStudentAnswer(0, "<math><mn>122</mn><mo>+</mn><mn>1</mn></math>"); + $this->numCalls++; + $b->getQuizzesService()->executeAsync($r, new com_wiris_quizzes_test_TestIdServiceListener("feedback2", $this, $q, $i)); } public function responseUnicode2($s, $q, $qi) { $qi->update($s); @@ -216,7 +250,7 @@ public function responseBugs1($s, $q, $qi) { $qi->update($s); $a = $qi->expandVariablesText("#a"); if(!($a === "10")) { - throw new HException("Failed test"); + throw new HException(new com_wiris_system_Exception("Failed test", null)); } } public function testBugs() { @@ -264,7 +298,7 @@ public function testCache() { throw new HException("Failed test"); } if($t2 >= $t1) { - haxe_Log::trace("WARNING: Uncached question was faster than cached one! time miss: " . _hx_string_rec($t1, "") . "ms, time hit: " . _hx_string_rec($t2, "") . "ms.", _hx_anonymous(array("fileName" => "Tester.hx", "lineNumber" => 758, "className" => "com.wiris.quizzes.test.Tester", "methodName" => "testCache"))); + haxe_Log::trace("WARNING: Uncached question was faster than cached one! time miss: " . _hx_string_rec($t1, "") . "ms, time hit: " . _hx_string_rec($t2, "") . "ms.", _hx_anonymous(array("fileName" => "Tester.hx", "lineNumber" => 795, "className" => "com.wiris.quizzes.test.Tester", "methodName" => "testCache"))); } } public function testFilter() { @@ -287,7 +321,7 @@ public function testPerformance() { $r = $qb->newVariablesRequest($text, $q, $qi); $qi->update($qb->getQuizzesService()->execute($r)); $expanded = $qi->expandVariables($text); - haxe_Log::trace($expanded, _hx_anonymous(array("fileName" => "Tester.hx", "lineNumber" => 716, "className" => "com.wiris.quizzes.test.Tester", "methodName" => "testPerformance"))); + haxe_Log::trace($expanded, _hx_anonymous(array("fileName" => "Tester.hx", "lineNumber" => 753, "className" => "com.wiris.quizzes.test.Tester", "methodName" => "testPerformance"))); } public function responseTranslation1($s, $q) { $fr = "<session lang=\"fr\" version=\"2.0\"><library closed=\"false\"><mtext style=\"color:#ffc800\">library</mtext><group><command><input><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mi>a</mi><mo>=</mo><mi>aléa</mi><mo>(</mo><mn>1</mn><mo>.</mo><mo>.</mo><mn>10</mn><mo>)</mo></math></input></command></group></library></session>"; @@ -295,7 +329,7 @@ public function responseTranslation1($s, $q) { $qq->update($s); $tr = $qq->wirisCasSession; if(!($fr === trim($tr))) { - throw new HException("Expected: \x0A" . $fr . "\x0A Got:\x0A" . $tr . "\x0A"); + throw new HException(new com_wiris_system_Exception("Expected: \x0A" . $fr . "\x0A Got:\x0A" . $tr . "\x0A", null)); } } public function testTranslation() { @@ -318,7 +352,7 @@ public function responseEncodings2($s, $q, $qi) { $i1 = $_g1++; $expanded = $qi->expandVariablesText($texts[$i1]); if(!($expanded === $results[$i1])) { - throw new HException("Failed Test. Expected:\x0A" . $results[$i1] . ".\x0AGot:\x0A" . $expanded . "\x0A"); + throw new HException(new com_wiris_system_Exception("Failed Test. Expected:\x0A" . $results[$i1] . ".\x0AGot:\x0A" . $expanded . "\x0A", null)); } unset($i1,$expanded); } @@ -330,7 +364,7 @@ public function responseEncodings1($s, $q, $qi) { $qi->update($s); $expanded = $qi->expandVariables($text); if(!($expanded === $result)) { - throw new HException("Failed Test. Expected:\x0A" . $result . ".\x0AGot:\x0A" . $expanded . "\x0A"); + throw new HException(new com_wiris_system_Exception("Failed Test. Expected:\x0A" . $result . ".\x0AGot:\x0A" . $expanded . "\x0A", null)); } } public function testEncodings() { @@ -359,7 +393,7 @@ public function responseRandomQuestion2($s, $q, $qi) { $syntax = $qqi->isAnswerSyntaxCorrect(0); $correct = $qi->isAnswerCorrect(0); if(!$correct || !$syntax) { - throw new HException("Failed Test!"); + throw new HException(new com_wiris_system_Exception("Failed Test!", null)); } } public function responseRandomQuestion1($s, $q, $qi) { @@ -368,7 +402,7 @@ public function responseRandomQuestion1($s, $q, $qi) { $qi->update($s); $deliveryText = $qi->expandVariables($text); if(!($deliveryText === "Hello! How much is <math><mrow><mn>2</mn></mrow></math> - <math><mrow><mn>1</mn></mrow></math>?")) { - throw new HException("Failed Test!"); + throw new HException(new com_wiris_system_Exception("Failed Test!", null)); } $userAnswer = "1"; $rb = com_wiris_quizzes_impl_QuizzesBuilderImpl::getInstance(); @@ -630,16 +664,16 @@ public function testLang() { public function responseMultianswer2($s, $q, $qi) { $qi->update($s); if(!($qi->getAnswerGrade(0, 0, $q) === 1.0)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if(!($qi->getAnswerGrade(1, 1, $q) === 0.0)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if(!($qi->getAnswerGrade(2, 1, $q) === 1.0)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if(!($qi->getAnswerGrade(3, 1, $q) === 0.0)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } } public function responseMultianswer($s, $q, $qi) { @@ -675,34 +709,55 @@ public function testMultiAnswer() { $this->numCalls++; $builder->getQuizzesService()->executeAsync($r, new com_wiris_quizzes_test_TestIdServiceListener("multianswer", $this, $q, $qi)); } + public function responseCompound4($s, $q, $qi) { + $qi->update($s); + $this->checkEqualFloats($qi->getAnswerGrade(0, 0, $q), 1.0); + $this->checkEqualFloats($qi->getAnswerGrade(0, 1, $q), 2.0 / 3.0); + $this->checkEqualFloats($qi->getAnswerGrade(0, 2, $q), 5.0 / 6.0); + if(!($qi->getCompoundAnswerGrade(0, 0, 0, $q) === 1.0)) { + throw new HException(new com_wiris_system_Exception("Failed test!", null)); + } + if(!($qi->getCompoundAnswerGrade(0, 1, 0, $q) === 0.0)) { + throw new HException(new com_wiris_system_Exception("Failed test!", null)); + } + if(!($qi->getCompoundAnswerGrade(0, 2, 2, $q) === 0.5)) { + throw new HException(new com_wiris_system_Exception("Failed test!", null)); + } + } + public function checkEqualFloats($a, $b) { + $d = com_wiris_quizzes_test_Tester_0($this, $a, $b); + if($d > 0.00000000001) { + throw new HException(new com_wiris_system_Exception("Failed test: expected " . _hx_string_rec($b, "") . " but got " . _hx_string_rec($a, "") . ".", null)); + } + } public function responseCompound3($s, $q, $qi) { $qi->update($s); $qqi = $qi; $qq = _hx_deref(($q))->getImpl(); if(!($qqi->getAnswerGrade(0, 0, $q) === 1.0)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if(!($qqi->getAnswerGrade(1, 0, $q) === 0.0)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if(!($qqi->getCompoundAnswerGrade(0, 0, 0, $q) === 1.0)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if(!($qqi->getCompoundAnswerGrade(0, 0, 2, $q) === 1.0)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if(!($qqi->getCompoundAnswerGrade(1, 0, 0, $q) === 0.0)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if(!($qqi->getCompoundAnswerGrade(1, 0, 2, $q) === 0.0)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } } public function responseCompound2($s, $q, $qi) { $qi->update($s); $qqi = $qi; if(!$qqi->isAnswerMatching(0, 0)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } } public function responseCompound1($s, $q, $qi) { @@ -710,56 +765,56 @@ public function responseCompound1($s, $q, $qi) { $qqi = $qi; $qq = _hx_deref(($q))->getImpl(); if(!$qqi->isAnswerMatching(0, 0)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if($qqi->isAnswerMatching(0, 1)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if($qqi->isAnswerMatching(0, 2)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if(!$qqi->isAnswerMatching(0, 3)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if($qqi->getCompoundAnswerGrade(0, 1, 0, $qq) !== 0.0) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if($qqi->getCompoundAnswerGrade(0, 1, 1, $qq) !== 1.0) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if($qqi->getCompoundAnswerGrade(0, 1, 2, $qq) !== 1.0) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if($qqi->getCompoundAnswerGrade(0, 2, 0, $qq) !== 1.0) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if($qqi->getCompoundAnswerGrade(0, 2, 1, $qq) !== 0.0) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if($qqi->getCompoundAnswerGrade(0, 2, 2, $qq) !== 0.0) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } $qq->setLocalData(com_wiris_quizzes_impl_LocalData::$KEY_OPENANSWER_COMPOUND_ANSWER_GRADE, com_wiris_quizzes_impl_LocalData::$VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTE); $qq->setLocalData(com_wiris_quizzes_impl_LocalData::$KEY_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTION, "20% 30% 50%"); if($qqi->getAnswerGrade(0, 0, $qq) !== 1.0) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if($qqi->getAnswerGrade(0, 1, $qq) !== 0.8) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if($qqi->getAnswerGrade(0, 2, $qq) !== 0.2) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if($qqi->getAnswerGrade(0, 3, $qq) !== 1.0) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } $qq->setLocalData(com_wiris_quizzes_impl_LocalData::$KEY_OPENANSWER_COMPOUND_ANSWER_GRADE, com_wiris_quizzes_impl_LocalData::$VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTE); $qq->removeLocalData(com_wiris_quizzes_impl_LocalData::$KEY_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTION); if(Math::round($qqi->getAnswerGrade(0, 1, $qq) * 100) / 100.0 !== 0.67) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } if(Math::round($qqi->getAnswerGrade(0, 2, $qq) * 100) / 100.0 !== 0.33) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } } public function testCompound() { @@ -790,13 +845,30 @@ public function testCompound() { $r = $builder->newEvalMultipleAnswersRequest(new _hx_array(array($correctAnswer, $correctAnswer)), new _hx_array(array($userCorrectAnswer)), $q, $qi); $this->numCalls++; $builder->getQuizzesService()->executeAsync($r, new com_wiris_quizzes_test_TestIdServiceListener("compound3", $this, $q, $qi)); + $q2 = $builder->newQuestion(); + $q2->setAlgorithm("<session lang=\"en\" version=\"2.0\"><library closed=\"false\"><mi style=\"color:#ffc800\">variables</mi><group><command><input><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mi>test</mi><mo>(</mo><mi>a</mi><mo>,</mo><mi>b</mi><mo>,</mo><mi>c</mi><mo>)</mo><mo>:</mo><mo>=</mo><mo>[</mo><mi>a</mi><mo>==</mo><msqrt><mn>2</mn></msqrt><mo>&nbsp;</mo><mo>?</mo><mo>,</mo><mi>b</mi><mo>==</mo><mi>x</mi><mo>&nbsp;</mo><mo>?</mo><mo>,</mo><mi>if</mi><mo>&nbsp;</mo><mi>c</mi><mo>==</mo><mn>0</mn><mo>&nbsp;</mo><mi>then</mi><mo>&nbsp;</mo><mn>1</mn><mo>&nbsp;</mo><mi>else_if</mi><mo>&nbsp;</mo><mi>c</mi><mo>&gt;</mo><mn>0</mn><mo>&nbsp;</mo><mi>then</mi><mo>&nbsp;</mo><mn>0</mn><mo>.</mo><mn>5</mn><mo>&nbsp;</mo><mi>else</mi><mo>&nbsp;</mo><mn>0</mn><mo>&nbsp;</mo><mi>end</mi><mo>]</mo></math></input></command></group></library><group><command><input><math xmlns=\"http://www.w3.org/1998/Math/MathML\"/></input></command></group></session>"); + $q2->addAssertion(com_wiris_quizzes_impl_Assertion::$EQUIVALENT_FUNCTION, 0, 0, new _hx_array(array("test"))); + $q2->addAssertion(com_wiris_quizzes_impl_Assertion::$EQUIVALENT_FUNCTION, 0, 1, new _hx_array(array("test"))); + $q2->addAssertion(com_wiris_quizzes_impl_Assertion::$EQUIVALENT_FUNCTION, 0, 2, new _hx_array(array("test"))); + $q2->setCorrectAnswer(0, $correctAnswer); + $q2->setProperty(com_wiris_quizzes_impl_LocalData::$KEY_OPENANSWER_COMPOUND_ANSWER, com_wiris_quizzes_impl_LocalData::$VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE); + $q2->setProperty(com_wiris_quizzes_impl_LocalData::$KEY_OPENANSWER_COMPOUND_ANSWER_GRADE, com_wiris_quizzes_impl_LocalData::$VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTE); + $q2->setProperty(com_wiris_quizzes_impl_LocalData::$KEY_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTION, "33% 33% 33%"); + $userIncorrectAnswer3 = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mi>x</mi><mo>=</mo><msqrt><mn>2</mn></msqrt><mspace linebreak=\"newline\"/><mi>y</mi><mo>=</mo><mi>x</mi><mspace linebreak=\"newline\"/><mi>z</mi><mo>=</mo><mn>10</mn></math>"; + $i2 = $builder->newQuestionInstance($q2); + $i2->setStudentAnswer(0, $userCorrectAnswer); + $i2->setStudentAnswer(1, $userIncorectAnswer); + $i2->setStudentAnswer(2, $userIncorrectAnswer3); + $this->numCalls++; + $r = $builder->newFeedbackRequest("#answer1 #answer2 #answer3 #answer4", $q2, $i2); + $builder->getQuizzesService()->executeAsync($r, new com_wiris_quizzes_test_TestIdServiceListener("compound4", $this, $q, $qi)); } public function responseHandwritingConstraints($s, $q, $qi) { $qi->update($s); $json = com_wiris_util_json_JSon::decode(_hx_deref(($qi))->getLocalData(com_wiris_quizzes_impl_LocalData::$KEY_OPENANSWER_HANDWRITING_CONSTRAINTS)); $symbols = $json->get("symbols"); if($this->inArray("s", $symbols) || !$this->inArray("z", $symbols) || !$this->inArray("2", $symbols) || $this->inArray("X", $symbols) || $this->inArray("Y", $symbols) || !$this->inArray("cos", $symbols)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } } public function testHandwritingConstraints() { @@ -807,7 +879,7 @@ public function testHandwritingConstraints() { $json = com_wiris_util_json_JSon::decode($qi->getLocalData(com_wiris_quizzes_impl_LocalData::$KEY_OPENANSWER_HANDWRITING_CONSTRAINTS)); $symbols = $json->get("symbols"); if($this->inArray("s", $symbols) || !$this->inArray("a", $symbols) || $this->inArray("cos", $symbols)) { - throw new HException("Failed test!"); + throw new HException(new com_wiris_system_Exception("Failed test!", null)); } $r = $qb->newVariablesRequest("#a #b #c", $q, $qi); $this->numCalls++; @@ -822,13 +894,13 @@ public function run() { $h = new com_wiris_quizzes_impl_HTMLToolsUnitTests(); $h->run(); haxe_Log::trace("HTML unit test OK!", _hx_anonymous(array("fileName" => "Tester.hx", "lineNumber" => 63, "className" => "com.wiris.quizzes.test.Tester", "methodName" => "run"))); - $this->testFeedback(); $this->testUnicode(); $this->testParameters(); $this->testHandwritingConstraints(); $this->testMultiAnswer(); $this->testBugs(); $this->testOpenQuestion(); + $this->testFeedback(); $this->testOpenQuestionHand(); $this->testAnyAnswer(); if(!(com_wiris_settings_PlatformSettings::$IS_FLASH || com_wiris_settings_PlatformSettings::$IS_JAVASCRIPT)) { @@ -885,3 +957,10 @@ static function main() { } function __toString() { return 'com.wiris.quizzes.test.Tester'; } } +function com_wiris_quizzes_test_Tester_0(&$this, &$a, &$b) { + if($a < $b) { + return $b - $a; + } else { + return $a - $b; + } +} diff --git a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/wrap/QuizzesBuilderWrap.class.php b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/wrap/QuizzesBuilderWrap.class.php index b9a0d7bf90..0d1dbae3ee 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/wrap/QuizzesBuilderWrap.class.php +++ b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/quizzes/wrap/QuizzesBuilderWrap.class.php @@ -78,6 +78,29 @@ public function getQuizzesService() { } } } + public function newFeedbackRequest($html, $question, $instance) { + try { + $qw = $question; + $iw = $instance; + if($qw !== null) { + $question = $qw->question; + } + if($iw !== null) { + $instance = $iw->instance; + } + $this->wrapper->start(); + $r = new com_wiris_quizzes_wrap_QuestionRequestWrap($this->builder->newFeedbackRequest($html, $question, $instance)); + $this->wrapper->stop(); + return $r; + }catch(Exception $e) { + $_ex_ = ($e instanceof HException) ? $e->e : $e; + $e = $_ex_; + { + $this->wrapper->stop(); + throw new HException($e); + } + } + } public function newEvalMultipleAnswersRequest($correctAnswers, $studentAnswers, $question, $instance) { $correctAnswers = new _hx_array($correctAnswers); $studentAnswers = new _hx_array($studentAnswers); diff --git a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/system/Exception.class.php b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/system/Exception.class.php new file mode 100644 index 0000000000..ad200f4c03 --- /dev/null +++ b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/system/Exception.class.php @@ -0,0 +1,23 @@ +<?php + +class com_wiris_system_Exception { + public function __construct($message, $cause = null) { + if(!php_Boot::$skip_constructor) { + $this->message = $message; + }} + public function getMessage() { + return $this->message; + } + public $message; + public function __call($m, $a) { + if(isset($this->$m) && is_callable($this->$m)) + return call_user_func_array($this->$m, $a); + else if(isset($this->dynamics[$m]) && is_callable($this->dynamics[$m])) + return call_user_func_array($this->dynamics[$m], $a); + else if('toString' == $m) + return $this->__toString(); + else + throw new HException('Unable to call '.$m.''); + } + function __toString() { return 'com.wiris.system.Exception'; } +} diff --git a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/system/Storage.class.php b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/system/Storage.class.php index 4d6e6da97d..317b799906 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/system/Storage.class.php +++ b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/system/Storage.class.php @@ -127,6 +127,10 @@ static function setDirectorySeparator() { $sep = DIRECTORY_SEPARATOR; com_wiris_system_Storage::$directorySeparator = $sep; } + static function getCurrentPath() { + throw new HException("Not implemented!"); + return null; + } function __toString() { return $this->toString(); } } function com_wiris_system_Storage_0(&$this, &$path) { diff --git a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/util/json/JSon.class.php b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/util/json/JSon.class.php index 162de8ed27..1d04df0aa8 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/util/json/JSon.class.php +++ b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/util/json/JSon.class.php @@ -225,9 +225,9 @@ public function encodeInteger($sb, $i) { public function encodeString($sb, $s) { $s = str_replace("\\", "\\\\", $s); $s = str_replace("\"", "\\\"", $s); - $s = str_replace("\x0D", "\\\x0D", $s); - $s = str_replace("\x0A", "\\\x0A", $s); - $s = str_replace("\x09", "\\\x09", $s); + $s = str_replace("\x0D", "\\r", $s); + $s = str_replace("\x0A", "\\n", $s); + $s = str_replace("\x09", "\\t", $s); $sb->add("\""); $sb->add($s); $sb->add("\""); diff --git a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/util/type/Arrays.class.php b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/util/type/Arrays.class.php index 545890059b..6bb241dbfe 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/util/type/Arrays.class.php +++ b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/util/type/Arrays.class.php @@ -26,8 +26,7 @@ static function indexOfElement($array, $element) { static function fromCSV($s) { $words = _hx_explode(",", $s); $i = 0; - $n = $words->length; - while($i < $n) { + while($i < $words->length) { $w = trim($words[$i]); if(strlen($w) > 0) { $words[$i] = $w; @@ -121,5 +120,11 @@ static function copyArray($a) { } return $b; } + static function addAll($baseArray, $additionArray) { + $i = $additionArray->iterator(); + while($i->hasNext()) { + $baseArray->push($i->next()); + } + } function __toString() { return 'com.wiris.util.type.Arrays'; } } diff --git a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/util/type/IntegerTools.class.php b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/util/type/IntegerTools.class.php index b91e31ed9e..ab409eb932 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/util/type/IntegerTools.class.php +++ b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/util/type/IntegerTools.class.php @@ -11,5 +11,8 @@ static function min($x, $y) { static function clamp($x, $a, $b) { return com_wiris_util_type_IntegerTools::min(com_wiris_util_type_IntegerTools::max($a, $x), $b); } + static function isInt($x) { + return _hx_deref(new EReg("[\\+\\-]?\\d+", ""))->match($x); + } function __toString() { return 'com.wiris.util.type.IntegerTools'; } } diff --git a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/util/xml/WCharacterBase.class.php b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/util/xml/WCharacterBase.class.php index a61265b4e7..c0e8126e64 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/com/wiris/util/xml/WCharacterBase.class.php +++ b/html/moodle2/question/type/wq/quizzes/lib/com/wiris/util/xml/WCharacterBase.class.php @@ -120,7 +120,7 @@ static function isDigit($c) { return false; } static function isIdentifier($c) { - return com_wiris_util_xml_WCharacterBase::isLetter($c) || $c === 95; + return com_wiris_util_xml_WCharacterBase::isLetter($c) || com_wiris_util_xml_WCharacterBase::isCombiningCharacter($c) || $c === 95; } static function isLarge($c) { return com_wiris_util_xml_WCharacterBase::binarySearch(com_wiris_util_xml_WCharacterBase::$largeOps, $c); @@ -269,6 +269,18 @@ static function getNotNegated($c) { } return -1; } + static function isCombining($s) { + $it = com_wiris_system_Utf8::getIterator($s); + while($it->hasNext()) { + if(!com_wiris_util_xml_WCharacterBase::isCombiningCharacter($it->next())) { + return false; + } + } + return true; + } + static function isCombiningCharacter($c) { + return $c >= 768 && $c <= 879 || $c >= 6832 && $c <= 6911 || $c >= 7616 && $c <= 7679 && ($c >= 8400 && $c <= 8447) && ($c >= 65056 && $c <= 65071); + } static function isLetter($c) { if(com_wiris_util_xml_WCharacterBase::isDigit($c)) { return false; diff --git a/html/moodle2/question/type/wq/quizzes/lib/quizzes.js b/html/moodle2/question/type/wq/quizzes/lib/quizzes.js index f60a9f511a..167168a6c4 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/quizzes.js +++ b/html/moodle2/question/type/wq/quizzes/lib/quizzes.js @@ -1469,7 +1469,7 @@ com.wiris.quizzes.JsInitialCasInput.prototype = $extend(com.wiris.quizzes.JsPopu var container = new com.wiris.quizzes.JsContainer(this.popup.document); container.addClass("wirismaincontainer"); this.addPopupChild(container); - var cas = new com.wiris.quizzes.JsCasInput(this.popup.document,this.getValue(),false,true); + var cas = new com.wiris.quizzes.JsCasInput(this.popup.document,this.getValue(),false,true,"calculatorlanguage"); cas.addClass("wirispopupsimplecontent"); container.addChild(cas); var submit = new com.wiris.quizzes.JsSubmitButtons(this.popup.document); @@ -1907,12 +1907,14 @@ com.wiris.quizzes.JsImageButton.prototype = $extend(com.wiris.quizzes.JsButton.p ,enabled: null ,__class__: com.wiris.quizzes.JsImageButton }); -com.wiris.quizzes.JsCasInput = $hxClasses["com.wiris.quizzes.JsCasInput"] = function(d,v,library,delayload,languageLabelKey) { +com.wiris.quizzes.JsCasInput = $hxClasses["com.wiris.quizzes.JsCasInput"] = function(d,v,library,delayload,languageLabel,buttonText,helpText) { var _g = this; com.wiris.quizzes.JsInput.call(this,d,v); if(library == null) library = false; if(delayload == null) delayload = false; - if(languageLabelKey == null) languageLabelKey = "algorithmlanguage"; + if(languageLabel == null) languageLabel = this.t("calculatorlanguage"); + this.buttonText = buttonText; + this.helpText = helpText; this.library = library; this.listenChanges = false; this.caslang = this.getSessionLang(); @@ -1931,7 +1933,7 @@ com.wiris.quizzes.JsCasInput = $hxClasses["com.wiris.quizzes.JsCasInput"] = func this.langChooser.setOnChange($bind(this,this.languageSelected)); var langChooserWrapper = new com.wiris.quizzes.JsContainer(d); langChooserWrapper.addClass("wirisalgorithmlanguage"); - var label = new com.wiris.quizzes.JsLabel(d,this.t(languageLabelKey),this.langChooser); + var label = new com.wiris.quizzes.JsLabel(d,languageLabel,this.langChooser); langChooserWrapper.addChild(label); langChooserWrapper.addChild(this.langChooser); this.element.appendChild(langChooserWrapper.element); @@ -1974,15 +1976,9 @@ com.wiris.quizzes.JsCasInput.prototype = $extend(com.wiris.quizzes.JsInput.proto return com.wiris.quizzes.impl.HTMLTools.emptyCasSession(this.value); } ,getSessionLang: function() { - var caslang = "en"; - var start; - if(this.value != null && (start = this.value.indexOf("<session")) != -1) { - var end = this.value.indexOf(">",start + 1); - start = this.value.indexOf("lang",start); - if(start == -1 || start > end) return null; - start = this.value.indexOf("\"",start) + 1; - caslang = HxOverrides.substr(this.value,start,2); - } else { + var caslang = null; + if(this.value != null) caslang = com.wiris.quizzes.impl.HTMLTools.casSessionLang(this.value); + if(caslang == null) { var caslangs = this.getCasLangs(); var i; var _g1 = 0, _g = caslangs.length; @@ -1994,6 +1990,7 @@ com.wiris.quizzes.JsCasInput.prototype = $extend(com.wiris.quizzes.JsInput.proto } } } + if(caslang == null) caslang = "en"; return caslang; } ,getCasLang: function() { @@ -2004,7 +2001,7 @@ com.wiris.quizzes.JsCasInput.prototype = $extend(com.wiris.quizzes.JsInput.proto return langs; } ,buildCasApplet: function(d) { - this.casJnlpLauncher = new com.wiris.quizzes.JsCasJnlpLauncher(d,this.value,this.caslang); + this.casJnlpLauncher = new com.wiris.quizzes.JsCasJnlpLauncher(d,this.value,this.caslang,this.helpText,this.buttonText); this.casJnlpLauncher.addOnChangeHandler($bind(this,this.setValue)); this.appletWrapper.appendChild(this.casJnlpLauncher.getElement()); } @@ -2027,12 +2024,18 @@ com.wiris.quizzes.JsCasInput.prototype = $extend(com.wiris.quizzes.JsInput.proto } } else this.setValue(""); this.applet = null; - if(this.casJnlpLauncher != null) this.casJnlpLauncher.setLanguage(this.caslang); else this.buildCasApplet(this.getOwnerDocument()); + if(this.casJnlpLauncher != null) { + this.casJnlpLauncher.setLanguage(this.caslang); + this.casJnlpLauncher.setValue(this.getValue()); + this.casJnlpLauncher.updateSessionImage(); + } else this.buildCasApplet(this.getOwnerDocument()); } } ,init: function() { if(this.applet == null && this.casJnlpLauncher == null) this.buildCasApplet(this.getOwnerDocument()); } + ,helpText: null + ,buttonText: null ,casJnlpLauncher: null ,listenChanges: null ,library: null @@ -2043,18 +2046,28 @@ com.wiris.quizzes.JsCasInput.prototype = $extend(com.wiris.quizzes.JsInput.proto ,caslang: null ,__class__: com.wiris.quizzes.JsCasInput }); -com.wiris.quizzes.JsCasJnlpLauncher = $hxClasses["com.wiris.quizzes.JsCasJnlpLauncher"] = function(d,v,lang) { +com.wiris.quizzes.JsCasJnlpLauncher = $hxClasses["com.wiris.quizzes.JsCasJnlpLauncher"] = function(d,v,lang,text,buttonText) { this.pollingService = false; var _g = this; com.wiris.quizzes.JsInput.call(this,d,v); + if(text == null) text = this.t("clicktoruncalculator"); + if(buttonText == null) buttonText = this.t("runcalculator"); this.setLanguage(lang); this.serviceURL = com.wiris.quizzes.api.QuizzesBuilder.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.WIRISLAUNCHER_URL); + this.sessionId = this.createSessionId(); + this.revision = 0; this.element = d.createElement("div"); com.wiris.quizzes.JsDomUtils.addClass(this.element,"wirisjnlp"); var textDiv = d.createElement("div"); com.wiris.quizzes.JsDomUtils.addClass(textDiv,"wirisjnlptext"); - textDiv.innerHTML = this.t("clicktoeditalgorithm"); + textDiv.innerHTML = text; this.element.appendChild(textDiv); + if(this.getBrowser().isMac()) { + var macDiv = d.createElement("div"); + com.wiris.quizzes.JsDomUtils.addClass(macDiv,"wirisjnlptext"); + macDiv.innerHTML = this.t("macsystemblockapp"); + this.element.appendChild(macDiv); + } var hiddenIframe = d.createElement("iframe"); hiddenIframe.name = "jnlp_hidden_iframe"; com.wiris.quizzes.JsDomUtils.addClass(hiddenIframe,"wirishidden"); @@ -2077,7 +2090,7 @@ com.wiris.quizzes.JsCasJnlpLauncher = $hxClasses["com.wiris.quizzes.JsCasJnlpLau this.form.appendChild(this.sessionIdElem); this.buttonElem = d.createElement("input"); this.buttonElem.type = "button"; - this.buttonElem.value = this.t("launchwiriscas"); + this.buttonElem.value = buttonText; this.form.appendChild(this.buttonElem); com.wiris.quizzes.JsDomUtils.addEvent(this.buttonElem,"click",function(e) { _g.launch(); @@ -2090,21 +2103,25 @@ com.wiris.quizzes.JsCasJnlpLauncher = $hxClasses["com.wiris.quizzes.JsCasJnlpLau notesDiv.appendChild(this.loadingElement); this.noteElem = d.createElement("span"); notesDiv.appendChild(this.noteElem); - if(this.getBrowser().isMac()) { - var macDiv = d.createElement("div"); - com.wiris.quizzes.JsDomUtils.addClass(macDiv,"wirisjnlptext"); - macDiv.innerHTML = this.t("macsystemblockapp"); - this.element.appendChild(macDiv); - } + this.sessionImageDiv = d.createElement("div"); + com.wiris.quizzes.JsDomUtils.addClass(this.sessionImageDiv,"wirisjnlpimage"); + this.sessionImage = d.createElement("img"); + if(!this.isEmpty()) this.setInitialSessionImpl(function(result) { + _g.setSessionImageVisible(true); + }); else this.setSessionImageVisible(false); + this.sessionImageDiv.appendChild(this.sessionImage); + this.element.appendChild(this.sessionImageDiv); this.setLoadingEnabled(false); this.setPollingService(false); this.setButtonEnabled(true); - this.revision = 0; }; com.wiris.quizzes.JsCasJnlpLauncher.__name__ = ["com","wiris","quizzes","JsCasJnlpLauncher"]; com.wiris.quizzes.JsCasJnlpLauncher.__super__ = com.wiris.quizzes.JsInput; com.wiris.quizzes.JsCasJnlpLauncher.prototype = $extend(com.wiris.quizzes.JsInput.prototype,{ - stop: function() { + isEmpty: function() { + return com.wiris.quizzes.impl.HTMLTools.emptyCasSession(this.value); + } + ,stop: function() { this.setPollingService(false); this.setNote(this.t("sessionclosed")); var parameters = this.getParametersObject(); @@ -2136,11 +2153,15 @@ com.wiris.quizzes.JsCasJnlpLauncher.prototype = $extend(com.wiris.quizzes.JsInpu this.updateSession(session); this.setButtonEnabled(true); this.setLoadingEnabled(false); - this.setNote(this.t("sessionclosed")); + if(!this.isEmpty()) { + this.setNote(this.t("sessionclosed")); + this.setSessionImageVisible(true); + } else this.setNote(""); + this.setPollingService(false); } else { this.setButtonEnabled(true); this.setNote(this.t("error")); - haxe.Log.trace(session.get("error"),{ fileName : "JsComponent.hx", lineNumber : 1458, className : "com.wiris.quizzes.JsCasJnlpLauncher", methodName : "sessionReceived"}); + haxe.Log.trace(session.get("error"),{ fileName : "JsComponent.hx", lineNumber : 1535, className : "com.wiris.quizzes.JsCasJnlpLauncher", methodName : "sessionReceived"}); } } ,pollServiceImpl: function() { @@ -2156,8 +2177,8 @@ com.wiris.quizzes.JsCasJnlpLauncher.prototype = $extend(com.wiris.quizzes.JsInpu } ,pollService: function() { this.setLoadingEnabled(true); + this.setNote(this.t("waitingforupdates")); if(!this.isPollingService()) { - this.setNote(this.t("waitingforupdates")); this.setPollingService(true); this.pollServiceImpl(); } @@ -2185,14 +2206,17 @@ com.wiris.quizzes.JsCasJnlpLauncher.prototype = $extend(com.wiris.quizzes.JsInpu }; http.request(true); } - ,setInitialSession: function() { - var _g = this; - this.setNote(this.t("sendinginitialsession")); + ,setInitialSessionImpl: function(callbackFunction) { this.revision++; var parameters = this.getParametersObject(); parameters.set("revision","" + this.revision); parameters.set("value",this.value); - this.callService("set",parameters,function(result) { + this.callService("set",parameters,callbackFunction); + } + ,setInitialSession: function() { + var _g = this; + this.setNote(this.t("sendinginitialsession")); + this.setInitialSessionImpl(function(result) { _g.pollService(); }); } @@ -2220,11 +2244,11 @@ com.wiris.quizzes.JsCasJnlpLauncher.prototype = $extend(com.wiris.quizzes.JsInpu return id.b; } ,launch: function() { - this.sessionId = this.createSessionId(); this.setInitialSession(); this.sessionIdElem.value = this.sessionId; this.langElem.value = this.lang; this.form.submit(); + this.setSessionImageVisible(false); } ,isPollingService: function() { return this.pollingService; @@ -2241,6 +2265,23 @@ com.wiris.quizzes.JsCasJnlpLauncher.prototype = $extend(com.wiris.quizzes.JsInpu ,setLanguage: function(lang) { this.lang = lang; } + ,setSessionImageVisible: function(visible) { + if(visible) { + com.wiris.quizzes.JsDomUtils.removeClass(this.sessionImageDiv,"wirishidden"); + this.setSessionImageSrc(); + } else com.wiris.quizzes.JsDomUtils.addClass(this.sessionImageDiv,"wirishidden"); + } + ,setSessionImageSrc: function() { + this.sessionImage.src = this.serviceURL + "/image.png?session_id=" + this.sessionId + "&revision=" + this.revision; + } + ,updateSessionImage: function() { + var _g = this; + this.setInitialSessionImpl(function(result) { + _g.setSessionImageSrc(); + }); + } + ,sessionImage: null + ,sessionImageDiv: null ,loadingElement: null ,noteElem: null ,buttonElem: null @@ -2288,7 +2329,7 @@ com.wiris.quizzes.JsEditorInput = $hxClasses["com.wiris.quizzes.JsEditorInput"] com.wiris.quizzes.JsEditorInput.__name__ = ["com","wiris","quizzes","JsEditorInput"]; com.wiris.quizzes.JsEditorInput.getReservedWords = function(grammarurl,callbackFunction) { grammarurl += grammarurl.indexOf("?") != -1?"&":"?"; - grammarurl += "reservedWords=true"; + grammarurl += "reservedWords=true&measureUnits=true&json=true"; var http; var conf = com.wiris.quizzes.api.QuizzesBuilder.getInstance().getConfiguration(); if(conf.get(com.wiris.quizzes.api.ConfigurationKeys.CROSSORIGINCALLS_ENABLED) == "true") http = new haxe.Http(grammarurl); else { @@ -2359,10 +2400,16 @@ com.wiris.quizzes.JsEditorInput.prototype = $extend(com.wiris.quizzes.JsInput.pr ,updateReservedWords: function(grammarurl) { var _g = this; var callbackFunction = function(data) { - _g.reservedWords = data.split(","); + var result = com.wiris.util.json.JSon.getHash(com.wiris.util.json.JSon.decode(data)); + _g.reservedWords = com.wiris.util.json.JSon.getArray(result.get("reservedWords")); var params = new Hash(); - params.set("reservedWords",data); - var value = _g.getValue(); + var reservedWordsString = _g.reservedWords.join(","); + params.set("reservedWords",reservedWordsString); + var measureArray = com.wiris.util.json.JSon.getArray(result.get("measureUnits")); + if(measureArray.length > 0) { + var measureUnitsString = measureArray.join(","); + params.set("autoformatFracIgnoredWords",measureUnitsString); + } _g.setParams(params); }; com.wiris.quizzes.JsEditorInput.getReservedWords(grammarurl,callbackFunction); @@ -3156,7 +3203,7 @@ com.wiris.quizzes.JsAuxiliarCasInput = $hxClasses["com.wiris.quizzes.JsAuxiliarC var ii = qi; if(qq.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_SHOW_CAS) != com.wiris.quizzes.impl.LocalData.VALUE_SHOW_CAS_FALSE) { if(ii.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_CAS_SESSION) == null) ii.setLocalData(com.wiris.quizzes.impl.LocalData.KEY_CAS_SESSION,qq.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_CAS_INITIAL_SESSION)); - this.cas = new com.wiris.quizzes.JsCasInput(d,ii.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_CAS_SESSION),false,false,"calculatorlanguage"); + this.cas = new com.wiris.quizzes.JsCasInput(d,ii.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_CAS_SESSION),false,false); var container = new com.wiris.quizzes.JsFieldset(d,null,true); container.addClass("wirisauxiliarcas"); container.addChild(this.cas); @@ -4282,7 +4329,7 @@ com.wiris.quizzes.impl.QuizzesBuilderImpl.prototype = $extend(com.wiris.quizzes. var r = this.newEvalMultipleAnswersRequest(null,null,question,instance); var qr = js.Boot.__cast(r , com.wiris.quizzes.impl.QuestionRequestImpl); var qi = js.Boot.__cast(instance , com.wiris.quizzes.impl.QuestionInstanceImpl); - this.setVariables(html,qi,qr); + this.setVariables(html,question,qi,qr); return r; } ,newEvalMultipleAnswersRequest: function(correctAnswers,userAnswers,question,instance) { @@ -4426,8 +4473,10 @@ com.wiris.quizzes.impl.QuizzesBuilderImpl.prototype = $extend(com.wiris.quizzes. var ass = qq.assertions[i1]; if(ass.isEquivalence()) { usedcorrectanswers[ass.getCorrectAnswer()] = true; - usedanswers[ass.getAnswer()] = true; - } else if(ass.isCheck()) usedanswers[ass.getAnswer()] = true; + if(ass.getAnswer() < usedanswers.length) usedanswers[ass.getAnswer()] = true; + } else if(ass.isCheck()) { + if(ass.getAnswer() < usedanswers.length) usedanswers[ass.getAnswer()] = true; + } } var pairs = this.getPairings(qq.getCorrectAnswersLength(),uu.answers.length); var _g1 = 0, _g = usedcorrectanswers.length; @@ -4481,11 +4530,47 @@ com.wiris.quizzes.impl.QuizzesBuilderImpl.prototype = $extend(com.wiris.quizzes. ,getConfiguration: function() { return com.wiris.quizzes.impl.ConfigurationImpl.getInstance(); } - ,setVariables: function(html,qi,qr) { + ,removeAnswerVariables: function(variables,q,qi) { + var qq = (js.Boot.__cast(q , com.wiris.quizzes.impl.QuestionInternal)).getImpl(); + if(qq.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER) == "true") { + var name = qq.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER_NAME); + var defname = qq.defaultOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER_NAME); + if(defname == name) { + var lang = com.wiris.quizzes.impl.HTMLTools.casSessionLang(qq.getAlgorithm()); + name = com.wiris.quizzes.impl.Translator.getInstance(lang).t(name); + } + var n = 0; + var i; + var _g1 = 0, _g = variables.length; + while(_g1 < _g) { + var i1 = _g1++; + if(StringTools.startsWith(variables[i1],name)) { + var after = HxOverrides.substr(variables[i1],name.length,null); + if(after.length == 0 || com.wiris.util.type.IntegerTools.isInt(after) && Std.parseInt(after) <= qi.getStudentAnswersLength()) { + variables[i1] = null; + n++; + } + } + } + if(n > 0) { + var newvariables = new Array(); + var j = 0; + var _g1 = 0, _g = variables.length; + while(_g1 < _g) { + var i1 = _g1++; + if(variables[i1] != null) newvariables[j++] = variables[i1]; + } + variables = newvariables; + } + } + return variables; + } + ,setVariables: function(html,q,qi,qr) { var variables = null; if(html == null) variables = this.extractQuestionInstanceVariableNames(qi); else { var h = new com.wiris.quizzes.impl.HTMLTools(); variables = h.extractVariableNames(html); + variables = this.removeAnswerVariables(variables,q,qi); } if(variables.length > 0) { qr.variables(variables,com.wiris.quizzes.impl.MathContent.TYPE_TEXT); @@ -4501,7 +4586,7 @@ com.wiris.quizzes.impl.QuizzesBuilderImpl.prototype = $extend(com.wiris.quizzes. var qr = new com.wiris.quizzes.impl.QuestionRequestImpl(); qr.question = q; qr.userData = qi.userData; - this.setVariables(html,qi,qr); + this.setVariables(html,q,qi,qr); return qr; } ,readQuestionInstance: function(xml) { @@ -4527,6 +4612,16 @@ com.wiris.quizzes.impl.QuizzesBuilderImpl.prototype = $extend(com.wiris.quizzes. var type = q.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_INPUT_FIELD); if(type == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_INLINE_EDITOR || type == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_POPUP_EDITOR || type == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_INLINE_HAND) qi.setHandwritingConstraints(question); if("," == q.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_DECIMAL_SEPARATOR) || "," == q.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_DIGIT_GROUP_SEPARATOR) && StringTools.startsWith(q.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_FLOAT_FORMAT),",")) qi.setLocalData(com.wiris.quizzes.impl.LocalData.KEY_ITEM_SEPARATOR,";"); + if(q.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER) == "true") { + var answername = q.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER_NAME); + if(q.defaultOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER_NAME) == answername) { + var alg = q.getAlgorithm(); + if(alg != null) { + var lang = com.wiris.quizzes.impl.HTMLTools.casSessionLang(alg); + if(lang != null && !(com.wiris.quizzes.impl.QuestionInstanceImpl.DEF_ALGORITHM_LANGUAGE == lang)) qi.setLocalData(com.wiris.quizzes.impl.QuestionInstanceImpl.KEY_ALGORITHM_LANGUAGE,lang); + } + } else qi.setLocalData(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER_NAME,answername); + } } return qi; } @@ -4582,7 +4677,7 @@ com.wiris.quizzes.JsQuizzesBuilder.prototype = $extend(com.wiris.quizzes.impl.Qu if(this.config == null) { var c = com.wiris.quizzes.impl.ConfigurationImpl.getInstance(); var https = this.isHttps(); - var urlconfigs = [com.wiris.quizzes.api.ConfigurationKeys.WIRIS_URL,com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL,com.wiris.quizzes.api.ConfigurationKeys.SERVICE_URL,com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL,com.wiris.quizzes.api.ConfigurationKeys.HAND_URL,com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_URL]; + var urlconfigs = [com.wiris.quizzes.api.ConfigurationKeys.WIRIS_URL,com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL,com.wiris.quizzes.api.ConfigurationKeys.SERVICE_URL,com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL,com.wiris.quizzes.api.ConfigurationKeys.HAND_URL,com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_URL,com.wiris.quizzes.api.ConfigurationKeys.WIRISLAUNCHER_URL]; var _g = 0; while(_g < urlconfigs.length) { var key = urlconfigs[_g]; @@ -4769,6 +4864,7 @@ com.wiris.quizzes.JsQuizzesFilter.prototype = { i--; } } + element.value = question.serialize(); } ,filterQuestionInstance: function(element,index,question,instance,options) { var ii = instance; @@ -4777,6 +4873,7 @@ com.wiris.quizzes.JsQuizzesFilter.prototype = { var n = this.numUserAnswers.get(element.id); while(i >= n) HxOverrides.remove(ii.userData.answers,ii.userData.answers[i]); } + element.value = instance.serialize(); } ,getFormElement: function(elem) { var nodeNames = ["input","textarea"]; @@ -5394,7 +5491,7 @@ com.wiris.quizzes.JsStudio.prototype = $extend(com.wiris.quizzes.JsInput.prototy controller[0].updateInterface = (function(controller,elem) { return function(value) { if(com.wiris.quizzes.JsDomUtils.hasClass(elem[0],"wirisjscomponent")) { - var input = new com.wiris.quizzes.JsCasInput(elem[0].ownerDocument,value,true,true); + var input = new com.wiris.quizzes.JsCasInput(elem[0].ownerDocument,value,true,true,_g1.t("algorithmlanguage"),_g1.t("launchwiriscas"),_g1.t("clicktoeditalgorithm")); elem[0].parentNode.replaceChild(input.element,elem[0]); controller[0].jsInput = input; n = elements.length; @@ -5924,18 +6021,6 @@ com.wiris.quizzes.JsStudio.prototype = $extend(com.wiris.quizzes.JsInput.prototy var paramid = "wirisassertionparam" + unique[0] + "[equivalent_function][name][" + correctAnswer[0] + "][" + userAnswer[0] + "]"; var finput = elem[0].ownerDocument.getElementById(paramid); if(finput != null) finput.disabled = !equivFunction; - if(question.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_COMPOUND_ANSWER) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE) { - var distribute = elem[0].ownerDocument.getElementById("wirislocaldata" + unique[0] + "[gradeCompound][distribute]"); - if(equivFunction && distribute.checked) { - distribute.checked = false; - var and = elem[0].ownerDocument.getElementById("wirislocaldata" + unique[0] + "[gradeCompound][and]"); - and.checked = true; - var dist = elem[0].ownerDocument.getElementById("wirislocaldata" + unique[0] + "[gradeCompoundDistribution]"); - dist.value = ""; - dist.disabled = true; - } - distribute.disabled = equivFunction; - } _g1.setCompareSetsEnabled(elem[0].ownerDocument,unique[0],correctAnswer[0],userAnswer[0]); } }; @@ -9465,8 +9550,29 @@ com.wiris.quizzes.impl.HTMLTools.addMathTag = function(mathml) { com.wiris.quizzes.impl.HTMLTools.stripRootTag = function(xml,tag) { xml = StringTools.trim(xml); if(StringTools.startsWith(xml,"<" + tag)) { - xml = HxOverrides.substr(xml,xml.indexOf(">") + 1,null); - xml = HxOverrides.substr(xml,0,xml.lastIndexOf("<")); + var depth = 1; + var lastOpen = xml.lastIndexOf("<"); + var lastClose = xml.lastIndexOf(">"); + var j1 = xml.indexOf("<" + tag,1); + var j2 = xml.indexOf("</" + tag,1); + var j3 = xml.indexOf("/>"); + if(xml.indexOf(">") - j3 != 1) j3 = -1; + while(depth > 0) if((j1 == -1 || j2 < j1) && (j3 == -1 || j2 < j3)) { + depth--; + if(depth > 0) j2 = xml.indexOf("</" + tag,j2 + 1); + } else if(j1 != -1 && (j3 == -1 || j1 < j3)) { + depth++; + j3 = xml.indexOf("/>",j1); + if(xml.indexOf(">",j1) - j3 != 1) j3 = -1; + j1 = xml.indexOf("<" + tag,j1 + 1); + } else { + depth--; + j3 = -1; + } + if(j2 == lastOpen) { + var ini = xml.indexOf(">") + 1; + xml = HxOverrides.substr(xml,ini,lastOpen - ini); + } else if(j3 + 1 == lastClose) xml = ""; } return xml; } @@ -9602,8 +9708,41 @@ com.wiris.quizzes.impl.HTMLTools.convertEditor2Newlines = function(mml) { com.wiris.quizzes.impl.HTMLTools.emptyCasSession = function(value) { return value == null || value.indexOf("<mo") == -1 && value.indexOf("<mi") == -1 && value.indexOf("<mn") == -1 && value.indexOf("<csymbol") == -1; } +com.wiris.quizzes.impl.HTMLTools.casSessionLang = function(value) { + var start = value.indexOf("<session"); + if(start == -1) return null; + var end = value.indexOf(">",start + 1); + start = value.indexOf("lang",start); + if(start == -1 || start > end) return null; + start = value.indexOf("\"",start) + 1; + return HxOverrides.substr(value,start,2); +} com.wiris.quizzes.impl.HTMLTools.prototype = { - setItemSeparator: function(sep) { + getAnswerVariables: function(answers,keyword) { + var h = new Hash(); + var i; + var _g1 = 0, _g = answers.length; + while(_g1 < _g) { + var i1 = _g1++; + var a = answers[i1]; + if(!h.exists(a.type)) h.set(a.type,new Hash()); + h.get(a.type).set(keyword + (i1 + 1),a.content); + } + if(answers.length == 1) h.get(answers[0].type).set(keyword,answers[0].content); + return h; + } + ,expandAnswersText: function(text,answers,keyword) { + if(answers == null || answers.length == 0 || text.indexOf("#" + keyword) == -1) return text; + var h = this.getAnswerVariables(answers,keyword); + var textvariables = h.get(com.wiris.quizzes.impl.MathContent.TYPE_TEXT); + return this.expandVariablesText(text,textvariables); + } + ,expandAnswers: function(text,answers,keyword) { + if(answers == null || answers.length == 0 || text.indexOf("#" + keyword) == -1) return text; + var h = this.getAnswerVariables(answers,keyword); + return this.expandVariables(text,h); + } + ,setItemSeparator: function(sep) { this.separator = sep == null?",":sep; } ,isImplicitArgumentFactor: function(x) { @@ -11749,7 +11888,7 @@ com.wiris.quizzes.impl.QuestionImpl.prototype = $extend(com.wiris.quizzes.impl.Q var tag = s.getTagName(r); if(tag == com.wiris.quizzes.impl.ResultGetTranslation.tagName) { var rgt = js.Boot.__cast(r , com.wiris.quizzes.impl.ResultGetTranslation); - this.wirisCasSession = rgt.wirisCasSession; + this.wirisCasSession = StringTools.trim(rgt.wirisCasSession); } } } @@ -12102,10 +12241,12 @@ com.wiris.quizzes.impl.QuestionInstanceImpl.prototype = $extend(com.wiris.util.x if(ca[j1] == correctAnswer) res.push(answerChecks[i1]); } } - return res; + var resarray = new Array(); + resarray = res.slice(); + return resarray; } } - return null; + return new Array(); } ,getStudentAnswersLength: function() { return this.userData.answers != null?this.userData.answers.length:0; @@ -12421,20 +12562,17 @@ com.wiris.quizzes.impl.QuestionInstanceImpl.prototype = $extend(com.wiris.util.x ,getAnswerGrade: function(correctAnswer,studentAnswer,q) { var grade = 0.0; var question = q != null?(js.Boot.__cast(q , com.wiris.quizzes.impl.QuestionInternal)).getImpl():null; - if(question != null && question.getAssertionIndex(com.wiris.quizzes.impl.Assertion.EQUIVALENT_FUNCTION,correctAnswer,studentAnswer) != -1) { - var checks = this.checks.get(studentAnswer + ""); - grade = this.prodChecks(checks,correctAnswer,studentAnswer); - } else if(question != null && question.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_COMPOUND_ANSWER) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE && question.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_COMPOUND_ANSWER_GRADE) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTE) { + if(question != null && question.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_COMPOUND_ANSWER) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE && question.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_COMPOUND_ANSWER_GRADE) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTE) { var distribution = this.getCompoundGradeDistribution(question.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTION)); var i; var _g1 = 0, _g = distribution.length; while(_g1 < _g) { var i1 = _g1++; - var checks = this.getCompoundAnswerChecks(correctAnswer,studentAnswer,i1); - if(checks != null) { - if(this.andChecks(checks)) grade += distribution[i1]; - } + grade += distribution[i1] * this.getCompoundAnswerGrade(correctAnswer,studentAnswer,i1,q); } + } else if(question != null && question.getAssertionIndex(com.wiris.quizzes.impl.Assertion.EQUIVALENT_FUNCTION,correctAnswer,studentAnswer) != -1) { + var checks = this.checks.get(studentAnswer + ""); + grade = this.prodChecks(checks,correctAnswer,studentAnswer); } else { var correct = this.isAnswerMatching(correctAnswer,studentAnswer); grade = correct?1.0:0.0; @@ -12614,10 +12752,12 @@ com.wiris.quizzes.impl.QuestionInstanceImpl.prototype = $extend(com.wiris.util.x if(text == null) return null; var h = new com.wiris.quizzes.impl.HTMLTools(); if(com.wiris.quizzes.impl.MathContent.getMathType(text) == com.wiris.quizzes.impl.MathContent.TYPE_MATHML) text = h.mathMLToText(text); - if(this.variables == null || this.variables.get(com.wiris.quizzes.impl.MathContent.TYPE_TEXT) == null) return text; else { + if(this.variables != null && this.variables.get(com.wiris.quizzes.impl.MathContent.TYPE_TEXT) != null) { var textvars = this.variables.get(com.wiris.quizzes.impl.MathContent.TYPE_TEXT); - return h.expandVariablesText(text,textvars); + text = h.expandVariablesText(text,textvars); } + if(this.userData.answers != null) text = h.expandAnswersText(text,this.userData.answers,this.getAnswerParameterName()); + return text; } ,addAllHashElements: function(src,dest) { if(src != null) { @@ -12640,16 +12780,29 @@ com.wiris.quizzes.impl.QuestionInstanceImpl.prototype = $extend(com.wiris.util.x return h.expandVariables(equation,vars); } } + ,getAnswerParameterName: function() { + var keyword = this.getLocalData(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER_NAME); + if(keyword == null) { + keyword = "answer"; + var lang = this.getLocalData(com.wiris.quizzes.impl.QuestionInstanceImpl.KEY_ALGORITHM_LANGUAGE); + if(lang != null && !(lang == com.wiris.quizzes.impl.QuestionInstanceImpl.DEF_ALGORITHM_LANGUAGE)) keyword = com.wiris.quizzes.impl.Translator.getInstance(lang).t(keyword); + } + return keyword; + } ,expandVariablesMathML: function(equation) { var h = new com.wiris.quizzes.impl.HTMLTools(); if(com.wiris.quizzes.impl.MathContent.getMathType(equation) == com.wiris.quizzes.impl.MathContent.TYPE_TEXT) equation = h.textToMathML(equation); - return h.expandVariables(equation,this.variables); + equation = h.expandVariables(equation,this.variables); + equation = h.expandAnswers(equation,this.userData.answers,this.getAnswerParameterName()); + return equation; } ,expandVariables: function(text) { if(text == null) return null; var h = new com.wiris.quizzes.impl.HTMLTools(); h.setItemSeparator(this.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_ITEM_SEPARATOR)); - return h.expandVariables(text,this.variables); + text = h.expandVariables(text,this.variables); + text = h.expandAnswers(text,this.userData.answers,this.getAnswerParameterName()); + return text; } ,defaultLocalData: function(name) { return null; @@ -13306,6 +13459,17 @@ com.wiris.system.ArrayEx.indexOf = function(a,b) { } return -1; } +com.wiris.system.Exception = $hxClasses["com.wiris.system.Exception"] = function(message,cause) { + this.message = message; +}; +com.wiris.system.Exception.__name__ = ["com","wiris","system","Exception"]; +com.wiris.system.Exception.prototype = { + getMessage: function() { + return this.message; + } + ,message: null + ,__class__: com.wiris.system.Exception +} com.wiris.system.FileLock = $hxClasses["com.wiris.system.FileLock"] = function(filename) { this.filename = filename; }; @@ -13615,6 +13779,10 @@ com.wiris.system.Storage.setDirectorySeparator = function() { sep = "/"; com.wiris.system.Storage.directorySeparator = sep; } +com.wiris.system.Storage.getCurrentPath = function() { + throw "Not implemented!"; + return null; +} com.wiris.system.Storage.prototype = { setResourceObject: function(obj) { } @@ -14344,9 +14512,9 @@ com.wiris.util.json.JSon.prototype = $extend(com.wiris.util.json.StringParser.pr ,encodeString: function(sb,s) { s = StringTools.replace(s,"\\","\\\\"); s = StringTools.replace(s,"\"","\\\""); - s = StringTools.replace(s,"\r","\\\r"); - s = StringTools.replace(s,"\n","\\\n"); - s = StringTools.replace(s,"\t","\\\t"); + s = StringTools.replace(s,"\r","\\r"); + s = StringTools.replace(s,"\n","\\n"); + s = StringTools.replace(s,"\t","\\t"); sb.b += Std.string("\""); sb.b += Std.string(s); sb.b += Std.string("\""); @@ -14628,8 +14796,7 @@ com.wiris.util.type.Arrays.indexOfElement = function(array,element) { com.wiris.util.type.Arrays.fromCSV = function(s) { var words = s.split(","); var i = 0; - var n = words.length; - while(i < n) { + while(i < words.length) { var w = StringTools.trim(words[i]); if(w.length > 0) { words[i] = w; @@ -14699,6 +14866,10 @@ com.wiris.util.type.Arrays.copyArray = function(a) { while(i.hasNext()) b.push(i.next()); return b; } +com.wiris.util.type.Arrays.addAll = function(baseArray,additionArray) { + var i = HxOverrides.iter(additionArray); + while(i.hasNext()) baseArray.push(i.next()); +} com.wiris.util.type.Arrays.prototype = { __class__: com.wiris.util.type.Arrays } @@ -14713,6 +14884,9 @@ com.wiris.util.type.IntegerTools.min = function(x,y) { com.wiris.util.type.IntegerTools.clamp = function(x,a,b) { return com.wiris.util.type.IntegerTools.min(com.wiris.util.type.IntegerTools.max(a,x),b); } +com.wiris.util.type.IntegerTools.isInt = function(x) { + return new EReg("[\\+\\-]?\\d+","").match(x); +} com.wiris.util.xml.MathMLUtils = $hxClasses["com.wiris.util.xml.MathMLUtils"] = function() { }; com.wiris.util.xml.MathMLUtils.__name__ = ["com","wiris","util","xml","MathMLUtils"]; @@ -14783,7 +14957,7 @@ com.wiris.util.xml.WCharacterBase.isDigit = function(c) { return false; } com.wiris.util.xml.WCharacterBase.isIdentifier = function(c) { - return com.wiris.util.xml.WCharacterBase.isLetter(c) || c == 95; + return com.wiris.util.xml.WCharacterBase.isLetter(c) || com.wiris.util.xml.WCharacterBase.isCombiningCharacter(c) || c == 95; } com.wiris.util.xml.WCharacterBase.isLarge = function(c) { return com.wiris.util.xml.WCharacterBase.binarySearch(com.wiris.util.xml.WCharacterBase.largeOps,c); @@ -14893,6 +15067,14 @@ com.wiris.util.xml.WCharacterBase.getNotNegated = function(c) { } return -1; } +com.wiris.util.xml.WCharacterBase.isCombining = function(s) { + var it = com.wiris.system.Utf8.getIterator(s); + while(it.hasNext()) if(!com.wiris.util.xml.WCharacterBase.isCombiningCharacter(it.next())) return false; + return true; +} +com.wiris.util.xml.WCharacterBase.isCombiningCharacter = function(c) { + return c >= 768 && c <= 879 || c >= 6832 && c <= 6911 || c >= 7616 && c <= 7679 && (c >= 8400 && c <= 8447) && (c >= 65056 && c <= 65071); +} com.wiris.util.xml.WCharacterBase.isLetter = function(c) { if(com.wiris.util.xml.WCharacterBase.isDigit(c)) return false; if(65 <= c && c <= 90) return true; @@ -18394,6 +18576,8 @@ com.wiris.quizzes.impl.Property.tagName = "property"; com.wiris.quizzes.impl.QuestionImpl.defaultOptions = null; com.wiris.quizzes.impl.QuestionImpl.TAGNAME = "question"; com.wiris.quizzes.impl.QuestionInstanceImpl.tagName = "questionInstance"; +com.wiris.quizzes.impl.QuestionInstanceImpl.DEF_ALGORITHM_LANGUAGE = "en"; +com.wiris.quizzes.impl.QuestionInstanceImpl.KEY_ALGORITHM_LANGUAGE = "sessionLang"; com.wiris.quizzes.impl.QuestionRequestImpl.tagName = "processQuestion"; com.wiris.quizzes.impl.QuestionResponseImpl.tagName = "processQuestionResult"; com.wiris.quizzes.impl.ResultError.tagName = "error"; @@ -18405,7 +18589,7 @@ com.wiris.quizzes.impl.ResultGetTranslation.tagName = "getTranslationResult"; com.wiris.quizzes.impl.ResultGetVariables.tagName = "getVariablesResult"; com.wiris.quizzes.impl.ResultStoreQuestion.tagName = "storeQuestionResult"; com.wiris.quizzes.impl.SharedVariables.h = null; -com.wiris.quizzes.impl.Strings.lang = [["lang","en"],["comparisonwithstudentanswer","Comparison with student answer"],["otheracceptedanswers","Other accepted answers"],["equivalent_literal","Literally equal"],["equivalent_literal_correct_feedback","The answer is literally equal to the correct one."],["equivalent_symbolic","Mathematically equal"],["equivalent_symbolic_correct_feedback","The answer is mathematically equal to the correct one."],["equivalent_set","Equal as sets"],["equivalent_set_correct_feedback","The answer set is equal to the correct one."],["equivalent_equations","Equivalent equations"],["equivalent_equations_correct_feedback","The answer has the same solutions as the correct one."],["equivalent_function","Grading function"],["equivalent_function_correct_feedback","The answer is correct."],["equivalent_all","Any answer"],["any","any"],["gradingfunction","Grading function"],["additionalproperties","Additional properties"],["structure","Structure"],["none","none"],["None","None"],["check_integer_form","has integer form"],["check_integer_form_correct_feedback","The answer is an integer."],["check_fraction_form","has fraction form"],["check_fraction_form_correct_feedback","The answer is a fraction."],["check_polynomial_form","has polynomial form"],["check_polynomial_form_correct_feedback","The answer is a polynomial."],["check_rational_function_form","has rational function form"],["check_rational_function_form_correct_feedback","The answer is a rational function."],["check_elemental_function_form","is a combination of elementary functions"],["check_elemental_function_form_correct_feedback","The answer is an elementary expression."],["check_scientific_notation","is expressed in scientific notation"],["check_scientific_notation_correct_feedback","The answer is expressed in scientific notation."],["more","More"],["check_simplified","is simplified"],["check_simplified_correct_feedback","The answer is simplified."],["check_expanded","is expanded"],["check_expanded_correct_feedback","The answer is expanded."],["check_factorized","is factorized"],["check_factorized_correct_feedback","The answer is factorized."],["check_rationalized","is rationalized"],["check_rationalized_correct_feedback","The answer is rationalized."],["check_no_common_factor","doesn't have common factors"],["check_no_common_factor_correct_feedback","The answer doesn't have common factors."],["check_minimal_radicands","has minimal radicands"],["check_minimal_radicands_correct_feedback","The answer has minimal radicands."],["check_divisible","is divisible by"],["check_divisible_correct_feedback","The answer is divisible by ${value}."],["check_common_denominator","has a single common denominator"],["check_common_denominator_correct_feedback","The answer has a single common denominator."],["check_unit","has unit equivalent to"],["check_unit_correct_feedback","The unit of the answer is ${unit}."],["check_unit_literal","has unit literally equal to"],["check_unit_literal_correct_feedback","The unit of the answer is ${unit}."],["check_no_more_decimals","has less or equal decimals than"],["check_no_more_decimals_correct_feedback","The answer has ${digits} or less decimals."],["check_no_more_digits","has less or equal digits than"],["check_no_more_digits_correct_feedback","The answer has ${digits} or less digits."],["syntax_expression","General"],["syntax_expression_description","(formulas, expressions, equations, matrices...)"],["syntax_expression_correct_feedback","The answer syntax is correct."],["syntax_quantity","Quantity"],["syntax_quantity_description","(numbers, measure units, fractions, mixed fractions, ratios...)"],["syntax_quantity_correct_feedback","The answer syntax is correct."],["syntax_list","List"],["syntax_list_description","(lists without comma separator or brackets)"],["syntax_list_correct_feedback","The answer syntax is correct."],["syntax_string","Text"],["syntax_string_description","(words, sentences, character strings)"],["syntax_string_correct_feedback","The answer syntax is correct."],["none","none"],["edit","Edit"],["accept","OK"],["cancel","Cancel"],["explog","exp/log"],["trigonometric","trigonometric"],["hyperbolic","hyperbolic"],["arithmetic","arithmetic"],["all","all"],["tolerance","Tolerance"],["relative","relative"],["relativetolerance","Relative tolerance"],["precision","Precision"],["implicit_times_operator","Invisible times operator"],["times_operator","Times operator"],["imaginary_unit","Imaginary unit"],["mixedfractions","Mixed fractions"],["constants","Constants"],["functions","Functions"],["userfunctions","User functions"],["units","Units"],["unitprefixes","Unit prefixes"],["syntaxparams","Syntax options"],["syntaxparams_expression","Options for general"],["syntaxparams_quantity","Options for quantity"],["syntaxparams_list","Options for list"],["allowedinput","Allowed input"],["manual","Manual"],["correctanswer","Correct answer"],["variables","Variables"],["validation","Validation"],["preview","Preview"],["correctanswertabhelp","Insert the correct answer using WIRIS editor. Select also the behaviour for the formula editor when used by the student.\n"],["assertionstabhelp","Select which properties the student answer has to verify. For example, if it has to be simplified, factorized, expressed using physical units or have a specific numerical precision."],["variablestabhelp","Write an algorithm with WIRIS cas to create random variables: numbers, expressions, plots or a grading function.\nYou can also specify the output format of the variables shown to the student.\n"],["testtabhelp","Insert a possible student answer to simulate the behaviour of the question. You are using the same tool that the student will use.\nNote that you can also test the evaluation criteria, success and automatic feedback.\n"],["start","Start"],["test","Test"],["clicktesttoevaluate","Click Test button to validate the current answer."],["correct","Correct!"],["incorrect","Incorrect!"],["partiallycorrect","Partially correct!"],["inputmethod","Input method"],["compoundanswer","Compound answer"],["answerinputinlineeditor","WIRIS editor embedded"],["answerinputpopupeditor","WIRIS editor in popup"],["answerinputplaintext","Plain text input field"],["showauxiliarcas","Include WIRIS cas"],["initialcascontent","Initial content"],["tolerancedigits","Tolerance digits"],["validationandvariables","Validation and variables"],["algorithmlanguage","Algorithm language"],["calculatorlanguage","Calculator language"],["hasalgorithm","Has algorithm"],["comparison","Comparison"],["properties","Properties"],["studentanswer","Student answer"],["poweredbywiris","Powered by WIRIS"],["yourchangeswillbelost","Your changes will be lost if you leave the window."],["outputoptions","Output options"],["catalan","Català"],["english","English"],["spanish","Español"],["estonian","Eesti"],["basque","Euskara"],["french","Français"],["german","Deutsch"],["italian","Italiano"],["dutch","Nederlands"],["portuguese","Português (Portugal)"],["javaAppletMissing","Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>."],["allanswerscorrect","All answers must be correct"],["distributegrade","Distribute grade"],["no","No"],["add","Add"],["replaceeditor","Replace editor"],["list","List"],["questionxml","Question XML"],["grammarurl","Grammar URL"],["reservedwords","Reserved words"],["forcebrackets","Lists always need curly brackets \"{}\"."],["commaasitemseparator","Use comma \",\" as list item separator."],["confirmimportdeprecated","Import the question? \nThe question you are about to open contains deprecated features. The import process may change slightly the behavior of the question. It is highly recommended that you carefully test de question after import."],["comparesets","Compare as sets"],["nobracketslist","Lists without brackets"],["warningtoleranceprecision","Less precision digits than tolerance digits."],["actionimport","Import"],["actionexport","Export"],["usecase","Match case"],["usespaces","Match spaces"],["notevaluate","Keep arguments unevaluated"],["separators","Separators"],["comma","Comma"],["commarole","Role of the comma ',' character"],["point","Point"],["pointrole","Role of the point '.' character"],["space","Space"],["spacerole","Role of the space character"],["decimalmark","Decimal digits"],["digitsgroup","Digit groups"],["listitems","List items"],["nothing","Nothing"],["intervals","Intervals"],["warningprecision15","Precision must be between 1 and 15."],["decimalSeparator","Decimal"],["thousandsSeparator","Thousands"],["notation","Notation"],["invisible","Invisible"],["auto","Auto"],["fixedDecimal","Fixed"],["floatingDecimal","Decimal"],["scientific","Scientific"],["example","Example"],["warningreltolfixedprec","Relative tolerance with fixed decimal notation."],["warningabstolfloatprec","Absolute tolerance with floating decimal notation."],["answerinputinlinehand","WIRIS hand embedded"],["absolutetolerance","Absolute tolerance"],["clicktoeditalgorithm","Your browser doesn't <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">support Java</a>. Click the button to download and run WIRIS cas application to edit the question algorithm."],["launchwiriscas","Launch WIRIS cas"],["sendinginitialsession","Sending initial session..."],["waitingforupdates","Waiting for updates..."],["sessionclosed","Comunication closed."],["gotsession","Received revision ${n}."],["thecorrectansweris","The correct answer is"],["poweredby","Powered by"],["refresh","Renew correct answer"],["fillwithcorrect","Fill with correct answer"],["lang","es"],["comparisonwithstudentanswer","Comparación con la respuesta del estudiante"],["otheracceptedanswers","Otras respuestas aceptadas"],["equivalent_literal","Literalmente igual"],["equivalent_literal_correct_feedback","La respuesta es literalmente igual a la correcta."],["equivalent_symbolic","Matemáticamente igual"],["equivalent_symbolic_correct_feedback","La respuesta es matemáticamente igual a la correcta."],["equivalent_set","Igual como conjuntos"],["equivalent_set_correct_feedback","El conjunto de respuestas es igual al correcto."],["equivalent_equations","Ecuaciones equivalentes"],["equivalent_equations_correct_feedback","La respuesta tiene las soluciones requeridas."],["equivalent_function","Función de calificación"],["equivalent_function_correct_feedback","La respuesta es correcta."],["equivalent_all","Cualquier respuesta"],["any","cualquier"],["gradingfunction","Función de calificación"],["additionalproperties","Propiedades adicionales"],["structure","Estructura"],["none","ninguno"],["None","Ninguno"],["check_integer_form","tiene forma de número entero"],["check_integer_form_correct_feedback","La respuesta es un número entero."],["check_fraction_form","tiene forma de fracción"],["check_fraction_form_correct_feedback","La respuesta es una fracción."],["check_polynomial_form","tiene forma de polinomio"],["check_polynomial_form_correct_feedback","La respuesta es un polinomio."],["check_rational_function_form","tiene forma de función racional"],["check_rational_function_form_correct_feedback","La respuesta es una función racional."],["check_elemental_function_form","es una combinación de funciones elementales"],["check_elemental_function_form_correct_feedback","La respuesta es una expresión elemental."],["check_scientific_notation","está expresada en notación científica"],["check_scientific_notation_correct_feedback","La respuesta está expresada en notación científica."],["more","Más"],["check_simplified","está simplificada"],["check_simplified_correct_feedback","La respuesta está simplificada."],["check_expanded","está expandida"],["check_expanded_correct_feedback","La respuesta está expandida."],["check_factorized","está factorizada"],["check_factorized_correct_feedback","La respuesta está factorizada."],["check_rationalized","está racionalizada"],["check_rationalized_correct_feedback","La respuseta está racionalizada."],["check_no_common_factor","no tiene factores comunes"],["check_no_common_factor_correct_feedback","La respuesta no tiene factores comunes."],["check_minimal_radicands","tiene radicandos minimales"],["check_minimal_radicands_correct_feedback","La respuesta tiene los radicandos minimales."],["check_divisible","es divisible por"],["check_divisible_correct_feedback","La respuesta es divisible por ${value}."],["check_common_denominator","tiene denominador común"],["check_common_denominator_correct_feedback","La respuesta tiene denominador común."],["check_unit","tiene unidad equivalente a"],["check_unit_correct_feedback","La unidad de respuesta es ${unit}."],["check_unit_literal","tiene unidad literalmente igual a"],["check_unit_literal_correct_feedback","La unidad de respuesta es ${unit}."],["check_no_more_decimals","tiene menos decimales o exactamente"],["check_no_more_decimals_correct_feedback","La respuesta tiene ${digits} o menos decimales."],["check_no_more_digits","tiene menos dígitos o exactamente"],["check_no_more_digits_correct_feedback","La respuesta tiene ${digits} o menos dígitos."],["syntax_expression","General"],["syntax_expression_description","(fórmulas, expresiones, ecuaciones, matrices ...)"],["syntax_expression_correct_feedback","La sintaxis de la respuesta es correcta."],["syntax_quantity","Cantidad"],["syntax_quantity_description","(números, unidades de medida, fracciones, fracciones mixtas, razones...)"],["syntax_quantity_correct_feedback","La sintaxis de la respuesta es correcta."],["syntax_list","Lista"],["syntax_list_description","(listas sin coma separadora o paréntesis)"],["syntax_list_correct_feedback","La sintaxis de la respuesta es correcta."],["syntax_string","Texto"],["syntax_string_description","(palabras, frases, cadenas de caracteres)"],["syntax_string_correct_feedback","La sintaxis de la respuesta es correcta."],["none","ninguno"],["edit","Editar"],["accept","Aceptar"],["cancel","Cancelar"],["explog","exp/log"],["trigonometric","trigonométricas"],["hyperbolic","hiperbólicas"],["arithmetic","aritmética"],["all","todo"],["tolerance","Tolerancia"],["relative","relativa"],["relativetolerance","Tolerancia relativa"],["precision","Precisión"],["implicit_times_operator","Omitir producto"],["times_operator","Operador producto"],["imaginary_unit","Unidad imaginaria"],["mixedfractions","Fracciones mixtas"],["constants","Constantes"],["functions","Funciones"],["userfunctions","Funciones de usuario"],["units","Unidades"],["unitprefixes","Prefijos de unidades"],["syntaxparams","Opciones de sintaxis"],["syntaxparams_expression","Opciones para general"],["syntaxparams_quantity","Opciones para cantidad"],["syntaxparams_list","Opciones para lista"],["allowedinput","Entrada permitida"],["manual","Manual"],["correctanswer","Respuesta correcta"],["variables","Variables"],["validation","Validación"],["preview","Vista previa"],["correctanswertabhelp","Introduzca la respuesta correcta utilizando WIRIS editor. Seleccione también el comportamiento del editor de fórmulas cuando sea utilizado por el estudiante.\n"],["assertionstabhelp","Seleccione las propiedades que deben cumplir las respuestas de estudiante. Por ejemplo, si tiene que estar simplificado, factorizado, expresado utilizando unidades físicas o tener una precisión numérica específica."],["variablestabhelp","Escriba un algoritmo con WIRIS CAS para crear variables aleatorias: números, expresiones, gráficas o funciones de calificación.\nTambién puede especificar el formato de salida de las variables que se muestran a los estudiantes.\n"],["testtabhelp","Insertar una posible respuesta de estudiante para simular el comportamiento de la pregunta. Está usted utilizando la misma herramienta que el estudiante utilizará.\nObserve que también se pueden probar los criterios de evaluación, el éxito y la retroalimentación automática.\n"],["start","Inicio"],["test","Prueba"],["clicktesttoevaluate","Haga clic en botón de prueba para validar la respuesta actual."],["correct","¡correcto!"],["incorrect","¡incorrecto!"],["partiallycorrect","¡parcialmente correcto!"],["inputmethod","Método de entrada"],["compoundanswer","Respuesta compuesta"],["answerinputinlineeditor","WIRIS editor incrustado"],["answerinputpopupeditor","WIRIS editor en una ventana emergente"],["answerinputplaintext","Campo de entrada de texto llano"],["showauxiliarcas","Incluir WIRIS CAS"],["initialcascontent","Contenido inicial"],["tolerancedigits","Dígitos de tolerancia"],["validationandvariables","Validación y variables"],["algorithmlanguage","Idioma del algoritmo"],["calculatorlanguage","Idioma de la calculadora"],["hasalgorithm","Tiene algoritmo"],["comparison","Comparación"],["properties","Propiedades"],["studentanswer","Respuesta del estudiante"],["poweredbywiris","Powered by WIRIS"],["yourchangeswillbelost","Sus cambios se perderán si abandona la ventana."],["outputoptions","Opciones de salida"],["catalan","Català"],["english","English"],["spanish","Español"],["estonian","Eesti"],["basque","Euskara"],["french","Français"],["german","Deutsch"],["italian","Italiano"],["dutch","Nederlands"],["portuguese","Português (Portugal)"],["javaAppletMissing","Aviso! Este componente requiere <a href=\"http://www.java.com/es/\">instalar el plugin de Java</a> o quizás es suficiente <a href=\"http://www.java.com/es/download/help/enable_browser.xml\">activar el plugin de Java</a>."],["allanswerscorrect","Todas las respuestas deben ser correctas"],["distributegrade","Distribuir la nota"],["no","No"],["add","Añadir"],["replaceeditor","Sustituir editor"],["list","Lista"],["questionxml","Question XML"],["grammarurl","Grammar URL"],["reservedwords","Palabras reservadas"],["forcebrackets","Las listas siempre necesitan llaves \"{}\"."],["commaasitemseparator","Utiliza la coma \",\" como separador de elementos de listas."],["confirmimportdeprecated","Importar la pregunta?\nEsta pregunta tiene características obsoletas. El proceso de importación puede modificar el comportamiento de la pregunta. Revise cuidadosamente la pregunta antes de utilizarla."],["comparesets","Compara como conjuntos"],["nobracketslist","Listas sin llaves"],["warningtoleranceprecision","Precisión menor que la tolerancia."],["actionimport","Importar"],["actionexport","Exportar"],["usecase","Coincidir mayúsculas y minúsculas"],["usespaces","Coincidir espacios"],["notevaluate","Mantener los argumentos sin evaluar"],["separators","Separadores"],["comma","Coma"],["commarole","Rol del caracter coma ','"],["point","Punto"],["pointrole","Rol del caracter punto '.'"],["space","Espacio"],["spacerole","Rol del caracter espacio"],["decimalmark","Decimales"],["digitsgroup","Miles"],["listitems","Elementos de lista"],["nothing","Ninguno"],["intervals","Intervalos"],["warningprecision15","La precisión debe estar entre 1 y 15."],["decimalSeparator","Decimales"],["thousandsSeparator","Miles"],["notation","Notación"],["invisible","Invisible"],["auto","Auto"],["fixedDecimal","Fija"],["floatingDecimal","Decimal"],["scientific","Científica"],["example","Ejemplo"],["warningreltolfixedprec","Tolerancia relativa con notación de coma fija."],["warningabstolfloatprec","Tolerancia absoluta con notación de coma flotante."],["answerinputinlinehand","WIRIS hand incrustado"],["absolutetolerance","Tolerancia absoluta"],["clicktoeditalgorithm","Su navegador no <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">soporta applets Java</a>. Clica el botón para descargar y ejecutar la aplicación WIRIS cas para editar el algoritmo de la pregunta."],["launchwiriscas","Lanzar WIRIS cas"],["sendinginitialsession","Enviando algoritmo inicial."],["waitingforupdates","Esperando actualizaciones."],["sessionclosed","Comunicación cerrada."],["gotsession","Revisión ${n} recibida."],["thecorrectansweris","La respuesta correcta es"],["poweredby","Creado por"],["refresh","Renovar la respuesta correcta"],["fillwithcorrect","Rellenar con la respuesta correcta"],["lang","ca"],["comparisonwithstudentanswer","Comparació amb la resposta de l'estudiant"],["otheracceptedanswers","Altres respostes acceptades"],["equivalent_literal","Literalment igual"],["equivalent_literal_correct_feedback","La resposta és literalment igual a la correcta."],["equivalent_symbolic","Matemàticament igual"],["equivalent_symbolic_correct_feedback","La resposta és matemàticament igual a la correcta."],["equivalent_set","Igual com a conjunts"],["equivalent_set_correct_feedback","El conjunt de respostes és igual al correcte."],["equivalent_equations","Equacions equivalents"],["equivalent_equations_correct_feedback","La resposta té les solucions requerides."],["equivalent_function","Funció de qualificació"],["equivalent_function_correct_feedback","La resposta és correcta."],["equivalent_all","Qualsevol resposta"],["any","qualsevol"],["gradingfunction","Funció de qualificació"],["additionalproperties","Propietats addicionals"],["structure","Estructura"],["none","cap"],["None","Cap"],["check_integer_form","té forma de nombre enter"],["check_integer_form_correct_feedback","La resposta és un nombre enter."],["check_fraction_form","té forma de fracció"],["check_fraction_form_correct_feedback","La resposta és una fracció."],["check_polynomial_form","té forma de polinomi"],["check_polynomial_form_correct_feedback","La resposta és un polinomi."],["check_rational_function_form","té forma de funció racional"],["check_rational_function_form_correct_feedback","La resposta és una funció racional."],["check_elemental_function_form","és una combinació de funcions elementals"],["check_elemental_function_form_correct_feedback","La resposta és una expressió elemental."],["check_scientific_notation","està expressada en notació científica"],["check_scientific_notation_correct_feedback","La resposta està expressada en notació científica."],["more","Més"],["check_simplified","està simplificada"],["check_simplified_correct_feedback","La resposta està simplificada."],["check_expanded","està expandida"],["check_expanded_correct_feedback","La resposta està expandida."],["check_factorized","està factoritzada"],["check_factorized_correct_feedback","La resposta està factoritzada."],["check_rationalized","està racionalitzada"],["check_rationalized_correct_feedback","La resposta está racionalitzada."],["check_no_common_factor","no té factors comuns"],["check_no_common_factor_correct_feedback","La resposta no té factors comuns."],["check_minimal_radicands","té radicands minimals"],["check_minimal_radicands_correct_feedback","La resposta té els radicands minimals."],["check_divisible","és divisible per"],["check_divisible_correct_feedback","La resposta és divisible per ${value}."],["check_common_denominator","té denominador comú"],["check_common_denominator_correct_feedback","La resposta té denominador comú."],["check_unit","té unitat equivalent a"],["check_unit_correct_feedback","La unitat de resposta és ${unit}."],["check_unit_literal","té unitat literalment igual a"],["check_unit_literal_correct_feedback","La unitat de resposta és ${unit}."],["check_no_more_decimals","té menys decimals o exactament"],["check_no_more_decimals_correct_feedback","La resposta té ${digits} o menys decimals."],["check_no_more_digits","té menys dígits o exactament"],["check_no_more_digits_correct_feedback","La resposta té ${digits} o menys dígits."],["syntax_expression","General"],["syntax_expression_description","(fórmules, expressions, equacions, matrius ...)"],["syntax_expression_correct_feedback","La sintaxi de la resposta és correcta."],["syntax_quantity","Quantitat"],["syntax_quantity_description","(nombres, unitats de mesura, fraccions, fraccions mixtes, raons...)"],["syntax_quantity_correct_feedback","La sintaxi de la resposta és correcta."],["syntax_list","Llista"],["syntax_list_description","(llistes sense coma separadora o parèntesis)"],["syntax_list_correct_feedback","La sintaxi de la resposta és correcta."],["syntax_string","Text"],["syntax_string_description","(paraules, frases, cadenas de caràcters)"],["syntax_string_correct_feedback","La sintaxi de la resposta és correcta."],["none","cap"],["edit","Editar"],["accept","Acceptar"],["cancel","Cancel·lar"],["explog","exp/log"],["trigonometric","trigonomètriques"],["hyperbolic","hiperbòliques"],["arithmetic","aritmètica"],["all","tot"],["tolerance","Tolerància"],["relative","relativa"],["relativetolerance","Tolerància relativa"],["precision","Precisió"],["implicit_times_operator","Ometre producte"],["times_operator","Operador producte"],["imaginary_unit","Unitat imaginària"],["mixedfractions","Fraccions mixtes"],["constants","Constants"],["functions","Funcions"],["userfunctions","Funcions d'usuari"],["units","Unitats"],["unitprefixes","Prefixos d'unitats"],["syntaxparams","Opcions de sintaxi"],["syntaxparams_expression","Opcions per a general"],["syntaxparams_quantity","Opcions per a quantitat"],["syntaxparams_list","Opcions per a llista"],["allowedinput","Entrada permesa"],["manual","Manual"],["correctanswer","Resposta correcta"],["variables","Variables"],["validation","Validació"],["preview","Vista prèvia"],["correctanswertabhelp","Introduïu la resposta correcta utilitzant WIRIS editor. Seleccioneu també el comportament de l'editor de fórmules quan sigui utilitzat per l'estudiant.\n"],["assertionstabhelp","Seleccioneu les propietats que han de complir les respostes d'estudiant. Per exemple, si ha d'estar simplificat, factoritzat, expressat utilitzant unitats físiques o tenir una precisió numèrica específica."],["variablestabhelp","Escriviu un algorisme amb WIRIS CAS per crear variables aleatòries: números, expressions, gràfiques o funcions de qualificació.\nTambé podeu especificar el format de sortida de les variables que es mostren als estudiants.\n"],["testtabhelp","Inserir una possible resposta d'estudiant per simular el comportament de la pregunta. Està utilitzant la mateixa eina que l'estudiant utilitzarà per entrar la resposta.\nObserve que también se pueden probar los criterios de evaluación, el éxito y la retroalimentación automática.\n"],["start","Inici"],["test","Prova"],["clicktesttoevaluate","Feu clic a botó de prova per validar la resposta actual."],["correct","Correcte!"],["incorrect","Incorrecte!"],["partiallycorrect","Parcialment correcte!"],["inputmethod","Mètode d'entrada"],["compoundanswer","Resposta composta"],["answerinputinlineeditor","WIRIS editor incrustat"],["answerinputpopupeditor","WIRIS editor en una finestra emergent"],["answerinputplaintext","Camp d'entrada de text pla"],["showauxiliarcas","Incloure WIRIS CAS"],["initialcascontent","Contingut inicial"],["tolerancedigits","Dígits de tolerància"],["validationandvariables","Validació i variables"],["algorithmlanguage","Idioma de l'algorisme"],["calculatorlanguage","Idioma de la calculadora"],["hasalgorithm","Té algorisme"],["comparison","Comparació"],["properties","Propietats"],["studentanswer","Resposta de l'estudiant"],["poweredbywiris","Powered by WIRIS"],["yourchangeswillbelost","Els seus canvis es perdran si abandona la finestra."],["outputoptions","Opcions de sortida"],["catalan","Català"],["english","English"],["spanish","Español"],["estonian","Eesti"],["basque","Euskara"],["french","Français"],["german","Deutsch"],["italian","Italiano"],["dutch","Nederlands"],["portuguese","Português (Portugal)"],["javaAppletMissing","Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>."],["allanswerscorrect","Totes les respostes han de ser correctes"],["distributegrade","Distribueix la nota"],["no","No"],["add","Afegir"],["replaceeditor","Substitueix l'editor"],["list","Llista"],["questionxml","Question XML"],["grammarurl","Grammar URL"],["reservedwords","Paraules reservades"],["forcebrackets","Les llistes sempre necessiten claus \"{}\"."],["commaasitemseparator","Utilitza la coma \",\" com a separador d'elements de llistes."],["confirmimportdeprecated","Importar la pregunta?\nAquesta pregunta conté característiques obsoletes. El procés d'importació pot canviar lleugerament el comportament de la pregunta. És altament recomanat comprovar cuidadosament la pregunta després de la importació."],["comparesets","Compara com a conjunts"],["nobracketslist","Llistes sense claus"],["warningtoleranceprecision","Hi ha menys dígits de precisió que dígits de tolerància."],["actionimport","Importar"],["actionexport","Exportar"],["usecase","Coincideix majúscules i minúscules"],["usespaces","Coincideix espais"],["notevaluate","Mantén els arguments sense avaluar"],["separators","Separadors"],["comma","Coma"],["commarole","Rol del caràcter coma ','"],["point","Punt"],["pointrole","Rol del caràcter punt '.'"],["space","Espai"],["spacerole","Rol del caràcter espai"],["decimalmark","Decimals"],["digitsgroup","Milers"],["listitems","Elements de llista"],["nothing","Cap"],["intervals","Intervals"],["warningprecision15","La precisió ha de ser entre 1 i 15."],["decimalSeparator","Decimals"],["thousandsSeparator","Milers"],["notation","Notació"],["invisible","Invisible"],["auto","Auto"],["fixedDecimal","Fixa"],["floatingDecimal","Decimal"],["scientific","Científica"],["example","Exemple"],["warningreltolfixedprec","Tolerància relativa amb notació de coma fixa."],["warningabstolfloatprec","Tolerància absoluta amb notació de coma flotant."],["answerinputinlinehand","WIRIS hand incrustat"],["absolutetolerance","Tolerància absoluta"],["clicktoeditalgorithm","El seu navegador no <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">suporta applets Java</a>. Clica el botó per a descarregar i executar l'aplicació WIRIS cas per a editar l'algorisme de la pregunta."],["launchwiriscas","Llançar WIRIS cas"],["sendinginitialsession","Enviant algorisme inicial."],["waitingforupdates","Esperant actualitzacions."],["sessionclosed","Comunicació tancada."],["gotsession","Revisió ${n} rebuda."],["thecorrectansweris","La resposta correcta és"],["poweredby","Creat per"],["refresh","Renova la resposta correcta"],["fillwithcorrect","Omple amb la resposta correcta"],["lang","it"],["comparisonwithstudentanswer","Confronto con la risposta dello studente"],["otheracceptedanswers","Altre risposte accettate"],["equivalent_literal","Letteralmente uguale"],["equivalent_literal_correct_feedback","La risposta è letteralmente uguale a quella corretta."],["equivalent_symbolic","Matematicamente uguale"],["equivalent_symbolic_correct_feedback","La risposta è matematicamente uguale a quella corretta."],["equivalent_set","Uguale come serie"],["equivalent_set_correct_feedback","La risposta è una serie uguale a quella corretta."],["equivalent_equations","Equazioni equivalenti"],["equivalent_equations_correct_feedback","La risposta ha le stesse soluzioni di quella corretta."],["equivalent_function","Funzione di classificazione"],["equivalent_function_correct_feedback","La risposta è corretta."],["equivalent_all","Qualsiasi risposta"],["any","qualsiasi"],["gradingfunction","Funzione di classificazione"],["additionalproperties","Proprietà aggiuntive"],["structure","Struttura"],["none","nessuno"],["None","Nessuno"],["check_integer_form","corrisponde a un numero intero"],["check_integer_form_correct_feedback","La risposta è un numero intero."],["check_fraction_form","corrisponde a una frazione"],["check_fraction_form_correct_feedback","La risposta è una frazione."],["check_polynomial_form","corrisponde a un polinomio"],["check_polynomial_form_correct_feedback","La risposta è un polinomio."],["check_rational_function_form","corrisponde a una funzione razionale"],["check_rational_function_form_correct_feedback","La risposta è una funzione razionale."],["check_elemental_function_form","è una combinazione di funzioni elementari"],["check_elemental_function_form_correct_feedback","La risposta è un'espressione elementare."],["check_scientific_notation","è espressa in notazione scientifica"],["check_scientific_notation_correct_feedback","La risposta è espressa in notazione scientifica."],["more","Altro"],["check_simplified","è semplificata"],["check_simplified_correct_feedback","La risposta è semplificata."],["check_expanded","è espansa"],["check_expanded_correct_feedback","La risposta è espansa."],["check_factorized","è scomposta in fattori"],["check_factorized_correct_feedback","La risposta è scomposta in fattori."],["check_rationalized","è razionalizzata"],["check_rationalized_correct_feedback","La risposta è razionalizzata."],["check_no_common_factor","non ha fattori comuni"],["check_no_common_factor_correct_feedback","La risposta non ha fattori comuni."],["check_minimal_radicands","ha radicandi minimi"],["check_minimal_radicands_correct_feedback","La risposta contiene radicandi minimi."],["check_divisible","è divisibile per"],["check_divisible_correct_feedback","La risposta è divisibile per ${value}."],["check_common_denominator","ha un solo denominatore comune"],["check_common_denominator_correct_feedback","La risposta ha un solo denominatore comune."],["check_unit","ha un'unità equivalente a"],["check_unit_correct_feedback","La risposta è l'unità ${unit}."],["check_unit_literal","ha un'unità letteralmente uguale a"],["check_unit_literal_correct_feedback","La risposta è l'unità ${unit}."],["check_no_more_decimals","ha un numero inferiore o uguale di decimali rispetto a"],["check_no_more_decimals_correct_feedback","La risposta ha ${digits} o meno decimali."],["check_no_more_digits","ha un numero inferiore o uguale di cifre rispetto a"],["check_no_more_digits_correct_feedback","La risposta ha ${digits} o meno cifre."],["syntax_expression","Generale"],["syntax_expression_description","(formule, espressioni, equazioni, matrici etc.)"],["syntax_expression_correct_feedback","La sintassi della risposta è corretta."],["syntax_quantity","Quantità"],["syntax_quantity_description","(numeri, unità di misura, frazioni, frazioni miste, proporzioni etc.)"],["syntax_quantity_correct_feedback","La sintassi della risposta è corretta."],["syntax_list","Elenco"],["syntax_list_description","(elenchi senza virgola di separazione o parentesi)"],["syntax_list_correct_feedback","La sintassi della risposta è corretta."],["syntax_string","Testo"],["syntax_string_description","(parole, frasi, stringhe di caratteri)"],["syntax_string_correct_feedback","La sintassi della risposta è corretta."],["none","nessuno"],["edit","Modifica"],["accept","Accetta"],["cancel","Annulla"],["explog","esponenziale/logaritmica"],["trigonometric","trigonometrica"],["hyperbolic","iperbolica"],["arithmetic","aritmetica"],["all","tutto"],["tolerance","Tolleranza"],["relative","relativa"],["relativetolerance","Tolleranza relativa"],["precision","Precisione"],["implicit_times_operator","Operatore prodotto non visibile"],["times_operator","Operatore prodotto"],["imaginary_unit","Unità immaginaria"],["mixedfractions","Frazioni miste"],["constants","Costanti"],["functions","Funzioni"],["userfunctions","Funzioni utente"],["units","Unità"],["unitprefixes","Prefissi unità"],["syntaxparams","Opzioni di sintassi"],["syntaxparams_expression","Opzioni per elementi generali"],["syntaxparams_quantity","Opzioni per la quantità"],["syntaxparams_list","Opzioni per elenchi"],["allowedinput","Input consentito"],["manual","Manuale"],["correctanswer","Risposta corretta"],["variables","Variabili"],["validation","Verifica"],["preview","Anteprima"],["correctanswertabhelp","Inserisci la risposta corretta utilizzando l'editor WIRIS. Seleziona anche un comportamento per l'editor di formule se utilizzato dallo studente.\nNon potrai archiviare la risposta se non si tratta di un'espressione valida.\n"],["assertionstabhelp","Seleziona quali proprietà deve verificare la risposta dello studente. Ad esempio, se la risposta deve essere semplificata, scomposta in fattori o espressa in unità fisiche o se ha una precisione numerica specifica."],["variablestabhelp","Scrivi un algoritmo con WIRIS cas per creare variabili casuali: numeri, espressioni, diagrammi o funzioni di classificazione.\nPuoi anche specificare il formato delle variabili mostrate allo studente.\n"],["testtabhelp","Inserisci la risposta di un possibile studente per simulare il comportamento della domanda. Per questa operazione, utilizzi lo stesso strumento che utilizzerà lo studente.\nNota: puoi anche testare i criteri di valutazione, di risposta corretta e il feedback automatico.\n"],["start","Inizio"],["test","Test"],["clicktesttoevaluate","Fai clic sul pulsante Test per verificare la risposta attuale."],["correct","Risposta corretta."],["incorrect","Risposta sbagliata."],["partiallycorrect","Risposta corretta in parte."],["inputmethod","Metodo di input"],["compoundanswer","Risposta composta"],["answerinputinlineeditor","WIRIS editor integrato"],["answerinputpopupeditor","WIRIS editor nella finestra a comparsa"],["answerinputplaintext","Campo di input testo semplice"],["showauxiliarcas","Includi WIRIS cas"],["initialcascontent","Contenuto iniziale"],["tolerancedigits","Cifre di tolleranza"],["validationandvariables","Verifica e variabili"],["algorithmlanguage","Lingua algoritmo"],["calculatorlanguage","Lingua calcolatrice"],["hasalgorithm","Ha l'algoritmo"],["comparison","Confronto"],["properties","Proprietà"],["studentanswer","Risposta dello studente"],["poweredbywiris","Realizzato con WIRIS"],["yourchangeswillbelost","Se chiudi la finestra, le modifiche andranno perse."],["outputoptions","Opzioni risultato"],["catalan","Català"],["english","English"],["spanish","Español"],["estonian","Eesti"],["basque","Euskara"],["french","Français"],["german","Deutsch"],["italian","Italiano"],["dutch","Nederlands"],["portuguese","Português (Portugal)"],["javaAppletMissing","Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>."],["allanswerscorrect","Tutte le risposte devono essere corrette"],["distributegrade","Fornisci voto"],["no","No"],["add","Aggiungi"],["replaceeditor","Sostituisci editor"],["list","Elenco"],["questionxml","XML domanda"],["grammarurl","URL grammatica"],["reservedwords","Parole riservate"],["forcebrackets","Gli elenchi devono sempre contenere le parentesi graffe \"{}\"."],["commaasitemseparator","Utilizza la virgola \",\" per separare gli elementi di un elenco."],["confirmimportdeprecated","Vuoi importare la domanda?\n La domanda che vuoi aprire contiene funzionalità obsolete. Il processo di importazione potrebbe modificare leggermente il comportamento della domanda. Ti consigliamo di controllare attentamente la domanda dopo l'importazione."],["comparesets","Confronta come serie"],["nobracketslist","Elenchi senza parentesi"],["warningtoleranceprecision","Le cifre di precisione sono inferiori a quelle di tolleranza."],["actionimport","Importazione"],["actionexport","Esportazione"],["usecase","Rispetta maiuscole/minuscole"],["usespaces","Rispetta spazi"],["notevaluate","Mantieni argomenti non valutati"],["separators","Separatori"],["comma","Virgola"],["commarole","Ruolo della virgola “,”"],["point","Punto"],["pointrole","Ruolo del punto “.”"],["space","Spazio"],["spacerole","Ruolo dello spazio"],["decimalmark","Cifre decimali"],["digitsgroup","Gruppi di cifre"],["listitems","Elenca elementi"],["nothing","Niente"],["intervals","Intervalli"],["warningprecision15","La precisione deve essere compresa tra 1 e 15."],["decimalSeparator","Decimale"],["thousandsSeparator","Migliaia"],["notation","Notazione"],["invisible","Invisibile"],["auto","Automatico"],["fixedDecimal","Fisso"],["floatingDecimal","Decimale"],["scientific","Scientifica"],["example","Esempio"],["warningreltolfixedprec","Tolleranza relativa con notazione decimale fissa."],["warningabstolfloatprec","Tolleranza assoluta con notazione decimale fluttuante."],["answerinputinlinehand","Applicazione WIRIS hand incorporata"],["absolutetolerance","Tolleranza assoluta"],["clicktoeditalgorithm","Il tuo browser non <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">supporta Java</a>. Fai clic sul pulsante per scaricare ed eseguire l’applicazione WIRIS cas che consente di modificare l’algoritmo della domanda."],["launchwiriscas","Avvia WIRIS cas"],["sendinginitialsession","Invio della sessione iniziale..."],["waitingforupdates","In attesa degli aggiornamenti..."],["sessionclosed","Comunicazione chiusa."],["gotsession","Ricevuta revisione ${n}."],["thecorrectansweris","La risposta corretta è"],["poweredby","Offerto da"],["refresh","Rinnova la risposta corretta"],["fillwithcorrect","Inserisci la risposta corretta"],["lang","fr"],["comparisonwithstudentanswer","Comparaison avec la réponse de l'étudiant"],["otheracceptedanswers","Autres réponses acceptées"],["equivalent_literal","Strictement égal"],["equivalent_literal_correct_feedback","La réponse est strictement égale à la bonne réponse."],["equivalent_symbolic","Mathématiquement égal"],["equivalent_symbolic_correct_feedback","La réponse est mathématiquement égale à la bonne réponse."],["equivalent_set","Égal en tant qu'ensembles"],["equivalent_set_correct_feedback","L'ensemble de réponses est égal à la bonne réponse."],["equivalent_equations","Équations équivalentes"],["equivalent_equations_correct_feedback","La réponse partage les mêmes solutions que la bonne réponse."],["equivalent_function","Fonction de gradation"],["equivalent_function_correct_feedback","C'est la bonne réponse."],["equivalent_all","N'importe quelle réponse"],["any","quelconque"],["gradingfunction","Fonction de gradation"],["additionalproperties","Propriétés supplémentaires"],["structure","Structure"],["none","aucune"],["None","Aucune"],["check_integer_form","a la forme d'un entier."],["check_integer_form_correct_feedback","La réponse est un nombre entier."],["check_fraction_form","a la forme d'une fraction"],["check_fraction_form_correct_feedback","La réponse est une fraction."],["check_polynomial_form","a la forme d'un polynôme"],["check_polynomial_form_correct_feedback","La réponse est un polynôme."],["check_rational_function_form","a la forme d'une fonction rationnelle"],["check_rational_function_form_correct_feedback","La réponse est une fonction rationnelle."],["check_elemental_function_form","est une combinaison de fonctions élémentaires"],["check_elemental_function_form_correct_feedback","La réponse est une expression élémentaire."],["check_scientific_notation","est exprimé en notation scientifique"],["check_scientific_notation_correct_feedback","La réponse est exprimée en notation scientifique."],["more","Plus"],["check_simplified","est simplifié"],["check_simplified_correct_feedback","La réponse est simplifiée."],["check_expanded","est développé"],["check_expanded_correct_feedback","La réponse est développée."],["check_factorized","est factorisé"],["check_factorized_correct_feedback","La réponse est factorisée."],["check_rationalized"," : rationalisé"],["check_rationalized_correct_feedback","La réponse est rationalisée."],["check_no_common_factor","n'a pas de facteurs communs"],["check_no_common_factor_correct_feedback","La réponse n'a pas de facteurs communs."],["check_minimal_radicands","a des radicandes minimaux"],["check_minimal_radicands_correct_feedback","La réponse a des radicandes minimaux."],["check_divisible","est divisible par"],["check_divisible_correct_feedback","La réponse est divisible par ${value}."],["check_common_denominator","a un seul dénominateur commun"],["check_common_denominator_correct_feedback","La réponse inclut un seul dénominateur commun."],["check_unit","inclut une unité équivalente à"],["check_unit_correct_feedback","La bonne unité est ${unit}."],["check_unit_literal","a une unité strictement égale à"],["check_unit_literal_correct_feedback","La bonne unité est ${unit}."],["check_no_more_decimals","a le même nombre ou moins de décimales que"],["check_no_more_decimals_correct_feedback","La réponse inclut au plus ${digits} décimales."],["check_no_more_digits","a le même nombre ou moins de chiffres que"],["check_no_more_digits_correct_feedback","La réponse inclut au plus ${digits} chiffres."],["syntax_expression","Général"],["syntax_expression_description","(formules, expressions, équations, matrices…)"],["syntax_expression_correct_feedback","La syntaxe de la réponse est correcte."],["syntax_quantity","Quantité"],["syntax_quantity_description","(nombres, unités de mesure, fractions, fractions mixtes, proportions…)"],["syntax_quantity_correct_feedback","La syntaxe de la réponse est correcte."],["syntax_list","Liste"],["syntax_list_description","(listes sans virgule ou crochets de séparation)"],["syntax_list_correct_feedback","La syntaxe de la réponse est correcte."],["syntax_string","Texte"],["syntax_string_description","(mots, phrases, suites de caractères)"],["syntax_string_correct_feedback","La syntaxe de la réponse est correcte."],["none","aucune"],["edit","Modifier"],["accept","Accepter"],["cancel","Annuler"],["explog","exp/log"],["trigonometric","trigonométrique"],["hyperbolic","hyperbolique"],["arithmetic","arithmétique"],["all","toutes"],["tolerance","Tolérance"],["relative","relative"],["relativetolerance","Tolérance relative"],["precision","Précision"],["implicit_times_operator","Opérateur de multiplication invisible"],["times_operator","Opérateur de multiplication"],["imaginary_unit","Unité imaginaire"],["mixedfractions","Fractions mixtes"],["constants","Constantes"],["functions","Fonctions"],["userfunctions","Fonctions personnalisées"],["units","Unités"],["unitprefixes","Préfixes d'unité"],["syntaxparams","Options de syntaxe"],["syntaxparams_expression","Options générales"],["syntaxparams_quantity","Options de quantité"],["syntaxparams_list","Options de liste"],["allowedinput","Entrée autorisée"],["manual","Manuel"],["correctanswer","Bonne réponse"],["variables","Variables"],["validation","Validation"],["preview","Aperçu"],["correctanswertabhelp","Insérer la bonne réponse à l'aide du WIRIS Editor. Sélectionner aussi le comportement de l'éditeur de formule lorsque l'étudiant y fait appel.\n"],["assertionstabhelp","Sélectionner les propriétés que la réponse de l'étudiant doit satisfaire. Par exemple, si elle doit être simplifiée, factorisée, exprimée dans une unité physique ou présenter une précision chiffrée spécifique."],["variablestabhelp","Écrire un algorithme à l'aide de WIRIS CAS pour créer des variables aléatoires : des nombres, des expressions, des courbes ou une fonction de gradation. \nVous pouvez aussi spécifier un format des variables pour l'affichage à l'étudiant.\n"],["testtabhelp","Insérer une réponse possible de l'étudiant afin de simuler le comportement de la question. Vous utilisez le même outil que l'étudiant. \nNotez que vous pouvez aussi tester le critère d'évaluation, de réussite et les commentaires automatiques.\n"],["start","Démarrer"],["test","Tester"],["clicktesttoevaluate","Cliquer sur le bouton Test pour valider la réponse actuelle."],["correct","Correct !"],["incorrect","Incorrect !"],["partiallycorrect","Partiellement correct !"],["inputmethod","Méthode de saisie"],["compoundanswer","Réponse composée"],["answerinputinlineeditor","WIRIS Editor intégré"],["answerinputpopupeditor","WIRIS Editor dans une fenêtre"],["answerinputplaintext","Champ de saisie de texte brut"],["showauxiliarcas","Inclure WIRIS CAS"],["initialcascontent","Contenu initial"],["tolerancedigits","Tolérance en chiffres"],["validationandvariables","Validation et variables"],["algorithmlanguage","Langage d'algorithme"],["calculatorlanguage","Langage de calcul"],["hasalgorithm","Possède un algorithme"],["comparison","Comparaison"],["properties","Propriétés"],["studentanswer","Réponse de l'étudiant"],["poweredbywiris","Développé par WIRIS"],["yourchangeswillbelost","Vous perdrez vos modifications si vous fermez la fenêtre."],["outputoptions","Options de sortie"],["catalan","Català"],["english","English"],["spanish","Español"],["estonian","Eesti"],["basque","Euskara"],["french","Français"],["german","Deutsch"],["italian","Italiano"],["dutch","Nederlands"],["portuguese","Português (Portugal)"],["javaAppletMissing","Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>."],["allanswerscorrect","Toutes les réponses doivent être correctes"],["distributegrade","Degré de distribution"],["no","Non"],["add","Ajouter"],["replaceeditor","Remplacer l'éditeur"],["list","Liste"],["questionxml","Question XML"],["grammarurl","URL de la grammaire"],["reservedwords","Mots réservés"],["forcebrackets","Les listes requièrent l'utilisation d'accolades « {} »."],["commaasitemseparator","Utiliser une virgule « , » comme séparateur d'éléments de liste."],["confirmimportdeprecated","Importer la question ? \nLa question que vous êtes sur le point d'ouvrir contient des fonctionnalités obsolètes. Il se peut que la procédure d'importation modifie légèrement le comportement de la question. Il est fortement recommandé de tester attentivement la question après l'importation."],["comparesets","Comparer en tant qu'ensembles"],["nobracketslist","Listes sans crochets"],["warningtoleranceprecision","Moins de chiffres pour la précision que pour la tolérance."],["actionimport","Importer"],["actionexport","Exporter"],["usecase","Respecter la casse"],["usespaces","Respecter les espaces"],["notevaluate","Conserver les arguments non évalués"],["separators","Séparateurs"],["comma","Virgule"],["commarole","Rôle du signe virgule « , »"],["point","Point"],["pointrole","Rôle du signe point « . »"],["space","Espace"],["spacerole","Rôle du signe espace"],["decimalmark","Chiffres après la virgule"],["digitsgroup","Groupes de chiffres"],["listitems","Éléments de liste"],["nothing","Rien"],["intervals","Intervalles"],["warningprecision15","La précision doit être entre 1 et 15."],["decimalSeparator","Virgule"],["thousandsSeparator","Milliers"],["notation","Notation"],["invisible","Invisible"],["auto","Auto."],["fixedDecimal","Fixe"],["floatingDecimal","Décimale"],["scientific","Scientifique"],["example","Exemple"],["warningreltolfixedprec","Tolérance relative avec la notation en mode virgule fixe."],["warningabstolfloatprec","Tolérance absolue avec la notation en mode virgule flottante."],["answerinputinlinehand","WIRIS écriture manuscrite intégrée"],["absolutetolerance","Tolérance absolue"],["clicktoeditalgorithm","Votre navigateur ne prend <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">pas en charge Java</a>. Cliquez sur le bouton pour télécharger et exécuter l’application WIRIS CAS et modifier l’algorithme de votre question."],["launchwiriscas","Lancer WIRIS CAS"],["sendinginitialsession","Envoi de la session de départ…"],["waitingforupdates","Attente des actualisations…"],["sessionclosed","Transmission fermée."],["gotsession","Révision reçue ${n}."],["thecorrectansweris","La bonne réponse est"],["poweredby","Basé sur"],["refresh","Confirmer la réponse correcte"],["fillwithcorrect","Remplir avec la réponse correcte"],["lang","de"],["comparisonwithstudentanswer","Vergleich mit Schülerantwort"],["otheracceptedanswers","Weitere akzeptierte Antworten"],["equivalent_literal","Im Wortsinn äquivalent"],["equivalent_literal_correct_feedback","Die Antwort ist im Wortsinn äquivalent zur richtigen."],["equivalent_symbolic","Mathematisch äquivalent"],["equivalent_symbolic_correct_feedback","Die Antwort ist mathematisch äquivalent zur richtigen Antwort."],["equivalent_set","Äquivalent als Sätze"],["equivalent_set_correct_feedback","Der Fragensatz ist äquivalent zum richtigen."],["equivalent_equations","Äquivalente Gleichungen"],["equivalent_equations_correct_feedback","Die Antwort hat die gleichen Lösungen wie die richtige."],["equivalent_function","Benotungsfunktion"],["equivalent_function_correct_feedback","Die Antwort ist richtig."],["equivalent_all","Jede Antwort"],["any","Irgendeine"],["gradingfunction","Benotungsfunktion"],["additionalproperties","Zusätzliche Eigenschaften"],["structure","Struktur"],["none","Keine"],["None","Keine"],["check_integer_form","hat Form einer ganzen Zahl"],["check_integer_form_correct_feedback","Die Antwort ist eine ganze Zahl."],["check_fraction_form","hat Form einer Bruchzahl"],["check_fraction_form_correct_feedback","Die Antwort ist eine Bruchzahl."],["check_polynomial_form","hat Form eines Polynoms"],["check_polynomial_form_correct_feedback","Die Antwort ist ein Polynom."],["check_rational_function_form","hat Form einer rationalen Funktion"],["check_rational_function_form_correct_feedback","Die Antwort ist eine rationale Funktion."],["check_elemental_function_form","ist eine Kombination aus elementaren Funktionen"],["check_elemental_function_form_correct_feedback","Die Antwort ist ein elementarer Ausdruck."],["check_scientific_notation","ist in wissenschaftlicher Schreibweise ausgedrückt"],["check_scientific_notation_correct_feedback","Die Antwort ist in wissenschaftlicher Schreibweise ausgedrückt."],["more","Mehr"],["check_simplified","ist vereinfacht"],["check_simplified_correct_feedback","Die Antwort ist vereinfacht."],["check_expanded","ist erweitert"],["check_expanded_correct_feedback","Die Antwort ist erweitert."],["check_factorized","ist faktorisiert"],["check_factorized_correct_feedback","Die Antwort ist faktorisiert."],["check_rationalized","ist rationalisiert"],["check_rationalized_correct_feedback","Die Antwort ist rationalisiert."],["check_no_common_factor","hat keine gemeinsamen Faktoren"],["check_no_common_factor_correct_feedback","Die Antwort hat keine gemeinsamen Faktoren."],["check_minimal_radicands","weist minimale Radikanden auf"],["check_minimal_radicands_correct_feedback","Die Antwort weist minimale Radikanden auf."],["check_divisible","ist teilbar durch"],["check_divisible_correct_feedback","Die Antwort ist teilbar durch ${value}."],["check_common_denominator","hat einen einzigen gemeinsamen Nenner"],["check_common_denominator_correct_feedback","Die Antwort hat einen einzigen gemeinsamen Nenner."],["check_unit","hat äquivalente Einheit zu"],["check_unit_correct_feedback","Die Einheit der Antwort ist ${unit}."],["check_unit_literal","hat Einheit im Wortsinn äquivalent zu"],["check_unit_literal_correct_feedback","Die Einheit der Antwort ist ${unit}."],["check_no_more_decimals","hat weniger als oder gleich viele Dezimalstellen wie"],["check_no_more_decimals_correct_feedback","Die Antwort hat ${digits} oder weniger Dezimalstellen."],["check_no_more_digits","hat weniger oder gleich viele Stellen wie"],["check_no_more_digits_correct_feedback","Die Antwort hat ${digits} oder weniger Stellen."],["syntax_expression","Allgemein"],["syntax_expression_description","(Formeln, Ausdrücke, Gleichungen, Matrizen ...)"],["syntax_expression_correct_feedback","Die Syntax der Antwort ist richtig."],["syntax_quantity","Menge"],["syntax_quantity_description","(Zahlen, Maßeinheiten, Brüche, gemischte Brüche, Verhältnisse ...)"],["syntax_quantity_correct_feedback","Die Syntax der Antwort ist richtig."],["syntax_list","Liste"],["syntax_list_description","(Listen ohne Komma als Trennzeichen oder Klammern)"],["syntax_list_correct_feedback","Die Syntax der Antwort ist richtig."],["syntax_string","Text"],["syntax_string_description","(Wörter, Sätze, Zeichenketten)"],["syntax_string_correct_feedback","Die Syntax der Antwort ist richtig."],["none","Keine"],["edit","Bearbeiten"],["accept","Akzeptieren"],["cancel","Abbrechen"],["explog","exp/log"],["trigonometric","Trigonometrische"],["hyperbolic","Hyperbolische"],["arithmetic","Arithmetische"],["all","Alle"],["tolerance","Toleranz"],["relative","Relative"],["relativetolerance","Relative Toleranz"],["precision","Genauigkeit"],["implicit_times_operator","Unsichtbares Multiplikationszeichen"],["times_operator","Multiplikationszeichen"],["imaginary_unit","Imaginäre Einheit"],["mixedfractions","Gemischte Brüche"],["constants","Konstanten"],["functions","Funktionen"],["userfunctions","Nutzerfunktionen"],["units","Einheiten"],["unitprefixes","Einheitenpräfixe"],["syntaxparams","Syntaxoptionen"],["syntaxparams_expression","Optionen für Allgemein"],["syntaxparams_quantity","Optionen für Menge"],["syntaxparams_list","Optionen für Liste"],["allowedinput","Zulässige Eingabe"],["manual","Anleitung"],["correctanswer","Richtige Antwort"],["variables","Variablen"],["validation","Validierung"],["preview","Vorschau"],["correctanswertabhelp","Geben Sie die richtige Antwort unter Verwendung des WIRIS editors ein. Wählen Sie auch die Verhaltensweise des Formel-Editors, wenn er vom Schüler verwendet wird.\n"],["assertionstabhelp","Wählen Sie die Eigenschaften, welche die Schülerantwort erfüllen muss: Ob Sie zum Beispiel vereinfacht, faktorisiert, durch physikalische Einheiten ausgedrückt werden oder eine bestimmte numerische Genauigkeit aufweisen soll."],["variablestabhelp","Schreiben Sie einen Algorithmus mit WIRIS cas, um zufällige Variablen zu erstellen: Zahlen, Ausdrücke, grafische Darstellungen oder eine Benotungsfunktion. Sie können auch das Ausgabeformat bestimmen, in welchem die Variablen dem Schüler angezeigt werden.\n"],["testtabhelp","Geben Sie eine mögliche Schülerantwort ein, um die Verhaltensweise der Frage zu simulieren. Sie verwenden das gleiche Tool, das der Schüler verwenden wird. Beachten Sie bitte, dass Sie auch die Bewertungskriterien, den Erfolg und das automatische Feedback testen können.\n"],["start","Start"],["test","Testen"],["clicktesttoevaluate","Klicken Sie auf die Schaltfläche „Testen“, um die aktuelle Antwort zu validieren."],["correct","Richtig!"],["incorrect","Falsch!"],["partiallycorrect","Teilweise richtig!"],["inputmethod","Eingabemethode"],["compoundanswer","Zusammengesetzte Antwort"],["answerinputinlineeditor","WIRIS editor eingebettet"],["answerinputpopupeditor","WIRIS editor in Popup"],["answerinputplaintext","Eingabefeld mit reinem Text"],["showauxiliarcas","WIRIS cas einbeziehen"],["initialcascontent","Anfangsinhalt"],["tolerancedigits","Toleranzstellen"],["validationandvariables","Validierung und Variablen"],["algorithmlanguage","Algorithmussprache"],["calculatorlanguage","Sprache des Rechners"],["hasalgorithm","Hat Algorithmus"],["comparison","Vergleich"],["properties","Eigenschaften"],["studentanswer","Schülerantwort"],["poweredbywiris","Powered by WIRIS"],["yourchangeswillbelost","Bei Verlassen des Fensters gehen Ihre Änderungen verloren."],["outputoptions","Ausgabeoptionen"],["catalan","Català"],["english","English"],["spanish","Español"],["estonian","Eesti"],["basque","Euskara"],["french","Français"],["german","Deutsch"],["italian","Italiano"],["dutch","Nederlands"],["portuguese","Português (Portugal)"],["javaAppletMissing","Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>."],["allanswerscorrect","Alle Antworten müssen richtig sein."],["distributegrade","Note zuweisen"],["no","Nein"],["add","Hinzufügen"],["replaceeditor","Editor ersetzen"],["list","Liste"],["questionxml","Frage-XML"],["grammarurl","Grammatik-URL"],["reservedwords","Reservierte Wörter"],["forcebrackets","Listen benötigen immer geschweifte Klammern „{}“."],["commaasitemseparator","Verwenden Sie ein Komma „,“ zur Trennung von Listenelementen."],["confirmimportdeprecated","Frage importieren? Die Frage, die Sie öffnen möchten, beinhaltet veraltete Merkmale. Durch den Importvorgang kann die Verhaltensweise der Frage leicht verändert werden. Es wird dringend empfohlen, die Frage nach dem Importieren gründlich zu überprüfen."],["comparesets","Als Mengen vergleichen"],["nobracketslist","Listen ohne Klammern"],["warningtoleranceprecision","Weniger Genauigkeitstellen als Toleranzstellen."],["actionimport","Importieren"],["actionexport","Exportieren"],["usecase","Schreibung anpassen"],["usespaces","Abstände anpassen"],["notevaluate","Argumente unausgewertet lassen"],["separators","Trennzeichen"],["comma","Komma"],["commarole","Funktion des Kommazeichens „,“"],["point","Punkt"],["pointrole","Funktion des Punktzeichens „.“"],["space","Leerzeichen"],["spacerole","Funktion des Leerzeichens"],["decimalmark","Dezimalstellen"],["digitsgroup","Zahlengruppen"],["listitems","Listenelemente"],["nothing","Nichts"],["intervals","Intervalle"],["warningprecision15","Die Präzision muss zwischen 1 und 15 liegen."],["decimalSeparator","Dezimalstelle"],["thousandsSeparator","Tausender"],["notation","Notation"],["invisible","Unsichtbar"],["auto","Automatisch"],["fixedDecimal","Feste"],["floatingDecimal","Dezimalstelle"],["scientific","Wissenschaftlich"],["example","Beispiel"],["warningreltolfixedprec","Relative Toleranz mit fester Dezimalnotation."],["warningabstolfloatprec","Absolute Toleranz mit fließender Dezimalnotation."],["answerinputinlinehand","WIRIS hand eingebettet"],["absolutetolerance","Absolute Toleranz"],["clicktoeditalgorithm","Ihr Browser <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">unterstützt kein Java</a>. Klicken Sie auf die Schaltfläche, um die Anwendung WIRIS cas herunterzuladen und auszuführen. Mit dieser können Sie den Fragen-Algorithmus bearbeiten."],["launchwiriscas","WIRIS cas starten"],["sendinginitialsession","Ursprüngliche Sitzung senden ..."],["waitingforupdates","Auf Updates warten ..."],["sessionclosed","Kommunikation geschlossen."],["gotsession","Empfangene Überarbeitung ${n}."],["thecorrectansweris","Die richtige Antwort ist"],["poweredby","Angetrieben durch "],["refresh","Korrekte Antwort erneuern"],["fillwithcorrect","Mit korrekter Antwort ausfüllen"],["lang","el"],["comparisonwithstudentanswer","Σύγκριση με απάντηση μαθητή"],["otheracceptedanswers","Άλλες αποδεκτές απαντήσεις"],["equivalent_literal","Κυριολεκτικά ίση"],["equivalent_literal_correct_feedback","Η απάντηση είναι κυριολεκτικά ίση με τη σωστή."],["equivalent_symbolic","Μαθηματικά ίση"],["equivalent_symbolic_correct_feedback","Η απάντηση είναι μαθηματικά ίση με τη σωστή."],["equivalent_set","Ίσα σύνολα"],["equivalent_set_correct_feedback","Το σύνολο της απάντησης είναι ίσο με το σωστό."],["equivalent_equations","Ισοδύναμες εξισώσεις"],["equivalent_equations_correct_feedback","Η απάντηση έχει τις ίδιες λύσεις με τη σωστή."],["equivalent_function","Συνάρτηση βαθμολόγησης"],["equivalent_function_correct_feedback","Η απάντηση είναι σωστή."],["equivalent_all","Οποιαδήποτε απάντηση"],["any","οποιαδήποτε"],["gradingfunction","Συνάρτηση βαθμολόγησης"],["additionalproperties","Πρόσθετες ιδιότητες"],["structure","Δομή"],["none","καμία"],["None","Καμία"],["check_integer_form","έχει μορφή ακέραιου"],["check_integer_form_correct_feedback","Η απάντηση είναι ένας ακέραιος."],["check_fraction_form","έχει μορφή κλάσματος"],["check_fraction_form_correct_feedback","Η απάντηση είναι ένα κλάσμα."],["check_polynomial_form","έχει πολυωνυμική μορφή"],["check_polynomial_form_correct_feedback","Η απάντηση είναι ένα πολυώνυμο."],["check_rational_function_form","έχει μορφή λογικής συνάρτησης"],["check_rational_function_form_correct_feedback","Η απάντηση είναι μια λογική συνάρτηση."],["check_elemental_function_form","είναι συνδυασμός στοιχειωδών συναρτήσεων"],["check_elemental_function_form_correct_feedback","Η απάντηση είναι μια στοιχειώδης έκφραση."],["check_scientific_notation","εκφράζεται με επιστημονική σημειογραφία"],["check_scientific_notation_correct_feedback","Η απάντηση εκφράζεται με επιστημονική σημειογραφία."],["more","Περισσότερες"],["check_simplified","είναι απλοποιημένη"],["check_simplified_correct_feedback","Η απάντηση είναι απλοποιημένη."],["check_expanded","είναι ανεπτυγμένη"],["check_expanded_correct_feedback","Η απάντηση είναι ανεπτυγμένη."],["check_factorized","είναι παραγοντοποιημένη"],["check_factorized_correct_feedback","Η απάντηση είναι παραγοντοποιημένη."],["check_rationalized","είναι αιτιολογημένη"],["check_rationalized_correct_feedback","Η απάντηση είναι αιτιολογημένη."],["check_no_common_factor","δεν έχει κοινούς συντελεστές"],["check_no_common_factor_correct_feedback","Η απάντηση δεν έχει κοινούς συντελεστές."],["check_minimal_radicands","έχει ελάχιστα υπόρριζα"],["check_minimal_radicands_correct_feedback","Η απάντηση έχει ελάχιστα υπόρριζα."],["check_divisible","διαιρείται με το"],["check_divisible_correct_feedback","Η απάντηση διαιρείται με το ${value}."],["check_common_denominator","έχει έναν κοινό παρονομαστή"],["check_common_denominator_correct_feedback","Η απάντηση έχει έναν κοινό παρονομαστή."],["check_unit","έχει μονάδα ισοδύναμη με"],["check_unit_correct_feedback","Η μονάδα της απάντηση είναι ${unit}."],["check_unit_literal","έχει μονάδα κυριολεκτικά ίση με"],["check_unit_literal_correct_feedback","Η μονάδα της απάντηση είναι ${unit}."],["check_no_more_decimals","έχει λιγότερα ή ίσα δεκαδικά του"],["check_no_more_decimals_correct_feedback","Η απάντηση έχει ${digits} ή λιγότερα δεκαδικά."],["check_no_more_digits","έχει λιγότερα ή ίσα ψηφία του"],["check_no_more_digits_correct_feedback","Η απάντηση έχει ${digits} ή λιγότερα ψηφία."],["syntax_expression","Γενικά"],["syntax_expression_description","(τύποι, εκφράσεις, εξισώσεις, μήτρες...)"],["syntax_expression_correct_feedback","Η σύνταξη της απάντησης είναι σωστή."],["syntax_quantity","Ποσότητα"],["syntax_quantity_description","(αριθμοί, μονάδες μέτρησης, κλάσματα, μικτά κλάσματα, αναλογίες,...)"],["syntax_quantity_correct_feedback","Η σύνταξη της απάντησης είναι σωστή."],["syntax_list","Λίστα"],["syntax_list_description","(λίστες χωρίς διαχωριστικό κόμμα ή παρενθέσεις)"],["syntax_list_correct_feedback","Η σύνταξη της απάντησης είναι σωστή."],["syntax_string","Κείμενο"],["syntax_string_description","(λέξεις, προτάσεις, συμβολοσειρές χαρακτήρων)"],["syntax_string_correct_feedback","Η σύνταξη της απάντησης είναι σωστή."],["none","καμία"],["edit","Επεξεργασία"],["accept","ΟΚ"],["cancel","Άκυρο"],["explog","exp/log"],["trigonometric","τριγωνομετρική"],["hyperbolic","υπερβολική"],["arithmetic","αριθμητική"],["all","όλες"],["tolerance","Ανοχή"],["relative","σχετική"],["relativetolerance","Σχετική ανοχή"],["precision","Ακρίβεια"],["implicit_times_operator","Μη ορατός τελεστής επί"],["times_operator","Τελεστής επί"],["imaginary_unit","Φανταστική μονάδα"],["mixedfractions","Μικτά κλάσματα"],["constants","Σταθερές"],["functions","Συναρτήσεις"],["userfunctions","Συναρτήσεις χρήστη"],["units","Μονάδες"],["unitprefixes","Προθέματα μονάδων"],["syntaxparams","Επιλογές σύνταξης"],["syntaxparams_expression","Επιλογές για γενικά"],["syntaxparams_quantity","Επιλογές για ποσότητα"],["syntaxparams_list","Επιλογές για λίστα"],["allowedinput","Επιτρεπόμενο στοιχείο εισόδου"],["manual","Εγχειρίδιο"],["correctanswer","Σωστή απάντηση"],["variables","Μεταβλητές"],["validation","Επικύρωση"],["preview","Προεπισκόπηση"],["correctanswertabhelp","Εισαγάγετε τη σωστή απάντηση χρησιμοποιώντας τον επεξεργαστή WIRIS. Επιλέξτε επίσης τη συμπεριφορά για τον επεξεργαστή τύπων, όταν χρησιμοποιείται από τον μαθητή."],["assertionstabhelp","Επιλέξτε τις ιδιότητες που πρέπει να ικανοποιεί η απάντηση του μαθητή. Για παράδειγμα, εάν πρέπει να είναι απλοποιημένη, παραγοντοποιημένη, εκφρασμένη σε φυσικές μονάδες ή να έχει συγκεκριμένη αριθμητική ακρίβεια."],["variablestabhelp","Γράψτε έναν αλγόριθμο με το WIRIS cas για να δημιουργήσετε τυχαίες μεταβλητές: αριθμούς, εκφράσεις, σχεδιαγράμματα ή μια συνάρτηση βαθμολόγησης. Μπορείτε επίσης να καθορίσετε τη μορφή εξόδου των μεταβλητών που θα εμφανίζονται στον μαθητή."],["testtabhelp","Εισαγάγετε μια πιθανή απάντηση του μαθητή για να προσομοιώσετε τη συμπεριφορά της ερώτησης. Χρησιμοποιείτε το ίδιο εργαλείο με αυτό που θα χρησιμοποιήσει ο μαθητής. Σημειώνεται ότι μπορείτε επίσης να ελέγξετε τα κριτήρια αξιολόγησης, την επιτυχία και τα αυτόματα σχόλια."],["start","Έναρξη"],["test","Δοκιμή"],["clicktesttoevaluate","Κάντε κλικ στο κουμπί «Δοκιμή» για να επικυρώσετε τη σωστή απάντηση."],["correct","Σωστό!"],["incorrect","Λάθος!"],["partiallycorrect","Εν μέρει σωστό!"],["inputmethod","Μέθοδος εισόδου"],["compoundanswer","Σύνθετη απάντηση"],["answerinputinlineeditor","Επεξεργαστής WIRIS ενσωματωμένος"],["answerinputpopupeditor","Επεξεργαστής WIRIS σε αναδυόμενο πλαίσιο"],["answerinputplaintext","Πεδίο εισόδου απλού κειμένου"],["showauxiliarcas","Συμπερίληψη WIRIS cas"],["initialcascontent","Αρχικό περιεχόμενο"],["tolerancedigits","Ψηφία ανοχής"],["validationandvariables","Επικύρωση και μεταβλητές"],["algorithmlanguage","Γλώσσα αλγόριθμου"],["calculatorlanguage","Γλώσσα υπολογιστή"],["hasalgorithm","Έχει αλγόριθμο"],["comparison","Σύγκριση"],["properties","Ιδιότητες"],["studentanswer","Απάντηση μαθητή"],["poweredbywiris","Παρέχεται από τη WIRIS"],["yourchangeswillbelost","Οι αλλαγές σας θα χαθούν εάν αποχωρήσετε από το παράθυρο."],["outputoptions","Επιλογές εξόδου"],["catalan","Català"],["english","English"],["spanish","Español"],["estonian","Eesti"],["basque","Euskara"],["french","Français"],["german","Deutsch"],["italian","Italiano"],["dutch","Nederlands"],["portuguese","Português (Portugal)"],["javaAppletMissing","Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>."],["allanswerscorrect","Όλες οι απαντήσεις πρέπει να είναι σωστές"],["distributegrade","Κατανομή βαθμών"],["no","Όχι"],["add","Προσθήκη"],["replaceeditor","Αντικατάσταση επεξεργαστή"],["list","Λίστα"],["questionxml","XML ερώτησης"],["grammarurl","URL γραμματικής"],["reservedwords","Ανεστραμμένες λέξεις"],["forcebrackets","Για τις λίστες χρειάζονται πάντα άγκιστρα «{}»."],["commaasitemseparator","Χρησιμοποιήστε το κόμμα «,» ως διαχωριστικό στοιχείων λίστας."],["confirmimportdeprecated","Εισαγωγή της ερώτησης; Η ερώτηση που πρόκειται να ανοίξετε περιέχει δυνατότητες που έχουν καταργηθεί. Η διαδικασία εισαγωγής μπορεί να αλλάξει λίγο τη συμπεριφορά της ερώτησης. Θα πρέπει να εξετάσετε προσεκτικά την ερώτηση μετά από την εισαγωγή της."],["comparesets","Σύγκριση ως συνόλων"],["nobracketslist","Λίστες χωρίς άγκιστρα"],["warningtoleranceprecision","Λιγότερα ψηφία ακρίβειας από τα ψηφία ανοχής."],["actionimport","Εισαγωγή"],["actionexport","Εξαγωγή"],["usecase","Συμφωνία πεζών-κεφαλαίων"],["usespaces","Συμφωνία διαστημάτων"],["notevaluate","Διατήρηση των ορισμάτων χωρίς αξιολόγηση"],["separators","Διαχωριστικά"],["comma","Κόμμα"],["commarole","Ρόλος του χαρακτήρα «,» (κόμμα)"],["point","Τελεία"],["pointrole","Ρόλος του χαρακτήρα «.» (τελεία)"],["space","Διάστημα"],["spacerole","Ρόλος του χαρακτήρα διαστήματος"],["decimalmark","Δεκαδικά ψηφία"],["digitsgroup","Ομάδες ψηφίων"],["listitems","Στοιχεία λίστας"],["nothing","Τίποτα"],["intervals","Διαστήματα"],["warningprecision15","Η ακρίβεια πρέπει να είναι μεταξύ 1 και 15."],["decimalSeparator","Δεκαδικό"],["thousandsSeparator","Χιλιάδες"],["notation","Σημειογραφία"],["invisible","Μη ορατό"],["auto","Αυτόματα"],["fixedDecimal","Σταθερό"],["floatingDecimal","Δεκαδικό"],["scientific","Επιστημονικό"],["example","Παράδειγμα"],["warningreltolfixedprec","Σχετική ανοχή με σημειογραφία σταθερής υποδιαστολής."],["warningabstolfloatprec","Απόλυτη ανοχή με σημειογραφία κινητής υποδιαστολής."],["answerinputinlinehand","WIRIS ενσωματωμένο"],["absolutetolerance","Απόλυτη ανοχή"],["clicktoeditalgorithm","Το πρόγραμμα περιήγησης που χρησιμοποιείτε δεν <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">υποστηρίζει Java</a>. Κάντε κλικ στο κουμπί για τη λήψη και την εκτέλεση της εφαρμογής WIRIS cas για επεξεργασία του αλγόριθμου ερώτησης."],["launchwiriscas","Εκκίνηση του WIRIS cas"],["sendinginitialsession","Αποστολή αρχικής περιόδου σύνδεσης..."],["waitingforupdates","Αναμονή για ενημερώσεις..."],["sessionclosed","Η επικοινωνία έκλεισε."],["gotsession","Λήφθηκε αναθεώρηση ${n}."],["thecorrectansweris","Η σωστή απάντηση είναι"],["poweredby","Με την υποστήριξη της"],["refresh","Ανανέωση της σωστής απάντησης"],["fillwithcorrect","Συμπλήρωση με τη σωστή απάντηση"],["lang","pt_br"],["comparisonwithstudentanswer","Comparação com a resposta do aluno"],["otheracceptedanswers","Outras respostas aceitas"],["equivalent_literal","Literalmente igual"],["equivalent_literal_correct_feedback","A resposta é literalmente igual à correta."],["equivalent_symbolic","Matematicamente igual"],["equivalent_symbolic_correct_feedback","A resposta é matematicamente igual à correta."],["equivalent_set","Iguais aos conjuntos"],["equivalent_set_correct_feedback","O conjunto de respostas é igual ao correto."],["equivalent_equations","Equações equivalentes"],["equivalent_equations_correct_feedback","A resposta tem as mesmas soluções da correta."],["equivalent_function","Cálculo da nota"],["equivalent_function_correct_feedback","A resposta está correta."],["equivalent_all","Qualquer reposta"],["any","qualquer"],["gradingfunction","Cálculo da nota"],["additionalproperties","Propriedades adicionais"],["structure","Estrutura"],["none","nenhuma"],["None","Nenhuma"],["check_integer_form","tem forma de número inteiro"],["check_integer_form_correct_feedback","A resposta é um número inteiro."],["check_fraction_form","tem forma de fração"],["check_fraction_form_correct_feedback","A resposta é uma fração."],["check_polynomial_form","tem forma polinomial"],["check_polynomial_form_correct_feedback","A resposta é um polinomial."],["check_rational_function_form","tem forma de função racional"],["check_rational_function_form_correct_feedback","A resposta é uma função racional."],["check_elemental_function_form","é uma combinação de funções elementárias"],["check_elemental_function_form_correct_feedback","A resposta é uma expressão elementar."],["check_scientific_notation","é expressa em notação científica"],["check_scientific_notation_correct_feedback","A resposta é expressa em notação científica."],["more","Mais"],["check_simplified","é simplificada"],["check_simplified_correct_feedback","A resposta é simplificada."],["check_expanded","é expandida"],["check_expanded_correct_feedback","A resposta é expandida."],["check_factorized","é fatorizada"],["check_factorized_correct_feedback","A resposta é fatorizada."],["check_rationalized","é racionalizada"],["check_rationalized_correct_feedback","A resposta é racionalizada."],["check_no_common_factor","não tem fatores comuns"],["check_no_common_factor_correct_feedback","A resposta não tem fatores comuns."],["check_minimal_radicands","tem radiciação mínima"],["check_minimal_radicands_correct_feedback","A resposta tem radiciação mínima."],["check_divisible","é divisível por"],["check_divisible_correct_feedback","A resposta é divisível por ${value}."],["check_common_denominator","tem um único denominador comum"],["check_common_denominator_correct_feedback","A resposta tem um único denominador comum."],["check_unit","tem unidade equivalente a"],["check_unit_correct_feedback","A unidade da resposta é ${unit}."],["check_unit_literal","tem unidade literalmente igual a"],["check_unit_literal_correct_feedback","A unidade da resposta é ${unit}."],["check_no_more_decimals","tem menos ou os mesmos decimais que"],["check_no_more_decimals_correct_feedback","A resposta tem ${digits} decimais ou menos."],["check_no_more_digits","tem menos ou os mesmos dígitos que"],["check_no_more_digits_correct_feedback","A resposta tem ${digits} dígitos ou menos."],["syntax_expression","Geral"],["syntax_expression_description","(fórmulas, expressões, equações, matrizes...)"],["syntax_expression_correct_feedback","A sintaxe da resposta está correta."],["syntax_quantity","Quantidade"],["syntax_quantity_description","(números, unidades de medida, frações, frações mistas, proporções...)"],["syntax_quantity_correct_feedback","A sintaxe da resposta está correta."],["syntax_list","Lista"],["syntax_list_description","(listas sem separação por vírgula ou chaves)"],["syntax_list_correct_feedback","A sintaxe da resposta está correta."],["syntax_string","Texto"],["syntax_string_description","(palavras, frases, sequências de caracteres)"],["syntax_string_correct_feedback","A sintaxe da resposta está correta."],["none","nenhuma"],["edit","Editar"],["accept","OK"],["cancel","Cancelar"],["explog","exp/log"],["trigonometric","trigonométrica"],["hyperbolic","hiperbólica"],["arithmetic","aritmética"],["all","tudo"],["tolerance","Tolerância"],["relative","relativa"],["relativetolerance","Tolerância relativa"],["precision","Precisão"],["implicit_times_operator","Sinal de multiplicação invisível"],["times_operator","Sinal de multiplicação"],["imaginary_unit","Unidade imaginária"],["mixedfractions","Frações mistas"],["constants","Constantes"],["functions","Funções"],["userfunctions","Funções do usuário"],["units","Unidades"],["unitprefixes","Prefixos das unidades"],["syntaxparams","Opções de sintaxe"],["syntaxparams_expression","Opções gerais"],["syntaxparams_quantity","Opções de quantidade"],["syntaxparams_list","Opções de lista"],["allowedinput","Entrada permitida"],["manual","Manual"],["correctanswer","Resposta correta"],["variables","Variáveis"],["validation","Validação"],["preview","Prévia"],["correctanswertabhelp","Insira a resposta correta usando o WIRIS editor. Selecione também o comportamento do editor de fórmulas quando usado pelo aluno."],["assertionstabhelp","Selecione quais propriedades a resposta do aluno deve verificar. Por exemplo, se ela deve ser simplificada, fatorizada, expressa em unidades físicas ou ter uma precisão numérica específica."],["variablestabhelp","Escreva um algoritmo com o WIRIS cas para criar variáveis aleatórias: números, expressões, gráficos ou cálculo de nota. Você também pode especificar o formato de saída das variáveis exibidas para o aluno."],["testtabhelp","Insira um estudante em potencial para simular o comportamento da questão. Você está usando a mesma ferramenta que o aluno usará. Note que também é possível testar o critério de avaliação, sucesso e comentário automático."],["start","Iniciar"],["test","Testar"],["clicktesttoevaluate","Clique no botão Testar para validar a resposta atual."],["correct","Correta!"],["incorrect","Incorreta!"],["partiallycorrect","Parcialmente correta!"],["inputmethod","Método de entrada"],["compoundanswer","Resposta composta"],["answerinputinlineeditor","WIRIS editor integrado"],["answerinputpopupeditor","WIRIS editor em pop up"],["answerinputplaintext","Campo de entrada de texto simples"],["showauxiliarcas","Incluir WIRIS cas"],["initialcascontent","Conteúdo inicial"],["tolerancedigits","Dígitos de tolerância"],["validationandvariables","Validação e variáveis"],["algorithmlanguage","Linguagem do algoritmo"],["calculatorlanguage","Linguagem da calculadora"],["hasalgorithm","Tem algoritmo"],["comparison","Comparação"],["properties","Propriedades"],["studentanswer","Resposta do aluno"],["poweredbywiris","Fornecido por WIRIS"],["yourchangeswillbelost","As alterações serão perdidas se você sair da janela."],["outputoptions","Opções de saída"],["catalan","Català"],["english","English"],["spanish","Español"],["estonian","Eesti"],["basque","Euskara"],["french","Français"],["german","Deutsch"],["italian","Italiano"],["dutch","Nederlands"],["portuguese","Português (Portugal)"],["javaAppletMissing","Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>."],["allanswerscorrect","Todas as respostas devem estar corretas"],["distributegrade","Distribuir notas"],["no","Não"],["add","Adicionar"],["replaceeditor","Substituir editor"],["list","Lista"],["questionxml","XML da pergunta"],["grammarurl","URL da gramática"],["reservedwords","Palavras reservadas"],["forcebrackets","As listas sempre precisam de chaves “{}”."],["commaasitemseparator","Use vírgula “,” para separar itens na lista."],["confirmimportdeprecated","Importar questão? A questão prestes a ser aberta contém recursos ultrapassados. O processo de importação pode alterar um pouco o comportamento da questão. É recomendável que você teste a questão atentamente após importá-la."],["comparesets","Comparar como conjuntos"],["nobracketslist","Listas sem chaves"],["warningtoleranceprecision","Menos dígitos de precisão do que dígitos de tolerância."],["actionimport","Importar"],["actionexport","Exportar"],["usecase","Coincidir maiúsculas/minúsculas"],["usespaces","Coincidir espaços"],["notevaluate","Manter argumentos não avaliados"],["separators","Separadores"],["comma","Vírgula"],["commarole","Função do caractere vírgula “,”"],["point","Ponto"],["pointrole","Função do caractere ponto “.”"],["space","Espaço"],["spacerole","Função do caractere espaço"],["decimalmark","Dígitos decimais"],["digitsgroup","Grupos de dígitos"],["listitems","Itens da lista"],["nothing","Nada"],["intervals","Intervalos"],["warningprecision15","A precisão deve estar entre 1 e 15."],["decimalSeparator","Decimal"],["thousandsSeparator","Milhares"],["notation","Notação"],["invisible","Invisível"],["auto","Automática"],["fixedDecimal","Fixa"],["floatingDecimal","Decimal"],["scientific","Científica"],["example","Exemplo"],["warningreltolfixedprec","Tolerância relativa com notação decimal fixa."],["warningabstolfloatprec","Tolerância absoluta com notação decimal flutuante."],["answerinputinlinehand","WIRIS hand integrado"],["absolutetolerance","Tolerância absoluta"],["clicktoeditalgorithm","O navegador não é <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">compatível com Java</a>. Clique no botão para baixar e executar o aplicativo WIRIS cas e editar o algoritmo da questão."],["launchwiriscas","Abrir WIRIS cas"],["sendinginitialsession","Enviando sessão inicial..."],["waitingforupdates","Aguardando atualizações..."],["sessionclosed","Comunicação fechada."],["gotsession","Revisão ${n} recebida."],["thecorrectansweris","A resposta correta é"],["poweredby","Fornecido por"],["refresh","Renovar resposta correta"],["fillwithcorrect","Preencher resposta correta"]]; +com.wiris.quizzes.impl.Strings.lang = [["lang","en"],["comparisonwithstudentanswer","Comparison with student answer"],["otheracceptedanswers","Other accepted answers"],["equivalent_literal","Literally equal"],["equivalent_literal_correct_feedback","The answer is literally equal to the correct one."],["equivalent_symbolic","Mathematically equal"],["equivalent_symbolic_correct_feedback","The answer is mathematically equal to the correct one."],["equivalent_set","Equal as sets"],["equivalent_set_correct_feedback","The answer set is equal to the correct one."],["equivalent_equations","Equivalent equations"],["equivalent_equations_correct_feedback","The answer has the same solutions as the correct one."],["equivalent_function","Grading function"],["equivalent_function_correct_feedback","The answer is correct."],["equivalent_all","Any answer"],["any","any"],["gradingfunction","Grading function"],["additionalproperties","Additional properties"],["structure","Structure"],["none","none"],["None","None"],["check_integer_form","has integer form"],["check_integer_form_correct_feedback","The answer is an integer."],["check_fraction_form","has fraction form"],["check_fraction_form_correct_feedback","The answer is a fraction."],["check_polynomial_form","has polynomial form"],["check_polynomial_form_correct_feedback","The answer is a polynomial."],["check_rational_function_form","has rational function form"],["check_rational_function_form_correct_feedback","The answer is a rational function."],["check_elemental_function_form","is a combination of elementary functions"],["check_elemental_function_form_correct_feedback","The answer is an elementary expression."],["check_scientific_notation","is expressed in scientific notation"],["check_scientific_notation_correct_feedback","The answer is expressed in scientific notation."],["more","More"],["check_simplified","is simplified"],["check_simplified_correct_feedback","The answer is simplified."],["check_expanded","is expanded"],["check_expanded_correct_feedback","The answer is expanded."],["check_factorized","is factorized"],["check_factorized_correct_feedback","The answer is factorized."],["check_rationalized","is rationalized"],["check_rationalized_correct_feedback","The answer is rationalized."],["check_no_common_factor","doesn't have common factors"],["check_no_common_factor_correct_feedback","The answer doesn't have common factors."],["check_minimal_radicands","has minimal radicands"],["check_minimal_radicands_correct_feedback","The answer has minimal radicands."],["check_divisible","is divisible by"],["check_divisible_correct_feedback","The answer is divisible by ${value}."],["check_common_denominator","has a single common denominator"],["check_common_denominator_correct_feedback","The answer has a single common denominator."],["check_unit","has unit equivalent to"],["check_unit_correct_feedback","The unit of the answer is ${unit}."],["check_unit_literal","has unit literally equal to"],["check_unit_literal_correct_feedback","The unit of the answer is ${unit}."],["check_no_more_decimals","has less or equal decimals than"],["check_no_more_decimals_correct_feedback","The answer has ${digits} or less decimals."],["check_no_more_digits","has less or equal digits than"],["check_no_more_digits_correct_feedback","The answer has ${digits} or less digits."],["syntax_expression","General"],["syntax_expression_description","(formulas, expressions, equations, matrices...)"],["syntax_expression_correct_feedback","The answer syntax is correct."],["syntax_quantity","Quantity"],["syntax_quantity_description","(numbers, measure units, fractions, mixed fractions, ratios...)"],["syntax_quantity_correct_feedback","The answer syntax is correct."],["syntax_list","List"],["syntax_list_description","(lists without comma separator or brackets)"],["syntax_list_correct_feedback","The answer syntax is correct."],["syntax_string","Text"],["syntax_string_description","(words, sentences, character strings)"],["syntax_string_correct_feedback","The answer syntax is correct."],["none","none"],["edit","Edit"],["accept","OK"],["cancel","Cancel"],["explog","exp/log"],["trigonometric","trigonometric"],["hyperbolic","hyperbolic"],["arithmetic","arithmetic"],["all","all"],["tolerance","Tolerance"],["relative","relative"],["relativetolerance","Relative tolerance"],["precision","Precision"],["implicit_times_operator","Invisible times operator"],["times_operator","Times operator"],["imaginary_unit","Imaginary unit"],["mixedfractions","Mixed fractions"],["constants","Constants"],["functions","Functions"],["userfunctions","User functions"],["units","Units"],["unitprefixes","Unit prefixes"],["syntaxparams","Syntax options"],["syntaxparams_expression","Options for general"],["syntaxparams_quantity","Options for quantity"],["syntaxparams_list","Options for list"],["allowedinput","Allowed input"],["manual","Manual"],["correctanswer","Correct answer"],["variables","Variables"],["validation","Validation"],["preview","Preview"],["correctanswertabhelp","Insert the correct answer using WIRIS editor. Select also the behaviour for the formula editor when used by the student.\n"],["assertionstabhelp","Select which properties the student answer has to verify. For example, if it has to be simplified, factorized, expressed using physical units or have a specific numerical precision."],["variablestabhelp","Write an algorithm with WIRIS cas to create random variables: numbers, expressions, plots or a grading function.\nYou can also specify the output format of the variables shown to the student.\n"],["testtabhelp","Insert a possible student answer to simulate the behaviour of the question. You are using the same tool that the student will use.\nNote that you can also test the evaluation criteria, success and automatic feedback.\n"],["start","Start"],["test","Test"],["clicktesttoevaluate","Click Test button to validate the current answer."],["correct","Correct!"],["incorrect","Incorrect!"],["partiallycorrect","Partially correct!"],["inputmethod","Input method"],["compoundanswer","Compound answer"],["answerinputinlineeditor","WIRIS editor embedded"],["answerinputpopupeditor","WIRIS editor in popup"],["answerinputplaintext","Plain text input field"],["showauxiliarcas","Include WIRIS cas"],["initialcascontent","Initial content"],["tolerancedigits","Tolerance digits"],["validationandvariables","Validation and variables"],["algorithmlanguage","Algorithm language"],["calculatorlanguage","Calculator language"],["hasalgorithm","Has algorithm"],["comparison","Comparison"],["properties","Properties"],["studentanswer","Student answer"],["poweredbywiris","Powered by WIRIS"],["yourchangeswillbelost","Your changes will be lost if you leave the window."],["outputoptions","Output options"],["catalan","Català"],["english","English"],["spanish","Español"],["estonian","Eesti"],["basque","Euskara"],["french","Français"],["german","Deutsch"],["italian","Italiano"],["dutch","Nederlands"],["portuguese","Português (Portugal)"],["javaAppletMissing","Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>."],["allanswerscorrect","All answers must be correct"],["distributegrade","Distribute grade"],["no","No"],["add","Add"],["replaceeditor","Replace editor"],["list","List"],["questionxml","Question XML"],["grammarurl","Grammar URL"],["reservedwords","Reserved words"],["forcebrackets","Lists always need curly brackets \"{}\"."],["commaasitemseparator","Use comma \",\" as list item separator."],["confirmimportdeprecated","Import the question? \nThe question you are about to open contains deprecated features. The import process may change slightly the behavior of the question. It is highly recommended that you carefully test de question after import."],["comparesets","Compare as sets"],["nobracketslist","Lists without brackets"],["warningtoleranceprecision","Less precision digits than tolerance digits."],["actionimport","Import"],["actionexport","Export"],["usecase","Match case"],["usespaces","Match spaces"],["notevaluate","Keep arguments unevaluated"],["separators","Separators"],["comma","Comma"],["commarole","Role of the comma ',' character"],["point","Point"],["pointrole","Role of the point '.' character"],["space","Space"],["spacerole","Role of the space character"],["decimalmark","Decimal digits"],["digitsgroup","Digit groups"],["listitems","List items"],["nothing","Nothing"],["intervals","Intervals"],["warningprecision15","Precision must be between 1 and 15."],["decimalSeparator","Decimal"],["thousandsSeparator","Thousands"],["notation","Notation"],["invisible","Invisible"],["auto","Auto"],["fixedDecimal","Fixed"],["floatingDecimal","Decimal"],["scientific","Scientific"],["example","Example"],["warningreltolfixedprec","Relative tolerance with fixed decimal notation."],["warningabstolfloatprec","Absolute tolerance with floating decimal notation."],["answerinputinlinehand","WIRIS hand embedded"],["absolutetolerance","Absolute tolerance"],["clicktoeditalgorithm","Click the button to download and run WIRIS cas application to edit the question algorithm. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Learn more</a>."],["launchwiriscas","Edit algorithm"],["sendinginitialsession","Sending initial session..."],["waitingforupdates","Waiting for updates..."],["sessionclosed","All changes saved"],["gotsession","Changes saved (revision ${n})."],["thecorrectansweris","The correct answer is"],["poweredby","Powered by"],["refresh","Renew correct answer"],["fillwithcorrect","Fill with correct answer"],["runcalculator","Run calculator"],["clicktoruncalculator","Click the button to download and run WIRIS cas application to make the calculations you need. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Learn more</a>."],["answer","answer"],["lang","es"],["comparisonwithstudentanswer","Comparación con la respuesta del estudiante"],["otheracceptedanswers","Otras respuestas aceptadas"],["equivalent_literal","Literalmente igual"],["equivalent_literal_correct_feedback","La respuesta es literalmente igual a la correcta."],["equivalent_symbolic","Matemáticamente igual"],["equivalent_symbolic_correct_feedback","La respuesta es matemáticamente igual a la correcta."],["equivalent_set","Igual como conjuntos"],["equivalent_set_correct_feedback","El conjunto de respuestas es igual al correcto."],["equivalent_equations","Ecuaciones equivalentes"],["equivalent_equations_correct_feedback","La respuesta tiene las soluciones requeridas."],["equivalent_function","Función de calificación"],["equivalent_function_correct_feedback","La respuesta es correcta."],["equivalent_all","Cualquier respuesta"],["any","cualquier"],["gradingfunction","Función de calificación"],["additionalproperties","Propiedades adicionales"],["structure","Estructura"],["none","ninguno"],["None","Ninguno"],["check_integer_form","tiene forma de número entero"],["check_integer_form_correct_feedback","La respuesta es un número entero."],["check_fraction_form","tiene forma de fracción"],["check_fraction_form_correct_feedback","La respuesta es una fracción."],["check_polynomial_form","tiene forma de polinomio"],["check_polynomial_form_correct_feedback","La respuesta es un polinomio."],["check_rational_function_form","tiene forma de función racional"],["check_rational_function_form_correct_feedback","La respuesta es una función racional."],["check_elemental_function_form","es una combinación de funciones elementales"],["check_elemental_function_form_correct_feedback","La respuesta es una expresión elemental."],["check_scientific_notation","está expresada en notación científica"],["check_scientific_notation_correct_feedback","La respuesta está expresada en notación científica."],["more","Más"],["check_simplified","está simplificada"],["check_simplified_correct_feedback","La respuesta está simplificada."],["check_expanded","está expandida"],["check_expanded_correct_feedback","La respuesta está expandida."],["check_factorized","está factorizada"],["check_factorized_correct_feedback","La respuesta está factorizada."],["check_rationalized","está racionalizada"],["check_rationalized_correct_feedback","La respuseta está racionalizada."],["check_no_common_factor","no tiene factores comunes"],["check_no_common_factor_correct_feedback","La respuesta no tiene factores comunes."],["check_minimal_radicands","tiene radicandos minimales"],["check_minimal_radicands_correct_feedback","La respuesta tiene los radicandos minimales."],["check_divisible","es divisible por"],["check_divisible_correct_feedback","La respuesta es divisible por ${value}."],["check_common_denominator","tiene denominador común"],["check_common_denominator_correct_feedback","La respuesta tiene denominador común."],["check_unit","tiene unidad equivalente a"],["check_unit_correct_feedback","La unidad de respuesta es ${unit}."],["check_unit_literal","tiene unidad literalmente igual a"],["check_unit_literal_correct_feedback","La unidad de respuesta es ${unit}."],["check_no_more_decimals","tiene menos decimales o exactamente"],["check_no_more_decimals_correct_feedback","La respuesta tiene ${digits} o menos decimales."],["check_no_more_digits","tiene menos dígitos o exactamente"],["check_no_more_digits_correct_feedback","La respuesta tiene ${digits} o menos dígitos."],["syntax_expression","General"],["syntax_expression_description","(fórmulas, expresiones, ecuaciones, matrices ...)"],["syntax_expression_correct_feedback","La sintaxis de la respuesta es correcta."],["syntax_quantity","Cantidad"],["syntax_quantity_description","(números, unidades de medida, fracciones, fracciones mixtas, razones...)"],["syntax_quantity_correct_feedback","La sintaxis de la respuesta es correcta."],["syntax_list","Lista"],["syntax_list_description","(listas sin coma separadora o paréntesis)"],["syntax_list_correct_feedback","La sintaxis de la respuesta es correcta."],["syntax_string","Texto"],["syntax_string_description","(palabras, frases, cadenas de caracteres)"],["syntax_string_correct_feedback","La sintaxis de la respuesta es correcta."],["none","ninguno"],["edit","Editar"],["accept","Aceptar"],["cancel","Cancelar"],["explog","exp/log"],["trigonometric","trigonométricas"],["hyperbolic","hiperbólicas"],["arithmetic","aritmética"],["all","todo"],["tolerance","Tolerancia"],["relative","relativa"],["relativetolerance","Tolerancia relativa"],["precision","Precisión"],["implicit_times_operator","Omitir producto"],["times_operator","Operador producto"],["imaginary_unit","Unidad imaginaria"],["mixedfractions","Fracciones mixtas"],["constants","Constantes"],["functions","Funciones"],["userfunctions","Funciones de usuario"],["units","Unidades"],["unitprefixes","Prefijos de unidades"],["syntaxparams","Opciones de sintaxis"],["syntaxparams_expression","Opciones para general"],["syntaxparams_quantity","Opciones para cantidad"],["syntaxparams_list","Opciones para lista"],["allowedinput","Entrada permitida"],["manual","Manual"],["correctanswer","Respuesta correcta"],["variables","Variables"],["validation","Validación"],["preview","Vista previa"],["correctanswertabhelp","Introduzca la respuesta correcta utilizando WIRIS editor. Seleccione también el comportamiento del editor de fórmulas cuando sea utilizado por el estudiante.\n"],["assertionstabhelp","Seleccione las propiedades que deben cumplir las respuestas de estudiante. Por ejemplo, si tiene que estar simplificado, factorizado, expresado utilizando unidades físicas o tener una precisión numérica específica."],["variablestabhelp","Escriba un algoritmo con WIRIS CAS para crear variables aleatorias: números, expresiones, gráficas o funciones de calificación.\nTambién puede especificar el formato de salida de las variables que se muestran a los estudiantes.\n"],["testtabhelp","Insertar una posible respuesta de estudiante para simular el comportamiento de la pregunta. Está usted utilizando la misma herramienta que el estudiante utilizará.\nObserve que también se pueden probar los criterios de evaluación, el éxito y la retroalimentación automática.\n"],["start","Inicio"],["test","Prueba"],["clicktesttoevaluate","Haga clic en botón de prueba para validar la respuesta actual."],["correct","¡correcto!"],["incorrect","¡incorrecto!"],["partiallycorrect","¡parcialmente correcto!"],["inputmethod","Método de entrada"],["compoundanswer","Respuesta compuesta"],["answerinputinlineeditor","WIRIS editor incrustado"],["answerinputpopupeditor","WIRIS editor en una ventana emergente"],["answerinputplaintext","Campo de entrada de texto llano"],["showauxiliarcas","Incluir WIRIS CAS"],["initialcascontent","Contenido inicial"],["tolerancedigits","Dígitos de tolerancia"],["validationandvariables","Validación y variables"],["algorithmlanguage","Idioma del algoritmo"],["calculatorlanguage","Idioma de la calculadora"],["hasalgorithm","Tiene algoritmo"],["comparison","Comparación"],["properties","Propiedades"],["studentanswer","Respuesta del estudiante"],["poweredbywiris","Powered by WIRIS"],["yourchangeswillbelost","Sus cambios se perderán si abandona la ventana."],["outputoptions","Opciones de salida"],["catalan","Català"],["english","English"],["spanish","Español"],["estonian","Eesti"],["basque","Euskara"],["french","Français"],["german","Deutsch"],["italian","Italiano"],["dutch","Nederlands"],["portuguese","Português (Portugal)"],["javaAppletMissing","Aviso! Este componente requiere <a href=\"http://www.java.com/es/\">instalar el plugin de Java</a> o quizás es suficiente <a href=\"http://www.java.com/es/download/help/enable_browser.xml\">activar el plugin de Java</a>."],["allanswerscorrect","Todas las respuestas deben ser correctas"],["distributegrade","Distribuir la nota"],["no","No"],["add","Añadir"],["replaceeditor","Sustituir editor"],["list","Lista"],["questionxml","Question XML"],["grammarurl","Grammar URL"],["reservedwords","Palabras reservadas"],["forcebrackets","Las listas siempre necesitan llaves \"{}\"."],["commaasitemseparator","Utiliza la coma \",\" como separador de elementos de listas."],["confirmimportdeprecated","Importar la pregunta?\nEsta pregunta tiene características obsoletas. El proceso de importación puede modificar el comportamiento de la pregunta. Revise cuidadosamente la pregunta antes de utilizarla."],["comparesets","Compara como conjuntos"],["nobracketslist","Listas sin llaves"],["warningtoleranceprecision","Precisión menor que la tolerancia."],["actionimport","Importar"],["actionexport","Exportar"],["usecase","Coincidir mayúsculas y minúsculas"],["usespaces","Coincidir espacios"],["notevaluate","Mantener los argumentos sin evaluar"],["separators","Separadores"],["comma","Coma"],["commarole","Rol del caracter coma ','"],["point","Punto"],["pointrole","Rol del caracter punto '.'"],["space","Espacio"],["spacerole","Rol del caracter espacio"],["decimalmark","Decimales"],["digitsgroup","Miles"],["listitems","Elementos de lista"],["nothing","Ninguno"],["intervals","Intervalos"],["warningprecision15","La precisión debe estar entre 1 y 15."],["decimalSeparator","Decimales"],["thousandsSeparator","Miles"],["notation","Notación"],["invisible","Invisible"],["auto","Auto"],["fixedDecimal","Fija"],["floatingDecimal","Decimal"],["scientific","Científica"],["example","Ejemplo"],["warningreltolfixedprec","Tolerancia relativa con notación de coma fija."],["warningabstolfloatprec","Tolerancia absoluta con notación de coma flotante."],["answerinputinlinehand","WIRIS hand incrustado"],["absolutetolerance","Tolerancia absoluta"],["clicktoeditalgorithm","Clica el botón para descargar y ejecutar la aplicación WIRIS cas para editar el algoritmo de la pregunta. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Aprende más</a>."],["launchwiriscas","Editar algoritmo"],["sendinginitialsession","Enviando algoritmo inicial."],["waitingforupdates","Esperando actualizaciones."],["sessionclosed","Todos los cambios guardados."],["gotsession","Cambios guardados (revisión ${n})."],["thecorrectansweris","La respuesta correcta es"],["poweredby","Creado por"],["refresh","Renovar la respuesta correcta"],["fillwithcorrect","Rellenar con la respuesta correcta"],["runcalculator","Ejecutar calculadora"],["clicktoruncalculator","Clica el botón para descargar y ejecutar la aplicación WIRIS cas para hacer los cálculos que necesite. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Aprende más</a>."],["answer","respuesta"],["lang","ca"],["comparisonwithstudentanswer","Comparació amb la resposta de l'estudiant"],["otheracceptedanswers","Altres respostes acceptades"],["equivalent_literal","Literalment igual"],["equivalent_literal_correct_feedback","La resposta és literalment igual a la correcta."],["equivalent_symbolic","Matemàticament igual"],["equivalent_symbolic_correct_feedback","La resposta és matemàticament igual a la correcta."],["equivalent_set","Igual com a conjunts"],["equivalent_set_correct_feedback","El conjunt de respostes és igual al correcte."],["equivalent_equations","Equacions equivalents"],["equivalent_equations_correct_feedback","La resposta té les solucions requerides."],["equivalent_function","Funció de qualificació"],["equivalent_function_correct_feedback","La resposta és correcta."],["equivalent_all","Qualsevol resposta"],["any","qualsevol"],["gradingfunction","Funció de qualificació"],["additionalproperties","Propietats addicionals"],["structure","Estructura"],["none","cap"],["None","Cap"],["check_integer_form","té forma de nombre enter"],["check_integer_form_correct_feedback","La resposta és un nombre enter."],["check_fraction_form","té forma de fracció"],["check_fraction_form_correct_feedback","La resposta és una fracció."],["check_polynomial_form","té forma de polinomi"],["check_polynomial_form_correct_feedback","La resposta és un polinomi."],["check_rational_function_form","té forma de funció racional"],["check_rational_function_form_correct_feedback","La resposta és una funció racional."],["check_elemental_function_form","és una combinació de funcions elementals"],["check_elemental_function_form_correct_feedback","La resposta és una expressió elemental."],["check_scientific_notation","està expressada en notació científica"],["check_scientific_notation_correct_feedback","La resposta està expressada en notació científica."],["more","Més"],["check_simplified","està simplificada"],["check_simplified_correct_feedback","La resposta està simplificada."],["check_expanded","està expandida"],["check_expanded_correct_feedback","La resposta està expandida."],["check_factorized","està factoritzada"],["check_factorized_correct_feedback","La resposta està factoritzada."],["check_rationalized","està racionalitzada"],["check_rationalized_correct_feedback","La resposta está racionalitzada."],["check_no_common_factor","no té factors comuns"],["check_no_common_factor_correct_feedback","La resposta no té factors comuns."],["check_minimal_radicands","té radicands minimals"],["check_minimal_radicands_correct_feedback","La resposta té els radicands minimals."],["check_divisible","és divisible per"],["check_divisible_correct_feedback","La resposta és divisible per ${value}."],["check_common_denominator","té denominador comú"],["check_common_denominator_correct_feedback","La resposta té denominador comú."],["check_unit","té unitat equivalent a"],["check_unit_correct_feedback","La unitat de resposta és ${unit}."],["check_unit_literal","té unitat literalment igual a"],["check_unit_literal_correct_feedback","La unitat de resposta és ${unit}."],["check_no_more_decimals","té menys decimals o exactament"],["check_no_more_decimals_correct_feedback","La resposta té ${digits} o menys decimals."],["check_no_more_digits","té menys dígits o exactament"],["check_no_more_digits_correct_feedback","La resposta té ${digits} o menys dígits."],["syntax_expression","General"],["syntax_expression_description","(fórmules, expressions, equacions, matrius ...)"],["syntax_expression_correct_feedback","La sintaxi de la resposta és correcta."],["syntax_quantity","Quantitat"],["syntax_quantity_description","(nombres, unitats de mesura, fraccions, fraccions mixtes, raons...)"],["syntax_quantity_correct_feedback","La sintaxi de la resposta és correcta."],["syntax_list","Llista"],["syntax_list_description","(llistes sense coma separadora o parèntesis)"],["syntax_list_correct_feedback","La sintaxi de la resposta és correcta."],["syntax_string","Text"],["syntax_string_description","(paraules, frases, cadenas de caràcters)"],["syntax_string_correct_feedback","La sintaxi de la resposta és correcta."],["none","cap"],["edit","Editar"],["accept","Acceptar"],["cancel","Cancel·lar"],["explog","exp/log"],["trigonometric","trigonomètriques"],["hyperbolic","hiperbòliques"],["arithmetic","aritmètica"],["all","tot"],["tolerance","Tolerància"],["relative","relativa"],["relativetolerance","Tolerància relativa"],["precision","Precisió"],["implicit_times_operator","Ometre producte"],["times_operator","Operador producte"],["imaginary_unit","Unitat imaginària"],["mixedfractions","Fraccions mixtes"],["constants","Constants"],["functions","Funcions"],["userfunctions","Funcions d'usuari"],["units","Unitats"],["unitprefixes","Prefixos d'unitats"],["syntaxparams","Opcions de sintaxi"],["syntaxparams_expression","Opcions per a general"],["syntaxparams_quantity","Opcions per a quantitat"],["syntaxparams_list","Opcions per a llista"],["allowedinput","Entrada permesa"],["manual","Manual"],["correctanswer","Resposta correcta"],["variables","Variables"],["validation","Validació"],["preview","Vista prèvia"],["correctanswertabhelp","Introduïu la resposta correcta utilitzant WIRIS editor. Seleccioneu també el comportament de l'editor de fórmules quan sigui utilitzat per l'estudiant.\n"],["assertionstabhelp","Seleccioneu les propietats que han de complir les respostes d'estudiant. Per exemple, si ha d'estar simplificat, factoritzat, expressat utilitzant unitats físiques o tenir una precisió numèrica específica."],["variablestabhelp","Escriviu un algorisme amb WIRIS CAS per crear variables aleatòries: números, expressions, gràfiques o funcions de qualificació.\nTambé podeu especificar el format de sortida de les variables que es mostren als estudiants.\n"],["testtabhelp","Inserir una possible resposta d'estudiant per simular el comportament de la pregunta. Està utilitzant la mateixa eina que l'estudiant utilitzarà per entrar la resposta.\nObserve que también se pueden probar los criterios de evaluación, el éxito y la retroalimentación automática.\n"],["start","Inici"],["test","Prova"],["clicktesttoevaluate","Feu clic a botó de prova per validar la resposta actual."],["correct","Correcte!"],["incorrect","Incorrecte!"],["partiallycorrect","Parcialment correcte!"],["inputmethod","Mètode d'entrada"],["compoundanswer","Resposta composta"],["answerinputinlineeditor","WIRIS editor incrustat"],["answerinputpopupeditor","WIRIS editor en una finestra emergent"],["answerinputplaintext","Camp d'entrada de text pla"],["showauxiliarcas","Incloure WIRIS CAS"],["initialcascontent","Contingut inicial"],["tolerancedigits","Dígits de tolerància"],["validationandvariables","Validació i variables"],["algorithmlanguage","Idioma de l'algorisme"],["calculatorlanguage","Idioma de la calculadora"],["hasalgorithm","Té algorisme"],["comparison","Comparació"],["properties","Propietats"],["studentanswer","Resposta de l'estudiant"],["poweredbywiris","Powered by WIRIS"],["yourchangeswillbelost","Els seus canvis es perdran si abandona la finestra."],["outputoptions","Opcions de sortida"],["catalan","Català"],["english","English"],["spanish","Español"],["estonian","Eesti"],["basque","Euskara"],["french","Français"],["german","Deutsch"],["italian","Italiano"],["dutch","Nederlands"],["portuguese","Português (Portugal)"],["javaAppletMissing","Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>."],["allanswerscorrect","Totes les respostes han de ser correctes"],["distributegrade","Distribueix la nota"],["no","No"],["add","Afegir"],["replaceeditor","Substitueix l'editor"],["list","Llista"],["questionxml","Question XML"],["grammarurl","Grammar URL"],["reservedwords","Paraules reservades"],["forcebrackets","Les llistes sempre necessiten claus \"{}\"."],["commaasitemseparator","Utilitza la coma \",\" com a separador d'elements de llistes."],["confirmimportdeprecated","Importar la pregunta?\nAquesta pregunta conté característiques obsoletes. El procés d'importació pot canviar lleugerament el comportament de la pregunta. És altament recomanat comprovar cuidadosament la pregunta després de la importació."],["comparesets","Compara com a conjunts"],["nobracketslist","Llistes sense claus"],["warningtoleranceprecision","Hi ha menys dígits de precisió que dígits de tolerància."],["actionimport","Importar"],["actionexport","Exportar"],["usecase","Coincideix majúscules i minúscules"],["usespaces","Coincideix espais"],["notevaluate","Mantén els arguments sense avaluar"],["separators","Separadors"],["comma","Coma"],["commarole","Rol del caràcter coma ','"],["point","Punt"],["pointrole","Rol del caràcter punt '.'"],["space","Espai"],["spacerole","Rol del caràcter espai"],["decimalmark","Decimals"],["digitsgroup","Milers"],["listitems","Elements de llista"],["nothing","Cap"],["intervals","Intervals"],["warningprecision15","La precisió ha de ser entre 1 i 15."],["decimalSeparator","Decimals"],["thousandsSeparator","Milers"],["notation","Notació"],["invisible","Invisible"],["auto","Auto"],["fixedDecimal","Fixa"],["floatingDecimal","Decimal"],["scientific","Científica"],["example","Exemple"],["warningreltolfixedprec","Tolerància relativa amb notació de coma fixa."],["warningabstolfloatprec","Tolerància absoluta amb notació de coma flotant."],["answerinputinlinehand","WIRIS hand incrustat"],["absolutetolerance","Tolerància absoluta"],["clicktoeditalgorithm","Clica el botó per a descarregar i executar l'aplicació WIRIS cas per a editar l'algorisme de la pregunta. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Aprèn-ne més</a>."],["launchwiriscas","Editar algorisme"],["sendinginitialsession","Enviant algorisme inicial."],["waitingforupdates","Esperant actualitzacions."],["sessionclosed","S'han desat tots els canvis."],["gotsession","Canvis desats (revisió ${n})."],["thecorrectansweris","La resposta correcta és"],["poweredby","Creat per"],["refresh","Renova la resposta correcta"],["fillwithcorrect","Omple amb la resposta correcta"],["runcalculator","Executar calculadora"],["clicktoruncalculator","Clica el botó per a descarregar i executar l'aplicació WIRIS cas per a fer els càlculs que necessiti. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Aprèn-ne més</a>."],["answer","resposta"],["lang","it"],["comparisonwithstudentanswer","Confronto con la risposta dello studente"],["otheracceptedanswers","Altre risposte accettate"],["equivalent_literal","Letteralmente uguale"],["equivalent_literal_correct_feedback","La risposta è letteralmente uguale a quella corretta."],["equivalent_symbolic","Matematicamente uguale"],["equivalent_symbolic_correct_feedback","La risposta è matematicamente uguale a quella corretta."],["equivalent_set","Uguale come serie"],["equivalent_set_correct_feedback","La risposta è una serie uguale a quella corretta."],["equivalent_equations","Equazioni equivalenti"],["equivalent_equations_correct_feedback","La risposta ha le stesse soluzioni di quella corretta."],["equivalent_function","Funzione di classificazione"],["equivalent_function_correct_feedback","La risposta è corretta."],["equivalent_all","Qualsiasi risposta"],["any","qualsiasi"],["gradingfunction","Funzione di classificazione"],["additionalproperties","Proprietà aggiuntive"],["structure","Struttura"],["none","nessuno"],["None","Nessuno"],["check_integer_form","corrisponde a un numero intero"],["check_integer_form_correct_feedback","La risposta è un numero intero."],["check_fraction_form","corrisponde a una frazione"],["check_fraction_form_correct_feedback","La risposta è una frazione."],["check_polynomial_form","corrisponde a un polinomio"],["check_polynomial_form_correct_feedback","La risposta è un polinomio."],["check_rational_function_form","corrisponde a una funzione razionale"],["check_rational_function_form_correct_feedback","La risposta è una funzione razionale."],["check_elemental_function_form","è una combinazione di funzioni elementari"],["check_elemental_function_form_correct_feedback","La risposta è un'espressione elementare."],["check_scientific_notation","è espressa in notazione scientifica"],["check_scientific_notation_correct_feedback","La risposta è espressa in notazione scientifica."],["more","Altro"],["check_simplified","è semplificata"],["check_simplified_correct_feedback","La risposta è semplificata."],["check_expanded","è espansa"],["check_expanded_correct_feedback","La risposta è espansa."],["check_factorized","è scomposta in fattori"],["check_factorized_correct_feedback","La risposta è scomposta in fattori."],["check_rationalized","è razionalizzata"],["check_rationalized_correct_feedback","La risposta è razionalizzata."],["check_no_common_factor","non ha fattori comuni"],["check_no_common_factor_correct_feedback","La risposta non ha fattori comuni."],["check_minimal_radicands","ha radicandi minimi"],["check_minimal_radicands_correct_feedback","La risposta contiene radicandi minimi."],["check_divisible","è divisibile per"],["check_divisible_correct_feedback","La risposta è divisibile per ${value}."],["check_common_denominator","ha un solo denominatore comune"],["check_common_denominator_correct_feedback","La risposta ha un solo denominatore comune."],["check_unit","ha un'unità equivalente a"],["check_unit_correct_feedback","La risposta è l'unità ${unit}."],["check_unit_literal","ha un'unità letteralmente uguale a"],["check_unit_literal_correct_feedback","La risposta è l'unità ${unit}."],["check_no_more_decimals","ha un numero inferiore o uguale di decimali rispetto a"],["check_no_more_decimals_correct_feedback","La risposta ha ${digits} o meno decimali."],["check_no_more_digits","ha un numero inferiore o uguale di cifre rispetto a"],["check_no_more_digits_correct_feedback","La risposta ha ${digits} o meno cifre."],["syntax_expression","Generale"],["syntax_expression_description","(formule, espressioni, equazioni, matrici etc.)"],["syntax_expression_correct_feedback","La sintassi della risposta è corretta."],["syntax_quantity","Quantità"],["syntax_quantity_description","(numeri, unità di misura, frazioni, frazioni miste, proporzioni etc.)"],["syntax_quantity_correct_feedback","La sintassi della risposta è corretta."],["syntax_list","Elenco"],["syntax_list_description","(elenchi senza virgola di separazione o parentesi)"],["syntax_list_correct_feedback","La sintassi della risposta è corretta."],["syntax_string","Testo"],["syntax_string_description","(parole, frasi, stringhe di caratteri)"],["syntax_string_correct_feedback","La sintassi della risposta è corretta."],["none","nessuno"],["edit","Modifica"],["accept","Accetta"],["cancel","Annulla"],["explog","esponenziale/logaritmica"],["trigonometric","trigonometrica"],["hyperbolic","iperbolica"],["arithmetic","aritmetica"],["all","tutto"],["tolerance","Tolleranza"],["relative","relativa"],["relativetolerance","Tolleranza relativa"],["precision","Precisione"],["implicit_times_operator","Operatore prodotto non visibile"],["times_operator","Operatore prodotto"],["imaginary_unit","Unità immaginaria"],["mixedfractions","Frazioni miste"],["constants","Costanti"],["functions","Funzioni"],["userfunctions","Funzioni utente"],["units","Unità"],["unitprefixes","Prefissi unità"],["syntaxparams","Opzioni di sintassi"],["syntaxparams_expression","Opzioni per elementi generali"],["syntaxparams_quantity","Opzioni per la quantità"],["syntaxparams_list","Opzioni per elenchi"],["allowedinput","Input consentito"],["manual","Manuale"],["correctanswer","Risposta corretta"],["variables","Variabili"],["validation","Verifica"],["preview","Anteprima"],["correctanswertabhelp","Inserisci la risposta corretta utilizzando l'editor WIRIS. Seleziona anche un comportamento per l'editor di formule se utilizzato dallo studente.\nNon potrai archiviare la risposta se non si tratta di un'espressione valida.\n"],["assertionstabhelp","Seleziona quali proprietà deve verificare la risposta dello studente. Ad esempio, se la risposta deve essere semplificata, scomposta in fattori o espressa in unità fisiche o se ha una precisione numerica specifica."],["variablestabhelp","Scrivi un algoritmo con WIRIS cas per creare variabili casuali: numeri, espressioni, diagrammi o funzioni di classificazione.\nPuoi anche specificare il formato delle variabili mostrate allo studente.\n"],["testtabhelp","Inserisci la risposta di un possibile studente per simulare il comportamento della domanda. Per questa operazione, utilizzi lo stesso strumento che utilizzerà lo studente.\nNota: puoi anche testare i criteri di valutazione, di risposta corretta e il feedback automatico.\n"],["start","Inizio"],["test","Test"],["clicktesttoevaluate","Fai clic sul pulsante Test per verificare la risposta attuale."],["correct","Risposta corretta."],["incorrect","Risposta sbagliata."],["partiallycorrect","Risposta corretta in parte."],["inputmethod","Metodo di input"],["compoundanswer","Risposta composta"],["answerinputinlineeditor","WIRIS editor integrato"],["answerinputpopupeditor","WIRIS editor nella finestra a comparsa"],["answerinputplaintext","Campo di input testo semplice"],["showauxiliarcas","Includi WIRIS cas"],["initialcascontent","Contenuto iniziale"],["tolerancedigits","Cifre di tolleranza"],["validationandvariables","Verifica e variabili"],["algorithmlanguage","Lingua algoritmo"],["calculatorlanguage","Lingua calcolatrice"],["hasalgorithm","Ha l'algoritmo"],["comparison","Confronto"],["properties","Proprietà"],["studentanswer","Risposta dello studente"],["poweredbywiris","Realizzato con WIRIS"],["yourchangeswillbelost","Se chiudi la finestra, le modifiche andranno perse."],["outputoptions","Opzioni risultato"],["catalan","Català"],["english","English"],["spanish","Español"],["estonian","Eesti"],["basque","Euskara"],["french","Français"],["german","Deutsch"],["italian","Italiano"],["dutch","Nederlands"],["portuguese","Português (Portugal)"],["javaAppletMissing","Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>."],["allanswerscorrect","Tutte le risposte devono essere corrette"],["distributegrade","Fornisci voto"],["no","No"],["add","Aggiungi"],["replaceeditor","Sostituisci editor"],["list","Elenco"],["questionxml","XML domanda"],["grammarurl","URL grammatica"],["reservedwords","Parole riservate"],["forcebrackets","Gli elenchi devono sempre contenere le parentesi graffe \"{}\"."],["commaasitemseparator","Utilizza la virgola \",\" per separare gli elementi di un elenco."],["confirmimportdeprecated","Vuoi importare la domanda?\n La domanda che vuoi aprire contiene funzionalità obsolete. Il processo di importazione potrebbe modificare leggermente il comportamento della domanda. Ti consigliamo di controllare attentamente la domanda dopo l'importazione."],["comparesets","Confronta come serie"],["nobracketslist","Elenchi senza parentesi"],["warningtoleranceprecision","Le cifre di precisione sono inferiori a quelle di tolleranza."],["actionimport","Importazione"],["actionexport","Esportazione"],["usecase","Rispetta maiuscole/minuscole"],["usespaces","Rispetta spazi"],["notevaluate","Mantieni argomenti non valutati"],["separators","Separatori"],["comma","Virgola"],["commarole","Ruolo della virgola “,”"],["point","Punto"],["pointrole","Ruolo del punto “.”"],["space","Spazio"],["spacerole","Ruolo dello spazio"],["decimalmark","Cifre decimali"],["digitsgroup","Gruppi di cifre"],["listitems","Elenca elementi"],["nothing","Niente"],["intervals","Intervalli"],["warningprecision15","La precisione deve essere compresa tra 1 e 15."],["decimalSeparator","Decimale"],["thousandsSeparator","Migliaia"],["notation","Notazione"],["invisible","Invisibile"],["auto","Automatico"],["fixedDecimal","Fisso"],["floatingDecimal","Decimale"],["scientific","Scientifica"],["example","Esempio"],["warningreltolfixedprec","Tolleranza relativa con notazione decimale fissa."],["warningabstolfloatprec","Tolleranza assoluta con notazione decimale fluttuante."],["answerinputinlinehand","Applicazione WIRIS hand incorporata"],["absolutetolerance","Tolleranza assoluta"],["clicktoeditalgorithm","Il tuo browser non <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">supporta Java</a>. Fai clic sul pulsante per scaricare ed eseguire l’applicazione WIRIS cas che consente di modificare l’algoritmo della domanda."],["launchwiriscas","Avvia WIRIS cas"],["sendinginitialsession","Invio della sessione iniziale..."],["waitingforupdates","In attesa degli aggiornamenti..."],["sessionclosed","Comunicazione chiusa."],["gotsession","Ricevuta revisione ${n}."],["thecorrectansweris","La risposta corretta è"],["poweredby","Offerto da"],["refresh","Rinnova la risposta corretta"],["fillwithcorrect","Inserisci la risposta corretta"],["runcalculator","Run calculator"],["clicktoruncalculator","Click the button to download and run WIRIS cas application to make the calculations you need. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Learn more</a>."],["answer","answer"],["lang","fr"],["comparisonwithstudentanswer","Comparaison avec la réponse de l'étudiant"],["otheracceptedanswers","Autres réponses acceptées"],["equivalent_literal","Strictement égal"],["equivalent_literal_correct_feedback","La réponse est strictement égale à la bonne réponse."],["equivalent_symbolic","Mathématiquement égal"],["equivalent_symbolic_correct_feedback","La réponse est mathématiquement égale à la bonne réponse."],["equivalent_set","Égal en tant qu'ensembles"],["equivalent_set_correct_feedback","L'ensemble de réponses est égal à la bonne réponse."],["equivalent_equations","Équations équivalentes"],["equivalent_equations_correct_feedback","La réponse partage les mêmes solutions que la bonne réponse."],["equivalent_function","Fonction de gradation"],["equivalent_function_correct_feedback","C'est la bonne réponse."],["equivalent_all","N'importe quelle réponse"],["any","quelconque"],["gradingfunction","Fonction de gradation"],["additionalproperties","Propriétés supplémentaires"],["structure","Structure"],["none","aucune"],["None","Aucune"],["check_integer_form","a la forme d'un entier."],["check_integer_form_correct_feedback","La réponse est un nombre entier."],["check_fraction_form","a la forme d'une fraction"],["check_fraction_form_correct_feedback","La réponse est une fraction."],["check_polynomial_form","a la forme d'un polynôme"],["check_polynomial_form_correct_feedback","La réponse est un polynôme."],["check_rational_function_form","a la forme d'une fonction rationnelle"],["check_rational_function_form_correct_feedback","La réponse est une fonction rationnelle."],["check_elemental_function_form","est une combinaison de fonctions élémentaires"],["check_elemental_function_form_correct_feedback","La réponse est une expression élémentaire."],["check_scientific_notation","est exprimé en notation scientifique"],["check_scientific_notation_correct_feedback","La réponse est exprimée en notation scientifique."],["more","Plus"],["check_simplified","est simplifié"],["check_simplified_correct_feedback","La réponse est simplifiée."],["check_expanded","est développé"],["check_expanded_correct_feedback","La réponse est développée."],["check_factorized","est factorisé"],["check_factorized_correct_feedback","La réponse est factorisée."],["check_rationalized"," : rationalisé"],["check_rationalized_correct_feedback","La réponse est rationalisée."],["check_no_common_factor","n'a pas de facteurs communs"],["check_no_common_factor_correct_feedback","La réponse n'a pas de facteurs communs."],["check_minimal_radicands","a des radicandes minimaux"],["check_minimal_radicands_correct_feedback","La réponse a des radicandes minimaux."],["check_divisible","est divisible par"],["check_divisible_correct_feedback","La réponse est divisible par ${value}."],["check_common_denominator","a un seul dénominateur commun"],["check_common_denominator_correct_feedback","La réponse inclut un seul dénominateur commun."],["check_unit","inclut une unité équivalente à"],["check_unit_correct_feedback","La bonne unité est ${unit}."],["check_unit_literal","a une unité strictement égale à"],["check_unit_literal_correct_feedback","La bonne unité est ${unit}."],["check_no_more_decimals","a le même nombre ou moins de décimales que"],["check_no_more_decimals_correct_feedback","La réponse inclut au plus ${digits} décimales."],["check_no_more_digits","a le même nombre ou moins de chiffres que"],["check_no_more_digits_correct_feedback","La réponse inclut au plus ${digits} chiffres."],["syntax_expression","Général"],["syntax_expression_description","(formules, expressions, équations, matrices…)"],["syntax_expression_correct_feedback","La syntaxe de la réponse est correcte."],["syntax_quantity","Quantité"],["syntax_quantity_description","(nombres, unités de mesure, fractions, fractions mixtes, proportions…)"],["syntax_quantity_correct_feedback","La syntaxe de la réponse est correcte."],["syntax_list","Liste"],["syntax_list_description","(listes sans virgule ou crochets de séparation)"],["syntax_list_correct_feedback","La syntaxe de la réponse est correcte."],["syntax_string","Texte"],["syntax_string_description","(mots, phrases, suites de caractères)"],["syntax_string_correct_feedback","La syntaxe de la réponse est correcte."],["none","aucune"],["edit","Modifier"],["accept","Accepter"],["cancel","Annuler"],["explog","exp/log"],["trigonometric","trigonométrique"],["hyperbolic","hyperbolique"],["arithmetic","arithmétique"],["all","toutes"],["tolerance","Tolérance"],["relative","relative"],["relativetolerance","Tolérance relative"],["precision","Précision"],["implicit_times_operator","Opérateur de multiplication invisible"],["times_operator","Opérateur de multiplication"],["imaginary_unit","Unité imaginaire"],["mixedfractions","Fractions mixtes"],["constants","Constantes"],["functions","Fonctions"],["userfunctions","Fonctions personnalisées"],["units","Unités"],["unitprefixes","Préfixes d'unité"],["syntaxparams","Options de syntaxe"],["syntaxparams_expression","Options générales"],["syntaxparams_quantity","Options de quantité"],["syntaxparams_list","Options de liste"],["allowedinput","Entrée autorisée"],["manual","Manuel"],["correctanswer","Bonne réponse"],["variables","Variables"],["validation","Validation"],["preview","Aperçu"],["correctanswertabhelp","Insérer la bonne réponse à l'aide du WIRIS Editor. Sélectionner aussi le comportement de l'éditeur de formule lorsque l'étudiant y fait appel.\n"],["assertionstabhelp","Sélectionner les propriétés que la réponse de l'étudiant doit satisfaire. Par exemple, si elle doit être simplifiée, factorisée, exprimée dans une unité physique ou présenter une précision chiffrée spécifique."],["variablestabhelp","Écrire un algorithme à l'aide de WIRIS CAS pour créer des variables aléatoires : des nombres, des expressions, des courbes ou une fonction de gradation. \nVous pouvez aussi spécifier un format des variables pour l'affichage à l'étudiant.\n"],["testtabhelp","Insérer une réponse possible de l'étudiant afin de simuler le comportement de la question. Vous utilisez le même outil que l'étudiant. \nNotez que vous pouvez aussi tester le critère d'évaluation, de réussite et les commentaires automatiques.\n"],["start","Démarrer"],["test","Tester"],["clicktesttoevaluate","Cliquer sur le bouton Test pour valider la réponse actuelle."],["correct","Correct !"],["incorrect","Incorrect !"],["partiallycorrect","Partiellement correct !"],["inputmethod","Méthode de saisie"],["compoundanswer","Réponse composée"],["answerinputinlineeditor","WIRIS Editor intégré"],["answerinputpopupeditor","WIRIS Editor dans une fenêtre"],["answerinputplaintext","Champ de saisie de texte brut"],["showauxiliarcas","Inclure WIRIS CAS"],["initialcascontent","Contenu initial"],["tolerancedigits","Tolérance en chiffres"],["validationandvariables","Validation et variables"],["algorithmlanguage","Langage d'algorithme"],["calculatorlanguage","Langage de calcul"],["hasalgorithm","Possède un algorithme"],["comparison","Comparaison"],["properties","Propriétés"],["studentanswer","Réponse de l'étudiant"],["poweredbywiris","Développé par WIRIS"],["yourchangeswillbelost","Vous perdrez vos modifications si vous fermez la fenêtre."],["outputoptions","Options de sortie"],["catalan","Català"],["english","English"],["spanish","Español"],["estonian","Eesti"],["basque","Euskara"],["french","Français"],["german","Deutsch"],["italian","Italiano"],["dutch","Nederlands"],["portuguese","Português (Portugal)"],["javaAppletMissing","Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>."],["allanswerscorrect","Toutes les réponses doivent être correctes"],["distributegrade","Degré de distribution"],["no","Non"],["add","Ajouter"],["replaceeditor","Remplacer l'éditeur"],["list","Liste"],["questionxml","Question XML"],["grammarurl","URL de la grammaire"],["reservedwords","Mots réservés"],["forcebrackets","Les listes requièrent l'utilisation d'accolades « {} »."],["commaasitemseparator","Utiliser une virgule « , » comme séparateur d'éléments de liste."],["confirmimportdeprecated","Importer la question ? \nLa question que vous êtes sur le point d'ouvrir contient des fonctionnalités obsolètes. Il se peut que la procédure d'importation modifie légèrement le comportement de la question. Il est fortement recommandé de tester attentivement la question après l'importation."],["comparesets","Comparer en tant qu'ensembles"],["nobracketslist","Listes sans crochets"],["warningtoleranceprecision","Moins de chiffres pour la précision que pour la tolérance."],["actionimport","Importer"],["actionexport","Exporter"],["usecase","Respecter la casse"],["usespaces","Respecter les espaces"],["notevaluate","Conserver les arguments non évalués"],["separators","Séparateurs"],["comma","Virgule"],["commarole","Rôle du signe virgule « , »"],["point","Point"],["pointrole","Rôle du signe point « . »"],["space","Espace"],["spacerole","Rôle du signe espace"],["decimalmark","Chiffres après la virgule"],["digitsgroup","Groupes de chiffres"],["listitems","Éléments de liste"],["nothing","Rien"],["intervals","Intervalles"],["warningprecision15","La précision doit être entre 1 et 15."],["decimalSeparator","Virgule"],["thousandsSeparator","Milliers"],["notation","Notation"],["invisible","Invisible"],["auto","Auto."],["fixedDecimal","Fixe"],["floatingDecimal","Décimale"],["scientific","Scientifique"],["example","Exemple"],["warningreltolfixedprec","Tolérance relative avec la notation en mode virgule fixe."],["warningabstolfloatprec","Tolérance absolue avec la notation en mode virgule flottante."],["answerinputinlinehand","WIRIS écriture manuscrite intégrée"],["absolutetolerance","Tolérance absolue"],["clicktoeditalgorithm","Votre navigateur ne prend <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">pas en charge Java</a>. Cliquez sur le bouton pour télécharger et exécuter l’application WIRIS CAS et modifier l’algorithme de votre question."],["launchwiriscas","Lancer WIRIS CAS"],["sendinginitialsession","Envoi de la session de départ…"],["waitingforupdates","Attente des actualisations…"],["sessionclosed","Transmission fermée."],["gotsession","Révision reçue ${n}."],["thecorrectansweris","La bonne réponse est"],["poweredby","Basé sur"],["refresh","Confirmer la réponse correcte"],["fillwithcorrect","Remplir avec la réponse correcte"],["runcalculator","Run calculator"],["clicktoruncalculator","Click the button to download and run WIRIS cas application to make the calculations you need. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Learn more</a>."],["answer","answer"],["lang","de"],["comparisonwithstudentanswer","Vergleich mit Schülerantwort"],["otheracceptedanswers","Weitere akzeptierte Antworten"],["equivalent_literal","Im Wortsinn äquivalent"],["equivalent_literal_correct_feedback","Die Antwort ist im Wortsinn äquivalent zur richtigen."],["equivalent_symbolic","Mathematisch äquivalent"],["equivalent_symbolic_correct_feedback","Die Antwort ist mathematisch äquivalent zur richtigen Antwort."],["equivalent_set","Äquivalent als Sätze"],["equivalent_set_correct_feedback","Der Fragensatz ist äquivalent zum richtigen."],["equivalent_equations","Äquivalente Gleichungen"],["equivalent_equations_correct_feedback","Die Antwort hat die gleichen Lösungen wie die richtige."],["equivalent_function","Benotungsfunktion"],["equivalent_function_correct_feedback","Die Antwort ist richtig."],["equivalent_all","Jede Antwort"],["any","Irgendeine"],["gradingfunction","Benotungsfunktion"],["additionalproperties","Zusätzliche Eigenschaften"],["structure","Struktur"],["none","Keine"],["None","Keine"],["check_integer_form","hat Form einer ganzen Zahl"],["check_integer_form_correct_feedback","Die Antwort ist eine ganze Zahl."],["check_fraction_form","hat Form einer Bruchzahl"],["check_fraction_form_correct_feedback","Die Antwort ist eine Bruchzahl."],["check_polynomial_form","hat Form eines Polynoms"],["check_polynomial_form_correct_feedback","Die Antwort ist ein Polynom."],["check_rational_function_form","hat Form einer rationalen Funktion"],["check_rational_function_form_correct_feedback","Die Antwort ist eine rationale Funktion."],["check_elemental_function_form","ist eine Kombination aus elementaren Funktionen"],["check_elemental_function_form_correct_feedback","Die Antwort ist ein elementarer Ausdruck."],["check_scientific_notation","ist in wissenschaftlicher Schreibweise ausgedrückt"],["check_scientific_notation_correct_feedback","Die Antwort ist in wissenschaftlicher Schreibweise ausgedrückt."],["more","Mehr"],["check_simplified","ist vereinfacht"],["check_simplified_correct_feedback","Die Antwort ist vereinfacht."],["check_expanded","ist erweitert"],["check_expanded_correct_feedback","Die Antwort ist erweitert."],["check_factorized","ist faktorisiert"],["check_factorized_correct_feedback","Die Antwort ist faktorisiert."],["check_rationalized","ist rationalisiert"],["check_rationalized_correct_feedback","Die Antwort ist rationalisiert."],["check_no_common_factor","hat keine gemeinsamen Faktoren"],["check_no_common_factor_correct_feedback","Die Antwort hat keine gemeinsamen Faktoren."],["check_minimal_radicands","weist minimale Radikanden auf"],["check_minimal_radicands_correct_feedback","Die Antwort weist minimale Radikanden auf."],["check_divisible","ist teilbar durch"],["check_divisible_correct_feedback","Die Antwort ist teilbar durch ${value}."],["check_common_denominator","hat einen einzigen gemeinsamen Nenner"],["check_common_denominator_correct_feedback","Die Antwort hat einen einzigen gemeinsamen Nenner."],["check_unit","hat äquivalente Einheit zu"],["check_unit_correct_feedback","Die Einheit der Antwort ist ${unit}."],["check_unit_literal","hat Einheit im Wortsinn äquivalent zu"],["check_unit_literal_correct_feedback","Die Einheit der Antwort ist ${unit}."],["check_no_more_decimals","hat weniger als oder gleich viele Dezimalstellen wie"],["check_no_more_decimals_correct_feedback","Die Antwort hat ${digits} oder weniger Dezimalstellen."],["check_no_more_digits","hat weniger oder gleich viele Stellen wie"],["check_no_more_digits_correct_feedback","Die Antwort hat ${digits} oder weniger Stellen."],["syntax_expression","Allgemein"],["syntax_expression_description","(Formeln, Ausdrücke, Gleichungen, Matrizen ...)"],["syntax_expression_correct_feedback","Die Syntax der Antwort ist richtig."],["syntax_quantity","Menge"],["syntax_quantity_description","(Zahlen, Maßeinheiten, Brüche, gemischte Brüche, Verhältnisse ...)"],["syntax_quantity_correct_feedback","Die Syntax der Antwort ist richtig."],["syntax_list","Liste"],["syntax_list_description","(Listen ohne Komma als Trennzeichen oder Klammern)"],["syntax_list_correct_feedback","Die Syntax der Antwort ist richtig."],["syntax_string","Text"],["syntax_string_description","(Wörter, Sätze, Zeichenketten)"],["syntax_string_correct_feedback","Die Syntax der Antwort ist richtig."],["none","Keine"],["edit","Bearbeiten"],["accept","Akzeptieren"],["cancel","Abbrechen"],["explog","exp/log"],["trigonometric","Trigonometrische"],["hyperbolic","Hyperbolische"],["arithmetic","Arithmetische"],["all","Alle"],["tolerance","Toleranz"],["relative","Relative"],["relativetolerance","Relative Toleranz"],["precision","Genauigkeit"],["implicit_times_operator","Unsichtbares Multiplikationszeichen"],["times_operator","Multiplikationszeichen"],["imaginary_unit","Imaginäre Einheit"],["mixedfractions","Gemischte Brüche"],["constants","Konstanten"],["functions","Funktionen"],["userfunctions","Nutzerfunktionen"],["units","Einheiten"],["unitprefixes","Einheitenpräfixe"],["syntaxparams","Syntaxoptionen"],["syntaxparams_expression","Optionen für Allgemein"],["syntaxparams_quantity","Optionen für Menge"],["syntaxparams_list","Optionen für Liste"],["allowedinput","Zulässige Eingabe"],["manual","Anleitung"],["correctanswer","Richtige Antwort"],["variables","Variablen"],["validation","Validierung"],["preview","Vorschau"],["correctanswertabhelp","Geben Sie die richtige Antwort unter Verwendung des WIRIS editors ein. Wählen Sie auch die Verhaltensweise des Formel-Editors, wenn er vom Schüler verwendet wird.\n"],["assertionstabhelp","Wählen Sie die Eigenschaften, welche die Schülerantwort erfüllen muss: Ob Sie zum Beispiel vereinfacht, faktorisiert, durch physikalische Einheiten ausgedrückt werden oder eine bestimmte numerische Genauigkeit aufweisen soll."],["variablestabhelp","Schreiben Sie einen Algorithmus mit WIRIS cas, um zufällige Variablen zu erstellen: Zahlen, Ausdrücke, grafische Darstellungen oder eine Benotungsfunktion. Sie können auch das Ausgabeformat bestimmen, in welchem die Variablen dem Schüler angezeigt werden.\n"],["testtabhelp","Geben Sie eine mögliche Schülerantwort ein, um die Verhaltensweise der Frage zu simulieren. Sie verwenden das gleiche Tool, das der Schüler verwenden wird. Beachten Sie bitte, dass Sie auch die Bewertungskriterien, den Erfolg und das automatische Feedback testen können.\n"],["start","Start"],["test","Testen"],["clicktesttoevaluate","Klicken Sie auf die Schaltfläche „Testen“, um die aktuelle Antwort zu validieren."],["correct","Richtig!"],["incorrect","Falsch!"],["partiallycorrect","Teilweise richtig!"],["inputmethod","Eingabemethode"],["compoundanswer","Zusammengesetzte Antwort"],["answerinputinlineeditor","WIRIS editor eingebettet"],["answerinputpopupeditor","WIRIS editor in Popup"],["answerinputplaintext","Eingabefeld mit reinem Text"],["showauxiliarcas","WIRIS cas einbeziehen"],["initialcascontent","Anfangsinhalt"],["tolerancedigits","Toleranzstellen"],["validationandvariables","Validierung und Variablen"],["algorithmlanguage","Algorithmussprache"],["calculatorlanguage","Sprache des Rechners"],["hasalgorithm","Hat Algorithmus"],["comparison","Vergleich"],["properties","Eigenschaften"],["studentanswer","Schülerantwort"],["poweredbywiris","Powered by WIRIS"],["yourchangeswillbelost","Bei Verlassen des Fensters gehen Ihre Änderungen verloren."],["outputoptions","Ausgabeoptionen"],["catalan","Català"],["english","English"],["spanish","Español"],["estonian","Eesti"],["basque","Euskara"],["french","Français"],["german","Deutsch"],["italian","Italiano"],["dutch","Nederlands"],["portuguese","Português (Portugal)"],["javaAppletMissing","Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>."],["allanswerscorrect","Alle Antworten müssen richtig sein."],["distributegrade","Note zuweisen"],["no","Nein"],["add","Hinzufügen"],["replaceeditor","Editor ersetzen"],["list","Liste"],["questionxml","Frage-XML"],["grammarurl","Grammatik-URL"],["reservedwords","Reservierte Wörter"],["forcebrackets","Listen benötigen immer geschweifte Klammern „{}“."],["commaasitemseparator","Verwenden Sie ein Komma „,“ zur Trennung von Listenelementen."],["confirmimportdeprecated","Frage importieren? Die Frage, die Sie öffnen möchten, beinhaltet veraltete Merkmale. Durch den Importvorgang kann die Verhaltensweise der Frage leicht verändert werden. Es wird dringend empfohlen, die Frage nach dem Importieren gründlich zu überprüfen."],["comparesets","Als Mengen vergleichen"],["nobracketslist","Listen ohne Klammern"],["warningtoleranceprecision","Weniger Genauigkeitstellen als Toleranzstellen."],["actionimport","Importieren"],["actionexport","Exportieren"],["usecase","Schreibung anpassen"],["usespaces","Abstände anpassen"],["notevaluate","Argumente unausgewertet lassen"],["separators","Trennzeichen"],["comma","Komma"],["commarole","Funktion des Kommazeichens „,“"],["point","Punkt"],["pointrole","Funktion des Punktzeichens „.“"],["space","Leerzeichen"],["spacerole","Funktion des Leerzeichens"],["decimalmark","Dezimalstellen"],["digitsgroup","Zahlengruppen"],["listitems","Listenelemente"],["nothing","Nichts"],["intervals","Intervalle"],["warningprecision15","Die Präzision muss zwischen 1 und 15 liegen."],["decimalSeparator","Dezimalstelle"],["thousandsSeparator","Tausender"],["notation","Notation"],["invisible","Unsichtbar"],["auto","Automatisch"],["fixedDecimal","Feste"],["floatingDecimal","Dezimalstelle"],["scientific","Wissenschaftlich"],["example","Beispiel"],["warningreltolfixedprec","Relative Toleranz mit fester Dezimalnotation."],["warningabstolfloatprec","Absolute Toleranz mit fließender Dezimalnotation."],["answerinputinlinehand","WIRIS hand eingebettet"],["absolutetolerance","Absolute Toleranz"],["clicktoeditalgorithm","Ihr Browser <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">unterstützt kein Java</a>. Klicken Sie auf die Schaltfläche, um die Anwendung WIRIS cas herunterzuladen und auszuführen. Mit dieser können Sie den Fragen-Algorithmus bearbeiten."],["launchwiriscas","WIRIS cas starten"],["sendinginitialsession","Ursprüngliche Sitzung senden ..."],["waitingforupdates","Auf Updates warten ..."],["sessionclosed","Kommunikation geschlossen."],["gotsession","Empfangene Überarbeitung ${n}."],["thecorrectansweris","Die richtige Antwort ist"],["poweredby","Angetrieben durch "],["refresh","Korrekte Antwort erneuern"],["fillwithcorrect","Mit korrekter Antwort ausfüllen"],["runcalculator","Run calculator"],["clicktoruncalculator","Click the button to download and run WIRIS cas application to make the calculations you need. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Learn more</a>."],["answer","answer"],["lang","el"],["comparisonwithstudentanswer","Σύγκριση με απάντηση μαθητή"],["otheracceptedanswers","Άλλες αποδεκτές απαντήσεις"],["equivalent_literal","Κυριολεκτικά ίση"],["equivalent_literal_correct_feedback","Η απάντηση είναι κυριολεκτικά ίση με τη σωστή."],["equivalent_symbolic","Μαθηματικά ίση"],["equivalent_symbolic_correct_feedback","Η απάντηση είναι μαθηματικά ίση με τη σωστή."],["equivalent_set","Ίσα σύνολα"],["equivalent_set_correct_feedback","Το σύνολο της απάντησης είναι ίσο με το σωστό."],["equivalent_equations","Ισοδύναμες εξισώσεις"],["equivalent_equations_correct_feedback","Η απάντηση έχει τις ίδιες λύσεις με τη σωστή."],["equivalent_function","Συνάρτηση βαθμολόγησης"],["equivalent_function_correct_feedback","Η απάντηση είναι σωστή."],["equivalent_all","Οποιαδήποτε απάντηση"],["any","οποιαδήποτε"],["gradingfunction","Συνάρτηση βαθμολόγησης"],["additionalproperties","Πρόσθετες ιδιότητες"],["structure","Δομή"],["none","καμία"],["None","Καμία"],["check_integer_form","έχει μορφή ακέραιου"],["check_integer_form_correct_feedback","Η απάντηση είναι ένας ακέραιος."],["check_fraction_form","έχει μορφή κλάσματος"],["check_fraction_form_correct_feedback","Η απάντηση είναι ένα κλάσμα."],["check_polynomial_form","έχει πολυωνυμική μορφή"],["check_polynomial_form_correct_feedback","Η απάντηση είναι ένα πολυώνυμο."],["check_rational_function_form","έχει μορφή λογικής συνάρτησης"],["check_rational_function_form_correct_feedback","Η απάντηση είναι μια λογική συνάρτηση."],["check_elemental_function_form","είναι συνδυασμός στοιχειωδών συναρτήσεων"],["check_elemental_function_form_correct_feedback","Η απάντηση είναι μια στοιχειώδης έκφραση."],["check_scientific_notation","εκφράζεται με επιστημονική σημειογραφία"],["check_scientific_notation_correct_feedback","Η απάντηση εκφράζεται με επιστημονική σημειογραφία."],["more","Περισσότερες"],["check_simplified","είναι απλοποιημένη"],["check_simplified_correct_feedback","Η απάντηση είναι απλοποιημένη."],["check_expanded","είναι ανεπτυγμένη"],["check_expanded_correct_feedback","Η απάντηση είναι ανεπτυγμένη."],["check_factorized","είναι παραγοντοποιημένη"],["check_factorized_correct_feedback","Η απάντηση είναι παραγοντοποιημένη."],["check_rationalized","είναι αιτιολογημένη"],["check_rationalized_correct_feedback","Η απάντηση είναι αιτιολογημένη."],["check_no_common_factor","δεν έχει κοινούς συντελεστές"],["check_no_common_factor_correct_feedback","Η απάντηση δεν έχει κοινούς συντελεστές."],["check_minimal_radicands","έχει ελάχιστα υπόρριζα"],["check_minimal_radicands_correct_feedback","Η απάντηση έχει ελάχιστα υπόρριζα."],["check_divisible","διαιρείται με το"],["check_divisible_correct_feedback","Η απάντηση διαιρείται με το ${value}."],["check_common_denominator","έχει έναν κοινό παρονομαστή"],["check_common_denominator_correct_feedback","Η απάντηση έχει έναν κοινό παρονομαστή."],["check_unit","έχει μονάδα ισοδύναμη με"],["check_unit_correct_feedback","Η μονάδα της απάντηση είναι ${unit}."],["check_unit_literal","έχει μονάδα κυριολεκτικά ίση με"],["check_unit_literal_correct_feedback","Η μονάδα της απάντηση είναι ${unit}."],["check_no_more_decimals","έχει λιγότερα ή ίσα δεκαδικά του"],["check_no_more_decimals_correct_feedback","Η απάντηση έχει ${digits} ή λιγότερα δεκαδικά."],["check_no_more_digits","έχει λιγότερα ή ίσα ψηφία του"],["check_no_more_digits_correct_feedback","Η απάντηση έχει ${digits} ή λιγότερα ψηφία."],["syntax_expression","Γενικά"],["syntax_expression_description","(τύποι, εκφράσεις, εξισώσεις, μήτρες...)"],["syntax_expression_correct_feedback","Η σύνταξη της απάντησης είναι σωστή."],["syntax_quantity","Ποσότητα"],["syntax_quantity_description","(αριθμοί, μονάδες μέτρησης, κλάσματα, μικτά κλάσματα, αναλογίες,...)"],["syntax_quantity_correct_feedback","Η σύνταξη της απάντησης είναι σωστή."],["syntax_list","Λίστα"],["syntax_list_description","(λίστες χωρίς διαχωριστικό κόμμα ή παρενθέσεις)"],["syntax_list_correct_feedback","Η σύνταξη της απάντησης είναι σωστή."],["syntax_string","Κείμενο"],["syntax_string_description","(λέξεις, προτάσεις, συμβολοσειρές χαρακτήρων)"],["syntax_string_correct_feedback","Η σύνταξη της απάντησης είναι σωστή."],["none","καμία"],["edit","Επεξεργασία"],["accept","ΟΚ"],["cancel","Άκυρο"],["explog","exp/log"],["trigonometric","τριγωνομετρική"],["hyperbolic","υπερβολική"],["arithmetic","αριθμητική"],["all","όλες"],["tolerance","Ανοχή"],["relative","σχετική"],["relativetolerance","Σχετική ανοχή"],["precision","Ακρίβεια"],["implicit_times_operator","Μη ορατός τελεστής επί"],["times_operator","Τελεστής επί"],["imaginary_unit","Φανταστική μονάδα"],["mixedfractions","Μικτά κλάσματα"],["constants","Σταθερές"],["functions","Συναρτήσεις"],["userfunctions","Συναρτήσεις χρήστη"],["units","Μονάδες"],["unitprefixes","Προθέματα μονάδων"],["syntaxparams","Επιλογές σύνταξης"],["syntaxparams_expression","Επιλογές για γενικά"],["syntaxparams_quantity","Επιλογές για ποσότητα"],["syntaxparams_list","Επιλογές για λίστα"],["allowedinput","Επιτρεπόμενο στοιχείο εισόδου"],["manual","Εγχειρίδιο"],["correctanswer","Σωστή απάντηση"],["variables","Μεταβλητές"],["validation","Επικύρωση"],["preview","Προεπισκόπηση"],["correctanswertabhelp","Εισαγάγετε τη σωστή απάντηση χρησιμοποιώντας τον επεξεργαστή WIRIS. Επιλέξτε επίσης τη συμπεριφορά για τον επεξεργαστή τύπων, όταν χρησιμοποιείται από τον μαθητή."],["assertionstabhelp","Επιλέξτε τις ιδιότητες που πρέπει να ικανοποιεί η απάντηση του μαθητή. Για παράδειγμα, εάν πρέπει να είναι απλοποιημένη, παραγοντοποιημένη, εκφρασμένη σε φυσικές μονάδες ή να έχει συγκεκριμένη αριθμητική ακρίβεια."],["variablestabhelp","Γράψτε έναν αλγόριθμο με το WIRIS cas για να δημιουργήσετε τυχαίες μεταβλητές: αριθμούς, εκφράσεις, σχεδιαγράμματα ή μια συνάρτηση βαθμολόγησης. Μπορείτε επίσης να καθορίσετε τη μορφή εξόδου των μεταβλητών που θα εμφανίζονται στον μαθητή."],["testtabhelp","Εισαγάγετε μια πιθανή απάντηση του μαθητή για να προσομοιώσετε τη συμπεριφορά της ερώτησης. Χρησιμοποιείτε το ίδιο εργαλείο με αυτό που θα χρησιμοποιήσει ο μαθητής. Σημειώνεται ότι μπορείτε επίσης να ελέγξετε τα κριτήρια αξιολόγησης, την επιτυχία και τα αυτόματα σχόλια."],["start","Έναρξη"],["test","Δοκιμή"],["clicktesttoevaluate","Κάντε κλικ στο κουμπί «Δοκιμή» για να επικυρώσετε τη σωστή απάντηση."],["correct","Σωστό!"],["incorrect","Λάθος!"],["partiallycorrect","Εν μέρει σωστό!"],["inputmethod","Μέθοδος εισόδου"],["compoundanswer","Σύνθετη απάντηση"],["answerinputinlineeditor","Επεξεργαστής WIRIS ενσωματωμένος"],["answerinputpopupeditor","Επεξεργαστής WIRIS σε αναδυόμενο πλαίσιο"],["answerinputplaintext","Πεδίο εισόδου απλού κειμένου"],["showauxiliarcas","Συμπερίληψη WIRIS cas"],["initialcascontent","Αρχικό περιεχόμενο"],["tolerancedigits","Ψηφία ανοχής"],["validationandvariables","Επικύρωση και μεταβλητές"],["algorithmlanguage","Γλώσσα αλγόριθμου"],["calculatorlanguage","Γλώσσα υπολογιστή"],["hasalgorithm","Έχει αλγόριθμο"],["comparison","Σύγκριση"],["properties","Ιδιότητες"],["studentanswer","Απάντηση μαθητή"],["poweredbywiris","Παρέχεται από τη WIRIS"],["yourchangeswillbelost","Οι αλλαγές σας θα χαθούν εάν αποχωρήσετε από το παράθυρο."],["outputoptions","Επιλογές εξόδου"],["catalan","Català"],["english","English"],["spanish","Español"],["estonian","Eesti"],["basque","Euskara"],["french","Français"],["german","Deutsch"],["italian","Italiano"],["dutch","Nederlands"],["portuguese","Português (Portugal)"],["javaAppletMissing","Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>."],["allanswerscorrect","Όλες οι απαντήσεις πρέπει να είναι σωστές"],["distributegrade","Κατανομή βαθμών"],["no","Όχι"],["add","Προσθήκη"],["replaceeditor","Αντικατάσταση επεξεργαστή"],["list","Λίστα"],["questionxml","XML ερώτησης"],["grammarurl","URL γραμματικής"],["reservedwords","Ανεστραμμένες λέξεις"],["forcebrackets","Για τις λίστες χρειάζονται πάντα άγκιστρα «{}»."],["commaasitemseparator","Χρησιμοποιήστε το κόμμα «,» ως διαχωριστικό στοιχείων λίστας."],["confirmimportdeprecated","Εισαγωγή της ερώτησης; Η ερώτηση που πρόκειται να ανοίξετε περιέχει δυνατότητες που έχουν καταργηθεί. Η διαδικασία εισαγωγής μπορεί να αλλάξει λίγο τη συμπεριφορά της ερώτησης. Θα πρέπει να εξετάσετε προσεκτικά την ερώτηση μετά από την εισαγωγή της."],["comparesets","Σύγκριση ως συνόλων"],["nobracketslist","Λίστες χωρίς άγκιστρα"],["warningtoleranceprecision","Λιγότερα ψηφία ακρίβειας από τα ψηφία ανοχής."],["actionimport","Εισαγωγή"],["actionexport","Εξαγωγή"],["usecase","Συμφωνία πεζών-κεφαλαίων"],["usespaces","Συμφωνία διαστημάτων"],["notevaluate","Διατήρηση των ορισμάτων χωρίς αξιολόγηση"],["separators","Διαχωριστικά"],["comma","Κόμμα"],["commarole","Ρόλος του χαρακτήρα «,» (κόμμα)"],["point","Τελεία"],["pointrole","Ρόλος του χαρακτήρα «.» (τελεία)"],["space","Διάστημα"],["spacerole","Ρόλος του χαρακτήρα διαστήματος"],["decimalmark","Δεκαδικά ψηφία"],["digitsgroup","Ομάδες ψηφίων"],["listitems","Στοιχεία λίστας"],["nothing","Τίποτα"],["intervals","Διαστήματα"],["warningprecision15","Η ακρίβεια πρέπει να είναι μεταξύ 1 και 15."],["decimalSeparator","Δεκαδικό"],["thousandsSeparator","Χιλιάδες"],["notation","Σημειογραφία"],["invisible","Μη ορατό"],["auto","Αυτόματα"],["fixedDecimal","Σταθερό"],["floatingDecimal","Δεκαδικό"],["scientific","Επιστημονικό"],["example","Παράδειγμα"],["warningreltolfixedprec","Σχετική ανοχή με σημειογραφία σταθερής υποδιαστολής."],["warningabstolfloatprec","Απόλυτη ανοχή με σημειογραφία κινητής υποδιαστολής."],["answerinputinlinehand","WIRIS ενσωματωμένο"],["absolutetolerance","Απόλυτη ανοχή"],["clicktoeditalgorithm","Το πρόγραμμα περιήγησης που χρησιμοποιείτε δεν <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">υποστηρίζει Java</a>. Κάντε κλικ στο κουμπί για τη λήψη και την εκτέλεση της εφαρμογής WIRIS cas για επεξεργασία του αλγόριθμου ερώτησης."],["launchwiriscas","Εκκίνηση του WIRIS cas"],["sendinginitialsession","Αποστολή αρχικής περιόδου σύνδεσης..."],["waitingforupdates","Αναμονή για ενημερώσεις..."],["sessionclosed","Η επικοινωνία έκλεισε."],["gotsession","Λήφθηκε αναθεώρηση ${n}."],["thecorrectansweris","Η σωστή απάντηση είναι"],["poweredby","Με την υποστήριξη της"],["refresh","Ανανέωση της σωστής απάντησης"],["fillwithcorrect","Συμπλήρωση με τη σωστή απάντηση"],["runcalculator","Run calculator"],["clicktoruncalculator","Click the button to download and run WIRIS cas application to make the calculations you need. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Learn more</a>."],["answer","answer"],["lang","pt_br"],["comparisonwithstudentanswer","Comparação com a resposta do aluno"],["otheracceptedanswers","Outras respostas aceitas"],["equivalent_literal","Literalmente igual"],["equivalent_literal_correct_feedback","A resposta é literalmente igual à correta."],["equivalent_symbolic","Matematicamente igual"],["equivalent_symbolic_correct_feedback","A resposta é matematicamente igual à correta."],["equivalent_set","Iguais aos conjuntos"],["equivalent_set_correct_feedback","O conjunto de respostas é igual ao correto."],["equivalent_equations","Equações equivalentes"],["equivalent_equations_correct_feedback","A resposta tem as mesmas soluções da correta."],["equivalent_function","Cálculo da nota"],["equivalent_function_correct_feedback","A resposta está correta."],["equivalent_all","Qualquer reposta"],["any","qualquer"],["gradingfunction","Cálculo da nota"],["additionalproperties","Propriedades adicionais"],["structure","Estrutura"],["none","nenhuma"],["None","Nenhuma"],["check_integer_form","tem forma de número inteiro"],["check_integer_form_correct_feedback","A resposta é um número inteiro."],["check_fraction_form","tem forma de fração"],["check_fraction_form_correct_feedback","A resposta é uma fração."],["check_polynomial_form","tem forma polinomial"],["check_polynomial_form_correct_feedback","A resposta é um polinomial."],["check_rational_function_form","tem forma de função racional"],["check_rational_function_form_correct_feedback","A resposta é uma função racional."],["check_elemental_function_form","é uma combinação de funções elementárias"],["check_elemental_function_form_correct_feedback","A resposta é uma expressão elementar."],["check_scientific_notation","é expressa em notação científica"],["check_scientific_notation_correct_feedback","A resposta é expressa em notação científica."],["more","Mais"],["check_simplified","é simplificada"],["check_simplified_correct_feedback","A resposta é simplificada."],["check_expanded","é expandida"],["check_expanded_correct_feedback","A resposta é expandida."],["check_factorized","é fatorizada"],["check_factorized_correct_feedback","A resposta é fatorizada."],["check_rationalized","é racionalizada"],["check_rationalized_correct_feedback","A resposta é racionalizada."],["check_no_common_factor","não tem fatores comuns"],["check_no_common_factor_correct_feedback","A resposta não tem fatores comuns."],["check_minimal_radicands","tem radiciação mínima"],["check_minimal_radicands_correct_feedback","A resposta tem radiciação mínima."],["check_divisible","é divisível por"],["check_divisible_correct_feedback","A resposta é divisível por ${value}."],["check_common_denominator","tem um único denominador comum"],["check_common_denominator_correct_feedback","A resposta tem um único denominador comum."],["check_unit","tem unidade equivalente a"],["check_unit_correct_feedback","A unidade da resposta é ${unit}."],["check_unit_literal","tem unidade literalmente igual a"],["check_unit_literal_correct_feedback","A unidade da resposta é ${unit}."],["check_no_more_decimals","tem menos ou os mesmos decimais que"],["check_no_more_decimals_correct_feedback","A resposta tem ${digits} decimais ou menos."],["check_no_more_digits","tem menos ou os mesmos dígitos que"],["check_no_more_digits_correct_feedback","A resposta tem ${digits} dígitos ou menos."],["syntax_expression","Geral"],["syntax_expression_description","(fórmulas, expressões, equações, matrizes...)"],["syntax_expression_correct_feedback","A sintaxe da resposta está correta."],["syntax_quantity","Quantidade"],["syntax_quantity_description","(números, unidades de medida, frações, frações mistas, proporções...)"],["syntax_quantity_correct_feedback","A sintaxe da resposta está correta."],["syntax_list","Lista"],["syntax_list_description","(listas sem separação por vírgula ou chaves)"],["syntax_list_correct_feedback","A sintaxe da resposta está correta."],["syntax_string","Texto"],["syntax_string_description","(palavras, frases, sequências de caracteres)"],["syntax_string_correct_feedback","A sintaxe da resposta está correta."],["none","nenhuma"],["edit","Editar"],["accept","OK"],["cancel","Cancelar"],["explog","exp/log"],["trigonometric","trigonométrica"],["hyperbolic","hiperbólica"],["arithmetic","aritmética"],["all","tudo"],["tolerance","Tolerância"],["relative","relativa"],["relativetolerance","Tolerância relativa"],["precision","Precisão"],["implicit_times_operator","Sinal de multiplicação invisível"],["times_operator","Sinal de multiplicação"],["imaginary_unit","Unidade imaginária"],["mixedfractions","Frações mistas"],["constants","Constantes"],["functions","Funções"],["userfunctions","Funções do usuário"],["units","Unidades"],["unitprefixes","Prefixos das unidades"],["syntaxparams","Opções de sintaxe"],["syntaxparams_expression","Opções gerais"],["syntaxparams_quantity","Opções de quantidade"],["syntaxparams_list","Opções de lista"],["allowedinput","Entrada permitida"],["manual","Manual"],["correctanswer","Resposta correta"],["variables","Variáveis"],["validation","Validação"],["preview","Prévia"],["correctanswertabhelp","Insira a resposta correta usando o WIRIS editor. Selecione também o comportamento do editor de fórmulas quando usado pelo aluno."],["assertionstabhelp","Selecione quais propriedades a resposta do aluno deve verificar. Por exemplo, se ela deve ser simplificada, fatorizada, expressa em unidades físicas ou ter uma precisão numérica específica."],["variablestabhelp","Escreva um algoritmo com o WIRIS cas para criar variáveis aleatórias: números, expressões, gráficos ou cálculo de nota. Você também pode especificar o formato de saída das variáveis exibidas para o aluno."],["testtabhelp","Insira um estudante em potencial para simular o comportamento da questão. Você está usando a mesma ferramenta que o aluno usará. Note que também é possível testar o critério de avaliação, sucesso e comentário automático."],["start","Iniciar"],["test","Testar"],["clicktesttoevaluate","Clique no botão Testar para validar a resposta atual."],["correct","Correta!"],["incorrect","Incorreta!"],["partiallycorrect","Parcialmente correta!"],["inputmethod","Método de entrada"],["compoundanswer","Resposta composta"],["answerinputinlineeditor","WIRIS editor integrado"],["answerinputpopupeditor","WIRIS editor em pop up"],["answerinputplaintext","Campo de entrada de texto simples"],["showauxiliarcas","Incluir WIRIS cas"],["initialcascontent","Conteúdo inicial"],["tolerancedigits","Dígitos de tolerância"],["validationandvariables","Validação e variáveis"],["algorithmlanguage","Linguagem do algoritmo"],["calculatorlanguage","Linguagem da calculadora"],["hasalgorithm","Tem algoritmo"],["comparison","Comparação"],["properties","Propriedades"],["studentanswer","Resposta do aluno"],["poweredbywiris","Fornecido por WIRIS"],["yourchangeswillbelost","As alterações serão perdidas se você sair da janela."],["outputoptions","Opções de saída"],["catalan","Català"],["english","English"],["spanish","Español"],["estonian","Eesti"],["basque","Euskara"],["french","Français"],["german","Deutsch"],["italian","Italiano"],["dutch","Nederlands"],["portuguese","Português (Portugal)"],["javaAppletMissing","Warning! This component cannot be displayed properly because you need to <a href=\"http://www.java.com/en/\">install the Java plugin</a> or <a href=\"http://www.java.com/en/download/help/enable_browser.xml\">enable the Java plugin</a>."],["allanswerscorrect","Todas as respostas devem estar corretas"],["distributegrade","Distribuir notas"],["no","Não"],["add","Adicionar"],["replaceeditor","Substituir editor"],["list","Lista"],["questionxml","XML da pergunta"],["grammarurl","URL da gramática"],["reservedwords","Palavras reservadas"],["forcebrackets","As listas sempre precisam de chaves “{}”."],["commaasitemseparator","Use vírgula “,” para separar itens na lista."],["confirmimportdeprecated","Importar questão? A questão prestes a ser aberta contém recursos ultrapassados. O processo de importação pode alterar um pouco o comportamento da questão. É recomendável que você teste a questão atentamente após importá-la."],["comparesets","Comparar como conjuntos"],["nobracketslist","Listas sem chaves"],["warningtoleranceprecision","Menos dígitos de precisão do que dígitos de tolerância."],["actionimport","Importar"],["actionexport","Exportar"],["usecase","Coincidir maiúsculas/minúsculas"],["usespaces","Coincidir espaços"],["notevaluate","Manter argumentos não avaliados"],["separators","Separadores"],["comma","Vírgula"],["commarole","Função do caractere vírgula “,”"],["point","Ponto"],["pointrole","Função do caractere ponto “.”"],["space","Espaço"],["spacerole","Função do caractere espaço"],["decimalmark","Dígitos decimais"],["digitsgroup","Grupos de dígitos"],["listitems","Itens da lista"],["nothing","Nada"],["intervals","Intervalos"],["warningprecision15","A precisão deve estar entre 1 e 15."],["decimalSeparator","Decimal"],["thousandsSeparator","Milhares"],["notation","Notação"],["invisible","Invisível"],["auto","Automática"],["fixedDecimal","Fixa"],["floatingDecimal","Decimal"],["scientific","Científica"],["example","Exemplo"],["warningreltolfixedprec","Tolerância relativa com notação decimal fixa."],["warningabstolfloatprec","Tolerância absoluta com notação decimal flutuante."],["answerinputinlinehand","WIRIS hand integrado"],["absolutetolerance","Tolerância absoluta"],["clicktoeditalgorithm","O navegador não é <a href=\"http://www.wiris.com/blog/docs/java-applets-support\" target=\"_blank\">compatível com Java</a>. Clique no botão para baixar e executar o aplicativo WIRIS cas e editar o algoritmo da questão."],["launchwiriscas","Abrir WIRIS cas"],["sendinginitialsession","Enviando sessão inicial..."],["waitingforupdates","Aguardando atualizações..."],["sessionclosed","Comunicação fechada."],["gotsession","Revisão ${n} recebida."],["thecorrectansweris","A resposta correta é"],["poweredby","Fornecido por"],["refresh","Renovar resposta correta"],["fillwithcorrect","Preencher resposta correta"],["runcalculator","Run calculator"],["clicktoruncalculator","Click the button to download and run WIRIS cas application to make the calculations you need. <a href=\"http://www.wiris.com/en/quizzes/docs/moodle/manual/java\" target=\"_blank\">Learn more</a>."],["answer","answer"]]; com.wiris.quizzes.impl.TranslationNameChange.tagName = "nameChange"; com.wiris.quizzes.impl.Translator.languages = null; com.wiris.quizzes.impl.Translator.available = null; diff --git a/html/moodle2/question/type/wq/quizzes/lib/version.txt b/html/moodle2/question/type/wq/quizzes/lib/version.txt index 9c49fa485f..4c72ec99ea 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/version.txt +++ b/html/moodle2/question/type/wq/quizzes/lib/version.txt @@ -1 +1 @@ -3.50.1 \ No newline at end of file +3.51.0 \ No newline at end of file diff --git a/html/moodle2/question/type/wq/quizzes/lib/wirisquizzes.css b/html/moodle2/question/type/wq/quizzes/lib/wirisquizzes.css index 6834658547..b659451336 100644 --- a/html/moodle2/question/type/wq/quizzes/lib/wirisquizzes.css +++ b/html/moodle2/question/type/wq/quizzes/lib/wirisquizzes.css @@ -383,18 +383,27 @@ div.wirisjnlp { border-radius: 8px; padding: 20px 15px; } +div.wiristabs div.wirisjnlp { + overflow: auto; +} div.wirisjnlptext { margin-bottom: 10px; + font-size: 10pt; } div.wirisjnlpform { margin-bottom: 10px; + display: inline-block; } -div.wirisjnlpnotes span{ +div.wirisjnlpnotes { font-size: 10pt; - vertical-align: top; + display: inline-block; + margin: 0 0 10px 10px; +} +div.wirisjnlpnotes span { margin-right: 5px; } + /** * Styles for new JsComponent model HTML **/ diff --git a/html/moodle2/question/type/wq/thirdpartylibs.xml b/html/moodle2/question/type/wq/thirdpartylibs.xml index f458743046..a42cda3d5d 100644 --- a/html/moodle2/question/type/wq/thirdpartylibs.xml +++ b/html/moodle2/question/type/wq/thirdpartylibs.xml @@ -3,7 +3,7 @@ <library> <location>quizzes</location> <name>WIRIS QUIZZES engine</name> - <version>3.50.2.1022</version> + <version>3.51.0.1022</version> <license>GPL</license> <licenseversion>3.0+</licenseversion> </library> diff --git a/html/moodle2/question/type/wq/version.php b/html/moodle2/question/type/wq/version.php index 6a9ab940e6..aeeab49e86 100644 --- a/html/moodle2/question/type/wq/version.php +++ b/html/moodle2/question/type/wq/version.php @@ -16,9 +16,9 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017031000; +$plugin->version = 2017041000; $plugin->requires = 2011120500; // Moodle 2.2. -$plugin->release = '3.50.2.1022'; +$plugin->release = '3.51.0.1022'; $plugin->maturity = MATURITY_STABLE; $plugin->component = 'qtype_wq'; $plugin->dependencies = array (