Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Legacy browser support #2976

Merged
merged 4 commits into from Mar 10, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/views/shared/_publisher.html.haml
Expand Up @@ -12,7 +12,7 @@
.content_creation
= form_for(StatusMessage.new) do |status|
= status.error_messages
%p
%div
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this related to the bugfix? the publisher is so wonky that I am actually sorta nervous about this change...

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No. It was a separate fix for a JavaScript error that I noticed in the Safari error console.

https://poddery.com/custom/github/diaspora-2976-unmatched-tags-error.gif

If you omit that change, the main problem of the posts appearing in the reverse order will still be corrected. The older version of Safari appears to operate fine with the particular change omitted.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks!

%params
#publisher_textarea_wrapper
= link_to( image_tag('deletelabel.png'), "#", :id => "hide_publisher", :title => t('.discard_post'))
Expand Down
35 changes: 35 additions & 0 deletions 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;
})();
4 changes: 2 additions & 2 deletions public/javascripts/app/models/photo.js
Expand Up @@ -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;
},

});
});
2 changes: 1 addition & 1 deletion public/javascripts/app/models/post.js
Expand Up @@ -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",
Expand Down
1 change: 1 addition & 0 deletions spec/javascripts/app/app_spec.js
Expand Up @@ -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()
Expand Down
33 changes: 33 additions & 0 deletions 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);
})
})
})

})