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