summaryrefslogtreecommitdiff
path: root/internal/generator/templates/shared/nav.tmpl
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}}