blob: 975976126eb7e755ea611892406590246561c9b8 (
plain)
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
|
{{define "splashGate"}}
<script>
(function(){
try {
var sp = new URLSearchParams(location.search);
if (sp.get('splash') === '0') {
document.documentElement.classList.add('sno-splash-skip');
return;
}
} catch (_) {}
try {
if (/^#post-/.test(location.hash)) {
document.documentElement.classList.add('sno-splash-skip');
return;
}
} catch (_) {}
function isIndexLikePath(pathname) {
var p = pathname || '/';
if (p === '' || p === '/') return true;
var parts = p.split('/').filter(function(s) { return s.length; });
if (parts.length === 0) return true;
var last = parts[parts.length - 1].toLowerCase();
if (last === 'index.html' || last === 'index.htm') return true;
if (p.endsWith('/') && parts.length === 1) return true;
return false;
}
var onIndex = isIndexLikePath(location.pathname);
var ref = document.referrer;
function refIsSameSiteBlogPage(url) {
if (!url) return false;
try {
var ru = new URL(url), cu = new URL(location.href);
if (ru.origin !== cu.origin) return false;
if (isIndexLikePath(ru.pathname)) return true;
var rp = ru.pathname.split('/').filter(function(s) { return s.length; });
var rs = (rp.length ? rp[rp.length - 1] : '').toLowerCase();
return /^page\d+\.html$/.test(rs);
} catch (_) { return false; }
}
if (!onIndex || refIsSameSiteBlogPage(ref)) document.documentElement.classList.add('sno-splash-skip');
})();
</script>
{{end}}
{{define "navhints"}}
<div class="nav-hints" role="region" aria-label="Controls and shortcuts">
<div class="nav-hints-row nav-hints-nav">
<span class="nav-hints-label">nav</span>
<button type="button" class="nav-fx-button sno-nav-btn" data-sno-nav="prev-post" aria-label="Previous post">
<i class="fas fa-arrow-up" aria-hidden="true"></i><kbd>j</kbd><kbd>↑</kbd><span class="sno-btn-text">post</span>
</button>
<button type="button" class="nav-fx-button sno-nav-btn" data-sno-nav="next-post" aria-label="Next post">
<i class="fas fa-arrow-down" aria-hidden="true"></i><kbd>k</kbd><kbd>↓</kbd><span class="sno-btn-text">post</span>
</button>
<button type="button" class="nav-fx-button sno-nav-btn" data-sno-nav="prev-page" aria-label="Previous page">
<i class="fas fa-arrow-left" aria-hidden="true"></i><kbd>h</kbd><kbd>←</kbd><span class="sno-btn-text">page</span>
</button>
<button type="button" class="nav-fx-button sno-nav-btn" data-sno-nav="next-page" aria-label="Next page">
<i class="fas fa-arrow-right" aria-hidden="true"></i><kbd>l</kbd><kbd>→</kbd><span class="sno-btn-text">page</span>
</button>
<button type="button" class="nav-fx-button sno-nav-btn" data-sno-nav="open" aria-label="Open selected post">
<i class="fas fa-expand" aria-hidden="true"></i><kbd>Enter</kbd><span class="sno-btn-text">open</span>
</button>
<button type="button" class="nav-fx-button sno-nav-btn" data-sno-nav="close" aria-label="Close modal">
<i class="fas fa-compress" aria-hidden="true"></i><kbd>Esc</kbd><span class="sno-btn-text">close</span>
</button>
</div>
<div class="nav-hints-row nav-hints-fx">
<span class="nav-hints-label">fx</span>
<button type="button" class="nav-fx-button" data-sno-fx="wild" aria-pressed="false" aria-label="Toggle wild mode">
<i class="fas fa-bolt" aria-hidden="true"></i><kbd>w</kbd><span class="sno-btn-text">wild</span>
</button>
<button type="button" class="nav-fx-button" data-sno-fx="crt" aria-pressed="false" aria-label="Toggle CRT effect">
<i class="fas fa-tv" aria-hidden="true"></i><kbd>c</kbd><span class="sno-btn-text">crt</span>
</button>
<button type="button" class="nav-fx-button" data-sno-fx="ghost" aria-pressed="false" aria-label="Toggle ghost mode">
<i class="fas fa-ghost" aria-hidden="true"></i><kbd>g</kbd><span class="sno-btn-text">ghost</span>
</button>
<button type="button" class="nav-fx-button" data-sno-fx="blank" aria-pressed="false" aria-label="Toggle blank mode">
<i class="fas fa-eye-slash" aria-hidden="true"></i><kbd>b</kbd><span class="sno-btn-text">blank</span>
</button>
<button type="button" class="nav-fx-button" data-sno-fx="ambient" aria-pressed="false" aria-label="Start or pause ambient music">
<i class="fas fa-music" aria-hidden="true"></i><kbd>p</kbd><span class="sno-btn-text">music</span>
</button>
<button type="button" class="nav-fx-button" data-sno-fx="flash" aria-label="Trigger flash effect">
<i class="fas fa-camera" aria-hidden="true"></i><kbd>f</kbd><span class="sno-btn-text">flash</span>
</button>
<button type="button" class="nav-fx-button" data-sno-fx="scatter" aria-label="Trigger scatter effect">
<i class="fas fa-wind" aria-hidden="true"></i><kbd>x</kbd><span class="sno-btn-text">scatter</span>
</button>
<button type="button" class="nav-fx-button" data-sno-fx="theme" aria-label="Random theme">
<i class="fas fa-palette" aria-hidden="true"></i><kbd>t</kbd><span class="sno-btn-text">theme</span>
</button>
<select id="sno-theme-select" class="nav-fx-button" aria-label="Theme"></select>
</div>
</div>
{{end}}
{{define "navmodal"}}
<div class="post-modal" id="post-modal" role="dialog" aria-modal="true" aria-label="Expanded post">
<div class="modal-inner">
<button class="modal-close" onclick="closeModal()" aria-label="Close post"><i class="fas fa-times" aria-hidden="true"></i> CLOSE</button>
<div id="modal-content"></div>
<div class="sno-scroll-end" id="sno-scroll-end" aria-hidden="true"></div>
</div>
</div>
{{end}}
|