Skip to content
Snippets Groups Projects
Commit 6035eb33 authored by Andreas Gohr's avatar Andreas Gohr
Browse files

Pagelocks are now refreshed in the background

An AJAX call is used to refresh the pagelock when keypresses in the textarea
are detected (With a minimum wait of one minute between calls).

darcs-hash:20060128152139-7ad00-66d64326bcf04c9b8d49285ac736137e9dd48249.gz
parent a499671a
No related branches found
No related tags found
No related merge requests found
......@@ -60,5 +60,20 @@ function ajax_qsearch(){
print '</ul>';
}
/**
* Refresh a page lock
*
* Andreas Gohr <andi@splitbrain.org>
*/
function ajax_lock(){
$id = cleanID($_POST['id']);
if(empty($id)) return;
if(!checklock($id)){
lock($id);
print 1;
}
}
//Setup VIM: ex: et ts=2 enc=utf-8 :
?>
......@@ -93,7 +93,7 @@ function js_out(){
js_runonstart("initChangeCheck('".js_escape($lang['notsavedyet'])."')");
// add lock timer
js_runonstart("init_locktimer(".($conf['locktime']-60).",'".js_escape($lang['willexpire'])."')");
js_runonstart("locktimer.init(".($conf['locktime'] - 60).",'".js_escape($lang['willexpire'])."')");
// load spell checker
if($conf['spellchecker']){
......
......@@ -401,26 +401,87 @@ function summaryCheck(){
/**
* global variable for the locktimer
* Class managing the timer to display a warning on a expiring lock
*/
var locktimerID;
/**
* This starts a timer to remind the user of an expiring lock
* Accepts the delay in seconds and a text to display.
*/
function init_locktimer(delay,txt){
txt = escapeQuotes(txt);
locktimerID = self.setTimeout("locktimer('"+txt+"')", delay*1000);
}
/**
* This stops the timer and displays a message about the expiring lock
*/
function locktimer(txt){
clearTimeout(locktimerID);
alert(txt);
}
function locktimer_class(){
this.sack = null;
this.timeout = 0;
this.timerID = null;
this.lasttime = null;
this.msg = '';
this.pageid = '';
};
var locktimer = new locktimer_class();
locktimer.init = function(timeout,msg){
// init values
locktimer.timeout = timeout*1000;
locktimer.msg = msg;
locktimer.lasttime = new Date();
if(!$('dw__editform')) return;
locktimer.pageid = $('dw__editform').elements.id.value;
if(!locktimer.pageid) 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;
// register refresh event
addEvent($('dw__editform').elements.wikitext,'keyup',function(){locktimer.refresh();});
// start timer
locktimer.reset();
};
/**
* (Re)start the warning timer
*/
locktimer.reset = function(){
locktimer.clear();
locktimer.timerID = window.setTimeout("locktimer.warning()", locktimer.timeout);
};
/**
* Display the warning about the expiring lock
*/
locktimer.warning = function(){
locktimer.clear();
alert(locktimer.msg);
};
/**
* Remove the current warning timer
*/
locktimer.clear = function(){
if(locktimer.timerID !== null){
window.clearTimeout(locktimer.timerID);
locktimer.timerID = null;
}
};
/**
* Refresh the lock via AJAX
*
* Called on keypresses in the edit area
*/
locktimer.refresh = function(){
var now = new Date();
// refresh every minute only
if(now.getTime() - locktimer.lasttime.getTime() > 60*1000){
locktimer.sack.runAJAX('call=lock&id='+encodeURI(locktimer.pageid));
locktimer.lasttime = now;
}
};
/**
* Callback. Resets the warning timer
*/
locktimer.refreshed = function(){
if(this.response != '1') return; // locking failed
locktimer.reset();
};
// end of locktimer class functions
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment