237 Commits

Author SHA1 Message Date
289f55dc19 Throw error in include shortcode if file not found 2023-10-16 20:35:05 -05:00
0ddf0bdf42 Improve print compatiblity with navbar redesign 2023-10-15 20:54:11 -05:00
03d826f1c4 Fix wrong highlight color on navbar 2023-10-15 19:40:45 -05:00
f94307cdbf Redesign navbar to be full width 2023-10-15 19:33:10 -05:00
fde24f7438 Fix navbar highlighting on section page itself 2023-10-15 17:49:56 -05:00
c0426f191a Revert ":3"
This reverts 50a207b8ee
2023-10-15 00:42:45 -05:00
e8a34ae4a4 Add gap before page-list when there's no text description 2023-04-10 15:08:33 -05:00
18731498e8 Minor W3C validation fixes
Hopefully more to come soon, there's a lot of errors and warnings
2023-04-06 00:25:08 -05:00
ad5c40b02b Use CSS to set footer font size instead of <small> 2023-04-06 00:18:18 -05:00
e6b5997dff Move @media specializations section instead of previous commit
Reverts 960d1d24be
2023-04-06 00:12:43 -05:00
960d1d24be Fix table of contents on print 2023-04-06 00:11:12 -05:00
17047babc0 Improve date element in page metadata 2023-04-06 00:08:28 -05:00
7bc8a4cb57 Clean up CSS
- Add vim folds to make organized sections
- Rename a lot of classes from post- to page-
- Generalize series CSS classes better
- Clean up navbar div structure
- Remove langpicker and most of multilingual support
- many other minor tweaks
2023-03-24 08:49:02 -05:00
d34b2a56d7 Remove series position indicator -- racy and buggy 2023-03-18 21:11:07 -05:00
50a207b8ee :3 2023-03-18 20:23:49 -05:00
6f140f096b Organize summary template files
Also a small CSS patch to fix margin around post-title
2023-02-28 18:24:19 -06:00
316c62ebe8 Remove unnecessary credit.html partial 2023-02-28 17:54:22 -06:00
1caa7acdc9 Prevent page breaking in some elements when printing 2023-01-27 16:39:04 -06:00
f2f9e78559 Use RenderString instead of markdownify in some places 2023-01-27 16:14:23 -06:00
dd65d55389 Make sure link-1 has enough contrast 2023-01-26 16:54:17 -06:00
c7acf8ce38 Add link-1 color to light theme too 2023-01-26 16:47:39 -06:00
d7647a0b6f Fix table borders between th and td in same line 2023-01-26 16:43:46 -06:00
ebaa1de00b Add aria labels to share buttons 2023-01-26 16:36:03 -06:00
0744af717d Fix code block text sizing on mobile safari 2023-01-24 01:54:27 -06:00
23f86d5982 Use relative URL for fonts
Makes it work when the website isn't on root (such as demo)
2023-01-24 01:34:23 -06:00
b854ae48e6 Specify table.markdown instead of just .markdown for table styling 2023-01-23 18:11:00 -06:00
36a19a48b7 Add more borders in table for clarity 2023-01-23 18:10:11 -06:00
1f8a82228e Add include shortcode 2023-01-23 17:39:20 -06:00
60ed1c0264 Serve fonts (Open Sans and JetBrains Mono) rather than use system 2023-01-22 20:46:18 -06:00
3fae019148 Finish support for list page subtitle
Fixes #27 (as long as I didn't miss anything)
2023-01-22 16:43:09 -06:00
8ef1e3840a Change color when hovering over share buttons 2023-01-22 16:31:08 -06:00
629b3758b9 Change print button to an <a> to match the rest of the buttons
Also makes it have pointer cursor
2023-01-22 16:28:24 -06:00
9412906b4f Make the left bar of blockquote lined up with rest of text 2023-01-22 16:26:43 -06:00
f8cfad647f Fix contrast of code block Copy button 2023-01-22 16:23:03 -06:00
b200623dca Fix keyboard accessibility of code block copy button 2023-01-22 16:22:51 -06:00
80f5994d96 Improve code block copy text
- Use JS to get it directly from the code block instead of needing a
  separate `pre.code-raw` to get it from. That makes it possible to:
