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