diff options
author | Adrian Lang <mail@adrianlang.de> | 2011-11-10 15:43:15 +0100 |
---|---|---|
committer | Adrian Lang <mail@adrianlang.de> | 2011-11-10 15:43:15 +0100 |
commit | 16a774a8a61756df2d8fb813bfbaed98b42e3e65 (patch) | |
tree | 3a48d311e74ccbf4017330cef8af00003b0ddb34 /lib/scripts/locktimer.js | |
parent | 662a7b3fcc22d8327026bc1ef161a096683f1580 (diff) | |
parent | a5a71ecfcc1ed6bfca1995b39cd0abe4b8dd9eeb (diff) | |
download | rpg-16a774a8a61756df2d8fb813bfbaed98b42e3e65.tar.gz rpg-16a774a8a61756df2d8fb813bfbaed98b42e3e65.tar.bz2 |
Merge branch 'master' into stable
Conflicts:
doku.php
Diffstat (limited to 'lib/scripts/locktimer.js')
-rw-r--r-- | lib/scripts/locktimer.js | 128 |
1 files changed, 76 insertions, 52 deletions
diff --git a/lib/scripts/locktimer.js b/lib/scripts/locktimer.js index 0db7d2b15..96f963c08 100644 --- a/lib/scripts/locktimer.js +++ b/lib/scripts/locktimer.js @@ -1,64 +1,81 @@ /** * Class managing the timer to display a warning on a expiring lock */ -var locktimer = { - sack: null, - timeout: 0, - timerID: null, +var dw_locktimer = { + timeout: 0, + draft: false, + timerID: null, lasttime: null, - msg: '', - pageid: '', + msg: LANG.willexpire, + pageid: '', + /** + * Initialize the lock timer + * + * @param int timeout Length of timeout in seconds + * @param string msg Deprecated; The expiry message + * @param bool draft Whether to save drafts + * @param string edid Optional; ID of an edit object which has to be present + */ init: function(timeout,msg,draft,edid){ - var edit = $(edid); - if(!edit) return; - if(edit.readOnly) return; + var $edit; - // init values - locktimer.timeout = timeout*1000; - locktimer.msg = msg; - locktimer.draft = draft; - locktimer.lasttime = new Date(); + switch (arguments.length) { + case 4: + DEPRECATED('Setting the locktimer expiry message is deprecated'); + dw_locktimer.msg = msg; + break; + case 3: + edid = draft; + case 2: + draft = msg; + } + edid = edid || 'wiki__text'; - if(!$('dw__editform')) return; - locktimer.pageid = $('dw__editform').elements.id.value; - if(!locktimer.pageid) return; + $edit = jQuery('#' + edid); + if($edit.length === 0 || $edit.attr('readonly')) { + return; + } - // init ajax component - locktimer.sack = new sack(DOKU_BASE + 'lib/exe/ajax.php'); - locktimer.sack.AjaxFailedAlert = ''; - locktimer.sack.encodeURIString = false; - locktimer.sack.onCompletion = locktimer.refreshed; + // init values + dw_locktimer.timeout = timeout*1000; + dw_locktimer.draft = draft; + dw_locktimer.lasttime = new Date(); + + dw_locktimer.pageid = jQuery('#dw__editform input[name=id]').val(); + if(!dw_locktimer.pageid) { + return; + } // register refresh event - addEvent($('dw__editform'),'keypress',function(){locktimer.refresh();}); + $edit.keypress(dw_locktimer.refresh); // start timer - locktimer.reset(); + dw_locktimer.reset(); }, /** * (Re)start the warning timer */ reset: function(){ - locktimer.clear(); - locktimer.timerID = window.setTimeout("locktimer.warning()", locktimer.timeout); + dw_locktimer.clear(); + dw_locktimer.timerID = window.setTimeout(dw_locktimer.warning, dw_locktimer.timeout); }, /** * Display the warning about the expiring lock */ warning: function(){ - locktimer.clear(); - alert(locktimer.msg); + dw_locktimer.clear(); + alert(fixtxt(dw_locktimer.msg)); }, /** * Remove the current warning timer */ clear: function(){ - if(locktimer.timerID !== null){ - window.clearTimeout(locktimer.timerID); - locktimer.timerID = null; + if(dw_locktimer.timerID !== null){ + window.clearTimeout(dw_locktimer.timerID); + dw_locktimer.timerID = null; } }, @@ -68,35 +85,42 @@ var locktimer = { * Called on keypresses in the edit area */ refresh: function(){ - var now = new Date(); + var now = new Date(), + params = 'call=lock&id=' + dw_locktimer.pageid + '&'; + // refresh every minute only - if(now.getTime() - locktimer.lasttime.getTime() > 30*1000){ - var params = 'call=lock&id='+encodeURIComponent(locktimer.pageid); - var dwform = $('dw__editform'); - if(locktimer.draft && dwform.elements.wikitext){ - params += '&prefix='+encodeURIComponent(dwform.elements.prefix.value); - params += '&wikitext='+encodeURIComponent(dwform.elements.wikitext.value); - params += '&suffix='+encodeURIComponent(dwform.elements.suffix.value); - if(dwform.elements.date){ - params += '&date='+encodeURIComponent(dwform.elements.date.value); - } - } - locktimer.sack.runAJAX(params); - locktimer.lasttime = now; + if(now.getTime() - dw_locktimer.lasttime.getTime() <= 30*1000) { + return; + } + + // POST everything necessary for draft saving + if(dw_locktimer.draft && jQuery('#dw__editform textarea[name=wikitext]').length > 0){ + params += jQuery('#dw__editform').find('input[name=prefix], ' + + 'textarea[name=wikitext], ' + + 'input[name=suffix], ' + + 'input[name=date]').serialize(); } + + jQuery.post( + DOKU_BASE + 'lib/exe/ajax.php', + params, + dw_locktimer.refreshed, + 'html' + ); + dw_locktimer.lasttime = now; }, /** * Callback. Resets the warning timer */ - refreshed: function(){ - var data = this.response; + refreshed: function(data){ var error = data.charAt(0); - data = data.substring(1); + data = data.substring(1); - $('draft__status').innerHTML=data; - if(error != '1') return; // locking failed - locktimer.reset(); + jQuery('#draft__status').html(data); + if(error != '1') { + return; // locking failed + } + dw_locktimer.reset(); } }; - |