63 lines
1.9 KiB
JavaScript
63 lines
1.9 KiB
JavaScript
/**
|
|
This route is used for retrieving a topic based on params
|
|
|
|
@class TopicFromParamsRoute
|
|
@extends Discourse.Route
|
|
@namespace Discourse
|
|
@module Discourse
|
|
**/
|
|
Discourse.TopicFromParamsRoute = Discourse.Route.extend({
|
|
|
|
setupController: function(controller, params) {
|
|
|
|
params = params || {};
|
|
params.track_visit = true;
|
|
|
|
var topic = this.modelFor('topic');
|
|
var postStream = topic.get('postStream');
|
|
|
|
var queryParams = Discourse.URL.get('queryParams');
|
|
if (queryParams) {
|
|
// Set bestOf on the postStream if present
|
|
postStream.set('bestOf', Em.get(queryParams, 'filter') === 'best_of');
|
|
|
|
// Set any username filters on the postStream
|
|
var userFilters = Em.get(queryParams, 'username_filters') || Em.get(queryParams, 'username_filters[]');
|
|
if (userFilters) {
|
|
if (typeof userFilters === "string") { userFilters = [userFilters]; }
|
|
userFilters.forEach(function (username) {
|
|
postStream.get('userFilters').add(username);
|
|
});
|
|
}
|
|
}
|
|
|
|
var topicController = this.controllerFor('topic'),
|
|
composerController = this.controllerFor('composer');
|
|
|
|
postStream.refresh(params).then(function () {
|
|
// The post we requested might not exist. Let's find the closest post
|
|
var closest = postStream.closestPostNumberFor(params.nearPost) || 1;
|
|
|
|
topicController.setProperties({
|
|
currentPost: closest,
|
|
progressPosition: closest,
|
|
enteredAt: new Date().getTime()
|
|
});
|
|
|
|
if (topic.present('draft')) {
|
|
composerController.open({
|
|
draft: Discourse.Draft.getLocal(topic.get('draft_key'), topic.get('draft')),
|
|
draftKey: topic.get('draft_key'),
|
|
draftSequence: topic.get('draft_sequence'),
|
|
topic: topic,
|
|
ignoreIfChanged: true
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
});
|
|
|
|
Discourse.TopicFromParamsNearRoute = Discourse.TopicFromParamsRoute;
|
|
|