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