Compare commits

...

22 Commits

Author SHA1 Message Date
b1b5408301 Pull more text into translation
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-05-19 17:55:22 -07:00
d206ed9f3e Bump Hugo version
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-05-19 17:06:39 -07:00
3da5952b87 Move bergamot and writing CSS into theme
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-05-18 22:11:09 -07:00
28e3b5e1cf Fix typo
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-05-18 22:10:36 -07:00
0d1e2e80eb Add fingerprinting and integrity checks to generated HTML
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-05-18 21:28:38 -07:00
19550ef1b2 Use Hugo's partial-returning where possible
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-05-18 21:15:19 -07:00
2032e1cdc2 Update theme with .Scratch -> .Store deprecation
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-05-18 21:05:45 -07:00
20217e0b97 Update for new Hugo versions
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-05-12 19:43:12 -07:00
0fa8fb35ec Update banner source
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-05-12 19:33:02 -07:00
6b178bebcb Add canonical URLs
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-05-06 18:57:05 -07:00
ea33963a77 Enable OpenGraph / Twitter data generation
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-05-06 18:54:31 -07:00
a5bb7577f3 Add default banner image
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-05-06 18:54:12 -07:00
676ea50de8 Switch to HTTPs for assets
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-05-06 18:53:36 -07:00
3b8d6c894a Tweaks to work with latest Hugo version
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-05-06 17:20:56 -07:00
cb73f4e7a5 Move custom_css into writing template only. 2026-04-19 00:36:18 -07:00
7d26aeff65 Make writing CSS precede per-page custom CSS.
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-04-19 00:26:06 -07:00
a70cc32441 Enable custom CSS and bring in writing layout from blog.
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-04-19 00:22:47 -07:00
3937ed4172 Do not unique-by-series when a flag is set
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-04-05 16:18:12 -07:00
5e84ea2a06 Make some fixes to broken visuals
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-04-05 16:02:09 -07:00
312d0d37c6 Fix CSS issue with tags
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-03-22 01:30:42 -05:00
5460d759b0 Add fallbacks for system fonts to reduce layout shift.
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-01-03 18:08:15 -08:00
54e942c85f Add 'needs LaTeX' meta for pages where LaTeX is needed for Bergamot
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
2026-01-03 16:34:22 -08:00
72 changed files with 662 additions and 140 deletions

174
assets/scss/bergamot.scss Normal file
View File

