diff --git a/app/views/shared/_publisher.html.haml b/app/views/shared/_publisher.html.haml index 2c76eab50..4c8d86094 100644 --- a/app/views/shared/_publisher.html.haml +++ b/app/views/shared/_publisher.html.haml @@ -12,7 +12,7 @@ .content_creation = form_for(StatusMessage.new) do |status| = status.error_messages - %p + %div %params #publisher_textarea_wrapper = link_to( image_tag('deletelabel.png'), "#", :id => "hide_publisher", :title => t('.discard_post')) diff --git a/public/javascripts/app/helpers/date_formatter.js b/public/javascripts/app/helpers/date_formatter.js new file mode 100644 index 000000000..dbcb005b6 --- /dev/null +++ b/public/javascripts/app/helpers/date_formatter.js @@ -0,0 +1,35 @@ +(function(){ + var dateFormatter = function dateFormatter() { + + }; + + dateFormatter.parse = function(date_string) { + var timestamp = new Date(date_string).getTime(); + + if (isNaN(timestamp)) { + timestamp = dateFormatter.parseISO8601UTC(date_string); + } + + return timestamp; + }, + + dateFormatter.parseISO8601UTC = function(date_string) { + var iso8601_utc_pattern = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(.(\d{3}))?Z$/; + var time_components = date_string.match(iso8601_utc_pattern); + var timestamp = 0; + + if (time_components != null) { + if (time_components[8] == undefined) { + time_components[8] = 0; + } + + timestamp = Date.UTC(time_components[1], time_components[2] - 1, time_components[3], + time_components[4], time_components[5], time_components[6], + time_components[8]); + } + + return timestamp; + }, + + app.helpers.dateFormatter = dateFormatter; +})(); diff --git a/public/javascripts/app/models/photo.js b/public/javascripts/app/models/photo.js index 05b4a3c1e..cefbb0e1d 100644 --- a/public/javascripts/app/models/photo.js +++ b/public/javascripts/app/models/photo.js @@ -8,7 +8,7 @@ app.models.Photo = Backbone.Model.extend({ }, timeOf: function(field) { - return new Date(this.get(field)) /1000; + return app.helpers.dateFormatter.parse(this.get(field)) / 1000; }, -}); \ No newline at end of file +}); diff --git a/public/javascripts/app/models/post.js b/public/javascripts/app/models/post.js index c7ad731c6..a5beb5ecd 100644 --- a/public/javascripts/app/models/post.js +++ b/public/javascripts/app/models/post.js @@ -21,7 +21,7 @@ app.models.Post = Backbone.Model.extend({ }, timeOf: function(field) { - return new Date(this.get(field)) /1000; + return app.helpers.dateFormatter.parse(this.get(field)) / 1000; }, createReshareUrl : "/reshares", diff --git a/spec/javascripts/app/app_spec.js b/spec/javascripts/app/app_spec.js index 96884b650..f85054293 100644 --- a/spec/javascripts/app/app_spec.js +++ b/spec/javascripts/app/app_spec.js @@ -2,6 +2,7 @@ describe("app", function() { describe("user", function() { it("sets the user if given one and returns the current user", function() { expect(app.user()).toBeFalsy() + }); it("sets the user if given one and returns the current user", function() { expect(app.user().authenticated()).toBeFalsy() diff --git a/spec/javascripts/app/helpers/date_formatter_spec.js b/spec/javascripts/app/helpers/date_formatter_spec.js new file mode 100644 index 000000000..9d317a108 --- /dev/null +++ b/spec/javascripts/app/helpers/date_formatter_spec.js @@ -0,0 +1,33 @@ +describe("app.helpers.dateFormatter", function(){ + + beforeEach(function(){ + this.statusMessage = factory.post(); + this.formatter = app.helpers.dateFormatter; + }) + + describe("parse", function(){ + context("modern web browsers", function(){ + it ("supports ISO 8601 UTC dates", function(){ + var timestamp = new Date(this.statusMessage.get("created_at")).getTime(); + expect(this.formatter.parse(this.statusMessage.get("created_at"))).toEqual(timestamp); + }) + }) + + context("legacy web browsers", function(){ + it("supports ISO 8601 UTC dates", function(){ + var timestamp = new Date(this.statusMessage.get("created_at")).getTime(); + + expect(this.formatter.parseISO8601UTC(this.statusMessage.get("created_at"))).toEqual(timestamp); + }) + }) + + context("status messages", function(){ + it("uses ISO 8601 UTC dates", function(){ + var iso8601_utc_pattern = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(.(\d{3}))?Z$/; + + expect(iso8601_utc_pattern.test(this.statusMessage.get("created_at"))).toBe(true); + }) + }) + }) + +})