diff public/javascripts/application.js @ 245:051f544170fe

* Update to SVN trunk revision 4993
author Chris Cannam
date Thu, 03 Mar 2011 11:42:28 +0000
parents 8661b858af72
children 73ff0e6a11b1 cbce1fd3b1b7
line wrap: on
line diff
--- a/public/javascripts/application.js	Thu Mar 03 11:40:10 2011 +0000
+++ b/public/javascripts/application.js	Thu Mar 03 11:42:28 2011 +0000
@@ -46,6 +46,12 @@
 	Effect.toggle(fieldset.down('div'), 'slide', {duration:0.2});
 }
 
+function hideFieldset(el) {
+	var fieldset = Element.up(el, 'fieldset');
+	fieldset.toggleClassName('collapsed');
+	fieldset.down('div').hide();
+}
+
 var fileFieldCount = 1;
 
 function addFileField() {
@@ -249,6 +255,49 @@
   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({