@heroiclands/package-build 23.12.8 → 24.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/CHANGELOG.md +84 -0
  2. package/README.md +3 -2
  3. package/assets/preview/gitea.ini +12 -7
  4. package/assets/styles/content-base.css +293 -24
  5. package/bin/content-commands.mjs +370 -213
  6. package/bin/package-build-preview.mjs +2 -2
  7. package/bin/package-build.mjs +3 -2
  8. package/ci/check-banners.mjs +7 -7
  9. package/config.mjs +21 -6
  10. package/content-config.mjs +199 -80
  11. package/docs/api.md +110 -89
  12. package/docs/authoring/links-and-markup.md +469 -97
  13. package/docs/commands.md +259 -78
  14. package/docs/configuration.md +211 -103
  15. package/docs/content-format.md +4 -4
  16. package/docs/diagnostics.md +44 -2
  17. package/docs/getting-started.md +1 -1
  18. package/docs/guides/icons.md +1 -1
  19. package/docs/guides/module-project.md +5 -8
  20. package/docs/guides/release-and-deploy.md +2 -2
  21. package/docs/guides/site.md +112 -23
  22. package/docs/guides/system-project.md +1 -1
  23. package/docs/guides/writing-in-invented-scripts.md +1247 -0
  24. package/docs/index.md +1 -0
  25. package/docs/project-setup.md +28 -30
  26. package/docs/reference/format-details.md +677 -319
  27. package/docs/reference/note-types.md +47 -10
  28. package/docs/reference/theme-pages.md +178 -108
  29. package/docs/source-preview.md +16 -2
  30. package/engine/anchors.mjs +2 -2
  31. package/engine/asset-shipping.mjs +22 -10
  32. package/engine/base-compiler.mjs +62 -104
  33. package/engine/changelog-lint.mjs +1 -1
  34. package/engine/code-fences.mjs +3 -3
  35. package/engine/content-address.mjs +1 -1
  36. package/engine/content-alerts.mjs +8 -4
  37. package/engine/content-blocks.mjs +29 -14
  38. package/engine/content-embeds.mjs +1 -1
  39. package/engine/content-expand.mjs +376 -0
  40. package/engine/content-figures.mjs +18 -11
  41. package/engine/content-format.yaml +8 -0
  42. package/engine/content-glyphs.mjs +213 -0
  43. package/engine/content-images.mjs +6 -7
  44. package/engine/content-index.mjs +1 -1
  45. package/engine/content-links.mjs +3 -3
  46. package/engine/content-lint.mjs +1 -1
  47. package/engine/content-render.mjs +453 -0
  48. package/engine/content-scripts.mjs +376 -43
  49. package/engine/content-spans.mjs +6 -3
  50. package/engine/content-styles.mjs +91 -0
  51. package/engine/content-symbols.mjs +186 -0
  52. package/engine/content-verse.mjs +738 -0
  53. package/engine/core-report.mjs +169 -0
  54. package/engine/core-vocabulary.mjs +208 -0
  55. package/engine/dictionary-html.mjs +119 -0
  56. package/engine/dictionary-rows.mjs +15 -4
  57. package/engine/field-reference.mjs +5 -5
  58. package/engine/first-use.mjs +17 -27
  59. package/engine/frontmatter-lint.mjs +1 -1
  60. package/engine/heading-attributes.mjs +89 -0
  61. package/engine/helpers.mjs +61 -101
  62. package/engine/homepage.mjs +17 -29
  63. package/engine/html-minify.mjs +70 -0
  64. package/engine/index.mjs +8 -5
  65. package/engine/key-case-collisions.mjs +136 -0
  66. package/engine/language-data.mjs +203 -6
  67. package/engine/language-rows.mjs +8 -2
  68. package/engine/language-terms.mjs +186 -16
  69. package/engine/language-words.mjs +12 -0
  70. package/engine/logographic.mjs +255 -0
  71. package/engine/map-lexicon.mjs +262 -47
  72. package/engine/map-places.mjs +5 -4
  73. package/engine/markdown-expressions.mjs +0 -2
  74. package/engine/markdownlint-run.mjs +9 -3
  75. package/engine/markup-validation.mjs +21 -0
  76. package/engine/metre-declaration.mjs +134 -0
  77. package/engine/names.mjs +36 -9
  78. package/engine/note-matter.mjs +66 -0
  79. package/engine/note-vocabulary.mjs +187 -3
  80. package/engine/pdf-build.mjs +69 -133
  81. package/engine/pdf-render.mjs +205 -58
  82. package/engine/post-fields.mjs +157 -0
  83. package/engine/preview-index.mjs +130 -0
  84. package/engine/preview-source.mjs +450 -0
  85. package/engine/project-init.mjs +5 -12
  86. package/engine/prose-config.mjs +3 -3
  87. package/engine/read-stdin.mjs +29 -0
  88. package/engine/run-rows.mjs +2 -2
  89. package/engine/run-words.mjs +6 -112
  90. package/engine/script-emphasis-terms.mjs +38 -0
  91. package/engine/script-emphasis.mjs +295 -0
  92. package/engine/script-font-delivery.mjs +4 -4
  93. package/engine/site-build.mjs +260 -315
  94. package/engine/site-config.mjs +26 -238
  95. package/engine/site-files.mjs +175 -0
  96. package/engine/site-index.mjs +9 -4
  97. package/engine/site-preview.mjs +52 -525
  98. package/engine/site-render.mjs +593 -0
  99. package/engine/site-root.mjs +22 -13
  100. package/engine/site-search.mjs +161 -0
  101. package/engine/site-serve.mjs +273 -0
  102. package/engine/site-theme-banner.mjs +154 -0
  103. package/engine/site-theme-urls.mjs +125 -0
  104. package/engine/site-theme.mjs +926 -0
  105. package/engine/sql-tables.mjs +20 -3
  106. package/engine/text-maps.mjs +57 -10
  107. package/engine/typographer.mjs +248 -0
  108. package/engine/verse-metre.mjs +357 -0
  109. package/engine/wikilink-syntax.mjs +29 -47
  110. package/engine/wikilinks.mjs +758 -279
  111. package/engine/word-forms.mjs +364 -0
  112. package/engine/word-rows.mjs +12 -2
  113. package/engine/word-terms.mjs +38 -4
  114. package/manifest.mjs +3 -4
  115. package/package.json +11 -8
  116. package/{hugo-theme → site-theme}/data/banners.yaml +6 -10
  117. package/site-theme/layouts/base.hbs +31 -0
  118. package/site-theme/layouts/blog-list.hbs +30 -0
  119. package/site-theme/layouts/blog-post.hbs +40 -0
  120. package/site-theme/layouts/home.hbs +35 -0
  121. package/site-theme/layouts/list.hbs +20 -0
  122. package/site-theme/layouts/not-found.hbs +31 -0
  123. package/site-theme/layouts/page.hbs +7 -0
  124. package/site-theme/partials/copy-buttons.hbs +37 -0
  125. package/site-theme/partials/draft-notice.hbs +5 -0
  126. package/site-theme/partials/exturl.hbs +2 -0
  127. package/{hugo-theme/layouts/partials/footer.html → site-theme/partials/footer.hbs} +10 -7
  128. package/site-theme/partials/header.hbs +44 -0
  129. package/site-theme/partials/hero-banner.hbs +11 -0
  130. package/site-theme/partials/infobox-entry.hbs +2 -0
  131. package/site-theme/partials/infobox-section.hbs +31 -0
  132. package/site-theme/partials/infobox-value.hbs +2 -0
  133. package/site-theme/partials/infobox.hbs +18 -0
  134. package/site-theme/partials/list-members.hbs +9 -0
  135. package/site-theme/partials/nav-links.hbs +5 -0
  136. package/site-theme/partials/page-body.hbs +48 -0
  137. package/site-theme/partials/page-list.hbs +14 -0
  138. package/site-theme/partials/related.hbs +24 -0
  139. package/site-theme/partials/search-meta.hbs +6 -0
  140. package/site-theme/partials/search-names.hbs +2 -0
  141. package/site-theme/partials/search.hbs +52 -0
  142. package/site-theme/partials/tags.hbs +4 -0
  143. package/site-theme/partials/toc.hbs +7 -0
  144. package/{hugo-theme → site-theme}/static/css/style.css +106 -14
  145. package/stage.mjs +1 -2
  146. package/types/config.d.mts +8 -4
  147. package/types/content-config.d.mts +15 -15
  148. package/types/engine/asset-shipping.d.mts +5 -2
  149. package/types/engine/base-compiler.d.mts +20 -2
  150. package/types/engine/code-fences.d.mts +3 -3
  151. package/types/engine/content-address.d.mts +1 -1
  152. package/types/engine/content-alerts.d.mts +8 -2
  153. package/types/engine/content-blocks.d.mts +11 -4
  154. package/types/engine/content-expand.d.mts +288 -0
  155. package/types/engine/content-figures.d.mts +11 -3
  156. package/types/engine/content-glyphs.d.mts +85 -0
  157. package/types/engine/content-images.d.mts +6 -7
  158. package/types/engine/content-links.d.mts +1 -1
  159. package/types/engine/content-render.d.mts +199 -0
  160. package/types/engine/content-scripts.d.mts +70 -4
  161. package/types/engine/content-spans.d.mts +1 -1
  162. package/types/engine/content-styles.d.mts +33 -0
  163. package/types/engine/content-symbols.d.mts +35 -0
  164. package/types/engine/content-verse.d.mts +240 -0
  165. package/types/engine/core-report.d.mts +45 -0
  166. package/types/engine/core-vocabulary.d.mts +53 -0
  167. package/types/engine/dictionary-html.d.mts +8 -0
  168. package/types/engine/dictionary-rows.d.mts +10 -0
  169. package/types/engine/field-reference.d.mts +2 -2
  170. package/types/engine/heading-attributes.d.mts +20 -0
  171. package/types/engine/helpers.d.mts +3 -10
  172. package/types/engine/homepage.d.mts +11 -24
  173. package/types/engine/html-minify.d.mts +9 -0
  174. package/types/engine/index.d.mts +2 -1
  175. package/types/engine/key-case-collisions.d.mts +28 -0
  176. package/types/engine/language-data.d.mts +0 -2
  177. package/types/engine/language-terms.d.mts +24 -2
  178. package/types/engine/logographic.d.mts +45 -0
  179. package/types/engine/map-lexicon.d.mts +66 -13
  180. package/types/engine/map-places.d.mts +8 -0
  181. package/types/engine/markdown-expressions.d.mts +0 -2
  182. package/types/engine/metre-declaration.d.mts +39 -0
  183. package/types/engine/names.d.mts +34 -3
  184. package/types/engine/note-matter.d.mts +48 -0
  185. package/types/engine/pdf-render.d.mts +6 -2
  186. package/types/engine/post-fields.d.mts +44 -0
  187. package/types/engine/preview-index.d.mts +72 -0
  188. package/types/engine/preview-source.d.mts +51 -0
  189. package/types/engine/read-stdin.d.mts +11 -0
  190. package/types/engine/run-rows.d.mts +2 -2
  191. package/types/engine/run-words.d.mts +0 -15
  192. package/types/engine/script-emphasis-terms.d.mts +21 -0
  193. package/types/engine/script-emphasis.d.mts +84 -0
  194. package/types/engine/script-font-delivery.d.mts +4 -4
  195. package/types/engine/site-build.d.mts +71 -113
  196. package/types/engine/site-config.d.mts +14 -134
  197. package/types/engine/site-files.d.mts +73 -0
  198. package/types/engine/site-index.d.mts +11 -3
  199. package/types/engine/site-preview.d.mts +15 -19
  200. package/types/engine/site-render.d.mts +171 -0
  201. package/types/engine/site-root.d.mts +12 -4
  202. package/types/engine/site-search.d.mts +54 -0
  203. package/types/engine/site-serve.d.mts +44 -0
  204. package/types/engine/site-theme-banner.d.mts +51 -0
  205. package/types/engine/site-theme-urls.d.mts +60 -0
  206. package/types/engine/site-theme.d.mts +127 -0
  207. package/types/engine/sql-tables.d.mts +4 -1
  208. package/types/engine/text-maps.d.mts +17 -3
  209. package/types/engine/typographer.d.mts +11 -0
  210. package/types/engine/verse-metre.d.mts +131 -0
  211. package/types/engine/wikilink-syntax.d.mts +30 -48
  212. package/types/engine/wikilinks.d.mts +330 -14
  213. package/types/engine/word-forms.d.mts +83 -0
  214. package/types/manifest.d.mts +3 -4
  215. package/types/stage.d.mts +1 -2
  216. package/types/vendor/markdownlint.d.mts +8 -0
  217. package/vendor/markdownlint.mjs +20388 -0
  218. package/engine/content-poetry.mjs +0 -240
  219. package/engine/web-wikilinks.mjs +0 -594
  220. package/hugo-theme/layouts/404.html +0 -85
  221. package/hugo-theme/layouts/_default/baseof.html +0 -67
  222. package/hugo-theme/layouts/_default/list.html +0 -139
  223. package/hugo-theme/layouts/_default/single.html +0 -4
  224. package/hugo-theme/layouts/blog/list.html +0 -54
  225. package/hugo-theme/layouts/blog-post/single.html +0 -36
  226. package/hugo-theme/layouts/index.html +0 -75
  227. package/hugo-theme/layouts/partials/banner-url.html +0 -141
  228. package/hugo-theme/layouts/partials/cdn-url.html +0 -36
  229. package/hugo-theme/layouts/partials/dictionary-lists.html +0 -58
  230. package/hugo-theme/layouts/partials/draft-notice.html +0 -41
  231. package/hugo-theme/layouts/partials/draft-state.html +0 -26
  232. package/hugo-theme/layouts/partials/header.html +0 -35
  233. package/hugo-theme/layouts/partials/hero-banner.html +0 -85
  234. package/hugo-theme/layouts/partials/infobox/entry.html +0 -18
  235. package/hugo-theme/layouts/partials/infobox/items.html +0 -26
  236. package/hugo-theme/layouts/partials/infobox/section.html +0 -56
  237. package/hugo-theme/layouts/partials/infobox/value.html +0 -43
  238. package/hugo-theme/layouts/partials/infobox.html +0 -57
  239. package/hugo-theme/layouts/partials/page-body.html +0 -152
  240. package/hugo-theme/layouts/partials/related.html +0 -138
  241. package/hugo-theme/layouts/partials/search.html +0 -84
  242. package/hugo-theme/layouts/partials/site-url.html +0 -32
  243. package/hugo-theme/layouts/partials/tags.html +0 -30
  244. package/hugo-theme/layouts/partials/toc.html +0 -28
  245. package/hugo-theme/layouts/partials/warn-missing-banner.html +0 -3
  246. package/hugo-theme/layouts/shortcodes/cartouche.html +0 -64
  247. package/hugo-theme/layouts/shortcodes/exturl.html +0 -12
  248. package/hugo-theme/layouts/shortcodes/glyph.html +0 -43
  249. package/hugo-theme/layouts/shortcodes/pagelist.html +0 -63
  250. package/hugo-theme/theme.toml +0 -11
  251. package/types/engine/content-poetry.d.mts +0 -58
  252. package/types/engine/web-wikilinks.d.mts +0 -107
  253. /package/{hugo-theme → site-theme}/data/banner-kinds.yaml +0 -0
  254. /package/{hugo-theme → site-theme}/static/css/sohl-icons.css +0 -0
  255. /package/{hugo-theme → site-theme}/static/fonts/game-icons-kb.woff2 +0 -0
  256. /package/{hugo-theme → site-theme}/static/img/banners/takheperu-hieroglyphs.svg +0 -0
  257. /package/{hugo-theme → site-theme}/static/img/cartouches/takheperu.svg +0 -0
  258. /package/{hugo-theme → site-theme}/static/js/inline-spoilers.js +0 -0
