84 Commits

Author SHA1 Message Date
fb40c8a4c3 Small spacing tweaks with page titles 2022-07-20 21:48:55 -05:00
0c248a4ca5 Prevent prompt symbol in console code blocks from being highlighted 2022-07-19 00:09:16 -05:00
56d8a07893 Fix syntax highlighting background 2022-07-02 19:01:01 -05:00
8aab2ca693 Fix chroma CSS overrides 2022-07-02 18:58:48 -05:00
e46288dc45 Update chroma (syntax highlighting) styles 2022-06-18 16:18:08 -05:00
637ffc12f5 Rename seo-tags/description.html partial to seo-description.html 2022-06-12 19:01:05 -05:00
2a40664bb6 Rename index.html to home.html in layouts 2022-06-12 18:51:30 -05:00
e34d2109ec Small semantic HTML tweaks 2022-05-23 01:33:24 -05:00
54f89dad51 Make .post-content an <article> instead of <div> 2022-05-22 19:51:16 -05:00
04b5017279 Add full-width-hr shortcode 2022-05-22 18:19:16 -05:00
a65a435b1d Replace <li> in page lists with semantic HTML <article> 2022-05-21 23:20:22 -05:00
73dc916d5a Add animation to :target 2022-05-21 20:56:26 -05:00
e8be3ae45b Use tag name in keywords meta tag 2022-05-18 15:01:06 -05:00
73ef9cc7a6 Update README.md 2022-05-18 12:45:32 -05:00
4adb754ae3 Fix inline code links 2022-05-15 18:26:17 -05:00
81709bb47e Set default cursor when hovering over current pagination page 2022-05-14 23:22:41 -05:00
9c3a076e96 Overhaul color scheme 2022-05-14 23:19:52 -05:00
833edacc1f Update aside shortcode with types and new accent colors 2022-05-14 00:13:01 -05:00
121a67a1fc Remove unreachable errorf in aside shortcode 2022-05-13 14:34:43 -05:00
8e3fb4038a Small shortcode cleanuo & use .IsNamedParams 2022-05-13 14:34:42 -05:00
e9266cdead Use h1 for website header 2022-05-09 20:03:13 -05:00
3a4cb538f7 Add markdownify to see-also shortcode 2022-05-09 19:53:00 -05:00
de84bc5ddf Update tags and categories to both use the same layouts 2022-05-09 19:25:11 -05:00
466c91a980 Improve categories list page layout 2022-05-09 18:56:40 -05:00
8d81f5e37c Replace "View source" with "Edit history" 2022-05-08 16:13:46 -05:00
7dd01894da Add print button 2022-05-08 15:21:41 -05:00
9665133ba4 Make hr color solid 2022-05-08 15:15:20 -05:00
b272ed6181 Hide "View source" button when printing 2022-05-08 15:12:13 -05:00
17918a5617 Update hidden elements when printing 2022-05-08 14:59:25 -05:00
493ee2da96 Redo color scheme 2022-05-08 00:46:05 -05:00
3d83e9fbdf Remove extra <hr> when no content set for homepage 2022-05-07 22:24:09 -05:00
684769df5a Prevent some elements on categories taxonomy from wrapping 2022-05-06 22:15:48 -05:00
9bee463a3c Add post count to category taxonomy 2022-05-06 21:47:24 -05:00
805dc65ccb Split duplicated .page-list div into separate partial 2022-05-06 21:14:42 -05:00
a9d1c25ee4 Update i18n files 2022-05-06 20:34:48 -05:00
fe08bdc93c Prevent navbar items from wrapping 2022-05-06 20:19:45 -05:00
026d5ab2c3 Remove an empty CSS rule I accidentally left in 2022-05-06 20:18:14 -05:00
311d846cb8 Support categories again, but hopefully a bit better 2022-05-06 20:16:41 -05:00
0888356292 Show full content on tag term page 2022-05-06 19:44:27 -05:00
bcf0b68df9 Don't check for "tag" in generic taxonomy list 2022-05-06 15:06:36 -05:00
034ef462a2 Make a config option for "Latest Posts" on content pages 2022-05-04 22:05:57 -05:00
56610009e9 Add latest posts section to the bottom of every content page 2022-05-04 22:02:36 -05:00
76b0383c2c Update related posts design and move comments above it 2022-05-04 18:45:02 -05:00
0877a9d400 Use i18n for "SEE ALSO" string 2022-05-04 18:41:41 -05:00
2731d9795f Add see-also shortcode 2022-05-03 22:09:18 -05:00
87a6da5c41 Make series in archetype lowercase 2022-05-03 14:13:40 -05:00
e450f3fbc7 Add commented-out CSS hack to fix Telegram share button 2022-05-02 21:33:13 -05:00
cba6dd0a2f Use partialCached on icon partial 2022-05-02 21:11:38 -05:00
fa5c014a1b Add share_event JS function 2022-05-01 18:14:02 -05:00
a172b1ea21 Redo favicon stuff
See https://medium.com/swlh/are-you-using-svg-favicons-yet-a-guide-for-modern-browsers-836a6aace3df
2022-04-30 21:53:05 -05:00
93d9164c6a Add social media share icons to example config 2022-04-30 21:25:41 -05:00
72ebcf134a Add share buttons below post 2022-04-30 21:23:45 -05:00
effd3a265b Remove width and height in icons 2022-04-30 21:19:44 -05:00
d41f3facd7 Add a couple divs in index.html for organization 2022-04-29 23:54:45 -05:00
c82d5602bb Add "Latest Posts" section to homepage 2022-04-29 19:09:26 -05:00
219f97bc00 Add target="_blank" automatically to navbar items 2022-04-27 21:51:26 -05:00
2f6d67a03f Disable lastmod item in post metadata 2022-04-24 01:23:33 -05:00
e97d4f921d Add background-accent color 2022-04-23 22:47:42 -05:00
5ffca36b84 Add table formatting, requires using custom "table" shortcode 2022-04-23 17:54:05 -05:00
f4c056b99c Add simple <abbr> shortcode 2022-04-23 17:10:48 -05:00
3713fdae5b Insert line breaks between commas in CSS 2022-04-23 17:09:13 -05:00
1127795717 Remove duplicate padding rule on .series-pages 2022-04-21 20:43:47 -05:00
1db48c3101 Somehow I had two .navbar queries next to eachother 2022-04-21 20:40:35 -05:00
430139d292 Add lastmod to blog archetype 2022-04-20 09:47:40 -05:00
ac9ca6f97e Add a duplicate series-box to the bottom of the page 2022-04-19 17:51:03 -05:00
8cadf8e735 Move prevnext to be above related posts 2022-04-12 21:57:58 -05:00
42a7e27d09 Use horizontal scrolling on related posts section 2022-04-11 21:08:39 -05:00
2371f1de13 Revert "Use a markdown file for footer"
This reverts commit 81e141cef9.

