From f62efe33a57fed4f6c24921c9b16fac07a40f3db Mon Sep 17 00:00:00 2001 From: Stephen Mizell Date: Thu, 24 Jan 2013 12:47:18 -0600 Subject: [PATCH 1/5] Set data for element to include all time values --- jquery.timeago.js | 64 ++++++++++++++++++++++++++++++++++------------- test/index.html | 6 +++-- 2 files changed, 51 insertions(+), 19 deletions(-) diff --git a/jquery.timeago.js b/jquery.timeago.js index f7651c76..dc892686 100644 --- a/jquery.timeago.js +++ b/jquery.timeago.js @@ -16,13 +16,13 @@ (function($) { $.timeago = function(timestamp) { if (timestamp instanceof Date) { - return inWords(timestamp); + return getDistanceValues(timestamp).inWords; } else if (typeof timestamp === "string") { - return inWords($.timeago.parse(timestamp)); + return getDistanceValues(($.timeago.parse(timestamp))).inWords; } else if (typeof timestamp === "number") { - return inWords(new Date(timestamp)); + return getDistanceValues((new Date(timestamp))).inWords; } else { - return inWords($.timeago.datetime(timestamp)); + return getDistanceValues(($.timeago.datetime(timestamp))).inWords; } }; var $t = $.timeago; @@ -51,25 +51,49 @@ numbers: [] } }, - inWords: function(distanceMillis) { + distanceValues: function(distanceMillis, datetime) { + var seconds = Math.abs(distanceMillis) / 1000; + var minutes = seconds / 60; + var hours = minutes / 60; + var days = hours / 24; + var years = days / 365; + + distanceValues = { + milliseconds: distanceMillis, + seconds: seconds, + minutes: minutes, + hours: hours, + days: days, + years: years + } + + distanceValues.inWords = $t.inWords(distanceValues); + + if (datetime) { + distanceValues.datetime = datetime; + } + + return distanceValues; + }, + inWords: function(distanceValues) { var $l = this.settings.strings; var prefix = $l.prefixAgo; var suffix = $l.suffixAgo; if (this.settings.allowFuture) { - if (distanceMillis < 0) { + if (distanceValues.milliseconds < 0) { prefix = $l.prefixFromNow; suffix = $l.suffixFromNow; } } - var seconds = Math.abs(distanceMillis) / 1000; - var minutes = seconds / 60; - var hours = minutes / 60; - var days = hours / 24; - var years = days / 365; + var seconds = distanceValues.seconds; + var minutes = distanceValues.minutes; + var hours = distanceValues.hours; + var days = distanceValues.days; + var years = distanceValues.years; function substitute(stringOrFunction, number) { - var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction; + var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceValues.milliseconds) : stringOrFunction; var value = ($l.numbers && $l.numbers[number]) || number; return string.replace(/%d/i, value); } @@ -121,26 +145,32 @@ function refresh() { var data = prepareData(this); - if (!isNaN(data.datetime)) { - $(this).text(inWords(data.datetime)); + if (data) { + $(this).text(data.inWords); } return this; } function prepareData(element) { element = $(element); + if (!element.data("timeago")) { - element.data("timeago", { datetime: $t.datetime(element) }); + var datetime = $t.datetime(element); + + if (!isNaN(datetime)) { + element.data("timeago", getDistanceValues(datetime)); + } var text = $.trim(element.text()); if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) { element.attr("title", text); } } + return element.data("timeago"); } - function inWords(date) { - return $t.inWords(distance(date)); + function getDistanceValues(datetime) { + return $t.distanceValues(distance(datetime), datetime); } function distance(date) { diff --git a/test/index.html b/test/index.html index 9768c8eb..50968af8 100644 --- a/test/index.html +++ b/test/index.html @@ -214,7 +214,8 @@

Settings

} function toWords() { - var string = $.timeago.inWords(parseInt(this.title, 10) * 1000); + var distanceValues = $.timeago.distanceValues(parseInt(this.title, 10) * 1000); + var string = distanceValues.inWords; $(this).text(string); } @@ -298,7 +299,8 @@

Settings

test("should set timeago data object", function () { ok(tooltip, "data set"); - ok(tooltip.datetime, "datetime set"); + ok(tooltip.datetime, "datetime set") + ok(tooltip.seconds, "distance set"); }); module("Tooltip"); From b69ae6ef7f614dbeeabaebcc0c48036db2ad0753 Mon Sep 17 00:00:00 2001 From: Stephen Mizell Date: Thu, 24 Jan 2013 13:01:22 -0600 Subject: [PATCH 2/5] Add semicolon in test where it was accidentially removed --- test/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/index.html b/test/index.html index 50968af8..9afc5377 100644 --- a/test/index.html +++ b/test/index.html @@ -299,7 +299,7 @@

Settings

test("should set timeago data object", function () { ok(tooltip, "data set"); - ok(tooltip.datetime, "datetime set") + ok(tooltip.datetime, "datetime set"); ok(tooltip.seconds, "distance set"); }); From 92757db566e8f4876423e004192f296b9be8797c Mon Sep 17 00:00:00 2001 From: Stephen Mizell Date: Thu, 24 Jan 2013 13:54:20 -0600 Subject: [PATCH 3/5] Fix bug that prevented refreshing of timestamps --- jquery.timeago.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/jquery.timeago.js b/jquery.timeago.js index dc892686..4e17fbdc 100644 --- a/jquery.timeago.js +++ b/jquery.timeago.js @@ -153,19 +153,19 @@ function prepareData(element) { element = $(element); + var datetime = $t.datetime(element); if (!element.data("timeago")) { - var datetime = $t.datetime(element); - - if (!isNaN(datetime)) { - element.data("timeago", getDistanceValues(datetime)); - } var text = $.trim(element.text()); if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) { element.attr("title", text); } } + if (!isNaN(datetime)) { + element.data("timeago", getDistanceValues(datetime)); + } + return element.data("timeago"); } From 4ae611046edcf15348a12e0b3159e7415fae8a06 Mon Sep 17 00:00:00 2001 From: Stephen Mizell Date: Fri, 25 Jan 2013 07:52:05 -0600 Subject: [PATCH 4/5] Fix issues with automatic refreshing --- jquery.timeago.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/jquery.timeago.js b/jquery.timeago.js index 4e17fbdc..0c6067aa 100644 --- a/jquery.timeago.js +++ b/jquery.timeago.js @@ -153,13 +153,15 @@ function prepareData(element) { element = $(element); - var datetime = $t.datetime(element); if (!element.data("timeago")) { + datetime = $t.datetime(element); var text = $.trim(element.text()); if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) { element.attr("title", text); } + } else { + datetime = element.data('timeago').datetime } if (!isNaN(datetime)) { From 2f0156c506394fb49770ae37bdf350a2ee37891f Mon Sep 17 00:00:00 2001 From: Stephen Mizell Date: Tue, 12 Feb 2013 11:21:28 -0600 Subject: [PATCH 5/5] Make datetime local variable in prepareData --- jquery.timeago.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jquery.timeago.js b/jquery.timeago.js index 0c6067aa..f990fea6 100644 --- a/jquery.timeago.js +++ b/jquery.timeago.js @@ -155,13 +155,13 @@ element = $(element); if (!element.data("timeago")) { - datetime = $t.datetime(element); + var datetime = $t.datetime(element); var text = $.trim(element.text()); if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) { element.attr("title", text); } } else { - datetime = element.data('timeago').datetime + var datetime = element.data('timeago').datetime } if (!isNaN(datetime)) {