This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/routes/discourse.js.es6
2019-05-27 10:15:39 +02:00

109 lines
2.9 KiB
JavaScript

import Composer from "discourse/models/composer";
import { getOwner } from "discourse-common/lib/get-owner";
const DiscourseRoute = Ember.Route.extend({
showFooter: false,
// Set to true to refresh a model without a transition if a query param
// changes
resfreshQueryWithoutTransition: false,
activate() {
this._super(...arguments);
if (this.showFooter) {
this.controllerFor("application").set("showFooter", true);
}
},
refresh() {
if (!this.refreshQueryWithoutTransition) {
return this._super(...arguments);
}
const router = getOwner(this).lookup("router:main");
if (!router._routerMicrolib.activeTransition) {
const controller = this.controller,
model = controller.get("model"),
params = this.controller.getProperties(Object.keys(this.queryParams));
model.set("loading", true);
this.model(params).then(m => this.setupController(controller, m));
}
},
_refreshTitleOnce() {
this.send("_collectTitleTokens", []);
},
actions: {
_collectTitleTokens(tokens) {
// If there's a title token method, call it and get the token
if (this.titleToken) {
const t = this.titleToken();
if (t && t.length) {
if (t instanceof Array) {
t.forEach(function(ti) {
tokens.push(ti);
});
} else {
tokens.push(t);
}
}
}
return true;
},
refreshTitle() {
Ember.run.once(this, this._refreshTitleOnce);
},
clearTopicDraft() {
// perhaps re-delegate this to root controller in all cases?
// TODO also poison the store so it does not come back from the
// dead
if (this.get("controller.list.draft")) {
this.set("controller.list.draft", null);
}
if (this.controllerFor("discovery/categories").get("model.draft")) {
this.controllerFor("discovery/categories").set("model.draft", null);
}
if (this.controllerFor("discovery/topics").get("model.draft")) {
this.controllerFor("discovery/topics").set("model.draft", null);
}
}
},
redirectIfLoginRequired() {
const app = this.controllerFor("application");
if (app.get("loginRequired")) {
this.replaceWith("login");
}
},
openTopicDraft(model) {
const composer = this.controllerFor("composer");
if (
composer.get("model.action") === Composer.CREATE_TOPIC &&
composer.get("model.draftKey") === model.draft_key
) {
composer.set("model.composeState", Composer.OPEN);
} else {
composer.open({
action: Composer.CREATE_TOPIC,
draft: model.draft,
draftKey: model.draft_key,
draftSequence: model.draft_sequence
});
}
},
isPoppedState(transition) {
return !transition._discourse_intercepted && !!transition.intent.url;
}
});
export default DiscourseRoute;