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