blob: 9794f2fc73a207556ae494b3e15212cc85a9e698 (
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
|
{{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="Keyboard shortcuts">
<div class="nav-hints-row nav-hints-nav">
<span class="nav-hints-label">nav</span>
<span><kbd>j</kbd><kbd>k</kbd><kbd>↑</kbd><kbd>↓</kbd> post</span>
<span><kbd>h</kbd><kbd>l</kbd><kbd>←</kbd><kbd>→</kbd> page</span>
<span><kbd>PgUp</kbd><kbd>PgDn</kbd> scroll</span>
<span><kbd>Enter</kbd> open</span>
<span><kbd>Esc</kbd> close</span>
</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"><kbd>w</kbd> wild</button>
<button type="button" class="nav-fx-button" data-sno-fx="crt" aria-pressed="false" aria-label="Toggle CRT effect"><kbd>c</kbd> crt</button>
<button type="button" class="nav-fx-button" data-sno-fx="ghost" aria-pressed="false" aria-label="Toggle ghost mode"><kbd>g</kbd> ghost</button>
<button type="button" class="nav-fx-button" data-sno-fx="flash" aria-label="Trigger flash effect"><kbd>p</kbd> flash</button>
<button type="button" class="nav-fx-button" data-sno-fx="scatter" aria-label="Trigger scatter effect"><kbd>x</kbd> scatter</button>
<span class="nav-hints-spacer"><kbd>t</kbd> theme</span>
<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()">[ ESC ] CLOSE</button>
<div id="modal-content"></div>
<div class="sno-scroll-end" id="sno-scroll-end" aria-hidden="true"></div>
</div>
</div>
{{end}}
|