Use routers, remove some hacks

This commit is contained in:
Dan Hansen 2011-12-05 23:58:43 -06:00 committed by Dennis Collinson
parent d4219799e4
commit ba9ece0014
9 changed files with 97 additions and 60 deletions

View file

@ -41,13 +41,13 @@
- unless @landing_page - unless @landing_page
= include_javascripts :main = include_javascripts :main
:javascript :javascript
App.user({
current_user: #{current_user.person.as_api_response(:backbone).to_json}
});
Diaspora.I18n.loadLocale(#{get_javascript_strings_for(I18n.locale).to_json}, "#{I18n.locale}"); Diaspora.I18n.loadLocale(#{get_javascript_strings_for(I18n.locale).to_json}, "#{I18n.locale}");
Diaspora.Page = "#{params[:controller].camelcase}#{params[:action].camelcase}"; Diaspora.Page = "#{params[:controller].camelcase}#{params[:action].camelcase}";
- if @backbone
:javascript
window.useBackbone = true;
= yield(:head) = yield(:head)
-unless Rails.env == "production" -unless Rails.env == "production"
@ -60,8 +60,7 @@
- if @person - if @person
%link{:rel => "alternate", :href => "#{@person.public_url}.atom", :type => "application/atom+xml", :title => "#{t('.public_feed', :name => @person.name)}"} %link{:rel => "alternate", :href => "#{@person.public_url}.atom", :type => "application/atom+xml", :title => "#{t('.public_feed', :name => @person.name)}"}
- metadata = user_signed_in? ? CGI::escape({:current_user => current_user.person.as_api_response(:backbone)}.to_json) : "" %body{:class => "#{yield(:body_class)}"}
%body{:class => "#{yield(:body_class)}", 'data-current-user-metadata' => metadata }
- unless @page == :logged_out - unless @page == :logged_out
- flash.each do |name, msg| - flash.each do |name, msg|

View file

@ -20,6 +20,9 @@ javascripts:
- public/javascripts/collections/* - public/javascripts/collections/*
- public/javascripts/views/* - public/javascripts/views/*
- public/javascripts/routers/stream.js
- public/javascripts/routers/*
- public/javascripts/rails.validations.js - public/javascripts/rails.validations.js
- public/javascripts/rails.js - public/javascripts/rails.js
- public/javascripts/vendor/jquery.hotkeys.js - public/javascripts/vendor/jquery.hotkeys.js

View file

@ -1,9 +1,25 @@
var App = { var App = {
Collections: {}, Collections: {},
Models: {}, Models: {},
routers: {},
Routers: {},
Views: {}, Views: {},
currentUser: function() { user: function(user) {
return $.parseJSON(unescape($("body").data("current-user-metadata"))); if(user) { return this._user = user; }
return this._user;
},
initialize: function() {
_.each(App.Routers, function(Router, name) {
App.routers[name] = new Router;
});
Backbone.history.start({pushState: true});
} }
}; };
$(function() { App.initialize(); });

View file

@ -1,13 +1,10 @@
App.Collections.Stream = Backbone.Collection.extend({ App.Collections.Stream = Backbone.Collection.extend({
url: function() { url: function() {
var path = document.location.pathname; var path = document.location.pathname + ".json";
if(this.models.length) { if(this.models.length) { path += "?max_time=" + _.last(this.models).intTime(); }
return path + ".json?max_time=" + _.last(this.models).intTime();
} return path;
else {
return path + ".json";
}
}, },
model: App.Models.Post, model: App.Models.Post,

View file

@ -0,0 +1,5 @@
App.Routers.CommentStream = App.Routers.Stream.extend({
routes: {
"comment_stream": "stream"
}
});

View file

@ -0,0 +1,5 @@
App.Routers.Mentions = App.Routers.Stream.extend({
routes: {
"mentions": "stream"
}
});

View file

@ -0,0 +1,9 @@
App.Routers.Stream = Backbone.Router.extend({
routes: {
"stream": "stream"
},
stream: function() {
App.stream = new App.Views.Stream;
}
});

View file

@ -1,15 +1,12 @@
$(function() { App.Views.Stream = Backbone.View.extend({
App.Views.Stream = Backbone.View.extend({
el: $("#main_stream"),
template: _.template($('#stream-element-template').html()),
events: { events: {
"click #paginate": "loadMore" "click #paginate": "loadMore"
}, },
initialize: function(){ initialize: function(){
this.el = $("#main_stream");
this.template = _.template($("#stream-element-template").html());
_.bindAll(this, "appendPost", "collectionFetched"); _.bindAll(this, "appendPost", "collectionFetched");
this.collection = new App.Collections.Stream; this.collection = new App.Collections.Stream;
@ -20,14 +17,14 @@ $(function() {
appendPost: function(model) { appendPost: function(model) {
var post = $(this.template($.extend( var post = $(this.template($.extend(
model.toJSON(), model.toJSON(),
App.currentUser() App.user()
))); )));
$(this.el).append(post); $(this.el).append(post);
Diaspora.BaseWidget.instantiate("StreamElement", post); Diaspora.BaseWidget.instantiate("StreamElement", post);
}, },
collectionFetched: function() { collectionFetched: function() {
this.$("time").timeago(); this.$(".details time").timeago();
this.$("label").inFieldLabels(); this.$("label").inFieldLabels();
this.$("#paginate").remove(); this.$("#paginate").remove();
@ -47,9 +44,4 @@ $(function() {
success: this.collectionFetched success: this.collectionFetched
}); });
} }
});
if(window.useBackbone) {
window.stream = new App.Views.Stream;
}
}); });

View file

@ -0,0 +1,11 @@
describe("App", function() {
describe("user", function() {
it("sets the user if given one and returns the current user", function() {
expect(App.user()).toBeUndefined();
App.user({name: "alice"});
expect(App.user()).toEqual({name: "alice"});
});
});
});