/
main.js
84 lines (80 loc) · 2.57 KB
/
main.js
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
var zs = {icons: {}};
function renderIcons() {
function getIconConfig(classes) {
var result = {
icon: null,
group: 'regular'
};
classes.forEach(cls => {
if (cls.startsWith('icongroup-')) {
result.group = cls.substr(10);
return;
}
if (!cls.startsWith('icon-')) {
return;
}
result.icon = cls.substr(5);
});
return result;
}
document.querySelectorAll('.icon').forEach((elem) => {
var ns = 'http://www.w3.org/2000/svg';
var cfg = getIconConfig(elem.classList);
if (!cfg.icon) {
return;
}
var svg = zs.icons.createIconElement(cfg);
elem.parentNode.replaceChild(svg, elem);
});
}
zs.icons.createIconElement = function(cfg) {
var ns = 'http://www.w3.org/2000/svg';
var svg = document.createElementNS(ns, 'svg');
var icon = window.icons[cfg.group][cfg.icon];
var path = document.createElementNS(ns, 'path');
path.setAttributeNS(null, 'd', icon.data);
path.setAttributeNS(null, 'fill', 'currentColor');
svg.appendChild(path);
svg.classList.add('icon');
svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
svg.setAttributeNS(null, 'viewBox', icon.viewBox.join(' '));
svg.setAttribute('aria-hidden', 'true');
svg.setAttribute('role', 'img');
return svg;
}
window.zs = zs;
(function() {
var button = document.createElement('a');
function toggleDarkMode(goDark) {
while(button.hasChildNodes()) {
button.removeChild(button.firstChild);
}
if (goDark) {
button.appendChild(window.zs.icons.createIconElement({group: 'regular', icon: 'sun'}));
document.getElementsByTagName('html')[0].classList.add('darkmode');
} else {
button.appendChild(window.zs.icons.createIconElement({group: 'regular', icon: 'moon'}));
document.getElementsByTagName('html')[0].classList.remove('darkmode');
}
window.localStorage.setItem('darkMode', goDark);
}
var goDark = window.localStorage.getItem('darkMode');
if (goDark == null) {
goDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
} else {
goDark = goDark === 'true';
}
var navList = document.querySelector('#main-nav > ul');
var navItem = document.createElement('li');
navItem.classList.add('darkmode-toggle');
toggleDarkMode(goDark);
button.setAttribute('href', '');
navItem.appendChild(button);
navList.appendChild(navItem);
button.addEventListener('click', (evt) => {
evt.preventDefault();
goDark = !goDark;
toggleDarkMode(goDark);
}, false);
}());
renderIcons();