Use routers, remove some hacks
This commit is contained in:
parent
d4219799e4
commit
ba9ece0014
9 changed files with 97 additions and 60 deletions
|
|
@ -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|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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(); });
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
5
public/javascripts/routers/comment-stream.js
Normal file
5
public/javascripts/routers/comment-stream.js
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
App.Routers.CommentStream = App.Routers.Stream.extend({
|
||||||
|
routes: {
|
||||||
|
"comment_stream": "stream"
|
||||||
|
}
|
||||||
|
});
|
||||||
5
public/javascripts/routers/mentions.js
Normal file
5
public/javascripts/routers/mentions.js
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
App.Routers.Mentions = App.Routers.Stream.extend({
|
||||||
|
routes: {
|
||||||
|
"mentions": "stream"
|
||||||
|
}
|
||||||
|
});
|
||||||
9
public/javascripts/routers/stream.js
Normal file
9
public/javascripts/routers/stream.js
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
App.Routers.Stream = Backbone.Router.extend({
|
||||||
|
routes: {
|
||||||
|
"stream": "stream"
|
||||||
|
},
|
||||||
|
|
||||||
|
stream: function() {
|
||||||
|
App.stream = new App.Views.Stream;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
|
||||||
11
spec/javascripts/app-spec.js
Normal file
11
spec/javascripts/app-spec.js
Normal 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"});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
Loading…
Reference in a new issue