forked from valentinEmpy/structor
-
Notifications
You must be signed in to change notification settings - Fork 0
/
traefik-menu.js.gotmpl
125 lines (99 loc) · 3.88 KB
/
traefik-menu.js.gotmpl
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
var versions = [
{{- range $version := .Versions }}
{{- $text := $version.Text }}
{{- if eq $version.State "PRE_FINAL_RELEASE" }}
{{- $text = printf "%s (RC)" .Name }}
{{- end}}
{path: "{{ $version.Path }}", text: "{{ $text }}", selected: {{ eq $version.Name $.Current }} },
{{- end}}
];
// Material theme
function addMaterialMenu(elt, versions) {
const current = versions.find(function (value) {
return value.selected
})
const rootLi = document.createElement('li');
rootLi.classList.add('md-nav__item');
rootLi.classList.add('md-nav__item--nested');
const input = document.createElement('input');
input.classList.add('md-toggle');
input.classList.add('md-nav__toggle');
input.setAttribute('data-md-toggle', 'nav-10000000');
input.id = "nav-10000000";
input.type = 'checkbox';
rootLi.appendChild(input);
const lbl01 = document.createElement('label')
lbl01.classList.add('md-nav__link');
lbl01.setAttribute('for', 'nav-10000000');
lbl01.textContent = current.text + " ";
rootLi.appendChild(lbl01);
const nav = document.createElement('nav')
nav.classList.add('md-nav');
nav.setAttribute('data-md-component','collapsible');
nav.setAttribute('data-md-level','1');
rootLi.appendChild(nav);
const lbl02 = document.createElement('label')
lbl02.classList.add('md-nav__title');
lbl02.setAttribute('for', 'nav-10000000');
lbl02.textContent = current.text + " ";
nav.appendChild(lbl02);
const ul = document.createElement('ul')
ul.classList.add('md-nav__list');
ul.setAttribute('data-md-scrollfix','');
nav.appendChild(ul);
for (let i = 0; i < versions.length; i++) {
const li = document.createElement('li');
li.classList.add('md-nav__item');
ul.appendChild(li);
const a = document.createElement('a');
a.classList.add('md-nav__link');
if (versions[i].selected) {
a.classList.add('md-nav__link--active');
}
a.href = window.location.protocol + "//" + window.location.host + "/";
if (window.location.host === "doc.traefik.io") {
a.href = a.href + window.location.pathname.split('/')[1] + "/"
}
if (versions[i].path) {
a.href = a.href + versions[i].path + "/"
}
a.title = versions[i].text;
a.text = versions[i].text;
li.appendChild(a);
}
elt.appendChild(rootLi);
}
// United theme
function addMenu(elt, versions){
const li = document.createElement('li');
li.classList.add('md-nav__item');
li.style.cssText = 'padding-top: 1em;';
const select = document.createElement('select');
select.classList.add('md-nav__link');
select.style.cssText = 'background: white;border: none;color: #00BCD4;-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;overflow: hidden;padding: 0.1em;'
select.setAttribute('onchange', 'location = this.options[this.selectedIndex].value;');
for (let i = 0; i < versions.length; i++) {
let opt = document.createElement('option');
opt.value = window.location.protocol + "//" + window.location.host + "/";
if (window.location.host === "doc.traefik.io") {
opt.value = opt.value + window.location.pathname.split('/')[1] + "/"
}
if (versions[i].path) {
opt.value = opt.value + versions[i].path + "/"
}
opt.text = versions[i].text;
opt.selected = versions[i].selected;
select.appendChild(opt);
}
li.appendChild(select);
elt.appendChild(li);
}
const unitedSelector = 'div.navbar.navbar-default.navbar-fixed-top div.container div.navbar-collapse.collapse ul.nav.navbar-nav.navbar-right';
const materialSelector = 'div.md-container main.md-main div.md-main__inner.md-grid div.md-sidebar.md-sidebar--primary div.md-sidebar__scrollwrap div.md-sidebar__inner nav.md-nav.md-nav--primary ul.md-nav__list';
let elt = document.querySelector(materialSelector);
if (elt) {
addMaterialMenu(elt, versions);
} else {
const elt = document.querySelector(unitedSelector);
addMenu(elt, versions);
}