OpenXE/classes/Modules/Resubmission/www/js/resubmission_textfield_ui.js

113 lines
3.9 KiB
JavaScript
Raw Normal View History

2021-05-21 08:49:41 +02:00
/**
* Für die Bedienung der Freifelder innerhalb des Wiedervorlagen-Popups
*/
var ResubmissionTextFieldUi = (function ($) {
'use strict';
var me = {
storage: {
$content: null,
$errors: null
},
/**
* @param {Array} textfields
*
* @return void
*/
init: function (textfields) {
var $content = $('#resubmission-textfields-content');
if ($content.length !== 1) {
console.error('ResubmissionTextFieldUi: Benötigtes Element #resubmission-textfields-content fehlt');
return;
}
me.storage.$content = $content;
var $errors = $('#resubmission-textfields-errors');
if ($errors.length !== 1) {
console.error('ResubmissionTextFieldUi: Benötigtes Element #resubmission-textfields-errors fehlt');
return;
}
me.storage.$errors = $errors;
me.buildTextFieldForm(textfields);
},
/**
* @param {Array} textfields
*/
buildTextFieldForm: function (textfields) {
me.storage.$content.html('');
me.storage.$errors.html('');
if (textfields.length === 0) {
var content = '<div class="info">Es sind keine Freifelder für diese Stage konfiguriert. ';
content += '<a href="index.php?module=wiedervorlage&action=settings#tabs-4">Zu den Einstellungen</a>';
content += '</div>';
me.storage.$errors.html(content);
}
if (textfields.length > 0) {
var $table = $('<table class="mkTableFormular textfield-table" width="100%">');
$.each(textfields, function (index, textfield) {
var $row = me.generateTextFieldRow(textfield);
$row.appendTo($table);
});
me.storage.$content.html($table);
}
},
/**
* @param {Object} data
*
* @return {jQuery} jQuery-Element
*/
generateTextFieldRow: function (data) {
if (!data.hasOwnProperty('config_id') || !data.hasOwnProperty('label')) {
throw 'ResubmissionTextFieldUi: Can not generate textfield html. Data has wrong format.';
}
var template =
'<tr><td width="34%">' +
'<label class="resubmission-textfield-label" for="resubmission-textfield-{{configId}}"></label>' +
'</td><td width="66%">' +
'<input type="text" name="textfield[{{configId}}]" class="resubmission-textfield-content" ' +
'id="resubmission-textfield-{{configId}}">' +
'</td></tr>';
template = template.replace('{{configId}}', data.config_id);
template = template.replace('{{configId}}', data.config_id);
template = template.replace('{{configId}}', data.content_id);
var $template = $(template);
$template.find('label.resubmission-textfield-label').text(data.label);
$template
.find('input.resubmission-textfield-content')
.data('resubmissionTextfieldConfigId', data.config_id)
.data('resubmissionTextfieldContentId', data.content_id)
.val(data.content);
return $template;
},
/**
* @param {Array} errors
*/
renderErrorMessages: function (errors) {
var errorMsg = '';
$.each(errors, function (index, textfieldError) {
errorMsg += '<p>' + textfieldError.message + '</p>';
});
me.storage.$errors.html('<div class="error">' + errorMsg + '</div>');
}
};
return {
init: me.init,
renderErrorMessages: me.renderErrorMessages
};
})(jQuery);