blob: 45168463ff6372b86d22e2970595320c752af351 [file] [log] [blame]
/*==================================================
* Gregorian Date Labeller
*==================================================
*/
Timeline.GregorianDateLabeller = function(locale, timeZone) {
this._locale = locale;
this._timeZone = timeZone;
};
Timeline.GregorianDateLabeller.monthNames = [];
Timeline.GregorianDateLabeller.dayNames = [];
Timeline.GregorianDateLabeller.labelIntervalFunctions = [];
Timeline.GregorianDateLabeller.getMonthName = function(month, locale) {
return Timeline.GregorianDateLabeller.monthNames[locale][month];
};
Timeline.GregorianDateLabeller.prototype.labelInterval = function(date, intervalUnit) {
var f = Timeline.GregorianDateLabeller.labelIntervalFunctions[this._locale];
if (f == null) {
f = Timeline.GregorianDateLabeller.prototype.defaultLabelInterval;
}
return f.call(this, date, intervalUnit);
};
Timeline.GregorianDateLabeller.prototype.labelPrecise = function(date) {
return Timeline.DateTime.removeTimeZoneOffset(
date,
this._timeZone //+ (new Date().getTimezoneOffset() / 60)
).toUTCString();
};
Timeline.GregorianDateLabeller.prototype.defaultLabelInterval = function(date, intervalUnit) {
var text;
var emphasized = false;
date = Timeline.DateTime.removeTimeZoneOffset(date, this._timeZone);
switch(intervalUnit) {
case Timeline.DateTime.MILLISECOND:
text = date.getUTCMilliseconds();
break;
case Timeline.DateTime.SECOND:
text = date.getUTCSeconds();
break;
case Timeline.DateTime.MINUTE:
var m = date.getUTCMinutes();
if (m == 0) {
text = date.getUTCHours() + ":00";
emphasized = true;
} else {
text = m;
}
break;
case Timeline.DateTime.HOUR:
text = date.getUTCHours() + "hr";
break;
case Timeline.DateTime.DAY:
text = Timeline.GregorianDateLabeller.getMonthName(date.getUTCMonth(), this._locale) + " " + date.getUTCDate();
break;
case Timeline.DateTime.WEEK:
text = Timeline.GregorianDateLabeller.getMonthName(date.getUTCMonth(), this._locale) + " " + date.getUTCDate();
break;
case Timeline.DateTime.MONTH:
var m = date.getUTCMonth();
if (m != 0) {
text = Timeline.GregorianDateLabeller.getMonthName(m, this._locale);
break;
} // else, fall through
case Timeline.DateTime.YEAR:
case Timeline.DateTime.DECADE:
case Timeline.DateTime.CENTURY:
case Timeline.DateTime.MILLENNIUM:
var y = date.getUTCFullYear();
if (y > 0) {
text = date.getUTCFullYear();
} else {
text = (1 - y) + "BC";
}
emphasized =
(intervalUnit == Timeline.DateTime.MONTH) ||
(intervalUnit == Timeline.DateTime.DECADE && y % 100 == 0) ||
(intervalUnit == Timeline.DateTime.CENTURY && y % 1000 == 0);
break;
default:
text = date.toUTCString();
}
return { text: text, emphasized: emphasized };
}