AutorÃa | Ultima modificación | Ver Log |
/*** Creates a widget to add author information to a form** @param {object} semantics* @param {object} params* @param {object} group* @param {mixed} parent used in processSemanticsChunk()* @returns {ns.Coordinates}*/H5PEditor.metadataAuthorWidget = function (semantics, params, $wrapper, parent) {if (!params.authors) {params.authors = [];}const $ = H5PEditor.$;const widget = $('<div class="field h5p-metadata-author-widget"></div>');var $authorData = $('<div class="h5p-author-data"></div>');widget.append($authorData);H5PEditor.processSemanticsChunk(semantics, {}, $authorData, parent);// Get references to the fieldsvar nameField = H5PEditor.findField('name', parent);var roleField = H5PEditor.findField('role', parent);var $button = $('<div class="field authorList">' +'<button type="button" class="h5p-metadata-button inverted h5p-save-author">' +H5PEditor.t('core', 'addAuthor') +'</button>' +'</div>').children('button').click(function (event) {// Temporarily set name as mandatory to get the error messages only when// clicking the Add Author buttonnameField.field.optional = false;var name = nameField.validate();nameField.field.optional = true;var role = roleField.validate();if (!name) {return;}// Don't add author if already in list with the same roleconst authorDuplicate = params.authors.some(function (author) {return author.name === name && author.role === role;});if (authorDuplicate) {resetForm();return;}addAuthor(name, role);}).end();$authorData.append($button);var authorListWrapper = $('<div class="h5p-author-list-wrapper"><ul class="h5p-author-list"></ul></div>');widget.append(authorListWrapper);renderAuthorList();widget.appendTo($wrapper);/*** Add an author to the list of authors* @param {string} [name]* @param {string} [role]*/function addAuthor(name, role) {params.authors.push({name: name,role: role});renderAuthorList();resetForm();}/*** Add default/current author to list of authors** @param {string} fallbackName Name to fallback to if there is no valid name chosen already* @param {string} fallbackRole Role to fallback to if there is no valid role chosen already*/function addDefaultAuthor(fallbackName, fallbackRole) {var name = nameField.validate();if (!name) {name = fallbackName;}var role = roleField.validate();if (!role) {role = fallbackRole;}addAuthor(name, role);}/*** Resets the form*/function resetForm() {nameField.$input.val('');}/*** Remove author from list.** @param {object} author - Author to be removed.* @param {string} author.name - Author name.* @param {string} author.role - Author role.*/function removeAuthor(author) {params.authors = params.authors.filter(function (e) {return (e !== author);});renderAuthorList();}function renderAuthorList() {var wrapper = widget.find('.h5p-author-list-wrapper');wrapper.empty();const authorList = $('<ul></ul>');params.authors.forEach(function (author) {// Name and rolevar listItem = $('<li>', {html: H5PEditor.htmlspecialchars(author.name),append: $('<span>', {'class': 'h5p-metadata-role',html: author.role})});// The delete-button$('<button>', {type: 'button','class': 'h5p-metadata-icon-button',click: function () {if (confirm(H5PEditor.t('core', 'confirmRemoveAuthor'))) {removeAuthor(author);}}}).appendTo(listItem);authorList.append(listItem);});wrapper.append(authorList);}return {addAuthor: addAuthor,addDefaultAuthor: addDefaultAuthor};};