@@ -0,0 +1,174 @@
@import "variables.scss";
@import "mixins.scss";
.bergamot-exercise {
counter-increment: bergamot-exercise;
.bergamot-root {
border: none;
padding: 0;
margin-top: 1em;
}
.bergamot-exercise-label {
.bergamot-exercise-number::after {
content: "Exercise " counter(bergamot-exercise);
font-weight: bold;
text-decoration: underline;
}
}
.bergamot-button {
@include bordered-block;
padding: 0.25em;
padding-left: 1em;
padding-right: 1em;
background-color: inherit;
display: inline-flex;
align-items: center;
justify-content: center;
transition: 0.25s;
font-family: $font-body;
@include var(color, text-color);
&.bergamot-hidden {
display: none;
}
.feather {
margin-right: 0.5em;
}
}
.bergamot-play {
.feather { color: $primary-color; }
&:hover, &:focus {
.feather { color: lighten($primary-color, 20%); }
}
}
.bergamot-reset {
.feather { color: #0099CC; }
&:hover, &:focus {
.feather { color: lighten(#0099CC, 20%); }
}
svg {
fill: none;
}
}
.bergamot-close {
.feather { color: tomato; }
&:hover, &:focus {
.feather { color: lighten(tomato, 20%); }
}
}
.bergamot-button-group {
margin-top: 1em;
}
}
.bergamot-root {
@include bordered-block;
padding: 1em;
.bergamot-section-heading {
margin-bottom: 0.5em;
font-family: $font-body;
font-style: normal;
font-weight: bold;
font-size: 1.25em;
}
.bergamot-section {
margin-bottom: 1em;
}
textarea {
display: block;
width: 100%;
height: 10em;
resize: none;
}
input[type="text"] {
width: 100%;
@include textual-input;
}
.bergamot-rule-list {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
}
.bergamot-rule-list katex-expression {
margin-left: .5em;
margin-right: .5em;
flex-grow: 1;
flex-basis: 0;
}
.bergamot-rule-section {
.bergamot-rule-section-name {
text-align: center;
margin: 0.25em;
font-weight: bold;
}
}
.bergamot-proof-tree {
overflow: auto;
}
.bergamot-error {
@include bordered-block;
padding: 0.5rem;
border-color: tomato;
background-color: rgba(tomato, 0.25);
margin-top: 1rem;
}
.bergamot-selector {
button {
@include var(background-color, background-color);
@include var(color, text-color);
@include bordered-block;
padding: 0.5rem;
font-family: $font-body;
border-style: dotted;
&.active {
border-color: $primary-color;
border-style: solid;
font-weight: bold;
}
&:not(:first-child) {
border-bottom-left-radius: 0;
border-top-left-radius: 0;
}
&:not(:last-child) {
border-bottom-right-radius: 0;
border-top-right-radius: 0;
border-right-width: 0;
}
}
button.active + button {
border-left-color: $primary-color;
border-left-style: solid;
}
margin-bottom: 1rem;
}
.bergamot-no-proofs {
text-align: center;
}
}

View File

@@ -43,3 +43,23 @@
@include font-raleway(400); @include font-raleway(400);
@include font-raleway(700); @include font-raleway(700);
@include font-stixgeneral(); @include font-stixgeneral();
/* Generated from chatgpt-adjust-fallback.py */
@font-face {
font-family: "Raleway Fallback";
src: local("Arial");
size-adjust: 100.09%;
ascent-override: 94.00%;
descent-override: 23.40%;
line-gap-override: 0.00%;
}
@font-face {
font-family: "Lora Fallback";
src: local("Times New Roman");
size-adjust: 111.79%;
ascent-override: 100.60%;
descent-override: 27.40%;
line-gap-override: 0.00%;
}

View File

@@ -67,12 +67,20 @@ p {
} }
} }
.button, input[type="submit"] { .tag-list {
display: flex;
flex-wrap: wrap;
gap: 0.5rem 0.25rem;
justify-content: center;
}
.tag {
@include var(color, text-color); @include var(color, text-color);
padding: 0.5rem; padding: 0.5rem;
border: 1px solid $primary-color; border: 1px solid $primary-color;
transition: color 0.25s, background-color 0.25s; transition: color 0.25s, background-color 0.25s;
text-align: left; text-align: left;
display: block;
&:focus { &:focus {
outline: none; outline: none;

View File

@@ -9,8 +9,8 @@ $background-color-dark: #1b1d1f;
$standard-border-width: .075rem; $standard-border-width: .075rem;
$standard-border: $standard-border-width solid $border-color; $standard-border: $standard-border-width solid $border-color;
$font-heading: "Lora", serif; $font-heading: "Lora", "Lora Fallback", serif;
$font-body: "Raleway", serif; $font-body: "Raleway", "Raleway Fallback", sans-serif;
$font-code: "Inconsolata", monospace, "STIXGeneral"; $font-code: "Inconsolata", monospace, "STIXGeneral";
$warning-background-color: #ffee99; $warning-background-color: #ffee99;

47
assets/scss/writing.scss Normal file
View File

@@ -0,0 +1,47 @@
@import "variables.scss";
body {
background-color: #1c1e26;
--text-color: white;
font-family: $font-code;
}
h1, h2, h3, h4, h5, h6 {
text-align: left;
font-family: $font-code;
}
h1::after {
content: "(writing)";
font-size: 1rem;
margin-left: 0.5em;
position: relative;
bottom: -0.5em;
color: $primary-color;
}
nav .container {
justify-content: flex-start;
a {
padding-left: 0;
margin-right: 1em;
}
}
.header-divider {
visibility: hidden;
}
hr {
height: auto;
border: none;
&::after {
content: "* * *";
color: $primary-color;
font-size: 2rem;
display: block;
text-align: center;
}
}

115
banner.svg Normal file
View File

@@ -0,0 +1,115 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="297mm"
height="210mm"
viewBox="0 0 297 210"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940, 2025-05-08)"
sodipodi:docname="banner.svg"
inkscape:export-filename="banner-source.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="1.7079029"
inkscape:cx="501.78498"
inkscape:cy="465.77591"
inkscape:window-width="1728"
inkscape:window-height="996"
inkscape:window-x="0"
inkscape:window-y="38"
inkscape:window-maximized="1"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:export-bgcolor="#ffffffff" />
<defs
id="defs1">
<rect
x="49.549049"
y="153.15161"
width="826.85009"
height="237.77854"
id="rect8" />
<rect
x="49.549049"
y="111.10999"
width="678.67182"
height="524.01873"
id="rect7" />
<rect
x="244.20348"
y="346.16049"
width="287.95187"
height="438.00638"
id="rect4" />
<rect
x="244.20348"
y="346.16049"
width="414.25137"
height="418.77991"
id="rect4-6" />
<rect
x="244.20348"
y="346.16049"
width="414.25137"
height="418.77991"
id="rect4-6-1" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<circle
style="fill:#36e281;fill-opacity:1;stroke:#36e281;stroke-width:4.33532;stroke-dasharray:none;stroke-opacity:1"
id="path3"
cy="91.614052"
cx="148.5"
r="36.96402" />
<path
id="path3-3-6"
style="fill:#ffffff;stroke:#36e281;stroke-width:4.33532;stroke-dasharray:none;stroke-opacity:1;stroke-linecap:round"
d="m 148.49869,128.57807 c -13.20597,0 -25.40879,-7.0453 -32.01177,-18.48201 -6.60299,-11.436707 -6.60299,-25.527312 0,-36.964017 6.60298,-11.436705 18.8058,-18.482007 32.01177,-18.482007"
sodipodi:nodetypes="cssc" />
<text
xml:space="preserve"
transform="matrix(-0.15711337,0,0,0.19685436,189.77821,-5.4885608)"
id="text4-3"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:253.455px;font-family:Helvetica;-inkscape-font-specification:'Helvetica Bold';text-align:start;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect4-6);display:inline;fill:#36e281;fill-opacity:1;stroke:#36e281;stroke-width:1.37953;stroke-opacity:1"><tspan
x="244.20312"
y="584.4805"
id="tspan5">D</tspan></text>
<text
xml:space="preserve"
transform="matrix(0.15711337,0,0,0.19685436,107.21917,-5.5129228)"
id="text4-3-2"
style="font-size:253.455px;text-align:start;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect4-6-1);display:inline;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.37953;stroke-opacity:1"><tspan
x="244.20312"
y="584.4805"
id="tspan7"><tspan
style="font-weight:bold;font-family:Helvetica;-inkscape-font-specification:'Helvetica Bold'"
id="tspan6">F</tspan></tspan></text>
<text
xml:space="preserve"
transform="matrix(0.19664896,0,0,0.19664896,73.930049,102.60811)"
id="text8"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:106.667px;font-family:Lora;-inkscape-font-specification:'Lora Bold';text-align:start;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect8);display:inline;fill:#1a1a1a;fill-opacity:1;stroke:none;stroke-width:22.046"><tspan
x="49.548828"
y="250.31931"
id="tspan8">Daniel's Blog</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@@ -0,0 +1,90 @@
"""
Generate @font-face settings to help make the fallback font look similar
to the non-fallback font.
Genererated by ChatGTP 5.2-instant. Not human-modified.
"""
from fontTools.ttLib import TTFont
USE_TYPO_METRICS = 1 << 7
def get_metrics(path):
font = TTFont(path)
head = font["head"]
os2 = font["OS/2"]
hhea = font["hhea"]
use_typo = bool(os2.fsSelection & USE_TYPO_METRICS)
if use_typo:
asc = os2.sTypoAscender
desc = os2.sTypoDescender
gap = os2.sTypoLineGap
source = "OS/2.sTypo*"
else:
asc = hhea.ascent
desc = -hhea.descent
gap = hhea.lineGap
source = "hhea.*"
# x-height ALWAYS comes from OS/2
if not hasattr(os2, "sxHeight") or os2.sxHeight <= 0:
raise ValueError(f"{path} has no usable sxHeight")
x_height = os2.sxHeight
print("Source", path, source)
return {
"unitsPerEm": head.unitsPerEm,
"ascender": asc,
"descender": desc,
"lineGap": gap,
"xHeight": x_height,
}
def compute_overrides(target, fallback):
# size-adjust: match x-height
size_adjust = (
(target["xHeight"] / target["unitsPerEm"]) /
(fallback["xHeight"] / fallback["unitsPerEm"])
)
# overrides: force target vertical metrics
ascent_override = target["ascender"] / target["unitsPerEm"]
descent_override = abs(target["descender"]) / target["unitsPerEm"]
line_gap_override = target["lineGap"] / target["unitsPerEm"]
return {
"size_adjust": size_adjust * 100,
"ascent_override": ascent_override * 100,
"descent_override": descent_override * 100,
"line_gap_override": line_gap_override * 100,
}
def emit_css(family_name, local_name, values):
return f"""
@font-face {{
font-family: "{family_name}";
src: local("{local_name}");
size-adjust: {values['size_adjust']:.2f}%;
ascent-override: {values['ascent_override']:.2f}%;
descent-override: {values['descent_override']:.2f}%;
line-gap-override: {values['line_gap_override']:.2f}%;
}}
""".strip()
# ---- Example usage ----
target = get_metrics("static/fonts/gen/Lora-Regular.woff2")
fallback = get_metrics("/System/Library/Fonts/Supplemental/Times New Roman.ttf")
values = compute_overrides(target, fallback)
print(emit_css(
family_name="Lora Fallback",
local_name="Times New Roman",
values=values,
))

View File

@@ -1,7 +1,8 @@
[params] [params]
katexCssUrl = "//static.danilafe.com/katex/katex.min.css" katexCssUrl = "https://static.danilafe.com/katex/katex.min.css"
katexJsUrl = "//static.danilafe.com/katex/katex.min.js" katexJsUrl = "https://static.danilafe.com/katex/katex.min.js"
normalizeCssUrl = "//static.danilafe.com/normalize/normalize.css" normalizeCssUrl = "https://static.danilafe.com/normalize/normalize.css"
visNetworkJsUrl = "//static.danilafe.com/vis-network/vis-network.min.js" visNetworkJsUrl = "https://static.danilafe.com/vis-network/vis-network.min.js"
bergamotJsUrl = "//static.danilafe.com/bergamot/bergamot.js" bergamotJsUrl = "https://static.danilafe.com/bergamot/bergamot.js"
bergamotObjectLanguageJsUrl = "//static.danilafe.com/bergamot/objectlang.js" bergamotObjectLanguageJsUrl = "https://static.danilafe.com/bergamot/objectlang.js"
images = ["banner.png"]

View File

@@ -77,3 +77,30 @@
[ongoingSeries] [ongoingSeries]
other = "Ongoing" other = "Ongoing"
[nextInSeries]
other = "Next in Series"
[previousInSeries]
other = "Previous in Series"
[comingSoon]
other = "Coming soon!"
[startBergamot]
other = "Start Bergamot"
[closeBergamot]
other = "Close Bergamot"
[lineX]
other = ", line {{ . }}"
[aroundLineX]
other = ", around line {{ . }}"
[linesXThroughY]
other = ", lines {{ .from }} through {{ .to }}"
[entireFile]
other = ", entire file"

View File

@@ -1,4 +1,4 @@
{{- .Page.Scratch.SetInMap "definedSections" (printf "#%s" .Anchor) true -}} {{- .Page.Store.SetInMap "definedSections" (printf "#%s" .Anchor) true -}}
<a href="#{{ .Anchor }}"> <a href="#{{ .Anchor }}">
<h{{ .Level }} id="{{ .Anchor }}"> <h{{ .Level }} id="{{ .Anchor }}">
{{- .Text | safeHTML -}} {{- .Text | safeHTML -}}

View File

@@ -7,7 +7,7 @@
{{- if $isSamePage -}} {{- if $isSamePage -}}
{{- $class = "same-page-link" -}} {{- $class = "same-page-link" -}}
{{- if index (.Page.Scratch.Get "definedSections") .Destination -}} {{- if index (.Page.Store.Get "definedSections") .Destination -}}
{{- $icon = "arrow-up" -}} {{- $icon = "arrow-up" -}}
{{- else -}} {{- else -}}
{{- /* Do not render "down" links because don't know how to distinguish unseen titles from paragraph links. */ -}} {{- /* Do not render "down" links because don't know how to distinguish unseen titles from paragraph links. */ -}}

View File

@@ -11,7 +11,7 @@
{{ end }} {{ end }}
{{ end }} {{ end }}
{{ else }} {{ else }}
"Languge Term": { "custom": "Bergamot Object Language" }, "Language Term": { "custom": "Bergamot Object Language" },
"Query": "query", "Query": "query",
{{ end }} {{ end }}
} }

