100 Commits

Author SHA1 Message Date
14475c13f4 Remove full-width-hr shortcode
Not sure what I planned to use this for. It has since become outdated
and out of sync with the new margins I set on body recently in
4e753395ba and
6b729c6acf.
2025-08-08 14:10:20 -05:00
6b729c6acf Adjust margins on related-posts to match rest of body
Didn't notice this when writing 4e753395ba
2025-08-08 14:01:37 -05:00
f751c4b104 Remove unused .full-width-page-list rule 2025-08-08 13:51:50 -05:00
de20387b5a Fix useless scrollbar on related posts
When all related posts fit on the same screen, there was a useless
scrollbar. I never noticed this because Firefox incorrectly hides the
scrollbar automatically. The issue is visible on Chromium.
2025-08-08 13:45:30 -05:00
84004d3ac0 Change pagefind to only index the content of articles
Fixes #97
2025-08-08 01:42:25 -05:00
52a6440011 Remove heading-link class
It was used to make both website title and page titles in summaries not
have link color. Instead, just directly configure those elements.
2025-08-08 01:41:38 -05:00
322928ed7a Reorganize CSS to have better sections
- Separate baseof.html elements from styling code for general elements
  used everywhere
- Rename some of the fold titles
- Include related posts section styling in the content styling section
2025-08-08 01:28:28 -05:00
4e753395ba Align top bar with main horizontal margin
- Use a variable to make sure that top bar and body margins stay equal
- Lower side margins to 16px so that the gap in navbar-items fits right
2025-08-08 01:02:04 -05:00
5d335647d0 Remove description-or-summary partial and just use .Summary
I think this may have changed in Hugo's history, but now description and
summary are considered different things. The description is what goes in
metadata (and what search engines see), while the summary is the blurb
about the article that should be displayed when rendering a summary
(what I should've been using always here).
2025-08-07 02:17:24 -05:00
22fff1a9c5 Replace _internal subdirectory in partials
I originally put it there to mimic the old pattern before Hugo 0.148,
but it probably just makes things confusing.

Fixes #90
2025-08-07 01:05:06 -05:00
b79c956c07 Remove make figure images centered and remove border
Also use a generic .figure-media class instead of manually specifying
both img and video in the CSS

Fixes #36 and a draft issue
2025-08-05 21:49:28 -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
6e7160efbb Remove exampleSite
This isn't really kept up to date these days, the example site is
bbaovanc.com.
2025-04-20 04:41:57 -05:00
04c3c007a8 Fix pagination for Hugo 0.146 2025-04-20 04:34:15 -05:00
ad7432155f Update jam icons repo to my own reupload 2025-04-19 01:13:33 -05:00
0aaf865b75 Rename privacy.twitter.enableDNT to x due to deprecation in Hugo 2025-04-19 00:58:23 -05:00
c9095e948b Replace table shortcode with markdown attributes for class 2024-11-15 17:25:46 -06:00
ddb57e0120 Merge branch 'markdown-output' 2024-10-01 13:30:00 -05:00
9b851ce0e4 Add "View raw" button to page to view raw markdown code of page 2024-10-01 13:29:14 -05:00
f34cffb849 Make markdown output "ugly"
This makes it so, for example, `/blog/swapfile-guide` has markdown file
at `/blog/swapfile-guide.md` instead of `/blog/swapfile-guide/index.md`.
2024-10-01 13:28:19 -05:00
91994df910 Create markdown output template
Further progress is blocked by Hugo feature requests:

- https://discourse.gohugo.io/t/render-alternative-output-format-outside-of-leaf-bundle-subdirectory/46968
- https://github.com/gohugoio/hugo/issues/8927
2024-09-28 20:10:22 -05:00
e84f334591 Replace paginate with pagination.pagerSize in hugo.yaml 2024-09-24 21:17:41 -05:00
ebf39263a6 Replace use of deprecated .Site.Social 2024-08-29 20:39:34 -05:00
77afe66aa6 Support custom keywords instead of defaulting to using tags
Now can set `keywords:` in the front matter for actual keywords
2024-01-22 20:44:54 -06:00
788583ea23 Update syntax styles to fix user-select
Turns out the last commit didn't work because bobastyle.css has lower
priority than the syntax CSS. But Hugo must've updated the styles
upstream because it's fixed after regenerating.
2023-12-01 20:05:42 -06:00
4216b9ed6f Add vendor-prefixed user-select to code block line numbers 2023-12-01 19:57:39 -06:00
54e639ecc3 Don't automatically put copyright in <p> 2023-11-11 20:33:08 -06:00
c980ced2fb Remove back to top button
It's kind of ugly and weird, and probably not necessary. I might add it
back in the future if it's actually needed again.
2023-11-05 17:41:59 -06:00
9ca15a198f Revert "Load bobastyle.css async too"
This reverts commits f33492ef8e and 5c87c2b069.

It turns out this makes performance score even worse because it makes
the CLS really bad
2023-11-05 01:20:20 -05:00
5c87c2b069 Fix async loading of bobastyle.css 2023-11-05 01:00:22 -05:00
6c42ae9518 Lazy load images 2023-11-05 00:56:13 -05:00
f33492ef8e Load bobastyle.css async too 2023-11-05 00:56:01 -05:00
ffcae79156 Load syntax CSS async 2023-11-05 00:31:26 -05:00
a59a87374b Rename config.yaml to hugo.yaml 2023-11-04 20:55:02 -05:00
88adfbdf89 Move site author to under params due to .Site.Author deprecation
See Hugo v0.120.0
2023-11-03 23:33:28 -05:00
0f717e81c0 Patch link issue with delimit due to breaking change in Hugo v0.120
References:
- https://github.com/gohugoio/hugo/releases/tag/v0.120.0
- https://github.com/gohugoio/hugo/issues/10876
- https://github.com/gohugoio/hugo/issues/11502
2023-11-03 22:08:23 -05:00
ede5958a46 Fix main container padding when printing 2023-11-02 01:01:24 -05:00
0b3b160e87 Rename config.yaml to hugo.yaml in exampleSite 2023-10-21 21:45:22 -05:00
12c6efc0fe Add "Skip to main content" tab-focusable button
- https://webaim.org/techniques/skipnav/
- https://css-tricks.com/how-to-create-a-skip-to-content-link/
2023-10-21 20:21:26 -05:00
0e930f7ae1 Clean up dom layout of full-width page lists
They shouldn't be a child of the centered, max-width'd body because they
need to be full width. So put them outside of the main container div.
2023-10-21 19:44:02 -05:00
289f55dc19 Throw error in include shortcode if file not found 2023-10-16 20:35:05 -05:00
0ddf0bdf42 Improve print compatiblity with navbar redesign 2023-10-15 20:54:11 -05:00
03d826f1c4 Fix wrong highlight color on navbar 2023-10-15 19:40:45 -05:00
f94307cdbf Redesign navbar to be full width 2023-10-15 19:33:10 -05:00
fde24f7438 Fix navbar highlighting on section page itself 2023-10-15 17:49:56 -05:00
c0426f191a Revert ":3"
This reverts 50a207b8ee
2023-10-15 00:42:45 -05:00
e8a34ae4a4 Add gap before page-list when there's no text description 2023-04-10 15:08:33 -05:00
18731498e8 Minor W3C validation fixes
Hopefully more to come soon, there's a lot of errors and warnings
2023-04-06 00:25:08 -05:00
ad5c40b02b Use CSS to set footer font size instead of <small> 2023-04-06 00:18:18 -05:00
e6b5997dff Move @media specializations section instead of previous commit
Reverts 960d1d24be
2023-04-06 00:12:43 -05:00
960d1d24be Fix table of contents on print 2023-04-06 00:11:12 -05:00
17047babc0 Improve date element in page metadata 2023-04-06 00:08:28 -05:00
7bc8a4cb57 Clean up CSS
- Add vim folds to make organized sections
- Rename a lot of classes from post- to page-
- Generalize series CSS classes better
- Clean up navbar div structure
- Remove langpicker and most of multilingual support
- many other minor tweaks
2023-03-24 08:49:02 -05:00
d34b2a56d7 Remove series position indicator -- racy and buggy 2023-03-18 21:11:07 -05:00
50a207b8ee :3 2023-03-18 20:23:49 -05:00
6f140f096b Organize summary template files
Also a small CSS patch to fix margin around post-title
2023-02-28 18:24:19 -06:00
316c62ebe8 Remove unnecessary credit.html partial 2023-02-28 17:54:22 -06:00
1caa7acdc9 Prevent page breaking in some elements when printing 2023-01-27 16:39:04 -06:00
f2f9e78559 Use RenderString instead of markdownify in some places 2023-01-27 16:14:23 -06:00
dd65d55389 Make sure link-1 has enough contrast 2023-01-26 16:54:17 -06:00
c7acf8ce38 Add link-1 color to light theme too 2023-01-26 16:47:39 -06:00
d7647a0b6f Fix table borders between th and td in same line 2023-01-26 16:43:46 -06:00
ebaa1de00b Add aria labels to share buttons 2023-01-26 16:36:03 -06:00
0744af717d Fix code block text sizing on mobile safari 2023-01-24 01:54:27 -06:00
23f86d5982 Use relative URL for fonts
Makes it work when the website isn't on root (such as demo)
2023-01-24 01:34:23 -06:00
b854ae48e6 Specify table.markdown instead of just .markdown for table styling 2023-01-23 18:11:00 -06:00
36a19a48b7 Add more borders in table for clarity 2023-01-23 18:10:11 -06:00
1f8a82228e Add include shortcode 2023-01-23 17:39:20 -06:00
60ed1c0264 Serve fonts (Open Sans and JetBrains Mono) rather than use system 2023-01-22 20:46:18 -06:00
105 changed files with 1696 additions and 1307 deletions

2
.gitmodules vendored
View File

@@ -1,4 +1,4 @@
[submodule "assets/jam"]
path = assets/jam
url = https://github.com/michaelampr/jam.git
url = https://github.com/BBaoVanC/jam.git
branch = master

View File

@@ -8,7 +8,7 @@ comments: true
draft: true
authors:
- {{ with .Site.Author.name }}{{ . }}{{ else }}John Doe{{ end }}
- {{ with .Site.Params.author.name }}{{ . }}{{ else }}John Doe{{ end }}
categories:
- archetype-stuff

View File

@@ -6,7 +6,7 @@ toc: true
comments: false
authors:
- {{ with .Site.Author.name }}{{ . }}{{ else }}John Doe{{ end }}
- {{ with .Site.params.author.name }}{{ . }}{{ else }}John Doe{{ end }}
---

File diff suppressed because it is too large Load Diff

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

@@ -5,16 +5,17 @@
color: black;
}
/* Background */ .bg { background-color: #f8f8f8 }
/* Background */ .bg { background-color: #f8f8f8; }
/* PreWrapper */ .chroma { background-color: #f8f8f8; }
/* Other */ .chroma .x { color: #000000 }
/* Error */ .chroma .err { color: #a40000 }
/* CodeLine */ .chroma .cl { }
/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
/* LineHighlight */ .chroma .hl { background-color: #ffffcc }
/* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* LineNumbers */ .chroma .ln { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* LineHighlight */ .chroma .hl { background-color: #dfdfdf }
/* LineNumbersTable */ .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* Line */ .chroma .line { display: flex; }
/* Keyword */ .chroma .k { color: #204a87; font-weight: bold }
/* KeywordConstant */ .chroma .kc { color: #204a87; font-weight: bold }

View File

@@ -1,15 +1,16 @@
/* native style */
/* Background */ .bg { color: #d0d0d0; background-color: #202020 }
/* Background */ .bg { color: #d0d0d0; background-color: #202020; }
/* PreWrapper */ .chroma { color: #d0d0d0; background-color: #202020; }
/* Other */ .chroma .x { }
/* Error */ .chroma .err { color: #a61717; background-color: #e3d2d2 }
/* CodeLine */ .chroma .cl { }
/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
/* LineHighlight */ .chroma .hl { background-color: #ffffcc }
/* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #686868 }
/* LineNumbers */ .chroma .ln { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #686868 }
/* LineHighlight */ .chroma .hl { background-color: #363636 }
/* LineNumbersTable */ .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #686868 }
/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #686868 }
/* Line */ .chroma .line { display: flex; }
/* Keyword */ .chroma .k { color: #6ab825; font-weight: bold }
/* KeywordConstant */ .chroma .kc { color: #6ab825; font-weight: bold }

View File

@@ -1,13 +1,3 @@
// back to top
const backToTop = document.getElementById("back-to-top");
window.onscroll = function() {
if (document.body.scrollTop > 100 || document.documentElement.scrollTop > 100) {
backToTop.style.display = "block";
} else {
backToTop.style.display = "none";
}
}
// code block copy to clipboard
window.onload = () => {
document.querySelectorAll(".code-block").forEach(codeBlock => {

View File

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

View File

@@ -1,12 +0,0 @@
1: "enero"
2: "febrero"
3: "marzo"
4: "abril"
5: "mayo"
6: "julio"
7: "junio"
8: "agosto"
9: "septiembre"
10: "octubre"
11: "noviembre"
12: "diciembre"

View File

@@ -1,70 +0,0 @@
baseURL: https://example.com
theme: bobatheme
defaultContentLanguage: en
copyright: '&copy; 2021 bbaovanc <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>'
sectionPagesMenu: main
enableRobotsTXT: true
paginate: 5
enableGitInfo: true
taxonomies:
_merge: deep
author:
name: bbaovanc
markup: # this just keeps the bobatheme markup styling
_merge: deep
params:
# these are for the OpenGraph/Twitter embeds in Hugo
description: Example website for bobatheme
# these are for favicons in bobatheme (disabled by default)
# faviconSVG: favicon.svg
# appleTouchPNG: apple-touch-icon.png
# show reading time (enabled by default)
# readingtime: true
# used for "View source" (unset by default)
# gitFileURL: https://github.com/BBaoVanC/bobatheme/blob/master
# gitFileIcon: github-circle
# gitHistoryURL: https://github.com/BBaoVanC/bobatheme/commits/master
# display a "Latest Posts" section on the homepage below its content
homepageLatestPosts: true
# social media share icons
# shareButtons:
# twitter: true
# facebook: true
# linkedin: true
# reddit: true
# telegram: true
# print: true
# show "Latest Posts" section at bottom of content pages
# latestPostsOnContent: true
# footer: >-
# Some example text for the footer.
# see https://gohugo.io/about/hugo-and-gdpr/#all-privacy-settings
# you probably want to keep this default
privacy:
_merge: deep
languages:
en:
languageName: English
title: Example Website
weight: 1
es:
languageName: Español
title: Sitio web ejemplo
weight: 2
params:
description: Sitio web ejemplo para bobatheme

View File

@@ -2,6 +2,12 @@ markup:
highlight:
noClasses: false
lineNos: true
goldmark:
parser:
attribute:
block: true
# this is enabled by default already
#title: true
params:
readingtime: true
@@ -12,11 +18,20 @@ taxonomies:
author: authors
series: series
outputs:
page:
- html
- markdown
outputFormats:
markdown:
ugly: true
privacy:
googleAnalytics:
disable: true
twitter:
x:
enableDNT: true
vimeo:

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"
@@ -19,9 +21,6 @@ copy_to_clipboard:
# Meta items
long_date:
other: "{{ .Date.Format `January 2, 2006` }}"
wordcount:
one: "{{ . }} word"
other: "{{ . }} words"
@@ -33,6 +32,9 @@ readingtime:
edit_history:
other: "Edit history"
view_markdown:
other: "View raw"
# Post count
no_posts:
@@ -58,8 +60,8 @@ newer_post:
# ARIA labels
aria_header_link:
other: "header link"
aria_heading_link:
other: "heading link"
aria_back_to_top_button:
other: "back to top button"
@@ -70,8 +72,8 @@ aria_rss_link:
aria_post_meta_edit_history:
other: "link to page edit history"
aria_post_meta_translations:
other: "translations"
aria_post_meta_view_markdown:
other: "link to view raw markdown code of page"
aria_post_meta_categories:
other: "categories"
@@ -121,11 +123,23 @@ aria_series_metadata:
aria_navbar:
other: "navigation bar"
aria_langpicker:
other: "language picker"
aria_langpicker_list:
other: "language list"
aria_table_of_contents:
other: "table of contents"
aria_share_twitter:
other: "share to twitter button"
aria_share_facebook:
other: "share to facebook button"
aria_share_linkedin:
other: "share to linkedin button"
aria_share_reddit:
other: "share to reddit button"
aria_share_telegram:
other: "share to telegram button"
aria_share_print:
other: "print article button"

View File

@@ -1,131 +0,0 @@
# Misc
credit_comment:
other: "<!-- bobatheme está disponible en GitHub basado en la licensia MIT: https://github.com/BBaoVanC/bobatheme. -->"
table_of_contents:
other: "Índice"
browser_no_video_support:
other: "Tu navegador de internet no admite video."
latest_posts:
other: "Artículos recientes"
see_also:
other: "Véase también:"
copy_to_clipboard:
other: "Copiar"
# Meta items
long_date:
other: "{{ .Date.Day }} de {{ index .Data.meses (printf `%d` .Date.Month) }} de {{ .Date.Year }}"
wordcount:
one: "{{ . }} palabra"
other: "{{ . }} palabras"
readingtime:
one: "{{ . }} min"
other: "{{ . }} mins"
edit_history:
other: "Historial de cambios"
# Post count
no_posts:
other: "¡No hay contenido para mostrar!"
post_count:
one: "{{ . }} publicación"
other: "{{ . }} publicaciones"
# Navigation
read_more:
other: "Leer más"
related_posts:
other: "Publicaciones similares"
older_post:
other: "Más antiguo"
newer_post:
other: "Más nuevo"
# ARIA labels
# aria_header_link:
# other: "header link"
# aria_back_to_top_button:
# other: "back to top button"
# aria_rss_link:
# other: "RSS feed link"
# aria_post_meta_edit_history:
# other: "link to page edit history"
# aria_post_meta_translations:
# other: "translations"
# aria_post_meta_categories:
# other: "categories"
# aria_post_meta_tags:
# other: "tags"
# aria_post_meta_reading_time:
# other: "reading time"
# aria_post_meta_authors:
# other: "authors"
# aria_post_meta_series:
# other: "series"
# aria_breadcrumbnav:
# other: "breadcrumb navigation bar"
# aria_post_metadata:
# other: "post metadata"
# aria_author_metadata:
# other: "author metadata"
# aria_taxonomy_metadata:
# other: "taxonomy metadata"
# aria_post_meta_date:
# other: "date"
# aria_post_meta_modified_date:
# other: "last modified date"
# aria_author_post_count:
# other: "post count"
# aria_author_word_count:
# other: "word count"
# aria_taxonomy_post_count:
# other: "post count"
# aria_series_metadata:
# other: "series metadata"
# aria_navbar:
# other: "navigation bar"
# aria_langpicker:
# other: "language picker"
# aria_langpicker_list:
# other: "language list"
# aria_table_of_contents:
# other: "table of contents"

View File

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

View File

@@ -1,49 +0,0 @@
{{ partial "credit.html" }}
<!DOCTYPE html>
<html lang="{{ .Language.Lang }}">
{{ partial "head.html" . }}
<body>
<a id="top" name="top" aria-hidden="true"></a>
<div class="top">
{{ partial "top.html" . }}
</div>
{{ if not .IsHome }}
{{ partial "breadcrumb.html" . }}
{{ end }}
<main>
{{ block "main" . }}
THIS TEXT SHOULD NOT SHOW. YUZSIQGHE (that string is so I can grep for it)
{{ end }}
</main>
{{ if or .Site.Copyright .Site.Params.footer }}
<footer>
<small>
{{ with .Site.Copyright }}
<p>{{ . | safeHTML }}</p>
{{ end }}
{{ with .Site.Params.footer }}
{{ . | $.RenderString (dict "display" "block") }}
{{ end }}
</small>
</footer>
{{ end }}
<a id="back-to-top" href="#top" aria-label="{{ i18n "aria_back_to_top_button" }}">
{{ partial "icon.html" "chevron-up" }}
</a>
<noscript>
<style>
#back-to-top {
display: block;
}
</style>
</noscript>
</body>
</html>

View File

@@ -1,16 +0,0 @@
<div class="author">
<h2 class="author-name">
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
{{ if .Draft }}{{ partial "icon.html" "write" }}{{ end }}
</h2>
{{ partial "post-metadata/author.html" . }}
<div class="author-description">
{{ partial "description-or-summary.html" . }}
</div>
<div class="readmore">
<a href="{{ .Permalink }}">{{ i18n "read_more" }} &rarr;</a>
</div>
</div>

View File

@@ -1,24 +0,0 @@
<h2 class="post-title">
{{ with .Parent.Params.icon }}{{ partial "icon.html" . }}{{ end }}
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
{{ if .Draft }}{{ partial "icon.html" "write" }}{{ end }}
</h2>
{{ partial "post-metadata/series.html" . }}
<div class="post-description">
{{ partial "description-or-summary.html" . }}
</div>
<div class="series-page-list">
{{ $i := 0 }}
{{ $total := len .Data.Pages }}
{{ range .Data.Pages.Reverse }}
{{ $i = add 1 $i }}
{{ .Scratch.Set "series_position" $i }}
{{ .Scratch.Set "series_total" $total }}
<article class="post">
{{ .Render "summary/series_post" }}
</article>
{{ end }}
</div>

View File

@@ -1,27 +0,0 @@
<div class="post-series-position">
{{ if .Scratch.Get "series_position" }}
({{ .Scratch.Get "series_position" }}/{{ .Scratch.Get "series_total" }})
{{ end }}
</div>
<h2 class="post-title">
{{ with .Parent.Params.icon }}{{ partial "icon.html" . }}{{ end }}
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
{{ if .Draft }}{{ partial "icon.html" "write" }}{{ end }}
</h2>
{{ partial "post-metadata/short.html" . }}
{{ with .Resources.GetMatch "feature" }}
<div class="post-media">
{{ partial "figure.html" (dict "src" .) }}
</div>
{{ end }}
<div class="post-description">
{{ partial "description-or-summary.html" . }}
</div>
<div class="readmore">
<a href="{{ .Permalink }}">{{ i18n "read_more" }} &rarr;</a>
</div>

View File

@@ -4,7 +4,7 @@
{{ end }}
<div class="code-block">
<div class="code-header">
<span class="code-type">{{ $type }}</span>
<pre class="code-type">{{ $type }}</pre>
<a href="javascript:void(0)" class="code-copy-button">
{{ i18n "copy_to_clipboard" }}
</a>

View File

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

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 class="figure-media" src="{{ .Permalink }}" {{ with .Params.alt }}alt="{{ . }}"{{ end }} />
{{ else if eq .ResourceType "video" }}
<video class="figure-media" 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,8 +1,8 @@
<div class="page-list">
{{ with . }}
{{ range . }}
<article class="post">
{{ .Render "summary/post" }}
<article class="page">
{{ .Render "summary" }}
</article>
{{ end }}
{{ else }}

View File

@@ -1,16 +1,16 @@
<div class="author-metadata" aria-label="{{ i18n "aria_author_metadata" }}">
<div class="page-metadata" aria-label="{{ i18n "aria_author_metadata" }}">
{{/* Calculate the total word count */}}
{{ $total_words := 0 }}
{{ range .Data.Pages }}
{{ $total_words = add $total_words .WordCount }}
{{ end }}
<span class="author-meta-item" aria-label="{{ i18n "aria_author_post_count" }}">
<span class="page-metadata-item" aria-label="{{ i18n "aria_author_post_count" }}">
{{ partial "icon.html" "newspaper" }}
{{ i18n "post_count" (len .Data.Pages) }}
</span>
<span class="author-meta-item" aria-label="{{ i18n "aria_author_word_count" }}">
<span class="page-metadata-item" aria-label="{{ i18n "aria_author_word_count" }}">
{{ partial "icon.html" "align-left" }}
{{ i18n "wordcount" $total_words }}
</span>

View File

@@ -1,14 +1,14 @@
{{ with .Params.authors }}
<span class="post-meta-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" }}
{{ $authors := slice }}
{{ range . }}
{{ $url := (printf "authors/%s" (. | anchorize)) | absLangURL }}
{{ $authors = $authors | append (printf `<a href="%s">%s</a>` $url . | safeHTML) }}
{{ $authors = $authors | append (printf `<a href="%s">%s</a>` $url .) }}
{{ end }}
{{ delimit $authors ", " }}
{{ delimit $authors ", " | safeHTML }}
{{ else }}
{{ delimit . ", " }}
{{ end }}

View File

@@ -4,8 +4,8 @@
{{ $categories = $categories | append (printf `<a href="%s">%s</a>` .Permalink .LinkTitle) }}
{{ end }}
<div class="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 ", " }}
{{ delimit $categories ", " | safeHTML }}
</div>
{{ end }}

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

@@ -1,5 +1,5 @@
{{ if and .Site.Params.gitHistoryURL .File.Path }}
<span class="post-meta-item post-meta-edit-history" aria-label="{{ i18n "aria_post_meta_edit_history" }}">
<span class="page-metadata-item post-meta-edit-history" aria-label="{{ i18n "aria_post_meta_edit_history" }}">
{{ partial "icon.html" "history" }}
<a href="{{ printf "%s/content/%s" .Site.Params.gitHistoryURL .File.Path }}" target="_blank" rel="noopener">
{{- i18n "edit_history" -}}

View File

@@ -1,5 +1,5 @@
{{ if ne .Site.Params.readingtime false }}
<span class="post-meta-item" aria-label="{{ i18n "aria_post_meta_reading_time" }}">
<span class="page-metadata-item" aria-label="{{ i18n "aria_post_meta_reading_time" }}">
{{ partial "icon.html" "clock" }}
{{ i18n "readingtime" .ReadingTime }}
</span>

View File

@@ -4,8 +4,8 @@
{{ $series = $series | append (printf `<a href="%s">%s</a>` .Permalink .LinkTitle) }}
{{ end }}
<div class="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 ", " }}
{{ delimit $series ", " | safeHTML }}
</div>
{{ end }}

View File

@@ -4,8 +4,8 @@
{{ $tags = $tags | append (printf `<a href="%s">%s</a>` .Permalink .LinkTitle) }}
{{ end }}
<div class="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 ", " }}
{{ delimit $tags ", " | safeHTML }}
</div>
{{ end }}

View File

@@ -0,0 +1,8 @@
{{ with .OutputFormats.Get "markdown" }}
<span class="page-metadata-item post-meta-view-markdown" aria-label="{{ i18n "aria_post_meta_view_markdown" }}">
{{ partial "icon.html" "code" }}
<a href="{{ .Permalink }}" target="_blank">
{{- i18n "view_markdown" -}}
</a>
</span>
{{ end }}

View File

@@ -0,0 +1,30 @@
{{ if or .Date .Params.authors .Site.Params.readingtime .Site.Params.gitFileURL }}
<div class="page-metadata" aria-label="{{ i18n "aria_post_metadata" }}">
{{ if .Date }}
<span class="page-metadata-item" aria-label="{{ i18n "aria_post_meta_date" }}">
{{ partial "icon.html" "calendar" }}
{{ partial "time-element.html" .Date }}
</span>
{{/* TODO: make this be a tooltip */}}
{{/* DISABLED
{{ if ne (time.Format "2006-01-02" .Lastmod) (time.Format "2006-01-02" .Date) }}
<span class="page-metadata-item" aria-label="{{ i18n "aria_post_meta_modified_date" }}">
{{ partial "icon.html" "pencil" }}
{{ partial "time-element.html" .Lastmod }}
{{ end }}
</span>
*/}}
{{ end }}
{{ partial "page-metadata/item/authors.html" . }}
{{ 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" . }}
{{ partial "page-metadata/item/tags.html" . }}
</div>
{{ end }}

View File

@@ -0,0 +1,18 @@
{{ if or .Date .Params.authors .Site.Params.readingtime }}
<div class="page-metadata" aria-label="{{ i18n "aria_post_metadata" }}">
{{ if .Date }}
<span class="page-metadata-item" aria-label="date">
{{ partial "icon.html" "calendar" }}
{{ partial "time-element.html" .Date }}
</span>
{{ end }}
{{ 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" . }}
</div>
{{ end }}

View File

@@ -1,11 +1,11 @@
<div class="post-metadata" aria-label="{{ i18n "aria_series_metadata" }}">
<span class="post-meta-item">
<div class="page-metadata" aria-label="{{ i18n "aria_series_metadata" }}">
<span class="page-metadata-item">
{{ partial "icon.html" "newspaper" }}
{{ i18n "post_count" (len .Data.Pages) }}
</span>
{{ if ne .Site.Params.readingtime false }}
<span class="post-meta-item">
<span class="page-metadata-item">
{{ partial "icon.html" "clock" }}
{{ $readingtime := 0 }}
{{ range .Data.Pages }}
@@ -14,6 +14,4 @@
{{ i18n "readingtime" $readingtime }}
</span>
{{ end }}
{{ partial "post-meta-item/translations.html" . }}
</div>

View File

@@ -0,0 +1,154 @@
{{- $validFormats := slice "default" "terse" }}
{{- $msg1 := "When passing a map to the internal pagination template, one of the elements must be named 'page', and it must be set to the context of the current page." }}
{{- $msg2 := "The 'format' specified in the map passed to the internal pagination template is invalid. Valid choices are: %s." }}
{{- $page := . }}
{{- $format := "default" }}
{{- if reflect.IsMap . }}
{{- with .page }}
{{- $page = . }}
{{- else }}
{{- errorf $msg1 }}
{{- end }}
{{- with .format }}
{{- $format = lower . }}
{{- end }}
{{- end }}
{{- if in $validFormats $format }}
{{- if gt $page.Paginator.TotalPages 1 }}
<ul class="pagination pagination-{{ $format }}">
{{- partial (printf "inline/pagination/%s.html" $format) $page }}
</ul>
{{- end }}
{{- else }}
{{- errorf $msg2 (delimit $validFormats ", ") }}
{{- end -}}
{{/* Format: default
{{/* --------------------------------------------------------------------- */}}
{{- define "_partials/inline/pagination/default.html" }}
{{- with .Paginator }}
{{- $currentPageNumber := .PageNumber }}
{{- with .First }}
{{- if ne $currentPageNumber .PageNumber }}
<li class="page-item">
<a href="{{ .URL }}" aria-label="First" class="page-link" role="button"><span aria-hidden="true">&laquo;&laquo;</span></a>
</li>
{{- else }}
<li class="page-item disabled">
<a aria-disabled="true" aria-label="First" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">&laquo;&laquo;</span></a>
</li>
{{- end }}
{{- end }}
{{- with .Prev }}
<li class="page-item">
<a href="{{ .URL }}" aria-label="Previous" class="page-link" role="button"><span aria-hidden="true">&laquo;</span></a>
</li>
{{- else }}
<li class="page-item disabled">
<a aria-disabled="true" aria-label="Previous" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">&laquo;</span></a>
</li>
{{- end }}
{{- $slots := 5 }}
{{- $start := math.Max 1 (sub .PageNumber (math.Floor (div $slots 2))) }}
{{- $end := math.Min .TotalPages (sub (add $start $slots) 1) }}
{{- if lt (add (sub $end $start) 1) $slots }}
{{- $start = math.Max 1 (add (sub $end $slots) 1) }}
{{- end }}
{{- range $k := seq $start $end }}
{{- if eq $.Paginator.PageNumber $k }}
<li class="page-item active">
<a aria-current="page" aria-label="Page {{ $k }}" class="page-link" role="button">{{ $k }}</a>
</li>
{{- else }}
<li class="page-item">
<a href="{{ (index $.Paginator.Pagers (sub $k 1)).URL }}" aria-label="Page {{ $k }}" class="page-link" role="button">{{ $k }}</a>
</li>
{{- end }}
{{- end }}
{{- with .Next }}
<li class="page-item">
<a href="{{ .URL }}" aria-label="Next" class="page-link" role="button"><span aria-hidden="true">&raquo;</span></a>
</li>
{{- else }}
<li class="page-item disabled">
<a aria-disabled="true" aria-label="Next" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">&raquo;</span></a>
</li>
{{- end }}
{{- with .Last }}
{{- if ne $currentPageNumber .PageNumber }}
<li class="page-item">
<a href="{{ .URL }}" aria-label="Last" class="page-link" role="button"><span aria-hidden="true">&raquo;&raquo;</span></a>
</li>
{{- else }}
<li class="page-item disabled">
<a aria-disabled="true" aria-label="Last" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">&raquo;&raquo;</span></a>
</li>
{{- end }}
{{- end }}
{{- end }}
{{- end -}}
{{/* Format: terse
{{/* --------------------------------------------------------------------- */}}
{{- define "_partials/inline/pagination/terse.html" }}
{{- with .Paginator }}
{{- $currentPageNumber := .PageNumber }}
{{- with .First }}
{{- if ne $currentPageNumber .PageNumber }}
<li class="page-item">
<a href="{{ .URL }}" aria-label="First" class="page-link" role="button"><span aria-hidden="true">&laquo;&laquo;</span></a>
</li>
{{- end }}
{{- end }}
{{- with .Prev }}
<li class="page-item">
<a href="{{ .URL }}" aria-label="Previous" class="page-link" role="button"><span aria-hidden="true">&laquo;</span></a>
</li>
{{- end }}
{{- $slots := 3 }}
{{- $start := math.Max 1 (sub .PageNumber (math.Floor (div $slots 2))) }}
{{- $end := math.Min .TotalPages (sub (add $start $slots) 1) }}
{{- if lt (add (sub $end $start) 1) $slots }}
{{- $start = math.Max 1 (add (sub $end $slots) 1) }}
{{- end }}
{{- range $k := seq $start $end }}
{{- if eq $.Paginator.PageNumber $k }}
<li class="page-item active">
<a aria-current="page" aria-label="Page {{ $k }}" class="page-link" role="button">{{ $k }}</a>
</li>
{{- else }}
<li class="page-item">
<a href="{{ (index $.Paginator.Pagers (sub $k 1)).URL }}" aria-label="Page {{ $k }}" class="page-link" role="button">{{ $k }}</a>
</li>
{{- end }}
{{- end }}
{{- with .Next }}
<li class="page-item">
<a href="{{ .URL }}" aria-label="Next" class="page-link" role="button"><span aria-hidden="true">&raquo;</span></a>
</li>
{{- end }}
{{- with .Last }}
{{- if ne $currentPageNumber .PageNumber }}
<li class="page-item">
<a href="{{ .URL }}" aria-label="Last" class="page-link" role="button"><span aria-hidden="true">&raquo;&raquo;</span></a>
</li>
{{- end }}
{{- end }}
{{- end }}
{{- end -}}

View File

@@ -0,0 +1,6 @@
{{ if gt .Paginator.TotalPages 1 }}
<nav class="pagination">
{{/* https://github.com/gohugoio/hugo/blob/a88b488181279befd50e1d127f9f67604f2f9854/tpl/tplimpl/embedded/templates/_partials/pagination.html */}}
{{ partial "pagination-hugo.html" . }}
</nav>
{{ end }}

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

@@ -21,10 +21,14 @@
<meta itemprop="image" content="{{ $featured.Permalink }}">
{{ end }}
{{ with (.GetTerms "tags") }}
{{ $tags := slice }}
{{ range . }}
{{ $tags = $tags | append .LinkTitle }}
{{ with .Keywords }}
<meta itemprop="keywords" content="{{ delimit . ", " }}">
{{ else }}
{{ with (.GetTerms "tags") }}
{{ $tags := slice }}
{{ range . }}
{{ $tags = $tags | append .LinkTitle }}
{{ end }}
<meta itemprop="keywords" content="{{ delimit $tags ", " }}">
{{ end }}
<meta itemprop="keywords" content="{{ delimit $tags ", " }}">
{{ end }}

View File

@@ -0,0 +1,41 @@
{{/* 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 }}
{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}
{{ end }}
{{ with $featured }}
{{ $ratio := 0 }}
{{ if gt .Width .Height }}
{{ $ratio = div (float .Width) .Height }}
{{ else }}
{{ $ratio = div (float .Height) .Width }}
{{ end }}
{{ if lt $ratio 1.75 }}
<meta name="twitter:card" content="summary_large_image">
{{ else }}
<meta name="twitter:card" content="summary">
{{ end }}
{{ else }}
<meta name="twitter:card" content="summary">
{{ end }}
{{/* 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

@@ -12,6 +12,6 @@
This post is part of a series:
{{ end }}
{{ delimit $series ", " }}
{{ delimit $series ", " | safeHTML }}
</div>
{{ end }}

View File

@@ -3,6 +3,7 @@
<a class="twitter-share"
target="_blank"
rel="noopener"
aria-label="{{ i18n "aria_share_twitter" }}"
onclick="share_event('Twitter');"
href="https://twitter.com/intent/tweet?url={{ .Permalink }}&text={{ .Title }}&via=bbaovanc">
{{- partial "icon.html" "twitter" -}}
@@ -13,6 +14,7 @@
<a class="facebook-share"
target="_blank"
rel="noopener"
aria-label="{{ i18n "aria_share_facebook" }}"
onclick="share_event('Facebook');"
href="https://www.facebook.com/sharer.php?u={{ .Permalink }}">
{{- partial "icon.html" "facebook" -}}
@@ -23,6 +25,7 @@
<a class="linkedin-share"
target="_blank"
rel="noopener"
aria-label="{{ i18n "aria_share_linkedin" }}"
onclick="share_event('LinkedIn');"
href="https://www.linkedin.com/sharing/share-offsite/?url={{ .Permalink }}">
{{- partial "icon.html" "linkedin" -}}
@@ -33,6 +36,7 @@
<a class="reddit-share"
target="_blank"
rel="noopener"
aria-label="{{ i18n "aria_share_reddit" }}"
onclick="share_event('Reddit');"
href="https://reddit.com/submit?url={{ .Permalink }}&title={{ .Title }}">
{{- partial "icon.html" "reddit" -}}
@@ -46,6 +50,7 @@
<a class="telegram-share"
target="_blank"
rel="noopener"
aria-label="{{ i18n "aria_share_telegram" }}"
onclick="share_event('Telegram');"
href="https://t.me/share/url?url={{ .Permalink }}&text={{ .Title }}">
{{- partial "icon.html" "telegram" -}}
@@ -55,6 +60,7 @@
{{ if .Site.Params.shareButtons.print }}
<a class="print-share"
aria-label="{{ i18n "aria_share_print" }}"
href="javascript:void(0)"
onclick="window.print(); share_event('Print');">
{{- partial "icon.html" "printer" -}}

View File

@@ -0,0 +1,3 @@
<time datetime="{{ .Format "2006-01-02T15:04:05Z07:00" }}" title="{{ . }}">
{{ .Format "January 2, 2006" }}
</time>

View File

@@ -0,0 +1,24 @@
<div class="top">
<header class="header">
<a href="{{ .Site.Home.Permalink | absLangURL }}">
{{ .Site.Title | markdownify }}
</a>
</header>
<nav class="navbar" aria-label="{{ i18n "aria_navbar" }}">
{{ with .Site.Home }}
<a class="navbar-item{{ if $.IsHome }} active{{ end }}" href="{{ .Permalink | absLangURL }}">{{ .Title | markdownify }}</a>
{{ end }}
{{ range .Site.Menus.main }}
{{ $isActive := false }}
{{/* https://discourse.gohugo.io/t/ismenucurrent-not-working-with-using-sectionpagesmenu/46687/2?u=bbaovanc */}}
{{ if or ($.HasMenuCurrent .Menu .) (eq .Page $) }}
{{ $isActive = true }}
{{ end }}
<a class="navbar-item{{ if $isActive }} active{{ end }}"
{{ if strings.HasPrefix .URL "http" }}target="_blank" rel="noopener"{{ end }}
href="{{ .URL }}">{{ .Name }}</a>
{{ end }}
</nav>
</div>

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

@@ -11,8 +11,8 @@
<div class="page-list">
{{ with .Paginator.Pages }}
{{ range . }}
<article class="post">
{{ .Render "summary/author" }}
<article class="page">
{{ .Render "summary" }}
</article>
{{ end }}
{{ else }}

View File

@@ -0,0 +1,16 @@
<h2 class="page-title">
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
{{ if .Draft }}{{ partial "icon.html" "write" }}{{ end }}
</h2>
{{ partial "page-metadata/author.html" . }}
{{ with .Summary }}
<div class="page-description">
{{ . }}
</div>
{{ end }}
<div class="readmore">
<a href="{{ .Permalink }}">{{ i18n "read_more" }} &rarr;</a>
</div>

View File

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

View File

@@ -1,5 +1,5 @@
{{ define "main" }}
<div class="author-name">
<div class="page-title">
<h1>
{{ partial "icon.html" "user-circle" }}
{{ .Title | markdownify }}
@@ -7,7 +7,7 @@
</h1>
</div>
{{ partial "post-metadata/author.html" . }}
{{ partial "page-metadata/author.html" . }}
{{ with .Content }}
{{ . }}

40
layouts/baseof.html Normal file
View File

@@ -0,0 +1,40 @@
{{ i18n "credit_comment" | safeHTML }}
<!DOCTYPE html>
<html lang="{{ .Language.Lang }}">
{{ partial "head.html" . }}
<body>
<a id="skip-to-main" href="#main-content">Skip to main content</a>
{{ partial "top.html" . }}
<div class="main-container">
{{ if not .IsHome }}
{{ partial "breadcrumb.html" . }}
{{ end }}
<main id="main-content">
{{ block "main" . }}
THIS TEXT SHOULD NOT SHOW. YUZSIQGHE (that string is so I can grep for it)
{{ end }}
</main>
{{ if or .Site.Copyright .Site.Params.footer }}
<footer>
{{ with .Site.Copyright }}
{{ . | safeHTML }}
{{ end }}
{{ with .Site.Params.footer }}
{{ . | $.RenderString (dict "display" "block") }}
{{ end }}
</footer>
{{ end }}
</div>
{{ block "post-body" . }}
{{/* currently this is only used for related posts */}}
{{ end }}
</body>
</html>

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

@@ -1,12 +1,12 @@
{{ define "main" }}
<div class="post-title">
<div class="page-title">
<h1>
{{ .Title | markdownify }}
{{ if .Draft }}{{ partial "icon.html" "write" }}{{ end }}
</h1>
</div>
{{ partial "post-metadata/full.html" . }}
{{ partial "page-metadata/post-full.html" . }}
{{ partial "series-box.html" . }}
{{ if .Params.Toc }}
@@ -22,13 +22,9 @@
</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">
<article class="post-content" data-pagefind-body>
{{ .Content }}
</article>
@@ -73,17 +69,16 @@
{{ partial "comments.html" . }}
</div>
{{ end }}
{{ end }}
{{ define "post-body" }}
{{ $related := .Site.RegularPages.Related . | first 10 }}
{{ with $related }}
<div class="related-posts full-width-page-list">
<div class="related-posts">
<hr>
<h1>{{ i18n "related_posts" }}</h1>
{{ partial "page-list.html" . }}
</div>
{{ end }}
{{ if .Site.Params.latestPostsOnContent }}
{{ partialCached "latest-posts.html" . }}
{{ end }}
{{ end }}

9
layouts/page.markdown.md Normal file
View File

@@ -0,0 +1,9 @@
{{ with .File -}}
{{ with (.Path | readFile) -}}
{{ . -}}
{{ else -}}
{{ errorf "file not found: %s" .Path -}}
{{ end -}}
{{ else -}}
{{ errorf "no file available for markdown template?" -}}
{{ end -}}

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 +0,0 @@
{{ i18n "credit_comment" | safeHTML }}

View File

@@ -1,7 +0,0 @@
{{ with .Description }}
<p>{{ . | markdownify }}</p>
{{ else }}
{{ with .Summary }}
{{ . }}
{{ end }}
{{ end }}

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 }}" />
{{ 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">
{{ end }}
{{ with resources.Get "css/syntax-light.css" | fingerprint "sha512" }}
<link rel="stylesheet" type="text/css" href="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
{{ end }}
{{ with resources.Get "js/bobatheme.js" | fingerprint "sha512" }}
<script defer src="{{ .Permalink }}" type="text/javascript" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"></script>
{{ end }}
{{ with resources.Get "js/share-event.js" | fingerprint "sha512" }}
<script defer src="{{ .Permalink }}" type="text/javascript" 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,11 +0,0 @@
<div class="latest-posts full-width-page-list">
<hr>
<h1>
{{ i18n "latest_posts" }}
{{ partial "rss-link.html" .Site.Home }}
</h1>
{{ with .Site.RegularPages | first 5 }}
{{ partial "page-list.html" . }}
{{ end }}
</div>

View File

@@ -1,5 +0,0 @@
{{ if gt .Paginator.TotalPages 1 }}
<nav class="pagination">
{{ template "_internal/pagination.html" . }}
</nav>
{{ end }}

View File

@@ -1,8 +0,0 @@
{{ if .IsTranslated }}
<span class="post-meta-item" aria-label="{{ i18n "aria_post_meta_translations" }}">
{{ partial "icon.html" "world" }}
{{ range .Translations }}
<a href="{{ .Permalink }}">{{ .Language }}</a>
{{ end }}
</span>
{{ end }}

View File

@@ -1,31 +0,0 @@
{{ if or .Date .Params.authors .IsTranslated .Site.Params.readingtime .Site.Params.gitFileURL }}
<div class="post-metadata" aria-label="{{ i18n "aria_post_metadata" }}">
{{ if .Date }}
<span class="post-meta-item" aria-label="{{ i18n "aria_post_meta_date" }}">
{{ partial "icon.html" "calendar" }}
<time datetime="{{ .Date.Format "2006-01-02" }}" pubdate>
{{ i18n "long_date" (dict "Date" .Date "Data" .Site.Data) }}
</time>
</span>
{{/* TODO: make this be a tooltip */}}
{{/* DISABLED
{{ if ne (time.Format "2006-01-02" .Lastmod) (time.Format "2006-01-02" .Date) }}
<span class="post-meta-item" aria-label="{{ i18n "aria_post_meta_modified_date" }}">
{{ partial "icon.html" "pencil" }}
<time datetime="{{ .Lastmod.Format "2006-01-02" }}" pubdate>
{{ i18n "long_date" (dict "Date" .Lastmod "Data" .Site.Data) }}
</time>
{{ end }}
</span>
*/}}
{{ end }}
{{ partial "post-meta-item/authors.html" . }}
{{ partial "post-meta-item/translations.html" . }}
{{ partial "post-meta-item/readingtime.html" . }}
{{ partial "post-meta-item/edithistory.html" . }}
{{ partial "post-meta-item/categories.html" . }}
{{ partial "post-meta-item/tags.html" . }}
</div>
{{ end }}

View File

@@ -1,19 +0,0 @@
{{ if or .Date .Params.authors .IsTranslated .Site.Params.readingtime }}
<div class="post-metadata" aria-label="{{ i18n "aria_post_metadata" }}">
{{ if .Date }}
<span class="post-meta-item" aria-label="date">
{{ partial "icon.html" "calendar" }}
<time datetime="{{ .Date.Format "2006-01-02" }}" pubdate>
{{ i18n "long_date" (dict "Date" .Date "Data" .Site.Data) }}
</time>
</span>
{{ end }}
{{ partial "post-meta-item/authors.html" . }}
{{ partial "post-meta-item/translations.html" . }}
{{ partial "post-meta-item/readingtime.html" . }}
{{ partial "post-meta-item/series.html" . }}
{{ partial "post-meta-item/categories.html" . }}
{{ partial "post-meta-item/tags.html" . }}
</div>
{{ end }}

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 }}" />
{{ 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>

View File

@@ -1,29 +0,0 @@
{{ $images := $.Resources.ByType "image" }}
{{ $featured := $images.GetMatch "*feature*" }}
{{ if not $featured }}
{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}
{{ end }}
{{ with $featured }}
{{ $ratio := 0 }}
{{ if gt .Width .Height }}
{{ $ratio = div (float .Width) .Height }}
{{ else }}
{{ $ratio = div (float .Height) .Width }}
{{ end }}
{{ if lt $ratio 1.75 }}
<meta name="twitter:card" content="summary_large_image">
{{ else }}
<meta name="twitter:card" content="summary">
{{ end }}
<meta name="twitter:image" content="{{ $featured.Permalink }}">
{{ end }}
<meta name="twitter:title" content="{{ .Title | plainify }}">
<meta name="twitter:description" content="{{ (partial "seo-description.html" .) | plainify }}">
{{ with .Site.Social.twitter }}
<meta name="twitter:site" content="@{{ . }}">
{{ end }}

View File

@@ -1,54 +0,0 @@
<header class="header">
<a href="{{ .Site.Home.Permalink | absLangURL }}">
{{ .Site.Title | markdownify }}
</a>
</header>
<div class="topbar">
<nav class="navbar" aria-label="{{ i18n "aria_navbar" }}">
{{ with .Site.Home }}
<a class="navbar-item{{ if $.IsHome }} active{{ end }}" href="{{ .Permalink | absLangURL }}">{{ .Title | markdownify }}</a>
{{ end }}
{{ range .Site.Menus.main }}
{{ $isActive := false }}
{{ if or ($.HasMenuCurrent .Menu .) ($.IsMenuCurrent .Menu .) }}
{{ $isActive = true }}
{{ end }}
<a class="navbar-item{{ if $isActive }} active{{ end }}"
{{ if strings.HasPrefix .URL "http" }}target="_blank" rel="noopener"{{ end }}
href="{{ .URL }}">{{ .Name }}</a>
{{ end }}
</nav>
{{ if .Site.IsMultiLingual }}
<details class="langpicker" aria-label="{{ i18n "aria_langpicker" }}">
<summary>
{{- partial "icon.html" "world" -}}
</summary>
<ul class="languages" aria-label="{{ i18n "aria_langpicker_list" }}">
{{ range .AllTranslations }}
<li>
<a class="langpicker-item{{ if eq .Language $.Site.Language }} active{{ end }}" href="{{ .Permalink }}">{{ .Language.LanguageName }}</a>
</li>
{{ end }}
{{ $site_translations := slice }}
{{ range .Site.Languages }}
{{ $site_translations = $site_translations | append .LanguageName }}
{{ end }}
{{ $translation_codes := slice }}
{{ range .AllTranslations }}
{{ $translation_codes = $translation_codes | append .Language }}
{{ end }}
{{ range (.Site.Languages | complement $translation_codes) }}
<li>
<a class="langpicker-item unavailable" aria-disabled="true">{{ .LanguageName }}</a>
</li>
{{ end }}
</ul>
</details>
{{ end }}
</div>

3
layouts/search.html Normal file
View File

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

View File

@@ -9,11 +9,11 @@
{{ . }}
{{ end }}
<div class="list-page-content">
<div class="list-page-container">
{{ with .Sections }}
<div class="sections">
{{ range . }}
{{ .Render "summary/section" }}
{{ .Render "summary" }}
{{ end }}
</div>
{{ end }}

View File

@@ -5,8 +5,10 @@
{{ .Title | markdownify }}
</h2>
<div class="section-description">
{{ partial "description-or-summary.html" . }}
</div>
{{ with .Summary }}
<div class="section-description">
{{ . }}
</div>
{{ end }}
</div>
</a>

View File

@@ -8,12 +8,12 @@
{{ . }}
{{ end }}
<div class="series-taxonomy-list">
{{ with .Pages }}
<div class="page-list series">
{{ with .Paginator.Pages }}
{{ range . }}
<article class="series-taxonomy">
{{ .Render "summary/series" }}
</article>
<div class="page series">
{{ .Render "summary" }}
</div>
{{ end }}
{{ else }}
<div>

View File

@@ -0,0 +1,21 @@
<h2 class="page-title">
{{ with .Parent.Params.icon }}{{ partial "icon.html" . }}{{ end }}
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
{{ if .Draft }}{{ partial "icon.html" "write" }}{{ end }}
</h2>
{{ partial "page-metadata/series.html" . }}
{{ with .Summary }}
<div class="page-description">
{{ . }}
</div>
{{ end }}
<div class="page-list series-inner">
{{ range .Data.Pages.Reverse }}
<article class="page">
{{ .Render "summary" }}
</article>
{{ end }}
</div>

View File

@@ -5,7 +5,7 @@
{{ partial "rss-link.html" . }}
</h1>
{{ partial "post-metadata/series.html" . }}
{{ partial "page-metadata/series.html" . }}
{{ with .Content }}
{{ . }}

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 +0,0 @@
<hr class="full-width-hr">

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

@@ -1,10 +0,0 @@
{{/* See https://willschenk.com/articles/2020/styling_tables_with_hugo/ */}}
{{ $class := "markdown" }}
{{ with .Get "class" }}
{{ $class = delimit (slice $class .) " " }}
{{ end }}
{{ $htmlTable := .Inner | markdownify }}
{{ $new := printf `<table class="%s">` $class }}
{{ (replace $htmlTable "<table>" $new) | safeHTML }}

View File

@@ -1,21 +1,19 @@
<h2 class="post-title">
<h2 class="page-title">
{{ with .Parent.Params.icon }}{{ partial "icon.html" . }}{{ end }}
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
{{ if .Draft }}{{ partial "icon.html" "write" }}{{ end }}
</h2>
{{ partial "post-metadata/short.html" . }}
{{ partial "page-metadata/post-short.html" . }}
{{ with .Resources.GetMatch "feature" }}
<div class="post-media">
{{ partial "figure.html" (dict "src" .) }}
{{ partial "feature-figure.html" . }}
{{ with .Summary }}
<div class="page-description">
{{ . }}
</div>
{{ end }}
<div class="post-description">
{{ partial "description-or-summary.html" . }}
</div>
<div class="readmore">
<a href="{{ .Permalink }}">{{ i18n "read_more" }} &rarr;</a>
</div>

View File

@@ -1,5 +1,5 @@
{{ define "main" }}
<div class="post-title">
<div class="page-title">
<h1>
{{ if eq .Data.Singular "tag" }}
{{ partial "icon.html" "tag" }}
@@ -26,9 +26,9 @@
<a href="{{ .Permalink }}">
<p>{{ .Title | markdownify }}</p>
</a>
{{ partial "post-metadata/taxonomy.html" . }}
{{ partial "page-metadata/taxonomy.html" . }}
</div>
{{ partial "description-or-summary.html" . }}
{{ .Summary }}
</article>
{{ end }}
{{ end }}

View File

@@ -1,5 +1,5 @@
{{ define "main" }}
<div class="post-title">
<div class="page-title">
<h1>
{{ if eq .Data.Singular "tag" }}
{{ partial "icon.html" "tag" }}
@@ -14,7 +14,7 @@
</h1>
</div>
{{ partial "post-metadata/taxonomy.html" . }}
{{ partial "page-metadata/taxonomy.html" . }}
{{ with .Content }}
{{ . }}

View File

@@ -0,0 +1,10 @@
# This is the official list of project authors for copyright purposes.
# This file is distinct from the CONTRIBUTORS.txt file.
# See the latter for an explanation.
#
# Names should be added to this file as:
# Name or Organization <email address>
JetBrains <>
Philipp Nurullin <philipp.nurullin@jetbrains.com>
Konstantin Bulenkov <kb@jetbrains.com>

Some files were not shown because too many files have changed in this diff Show More