mirror of https://github.com/zulip/zulip.git
Add function to get last seen status from last active date.
This commit is contained in:
parent
1ba7d1ec68
commit
a158676fb0
|
@ -13,6 +13,14 @@ set_global('document', {
|
|||
},
|
||||
});
|
||||
|
||||
set_global('i18n', {
|
||||
t: function (string) {
|
||||
return string;
|
||||
},
|
||||
});
|
||||
|
||||
set_global('XDate', require("xdate"));
|
||||
|
||||
add_dependencies({
|
||||
Handlebars: 'handlebars',
|
||||
templates: 'js/templates',
|
||||
|
@ -25,6 +33,7 @@ add_dependencies({
|
|||
narrow: 'js/narrow.js',
|
||||
presence: 'js/presence.js',
|
||||
activity: 'js/activity.js',
|
||||
timerender: 'js/timerender.js',
|
||||
});
|
||||
|
||||
var presence = global.presence;
|
||||
|
|
|
@ -187,3 +187,55 @@ var timerender = require('js/timerender.js');
|
|||
var actual = attrs.get('title');
|
||||
assert.equal(expected, actual);
|
||||
}());
|
||||
|
||||
(function test_last_seen_status_from_date() {
|
||||
// Set base_dateto to March 1 2016 12.30 AM (months are zero based)
|
||||
var base_date = new XDate(2016, 2, 1, 0, 30);
|
||||
|
||||
function assert_same(modifier, expected_status) {
|
||||
var past_date = base_date.clone();
|
||||
past_date = modifier(past_date);
|
||||
var actual_status = timerender.last_seen_status_from_date(past_date, base_date);
|
||||
assert.equal(actual_status, expected_status);
|
||||
}
|
||||
|
||||
assert_same(function (d) { return d.addSeconds(-20); },
|
||||
i18n.t("Last seen just now"));
|
||||
|
||||
assert_same(function (d) { return d.addMinutes(-1); },
|
||||
i18n.t("Last seen just now"));
|
||||
|
||||
assert_same(function (d) { return d.addMinutes(-2); },
|
||||
i18n.t("Last seen just now"));
|
||||
|
||||
assert_same(function (d) { return d.addMinutes(-30); },
|
||||
i18n.t("Last seen 30 minutes ago"));
|
||||
|
||||
assert_same(function (d) { return d.addHours(-1); },
|
||||
i18n.t("Last seen an hour ago"));
|
||||
|
||||
assert_same(function (d) { return d.addHours(-2); },
|
||||
i18n.t("Last seen 2 hours ago"));
|
||||
|
||||
assert_same(function (d) { return d.addHours(-20); },
|
||||
i18n.t("Last seen 20 hours ago"));
|
||||
|
||||
assert_same(function (d) { return d.addDays(-1); },
|
||||
i18n.t("Last seen yesterday"));
|
||||
|
||||
assert_same(function (d) { return d.addDays(-2); },
|
||||
i18n.t("Last seen on Feb 28"));
|
||||
|
||||
assert_same(function (d) { return d.addDays(-61); },
|
||||
i18n.t("Last seen on Dec 31"));
|
||||
|
||||
assert_same(function (d) { return d.addDays(-300); },
|
||||
i18n.t("Last seen on May 06"));
|
||||
|
||||
assert_same(function (d) { return d.addDays(-366); },
|
||||
i18n.t("Last seen on Mar 01, 2015"));
|
||||
|
||||
assert_same(function (d) { return d.addYears(-3); },
|
||||
i18n.t("Last seen on Mar 01, 2013"));
|
||||
|
||||
}());
|
||||
|
|
|
@ -62,6 +62,39 @@ exports.render_now = function (time, today) {
|
|||
};
|
||||
};
|
||||
|
||||
// Current date is passed as an argument for unit testing
|
||||
exports.last_seen_status_from_date = function (last_active_date, current_date) {
|
||||
if (typeof current_date === 'undefined') {
|
||||
current_date = new XDate();
|
||||
}
|
||||
|
||||
var minutes = Math.floor(last_active_date.diffMinutes(current_date));
|
||||
if (minutes <= 2) {
|
||||
return i18n.t("Last seen just now");
|
||||
}
|
||||
if (minutes < 60) {
|
||||
return i18n.t("Last seen " + minutes +" minutes ago");
|
||||
}
|
||||
|
||||
var hours = Math.floor(minutes / 60);
|
||||
if (hours === 1) {
|
||||
return i18n.t("Last seen an hour ago");
|
||||
}
|
||||
if (hours < 24) {
|
||||
return i18n.t("Last seen " + hours + " hours ago");
|
||||
}
|
||||
|
||||
var days = Math.floor(hours / 24);
|
||||
if (days === 1) {
|
||||
return [i18n.t("Last seen yesterday")];
|
||||
}
|
||||
if (days < 365) {
|
||||
return i18n.t("Last seen on " + last_active_date.toString("MMM\xa0dd"));
|
||||
}
|
||||
|
||||
return i18n.t("Last seen on " + last_active_date.toString("MMM\xa0dd,\xa0yyyy"));
|
||||
};
|
||||
|
||||
// List of the dates that need to be updated when the day changes.
|
||||
// Each timestamp is represented as a list of length 2:
|
||||
// [id of the span element, XDate representing the time]
|
||||
|
|
Loading…
Reference in New Issue