/**
* Inline Editor
*/
var InlineEditor = function ($table) {
$table.on('dblclick', 'td', function (e) {
e.preventDefault();
e.stopPropagation();
var $self = jQuery(this);
var pid = $self.parent().data('pid');
var rid = $self.parent().data('rid');
var rev = $self.parent().data('rev');
var field = $self.parents('table').find('tr th').eq($self.index()).data('field');
if ((!pid && !rid) || !field) return;
// prepare the edit overlay
var $div = jQuery('
');
var $form = $div.find('form');
var $errors = $div.find('div.err').hide();
var $save = jQuery('');
var $cancel = jQuery('');
$form.append(jQuery('').val(pid));
$form.append(jQuery('').val(rid));
$form.append(jQuery('').val(rev));
$form.append(jQuery('').val(field));
$form.append('');
$form.append(jQuery('
').append($save).append($cancel));
/**
* load the editor
*/
jQuery.post(
DOKU_BASE + 'lib/exe/ajax.php',
{
call: 'plugin_struct_inline_editor',
pid: pid,
rid: rid,
rev: rev,
field: field
},
function (data) {
if (!data) return; // we're done
$form.prepend(data);
// show
$self.closest('.dokuwiki').append($div);
$div.position({
my: 'left top',
at: 'left top',
of: $self
});
// attach entry handlers to the inline form
EntryEditor($form);
// focus first input
$form.find('input, textarea').first().focus();
}
);
/**
* Save the data, then close the form
*/
$form.submit(function (e) {
e.preventDefault();
jQuery.post(
DOKU_BASE + 'lib/exe/ajax.php',
$form.serialize()
)
.done(function (data) {
// save succeeded, display new value, update revision data and close editor
const saved = JSON.parse(data);
$self.html(saved['value']);
$self.parent().data('rev', saved['rev']);
$div.remove();
// sums are now out of date - remove them til page is reloaded
$self.parents('table').find('tr.summarize').remove();
})
.fail(function (data) {
// something went wrong, display error
$errors.text(data.responseText).show();
})
;
});
/**
* Close the editor without saving
*/
$cancel.click(function (e) {
// unlock page
jQuery.post(
DOKU_BASE + 'lib/exe/ajax.php',
{
call: 'plugin_struct_inline_cancel',
pid: pid
}
);
e.preventDefault();
$div.remove();
});
});
};