Use routers, remove some hacks
This commit is contained in:
parent
d4219799e4
commit
ba9ece0014
9 changed files with 97 additions and 60 deletions
|
|
@ -41,16 +41,16 @@
|
|||
- unless @landing_page
|
||||
= include_javascripts :main
|
||||
: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.Page = "#{params[:controller].camelcase}#{params[:action].camelcase}";
|
||||
|
||||
- if @backbone
|
||||
:javascript
|
||||
window.useBackbone = true;
|
||||
|
||||
= yield(:head)
|
||||
|
||||
-unless Rails.env == "production"
|
||||
-unless Rails.env == "production"
|
||||
:css
|
||||
.translation_missing {
|
||||
color: purple;
|
||||
|
|
@ -60,8 +60,7 @@
|
|||
- if @person
|
||||
%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)}", 'data-current-user-metadata' => metadata }
|
||||
%body{:class => "#{yield(:body_class)}"}
|
||||
|
||||
- unless @page == :logged_out
|
||||
- flash.each do |name, msg|
|
||||
|
|
|
|||
|
|
@ -20,6 +20,9 @@ javascripts:
|
|||
- public/javascripts/collections/*
|
||||
- public/javascripts/views/*
|
||||
|
||||
- public/javascripts/routers/stream.js
|
||||
- public/javascripts/routers/*
|
||||
|
||||
- public/javascripts/rails.validations.js
|
||||
- public/javascripts/rails.js
|
||||
- public/javascripts/vendor/jquery.hotkeys.js
|
||||
|
|
|
|||
|
|
@ -1,9 +1,25 @@
|
|||
var App = {
|
||||
Collections: {},
|
||||
Models: {},
|
||||
routers: {},
|
||||
Routers: {},
|
||||
Views: {},
|
||||
|
||||
currentUser: function() {
|
||||
return $.parseJSON(unescape($("body").data("current-user-metadata")));
|
||||
user: function(user) {
|
||||
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({
|
||||
url: function() {
|
||||
var path = document.location.pathname;
|
||||
var path = document.location.pathname + ".json";
|
||||
|
||||
if(this.models.length) {
|
||||
return path + ".json?max_time=" + _.last(this.models).intTime();
|
||||
}
|
||||
else {
|
||||
return path + ".json";
|
||||
}
|
||||
if(this.models.length) { path += "?max_time=" + _.last(this.models).intTime(); }
|
||||
|
||||
return path;
|
||||
},
|
||||
|
||||
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,55 +1,47 @@
|
|||
$(function() {
|
||||
App.Views.Stream = Backbone.View.extend({
|
||||
App.Views.Stream = Backbone.View.extend({
|
||||
events: {
|
||||
"click #paginate": "loadMore"
|
||||
},
|
||||
|
||||
el: $("#main_stream"),
|
||||
initialize: function(){
|
||||
this.el = $("#main_stream");
|
||||
this.template = _.template($("#stream-element-template").html());
|
||||
|
||||
template: _.template($('#stream-element-template').html()),
|
||||
_.bindAll(this, "appendPost", "collectionFetched");
|
||||
|
||||
events: {
|
||||
"click #paginate": "loadMore"
|
||||
},
|
||||
this.collection = new App.Collections.Stream;
|
||||
this.collection.bind("add", this.appendPost);
|
||||
this.loadMore();
|
||||
},
|
||||
|
||||
initialize: function(){
|
||||
_.bindAll(this, "appendPost", "collectionFetched");
|
||||
appendPost: function(model) {
|
||||
var post = $(this.template($.extend(
|
||||
model.toJSON(),
|
||||
App.user()
|
||||
)));
|
||||
$(this.el).append(post);
|
||||
Diaspora.BaseWidget.instantiate("StreamElement", post);
|
||||
},
|
||||
|
||||
this.collection = new App.Collections.Stream;
|
||||
this.collection.bind("add", this.appendPost);
|
||||
this.loadMore();
|
||||
},
|
||||
collectionFetched: function() {
|
||||
this.$(".details time").timeago();
|
||||
this.$("label").inFieldLabels();
|
||||
|
||||
appendPost: function(model) {
|
||||
var post = $(this.template($.extend(
|
||||
model.toJSON(),
|
||||
App.currentUser()
|
||||
)));
|
||||
$(this.el).append(post);
|
||||
Diaspora.BaseWidget.instantiate("StreamElement", post);
|
||||
},
|
||||
this.$("#paginate").remove();
|
||||
$(this.el).append($("<a>", {
|
||||
href: this.collection.url(),
|
||||
id: "paginate"
|
||||
}).text('more'));
|
||||
},
|
||||
|
||||
collectionFetched: function() {
|
||||
this.$("time").timeago();
|
||||
this.$("label").inFieldLabels();
|
||||
|
||||
this.$("#paginate").remove();
|
||||
$(this.el).append($("<a>", {
|
||||
href: this.collection.url(),
|
||||
id: "paginate"
|
||||
}).text('more'));
|
||||
},
|
||||
|
||||
loadMore: function(evt) {
|
||||
if(evt) {
|
||||
evt.preventDefault();
|
||||
}
|
||||
|
||||
this.collection.fetch({
|
||||
add: true,
|
||||
success: this.collectionFetched
|
||||
});
|
||||
loadMore: function(evt) {
|
||||
if(evt) {
|
||||
evt.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
if(window.useBackbone) {
|
||||
window.stream = new App.Views.Stream;
|
||||
this.collection.fetch({
|
||||
add: true,
|
||||
success: this.collectionFetched
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
|||
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