110 Commits

Author SHA1 Message Date
ebcbccb3bb Update i18n/ files 2021-11-23 19:22:01 -06:00
43d406c4fe Improve accessibility 2021-11-23 19:06:26 -06:00
1380558384 Fix ".File.Path on a zero object" when there are drafted series 2021-11-23 18:07:03 -06:00
e9d8efce44 Don't hide the back to top button if JS is disabled 2021-11-23 17:14:59 -06:00
40f6ed20fe Hide back to top button when printing 2021-11-23 14:37:29 -06:00
e982824031 Show post count in series metadata 2021-11-23 13:58:48 -06:00
55bbfa90e4 Show page position in series on series taxonomy pages
Fix #40
2021-11-23 13:14:44 -06:00
161c68d16c Add back to top button 2021-11-22 20:49:11 -06:00
0e1559f2a2 Use CSS variables for colors 2021-11-22 16:46:58 -06:00
d387f29d7d Update archetypes for taxonomies 2021-11-22 15:21:01 -06:00
15d58effcf Super cool tag taxonomy list and term pages
Fixes #48
2021-11-22 15:20:20 -06:00
2fdc78050a Didn't quite think that last change through 2021-11-22 15:13:41 -06:00
f9e7eeeaa6 Use description-or-summary partial in SEO tags 2021-11-22 14:24:13 -06:00
502fc36b0d Sort tags alphabetically 2021-11-22 02:45:28 -06:00
ead88d5e16 Use indentation inside templating blocks for better readability 2021-11-22 02:21:15 -06:00
e1e211a42a Add a .Render view for subsection summary too 2021-11-22 02:07:48 -06:00
f77c61b561 Clean up directory structure of partials and .Render templates 2021-11-22 01:57:35 -06:00
8067173f0c Revamp authors taxonomy
Fixes #43
2021-11-22 01:36:38 -06:00
b745f87462 Rename author-metadata.html to author_meta_tags.html 2021-11-22 01:04:45 -06:00
a11cc777bf Deduplicate .Description and .Summary blocks 2021-11-22 00:42:08 -06:00
f77efb1843 Redo taxonomy template structure 2021-11-21 19:43:56 -06:00
28cf50d3d8 Fix the flex layout for series taxonomy 2021-11-21 19:34:56 -06:00
8edbfd3077 Improve printing style
- Allow wrapping in code blocks
- Use 100% width
2021-11-21 00:04:29 -06:00
aa3974c186 Fix uncentered pagination 2021-11-20 22:05:33 -06:00
7c877e7781 Improve wrapping in post metadata 2021-11-20 19:56:30 -06:00
d9776d29c4 Select summary or summary_large_image in twitter card with image size 2021-11-20 19:06:18 -06:00
a01a70fc91 Specify markdownify or plainify for .Title references 2021-11-20 19:05:56 -06:00
919ecde4ac Clean up closing brackets on templates 2021-11-20 18:30:26 -06:00
7a0757cef7 Rewrite meta tag partials 2021-11-20 18:24:56 -06:00
b83e20274f Remove seo_schema.html 2021-11-20 17:31:02 -06:00
0893c99f97 Only add published date to seo_schema if set 2021-11-20 17:09:21 -06:00
f5c9e6926a Add translations for "Older" and "Newer" 2021-11-20 17:00:56 -06:00
5104a6f57d Process markdown on breadcrumb nav 2021-11-19 22:54:06 -06:00
1f080d9092 Add basic schema.org data 2021-11-19 19:16:06 -06:00
7a73432238 Improve language picker usability 2021-11-19 17:22:25 -06:00
15d9ad52e9 Hide breadcrumb navigation when printing 2021-11-19 16:26:51 -06:00
b45551639c Fix print background colors for browsers other than Firefox 2021-11-19 16:13:38 -06:00
217e54c1b5 Expand table of contents and show background colors while printing 2021-11-18 17:47:31 -06:00
d0c216165e Add light mode and improve print compatibility 2021-11-18 17:26:02 -06:00
6d456768fa Use comma delimiting for series and tags 2021-11-15 21:11:50 -06:00
b2036d3bfe Use comma delimiting on series-box in single.html 2021-11-15 21:06:53 -06:00
37c5a970c4 Improve viewsource meta item 2021-11-15 21:03:07 -06:00
8f36ba7368 Add series-summary.html and use .Render in taxonomy 2021-11-14 18:57:23 -06:00
ef8559d923 Change series-box sizing to match table of contents 2021-11-14 17:16:25 -06:00
e67bd58ceb Add previous and next page links
Fix #33
2021-11-14 00:41:49 -06:00
f6140abc26 Fix #42 2021-11-13 23:31:20 -06:00
179eda3450 Improve description wrapping in <head> metadata 2021-11-13 19:37:50 -06:00
240476061b Use flexbox for more stuff 2021-11-13 17:23:30 -06:00
96893d7de6 Add better series taxonomy list and clean up post metadata 2021-11-13 17:04:10 -06:00
21180991c0 Small tweaks to post-metadata partial 2021-11-13 15:22:06 -06:00
b87f6dd884 Remove category support 2021-11-13 15:06:31 -06:00
fb43b41d64 Put line breaks after commas in CSS 2021-11-13 14:29:59 -06:00
17604ca75d Fix indentation for subsection template code in list.html 2021-11-13 00:45:24 -06:00
05100679e2 Support descriptions for taxonomies 2021-11-12 23:14:13 -06:00
145f23f22f Add series taxonomy to archetype 2021-11-12 20:39:45 -06:00
b03fc6c7b1 Improve list pages + support "series"
- Use a <ul>: better accessibility
- Background for individual pages in the list, giving a better feeling
  of separation
