1 | /**
|
---|
2 | * Class managing the timer to display a warning on a expiring lock
|
---|
3 | */
|
---|
4 | var 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 |
|
---|