| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- // TODO: This file was created by bulk-decaffeinate.
- // Sanity-check the conversion and remove this comment.
- /*
- * decaffeinate suggestions:
- * DS101: Remove unnecessary use of Array.from
- * DS102: Remove unnecessary code created because of implicit returns
- * DS103: Rewrite code to no longer use __guard__, or convert again using --optional-chaining
- * DS206: Consider reworking classes to avoid initClass
- * DS207: Consider shorter variations of null checks
- * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md
- */
- app.Router = class Router {
- static initClass() {
- $.extend(this.prototype, Events);
- this.routes = [
- ["*", "before"],
- ["/", "root"],
- ["/settings", "settings"],
- ["/offline", "offline"],
- ["/about", "about"],
- ["/news", "news"],
- ["/help", "help"],
- ["/:doc-:type/", "type"],
- ["/:doc/", "doc"],
- ["/:doc/:path(*)", "entry"],
- ["*", "notFound"],
- ];
- }
- constructor() {
- for (var [path, method] of Array.from(this.constructor.routes)) {
- page(path, this[method].bind(this));
- }
- this.setInitialPath();
- }
- start() {
- page.start();
- }
- show(path) {
- page.show(path);
- }
- triggerRoute(name) {
- this.trigger(name, this.context);
- this.trigger("after", name, this.context);
- }
- before(context, next) {
- let res;
- const previousContext = this.context;
- this.context = context;
- this.trigger("before", context);
- if ((res = next())) {
- this.context = previousContext;
- return res;
- } else {
- return;
- }
- }
- doc(context, next) {
- let doc;
- if (
- (doc =
- app.docs.findBySlug(context.params.doc) ||
- app.disabledDocs.findBySlug(context.params.doc))
- ) {
- context.doc = doc;
- context.entry = doc.toEntry();
- this.triggerRoute("entry");
- return;
- } else {
- return next();
- }
- }
- type(context, next) {
- let type;
- const doc = app.docs.findBySlug(context.params.doc);
- if (
- (type =
- doc != null ? doc.types.findBy("slug", context.params.type) : undefined)
- ) {
- context.doc = doc;
- context.type = type;
- this.triggerRoute("type");
- return;
- } else {
- return next();
- }
- }
- entry(context, next) {
- let entry;
- const doc = app.docs.findBySlug(context.params.doc);
- if (!doc) {
- return next();
- }
- let { path } = context.params;
- const { hash } = context;
- if ((entry = doc.findEntryByPathAndHash(path, hash))) {
- context.doc = doc;
- context.entry = entry;
- this.triggerRoute("entry");
- return;
- } else if (path.slice(-6) === "/index") {
- path = path.substr(0, path.length - 6);
- if ((entry = doc.findEntryByPathAndHash(path, hash))) {
- return entry.fullPath();
- }
- } else {
- path = `${path}/index`;
- if ((entry = doc.findEntryByPathAndHash(path, hash))) {
- return entry.fullPath();
- }
- }
- return next();
- }
- root() {
- if (app.isSingleDoc()) {
- return "/";
- }
- this.triggerRoute("root");
- }
- settings(context) {
- if (app.isSingleDoc()) {
- return `/#/${context.path}`;
- }
- this.triggerRoute("settings");
- }
- offline(context) {
- if (app.isSingleDoc()) {
- return `/#/${context.path}`;
- }
- this.triggerRoute("offline");
- }
- about(context) {
- if (app.isSingleDoc()) {
- return `/#/${context.path}`;
- }
- context.page = "about";
- this.triggerRoute("page");
- }
- news(context) {
- if (app.isSingleDoc()) {
- return `/#/${context.path}`;
- }
- context.page = "news";
- this.triggerRoute("page");
- }
- help(context) {
- if (app.isSingleDoc()) {
- return `/#/${context.path}`;
- }
- context.page = "help";
- this.triggerRoute("page");
- }
- notFound(context) {
- this.triggerRoute("notFound");
- }
- isIndex() {
- return (
- (this.context != null ? this.context.path : undefined) === "/" ||
- (app.isSingleDoc() &&
- __guard__(this.context != null ? this.context.entry : undefined, (x) =>
- x.isIndex(),
- ))
- );
- }
- isSettings() {
- return (
- (this.context != null ? this.context.path : undefined) === "/settings"
- );
- }
- setInitialPath() {
- // Remove superfluous forward slashes at the beginning of the path
- let path;
- if (
- (path = location.pathname.replace(/^\/{2,}/g, "/")) !== location.pathname
- ) {
- page.replace(path + location.search + location.hash, null, true);
- }
- if (location.pathname === "/") {
- if ((path = this.getInitialPathFromHash())) {
- page.replace(path + location.search, null, true);
- } else if ((path = this.getInitialPathFromCookie())) {
- page.replace(path + location.search + location.hash, null, true);
- }
- }
- }
- getInitialPathFromHash() {
- try {
- return __guard__(
- new RegExp("#/(.+)").exec(decodeURIComponent(location.hash)),
- (x) => x[1],
- );
- } catch (error) {}
- }
- getInitialPathFromCookie() {
- let path;
- if ((path = Cookies.get("initial_path"))) {
- Cookies.expire("initial_path");
- return path;
- }
- }
- replaceHash(hash) {
- page.replace(
- location.pathname + location.search + (hash || ""),
- null,
- true,
- );
- }
- };
- app.Router.initClass();
- function __guard__(value, transform) {
- return typeof value !== "undefined" && value !== null
- ? transform(value)
- : undefined;
- }
|