AutorÃa | Ultima modificación | Ver Log |
/* global ns*/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 changethis.changes = [];this.triggerListeners = function (value) {// Run callbacksfor (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 () {const id = ns.getNextFieldId(this.field);let options = '';if (this.field.optional === true || this.field.default === undefined) {options = E.createOption('-', '-');}options += C.createOptionsHtml(this.field.options, this.value);let select = '<select id="' + id + '"';if (this.field.description !== undefined) {select += ' aria-describedby="' + ns.getDescriptionId(id) + '"';}select += ' class="h5peditor-select">' + options + '</select>';return E.createFieldMarkup(this.field, select, id);};/*** Generate HTML for select options.** @param {Array} options* @param {string} selected value* @return {string}*/C.createOptionsHtml = function (options, selected) {var html = '';for (var i = 0; i < options.length; i++) {if (options[i].type === 'optgroup') {html += '<optgroup label="' + options[i].label + '" >';html += C.createOptionsHtml(options[i].options, selected);html += '</optgroup>';}else {html += E.createOption(options[i].value, options[i].label, options[i].value === selected);}}return html;};/*** 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 errorthis.$errors.append(ns.createError(ns.t('core', 'requiredProperty', {':property': ns.t('core', 'textField')})));return false;}// All valid. Remove old errorsvar $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);