class InlineEditing
{
static init(element) {
if (!element) {
return;
}
var text = jQuery(element).text().trim();
var icon_path = STUDIP.ASSETS_URL + '/images/icons/blue/NAME.svg';
var input_type = jQuery(element).data('input-type').toLowerCase();
var input_name = jQuery(element).data('input-name');
var icon_size = jQuery(element).data('icon-size');
if (!icon_size) {
icon_size = '20px';
}
//Build the display container:
var text_container = jQuery('');
jQuery(text_container).text(text);
var icon_container = jQuery('
');
var icon_element = jQuery('');
jQuery(icon_element).attr('width', icon_size);
jQuery(icon_element).attr('height', icon_size);
jQuery(icon_element).attr('src', icon_path.replace('NAME', 'edit'));
jQuery(icon_container).append(icon_element);
var display_container = jQuery(
''
);
jQuery(display_container).append(text_container);
jQuery(display_container).append(icon_container);
var input_field = undefined;
var edit_icons_container = undefined;
var accept_icon = jQuery('');
jQuery(accept_icon).attr('width', icon_size);
jQuery(accept_icon).attr('height', icon_size);
jQuery(accept_icon).attr('src', icon_path.replace('NAME', 'accept'));
var abort_icon = jQuery('');
jQuery(abort_icon).attr('width', icon_size);
jQuery(abort_icon).attr('height', icon_size);
jQuery(abort_icon).attr('src', icon_path.replace('NAME', 'decline'));
if (input_type == 'textarea') {
input_field = jQuery('');
jQuery(input_field).attr('name', input_name);
jQuery(input_field).text(text);
edit_icons_container = jQuery('');
} else {
input_field = jQuery('');
jQuery(input_field).attr('type', input_type);
jQuery(input_field).attr('name', input_name);
jQuery(input_field).val(text);
edit_icons_container = jQuery('');
}
jQuery(edit_icons_container).append(accept_icon);
jQuery(edit_icons_container).append(abort_icon);
var edit_container = jQuery('');
jQuery(edit_container).append(input_field);
jQuery(edit_container).append(edit_icons_container);
jQuery(element).empty();
jQuery(element).append(display_container);
jQuery(element).append(edit_container);
}
static activate(element) {
var container = jQuery(element).parents('[data-inline-editing]');
if (!container) {
return;
}
jQuery(container).children('.display-container').addClass('invisible');
jQuery(container).children('.edit-container').removeClass('invisible');
}
static save(element) {
var container = jQuery(element).parents('[data-inline-editing]');
if (!container) {
return;
}
var ajax_url = jQuery(container).data('inline-editing');
var text_field = jQuery(container).find('.text')[0];
if (!text_field) {
return;
}
var input_field = jQuery(container).find('.input-field')[0];
if (!input_field) {
return;
}
var input_name = jQuery(container).data('input-name');
var input_value = jQuery(input_field).val();
var data = {
quiet: 1
};
data[input_name] = input_value;
jQuery.ajax(
{
url: ajax_url,
method: 'POST',
data: data
}
).done(
function() {
jQuery(text_field).text(input_value);
jQuery(container).find('.edit-container').addClass('invisible');
jQuery(container).find('.display-container').removeClass('invisible');
}
).fail(
function(data) {
jQuery(input_field).css('border-color', 'red');
if (data) {
jQuery(container).find('.error-message').val(data);
}
}
);
}
static abort(element) {
var container = jQuery(element).parents('[data-inline-editing]');
if (!container) {
return;
}
jQuery(container).children('.edit-container').addClass('invisible');
jQuery(container).children('.display-container').removeClass('invisible');
}
}
export default InlineEditing;