[Mapbender-commits] r5749 - trunk/mapbender/http/javascripts

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Thu Mar 11 09:49:22 EST 2010


Author: christoph
Date: 2010-03-11 09:49:21 -0500 (Thu, 11 Mar 2010)
New Revision: 5749

Modified:
   trunk/mapbender/http/javascripts/mod_savewmc.js
Log:
refactored

Modified: trunk/mapbender/http/javascripts/mod_savewmc.js
===================================================================
--- trunk/mapbender/http/javascripts/mod_savewmc.js	2010-03-11 14:32:47 UTC (rev 5748)
+++ trunk/mapbender/http/javascripts/mod_savewmc.js	2010-03-11 14:49:21 UTC (rev 5749)
@@ -67,263 +67,296 @@
 // button behaviour
 //
 var $this = $(this);
-$this.click(function () {
-	mod_savewmc();
-}).mouseover(function () {
-	if (options.src) {
-		this.src = options.src.replace(/_off/, "_over");
-	}
-}).mouseout(function () {
-	if (options.src) {
-		this.src = options.src;
-	}
-});
 
+var SaveWmcApi = function () {
+	var that = this;
 
-// not used at the moment (?)
-var setOnUnload = function () {
-	$(window).unload(function () {
-		mod_savewmc_session();
-	});
-};
+	this.extensionData = {};
+	
+	this.events = {
+		saved: new Mapbender.Event()
+	};
+	
+	this.setExtensionData = function (key, value) {
+		if (typeof key === "string") {
+			this.extensionData[key]	= value;
+		}
+		return this;
+	};
+	
+	this.save = function (obj) {
+		if (typeof obj !== "object") {
+			new Mapbender.Exception("Invalid parameters.");
+			return this;
+		}
+		if (obj.session === true) {
+			sendMapDataToServer("session", 1, function(result, status) {});
+			return this;
+		}
+		if (typeof obj.attributes === "object" && typeof obj.callback === "function") {
+			sendMapDataToServer(obj.attributes, 0, obj.callback);
+		}
+		return this;
+	};
 
-var getExistingWmcData = function (callback) {
-	// get WMC data from server
-	var req = new Mapbender.Ajax.Request({
-		url: "../php/mod_loadwmc_server.php",
-		method: "getWmc",
-		callback: function(obj, result, message){
-			if (!result) {
-				new Mb_exception(message);
-				return;
+	var sendMapDataToServer = function (attributes, storeInSession, callbackFunction) {
+		var	extensionDataString = "";
+		if (that.extensionData !== null) {
+			extensionDataString = $.toJSON(that.extensionData);
+		}
+	
+		if (storeInSession) {
+			$.ajaxSetup({async:false}); 
+		}
+	
+		//
+		// WORKAROUND....cannot serialize map object,
+		// as it contains a jQuery collection, which is
+		// cyclic.
+		// Removing the $target from the map object before
+		// serialization, and re-appending it afterwards
+		//
+		var $target = [];
+		for (var i = 0; i < mb_mapObj.length; i++) {
+			$target.push(mb_mapObj[i].$target);
+			delete mb_mapObj[i].$target;
+		}
+	    
+		// actual save request
+		var req = new Mapbender.Ajax.Request({
+	        url: "../php/mod_savewmc_server.php",
+	        method: "saveWMC",
+			parameters : {
+			  saveInSession:storeInSession, 
+			  attributes:attributes,
+			  overwrite: overwrite,
+			  extensionData:extensionDataString, 
+			  mapObject:$.toJSON(mb_mapObj)
+			},
+	        callback: function(result, status, message) {
+				callbackFunction(result, status, message);
+				that.events.saved.trigger();
 			}
-			if (typeof callback === "function") {
-				callback(obj.wmc);
-			}
+	    }); 
+	    req.send();
+
+		//
+		// reversal of above WORKAROUND
+		//
+		for (var i = 0; i < mb_mapObj.length; i++) {
+			mb_mapObj[i].$target = $target[i];
 		}
-	});
-	req.send();
-};
+	};
 
-var createSelectBoxForExistingWmcs = function (obj) {
-	(function () {
-		$select = $("#" + options.id + "_wmctype").empty();
-		var select = "<option value=''>" + translatedI18nObj.labelNewWmc + "</option>";
-		if (typeof obj === "object" && obj.length) {
-			for (var i = 0; i < obj.length; i++) {
-				var wmc = obj[i];
-				if (wmc.disabled) {
-					continue;
+	var localize = function () {
+		//
+		// buttons
+		//
+		$("#" + options.id + "_saveWMCForm").dialog('option', 'buttons', getButtons());
+		
+		// title
+		$("#" + options.id + "_saveWMCForm").dialog('option', 'title', translatedI18nObj.title);
+		
+		//
+		// form
+		//
+		var $form = $("#" + options.id + "_saveWMCForm > form > fieldset");
+		$form.children("label").each(function () {
+			var forId = $(this).attr("for");
+			switch (forId) {
+				case options.id + "_wmctype" : 
+					$(this).text(translatedI18nObj.labelNewOrOverwrite).next()
+						.children().eq(0).text(translatedI18nObj.labelNewWmc);
+					break;
+				case options.id + ":wmcname" : 
+					$(this).text(translatedI18nObj.labelName);
+					break;
+				case options.id + "_wmcabstract" : 
+					$(this).text(translatedI18nObj.labelAbstract);
+					break;
+				case options.id + "_wmckeywords" : 
+					$(this).text(translatedI18nObj.labelKeywords);
+					break;
+				case options.id + "_wmckeywords" : 
+					$(this).text(translatedI18nObj.labelKeywords);
+					break;
+			}
+		});
+		var $legend = $form.next().children("legend");
+		$legend.text(translatedI18nObj.labelCategories);
+	};
+
+	var getExistingWmcData = function (callback) {
+		// get WMC data from server
+		var req = new Mapbender.Ajax.Request({
+			url: "../php/mod_loadwmc_server.php",
+			method: "getWmc",
+			callback: function(obj, result, message){
+				if (!result) {
+					new Mb_exception(message);
+					return;
 				}
-				select += "<option value='" + wmc.id + "'>" + 
-					wmc.title + "</option>";
+				if (typeof callback === "function") {
+					callback(obj.wmc);
+				}
 			}
-		}
-		select += "</select>";
-		$select.html(select).change(function () {
-			//
-			// reset fields if new wmc is saved
-			//		
-			if (this.value === "") {
-				$("#" + options.id + "_wmcname").val("");
-				$("#" + options.id + "_wmcabstract").val("");
-				$("#" + options.id + "_wmckeywords").val("");
-				$("input[id^='" + options.id + "_wmcinspire_']").removeAttr("checked");
-				return false;
+		});
+		req.send();
+	};
+	
+	var createSelectBoxForExistingWmcs = function (obj) {
+		(function () {
+			$select = $("#" + options.id + "_wmctype").empty();
+			var select = "<option value=''>" + translatedI18nObj.labelNewWmc + "</option>";
+			if (typeof obj === "object" && obj.length) {
+				for (var i = 0; i < obj.length; i++) {
+					var wmc = obj[i];
+					if (wmc.disabled) {
+						continue;
+					}
+					select += "<option value='" + wmc.id + "'>" + 
+						wmc.title + "</option>";
+				}
 			}
-			//
-			// set fields according to wmc
-			//
-			for (var i = 0; i < obj.length; i++) {
-				var wmc = obj[i];
-				if (wmc.id === this.value) {
-					$("#" + options.id + "_wmcname").val(wmc.title);
-					$("#" + options.id + "_wmcabstract").val(wmc.abstract);
-					$("#" + options.id + "_wmckeywords").val(wmc.keywords.join(","));
+			select += "</select>";
+			$select.html(select).change(function () {
+				//
+				// reset fields if new wmc is saved
+				//		
+				if (this.value === "") {
+					$("#" + options.id + "_wmcname").val("");
+					$("#" + options.id + "_wmcabstract").val("");
+					$("#" + options.id + "_wmckeywords").val("");
 					$("input[id^='" + options.id + "_wmcinspire_']").removeAttr("checked");
-					for (var j = 0; j < wmc.categories.length; j++) {
-						var cat = wmc.categories[j];
-						$("#" + options.id + "_wmcinspire_" + cat).attr("checked", "checked");
-					}
 					return false;
 				}
-			}
-		});
-	})();
-};
-
-var getButtons = function () {
-	var buttonObj = {};
-	buttonObj[translatedI18nObj.labelSave] = function() {
-		var inspire_cat = {};
-		var regExp = new RegExp(options.id + "_");
-		$("#" + options.id + "_wmcinspire:checkbox").each(function(){
-			if(!!$(this).attr('checked')) {
-				inspire_cat[$(this).attr('id').replace(regExp, "")] = true;
-			}
-		});
-		var attributes = {};
-		attributes.title 	= $("#" + options.id + "_wmcname").val();
-		attributes.abstract = $("#" + options.id + "_wmcabstract").val();
-		attributes.keywords = $("#" + options.id + "_wmckeywords").val();
-		attributes.inspirecat = inspire_cat;
-		if (!!attributes.title) {
-			sendMapDataToServer(attributes, 0, (function(result, status, message) {
-				alert(message);
-				$("#" + options.id + "_saveWMCForm form")[0].reset();
-			}));
-		}else{
-			//perfom validation	
-		}
-		$(this).dialog('close');
+				//
+				// set fields according to wmc
+				//
+				for (var i = 0; i < obj.length; i++) {
+					var wmc = obj[i];
+					if (wmc.id === this.value) {
+						$("#" + options.id + "_wmcname").val(wmc.title);
+						$("#" + options.id + "_wmcabstract").val(wmc.abstract);
+						$("#" + options.id + "_wmckeywords").val(wmc.keywords.join(","));
+						$("input[id^='" + options.id + "_wmcinspire_']").removeAttr("checked");
+						for (var j = 0; j < wmc.categories.length; j++) {
+							var cat = wmc.categories[j];
+							$("#" + options.id + "_wmcinspire_" + cat).attr("checked", "checked");
+						}
+						return false;
+					}
+				}
+			});
+		})();
 	};
-	buttonObj[translatedI18nObj.labelCancel] = function() {
-		$("#" + options.id + "_saveWMCForm form")[0].reset();
-		$(this).dialog('close');
-	};
-	return buttonObj;
-};
-
-Mapbender.events.init.register(function () {
-	if (saveInSession === 1 && typeof options.target === "object" 
-		&& options.target.length && options.target.length > 0) {
-		try {
-			Mapbender.modules[options.target[0]].afterMapRequest.register(function () {
-				mod_savewmc_session();
+	
+	var getButtons = function () {
+		var buttonObj = {};
+		buttonObj[translatedI18nObj.labelSave] = function() {
+			var inspire_cat = {};
+			var regExp = new RegExp(options.id + "_");
+			$("#" + options.id + "_wmcinspire:checkbox").each(function(){
+				if(!!$(this).attr('checked')) {
+					inspire_cat[$(this).attr('id').replace(regExp, "")] = true;
+				}
 			});
-		}
-		catch (exc) {
-			new Mb_exception(options.target[0] + " is not in this application.");			
-		}
-	}
-
-	var t = translatedI18nObj;
-	var savewmcHtml = '<div id="' + options.id + '_saveWMCForm" ' + 
-		'title="' + translatedI18nObj.title + '">' + 
-		'<style> fieldset label { display: block; }</style>' + 
-		wmcSaveFormHtml + 
-		'</div>';
-
-	var $saveWmcDialog = $(savewmcHtml).dialog({
-		bgiframe: true,
-		autoOpen: false,
-		height: 400,
-		width: 500,
-		modal: true,
-		beforeclose: function (event, ui) {
-			try {
-				$saveWmcDialog.parent().effect("transfer", {
-					to: $this
-				}, 300);
+			var attributes = {};
+			attributes.title 	= $("#" + options.id + "_wmcname").val();
+			attributes.abstract = $("#" + options.id + "_wmcabstract").val();
+			attributes.keywords = $("#" + options.id + "_wmckeywords").val();
+			attributes.inspirecat = inspire_cat;
+			if (!!attributes.title) {
+				sendMapDataToServer(attributes, 0, (function(result, status, message) {
+					alert(message);
+					$("#" + options.id + "_saveWMCForm form")[0].reset();
+				}));
 			}
-			catch (exc) {
-				new Mb_warning("jq_ui_effect is missing.");
+			else{
+				//perfom validation	
 			}
-		},
-		buttons: getButtons()
-	});
-});
-
-function mod_savewmc_session(){
-	sendMapDataToServer("session", 1, function(result, status) {});
-}
-
-var localize = function () {
-	//
-	// buttons
-	//
-	$("#" + options.id + "_saveWMCForm").dialog('option', 'buttons', getButtons());
+			$(this).dialog('close');
+		};
+		buttonObj[translatedI18nObj.labelCancel] = function() {
+			$("#" + options.id + "_saveWMCForm form")[0].reset();
+			$(this).dialog('close');
+		};
+		return buttonObj;
+	};
 	
-	// title
-	$("#" + options.id + "_saveWMCForm").dialog('option', 'title', translatedI18nObj.title);
+	var mod_savewmc = function () {
+		getExistingWmcData(function (obj) {
+			createSelectBoxForExistingWmcs(obj);
+			$("#" + options.id + "_saveWMCForm").dialog('open');
+		});
+	};
 	
 	//
-	// form
+	// constructor
 	//
-	var $form = $("#" + options.id + "_saveWMCForm > form > fieldset");
-	$form.children("label").each(function () {
-		var forId = $(this).attr("for");
-		switch (forId) {
-			case options.id + "_wmctype" : 
-				$(this).text(translatedI18nObj.labelNewOrOverwrite).next()
-					.children().eq(0).text(translatedI18nObj.labelNewWmc);
-				break;
-			case options.id + ":wmcname" : 
-				$(this).text(translatedI18nObj.labelName);
-				break;
-			case options.id + "_wmcabstract" : 
-				$(this).text(translatedI18nObj.labelAbstract);
-				break;
-			case options.id + "_wmckeywords" : 
-				$(this).text(translatedI18nObj.labelKeywords);
-				break;
-			case options.id + "_wmckeywords" : 
-				$(this).text(translatedI18nObj.labelKeywords);
-				break;
-		}
-	});
-	var $legend = $form.next().children("legend");
-	$legend.text(translatedI18nObj.labelCategories);
-};
 
-Mapbender.events.localize.register(function () {
-	Mapbender.modules.i18n.queue(options.id, originalI18nObj, function (translatedObj) {
-		if (typeof translatedObj !== "object") {
-			return;
+	$this.click(function () {
+		mod_savewmc();
+	}).mouseover(function () {
+		if (options.src) {
+			this.src = options.src.replace(/_off/, "_over");
 		}
-		translatedI18nObj = translatedObj;
-		try {
-			localize();
+	}).mouseout(function () {
+		if (options.src) {
+			this.src = options.src;
 		}
-		catch (exc) {
-			new Mb_warning("Error when translating: " . exc.message);
-		}
 	});
-});
 
-var mod_savewmc = function () {
-	getExistingWmcData(function (obj) {
-		createSelectBoxForExistingWmcs(obj);
-		$("#" + options.id + "_saveWMCForm").dialog('open');
+	Mapbender.events.init.register(function () {
+		if (saveInSession === 1) {
+			options.$target.each(function () {
+				this.events.afterMapRequest.register(function () {
+					mod_savewmc_session();
+				});
+			});
+		}
+	
+		var t = translatedI18nObj;
+		var savewmcHtml = '<div id="' + options.id + '_saveWMCForm" ' + 
+			'title="' + translatedI18nObj.title + '">' + 
+			'<style> fieldset label { display: block; }</style>' + 
+			wmcSaveFormHtml + 
+			'</div>';
+	
+		var $saveWmcDialog = $(savewmcHtml).dialog({
+			bgiframe: true,
+			autoOpen: false,
+			height: 400,
+			width: 500,
+			modal: true,
+			beforeclose: function (event, ui) {
+				try {
+					$saveWmcDialog.parent().effect("transfer", {
+						to: $this
+					}, 300);
+				}
+				catch (exc) {
+					new Mb_warning("jq_ui_effect is missing.");
+				}
+			},
+			buttons: getButtons()
+		});
 	});
+	
+	Mapbender.events.localize.register(function () {
+		Mapbender.modules.i18n.queue(options.id, originalI18nObj, function (translatedObj) {
+			if (typeof translatedObj !== "object") {
+				return;
+			}
+			translatedI18nObj = translatedObj;
+			try {
+				localize();
+			}
+			catch (exc) {
+				new Mapbender.Warning("Error when translating: " . exc.message);
+			}
+		});
+	});
 };
 
-var sendMapDataToServer = function (attributes, storeInSession, callbackFunction) {
-	var	extensionDataString = "";
-	if (currentWmcExtensionData !== null) {
-		extensionDataString = $.toJSON(currentWmcExtensionData);
-	}
-
-	if (storeInSession) {
-		$.ajaxSetup({async:false}); 
-	}
-
-	//
-	// WORKAROUND....cannot serialize map object,
-	// as it contains a jQuery collection, which is
-	// cyclic.
-	// Removing the $target from the map object before
-	// serialization, and re-appending it afterwards
-	//
-	var $target = [];
-	for (var i = 0; i < mb_mapObj.length; i++) {
-		$target.push(mb_mapObj[i].$target);
-		delete mb_mapObj[i].$target;
-	}
-    var req = new Mapbender.Ajax.Request({
-        url: "../php/mod_savewmc_server.php",
-        method: "saveWMC",
-		parameters : {
-		  saveInSession:storeInSession, 
-		  attributes:attributes,
-		  overwrite: overwrite,
-		  extensionData:extensionDataString, 
-		  mapObject:$.toJSON(mb_mapObj)
-		},
-        callback: callbackFunction
-    }); 
-    req.send();
-	for (var i = 0; i < mb_mapObj.length; i++) {
-		mb_mapObj[i].$target = $target[i];
-	}
-};
+$this.mapbender(new SaveWmcApi());



More information about the Mapbender_commits mailing list