1/** 2 * Class managing the timer to display a warning on a expiring lock 3 */ 4var locktimer = { 5 sack: null, 6 timeout: 0, 7 timerID: null, 8 lasttime: null, 9 msg: '', 10 pageid: '', 11 12 init: function(timeout,msg,draft){ 13 // init values 14 locktimer.timeout = timeout*1000; 15 locktimer.msg = msg; 16 locktimer.draft = draft; 17 locktimer.lasttime = new Date(); 18 19 if(!$('dw__editform')) return; 20 locktimer.pageid = $('dw__editform').elements.id.value; 21 if(!locktimer.pageid) return; 22 23 // init ajax component 24 locktimer.sack = new sack(DOKU_BASE + 'lib/exe/ajax.php'); 25 locktimer.sack.AjaxFailedAlert = ''; 26 locktimer.sack.encodeURIString = false; 27 locktimer.sack.onCompletion = locktimer.refreshed; 28 29 // register refresh event 30 addEvent($('dw__editform'),'keypress',function(){locktimer.refresh();}); 31 // start timer 32 locktimer.reset(); 33 }, 34 35 /** 36 * (Re)start the warning timer 37 */ 38 reset: function(){ 39 locktimer.clear(); 40 locktimer.timerID = window.setTimeout("locktimer.warning()", locktimer.timeout); 41 }, 42 43 /** 44 * Display the warning about the expiring lock 45 */ 46 warning: function(){ 47 locktimer.clear(); 48 alert(locktimer.msg); 49 }, 50 51 /** 52 * Remove the current warning timer 53 */ 54 clear: function(){ 55 if(locktimer.timerID !== null){ 56 window.clearTimeout(locktimer.timerID); 57 locktimer.timerID = null; 58 } 59 }, 60 61 /** 62 * Refresh the lock via AJAX 63 * 64 * Called on keypresses in the edit area 65 */ 66 refresh: function(){ 67 var now = new Date(); 68 // refresh every minute only 69 if(now.getTime() - locktimer.lasttime.getTime() > 30*1000){ 70 var params = 'call=lock&id='+encodeURIComponent(locktimer.pageid); 71 var dwform = $('dw__editform'); 72 if(locktimer.draft && dwform.elements.wikitext){ 73 params += '&prefix='+encodeURIComponent(dwform.elements.prefix.value); 74 params += '&wikitext='+encodeURIComponent(dwform.elements.wikitext.value); 75 params += '&suffix='+encodeURIComponent(dwform.elements.suffix.value); 76 if(dwform.elements.date){ 77 params += '&date='+encodeURIComponent(dwform.elements.date.value); 78 } 79 } 80 locktimer.sack.runAJAX(params); 81 locktimer.lasttime = now; 82 } 83 }, 84 85 /** 86 * Callback. Resets the warning timer 87 */ 88 refreshed: function(){ 89 var data = this.response; 90 var error = data.charAt(0); 91 data = data.substring(1); 92 93 $('draft__status').innerHTML=data; 94 if(error != '1') return; // locking failed 95 locktimer.reset(); 96 }, 97}; 98 99