View File

@@ -0,0 +1,2 @@
<link rel="preload" href="{{ .url }}" as="style" onload="this.onload=null;this.rel='stylesheet'"{{ with .integrity }} integrity="{{ . }}"{{ end }}{{ with .extra }} {{ . | safeHTMLAttr }}{{ end }}>
<noscript><link rel="stylesheet" href="{{ .url }}"{{ with .integrity }} integrity="{{ . }}"{{ end }}></noscript>

View File

@@ -0,0 +1,26 @@
{{- $siteSourceUrl := site.Params.siteSourceUrl -}}
{{- $submoduleLinks := hugo.Data.submodules -}}
{{- $hostData := hugo.Data.hosts -}}
{{- $lines := .lines -}}
{{- $bestLength := -1 -}}
{{- $bestUrl := printf "%s/code/%s" $siteSourceUrl .path -}}
{{- $bestPath := "" -}}
{{- $filePath := .path -}}
{{- range $path, $url := $submoduleLinks -}}
{{- if and (le $bestLength (len $path)) (hasPrefix $filePath $path) -}}
{{- $bestLength = len $path -}}
{{- $bestPath = $path -}}
{{- $bestUrl = printf "%s%s" $url (strings.TrimPrefix $path $filePath) -}}
{{- end -}}
{{- end -}}
{{- if .lines -}}
{{- /* If the user provided a line range, see if we can tack it on to the end of the link. */ -}}
{{- range $host, $data := $hostData -}}
{{- if hasPrefix $bestUrl $host -}}
{{- with $data.linesSuffix -}}
{{- $bestUrl = add $bestUrl (printf . (index $lines 0) (index $lines 1)) -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- return (dict "url" $bestUrl "basePath" $bestPath) -}}

