You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
devdocs/assets/javascripts/views/layout/document.js

126 lines
2.8 KiB

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;
}
}
};