diff --git a/app/assets/javascripts/discourse/components/formatter.js b/app/assets/javascripts/discourse/components/formatter.js index 98d413aa7..dbb2b5f58 100644 --- a/app/assets/javascripts/discourse/components/formatter.js +++ b/app/assets/javascripts/discourse/components/formatter.js @@ -43,13 +43,17 @@ Discourse.Formatter = (function(){ var append = ""; if(format === 'medium') { - append = " date' title='" + longDate(date); + append = " date"; if(options.leaveAgo) { format = 'medium-with-ago'; } options.wrapInSpan = false; } + if (options.title) { + append += "' title='" + longDate(date); + } + return "<span class='relative-date" + append + "' data-time='" + date.getTime() + "' data-format='" + format + "'>" + relativeAge(date, options) + "</span>"; }; diff --git a/app/assets/javascripts/discourse/helpers/application_helpers.js b/app/assets/javascripts/discourse/helpers/application_helpers.js index c1e2e1ad8..3c58e4075 100644 --- a/app/assets/javascripts/discourse/helpers/application_helpers.js +++ b/app/assets/javascripts/discourse/helpers/application_helpers.js @@ -203,6 +203,17 @@ Handlebars.registerHelper('unboundAge', function(property, options) { return new Handlebars.SafeString(Discourse.Formatter.autoUpdatingRelativeAge(dt)); }); +/** + Live refreshing age helper, with a tooltip showing the date and time + + @method unboundAgeWithTooltip + @for Handlebars +**/ +Handlebars.registerHelper('unboundAgeWithTooltip', function(property, options) { + var dt = new Date(Ember.Handlebars.get(this, property, options)); + return new Handlebars.SafeString(Discourse.Formatter.autoUpdatingRelativeAge(dt, {title: true})); +}); + /** Display a date related to an edit of a post @@ -212,7 +223,7 @@ Handlebars.registerHelper('unboundAge', function(property, options) { Handlebars.registerHelper('editDate', function(property, options) { // autoupdating this is going to be painful var date = new Date(Ember.Handlebars.get(this, property, options)); - return new Handlebars.SafeString(Discourse.Formatter.autoUpdatingRelativeAge(date, {format: 'medium', leaveAgo: true, wrapInSpan: false})); + return new Handlebars.SafeString(Discourse.Formatter.autoUpdatingRelativeAge(date, {format: 'medium', title: true, leaveAgo: true, wrapInSpan: false})); }); /** @@ -284,7 +295,7 @@ Handlebars.registerHelper('date', function(property, options) { var val = Ember.Handlebars.get(this, property, options); if (val) { var date = new Date(val); - return new Handlebars.SafeString(Discourse.Formatter.autoUpdatingRelativeAge(date, {format: 'medium', leaveAgo: leaveAgo})); + return new Handlebars.SafeString(Discourse.Formatter.autoUpdatingRelativeAge(date, {format: 'medium', title: true, leaveAgo: leaveAgo})); } }); diff --git a/app/assets/javascripts/discourse/templates/post.js.handlebars b/app/assets/javascripts/discourse/templates/post.js.handlebars index b83ec83d5..c41e22f0d 100644 --- a/app/assets/javascripts/discourse/templates/post.js.handlebars +++ b/app/assets/javascripts/discourse/templates/post.js.handlebars @@ -39,14 +39,14 @@ <div class='topic-meta-data-inside'> {{#if hasHistory}} <div class='post-info edits'> - <a href='#' class="{{unbound historyHeat}}" {{action showHistory this}} title="{{editDate updated_at}}"> + <a href='#' class="{{unbound historyHeat}}" {{action showHistory this}} title="{{unboundDate updated_at}}"> {{editCount}} <i class='icon-pencil'></i> </a> </div> {{/if}} <div class='post-info'> - <a href='#' class='post-date' {{bindAttr data-share-url="shareUrl"}}>{{unboundAge created_at}}</a> + <a href='#' class='post-date' {{bindAttr data-share-url="shareUrl"}}>{{unboundAgeWithTooltip created_at}}</a> </div> </div> {{/unless}} diff --git a/test/javascripts/components/formatter_test.js b/test/javascripts/components/formatter_test.js index a2910cbd3..49b9132c4 100644 --- a/test/javascripts/components/formatter_test.js +++ b/test/javascripts/components/formatter_test.js @@ -86,8 +86,12 @@ test("autoUpdatingRelativeAge", function() { var $elem = $(Discourse.Formatter.autoUpdatingRelativeAge(d)); equal($elem.data('format'), "tiny"); equal($elem.data('time'), d.getTime()); + equal($elem.attr('title'), undefined); - $elem = $(Discourse.Formatter.autoUpdatingRelativeAge(d,{format: 'medium', leaveAgo: true})); + $elem = $(Discourse.Formatter.autoUpdatingRelativeAge(d, {title: true})); + equal($elem.attr('title'), moment(d).longDate()); + + $elem = $(Discourse.Formatter.autoUpdatingRelativeAge(d,{format: 'medium', title: true, leaveAgo: true})); equal($elem.data('format'), "medium-with-ago"); equal($elem.data('time'), d.getTime()); equal($elem.attr('title'), moment(d).longDate()); @@ -96,6 +100,7 @@ test("autoUpdatingRelativeAge", function() { $elem = $(Discourse.Formatter.autoUpdatingRelativeAge(d,{format: 'medium'})); equal($elem.data('format'), "medium"); equal($elem.data('time'), d.getTime()); + equal($elem.attr('title'), undefined); equal($elem.html(), '1 day'); });