1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
'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('pools', new TopNavigationItem('O', 'Pools', 'pools'));
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,
'<i class=\'fa fa-cog\'></i>',
'settings'));
return ret;
}
module.exports = _makeTopNavigation();
|