The footer.md gets rendered at /footer/ which is not intended.
2022-04-11 02:10:40 -05:00
81e141cef9 Use a markdown file for footer 2022-04-10 22:33:28 -05:00
2113c7a4e9 Better related posts section 2022-04-10 15:42:58 -05:00
b14e0e90fd Don't make the gap bigger for regular list pages 2022-04-10 03:08:22 -05:00
2742bac9ff Increase gap between series 2022-04-10 02:48:56 -05:00
e8f9d1c5df Replace See also with a nicer looking Related posts section 2022-04-10 02:14:42 -05:00
dff23045a8 Use <main> and have different class names for authors 2022-04-09 23:29:22 -05:00
4f450374cf Use RenderString for extra footer content 2022-04-09 20:03:56 -05:00
a3a7f50a5b Remove gap between paragraphs in footer 2022-04-09 19:54:42 -05:00
2cc4f45d4f Add the option to add even more stuff to footer 2022-04-09 19:26:52 -05:00
33d0f81444 Set video preload to metadata 2022-04-09 01:17:59 -05:00
5668feed1d Support additional-head.html 2022-04-08 01:18:20 -05:00
586bea37d5 Re-add margins on mobile 2022-04-04 21:54:52 -05:00
37c04460b5 Clean up some of the div layout 2022-04-04 21:47:26 -05:00
11599e01d7 Don't put page breaks in the middle of code blocks 2021-11-25 23:56:10 -06:00
80e96736cd Give a name to the #top anchor 2021-11-25 23:45:46 -06:00
6bedf987d6 Don't put the no_posts message inside a <ul> 2021-11-25 23:34:56 -06:00
58 changed files with 997 additions and 427 deletions

View File

@ -1,2 +1,4 @@
# bobatheme
Simple Hugo theme
The (boba) best Hugo theme. Contains everything I need for bbaovanc.com and
boba.best.

View File

@ -2,6 +2,7 @@
title: {{ replace .Name "-" " " | humanize }}
date: {{ .Date }}
lastmod: {{ .Date }}
toc: true
comments: true
draft: true
@ -9,11 +10,14 @@ draft: true
authors:
- {{ with .Site.Author.name }}{{ . }}{{ else }}John Doe{{ end }}
categories:
- archetype-stuff
tags:
- awesome
series:
- Archetype
- archetype
# this will be shown for the article in list pages and in the page metadata
# it can be either an image or video (this might change in the future, however)

View File

@ -0,0 +1,15 @@
---
title: {{ replace .Name "-" " " | title }}
---
A short summary of what the category is about.
<!--more-->
Optionally provide more information about the category here. This part will only
show on the category page, not on the category list page.
If you delete this section, DO NOT delete the summary separator (`<!--more-->`)
or else the summary won't be shown.

View File

