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