1/** 2 * Class managing the timer to display a warning on a expiring lock 3 */ 4var dw_locktimer = { 5 timeout: 0, 6 draft: false, 7 timerID: null, 8 lasttime: null, 9 msg: LANG.willexpire, 10 pageid: '', 11 12 /** 13 * Initialize the lock timer 14 * 15 * @param {int} timeout Length of timeout in seconds 16 * @param {bool} draft Whether to save drafts 17 * @param {string} edid Optional; ID of an edit object which has to be present 18 */ 19 init: function(timeout,draft,edid){ 20 var $edit; 21 22 edid = edid || 'wiki__text'; 23 24 $edit = jQuery('#' + edid); 25 if($edit.length === 0 || $edit.attr('readonly')) { 26 return; 27 } 28 29 // init values 30 dw_locktimer.timeout = timeout*1000; 31 dw_locktimer.draft = draft; 32 dw_locktimer.lasttime = new Date(); 33 34 dw_locktimer.pageid = jQuery('#dw__editform').find('input[name=id]').val(); 35 if(!dw_locktimer.pageid) { 36 return; 37 } 38 39 // register refresh event 40 $edit.keypress(dw_locktimer.refresh); 41 // start timer 42 dw_locktimer.reset(); 43 }, 44 45 /** 46 * (Re)start the warning timer 47 */ 48 reset: function(){ 49 dw_locktimer.clear(); 50 dw_locktimer.timerID = window.setTimeout(dw_locktimer.warning, dw_locktimer.timeout); 51 }, 52 53 /** 54 * Display the warning about the expiring lock 55 */ 56 warning: function(){ 57 dw_locktimer.clear(); 58 alert(fixtxt(dw_locktimer.msg)); 59 }, 60 61 /** 62 * Remove the current warning timer 63 */ 64 clear: function(){ 65 if(dw_locktimer.timerID !== null){ 66 window.clearTimeout(dw_locktimer.timerID); 67 dw_locktimer.timerID = null; 68 } 69 }, 70 71 /** 72 * Refresh the lock via AJAX 73 * 74 * Called on keypresses in the edit area 75 */ 76 refresh: function(){ 77 var now = new Date(), 78 params = 'call=lock&id=' + dw_locktimer.pageid + '&'; 79 80 // refresh every minute only 81 if(now.getTime() - dw_locktimer.lasttime.getTime() <= 30*1000) { 82 return; 83 } 84 85 // POST everything necessary for draft saving 86 if(dw_locktimer.draft && jQuery('#dw__editform').find('textarea[name=wikitext]').length > 0){ 87 params += jQuery('#dw__editform').find('input[name=prefix], ' + 88 'textarea[name=wikitext], ' + 89 'input[name=suffix], ' + 90 'input[name=date]').serialize(); 91 } 92 93 jQuery.post( 94 DOKU_BASE + 'lib/exe/ajax.php', 95 params, 96 dw_locktimer.refreshed, 97 'html' 98 ); 99 dw_locktimer.lasttime = now; 100 }, 101 102 /** 103 * Callback. Resets the warning timer 104 */ 105 refreshed: function(data){ 106 var error = data.charAt(0); 107 data = data.substring(1); 108 109 jQuery('#draft__status').html(data); 110 if(error != '1') { 111 return; // locking failed 112 } 113 dw_locktimer.reset(); 114 } 115}; 116