H5PEditor.metadataChangelogWidget = function (semantics, params, $wrapper, parent) { if (!params.changes) { params.changes = []; } var $ = H5PEditor.$; // State var state = { editing: false, newLog: false, currentLog: undefined }; var widget = $('
'); H5PEditor.processSemanticsChunk(semantics, {}, widget, parent); // Get a reference to the fields: var changeField = H5PEditor.findField('change', parent); var dateField = H5PEditor.findField('date', changeField); var authorField = H5PEditor.findField('author', changeField); var logField = H5PEditor.findField('log', changeField); var $form = changeField.$content; var $formFields = dateField.$item.add(authorField.$item).add(logField.$item); // Add description var $description = $('
', { 'class': 'h5peditor-field-description', 'text': H5PEditor.t('core', 'changelogDescription') }); $form.append($description); var $cancelButton = $('' + '' + '
'); logButtons.find('.h5p-metadata-delete').click(function () { // Ask for confirmation if (confirm(H5PEditor.t('core', 'confirmDeleteChangeLog'))) { var wrapper = $(this).closest('.h5p-metadata-log'); var index = $(wrapper).data('index'); deleteLog(index); } }); logButtons.find('.h5p-metadata-edit').click(function () { var wrapper = $(this).closest('.h5p-metadata-log'); var index = $(wrapper).data('index'); editLog(index); }); var logContent = $('
', { 'class': 'h5p-metadata-log', 'data-index': i }); logContent.append(dateWrapper); logContent.append($descriptionWrapper); logContent.append(logButtons); logList.prepend(logContent); } } } function editLog(index) { state.editing = true; state.currentLog = index; state.newLog = false; render(); } function deleteLog(index) { params.changes.splice(index, 1); render(); } function validateForm(optional) { dateField.field.optional = optional; authorField.field.optional = optional; logField.field.optional = optional; return { date: dateField.validate(), author: authorField.validate(), log: logField.validate() }; } function populateForm() { if (state.currentLog !== undefined) { validateForm(true); var log = params.changes[state.currentLog]; dateField.$input.val(log.date); // Unescape in case it comes from backend var unescaper = document.createElement('div'); unescaper.innerHTML = H5PEditor.htmlspecialchars(log.author); authorField.$input.val(unescaper.textContent); unescaper.innerHTML = H5PEditor.htmlspecialchars(log.log); logField.$input.val(unescaper.textContent); } } /** * Setup the datepicker. Loads the script if not already loaded */ function setupDatePicker($dateInput) { var initDateField = function () { $dateInput.Zebra_DatePicker({ format: 'd-m-y G:i:s', onClose: function () { dateField.validate(); } }); }; // Make sure datepicker.js is only loaded once $dateInput.Zebra_DatePicker ? initDateField() : loadDatePickerLib(initDateField); } /** * Load the datepicker JS lib * * @param {Function} callback */ function loadDatePickerLib(callback) { $.ajax({ url: H5PEditor.basePath + 'libs/zebra_datepicker.min.js', dataType: 'script', success: callback, error: function (r,e) { console.warn('error loading libraries: ', e); }, async: true }); } };