33 Commits

Author SHA1 Message Date
7780ccb376 WIP: use template to generate the individual share buttons 2025-07-30 01:59:40 -05:00
b15ca73977 Remove a few unnecessary elements when printing
- Hide clickable link icon on headings in articles
- Hide "Copy" button on code blocks
- Hide "View raw" button in page metadata
2025-07-30 01:45:11 -05:00
ccb5170d2b layouts: Rename list to section and single to page
This makes them more specific. For example, section.html can't
accidentally be a fallback for taxonomy.html, and page.html can't for
term.html.

Fixes #88
2025-07-30 01:19:19 -05:00
433dd125e2 Add comment counter to page metadata
Also move the Isso script tag from comments.html to the <head>, since it
essentially needs to load on all pages.

Fixes #94
2025-07-30 00:43:05 -05:00
d50a4dc6bd Import remaining template and styling code from bbaovanc.com
It's probably better structure-wise to have it all consolidated in
bobatheme. Then bbaovanc.com is only concerned about content, not stuff
that I declared to be specific to my site. This came from when I had
multiple sites running bobatheme in the background, so now it's just an
arbitrary, legacy distinction.

Fixes #86
2025-07-30 00:43:05 -05:00
bbe76a44bb Allow backticks in figure inline caption using \bt
Workaround for multline strings bounded with backtick not supporting any
way to escape one to type it inside the string.
2025-07-30 00:43:05 -05:00
8845272d4d Merge branch 'rewrite-figures'
Fixes #87
Fixes #61
2025-07-27 03:55:06 -05:00
5afaf2ce3e Fix fallback to resource title for figure caption 2025-07-27 03:33:44 -05:00
486fa65ad6 Finish video embed support 2025-07-27 03:33:25 -05:00
f371afe529 Support using src with custom caption parameter in figure shortcode 2025-07-27 02:34:44 -05:00
8f79d2af3a Allow using positional parameter for figure caption 2025-07-27 01:44:08 -05:00
d6cb2c12c8 Fix markdown rendering on caption of featured image 2025-07-27 01:43:59 -05:00
2fa53d1f2c Remove render-image override
We can just use the resource shortcode in content files
2025-07-27 00:44:45 -05:00
e0d2c536e4 WIP 2025-07-06 19:45:00 -05:00
8fafc843ef WIP 2025-07-06 19:44:46 -05:00
1f82ad4f0b Add support for twitter:creator tag
Put `twitter` metadata on an author
2025-07-05 02:06:39 -05:00
7e016547ec Remove redundant twitter tags since they falls back to opengraph 2025-07-05 01:46:42 -05:00
b4bff1e36d Use content view to customize <title> on author's page 2025-07-04 15:50:38 -05:00
1f9477759d Revert "debug: Show current template filename in bottom right"
This reverts commit ff4998f31b.

Not that useful. In the future, probably need to make an entire like
debug menu with a bunch of info about the current page rendering and a
bunch of variables.
2025-07-04 15:35:58 -05:00
cc7cec07df Revert "Set height and width specifically on img tag"
This reverts commit be12afb50d.

It causes issues with aspect ratio when the raw width of the image is
wider than the width in CSS pixels allowed by the body max-width.

