Change tiny date formatting for dates in past years. Example: 10 Dec '12

This commit is contained in:
Neil Lalonde 2013-08-06 13:47:24 -04:00
parent 890ded7b1b
commit 879aa06601
2 changed files with 52 additions and 12 deletions

View file

@ -4,7 +4,7 @@ Discourse.Formatter = (function(){
var updateRelativeAge, autoUpdatingRelativeAge, relativeAge, relativeAgeTiny,
relativeAgeMedium, relativeAgeMediumSpan, longDate, toTitleCase,
shortDate, shortDateNoYear, breakUp;
shortDate, shortDateNoYear, tinyDateYear, breakUp;
breakUp = function(string, maxLength){
if(string.length <= maxLength) {
@ -33,6 +33,10 @@ Discourse.Formatter = (function(){
return moment(date).shortDateNoYear();
};
tinyDateYear = function(date) {
return moment(date).format("D MMM 'YY");
};
// http://stackoverflow.com/questions/196972/convert-string-to-title-case-with-javascript
// TODO: locale support ?
toTitleCase = function toTitleCase(str)
@ -114,15 +118,11 @@ Discourse.Formatter = (function(){
case(distanceInMinutes >= 2520 && distanceInMinutes <= ((Discourse.SiteSettings.relative_date_duration||14) * 1440)):
formatted = t("x_days", {count: Math.round(distanceInMinutes / 1440.0)});
break;
case(distanceInMinutes >= ((Discourse.SiteSettings.relative_date_duration||14) * 1440) && distanceInMinutes <= 525599):
formatted = shortDateNoYear(date);
break;
default:
var months = Math.round(distanceInMinutes / 43200.0);
if (months < 12) {
if(date.getFullYear() === new Date().getFullYear()) {
formatted = shortDateNoYear(date);
} else {
formatted = t("over_x_years", {count: Math.round(months / 12.0)});
formatted = tinyDateYear(date);
}
break;
}

View file

@ -1,4 +1,14 @@
module("Discourse.Formatter");
var clock;
module("Discourse.Formatter", {
setup: function() {
clock = sinon.useFakeTimers(new Date(2012,11,31,12,0).getTime());
},
teardown: function() {
clock.restore();
}
});
var format = "tiny";
var leaveAgo = false;
@ -65,9 +75,19 @@ test("formating medium length dates", function() {
equal($(formatDays(0)).attr("title"), moment().format('MMMM D, YYYY h:mma'));
equal($(formatDays(0)).attr("class"), "date");
clock.restore();
clock = sinon.useFakeTimers(new Date(2012,0,9,12,0).getTime()); // Jan 9, 2012
equal(strip(formatDays(8)), shortDate(8));
equal(strip(formatDays(10)), shortDateYear(10));
});
test("formating tiny dates", function() {
var shortDateYear = function(days){
return moment().subtract('days', days).format("D MMM 'YY");
};
format = "tiny";
equal(formatMins(0), "< 1m");
equal(formatMins(2), "2m");
@ -78,9 +98,10 @@ test("formating tiny dates", function() {
equal(formatDays(15), shortDate(15));
equal(formatDays(92), shortDate(92));
equal(formatDays(364), shortDate(364));
equal(formatDays(365), "> 1y");
equal(formatDays(500), "> 1y");
equal(formatDays(365*2), "> 2y");
equal(formatDays(365), shortDate(365));
equal(formatDays(366), shortDateYear(366)); // leap year
equal(formatDays(500), shortDateYear(500));
equal(formatDays(365*2 + 1), shortDateYear(365*2 + 1)); // one leap year
var originalValue = Discourse.SiteSettings.relative_date_duration;
Discourse.SiteSettings.relative_date_duration = 7;
@ -97,16 +118,35 @@ test("formating tiny dates", function() {
equal(formatMins(60), "1h");
equal(formatDays(1), shortDate(1));
equal(formatDays(2), shortDate(2));
equal(formatDays(365), "> 1y");
equal(formatDays(366), shortDateYear(366));
Discourse.SiteSettings.relative_date_duration = null;
equal(formatDays(1), '1d');
equal(formatDays(14), '14d');
equal(formatDays(15), shortDate(15));
Discourse.SiteSettings.relative_date_duration = 14;
clock.restore();
clock = sinon.useFakeTimers(new Date(2012,0,12,12,0).getTime()); // Jan 12, 2012
equal(formatDays(11), "11d");
equal(formatDays(14), "14d");
equal(formatDays(15), shortDateYear(15));
equal(formatDays(366), shortDateYear(366));
clock.restore();
clock = sinon.useFakeTimers(new Date(2012,0,20,12,0).getTime()); // Jan 20, 2012
equal(formatDays(14), "14d");
equal(formatDays(15), shortDate(15));
equal(formatDays(20), shortDateYear(20));
Discourse.SiteSettings.relative_date_duration = originalValue;
});
module("Discourse.Formatter");
test("autoUpdatingRelativeAge", function() {
var d = moment().subtract('days',1).toDate();