@@ -0,0 +1,40 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ {{#if hero}}
3
+ {{> hero-banner hero}}
4
+ {{/if}}
5
+ {{#if article}}
6
+ <article class="single">
7
+ {{> search-meta article.search}}
8
+ <div class="single-content">
9
+ {{#if article.meta}}
10
+ <div class="single-meta blog-meta">
11
+ {{#if article.meta.series}}
12
+ <div class="blog-series">
13
+ <span class="blog-series-label">Series</span>
14
+ <span class="blog-series-name">{{article.meta.series}}</span>
15
+ </div>
16
+ {{/if}}
17
+ {{#if article.meta.date}}
18
+ <time class="single-date" datetime="{{article.meta.date.iso}}">{{article.meta.date.text}}</time>
19
+ {{/if}}
20
+ {{#if article.meta.tags}}
21
+ {{> tags article.meta.tags}}
22
+ {{/if}}
23
+ </div>
24
+ {{/if}}
25
+
26
+ {{#if article.content}}
27
+ <div class="single-body" data-pagefind-body>
28
+ {{{article.content}}}
29
+ </div>
30
+ {{/if}}
31
+
32
+ {{#if article.related}}
33
+ {{> related article.related}}
34
+ {{/if}}
35
+ {{#if article.nav}}
36
+ {{> nav-links article.nav}}
37
+ {{/if}}
38
+ </div>
39
+ </article>
40
+ {{/if}}
@@ -0,0 +1,35 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ {{#if isHomepage}}
3
+ {{#if hero}}
4
+ {{> hero-banner hero}}
5
+ {{/if}}
6
+ {{#if article}}
7
+ {{> page-body article}}
8
+ {{/if}}
9
+ {{else if grid}}
10
+ {{#if grid.hero}}
11
+ {{> hero-banner grid.hero}}
12
+ {{/if}}
13
+ {{#if grid.hasItems}}
14
+ <section class="home-sections">
15
+ <div class="home-featured">
16
+ {{#each grid.headings}}
17
+ <h2 class="home-section-title{{#if class}} home-section-title--{{class}}{{/if}}">{{title}}</h2>
18
+ {{/each}}
19
+ {{#each grid.cards}}
20
+
21
+ <div class="home-card{{#if key}} home-card--{{key}}{{/if}}">
22
+ {{#if imageUrl}}
23
+ <a href="{{url}}">
24
+ <img src="{{imageUrl}}" alt="{{alt}}" class="card-image">
25
+ </a>
26
+ {{/if}}
27
+ <h2><a href="{{url}}">{{title}}</a></h2>
28
+ <p>{{text}}</p>
29
+ <a href="{{url}}" class="card-button">More Info →</a>
30
+ </div>
31
+ {{/each}}
32
+ </div>
33
+ </section>
34
+ {{/if}}
35
+ {{/if}}
@@ -0,0 +1,20 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ {{#if hero}}
3
+ {{> hero-banner hero}}
4
+ {{/if}}
5
+ {{#if hasBody}}
6
+ <article class="single">
7
+ <div class="single-content">
8
+ <div class="single-body" data-pagefind-body>
9
+ {{{body}}}
10
+ </div>
11
+ {{> list-members}}
12
+ </div>
13
+ </article>
14
+ {{else if hasMembers}}
15
+ <article class="single">
16
+ <div class="single-content">
17
+ {{> list-members}}
18
+ </div>
19
+ </article>
20
+ {{/if}}
@@ -0,0 +1,31 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ <section class="hero hero-with-image" style="background-image: url('{{cssUrl heroUrl}}');">
3
+ <div class="hero-inner" data-pagefind-ignore>
4
+ <h1>Page not found</h1>
5
+ <p class="hero-tagline">{{tagline}} <code id="missing-path">the address you followed</code>.</p>
6
+ </div>
7
+ </section>
8
+
9
+ <article class="single">
10
+ <div class="single-content">
11
+ <div class="single-body">
12
+ <p>
13
+ The page may have been moved to another part of the
14
+ {{noun}}, or withdrawn along with the concept it described. Links
15
+ from older discussions, issues, and search results can outlive the
16
+ pages they point at.
17
+ </p>
18
+ {{#if links}}
19
+ <p>Start again from one of these:</p>
20
+ {{> page-list links}}
21
+ {{/if}}
22
+ </div>
23
+ </div>
24
+ </article>
25
+
26
+ <script>
27
+ (function () {
28
+ var el = document.getElementById("missing-path");
29
+ if (el) el.textContent = window.location.pathname;
30
+ })();
31
+ </script>
@@ -0,0 +1,7 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ {{#if hero}}
3
+ {{> hero-banner hero}}
4
+ {{/if}}
5
+ {{#if article}}
6
+ {{> page-body article}}
7
+ {{/if}}
@@ -0,0 +1,37 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ <script>
3
+ // Auto-enhance <span data-copy="URL"> elements with a clipboard copy button
4
+ document.querySelectorAll('[data-copy]').forEach(function(el) {
5
+ var url = el.getAttribute('data-copy');
6
+ el.classList.add('exturl');
7
+
8
+ // Wrap existing text in a code element if not already
9
+ if (!el.querySelector('.exturl-text')) {
10
+ var code = document.createElement('code');
11
+ code.className = 'exturl-text';
12
+ code.textContent = el.textContent;
13
+ el.textContent = '';
14
+ el.appendChild(code);
15
+ }
16
+
17
+ var btn = document.createElement('button');
18
+ btn.className = 'exturl-copy';
19
+ btn.title = 'Copy URL to clipboard';
20
+ btn.setAttribute('aria-label', 'Copy URL to clipboard');
21
+ btn.innerHTML =
22
+ '<svg class="exturl-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">' +
23
+ '<rect x="9" y="9" width="13" height="13" rx="2" ry="2"/>' +
24
+ '<path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/>' +
25
+ '</svg>' +
26
+ '<svg class="exturl-check" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">' +
27
+ '<polyline points="20 6 9 17 4 12"/>' +
28
+ '</svg>';
29
+ btn.addEventListener('click', function() {
30
+ navigator.clipboard.writeText(url).then(function() {
31
+ btn.classList.add('copied');
32
+ setTimeout(function() { btn.classList.remove('copied'); }, 1500);
33
+ });
34
+ });
35
+ el.appendChild(btn);
36
+ });
37
+ </script>
@@ -0,0 +1,5 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ <aside class="draft-notice">
3
+ <i class="fa-solid fa-circle-exclamation draft-notice-icon" aria-hidden="true"></i>
4
+ <p class="draft-notice-text"><strong class="draft-notice-label">Draft.</strong> <em>{{notice}}</em></p>
5
+ </aside>
@@ -0,0 +1,2 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ <span data-copy="{{url}}">{{url}}</span>
@@ -1,31 +1,34 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
1
2
  <footer class="site-footer" data-pagefind-ignore>
2
3
  <div class="footer-inner">
3
4
  <p class="footer-text">
4
- &copy; 2020&ndash;{{ now.Year }} Tom Rodriguez. Content under The World of Thalorna and Song of Heroic Lands is licensed under
5
- <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>; all other content is &copy; Tom Rodriguez, all rights reserved.{{ with .Site.Params.brand }}{{ with .licenseURL }} See
6
- <a href="{{ . }}">License</a>.{{ end }}{{ end }}
5
+ &copy; 2020&ndash;{{year}} Tom Rodriguez. Content under The World of Thalorna and Song of Heroic Lands is licensed under
6
+ <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>; all other content is &copy; Tom Rodriguez, all rights reserved.{{#if brand.licenseUrl}} See
7
+ <a href="{{brand.licenseUrl}}">License</a>.{{/if}}
7
8
  </p>
8
9
  <div class="footer-links">
9
10
  <a href="https://creativecommons.org/licenses/by-sa/4.0/">
10
11
  <img src="https://licensebuttons.net/l/by-sa/4.0/88x31.png" alt="CC BY-SA 4.0" class="cc-badge">
11
12
  </a>
12
- {{- with .Site.Params.brand }}{{ with .discordURL }}
13
- <a href="{{ . }}">
13
+ {{#if brand.discordUrl}}
14
+ <a href="{{brand.discordUrl}}">
14
15
  <svg width="24" height="19" viewBox="0 0 71 55" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
15
16
  <path d="M60.1 4.9A58.5 58.5 0 0045.4.2a.2.2 0 00-.2.1 40.8 40.8 0 00-1.8 3.7 54 54 0 00-16.2 0A39 39 0 0025.4.3a.2.2 0 00-.2-.1A58.4 58.4 0 0010.5 5a.2.2 0 00-.1 0A60 60 0 00.3 45.3a.2.2 0 000 .2 58.7 58.7 0 0017.7 9 .2.2 0 00.3-.1 42 42 0 003.6-5.9.2.2 0 00-.1-.3 38.6 38.6 0 01-5.5-2.6.2.2 0 01 0-.4c.4-.3.7-.6 1.1-.8a.2.2 0 01.2 0 41.9 41.9 0 0035.6 0 .2.2 0 01.2 0l1 .9a.2.2 0 010 .3 36.2 36.2 0 01-5.5 2.6.2.2 0 00-.1.4 47.1 47.1 0 003.6 5.8.2.2 0 00.2.1A58.5 58.5 0 0070.3 45.5a.2.2 0 000-.2A59.7 59.7 0 0060.2 5a.2.2 0 00-.1 0zM23.7 37.3c-3.5 0-6.4-3.2-6.4-7.1s2.8-7.1 6.4-7.1 6.5 3.2 6.4 7.1c0 3.9-2.8 7.1-6.4 7.1zm23.7 0c-3.5 0-6.4-3.2-6.4-7.1s2.8-7.1 6.4-7.1 6.5 3.2 6.4 7.1c0 3.9-2.8 7.1-6.4 7.1z"/>
16
17
  </svg>
17
18
  Discord
18
19
  </a>
19
- {{- end }}{{ end }}
20
+ {{/if}}
20
21
  </div>
21
22
  </div>
22
23
  </footer>
23
24
 
25
+ {{#if hasMenu}}
24
26
  <script>
25
27
  document.querySelector('.nav-toggle')?.addEventListener('click', function() {
26
28
  document.querySelector('.site-nav').classList.toggle('open');
27
29
  this.classList.toggle('open');
28
30
  });
29
31
  </script>
32
+ {{/if}}
30
33
 
31
- <script src="{{ "js/inline-spoilers.js" | relURL }}" defer></script>
34
+ <script src="{{urls.spoilers}}" defer></script>
@@ -0,0 +1,44 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ <header class="site-header" data-pagefind-ignore>
3
+ <div class="header-inner">
4
+ <a href="{{homeUrl}}" class="site-title">
5
+ {{#if brand.logoUrl}}
6
+ <img src="{{brand.logoUrl}}" alt="Heroic Lands" class="site-logo">
7
+ {{/if}}
8
+ <span class="title-main">Heroic Lands</span>
9
+ </a>
10
+ {{#if hasActions}}
11
+ <div class="header-actions">
12
+ {{#if hasMenu}}
13
+ <nav class="site-nav">
14
+ {{#each menu}}
15
+ {{#if hasChildren}}
16
+ <div class="nav-dropdown">
17
+ <a href="{{url}}" class="nav-link{{#if active}} active{{/if}}">
18
+ {{name}}
19
+ <svg class="dropdown-arrow" width="10" height="6" viewBox="0 0 10 6" fill="currentColor"><path d="M1 1l4 4 4-4"/></svg>
20
+ </a>
21
+ <div class="dropdown-menu">
22
+ {{#each children}}
23
+ <a href="{{url}}" class="dropdown-item">{{name}}</a>
24
+ {{/each}}
25
+ </div>
26
+ </div>
27
+ {{else}}
28
+ <a href="{{url}}" class="nav-link{{#if active}} active{{/if}}">{{name}}</a>
29
+ {{/if}}
30
+ {{/each}}
31
+ </nav>
32
+ {{/if}}
33
+ {{#if search}}
34
+ {{> search}}
35
+ {{/if}}
36
+ {{#if hasMenu}}
37
+ <button class="nav-toggle" aria-label="Toggle navigation">
38
+ <span></span><span></span><span></span>
39
+ </button>
40
+ {{/if}}
41
+ </div>
42
+ {{/if}}
43
+ </div>
44
+ </header>
@@ -0,0 +1,11 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ <section class="hero hero-with-image"{{#if bannerUrl}} style="background-image: url('{{cssUrl bannerUrl}}');"{{/if}}>
3
+ <div class="hero-inner" data-pagefind-ignore>
4
+ {{#if title}}
5
+ <h1>{{title}}</h1>
6
+ {{/if}}
7
+ {{#if tagline}}
8
+ <p class="hero-tagline">{{tagline}}</p>
9
+ {{/if}}
10
+ </div>
11
+ </section>
@@ -0,0 +1,2 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ {{#if entry.lead}}{{entry.lead}}{{/if}}{{#if entry.url}}<a class="{{class}}" href="{{entry.url}}">{{entry.text}}</a>{{else}}<span class="{{class}}">{{entry.text}}</span>{{/if}}
@@ -0,0 +1,31 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ {{#if rows}}
3
+ <dl class="info-profile-grid">
4
+ {{#each rows}}
5
+ <dt>{{label}}</dt>
6
+ <dd>{{> infobox-value}}</dd>
7
+ {{/each}}
8
+ </dl>
9
+ {{else if grid}}
10
+ <div class="info-attrs-grid">
11
+ {{#each cells}}
12
+ <div class="info-attr">
13
+ <span class="attr-label">{{label}}</span>
14
+ <span class="attr-value">{{value}}</span>
15
+ </div>
16
+ {{/each}}
17
+ </div>
18
+ {{else if runin}}
19
+ {{#each groups}}
20
+ <p class="info-skill-line">
21
+ {{#if label}}<span class="skill-cat">{{label}}:</span>{{/if}}
22
+ <span class="skill-entries">{{#each entries}}{{#unless @first}}, {{/unless}}{{> infobox-entry entry=this class="skill-entry"}}{{/each}}</span>
23
+ </p>
24
+ {{/each}}
25
+ {{else if list}}
26
+ <ul class="info-mystical-list">
27
+ {{#each entries}}
28
+ <li class="info-mystical-item">{{> infobox-entry entry=this class="mystical-name"}}</li>
29
+ {{/each}}
30
+ </ul>
31
+ {{/if}}
@@ -0,0 +1,2 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ {{#if isLink}}{{> infobox-entry entry=entry class="info-link"}}{{else if isLinks}}{{#each entries}}{{#unless @first}}, {{/unless}}{{> infobox-entry entry=this class="info-link"}}{{/each}}{{else}}{{text}}{{/if}}
@@ -0,0 +1,18 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ {{#each boxes}}
3
+ <details class="info-sidebar info-box{{#if id}} info-box-{{id}}{{/if}}" open data-pagefind-ignore>
4
+ <summary class="info-sidebar-title"><h2>{{title}}</h2></summary>
5
+ {{#if statement}}
6
+ <p class="info-statement">{{statement}}</p>
7
+ {{else}}
8
+ {{#each sections}}
9
+ <section class="info-section{{#if id}} info-section-{{id}}{{/if}}">
10
+ {{#if label}}
11
+ <h3 class="info-section-title">{{label}}</h3>
12
+ {{/if}}
13
+ {{> infobox-section}}
14
+ </section>
15
+ {{/each}}
16
+ {{/if}}
17
+ </details>
18
+ {{/each}}
@@ -0,0 +1,9 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ {{#if listing}}
3
+ {{#if heading}}
4
+ <h2 class="page-list-heading">{{heading}}</h2>
5
+ {{/if}}
6
+ {{> page-list listing}}
7
+ {{else if empty}}
8
+ <p class="page-list-empty">Nothing here yet.</p>
9
+ {{/if}}
@@ -0,0 +1,5 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ <nav class="single-nav" data-pagefind-ignore>
3
+ {{#if prev}}<a href="{{prev.url}}" class="nav-prev">&larr; {{prev.title}}</a>{{/if}}
4
+ {{#if next}}<a href="{{next.url}}" class="nav-next">{{next.title}} &rarr;</a>{{/if}}
5
+ </nav>
@@ -0,0 +1,48 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ <article class="{{articleClass}}"{{#unless hasBody}} data-pagefind-body{{/unless}}>
3
+ {{#if isDraft}}
4
+ {{> draft-notice}}
5
+ {{/if}}
6
+ {{> search-meta search}}
7
+ {{#unless hasBody}}{{> search-names search}}{{/unless}}
8
+ {{#if hasSidebar}}
9
+ <aside class="info-rail">
10
+ {{> infobox}}
11
+ {{#if tocBeside}}
12
+ {{> toc}}
13
+ {{/if}}
14
+ </aside>
15
+ {{/if}}
16
+ {{#if hasMain}}
17
+ <div class="single-content">
18
+ {{#if meta}}
19
+ <div class="single-meta">
20
+ {{#if meta.date}}
21
+ <time class="single-date" datetime="{{meta.date.iso}}">{{meta.date.text}}</time>
22
+ {{/if}}
23
+ {{#if meta.subtype}}<span class="single-subtype">{{meta.subtype}}</span>{{/if}}
24
+ {{#if meta.tags}}
25
+ {{> tags meta.tags}}
26
+ {{/if}}
27
+ </div>
28
+ {{/if}}
29
+
30
+ {{#if hasBody}}
31
+ <div class="single-body" data-pagefind-body>
32
+ {{> search-names search}}
33
+ {{{content}}}
34
+ </div>
35
+ {{/if}}
36
+
37
+ {{#if related}}
38
+ {{> related related}}
39
+ {{/if}}
40
+ {{#if nav}}
41
+ {{> nav-links nav}}
42
+ {{/if}}
43
+ </div>
44
+ {{/if}}
45
+ {{#if tocBelow}}
46
+ {{> toc}}
47
+ {{/if}}
48
+ </article>
@@ -0,0 +1,14 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ <ul class="page-list">
3
+ {{#each items}}
4
+ <li class="page-list-item">
5
+ <a class="page-list-title" href="{{url}}">{{title}}</a>
6
+ {{#if count}}
7
+ <span class="page-list-count">{{count}}</span>
8
+ {{/if}}
9
+ {{#if text}}
10
+ <span class="page-list-desc">{{text}}</span>
11
+ {{/if}}
12
+ </li>
13
+ {{/each}}
14
+ </ul>
@@ -0,0 +1,24 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ <section class="related" aria-labelledby="related-heading" data-pagefind-ignore>
3
+ <h2 id="related-heading" class="related-heading">Related</h2>
4
+ {{#if seeAlso}}
5
+ <div class="related-group">
6
+ <h3 class="related-group-label">See also</h3>
7
+ <ul class="related-group-grid">
8
+ {{#each seeAlso}}
9
+ <li><a href="{{url}}">{{title}}</a>{{#if gloss}} — {{gloss}}{{/if}}</li>
10
+ {{/each}}
11
+ </ul>
12
+ </div>
13
+ {{/if}}
14
+ {{#each groups}}
15
+ <div class="related-group">
16
+ <h3 class="related-group-label">{{label}}</h3>
17
+ <ul class="related-group-grid">
18
+ {{#each refs}}
19
+ <li><a href="{{url}}">{{title}}</a></li>
20
+ {{/each}}
21
+ </ul>
22
+ </div>
23
+ {{/each}}
24
+ </section>
@@ -0,0 +1,6 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ {{#if title}}<span data-pagefind-meta="title" hidden>{{title}}</span>{{/if}}
3
+ {{#each filters}}{{#each values}}<span data-pagefind-filter="{{../name}}" hidden>{{this}}</span>{{/each}}{{/each}}
4
+ {{#if aliases}}<span data-pagefind-meta="aliases" hidden>{{aliases}}</span>{{/if}}
5
+ {{#if image}}<span data-pagefind-meta="image" hidden>{{image}}</span>{{/if}}
6
+ {{#if date}}<span data-pagefind-sort="date" hidden>{{date}}</span>{{/if}}
@@ -0,0 +1,2 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ {{#if names}}<span data-pagefind-weight="{{weight}}" hidden>{{names}}</span>{{/if}}
@@ -0,0 +1,52 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ <div class="site-search" data-pagefind-ignore>
3
+ <button
4
+ type="button"
5
+ class="search-toggle"
6
+ aria-label="Search"
7
+ aria-expanded="false"
8
+ aria-controls="site-search-panel"
9
+ ><i class="fa-solid fa-magnifying-glass" aria-hidden="true"></i></button>
10
+ <div id="site-search-panel" class="search-panel" hidden>
11
+ <div class="search-panel-inner" id="search"></div>
12
+ </div>
13
+ </div>
14
+ <link rel="stylesheet" href="{{urls.pagefindCss}}">
15
+ <script src="{{urls.pagefindJs}}" defer></script>
16
+ <script>
17
+ (function () {
18
+ var toggle = document.querySelector(".search-toggle");
19
+ var panel = document.getElementById("site-search-panel");
20
+ if (!toggle || !panel) return;
21
+ var ui = null;
22
+
23
+ function open() {
24
+ panel.hidden = false;
25
+ toggle.setAttribute("aria-expanded", "true");
26
+ if (!ui && typeof PagefindUI !== "undefined") {
27
+ ui = new PagefindUI({{{json searchOptions}}});
28
+ }
29
+ var input = panel.querySelector("input");
30
+ if (input) input.focus();
31
+ }
32
+
33
+ function close() {
34
+ panel.hidden = true;
35
+ toggle.setAttribute("aria-expanded", "false");
36
+ }
37
+
38
+ toggle.addEventListener("click", function () {
39
+ if (panel.hidden) { open(); } else { close(); }
40
+ });
41
+
42
+ document.addEventListener("keydown", function (e) {
43
+ if (e.key === "Escape" && !panel.hidden) close();
44
+ });
45
+
46
+ document.addEventListener("click", function (e) {
47
+ if (panel.hidden) return;
48
+ if (panel.contains(e.target) || toggle.contains(e.target)) return;
49
+ close();
50
+ });
51
+ })();
52
+ </script>
@@ -0,0 +1,4 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ <div class="single-tags">
3
+ {{#each items}}{{#if url}}<a href="{{url}}" class="tag">{{name}}</a>{{else}}<span class="tag">{{name}}</span>{{/if}}{{/each}}
4
+ </div>
@@ -0,0 +1,7 @@
1
+ {{!-- SPDX-License-Identifier: GPL-3.0-or-later --}}
2
+ <aside class="toc" aria-label="Table of contents" data-pagefind-ignore>
3
+ <div class="toc-inner">
4
+ <p class="toc-label">On this page</p>
5
+ {{{toc}}}
6
+ </div>
7
+ </aside>