mirror of
https://github.com/flarum/framework.git
synced 2024-12-03 15:43:59 +08:00
62 lines
2.1 KiB
JavaScript
62 lines
2.1 KiB
JavaScript
import Ember from 'ember';
|
|
|
|
export default Ember.Route.extend({
|
|
|
|
queryParams: {
|
|
start: {replace: true}
|
|
},
|
|
|
|
model: function(params) {
|
|
return this.store.find('discussion', params.id);
|
|
},
|
|
|
|
resetController: function(controller) {
|
|
// Whenever we exit the discussion view, or transition to a different
|
|
// discussion, we want to reset the query params so that they don't stick.
|
|
controller.set('start', '1');
|
|
controller.set('searchQuery', '');
|
|
controller.set('loaded', false);
|
|
controller.set('stream', null);
|
|
},
|
|
|
|
setupController: function(controller, model) {
|
|
controller.setup(model);
|
|
|
|
// Tell the discussions controller that the discussions list should be
|
|
// displayed as a pane, hidden on the side of the screen. Also set the
|
|
// application back button's target as the discussions controller.
|
|
this.controllerFor('index').set('paned', true);
|
|
this.controllerFor('application').set('backButtonTarget', this.controllerFor('index'));
|
|
},
|
|
|
|
actions: {
|
|
|
|
queryParamsDidChange: function(params) {
|
|
// If the ?start param has changed, we want to tell the view to
|
|
// tell the streamContent component to jump to this start point.
|
|
// We postpone running this code until the next run loop because
|
|
// when transitioning directly from one discussion to another,
|
|
// queryParamsDidChange is fired before the controller is reset.
|
|
// Thus, controller.loaded would still be true and the
|
|
// startWasChanged event would be triggered inappropriately.
|
|
var controller = this.get('controller'),
|
|
oldStart = parseInt(this.get('controller.start'));
|
|
Ember.run.next(function() {
|
|
if (! params.start || ! controller || ! controller.get('loaded') || parseInt(params.start) === oldStart) {
|
|
return;
|
|
}
|
|
controller.trigger('startWasChanged', params.start);
|
|
});
|
|
},
|
|
|
|
willTransition: function() {
|
|
// When we transition away from this discussion, we want to hide
|
|
// the discussions list pane. This means that when the user
|
|
// selects a different discussion within the pane, the pane will
|
|
// slide away.
|
|
this.controllerFor('index').set('paneShowing', false);
|
|
}
|
|
|
|
}
|
|
});
|