Not reverting the refactor that removes {{ $img = . }} because I don't
know why that was there and will see if it works fine with it still
removed.
2025-07-03 20:15:17 -05:00
be12afb50d Set height and width specifically on img tag 2025-07-03 18:47:55 -05:00
9d761b2f81 Only index pages; add pagefind metadata based on series/tags/categories 2025-07-02 02:08:01 -05:00
ba9c106a88 Add data-pagefind-body to main content element
In preparation for adding Pagefind search support to bbaovanc.com. Those
templates will just go in the bbaovanc.com tree instead.
2025-07-02 01:21:05 -05:00
150ee40fd5 Fix website title not showing up in OpenGraph tags
I don't know how I never noticed this or how long it's been missing.
Maybe it was never there?
2025-07-02 01:20:11 -05:00
ca0f8d390c Add workaround for code icon being chopped off on side
Introduced by 16f08dce7f. Since the aspect
ratio of the icon isn't square, it's too wide and collides with the text
next to it. Would be nice to follow #82 and switch to a better
maintained icon pack.
2025-07-01 02:57:55 -05:00
62f0d42140 Add possibility for adding custom meta items to page
Fixes #67
2025-07-01 02:48:37 -05:00
16f08dce7f Tweak icon size and alignment
Use em units so it matches the text size automatically. Using sub for
vertical-align seems to look a little nicer? Maybe only so because now
the height of icon matches the font size now.
2025-07-01 02:09:15 -05:00
c06e7eb938 Remove assets/js/share-event.js
Moved this completely to bbaovanc.com repo. I think it was here as a
placeholder purely because of some issue with global resources not
working in the past. It seems like it maybe works fine now though.
2025-07-01 00:52:33 -05:00
5a957bc745 Fix __hugo_ctx in include shortcode
See posts 2 and 3:
https://discourse.gohugo.io/t/weird-hugo-ctx-pid-34-inside-rendershortcodes/55176?u=bbaovanc

The 4 spaces causes it to think it's an inline code block.
2025-06-29 16:18:37 -05:00
67ac36e9e2 Use resources to power the include shortcode
https://github.com/gohugoio/hugo/issues/13823#issuecomment-3015270202

Then I can just create unrendered pages for snippets. It fixes all the
markdown rendering related woes.
2025-06-29 03:41:37 -05:00
6ff0ffb80b Fix section summary rendering (Hugo 0.146)
Didn't notice this was broken because my public website doesn't use
subsections at all.
2025-06-29 02:36:58 -05:00
ff4998f31b debug: Show current template filename in bottom right
Only displayed when running live server. May remove in the future, just
need it now to make it much easier to reorganize some of the templates.
2025-06-28 03:25:46 -05:00
1aa2f8ea5c Move template files based on Hugo v0.146 revamp
See https://gohugo.io/templates/new-templatesystem-overview/