View File

@@ -1,4 +1,3 @@
<head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#1dc868"> <meta name="theme-color" content="#1dc868">
@@ -15,8 +14,8 @@
<!-- Fonts --> <!-- Fonts -->
{{ if not (.Site.Params.noCss) }} {{ if not (.Site.Params.noCss) }}
{{ $fonts := resources.Get "scss/fonts.scss" | css.Sass | resources.Minify }} {{ $fonts := resources.Get "scss/fonts.scss" | css.Sass | resources.Minify | resources.Fingerprint }}
<link rel="stylesheet" href="{{ $fonts.Permalink }}" media="screen"> <link rel="stylesheet" href="{{ $fonts.Permalink }}" integrity="{{ $fonts.Data.Integrity }}" media="screen">
{{ end }} {{ end }}
<!-- External CSS (normalize and KaTeX --> <!-- External CSS (normalize and KaTeX -->
@@ -31,24 +30,32 @@
{{ end -}} {{ end -}}
<!-- In-house CSS --> <!-- In-house CSS -->
{{ $style := resources.Get "scss/style.scss" | css.Sass | resources.Minify }} {{ $style := resources.Get "scss/style.scss" | css.Sass | resources.Minify | resources.Fingerprint }}
{{ $sidenotes := resources.Get "scss/sidenotes.scss" | css.Sass | resources.Minify }} {{ $sidenotes := resources.Get "scss/sidenotes.scss" | css.Sass | resources.Minify | resources.Fingerprint }}
{{ $code := resources.Get "scss/code.scss" | css.Sass | resources.Minify }} {{ $code := resources.Get "scss/code.scss" | css.Sass | resources.Minify | resources.Fingerprint }}
{{ $icon := resources.Get "img/favicon.png" }} {{ $icon := resources.Get "img/favicon.png" | resources.Fingerprint }}
<style>.feather { display: inline !important; width: 10px; height: 10px; }</style> <style>.feather { display: inline !important; width: 10px; height: 10px; }</style>
<style>img { max-width: 70%; }</style> <style>img { max-width: 70%; }</style>
{{ if not (.Site.Params.noCss) }} {{ if not (.Site.Params.noCss) }}
<link rel="stylesheet" href="{{ $style.Permalink }}"> <link rel="stylesheet" href="{{ $style.Permalink }}" integrity="{{ $style.Data.Integrity }}">
{{ partial "defercss.html" (dict "url" $sidenotes.Permalink "extra" "") }} {{ partial "defercss.html" (dict "url" $sidenotes.Permalink "integrity" $sidenotes.Data.Integrity "extra" "") }}
{{ partial "defercss.html" (dict "url" $code.Permalink "extra" "") }} {{ partial "defercss.html" (dict "url" $code.Permalink "integrity" $code.Data.Integrity "extra" "") }}
{{ end }} {{ end }}
<link rel="icon" type="image/png" href="{{ $icon.Permalink }}"> <link rel="icon" type="image/png" href="{{ $icon.Permalink }}" integrity="{{ $icon.Data.Integrity }}">
{{ if .Params.custom_js }} {{ if .Params.custom_js }}
{{ range $customJs := .Params.custom_js }} {{ range $customJs := .Params.custom_js }}
<script src="{{ page.Resources.Get $customJs }}"></script> {{ with page.Resources.Get $customJs }}
{{ $customJsResource := . | resources.Fingerprint }}
<script src="{{ $customJsResource.Permalink }}" integrity="{{ $customJsResource.Data.Integrity }}"></script>
{{ end }} {{ end }}
{{ end }} {{ end }}
{{ end }}
{{ partial "opengraph.html" . }}
{{ partial "twitter_cards.html" . }}
<link rel="canonical" href="{{ .Permalink }}">
{{ if hugo.IsServer }} {{ if hugo.IsServer }}
<!-- KaTeX auto-rendering for when we don't have a post-processing step. --> <!-- KaTeX auto-rendering for when we don't have a post-processing step. -->
@@ -58,16 +65,18 @@
{{ end }} {{ end }}
{{ if .Params.bergamot }} {{ if .Params.bergamot }}
<!-- Ensure later scripts keep the KaTeX CSS even if the page has no LaTeX !-->
<meta name="needs-latex">
<!-- Code to support the Bergamot JS widget --> <!-- Code to support the Bergamot JS widget -->
<script defer src="{{ .Site.Params.katexJsUrl }}" crossorigin="anonymous"></script> <script defer src="{{ .Site.Params.katexJsUrl }}" crossorigin="anonymous"></script>
{{ $katexComponentJs := resources.Get "js/katex-component.js" | resources.Minify }} {{ $katexComponentJs := resources.Get "js/katex-component.js" | resources.Minify | resources.Fingerprint }}
<script defer src="{{ $katexComponentJs.Permalink }}"></script> <script defer src="{{ $katexComponentJs.Permalink }}" integrity="{{ $katexComponentJs.Data.Integrity }}"></script>
<script defer src="{{ .Site.Params.bergamotJsUrl }}"></script> <script defer src="{{ .Site.Params.bergamotJsUrl }}"></script>
<script defer src="{{ .Site.Params.bergamotObjectLanguageJsUrl }}"></script> <script defer src="{{ .Site.Params.bergamotObjectLanguageJsUrl }}"></script>
{{ $bergamotHelpers := resources.Get "js/bergamot-helpers.js" | resources.Minify }} {{ $bergamotHelpers := resources.Get "js/bergamot-helpers.js" | resources.Minify | resources.Fingerprint }}
<script defer src="{{ $bergamotHelpers.Permalink }}"></script> <script defer src="{{ $bergamotHelpers.Permalink }}" integrity="{{ $bergamotHelpers.Data.Integrity }}"></script>
{{ $bergamotStyle := resources.Get "scss/bergamot.scss" | css.Sass | resources.Minify }} {{ $bergamotStyle := resources.Get "scss/bergamot.scss" | css.Sass | resources.Minify | resources.Fingerprint }}
{{ partial "defercss.html" (dict "url" $bergamotStyle.Permalink "extra" "") }} {{ partial "defercss.html" (dict "url" $bergamotStyle.Permalink "integrity" $bergamotStyle.Data.Integrity "extra" "") }}
{{ if .Params.bergamot.render_presets }} {{ if .Params.bergamot.render_presets }}
{{ range $name, $rulefile := .Params.bergamot.render_presets }} {{ range $name, $rulefile := .Params.bergamot.render_presets }}
{{ $file := default (resources.Get $rulefile) (page.Resources.Get $rulefile) }} {{ $file := default (resources.Get $rulefile) (page.Resources.Get $rulefile) }}
@@ -96,4 +105,3 @@
{{ end }} {{ end }}
<title>{{ .Title }}</title> <title>{{ .Title }}</title>
</head>

View File

Before

Width:  |  Height:  |  Size: 164 B

After

Width:  |  Height:  |  Size: 164 B

View File

@@ -0,0 +1,9 @@
{{- $comment := "" -}}
{{- if eq .from .to -}}
{{- $comment = i18n "lineX" .to -}}
{{- else if eq .from 0 -}}
{{- $comment = i18n "aroundLineX" .to -}}
{{- else -}}
{{- $comment = i18n "linesXThroughY" . -}}
{{- end -}}
{{- return $comment -}}

View File

@@ -1,8 +1,8 @@
{{- $term := index (.page.GetTerms "series") 0 -}} {{- $term := index (.page.GetTerms "series") 0 -}}
{{- $divider := $term.Params.divider -}} {{- $divider := $term.Params.divider -}}
{{- $name := .page.Title -}}
{{- if (and $divider (strings.Contains .page.Title $divider)) -}} {{- if (and $divider (strings.Contains .page.Title $divider)) -}}
{{- $rest := after 1 (split .page.Title $divider) -}} {{- $rest := after 1 (split .page.Title $divider) -}}
{{- .scratch.Set "name" (delimit $rest $divider) -}} {{- $name = delimit $rest $divider -}}
{{- else -}}
{{- .scratch.Set "name" .page.Title -}}
{{- end -}} {{- end -}}
{{- return $name -}}

View File

@@ -1,11 +1,9 @@
<li> <li>
{{- $scratch := newScratch -}} {{- $name := .page.Title -}}
{{- if .seriesName -}} {{- if .seriesName -}}
{{- partial "nameinseries" (dict "page" .page "scratch" $scratch) -}} {{- $name = partial "nameinseries" (dict "page" .page) -}}
{{- else -}}
{{- $scratch.Set "name" (.page.Title) -}}
{{- end -}} {{- end -}}
<a href="{{ .page.Permalink }}" class="post-title">{{ if .page.Params.favorite }}{{ partial "icon.html" "star" }}{{ end }} {{ $scratch.Get "name" }}</a> <a href="{{ .page.Permalink }}" class="post-title">{{ if .page.Params.favorite }}{{ partial "icon.html" "star" }}{{ end }} {{ $name }}</a>
{{ if (not (eq .page.WordCount 0)) }} {{ if (not (eq .page.WordCount 0)) }}
<p class="post-wordcount">{{ i18n "nWords" .page.WordCount }}, {{ i18n "nMinutesToRead" .page.ReadingTime }}.</p> <p class="post-wordcount">{{ i18n "nWords" .page.WordCount }}, {{ i18n "nMinutesToRead" .page.ReadingTime }}.</p>
{{ end }} {{ end }}
@@ -18,10 +16,12 @@
{{- if .linkSeries -}} {{- if .linkSeries -}}
{{- $term := index (.page.GetTerms "series") 0 -}} {{- $term := index (.page.GetTerms "series") 0 -}}
{{- with $term -}} {{- with $term -}}
{{- if (not ($term.Param "donotunique")) -}}
<div class="series-link"> <div class="series-link">
{{- partial "icon.html" "corner-down-right" -}} {{- partial "icon.html" "corner-down-right" -}}
<p>{{- i18n "latestInSeries" }} <a href="{{ $term.Permalink }}">{{ $term.Title }}</a></p> <p>{{- i18n "latestInSeries" }} <a href="{{ $term.Permalink }}">{{ $term.Title }}</a></p>
</div> </div>
{{- end -}} {{- end -}}
{{- end -}}
{{- end }} {{- end }}
</li> </li>

View File

@@ -2,10 +2,8 @@
<a href="{{ .page.RelPermalink }}"> <a href="{{ .page.RelPermalink }}">
{{ if eq .direction "previous" }}{{ partial "icon.html" "chevrons-left" }}{{ end }} {{ if eq .direction "previous" }}{{ partial "icon.html" "chevrons-left" }}{{ end }}
<div class="title-subtitle"> <div class="title-subtitle">
{{ title .direction }} in Series {{ i18n (printf "%sInSeries" .direction) }}
{{ $scratch := newScratch -}} <div class="title">{{ partial "nameinseries.html" (dict "page" .page) }}</div>
{{- partial "nameinseries.html" (dict "page" .page "scratch" $scratch) -}}
<div class="title">{{ $scratch.Get "name" }}</div>
</div> </div>
{{ if eq .direction "next" }}{{ partial "icon.html" "chevrons-right" }}{{ end }} {{ if eq .direction "next" }}{{ partial "icon.html" "chevrons-right" }}{{ end }}
</a> </a>

View File

@@ -2,8 +2,8 @@
<div class="ongoing-placeholder"> <div class="ongoing-placeholder">
{{ if eq .direction "previous" }}{{ partial "icon.html" "chevrons-left" }}{{ end }} {{ if eq .direction "previous" }}{{ partial "icon.html" "chevrons-left" }}{{ end }}
<div class="title-subtitle"> <div class="title-subtitle">
{{ title .direction }} in Series {{ i18n (printf "%sInSeries" .direction) }}
<div class="title">Coming soon!</div> <div class="title">{{ i18n "comingSoon" }}</div>
</div> </div>
{{ if eq .direction "next" }}{{ partial "icon.html" "chevrons-right" }}{{ end }} {{ if eq .direction "next" }}{{ partial "icon.html" "chevrons-right" }}{{ end }}
</div> </div>

View File

@@ -1,5 +1,5 @@
{{- if .Params.summary -}} {{- if .Params.summary -}}
{{ .Params.summary }} {{ .Params.summary | markdownify | plainify }}
{{- else -}} {{- else -}}
{{ .Summary | plainify | truncate 180 }} {{ .Summary | plainify | truncate 180 }}
{{- end -}} {{- end -}}

View File

@@ -1,14 +1,14 @@
{{- $scratch := .scratch -}} {{- $pages := slice -}}
{{- $scratch.Set "pages" slice -}}
{{- $tmpScratch := newScratch -}} {{- $tmpScratch := newScratch -}}
{{- range $post := (where (where site.Pages.ByDate.Reverse "Section" "blog") ".Kind" "!=" "section") -}} {{- range $post := (where (where site.Pages.ByDate.Reverse "Section" "blog") ".Kind" "!=" "section") -}}
{{- $term := index ($post.GetTerms "series") 0 -}} {{- $term := index ($post.GetTerms "series") 0 -}}
{{- if $term -}} {{- if (and $term (not ($term.Param "donotunique"))) -}}
{{- if not ($tmpScratch.Get $term.Permalink) -}} {{- if not ($tmpScratch.Get $term.Permalink) -}}
{{- $tmpScratch.Set $term.Permalink true -}} {{- $tmpScratch.Set $term.Permalink true -}}
{{- $scratch.Add "pages" $post -}} {{- $pages = $pages | append $post -}}
{{- end -}} {{- end -}}
{{- else -}} {{- else -}}
{{- $scratch.Add "pages" $post -}} {{- $pages = $pages | append $post -}}
{{- end -}} {{- end -}}
{{- end -}} {{- end -}}
{{- return $pages -}}

View File

@@ -11,8 +11,8 @@
<div class="bergamot-button-group"> <div class="bergamot-button-group">
{{ if or (eq (.Get "preset") "") (eq (.Get "preset") nil) }} {{ if or (eq (.Get "preset") "") (eq (.Get "preset") nil) }}
{{ else }} {{ else }}
<button class="bergamot-button bergamot-play" onclick='window.Bergamot.runPreset(this.parentElement, "bergamot-widget-container-{{ .Get "id" }}", "{{ .Get "preset" }}")'>{{ partial "icon.html" "play" }}Start Bergamot</button> <button class="bergamot-button bergamot-play" onclick='window.Bergamot.runPreset(this.parentElement, "bergamot-widget-container-{{ .Get "id" }}", "{{ .Get "preset" }}")'>{{ partial "icon.html" "play" }}{{ i18n "startBergamot" }}</button>
<button class="bergamot-button bergamot-close bergamot-hidden" onclick='window.Bergamot.close(this.parentElement, "bergamot-widget-container-{{ .Get "id" }}")'>{{ partial "icon.html" "x" }}Close Bergamot</button> <button class="bergamot-button bergamot-close bergamot-hidden" onclick='window.Bergamot.close(this.parentElement, "bergamot-widget-container-{{ .Get "id" }}")'>{{ partial "icon.html" "x" }}{{ i18n "closeBergamot" }}</button>
{{ end }} {{ end }}
</div> </div>

View File

@@ -0,0 +1,11 @@
{{- $url := partial "geturl.html" (dict "path" (.Get 1)) -}}
{{- $groupconfig := dict
"url" $url.url
"basePath" $url.basePath
"path" (.Get 1)
"comment" (i18n "entireFile")
"code" (readFile (printf "code/%s" (.Get 1)))
"language" (.Get 0)
"opts" "linenos=table"
-}}
{{- partial "highlightgroup.html" $groupconfig -}}

View File

@@ -35,17 +35,17 @@
{{- $joinedLines = delimit $lines "\n" -}} {{- $joinedLines = delimit $lines "\n" -}}
{{- end -}} {{- end -}}
{{- partial "geturl.html" (dict "scratch" $scratch "path" (.Get 1) "lines" (slice (.Get 2) (.Get 3))) -}} {{- $url := partial "geturl.html" (dict "path" (.Get 1) "lines" (slice (.Get 2) (.Get 3))) -}}
{{- partial "linerangestr.html" (dict "scratch" $scratch "from" (.Get 2) "to" (.Get 3)) -}} {{- $comment := partial "linerangestr.html" (dict "from" (.Get 2) "to" (.Get 3)) -}}
{{- with ($scratch.Get "hidden") -}} {{- with ($scratch.Get "hidden") -}}
<details><summary>{{- . | markdownify -}}</summary> <details><summary>{{- . | markdownify -}}</summary>
{{- end -}} {{- end -}}
{{- $groupconfig := dict {{- $groupconfig := dict
"url" ($scratch.Get "bestUrl") "url" $url.url
"basePath" ($scratch.Get "bestPath") "basePath" $url.basePath
"path" (.Get 1) "path" (.Get 1)
"comment" ($scratch.Get "comment") "comment" $comment
"code" $joinedLines "code" $joinedLines
"firstLine" (int (.Get 2)) "firstLine" (int (.Get 2))
"lastLine" (int (.Get 3)) "lastLine" (int (.Get 3))

View File

@@ -0,0 +1,2 @@
{{- $url := partial "geturl.html" (dict "path" (.Get 0)) -}}
{{- $url.url -}}

View File

@@ -5,7 +5,6 @@
{{- $line := .Get 4 -}} {{- $line := .Get 4 -}}
{{- $lines := split (trim .Inner "\n") "\n" -}} {{- $lines := split (trim .Inner "\n") "\n" -}}
{{- $scratch := newScratch -}}
{{- $url := printf "https://github.com/%s/blob/%s/%s#L%d" $repo $commit $file $line -}} {{- $url := printf "https://github.com/%s/blob/%s/%s#L%d" $repo $commit $file $line -}}
{{- partial "linerangestr.html" (dict "scratch" $scratch "from" 0 "to" $line) -}} {{- $comment := partial "linerangestr.html" (dict "from" 0 "to" $line) -}}
{{- partial "highlightgroup.html" (dict "url" $url "path" $file "comment" ($scratch.Get "comment") "code" (trim .Inner "\n") "language" $lang) -}} {{- partial "highlightgroup.html" (dict "url" $url "path" $file "comment" $comment "code" (trim .Inner "\n") "language" $lang) -}}

View File

@@ -1,10 +1,10 @@
{{- $name := .Get 0 -}} {{- $name := .Get 0 -}}
{{- $number := 1 -}} {{- $number := 1 -}}
{{- with .Page.Scratch.Get "internal-ref-counter" -}} {{- with .Page.Store.Get "internal-ref-counter" -}}
{{- $number = add . 1 }} {{- $number = add . 1 }}
{{- end -}} {{- end -}}
{{- .Page.Scratch.Set "internal-ref-counter" $number -}} {{- .Page.Store.Set "internal-ref-counter" $number -}}
{{- .Page.Scratch.SetInMap "internal-ref" $name $number -}} {{- .Page.Store.SetInMap "internal-ref" $name $number -}}
<span class="internal-ref" id="internal-ref-{{ $name }}"> <span class="internal-ref" id="internal-ref-{{ $name }}">
{{ .Inner }} {{ .Inner }}

View File

@@ -1,5 +1,5 @@
{{- $name := .Get 0 -}} {{- $name := .Get 0 -}}
{{- $number := index (.Page.Scratch.Get "internal-ref") $name -}} {{- $number := index (.Page.Store.Get "internal-ref") $name -}}
<a href="#internal-ref-{{ $name }}"> <a href="#internal-ref-{{ $name }}">
{{ .Inner }} {{ .Inner }}

View File

@@ -0,0 +1,9 @@
{{- $url := partial "geturl.html" (dict "path" (.Get 0)) -}}
{{- $groupconfig := dict
"url" $url.url
"basePath" $url.basePath
"path" (.Get 0)
"comment" (i18n "entireFile")
"content" (safeHTML (printf "<pre><code>%s</code></pre>" (htmlEscape (readFile (printf "code/%s" (.Get 0))))))
-}}
{{- partial "group.html" $groupconfig -}}

View File

@@ -1,5 +1,6 @@
<span class="sidenote"> <span class="sidenote">
<label class="sidenote-label" for="{{- .Get 1 -}}">{{- .Get 2 | markdownify -}}</label> <label class="sidenote-label" for="{{- .Get 1 -}}">{{- .Get 2 | markdownify -}}</label>
{{- /* chomp trailing whitespace */ -}}
<input class="sidenote-checkbox" style="display: none;" type="checkbox" id="{{- .Get 1 -}}"></input> <input class="sidenote-checkbox" style="display: none;" type="checkbox" id="{{- .Get 1 -}}"></input>
{{- if $offset := .Get 3 -}} {{- if $offset := .Get 3 -}}
<span class="sidenote-content sidenote-{{- .Get 0 -}}" style="margin-top: {{- $offset -}}rem"> <span class="sidenote-content sidenote-{{- .Get 0 -}}" style="margin-top: {{- $offset -}}rem">
@@ -10,4 +11,6 @@
{{- .Inner -}} {{- .Inner -}}
<span class="sidenote-delimiter">]</span> <span class="sidenote-delimiter">]</span>
</span> </span>
{{- /* chomp trailing whitespace */ -}}
</span> </span>
{{- /* chomp trailing whitespace */ -}}

View File

@@ -1,6 +1,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="{{ .Site.Language.Lang }}"> <html lang="{{ .Site.Language.Lang }}">
{{- partial "head.html" . -}} <head>
{{- partial "head.html" . -}}
</head>
<body> <body>
{{- partial "header.html" . -}} {{- partial "header.html" . -}}
<div class="container"><hr class="header-divider"></div> <div class="container"><hr class="header-divider"></div>

View File

@@ -1,9 +1,9 @@
{{ define "main" }} {{ define "main" }}
<h2>{{ .Title }}</h2> <h2>{{ .Title }}</h2>
<div class="post-subscript"> <div class="post-subscript">
<p> <p class="tag-list">
{{- range (.GetTerms "tags") -}} {{- range (.GetTerms "tags") -}}
<a class="button" href="{{ .Permalink }}">{{ .Title }}</a> <a class="tag" href="{{ .Permalink }}">{{ .Title }}</a>
{{ end -}} {{ end -}}
</p> </p>
<p>{{ i18n "postedOn" (.Date.Format "January 2, 2006") }}.</p> <p>{{ i18n "postedOn" (.Date.Format "January 2, 2006") }}.</p>

View File

@@ -2,9 +2,9 @@
{{ .Content }} {{ .Content }}
{{ i18n "recentPosts" }}: {{ i18n "recentPosts" }}:
{{ partial "uniquebyseries.html" (dict "scratch" .Scratch) }} {{ $pages := partial "uniquebyseries.html" . }}
<ul class="post-list"> <ul class="post-list">
{{ range first 10 (.Scratch.Get "pages") }} {{ range first 10 $pages }}
{{ partial "post.html" (dict "page" . "linkSeries" true) }} {{ partial "post.html" (dict "page" . "linkSeries" true) }}
{{ end }} {{ end }}
</ul> </ul>

View File

@@ -1,2 +0,0 @@
<link rel="preload" href="{{ .url }}" as="style" onload="this.onload=null;this.rel='stylesheet'" {{ .extra | safeHTMLAttr }}>
<noscript><link rel="stylesheet" href="{{ .url }}"></noscript>

View File

@@ -1,27 +0,0 @@
{{- $siteSourceUrl := site.Params.siteSourceUrl -}}
{{- $submoduleLinks := site.Data.submodules -}}
{{- $hostData := site.Data.hosts -}}
{{- $scratch := .scratch -}}
{{- $lines := .lines -}}
{{- $scratch.Set "bestLength" -1 -}}
{{- $scratch.Set "bestUrl" (printf "%s/code/%s" $siteSourceUrl .path) -}}
{{- $scratch.Set "bestPath" "" -}}
{{- $filePath := .path -}}
{{- range $path, $url := $submoduleLinks -}}
{{- $bestLength := $scratch.Get "bestLength" -}}
{{- if and (le $bestLength (len $path)) (hasPrefix $filePath $path) -}}
{{- $scratch.Set "bestLength" (len $path) -}}
{{- $scratch.Set "bestPath" $path -}}
{{- $scratch.Set "bestUrl" (printf "%s%s" $url (strings.TrimPrefix $path $filePath)) -}}
{{- end -}}
{{- end -}}
{{- if .lines -}}
{{- /* If the user provided a line range, see if we can tack it on to the end of the link. */ -}}
{{- range $host, $data := $hostData -}}
{{- if hasPrefix ($scratch.Get "bestUrl") $host -}}
{{- with $data.linesSuffix -}}
{{- $scratch.Add "bestUrl" (printf . (index $lines 0) (index $lines 1)) -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- end -}}

View File

@@ -1,9 +0,0 @@
{{ if eq .from .to }}
{{ .scratch.Set "comment" (printf ", line %d" .from) }}
{{ else }}
{{ if eq .from 0 }}
{{ .scratch.Set "comment" (printf ", around line %d" .to) }}
{{ else }}
{{ .scratch.Set "comment" (printf ", lines %d through %d" .from .to) }}
{{ end }}
{{ end }}

View File

@@ -17,9 +17,9 @@
<link>{{ .Permalink }}</link> <link>{{ .Permalink }}</link>
<description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description> <description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description>
<generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }} <generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }}
<language>{{.}}</language>{{end}}{{ with .Site.Author.email }} <language>{{.}}</language>{{end}}{{ with site.Params.author.email }}
<managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }} <managingEditor>{{.}}{{ with site.Params.author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with site.Params.author.email }}
<webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }} <webMaster>{{.}}{{ with site.Params.author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }}
<copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }} <copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }}
<lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }} <lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
{{ with .OutputFormats.Get "RSS" }} {{ with .OutputFormats.Get "RSS" }}
@@ -30,7 +30,7 @@
<title>{{ .Title }}</title> <title>{{ .Title }}</title>
<link>{{ .Permalink }}</link> <link>{{ .Permalink }}</link>
<pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate> <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
{{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}} {{ with site.Params.author.email }}<author>{{.}}{{ with site.Params.author.name }} ({{.}}){{end}}</author>{{end}}
<guid>{{ .Permalink }}</guid> <guid>{{ .Permalink }}</guid>
<description>{{ .Content | html }}</description> <description>{{ .Content | html }}</description>
</item> </item>

