diff --git a/app/assets/javascripts/discourse/controllers/user_activity_controller.js b/app/assets/javascripts/discourse/controllers/user_activity_controller.js index a17a13ea0fd..0b0cc3ab702 100644 --- a/app/assets/javascripts/discourse/controllers/user_activity_controller.js +++ b/app/assets/javascripts/discourse/controllers/user_activity_controller.js @@ -7,25 +7,5 @@ @module Discourse **/ Discourse.UserActivityController = Discourse.ObjectController.extend({ - needs: ['composer'], - - privateMessageView: function() { - return (this.get('userActionType') === Discourse.UserAction.TYPES.messages_sent) || - (this.get('userActionType') === Discourse.UserAction.TYPES.messages_received); - }.property('userActionType'), - - actions: { - composePrivateMessage: function() { - return this.get('controllers.composer').open({ - action: Discourse.Composer.PRIVATE_MESSAGE, - usernames: this.get('model.username'), - archetypeId: 'private_message', - draftKey: 'new_private_message' - }); - } - }, - - privateMessagesActive: Em.computed.equal('pmView', 'index'), - privateMessagesMineActive: Em.computed.equal('pmView', 'mine'), - privateMessagesUnreadActive: Em.computed.equal('pmView', 'unread') + needs: ['composer'] }); diff --git a/app/assets/javascripts/discourse/controllers/user_controller.js b/app/assets/javascripts/discourse/controllers/user_controller.js index 9151922315a..2872d5c6ffd 100644 --- a/app/assets/javascripts/discourse/controllers/user_controller.js +++ b/app/assets/javascripts/discourse/controllers/user_controller.js @@ -14,7 +14,16 @@ Discourse.UserController = Discourse.ObjectController.extend({ canSeePrivateMessages: function() { return this.get('viewingSelf') || Discourse.User.currentProp('staff'); - }.property('viewingSelf') + }.property('viewingSelf'), + + privateMessageView: function() { + return (this.get('userActionType') === Discourse.UserAction.TYPES.messages_sent) || + (this.get('userActionType') === Discourse.UserAction.TYPES.messages_received); + }.property('userActionType'), + + privateMessagesActive: Em.computed.equal('pmView', 'index'), + privateMessagesMineActive: Em.computed.equal('pmView', 'mine'), + privateMessagesUnreadActive: Em.computed.equal('pmView', 'unread') }); diff --git a/app/assets/javascripts/discourse/routes/user_activity_route.js b/app/assets/javascripts/discourse/routes/user_activity_route.js new file mode 100644 index 00000000000..e5c9644110c --- /dev/null +++ b/app/assets/javascripts/discourse/routes/user_activity_route.js @@ -0,0 +1,39 @@ +/** + The base route for showing a user's activity + + @class UserActivityRoute + @extends Discourse.Route + @namespace Discourse + @module Discourse +**/ +Discourse.UserActivityRoute = Discourse.Route.extend({ + + model: function() { + return this.modelFor('user'); + }, + + setupController: function(controller, user) { + + this.controllerFor('userActivity').set('model', user); + this.controllerFor('user').set('pmView', null); + + // Bring up a draft + var composerController = this.controllerFor('composer'); + controller.set('model', user); + if (Discourse.User.current()) { + Discourse.Draft.get('new_private_message').then(function(data) { + if (data.draft) { + composerController.open({ + draft: data.draft, + draftKey: 'new_private_message', + ignoreIfChanged: true, + draftSequence: data.draft_sequence + }); + } + }); + } + } + +}); + +Discourse.UserPrivateMessagesRoute = Discourse.UserActivityRoute.extend({}); \ No newline at end of file diff --git a/app/assets/javascripts/discourse/routes/user_activity_stream_route.js b/app/assets/javascripts/discourse/routes/user_activity_stream_route.js new file mode 100644 index 00000000000..8106599300a --- /dev/null +++ b/app/assets/javascripts/discourse/routes/user_activity_stream_route.js @@ -0,0 +1,33 @@ +/** + The base route for showing an activity stream. + + @class UserActivityStreamRoute + @extends Discourse.Route + @namespace Discourse + @module Discourse +**/ +Discourse.UserActivityStreamRoute = Discourse.Route.extend({ + model: function() { + return this.modelFor('user').get('stream'); + }, + + afterModel: function() { + return this.modelFor('user').get('stream').filterBy(this.get('userActionType')); + }, + + renderTemplate: function() { + this.render('user_stream', {into: 'user', outlet: 'userOutlet'}); + }, + + setupController: function(controller, model) { + controller.set('model', model); + this.controllerFor('user_activity').set('userActionType', this.get('userActionType')); + } +}); + +// Build all activity stream routes +['bookmarks', 'edits', 'likes_given', 'likes_received', 'replies', 'posts', 'index'].forEach(function (userAction) { + Discourse["UserActivity" + userAction.classify() + "Route"] = Discourse.UserActivityStreamRoute.extend({ + userActionType: Discourse.UserAction.TYPES[userAction] + }); +}); \ No newline at end of file diff --git a/app/assets/javascripts/discourse/routes/user_index_route.js b/app/assets/javascripts/discourse/routes/user_index_route.js new file mode 100644 index 00000000000..06f8745511e --- /dev/null +++ b/app/assets/javascripts/discourse/routes/user_index_route.js @@ -0,0 +1,13 @@ +/** + If we request /user/eviltrout without a sub route. + + @class UserIndexRoute + @extends Discourse.Route + @namespace Discourse + @module Discourse +**/ +Discourse.UserIndexRoute = Discourse.UserActivityRoute.extend({ + redirect: function() { + this.transitionTo('userActivity', this.modelFor('user')); + } +}); diff --git a/app/assets/javascripts/discourse/routes/user_invited_routes.js b/app/assets/javascripts/discourse/routes/user_invited_routes.js new file mode 100644 index 00000000000..de08b47eb9f --- /dev/null +++ b/app/assets/javascripts/discourse/routes/user_invited_routes.js @@ -0,0 +1,17 @@ +/** + This route shows who a user has invited + + @class UserInvitedRoute + @extends Discourse.Route + @namespace Discourse + @module Discourse +**/ +Discourse.UserInvitedRoute = Discourse.Route.extend({ + renderTemplate: function() { + this.render({ into: 'user', outlet: 'userOutlet' }); + }, + + model: function() { + return Discourse.InviteList.findInvitedBy(this.modelFor('user')); + } +}); \ No newline at end of file diff --git a/app/assets/javascripts/discourse/routes/user_routes.js b/app/assets/javascripts/discourse/routes/user_routes.js index ab8d8699bf4..41faade43a8 100644 --- a/app/assets/javascripts/discourse/routes/user_routes.js +++ b/app/assets/javascripts/discourse/routes/user_routes.js @@ -8,6 +8,22 @@ **/ Discourse.UserRoute = Discourse.Route.extend({ + actions: { + logout: function() { + Discourse.logout(); + }, + + composePrivateMessage: function() { + var user = this.modelFor('user'); + return this.controllerFor('composer').open({ + action: Discourse.Composer.PRIVATE_MESSAGE, + usernames: user.get('username'), + archetypeId: 'private_message', + draftKey: 'new_private_message' + }); + } + }, + model: function(params) { // If we're viewing the currently logged in user, return that object @@ -53,157 +69,3 @@ Discourse.UserRoute = Discourse.Route.extend({ } }); - -/** - This route shows who a user has invited - - @class UserInvitedRoute - @extends Discourse.Route - @namespace Discourse - @module Discourse -**/ -Discourse.UserInvitedRoute = Discourse.Route.extend({ - renderTemplate: function() { - this.render({ into: 'user', outlet: 'userOutlet' }); - }, - - model: function() { - return Discourse.InviteList.findInvitedBy(this.modelFor('user')); - } -}); - - -/** - The base route for showing a user's activity - - @class UserActivityRoute - @extends Discourse.Route - @namespace Discourse - @module Discourse -**/ -Discourse.UserActivityRoute = Discourse.Route.extend({ - renderTemplate: function() { - this.render('user_activity', {into: 'user', outlet: 'userOutlet' }); - }, - - model: function() { - return this.modelFor('user'); - }, - - setupController: function(controller, user) { - this.controllerFor('userActivity').set('model', user); - - var composerController = this.controllerFor('composer'); - controller.set('model', user); - if (Discourse.User.current()) { - Discourse.Draft.get('new_private_message').then(function(data) { - if (data.draft) { - composerController.open({ - draft: data.draft, - draftKey: 'new_private_message', - ignoreIfChanged: true, - draftSequence: data.draft_sequence - }); - } - }); - } - } -}); -Discourse.UserPrivateMessagesRoute = Discourse.UserActivityRoute.extend({}); - -/** - If we request /user/eviltrout without a sub route. - - @class UserIndexRoute - @extends Discourse.Route - @namespace Discourse - @module Discourse -**/ -Discourse.UserIndexRoute = Discourse.UserActivityRoute.extend({ - redirect: function() { - this.transitionTo('userActivity', this.modelFor('user')); - } -}); - -/** - The base route for showing an activity stream. - - @class UserActivityStreamRoute - @extends Discourse.Route - @namespace Discourse - @module Discourse -**/ -Discourse.UserActivityStreamRoute = Discourse.Route.extend({ - model: function() { - return this.modelFor('user').get('stream'); - }, - - afterModel: function() { - return this.modelFor('user').get('stream').filterBy(this.get('userActionType')); - }, - - renderTemplate: function() { - this.render('user_stream', {into: 'user_activity', outlet: 'activity'}); - }, - - setupController: function(controller, model) { - controller.set('model', model); - this.controllerFor('user_activity').set('userActionType', this.get('userActionType')); - } -}); - -// Build all activity stream routes -['bookmarks', 'edits', 'likes_given', 'likes_received', 'replies', 'posts', 'index'].forEach(function (userAction) { - Discourse["UserActivity" + userAction.classify() + "Route"] = Discourse.UserActivityStreamRoute.extend({ - userActionType: Discourse.UserAction.TYPES[userAction] - }); -}); - -Discourse.UserTopicListRoute = Discourse.Route.extend({ - - renderTemplate: function() { - this.render('paginated_topic_list', {into: 'user_activity', outlet: 'activity'}); - }, - - setupController: function(controller, model) { - this.controllerFor('user_activity').set('userActionType', this.get('userActionType')); - controller.set('model', model); - } -}); - -function createPMRoute(viewName, path, type) { - return Discourse.UserTopicListRoute.extend({ - userActionType: Discourse.UserAction.TYPES.messages_received, - - model: function() { - return Discourse.TopicList.find('topics/' + path + '/' + this.modelFor('user').get('username_lower')); - }, - - setupController: function(controller, model) { - this._super(controller, model); - controller.set('hideCategories', true); - this.controllerFor('userActivity').set('pmView', viewName); - } - }); -} - -Discourse.UserPrivateMessagesIndexRoute = createPMRoute('index', 'private-messages'); -Discourse.UserPrivateMessagesMineRoute = createPMRoute('mine', 'private-messages-sent'); -Discourse.UserPrivateMessagesUnreadRoute = createPMRoute('unread', 'private-messages-unread'); - - -Discourse.UserActivityTopicsRoute = Discourse.UserTopicListRoute.extend({ - userActionType: Discourse.UserAction.TYPES.topics, - - model: function() { - return Discourse.TopicList.find('topics/created-by/' + this.modelFor('user').get('username_lower')); - } -}); - -Discourse.UserActivityFavoritesRoute = Discourse.UserTopicListRoute.extend({ - userActionType: Discourse.UserAction.TYPES.favorites, - - model: function() { - return Discourse.TopicList.find('favorited?user_id=' + this.modelFor('user').get('id')); - } -}); diff --git a/app/assets/javascripts/discourse/routes/user_topic_list_routes.js b/app/assets/javascripts/discourse/routes/user_topic_list_routes.js new file mode 100644 index 00000000000..127d0dbe428 --- /dev/null +++ b/app/assets/javascripts/discourse/routes/user_topic_list_routes.js @@ -0,0 +1,48 @@ +Discourse.UserTopicListRoute = Discourse.Route.extend({ + + renderTemplate: function() { + this.render('paginated_topic_list', {into: 'user', outlet: 'userOutlet'}); + }, + + setupController: function(controller, model) { + this.controllerFor('user_activity').set('userActionType', this.get('userActionType')); + controller.set('model', model); + } +}); + +function createPMRoute(viewName, path, type) { + return Discourse.UserTopicListRoute.extend({ + userActionType: Discourse.UserAction.TYPES.messages_received, + + model: function() { + return Discourse.TopicList.find('topics/' + path + '/' + this.modelFor('user').get('username_lower')); + }, + + setupController: function(controller, model) { + this._super(controller, model); + controller.set('hideCategories', true); + this.controllerFor('user').set('pmView', viewName); + } + }); +} + +Discourse.UserPrivateMessagesIndexRoute = createPMRoute('index', 'private-messages'); +Discourse.UserPrivateMessagesMineRoute = createPMRoute('mine', 'private-messages-sent'); +Discourse.UserPrivateMessagesUnreadRoute = createPMRoute('unread', 'private-messages-unread'); + + +Discourse.UserActivityTopicsRoute = Discourse.UserTopicListRoute.extend({ + userActionType: Discourse.UserAction.TYPES.topics, + + model: function() { + return Discourse.TopicList.find('topics/created-by/' + this.modelFor('user').get('username_lower')); + } +}); + +Discourse.UserActivityFavoritesRoute = Discourse.UserTopicListRoute.extend({ + userActionType: Discourse.UserAction.TYPES.favorites, + + model: function() { + return Discourse.TopicList.find('favorited?user_id=' + this.modelFor('user').get('id')); + } +}); \ No newline at end of file diff --git a/app/assets/javascripts/discourse/templates/user/activity.js.handlebars b/app/assets/javascripts/discourse/templates/user/activity.js.handlebars index c8d17d83921..e24df580f9f 100644 --- a/app/assets/javascripts/discourse/templates/user/activity.js.handlebars +++ b/app/assets/javascripts/discourse/templates/user/activity.js.handlebars @@ -1,70 +1,3 @@ -