- Support "series" taxonomy (displayed oldest to newest)
2021-11-12 20:25:47 -06:00
57be090b6a Set a default favicon path 2021-11-12 20:01:00 -06:00
98c9438779 Ignore .hugo_build.lock 2021-11-12 17:28:38 -06:00
efebe2a5de Use YAML for config fallback 2021-11-12 17:28:22 -06:00
1e72637a33 Use config merging 2021-11-12 00:08:31 -06:00
943fb83324 Enable border by default on media 2021-11-10 21:46:07 -06:00
a75d49e8bc Don't use a ridiculously large border on non-featured images 2021-11-10 21:41:15 -06:00
e21c27b9e6 Use default ISO seconds formatting for blog archetype 2021-11-09 20:24:24 -06:00
e5e3d62fc4 Rework taxonomy page title
Fixes #24
2021-11-09 17:27:36 -06:00
21ecc630df Use a dropdown for language selector 2021-11-07 19:55:17 -06:00
f16f2b6d8a Customizable View source icon 2021-11-07 16:39:17 -06:00
4eec2d8c4d Use a less hacky solution to fix trailing newline in render-link.html 2021-11-07 15:47:32 -06:00
c337596635 Fix caption alignment in figures 2021-11-06 21:55:23 -05:00
8ada21c609 If authors taxonomy is enabled, link to it in metadata 2021-11-06 19:12:56 -05:00
4e27a6ce8a Add aside shortcode 2021-11-06 17:02:59 -05:00
42f0046747 Move the langbar to be part of the navbar - TODO: dropdown 2021-11-04 21:04:27 -05:00
b9879729bf Fix lastmod displaying & show even when GitInfo is enabled 2021-11-04 14:59:15 -05:00
f86aa30100 Update homepage to bbaovanc.com in theme.toml 2021-11-04 14:45:44 -05:00
60f5ccc1be Open RSS links in new tab 2021-11-03 20:30:13 -05:00
88c1d14fa2 Add comment to opengraph partial 2021-11-03 20:28:32 -05:00
13db8825a4 Add styling to disabled pagination buttons 2021-11-02 17:22:29 -05:00
99f53a386e Add breadcrumb nav and show active navbar item 2021-11-02 16:51:07 -05:00
8ad0690d00 Update navbar item styling a little 2021-11-02 15:51:24 -05:00
11d98f8c92 Remove unused starwars style for now 2021-11-02 15:48:10 -05:00
163965f3e6 Don't SHA512 media 2021-11-02 01:08:46 -05:00
8af0ad6d16 Fix the modified date check for git 2021-11-02 00:53:01 -05:00
3f98073aea Change git commit to view history button 2021-11-02 00:47:59 -05:00
5f40b6742b Add scroll bar on navbar and langbar when overflowing 2021-11-01 20:32:37 -05:00
91c554ef83 Use a highlight instead of zoom for hovering on subsections
It fits the rest of the theme's style better
2021-11-01 20:30:56 -05:00
14121f2269 New navbar and langbar style 2021-11-01 20:29:28 -05:00
906b6213fd Support subsections 2021-11-01 17:38:44 -05:00
550bfb6367 Add a few new shortcodes 2021-10-30 00:23:49 -05:00
33fbcac9d5 Use yaml instead of toml for exampleSite config 2021-10-29 21:18:08 -05:00
9873f62d08 Migrate meses.toml to yaml 2021-10-29 21:10:07 -05:00
d6876a17b9 Migrate translations to yaml 2021-10-29 21:09:25 -05:00
203f1eb53f Add .gitattributes 2021-10-29 20:58:22 -05:00
be257afef3 Update exampleSite/config.toml 2021-10-29 20:57:16 -05:00
8e83209898 Fix blockquote formatting with twitter tweets 2021-10-29 17:46:01 -05:00
24979c3c37 Remove whitespace and newlines in icon.html 2021-10-29 17:16:41 -05:00
ae37e587a3 Use humanize instead of title in archetypes 2021-10-29 01:11:16 -05:00
168c9d93ad Add meta tags for author, and don't allow old author param 2021-10-27 19:51:46 -05:00
fe4d0979d6 Use a new authors array instead of a string 2021-10-27 19:39:25 -05:00
7ffa6c068c Improve figures
- Add option to disable border and caption
2021-10-27 09:49:21 -05:00
0cfecdab18 Make table of contents collapsible 2021-10-26 20:50:45 -05:00
a1fae8aa60 Open git commit in new tab 2021-10-26 20:33:01 -05:00
43202259c8 Update git commit link 2021-10-26 19:43:32 -05:00
fc5f408831 Use jam icons instead of feather
https://jam-icons.com
2021-10-26 18:51:17 -05:00
9e5a8e6785 Add author param and display it 2021-10-26 14:27:37 -05:00
d393d9eef9 Don't add extra stuff to the copyright string 2021-10-26 13:53:37 -05:00
e0f04cb279 Make comments toggleable, remove word count, and give tags some space 2021-10-23 23:24:05 -05:00
cb68e3cffd Support comments 2021-10-23 22:51:13 -05:00
4e9ce6df46 Fix URLs for baseURLs that are on a subpath 2021-10-23 00:25:06 -05:00
edff1f416d Add See also section 2021-10-23 00:03:44 -05:00
ff2e87fd9e Make the image and video border a bit bigger 2021-10-22 23:40:09 -05:00
7749ff39fa Make word count and reading time enabled by default 2021-10-22 23:05:51 -05:00
75 changed files with 1824 additions and 604 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.hugo_build.lock

8
.gitmodules vendored
View File

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

View File

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

View File

@ -1,13 +1,20 @@
---
title: {{ replace .Name "-" " " | title }}
date: {{ .Date | time.Format "2006-01-02" }}
title: {{ replace .Name "-" " " | humanize }}
date: {{ .Date }}
toc: true
comments: true
draft: true
authors:
- {{ with .Site.Author.name }}{{ . }}{{ else }}John Doe{{ end }}
tags:
- awesome
series:
- 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)
resources:

View File

@ -1,8 +1,12 @@
---
title: {{ replace .Name "-" " " | title }}
title: {{ replace .Name "-" " " | humanize }}
menu: main
toc: true
comments: false
authors:
- {{ with .Site.Author.name }}{{ . }}{{ else }}John Doe{{ end }}
---

View File

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

15
archetypes/tags/_index.md Normal file
View File

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

View File

