210 lines
5.8 KiB
JavaScript
210 lines
5.8 KiB
JavaScript
/**
|
|
Handles routes related to users.
|
|
|
|
@class UserRoute
|
|
@extends Discourse.Route
|
|
@namespace Discourse
|
|
@module Discourse
|
|
**/
|
|
Discourse.UserRoute = Discourse.Route.extend({
|
|
|
|
model: function(params) {
|
|
|
|
// If we're viewing the currently logged in user, return that object
|
|
// instead.
|
|
var currentUser = this.get('currentUser');
|
|
if (currentUser && (params.username.toLowerCase() === currentUser.get('username_lower'))) {
|
|
return currentUser;
|
|
}
|
|
|
|
return Discourse.User.create({username: params.username});
|
|
},
|
|
|
|
afterModel: function() {
|
|
return this.modelFor('user').findDetails();
|
|
},
|
|
|
|
serialize: function(params) {
|
|
if (!params) return {};
|
|
return { username: Em.get(params, 'username').toLowerCase() };
|
|
},
|
|
|
|
setupController: function(controller, user) {
|
|
controller.set('model', user);
|
|
|
|
// Add a search context
|
|
this.controllerFor('search').set('searchContext', user.get('searchContext'));
|
|
},
|
|
|
|
activate: function() {
|
|
this._super();
|
|
var user = this.modelFor('user');
|
|
Discourse.MessageBus.subscribe("/users/" + user.get('username_lower'), function(data) {
|
|
user.loadUserAction(data);
|
|
});
|
|
},
|
|
|
|
deactivate: function() {
|
|
this._super();
|
|
Discourse.MessageBus.unsubscribe("/users/" + this.modelFor('user').get('username_lower'));
|
|
|
|
// Remove the search context
|
|
this.controllerFor('search').set('searchContext', null);
|
|
}
|
|
|
|
});
|
|
|
|
/**
|
|
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 (this.get('currentUser')) {
|
|
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'));
|
|
}
|
|
});
|