Under layouts/
- mv _default/* .
- mv partials _partials
- mv shortcodes _shortcodes
- mv taxonomy/list.html taxonomy.html
- mv taxonomy/term.html term.html
2025-06-28 03:07:02 -05:00
70 changed files with 398 additions and 196 deletions

View File

@@ -198,14 +198,14 @@ video {
max-width: 100%;
}
.post-media > figure.border img,
.post-media > figure.border video {
.post-media > figure img,
.post-media > figure video {
padding: 5px;
border: 7px solid var(--figure-border);
}
figure.border img,
figure.border video {
figure img,
figure video {
padding: 5px;
border: 2px solid var(--figure-border);
}
@@ -291,17 +291,17 @@ table.simple tbody tr:nth-child(even) {
/* Icons */
.icon {
width: 20px;
height: 20px;
width: 1em;
height: 1em;
color: var(--text-1);
text-align: center;
display: inline;
vertical-align: middle;
vertical-align: sub;
}
h1 svg.icon {
width: 30px;
height: 30px;
/* workarounds for some icons from jam-icons being non-square aspect ratio */
.icon-code {
width: 1.25em;
}
/* }}} */
@@ -315,11 +315,6 @@ h1 svg.icon {
font-weight: bold;
}
.heading-link svg {
width: 15px;
height: 15px;
}
/* }}} */
/* Top bar formatting {{{ */
@@ -676,6 +671,7 @@ h1 svg.icon {
display: flex;
gap: 8px;
justify-content: center;
font-size: 32px;
}
.share-buttons a {
@@ -690,8 +686,7 @@ h1 svg.icon {
}
.share-buttons svg {
width: 32px;
height: 32px;
display: block;
}
/* https://stackoverflow.com/a/72073682/19003757 */
@@ -929,8 +924,10 @@ aside.quote {
/* Print compatibility {{{ */
@media print {
.top > .navbar,
.section-header-link,
.content-heading-link,
.post-meta-edit-history,
.post-meta-view-markdown,
.code-copy-button,
.prevnext,
.share-buttons,
.related-posts {

121
assets/css/comments.css Normal file
View File

@@ -0,0 +1,121 @@
/* Isso styling */
h4.isso-thread-heading {
color: var(--text-0);
margin-bottom: 8px;
}
.isso-comment:not(:first-of-type),
.isso-follow-up .isso-comment {
border-color: var(--background-3);
}
.isso-author,
.isso-page-author-suffix,
.isso-comment-footer,
.isso-comment-footer .isso-votes {
color: var(--text-gray-0);
}
.isso-comment-header .isso-spacer,
.isso-spacer:hover,
.isso-permalink,
.isso-permalink:hover {
color: var(--text-gray-1) !important;
}
a.isso-author:hover,
.isso-permalink:hover {
text-decoration: underline !important;
}
.isso-comment.isso-is-page-author > .isso-text-wrapper {
background-color: var(--background-accent-1);
}
.isso-feedlink:hover,
.isso-reply {
color: var(--link-0) !important;
text-shadow: unset !important;
}
.isso-reply:hover {
text-decoration: underline;
}
.isso-text pre,
.isso-text :not(pre) > code {
background-color: var(--background-2);
border: none;
padding: 2px 4px;
border-radius: 5px;
/* thanks isso.css for setting this to 85% for whatever reason */
font-size: 0.75em;
}
.isso-input-wrapper input,
.isso-post-action > input,
.isso-textarea,
.isso-preview {
color: var(--text-1);
background-color: var(--background-1);
border-color: var(--background-2) !important;
}
.isso-input-wrapper input:focus,
.isso-textarea:focus {
border-color: var(--background-3) !important;
}
.isso-post-action > input:hover {
background-color: var(--background-2);
}
.isso-post-action > input:focus,
.isso-post-action > input:active {
background-color: var(--background-3);
}
.isso-textarea {
margin-bottom: 4px;
}
.isso-input-wrapper {
display: inline-flex;
flex-direction: column;
margin-right: 4px;
max-width: 25%;
}
.isso-input-wrapper input {
order: 1;
}
.isso-input-wrapper label {
order: 2;
font-size: small;
}
.isso-post-action {
margin-left: 4px;
margin-top: 0;
}
@media screen and (max-width: 600px) {
.isso-input-wrapper {
display: block;
max-width: 100%;
}
}
@media print {
.comments {
break-before: always;
}
.isso-comment {
max-width: unset;
}
.isso-text-wrapper {
break-inside: avoid;
}
.isso-postbox,
.isso-feedlink {
display: none;
}
}
.isso-target {
animation: target-fade 10s ease-out; /* defined in bobatheme */
}

9
assets/css/search.css Normal file
View File

@@ -0,0 +1,9 @@
/* put on body so it overrides the defaults set in :root by pagefind.css */
body {
/* https://pagefind.app/docs/ui-usage/#customising-the-styles */
--pagefind-ui-background: var(--background-1);
--pagefind-ui-border: var(--background-2);
--pagefind-ui-primary: var(--link-0);
--pagefind-ui-tag: var(--background-1);
--pagefind-ui-text: var(--text-1);
}

View File

@@ -1,3 +1,3 @@
function share_event(service) {
// this function does nothing by default
plausible("Share", {props: {Network: service}});
}

View File

@@ -7,6 +7,8 @@ table_of_contents:
browser_no_video_support:
other: "Your browser does not support video."
browser_no_video_support_link:
other: "Click here to download it instead."
latest_posts:
other: "Latest Posts"

View File

@@ -1,6 +1,6 @@
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="section-heading">
{{ .Text | safeHTML }}
<a class="heading-link" href="#{{ .Anchor | safeURL }}">
<a class="content-heading-link" href="#{{ .Anchor | safeURL }}">
<span aria-label="{{ i18n "aria_heading_link" }}">
{{ partial "icon.html" "link" }}
</span>

View File

@@ -0,0 +1,15 @@
{{ with resources.Get "css/comments.css" | fingerprint "sha512" }}
<link rel="stylesheet" type="text/css" href="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
{{ end }}
<h2 style="margin-bottom: 0;">Comments</h2>
<p style="margin: 0; font-size: smaller;">
If you provide an email address, you can enable notifications for
replies to your comment. It will not be shown publicly.
</p>
<noscript>
<i>Enable JavaScript to see the comment section.</i>
</noscript>
<section id="isso-thread" data-title="{{ .Title }}"></section>

View File

@@ -0,0 +1,23 @@
{{ if eq .ResourceType "image" }}
{{/* TODO: figure out whether loading="lazy" should be set because MDN
* claims that images won't work with JS disabled since it would
* make tracking possible, but my experience says otherwise
*/}}
<img src="{{ .Permalink }}" {{ with .Params.alt }}alt="{{ . }}"{{ end }} />
{{ else if eq .ResourceType "video" }}
<video controls preload="metadata">
{{ with .Params.alt }}
{{ warnf "video does not support alt text, '%s'" . }}
{{ end }}
<source src="{{ .Permalink }}" />
{{ i18n "browser_no_video_support" }}
<a href="{{ .Permalink }}" target="_blank" rel="noopener">
{{ i18n "browser_no_video_support_link" }}
</a>
</video>
{{ else }}
{{/* TODO: could consider implementing more types, listed at:
* https://www.iana.org/assignments/media-types/media-types.xhtml
*/}}
{{ errorf "Handling %q resource not supported" .ResourceType }}
{{ end }}

View File

@@ -0,0 +1,10 @@
{{ with .Resources.Get "feature" }}
<div class="post-media">
<figure>
{{ partial "embed-resource.html" . }}
{{ with .Title }}
<figcaption>{{ . | markdownify }}</figcaption>
{{ end }}
</figure>
</div>
{{ end }}

100
layouts/_partials/head.html Normal file
View File

@@ -0,0 +1,100 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
{{ hugo.Generator }}
{{ with resources.Get "css/bobastyle.css" | fingerprint "sha512" }}
<link rel="stylesheet" type="text/css" href="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
{{ end }}
{{ with resources.Get "css/syntax.css" | fingerprint "sha512" }}
<link rel="stylesheet" type="text/css" href="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous" media="print" onload="this.media='all'">
{{ end }}
{{ with resources.Get "css/syntax-light.css" | fingerprint "sha512" }}
<link rel="stylesheet" type="text/css" href="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous" media="print" onload="this.media='all'">
{{ end }}
{{ with resources.Get "js/bobatheme.js" | fingerprint "sha512" }}
<script defer src="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"></script>
{{ end }}
{{ if not hugo.IsServer }}
<script defer data-domain="bbaovanc.com" src="https://plausible.bbaovanc.com/js/bobalytics.outbound-links.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
{{ with resources.Get "js/share-event.js" | fingerprint "sha512" }}
<script defer src="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"></script>
{{ end }}
{{ end }}
{{ $isso_url := .Permalink }}
{{ if .IsTranslated }}
{{ with index .AllTranslations 0 }}
{{ $isso_url = .Permalink }}
{{ end }}
{{ end }}
<script defer src="https://isso.bbaovanc.com/js/embed.min.js"
data-isso-id="{{ $isso_url }}"
data-isso-default-lang="{{ .Language.Lang }}"
data-isso-css="true"
data-isso-max-comments-top="inf"
data-isso-max-comments-nested="inf"
data-isso-reveal-on-click="5"
{{/*
data-isso-avatar-bg="#111"
data-isso-avatar-fg="#9abf88 #5698c4 #e279a3 #9163b6 ..."
*/}}
data-isso-vote="true"
{{/*
data-isso-vote-levels=""
*/}}
data-isso-feed="true"
data-isso-require-email="false"
data-isso-reply-notifications="true"
data-isso-reply-notifications-default-enabled="true"
{{ with (.GetTerms "authors") }}
{{ $authorHashes := slice }}
{{ range . }}
{{ with .Params.issoUserID }}
{{ $authorHashes = $authorHashes | append . }}
{{ end }}
{{ end }}
data-isso-page-author-hashes="{{ delimit $authorHashes "," }}"
{{ end }}
>
</script>
{{ if eq .Layout "search" }}
{{ with resources.Get "css/search.css" | fingerprint "sha512" }}
<link rel="stylesheet" type="text/css" href="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
{{ end }}
<link rel="stylesheet" type="text/css" href="{{ absURL "pagefind/pagefind-ui.css" }}" crossorigin="anonymous">
<script src="{{ absURL "pagefind/pagefind-ui.js" }}" crossorigin="anonymous"></script>
<script>
window.addEventListener('DOMContentLoaded', (event) => {
new PagefindUI({ element: "#search-box", showSubResults: true });
});
</script>
{{ end }}
{{ with .Site.Params.faviconSVG }}
<link rel="icon" href="{{ . | absURL }}" />
{{ end }}
{{ with .Site.Params.appleTouchPNG }}
<link rel="apple-touch-icon" href="{{ . | absURL }}" />
{{ end }}
<title>{{ .Render "head_title" }}</title>
{{ range .Site.Params.rel_me }}
<link rel="me" href="{{ . }}" />
{{ end }}
{{ partial "seo-tags/opengraph.html" . }}
{{ partial "seo-tags/twitter-cards.html" . }}
{{ partial "seo-tags/schema.html" . }}
{{ partial "seo-tags/link.html" . }}
{{ partial "seo-tags/author.html" . }}
<meta name="language" content="{{ .Language.Lang }}">
<meta name="description" content="{{ (partial "seo-description.html" .) | plainify }}">
</head>

View File

@@ -1,6 +1,6 @@
{{- $icon_resource := resources.Get (printf "jam/icons/%s.svg" .) -}}
{{- $icon := $icon_resource.Content -}}
{{- $icon = replaceRE `<svg` `<svg class="icon"` $icon -}}
{{- $icon = replaceRE `<svg` (printf `<svg class="icon icon-%s"` .) $icon -}}
{{- $icon = replaceRE `</svg>` (printf `<title>%s icon</title></svg>` .) $icon -}}
{{- $icon = replaceRE `(width|height)="[0-9]*"` "" $icon -}}
{{- $icon | safeHTML -}}

View File

@@ -1,5 +1,5 @@
{{ with .Params.authors }}
<span class="page-metadata-item" aria-label="{{ i18n "aria_post_meta_authors" }}">
<span class="page-metadata-item" data-pagefind-meta="authors" aria-label="{{ i18n "aria_post_meta_authors" }}">
{{ partial "icon.html" "user-circle" }}
{{ if index $.Site.Taxonomies "authors" }}

View File

@@ -4,7 +4,7 @@
{{ $categories = $categories | append (printf `<a href="%s">%s</a>` .Permalink .LinkTitle) }}
{{ end }}
<div class="page-metadata-section categories" aria-label="{{ i18n "aria_post_meta_categories" }}">
<div class="page-metadata-section categories" data-pagefind-meta="categories" aria-label="{{ i18n "aria_post_meta_categories" }}">
{{ partial "icon.html" "folder" }}
{{ delimit $categories ", " | safeHTML }}
</div>

View File

@@ -0,0 +1,8 @@
<span class="page-metadata-item" aria-label="comments counter">
{{ partial "icon.html" "message" }}
{{/* TODO: figure out if there's a nicer way to generate this URL
* the current issue is that we can't use RelRef, since content view means that we don't
* have access to the original page context
*/}}
<a href="{{ .RelPermalink }}#isso-thread">comments</a>
</span>

View File

@@ -4,7 +4,7 @@
{{ $series = $series | append (printf `<a href="%s">%s</a>` .Permalink .LinkTitle) }}
{{ end }}
<div class="page-metadata-section series" aria-label="{{ i18n "aria_post_meta_series" }}">
<div class="page-metadata-section series" data-pagefind-meta="series" aria-label="{{ i18n "aria_post_meta_series" }}">
{{ partial "icon.html" "files" }}
{{ delimit $series ", " | safeHTML }}
</div>

View File

@@ -4,7 +4,7 @@
{{ $tags = $tags | append (printf `<a href="%s">%s</a>` .Permalink .LinkTitle) }}
{{ end }}
<div class="page-metadata-section tags" aria-label="{{ i18n "aria_post_meta_tags" }}">
<div class="page-metadata-section tags" data-pagefind-meta="tags" aria-label="{{ i18n "aria_post_meta_tags" }}">
{{ partial "icon.html" "tag" }}
{{ delimit $tags ", " | safeHTML }}
</div>

View File

@@ -21,6 +21,7 @@
{{ partial "page-metadata/item/readingtime.html" . }}
{{ partial "page-metadata/item/edithistory.html" . }}
{{ partial "page-metadata/item/viewraw.html" . }}
{{ partial "page-metadata/item/comments-counter.html" . }}
{{ partial "page-metadata/item/categories.html" . }}

View File

@@ -9,6 +9,8 @@
{{ partial "page-metadata/item/authors.html" . }}
{{ partial "page-metadata/item/readingtime.html" . }}
{{ partial "page-metadata/item/comments-counter.html" . }}
{{ partial "page-metadata/item/series.html" . }}
{{ partial "page-metadata/item/categories.html" . }}
{{ partial "page-metadata/item/tags.html" . }}

View File

@@ -33,7 +33,7 @@
<meta property="og:locale" content="{{ . }}">
{{ end }}
{{ with .Site.Params.title }}
{{ with .Site.Title }}
<meta property="og:site_name" content="{{ . }}">
{{ end }}

View File

@@ -1,3 +1,7 @@
{{/* we do not need to duplicate what's already covered by OpenGraph tags
* see: https://demo.bbaovanc.com/test/remove-twitter-tags/blog/swapfile-guide/
* so, no twitter:image/title/description
*/}}
{{ $images := $.Resources.ByType "image" }}
{{ $featured := $images.GetMatch "*feature*" }}
{{ if not $featured }}
@@ -17,13 +21,21 @@
{{ else }}
<meta name="twitter:card" content="summary">
{{ end }}
<meta name="twitter:image" content="{{ $featured.Permalink }}">
{{ else }}
<meta name="twitter:card" content="summary">
{{ end }}
<meta name="twitter:title" content="{{ .Title | plainify }}">
<meta name="twitter:description" content="{{ (partial "seo-description.html" .) | plainify }}">
{{/* twitter:site is the site author; twitter:creator is page author
* https://developer.x.com/en/docs/x-for-websites/cards/guides/getting-started
* "Card and Content Attribution"
*/}}
{{ with .Site.Params.social.twitter }}
<meta name="twitter:site" content="@{{ . }}">
{{ end }}
{{ with .GetTerms "authors" }}
{{ range . }}
{{ with .Params.twitter }}
<meta name="twitter:creator" content="@{{ . }}">
{{ end }}
{{ end }}
{{ end }}

View File

@@ -1,4 +1,22 @@
{{ define "_partials/share-button.html" }}
<a class="{{ .ShortName }}-share"
target="_blank"
rel="noopener"
aria-label="{{ i18n (printf "aria_share_%s" .ShortName) }}"
onclick="share_event('{{ .ProperName }}');"
href="{{ .URL }}">
{{- partial "icon.html" (or .IconName .ShortName) -}}
</a>
{{ end }}
<div class="share-buttons">
{{ $services := dict
"twitter" (dict "ProperName" "Twitter" "URL" (printf "https://twitter.com/intent/tweet?url=%s&text=%s&via=bbaovanc" .Permalink .Title))
}}
{{ range $name, $info := $services }}
{{ $data := merge $info (dict "ShortName" $name) }}
{{ partial "share-button.html" $data }}
{{ end }}
{{ if .Site.Params.shareButtons.twitter }}
<a class="twitter-share"
target="_blank"

View File

@@ -0,0 +1,17 @@
<figure>
{{ $resource_title := "" }}
{{ with .Get "src" }}
{{ with $.Page.Resources.Get . }}
{{ $resource_title = .Title }}
{{ partial "embed-resource.html" . }}
{{ else }}
{{ errorf "resource %q not found" . }}
{{ end }}
{{ else }}
{{ .Inner }}
{{ end }}
{{ with or (.Get "caption") (.Get 0) $resource_title }}
<figcaption>{{ (replace . "\\bt" "`") | markdownify }}</figcaption>
{{ end }}
</figure>

View File

@@ -0,0 +1,14 @@
{{/* https://github.com/gohugoio/hugo/issues/13823#issuecomment-3015270202 */}}
{{ with .Get 0 -}}
{{ with $.Page.GetPage . -}}
{{ .RenderShortcodes -}}
{{ else with $.Page.Resources.Get . -}}
{{ .RenderShortcodes -}}
{{ else with resources.Get . -}}
{{ .Content -}}
{{ else -}}
{{ errorf "The %q shortcode was unable to find %q. See %s" $.Name . $.Position -}}
{{ end -}}
{{ else -}}
{{ errorf "The %q shortcode requires a positional parameter indicating the logical path of the file to include. See %s" .Name .Position -}}
{{ end -}}

View File

@@ -0,0 +1,9 @@
{{ with .Get 0 }}
{{ with $.Page.Resources.Get . }}
{{ partial "embed-resource.html" . }}
{{ else }}
{{ errorf "resource %q not found" . }}
{{ end }}
{{ else }}
{{ errorf "resource name not provided as first parameter" }}
{{ end }}

View File

@@ -0,0 +1 @@
{{ (print .Title "'s Posts | " .Site.Title) | plainify }}

View File

@@ -13,7 +13,7 @@
{{ partial "breadcrumb.html" . }}
{{ end }}
<main id="main-content">
<main id="main-content" {{ if .IsPage }}data-pagefind-body{{ end }}>
{{ block "main" . }}
THIS TEXT SHOULD NOT SHOW. YUZSIQGHE (that string is so I can grep for it)
{{ end }}

1
layouts/head_title.html Normal file
View File

@@ -0,0 +1 @@
{{ (print .Title " | " .Site.Title) | plainify }}

View File

@@ -0,0 +1 @@
{{ .Site.Title | plainify }}

View File

@@ -22,11 +22,7 @@
</div>
{{ end }}
{{ with .Resources.GetMatch "feature" }}
<div class="post-media">
{{ partial "figure.html" (dict "src" .) }}
</div>
{{ end }}
{{ partial "feature-figure.html" . }}
<article class="post-content">
{{ .Content }}

View File

@@ -1,4 +0,0 @@
{{/*
Create a file named `layouts/partials/comments.html` at your site root to
add a comment system. Page variables are passed.
*/}}

View File

@@ -1,28 +0,0 @@
{{ $hidecaption := index . "hidecaption" }}
{{ if index . "noborder" }}
<figure>
{{ else }}
<figure class="border">
{{ end }}
{{ with index . "src" }}
{{ $media := . }}
{{ if eq .MediaType.MainType "image" }}
<img src="{{ $media.Permalink }}" alt="{{ $media.Title }}" loading="lazy" />
{{ else if eq .MediaType.MainType "video" }}
<video controls preload="metadata">
<source src="{{ $media.Permalink }}" alt="{{ $media.Title }}">
{{ i18n "browser_no_video_support" }}
</video>
{{ end }}
{{ if not $hidecaption }}
{{ with $media.Title }}
<figcaption>
{{ . | markdownify }}
</figcaption>
{{ end }}
{{ end }}
{{ end }}
</figure>

View File

@@ -1,46 +0,0 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
{{ hugo.Generator }}
{{ with resources.Get "css/bobastyle.css" | fingerprint "sha512" }}
<link rel="stylesheet" type="text/css" href="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
{{ end }}
{{ with resources.Get "css/syntax.css" | fingerprint "sha512" }}
<link rel="stylesheet" type="text/css" href="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous" media="print" onload="this.media='all'">
{{ end }}
{{ with resources.Get "css/syntax-light.css" | fingerprint "sha512" }}
<link rel="stylesheet" type="text/css" href="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous" media="print" onload="this.media='all'">
{{ end }}
{{ with resources.Get "js/bobatheme.js" | fingerprint "sha512" }}
<script defer src="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"></script>
{{ end }}
{{ with resources.Get "js/share-event.js" | fingerprint "sha512" }}
<script defer src="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"></script>
{{ end }}
{{ with .Site.Params.faviconSVG }}
<link rel="icon" href="{{ . | absURL }}" />
{{ end }}
{{ with .Site.Params.appleTouchPNG }}
<link rel="apple-touch-icon" href="{{ . | absURL }}" />
{{ end }}
{{ if .IsHome }}
<title>{{ .Site.Title | plainify }}</title>
{{ else }}
<title>{{ (print .Title " | " .Site.Title) | plainify }}</title>
{{ end }}
{{ partial "seo-tags/opengraph.html" . }}
{{ partial "seo-tags/twitter-cards.html" . }}
{{ partial "seo-tags/schema.html" . }}
{{ partial "seo-tags/link.html" . }}
{{ partial "seo-tags/author.html" . }}
<meta name="language" content="{{ .Language.Lang }}">
<meta name="description" content="{{ (partial "seo-description.html" .) | plainify }}">
{{ partial "additional-head.html" . }}
</head>

View File

@@ -1,28 +0,0 @@
{{ $hidecaption := index . "hidecaption" }}
{{ $type := index . "type" }}
{{ $src := index . "src" }}
{{ $alt := index . "alt" }}
{{ if index . "border" }}
<figure class="border">
{{ else }}
<figure>
{{ end }}
{{ if eq $type "image" }}
<img src="{{ $src }}" alt="{{ $alt }}" loading="lazy" />
{{ else if eq $type "video" }}
<video controls preload="metadata">
<source src="{{ $src }}" alt="{{ $alt }}">
{{ i18n "browser_no_video_support" }}
</video>
{{ end }}
{{ if not $hidecaption }}
{{ with $alt }}
<figcaption>
{{ . | markdownify }}
</figcaption>
{{ end }}
{{ end }}
</figure>

3
layouts/search.html Normal file
View File

@@ -0,0 +1,3 @@
{{ define "main" }}
<div id="search-box"></div>
{{ end }}

View File

@@ -1,15 +0,0 @@
{{ $resource := .Page.Resources.GetMatch (.Get "src") }}
{{ $noborder := false }}
{{ if .Get "noborder" }}
{{ $noborder = true }}
{{ end }}
{{ $hidecaption := false }}
{{ if .Get "hidecaption" }}
{{ $hidecaption = true }}
{{ end }}
<p>
{{ partial "figure.html" (dict "src" $resource "noborder" $noborder "hidecaption" $hidecaption) }}
</p>

View File

@@ -1,20 +0,0 @@
{{ $path := "" }}
{{ $markdown := false }}
{{ if .IsNamedParams }}
{{ $path = .Get "path" }}
{{ with .Get "markdown" }}
{{ $markdown = . }}
{{ end }}
{{ else }}
{{ $path = .Get 0 }}
{{ end }}
{{ with ($path | readFile) }}
{{ if $markdown }}
{{ $path | readFile | $.Page.RenderString (dict "display" "block") }}
{{ else }}
{{ $path | readFile }}
{{ end }}
{{ else }}
{{ errorf "file not found: %s" $path }}
{{ end }}

View File

@@ -1,13 +0,0 @@
{{ $border := false }}
{{ if .Get "border" }}
{{ $border = true }}
{{ end }}
{{ $hidecaption := false }}
{{ if .Get "hidecaption" }}
{{ $hidecaption = true }}
{{ end }}
<p>
{{ partial "remote_figure.html" (dict "src" (.Get "src") "border" $border "hidecaption" $hidecaption "type" (.Get "type") "alt" (.Get "alt")) }}
</p>

View File

@@ -6,11 +6,7 @@
{{ partial "page-metadata/post-short.html" . }}
{{ with .Resources.GetMatch "feature" }}
<div class="post-media">
{{ partial "figure.html" (dict "src" .) }}
</div>
{{ end }}
{{ partial "feature-figure.html" . }}
<div class="page-description">
{{ partial "description-or-summary.html" . }}