{{ define "title" }} “{{ .Title | plainify }}” | {{ .Site.Title }} {{ end }} {{ define "main-class" }}--single layouts-blog-single{{ end }} {{ define "header-scripts" }} {{ with .Params.locations }} <script id="Map-script" src="/js/leaflet/leaflet.js"></script> {{ end }} {{ end }} {{ define "header-styles" }} {{ with .Params.styles }} <link rel="stylesheet" type="text/css" href="{{ ( $.Page.Resources.GetMatch "style").RelPermalink }}"> {{ end }} {{ with .Params.locations }} <link rel="stylesheet" href="/css/leaflet/leaflet.css"> {{ end }} {{ end }} {{ define "footer-scripts" }} {{ with .Params.locations }} <script> var map = L.map('map').setView([55, -3], 13); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>' }).addTo(map); var latLons = []; {{ $locations := partialCached "util/get_location_leaf_nodes.html.tmpl" $.Site.Data.locations -}} {{- range . -}} {{- with ( index $locations ( replaceRE `, [A-Z]+` "" . ) ) -}} L.marker([{{ .lat }}, {{ .lon }}]).addTo(map); latLons.push([{{ .lat }}, {{ .lon }}]); {{- else -}} {{- erroridf "missing-lat-lon" "Could not find lat-lon for %q (%q)" . $.File.Path -}} {{- end -}} {{- end }} map.fitBounds(latLons); if (map.getZoom() < 10) map.setZoom(10); </script> {{ end }} {{ if $.HasShortcode "chart" }} {{ $chartsConfigJS := $.Page.Resources.GetMatch "charts-init" | fingerprint }} <script id="Charts-script" src="/js/chart/chart.js"></script> <script id="Charts-config-script" src="{{ $chartsConfigJS.Permalink }}" integrity="{{ $chartsConfigJS.Data.Integrity }}"></script> {{ end }} {{ end }} {{ define "main-header" }} <header class="site-content__header"> {{ if .Params.series }} <p class="article-header__series">Part of series: {{ range ( .GetTerms "series" ) }} <a class="u-url" href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> {{ end }} </p> {{ end }} {{ with .Params.featured_image }} <img class="u-photo" style="display: none;" src=" {{- with ( $.Resources.GetMatch . ) -}} {{- if eq .MediaType.SubType "svg" -}} {{- .RelPermalink -}} {{- else }} {{- with .Resize "1200x webp" -}} {{- .RelPermalink -}} {{- end -}} {{- end -}} {{- else -}} {{- . -}} {{- end -}} " itemprop="image" {{- with ( $.Resources.GetMatch . ) -}} alt="{{ .Params.alt }}" {{- end -}} /> {{ end }} <div class="article-header__featured-image" {{ if .Params.featured_image }} {{ with .Resources.GetMatch .Params.featured_image }} {{ if eq .MediaType.SubType "svg" }} style="background-image: url({{ .RelPermalink }})" {{ else }} {{ with .Resize "1500x webp" }} style="background-image: url({{ .RelPermalink }})" {{ end }} {{ end }} {{ else }} style="background-image: url({{ .Params.featured_image }})" {{ end }} {{ end -}} > <div class=" article-header__title-wrapper"> <p class="p-name" style="display: none;" itemprop="name"><a class="u-url u-uid" href="{{ .Permalink }}">{{ .Title | safeHTML }}{{ with .Params.subtitle }}: {{ . | safeHTML }}{{ end }}</a></p> <h2 class="article-header__title{{ if gt ( len ( .Title | plainify ) ) 40 }} article-header__title--long{{ end }}"> {{- .Title | safeHTML -}} </h2> {{ with .Params.subtitle }} <p class="article-header__subtitle">{{ . | safeHTML }}</p> {{ end }} </div> {{ with .Resources.GetMatch .Params.featured_image }} <p class="attr"> {{- if .Params.attrlink -}}<a href="{{ .Params.attrlink }}" target="_blank" rel="noopener">{{- end -}} {{- .Params.attr | safeHTML -}} {{- if .Params.attrlink -}}</a>{{- end -}} {{- if .Params.attrlicence }} ( {{- with .Params.attrlicencelink -}} <a href="{{ . }}" target="_blank" rel="noopener"> {{- end -}} {{- .Params.attrlicence -}} {{- with .Params.attrlicencelink -}} </a> {{- end -}} ) {{- end -}} <p> {{ end }} </div> <p class="article-header__word-count">~<span itemprop="wordCount">{{ .FuzzyWordCount | lang.FormatNumberCustom 0 }}</span> words</p> <p class="article-header__publish-date">Published: <time class="dt-published" datetime="{{ .PublishDate | time.Format "2006-01-02T15:04:05-07:00" }}" itemprop="datePublished">{{ .PublishDate.Format "January 2" }}<sup>{{ if in (slice 1 21 31) .PublishDate.Day}}st{{ else if in (slice 2 22) .PublishDate.Day}}nd{{ else if in (slice 3 23) .PublishDate.Day}}rd{{ else }}th{{ end }}</sup>, 1{{ .PublishDate.Format "2006" | lang.FormatNumberCustom 0 }} <abbr style="font-variant: small-caps; font-size: 0.8em;" title="Holocene Era">HE</abbr></time></p> <p class="article-header__modified-date">Last modified: <time class="dt-updated" datetime="{{ .Lastmod | time.Format "2006-01-02T15:04:05-07:00" }}" itemprop="dateModified">{{ .Lastmod.Format "January 2" }}<sup>{{ if in (slice 1 21 31) .Lastmod.Day}}st{{ else if in (slice 2 22) .Lastmod.Day}}nd{{ else if in (slice 3 23) .Lastmod.Day}}rd{{ else }}th{{ end }}</sup>, 1{{ .Lastmod.Format "2006" | lang.FormatNumberCustom 0 }} <abbr style="font-variant: small-caps; font-size: 0.8em;" title="Holocene Era">HE</abbr></time></p> <p style="display: none">Author{{ with .Params.authors }}s{{ end }}: {{- with .Params.authors -}} </p> <ul> {{- range . -}} {{- if ( eq . .Site.Params.Author.name ) -}} <li><p><a class="p-author" itemprop="author" rel="author" href="{{ .Site.Home.Permalink }}">{{ .Site.Params.Author.name }}</a></p></li> {{- else -}} <li><p class="p-author" itemprop="author">{{- . -}}</p></li> {{- end -}} {{- end -}} </ul> {{- else -}} <a class="p-author" itemprop="author" rel="author" href="{{ .Site.Home.Permalink }}">{{ .Site.Params.Author.name }}</a> {{- end -}} </p> {{ $post_age_in_years := math.Round ( div ( div ( now.Sub .PublishDate ).Hours 24 ) 365 ) }} {{ if ( or .Params.site .Params.controversial ( gt $post_age_in_years 2 ) ) }} <aside class="article-header__warnings"> <ul> {{ if ( gt $post_age_in_years 2 ) }}<li>This piece was written <strong>over {{ $post_age_in_years }} years ago</strong>. It may no longer accurately reflect my views now, or may be factually outdated.</li>{{ end }} {{ if .Params.controversial }}<li>This piece has been marked as potentially <strong>controversial</strong>, whether due to the topic addressed, the content of the article, or both. Don't say you weren't warned.</li>{{ end }} {{ if .Params.site }}<li>This piece was originally written for an older version of this site. As such, it may not have transferred over properly and some images and links might be broken.</li>{{ end }} </ul> </aside> {{ end }} {{ if .Params.notes }} <aside class="article-header__notes"> <ul> {{ range .Params.notes }} <li>{{ . | safeHTML }}</li> {{ end }} </ul> </aside> {{ end }} {{ if and ( .TableOfContents ) ( ne .TableOfContents "<nav id=\"TableOfContents\"></nav>" ) }} <nav class="article-header__table-of-contents"> <h3 class="article-header__subtitle">Table of Contents</h3> {{ .TableOfContents }} {{- if fileExists ( path.Join $.Page.File.Dir "appendices.md" ) -}} <ul class="toc-list--appendices"> <li><a href="#appendices">Appendices</a> <ol> {{ range .Params.appendices }} <li><a href="#{{ . | anchorize }}">{{ . | safeHTML }}</a></li> {{ end }} </ol> </li> </ul> {{- end -}} {{- if fileExists ( path.Join $.Page.File.Dir "corrigenda.md" ) -}} <ul class="toc-list--corrigenda"> <li><a href="#corrigenda">Corrigenda</a></li> </ul> {{- end -}} </nav> {{ end }} </header> {{ end }} {{ define "main-body" }} <section class="site-content__body" itemprop="articleBody"> {{ with .Summary }} <section class="article-body__summary" itemprop="abstract"> <h2>Summary</h2> <p class="p-summary">{{ . }}</p> </section> {{ end }} {{- if ( or .Params.internal_links .Params.external_links ) -}} <section class="article__links"> {{- with .Params.internal_links -}} <h3>Internal Links</h3> <ul> {{- range . -}} {{ if eq ( printf "%T" . ) "map[string]interface {}" }} <li><a href="{{ .link }}">{{ .title | safeHTML }}</a></li> {{ else }} <li><a href="{{ . }}">Link</a></li> {{ end }} {{- end -}} </ul> {{- end -}} {{- with .Params.external_links -}} <h3>External Links</h3> <ul> {{- range . -}} {{ if eq ( printf "%T" . ) "map[string]interface {}" }} <li><a href="{{ .link }}">{{ .title | safeHTML }}</a></li> {{ else }} <li><a href="{{ . }}">Link</a></li> {{ end }} {{- end -}} </ul> {{- end -}} </section> {{- end -}} <section class="e-content article-body__content" itemprop="articleBody"> {{ .Content }} </section> {{ if fileExists ( path.Join $.Page.File.Dir "appendices.md" ) }} <section class="article-body__appendices"> <h2 class="subheading subheading--appendices" id="appendices">Appendices</h2> {{ $file := path.Join $.Page.File.Dir "appendices.md" | readFile }} {{ $file | .RenderString }} </section> {{ end }} {{ if fileExists ( path.Join $.Page.File.Dir "corrigendum.md" ) }} <section class="article-body__corrigendum" itemprop="correction" itemscope itemtype="https://schema.org/CorrectionComment"> <h2 class="subheading subheading--corrigendum" id="corrigendum">Corrigendum</h2> {{ $file := path.Join $.Page.File.Dir "corrigendum.md" | readFile }} {{ $file | .RenderString }} </section> {{ end }} </section> {{ with .Page.Resources.Get "comments.md" }} <section class="site-content__comments"> <h2 class="subheading subheading--comments" id="comments">Comments</h2> <ul class="comment__thread"> {{ .RenderShortcodes }} </ul> </section> {{ end }} {{ end }} {{ define "main-footer" }} {{ partial "post-meta.html" . }} {{ end }}