View File

@@ -2,8 +2,8 @@
<h2>{{ .Title }} </h2> <h2>{{ .Title }} </h2>
{{ .Content }} {{ .Content }}
{{ $search := resources.Get "scss/search.scss" | css.Sass | resources.Minify }} {{ $search := resources.Get "scss/search.scss" | css.Sass | resources.Minify | resources.Fingerprint }}
<link rel="stylesheet" href="{{ $search.Permalink }}" media="screen"> <link rel="stylesheet" href="{{ $search.Permalink }}" integrity="{{ $search.Data.Integrity }}" media="screen">
<div class="stork-wrapper"> <div class="stork-wrapper">
<div class="stork-input-wrapper"> <div class="stork-input-wrapper">

View File

@@ -1,12 +0,0 @@
{{- $scratch := newScratch -}}
{{- partial "geturl.html" (dict "scratch" $scratch "path" (.Get 1)) -}}
{{- $groupconfig := dict
"url" ($scratch.Get "bestUrl")
"basePath" ($scratch.Get "bestPath")
"path" (.Get 1)
"comment" ", entire file"
"code" (readFile (printf "code/%s" (.Get 1)))
"language" (.Get 0)
"opts" "linenos=table"
-}}
{{- partial "highlightgroup.html" $groupconfig -}}

