Subversion Repositories Applications.papyrus

Compare Revisions

Ignore whitespace Rev 1317 → Rev 1318

/trunk/api/js/dojo/src/date/serialize.js
New file
0,0 → 1,127
/*
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.serialize");
dojo.require("dojo.string.common");
dojo.date.setIso8601 = function (dateObject, formattedString) {
var comps = (formattedString.indexOf("T") == -1) ? formattedString.split(" ") : formattedString.split("T");
dateObject = dojo.date.setIso8601Date(dateObject, comps[0]);
if (comps.length == 2) {
dateObject = dojo.date.setIso8601Time(dateObject, comps[1]);
}
return dateObject;
};
dojo.date.fromIso8601 = function (formattedString) {
return dojo.date.setIso8601(new Date(0, 0), formattedString);
};
dojo.date.setIso8601Date = function (dateObject, formattedString) {
var regexp = "^([0-9]{4})((-?([0-9]{2})(-?([0-9]{2}))?)|" + "(-?([0-9]{3}))|(-?W([0-9]{2})(-?([1-7]))?))?$";
var d = formattedString.match(new RegExp(regexp));
if (!d) {
dojo.debug("invalid date string: " + formattedString);
return null;
}
var year = d[1];
var month = d[4];
var date = d[6];
var dayofyear = d[8];
var week = d[10];
var dayofweek = d[12] ? d[12] : 1;
dateObject.setFullYear(year);
if (dayofyear) {
dateObject.setMonth(0);
dateObject.setDate(Number(dayofyear));
} else {
if (week) {
dateObject.setMonth(0);
dateObject.setDate(1);
var gd = dateObject.getDay();
var day = gd ? gd : 7;
var offset = Number(dayofweek) + (7 * Number(week));
if (day <= 4) {
dateObject.setDate(offset + 1 - day);
} else {
dateObject.setDate(offset + 8 - day);
}
} else {
if (month) {
dateObject.setDate(1);
dateObject.setMonth(month - 1);
}
if (date) {
dateObject.setDate(date);
}
}
}
return dateObject;
};
dojo.date.fromIso8601Date = function (formattedString) {
return dojo.date.setIso8601Date(new Date(0, 0), formattedString);
};
dojo.date.setIso8601Time = function (dateObject, formattedString) {
var timezone = "Z|(([-+])([0-9]{2})(:?([0-9]{2}))?)$";
var d = formattedString.match(new RegExp(timezone));
var offset = 0;
if (d) {
if (d[0] != "Z") {
offset = (Number(d[3]) * 60) + Number(d[5]);
offset *= ((d[2] == "-") ? 1 : -1);
}
offset -= dateObject.getTimezoneOffset();
formattedString = formattedString.substr(0, formattedString.length - d[0].length);
}
var regexp = "^([0-9]{2})(:?([0-9]{2})(:?([0-9]{2})(.([0-9]+))?)?)?$";
d = formattedString.match(new RegExp(regexp));
if (!d) {
dojo.debug("invalid time string: " + formattedString);
return null;
}
var hours = d[1];
var mins = Number((d[3]) ? d[3] : 0);
var secs = (d[5]) ? d[5] : 0;
var ms = d[7] ? (Number("0." + d[7]) * 1000) : 0;
dateObject.setHours(hours);
dateObject.setMinutes(mins);
dateObject.setSeconds(secs);
dateObject.setMilliseconds(ms);
if (offset !== 0) {
dateObject.setTime(dateObject.getTime() + offset * 60000);
}
return dateObject;
};
dojo.date.fromIso8601Time = function (formattedString) {
return dojo.date.setIso8601Time(new Date(0, 0), formattedString);
};
dojo.date.toRfc3339 = function (dateObject, selector) {
if (!dateObject) {
dateObject = new Date();
}
var _ = dojo.string.pad;
var formattedDate = [];
if (selector != "timeOnly") {
var date = [_(dateObject.getFullYear(), 4), _(dateObject.getMonth() + 1, 2), _(dateObject.getDate(), 2)].join("-");
formattedDate.push(date);
}
if (selector != "dateOnly") {
var time = [_(dateObject.getHours(), 2), _(dateObject.getMinutes(), 2), _(dateObject.getSeconds(), 2)].join(":");
var timezoneOffset = dateObject.getTimezoneOffset();
time += (timezoneOffset > 0 ? "-" : "+") + _(Math.floor(Math.abs(timezoneOffset) / 60), 2) + ":" + _(Math.abs(timezoneOffset) % 60, 2);
formattedDate.push(time);
}
return formattedDate.join("T");
};
dojo.date.fromRfc3339 = function (rfcDate) {
if (rfcDate.indexOf("Tany") != -1) {
rfcDate = rfcDate.replace("Tany", "");
}
var dateObject = new Date();
return dojo.date.setIso8601(dateObject, rfcDate);
};
 
/trunk/api/js/dojo/src/date/common.js
New file
0,0 → 1,314
/*
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.common");
dojo.date.setDayOfYear = function (dateObject, dayOfYear) {
dateObject.setMonth(0);
dateObject.setDate(dayOfYear);
return dateObject;
};
dojo.date.getDayOfYear = function (dateObject) {
var fullYear = dateObject.getFullYear();
var lastDayOfPrevYear = new Date(fullYear - 1, 11, 31);
return Math.floor((dateObject.getTime() - lastDayOfPrevYear.getTime()) / 86400000);
};
dojo.date.setWeekOfYear = function (dateObject, week, firstDay) {
if (arguments.length == 1) {
firstDay = 0;
}
dojo.unimplemented("dojo.date.setWeekOfYear");
};
dojo.date.getWeekOfYear = function (dateObject, firstDay) {
if (arguments.length == 1) {
firstDay = 0;
}
var firstDayOfYear = new Date(dateObject.getFullYear(), 0, 1);
var day = firstDayOfYear.getDay();
firstDayOfYear.setDate(firstDayOfYear.getDate() - day + firstDay - (day > firstDay ? 7 : 0));
return Math.floor((dateObject.getTime() - firstDayOfYear.getTime()) / 604800000);
};
dojo.date.setIsoWeekOfYear = function (dateObject, week, firstDay) {
if (arguments.length == 1) {
firstDay = 1;
}
dojo.unimplemented("dojo.date.setIsoWeekOfYear");
};
dojo.date.getIsoWeekOfYear = function (dateObject, firstDay) {
if (arguments.length == 1) {
firstDay = 1;
}
dojo.unimplemented("dojo.date.getIsoWeekOfYear");
};
dojo.date.shortTimezones = ["IDLW", "BET", "HST", "MART", "AKST", "PST", "MST", "CST", "EST", "AST", "NFT", "BST", "FST", "AT", "GMT", "CET", "EET", "MSK", "IRT", "GST", "AFT", "AGTT", "IST", "NPT", "ALMT", "MMT", "JT", "AWST", "JST", "ACST", "AEST", "LHST", "VUT", "NFT", "NZT", "CHAST", "PHOT", "LINT"];
dojo.date.timezoneOffsets = [-720, -660, -600, -570, -540, -480, -420, -360, -300, -240, -210, -180, -120, -60, 0, 60, 120, 180, 210, 240, 270, 300, 330, 345, 360, 390, 420, 480, 540, 570, 600, 630, 660, 690, 720, 765, 780, 840];
dojo.date.getDaysInMonth = function (dateObject) {
var month = dateObject.getMonth();
var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
if (month == 1 && dojo.date.isLeapYear(dateObject)) {
return 29;
} else {
return days[month];
}
};
dojo.date.isLeapYear = function (dateObject) {
var year = dateObject.getFullYear();
return (year % 400 == 0) ? true : (year % 100 == 0) ? false : (year % 4 == 0) ? true : false;
};
dojo.date.getTimezoneName = function (dateObject) {
var str = dateObject.toString();
var tz = "";
var match;
var pos = str.indexOf("(");
if (pos > -1) {
pos++;
tz = str.substring(pos, str.indexOf(")"));
} else {
var pat = /([A-Z\/]+) \d{4}$/;
if ((match = str.match(pat))) {
tz = match[1];
} else {
str = dateObject.toLocaleString();
pat = / ([A-Z\/]+)$/;
if ((match = str.match(pat))) {
tz = match[1];
}
}
}
return tz == "AM" || tz == "PM" ? "" : tz;
};
dojo.date.getOrdinal = function (dateObject) {
var date = dateObject.getDate();
if (date % 100 != 11 && date % 10 == 1) {
return "st";
} else {
if (date % 100 != 12 && date % 10 == 2) {
return "nd";
} else {
if (date % 100 != 13 && date % 10 == 3) {
return "rd";
} else {
return "th";
}
}
}
};
dojo.date.compareTypes = {DATE:1, TIME:2};
dojo.date.compare = function (dateA, dateB, options) {
var dA = dateA;
var dB = dateB || new Date();
var now = new Date();
with (dojo.date.compareTypes) {
var opt = options || (DATE | TIME);
var d1 = new Date((opt & DATE) ? dA.getFullYear() : now.getFullYear(), (opt & DATE) ? dA.getMonth() : now.getMonth(), (opt & DATE) ? dA.getDate() : now.getDate(), (opt & TIME) ? dA.getHours() : 0, (opt & TIME) ? dA.getMinutes() : 0, (opt & TIME) ? dA.getSeconds() : 0);
var d2 = new Date((opt & DATE) ? dB.getFullYear() : now.getFullYear(), (opt & DATE) ? dB.getMonth() : now.getMonth(), (opt & DATE) ? dB.getDate() : now.getDate(), (opt & TIME) ? dB.getHours() : 0, (opt & TIME) ? dB.getMinutes() : 0, (opt & TIME) ? dB.getSeconds() : 0);
}
if (d1.valueOf() > d2.valueOf()) {
return 1;
}
if (d1.valueOf() < d2.valueOf()) {
return -1;
}
return 0;
};
dojo.date.dateParts = {YEAR:0, MONTH:1, DAY:2, HOUR:3, MINUTE:4, SECOND:5, MILLISECOND:6, QUARTER:7, WEEK:8, WEEKDAY:9};
dojo.date.add = function (dt, interv, incr) {
if (typeof dt == "number") {
dt = new Date(dt);
}
function fixOvershoot() {
if (sum.getDate() < dt.getDate()) {
sum.setDate(0);
}
}
var sum = new Date(dt);
with (dojo.date.dateParts) {
switch (interv) {
case YEAR:
sum.setFullYear(dt.getFullYear() + incr);
fixOvershoot();
break;
case QUARTER:
incr *= 3;
case MONTH:
sum.setMonth(dt.getMonth() + incr);
fixOvershoot();
break;
case WEEK:
incr *= 7;
case DAY:
sum.setDate(dt.getDate() + incr);
break;
case WEEKDAY:
var dat = dt.getDate();
var weeks = 0;
var days = 0;
var strt = 0;
var trgt = 0;
var adj = 0;
var mod = incr % 5;
if (mod == 0) {
days = (incr > 0) ? 5 : -5;
weeks = (incr > 0) ? ((incr - 5) / 5) : ((incr + 5) / 5);
} else {
days = mod;
weeks = parseInt(incr / 5);
}
strt = dt.getDay();
if (strt == 6 && incr > 0) {
adj = 1;
} else {
if (strt == 0 && incr < 0) {
adj = -1;
}
}
trgt = (strt + days);
if (trgt == 0 || trgt == 6) {
adj = (incr > 0) ? 2 : -2;
}
sum.setDate(dat + (7 * weeks) + days + adj);
break;
case HOUR:
sum.setHours(sum.getHours() + incr);
break;
case MINUTE:
sum.setMinutes(sum.getMinutes() + incr);
break;
case SECOND:
sum.setSeconds(sum.getSeconds() + incr);
break;
case MILLISECOND:
sum.setMilliseconds(sum.getMilliseconds() + incr);
break;
default:
break;
}
}
return sum;
};
dojo.date.diff = function (dtA, dtB, interv) {
if (typeof dtA == "number") {
dtA = new Date(dtA);
}
if (typeof dtB == "number") {
dtB = new Date(dtB);
}
var yeaDiff = dtB.getFullYear() - dtA.getFullYear();
var monDiff = (dtB.getMonth() - dtA.getMonth()) + (yeaDiff * 12);
var msDiff = dtB.getTime() - dtA.getTime();
var secDiff = msDiff / 1000;
var minDiff = secDiff / 60;
var houDiff = minDiff / 60;
var dayDiff = houDiff / 24;
var weeDiff = dayDiff / 7;
var delta = 0;
with (dojo.date.dateParts) {
switch (interv) {
case YEAR:
delta = yeaDiff;
break;
case QUARTER:
var mA = dtA.getMonth();
var mB = dtB.getMonth();
var qA = Math.floor(mA / 3) + 1;
var qB = Math.floor(mB / 3) + 1;
qB += (yeaDiff * 4);
delta = qB - qA;
break;
case MONTH:
delta = monDiff;
break;
case WEEK:
delta = parseInt(weeDiff);
break;
case DAY:
delta = dayDiff;
break;
case WEEKDAY:
var days = Math.round(dayDiff);
var weeks = parseInt(days / 7);
var mod = days % 7;
if (mod == 0) {
days = weeks * 5;
} else {
var adj = 0;
var aDay = dtA.getDay();
var bDay = dtB.getDay();
weeks = parseInt(days / 7);
mod = days % 7;
var dtMark = new Date(dtA);
dtMark.setDate(dtMark.getDate() + (weeks * 7));
var dayMark = dtMark.getDay();
if (dayDiff > 0) {
switch (true) {
case aDay == 6:
adj = -1;
break;
case aDay == 0:
adj = 0;
break;
case bDay == 6:
adj = -1;
break;
case bDay == 0:
adj = -2;
break;
case (dayMark + mod) > 5:
adj = -2;
break;
default:
break;
}
} else {
if (dayDiff < 0) {
switch (true) {
case aDay == 6:
adj = 0;
break;
case aDay == 0:
adj = 1;
break;
case bDay == 6:
adj = 2;
break;
case bDay == 0:
adj = 1;
break;
case (dayMark + mod) < 0:
adj = 2;
break;
default:
break;
}
}
}
days += adj;
days -= (weeks * 2);
}
delta = days;
break;
case HOUR:
delta = houDiff;
break;
case MINUTE:
delta = minDiff;
break;
case SECOND:
delta = secDiff;
break;
case MILLISECOND:
delta = msDiff;
break;
default:
break;
}
}
return Math.round(delta);
};
 
/trunk/api/js/dojo/src/date/format.js
New file
0,0 → 1,711
/*
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, "de,en,es,fi,fr,hu,ja,it,ko,nl,pt,sv,zh,pt-br,zh-cn,zh-hk,zh-tw,ROOT");
dojo.requireLocalization("dojo.i18n.calendar", "gregorianExtras", null, "ja,zh,ROOT");
(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]);
};
 
/trunk/api/js/dojo/src/date/supplemental.js
New file
0,0 → 1,45
/*
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.supplemental");
dojo.date.getFirstDayOfWeek = function (locale) {
var firstDay = {mv:5, ae:6, af:6, bh:6, dj:6, dz:6, eg:6, er:6, et:6, iq:6, ir:6, jo:6, ke:6, kw:6, lb:6, ly:6, ma:6, om:6, qa:6, sa:6, sd:6, so:6, tn:6, ye:6, as:0, au:0, az:0, bw:0, ca:0, cn:0, fo:0, ge:0, gl:0, gu:0, hk:0, ie:0, il:0, is:0, jm:0, jp:0, kg:0, kr:0, la:0, mh:0, mo:0, mp:0, mt:0, nz:0, ph:0, pk:0, sg:0, th:0, tt:0, tw:0, um:0, us:0, uz:0, vi:0, za:0, zw:0, et:0, mw:0, ng:0, tj:0, gb:0, sy:4};
locale = dojo.hostenv.normalizeLocale(locale);
var country = locale.split("-")[1];
var dow = firstDay[country];
return (typeof dow == "undefined") ? 1 : dow;
};
dojo.date.getWeekend = function (locale) {
var weekendStart = {eg:5, il:5, sy:5, "in":0, ae:4, bh:4, dz:4, iq:4, jo:4, kw:4, lb:4, ly:4, ma:4, om:4, qa:4, sa:4, sd:4, tn:4, ye:4};
var weekendEnd = {ae:5, bh:5, dz:5, iq:5, jo:5, kw:5, lb:5, ly:5, ma:5, om:5, qa:5, sa:5, sd:5, tn:5, ye:5, af:5, ir:5, eg:6, il:6, sy:6};
locale = dojo.hostenv.normalizeLocale(locale);
var country = locale.split("-")[1];
var start = weekendStart[country];
var end = weekendEnd[country];
if (typeof start == "undefined") {
start = 6;
}
if (typeof end == "undefined") {
end = 0;
}
return {start:start, end:end};
};
dojo.date.isWeekend = function (dateObj, locale) {
var weekend = dojo.date.getWeekend(locale);
var day = (dateObj || new Date()).getDay();
if (weekend.end < weekend.start) {
weekend.end += 7;
if (day < weekend.start) {
day += 7;
}
}
return day >= weekend.start && day <= weekend.end;
};