[Mapbender-commits] r5011 - trunk/mapbender/http/plugins

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Thu Nov 19 04:57:54 EST 2009


Author: christoph
Date: 2009-11-19 04:57:54 -0500 (Thu, 19 Nov 2009)
New Revision: 5011

Added:
   trunk/mapbender/http/plugins/mb_wmsTimeInterval.js
Log:


Added: trunk/mapbender/http/plugins/mb_wmsTimeInterval.js
===================================================================
--- trunk/mapbender/http/plugins/mb_wmsTimeInterval.js	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_wmsTimeInterval.js	2009-11-19 09:57:54 UTC (rev 5011)
@@ -0,0 +1,263 @@
+/**
+ * Package: wmsTimeInterval
+ *
+ * Description:
+ * Find an interval with two datepickers and attach it to getMap requests
+ * of WMS in your application
+ * 
+ * Files:
+ *  - http/plugins/mb_wmsTimeInterval.js
+ *
+ * SQL:
+ * > INSERT INTO gui_element(fkey_gui_id, e_id, e_pos, e_public, e_comment, e_title, 
+ * > e_element, e_src, e_attributes, e_left, e_top, e_width, e_height, e_z_index, 
+ * > e_more_styles, e_content, e_closetag, e_js_file, e_mb_mod, e_target, e_requires, 
+ * > e_url) VALUES('<gui_id>','wmsTimeInterval',1,1,'select an interval for WMS-T',
+ * > '','div','','',700,40,NULL ,NULL ,2,'','','div',
+ * > '../plugins/mb_wmsTimeInterval.js','','','','');
+ * > 
+ * > INSERT INTO gui_element_vars(fkey_gui_id, fkey_e_id, var_name, var_value, 
+ * > context, var_type) VALUES('<gui_id>', 'wmsTimeInterval', 'wms', '<wmsId>', 
+ * > 'An array in JSON notation, containing the IDs of the WMS that the time parameter is passed to' ,
+ * > 'var');
+ *
+ * Help:
+ * -
+ *
+ * Maintainer:
+ * http://www.mapbender.org/User:Christoph_Baudson
+ * 
+ * Parameters:
+ * wms      - a single numerical WMS id (like 407), or 
+ * 				an array of numerical WMS in JSON notation (like [407,912])
+ *
+ * License:
+ * Copyright (c) 2009, Open Source Geospatial Foundation
+ * This program is dual licensed under the GNU General Public License 
+ * and Simplified BSD license.  
+ * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+ */
+
+var $this = $(this);
+
+if (typeof options.wms === "object") {
+	// default, like [407, 912]
+}
+else if (typeof options.wms === "number") {
+	// just one wms
+	options.wms = [options.wms];
+}
+else {
+	// invalid configuration
+	options.wms = [];
+}
+
+var $datepickerFrom, $datepickerTo;
+
+var getDate = function ($datepicker) {
+	var dateString = $.datepicker.formatDate('yy-mm-dd', 
+		$datepicker.datepicker("getDate")
+	);
+	var dateArray = dateString.split("-");
+	var h = $("#" + $datepicker.attr("id").replace(/_datepicker/, "_h")).val();
+	var m = $("#" + $datepicker.attr("id").replace(/_datepicker/, "_m")).val();
+	
+	var date = new Date();
+	date.setYear(parseInt(dateArray[0], 10));
+	date.setMonth(parseInt(dateArray[1], 10) - 1);
+	date.setDate(parseInt(dateArray[2], 10));
+	date.setHours(parseInt(h, 10));
+	date.setMinutes(parseInt(m, 10));
+	date.setSeconds(0);
+	date.setMilliseconds(0);
+	return date;
+	
+};
+
+var formatDate = function (date) {
+	var mon = date.getMonth();
+	var day = date.getDate();
+	var hours = date.getHours();
+	var min = date.getMinutes();
+
+	return date.getFullYear() + "-" + (mon<10?"0"+mon:mon) + "-" + 
+		(day<10?"0"+day:day) + "T" + (hours<10?"0"+hours:hours) + ":" + 
+		(min<10?"0"+min:min) + ":00Z";
+};
+
+Mapbender.events.init.register(function () {
+
+	var createDialogHtml = function (prefix) {
+		var html = "<form><fieldset>";
+		html += "<div id='" + prefix + "_time'><select id='" + prefix + "_h'>";
+		for (var i = 0; i < 24; i++) {
+			var val = (i<10?"0":"") + i;
+			html += "<option value='" + val + "'>" + val + "</option>";
+		}
+		html += "</select>";
+		html += " : <select id='" + prefix + "_m'>";
+		for (var i = 0; i < 6; i++) {
+			var val = (i*10<10?"0":"") + i*10;
+			html += "<option value='" + val + "'>" + val + "</option>";
+		}
+		html += "</select></div>";
+		html += "<div id='" + prefix + "_datepicker'></div>";
+		html += "</fieldset></form>";
+		return "<div id='" + prefix + "_select' title='Select date'>" + 
+			"<style> fieldset label { display: block; }</style>" + 
+			html + "</div>";
+	};
+	
+	var isEarlier = function (date1, date2) {
+		if (date1.getTime() < date2.getTime()) {
+			return true;
+		}
+		return false;
+	};
+	
+	var updateInput = function ($input, $datepicker) {
+		var date = getDate($datepicker);
+		var result = $datepicker.data("dateChanged").trigger({date: date});
+		if (result) {
+			$input.val(formatDate(date));
+			return true;
+		}
+		return false;
+	};
+	
+	var initDialog = function ($dialog, $datepicker, $input) {
+		$dialog.dialog({
+			bgiframe: true,
+			autoOpen: false,
+			height: 320,
+			width: 300,
+			modal: true,
+			close: function () {
+				$datepicker.datepicker("setDate", $datepicker.data("currentDate"));
+			},
+			buttons: {
+				"Continue": function(){
+					if (updateInput($input, $datepicker)) {
+						$datepicker.data("currentDate", getDate($datepicker));
+						$(this).dialog('close');
+						return;
+					}
+					alert("invalid date selected.");
+				},
+				"Cancel": function(){
+					$datepicker.datepicker("setDate", $datepicker.data("currentDate"));
+					$(this).dialog('close');
+				}
+			}
+		});
+	};
+	
+	//
+	// initialize input fields (this is where the timestamp is)
+	//
+	var getInputHtmlCode = function (input) {
+		return "<input readonly='readonly' id='" + options.id + "_" + 
+			input + "' type='text'></input>";
+	};
+
+	var $inputFrom = $(getInputHtmlCode("from"));
+	var $inputTo = $(getInputHtmlCode("to"));
+	$this.append($inputFrom).append($inputTo);
+	
+	//
+	// initialize datepicker 
+	//	
+	var $dialogFrom = $(createDialogHtml($inputFrom.attr("id")));
+	var $dialogTo = $(createDialogHtml($inputTo.attr("id")));
+	$("#complete_mapbender").append($dialogFrom).append($dialogTo);
+
+	$datepickerFrom = $("#" + $inputFrom.attr("id") + "_datepicker");
+	$datepickerFrom.datepicker({
+		dateFormat: 'yy-mm-dd',
+		defaultDate: "-1d"
+	});
+	$datepickerTo = $("#" + $inputTo.attr("id") + "_datepicker");
+	$datepickerTo.datepicker({
+		dateFormat: 'yy-mm-dd'
+	});
+	
+	//
+	// bind events to datepickers
+	//
+	$datepickerFrom.data("dateChanged", new Mapbender.Event());
+	$datepickerFrom.data("dateChanged").register(function () {
+		// from must be earlier than to
+		if (!isEarlier(getDate($datepickerFrom), getDate($datepickerTo))) {
+			return false;
+		}
+		// adjust date for to
+		$datepickerTo.datepicker('option', 'minDate', getDate($datepickerFrom));
+		return true;
+	});
+	
+	$datepickerTo.data("dateChanged", new Mapbender.Event());
+	$datepickerTo.data("dateChanged").register(function () {
+		// from must be earlier than to
+		if (!isEarlier(getDate($datepickerFrom), getDate($datepickerTo))) {
+			return false;
+		}
+		// adjust date for to
+		$datepickerFrom.datepicker('option', 'maxDate', getDate($datepickerTo));
+		return true;
+	});
+
+	//
+	// initialize dialog
+	//
+	initDialog($dialogFrom, $datepickerFrom, $inputFrom);
+	initDialog($dialogTo, $datepickerTo, $inputTo);
+	
+	//
+	// set defaults in input fields
+	//
+	updateInput($inputFrom, $datepickerFrom);
+	updateInput($inputTo, $datepickerTo);
+	
+	//
+	// add click behaviour to button
+	//
+	$inputFrom.click(function () {
+		$datepickerFrom.data("currentDate", getDate($datepickerFrom));
+		$dialogFrom.dialog('open');
+	});
+	$inputTo.click(function () {
+		$datepickerTo.data("currentDate", getDate($datepickerTo));
+		$dialogTo.dialog('open');
+	});
+});
+
+//
+// create an API function that is called by the add vendor specific code
+//
+var Api = function (options) {
+	this.addTimeToWms = function (currentWms, functionName) {
+		if (functionName !== "setMapRequest" &&
+			functionName !== "setSingleMapRequest") {
+			return "";
+		}
+		if (typeof $datepickerFrom === "undefined" || 
+			typeof $datepickerTo === "undefined") {
+			return "";
+		}
+		for (var i = 0; i < options.wms; i++) {
+			if (options.wms[i] === parseInt(currentWms.wms_id, 10)) {
+				return "TIME=" + 
+					formatDate(getDate($datepickerFrom)) + "/" + 
+					formatDate(getDate($datepickerTo));
+			}
+		}
+		return "";
+	};
+};
+
+Mapbender.modules[options.id] = $.extend(new Api(options), Mapbender.modules[options.id]);
+
+//
+// register the API function with add vendor specific
+//
+mb_registerVendorSpecific("Mapbender.modules." + options.id + ".addTimeToWms(currentWms, functionName);");



More information about the Mapbender_commits mailing list