summaryrefslogtreecommitdiffstats
path: root/public/javascripts
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2011-02-21 09:53:29 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2011-02-21 09:53:29 +0000
commit17591a3ea58a6da8d619bdd9dd0ece4b73a07402 (patch)
tree1ca2cd6fc86457ea58caf4e1adca21679bd4fafc /public/javascripts
parent11c72f2823f19172a480a6636fc32495de8e018a (diff)
downloadredmine-17591a3ea58a6da8d619bdd9dd0ece4b73a07402.tar.gz
redmine-17591a3ea58a6da8d619bdd9dd0ece4b73a07402.zip
Warning on leaving a page with unsaved content in textarea (#2910).
The warning can be turned off in the user's preference. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4900 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'public/javascripts')
-rw-r--r--public/javascripts/application.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/public/javascripts/application.js b/public/javascripts/application.js
index 6cea8f3dd..a88856ea6 100644
--- a/public/javascripts/application.js
+++ b/public/javascripts/application.js
@@ -255,6 +255,49 @@ function observeProjectModules() {
Event.observe('project_enabled_module_names_issue_tracking', 'change', f);
}
+/*
+ * Class used to warn user when leaving a page with unsaved textarea
+ * Author: mathias.fischer@berlinonline.de
+*/
+
+var WarnLeavingUnsaved = Class.create({
+ observedForms: false,
+ observedElements: false,
+ changedForms: false,
+ message: null,
+
+ initialize: function(message){
+ this.observedForms = $$('form');
+ this.observedElements = $$('textarea');
+ this.message = message;
+
+ this.observedElements.each(this.observeChange.bind(this));
+ this.observedForms.each(this.submitAction.bind(this));
+
+ window.onbeforeunload = this.unload.bind(this);
+ },
+
+ unload: function(){
+ if(this.changedForms)
+ return this.message;
+ },
+
+ setChanged: function(){
+ this.changedForms = true;
+ },
+
+ setUnchanged: function(){
+ this.changedForms = false;
+ },
+
+ observeChange: function(element){
+ element.observe('change',this.setChanged.bindAsEventListener(this));
+ },
+
+ submitAction: function(element){
+ element.observe('submit',this.setUnchanged.bindAsEventListener(this));
+ }
+});
/* shows and hides ajax indicator */
Ajax.Responders.register({