function formatPattern()

in plugins/struts2-dojo-plugin/src/main/resources/org/apache/struts2/static/dojo/src/date/format.js [29:201]


		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;
			});
		}