View File

@@ -1,3 +0,0 @@
{{- $scratch := newScratch -}}
{{- partial "geturl.html" (dict "scratch" $scratch "path" (.Get 0)) -}}
{{- $scratch.Get "bestUrl" -}}

View File

@@ -1,10 +0,0 @@
{{- $scratch := newScratch -}}
{{- partial "geturl.html" (dict "scratch" $scratch "path" (.Get 0) "siteSourceUrl" .Site.Params.siteSourceUrl "submoduleLinks" .Site.Data.submodules) -}}
{{- $groupconfig := dict
"url" ($scratch.Get "bestUrl")
"basePath" ($scratch.Get "bestPath")
"path" (.Get 0)
"comment" ", entire file"
"content" (safeHTML (printf "<pre><code>%s</code></pre>" (htmlEscape (readFile (printf "code/%s" (.Get 0))))))
-}}
{{- partial "group.html" $groupconfig -}}

View File

@@ -0,0 +1,34 @@
{{- /* Note: changing the baseof template because the title, tags, etc. of a regular post are still valid. */ -}}
<!DOCTYPE html>
<html lang="{{ .Site.Language.Lang }}">
<head>
{{- partial "head.html" . -}}
{{ $writingcss := resources.Get "scss/writing.scss" | css.Sass | resources.Minify | resources.Fingerprint }}
<link rel="stylesheet" href="{{ $writingcss.Permalink }}" integrity="{{ $writingcss.Data.Integrity }}">
{{ if .Params.custom_css }}
{{ range $customCss := .Params.custom_css }}
{{ $renderedCustomCss := page.Resources.Get $customCss | css.Sass (dict "includePaths" (slice "themes/vanilla/assets/scss")) | resources.Minify | resources.Fingerprint }}
<link rel="stylesheet" href="{{ $renderedCustomCss.Permalink }}" integrity="{{ $renderedCustomCss.Data.Integrity }}">
{{ end }}
{{ end }}
</head>
<body>
{{ with .Params.body_start_partial }}
{{ partial . $ }}
{{ end }}
{{- partial "header.html" . -}}
<div class="container"><hr class="header-divider"></div>
<main class="container">
{{- if .Draft -}}
{{- partial "warning.html" (i18n "postDraft") -}}
{{- end -}}
{{- block "main" . }}{{- end }}
</main>
{{- block "after" . }}{{- end }}
</body>
</html>

BIN
static/banner.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -8,7 +8,7 @@ license = "MIT"
# homepage = "http://example.com/" # homepage = "http://example.com/"
# tags = [] # tags = []
# features = [] # features = []
min_version = "0.41" min_version = "0.160.1"
[author] [author]
name = "Danila Fedorin" name = "Danila Fedorin"