alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Struts example source code file (format.js)

This example Struts source code file (format.js) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Struts tags/keywords

could, date, e, g, h, h, k, k, m, m, parsed, s, s, y

The Struts format.js source code

/*
	Copyright (c) 2004-2006, The Dojo Foundation
	All Rights Reserved.

	Licensed under the Academic Free License version 2.1 or above OR the
	modified BSD license. For more information on Dojo licensing, see:

		http://dojotoolkit.org/community/licensing.shtml
*/



dojo.provide("dojo.date.format");
dojo.require("dojo.date.common");
dojo.require("dojo.date.supplemental");
dojo.require("dojo.lang.array");
dojo.require("dojo.lang.common");
dojo.require("dojo.lang.func");
dojo.require("dojo.string.common");
dojo.require("dojo.i18n.common");
dojo.requireLocalization("dojo.i18n.calendar", "gregorian", null, "ko,zh-cn,zh,sv,ja,en,zh-tw,it,hu,nl,fi,zh-hk,fr,pt,ROOT,es,de,pt-br");
dojo.requireLocalization("dojo.i18n.calendar", "gregorianExtras", null, "zh,ROOT,ja");
(function () {
	dojo.date.format = function (dateObject, options) {
		if (typeof options == "string") {
			dojo.deprecated("dojo.date.format", "To format dates with POSIX-style strings, please use dojo.date.strftime instead", "0.5");
			return dojo.date.strftime(dateObject, options);
		}
		function formatPattern(dateObject, pattern) {
			return pattern.replace(/([a-z])\1*/ig, function (match) {
				var s;
				var c = match.charAt(0);
				var l = match.length;
				var pad;
				var widthList = ["abbr", "wide", "narrow"];
				switch (c) {
				  case "G":
					if (l > 3) {
						dojo.unimplemented("Era format not implemented");
					}
					s = info.eras[dateObject.getFullYear() < 0 ? 1 : 0];
					break;
				  case "y":
					s = dateObject.getFullYear();
					switch (l) {
					  case 1:
						break;
					  case 2:
						s = String(s).substr(-2);
						break;
					  default:
						pad = true;
					}
					break;
				  case "Q":
				  case "q":
					s = Math.ceil((dateObject.getMonth() + 1) / 3);
					switch (l) {
					  case 1:
					  case 2:
						pad = true;
						break;
					  case 3:
					  case 4:
						dojo.unimplemented("Quarter format not implemented");
					}
					break;
				  case "M":
				  case "L":
					var m = dateObject.getMonth();
					var width;
					switch (l) {
					  case 1:
					  case 2:
						s = m + 1;
						pad = true;
						break;
					  case 3:
					  case 4:
					  case 5:
						width = widthList[l - 3];
						break;
					}
					if (width) {
						var type = (c == "L") ? "standalone" : "format";
						var prop = ["months", type, width].join("-");
						s = info[prop][m];
					}
					break;
				  case "w":
					var firstDay = 0;
					s = dojo.date.getWeekOfYear(dateObject, firstDay);
					pad = true;
					break;
				  case "d":
					s = dateObject.getDate();
					pad = true;
					break;
				  case "D":
					s = dojo.date.getDayOfYear(dateObject);
					pad = true;
					break;
				  case "E":
				  case "e":
				  case "c":
					var d = dateObject.getDay();
					var width;
					switch (l) {
					  case 1:
					  case 2:
						if (c == "e") {
							var first = dojo.date.getFirstDayOfWeek(options.locale);
							d = (d - first + 7) % 7;
						}
						if (c != "c") {
							s = d + 1;
							pad = true;
							break;
						}
					  case 3:
					  case 4:
					  case 5:
						width = widthList[l - 3];
						break;
					}
					if (width) {
						var type = (c == "c") ? "standalone" : "format";
						var prop = ["days", type, width].join("-");
						s = info[prop][d];
					}
					break;
				  case "a":
					var timePeriod = (dateObject.getHours() < 12) ? "am" : "pm";
					s = info[timePeriod];
					break;
				  case "h":
				  case "H":
				  case "K":
				  case "k":
					var h = dateObject.getHours();
					switch (c) {
					  case "h":
						s = (h % 12) || 12;
						break;
					  case "H":
						s = h;
						break;
					  case "K":
						s = (h % 12);
						break;
					  case "k":
						s = h || 24;
						break;
					}
					pad = true;
					break;
				  case "m":
					s = dateObject.getMinutes();
					pad = true;
					break;
				  case "s":
					s = dateObject.getSeconds();
					pad = true;
					break;
				  case "S":
					s = Math.round(dateObject.getMilliseconds() * Math.pow(10, l - 3));
					break;
				  case "v":
				  case "z":
					s = dojo.date.getTimezoneName(dateObject);
					if (s) {
						break;
					}
					l = 4;
				  case "Z":
					var offset = dateObject.getTimezoneOffset();
					var tz = [(offset <= 0 ? "+" : "-"), dojo.string.pad(Math.floor(Math.abs(offset) / 60), 2), dojo.string.pad(Math.abs(offset) % 60, 2)];
					if (l == 4) {
						tz.splice(0, 0, "GMT");
						tz.splice(3, 0, ":");
					}
					s = tz.join("");
					break;
				  case "Y":
				  case "u":
				  case "W":
				  case "F":
				  case "g":
				  case "A":
					dojo.debug(match + " modifier not yet implemented");
					s = "?";
					break;
				  default:
					dojo.raise("dojo.date.format: invalid pattern char: " + pattern);
				}
				if (pad) {
					s = dojo.string.pad(s, l);
				}
				return s;
			});
		}
		options = options || {};
		var locale = dojo.hostenv.normalizeLocale(options.locale);
		var formatLength = options.formatLength || "full";
		var info = dojo.date._getGregorianBundle(locale);
		var str = [];
		var sauce = dojo.lang.curry(this, formatPattern, dateObject);
		if (options.selector != "timeOnly") {
			var datePattern = options.datePattern || info["dateFormat-" + formatLength];
			if (datePattern) {
				str.push(_processPattern(datePattern, sauce));
			}
		}
		if (options.selector != "dateOnly") {
			var timePattern = options.timePattern || info["timeFormat-" + formatLength];
			if (timePattern) {
				str.push(_processPattern(timePattern, sauce));
			}
		}
		var result = str.join(" ");
		return result;
	};
	dojo.date.parse = function (value, options) {
		options = options || {};
		var locale = dojo.hostenv.normalizeLocale(options.locale);
		var info = dojo.date._getGregorianBundle(locale);
		var formatLength = options.formatLength || "full";
		if (!options.selector) {
			options.selector = "dateOnly";
		}
		var datePattern = options.datePattern || info["dateFormat-" + formatLength];
		var timePattern = options.timePattern || info["timeFormat-" + formatLength];
		var pattern;
		if (options.selector == "dateOnly") {
			pattern = datePattern;
		} else {
			if (options.selector == "timeOnly") {
				pattern = timePattern;
			} else {
				if (options.selector == "dateTime") {
					pattern = datePattern + " " + timePattern;
				} else {
					var msg = "dojo.date.parse: Unknown selector param passed: '" + options.selector + "'.";
					msg += " Defaulting to date pattern.";
					dojo.debug(msg);
					pattern = datePattern;
				}
			}
		}
		var groups = [];
		var dateREString = _processPattern(pattern, dojo.lang.curry(this, _buildDateTimeRE, groups, info, options));
		var dateRE = new RegExp("^" + dateREString + "$");
		var match = dateRE.exec(value);
		if (!match) {
			return null;
		}
		var widthList = ["abbr", "wide", "narrow"];
		var result = new Date(1972, 0);
		var expected = {};
		for (var i = 1; i < match.length; i++) {
			var grp = groups[i - 1];
			var l = grp.length;
			var v = match[i];
			switch (grp.charAt(0)) {
			  case "y":
				if (l != 2) {
					result.setFullYear(v);
					expected.year = v;
				} else {
					if (v < 100) {
						v = Number(v);
						var year = "" + new Date().getFullYear();
						var century = year.substring(0, 2) * 100;
						var yearPart = Number(year.substring(2, 4));
						var cutoff = Math.min(yearPart + 20, 99);
						var num = (v < cutoff) ? century + v : century - 100 + v;
						result.setFullYear(num);
						expected.year = num;
					} else {
						if (options.strict) {
							return null;
						}
						result.setFullYear(v);
						expected.year = v;
					}
				}
				break;
			  case "M":
				if (l > 2) {
					if (!options.strict) {
						v = v.replace(/\./g, "");
						v = v.toLowerCase();
					}
					var months = info["months-format-" + widthList[l - 3]].concat();
					for (var j = 0; j < months.length; j++) {
						if (!options.strict) {
							months[j] = months[j].toLowerCase();
						}
						if (v == months[j]) {
							result.setMonth(j);
							expected.month = j;
							break;
						}
					}
					if (j == months.length) {
						dojo.debug("dojo.date.parse: Could not parse month name: '" + v + "'.");
						return null;
					}
				} else {
					result.setMonth(v - 1);
					expected.month = v - 1;
				}
				break;
			  case "E":
			  case "e":
				if (!options.strict) {
					v = v.toLowerCase();
				}
				var days = info["days-format-" + widthList[l - 3]].concat();
				for (var j = 0; j < days.length; j++) {
					if (!options.strict) {
						days[j] = days[j].toLowerCase();
					}
					if (v == days[j]) {
						break;
					}
				}
				if (j == days.length) {
					dojo.debug("dojo.date.parse: Could not parse weekday name: '" + v + "'.");
					return null;
				}
				break;
			  case "d":
				result.setDate(v);
				expected.date = v;
				break;
			  case "a":
				var am = options.am || info.am;
				var pm = options.pm || info.pm;
				if (!options.strict) {
					v = v.replace(/\./g, "").toLowerCase();
					am = am.replace(/\./g, "").toLowerCase();
					pm = pm.replace(/\./g, "").toLowerCase();
				}
				if (options.strict && v != am && v != pm) {
					dojo.debug("dojo.date.parse: Could not parse am/pm part.");
					return null;
				}
				var hours = result.getHours();
				if (v == pm && hours < 12) {
					result.setHours(hours + 12);
				} else {
					if (v == am && hours == 12) {
						result.setHours(0);
					}
				}
				break;
			  case "K":
				if (v == 24) {
					v = 0;
				}
			  case "h":
			  case "H":
			  case "k":
				if (v > 23) {
					dojo.debug("dojo.date.parse: Illegal hours value");
					return null;
				}
				result.setHours(v);
				break;
			  case "m":
				result.setMinutes(v);
				break;
			  case "s":
				result.setSeconds(v);
				break;
			  case "S":
				result.setMilliseconds(v);
				break;
			  default:
				dojo.unimplemented("dojo.date.parse: unsupported pattern char=" + grp.charAt(0));
			}
		}
		if (expected.year && result.getFullYear() != expected.year) {
			dojo.debug("Parsed year: '" + result.getFullYear() + "' did not match input year: '" + expected.year + "'.");
			return null;
		}
		if (expected.month && result.getMonth() != expected.month) {
			dojo.debug("Parsed month: '" + result.getMonth() + "' did not match input month: '" + expected.month + "'.");
			return null;
		}
		if (expected.date && result.getDate() != expected.date) {
			dojo.debug("Parsed day of month: '" + result.getDate() + "' did not match input day of month: '" + expected.date + "'.");
			return null;
		}
		return result;
	};
	function _processPattern(pattern, applyPattern, applyLiteral, applyAll) {
		var identity = function (x) {
			return x;
		};
		applyPattern = applyPattern || identity;
		applyLiteral = applyLiteral || identity;
		applyAll = applyAll || identity;
		var chunks = pattern.match(/(''|[^'])+/g);
		var literal = false;
		for (var i = 0; i < chunks.length; i++) {
			if (!chunks[i]) {
				chunks[i] = "";
			} else {
				chunks[i] = (literal ? applyLiteral : applyPattern)(chunks[i]);
				literal = !literal;
			}
		}
		return applyAll(chunks.join(""));
	}
	function _buildDateTimeRE(groups, info, options, pattern) {
		return pattern.replace(/([a-z])\1*/ig, function (match) {
			var s;
			var c = match.charAt(0);
			var l = match.length;
			switch (c) {
			  case "y":
				s = "\\d" + ((l == 2) ? "{2,4}" : "+");
				break;
			  case "M":
				s = (l > 2) ? "\\S+" : "\\d{1,2}";
				break;
			  case "d":
				s = "\\d{1,2}";
				break;
			  case "E":
				s = "\\S+";
				break;
			  case "h":
			  case "H":
			  case "K":
			  case "k":
				s = "\\d{1,2}";
				break;
			  case "m":
			  case "s":
				s = "[0-5]\\d";
				break;
			  case "S":
				s = "\\d{1,3}";
				break;
			  case "a":
				var am = options.am || info.am || "AM";
				var pm = options.pm || info.pm || "PM";
				if (options.strict) {
					s = am + "|" + pm;
				} else {
					s = am;
					s += (am != am.toLowerCase()) ? "|" + am.toLowerCase() : "";
					s += "|";
					s += (pm != pm.toLowerCase()) ? pm + "|" + pm.toLowerCase() : pm;
				}
				break;
			  default:
				dojo.unimplemented("parse of date format, pattern=" + pattern);
			}
			if (groups) {
				groups.push(match);
			}
			return "\\s*(" + s + ")\\s*";
		});
	}
})();
dojo.date.strftime = function (dateObject, format, locale) {
	var padChar = null;
	function _(s, n) {
		return dojo.string.pad(s, n || 2, padChar || "0");
	}
	var info = dojo.date._getGregorianBundle(locale);
	function $(property) {
		switch (property) {
		  case "a":
			return dojo.date.getDayShortName(dateObject, locale);
		  case "A":
			return dojo.date.getDayName(dateObject, locale);
		  case "b":
		  case "h":
			return dojo.date.getMonthShortName(dateObject, locale);
		  case "B":
			return dojo.date.getMonthName(dateObject, locale);
		  case "c":
			return dojo.date.format(dateObject, {locale:locale});
		  case "C":
			return _(Math.floor(dateObject.getFullYear() / 100));
		  case "d":
			return _(dateObject.getDate());
		  case "D":
			return $("m") + "/" + $("d") + "/" + $("y");
		  case "e":
			if (padChar == null) {
				padChar = " ";
			}
			return _(dateObject.getDate());
		  case "f":
			if (padChar == null) {
				padChar = " ";
			}
			return _(dateObject.getMonth() + 1);
		  case "g":
			break;
		  case "G":
			dojo.unimplemented("unimplemented modifier 'G'");
			break;
		  case "F":
			return $("Y") + "-" + $("m") + "-" + $("d");
		  case "H":
			return _(dateObject.getHours());
		  case "I":
			return _(dateObject.getHours() % 12 || 12);
		  case "j":
			return _(dojo.date.getDayOfYear(dateObject), 3);
		  case "k":
			if (padChar == null) {
				padChar = " ";
			}
			return _(dateObject.getHours());
		  case "l":
			if (padChar == null) {
				padChar = " ";
			}
			return _(dateObject.getHours() % 12 || 12);
		  case "m":
			return _(dateObject.getMonth() + 1);
		  case "M":
			return _(dateObject.getMinutes());
		  case "n":
			return "\n";
		  case "p":
			return info[dateObject.getHours() < 12 ? "am" : "pm"];
		  case "r":
			return $("I") + ":" + $("M") + ":" + $("S") + " " + $("p");
		  case "R":
			return $("H") + ":" + $("M");
		  case "S":
			return _(dateObject.getSeconds());
		  case "t":
			return "\t";
		  case "T":
			return $("H") + ":" + $("M") + ":" + $("S");
		  case "u":
			return String(dateObject.getDay() || 7);
		  case "U":
			return _(dojo.date.getWeekOfYear(dateObject));
		  case "V":
			return _(dojo.date.getIsoWeekOfYear(dateObject));
		  case "W":
			return _(dojo.date.getWeekOfYear(dateObject, 1));
		  case "w":
			return String(dateObject.getDay());
		  case "x":
			return dojo.date.format(dateObject, {selector:"dateOnly", locale:locale});
		  case "X":
			return dojo.date.format(dateObject, {selector:"timeOnly", locale:locale});
		  case "y":
			return _(dateObject.getFullYear() % 100);
		  case "Y":
			return String(dateObject.getFullYear());
		  case "z":
			var timezoneOffset = dateObject.getTimezoneOffset();
			return (timezoneOffset > 0 ? "-" : "+") + _(Math.floor(Math.abs(timezoneOffset) / 60)) + ":" + _(Math.abs(timezoneOffset) % 60);
		  case "Z":
			return dojo.date.getTimezoneName(dateObject);
		  case "%":
			return "%";
		}
	}
	var string = "";
	var i = 0;
	var index = 0;
	var switchCase = null;
	while ((index = format.indexOf("%", i)) != -1) {
		string += format.substring(i, index++);
		switch (format.charAt(index++)) {
		  case "_":
			padChar = " ";
			break;
		  case "-":
			padChar = "";
			break;
		  case "0":
			padChar = "0";
			break;
		  case "^":
			switchCase = "upper";
			break;
		  case "*":
			switchCase = "lower";
			break;
		  case "#":
			switchCase = "swap";
			break;
		  default:
			padChar = null;
			index--;
			break;
		}
		var property = $(format.charAt(index++));
		switch (switchCase) {
		  case "upper":
			property = property.toUpperCase();
			break;
		  case "lower":
			property = property.toLowerCase();
			break;
		  case "swap":
			var compareString = property.toLowerCase();
			var swapString = "";
			var j = 0;
			var ch = "";
			while (j < property.length) {
				ch = property.charAt(j);
				swapString += (ch == compareString.charAt(j)) ? ch.toUpperCase() : ch.toLowerCase();
				j++;
			}
			property = swapString;
			break;
		  default:
			break;
		}
		switchCase = null;
		string += property;
		i = index;
	}
	string += format.substring(i);
	return string;
};
(function () {
	var _customFormats = [];
	dojo.date.addCustomFormats = function (packageName, bundleName) {
		_customFormats.push({pkg:packageName, name:bundleName});
	};
	dojo.date._getGregorianBundle = function (locale) {
		var gregorian = {};
		dojo.lang.forEach(_customFormats, function (desc) {
			var bundle = dojo.i18n.getLocalization(desc.pkg, desc.name, locale);
			gregorian = dojo.lang.mixin(gregorian, bundle);
		}, this);
		return gregorian;
	};
})();
dojo.date.addCustomFormats("dojo.i18n.calendar", "gregorian");
dojo.date.addCustomFormats("dojo.i18n.calendar", "gregorianExtras");
dojo.date.getNames = function (item, type, use, locale) {
	var label;
	var lookup = dojo.date._getGregorianBundle(locale);
	var props = [item, use, type];
	if (use == "standAlone") {
		label = lookup[props.join("-")];
	}
	props[1] = "format";
	return (label || lookup[props.join("-")]).concat();
};
dojo.date.getDayName = function (dateObject, locale) {
	return dojo.date.getNames("days", "wide", "format", locale)[dateObject.getDay()];
};
dojo.date.getDayShortName = function (dateObject, locale) {
	return dojo.date.getNames("days", "abbr", "format", locale)[dateObject.getDay()];
};
dojo.date.getMonthName = function (dateObject, locale) {
	return dojo.date.getNames("months", "wide", "format", locale)[dateObject.getMonth()];
};
dojo.date.getMonthShortName = function (dateObject, locale) {
	return dojo.date.getNames("months", "abbr", "format", locale)[dateObject.getMonth()];
};
dojo.date.toRelativeString = function (dateObject) {
	var now = new Date();
	var diff = (now - dateObject) / 1000;
	var end = " ago";
	var future = false;
	if (diff < 0) {
		future = true;
		end = " from now";
		diff = -diff;
	}
	if (diff < 60) {
		diff = Math.round(diff);
		return diff + " second" + (diff == 1 ? "" : "s") + end;
	}
	if (diff < 60 * 60) {
		diff = Math.round(diff / 60);
		return diff + " minute" + (diff == 1 ? "" : "s") + end;
	}
	if (diff < 60 * 60 * 24) {
		diff = Math.round(diff / 3600);
		return diff + " hour" + (diff == 1 ? "" : "s") + end;
	}
	if (diff < 60 * 60 * 24 * 7) {
		diff = Math.round(diff / (3600 * 24));
		if (diff == 1) {
			return future ? "Tomorrow" : "Yesterday";
		} else {
			return diff + " days" + end;
		}
	}
	return dojo.date.format(dateObject);
};
dojo.date.toSql = function (dateObject, noTime) {
	return dojo.date.strftime(dateObject, "%F" + !noTime ? " %T" : "");
};
dojo.date.fromSql = function (sqlDate) {
	var parts = sqlDate.split(/[\- :]/g);
	while (parts.length < 6) {
		parts.push(0);
	}
	return new Date(parts[0], (parseInt(parts[1], 10) - 1), parts[2], parts[3], parts[4], parts[5]);
};

Other Struts examples (source code examples)

Here is a short list of links related to this Struts format.js source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.