summaryrefslogtreecommitdiff
path: root/lib/scripts/edit.js
diff options
context:
space:
mode:
authorGina Haeussge <gina@foosel.net>2010-06-27 12:25:15 +0200
committerGina Haeussge <gina@foosel.net>2010-06-27 12:25:15 +0200
commit40f3c0b59813d467030d51948d518069141fd998 (patch)
tree6e8e8b6e1c4f4be48ac76600f15bb8ff2c1c5ef0 /lib/scripts/edit.js
parent1a93c67cff4a7b3e30186141cd17f4ba6e113e84 (diff)
downloadrpg-40f3c0b59813d467030d51948d518069141fd998.tar.gz
rpg-40f3c0b59813d467030d51948d518069141fd998.tar.bz2
FS#433: Editor now uses onbeforeunload event to capture ANY leaving of it
besides via Save or Preview button. This has been successfully tested in FF, Chrome and IE6/7/8. Opera does not support onbeforeunload, therefore the draft is kept if the user navigates away from the editor. Please test this.
Diffstat (limited to 'lib/scripts/edit.js')
-rw-r--r--lib/scripts/edit.js59
1 files changed, 23 insertions, 36 deletions
diff --git a/lib/scripts/edit.js b/lib/scripts/edit.js
index e66154f83..5178dba4c 100644
--- a/lib/scripts/edit.js
+++ b/lib/scripts/edit.js
@@ -258,35 +258,30 @@ function currentHeadlineLevel(textboxId){
var textChanged = false;
/**
- * Check for changes before leaving the page
+ * Delete the draft before leaving the page
*/
-function changeCheck(){
- if(textChanged){
- var ok = confirm(LANG.notsavedyet);
- if(ok){
- // remove a possibly saved draft using ajax
- var dwform = $('dw__editform');
- if(dwform){
- var params = 'call=draftdel';
- params += '&id='+encodeURIComponent(dwform.elements.id.value);
-
- var sackobj = new sack(DOKU_BASE + 'lib/exe/ajax.php');
- sackobj.AjaxFailedAlert = '';
- sackobj.encodeURIString = false;
- sackobj.runAJAX(params);
- // we send this request blind without waiting for
- // and handling the returned data
- }
+function deleteDraft() {
+ if (is_opera) return;
+
+ // remove a possibly saved draft using ajax
+ var dwform = $('dw__editform');
+ if(dwform){
+ var params = 'call=draftdel';
+ params += '&id='+encodeURIComponent(dwform.elements.id.value);
+
+ var sackobj = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ // this needs to be synchronous and GET to not be aborted upon page unload
+ sackobj.asynchronous = false;
+ sackobj.method = 'GET';
+ sackobj.AjaxFailedAlert = '';
+ sackobj.encodeURIString = false;
+ sackobj.runAJAX(params);
}
- return ok;
- }else{
- return true;
- }
}
/**
- * Add changeCheck to all Links and Forms (except those with a
- * JSnocheck class), add handlers to monitor changes
+ * Activate "not saved" dialog, add draft deletion to page unload,
+ * add handlers to monitor changes
*
* Sets focus to the editbox as well
*/
@@ -309,20 +304,12 @@ addInitEvent(function (){
addEvent(editform, 'change', checkfunc);
addEvent(editform, 'keydown', checkfunc);
- // add change check for links
- var links = document.getElementsByTagName('a');
- for(var i=0; i < links.length; i++){
- if(links[i].className.indexOf('JSnocheck') == -1){
- addEvent(links[i], 'click', changeCheck);
- }
- }
- // add change check for forms
- var forms = document.forms;
- for(i=0; i < forms.length; i++){
- if(forms[i].className.indexOf('JSnocheck') == -1){
- addEvent(forms[i], 'submit', changeCheck);
+ window.onbeforeunload = function(){
+ if(textChanged) {
+ return LANG.notsavedyet;
}
}
+ window.onunload = deleteDraft;
// reset change memory var on submit
addEvent($('edbtn__save'), 'click', function(){ textChanged = false; });