@ -2,10 +2,86 @@
* https://github.com/BBaoVanC/bobatheme.
*/
:root {
--background: #111;
--background-2: #222;
--background-3: #282828;
--background-4: #333;
--background-5: #444;
--text-normal: #d3d3d3;
--link-color: #4da6ff;
--figure-border: #1b5b9b;
--pagination-active-hover-text: black;
--pagination-active-background: #163b64;
--pagination-active-hover-background: #286ab2;
}
@media (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;
--pagination-active-hover-text: white;
--pagination-active-background: #3977bd;
--pagination-active-hover-background: #154172;
}
}
@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;
}
}
/* Post layout (in list pages) */
.post {
margin-bottom: 40px;
.list-page-content {
display: flex;
flex-direction: column;
gap: 40px;
}
.page-list ul,
.series-taxonomy ul {
display: flex;
flex-direction: column;
list-style: none;
padding: 0;
gap: 40px;
}
.page-list li,
.series-taxonomy li {
padding-top: 8px;
padding-left: 24px;
padding-right: 24px;
padding-bottom: 24px;
border-radius: 12px;
background-color: var(--background-2);
}
.post-series-position {
position: relative;
float: right;
opacity: .75;
}
.post-title {
@ -19,16 +95,20 @@
.post-meta-item {
margin-right: 10px;
white-space: nowrap;
display: inline-block;
}
.post-metadata {
margin-bottom: 15px;
}
.tags,
.series {
margin-top: 10px;
}
.post-media {
margin-top: 15px;
display: inline-block;
}
.post-description {
@ -41,12 +121,93 @@
/* Tags list format */
.tag-list ul {
display: flex;
list-style: none;
gap: 10px;
flex-flow: row wrap;
padding: 0;
}
.tag-list a {
background-color: var(--background-2);
padding: 8px 12px;
border-radius: 12px;
}
.tag-list a:hover {
text-decoration: none;
background-color: var(--background-4);
}
/* Series list format */
.series-pages ul {
display: flex;
gap: 10px;
flex-flow: row wrap;
list-style: none;
padding: 0;
background-color: var(--background);
padding: 8px;
border-radius: 16px;
}
.series-pages li {
flex: 1;
min-width: 49%;
}
/* Subsection formatting */
.sections {
display: flex;
flex-direction: column;
gap: 40px;
}
.section {
background-color: var(--background-2);
border-radius: 12px;
padding: 1px 25px;
}
.section:hover {
background-color: var(--background-4);
}
.section-title {
margin: 10px 0;
}
.section-anchor {
color: inherit;
}
.section-anchor:hover {
text-decoration: none;
}
.section-description {
margin-bottom: 5px;
}
.view-section {
margin-top: 5px;
}
/* Header formatting (website title and article section headers) */
.top {
margin: 20px;
}
.header a, .section-header a {
.header a,
.section-header a {
color: inherit;
}
@ -58,11 +219,31 @@
/* Content formatting */
#table-of-contents h2 {
font-size: 20px;
.series-box {
background-color: var(--background-2);
padding: 8px 16px;
border-radius: 8px;
margin: 15px 0;
}
.content, footer {
.table-of-contents {
background-color: var(--background-2);
padding: 8px 20px;
border-radius: 8px;
margin: 10px 0;
}
.table-of-contents summary {
cursor: pointer;
}
.table-of-contents.print {
display: none;
padding: 8px 15px;
}
.content,
footer {
margin: 20px;
}
@ -70,45 +251,130 @@ footer {
text-align: center;
}
#back-to-top {
position: fixed;
float: right;
bottom: 25px;
right: 25px;
background-color: var(--background-3);
border-radius: 100%;
padding: 12px;
display: none;
}
/* Navbar formatting */
.navbar, .langbar {
margin: 5px 0px;
.topbar {
display: flex;
flex-wrap: nowrap;
flex-direction: row;
background-color: var(--background-2);
border-radius: 8px;
margin-top: 5px;
padding: 4px;
align-items: flex-start;
}
(.navbar, .langbar) h2 {
.navbar {
display: flex;
}
.navbar {
flex-grow: 1;
overflow: auto;
}
.navbar a {
padding: 8px 12px;
border-radius: 12px;
}
.navbar-item:hover,
.langpicker summary:hover,
.langpicker[open] summary {
background-color: var(--background-5);
text-decoration: none;
}
.topbar .active {
font-weight: bold;
}
.langpicker {
position: relative;
white-space: nowrap;
}
.langpicker summary {
cursor: pointer;
margin-left: 24px;
padding: 8px 12px;
border-radius: 12px;
}
.langpicker .languages {
position: absolute;
margin-top: 8px;
right: 0;
background-color: var(--background-2);
border: 2px solid var(--background-4);
padding: 8px 12px;
border-radius: 8px;
list-style: none;
}
.langpicker .unavailable {
color: inherit;
text-decoration: inherit;
}
.navbar-item, .langbar-item {
margin-right: 5px;
.langpicker .unavailable:hover {
cursor: not-allowed;
text-decoration: none;
}
/* Basic elements */
html {
scroll-behavior: smooth;
}
@media screen and (prefers-reduced-motion: reduce) {
html {
scroll-behavior: auto;
}
}
body {
background-color: #111;
color: lightgray;
background-color: var(--background);
color: var(--text-normal);
font-family: "Open Sans", "Noto Sans", sans-serif;
margin: auto;
max-width: 720px;
overflow-wrap: break-word;
}
img, video {
img,
video {
max-width: 100%;
}
img:not(.noborder), video:not(.noborder) {
.post-media > figure.border img,
.post-media > figure.border video {
padding: 5px;
border: 5px solid #1b5b9b;
border: 7px solid var(--figure-border);
}
figure.border img,
figure.border video {
padding: 5px;
border: 2px solid var(--figure-border);
}
figure {
margin: auto;
display: inline-block;
}
figcaption {
@ -117,8 +383,15 @@ figcaption {
text-align: center;
}
aside {
background-color: var(--background-2);
padding: 12px 16px;
margin: 16px 0;
border-radius: 8px;
}
a {
color: #4da6ff;
color: var(--link-color);
text-decoration: inherit;
}
@ -127,15 +400,12 @@ a:hover {
}
blockquote {
border-left: 5px solid #333;
}
blockquote p {
border-left: 5px solid var(--background-4);
padding-left: 15px;
}
hr {
border-color: #444;
border-color: var(--background-5);
}
* {
@ -145,13 +415,17 @@ hr {
/* Code blocks */
.highlight {
margin: 16px 0;
}
.highlight > pre {
padding: 12px 8px;
overflow: auto;
}
:not(pre) > code {
background-color: #282828;
background-color: var(--background-3);
padding: 2px 4px;
overflow-wrap: break-word;
}
@ -170,7 +444,7 @@ code {
.icon {
width: 20px;
height: 20px;
color: lightgray;
color: var(--text-normal);
text-align: center;
display: inline;
vertical-align: middle;
@ -187,6 +461,7 @@ h1 svg.icon {
.pagination {
list-style: none;
text-align: center;
padding: 0;
}
.page-item {
@ -196,43 +471,153 @@ h1 svg.icon {
.page-link {
padding: 8px 16px;
border-radius: 5px;
color: lightgray;
color: var(--text-normal);
}
.page-item.active .page-link {
background-color: #163b64;
background-color: var(--pagination-active-background);
color: inherit;
}
.page-item.active .page-link:hover {
background-color: #2b72c0;
color: white;
background-color: var(--pagination-active-hover-background);
color: var(--pagination-active-hover-text);
}
.page-link:hover {
background-color: #444;
color: white;
text-decoration: none;
}
:not(li.disabled) > .page-link:hover {
background-color: var(--background-5);
}
li.disabled {
opacity: .5;
}
li.disabled > .page-link:hover {
cursor: not-allowed;
}
/* Breadcrumb navigation */
.breadcrumb {
margin-top: 40px;
margin-bottom: 20px;
margin-left: 20px;
}
.breadcrumb ul {
padding: 0;
list-style: none;
}
.breadcrumb li {
display: inline;
}
.breadcrumb li+li:before {
content: "»"
}
/* Previous and next page */
.prevnext {
display: flex;
margin: 20px 0;
}
.prevnext > * {
flex: 1;
white-space: nowrap;
overflow: hidden;
display: flex;
flex-direction: column;
color: inherit;
background-color: var(--background-2);
padding: 8px 16px;
}
.prevnext > a:hover {
background-color: var(--background-4);
text-decoration: none;
}
.prevnext > .prev {
text-align: left;
border-top-left-radius: 8px;
border-bottom-left-radius: 8px;
}
.prevnext > .next {
text-align: right;
border-top-right-radius: 8px;
border-bottom-right-radius: 8px;
}
.prevnext .prev-caption,
.prevnext .next-caption {
opacity: 65%;
}
.prevnext .prev-post,
.prevnext .next-post {
overflow: hidden;
text-overflow: ellipsis;
}
/* Light mode */
@media print, (prefers-color-scheme: light) {
/* Basic elements */
.section:hover {
color: inherit;
}
li.disabled {
opacity: .25;
}
}
/* Print compatibility */
@media print {
.top, .section-header-link {
.top,
.breadcrumb,
.section-header-link,
.prevnext,
.comments {
display: none;
}
.icon {
color: black;
}
:not(pre) > code {
background-color: lightgray;
* {
-webkit-print-color-adjust: exact !important;
color-adjust: exact !important;
}
body {
background-color: white;
color: black;
max-width: 100%;
}
pre {
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.table-of-contents {
display: none;
}
.table-of-contents.print {
display: block;
}
#back-to-top {
display: none !important;
}
}

View File

@ -1,116 +0,0 @@
@media screen and (max-width: 700px) {
.row {
flex-direction: column;
}
}
@media screen and (max-width: 400px) {
.navbar a {
float: none;
width: 100%;
}
}
body, html {
height: 100%;
}
body {
font-family: sans-serif;
margin: 0;
display: flex;
flex-direction: column;
}
a {
color: blue;
}
.header {
padding: 10px;
text-align: center;
background: url(../images/stars.png);
background-size: cover;
color: white;
}
.header h1 {
font-size: 50px;
font-weight: bold;
transform-origin: 50% 100%;
transform: perspective(350px) rotateX(25deg);
color: yellow;
}
.navbar {
overflow: hidden;
background-color: #999;
}
.navbar a {
float: left;
display: block;
color: white;
text-align: center;
padding: 14px 20px;
text-decoration: none;
}
/* .navbar a.right {
float: right;
} */
.navbar a:hover {
background-color: #ddd;
color: black;
}
* {
box-sizing: border-box;
}
.row {
flex: 1;
display: flex;
flex-wrap: wrap;
}
.side {
width: 25%;
background-color: lightgray;
padding: 20px;
}
.main {
width: 75%;
background-color: white;
padding: 20px;
}
.footer {
padding: 20px;
text-align: center;
background: #ddd;
}
@media (prefers-color-scheme: dark) {
body {
background-color: black;
}
a {
color: #4da6ff;
}
.navbar {
background-color: #222;
}
.navbar a {
color: lightgray;
}
.navbar a:hover {
background-color: #444;
color: white;
}
.side {
background-color: #111;
color: lightgray;
}
.main {
background-color: black;
color: lightgray;
}
.footer {
background: #222;
color: lightgray;
}
max-width: 650px;
}

View File

@ -0,0 +1,96 @@
@media print, (prefers-color-scheme: light) {
.chroma {
color: black;
}
/* Other */ .chroma .x { color: #000000 }
/* Error */ .chroma .err { color: #a40000 }
/* 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 }
/* Keyword */ .chroma .k { color: #204a87; font-weight: bold }
/* KeywordConstant */ .chroma .kc { color: #204a87; font-weight: bold }
/* KeywordDeclaration */ .chroma .kd { color: #204a87; font-weight: bold }
/* KeywordNamespace */ .chroma .kn { color: #204a87; font-weight: bold }
/* KeywordPseudo */ .chroma .kp { color: #204a87; font-weight: bold }
/* KeywordReserved */ .chroma .kr { color: #204a87; font-weight: bold }
/* KeywordType */ .chroma .kt { color: #204a87; font-weight: bold }
/* Name */ .chroma .n { color: #000000 }
/* NameAttribute */ .chroma .na { color: #c4a000 }
/* NameBuiltin */ .chroma .nb { color: #204a87 }
/* NameBuiltinPseudo */ .chroma .bp { color: #3465a4 }
/* NameClass */ .chroma .nc { color: #000000 }
/* NameConstant */ .chroma .no { color: #000000 }
/* NameDecorator */ .chroma .nd { color: #5c35cc; font-weight: bold }
/* NameEntity */ .chroma .ni { color: #ce5c00 }
/* NameException */ .chroma .ne { color: #cc0000; font-weight: bold }
/* NameFunction */ .chroma .nf { color: #000000 }
/* NameFunctionMagic */ .chroma .fm { color: #000000 }
/* NameLabel */ .chroma .nl { color: #f57900 }
/* NameNamespace */ .chroma .nn { color: #000000 }
/* NameOther */ .chroma .nx { color: #000000 }
/* NameProperty */ .chroma .py { color: #000000 }
/* NameTag */ .chroma .nt { color: #204a87; font-weight: bold }
/* NameVariable */ .chroma .nv { color: #000000 }
/* NameVariableClass */ .chroma .vc { color: #000000 }
/* NameVariableGlobal */ .chroma .vg { color: #000000 }
/* NameVariableInstance */ .chroma .vi { color: #000000 }
/* NameVariableMagic */ .chroma .vm { color: #000000 }
/* Literal */ .chroma .l { color: #000000 }
/* LiteralDate */ .chroma .ld { color: #000000 }
/* LiteralString */ .chroma .s { color: #4e9a06 }
/* LiteralStringAffix */ .chroma .sa { color: #4e9a06 }
/* LiteralStringBacktick */ .chroma .sb { color: #4e9a06 }
/* LiteralStringChar */ .chroma .sc { color: #4e9a06 }
/* LiteralStringDelimiter */ .chroma .dl { color: #4e9a06 }
/* LiteralStringDoc */ .chroma .sd { color: #8f5902; font-style: italic }
/* LiteralStringDouble */ .chroma .s2 { color: #4e9a06 }
/* LiteralStringEscape */ .chroma .se { color: #4e9a06 }
/* LiteralStringHeredoc */ .chroma .sh { color: #4e9a06 }
/* LiteralStringInterpol */ .chroma .si { color: #4e9a06 }
/* LiteralStringOther */ .chroma .sx { color: #4e9a06 }
/* LiteralStringRegex */ .chroma .sr { color: #4e9a06 }
/* LiteralStringSingle */ .chroma .s1 { color: #4e9a06 }
/* LiteralStringSymbol */ .chroma .ss { color: #4e9a06 }
/* LiteralNumber */ .chroma .m { color: #0000cf; font-weight: bold }
/* LiteralNumberBin */ .chroma .mb { color: #0000cf; font-weight: bold }
/* LiteralNumberFloat */ .chroma .mf { color: #0000cf; font-weight: bold }
/* LiteralNumberHex */ .chroma .mh { color: #0000cf; font-weight: bold }
/* LiteralNumberInteger */ .chroma .mi { color: #0000cf; font-weight: bold }
/* LiteralNumberIntegerLong */ .chroma .il { color: #0000cf; font-weight: bold }
/* LiteralNumberOct */ .chroma .mo { color: #0000cf; font-weight: bold }
/* Operator */ .chroma .o { color: #ce5c00; font-weight: bold }
/* OperatorWord */ .chroma .ow { color: #204a87; font-weight: bold }
/* Punctuation */ .chroma .p { color: #000000; font-weight: bold }
/* Comment */ .chroma .c { color: #8f5902; font-style: italic }
/* CommentHashbang */ .chroma .ch { color: #8f5902; font-style: italic }
/* CommentMultiline */ .chroma .cm { color: #8f5902; font-style: italic }
/* CommentSingle */ .chroma .c1 { color: #8f5902; font-style: italic }
/* CommentSpecial */ .chroma .cs { color: #8f5902; font-style: italic }
/* CommentPreproc */ .chroma .cp { color: #8f5902; font-style: italic }
/* CommentPreprocFile */ .chroma .cpf { color: #8f5902; font-style: italic }
/* Generic */ .chroma .g { color: #000000 }
/* GenericDeleted */ .chroma .gd { color: #a40000 }
/* GenericEmph */ .chroma .ge { color: #000000; font-style: italic }
/* GenericError */ .chroma .gr { color: #ef2929 }
/* GenericHeading */ .chroma .gh { color: #000080; font-weight: bold }
/* GenericInserted */ .chroma .gi { color: #00a000 }
/* GenericOutput */ .chroma .go { color: #000000; font-style: italic }
/* GenericPrompt */ .chroma .gp { color: #8f5902 }
/* GenericStrong */ .chroma .gs { color: #000000; font-weight: bold }
/* GenericSubheading */ .chroma .gu { color: #800080; font-weight: bold }
/* 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) {
/* Background */ .chroma { background-color: #f8f8f8 }
}
@media print {
.chroma {
background-color: white;
}
}

Submodule assets/feather deleted from 734f3f5114

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

1
assets/jam Submodule

Submodule assets/jam added at c8501b14e0

8
assets/js/back-to-top.js Normal file
View File

@ -0,0 +1,8 @@
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";
}
}

27
config.yaml Normal file
View File

@ -0,0 +1,27 @@
markup:
highlight:
noClasses: false
lineNos: true
params:
faviconICO: favicon.ico
faviconPNG: favicon.png
readingtime: true
taxonomies:
tag: tags
author: authors
series: series
privacy:
googleAnalytics:
disable: true
twitter:
enableDNT: true
vimeo:
enableDNT: true
youtube:
privacyEnhanced: true

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"

12
data/meses.yml Normal file
View File

@ -0,0 +1,12 @@
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,41 +0,0 @@
baseURL = "https://example.com"
theme = "bobatheme"
defaultContentLanguage = "en"
author = "bbaovanc"
sectionPagesMenu = "main"
enableRobotsTXT = true
paginate = 5
enableGitInfo = true
[markup]
[markup.highlight]
noClasses = false
lineNos = true
[params]
# these are for the OpenGraph/Twitter embeds in Hugo
description = "Example website for bobatheme"
# these are for favicons in bobatheme
faviconICO = "/favicon.ico"
faviconPNG = "/favicon.png"
# show word count and/or reading time
wordcount = true
readingtime = true
# used for last update
repoURL = "https://github.com/BBaoVanC/bobatheme"
[languages]
[languages.en]
languageName = "English"
title = "Example Website"
weight = 1
[languages.es]
languageName = "Español"
title = "Sitio web ejemplo"
weight = 2
[languages.es.params]
description = "Sitio web ejemplo para bobatheme"

50
exampleSite/config.yaml Normal file
View File

@ -0,0 +1,50 @@
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 (defaults are shown here)
# faviconICO: favicon.ico
# faviconPNG: favicon.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
# 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

@ -1,31 +0,0 @@
[credit_comment]
other = "<!-- bobatheme is available under the MIT license at https://github.com/BBaoVanC/bobatheme. -->"
[long_date]
other = "{{ .Date.Format `January 2, 2006` }}"
[wordcount]
one = "{{ . }} word"
other = "{{ . }} words"
[readingtime]
one = "{{ . }} min"
other = "{{ . }} mins"
[read_more]
other = "Read more"
[browser_no_video_support]
other = "Your browser does not support video."
[filtering_for]
other = "Filtering for \"{{ . }}\""
[no_posts]
other = "No posts here!"
[table_of_contents]
other = "Table of Contents"

110
i18n/en.yaml Normal file
View File

@ -0,0 +1,110 @@
# Misc
credit_comment:
other: "<!-- bobatheme is available under the MIT license at https://github.com/BBaoVanC/bobatheme. -->"
table_of_contents:
other: "Table of Contents"
browser_no_video_support:
other: "Your browser does not support video."
# Meta items
long_date:
other: "{{ .Date.Format `January 2, 2006` }}"
wordcount:
one: "{{ . }} word"
other: "{{ . }} words"
readingtime:
one: "{{ . }} min"
other: "{{ . }} mins"
# Post count
no_posts:
other: "No posts here!"
post_count:
one: "{{ . }} post"
other: "{{ . }} posts"
# Navigation
read_more:
other: "Read more"
see_also:
other: "See also"
older_post:
other: "Older"
newer_post:
other: "Newer"
# 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_view_source:
other: "link to page source"
aria_post_meta_translations:
other: "translations"
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_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_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,31 +0,0 @@
[credit_comment]
other = "<!-- bobatheme está disponible en GitHub basado en la licensia MIT: https://github.com/BBaoVanC/bobatheme. -->"
[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"
[read_more]
other = "Leer más"
[browser_no_video_support]
other = "Tu navegador de internet no admite video."
[filtering_for]
other = "Filtrando por \"{{ . }}\""
[no_posts]
other = "¡No hay contenido para mostrar!"
[table_of_contents]
other = "Índice"

110
i18n/es.yaml Normal file
View File

@ -0,0 +1,110 @@
# 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."
# 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"
# Post count
no_posts:
other: "¡No hay contenido para mostrar!"
# post_count:
# one: "{{ . }} post"
# other: "{{ . }} posts"
# Navigation
read_more:
other: "Leer más"
see_also:
other: "Véase también"
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_view_source:
# other: "link to page source"
# aria_post_meta_translations:
# other: "translations"
# 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_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_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,7 +1,7 @@
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="section-header">
{{ .Text | safeHTML }}
<a href="#{{ .Anchor | safeURL }}">
<span class="section-header-link">
<span class="section-header-link" aria-label="{{ i18n "aria_header_link" }}">
{{ partial "icon.html" "link" }}
</span>
</a>

View File

@ -1 +1,8 @@
<a href="{{ .Destination | safeURL }}"{{ with .Title}}title="{{ . }}"{{ end }}{{ if strings.HasPrefix .Destination "http" }}target="_blank" rel="noopener"{{ end }}>{{ .Text | safeHTML }}</a>{{/* DO NOT REMOVE THE TRAILING NEWLINE HERE -- it prevents there from being whitespace in between the link and the next word/element (for example: if there's a period right after a link) */}}
<a
href="{{ .Destination | safeURL }}"
{{ with .Title }}title="{{ . }}"{{ end }}
{{ if strings.HasPrefix .Destination "http" }}target="_blank" rel="noopener"{{ end }}
>
{{- .Text | safeHTML -}}
</a>
{{- /* This comment gets rid of the trailing newline. */ -}}

View File

@ -1,30 +1,44 @@
{{ partial "credit.html" }}
<!DOCTYPE html>
<html lang="{{ .Language.Lang }}">
{{- partial "head.html" . -}}
{{ partial "head.html" . }}
<body>
<a id="top" aria-hidden="true"></a>
<div class="top">
{{ partial "top.html" . }}
</div>
{{ if not .IsHome }}
{{ partial "breadcrumb.html" . }}
{{ end }}
<div class="content">
{{- block "main" . }}
{{ .Content }}
{{- end }}
{{ block "main" . }}
{{ .Content }}
{{ end }}
</div>
{{ with .Site.Copyright }}
<footer>
<hr>
<small>
&copy;
{{ now.Format "2006" }}
{{ $.Site.Author.name }}
{{ . | safeHTML }}
</small>
</footer>
<footer>
<hr>
<small>
{{ . | safeHTML }}
</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,27 +1,31 @@
{{ define "main" }}
<h1>
{{ with .Params.icon }}{{ partial "icon.html" . }}{{ end }}
{{ .Title | markdownify }}
{{ partial "rss-link.html" . }}
</h1>
<h1>
{{ with .Params.icon }}{{ partial "icon.html" . }}{{ end }}
{{ .Title | markdownify }}
<span class="rss-link">
{{ with .OutputFormats.Get "rss" }}
<a href="{{ .Permalink }}">{{ partial "icon.html" "rss" }}</a>
<div class="list-page-content">
{{ with .Sections }}
<div class="sections">
{{ range . }}
{{ .Render "summary/section" }}
{{ end }}
</div>
{{ end }}
</span>
</h1>
<div class="posts">
{{ range .Paginator.Pages }}
{{ .Render "summary" }}
{{ else }}
{{ i18n "no_posts" }}
{{ end }}
</div>
{{ if gt .Paginator.TotalPages 1 }}
<div class="pagination">
{{ template "_internal/pagination.html" . }}
</div>
{{ end }}
<div class="page-list">
<ul>
{{ range .Paginator.Pages }}
<li>{{ .Render "summary/post" }}</li>
{{ else }}
<div>
{{ i18n "no_posts" }}
</div>
{{ end }}
</ul>
</div>
</div>
{{ partial "pagination.html" . }}
{{ end }}

View File

@ -1,27 +1,102 @@
{{ define "main" }}
<div class="post-title">
<h1>
{{ .Title | markdownify }}
{{ if .Draft }}{{ partial "icon.html" "edit" }}{{ end }}
</h1>
</div>
<div class="post-title">
<h1>
{{ .Title | markdownify }}
{{ if .Draft }}{{ partial "icon.html" "write" }}{{ end }}
</h1>
</div>
{{ partial "post-metadata.html" . }}
{{ partial "post-metadata/full.html" . }}
{{ if .Params.Toc }}
<div id="table-of-contents">
<h2>{{ i18n "table_of_contents" }}</h2>
{{ .TableOfContents }}
</div>
{{ end }}
<hr>
{{ with .Resources.GetMatch "feature" }}
<div class="post-media">
{{ partial "figure.html" . }}
</div>
{{ end }}
{{ .Content }}
{{ 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 }}
{{ if .Params.Toc }}
<div class="table-of-contents" aria-label="{{ i18n "aria_table_of_contents" }}">
<details>
<summary>{{ i18n "table_of_contents" }}</summary>
{{ .TableOfContents }}
</details>
</div>
<div class="table-of-contents print">
{{ i18n "table_of_contents" }}
{{ .TableOfContents }}
</div>
{{ end }}
{{ with .Resources.GetMatch "feature" }}
<div class="post-media">
{{ partial "figure.html" (dict "src" . "border" true) }}
</div>
{{ end }}
{{ .Content }}
{{ $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 }}
{{ if or .NextInSection .PrevInSection }}
<div class="prevnext">
{{ with .NextInSection }}
<a class="prev" href="{{ .Permalink }}">
<div class="prev-caption">
&larr; {{ i18n "newer_post" }}
</div>
<div class="prev-post">
{{ .Title | markdownify }}
</div>
</a>
{{ else }}
<div class="prev"></div>
{{ end }}
{{ with .PrevInSection }}
<a class="next" href="{{ .Permalink }}">
<div class="next-caption">
{{ i18n "older_post" }} &rarr;
</div>
<div class="next-post">
{{ .Title | markdownify }}
</div>
</a>
{{ else }}
<div class="next"></div>
{{ end }}
</div>
{{ end }}
{{ if .Params.comments }}
<div class="comments">
{{ partial "comments.html" . }}
</div>
{{ end }}
{{ end }}

View File

@ -1,33 +0,0 @@
<div class="post">
<h2 class="post-title">
{{ range .Params.categories }}
<code>{{ . }}</code>
{{ end }}
{{ with .Parent.Params.icon }}{{ partial "icon.html" . }}{{ end }}
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
{{ if .Draft }}{{ partial "icon.html" "edit" }}{{ end }}
</h2>
{{ partial "post-metadata.html" . }}
{{ with .Resources.GetMatch "feature" }}
<div class="post-media">
{{ partial "figure.html" . }}
</div>
{{ end }}
<div class="post-description">
{{ if .Description }}
<p>
{{ .Description | markdownify }}
</p>
{{ else }}
{{ .Summary }}
{{ end }}
</div>
<div class="readmore">
<a href="{{ .Permalink }}">{{ i18n "read_more" }} &rarr;</a>
</div>
</div>

View File

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

View File

@ -0,0 +1,23 @@
<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>
{{ 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" . }}
</div>
<div class="readmore">
<a href="{{ .Permalink }}">{{ i18n "read_more" }} &rarr;</a>
</div>
</div>

View File

@ -0,0 +1,12 @@
<a class="section-anchor" href="{{ .Permalink }}">
<div class="section">
<h2 class="section-title">
{{ with .Params.icon }}{{ partial "icon.html" . }}{{ end }}
{{ .Title | markdownify }}
</h2>
<div class="section-description">
{{ partial "description-or-summary.html" . }}
</div>
</div>
</a>

View File

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

View File

@ -0,0 +1,29 @@
<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>
{{ end }}
<div class="post-description">
{{ partial "description-or-summary.html" . }}
</div>
<div class="readmore">
<a href="{{ .Permalink }}">{{ i18n "read_more" }} &rarr;</a>
</div>
</div>

14
layouts/authors/list.html Normal file
View File

@ -0,0 +1,14 @@
{{ define "main" }}
<h1>
{{ partial "icon.html" "user-circle" }}
{{ .Title | markdownify }}
</h1>
<div class="page-list">
<ul>
{{ range .Paginator.Pages }}
<li>{{ .Render "summary/author" }}</li>
{{ end }}
</ul>
</div>
{{ end }}

25
layouts/authors/term.html Normal file
View File

@ -0,0 +1,25 @@
{{ define "main" }}
<h1>
{{ partial "icon.html" "user-circle" }}
{{ .Title | markdownify }}
{{ partial "rss-link.html" . }}
</h1>
{{ partial "post-metadata/author.html" . }}
{{ .Content }}
<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

@ -0,0 +1,19 @@
<nav class="breadcrumb" aria-label="{{ i18n "aria_breadcrumbnav" }}">
<ul>
{{ template "breadcrumbnav" (dict "p1" . "p2" .) }}
</ul>
</nav>
{{ define "breadcrumbnav" }}
{{ if .p1.Parent }}
{{ template "breadcrumbnav" (dict "p1" .p1.Parent "p2" .p2 ) }}
{{ else if not .p1.IsHome }}
{{ template "breadcrumbnav" (dict "p1" .p1.Site.Home "p2" .p2 ) }}
{{ end }}
<li{{ if eq .p1 .p2 }} class="active"{{ end }}>
{{ if eq .p1 .p2 }}
{{ .p1.Title | markdownify }}
{{ else }}
<a href="{{ .p1.Permalink }}">{{ .p1.Title | markdownify }}</a>
{{ end }}
</li>
{{ end }}

View File

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

View File

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

View File

@ -1,41 +1,28 @@
<figure>
{{ $media := . | resources.Fingerprint "sha512" }}
{{ $hidecaption := index . "hidecaption" }}
{{ if eq .MediaType.MainType "image" }}
{{ if index . "noborder" }}
<figure>
{{ else }}
<figure class="border">
{{ end }}
{{ $tiny := $media.Resize "500x" }}
{{ $small := $media.Resize "800x" }}
{{ $medium := $media.Resize "1200x" }}
{{ $large := $media.Resize "1500x" }}
<img src="{{ $media.Permalink }}"
alt="{{ $media.Title }}"
srcset='
{{ if ge $media.Width "500" }}
{{ $tiny.RelPermalink}} 500w,
{{ end }}
{{ if ge $media.Width "800" }}
{{ $small.RelPermalink }} 800w,
{{ end }}
{{ if ge $media.Width "1200" }}
{{ $medium.RelPermalink }} 1200w,
{{ end }}
{{ if ge $media.Width "1500" }}
{{ $large.RelPermalink }} 1500w,
{{ end }}
{{ $media.RelPermalink }} {{ $media.Width }}w
'
/>
{{ with index . "src" }}
{{ $media := . }}
{{ if eq .MediaType.MainType "image" }}
<img src="{{ $media.Permalink }}" alt="{{ $media.Title }}" />
{{ else if eq .MediaType.MainType "video" }}
<video controls>
<source src="{{ $media.Permalink }}" alt="{{ $media.Title }}">
{{ i18n "browser_no_video_support" }}
</video>
{{ end }}
{{ else if eq .MediaType.MainType "video" }}
<video controls>
<source src="{{ $media.Permalink }}" alt="{{ $media.Title }}">
{{ i18n "browser_no_video_support" }}
</video>
{{ end }}
{{ with $media.Title }}
<figcaption>
{{ . | markdownify }}
</figcaption>
{{ if not $hidecaption }}
{{ with $media.Title }}
<figcaption>
{{ . | markdownify }}
</figcaption>
{{ end }}
{{ end }}
{{ end }}
</figure>

View File

@ -4,32 +4,37 @@
{{ hugo.Generator }}
{{ with resources.Get "css/bobastyle.css" | fingerprint "sha512" }}
<link rel="stylesheet" type="text/css" href="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
<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">
<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/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 }}" />
<link rel="icon" type="image/x-icon" href="{{ . | absURL }}" />
{{ end }}
{{ with .Site.Params.faviconPNG }}
<link rel="icon" type="image/png" href="{{ . | absURL }}" />
<link rel="icon" type="image/png" href="{{ . | absURL }}" />
{{ end }}
{{ range .AlternativeOutputFormats -}}
{{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }}
{{ end -}}
{{ if .IsHome }}
<title>{{ .Site.Title }}</title>
<title>{{ .Site.Title | plainify }}</title>
{{ else }}
<title>{{ print .Title " | " .Site.Title }}</title>
<title>{{ (print .Title " | " .Site.Title) | plainify }}</title>
{{ end }}
{{ partial "opengraph.html" . }}
{{ template "_internal/twitter_cards.html" . }}
{{ template "_internal/schema.html" . }}
{{ 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="description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end }}">
<meta name="language" content="{{ .Language.Lang }}">
<meta name="description" content="{{ (partial "seo-tags/description.html" .) | plainify }}">
</head>

View File

@ -1,5 +1,5 @@
{{ $icon_resource := resources.Get (printf "feather/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 }}
{{- $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 -}}

View File

@ -1,52 +0,0 @@
<meta property="og:title" content="{{ .Title }}" />
<meta property="og:description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end }}" />
<meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}" />
<meta property="og:url" content="{{ .Permalink }}" />
{{- with $.Params.images -}}
{{- range first 6 . }}<meta property="og:image" content="{{ . | absURL }}" />{{ end -}}
{{- else -}}
{{- $images := $.Resources.ByType "image" -}}
{{- $featured := $images.GetMatch "*feature*" -}}
{{- if not $featured }}{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}{{ end -}}
{{- with $featured -}}
<meta property="og:image" content="{{ $featured.Permalink }}"/>
{{- else -}}
{{- with $.Site.Params.images }}<meta property="og:image" content="{{ index . 0 | absURL }}"/>{{ end -}}
{{- end -}}
{{- end -}}
{{- if .IsPage }}
{{- $iso8601 := "2006-01-02T15:04:05-07:00" -}}
<meta property="article:section" content="{{ .Section }}" />
{{ with .PublishDate }}<meta property="article:published_time" {{ .Format $iso8601 | printf "content=%q" | safeHTMLAttr }} />{{ end }}
{{ with .Lastmod }}<meta property="article:modified_time" {{ .Format $iso8601 | printf "content=%q" | safeHTMLAttr }} />{{ end }}
{{- end -}}
{{- with .Params.audio }}<meta property="og:audio" content="{{ . }}" />{{ end }}
{{- with .Params.locale }}<meta property="og:locale" content="{{ . }}" />{{ end }}
{{- with .Site.Params.title }}<meta property="og:site_name" content="{{ . }}" />{{ end }}
{{- with .Params.videos -}}
{{- range first 6 . }}<meta property="og:video" content="{{ . | absURL }}" />{{ end -}}
{{- else -}}
{{- $videos := $.Resources.ByType "video" -}}
{{- $featured_video := $videos.GetMatch "*feature*" -}}
{{- if not $featured_video }}{{ $featured_video = $videos.GetMatch "{*cover*,*thumbnail*}" }}{{ end -}}
{{- with $featured_video -}}
<meta property="og:video" content="{{ $featured_video.Permalink | absURL }}" />
{{- end -}}
{{- end -}}
{{- /* If it is part of a series, link to related articles */}}
{{- $permalink := .Permalink }}
{{- $siteSeries := .Site.Taxonomies.series }}
{{ with .Params.series }}{{- range $name := . }}
{{- $series := index $siteSeries ($name | urlize) }}
{{- range $page := first 6 $series.Pages }}
{{- if ne $page.Permalink $permalink }}<meta property="og:see_also" content="{{ $page.Permalink }}" />{{ end }}
{{- end }}
{{ end }}{{ end }}
{{- /* Facebook Page Admin ID for Domain Insights */}}
{{- with .Site.Social.facebook_admin }}<meta property="fb:admins" content="{{ . }}" />{{ end }}

View File

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

View File

@ -0,0 +1,16 @@
{{ with .Params.authors }}
<span class="post-meta-item" 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) }}
{{ end }}
{{ delimit $authors ", " }}
{{ else }}
{{ delimit . ", " }}
{{ end }}
</span>
{{ end }}

View File

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

View File

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

View File

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

View File

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

@ -0,0 +1,13 @@
{{ 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,66 +0,0 @@
{{ if or .Date .IsTranslated .Site.Params.wordcount .Site.Params.readingtime .Site.Params.repoURL }}
<div class="post-metadata">
{{ if .Date }}
<span class="post-meta-item">
{{ partial "icon.html" "calendar" }}
<time datetime="{{ .Date.Format "January 2, 2006" }}" pubdate>
{{ i18n "long_date" (dict "Date" .Date "Data" .Site.Data) }}
</time>
</span>
{{ if not .Site.Params.repoURL }}
{{ if ne .Lastmod .Date }}
<span class="post-meta-item">
{{ partial "icon.html" "edit-2" }}
<time datetime="{{ .Lastmod.Format "2006-01-02" }}" pubdate>
{{ i18n "long_date" (dict "Date" .Lastmod "Data" .Site.Data) }}
</time>
{{ end }}
</span>
{{ end }}
{{ end }}
{{ if .IsTranslated }}
<span class="post-meta-item">
{{ partial "icon.html" "globe" }}
{{ range .Translations }}
<a href="{{ .Permalink }}">{{ .Language }}</a>
{{ end }}
</span>
{{ end }}
{{ if .Site.Params.wordcount }}
<span class="post-meta-item">
{{ partial "icon.html" "type" }}
{{ i18n "wordcount" .WordCount }}
</span>
{{ end }}
{{ if .Site.Params.readingtime }}
<span class="post-meta-item">
{{ partial "icon.html" "clock" }}
{{ i18n "readingtime" .ReadingTime }}
</span>
{{ end }}
{{ if .Site.Params.repoURL }}
{{ with .GitInfo }}
<span class="post-meta-item">
{{ partial "icon.html" "git-commit" }}
<a href="{{ (printf "%s/commit/%s" $.Site.Params.repoURL .Hash) | absLangURL }}">
<code>{{ .AbbreviatedHash }}</code>
</a>
</span>
{{ end }}
{{ end }}
<div class="tags">
{{ range (.GetTerms "tags") }}
<span class="post-meta-item">
{{ partial "icon.html" "tag" }}
<a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
</span>
{{ end }}
</div>
</div>
{{ end }}

View File

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

View File

@ -0,0 +1,28 @@
{{ 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 */}}
{{ 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/viewsource.html" . }}
{{ partial "post-meta-item/tags.html" . }}
</div>
{{ end }}

View File

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

View File

@ -0,0 +1,18 @@
{{ 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/tags.html" . }}
</div>
{{ end }}

View File

@ -0,0 +1,28 @@
{{ $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>
<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

@ -0,0 +1,5 @@
<span class="rss-link">
{{ with .OutputFormats.Get "rss" }}
<a href="{{ .Permalink }}" target="_blank" rel="noopener" aria-label="{{ i18n "aria_rss_link" }}">{{ partial "icon.html" "rss-feed" }}</a>
{{ end }}
</span>

View File

@ -0,0 +1,7 @@
{{ with .Params.authors }}
<meta name="author" content="{{ delimit . ", " }}">
{{ range . }}
<meta property="article:author" content="{{ . }}">
{{ end }}
{{ end }}

View File

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

View File

@ -0,0 +1,15 @@
{{ range .AlternativeOutputFormats }}
<link rel="{{ .Rel }}" type="{{ .MediaType.Type }}" href="{{ .Permalink }}" title="{{ $.Site.Title | plainify }}">
{{ end }}
{{ with .OutputFormats.Get "rss" }}
<link rel="start" type="{{ .MediaType.Type }}" href="{{ .Permalink }}" title="{{ $.Site.Title | plainify }}">
{{ end }}
{{ with .PrevInSection }}
<link rel="prev" title="{{ .Title | plainify }}" href="{{ .Permalink }}">
{{ end }}
{{ with .NextInSection }}
<link rel="next" title="{{ .Title | plainify }}" href="{{ .Permalink }}">
{{ end }}
<link rel="canonical" href="{{ .Permalink }}">

View File

@ -0,0 +1,48 @@
<meta property="og:title" content="{{ .Title | plainify }}">
<meta property="og:description" content="{{ (partial "seo-tags/description.html" .) | plainify }}">
<meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}">
<meta property="og:url" content="{{ .Permalink }}">
{{ $images := $.Resources.ByType "image" }}
{{ $featured := $images.GetMatch "*feature*" }}
{{ if not $featured }}
{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}
{{ end }}
{{ with $featured }}
<meta property="og:image" content="{{ $featured.Permalink }}">
{{ end }}
{{ with .Section }}
<meta property="article:section" content="{{ . }}">
{{ end }}
{{ $format := "2006-01-02T15:04:05-07:00" }}
{{ with .Date }}
<meta property="article:published_time" content="{{ .Format $format }}">
{{ end }}
{{ with .Lastmod }}
<meta property="article:modified_time" {{ .Format $format | printf "content=%q" | safeHTMLAttr }}>
{{ end }}
{{ with .Params.audio }}
<meta property="og:audio" content="{{ . }}">
{{ end }}
{{ with .Language.Lang }}
<meta property="og:locale" content="{{ . }}">
{{ end }}
{{ with .Site.Params.title }}
<meta property="og:site_name" content="{{ . }}">
{{ end }}
{{ $videos := $.Resources.ByType "video" }}
{{ $featured_video := $videos.GetMatch "*feature*" }}
{{ if not $featured_video }}
{{ $featured_video = $videos.GetMatch "{*cover*,*thumbnail*}" }}
{{ end }}
{{ with $featured_video }}
<meta property="og:video" content="{{ $featured_video.Permalink | absURL }}">
{{ end }}

View File

@ -0,0 +1,26 @@
<meta itemprop="name" content="{{ .Title | plainify }}">
<meta itemprop="description" content="{{ (partial "seo-tags/description.html" .) | plainify }}">
{{ $format := "2006-01-02T15:04:05-07:00" }}
{{ with .Date }}
<meta itemprop="datePublished" content="{{ .Format $format }}">
{{ end }}
{{ with .Lastmod }}
<meta itemprop="dateModified" content="{{ .Format $format }}">
{{ end }}
<meta itemprop="wordCount" content="{{ .WordCount }}">
{{ $images := $.Resources.ByType "image" }}
{{ $featured := $images.GetMatch "*feature*" }}
{{ if not $featured }}
{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}
{{ end }}
{{ with $featured }}
<meta itemprop="image" content="{{ $featured.Permalink }}">
{{ end }}
{{ with .Params.tags }}
<meta itemprop="keywords" content="{{ delimit . ", " }}">
{{ end }}

View File

@ -0,0 +1,29 @@
{{ $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-tags/description.html" .) | plainify }}">
{{ with .Site.Social.twitter }}
<meta name="twitter:site" content="@{{ . }}">
{{ end }}

View File

@ -1,27 +1,50 @@
<h2 class="header">
<a href="{{ "/" | absLangURL }}">{{ .Site.Title | markdownify }}</a>
<a href="{{ .Site.Home.Permalink | absLangURL }}">{{ .Site.Title | markdownify }}</a>
</h2>
<nav class="navbar">
{{ with .Site.GetPage "/" }}
<a class="navbar-item" href="{{ .Permalink | absLangURL }}">{{ .Title }}</a>
{{ end }}
<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 }}
<a class="navbar-item" href="{{ .URL | absLangURL }}">{{ .Name }}</a>
{{ end }}
</nav>
{{ range .Site.Menus.main }}
{{ $isActive := false }}
{{ if or ($.HasMenuCurrent .Menu .) ($.IsMenuCurrent .Menu .) }}
{{ $isActive = true }}
{{ end }}
<a class="navbar-item{{ if $isActive }} active{{ end }}" href="{{ .URL }}">{{ .Name }}</a>
{{ end }}
</nav>
{{ if .Site.IsMultiLingual }}
<nav class="langbar">
{{ range .Site.Home.AllTranslations }}
{{ 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 }}
{{ if eq .Language $.Site.Language }}
<b><a class="langbar-item" href="{{ .Permalink }}">{{ .Language.LanguageName }}</a></b>
{{ else }}
<a class="langbar-item" href="{{ .Permalink }}">{{ .Language.LanguageName }}</a>
{{ 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 }}
</nav>
{{ end }}
</div>

14
layouts/series/list.html Normal file
View File

@ -0,0 +1,14 @@
{{ define "main" }}
<h1>
{{ partial "icon.html" "files" }}
{{ .Title | markdownify }}
</h1>
<div class="series-taxonomy">
<ul>
{{ range .Pages }}
<li>{{ .Render "summary/series" }}</li>
{{ end }}
</ul>
</div>
{{ end }}

30
layouts/series/term.html Normal file
View File

@ -0,0 +1,30 @@
{{ define "main" }}
<h1>
{{ partial "icon.html" "files" }}
{{ .Title | markdownify }}
{{ partial "rss-link.html" . }}
</h1>
{{ partial "post-metadata/series.html" . }}
{{ partial "description-or-summary.html" . }}
<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,7 @@
<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 }}
</aside>

View File

@ -1,2 +1,15 @@
{{ $resource := $.Page.Resources.GetMatch (.Get "src") }}
{{ partial "figure.html" $resource }}
{{ $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

@ -0,0 +1,13 @@
{{ $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" "image" "alt" (.Get "alt")) }}
</p>

View File

@ -0,0 +1,13 @@
{{ $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" "video" "alt" (.Get "alt")) }}
</p>

16
layouts/tags/list.html Normal file
View File

@ -0,0 +1,16 @@
{{ 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 }}

22
layouts/tags/term.html Normal file
View File

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

@ -1,41 +1,21 @@
{{ define "main" }}
<h1>
{{ partial "icon.html" "filter" }}
{{ i18n "filtering_for" .Title }}
{{ if eq .Kind "term" }}
<span class="rss-link">
{{ with .OutputFormats.Get "rss" }}
<a href="{{ .Permalink }}">{{ partial "icon.html" "rss" }}</a>
<h1>
{{ if eq .Data.Singular "tag" }}
{{ partial "icon.html" "tag" }}
{{ else }}
{{ partial "icon.html" "filter" }}
{{ end }}
</span>
{{ end }}
</h1>
{{ if eq .Kind "taxonomy" }}
<ul>
{{ range .Pages }}
<li>
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
</li>
{{ end }}
</ul>
{{ else }}
{{ range .Paginator.Pages }}
{{ .Render "summary" }}
{{ else }}
<div>
{{ i18n "no_posts" }}
</div>
{{ end }}
{{ if gt .Paginator.TotalPages 1 }}
<div class="pagination">
{{ template "_internal/pagination.html" . }}
</div>
{{ end }}
{{ end }}
{{ .Title | markdownify }}
</h1>
<div class="taxonomy">
<ul>
{{ range .Data.Terms.Alphabetical }}
<li>
<a href="{{ .Page.Permalink }}">{{ .Page.Title | markdownify }}</a>
</li>
{{ end }}
</ul>
</div>
{{ end }}

View File

@ -0,0 +1,27 @@
{{ 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>
{{ else }}
<div>
{{ i18n "no_posts" }}
</div>
{{ end }}
</ul>
</div>
{{ partial "pagination.html" . }}
{{ end }}

View File

@ -5,10 +5,10 @@ name = "bobatheme"
license = "MIT"
licenselink = "https://github.com/BBaoVanC/bobatheme/blob/master/LICENSE"
description = "Simple Hugo theme for boba.best and bbaovanc.com"
homepage = "https://boba.best/"
homepage = "https://bbaovanc.com"
tags = []
features = []
min_version = "0.87.0"
min_version = "0.80.0"
[author]
name = "bbaovanc"