1/** 2 * Inline Editor 3 */ 4var InlineEditor = function ($table) { 5 6 7 $table.on('dblclick', 'td', function (e) { 8 e.preventDefault(); 9 e.stopPropagation(); 10 11 var $self = jQuery(this); 12 var pid = $self.parent().data('pid'); 13 var rid = $self.parent().data('rid'); 14 var rev = $self.parent().data('rev'); 15 var field = $self.parents('table').find('tr th').eq($self.index()).data('field'); 16 17 if ((!pid && !rid) || !field) return; 18 19 // prepare the edit overlay 20 var $div = jQuery('<div class="struct_inlineditor"><form></form><div class="err"></div></div>'); 21 var $form = $div.find('form'); 22 var $errors = $div.find('div.err').hide(); 23 var $save = jQuery('<button type="submit">Save</button>'); 24 var $cancel = jQuery('<button>Cancel</button>'); 25 $form.append(jQuery('<input type="hidden" name="pid">').val(pid)); 26 $form.append(jQuery('<input type="hidden" name="rid">').val(rid)); 27 $form.append(jQuery('<input type="hidden" name="rev">').val(rev)); 28 $form.append(jQuery('<input type="hidden" name="field">').val(field)); 29 $form.append('<input type="hidden" name="call" value="plugin_struct_inline_save">'); 30 $form.append(jQuery('<div class="ctl">').append($save).append($cancel)); 31 32 /** 33 * load the editor 34 */ 35 jQuery.post( 36 DOKU_BASE + 'lib/exe/ajax.php', 37 { 38 call: 'plugin_struct_inline_editor', 39 pid: pid, 40 rid: rid, 41 rev: rev, 42 field: field 43 }, 44 function (data) { 45 if (!data) return; // we're done 46 47 $form.prepend(data); 48 49 // show 50 $self.closest('.dokuwiki').append($div); 51 $div.position({ 52 my: 'left top', 53 at: 'left top', 54 of: $self 55 }); 56 57 // attach entry handlers to the inline form 58 EntryEditor($form); 59 60 // focus first input 61 $form.find('input, textarea').first().focus(); 62 } 63 ); 64 65 /** 66 * Save the data, then close the form 67 */ 68 $form.submit(function (e) { 69 e.preventDefault(); 70 jQuery.post( 71 DOKU_BASE + 'lib/exe/ajax.php', 72 $form.serialize() 73 ) 74 .done(function (data) { 75 // save succeeded, display new value, update revision data and close editor 76 const saved = JSON.parse(data); 77 $self.html(saved['value']); 78 $self.parent().data('rev', saved['rev']); 79 $div.remove(); 80 // sums are now out of date - remove them til page is reloaded 81 $self.parents('table').find('tr.summarize').remove(); 82 }) 83 .fail(function (data) { 84 // something went wrong, display error 85 $errors.text(data.responseText).show(); 86 }) 87 ; 88 89 90 }); 91 92 /** 93 * Close the editor without saving 94 */ 95 $cancel.click(function (e) { 96 // unlock page 97 jQuery.post( 98 DOKU_BASE + 'lib/exe/ajax.php', 99 { 100 call: 'plugin_struct_inline_cancel', 101 pid: pid 102 } 103 ); 104 105 e.preventDefault(); 106 $div.remove(); 107 }); 108 }); 109 110}; 111