forked from krasimir/navigo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscripts.js
70 lines (62 loc) · 1.79 KB
/
scripts.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
var router;
var el = function (sel) {
return document.querySelector(sel);
};
var setContent = function (id, content) {
el('.js-content').innerHTML = content || el('#content-' + id).innerHTML;
};
var routing = function (mode) {
router = new Navigo(null, mode === 'hash');
router.on({
'usage': function () {
setContent('usage');
},
'download': function () {
setContent('download');
},
'about': function () {
setContent('about');
},
'this/*/:language/:what': function (params) {
var id = 'parameterized';
var content = el('#content-' + id).innerHTML;
Object.keys(params).forEach(function (key) {
content = content.replace(new RegExp('{{' + key + '}}', 'g'), params[key]);
});
setContent(id, content);
}
});
router.on(function () {
setContent('about');
});
router.resolve();
};
var switchModes = function () {
var trigger = el('.js-mode-trigger');
var mode = 'history-api';
var isLocalStorageSupported = !!window.localStorage;
var rerenderTrigger = function (mode) {
trigger.querySelector('input').checked = mode === 'hash';
};
if (isLocalStorageSupported) {
mode = localStorage.getItem('navigo') || mode;
}
rerenderTrigger(mode);
trigger.addEventListener('click', function () {
mode = mode === 'history-api' ? 'hash' : 'history-api';
isLocalStorageSupported && localStorage.setItem('navigo', mode);
window.location.href = (router.root || '').replace('#', '');
setTimeout(function () {
window.location.reload(true);
}, 200);
});
return mode;
};
var init = function () {
routing(switchModes());
document.querySelector('#toDownload').addEventListener('click', function (e) {
e.preventDefault();
router.navigate('/download');
});
};
window.onload = init;