- bashsession: Don't copy prompt or command output
2023-01-22 00:09:34 -06:00
342710a755 Reduce gap between elements in subsections list 2023-01-21 23:34:34 -06:00
8eb642dbc8 Remove <hr> separator before footer 2023-01-21 23:32:32 -06:00
a4be8b395b Remove video and add remote-figure shortcodes 2023-01-21 21:32:02 -06:00
47d6d02186 Add copy to clipboard to code blocks 2023-01-20 17:14:18 -06:00
a26ea62b60 Refresh the code block design 2023-01-20 16:25:28 -06:00
7cff045cb3 Website header title should not be h1 2023-01-07 20:50:01 -06:00
9f080377e7 Allow adding descriptions to taxonomies 2023-01-07 20:40:46 -06:00
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
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
95 changed files with 2713 additions and 716 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

@ -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

@ -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,24 @@
---
title: {{ replace .Name "-" " " | title }}
date: {{ .Date | time.Format "2006-01-02" }}
title: {{ replace .Name "-" " " | humanize }}
date: {{ .Date }}
lastmod: {{ .Date }}
toc: true
comments: true
draft: true
authors:
- {{ with .Site.Author.name }}{{ . }}{{ else }}John Doe{{ end }}
categories:
- archetype-stuff
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

@ -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

@ -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.

File diff suppressed because it is too large Load Diff

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;
}

104
assets/css/syntax-light.css Normal file
View File

