Commit ba9ece00 authored by Dan Hansen's avatar Dan Hansen Committed by Dennis Collinson

Use routers, remove some hacks

parent d4219799
......@@ -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
......
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(); });
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,
......
App.Routers.CommentStream = App.Routers.Stream.extend({
routes: {
"comment_stream": "stream"
}
});
App.Routers.Mentions = App.Routers.Stream.extend({
routes: {
"mentions": "stream"
}
});
App.Routers.Stream = Backbone.Router.extend({
routes: {
"stream": "stream"
},
stream: function() {
App.stream = new App.Views.Stream;
}
});
$(function() {
App.Views.Stream = Backbone.View.extend({
el: $("#main_stream"),
template: _.template($('#stream-element-template').html()),
events: {
"click #paginate": "loadMore"
},
initialize: function(){
_.bindAll(this, "appendPost", "collectionFetched");
this.collection = new App.Collections.Stream;
this.collection.bind("add", this.appendPost);
this.loadMore();
},
appendPost: function(model) {
var post = $(this.template($.extend(
model.toJSON(),
App.currentUser()
)));
$(this.el).append(post);
Diaspora.BaseWidget.instantiate("StreamElement", post);
},
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
});
App.Views.Stream = Backbone.View.extend({
events: {
"click #paginate": "loadMore"
},
initialize: function(){
this.el = $("#main_stream");
this.template = _.template($("#stream-element-template").html());
_.bindAll(this, "appendPost", "collectionFetched");
this.collection = new App.Collections.Stream;
this.collection.bind("add", this.appendPost);
this.loadMore();
},
appendPost: function(model) {
var post = $(this.template($.extend(
model.toJSON(),
App.user()
)));
$(this.el).append(post);
Diaspora.BaseWidget.instantiate("StreamElement", post);
},
collectionFetched: function() {
this.$(".details 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();
}
});
if(window.useBackbone) {
window.stream = new App.Views.Stream;
this.collection.fetch({
add: true,
success: this.collectionFetched
});
}
});
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"});
});
});
});
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment