diff --git a/app/assets/javascripts/app/router.js b/app/assets/javascripts/app/router.js index 35af4dc0d..6c27e8b5c 100644 --- a/app/assets/javascripts/app/router.js +++ b/app/assets/javascripts/app/router.js @@ -2,35 +2,35 @@ app.Router = Backbone.Router.extend({ routes: { - "help/:section": "help", - "help/": "help", - "help": "help", - "getting_started": "gettingStarted", - "contacts": "contacts", - "community_spotlight": "spotlight", - "conversations": "conversations", - "user/edit": "settings", - "users/sign_up": "registration", - "profile/edit": "settings", - "admins/dashboard": "adminDashboard", - "admin/pods": "adminPods", - "posts/:id": "singlePost", - "p/:id": "singlePost", "activity": "stream", - "stream": "stream", + "admin/pods": "adminPods", + "admins/dashboard": "adminDashboard", "aspects": "aspects", "commented": "stream", + "community_spotlight": "spotlight", + "contacts": "contacts", + "conversations": "conversations", + "followed_tags": "followed_tags", + "getting_started": "gettingStarted", + "help": "help", + "help/": "help", + "help/:section": "help", "liked": "stream", "mentions": "stream", - "public": "stream", - "followed_tags": "followed_tags", - "tags/:name": "followed_tags", - "people/:id/photos": "photos", - "people/:id/contacts": "profile", - "people": "pageWithAspectMembershipDropdowns", "notifications": "notifications", + "p/:id": "singlePost", + "people": "pageWithAspectMembershipDropdowns", "people/:id": "profile", - "u/:name": "profile" + "people/:id/contacts": "profile", + "people/:id/photos": "photos", + "posts/:id": "singlePost", + "profile/edit": "settings", + "public": "stream", + "stream": "stream", + "tags/:name": "followed_tags", + "u/:name": "profile", + "user/edit": "settings", + "users/sign_up": "registration" }, initialize: function() { @@ -40,12 +40,6 @@ app.Router = Backbone.Router.extend({ this.route(/^bookmarklet(?:\?(.*))?/, "bookmarklet"); }, - help: function(section) { - app.help = new app.views.Help(); - $("#help").prepend(app.help.el); - app.help.render(section); - }, - adminDashboard: function() { app.page = new app.pages.AdminDashboard(); }, @@ -58,107 +52,6 @@ app.Router = Backbone.Router.extend({ }); }, - contacts: function() { - app.aspect = new app.models.Aspect(gon.preloads.aspect); - this._loadContacts(); - - var stream = new app.views.ContactStream({ - collection: app.contacts, - el: $(".stream.contacts #contact_stream") - }); - - app.page = new app.pages.Contacts({stream: stream}); - }, - - gettingStarted: function() { - this.renderPage(function() { - return new app.pages.GettingStarted({inviter: new app.models.Person(app.parsePreload("inviter"))}); - }); - }, - - conversations: function() { - app.conversations = new app.views.Conversations(); - }, - - notifications: function() { - this._loadContacts(); - this.renderAspectMembershipDropdowns($(document)); - new app.views.Notifications({el: "#notifications_container"}); - }, - - registration: function() { - app.page = new app.pages.Registration(); - }, - - settings: function() { - app.page = new app.pages.Settings(); - }, - - singlePost: function(id) { - this.renderPage(function() { return new app.pages.SinglePostViewer({id: id}); }); - }, - - spotlight: function() { - $("#invitations-button").click(function() { - app.helpers.showModal("#invitationsModal"); - }); - }, - - renderPage: function(pageConstructor) { - // old page might mutate global events $(document).keypress, so unbind before creating - app.page && app.page.unbind && app.page.unbind(); - // create new page after the world is clean (like that will ever happen) - app.page = pageConstructor(); - app.page.render(); - - if (!$.contains(document, app.page.el)) { - // view element isn"t already attached to the DOM, insert it - $("#container").empty().append(app.page.el); - } - }, - - stream: function() { - app.stream = new app.models.Stream(); - app.stream.fetch(); - this._initializeStreamView(); - }, - - photos: function(guid) { - this._loadContacts(); - this.renderPage(function() { - return new app.pages.Profile({ - /* eslint-disable camelcase */ - person_id: guid, - /* eslint-enable camelcase */ - el: $("body > #profile_container"), - streamCollection: app.collections.Photos, - streamView: app.views.Photos - }); - }); - }, - - /* eslint-disable camelcase */ - followed_tags: function(name) { - /* eslint-enable camelcase */ - this.stream(); - - app.tagFollowings = new app.collections.TagFollowings(); - this.followedTagsView = new app.views.TagFollowingList({collection: app.tagFollowings}); - $("#tags_list").replaceWith(this.followedTagsView.render().el); - this.followedTagsView.setupAutoSuggest(); - - app.tagFollowings.reset(gon.preloads.tagFollowings); - - if (name) { - var followedTagsAction = new app.views.TagFollowingAction( - {tagText: decodeURIComponent(name).toLowerCase()} - ); - $("#author_info").prepend(followedTagsAction.render().el); - app.tags = new app.views.Tags({hashtagName: name}); - } - this._hideInactiveStreamLists(); - }, - aspects: function() { app.aspectSelections = app.aspectSelections || new app.collections.AspectSelections(app.currentUser.get("aspects")); @@ -188,6 +81,76 @@ app.Router = Backbone.Router.extend({ ).render(); }, + contacts: function() { + app.aspect = new app.models.Aspect(gon.preloads.aspect); + this._loadContacts(); + + var stream = new app.views.ContactStream({ + collection: app.contacts, + el: $(".stream.contacts #contact_stream") + }); + + app.page = new app.pages.Contacts({stream: stream}); + }, + + conversations: function() { + app.conversations = new app.views.Conversations(); + }, + + /* eslint-disable camelcase */ + followed_tags: function(name) { + /* eslint-enable camelcase */ + this.stream(); + + app.tagFollowings = new app.collections.TagFollowings(); + this.followedTagsView = new app.views.TagFollowingList({collection: app.tagFollowings}); + $("#tags_list").replaceWith(this.followedTagsView.render().el); + this.followedTagsView.setupAutoSuggest(); + + app.tagFollowings.reset(gon.preloads.tagFollowings); + + if (name) { + var followedTagsAction = new app.views.TagFollowingAction( + {tagText: decodeURIComponent(name).toLowerCase()} + ); + $("#author_info").prepend(followedTagsAction.render().el); + app.tags = new app.views.Tags({hashtagName: name}); + } + this._hideInactiveStreamLists(); + }, + + gettingStarted: function() { + this.renderPage(function() { + return new app.pages.GettingStarted({inviter: new app.models.Person(app.parsePreload("inviter"))}); + }); + }, + + help: function(section) { + app.help = new app.views.Help(); + $("#help").prepend(app.help.el); + app.help.render(section); + }, + + notifications: function() { + this._loadContacts(); + this.renderAspectMembershipDropdowns($(document)); + new app.views.Notifications({el: "#notifications_container"}); + }, + + photos: function(guid) { + this._loadContacts(); + this.renderPage(function() { + return new app.pages.Profile({ + /* eslint-disable camelcase */ + person_id: guid, + /* eslint-enable camelcase */ + el: $("body > #profile_container"), + streamCollection: app.collections.Photos, + streamView: app.views.Photos + }); + }); + }, + profile: function() { this._loadContacts(); this.renderPage(function() { @@ -197,23 +160,30 @@ app.Router = Backbone.Router.extend({ }); }, - pageWithAspectMembershipDropdowns: function() { - this._loadContacts(); - this.renderAspectMembershipDropdowns($(document)); + registration: function() { + app.page = new app.pages.Registration(); }, - _loadContacts: function() { - app.contacts = new app.collections.Contacts(app.parsePreload("contacts")); + settings: function() { + app.page = new app.pages.Settings(); }, - renderAspectMembershipDropdowns: function($context) { - $context.find(".aspect_membership_dropdown.placeholder").each(function() { - var personId = $(this).data("personId"); - var view = new app.views.AspectMembership({person: app.contacts.findWhere({"person_id": personId}).person}); - $(this).html(view.render().$el); + singlePost: function(id) { + this.renderPage(function() { return new app.pages.SinglePostViewer({id: id}); }); + }, + + spotlight: function() { + $("#invitations-button").click(function() { + app.helpers.showModal("#invitationsModal"); }); }, + stream: function() { + app.stream = new app.models.Stream(); + app.stream.fetch(); + this._initializeStreamView(); + }, + _hideInactiveStreamLists: function() { if (this.aspectsList && Backbone.history.fragment !== "aspects") { this.aspectsList.hideAspectsList(); @@ -238,6 +208,36 @@ app.Router = Backbone.Router.extend({ $("#main_stream").html(app.page.render().el); this._hideInactiveStreamLists(); + }, + + _loadContacts: function() { + app.contacts = new app.collections.Contacts(app.parsePreload("contacts")); + }, + + pageWithAspectMembershipDropdowns: function() { + this._loadContacts(); + this.renderAspectMembershipDropdowns($(document)); + }, + + renderAspectMembershipDropdowns: function($context) { + $context.find(".aspect_membership_dropdown.placeholder").each(function() { + var personId = $(this).data("personId"); + var view = new app.views.AspectMembership({person: app.contacts.findWhere({"person_id": personId}).person}); + $(this).html(view.render().$el); + }); + }, + + renderPage: function(pageConstructor) { + // old page might mutate global events $(document).keypress, so unbind before creating + app.page && app.page.unbind && app.page.unbind(); + // create new page after the world is clean (like that will ever happen) + app.page = pageConstructor(); + app.page.render(); + + if (!$.contains(document, app.page.el)) { + // view element isn"t already attached to the DOM, insert it + $("#container").empty().append(app.page.el); + } } }); // @license-end