@ -0,0 +1,104 @@
/* 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; }
/* 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 }
/* 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;
}
}

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 }

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

35
assets/js/bobatheme.js Normal file
View File

@ -0,0 +1,35 @@
// back to top
const backToTop = document.getElementById("back-to-top");
window.onscroll = function() {
if (document.body.scrollTop > 100 || document.documentElement.scrollTop > 100) {
backToTop.style.display = "block";
} else {
backToTop.style.display = "none";
}
}
// code block copy to clipboard
window.onload = () => {
document.querySelectorAll(".code-block").forEach(codeBlock => {
const button = codeBlock.querySelector(".code-header > .code-copy-button");
// lang will not be unset because we default it to text
// clone it so it doesn't change the actual DOM element
const codeElem = codeBlock.querySelector("code[data-lang]").cloneNode(true);
// bashsession: remove command output lines
codeElem.querySelectorAll(".go").forEach(e => e.parentNode.removeChild(e));
// bashsession: remove prompt symbol
codeElem.querySelectorAll(".gp").forEach(e => e.parentNode.removeChild(e));
const rawCode = codeElem.innerText;
const originalCopyText = button.innerHTML;
button.onclick = event => {
navigator.clipboard.writeText(rawCode);
// TODO: maybe we could add a fancier indicator, like a flash or something
event.target.innerHTML = "Copied!";
setTimeout(() => {
event.target.innerHTML = originalCopyText;
}, 3000);
}
});
}

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

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

26
config.yaml Normal file
View File

@ -0,0 +1,26 @@
markup:
highlight:
noClasses: false
lineNos: true
params:
readingtime: true
taxonomies:
category: categories
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"

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"

63
exampleSite/config.yaml Normal file
View File

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

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"

137
i18n/en.yaml Normal file
View File

@ -0,0 +1,137 @@
# 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."
latest_posts:
other: "Latest Posts"
see_also:
other: "SEE ALSO:"
copy_to_clipboard:
other: "Copy"
# Meta items
wordcount:
one: "{{ . }} word"
other: "{{ . }} words"
readingtime:
one: "{{ . }} min"
other: "{{ . }} mins"
edit_history:
other: "Edit history"
# Post count
no_posts:
other: "No posts here!"
post_count:
one: "{{ . }} post"
other: "{{ . }} posts"
# Navigation
read_more:
other: "Read more"
related_posts:
other: "Related Posts"
older_post:
other: "Older"
newer_post:
other: "Newer"
# ARIA labels
aria_heading_link:
other: "heading link"
aria_back_to_top_button:
other: "back to top button"
aria_rss_link:
other: "RSS feed link"
aria_post_meta_edit_history:
other: "link to page edit history"
aria_post_meta_categories:
other: "categories"
aria_post_meta_tags:
other: "tags"
aria_post_meta_reading_time:
other: "reading time"
aria_post_meta_authors:
other: "authors"
aria_post_meta_series:
other: "series"
aria_breadcrumbnav:
other: "breadcrumb navigation bar"
aria_post_metadata:
other: "post metadata"
aria_author_metadata:
other: "author metadata"
aria_taxonomy_metadata:
other: "taxonomy metadata"
aria_post_meta_date:
other: "date"
aria_post_meta_modified_date:
other: "last modified date"
aria_author_post_count:
other: "post count"
aria_author_word_count:
other: "word count"
aria_taxonomy_post_count:
other: "post count"
aria_series_metadata:
other: "series metadata"
aria_navbar:
other: "navigation bar"
aria_table_of_contents:
other: "table of contents"
aria_share_twitter:
other: "share to twitter button"
aria_share_facebook:
other: "share to facebook button"
aria_share_linkedin:
other: "share to linkedin button"
aria_share_reddit:
other: "share to reddit button"
aria_share_telegram:
other: "share to telegram button"
aria_share_print:
other: "print article button"

View File

@ -1,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"

View File

@ -0,0 +1,15 @@
{{ $type := "text" }}
{{ with .Type }}
{{ $type = . }}
{{ end }}
<div class="code-block">
<div class="code-header">
<pre class="code-type">{{ $type }}</pre>
<a href="javascript:void(0)" class="code-copy-button">
{{ i18n "copy_to_clipboard" }}
</a>
</div>
{{/* a div.highlight is already created by highlight function */}}
{{ highlight .Inner $type }}
</div>

View File

@ -1,7 +1,7 @@
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="section-header">
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="section-heading">
{{ .Text | safeHTML }}
<a href="#{{ .Anchor | safeURL }}">
<span class="section-header-link">
<a class="heading-link" href="#{{ .Anchor | safeURL }}">
<span aria-label="{{ i18n "aria_heading_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,49 @@
{{ partial "credit.html" }}
{{ i18n "credit_comment" | safeHTML }}
<!DOCTYPE html>
<html lang="{{ .Language.Lang }}">
{{- partial "head.html" . -}}
{{ partial "head.html" . }}
<body>
<div class="top">
{{ partial "top.html" . }}
</div>
<a id="top" aria-hidden="true"></a>
<div class="content">
{{- block "main" . }}
{{ .Content }}
{{- end }}
</div>
{{ partial "top.html" . }}
{{ with .Site.Copyright }}
<footer>
<hr>
<small>
&copy;
{{ now.Format "2006" }}
{{ $.Site.Author.name }}
{{ . | safeHTML }}
</small>
</footer>
{{ end }}
<div class="center-body">
{{ if not .IsHome }}
{{ partial "breadcrumb.html" . }}
{{ end }}
<main>
{{ block "main" . }}
THIS TEXT SHOULD NOT SHOW. YUZSIQGHE (that string is so I can grep for it)
{{ end }}
</main>
{{ if or .Site.Copyright .Site.Params.footer }}
<footer>
{{ with .Site.Copyright }}
<p>{{ . | safeHTML }}</p>
{{ end }}
{{ with .Site.Params.footer }}
{{ . | $.RenderString (dict "display" "block") }}
{{ end }}
</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>
</div>
</body>
</html>

View File

