'use strict'; const events = require('../events.js'); const api = require('../api.js'); class TopNavigationItem { constructor(accessKey, title, url, available, imageUrl) { this.accessKey = accessKey; this.title = title; this.url = url; this.available = available === undefined ? true : available; this.imageUrl = imageUrl === undefined ? null : imageUrl; this.key = null; } }; class TopNavigation extends events.EventTarget { constructor() { super(); this.activeItem = null; this._keyToItem = new Map(); this._items = []; } getAll() { return this._items; } get(key) { if (!this._keyToItem.has(key)) { throw `An item with key ${key} does not exist.`; } return this._keyToItem.get(key); } add(key, item) { item.key = key; if (this._keyToItem.has(key)) { throw `An item with key ${key} was already added.`; } this._keyToItem.set(key, item); this._items.push(item); } activate(key) { this.activeItem = null; this.dispatchEvent(new CustomEvent('activate', { detail: { key: key, item: key ? this.get(key) : null, }, })); } setTitle(title) { api.fetchConfig().then(() => { document.oldTitle = null; document.title = api.getName() + (title ? (' – ' + title) : ''); }); } showAll() { for (let item of this._items) { item.available = true; } } show(key) { this.get(key).available = true; } hide(key) { this.get(key).available = false; } }; function _makeTopNavigation() { const ret = new TopNavigation(); ret.add('home', new TopNavigationItem('H', 'Home', '')); ret.add('posts', new TopNavigationItem('P', 'Posts', 'posts')); ret.add('upload', new TopNavigationItem('U', 'Upload', 'upload')); ret.add('comments', new TopNavigationItem('C', 'Comments', 'comments')); ret.add('tags', new TopNavigationItem('T', 'Tags', 'tags')); ret.add('users', new TopNavigationItem('S', 'Users', 'users')); ret.add('account', new TopNavigationItem('A', 'Account', 'user/{me}')); ret.add('register', new TopNavigationItem('R', 'Register', 'register')); ret.add('login', new TopNavigationItem('L', 'Log in', 'login')); ret.add('logout', new TopNavigationItem('O', 'Logout', 'logout')); ret.add('help', new TopNavigationItem('E', 'Help', 'help')); ret.add( 'settings', new TopNavigationItem( null, '', 'settings')); return ret; } module.exports = _makeTopNavigation();