@ -3,55 +3,119 @@
*/
:root {
--background: #111;
--background-2: #222;
--background-3: #282828;
--background-4: #333;
--background-5: #444;
--text-normal: #d3d3d3;
--link-color: #4da6ff;
--figure-border: #1b5b9b;
--background-0: #111111; /* lch(5, 0, X) */
--background-1: #212121; /* lch(12.5, 0, X) */
--background-2: #303030; /* lch(20, 0, X) */
--background-3: #414141; /* lch(27.5, 0, X) */
--background-pink-1: #331821; /* lch(12.5, 15, 0) */
--background-red-1: #331917; /* lch(12.5, 15, 30) */
--background-orange-1: #2e1c0e; /* lch(12.5, 15, 60) */
--background-yellow-1: #262008; /* lch(12.5, 15, 90) */
--background-lime-1: #1b230c; /* lch(12.5, 15, 120) */
--background-green-1: #0e2516; /* lch(12.5, 15, 150) */
--background-turquoise-1: #012620; /* lch(12.5, 15, 180) */
--background-teal-1: #00262b; /* lch(12.5, 15, 210) -- out of sRGB */
--background-cerulean-1: #032432; /* lch(12.5, 15, 240) */
--background-blue-1: #152135; /* lch(12.5, 15, 270) */
--background-purple-1: #241d33; /* lch(12.5, 15, 300) */
--background-magenta-1: #2e1a2b; /* lch(12.5, 15, 330) */
--background-pink-2: #4b2431; /* lch(20, 20, 0) */
--background-red-2: #4a2623; /* lch(20, 20, 30) */
--background-orange-2: #432a17; /* lch(20, 20, 60) */
--background-yellow-2: #373012; /* lch(20, 20, 90) */
--background-lime-2: #283416; /* lch(20, 20, 120) */
--background-green-2: #163721; /* lch(20, 20, 150) */
--background-turquoise-2: #003830; /* lch(20, 20, 180) -- out of sRGB */
--background-teal-2: #00373e; /* lch(20, 20, 210) -- out of sRGB */
--background-cerulean-2: #013549; /* lch(20, 20, 240) */
--background-blue-2: #1f314e; /* lch(20, 20, 270) */
--background-purple-2: #352c4a; /* lch(20, 20, 300) */
--background-magenta-2: #43263f; /* lch(20, 20, 330) */
--background-accent-1: var(--background-blue-1);
--background-accent-2: var(--background-blue-2);
--text-0: #d4d4d4; /* lch(85, 0, X) */
--text-1: #d4d4d4; /* lch(85, 0, X) */
--text-2: #d4d4d4; /* lch(85, 0, X) */
--text-3: #e9e9e9; /* lch(92.5, 0, X) */
--text-gray-0: #ababab; /* lch(70, 0, X) */
--text-gray-1: #919191; /* lch(60, 0, X) */
--link-0: #3a94fb; /* lch(60, 60, 270) */
--figure-border: #1f5593; /* lch(35, 40, 270) */
--pagination-active-hover-text: black;
--pagination-active-background: #163b64;
--pagination-active-hover-background: #286ab2;
--pagination-active-background: #1a3d69; /* lch(25, 30, 270) */
--pagination-active-hover-background: #2061a8; /* lch(40, 45, 270) */
}
@media (prefers-color-scheme: light) {
@media print, (prefers-color-scheme: light) {
:root {
--background: #eee;
--background-2: #ddd;
--background-3: #d8d8d8;
--background-4: #bbb;
--background-5: #aaa;
--text-normal: #000;
--link-color: #0057bf;
--figure-border: #2e7bc9;
--background-0: #f1f1f1; /* lch(95, 0, X) */
--background-1: #dbdbdb; /* lch(87.5, 0, X) */
--background-2: #c6c6c6; /* lch(80, 0, X) */
--background-3: #b2b2b2; /* lch(72.5, 0, X) */
--background-pink-1: #f7d1dc; /* lch(87.5, 15, 0) */
--background-red-1: #f8d2ce; /* lch(87.5, 15, 30) */
--background-orange-1: #f1d6c3; /* lch(87.5, 15, 60) */
--background-yellow-1: #e4dbbf; /* lch(87.5, 15, 90) */
--background-lime-1: #d5dfc2; /* lch(87.5, 15, 120) */
--background-green-1: #c6e3cc; /* lch(87.5, 15, 150) */
--background-turquoise-1: #bce4db; /* lch(87.5, 15, 180) */
--background-teal-1: #bae3e9; /* lch(87.5, 15, 210) */
--background-cerulean-1: #c2e0f4; /* lch(87.5, 15, 240) */
--background-blue-1: #d0dcf8; /* lch(87.5, 15, 270) */
--background-purple-1: #e1d7f4; /* lch(87.5, 15, 300) */
--background-magenta-1: #efd3ea; /* lch(87.5, 15, 330) */
--background-pink-2: #fbb1c8; /* lch(80, 30, 0) */
--background-red-2: #fbb4ac; /* lch(80, 30, 30) */
--background-orange-2: #eebc97; /* lch(80, 30, 60) */
--background-yellow-2: #d6c58e; /* lch(80, 30, 90) */
--background-lime-2: #b8ce95; /* lch(80, 30, 120) */
--background-green-2: #9ad4a9; /* lch(80, 30, 150) */
--background-turquoise-2: #81d6c5; /* lch(80, 30, 180) */
--background-teal-2: #7ad5e1; /* lch(80, 30, 210) */
--background-cerulean-2: #8cd0f6; /* lch(80, 30, 240) */
--background-blue-2: #adc8fe; /* lch(80, 30, 270) */
--background-purple-2: #d0bef7; /* lch(80, 30, 300) */
--background-magenta-2: #ecb5e3; /* lch(80, 30, 330) */
--background-accent-1: var(--background-blue-1);
--background-accent-2: var(--background-blue-2);
--text-0: #262626; /* lch(15, 0, X) */
--text-1: #262626; /* lch(15, 0, X) */
--text-2: #262626; /* lch(15, 0, X) */
--text-3: #171717; /* lch(72.5, 0, X) */
--text-gray-0: #474747; /* lch(30, 0, X) */
--text-gray-1: #5e5e5e; /* lch(40, 0, X) */
--link-0: #2061a8; /* lch(40, 45, 270) */
--figure-border: #367acd; /* lch(50, 50, 270) */
--pagination-active-hover-text: white;
--pagination-active-background: #3977bd;
--pagination-active-hover-background: #154172;
--pagination-active-background: #9fbaf0; /* lch(75, 30, 270) */
--pagination-active-hover-background: #6193e0; /* lch(60, 45, 270) */
}
}
@media print {
:root {
--background: #fff;
--background-2: #ddd;
--background-3: #d8d8d8;
--background-4: #bbb;
--background-5: #aaa;
--text-normal: #000;
--link-color: #0057bf;
--figure-border: #2e7bc9;
--pagination-active-hover-text: white;
--pagination-active-background: #3977bd;
--pagination-active-hover-background: #154172;
--background-0: #fff;
}
}
/* Post layout (in list pages) */
.list-page-content {
display: flex;
@ -59,8 +123,8 @@
gap: 40px;
}
.page-list ul,
.series-taxonomy ul {
.page-list,
.series-taxonomy-list {
display: flex;
flex-direction: column;
list-style: none;
@ -68,14 +132,20 @@
gap: 40px;
}
.page-list li,
.series-taxonomy li {
.series-taxonomy-list {
gap: 80px;
}
.page-list .post,
.series-taxonomy-list .series-taxonomy,
.series-taxonomy .post {
padding-top: 8px;
padding-left: 24px;
padding-right: 24px;
padding-bottom: 24px;
border-radius: 12px;
background-color: var(--background-2);
background-color: var(--background-1);
color: var(--text-1);
}
.post-series-position {
@ -84,24 +154,34 @@
opacity: .75;
}
.post-title {
.post-title,
.author-name {
margin-bottom: 10px;
}
.post-title a {
.post-title h1,
.author-name h1 {
margin: 0;
}
.post-title a,
.author-name a {
color: inherit;
text-decoration: inherit;
}
.post-meta-item {
.post-meta-item,
.author-meta-item {
margin-right: 10px;
display: inline-block;
}
.post-metadata {
margin-bottom: 15px;
.post-metadata,
.author-metadata {
margin-bottom: 24px;
}
.categories,
.tags,
.series {
margin-top: 10px;
@ -111,7 +191,8 @@
margin-top: 15px;
}
.post-description {
.post-description,
.author-description {
margin-top: 10px;
}
@ -121,41 +202,66 @@
/* Tags list format */
.tag-list ul {
display: flex;
/* Taxonomy list format */
.taxonomy-list a,
.taxonomy-list .taxonomy-metadata {
white-space: nowrap;
}
.taxonomy-list p {
margin: 0;
}
.taxonomy-list {
list-style: none;
gap: 10px;
flex-flow: row wrap;
padding: 0;
display: flex;
flex-direction: column;
gap: 10px;
}
.tag-list a {
background-color: var(--background-2);
.taxonomy-list .taxonomy-term {
background-color: var(--background-1);
color: var(--text-1);
padding: 8px 12px;
border-radius: 12px;
border-radius: 8px;
display: flex;
flex-direction: row;
gap: 20px;
}
.tag-list a:hover {
text-decoration: none;
background-color: var(--background-4);
.taxonomy-list-left {
display: flex;
flex-direction: column;
}
@media (max-width: 480px) {
.taxonomy-list .taxonomy-term {
flex-direction: column;
gap: 4px;
}
.taxonomy-list-left {
flex-direction: row;
justify-content: space-between;
}
}
/* Series list format */
.series-pages ul {
.series-page-list {
display: flex;
gap: 10px;
flex-flow: row wrap;
list-style: none;
padding: 0;
background-color: var(--background);
background-color: var(--background-0);
color: var(--text-0);
padding: 8px;
border-radius: 16px;
}
.series-pages li {
.series-page-list .post {
flex: 1;
min-width: 49%;
}
@ -170,13 +276,15 @@
}
.section {
background-color: var(--background-2);
background-color: var(--background-1);
color: var(--text-1);
border-radius: 12px;
padding: 1px 25px;
}
.section:hover {
background-color: var(--background-4);
background-color: var(--background-2);
color: var(--text-2);
}
.section-title {
@ -202,8 +310,13 @@
/* Header formatting (website title and article section headers) */
.top {
margin: 20px;
.header {
margin: 16px 0;
}
.header h1 {
font-size: 1.5em;
font-weight: bold;
}
.header a,
@ -220,14 +333,16 @@
/* Content formatting */
.series-box {
background-color: var(--background-2);
background-color: var(--background-1);
color: var(--text-1);
padding: 8px 16px;
border-radius: 8px;
margin: 15px 0;
}
.table-of-contents {
background-color: var(--background-2);
background-color: var(--background-1);
color: var(--text-1);
padding: 8px 20px;
border-radius: 8px;
margin: 10px 0;
@ -242,21 +357,125 @@
padding: 8px 15px;
}
.content,
footer {
margin: 20px;
/* Related posts */
.full-width-page-list {
/* make left/right 0 margin so it takes up full width */
margin: 25px 0;
}
footer {
text-align: center;
.full-width-page-list > hr,
.full-width-page-list > h1 {
margin-left: 20px;
margin-right: 20px;
}
.full-width-page-list .post {
min-width: 300px;
max-width: 300px;
}
.full-width-page-list .post:first-child {
margin-left: 20px;
}
.full-width-page-list .post:last-child {
margin-right: 20px;
}
@media (max-width: 720px) {
/* when the screen is smaller than max size, make sure that the .related div
* still reaches the screen edge. then if the posts overflow and require
* scrolling, you can see it cut off on the side of your phone screen
*/
.full-width-page-list {
margin-left: -20px;
margin-right: -20px;
}
}
@media (min-width: 720px) {
.full-width-page-list {
/* this makes it full width -- 720px max-width on body it is exactly 720px
* so .related takes up full width
*/
margin-left: calc(-100vw / 2 + 720px / 2);
margin-right: calc(-100vw / 2 + 720px / 2);
}
}
.full-width-page-list .page-list {
display: flex;
flex-direction: row;
gap: 20px;
overflow-x: scroll;
}
/* Social media share buttons */
.share-buttons {
background: var(--background-1);
color: var(--text-1);
margin: 25px 0;
padding: 8px 0;
border-radius: 8px;
display: flex;
gap: 8px;
justify-content: center;
}
.share-buttons button,
.share-buttons a {
background-color: var(--background-2);
color: var(--text-2);
padding: 4px;
border-radius: 8px;
}
.share-buttons button {
border: none;
}
.share-buttons svg {
width: 32px;
height: 32px;
}
/* https://stackoverflow.com/a/72073682/19003757 */
/*
.telegram-share > svg {
transform: scale(1.5);
margin: 9px -9px -9px 9px;
}
*/
/* See also formating */
.see-also {
background-color: var(--background-1);
color: var(--text-1);
padding: 8px 12px;
border-radius: 8px;
margin: 10px 0;
}
.see-also p {
margin: 0;
}
/* Back to top */
#back-to-top {
position: fixed;
float: right;
bottom: 25px;
right: 25px;
background-color: var(--background-3);
background-color: var(--background-1);
color: var(--text-1);
border-radius: 100%;
padding: 12px;
display: none;
@ -269,7 +488,8 @@ footer {
display: flex;
flex-wrap: nowrap;
flex-direction: row;
background-color: var(--background-2);
background-color: var(--background-1);
color: var(--text-1);
border-radius: 8px;
margin-top: 5px;
padding: 4px;
@ -278,9 +498,6 @@ footer {
.navbar {
display: flex;
}
.navbar {
flex-grow: 1;
overflow: auto;
}
@ -288,15 +505,21 @@ footer {
.navbar a {
padding: 8px 12px;
border-radius: 12px;
white-space: nowrap;
}
.navbar-item:hover,
.langpicker summary:hover,
.langpicker[open] summary {
background-color: var(--background-5);
background-color: var(--background-3);
text-decoration: none;
}
.langpicker summary:hover,
.langpicker[open] summary {
color: var(--text-3);
}
.topbar .active {
font-weight: bold;
}
@ -317,8 +540,9 @@ footer {
position: absolute;
margin-top: 8px;
right: 0;
background-color: var(--background-2);
border: 2px solid var(--background-4);
background-color: var(--background-1);
color: var(--text-1);
border: 2px solid var(--background-2);
padding: 8px 12px;
border-radius: 8px;
list-style: none;
@ -347,14 +571,28 @@ html {
}
body {
background-color: var(--background);
color: var(--text-normal);
background-color: var(--background-0);
color: var(--text-0);
font-family: "Open Sans", "Noto Sans", sans-serif;
margin: auto;
margin: 20px;
max-width: 720px;
overflow-wrap: break-word;
}
@media (min-width: 760px) {
body {
margin: 20px auto;
}
}
footer {
text-align: center;
}
footer p {
margin: 0;
}
img,
video {
max-width: 100%;
@ -383,15 +621,8 @@ figcaption {
text-align: center;
}
aside {
background-color: var(--background-2);
padding: 12px 16px;
margin: 16px 0;
border-radius: 8px;
}
a {
color: var(--link-color);
color: var(--link-0);
text-decoration: inherit;
}
@ -400,12 +631,51 @@ a:hover {
}
blockquote {
border-left: 5px solid var(--background-4);
border-left: 5px solid var(--background-2);
padding-left: 15px;
}
hr {
border-color: var(--background-5);
border: 1px solid var(--background-3);
}
@media (min-width: 720px) {
.full-width-hr {
/* see also: the related-posts section too */
margin-left: calc(-100vw / 2 + 760px / 2);
margin-right: calc(-100vw / 2 + 760px / 2);
}
}
table.markdown {
border-collapse: collapse;
border: 2px solid var(--text-1);
}
.markdown thead {
background-color: var(--background-2);
color: var(--text-2);
}
.markdown th,
.markdown td {
padding: 8px;
}
.markdown tbody tr:nth-child(odd) {
background-color: var(--background-0);
color: var(--text-0);
}
.markdown tbody tr:nth-child(even) {
background-color: var(--background-1);
color: var(--text-1);
}
:target {
animation: target-fade 10s ease-out;
}
@keyframes target-fade {
0% { background-color: var(--background-yellow-2); }
}
* {
@ -415,17 +685,29 @@ hr {
/* Code blocks */
.highlight {
.highlight > .chroma {
margin: 16px 0;
}
.highlight > pre {
padding: 12px 8px;
overflow: auto;
}
.chroma {
background-color: var(--background-1) !important;
}
.chroma .gp {
/* Generic Prompt symbol */
user-select: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
}
:not(pre) > code {
background-color: var(--background-3);
background-color: var(--background-2);
/* Disable this because it overrides inline code blocks that are
* also links
color: var(--text-2);
*/
padding: 2px 4px;
overflow-wrap: break-word;
}
@ -440,11 +722,53 @@ code {
/* Asides */
aside {
padding: 8px 16px;
margin: 16px 0;
border-radius: 8px;
color: var(--text-1);
}
.aside-title {
margin-bottom: 8px;
padding-bottom: 4px;
font-weight: bold;
}
.aside-content > :first-child {
margin-top: 0;
}
.aside-content > :last-child {
margin-bottom: 0;
}
aside.note {
background-color: var(--background-blue-1);
}
aside.info {
background-color: var(--background-green-1);
}
aside.tip {
background-color: var(--background-teal-1);
}
aside.warning {
background-color: var(--background-yellow-1);
}
aside.example {
background-color: var(--background-purple-1);
}
aside.quote {
background-color: var(--background-1);
}
/* Icons */
.icon {
width: 20px;
height: 20px;
color: var(--text-normal);
color: var(--text-1);
text-align: center;
display: inline;
vertical-align: middle;
@ -471,7 +795,7 @@ h1 svg.icon {
.page-link {
padding: 8px 16px;
border-radius: 5px;
color: var(--text-normal);
color: var(--text-1);
}
.page-item.active .page-link {
@ -482,6 +806,7 @@ h1 svg.icon {
.page-item.active .page-link:hover {
background-color: var(--pagination-active-hover-background);
color: var(--pagination-active-hover-text);
cursor: default;
}
.page-link:hover {
@ -489,7 +814,7 @@ h1 svg.icon {
}
:not(li.disabled) > .page-link:hover {
background-color: var(--background-5);
background-color: var(--background-3);
}
li.disabled {
@ -503,10 +828,8 @@ li.disabled > .page-link:hover {
/* Breadcrumb navigation */
.breadcrumb {
margin-top: 40px;
margin-bottom: 20px;
margin-left: 20px;
.breadcrumb ul {
margin: 30px 0 20px;
}
.breadcrumb ul {
@ -537,12 +860,14 @@ li.disabled > .page-link:hover {
display: flex;
flex-direction: column;
color: inherit;
background-color: var(--background-2);
background-color: var(--background-1);
color: var(--text-1);
padding: 8px 16px;
}
.prevnext > a:hover {
background-color: var(--background-4);
background-color: var(--background-2);
color: var(--text-2);
text-decoration: none;
}
@ -572,12 +897,8 @@ li.disabled > .page-link:hover {
/* Light mode */
@media print, (prefers-color-scheme: light) {
/* Basic elements */
.section:hover {
color: inherit;
}
@media print,
(prefers-color-scheme: light) {
li.disabled {
opacity: .25;
}
@ -588,10 +909,12 @@ li.disabled > .page-link:hover {
/* Print compatibility */
@media print {
.top,
.breadcrumb,
.section-header-link,
.post-meta-edit-history,
.prevnext,
.comments {
.share-buttons,
.related-posts,
.latest-posts {
display: none;
}
@ -607,6 +930,7 @@ li.disabled > .page-link:hover {
pre {
white-space: pre-wrap;
overflow-wrap: anywhere;
break-inside: avoid;
}
.table-of-contents {

View File

@ -1,14 +1,21 @@
/* tango style */
@media print, (prefers-color-scheme: light) {
.chroma {
color: black;
}
/* Background */ .bg { background-color: #f8f8f8 }
/* PreWrapper */ .chroma { background-color: #f8f8f8; }
/* Other */ .chroma .x { color: #000000 }
/* Error */ .chroma .err { color: #a40000 }
/* CodeLine */ .chroma .cl { }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; }
/* LineHighlight */ .chroma .hl { display: block; width: 100%;background-color: #ffffcc }
/* LineNumbersTable */ .chroma .lnt { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* LineNumbers */ .chroma .ln { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* 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 }
/* Line */ .chroma .line { display: flex; }
/* Keyword */ .chroma .k { color: #204a87; font-weight: bold }
/* KeywordConstant */ .chroma .kc { color: #204a87; font-weight: bold }
/* KeywordDeclaration */ .chroma .kd { color: #204a87; font-weight: bold }
@ -83,6 +90,7 @@
/* GenericTraceback */ .chroma .gt { color: #a40000; font-weight: bold }
/* GenericUnderline */ .chroma .gl { color: #000000; text-decoration: underline }
/* TextWhitespace */ .chroma .w { color: #f8f8f8; text-decoration: underline }
}
@media (prefers-color-scheme: light) {

View File

@ -1,11 +1,16 @@
/* Background */ .chroma { color: #d0d0d0; background-color: #202020 }
/* native style */
/* 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 { }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; }
/* LineHighlight */ .chroma .hl { display: block; width: 100%;background-color: #363636 }
/* LineNumbersTable */ .chroma .lnt { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #686868 }
/* LineNumbers */ .chroma .ln { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #686868 }
/* 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 }
/* Line */ .chroma .line { display: flex; }
/* Keyword */ .chroma .k { color: #6ab825; font-weight: bold }
/* KeywordConstant */ .chroma .kc { color: #6ab825; font-weight: bold }
/* KeywordDeclaration */ .chroma .kd { color: #6ab825; font-weight: bold }

3
assets/js/share-event.js Normal file
View File

@ -0,0 +1,3 @@
function share_event(service) {
// this function does nothing by default
}

View File

@ -4,11 +4,10 @@ markup:
lineNos: true
params:
faviconICO: favicon.ico
faviconPNG: favicon.png
readingtime: true
taxonomies:
category: categories
tag: tags
author: authors
series: series

View File

@ -20,9 +20,9 @@ params:
# these are for the OpenGraph/Twitter embeds in Hugo
description: Example website for bobatheme
# these are for favicons in bobatheme (defaults are shown here)
# faviconICO: favicon.ico
# faviconPNG: favicon.png
# 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
@ -30,6 +30,26 @@ params:
# 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

View File

@ -8,6 +8,12 @@ table_of_contents:
browser_no_video_support:
other: "Your browser does not support video."
latest_posts:
other: "Latest Posts"
see_also:
other: "SEE ALSO:"
# Meta items
long_date:
@ -21,6 +27,9 @@ readingtime:
one: "{{ . }} min"
other: "{{ . }} mins"
edit_history:
other: "Edit history"
# Post count
no_posts:
@ -35,8 +44,8 @@ post_count:
read_more:
other: "Read more"
see_also:
other: "See also"
related_posts:
other: "Related Posts"
older_post:
other: "Older"
@ -55,12 +64,15 @@ aria_back_to_top_button:
aria_rss_link:
other: "RSS feed link"
aria_post_meta_view_source:
other: "link to page source"
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"
@ -82,6 +94,9 @@ aria_post_metadata:
aria_author_metadata:
other: "author metadata"
aria_taxonomy_metadata:
other: "taxonomy metadata"
aria_post_meta_date:
other: "date"
@ -94,6 +109,9 @@ aria_author_post_count:
aria_author_word_count:
other: "word count"
aria_taxonomy_post_count:
other: "post count"
aria_series_metadata:
other: "series metadata"

View File

@ -8,6 +8,12 @@ table_of_contents:
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:"
# Meta items
long_date:
@ -21,22 +27,25 @@ readingtime:
one: "{{ . }} min"
other: "{{ . }} mins"
edit_history:
other: "Historial de cambios"
# Post count
no_posts:
other: "¡No hay contenido para mostrar!"
# post_count:
# one: "{{ . }} post"
# other: "{{ . }} posts"
post_count:
one: "{{ . }} publicación"
other: "{{ . }} publicaciones"
# Navigation
read_more:
other: "Leer más"
see_also:
other: "Véase también"
related_posts:
other: "Publicaciones similares"
older_post:
other: "Más antiguo"
@ -55,12 +64,15 @@ newer_post:
# aria_rss_link:
# other: "RSS feed link"
# aria_post_meta_view_source:
# other: "link to page source"
# 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"
@ -82,6 +94,9 @@ newer_post:
# aria_author_metadata:
# other: "author metadata"
# aria_taxonomy_metadata:
# other: "taxonomy metadata"
# aria_post_meta_date:
# other: "date"
@ -94,6 +109,9 @@ newer_post:
# aria_author_word_count:
# other: "word count"
# aria_taxonomy_post_count:
# other: "post count"
# aria_series_metadata:
# other: "series metadata"

View File

@ -4,7 +4,7 @@
{{ partial "head.html" . }}
<body>
<a id="top" aria-hidden="true"></a>
<a id="top" name="top" aria-hidden="true"></a>
<div class="top">
{{ partial "top.html" . }}
@ -14,17 +14,23 @@
{{ partial "breadcrumb.html" . }}
{{ end }}
<div class="content">
<main>
{{ block "main" . }}
{{ .Content }}
THIS TEXT SHOULD NOT SHOW. YUZSIQGHE (that string is so I can grep for it)
{{ end }}
</div>
</main>
{{ with .Site.Copyright }}
{{ if or .Site.Copyright .Site.Params.footer }}
<hr>
<footer>
<hr>
<small>
{{ . | safeHTML }}
{{ with .Site.Copyright }}
<p>{{ . | safeHTML }}</p>
{{ end }}
{{ with .Site.Params.footer }}
{{ . | $.RenderString (dict "display" "block") }}
{{ end }}
</small>
</footer>
{{ end }}

View File

@ -14,17 +14,7 @@
</div>
{{ end }}
<div class="page-list">
<ul>
{{ range .Paginator.Pages }}
<li>{{ .Render "summary/post" }}</li>
{{ else }}
<div>
{{ i18n "no_posts" }}
</div>
{{ end }}
</ul>
</div>
{{ partial "page-list.html" .Paginator.Pages }}
</div>
{{ partial "pagination.html" . }}

View File

@ -7,25 +7,7 @@
</div>
{{ partial "post-metadata/full.html" . }}
{{ with (.GetTerms "series") }}
{{ $series := slice }}
{{ range . }}
{{ $series = $series | append (printf `<a href="%s">%s</a>` .Permalink .LinkTitle) }}
{{ end }}
<div class="series-box">
{{ partial "icon.html" "info" }}
{{ if gt (len $series) 1 }}
This post is part of multiple series:
{{ else }}
This post is part of a series:
{{ end }}
{{ delimit $series ", " }}
</div>
{{ end }}
{{ partial "series-box.html" . }}
{{ if .Params.Toc }}
<div class="table-of-contents" aria-label="{{ i18n "aria_table_of_contents" }}">
@ -42,27 +24,15 @@
{{ with .Resources.GetMatch "feature" }}
<div class="post-media">
{{ partial "figure.html" (dict "src" . "border" true) }}
{{ partial "figure.html" (dict "src" .) }}
</div>
{{ end }}
{{ .Content }}
<article class="post-content">
{{ .Content }}
</article>
{{ $related := .Site.RegularPages.Related . | first 5 }}
{{ with $related }}
<div class="see-also">
<h2>{{ i18n "see_also" }}</h2>
<ul>
{{ range . }}
<li>
{{ with .Parent.Params.icon }}{{ partial "icon.html" . }}{{ end }}
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
</li>
{{ end }}
</ul>
</div>
{{ end }}
{{ partial "series-box.html" . }}
{{ if or .NextInSection .PrevInSection }}
<div class="prevnext">
@ -94,9 +64,26 @@
</div>
{{ end }}
{{ if .Site.Params.shareButtons }}
{{ partial "share.html" . }}
{{ end }}
{{ if .Params.comments }}
<div class="comments">
{{ partial "comments.html" . }}
</div>
{{ end }}
{{ $related := .Site.RegularPages.Related . | first 10 }}
{{ with $related }}
<div class="related-posts full-width-page-list">
<hr>
<h1>{{ i18n "related_posts" }}</h1>
{{ partial "page-list.html" . }}
</div>
{{ end }}
{{ if .Site.Params.latestPostsOnContent }}
{{ partialCached "latest-posts.html" . }}
{{ end }}
{{ end }}

View File

@ -1,12 +1,12 @@
<div class="post">
<h2 class="post-title">
<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="post-description">
<div class="author-description">
{{ partial "description-or-summary.html" . }}
</div>

View File

@ -1,23 +1,21 @@
<div class="post">
<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>
<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" . }}
{{ partial "post-metadata/short.html" . }}
{{ with .Resources.GetMatch "feature" }}
<div class="post-media">
{{ partial "figure.html" (dict "src" . "border" true) }}
</div>
{{ end }}
<div class="post-description">
{{ partial "description-or-summary.html" . }}
{{ with .Resources.GetMatch "feature" }}
<div class="post-media">
{{ partial "figure.html" (dict "src" .) }}
</div>
{{ end }}
<div class="readmore">
<a href="{{ .Permalink }}">{{ i18n "read_more" }} &rarr;</a>
</div>
<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,26 +1,24 @@
<div class="post">
<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>
<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" . }}
{{ partial "post-metadata/series.html" . }}
<div class="post-description">
{{ partial "description-or-summary.html" . }}
</div>
<div class="series-pages">
<ul>
{{ $i := 0 }}
{{ $total := len .Data.Pages }}
{{ range .Data.Pages.Reverse }}
{{ $i = add 1 $i }}
{{ .Scratch.Set "series_position" $i }}
{{ .Scratch.Set "series_total" $total }}
<li>{{ .Render "summary/series_post" }}</li>
{{ end }}
</ul>
</div>
<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,29 +1,27 @@
<div class="post">
<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" . "border" true) }}
</div>
<div class="post-series-position">
{{ if .Scratch.Get "series_position" }}
({{ .Scratch.Get "series_position" }}/{{ .Scratch.Get "series_total" }})
{{ end }}
<div class="post-description">
{{ partial "description-or-summary.html" . }}
</div>
<div class="readmore">
<a href="{{ .Permalink }}">{{ i18n "read_more" }} &rarr;</a>
</div>
</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

@ -5,10 +5,16 @@
</h1>
<div class="page-list">
<ul>
{{ range .Paginator.Pages }}
<li>{{ .Render "summary/author" }}</li>
{{ with .Paginator.Pages }}
{{ range . }}
<article class="post">
{{ .Render "summary/author" }}
</article>
{{ end }}
</ul>
{{ else }}
<div>
{{ i18n "no_posts" }}
</div>
{{ end }}
</div>
{{ end }}

View File

@ -1,25 +1,19 @@
{{ define "main" }}
<h1>
{{ partial "icon.html" "user-circle" }}
{{ .Title | markdownify }}
{{ partial "rss-link.html" . }}
</h1>
<div class="author-name">
<h1>
{{ partial "icon.html" "user-circle" }}
{{ .Title | markdownify }}
{{ partial "rss-link.html" . }}
</h1>
</div>
{{ partial "post-metadata/author.html" . }}
{{ .Content }}
{{ with .Content }}
{{ . }}
{{ end }}
<div class="page-list">
<ul>
{{ range .Paginator.Pages }}
<li>{{ .Render "summary/post" }}</li>
{{ else }}
<div>
{{ i18n "no_posts" }}
</div>
{{ end }}
</ul>
</div>
{{ partial "page-list.html" .Paginator.Pages }}
{{ partial "pagination.html" . }}
{{ end }}

21
layouts/home.html Normal file
View File

@ -0,0 +1,21 @@
{{ define "main" }}
{{ with .Content }}
<article class="homepage-content">
{{ . }}
</article>
<hr>
{{ end }}
{{ if .Site.Params.homepageLatestPosts }}
<div class="homepage-latest-posts">
<h1>
{{ i18n "latest_posts" }}
{{ partial "rss-link.html" . }}
</h1>
{{ partial "page-list.html" (.Paginate .Site.RegularPages).Pages }}
{{ partial "pagination.html" . }}
</div>
{{ end }}
{{ end }}

View File

@ -1,2 +0,0 @@
{{ define "main" }}
{{ end }}

View File

@ -0,0 +1,4 @@
{{/*
Create a file named `layouts/partials/additional-head.html` at your site root to
add extra tags into <head>. Page variables are passed.
*/}}

View File

@ -11,7 +11,7 @@
{{ if eq .MediaType.MainType "image" }}
<img src="{{ $media.Permalink }}" alt="{{ $media.Title }}" />
{{ else if eq .MediaType.MainType "video" }}
<video controls>
<video controls preload="metadata">
<source src="{{ $media.Permalink }}" alt="{{ $media.Title }}">
{{ i18n "browser_no_video_support" }}
</video>

View File

@ -12,15 +12,19 @@
{{ 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/back-to-top.js" | fingerprint "sha512" }}
<script defer src="{{ .Permalink }}" type="text/javascript" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"></script>
{{ end }}
{{ with .Site.Params.faviconICO }}
<link rel="icon" type="image/x-icon" href="{{ . | absURL }}" />
{{ 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.faviconPNG }}
<link rel="icon" type="image/png" href="{{ . | absURL }}" />
{{ with .Site.Params.faviconSVG }}
<link rel="icon" href="{{ . | absURL }}" />
{{ end }}
{{ with .Site.Params.appleTouchPNG }}
<link rel="apple-touch-icon" href="{{ . | absURL }}" />
{{ end }}
{{ if .IsHome }}
@ -36,5 +40,7 @@
{{ partial "seo-tags/author.html" . }}
<meta name="language" content="{{ .Language.Lang }}">
<meta name="description" content="{{ (partial "seo-tags/description.html" .) | plainify }}">
<meta name="description" content="{{ (partial "seo-description.html" .) | plainify }}">
{{ partial "additional-head.html" . }}
</head>

View File

@ -1,5 +1 @@
{{- $icon_resource := resources.Get (printf "jam/icons/%s.svg" .) -}}
{{- $icon := $icon_resource.Content -}}
{{- $icon = replaceRE `<svg` `<svg class="icon"` $icon -}}
{{- $icon = replaceRE `</svg>` (printf `<title>%s icon</title></svg>` .) $icon -}}
{{- $icon | safeHTML -}}
{{ partialCached "icon_code.html" . . }}

View File

@ -0,0 +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 `<title>%s icon</title></svg>` .) $icon -}}
{{- $icon = replaceRE `(width|height)="[0-9]*"` "" $icon -}}
{{- $icon | safeHTML -}}

View File

@ -0,0 +1,11 @@
<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

@ -0,0 +1,13 @@
<div class="page-list">
{{ with . }}
{{ range . }}
<article class="post">
{{ .Render "summary/post" }}
</article>
{{ end }}
{{ else }}
<div>
{{ i18n "no_posts" }}
</div>
{{ end }}
</div>

View File

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

View File

@ -0,0 +1,11 @@
{{ with (.GetTerms "categories") }}
{{ $categories := slice }}
{{ range . }}
{{ $categories = $categories | append (printf `<a href="%s">%s</a>` .Permalink .LinkTitle) }}
{{ end }}
<div class="categories" aria-label="{{ i18n "aria_post_meta_categories" }}">
{{ partial "icon.html" "folder" }}
{{ delimit $categories ", " }}
</div>
{{ end }}

View File

@ -0,0 +1,8 @@
{{ if and .Site.Params.gitHistoryURL .File.Path }}
<span class="post-meta-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" -}}
</a>
</span>
{{ end }}

View File

@ -1,13 +0,0 @@
{{ if and .Site.Params.gitFileURL .File.Path }}
<span class="post-meta-item" aria-label="{{ i18n "aria_post_meta_view_source" }}">
{{ with .Site.Params.gitFileIcon }}
{{ partial "icon.html" . }}
{{ else }}
{{ partial "icon.html" "file" }}
{{ end }}
<a href="{{ printf "%s/content/%s" .Site.Params.gitFileURL .File.Path }}" target="_blank" rel="noopener">
View source
</a>
</span>
{{ end }}

View File

@ -1,16 +1,16 @@
<div class="post-metadata" aria-label="{{ i18n "aria_author_metadata" }}">
<div class="author-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="post-meta-item" aria-label="{{ i18n "aria_author_post_count" }}">
<span class="author-meta-item" aria-label="{{ i18n "aria_author_post_count" }}">
{{ partial "icon.html" "newspaper" }}
{{ i18n "post_count" (len .Data.Pages) }}
</span>
<span class="post-meta-item" aria-label="{{ i18n "aria_author_word_count" }}">
<span class="author-meta-item" aria-label="{{ i18n "aria_author_word_count" }}">
{{ partial "icon.html" "align-left" }}
{{ i18n "wordcount" $total_words }}
</span>

View File

@ -9,6 +9,7 @@
</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" }}
@ -17,12 +18,14 @@
</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/viewsource.html" . }}
{{ partial "post-meta-item/edithistory.html" . }}
{{ partial "post-meta-item/categories.html" . }}
{{ partial "post-meta-item/tags.html" . }}
</div>
{{ end }}

View File

@ -16,7 +16,4 @@
{{ end }}
{{ partial "post-meta-item/translations.html" . }}
{{ if .File }}
{{ partial "post-meta-item/viewsource.html" . }}
{{ end }}
</div>

View File

@ -13,6 +13,7 @@
{{ 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

@ -0,0 +1,6 @@
<div class="taxonomy-metadata" aria-label="{{ i18n "aria_taxonomy_metadata" }}">
<span class="taxonomy-meta-item" aria-label="{{ i18n "aria_taxonomy_post_count" }}">
{{ partial "icon.html" "newspaper" }}
{{ i18n "post_count" (len .Data.Pages) }}
</span>
</div>

View File

@ -12,7 +12,7 @@
{{ if eq $type "image" }}
<img src="{{ $src }}" alt="{{ $alt }}" />
{{ else if eq $type "video" }}
<video controls>
<video controls preload="metadata">
<source src="{{ $src }}" alt="{{ $alt }}">
{{ i18n "browser_no_video_support" }}
</video>

View File

@ -1,5 +1,5 @@
<meta property="og:title" content="{{ .Title | plainify }}">
<meta property="og:description" content="{{ (partial "seo-tags/description.html" .) | plainify }}">
<meta property="og:description" content="{{ (partial "seo-description.html" .) | plainify }}">
<meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}">
<meta property="og:url" content="{{ .Permalink }}">

View File

@ -1,5 +1,5 @@
<meta itemprop="name" content="{{ .Title | plainify }}">
<meta itemprop="description" content="{{ (partial "seo-tags/description.html" .) | plainify }}">
<meta itemprop="description" content="{{ (partial "seo-description.html" .) | plainify }}">
{{ $format := "2006-01-02T15:04:05-07:00" }}
{{ with .Date }}
@ -21,6 +21,10 @@
<meta itemprop="image" content="{{ $featured.Permalink }}">
{{ end }}
{{ with .Params.tags }}
<meta itemprop="keywords" content="{{ delimit . ", " }}">
{{ with (.GetTerms "tags") }}
{{ $tags := slice }}
{{ range . }}
{{ $tags = $tags | append .LinkTitle }}
{{ end }}
<meta itemprop="keywords" content="{{ delimit $tags ", " }}">
{{ end }}

View File

@ -22,7 +22,7 @@
{{ end }}
<meta name="twitter:title" content="{{ .Title | plainify }}">
<meta name="twitter:description" content="{{ (partial "seo-tags/description.html" .) | plainify }}">
<meta name="twitter:description" content="{{ (partial "seo-description.html" .) | plainify }}">
{{ with .Site.Social.twitter }}
<meta name="twitter:site" content="@{{ . }}">

View File

@ -0,0 +1,17 @@
{{ with (.GetTerms "series") }}
{{ $series := slice }}
{{ range . }}
{{ $series = $series | append (printf `<a href="%s">%s</a>` .Permalink .LinkTitle) }}
{{ end }}
<div class="series-box">
{{ partial "icon.html" "info" }}
{{ if gt (len $series) 1 }}
This post is part of multiple series:
{{ else }}
This post is part of a series:
{{ end }}
{{ delimit $series ", " }}
</div>
{{ end }}

View File

@ -0,0 +1,62 @@
<div class="share-buttons">
{{ if .Site.Params.shareButtons.twitter }}
<a class="twitter-share"
target="_blank"
rel="noopener"
onclick="share_event('Twitter');"
href="https://twitter.com/intent/tweet?url={{ .Permalink }}&text={{ .Title }}&via=bbaovanc">
{{- partial "icon.html" "twitter" -}}
</a>
{{ end }}
{{ if .Site.Params.shareButtons.facebook }}
<a class="facebook-share"
target="_blank"
rel="noopener"
onclick="share_event('Facebook');"
href="https://www.facebook.com/sharer.php?u={{ .Permalink }}">
{{- partial "icon.html" "facebook" -}}
</a>
{{ end }}
{{ if .Site.Params.shareButtons.linkedin }}
<a class="linkedin-share"
target="_blank"
rel="noopener"
onclick="share_event('LinkedIn');"
href="https://www.linkedin.com/sharing/share-offsite/?url={{ .Permalink }}">
{{- partial "icon.html" "linkedin" -}}
</a>
{{ end }}
{{ if .Site.Params.shareButtons.reddit }}
<a class="reddit-share"
target="_blank"
rel="noopener"
onclick="share_event('Reddit');"
href="https://reddit.com/submit?url={{ .Permalink }}&title={{ .Title }}">
{{- partial "icon.html" "reddit" -}}
</a>
{{ end }}
{{/* Telegram icon doesn't have `viewbox` set, which breaks the sizing.
https://stackoverflow.com/q/72073399/19003757
https://github.com/michaelampr/jam/issues/39
{{ if .Site.Params.shareButtons.telegram }}
<a class="telegram-share"
target="_blank"
rel="noopener"
onclick="share_event('Telegram');"
href="https://t.me/share/url?url={{ .Permalink }}&text={{ .Title }}">
{{- partial "icon.html" "telegram" -}}
</a>
{{ end }}
*/}}
{{ if .Site.Params.shareButtons.print }}
<button class="print-share"
onclick="window.print(); share_event('Print');">
{{- partial "icon.html" "printer" -}}
</button>
{{ end }}
</div>

View File

@ -1,6 +1,10 @@
<h2 class="header">
<a href="{{ .Site.Home.Permalink | absLangURL }}">{{ .Site.Title | markdownify }}</a>
</h2>
<header class="header">
<h1>
<a href="{{ .Site.Home.Permalink | absLangURL }}">
{{ .Site.Title | markdownify }}
</a>
</h1>
</header>
<div class="topbar">
<nav class="navbar" aria-label="{{ i18n "aria_navbar" }}">
@ -13,7 +17,9 @@
{{ if or ($.HasMenuCurrent .Menu .) ($.IsMenuCurrent .Menu .) }}
{{ $isActive = true }}
{{ end }}
<a class="navbar-item{{ if $isActive }} active{{ end }}" href="{{ .URL }}">{{ .Name }}</a>
<a class="navbar-item{{ if $isActive }} active{{ end }}"
{{ if strings.HasPrefix .URL "http" }}target="_blank" rel="noopener"{{ end }}
href="{{ .URL }}">{{ .Name }}</a>
{{ end }}
</nav>

View File

@ -4,11 +4,17 @@
{{ .Title | markdownify }}
</h1>
<div class="series-taxonomy">
<ul>
{{ range .Pages }}
<li>{{ .Render "summary/series" }}</li>
<div class="series-taxonomy-list">
{{ with .Pages }}
{{ range . }}
<article class="series-taxonomy">
{{ .Render "summary/series" }}
</article>
{{ end }}
</ul>
{{ else }}
<div>
{{ i18n "no_posts" }}
</div>
{{ end }}
</div>
{{ end }}

View File

@ -7,24 +7,14 @@
{{ partial "post-metadata/series.html" . }}
{{ partial "description-or-summary.html" . }}
{{ with .Content }}
{{ . }}
{{ end }}
{{ with .Paginator.Pages.Reverse }}
{{ partial "page-list.html" . }}
{{ end }}
<div class="page-list">
<ul>
{{ $i := 0 }}
{{ $total := len .Pages }}
{{ range .Paginator.Pages.Reverse }}
{{ $i = add 1 $i }}
{{ .Scratch.Set "series_position" $i }}
{{ .Scratch.Set "series_total" $total }}
<li>{{ .Render "summary/post" }}</li>
{{ else }}
<div>
{{ i18n "no_posts" }}
</div>
{{ end }}
</ul>
</div>
{{ partial "pagination.html" . }}
{{ end }}

View File

@ -0,0 +1,5 @@
{{ if .IsNamedParams }}
<abbr title="{{ .Get "title" }}">{{ .Inner }}</abbr>
{{ else }}
<abbr title="{{ .Get 0 }}">{{ .Inner }}</abbr>
{{ end }}

View File

@ -1,7 +1,28 @@
<aside>
{{ with .Inner }}
{{ . | markdownify }}
{{ else }}
{{ errorf "The aside shortcode needs to be a closing one (similar to the highlight shortcode, see https://gohugo.io/templates/shortcode-templates/#inner" }}
{{ end }}
{{ $type := "" }}
{{ if .IsNamedParams }}
{{ $type = .Get "type" | default "note" }}
{{ else }}
{{ $type = .Get 0 | default "note" }}
{{ end }}
{{/* This idea comes from the LoveIt theme:
https://github.com/dillonzq/LoveIt/blob/aa834e89af8349f6c18d4c7ad50a73fd5f1e40e0/layouts/shortcodes/admonition.html#L3-L14
*/}}
{{ $icons := dict "note" "pencil" }}
{{ $icons = dict "info" "info" | merge $icons }}
{{ $icons = dict "tip" "lightbulb" | merge $icons }}
{{ $icons = dict "warning" "info" | merge $icons }}
{{ $icons = dict "example" "flask" | merge $icons }}
{{ $icons = dict "quote" "quote" | merge $icons }}
<aside class="{{ $type }}">
<div class="aside-title">
{{ partial "icon.html" (index $icons $type) }}
{{ title $type }}
</div>
<div class="aside-content">
{{ .Inner | .Page.RenderString (dict "display" "block") }}
</div>
</aside>

View File

@ -1,4 +1,9 @@
{{ $resource := $.Page.Resources.GetMatch (.Get "src") }}
{{ $resource := "" }}
{{ if .IsNamedParams }}
{{ $resource = $.Page.Resources.GetMatch (.Get "src") }}
{{ else }}
{{ $resource = $.Page.Resources.GetMatch (.Get 0) }}
{{ end }}
{{ $noborder := false }}
{{ if .Get "noborder" }}

View File

@ -0,0 +1 @@
<hr class="full-width-hr">

View File

@ -0,0 +1,7 @@
<div class="see-also">
{{ with .Site.GetPage (.Get 0) }}
<p>{{ i18n "see_also" }} <a href="{{ .Permalink }}">{{ .Title | markdownify }}</a></p>
{{ else }}
{{ errorf "Page could not be found for see-also shortcode: %s" .Position }}
{{ end }}
</div>

View File

@ -0,0 +1,10 @@
{{/* 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,16 +0,0 @@
{{ define "main" }}
<h1>
{{ partial "icon.html" "tag" }}
{{ .Title | markdownify }}
</h1>
<div class="tag-list">
<ul>
{{ range .Data.Terms.Alphabetical }}
<a href="{{ .Page.Permalink }}">
<li>{{ .Page.Title | markdownify }}</li>
</a>
{{ end }}
</ul>
</div>
{{ end }}

View File

@ -1,22 +0,0 @@
{{ define "main" }}
<h1>
{{ partial "icon.html" "tag" }}
{{ .Title | markdownify }}
{{ partial "rss-link.html" . }}
</h1>
{{ partial "description-or-summary.html" . }}
<div class="page-list">
<ul>
{{ range .Paginator.Pages }}
<li>{{ .Render "summary/post" }}</li>
{{ else }}
<div>
{{ i18n "no_posts" }}
</div>
{{ end }}
</ul>
</div>
{{ partial "pagination.html" . }}
{{ end }}

View File

@ -2,6 +2,8 @@
<h1>
{{ if eq .Data.Singular "tag" }}
{{ partial "icon.html" "tag" }}
{{ else if eq .Data.Singular "category" }}
{{ partial "icon.html" "folder" }}
{{ else }}
{{ partial "icon.html" "filter" }}
{{ end }}
@ -9,13 +11,25 @@
{{ .Title | markdownify }}
</h1>
<div class="taxonomy">
<ul>
{{ range .Data.Terms.Alphabetical }}
<li>
<a href="{{ .Page.Permalink }}">{{ .Page.Title | markdownify }}</a>
</li>
<div class="taxonomy-list">
{{ with .Data.Terms.Alphabetical }}
{{ range . }}
{{ with .Page }}
<article class="taxonomy-term">
<div class="taxonomy-list-left">
<a href="{{ .Permalink }}">
<p>{{ .Title | markdownify }}</p>
</a>
{{ partial "post-metadata/taxonomy.html" . }}
</div>
{{ partial "description-or-summary.html" . }}
</article>
{{ end }}
{{ end }}
</ul>
{{ else }}
<div>
{{ i18n "no_posts" }}
</div>
{{ end }}
</div>
{{ end }}

View File

@ -1,27 +1,26 @@
{{ define "main" }}
<h1>
{{ if eq .Data.Singular "tag" }}
{{ partial "icon.html" "tag" }}
{{ else }}
{{ partial "icon.html" "filter" }}
{{ end }}
{{ .Title | markdownify }}
{{ partial "rss-link.html" . }}
</h1>
{{ partial "description-or-summary.html" . }}
<div class="page-list">
<ul>
{{ range .Paginator.Pages }}
<li>{{ .Render "summary/post" }}</li>
<div class="post-title">
<h1>
{{ if eq .Data.Singular "tag" }}
{{ partial "icon.html" "tag" }}
{{ else if eq .Data.Singular "category" }}
{{ partial "icon.html" "folder" }}
{{ else }}
<div>
{{ i18n "no_posts" }}
</div>
{{ partial "icon.html" "filter" }}
{{ end }}
</ul>
{{ .Title | markdownify }}
{{ partial "rss-link.html" . }}
</h1>
</div>
{{ partial "post-metadata/taxonomy.html" . }}
{{ with .Content }}
{{ . }}
{{ end }}
{{ partial "page-list.html" .Paginator.Pages }}
{{ partial "pagination.html" . }}
{{ end }}