/* * vim: ts=4:sw=4:expandtab */ (function () { 'use strict'; window.Whisper = window.Whisper || {}; moment.updateLocale(i18n.getLocale(), { relativeTime : { s: i18n('timestamp_s') || 'now', m: i18n('timestamp_m') || '1 minute', h: i18n('timestamp_h') || '1 hour' } }); moment.locale(i18n.getLocale()); Whisper.TimestampView = Whisper.View.extend({ initialize: function(options) { extension.windows.onClosed(this.clearTimeout.bind(this)); }, update: function() { this.clearTimeout(); var millis_now = Date.now(); var millis = this.$el.data('timestamp'); if (millis === "") { return; } if (millis >= millis_now) { millis = millis_now; } var result = this.getRelativeTimeSpanString(millis); this.$el.text(result); var timestamp = moment(millis); this.$el.attr('title', timestamp.format('llll')); var millis_since = millis_now - millis; if (this.delay) { if (this.delay < 0) { this.delay = 1000; } this.timeout = setTimeout(this.update.bind(this), this.delay); } }, clearTimeout: function() { clearTimeout(this.timeout); }, getRelativeTimeSpanString: function(timestamp_) { // Convert to moment timestamp if it isn't already var timestamp = moment(timestamp_), now = moment(), timediff = moment.duration(now - timestamp); if (timediff.years() > 0) { this.delay = null; return timestamp.format(this._format.y); } else if (timediff.months() > 0 || timediff.days() > 6) { this.delay = null; return timestamp.format(this._format.M); } else if (timediff.days() > 0) { this.delay = moment(timestamp).add(timediff.days() + 1,'d').diff(now); return timestamp.format(this._format.d); } else if (timediff.hours() > 1) { this.delay = moment(timestamp).add(timediff.hours() + 1,'h').diff(now); return this.relativeTime(timediff.hours(), 'h'); } else if (timediff.hours() === 1) { this.delay = moment(timestamp).add(timediff.hours() + 1,'h').diff(now); return this.relativeTime(timediff.hours(), 'h'); } else if (timediff.minutes() > 1) { this.delay = moment(timestamp).add(timediff.minutes() + 1,'m').diff(now); return this.relativeTime(timediff.minutes(), 'm'); } else if (timediff.minutes() === 1) { this.delay = moment(timestamp).add(timediff.minutes() + 1,'m').diff(now); return this.relativeTime(timediff.minutes(), 'm'); } else { this.delay = moment(timestamp).add(1,'m').diff(now); return this.relativeTime(timediff.seconds(), 's'); } }, relativeTime : function (number, string) { return moment.duration(number, string).humanize(); }, _format: { y: "ll", M: i18n('timestampFormat_M') || "MMM D", d: "ddd" } }); Whisper.ExtendedTimestampView = Whisper.TimestampView.extend({ relativeTime : function (number, string, isFuture) { return moment.duration(-1 * number, string).humanize(string !== 's'); }, _format: { y: "lll", M: (i18n('timestampFormat_M') || "MMM D") + ' LT', d: "ddd LT" } }); })();