From 4bab18d477b2d736abf07efa63facdd4218f4e3d Mon Sep 17 00:00:00 2001 From: jomo Date: Sat, 15 Nov 2014 23:07:59 +0100 Subject: [PATCH] ago.js fixes --- app/assets/javascripts/ago.js | 68 ++++++++++++++++++----------------- app/assets/javascripts/app.js | 2 +- 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/app/assets/javascripts/ago.js b/app/assets/javascripts/ago.js index 3ac48fa..8da2ab5 100644 --- a/app/assets/javascripts/ago.js +++ b/app/assets/javascripts/ago.js @@ -1,27 +1,36 @@ function Ago(nodes, options) { + if (!(nodes instanceof Array)) { + options = nodes; + nodes = undefined; + } nodes = nodes || document.querySelectorAll("time"); options = options || {}; var default_opts = { interval: 10000, // 10 secs - units: { - minute: 60, - hour: 3600, - day: 86400, - week: 604800, - month: 2592000, - year: 31536000 - }, + units: [ + ["minute", 60], + ["hour", 3600], + ["day", 86400], + ["week", 604800], + ["month", 2592000], + ["year", 31536000] + ], date: function(node) { - // works on HTML 'time' nodes + // works on HTML "time" nodes return new Date(node.dateTime); }, - format: "{v} {u} {r}", - words: { - now: "just now", - ago: "ago", - ahead: "ahead" + format: function(time, unit) { + if (!unit) { + return "just now"; + } + if (time < 0) { + var tail = " ahead"; + } else { + var tail = " ago"; + } + return Math.abs(time) + " " + unit + tail; }, plural: { minute: "minutes", @@ -43,37 +52,30 @@ function Ago(nodes, options) { // use callback to get date var ago_date = options.date(node); // get seconds ago - ago_time = (new Date().getTime() - ago_date.getTime()) / 1000; - ago_time = Math.floor(Math.abs(ago_time)); + var ago_time = (new Date().getTime() - ago_date.getTime()) / 1000; + var abs_time = Math.floor(Math.abs(ago_time)); // find greatest unit var unit = null; var unit_time = null; for (var u in options.units) { - var secs = options.units[u]; - if (ago_time >= secs) { - unit = u; + var secs = options.units[u][1]; + if (abs_time >= secs) { + unit = options.units[u][0]; unit_time = secs; + } else { + break; } } - var output = null; if (unit_time !== null) { - ago_time = Math.floor(ago_time/unit_time); + abs_time = Math.floor(abs_time/unit_time); // plural - if (ago_time != 1) unit = options.plural[unit]; - // future or past? - relative = (ago_time < 0 ? options.words.ahead : options.words.ago); - - output = options.format - .replace("{v}", ago_time) - .replace("{u}", unit) - .replace("{r}", relative); - } else { - output = options.words.now; + if (abs_time != 1) { + unit = options.plural[unit]; + } } - - node.textContent = output; + node.textContent = options.format(ago_time < 0 ? -abs_time : abs_time, unit); }; diff --git a/app/assets/javascripts/app.js b/app/assets/javascripts/app.js index e91bbc8..b198bf7 100644 --- a/app/assets/javascripts/app.js +++ b/app/assets/javascripts/app.js @@ -42,5 +42,5 @@ $(function(){ } }); - var ago = new Ago(); + Ago(); }); \ No newline at end of file