* Refactored rendering of date formats

* Increased jQuery version to 1.4
This commit is contained in:
Tobi Schäfer 2011-01-24 18:22:59 +00:00
parent 5f0f4bcf72
commit e35356ddfa
3 changed files with 59 additions and 43 deletions

View file

@ -738,25 +738,39 @@ function formatNumber(number, pattern) {
/**
*
* @param {Date} date
* @param {pattern} pattern
* @param {format} format
* @returns {String} The formatted date string
*/
function formatDate(date, pattern) {
function formatDate(date, format) {
if (!date) {
return null;
}
pattern || (pattern = "short");
var site = res.handlers.site;
var format = site.metadata.get(pattern.toLowerCase() + "DateFormat");
if (!format) {
format = global[pattern.toUpperCase() + "DATEFORMAT"] || pattern;
var pattern, site = res.handlers.site;
var locale = site.getLocale();
var type = java.text.DateFormat.FULL;
switch (format) {
case null:
pattern = java.text.DateFormat.getDateTimeInstance(type, type, locale).toPattern();
break;
case "date":
pattern = java.text.DateFormat.getDateInstance(type, locale).toPattern();
break;
case "time":
pattern = java.text.DateFormat.getTimeInstance(type, locale).toPattern();
break;
case "short":
case "long":
pattern = site[format.toLowerCase() + "DateFormat"];
break;
default:
pattern = format;
}
try {
return date.format(format, site.getLocale(), site.getTimeZone());
return date.format(pattern, site.getLocale(), site.getTimeZone());
} catch (ex) {
return "[Macro error: Invalid date format]";
return "[Invalid date format]";
}
return;
return String.EMPTY;
}
/**
@ -823,11 +837,11 @@ function getLocales(language) {
locale = locales[i];
localeString = locale.toString();
if (!localeString.contains("_")) {
result.push({
value: localeString,
display: locale.getDisplayName(locale),
"class": jala.i18n.getCatalog(jala.i18n.getLocale(localeString)) ? "translated" : ""
});
result.push({
value: localeString,
display: locale.getDisplayName(locale),
"class": jala.i18n.getCatalog(jala.i18n.getLocale(localeString)) ? "translated" : ""
});
}
}
result.sort(new String.Sorter("display"));
@ -841,7 +855,7 @@ function getLocales(language) {
*/
function getTimeZones(language) {
var result = [], timeZone, offset;
var locale = getLocale(language);
var locale = getLocale(language);
var zones = java.util.TimeZone.getAvailableIDs();
var now = new Date;
var previousZone;
@ -881,29 +895,31 @@ function getTimeZones(language) {
/**
*
* @param {String} type
* @param {String} language
* @param {java.util.Locale} locale
* @returns {Array[]} An array containing the corresponding date formats
*/
function getDateFormats(type, language) {
var patterns;
if (type === "short") {
patterns = [SHORTDATEFORMAT, "yyyy/MM/dd HH:mm",
"yyyy.MM.dd, HH:mm", "d. MMMM, HH:mm", "MMMM d, HH:mm",
"d. MMM, HH:mm", "MMM d, HH:mm", "EEE, d. MMM, HH:mm",
"EEE MMM d, HH:mm", "EEE, HH:mm", "EE, HH:mm", "HH:mm"];
} else if (type === "long") {
patterns = [LONGDATEFORMAT, "EEEE, MMMM dd, yyyy, HH:mm",
"EE, d. MMM. yyyy, HH:mm", "EE MMM dd, yyyy, HH:mm",
"EE yyyy-MM-dd HH:mm", "yyyy-MM-dd HH:mm", "d. MMMM yyyy, HH:mm",
"MMMM d, yyyy, HH:mm", "d. MMM yyyy, HH:mm", "MMM d, yyyy, HH:mm"];
}
var result = [], sdf;
var locale = getLocale(language);
var now = new Date;
for each (var pattern in patterns) {
sdf = new java.text.SimpleDateFormat(pattern, locale);
result.push([encodeForm(pattern), sdf.format(now)]);
function getDateFormats(type, locale, timeZone) {
type || (type = "short");
locale || (locale = java.util.Locale.getDefault());
timeZone || (timeZone = java.util.TimeZone.getDefault());
var types = [type];
types.push(type === "long" ? "full" : "medium");
var now = new Date, result = [], patterns = {};
for each (let dateType in types) {
let dateFormat = java.text.DateFormat[dateType.toUpperCase()];
for each (let timeType in ["short", "medium", "long", "full"]) {
let timeFormat = java.text.DateFormat[timeType.toUpperCase()];
let sdf = java.text.DateFormat.getDateTimeInstance(dateFormat, timeFormat, locale);
let pattern = sdf.toPattern();
if (patterns[pattern]) {
continue;
}
patterns[pattern] = true;
sdf.setTimeZone(timeZone);
result.push([encodeForm(pattern), sdf.format(now)]);
}
}
result.push([encodeForm(Date.ISOFORMAT), now.format(Date.ISOFORMAT, locale, timeZone)]);
return result;
}

View file

@ -213,8 +213,8 @@ Site.prototype.constructor = function(name, title) {
pageSize: 3,
locale: root.getLocale().toString(),
timeZone: root.getTimeZone().getID(),
longDateFormat: LONGDATEFORMAT,
shortDateFormat: SHORTDATEFORMAT
longDateFormat: root.longDateFormat,
shortDateFormat: root.shortDateFormat
});
return this;
@ -318,7 +318,7 @@ Site.prototype.getFormOptions = function(name) {
case "layout":
return this.getLayouts();
case "longDateFormat":
return getDateFormats("long", this.getLocale());
return getDateFormats("long", this.getLocale(), this.getTimeZone());
case "mode":
return Site.getModes();
case "notificationMode":
@ -328,7 +328,7 @@ Site.prototype.getFormOptions = function(name) {
case "status":
return Site.getStatus();
case "shortDateFormat":
return getDateFormats("short", this.getLocale());
return getDateFormats("short", this.getLocale(), this.getTimeZone());
case "timeZone":
return getTimeZones(this.getLocale());
case "callbackMode":
@ -406,7 +406,7 @@ Site.prototype.main_js_action = function() {
res.dependsOn(Root.VERSION);
res.digest();
this.renderSkin("$Site#include",
{href:"http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"});
{href:"http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"});
this.renderSkin("$Site#include", {href: root.getStaticUrl("antville-1.2.js")});
this.renderSkin("$Site#include", {href: this.href("user.js")});
return;

View file

@ -49,7 +49,7 @@
</form>
<% #date %>
<div class="dayHeader"><% story.created "EEEE, d. MMMM yyyy" %></div>
<div class="dayHeader"><% story.created date %></div>
<% #content %>
<div class="storyTitle">
@ -57,7 +57,7 @@
</div>
<div class="storyDate">
<% story.creator link suffix=, %>
<% story.created HH:mm suffix="h" %>
<% story.created time %>
</div>
<div><% story.text | story.format %></div>