szurubooru/client/js/controllers/top_navigation_controller.js

82 lines
2.4 KiB
JavaScript

"use strict";
const api = require("../api.js");
const topNavigation = require("../models/top_navigation.js");
const TopNavigationView = require("../views/top_navigation_view.js");
class TopNavigationController {
constructor() {
api.fetchConfig().then(() => {
this._topNavigationView = new TopNavigationView();
topNavigation.addEventListener("activate", (e) =>
this._evtActivate(e)
);
api.addEventListener("login", (e) => this._evtAuthChange(e));
api.addEventListener("logout", (e) => this._evtAuthChange(e));
this._render();
});
}
_evtAuthChange(e) {
this._render();
}
_evtActivate(e) {
this._topNavigationView.activate(e.detail.key);
}
_updateNavigationFromPrivileges() {
topNavigation.get("account").url = "user/" + api.userName;
topNavigation.get("account").imageUrl = api.user
? api.user.avatarUrl
: null;
topNavigation.showAll();
if (!api.hasPrivilege("posts:list")) {
topNavigation.hide("posts");
}
if (!api.hasPrivilege("posts:create")) {
topNavigation.hide("upload");
}
if (!api.hasPrivilege("comments:list")) {
topNavigation.hide("comments");
}
if (!api.hasPrivilege("tags:list")) {
topNavigation.hide("tags");
}
if (!api.hasPrivilege("users:list")) {
topNavigation.hide("users");
}
if (!api.hasPrivilege("pools:list")) {
topNavigation.hide("pools");
}
if (api.isLoggedIn()) {
if (!api.hasPrivilege("users:create:any")) {
topNavigation.hide("register");
}
topNavigation.hide("login");
} else {
if (!api.hasPrivilege("users:create:self")) {
topNavigation.hide("register");
}
topNavigation.hide("account");
topNavigation.hide("logout");
}
}
_render() {
this._updateNavigationFromPrivileges();
this._topNavigationView.render({
items: topNavigation.getAll(),
name: api.getName(),
});
this._topNavigationView.activate(
topNavigation.activeItem ? topNavigation.activeItem.key : ""
);
}
}
module.exports = new TopNavigationController();