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 and close editor 76 $self.html(data); 77 $div.remove(); 78 // sums are now out of date - remove them til page is reloaded 79 $self.parents('table').find('tr.summarize').remove(); 80 }) 81 .fail(function (data) { 82 // something went wrong, display error 83 $errors.text(data.responseText).show(); 84 }) 85 ; 86 87 88 }); 89 90 /** 91 * Close the editor without saving 92 */ 93 $cancel.click(function (e) { 94 // unlock page 95 jQuery.post( 96 DOKU_BASE + 'lib/exe/ajax.php', 97 { 98 call: 'plugin_struct_inline_cancel', 99 pid: pid 100 } 101 ); 102 103 e.preventDefault(); 104 $div.remove(); 105 }); 106 }); 107 108}; 109