@heroiclands/package-build 22.22.0 → 22.24.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.
- package/CHANGELOG.md +46 -0
- package/README.md +1 -0
- package/bin/content-commands.mjs +51 -14
- package/ci/content-format-reference.mjs +1 -1
- package/content-config.mjs +80 -2
- package/docs/api.md +85 -72
- package/docs/authoring/assets.md +29 -0
- package/docs/authoring/dates-and-calendars.md +37 -1
- package/docs/authoring/links-and-markup.md +112 -31
- package/docs/commands.md +30 -29
- package/docs/configuration.md +92 -19
- package/docs/content-format.md +1 -1
- package/docs/guides/book.md +5 -4
- package/docs/guides/module-project.md +2 -2
- package/docs/guides/site.md +41 -0
- package/docs/project-setup.md +4 -4
- package/docs/reference/format-details.md +323 -60
- package/docs/reference/note-types.md +9 -9
- package/docs/reference/theme-pages.md +496 -0
- package/engine/anchors.mjs +16 -10
- package/engine/art-fields.mjs +118 -0
- package/engine/art-slots.mjs +9 -2
- package/engine/asset-index.mjs +160 -10
- package/engine/asset-replacement.mjs +93 -0
- package/engine/asset-types.mjs +240 -0
- package/engine/base-compiler.mjs +54 -2
- package/engine/bundles.mjs +13 -1
- package/engine/content-blocks.mjs +4 -4
- package/engine/content-embeds.mjs +19 -0
- package/engine/content-figures.mjs +468 -0
- package/engine/content-footnotes.mjs +10 -2
- package/engine/content-format.yaml +1 -1
- package/engine/content-images.mjs +126 -25
- package/engine/content-index.mjs +36 -10
- package/engine/field-reference.mjs +31 -10
- package/engine/field-spec.mjs +10 -8
- package/engine/foreign-catalog.mjs +145 -19
- package/engine/frontmatter-lint.mjs +73 -1
- package/engine/heading-attributes.mjs +31 -18
- package/engine/helpers.mjs +102 -33
- package/engine/infobox-registry.mjs +4 -1
- package/engine/infobox.mjs +47 -8
- package/engine/itinerary-scenes.mjs +4 -10
- package/engine/journals.mjs +264 -39
- package/engine/lore-events.mjs +197 -0
- package/engine/markdown-expressions.mjs +257 -7
- package/engine/note-dates.mjs +305 -12
- package/engine/note-vocabulary.mjs +11 -5
- package/engine/pathnames.mjs +36 -0
- package/engine/pdf-build.mjs +357 -34
- package/engine/pdf-images.mjs +64 -0
- package/engine/pdf-render.mjs +160 -36
- package/engine/scenes.mjs +16 -4
- package/engine/site-build.mjs +127 -13
- package/engine/site-config.mjs +19 -24
- package/engine/site-index.mjs +72 -1
- package/engine/site-preview.mjs +2 -0
- package/engine/system-block.mjs +44 -16
- package/hm3/actors.mjs +2 -2
- package/hugo-theme/data/banners.yaml +69 -0
- package/hugo-theme/layouts/404.html +85 -0
- package/hugo-theme/layouts/_default/baseof.html +64 -0
- package/hugo-theme/layouts/_default/list.html +139 -0
- package/hugo-theme/layouts/_default/single.html +4 -0
- package/hugo-theme/layouts/blog/list.html +54 -0
- package/hugo-theme/layouts/blog-post/single.html +36 -0
- package/hugo-theme/layouts/index.html +75 -0
- package/hugo-theme/layouts/partials/banner-url.html +117 -0
- package/hugo-theme/layouts/partials/cdn-url.html +36 -0
- package/hugo-theme/layouts/partials/draft-notice.html +41 -0
- package/hugo-theme/layouts/partials/draft-state.html +26 -0
- package/hugo-theme/layouts/partials/footer.html +29 -0
- package/hugo-theme/layouts/partials/header.html +35 -0
- package/hugo-theme/layouts/partials/hero-banner.html +86 -0
- package/hugo-theme/layouts/partials/holdings/entry.html +21 -0
- package/hugo-theme/layouts/partials/holdings/kind-groups.html +71 -0
- package/hugo-theme/layouts/partials/holdings.html +61 -0
- package/hugo-theme/layouts/partials/infobox/entry.html +15 -0
- package/hugo-theme/layouts/partials/infobox/items.html +26 -0
- package/hugo-theme/layouts/partials/infobox/section.html +56 -0
- package/hugo-theme/layouts/partials/infobox/value.html +43 -0
- package/hugo-theme/layouts/partials/infobox.html +57 -0
- package/hugo-theme/layouts/partials/page-body.html +154 -0
- package/hugo-theme/layouts/partials/place-map.html +9 -0
- package/hugo-theme/layouts/partials/related.html +121 -0
- package/hugo-theme/layouts/partials/search.html +84 -0
- package/hugo-theme/layouts/partials/site-url.html +32 -0
- package/hugo-theme/layouts/partials/tags.html +30 -0
- package/hugo-theme/layouts/partials/toc.html +28 -0
- package/hugo-theme/layouts/partials/warn-missing-banner.html +3 -0
- package/hugo-theme/layouts/shortcodes/cartouche.html +64 -0
- package/hugo-theme/layouts/shortcodes/exturl.html +12 -0
- package/hugo-theme/layouts/shortcodes/glyph.html +43 -0
- package/hugo-theme/layouts/shortcodes/pagelist.html +63 -0
- package/hugo-theme/static/css/sohl-icons.css +57 -0
- package/hugo-theme/static/css/style.css +2953 -0
- package/hugo-theme/static/fonts/game-icons-kb.woff2 +0 -0
- package/hugo-theme/static/img/banners/takheperu-hieroglyphs.svg +1 -0
- package/hugo-theme/static/img/cartouches/takheperu.svg +1 -0
- package/hugo-theme/theme.toml +11 -0
- package/manifest.mjs +30 -24
- package/package.json +2 -1
- package/packagebuild-metadata.jsonl +13 -13
- package/sohl/item-fields.mjs +4 -3
- package/types/content-config.d.mts +48 -1
- package/types/engine/anchors.d.mts +9 -4
- package/types/engine/art-fields.d.mts +64 -0
- package/types/engine/art-slots.d.mts +2 -1
- package/types/engine/asset-index.d.mts +43 -0
- package/types/engine/asset-replacement.d.mts +22 -0
- package/types/engine/asset-types.d.mts +18 -0
- package/types/engine/base-compiler.d.mts +0 -17
- package/types/engine/content-embeds.d.mts +16 -0
- package/types/engine/content-figures.d.mts +101 -0
- package/types/engine/content-footnotes.d.mts +7 -0
- package/types/engine/content-images.d.mts +78 -12
- package/types/engine/content-index.d.mts +8 -2
- package/types/engine/field-reference.d.mts +21 -0
- package/types/engine/field-spec.d.mts +20 -16
- package/types/engine/foreign-catalog.d.mts +39 -0
- package/types/engine/heading-attributes.d.mts +13 -8
- package/types/engine/helpers.d.mts +28 -10
- package/types/engine/infobox-registry.d.mts +4 -1
- package/types/engine/infobox.d.mts +6 -0
- package/types/engine/journals.d.mts +31 -9
- package/types/engine/lore-events.d.mts +14 -0
- package/types/engine/markdown-expressions.d.mts +23 -2
- package/types/engine/note-dates.d.mts +64 -1
- package/types/engine/pathnames.d.mts +26 -0
- package/types/engine/pdf-build.d.mts +28 -6
- package/types/engine/pdf-images.d.mts +52 -0
- package/types/engine/pdf-render.d.mts +12 -0
- package/types/engine/site-build.d.mts +14 -3
- package/types/engine/site-config.d.mts +9 -9
- package/types/engine/site-index.d.mts +54 -0
- package/types/engine/system-block.d.mts +26 -2
- package/types/hm3/actors.d.mts +18 -0
- package/types/manifest.d.mts +19 -23
- package/engine/content-captions.mjs +0 -230
- package/types/engine/content-captions.d.mts +0 -58
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{{- /*
|
|
2
|
+
A page's own subject-tag chips, rendered from .Params.tags.
|
|
3
|
+
|
|
4
|
+
`draft` is suppressed here: it is a presentation fact about the writing,
|
|
5
|
+
not a fact about the subject (package-build/engine/note-vocabulary.mjs,
|
|
6
|
+
`DRAFT_TAG`) — a draft compiles, validates, publishes and resolves like any
|
|
7
|
+
other note. It does not belong beside subject tags in a reader-facing tag
|
|
8
|
+
list; `draft-notice.html` is where the state is stated,
|
|
9
|
+
and `draft-state.html` is the one place either partial spells the tag.
|
|
10
|
+
|
|
11
|
+
The taxonomy itself is untouched: a draft page still carries the tag, still
|
|
12
|
+
lists on its term page, and the term still appears in a site-wide taxonomy
|
|
13
|
+
listing. This partial decides only what a page's own chip row shows.
|
|
14
|
+
|
|
15
|
+
Silent-disappear: a page whose only tag is `draft` emits nothing here, the
|
|
16
|
+
same as a page with no tags at all.
|
|
17
|
+
|
|
18
|
+
Context: the page.
|
|
19
|
+
*/ -}}
|
|
20
|
+
{{- $tags := slice -}}
|
|
21
|
+
{{- range .Params.tags -}}
|
|
22
|
+
{{- if ne (lower .) "draft" -}}
|
|
23
|
+
{{- $tags = $tags | append . -}}
|
|
24
|
+
{{- end -}}
|
|
25
|
+
{{- end -}}
|
|
26
|
+
{{- with $tags }}
|
|
27
|
+
<div class="single-tags">
|
|
28
|
+
{{ range . }}<a href="{{ printf "tags/%s/" (. | urlize) | relURL }}" class="tag">{{ . }}</a>{{ end }}
|
|
29
|
+
</div>
|
|
30
|
+
{{ end -}}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{{- /*
|
|
2
|
+
Table of Contents partial.
|
|
3
|
+
|
|
4
|
+
Renders a sticky right-rail TOC on pages that have more than 3 H2
|
|
5
|
+
headings. We detect the threshold by grepping the raw content source
|
|
6
|
+
(`.RawContent`) for lines starting with "## " — this is faster and
|
|
7
|
+
more reliable than parsing the rendered HTML, and catches authored
|
|
8
|
+
headings regardless of markdown extensions that Hugo might apply.
|
|
9
|
+
|
|
10
|
+
The caller is responsible for:
|
|
11
|
+
- wrapping the page in a CSS grid when this partial renders
|
|
12
|
+
(see `.single.single-with-toc` in style.css)
|
|
13
|
+
- gating invocation with `partialCached` if desired
|
|
14
|
+
|
|
15
|
+
This partial prints nothing when the H2 count is 3 or less, so it's
|
|
16
|
+
safe to include unconditionally.
|
|
17
|
+
*/ -}}
|
|
18
|
+
|
|
19
|
+
{{- $raw := .RawContent | default "" -}}
|
|
20
|
+
{{- $h2Count := len (findRE `(?m)^##\s+\S` $raw) -}}
|
|
21
|
+
{{- if gt $h2Count 3 -}}
|
|
22
|
+
<aside class="toc" aria-label="Table of contents" data-pagefind-ignore>
|
|
23
|
+
<div class="toc-inner">
|
|
24
|
+
<p class="toc-label">On this page</p>
|
|
25
|
+
{{ .TableOfContents }}
|
|
26
|
+
</div>
|
|
27
|
+
</aside>
|
|
28
|
+
{{- end -}}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
{{- warnidf (printf "hero-banner-missing-%s" .name)
|
|
2
|
+
"hero-banner: no banner named %q in the shared artwork set; falling back to %s/%s. Draw it and add %q to data/banners.yaml, or name a hero image on the page — `data.banner` on a note, `banner:` on a hand-authored page. A blank `data.banner`, or `banner: none`, declines a hero image. First seen on %s."
|
|
3
|
+
.name .dir .fallback .name .context -}}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{{- /*
|
|
2
|
+
Cartouche shortcode — renders a named cartouche SVG as an ornamental
|
|
3
|
+
accent on culture-flavored pages. The canonical use is Kheperi
|
|
4
|
+
cartouches on Ta'Kheperu and Kemetian-pantheon pages, but the same
|
|
5
|
+
pipeline works for any "named seal" SVG.
|
|
6
|
+
|
|
7
|
+
Usage (shown with plain angle brackets so the Go template parser
|
|
8
|
+
doesn't try to close this comment). Hugo forbids MIXING positional
|
|
9
|
+
and named parameters in one call, so pick a form per call:
|
|
10
|
+
|
|
11
|
+
{ {< cartouche "takheperu" >} } positional
|
|
12
|
+
{ {< cartouche slug="takheperu" >} } named, centered
|
|
13
|
+
{ {< cartouche slug="takheperu" align="right" >} } floated right
|
|
14
|
+
{ {< cartouche slug="ra" size="inline" >} } inline
|
|
15
|
+
{ {< cartouche slug="anubis" caption="Anpu" >} } figure + caption
|
|
16
|
+
|
|
17
|
+
Parameters (all optional except slug):
|
|
18
|
+
slug - The cartouche SVG basename. May also be passed positionally
|
|
19
|
+
(as the first positional argument) when no other params
|
|
20
|
+
are needed — Hugo disallows mixing the two styles.
|
|
21
|
+
size - "inline" to flow with text. Otherwise block-level.
|
|
22
|
+
align - "left" or "right" to float so prose wraps. Default centered.
|
|
23
|
+
height - CSS length override for the cartouche's height, e.g.
|
|
24
|
+
"10rem" or "160px". Default comes from .cartouche CSS
|
|
25
|
+
(13rem block, 9rem floated). Width scales from aspect ratio.
|
|
26
|
+
alt - Override screen-reader text. Defaults to humanized slug.
|
|
27
|
+
caption - Optional figcaption (block mode only).
|
|
28
|
+
|
|
29
|
+
SVG is expected at /static/img/cartouches/<slug>.svg. Design note:
|
|
30
|
+
cartouche SVGs should draw with stroke="currentColor" and fill="none"
|
|
31
|
+
(or a hard-coded brand color) so they tint cleanly against any
|
|
32
|
+
background.
|
|
33
|
+
*/ -}}
|
|
34
|
+
{{- /* Accept slug as either the first positional arg or the named
|
|
35
|
+
"slug" parameter, so a caller can pick the style that fits the
|
|
36
|
+
rest of their arguments. */ -}}
|
|
37
|
+
{{- $slug := .Get "slug" -}}
|
|
38
|
+
{{- if not $slug }}{{ $slug = .Get 0 }}{{ end -}}
|
|
39
|
+
{{- if not $slug -}}
|
|
40
|
+
{{- errorf "cartouche shortcode at %s needs a slug (positional arg 0 or slug=\"…\")" .Position -}}
|
|
41
|
+
{{- end -}}
|
|
42
|
+
{{- $altDefault := humanize (replace $slug "-" " ") | title -}}
|
|
43
|
+
{{- $alt := .Get "alt" | default $altDefault -}}
|
|
44
|
+
{{- $size := .Get "size" | default "" -}}
|
|
45
|
+
{{- $align := .Get "align" | default "" -}}
|
|
46
|
+
{{- $cap := .Get "caption" | default "" -}}
|
|
47
|
+
{{- $height := .Get "height" | default "" -}}
|
|
48
|
+
{{- $src := printf "img/cartouches/%s.svg" $slug | relURL -}}
|
|
49
|
+
{{- $classes := slice "cartouche" -}}
|
|
50
|
+
{{- with $size }}{{ $classes = $classes | append (printf "cartouche-%s" .) }}{{ end -}}
|
|
51
|
+
{{- with $align }}{{ $classes = $classes | append (printf "cartouche-%s" .) }}{{ end -}}
|
|
52
|
+
{{- $class := delimit $classes " " -}}
|
|
53
|
+
{{- /* When `height` is given, apply it as an inline style directly on
|
|
54
|
+
the <img>. Inline styles on the target element are unambiguous —
|
|
55
|
+
they trump any .cartouche img CSS rule on specificity and don't
|
|
56
|
+
depend on custom-property inheritance. */ -}}
|
|
57
|
+
{{- if eq $size "inline" -}}
|
|
58
|
+
<span class="{{ $class }}"><img src="{{ $src }}" alt="{{ $alt }}" loading="lazy"{{ with $height }} style="height: {{ . }}; width: auto; max-width: none;"{{ end }} /></span>
|
|
59
|
+
{{- else -}}
|
|
60
|
+
<figure class="{{ $class }}">
|
|
61
|
+
<img src="{{ $src }}" alt="{{ $alt }}" loading="lazy"{{ with $height }} style="height: {{ . }}; width: auto; max-width: none;"{{ end }} />
|
|
62
|
+
{{- with $cap }}<figcaption>{{ . }}</figcaption>{{ end }}
|
|
63
|
+
</figure>
|
|
64
|
+
{{- end -}}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<span class="exturl">
|
|
2
|
+
<code class="exturl-text">{{ .Get 0 }}</code>
|
|
3
|
+
<button class="exturl-copy" onclick="navigator.clipboard.writeText('{{ .Get 0 }}').then(()=>{const b=this;b.classList.add('copied');setTimeout(()=>b.classList.remove('copied'),1500)})" title="Copy URL to clipboard" aria-label="Copy URL to clipboard">
|
|
4
|
+
<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">
|
|
5
|
+
<rect x="9" y="9" width="13" height="13" rx="2" ry="2"/>
|
|
6
|
+
<path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/>
|
|
7
|
+
</svg>
|
|
8
|
+
<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">
|
|
9
|
+
<polyline points="20 6 9 17 4 12"/>
|
|
10
|
+
</svg>
|
|
11
|
+
</button>
|
|
12
|
+
</span>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{{- /*
|
|
2
|
+
Glyph shortcode — renders a hieroglyphic deity-name cluster (or any
|
|
3
|
+
"icon-scale" SVG) from the project CDN. Parallel to cartouche.html
|
|
4
|
+
but for smaller, non-royal glyph groups: Kemetían deity names,
|
|
5
|
+
category icons, ornamental marks, etc.
|
|
6
|
+
|
|
7
|
+
Usage (Hugo disallows mixing positional and named params in one
|
|
8
|
+
call; pick a form per call):
|
|
9
|
+
|
|
10
|
+
{ {< glyph "anubis" >} } inline, plain
|
|
11
|
+
{ {< glyph slug="anubis" >} } same, named form
|
|
12
|
+
{ {< glyph slug="anubis" frame="tablet" >} } inside stone tablet
|
|
13
|
+
{ {< glyph slug="ra" size="inline" >} } scales with text
|
|
14
|
+
{ {< glyph slug="ra" size="block" >} } centered block
|
|
15
|
+
{ {< glyph slug="ra" alt="Sun god Ra" >} } override alt text
|
|
16
|
+
|
|
17
|
+
Parameters (all optional except slug):
|
|
18
|
+
slug - Filename (without .svg). Passed positionally or as slug=.
|
|
19
|
+
frame - "tablet" wraps in a limestone rectangular frame (good for
|
|
20
|
+
catalog layouts like the pantheon table where visual
|
|
21
|
+
parallelism across rows matters more than intrinsic width).
|
|
22
|
+
size - "inline" (small, flows with text), "block" (centered
|
|
23
|
+
standalone). Default sits at 1.8em height.
|
|
24
|
+
alt - Screen-reader text. Defaults to humanized slug.
|
|
25
|
+
|
|
26
|
+
SVG source: icons/<slug>.svg, resolved against the consuming site's
|
|
27
|
+
`params.cdnBaseURL` — the theme names no host of its own.
|
|
28
|
+
*/ -}}
|
|
29
|
+
{{- $slug := .Get "slug" -}}
|
|
30
|
+
{{- if not $slug }}{{ $slug = .Get 0 }}{{ end -}}
|
|
31
|
+
{{- if not $slug -}}
|
|
32
|
+
{{- errorf "glyph shortcode at %s needs a slug (positional arg 0 or slug=\"…\")" .Position -}}
|
|
33
|
+
{{- end -}}
|
|
34
|
+
{{- $altDefault := humanize (replace $slug "-" " ") | title -}}
|
|
35
|
+
{{- $alt := .Get "alt" | default $altDefault -}}
|
|
36
|
+
{{- $frame := .Get "frame" | default "" -}}
|
|
37
|
+
{{- $size := .Get "size" | default "" -}}
|
|
38
|
+
{{- $src := partial "cdn-url.html" (dict "site" .Site "path" (printf "icons/%s.svg" $slug)) -}}
|
|
39
|
+
{{- $classes := slice "glyph" -}}
|
|
40
|
+
{{- with $frame }}{{ $classes = $classes | append (printf "glyph-%s" .) }}{{ end -}}
|
|
41
|
+
{{- with $size }}{{ $classes = $classes | append (printf "glyph-%s" .) }}{{ end -}}
|
|
42
|
+
{{- $class := delimit $classes " " -}}
|
|
43
|
+
<span class="{{ $class }}"><img src="{{ $src }}" alt="{{ $alt }}" loading="lazy" /></span>
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{{- /*
|
|
2
|
+
pagelist — the pages carrying a tag, as a plain list.
|
|
3
|
+
|
|
4
|
+
Curated landings are the right front door, but hand-enumerated link lists
|
|
5
|
+
drift: a page gets added and nobody updates the index. This expresses a group
|
|
6
|
+
by INTENT instead. Tag a page and it files itself; untag it and it leaves.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
|
|
10
|
+
{ {< pagelist tag="key-concept" >} } every tagged page
|
|
11
|
+
{ {< pagelist tag="key-concept" section="rules" >} } restricted to a section
|
|
12
|
+
{ {< pagelist tag="key-concept" sort="weight" >} } title (default) | weight | date
|
|
13
|
+
{ {< pagelist tag="key-concept" desc="true" >} } include page descriptions
|
|
14
|
+
|
|
15
|
+
Parameters:
|
|
16
|
+
tag - (required) taxonomy term. Matched case-insensitively.
|
|
17
|
+
section - (optional) restrict to one top-level section, e.g. "rules".
|
|
18
|
+
sort - (optional) "title" (default), "weight", or "date" (newest first).
|
|
19
|
+
desc - (optional) "true" to show each page's description beneath it.
|
|
20
|
+
|
|
21
|
+
An unknown or empty tag warns at build time rather than rendering nothing
|
|
22
|
+
silently — a typo in a tag is exactly the drift this is meant to prevent.
|
|
23
|
+
*/ -}}
|
|
24
|
+
{{- $tag := .Get "tag" -}}
|
|
25
|
+
{{- if not $tag }}{{ $tag = .Get 0 }}{{ end -}}
|
|
26
|
+
{{- if not $tag -}}
|
|
27
|
+
{{- errorf "pagelist shortcode at %s needs a tag (tag=\"…\" or positional arg 0)" .Position -}}
|
|
28
|
+
{{- end -}}
|
|
29
|
+
|
|
30
|
+
{{- $term := $tag | urlize -}}
|
|
31
|
+
{{- $pages := slice -}}
|
|
32
|
+
{{- with index .Site.Taxonomies.tags $term -}}
|
|
33
|
+
{{- $pages = .Pages -}}
|
|
34
|
+
{{- end -}}
|
|
35
|
+
|
|
36
|
+
{{- with $.Get "section" -}}
|
|
37
|
+
{{- $sec := . -}}
|
|
38
|
+
{{- $pages = where $pages "Section" $sec -}}
|
|
39
|
+
{{- end -}}
|
|
40
|
+
|
|
41
|
+
{{- $sort := $.Get "sort" | default "title" -}}
|
|
42
|
+
{{- if eq $sort "weight" -}}
|
|
43
|
+
{{- $pages = sort $pages "Weight" -}}
|
|
44
|
+
{{- else if eq $sort "date" -}}
|
|
45
|
+
{{- $pages = sort $pages "Date" "desc" -}}
|
|
46
|
+
{{- else -}}
|
|
47
|
+
{{- $pages = sort $pages "Title" -}}
|
|
48
|
+
{{- end -}}
|
|
49
|
+
|
|
50
|
+
{{- if not $pages -}}
|
|
51
|
+
{{- warnf "pagelist at %s: no pages carry the tag %q — check the spelling, or tag some pages." $.Position $tag -}}
|
|
52
|
+
{{- else -}}
|
|
53
|
+
<ul class="page-list pagelist">
|
|
54
|
+
{{- range $pages }}
|
|
55
|
+
<li class="page-list-item">
|
|
56
|
+
<a class="page-list-title" href="{{ .RelPermalink }}">{{ .Title }}</a>
|
|
57
|
+
{{- if and (eq ($.Get "desc") "true") .Description }}
|
|
58
|
+
<span class="page-list-desc">{{ .Description }}</span>
|
|
59
|
+
{{- end }}
|
|
60
|
+
</li>
|
|
61
|
+
{{- end }}
|
|
62
|
+
</ul>
|
|
63
|
+
{{- end -}}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* SoHL icon glyphs for the knowledgebase.
|
|
3
|
+
* AUTO-GENERATED by the SoHL repo (utils/build-kb-icon-assets.mjs) — do not edit
|
|
4
|
+
* by hand. Regenerate with `npm run build:kb-icons` and copy both files across.
|
|
5
|
+
*
|
|
6
|
+
* Contains only the 12 game-icons glyph(s) the published docs use.
|
|
7
|
+
* Font Awesome is loaded separately (its free set, from a CDN).
|
|
8
|
+
*
|
|
9
|
+
* Game-Icons.net artwork is CC BY 3.0 (CC0 for Viscious Speed and Zeromancer);
|
|
10
|
+
* per-author credit lives in the SoHL repo at
|
|
11
|
+
* assets/icons/game-icons/ATTRIBUTION.md.
|
|
12
|
+
*/
|
|
13
|
+
@font-face {
|
|
14
|
+
font-display: block;
|
|
15
|
+
font-family: "game-icons.net";
|
|
16
|
+
font-style: normal;
|
|
17
|
+
font-weight: 400;
|
|
18
|
+
src: url("../fonts/game-icons-kb.woff2") format("woff2");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
[class^="ginf-"],
|
|
22
|
+
[class*=" ginf-"] {
|
|
23
|
+
display: inline-flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
justify-content: center;
|
|
26
|
+
width: 1.25em;
|
|
27
|
+
height: 1em;
|
|
28
|
+
line-height: 1;
|
|
29
|
+
vertical-align: -0.30em;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
[class^="ginf-"]::before,
|
|
33
|
+
[class*=" ginf-"]::before {
|
|
34
|
+
font-family: "game-icons.net" !important;
|
|
35
|
+
font-style: normal;
|
|
36
|
+
font-weight: normal;
|
|
37
|
+
font-variant: normal;
|
|
38
|
+
text-transform: none;
|
|
39
|
+
line-height: 1;
|
|
40
|
+
font-size: 1.4em;
|
|
41
|
+
speak: never;
|
|
42
|
+
-webkit-font-smoothing: antialiased;
|
|
43
|
+
-moz-osx-font-smoothing: grayscale;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.ginf-bow-arrow::before { content: "\e219"; }
|
|
47
|
+
.ginf-broadsword::before { content: "\e248"; }
|
|
48
|
+
.ginf-chest::before { content: "\e358"; }
|
|
49
|
+
.ginf-crossed-swords::before { content: "\e418"; }
|
|
50
|
+
.ginf-heart-beats::before { content: "\e736"; }
|
|
51
|
+
.ginf-knapsack::before { content: "\e83e"; }
|
|
52
|
+
.ginf-knockout::before { content: "\e847"; }
|
|
53
|
+
.ginf-old-wagon::before { content: "\ea18"; }
|
|
54
|
+
.ginf-screaming::before { content: "\ec38"; }
|
|
55
|
+
.ginf-skills::before { content: "\ecc3"; }
|
|
56
|
+
.ginf-sparkles::before { content: "\ed32"; }
|
|
57
|
+
.ginf-stockpiles::before { content: "\edd3"; }
|