Diffstat (limited to 'frontend/gamma/js/Clipperz/Date.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/gamma/js/Clipperz/Date.js | 305 |
1 files changed, 305 insertions, 0 deletions
diff --git a/frontend/gamma/js/Clipperz/Date.js b/frontend/gamma/js/Clipperz/Date.js new file mode 100644 index 0000000..4103b88 --- a/dev/null +++ b/frontend/gamma/js/Clipperz/Date.js @@ -0,0 +1,305 @@ +/* + +Copyright 2008-2011 Clipperz Srl + +This file is part of Clipperz's Javascript Crypto Library. +Javascript Crypto Library provides web developers with an extensive +and efficient set of cryptographic functions. The library aims to +obtain maximum execution speed while preserving modularity and +reusability. +For further information about its features and functionalities please +refer to http://www.clipperz.com + +* Javascript Crypto Library is free software: you can redistribute + it and/or modify it under the terms of the GNU Affero General Public + License as published by the Free Software Foundation, either version + 3 of the License, or (at your option) any later version. + +* Javascript Crypto Library is distributed in the hope that it will + be useful, but WITHOUT ANY WARRANTY; without even the implied + warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + +* You should have received a copy of the GNU Affero General Public + License along with Javascript Crypto Library. If not, see + <http://www.gnu.org/licenses/>. + +*/ + +if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } +if (typeof(Clipperz.Date) == 'undefined') { Clipperz.Date = {}; } + +Clipperz.Date.VERSION = "0.1"; +Clipperz.Date.NAME = "Clipperz.Date"; + +MochiKit.Base.update(Clipperz.Date, { + + //------------------------------------------------------------------------- + + '__repr__': function () { + return "[" + this.NAME + " " + this.VERSION + "]"; + }, + + //------------------------------------------------------------------------- + + 'toString': function () { + return this.__repr__(); + }, + + //------------------------------------------------------------------------- + + 'daysInMonth': [31,28,31,30,31,30,31,31,30,31,30,31], + + //------------------------------------------------------------------------- + + 'englishOrdinalDaySuffixForDate': function(aDate) { + var result; + + switch (aDate.getDate()) { + case 1: + case 21: + case 31: + result = "st"; + break; + case 2: + case 22: + result = "nd"; + break; + case 3: + case 23: + result = "rd"; + break; + default: + result = "th"; + break; + } + + return result; + }, + + //------------------------------------------------------------------------- + + 'isLeapYear': function(aDate) { + var year; + var result; + + year = aDate.getFullYear(); + result = ((year & 0x03) == 0 && (year % 100 || (year % 400 == 0 && year))); + + return result; + }, + + //------------------------------------------------------------------------- + + 'getDaysInMonth': function(aDate) { + var result; + + if (aDate.getMonth() == 1) { + Clipperz.Date.isLeapYear(aDate) + result += Clipperz.Date.isLeapYear(aDate) ? 29 : 28; + } else { + result = Clipperz.Date.daysInMonth[aDate.getMonth()]; + } + + return result; + }, + + //------------------------------------------------------------------------- + + 'getTimezone': function(aDate) { + var result; + + result = aDate.toString(); + result = result.replace(/([A-Z]{3}) [0-9]{4}/, '$1'); + result = result.replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, "$1$2$3"); + + return result; + }, + + 'getGMTOffset': function(aDate) { + return (aDate.getTimezoneOffset() > 0 ? "-" : "+") + MochiKit.Format.numberFormatter('00')(Math.floor(this.getTimezoneOffset() / 60)) + + MochiKit.Format.numberFormatter('00')(this.getTimezoneOffset() % 60); + }, + + //------------------------------------------------------------------------- + + 'dayOfYear': function(aDate) { + var result; + var i,c; + + result = 0; + c = aDate.getMonth(); + for (i=0; i<c; i++) { + if (i == 1) { + result += Clipperz.Date.isLeapYear(aDate) ? 29 : 28; + } else { + result += Clipperz.Date.daysInMonth[i]; + } + } + return num + this.getDate() - 1; + }, + + //------------------------------------------------------------------------- + + 'getPHPLikeFormatCode': function(aCharacter) { + var result; + + switch (aCharacter) { + case "d": + result = " + MochiKit.Format.numberFormatter('00')(aDate.getDate())"; + break; + case "D": + result = " + aLocale['shortDays'][aDate.getDay()]"; + break; + case "j": + result = " + aDate.getDate()"; + break; + case "l": + result = " + aLocale['days'][aDate.getDay()]"; + break; + case "S": + result = " + Clipperz.Date.englishOrdinalDaySuffixForDate(aDate)"; + break; + case "w": + result = " + aDate.getDay()"; + break; + case "z": + result = " + aDate.getDayOfYear()"; + break; + case "W": + result = " + aDate.getWeekOfYear()"; + break; + case "F": + result = " + aLocale['months'][aDate.getMonth()]"; + break; + case "m": + result = " + MochiKit.Format.numberFormatter('00')(aDate.getMonth() + 1)"; + break; + case "M": + result = " + aLocale['shortMonths'][aDate.getMonth()]"; + break; + case "n": + result = " + (aDate.getMonth() + 1)"; + break; + case "t": + result = " + Clipperz.Date.getDaysInMonth(aDate)"; + break; + case "L": + result = " + (Clipperz.Date.isLeapYear(aDate) ? 1 : 0)"; + break; + case "Y": + result = " + aDate.getFullYear()"; + break; + case "y": + result = " + ('' + aDate.getFullYear()).substring(2, 4)"; + break; + case "a": + result = " + (aDate.getHours() < 12 ? aLocale['amDesignation'] : aLocale['pmDesignation'])"; + break; + case "A": + result = " + (aDate.getHours() < 12 ? aLocale['amDesignation'].toUpperCase() : aLocale['pmDesignation'].toUpperCase())"; + break; + case "g": + result = " + ((aDate.getHours() %12) ? aDate.getHours() % 12 : 12)"; + break; + case "G": + result = " + aDate.getHours()"; + break; + case "h": + result = " + MochiKit.Format.numberFormatter('00')((aDate.getHours() %12) ? aDate.getHours() % 12 : 12)"; + break; + case "H": + result = " + MochiKit.Format.numberFormatter('00')(aDate.getHours())"; + break; + case "i": + result = " + MochiKit.Format.numberFormatter('00')(aDate.getMinutes())"; + break; + case "s": + result = " + MochiKit.Format.numberFormatter('00')(aDate.getSeconds())"; + break; + case "O": + result = " + aDate.getGMTOffset()"; + break; + case "T": + result = " + Clipperz.Date.getTimezone(aDate)"; + break; + case "Z": + result = " + ( + aDate.getTimezoneOffset() * -60)"; + break; + default: + result = " + '" + aCharacter + "'"; + break; + }; + + return result; + }, + + //========================================================================= + + 'formatDateWithPHPLikeTemplateAndLocale': function(aDate, aFormat, aLocale) { + var result; + var formatterCode; + var formatter; + var i,c; + +//MochiKit.Logging.logDebug(">>> Clipperz.Date.formatDateWithPHPLikeTemplateAndLocale"); + formatterCode = "Clipperz.Date.__scratchFormatter = function(aDate, aLocale){return ''"; + + c = aFormat.length; + i = 0; + + while (i<c) { + var character; + + character = aFormat.charAt(i); + if (character == "\\") { + i++; + character = aFormat.charAt(i); + formatterCode += " + '" + character + "'" + } else { + formatterCode += Clipperz.Date.getPHPLikeFormatCode(character); + } + + i++; + } + + formatterCode += ";}"; +//MochiKit.Logging.logDebug("--- Clipperz.Date.formatDateWithPHPLikeTemplateAndLocale - formatterCode: " + formatterCode); + eval(formatterCode); + + result = Clipperz.Date.__scratchFormatter.call(this, aDate, aLocale); + delete Clipperz.Date.__scratchFormatter; +//MochiKit.Logging.logDebug("<<< Clipperz.Date.formatDateWithPHPLikeTemplateAndLocale"); + + return result; + }, + + //------------------------------------------------------------------------- + + 'parseDateWithPHPLikeTemplateAndLocale': function(aString, aFormat, aLocale) { + return new Date(); + }, + + //========================================================================= + + 'formatDateWithUTCFormatAndLocale': function(aDate, aLocale) { +// return Clipperz.Date.formatWithJavaLikeTemplateAndLocale(aDate, "EEE, dd MMMM yyyy HH:mm:ss zzz", aLocale); + return aDate.toString(); + }, + + 'parseDateWithUTCFormatAndLocale': function(aValue, aLocale) { + return new Date(Date.parse(aValue)); + }, + + //========================================================================= + + 'exception': { +// 'AbstractMethod': new MochiKit.Base.NamedError("Clipperz.Base.exception.AbstractMethod"), +// 'UnknownType': new MochiKit.Base.NamedError("Clipperz.Base.exception.UnknownType") + }, + + //------------------------------------------------------------------------- + __syntaxFix__: "syntax fix" + +}); + |