@ -1,27 +1,25 @@
{{ 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>
{{ end }}
</span>
</h1>
<div class="posts">
{{ range .Paginator.Pages }}
{{ .Render "summary" }}
{{ else }}
{{ i18n "no_posts" }}
{{ with .Content }}
{{ . }}
{{ end }}
</div>
{{ if gt .Paginator.TotalPages 1 }}
<div class="pagination">
{{ template "_internal/pagination.html" . }}
</div>
{{ end }}
<div class="list-page-container">
{{ with .Sections }}
<div class="sections">
{{ range . }}
{{ .Render "summary" }}
{{ end }}
</div>
{{ end }}
{{ partial "page-list.html" .Paginator.Pages }}
</div>
{{ partial "pagination.html" . }}
{{ end }}

View File

@ -1,27 +1,89 @@
{{ define "main" }}
<div class="post-title">
<h1>
{{ .Title | markdownify }}
{{ if .Draft }}{{ partial "icon.html" "edit" }}{{ end }}
</h1>
</div>
<div class="page-title">
<h1>
{{ .Title | markdownify }}
{{ if .Draft }}{{ partial "icon.html" "write" }}{{ end }}
</h1>
</div>
{{ partial "post-metadata.html" . }}
{{ partial "page-metadata/post-full.html" . }}
{{ partial "series-box.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 }}
{{ 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" .) }}
</div>
{{ end }}
<article class="post-content">
{{ .Content }}
</article>
{{ partial "series-box.html" . }}
{{ 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 .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,33 +1,21 @@
<div class="post">
<h2 class="post-title">
{{ range .Params.categories }}
<code>{{ . }}</code>
{{ end }}
<h2 class="page-title">
{{ with .Parent.Params.icon }}{{ partial "icon.html" . }}{{ end }}
<a class="heading-link" href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
{{ if .Draft }}{{ partial "icon.html" "write" }}{{ end }}
</h2>
{{ with .Parent.Params.icon }}{{ partial "icon.html" . }}{{ end }}
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
{{ if .Draft }}{{ partial "icon.html" "edit" }}{{ end }}
</h2>
{{ partial "page-metadata/post-short.html" . }}
{{ partial "post-metadata.html" . }}
{{ with .Resources.GetMatch "feature" }}
{{ with .Resources.GetMatch "feature" }}
<div class="post-media">
{{ partial "figure.html" . }}
{{ partial "figure.html" (dict "src" .) }}
</div>
{{ end }}
{{ 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 class="page-description">
{{ partial "description-or-summary.html" . }}
</div>
<div class="readmore">
<a href="{{ .Permalink }}">{{ i18n "read_more" }} &rarr;</a>
</div>

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

@ -0,0 +1,24 @@
{{ define "main" }}
<h1>
{{ partial "icon.html" "user-circle" }}
{{ .Title | markdownify }}
</h1>
{{ with .Content }}
{{ . }}
{{ end }}
<div class="page-list">
{{ with .Paginator.Pages }}
{{ range . }}
<article class="page">
{{ .Render "summary" }}
</article>
{{ end }}
{{ else }}
<div>
{{ i18n "no_posts" }}
</div>
{{ end }}
</div>
{{ end }}

View File

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

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

@ -0,0 +1,19 @@
{{ define "main" }}
<div class="page-title">
<h1>
{{ partial "icon.html" "user-circle" }}
{{ .Title | markdownify }}
{{ partial "rss-link.html" . }}
</h1>
</div>
{{ partial "page-metadata/author.html" . }}
{{ with .Content }}
{{ . }}
{{ end }}
{{ 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

@ -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

@ -1 +0,0 @@
{{ i18n "credit_comment" | safeHTML }}

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 preload="metadata">
<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,43 @@
{{ 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 .Site.Params.faviconICO }}
<link rel="icon" type="image/x-icon" href="{{ . | absURL }}" />
{{ with resources.Get "js/bobatheme.js" | fingerprint "sha512" }}
<script defer src="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"></script>
{{ end }}
{{ with .Site.Params.faviconPNG }}
<link rel="icon" type="image/png" href="{{ . | absURL }}" />
{{ with resources.Get "js/share-event.js" | fingerprint "sha512" }}
<script defer src="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"></script>
{{ end }}
{{ range .AlternativeOutputFormats -}}
{{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }}
{{ end -}}
{{ with .Site.Params.faviconSVG }}
<link rel="icon" href="{{ . | absURL }}" />
{{ end }}
{{ with .Site.Params.appleTouchPNG }}
<link rel="apple-touch-icon" href="{{ . | absURL }}" />
{{ end }}
{{ if .IsHome }}
<title>{{ .Site.Title }}</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-description.html" .) | plainify }}">
{{ partial "additional-head.html" . }}
</head>

View File

@ -1,5 +1 @@
{{ $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 }}
{{ 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

@ -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,13 @@
<div class="page-list">
{{ with . }}
{{ range . }}
<article class="page">
{{ .Render "summary" }}
</article>
{{ end }}
{{ else }}
<div>
{{ i18n "no_posts" }}
</div>
{{ end }}
</div>

View File

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

View File

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

View File

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

View File

@ -0,0 +1,6 @@
{{ if ne .Site.Params.readingtime false }}
<span class="page-metadata-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="page-metadata-section 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="page-metadata-section tags" aria-label="{{ i18n "aria_post_meta_tags" }}">
{{ partial "icon.html" "tag" }}
{{ delimit $tags ", " }}
</div>
{{ end }}

View File

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

View File

@ -0,0 +1,16 @@
{{ if or .Date .Params.authors .Site.Params.readingtime }}
<div class="page-metadata" aria-label="{{ i18n "aria_post_metadata" }}">
{{ if .Date }}
<span class="page-metadata-item" aria-label="date">
{{ partial "icon.html" "calendar" }}
{{ partial "time-element.html" .Date }}
</span>
{{ end }}
{{ partial "page-metadata/item/authors.html" . }}
{{ partial "page-metadata/item/readingtime.html" . }}
{{ partial "page-metadata/item/series.html" . }}
{{ partial "page-metadata/item/categories.html" . }}
{{ partial "page-metadata/item/tags.html" . }}
</div>
{{ end }}

View File

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

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

@ -0,0 +1,5 @@
{{ if gt .Paginator.TotalPages 1 }}
<nav class="pagination">
{{ template "_internal/pagination.html" . }}
</nav>
{{ 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,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 preload="metadata">
<source src="{{ $src }}" alt="{{ $alt }}">
{{ i18n "browser_no_video_support" }}
</video>
{{ end }}
{{ if not $hidecaption }}
{{ with $alt }}
<figcaption>
{{ . | markdownify }}
</figcaption>
{{ end }}
{{ end }}
</figure>

View File

@ -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,9 @@
{{- with .Description -}}
<p>{{- . | markdownify -}}</p>
{{- else -}}
{{- with .Summary -}}
{{- . -}}
{{- else -}}
{{- .Site.Params.description -}}
{{- end -}}
{{- end -}}

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,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-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,30 @@
<meta itemprop="name" content="{{ .Title | plainify }}">
<meta itemprop="description" content="{{ (partial "seo-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 (.GetTerms "tags") }}
{{ $tags := slice }}
{{ range . }}
{{ $tags = $tags | append .LinkTitle }}
{{ end }}
<meta itemprop="keywords" content="{{ delimit $tags ", " }}">
{{ 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-description.html" .) | plainify }}">
{{ with .Site.Social.twitter }}
<meta name="twitter:site" content="@{{ . }}">
{{ end }}

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,69 @@
<div class="share-buttons">
{{ if .Site.Params.shareButtons.twitter }}
<a class="twitter-share"
target="_blank"
rel="noopener"
aria-label="{{ i18n "aria_share_twitter" }}"
onclick="share_event('Twitter');"
href="https://twitter.com/intent/tweet?url={{ .Permalink }}&text={{ .Title }}&via=bbaovanc">
{{- partial "icon.html" "twitter" -}}
</a>
{{ end }}
{{ if .Site.Params.shareButtons.facebook }}
<a class="facebook-share"
target="_blank"
rel="noopener"
aria-label="{{ i18n "aria_share_facebook" }}"
onclick="share_event('Facebook');"
href="https://www.facebook.com/sharer.php?u={{ .Permalink }}">
{{- partial "icon.html" "facebook" -}}
</a>
{{ end }}
{{ if .Site.Params.shareButtons.linkedin }}
<a class="linkedin-share"
target="_blank"
rel="noopener"
aria-label="{{ i18n "aria_share_linkedin" }}"
onclick="share_event('LinkedIn');"
href="https://www.linkedin.com/sharing/share-offsite/?url={{ .Permalink }}">
{{- partial "icon.html" "linkedin" -}}
</a>
{{ end }}
{{ if .Site.Params.shareButtons.reddit }}
<a class="reddit-share"
target="_blank"
rel="noopener"
aria-label="{{ i18n "aria_share_reddit" }}"
onclick="share_event('Reddit');"
href="https://reddit.com/submit?url={{ .Permalink }}&title={{ .Title }}">
{{- partial "icon.html" "reddit" -}}
</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"
aria-label="{{ i18n "aria_share_telegram" }}"
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 }}
<a class="print-share"
aria-label="{{ i18n "aria_share_print" }}"
href="javascript:void(0)"
onclick="window.print(); share_event('Print');">
{{- partial "icon.html" "printer" -}}
</a>
{{ end }}
</div>

View File

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

View File

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

View File

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

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

@ -0,0 +1,24 @@
{{ define "main" }}
<h1>
{{ partial "icon.html" "files" }}
{{ .Title | markdownify }}
</h1>
{{ with .Content }}
{{ . }}
{{ end }}
<div class="page-list series">
{{ with .Paginator.Pages }}
{{ range . }}
<div class="page series">
{{ .Render "summary" }}
</div>
{{ end }}
{{ else }}
<div>
{{ i18n "no_posts" }}
</div>
{{ end }}
</div>
{{ end }}

View File

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

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

@ -0,0 +1,20 @@
{{ define "main" }}
<h1>
{{ partial "icon.html" "files" }}
{{ .Title | markdownify }}
{{ partial "rss-link.html" . }}
</h1>
{{ partial "page-metadata/series.html" . }}
{{ with .Content }}
{{ . }}
{{ end }}
{{ with .Paginator.Pages.Reverse }}
{{ partial "page-list.html" . }}
{{ end }}
{{ 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

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

View File

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

View File

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

View File

@ -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" (.Get "type") "alt" (.Get "alt")) }}
</p>

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 | .Page.RenderString (dict "display" "block") }}
{{ $new := printf `<table class="%s">` $class }}
{{ (replace $htmlTable "<table>" $new) | safeHTML }}

View File

@ -1,41 +1,41 @@
{{ define "main" }}
<div class="page-title">
<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 }}
<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>
{{ .Title | markdownify }}
</h1>
</div>
{{ with .Content }}
{{ . }}
{{ end }}
<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 "page-metadata/taxonomy.html" . }}
</div>
{{ partial "description-or-summary.html" . }}
</article>
{{ end }}
{{ end }}
{{ else }}
<div>
{{ i18n "no_posts" }}
</div>
{{ 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 }}
</div>
{{ end }}

View File

@ -0,0 +1,26 @@
{{ define "main" }}
<div class="page-title">
<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 }}
{{ .Title | markdownify }}
{{ partial "rss-link.html" . }}
</h1>
</div>
{{ partial "page-metadata/taxonomy.html" . }}
{{ with .Content }}
{{ . }}
{{ end }}
{{ partial "page-list.html" .Paginator.Pages }}
{{ partial "pagination.html" . }}
{{ end }}

View File

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

View File

@ -0,0 +1,93 @@
Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
https://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

View File

@ -0,0 +1,93 @@
Copyright 2020 The Open Sans Project Authors (https://github.com/googlefonts/opensans)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

View File

@ -0,0 +1,100 @@
Open Sans Variable Font
=======================
This download contains Open Sans as both variable fonts and static fonts.
Open Sans is a variable font with these axes:
wdth
wght
This means all the styles are contained in these files:
OpenSans-VariableFont_wdth,wght.ttf
OpenSans-Italic-VariableFont_wdth,wght.ttf
If your app fully supports variable fonts, you can now pick intermediate styles
that arent available as static fonts. Not all apps support variable fonts, and
in those cases you can use the static font files for Open Sans:
static/OpenSans_Condensed/OpenSans_Condensed-Light.ttf
static/OpenSans_Condensed/OpenSans_Condensed-Regular.ttf
static/OpenSans_Condensed/OpenSans_Condensed-Medium.ttf
static/OpenSans_Condensed/OpenSans_Condensed-SemiBold.ttf
static/OpenSans_Condensed/OpenSans_Condensed-Bold.ttf
static/OpenSans_Condensed/OpenSans_Condensed-ExtraBold.ttf
static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Light.ttf
static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Regular.ttf
static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Medium.ttf
static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-SemiBold.ttf
static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Bold.ttf
static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-ExtraBold.ttf
static/OpenSans/OpenSans-Light.ttf
static/OpenSans/OpenSans-Regular.ttf
static/OpenSans/OpenSans-Medium.ttf
static/OpenSans/OpenSans-SemiBold.ttf
static/OpenSans/OpenSans-Bold.ttf
static/OpenSans/OpenSans-ExtraBold.ttf
static/OpenSans_Condensed/OpenSans_Condensed-LightItalic.ttf
static/OpenSans_Condensed/OpenSans_Condensed-Italic.ttf
static/OpenSans_Condensed/OpenSans_Condensed-MediumItalic.ttf
static/OpenSans_Condensed/OpenSans_Condensed-SemiBoldItalic.ttf
static/OpenSans_Condensed/OpenSans_Condensed-BoldItalic.ttf
static/OpenSans_Condensed/OpenSans_Condensed-ExtraBoldItalic.ttf
static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-LightItalic.ttf
static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Italic.ttf
static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-MediumItalic.ttf
static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-SemiBoldItalic.ttf
static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-BoldItalic.ttf
static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-ExtraBoldItalic.ttf
static/OpenSans/OpenSans-LightItalic.ttf
static/OpenSans/OpenSans-Italic.ttf
static/OpenSans/OpenSans-MediumItalic.ttf
static/OpenSans/OpenSans-SemiBoldItalic.ttf
static/OpenSans/OpenSans-BoldItalic.ttf
static/OpenSans/OpenSans-ExtraBoldItalic.ttf
Get started
-----------
1. Install the font files you want to use
2. Use your app's font picker to view the font family and all the
available styles
Learn more about variable fonts
-------------------------------
https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
https://variablefonts.typenetwork.com
https://medium.com/variable-fonts
In desktop apps
https://theblog.adobe.com/can-variable-fonts-illustrator-cc
https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
Online
https://developers.google.com/fonts/docs/getting_started
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
Installing fonts
MacOS: https://support.apple.com/en-us/HT201749
Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
Android Apps
https://developers.google.com/fonts/docs/android
https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
License
-------
Please read the full license text (OFL.txt) to understand the permissions,
restrictions and requirements for usage, redistribution, and modification.
You can use them in your products & projects print or digital,
commercial or otherwise.
This isn't legal advice, please consider consulting a lawyer and see the full
license for all details.

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.93.0"
[author]
name = "bbaovanc"