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/pre-initializers/dynamic-route-builders.js.es6
Daniel Waterworth 1fb7a6297c DEV: Add unambiguous routes for tags
The trouble with having:

/tags/:tag_id/...

and:

/tags/intersection/*tag_ids

for example, is: what happens if you want a tag called intersection?

Under this new scheme. Routes referring to a single tag are unambiguous
because they are prefixed with:

/tag/:tag_id

Routes referring to the collection of tags still start with:

/tags/

This commit just adds the new routes. It doesn't remove the old ones or
cause the new ones to be used.
2019-12-13 11:24:59 +00:00

127 lines
5.0 KiB
JavaScript

import buildCategoryRoute from "discourse/routes/build-category-route";
import buildTopicRoute from "discourse/routes/build-topic-route";
import DiscoverySortableController from "discourse/controllers/discovery-sortable";
import TagsShowRoute from "discourse/routes/tags-show";
import Site from "discourse/models/site";
import User from "discourse/models/user";
export default {
after: "inject-discourse-objects",
name: "dynamic-route-builders",
initialize(registry, app) {
app.DiscoveryCategoryController = DiscoverySortableController.extend();
app.DiscoveryParentCategoryController = DiscoverySortableController.extend();
app.DiscoveryCategoryNoneController = DiscoverySortableController.extend();
app.DiscoveryCategoryWithIDController = DiscoverySortableController.extend();
app.DiscoveryCategoryRoute = buildCategoryRoute("default");
app.DiscoveryParentCategoryRoute = buildCategoryRoute("default");
app.DiscoveryCategoryNoneRoute = buildCategoryRoute("default", {
no_subcategories: true
});
app.DiscoveryCategoryWithIDRoute = buildCategoryRoute("default");
const site = Site.current();
site.get("filters").forEach(filter => {
const filterCapitalized = filter.capitalize();
app[
`Discovery${filterCapitalized}Controller`
] = DiscoverySortableController.extend();
app[
`Discovery${filterCapitalized}CategoryController`
] = DiscoverySortableController.extend();
app[
`Discovery${filterCapitalized}ParentCategoryController`
] = DiscoverySortableController.extend();
app[
`Discovery${filterCapitalized}CategoryNoneController`
] = DiscoverySortableController.extend();
app[`Discovery${filterCapitalized}Route`] = buildTopicRoute(filter);
app[`Discovery${filterCapitalized}CategoryRoute`] = buildCategoryRoute(
filter
);
app[
`Discovery${filterCapitalized}ParentCategoryRoute`
] = buildCategoryRoute(filter);
app[
`Discovery${filterCapitalized}CategoryNoneRoute`
] = buildCategoryRoute(filter, { no_subcategories: true });
});
Discourse.DiscoveryTopController = DiscoverySortableController.extend();
Discourse.DiscoveryTopCategoryController = DiscoverySortableController.extend();
Discourse.DiscoveryTopParentCategoryController = DiscoverySortableController.extend();
Discourse.DiscoveryTopCategoryNoneController = DiscoverySortableController.extend();
Discourse.DiscoveryTopRoute = buildTopicRoute("top", {
actions: {
willTransition() {
User.currentProp("should_be_redirected_to_top", false);
User.currentProp("redirected_to_top.reason", null);
return this._super(...arguments);
}
}
});
Discourse.DiscoveryTopCategoryRoute = buildCategoryRoute("top");
Discourse.DiscoveryTopParentCategoryRoute = buildCategoryRoute("top");
Discourse.DiscoveryTopCategoryNoneRoute = buildCategoryRoute("top", {
no_subcategories: true
});
site.get("periods").forEach(period => {
const periodCapitalized = period.capitalize();
app[
`DiscoveryTop${periodCapitalized}Controller`
] = DiscoverySortableController.extend();
app[
`DiscoveryTop${periodCapitalized}CategoryController`
] = DiscoverySortableController.extend();
app[
`DiscoveryTop${periodCapitalized}ParentCategoryController`
] = DiscoverySortableController.extend();
app[
`DiscoveryTop${periodCapitalized}CategoryNoneController`
] = DiscoverySortableController.extend();
app[`DiscoveryTop${periodCapitalized}Route`] = buildTopicRoute(
"top/" + period
);
app[`DiscoveryTop${periodCapitalized}CategoryRoute`] = buildCategoryRoute(
"top/" + period
);
app[
`DiscoveryTop${periodCapitalized}ParentCategoryRoute`
] = buildCategoryRoute("top/" + period);
app[
`DiscoveryTop${periodCapitalized}CategoryNoneRoute`
] = buildCategoryRoute("top/" + period, { no_subcategories: true });
});
app["TagsShowCategoryRoute"] = TagsShowRoute.extend();
app["TagsShowCategoryNoneRoute"] = TagsShowRoute.extend({
noSubcategories: true
});
app["TagsShowParentCategoryRoute"] = TagsShowRoute.extend();
app["TagShowRoute"] = TagsShowRoute;
site.get("filters").forEach(function(filter) {
app["TagsShow" + filter.capitalize() + "Route"] = TagsShowRoute.extend({
navMode: filter
});
app["TagShow" + filter.capitalize() + "Route"] = TagsShowRoute.extend({
navMode: filter
});
app[
"TagsShowCategory" + filter.capitalize() + "Route"
] = TagsShowRoute.extend({ navMode: filter });
app[
"TagsShowNoneCategory" + filter.capitalize() + "Route"
] = TagsShowRoute.extend({ navMode: filter, noSubcategories: true });
app[
"TagsShowParentCategory" + filter.capitalize() + "Route"
] = TagsShowRoute.extend({ navMode: filter });
});
}
};