125 lines · 2.8 KB · JavaScript
RawDownload
app.views.Document = class Document extends app.View {  static el = document;   static events = { visibilitychange: "onVisibilityChange" };   static shortcuts = {    help: "onHelp",    preferences: "onPreferences",    escape: "onEscape",    superLeft: "onBack",    superRight: "onForward",  };   static routes = { after: "afterRoute" };   init() {    this.menu = new app.views.Menu();    this.sidebar = new app.views.Sidebar();    this.addSubview(this.menu, this.addSubview(this.sidebar));    if (app.views.Resizer.isSupported()) {      this.resizer = new app.views.Resizer();      this.addSubview(this.resizer);    }    this.content = new app.views.Content();    this.addSubview(this.content);    if (!app.isSingleDoc() && !app.isMobile()) {      this.path = new app.views.Path();      this.addSubview(this.path);    }    if (!app.isSingleDoc()) {      this.settings = new app.views.Settings();    }     $.on(document.body, "click", this.onClick);     this.activate();  }   setTitle(title) {    return (this.el.title = title      ? `${title} — DevDocs`      : "DevDocs API Documentation");  }   afterRoute(route) {    if (route === "settings") {      if (this.settings != null) {        this.settings.activate();      }    } else {      if (this.settings != null) {        this.settings.deactivate();      }    }  }   onVisibilityChange() {    if (this.el.visibilityState !== "visible") {      return;    }    this.delay(() => {      if (app.isMobile() !== app.views.Mobile.detect()) {        location.reload();      }    }, 300);  }   onHelp() {    app.router.show("/help#shortcuts");  }   onPreferences() {    app.router.show("/settings");  }   onEscape() {    const path =      !app.isSingleDoc() || location.pathname === app.doc.fullPath()        ? "/"        : app.doc.fullPath();     app.router.show(path);  }   onBack() {    history.back();  }   onForward() {    history.forward();  }   onClick(event) {    const target = $.eventTarget(event);    if (!target.hasAttribute("data-behavior")) {      return;    }    $.stopEvent(event);    switch (target.getAttribute("data-behavior")) {      case "back":        history.back();        break;      case "reload":        window.location.reload();        break;      case "reboot":        app.reboot();        break;      case "hard-reload":        app.reload();        break;      case "reset":        if (confirm("Are you sure you want to reset DevDocs?")) {          app.reset();        }        break;      case "accept-analytics":        Cookies.set("analyticsConsent", "1", { expires: 1e8 }) && app.reboot();        break;      case "decline-analytics":        Cookies.set("analyticsConsent", "0", { expires: 1e8 }) && app.reboot();        break;    }  }};