xref: /dokuwiki/lib/scripts/locktimer.js (revision 99e7bfd4c733d81cd01dd2d97e10bb4dda62df66)
1/**
2 * Class managing the timer to display a warning on a expiring lock
3 */
4var dw_locktimer = {
5    timeout: 0,
6    draft: false,
7    timerID: null,
8    lasttime: null,
9    msg: '',
10    pageid: '',
11
12    /**
13     * Initialize the lock timer
14     *
15     * @param int timeout Lenght of timeout in seconds
16     * @param bool draft  save drafts
17     */
18    init: function(timeout,draft){ //FIXME which elements to pass here?
19        var $edit = jQuery('#wiki__text');
20        if(!$edit.length) return;
21        if($edit.attr('readonly')) return;
22
23        // init values
24        dw_locktimer.timeout  = timeout*1000;
25        dw_locktimer.draft    = draft;
26        dw_locktimer.lasttime = new Date();
27
28        dw_locktimer.pageid   = jQuery('#dw__editform input[name=id]').val();
29        if(!dw_locktimer.pageid) return;
30
31        // register refresh event
32        jQuery('#wiki__text').keypress(dw_locktimer.refresh);
33        // start timer
34        dw_locktimer.reset();
35    },
36
37    /**
38     * (Re)start the warning timer
39     */
40    reset: function(){
41        dw_locktimer.clear();
42        dw_locktimer.timerID = window.setTimeout(dw_locktimer.warning, dw_locktimer.timeout);
43    },
44
45    /**
46     * Display the warning about the expiring lock
47     */
48    warning: function(){
49        dw_locktimer.clear();
50        alert(LANG.willexpire.replace(/\\n/,"\n"));
51    },
52
53    /**
54     * Remove the current warning timer
55     */
56    clear: function(){
57        if(dw_locktimer.timerID !== null){
58            window.clearTimeout(dw_locktimer.timerID);
59            dw_locktimer.timerID = null;
60        }
61    },
62
63    /**
64     * Refresh the lock via AJAX
65     *
66     * Called on keypresses in the edit area
67     */
68    refresh: function(){
69        var now = new Date();
70        var params = {};
71        // refresh every minute only
72        if(now.getTime() - dw_locktimer.lasttime.getTime() > 30*1000){
73            params['call'] = 'lock';
74            params['id'] = dw_locktimer.pageid;
75
76            if(dw_locktimer.draft && jQuery('#dw__editform textarea[name=wikitext]').length > 0){
77                params['prefix'] = jQuery('#dw__editform input[name=prefix]').val();
78                params['wikitext'] = jQuery('#dw__editform textarea[name=wikitext]').val();
79                params['suffix'] = jQuery('#dw__editform input[name=suffix]').val();
80                if(jQuery('#dw__editform input[name=date]').length > 0) {
81                    params['date'] = jQuery('#dw__editform input[name=id]').val();
82                }
83            }
84
85            jQuery.post(
86                DOKU_BASE + 'lib/exe/ajax.php',
87                params,
88                dw_locktimer.refreshed,
89                'html'
90            );
91            dw_locktimer.lasttime = now;
92        }
93    },
94
95    /**
96     * Callback. Resets the warning timer
97     */
98    refreshed: function(data){
99        var error = data.charAt(0);
100        data = data.substring(1);
101
102        jQuery('#draft__status').html(data);
103        if(error != '1') return; // locking failed
104        dw_locktimer.reset();
105    }
106};
107