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