if (typeof wp == 'undefined') wp = {}; wp.locale = function(translations) { this._parseLameDict = function(prefix, lameDict, internalVar) { if (!internalVar) internalVar = prefix; this[internalVar] = []; for(var key in lameDict) { if ('string' != typeof lameDict[key]) continue; if (key.substr(0, prefix.length + 1) != prefix + '_') continue; this[internalVar].push(lameDict[key]); } } this.date = function(format, date) { if ('undefined' == typeof date) date = new Date(); var returnStr = ''; var replace = this.replaceChars; var backslashCount = 0; for (var i = 0; i < format.length; i++) { var curChar = format.charAt(i); if (curChar == '\\') { backslashCount++; if (2 == backslashCount) { returnStr += '\\'; backslashCount = 0; } continue; } if (replace[curChar] && 0 == backslashCount) { returnStr += replace[curChar].call(date); } else { returnStr += curChar; } if (curChar != '\\') backslashCount = 0; } return returnStr; } this.parseISO8601 = function(iso8601){ var regexp = /(\d\d\d\d)(-)?(\d\d)(-)?(\d\d)(T)?(\d\d)(:)?(\d\d)(:)?(\d\d)(\.\d+)?(Z|([+-])(\d\d)(:)?(\d\d))/; var matches = iso8601.match(new RegExp(regexp)); if (!matches) return null; var offset = 0; var date = new Date(); date.setUTCDate(1); date.setUTCFullYear(parseInt(matches[1],10)); date.setUTCMonth(parseInt(matches[3],10) - 1); date.setUTCDate(parseInt(matches[5],10)); date.setUTCHours(parseInt(matches[7],10)); date.setUTCMinutes(parseInt(matches[9],10)); date.setUTCSeconds(parseInt(matches[11],10)); if (matches[12]) date.setUTCMilliseconds(parseFloat(matches[12]) * 1000); if (matches[13] != 'Z') { offset = (matches[15] * 60) + parseInt(matches[17],10); offset *= ((matches[14] == '-') ? -1 : 1); date.setTime(date.getTime() - offset * 60 * 1000); } return date; }; this._parseLameDict('month', translations); this._parseLameDict('monthabbrev', translations); this._parseLameDict('weekday', translations); this._parseLameDict('weekdayabbrev', translations); shortMonths = this.monthabbrev; longMonths = this.month; shortDays = this.weekdayabbrev; longDays = this.weekday; this.replaceChars = { // Day d: function() { return (this.getDate() < 10 ? '0' : '') + this.getDate(); }, D: function() { return shortDays[this.getDay()]; }, j: function() { return this.getDate(); }, l: function() { return longDays[this.getDay()]; }, N: function() { return this.getDay() + 1; }, S: function() { return (this.getDate() % 10 == 1 && this.getDate() != 11 ? 'st' : (this.getDate() % 10 == 2 && this.getDate() != 12 ? 'nd' : (this.getDate() % 10 == 3 && this.getDate() != 13 ? 'rd' : 'th'))); }, w: function() { return this.getDay(); }, z: function() { return "Not Yet Supported"; }, // Week W: function() { return "Not Yet Supported"; }, // Month F: function() { return longMonths[this.getMonth()]; }, m: function() { return (this.getMonth() < 11 ? '0' : '') + (this.getMonth() + 1); }, M: function() { return shortMonths[this.getMonth()]; }, n: function() { return this.getMonth() + 1; }, t: function() { return "Not Yet Supported"; }, // Year L: function() { return "Not Yet Supported"; }, o: function() { return "Not Supported"; }, Y: function() { return this.getFullYear(); }, y: function() { return ('' + this.getFullYear()).substr(2); }, // Time a: function() { return this.getHours() < 12 ? 'am' : 'pm'; }, A: function() { return this.getHours() < 12 ? 'AM' : 'PM'; }, B: function() { return "Not Yet Supported"; }, g: function() { return this.getHours() % 12 || 12; }, G: function() { return this.getHours(); }, h: function() { return ((this.getHours() % 12 || 12) < 10 ? '0' : '') + (this.getHours() % 12 || 12); }, H: function() { return (this.getHours() < 10 ? '0' : '') + this.getHours(); }, i: function() { return (this.getMinutes() < 10 ? '0' : '') + this.getMinutes(); }, s: function() { return (this.getSeconds() < 10 ? '0' : '') + this.getSeconds(); }, // Timezone e: function() { return "Not Yet Supported"; }, I: function() { return "Not Supported"; }, O: function() { return (this.getTimezoneOffset() < 0 ? '-' : '+') + (this.getTimezoneOffset() / 60 < 10 ? '0' : '') + (this.getTimezoneOffset() / 60) + '00'; }, T: function() { return "Not Yet Supported"; }, Z: function() { return this.getTimezoneOffset() * 60; }, // Full Date/Time c: function() { return "Not Yet Supported"; }, r: function() { return this.toString(); }, U: function() { return this.getTime() / 1000; } }; }