aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/dependabot.yml14
-rw-r--r--.github/stale.yml17
-rw-r--r--.github/workflows/auto-merge.yml41
-rw-r--r--.github/workflows/ci.yml48
-rw-r--r--.github/workflows/gh-pages.yml32
-rw-r--r--.gitignore5
-rw-r--r--.jsbeautifyrc27
-rw-r--r--LICENSE1
-rw-r--r--README.md257
-rw-r--r--archetypes/blog.md13
-rw-r--r--archetypes/default.md22
-rw-r--r--assets/images/social_card_bg.pngbin0 -> 651110 bytes
-rw-r--r--assets/images/social_card_fg.pngbin0 -> 367423 bytes
-rw-r--r--assets/style.css177
-rw-r--r--assets/syntax.css91
-rw-r--r--exampleSite/content.pt/_index.md35
-rw-r--r--exampleSite/content.pt/blog/_index.md5
-rw-r--r--exampleSite/content/_index.md49
-rw-r--r--exampleSite/content/bear.md18
-rw-r--r--exampleSite/content/blog/_index.md8
-rw-r--r--exampleSite/content/blog/emoji-support.md46
-rw-r--r--exampleSite/content/blog/markdown-syntax.md14
-rw-r--r--exampleSite/content/blog/math-typesetting.md49
-rw-r--r--exampleSite/content/blog/placeholder-text.md45
-rw-r--r--exampleSite/content/blog/rich-content.md34
-rw-r--r--exampleSite/content/hugo.md26
-rw-r--r--exampleSite/hugo.toml114
-rw-r--r--exampleSite/static/favicon.icobin15406 -> 0 bytes
-rw-r--r--exampleSite/static/images/favicon.pngbin1312 -> 126 bytes
-rw-r--r--exampleSite/static/images/share.pngbin25877 -> 0 bytes
-rw-r--r--exampleSite/static/images/share.webpbin0 -> 7490 bytes
-rw-r--r--i18n/en.toml14
-rw-r--r--i18n/pt.toml14
-rw-r--r--images/pagespeed.webpbin0 -> 12792 bytes
-rw-r--r--images/screenshot-dark.pngbin36823 -> 0 bytes
-rw-r--r--images/screenshot.pngbin37714 -> 249132 bytes
-rw-r--r--images/social_card.webpbin0 -> 35348 bytes
-rw-r--r--images/tn.pngbin25877 -> 135421 bytes
-rw-r--r--layouts/_default/_markup/render-codeblock.html6
-rw-r--r--layouts/_default/baseof.html17
-rw-r--r--layouts/_default/list.html32
-rw-r--r--layouts/_default/rss.xml72
-rw-r--r--layouts/_default/single.html24
-rw-r--r--layouts/partials/favicon.html2
-rw-r--r--layouts/partials/footer.html4
-rw-r--r--layouts/partials/header.html6
-rw-r--r--layouts/partials/nav.html25
-rw-r--r--layouts/partials/seo_tags.html20
-rw-r--r--layouts/partials/social_card.html136
-rw-r--r--layouts/partials/style.html173
-rw-r--r--layouts/robots.txt3
-rw-r--r--layouts/shortcodes/highlight.html5
-rw-r--r--layouts/shortcodes/rawhtml.html2
-rw-r--r--package-lock.json430
-rw-r--r--package.json28
-rw-r--r--theme.toml42
56 files changed, 1191 insertions, 1052 deletions
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
deleted file mode 100644
index 60a68af..0000000
--- a/.github/dependabot.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-# see https://docs.github.com/en/github/administering-a-repository/configuration-options-for-dependency-updates
-version: 2
-updates:
- # Maintain dependencies for GitHub Actions
- - package-ecosystem: "github-actions"
- directory: "/"
- schedule:
- interval: "daily"
-
- # Maintain dependencies for npm
- - package-ecosystem: "npm"
- directory: "/"
- schedule:
- interval: "daily"
diff --git a/.github/stale.yml b/.github/stale.yml
deleted file mode 100644
index dc90e5a..0000000
--- a/.github/stale.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-# Number of days of inactivity before an issue becomes stale
-daysUntilStale: 60
-# Number of days of inactivity before a stale issue is closed
-daysUntilClose: 7
-# Issues with these labels will never be considered stale
-exemptLabels:
- - pinned
- - security
-# Label to use when marking an issue as stale
-staleLabel: wontfix
-# Comment to post when marking an issue as stale. Set to `false` to disable
-markComment: >
- This issue has been automatically marked as stale because it has not had
- recent activity. It will be closed if no further activity occurs. Thank you
- for your contributions.
-# Comment to post when closing a stale issue. Set to `false` to disable
-closeComment: false
diff --git a/.github/workflows/auto-merge.yml b/.github/workflows/auto-merge.yml
deleted file mode 100644
index d051de7..0000000
--- a/.github/workflows/auto-merge.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-# see https://gist.github.com/xt0rted/46475099dc0a70ba63e16e3177407872
-
-name: Dependabot auto-merge
-
-on:
- pull_request:
- branches:
- - master
-
-permissions:
- contents: read
- pull-requests: read
-
-jobs:
- auto-merge:
- runs-on: ubuntu-latest
-
- if: github.actor == 'dependabot[bot]'
-
- steps:
- - name: Create token
- id: create_token
- uses: tibdex/github-app-token@v2
- with:
- app_id: ${{ secrets.BIG_MERGER_APP_ID }}
- private_key: ${{ secrets.BIG_MERGER_PRIVATE_KEY }}
-
- - name: Dependabot metadata
- id: dependabot-metadata
- uses: dependabot/fetch-metadata@v1
- with:
- github-token: "${{ secrets.GITHUB_TOKEN }}"
-
- - name: Authenticate cli
- run: echo "${{ steps.create_token.outputs.token }}" | gh auth login --with-token
-
- - name: Enable auto-merge for Dependabot PRs
- if: contains(fromJSON('["version-update:semver-patch", "version-update:semver-minor"]'), steps.dependabot-metadata.outputs.update-type)
- run: gh pr merge --auto --squash "$PR_URL"
- env:
- PR_URL: ${{github.event.pull_request.html_url}}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
deleted file mode 100644
index 581a78f..0000000
--- a/.github/workflows/ci.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-name: CI
-
-on:
- push:
- branches:
- - master
- pull_request:
- branches:
- - master
-
-jobs:
- build:
- name: Build
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Setup Hugo
- uses: peaceiris/actions-hugo@v2.6.0
- with:
- hugo-version: latest
-
- - name: Build local ./exampleSite
- run: hugo --minify --gc --destination ../public --source ./exampleSite --themesDir ../.. --baseURL https://janraasch.github.io/hugo-bearblog/
-
- - name: Upload Artifact
- uses: actions/upload-artifact@v4
- with:
- name: build
- path: ./public
-
- deploy:
- needs: build
- name: Deploy to GitHub Pages
- runs-on: ubuntu-latest
- if: github.event_name == 'push'
- steps:
- - uses: actions/checkout@v4
- - uses: actions/download-artifact@v4
- with:
- name: build
- path: ./public
- - uses: peaceiris/actions-gh-pages@v3.9.2
- with:
- github_token: ${{ secrets.GITHUB_TOKEN }}
- publish_dir: ./public
diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml
new file mode 100644
index 0000000..f7f133d
--- /dev/null
+++ b/.github/workflows/gh-pages.yml
@@ -0,0 +1,32 @@
+name: github pages
+
+on:
+ push:
+ branches:
+ - main # Set a branch that will trigger a deployment
+ pull_request:
+
+jobs:
+ deploy:
+ runs-on: ubuntu-22.04
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ submodules: true # Fetch Hugo themes (true OR recursive)
+ fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
+
+ - name: Setup Hugo
+ uses: peaceiris/actions-hugo@v2
+ with:
+ hugo-version: 'latest'
+ extended: true
+
+ - name: Build
+ run: hugo --minify --gc --destination ../public --source ./exampleSite --themesDir ../.. --baseURL https://clente.github.io/hugo-bearcub/
+
+ - name: Deploy
+ uses: peaceiris/actions-gh-pages@v3
+ if: github.ref == 'refs/heads/main'
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_dir: ./public
diff --git a/.gitignore b/.gitignore
index 3c3629e..305d231 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,4 @@
-node_modules
+.hugo_build.lock
+.DS_Store
+resources/
+todo.md \ No newline at end of file
diff --git a/.jsbeautifyrc b/.jsbeautifyrc
deleted file mode 100644
index 4e39ba0..0000000
--- a/.jsbeautifyrc
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "indent_size": 2,
- "indent_char": " ",
- "indent_with_tabs": false,
- "editorconfig": false,
- "eol": "\n",
- "end_with_newline": true,
- "indent_level": 0,
- "preserve_newlines": true,
- "max_preserve_newlines": 10,
- "space_in_paren": false,
- "space_in_empty_paren": false,
- "jslint_happy": false,
- "space_after_anon_function": false,
- "space_after_named_function": false,
- "brace_style": "collapse",
- "unindent_chained_methods": false,
- "break_chained_methods": false,
- "keep_array_indentation": false,
- "unescape_strings": false,
- "wrap_line_length": 0,
- "e4x": false,
- "comma_first": false,
- "operator_position": "before-newline",
- "indent_empty_lines": false,
- "templating": ["auto"]
-}
diff --git a/LICENSE b/LICENSE
index 3be3bb7..5c93582 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,7 @@
The MIT License (MIT)
Copyright (c) 2020 Jan Raasch
+Copyright (c) 2023 Caio Lente
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
diff --git a/README.md b/README.md
index ab0a75e..c086806 100644
--- a/README.md
+++ b/README.md
@@ -1,86 +1,227 @@
-# Hugo ʕ•ᴥ•ʔ Bear Blog ![Test](https://github.com/janraasch/hugo-bearblog/workflows/CI/badge.svg?branch=master&event=push)
+# ᕦʕ •ᴥ•ʔᕤ Bear Cub
-🧸 A [Hugo](https://gohugo.io/)-theme based on [Bear Blog](https://bearblog.dev).
+[![github pages](https://github.com/clente/hugo-bearcub/actions/workflows/gh-pages.yml/badge.svg)](https://github.com/clente/hugo-bearcub/actions/workflows/gh-pages.yml)
+[![MIT license](https://img.shields.io/github/license/clente/hugo-bearcub)](https://github.com/clente/hugo-bearcub/blob/main/LICENSE)
-> Free, no-nonsense, super-fast blogging.
+## Overview
-## Demo
+🐻 A lightweight [Hugo](https://gohugo.io/) theme based on [Bear
+Blog](https://bearblog.dev) and [Hugo Bear
+Blog](https://github.com/janraasch/hugo-bearblog).
-For a current & working demo of this theme, please check out https://janraasch.github.io/hugo-bearblog/ 🎯.
-
-## Screenshots
-
-⬜️ [Light][light-screenshot]
-
-⬛️ [Dark][dark-screenshot]
-
-When the user's browser is running »dark mode«, the dark color scheme will be used automatically. The default is the light/white color scheme. Check out the [`style.html`](https://github.com/janraasch/hugo-bearblog/blob/master/layouts/partials/style.html)-file for the implementation.
+**Bear Cub** takes care of speed and optimization, so you can focus on writing
+good content. It is free, multilingual, optimized for search engines,
+no-nonsense, responsive, light, and fast. Really fast.
## Installation
-If you already have a Hugo site on your machine, you can simply add this theme via
+Follow Hugo's [quick start](https://gohugo.io/getting-started/quick-start/) to
+create an empty website and then clone **Bear Cub** into the themes directory as
+a [Git submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules):
-```bash
-git submodule add https://github.com/janraasch/hugo-bearblog.git themes/hugo-bearblog
+```sh
+git submodule add https://github.com/clente/hugo-bearcub themes/hugo-bearcub
```
-Then, adjust the `hugo.toml` as detailed below.
+To finish off, append a line to the site configuration file:
-For more information, read the official [setup guide][hugo-setup-guide] of Hugo.
+```sh
+echo 'theme = "hugo-bearcub"' >> hugo.toml
+```
-## Adjust configuration / hugo.toml
+## Features
-Please check out the [hugo.toml](https://github.com/janraasch/hugo-bearblog/blob/master/exampleSite/hugo.toml) included in the [exampleSite](https://github.com/janraasch/hugo-bearblog/tree/master/exampleSite) of this theme.
+Like [Bear Blog](https://bearblog.dev), this theme:
+- Is free and open source
+- Looks great on any device
+- Makes tiny (~5kb), optimized, and awesome pages
+- Has no trackers, ads, or scripts
+- Automatically generates an RSS feed
-## Content & structure
+But that's not all! **Bear Cub** is also...
-### Starting fresh
+### Accessible
-If you are starting fresh, simply copy over the contents of the `exampleSite`-directory included in this theme to your source directory. That should give you a good idea about how things work, and then you can go on from there to make the site your own.
+**Bear Cub** has a few accessibility upgrades when compared to its predecessors.
+The color palette has been overhauled to make sure everything is
+[readable](https://web.dev/color-and-contrast-accessibility/) for users with low
+vision impairments or color deficiencies, and some interactive elements were
+made bigger to facilitate [clicking](https://web.dev/accessible-tap-targets/)
+for users with a motor impairment.
-### Adding / editing content
+These small changes mean that **Bear Cub** passes Google's [PageSpeed
+test](https://pagespeed.web.dev/report?url=https%3A%2F%2Fclente.github.io%2Fhugo-bearcub%2F)
+with flying colors.
-#### Index-Page
+![PageSpeed score](https://raw.githubusercontent.com/clente/hugo-bearcub/main/images/pagespeed.webp)
-The contents of the `index`-page may be changed by editing your `content/_index.md`-file.
+### Secure
-#### Page
+[**Bear Cub**'s demo](https://clente.github.io/hugo-bearcub/) is hosted on GitHub
+and therefore I'm not in control of its [Content Security
+Policy](https://infosec.mozilla.org/guidelines/web_security#content-security-policy).
+However, the theme itself was made with security in mind: there are no inline
+styles and it uses no JavaScript at all.
-You can add **a new page** via running
+If you want to improve your [Mozilla
+Observatory](https://observatory.mozilla.org/) score even further, you should be
+able to simply add a few headers to your hosting service's configuration (e.g.
+[Netlify](https://docs.netlify.com/routing/headers/) or [Cloudflare
+Pages](https://developers.cloudflare.com/pages/platform/headers/)) and never
+have to think about it again. My `_headers` file, for example, looks like this:
-```bash
-hugo new my-new-page.md
```
-
-#### Blog-Post
-
-You can add **a new blog-post** via running
-
-```bash
-hugo new blog/my-new-post.md
+/*
+ X-Content-Type-Options: nosniff
+ Strict-Transport-Security: "max-age=31536000; includeSubDomains; preload" env=HTTPS
+ Cache-Control: max-age=31536000, public
+ X-Frame-Options: deny
+ Referrer-Policy: no-referrer
+ Feature-Policy: microphone 'none'; payment 'none'; geolocation 'none'; midi 'none'; sync-xhr 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'
+ Content-Security-Policy: default-src 'none'; manifest-src 'self'; font-src 'self'; img-src 'self'; style-src 'self'; form-action 'none'; frame-ancestors 'none'; base-uri 'none'
+ X-XSS-Protection: 1; mode=block
```
-### Adding your branding / colors / css
-
-Add a `custom_head.html`-file to your `layouts/partials`-directory. In there you may add a `<style>`-tag, *or* you may add a `<link>`-tag referencing your own `custom.css` (in case you prefer to have a separate `.css`-file). Check out the [`style.html`](https://github.com/janraasch/hugo-bearblog/blob/master/layouts/partials/style.html)-file to find out which CSS-styles are applied by default.
-
-## Issues / Feedback / Contributing
-Please use [GitHub issues](https://github.com/janraasch/hugo-bearblog/issues) and [Pull Requests](https://github.com/janraasch/hugo-bearblog/pulls).
-
-## Development
-Run the `exampleSite` locally via
-
-```bash
-hugo server --source ./exampleSite --themesDir ../..
+### Multilingual
+
+If you need to write a blog that supports more than one language, **Bear Cub**
+has you covered! Check out the demo's [`hugo.toml`
+file](https://github.com/clente/hugo-bearcub/blob/main/exampleSite/hugo.toml)
+for a sample of how you can setup multilingual support.
+
+By default, the theme creates a translation button that gets disabled when the
+current page is only available in any other language. You can also choose to
+hide this button (instead of disabling it) by setting `hideUntranslated =
+false`.
+
+### More
+
+Every once in a while, as I keep using **Bear Cub**, I notice that there is some
+functionality missing. Currently, these are the "advanced features" that I have
+already implemented:
+
+- Full-text RSS feed: an enhanced RSS feed template that includes the (properly
+ encoded) full content of your posts in the feed itself.
+- Static content: you can create empty blog entries that act as links to static
+ files by including `link: "{url}"` in a post's [front
+ matter](https://gohugo.io/content-management/front-matter/). You can also add
+ `render: false` to your [build
+ options](https://gohugo.io/content-management/build-options/#readout) to avoid
+ rendering blank posts.
+- Skip link: a "skip to main content" link that is temporarily invisible, but
+ can be focused by people who need a keyboard to navigate the web (see [PR
+ #5](https://github.com/clente/hugo-bearcub/pull/5) by
+ [@2kool4idkwhat](https://github.com/2kool4idkwhat) for more information).
+- Reply by email: if you supply an email address, the theme creates a "Reply to
+ this post by email" button at the end of every post (see Kev Quirk's [original
+ implementation](https://kevquirk.com/adding-the-post-title-to-my-reply-by-email-button)).
+- Single-use CSS (EXPERIMENTAL): you can add some styles to a single page by
+ writing the CSS you need in `assets/{custom_css}.css` and then including
+ `style: "{custom_css}.css"` in the [front
+ matter](https://gohugo.io/content-management/front-matter/) of said page.
+- Conditional CSS (EXPERIMENTAL): since **Bear Cub** does syntax highlighting
+ without inline styles (see `hugo.toml` for more information), it only load its
+ `syntax.css` if, and only if, a code block is actually present in the current
+ page.
+- Dynamic social card generation (EXPERIMENTAL): if you don't add preview images
+ to a post, this template will generate one based on the title. You can see an
+ example below.
+
+![Social card example](https://raw.githubusercontent.com/clente/hugo-bearcub/main/images/social_card.webp)
+
+## Configuration
+
+**Bear Cub** can be customized with a `hugo.toml` file. Check out the
+[configuration](https://github.com/clente/hugo-bearcub/blob/main/exampleSite/hugo.toml)
+of the [demo](https://clente.github.io/hugo-bearcub/) for more information.
+
+```toml
+# Basic config
+baseURL = "https://example.com"
+theme = "hugo-bearcub"
+copyright = "John Doe (CC BY 4.0)"
+defaultContentLanguage = "en"
+
+# Generate a nice robots.txt for SEO
+enableRobotsTXT = true
+
+# Setup syntax highlighting without inline styles. For more information about
+# why you'd want to avoid inline styles, see
+# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/style-src#unsafe_inline_styles
+[markup]
+ [markup.highlight]
+ lineNos = true
+ lineNumbersInTable = false
+ # This allows Bear Cub to use a variation of Dracula that is more accessible
+ # to people with poor eyesight. For more information about color contrast
+ # and accessibility, see https://web.dev/color-and-contrast-accessibility/
+ noClasses = false
+
+# Multilingual mode config. More for information about how to setup translation,
+# see https://gohugo.io/content-management/multilingual/
+[languages]
+ [languages.en]
+ title = "Bear Cub"
+ languageName = "en-US 🇺🇸"
+ LanguageCode = "en-US"
+ contentDir = "content"
+ [languages.en.params]
+ madeWith = "Made with [Bear Cub](https://github.com/clente/hugo-bearcub)"
+ [languages.pt]
+ title = "Bear Cub"
+ languageName = "pt-BR 🇧🇷"
+ LanguageCode = "pt-BR"
+ contentDir = "content.pt"
+ [languages.pt.params]
+ madeWith = "Feito com [Bear Cub](https://github.com/clente/hugo-bearcub)"
+
+[params]
+ # The description of your website
+ description = "Bear Cub Demo"
+
+ # The path to your favicon
+ favicon = "images/favicon.png"
+
+ # These images will show up when services want to generate a preview of a link
+ # to your site. Ignored if `generateSocialCard = true`. For more information
+ # about previews, see https://gohugo.io/templates/internal#twitter-cards and
+ # https://gohugo.io/templates/internal#open-graph
+ images = ["images/share.webp"]
+
+ # This title is used as the site_name on the Hugo's internal opengraph
+ # structured data template
+ title = "Bear Cub"
+
+ # Dates are displayed following the format below. For more information about
+ # formatting, see https://gohugo.io/functions/format/
+ dateFormat = "2006-01-02"
+
+ # If your blog is multilingual but you haven't translated a page, this theme
+ # will create a disabled link. By setting `hideUntranslated` to true, you can
+ # have the theme simply not show any link
+ hideUntranslated = false
+
+ # (EXPERIMENTAL) This theme is capable of dynamically generating social cards
+ # for posts that don't have `images` defined in their front matter; By setting
+ # `generateSocialCard` to false, you can prevent this behavior. For more
+ # information see layouts/partials/social_card.html
+ generateSocialCard = true
+
+ # Social media. Delete any item you aren't using to make sure it won't show up
+ # in your website's metadata.
+ [params.social]
+ twitter = "example" # Twitter handle (without '@')
+ facebook_admin = "0000000000" # Facebook Page Admin ID
+
+ # Author metadata. This is mostly used for the RSS feed of your site, but the
+ # email is also added to the footer of each post
+ [params.author]
+ name = "John Doe" # Your name as shown in the RSS feed metadata
+ email = "me@example.com" # Added to the footer so readers can reply to posts
```
-## Special Thanks 🎁
-
-A special thank you goes out to [Herman](https://herman.bearblog.dev), for creating the original [ʕ•ᴥ•ʔ Bear Blog](https://bearblog.dev/).
-
-## License
-[MIT License](http://en.wikipedia.org/wiki/MIT_License) © [Jan Raasch](https://www.janraasch.com)
+## Contributing
-[hugo-setup-guide]: https://gohugo.io/getting-started/installing
-[light-screenshot]: https://raw.githubusercontent.com/janraasch/hugo-bearblog/master/images/screenshot.png
-[dark-screenshot]: https://raw.githubusercontent.com/janraasch/hugo-bearblog/master/images/screenshot-dark.png
+If you come across any problems while using **Bear Cub**, you can file an
+[issue](https://github.com/clente/hugo-bearcub/issues) or create a [pull
+request](https://github.com/clente/hugo-bearcub/pulls).
diff --git a/archetypes/blog.md b/archetypes/blog.md
deleted file mode 100644
index e4594c6..0000000
--- a/archetypes/blog.md
+++ /dev/null
@@ -1,13 +0,0 @@
-+++
-title = "{{ replace .Name "-" " " | title }}"
-date = "{{ .Date }}"
-
-#
-# description is optional
-#
-# description = "An optional description for SEO. If not provided, an automatically created summary will be used."
-
-tags = [{{ range $plural, $terms := .Site.Taxonomies }}{{ range $term, $val := $terms }}"{{ printf "%s" $term }}",{{ end }}{{ end }}]
-+++
-
-This is a page about »{{ replace .Name "-" " " | title }}«.
diff --git a/archetypes/default.md b/archetypes/default.md
deleted file mode 100644
index e8406b3..0000000
--- a/archetypes/default.md
+++ /dev/null
@@ -1,22 +0,0 @@
-+++
-title = "{{ replace .Name "-" " " | title }}"
-date = "{{ .Date }}"
-
-#
-# Set menu to "main" to add this page to
-# the main menu on top of the page
-#
-menu = "main"
-
-#
-# description is optional
-#
-# description = "An optional description for SEO. If not provided, an automatically created summary will be used."
-
-#
-# tags are optional
-#
-# tags = [{{ range $plural, $terms := .Site.Taxonomies }}{{ range $term, $val := $terms }}"{{ printf "%s" $term }}",{{ end }}{{ end }}]
-+++
-
-This is a page about »{{ replace .Name "-" " " | title }}«.
diff --git a/assets/images/social_card_bg.png b/assets/images/social_card_bg.png
new file mode 100644
index 0000000..ad1d528
--- /dev/null
+++ b/assets/images/social_card_bg.png
Binary files differ
diff --git a/assets/images/social_card_fg.png b/assets/images/social_card_fg.png
new file mode 100644
index 0000000..01b207c
--- /dev/null
+++ b/assets/images/social_card_fg.png
Binary files differ
diff --git a/assets/style.css b/assets/style.css
new file mode 100644
index 0000000..0173a36
--- /dev/null
+++ b/assets/style.css
@@ -0,0 +1,177 @@
+body {
+ font-family: Verdana, sans-serif;
+ margin: auto;
+ padding: 20px;
+ max-width: 720px;
+ text-align: left;
+ background-color: #1d1f27;
+ word-wrap: break-word;
+ overflow-wrap: break-word;
+ line-height: 1.5;
+ color: #c9d1d9;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+strong,
+b {
+ color: #eee;
+}
+
+a {
+ color: #8cc2dd;
+}
+
+.title {
+ text-decoration: none;
+ border: 0;
+}
+.title h1 {
+ font-size: 24px;
+ margin: 19.92px 0 19.92px 0;
+}
+
+.title span {
+ font-weight: 400;
+}
+
+nav a {
+ margin-right: 10px;
+}
+
+textarea {
+ background-color: #252525;
+ color: #ddd;
+ width: 100%;
+ font-size: 16px;
+}
+
+input {
+ background-color: #252525;
+ color: #ddd;
+ font-size: 16px;
+}
+
+content {
+ line-height: 1.6;
+}
+
+table {
+ width: 100%;
+}
+
+table,
+th,
+td {
+ border: 1px solid;
+ border-collapse: collapse;
+ border-color: #c9d1d9;
+ padding: 5px;
+}
+
+img {
+ max-width: 100%;
+}
+
+code {
+ padding: 2px 5px;
+ color: #f8f8f2;
+ background-color: #282a36;
+}
+
+pre code {
+ display: block;
+ padding: 20px;
+ white-space: pre-wrap;
+ font-size: 14px;
+ overflow-x: auto;
+}
+
+blockquote {
+ border-left: 1px solid #999;
+ color: #ccc;
+ padding-left: 20px;
+ font-style: italic;
+}
+
+footer {
+ padding: 25px;
+ text-align: center;
+}
+
+.helptext {
+ color: #aaa;
+ font-size: small;
+}
+
+.errorlist {
+ color: #eba613;
+ font-size: small;
+}
+
+/* blog posts */
+ul.blog-posts {
+ list-style-type: none;
+ padding: unset;
+}
+
+ul.blog-posts li {
+ display: flex;
+ margin-bottom: 10px;
+}
+
+ul.blog-posts li span {
+ flex: 0 0 130px;
+}
+
+ul.blog-posts li a:visited {
+ color: #8b6fcb;
+}
+
+a.blog-tags {
+ line-height: 2;
+}
+
+h3.blog-filter {
+ margin-bottom: 0;
+}
+
+.disabled {
+ color: currentColor;
+ cursor: not-allowed;
+ opacity: 0.7;
+}
+
+p.byline {
+ font-style: italic;
+}
+
+/* "Skip to main content" link */
+.skip-link {
+ position: absolute;
+ top: 5;
+ transform: translateY(-600%);
+ transition: transform 0.5s;
+ background-color: #1d1f27;
+ padding: 6px;
+}
+
+.skip-link:focus {
+ transform: translateY(0%);
+}
+
+figure {
+ margin-inline-start: 0em;
+ margin-inline-end: 0em;
+}
+
+figcaption > p {
+ margin-block-start: 0px;
+ text-align: center;
+ font-style: italic;
+ color: #ccc;
+}
diff --git a/assets/syntax.css b/assets/syntax.css
new file mode 100644
index 0000000..5f15788
--- /dev/null
+++ b/assets/syntax.css
@@ -0,0 +1,91 @@
+/* This style is a variant of Dracula that is more accessible to people with poor eyesight */
+/* See https://web.dev/color-and-contrast-accessibility/ */
+/* And https://xyproto.github.io/splash/docs/dracula.html */
+/* And https://github.com/alecthomas/chroma/blob/a40c95e447a577322e20eac58f2f7c0d026665b0/styles/dracula.xml */
+
+/* Background */ .bg { color: #f8f8f2; background-color: #282a36; }
+/* PreWrapper */ .chroma { color: #f8f8f2; background-color: #282a36; }
+/* Other .chroma .x { } */
+/* Error .chroma .err { } */
+/* CodeLine .chroma .cl { } */
+/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }
+/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
+/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
+/* LineHighlight */ .chroma .hl { background-color: #ffffcc }
+/* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #929292 }
+/* LineNumbers */ .chroma .ln { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #929292 }
+/* Line */ .chroma .line { display: flex; }
+/* Keyword */ .chroma .k { color: #ff79c6 }
+/* KeywordConstant */ .chroma .kc { color: #ff79c6 }
+/* KeywordDeclaration */ .chroma .kd { color: #8be9fd; font-style: italic }
+/* KeywordNamespace */ .chroma .kn { color: #ff79c6 }
+/* KeywordPseudo */ .chroma .kp { color: #ff79c6 }
+/* KeywordReserved */ .chroma .kr { color: #ff79c6 }
+/* KeywordType */ .chroma .kt { color: #8be9fd }
+/* Name .chroma .n { } */
+/* NameAttribute */ .chroma .na { color: #50fa7b }
+/* NameBuiltin */ .chroma .nb { color: #8be9fd; font-style: italic }
+/* NameBuiltinPseudo .chroma .bp { } */
+/* NameClass */ .chroma .nc { color: #50fa7b }
+/* NameConstant .chroma .no { } */
+/* NameDecorator .chroma .nd { } */
+/* NameEntity .chroma .ni { } */
+/* NameException .chroma .ne { } */
+/* NameFunction */ .chroma .nf { color: #50fa7b }
+/* NameFunctionMagic .chroma .fm { } */
+/* NameLabel */ .chroma .nl { color: #8be9fd; font-style: italic }
+/* NameNamespace .chroma .nn { } */
+/* NameOther .chroma .nx { } */
+/* NameProperty .chroma .py { } */
+/* NameTag */ .chroma .nt { color: #ff79c6 }
+/* NameVariable */ .chroma .nv { color: #8be9fd; font-style: italic }
+/* NameVariableClass */ .chroma .vc { color: #8be9fd; font-style: italic }
+/* NameVariableGlobal */ .chroma .vg { color: #8be9fd; font-style: italic }
+/* NameVariableInstance */ .chroma .vi { color: #8be9fd; font-style: italic }
+/* NameVariableMagic .chroma .vm { } */
+/* Literal .chroma .l { } */
+/* LiteralDate .chroma .ld { } */
+/* LiteralString */ .chroma .s { color: #f1fa8c }
+/* LiteralStringAffix */ .chroma .sa { color: #f1fa8c }
+/* LiteralStringBacktick */ .chroma .sb { color: #f1fa8c }
+/* LiteralStringChar */ .chroma .sc { color: #f1fa8c }
+/* LiteralStringDelimiter */ .chroma .dl { color: #f1fa8c }
+/* LiteralStringDoc */ .chroma .sd { color: #f1fa8c }
+/* LiteralStringDouble */ .chroma .s2 { color: #f1fa8c }
+/* LiteralStringEscape */ .chroma .se { color: #f1fa8c }
+/* LiteralStringHeredoc */ .chroma .sh { color: #f1fa8c }
+/* LiteralStringInterpol */ .chroma .si { color: #f1fa8c }
+/* LiteralStringOther */ .chroma .sx { color: #f1fa8c }
+/* LiteralStringRegex */ .chroma .sr { color: #f1fa8c }
+/* LiteralStringSingle */ .chroma .s1 { color: #f1fa8c }
+/* LiteralStringSymbol */ .chroma .ss { color: #f1fa8c }
+/* LiteralNumber */ .chroma .m { color: #bd93f9 }
+/* LiteralNumberBin */ .chroma .mb { color: #bd93f9 }
+/* LiteralNumberFloat */ .chroma .mf { color: #bd93f9 }
+/* LiteralNumberHex */ .chroma .mh { color: #bd93f9 }
+/* LiteralNumberInteger */ .chroma .mi { color: #bd93f9 }
+/* LiteralNumberIntegerLong */ .chroma .il { color: #bd93f9 }
+/* LiteralNumberOct */ .chroma .mo { color: #bd93f9 }
+/* Operator */ .chroma .o { color: #ff79c6 }
+/* OperatorWord */ .chroma .ow { color: #ff79c6 }
+/* Punctuation .chroma .p { } */
+/* Comment */ .chroma .c { color: #7c90d0 }
+/* CommentHashbang */ .chroma .ch { color: #7c90d0 }
+/* CommentMultiline */ .chroma .cm { color: #7c90d0 }
+/* CommentSingle */ .chroma .c1 { color: #7c90d0 }
+/* CommentSpecial */ .chroma .cs { color: #7c90d0 }
+/* CommentPreproc */ .chroma .cp { color: #ff79c6 }
+/* CommentPreprocFile */ .chroma .cpf { color: #ff79c6 }
+/* Generic .chroma .g { } */
+/* GenericDeleted */ .chroma .gd { color: #ff5555 }
+/* GenericEmph */ .chroma .ge { text-decoration: underline }
+/* GenericError .chroma .gr { } */
+/* GenericHeading */ .chroma .gh { font-weight: bold }
+/* GenericInserted */ .chroma .gi { color: #50fa7b; font-weight: bold }
+/* GenericOutput */ .chroma .go { color: #44475a }
+/* GenericPrompt .chroma .gp { } */
+/* GenericStrong .chroma .gs { } */
+/* GenericSubheading */ .chroma .gu { font-weight: bold }
+/* GenericTraceback .chroma .gt { } */
+/* GenericUnderline */ .chroma .gl { text-decoration: underline }
+/* TextWhitespace .chroma .w { } */
diff --git a/exampleSite/content.pt/_index.md b/exampleSite/content.pt/_index.md
new file mode 100644
index 0000000..4cf0d7e
--- /dev/null
+++ b/exampleSite/content.pt/_index.md
@@ -0,0 +1,35 @@
+---
+title: "Início"
+menu: "main"
+weight: 1
+---
+
+# ᕦʕ •ᴥ•ʔᕤ Bear Cub
+
+Os sites de hoje em dia são pesados, lentos e cheios de scripts, propagandas e
+rastreadores. Isso ficou tão comum que nós perdemos toda a perspectiva, tanto
+que achamos normal uma página web ter vários megabytes.
+
+> The internet has become a bloated mess. Huge JavaScript libraries, countless
+> client-side queries and overly complex frontend frameworks are par for the
+> course these days.
+>
+> --- [Kev Quirk](https://512kb.club/)
+
+Vamos mudar isso, um site de cada vez! **Bear Cub** é um tema
+[Hugo](https://gohugo.io/) baseado no [Hugo
+Bear](https://github.com/janraasch/hugo-bearblog/) que toma conta da velocidade
+e otimização para que você possa focar em escrever bons textos.
+
+Ele é gratuito, multilíngue, otimizado para buscadores, simples, responsivo,
+leve e rápido. Muito rápido.
+
+Quando comparado ao seu predecessor, o **Bear Cub** tem alguns upgrades de
+[privacidade](https://themarkup.org/blacklight?url=clente.github.io/hugo-bearcub/)
+e
+[acessibilidade](https://pagespeed.web.dev/report?url=https%3A%2F%2Fclente.github.io%2Fhugo-bearcub%2F).
+Ele também é compatível com as práticas mais modernas de
+[segurança](https://github.com/clente/hugo-bearcub#secure) para que seus
+usuários possam aproveitar seu site sem medo.
+
+Feito com 💟 por [Caio lente](https://lente.dev).
diff --git a/exampleSite/content.pt/blog/_index.md b/exampleSite/content.pt/blog/_index.md
new file mode 100644
index 0000000..7588ac1
--- /dev/null
+++ b/exampleSite/content.pt/blog/_index.md
@@ -0,0 +1,5 @@
+---
+title: "Blog"
+menu: "main"
+weight: 2
+--- \ No newline at end of file
diff --git a/exampleSite/content/_index.md b/exampleSite/content/_index.md
index a6ae4c7..10c388f 100644
--- a/exampleSite/content/_index.md
+++ b/exampleSite/content/_index.md
@@ -1,28 +1,35 @@
-+++
-# This title is used as the og:title on Hugo's internal
-# opengraph structured data template on the home page.
-# See https://ogp.me/ and https://gohugo.io/templates/internal#open-graph.
-title = "Hugo ʕ•ᴥ•ʔ Bear"
-+++
-
-# A match made in heaven
-
-There is a website obesity crisis. Bloated websites full of scripts, ads, and trackers are slowing your readers down every time they try to read your well-crafted content.
-
-Hugo Bear Blog is all you need to build a fantastic and optimized site or blog. It works perfectly on **any** viewing device. All you need to focus on is writing good content.
-
-[Go to the original bear blog](https://bearblog.dev/).
-
+---
+title: "Home"
+menu: "main"
+weight: 1
---
-What happens when you combine the worlds' fastest, most lightweight static site generator with a design theme built to provide you with free, no-nonsense, super-fast blogging capabilities?
+# ᕦʕ •ᴥ•ʔᕤ Bear Cub
-**Use this theme, and find out!**
+Today's websites are bloated, slow, and full of scripts, ads, and trackers. This
+became so commonplace that we lost all sense of perspective, to the point that
+we now think multi-megabyte webpages are normal.
-Made with 💟 by [Jan Raasch](https://www.janraasch.com).
+> The internet has become a bloated mess. Huge JavaScript libraries, countless
+> client-side queries and overly complex frontend frameworks are par for the
+> course these days.
+>
+> --- [Kev Quirk](https://512kb.club/)
----
+Let's change this, one website at a time! **Bear Cub** is a
+[Hugo](https://gohugo.io/) theme based on [Hugo
+Bear](https://github.com/janraasch/hugo-bearblog/) that takes care of speed and
+optimization, so you can focus on writing good content.
+
+It is free, multilingual, optimized for search engines, no-nonsense, responsive,
+light, and fast. Really fast.
-Simply publish content online, grow an audience, and keep your pages tiny, fast, and **optimized for search engines**.
+When compared to its predecessor, **Bear Cub** has a few
+[privacy](https://themarkup.org/blacklight?url=clente.github.io/hugo-bearcub/)
+and
+[accessibility](https://pagespeed.web.dev/report?url=https%3A%2F%2Fclente.github.io%2Fhugo-bearcub%2F)
+upgrades. It's also compatible with modern
+[security](https://github.com/clente/hugo-bearcub#secure) standards, so your
+users don't have to worry about browsing your website.
-Each page is ~5kb, and you can **host your blog yourself**.
+Made with 💟 by [Caio lente](https://lente.dev/en).
diff --git a/exampleSite/content/bear.md b/exampleSite/content/bear.md
deleted file mode 100644
index a25a2dc..0000000
--- a/exampleSite/content/bear.md
+++ /dev/null
@@ -1,18 +0,0 @@
-+++
-title = "Bear"
-menu = "main"
-+++
-
-# Bear
-
-Website: https://bearblog.dev
-
-There is a website obesity crisis. Bloated websites are full of scripts, ads, and trackers slowing your readers down every time they try to read your well-crafted content.
-
-Bear is all you need to build a fantastic and optimized site or blog. It works perfectly on **any** viewing device. All you need to focus on is writing good content.
-
-Bear makes it simple to publish content online and grow an audience while keeping pages tiny, fast, and **optimized for search engines.**
-
-Each page is ~5kb.
-
-Learn more and contribute on [GitHub](https://github.com/HermanMartinus/bearblog).
diff --git a/exampleSite/content/blog/_index.md b/exampleSite/content/blog/_index.md
index 34651ab..7588ac1 100644
--- a/exampleSite/content/blog/_index.md
+++ b/exampleSite/content/blog/_index.md
@@ -1,3 +1,5 @@
-+++
-title = "Blog"
-+++
+---
+title: "Blog"
+menu: "main"
+weight: 2
+--- \ No newline at end of file
diff --git a/exampleSite/content/blog/emoji-support.md b/exampleSite/content/blog/emoji-support.md
new file mode 100644
index 0000000..f17f49a
--- /dev/null
+++ b/exampleSite/content/blog/emoji-support.md
@@ -0,0 +1,46 @@
++++
+author = "Hugo Authors"
+title = "Emoji Support"
+date = "2019-03-05"
+description = "Guide to emoji usage in Hugo"
+tags = [
+ "emoji",
+]
++++
+
+Emoji can be enabled in a Hugo project in a number of ways.
+<!--more-->
+The [`emojify`](https://gohugo.io/functions/emojify/) function can be called directly in templates or [Inline Shortcodes](https://gohugo.io/templates/shortcode-templates/#inline-shortcodes).
+
+To enable emoji globally, set `enableEmoji` to `true` in your site's [configuration](https://gohugo.io/getting-started/configuration/) and then you can type emoji shorthand codes directly in content files; e.g.
+
+<p><span class="nowrap"><span class="emojify">🙈</span> <code>:see_no_evil:</code></span> <span class="nowrap"><span class="emojify">🙉</span> <code>:hear_no_evil:</code></span> <span class="nowrap"><span class="emojify">🙊</span> <code>:speak_no_evil:</code></span></p>
+<br>
+
+The [Emoji cheat sheet](http://www.emoji-cheat-sheet.com/) is a useful reference for emoji shorthand codes.
+
+***
+
+**N.B.** The above steps enable Unicode Standard emoji characters and sequences in Hugo, however the rendering of these glyphs depends on the browser and the platform. To style the emoji you can either use a third party emoji font or a font stack; e.g.
+
+{{< highlight html >}}
+.emoji {
+ font-family: Apple Color Emoji, Segoe UI Emoji, NotoColorEmoji, Segoe UI Symbol, Android Emoji, EmojiSymbols;
+}
+{{< /highlight >}}
+
+{{< css.inline >}}
+<style>
+.emojify {
+ font-family: Apple Color Emoji, Segoe UI Emoji, NotoColorEmoji, Segoe UI Symbol, Android Emoji, EmojiSymbols;
+ font-size: 2rem;
+ vertical-align: middle;
+}
+@media screen and (max-width:650px) {
+ .nowrap {
+ display: block;
+ margin: 25px 0;
+ }
+}
+</style>
+{{< /css.inline >}}
diff --git a/exampleSite/content/blog/markdown-syntax.md b/exampleSite/content/blog/markdown-syntax.md
index 4e3aa72..06990d7 100644
--- a/exampleSite/content/blog/markdown-syntax.md
+++ b/exampleSite/content/blog/markdown-syntax.md
@@ -1,17 +1,21 @@
+++
+author = "Hugo Authors"
title = "Markdown Syntax Guide"
-date = "2020-01-03"
+date = "2019-03-11"
description = "Sample article showcasing basic Markdown syntax and formatting for HTML elements."
tags = [
"markdown",
+ "css",
+ "html",
+]
+categories = [
+ "themes",
"syntax",
]
+series = ["Themes Guide"]
+aliases = ["migrate-from-jekyl"]
+++
-For a quick cheatsheet, check out https://simplemde.com/markdown-guide.
-
----
-
This article offers a sample of basic Markdown syntax that can be used in Hugo content files, also it shows whether basic HTML elements are decorated with CSS in a Hugo theme.
<!--more-->
diff --git a/exampleSite/content/blog/math-typesetting.md b/exampleSite/content/blog/math-typesetting.md
new file mode 100644
index 0000000..62831a9
--- /dev/null
+++ b/exampleSite/content/blog/math-typesetting.md
@@ -0,0 +1,49 @@
+---
+author: Hugo Authors
+title: Math Typesetting
+date: 2019-03-08
+description: A brief guide to setup KaTeX
+math: true
+---
+
+Mathematical notation in a Hugo project can be enabled by using third party JavaScript libraries.
+<!--more-->
+
+In this example we will be using [KaTeX](https://katex.org/)
+
+- Create a partial under `/layouts/partials/math.html`
+- Within this partial reference the [Auto-render Extension](https://katex.org/docs/autorender.html) or host these scripts locally.
+- Include the partial in your templates like so:
+
+```bash
+{{ if or .Params.math .Site.Params.math }}
+{{ partial "math.html" . }}
+{{ end }}
+```
+
+- To enable KaTex globally set the parameter `math` to `true` in a project's configuration
+- To enable KaTex on a per page basis include the parameter `math: true` in content files
+
+**Note:** Use the online reference of [Supported TeX Functions](https://katex.org/docs/supported.html)
+
+{{< math.inline >}}
+{{ if or .Page.Params.math .Site.Params.math }}
+<!-- KaTeX -->
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css" integrity="sha384-zB1R0rpPzHqg7Kpt0Aljp8JPLqbXI3bhnPWROx27a9N0Ll6ZP/+DiW/UqRcLbRjq" crossorigin="anonymous">
+<script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js" integrity="sha384-y23I5Q6l+B6vatafAwxRu/0oK/79VlbSz7Q9aiSZUvyWYIYsd+qj+o24G5ZU2zJz" crossorigin="anonymous"></script>
+<script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/auto-render.min.js" integrity="sha384-kWPLUVMOks5AQFrykwIup5lo0m3iMkkHrD0uJ4H5cjeGihAutqP0yW0J6dpFiVkI" crossorigin="anonymous" onload="renderMathInElement(document.body);"></script>
+{{ end }}
+{{</ math.inline >}}
+
+### Examples
+
+{{< math.inline >}}
+<p>
+Inline math: \(\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…\)
+</p>
+{{</ math.inline >}}
+
+Block math:
+$$
+ \varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } }
+$$
diff --git a/exampleSite/content/blog/placeholder-text.md b/exampleSite/content/blog/placeholder-text.md
new file mode 100644
index 0000000..9ed5f69
--- /dev/null
+++ b/exampleSite/content/blog/placeholder-text.md
@@ -0,0 +1,45 @@
++++
+author = "Hugo Authors"
+title = "Placeholder Text"
+date = "2019-03-09"
+description = "Lorem Ipsum Dolor Si Amet"
+tags = [
+ "markdown",
+ "text",
+]
++++
+
+Lorem est tota propiore conpellat pectoribus de pectora summo. <!--more-->Redit teque digerit hominumque toris verebor lumina non cervice subde tollit usus habet Arctonque, furores quas nec ferunt. Quoque montibus nunc caluere tempus inhospita parcite confusaque translucet patri vestro qui optatis lumine cognoscere flos nubis! Fronde ipsamque patulos Dryopen deorum.
+
+1. Exierant elisi ambit vivere dedere
+2. Duce pollice
+3. Eris modo
+4. Spargitque ferrea quos palude
+
+Rursus nulli murmur; hastile inridet ut ab gravi sententia! Nomine potitus silentia flumen, sustinet placuit petis in dilapsa erat sunt. Atria tractus malis.
+
+1. Comas hunc haec pietate fetum procerum dixit
+2. Post torum vates letum Tiresia
+3. Flumen querellas
+4. Arcanaque montibus omnes
+5. Quidem et
+
+# Vagus elidunt
+
+<svg class="canon" xmlns="http://www.w3.org/2000/svg" overflow="visible" viewBox="0 0 496 373" height="373" width="496"><g fill="none"><path stroke="#000" stroke-width=".75" d="M.599 372.348L495.263 1.206M.312.633l494.95 370.853M.312 372.633L247.643.92M248.502.92l246.76 370.566M330.828 123.869V1.134M330.396 1.134L165.104 124.515"></path><path stroke="#ED1C24" stroke-width=".75" d="M275.73 41.616h166.224v249.05H275.73zM54.478 41.616h166.225v249.052H54.478z"></path><path stroke="#000" stroke-width=".75" d="M.479.375h495v372h-495zM247.979.875v372"></path><ellipse cx="498.729" cy="177.625" rx=".75" ry="1.25"></ellipse><ellipse cx="247.229" cy="377.375" rx=".75" ry="1.25"></ellipse></g></svg>
+
+[The Van de Graaf Canon](https://en.wikipedia.org/wiki/Canons_of_page_construction#Van_de_Graaf_canon)
+
+## Mane refeci capiebant unda mulcebat
+
+Victa caducifer, malo vulnere contra dicere aurato, ludit regale, voca! Retorsit colit est profanae esse virescere furit nec; iaculi matertera et visa est, viribus. Divesque creatis, tecta novat collumque vulnus est, parvas. **Faces illo pepulere** tempus adest. Tendit flamma, ab opes virum sustinet, sidus sequendo urbis.
+
+Iubar proles corpore raptos vero auctor imperium; sed et huic: manus caeli Lelegas tu lux. Verbis obstitit intus oblectamina fixis linguisque ausus sperare Echionides cornuaque tenent clausit possit. Omnia putatur. Praeteritae refert ausus; ferebant e primus lora nutat, vici quae mea ipse. Et iter nil spectatae vulnus haerentia iuste et exercebat, sui et.
+
+Eurytus Hector, materna ipsumque ut Politen, nec, nate, ignari, vernum cohaesit sequitur. Vel **mitis temploque** vocatus, inque alis, *oculos nomen* non silvis corpore coniunx ne displicet illa. Crescunt non unus, vidit visa quantum inmiti flumina mortis facto sic: undique a alios vincula sunt iactata abdita! Suspenderat ego fuit tendit: luna, ante urbem Propoetides **parte**.
+
+{{< css.inline >}}
+<style>
+.canon { background: white; width: 100%; height: auto; }
+</style>
+{{< /css.inline >}}
diff --git a/exampleSite/content/blog/rich-content.md b/exampleSite/content/blog/rich-content.md
new file mode 100644
index 0000000..bf7e101
--- /dev/null
+++ b/exampleSite/content/blog/rich-content.md
@@ -0,0 +1,34 @@
++++
+author = "Hugo Authors"
+title = "Rich Content"
+date = "2019-03-10"
+description = "A brief description of Hugo Shortcodes"
+tags = [
+ "shortcodes",
+ "privacy",
+]
++++
+
+Hugo ships with several [Built-in Shortcodes](https://gohugo.io/content-management/shortcodes/#use-hugos-built-in-shortcodes) for rich content, along with a [Privacy Config](https://gohugo.io/about/hugo-and-gdpr/) and a set of Simple Shortcodes that enable static and no-JS versions of various social media embeds.
+<!--more-->
+---
+
+## YouTube Privacy Enhanced Shortcode
+
+{{< youtube ZJthWmvUzzc >}}
+
+<br>
+
+---
+
+## Twitter Simple Shortcode
+
+{{< tweet user="DesignReviewed" id="1085870671291310081" >}}
+
+<br>
+
+---
+
+## Vimeo Simple Shortcode
+
+{{< vimeo_simple 48912912 >}}
diff --git a/exampleSite/content/hugo.md b/exampleSite/content/hugo.md
deleted file mode 100644
index 6f6ce0d..0000000
--- a/exampleSite/content/hugo.md
+++ /dev/null
@@ -1,26 +0,0 @@
-+++
-title = "Hugo"
-menu = "main"
-+++
-
-# Hugo
-
-Website: https://gohugo.io
-
-Written in Go, Hugo is an open-source static site generator available under the [Apache Licence 2.0.](https://github.com/gohugoio/hugo/blob/master/LICENSE) Hugo supports TOML, YAML, and JSON data file types, Markdown and HTML content files, and uses shortcodes to add rich content. Other notable features are taxonomies, multilingual mode, image processing, custom output formats, HTML/CSS/JS minification, and support for Sass SCSS workflows.
-
-Hugo makes use of a variety of open source projects including:
-
-* https://github.com/yuin/goldmark
-* https://github.com/alecthomas/chroma
-* https://github.com/muesli/smartcrop
-* https://github.com/spf13/cobra
-* https://github.com/spf13/viper
-
-Hugo is ideal for blogs, corporate websites, creative portfolios, online magazines, single-page applications, or even a website with thousands of pages.
-
-Hugo is for people who want to hand-code their own website without worrying about setting up complicated runtimes, dependencies, and databases.
-
-Websites built with Hugo are swift, secure and can be deployed anywhere including, AWS, GitHub Pages, Heroku, Netlify, and any other hosting provider.
-
-Learn more and contribute on [GitHub](https://github.com/gohugoio).
diff --git a/exampleSite/hugo.toml b/exampleSite/hugo.toml
index d67e845..3c8b0d0 100644
--- a/exampleSite/hugo.toml
+++ b/exampleSite/hugo.toml
@@ -1,52 +1,82 @@
-# Base URL used when generating links to your pages
-# Set to the URL for your site
+# Basic config
baseURL = "https://example.com"
-
-# The name of this wonderful theme ;-).
-theme = 'hugo-bearblog'
-
-# Basic metadata configuration for your blog.
-title = "Hugo ʕ•ᴥ•ʔ Bear Blog"
-author = "Jane Doe"
-copyright = "Copyright © 2020, Jane Doe."
-languageCode = "en-US"
+theme = "hugo-bearcub"
+copyright = "John Doe (CC BY 4.0)"
+defaultContentLanguage = "en"
# Generate a nice robots.txt for SEO
enableRobotsTXT = true
-# Generate "Bearblog"-like URLs !only!, see https://bearblog.dev/.
-disableKinds = ["taxonomy"]
-ignoreErrors = ["error-disable-taxonomy"]
-[permalinks]
- blog = "/:slug/"
- tags = "/blog/:slug"
+# Setup syntax highlighting without inline styles. For more information about
+# why you'd want to avoid inline styles, see
+# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/style-src#unsafe_inline_styles
+[markup]
+ [markup.highlight]
+ lineNos = true
+ lineNumbersInTable = false
+ # This allows Bear Cub to use a variation of Dracula that is more accessible
+ # to people with poor eyesight. For more information about color contrast
+ # and accessibility, see https://web.dev/color-and-contrast-accessibility/
+ noClasses = false
+
+# Multilingual mode config. More for information about how to setup translation,
+# see https://gohugo.io/content-management/multilingual/
+[languages]
+ [languages.en]
+ title = "Bear Cub"
+ languageName = "en-US 🇺🇸"
+ LanguageCode = "en-US"
+ contentDir = "content"
+ [languages.en.params]
+ madeWith = "Made with [Bear Cub](https://github.com/clente/hugo-bearcub)"
+ [languages.pt]
+ title = "Bear Cub"
+ languageName = "pt-BR 🇧🇷"
+ LanguageCode = "pt-BR"
+ contentDir = "content.pt"
+ [languages.pt.params]
+ madeWith = "Feito com [Bear Cub](https://github.com/clente/hugo-bearcub)"
[params]
- # The "description" of your website. This is used in the meta data of your generated html.
- description = "Hugo + Bear = :heart:"
+ # The description of your website
+ description = "Bear Cub Demo"
- # The path to your "favicon". This should be a square (at least 32px x 32px) png-file.
- # Hint: It's good practise to also put a "favicon.ico"-file into your "static"-folder.
+ # The path to your favicon
favicon = "images/favicon.png"
- # These "images" are used for the structured data templates. This will show up, when
- # services like Twitter or Slack want to generate a preview of a link to your site.
- # See https://gohugo.io/templates/internal#twitter-cards and
- # https://gohugo.io/templates/internal#open-graph.
- images = ["images/share.png"]
-
- # Another "title" :-). This one is used as the site_name on the Hugo's internal
- # opengraph structured data template.
- # See https://ogp.me/ and https://gohugo.io/templates/internal#open-graph.
- title = "Hugo ʕ•ᴥ•ʔ Bear"
-
- # This theme will, by default, inject a made-with-line at the bottom of the page.
- # You can turn it off, but we would really appreciate if you don’t :-).
- # hideMadeWithLine = true
-
- # By default, this theme displays dates with a format like "02 Jan, 2006", but
- # you can customize it by setting the `dateFormat` param in your site's config
- # file. See [Hugo's Format function docs](https://gohugo.io/functions/format/)
- # for details. An example TOML config that uses [ISO
- # 8601](https://en.wikipedia.org/wiki/ISO_8601) format:
- # dateFormat = "2006-01-02"
+ # These images will show up when services want to generate a preview of a link
+ # to your site. Ignored if `generateSocialCard = true`. For more information
+ # about previews, see https://gohugo.io/templates/internal#twitter-cards and
+ # https://gohugo.io/templates/internal#open-graph
+ images = ["images/share.webp"]
+
+ # This title is used as the site_name on the Hugo's internal opengraph
+ # structured data template
+ title = "Bear Cub"
+
+ # Dates are displayed following the format below. For more information about
+ # formatting, see https://gohugo.io/functions/format/
+ dateFormat = "2006-01-02"
+
+ # If your blog is multilingual but you haven't translated a page, this theme
+ # will create a disabled link. By setting `hideUntranslated` to true, you can
+ # have the theme simply not show any link
+ hideUntranslated = false
+
+ # (EXPERIMENTAL) This theme is capable of dynamically generating social cards
+ # for posts that don't have `images` defined in their front matter; By setting
+ # `generateSocialCard` to false, you can prevent this behavior. For more
+ # information see layouts/partials/social_card.html
+ generateSocialCard = true
+
+ # Social media. Delete any item you aren't using to make sure it won't show up
+ # in your website's metadata.
+ [params.social]
+ twitter = "example" # Twitter handle (without '@')
+ facebook_admin = "0000000000" # Facebook Page Admin ID
+
+ # Author metadata. This is mostly used for the RSS feed of your site, but the
+ # email is also added to the footer of each post
+ [params.author]
+ name = "John Doe" # Your name as shown in the RSS feed metadata
+ email = "me@example.com" # Added to the footer so readers can reply to posts
diff --git a/exampleSite/static/favicon.ico b/exampleSite/static/favicon.ico
deleted file mode 100644
index 5f67af6..0000000
--- a/exampleSite/static/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/exampleSite/static/images/favicon.png b/exampleSite/static/images/favicon.png
index a3ef781..c3ab3b9 100644
--- a/exampleSite/static/images/favicon.png
+++ b/exampleSite/static/images/favicon.png
Binary files differ
diff --git a/exampleSite/static/images/share.png b/exampleSite/static/images/share.png
deleted file mode 100644
index a08d93e..0000000
--- a/exampleSite/static/images/share.png
+++ /dev/null
Binary files differ
diff --git a/exampleSite/static/images/share.webp b/exampleSite/static/images/share.webp
new file mode 100644
index 0000000..e190239
--- /dev/null
+++ b/exampleSite/static/images/share.webp
Binary files differ
diff --git a/i18n/en.toml b/i18n/en.toml
new file mode 100644
index 0000000..15a8569
--- /dev/null
+++ b/i18n/en.toml
@@ -0,0 +1,14 @@
+[filtering-for]
+ other = "Filtering for"
+
+[no-posts]
+ other = "No posts yet"
+
+[email-subject]
+ other = "Reply to "
+
+[email-reply]
+ other = "Reply to this post by email"
+
+[skip-link]
+ other = "Skip to main content" \ No newline at end of file
diff --git a/i18n/pt.toml b/i18n/pt.toml
new file mode 100644
index 0000000..ad228ab
--- /dev/null
+++ b/i18n/pt.toml
@@ -0,0 +1,14 @@
+[filtering-for]
+ other = "Filtrando para"
+
+[no-posts]
+ other = "Nenhum post ainda"
+
+[email-subject]
+ other = "Resposta a "
+
+[email-reply]
+ other = "Responda a este post por email"
+
+[skip-link]
+ other = "Pular para conteúdo principal" \ No newline at end of file
diff --git a/images/pagespeed.webp b/images/pagespeed.webp
new file mode 100644
index 0000000..fb87f05
--- /dev/null
+++ b/images/pagespeed.webp
Binary files differ
diff --git a/images/screenshot-dark.png b/images/screenshot-dark.png
deleted file mode 100644
index 17d4c88..0000000
--- a/images/screenshot-dark.png
+++ /dev/null
Binary files differ
diff --git a/images/screenshot.png b/images/screenshot.png
index 636da6a..8d4c404 100644
--- a/images/screenshot.png
+++ b/images/screenshot.png
Binary files differ
diff --git a/images/social_card.webp b/images/social_card.webp
new file mode 100644
index 0000000..43ae186
--- /dev/null
+++ b/images/social_card.webp
Binary files differ
diff --git a/images/tn.png b/images/tn.png
index a08d93e..206e5bb 100644
--- a/images/tn.png
+++ b/images/tn.png
Binary files differ
diff --git a/layouts/_default/_markup/render-codeblock.html b/layouts/_default/_markup/render-codeblock.html
new file mode 100644
index 0000000..6e1a075
--- /dev/null
+++ b/layouts/_default/_markup/render-codeblock.html
@@ -0,0 +1,6 @@
+<!-- https://github.com/jmooring/hugo-testing/blob/hugo-forum-topic-40998/layouts/_default/_markup/render-codeblock-katex.html -->
+{{ .Page.Store.Set "hasCodeBlock" true }}
+
+<!-- https://www.veriphor.com/articles/code-block-render-hooks/ -->
+{{ $result := transform.HighlightCodeBlock . }}
+{{ $result.Wrapped }} \ No newline at end of file
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
index 6bce2dc..475d6f9 100644
--- a/layouts/_default/baseof.html
+++ b/layouts/_default/baseof.html
@@ -11,12 +11,23 @@
{{- partial "seo_tags.html" . -}}
<meta name="referrer" content="no-referrer-when-downgrade" />
+ {{ $style := resources.Get "style.css" | minify }}
+ <link href="{{ $style.RelPermalink }}" rel="stylesheet">
+
+ {{ if (.Page.Store.Get "hasCodeBlock") }}
+ {{ $syntax := resources.Get "syntax.css" | minify }}
+ <link href="{{ $syntax.RelPermalink }}" rel="stylesheet">
+ {{ end }}
+
+ {{ with .Params.style }}
+ {{ $extra := resources.Get . | minify }}
+ <link href="{{ $extra.RelPermalink }}" rel="stylesheet">
+ {{ end }}
+
{{ with .OutputFormats.Get "rss" -}}
{{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }}
{{ end -}}
- {{- partial "style.html" . -}}
-
<!-- A partial to be overwritten by the user.
Simply place a custom_head.html into
your local /layouts/partials-directory -->
@@ -27,7 +38,7 @@
<header>
{{- partial "header.html" . -}}
</header>
- <main>
+ <main id="main-content">
{{- block "main" . }}{{- end }}
</main>
<footer>
diff --git a/layouts/_default/list.html b/layouts/_default/list.html
index 90cbee5..354bc9c 100644
--- a/layouts/_default/list.html
+++ b/layouts/_default/list.html
@@ -1,10 +1,7 @@
{{ define "main" }}
<content>
{{ if .Data.Singular }}
- <h3 style="margin-bottom:0">Filtering for "{{ .Title }}"</h3>
- <small>
- <a href="{{ "blog" | relURL }}">Remove filter</a>
- </small>
+ <h3 class="blog-filter">{{ i18n "filtering-for" }} "{{ .Title }}"</h3>
{{ end }}
<ul class="blog-posts">
{{ range .Pages }}
@@ -12,27 +9,28 @@
<span>
<i>
<time datetime='{{ .Date.Format "2006-01-02" }}' pubdate>
- {{ .Date.Format (default "02 Jan, 2006" .Site.Params.dateFormat) }}
+ {{ .Date.Format (default "2006-01-02" .Site.Params.dateFormat) }}
</time>
</i>
</span>
- <a href="{{ .Permalink }}">{{ .Title }}</a>
+ {{ if .Params.link }}
+ <a href="{{ .Params.link }}" target="_blank">{{ .Title }} ↪</a>
+ {{ else }}
+ <a href="{{ .Permalink }}">{{ .Title }}</a>
+ {{ end }}
</li>
{{ else }}
<li>
- No posts yet
+ {{ i18n "no-posts" }}
</li>
{{ end }}
</ul>
- {{ if .Data.Singular }}
- {{else}}
- <small>
- <div>
- {{ range .Site.Taxonomies.tags }}
- <a href="{{ .Page.Permalink }}">#{{ .Page.Title }}</a>&nbsp;
- {{ end }}
- </div>
- </small>
- {{ end }}
+ {{ if not .Data.Singular }}
+ <div>
+ {{ range .Site.Taxonomies.tags }}
+ <a class="blog-tags" href="{{ .Page.Permalink }}">#{{ .Page.Title }}</a>&nbsp;&nbsp;
+ {{ end }}
+ </div>
+ {{ end }}
</content>
{{ end }}
diff --git a/layouts/_default/rss.xml b/layouts/_default/rss.xml
new file mode 100644
index 0000000..70d1193
--- /dev/null
+++ b/layouts/_default/rss.xml
@@ -0,0 +1,72 @@
+{{- /* Deprecate site.Author.email in favor of site.Params.author.email */}}
+{{- $authorEmail := "" }}
+{{- with site.Params.author }}
+ {{- if reflect.IsMap . }}
+ {{- with .email }}
+ {{- $authorEmail = . }}
+ {{- end }}
+ {{- end }}
+{{- else }}
+ {{- with site.Author.email }}
+ {{- $authorEmail = . }}
+ {{- warnf "The author key in site configuration is deprecated. Use params.author.email instead." }}
+ {{- end }}
+{{- end }}
+
+{{- /* Deprecate site.Author.name in favor of site.Params.author.name */}}
+{{- $authorName := "" }}
+{{- with site.Params.author }}
+ {{- if reflect.IsMap . }}
+ {{- with .name }}
+ {{- $authorName = . }}
+ {{- end }}
+ {{- else }}
+ {{- $authorName = . }}
+ {{- end }}
+{{- else }}
+ {{- with site.Author.name }}
+ {{- $authorName = . }}
+ {{- warnf "The author key in site configuration is deprecated. Use params.author.name instead." }}
+ {{- end }}
+{{- end }}
+
+{{- $pctx := . }}
+{{- if .IsHome }}{{ $pctx = .Site }}{{ end }}
+{{- $pages := slice }}
+{{- if or $.IsHome $.IsSection }}
+{{- $pages = $pctx.RegularPages }}
+{{- else }}
+{{- $pages = $pctx.Pages }}
+{{- end }}
+{{- $limit := .Site.Config.Services.RSS.Limit }}
+{{- if ge $limit 1 }}
+{{- $pages = $pages | first $limit }}
+{{- end }}
+{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
+ <channel>
+ <title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} on {{ end }}{{ .Site.Title }}{{ end }}</title>
+ <link>{{ .Permalink }}</link>
+ <description>Recent content {{ if not .IsHome }}{{ with .Title }}in {{ . }} {{ end }}{{ end }}on {{ .Site.Title }}</description>
+ <generator>Hugo -- gohugo.io</generator>
+ <language>{{ site.Language.LanguageCode }}</language>{{ with $authorEmail }}
+ <managingEditor>{{.}}{{ with $authorName }} ({{ . }}){{ end }}</managingEditor>{{ end }}{{ with $authorEmail }}
+ <webMaster>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</webMaster>{{ end }}{{ with .Site.Copyright }}
+ <copyright>{{ . }}</copyright>{{ end }}{{ if not .Date.IsZero }}
+ <lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
+ {{- with .OutputFormats.Get "RSS" }}
+ {{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
+ {{- end }}
+ {{- range $pages }}
+ <item>
+ <title>{{ .Title }}</title>
+ <link>{{ .Permalink }}</link>
+ <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
+ {{- with $authorEmail }}<author>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</author>{{ end }}
+ <guid>{{ .Permalink }}</guid>
+ <description>{{ .Summary | transform.XMLEscape | safeHTML }}</description>
+ <content:encoded>{{ `<![CDATA[` | safeHTML }}{{ .Content | safeHTML }}{{ `]]>` | safeHTML }}</content:encoded>
+ </item>
+ {{- end }}
+ </channel>
+</rss>
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
index 7d57351..6f6c699 100644
--- a/layouts/_default/single.html
+++ b/layouts/_default/single.html
@@ -1,20 +1,26 @@
{{ define "main" }}
-{{ if eq .Type "blog" }}{{ if not .Params.menu }}
+{{ if not .Params.menu }}
<h1>{{ .Title }}</h1>
-<p>
- <i>
- <time datetime='{{ .Date.Format "2006-01-02" }}' pubdate>
- {{ .Date.Format (default "02 Jan, 2006" .Site.Params.dateFormat) }}
- </time>
- </i>
+<p class="byline">
+ <time datetime='{{ .Date.Format "2006-01-02" }}' pubdate>
+ {{ .Date.Format (default "2006-01-02" .Site.Params.dateFormat) }}
+ </time>
+ {{ with .Params.author }}· {{.}}{{ end }}
</p>
-{{ end }}{{ end }}
+{{ end }}
<content>
{{ .Content }}
</content>
<p>
{{ range (.GetTerms "tags") }}
- <a href="{{ .Permalink }}">#{{ .LinkTitle }}</a>
+ <a class="blog-tags" href="{{ .Permalink }}">#{{ .LinkTitle }}</a>&nbsp;&nbsp;
{{ end }}
</p>
+{{ with .Site.Params.author.email }}
+ <p>
+ <a href='mailto:{{ . }}?subject={{ i18n "email-subject" }}"{{ default $.Site.Title $.Page.Title }}"'>
+ {{ i18n "email-reply" }} ↪
+ </a>
+ </p>
+{{ end }}
{{ end }}
diff --git a/layouts/partials/favicon.html b/layouts/partials/favicon.html
index ccf1a5d..d391a86 100644
--- a/layouts/partials/favicon.html
+++ b/layouts/partials/favicon.html
@@ -1,2 +1,2 @@
{{ with .Site.Params.favicon }}
-<link rel="shortcut icon" href="{{ . | absURL }}" />{{ end }}
+<link rel="shortcut icon" href="{{ absURL . }}" />{{ end }}
diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html
index 8eca955..9290715 100644
--- a/layouts/partials/footer.html
+++ b/layouts/partials/footer.html
@@ -1 +1,3 @@
-{{ if ne .Site.Params.hideMadeWithLine true }}Made with <a href="https://github.com/janraasch/hugo-bearblog/">Hugo ʕ•ᴥ•ʔ Bear</a>{{ end }}
+<small>
+ {{ .Site.Copyright }} | {{ markdownify .Site.Params.madeWith }}
+</small> \ No newline at end of file
diff --git a/layouts/partials/header.html b/layouts/partials/header.html
index 9bb5112..5a66907 100644
--- a/layouts/partials/header.html
+++ b/layouts/partials/header.html
@@ -1,4 +1,4 @@
-<a href="{{ "" | relURL }}" class="title">
- <h2>{{ .Site.Title }}</h2>
-</a>
+<a class="skip-link" href="#main-content">{{ i18n "skip-link" }}</a>
+
+<a href="{{ relURL .Site.Home.Permalink }}" class="title"><h1>{{ .Site.Title }}</h1></a>
<nav>{{- partial "nav.html" . -}}</nav>
diff --git a/layouts/partials/nav.html b/layouts/partials/nav.html
index f4fabed..5f40267 100644
--- a/layouts/partials/nav.html
+++ b/layouts/partials/nav.html
@@ -1,7 +1,22 @@
-<a href="{{ "" | relURL }}">Home</a>
-{{ range .Site.Menus.main }}
-<a href="{{ .URL }}">{{ .Name }}</a>
+{{ range .Site.Menus.main.ByWeight }}
+ <a href="{{ .URL }}">{{ .Name }}</a>
{{ end }}
-{{ with .Site.GetPage "/blog" }}
-<a href="{{ "blog" | relURL }}">Blog</a>
+<a href='{{ absURL "index.xml" }}'>RSS</a>
+
+<!-- Convert this page's translations into a dict -->
+{{ $translations := dict }}
+{{ range .Translations }}
+ {{ $translations = merge $translations (dict .Language.Lang .) }}
+{{ end }}
+
+<!-- Create a link to every translation -->
+{{ range where .Site.Languages "Lang" "!=" .Page.Lang }}
+ {{ with (index $translations .Lang) }}
+ <a href="{{ .Permalink }}">{{ .Language.LanguageName }}</a>
+ {{ else }}
+ <!-- The complicated setup was necessary to make a grayed out link -->
+ {{ if not .Params.hideUntranslated }}
+ <a class="disabled" role="link" aria-disabled="true">{{ .LanguageName }}</a>
+ {{ end }}
+ {{ end }}
{{ end }}
diff --git a/layouts/partials/seo_tags.html b/layouts/partials/seo_tags.html
index 0b01f8b..81e498f 100644
--- a/layouts/partials/seo_tags.html
+++ b/layouts/partials/seo_tags.html
@@ -3,11 +3,19 @@
<meta name="description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end }}" />
<meta name="keywords" content="{{ if .IsPage}}{{ range $index, $tag := .Params.tags }}{{ $tag }},{{ end }}{{ else }}{{ range $plural, $terms := .Site.Taxonomies }}{{ range $term, $val := $terms }}{{ printf "%s," $term }}{{ end }}{{ end }}{{ end }}" />
-<!-- Open Graph / Facebook -->
-{{ template "_internal/opengraph.html" . }}
+<!-- Only generate social card if: -->
+<!-- - generateSocialCard = true -->
+<!-- - there aren't images set in frontmatter -->
+<!-- - page is of .Kind "page" -->
+{{ if and (and (default false .Site.Params.generateSocialCard) (not (isset .Params "images"))) (eq .Kind "page") }}
+ {{ partial "social_card.html" . }}
+{{ else }}
+ <!-- Open Graph / Facebook -->
+ {{ template "_internal/opengraph.html" . }}
-<!-- Twitter -->
-{{ template "_internal/twitter_cards.html" . }}
+ <!-- Twitter -->
+ {{ template "_internal/twitter_cards.html" . }}
-<!-- Microdata -->
-{{ template "_internal/schema.html" . }}
+ <!-- Microdata -->
+ {{ template "_internal/schema.html" . }}
+{{ end }}
diff --git a/layouts/partials/social_card.html b/layouts/partials/social_card.html
new file mode 100644
index 0000000..1568475
--- /dev/null
+++ b/layouts/partials/social_card.html
@@ -0,0 +1,136 @@
+<!-- Dynamic social card generation -->
+{{ $font := resources.GetRemote "https://github.com/google/fonts/raw/main/ofl/firamono/FiraMono-Bold.ttf" }}
+{{ $fg := resources.Get "images/social_card_fg.png"}}
+{{ $bg := resources.Get "images/social_card_bg.png"}}
+
+{{ if gt (len .Title) 45 }}
+ {{ $fg = $fg.Filter (images.Text .Title (dict
+ "font" $font
+ "color" "#fafafa"
+ "size" 95
+ "linespacing" 16
+ "x" 0
+ "y" 0
+ )) }}
+{{ else }}
+ {{ $fg = $fg.Filter (images.Text .Title (dict
+ "font" $font
+ "color" "#fafafa"
+ "size" 130
+ "linespacing" 20
+ "x" 0
+ "y" 0
+ )) }}
+{{ end }}
+
+{{ $date := .Date.Format (default "2006-01-02" .Site.Params.dateFormat) }}
+{{ $author := (default $.Site.Params.author.name ($.Param "author") ) }}
+{{ $byline := (printf "%s | %s" $author $date) }}
+
+{{ $fg = $fg.Filter (images.Text $byline (dict
+ "font" $font
+ "color" "#c9d1d9"
+ "size" 60
+ "linespacing" 30
+ "x" 0
+ "y" 425
+)) }}
+
+{{ $card := $bg.Filter (images.Overlay $fg 112 140 ) }}
+{{ $card := $card.Resize "900x webp q100" }}
+
+<!-- Open Graph / Facebook -->
+<!-- Source: https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/opengraph.html -->
+<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 }}" />
+
+<meta property="og:image" content="{{ $card.Permalink | absURL }}"/>
+
+{{- 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 . }}
+<meta property="og:video" content="{{ . | absURL }}" />
+{{ end }}{{ end }}
+
+{{- /* If it is part of a series, link to related articles */}}
+{{- $permalink := .Permalink }}
+{{- $siteSeries := .Site.Taxonomies.series }}
+{{- if $siteSeries }}
+{{ 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 }}
+{{- end }}
+
+{{- /* Deprecate site.Social.facebook_admin in favor of site.Params.social.facebook_admin */}}
+{{- $facebookAdmin := "" }}
+{{- with site.Params.social }}
+ {{- if reflect.IsMap . }}
+ {{- $facebookAdmin = .facebook_admin }}
+ {{- end }}
+{{- else }}
+ {{- with site.Social.facebook_admin }}
+ {{- $facebookAdmin = . }}
+ {{- warnf "The social key in site configuration is deprecated. Use params.social.facebook_admin instead." }}
+ {{- end }}
+{{- end }}
+
+{{- /* Facebook Page Admin ID for Domain Insights */}}
+{{ with $facebookAdmin }}<meta property="fb:admins" content="{{ . }}" />{{ end }}
+
+<!-- Twitter -->
+<!-- Source: https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/twitter_cards.html -->
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="{{ $card.Permalink | absURL }}"/>
+<meta name="twitter:title" content="{{ .Title }}"/>
+<meta name="twitter:description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end -}}"/>
+
+{{- /* Deprecate site.Social.twitter in favor of site.Params.social.twitter */}}
+{{- $twitterSite := "" }}
+{{- with site.Params.social }}
+ {{- if reflect.IsMap . }}
+ {{- $twitterSite = .twitter }}
+ {{- end }}
+{{- else }}
+ {{- with site.Social.twitter }}
+ {{- $twitterSite = . }}
+ {{- warnf "The social key in site configuration is deprecated. Use params.social.twitter instead." }}
+ {{- end }}
+{{- end }}
+
+{{- with $twitterSite }}
+ {{- $content := . }}
+ {{- if not (strings.HasPrefix . "@") }}
+ {{- $content = printf "@%v" $twitterSite }}
+ {{- end }}
+<meta name="twitter:site" content="{{ $content }}"/>
+{{- end }}
+
+<!-- Microdata -->
+<!-- Source: https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/schema.html -->
+<meta itemprop="name" content="{{ .Title }}">
+<meta itemprop="description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end }}">
+
+{{- if .IsPage -}}
+{{- $iso8601 := "2006-01-02T15:04:05-07:00" -}}
+{{ with .PublishDate }}<meta itemprop="datePublished" {{ .Format $iso8601 | printf "content=%q" | safeHTMLAttr }} />{{ end}}
+{{ with .Lastmod }}<meta itemprop="dateModified" {{ .Format $iso8601 | printf "content=%q" | safeHTMLAttr }} />{{ end}}
+<meta itemprop="wordCount" content="{{ .WordCount }}">
+
+<meta itemprop="image" content="{{ $card.Permalink | absURL }}"/>
+
+<!-- Output all taxonomies as schema.org keywords -->
+<meta itemprop="keywords" content="{{ if .IsPage}}{{ range $index, $tag := .Params.tags }}{{ $tag }},{{ end }}{{ else }}{{ range $plural, $terms := .Site.Taxonomies }}{{ range $term, $val := $terms }}{{ printf "%s," $term }}{{ end }}{{ end }}{{ end }}" />
+{{- end -}}
diff --git a/layouts/partials/style.html b/layouts/partials/style.html
deleted file mode 100644
index 122a641..0000000
--- a/layouts/partials/style.html
+++ /dev/null
@@ -1,173 +0,0 @@
-<style>
- body {
- font-family: Verdana, sans-serif;
- margin: auto;
- padding: 20px;
- max-width: 720px;
- text-align: left;
- background-color: #fff;
- word-wrap: break-word;
- overflow-wrap: break-word;
- line-height: 1.5;
- color: #444;
- }
-
- h1,
- h2,
- h3,
- h4,
- h5,
- h6,
- strong,
- b {
- color: #222;
- }
-
- a {
- color: #3273dc;
- /*color: #ff5e6c;*/
- }
-
- .title {
- text-decoration: none;
- border: 0;
- }
-
- .title span {
- font-weight: 400;
- }
-
- nav a {
- margin-right: 10px;
- }
-
- textarea {
- width: 100%;
- font-size: 16px;
- }
-
- input {
- font-size: 16px;
- }
-
- content {
- line-height: 1.6;
- }
-
- table {
- width: 100%;
- }
-
- img {
- max-width: 100%;
- }
-
- code {
- padding: 2px 5px;
- background-color: #f2f2f2;
- }
-
- pre code {
- color: #222;
- display: block;
- padding: 20px;
- white-space: pre-wrap;
- font-size: 14px;
- overflow-x: auto;
- }
-
- div.highlight pre {
- background-color: initial;
- color: initial;
- }
-
- div.highlight code {
- background-color: unset;
- color: unset;
- }
-
- blockquote {
- border-left: 1px solid #999;
- color: #222;
- padding-left: 20px;
- font-style: italic;
- }
-
- footer {
- padding: 25px;
- text-align: center;
- }
-
- .helptext {
- color: #777;
- font-size: small;
- }
-
- .errorlist {
- color: #eba613;
- font-size: small;
- }
-
- /* blog posts */
- ul.blog-posts {
- list-style-type: none;
- padding: unset;
- }
-
- ul.blog-posts li {
- display: flex;
- }
-
- ul.blog-posts li span {
- flex: 0 0 130px;
- }
-
- ul.blog-posts li a:visited {
- color: #8b6fcb;
- }
-
- @media (prefers-color-scheme: dark) {
- body {
- background-color: #333;
- color: #ddd;
- }
-
- h1,
- h2,
- h3,
- h4,
- h5,
- h6,
- strong,
- b {
- color: #eee;
- }
-
- a {
- color: #8cc2dd;
- }
-
- code {
- background-color: #777;
- }
-
- pre code {
- color: #ddd;
- }
-
- blockquote {
- color: #ccc;
- }
-
- textarea,
- input {
- background-color: #252525;
- color: #ddd;
- }
-
- .helptext {
- color: #aaa;
- }
- }
-
-</style>
diff --git a/layouts/robots.txt b/layouts/robots.txt
index 0326f5c..4f4ca44 100644
--- a/layouts/robots.txt
+++ b/layouts/robots.txt
@@ -1,2 +1,3 @@
-User-Agent: *
+User-agent: *
+Allow: /
Sitemap: {{ "sitemap.xml" | absURL }}
diff --git a/layouts/shortcodes/highlight.html b/layouts/shortcodes/highlight.html
new file mode 100644
index 0000000..6c86ca8
--- /dev/null
+++ b/layouts/shortcodes/highlight.html
@@ -0,0 +1,5 @@
+<!-- https://github.com/jmooring/hugo-testing/blob/hugo-forum-topic-40998/layouts/_default/_markup/render-codeblock-katex.html -->
+{{ .Page.Store.Set "hasCodeBlock" true }}
+
+<!-- https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/shortcodes/highlight.html -->
+{{ if len .Params | eq 2 }}{{ highlight (trim .InnerDeindent "\n\r") (.Get 0) (.Get 1) }}{{ else }}{{ highlight (trim .InnerDeindent "\n\r") (.Get 0) "" }}{{ end }} \ No newline at end of file
diff --git a/layouts/shortcodes/rawhtml.html b/layouts/shortcodes/rawhtml.html
new file mode 100644
index 0000000..520ec17
--- /dev/null
+++ b/layouts/shortcodes/rawhtml.html
@@ -0,0 +1,2 @@
+<!-- raw html -->
+{{.Inner}} \ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 7a248e9..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,430 +0,0 @@
-{
- "name": "hugo-bearblog",
- "version": "1.0.0",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dev": true,
- "requires": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "string-width-cjs": {
- "version": "npm:string-width@4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "dependencies": {
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
- }
- },
- "strip-ansi-cjs": {
- "version": "npm:strip-ansi@6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "wrap-ansi-cjs": {
- "version": "npm:wrap-ansi@7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
- }
- }
- }
- },
- "@one-ini/wasm": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz",
- "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==",
- "dev": true
- },
- "@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
- "optional": true
- },
- "abbrev": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
- "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
- "dev": true
- },
- "ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true
- },
- "ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "commander": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
- "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
- "dev": true
- },
- "config-chain": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
- "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
- "dev": true,
- "requires": {
- "ini": "^1.3.4",
- "proto-list": "~1.2.1"
- }
- },
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
- },
- "editorconfig": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz",
- "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==",
- "dev": true,
- "requires": {
- "@one-ini/wasm": "0.1.1",
- "commander": "^10.0.0",
- "minimatch": "9.0.1",
- "semver": "^7.5.3"
- }
- },
- "emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true
- },
- "foreground-child": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
- "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- }
- },
- "glob": {
- "version": "10.3.10",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
- "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
- "dev": true,
- "requires": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^2.3.5",
- "minimatch": "^9.0.1",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
- "path-scurry": "^1.10.1"
- }
- },
- "ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
- },
- "jackspeak": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
- "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
- "dev": true,
- "requires": {
- "@isaacs/cliui": "^8.0.2",
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "js-beautify": {
- "version": "1.15.1",
- "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz",
- "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==",
- "dev": true,
- "requires": {
- "config-chain": "^1.1.13",
- "editorconfig": "^1.0.4",
- "glob": "^10.3.3",
- "js-cookie": "^3.0.5",
- "nopt": "^7.2.0"
- }
- },
- "js-cookie": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz",
- "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==",
- "dev": true
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "minimatch": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz",
- "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- },
- "minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true
- },
- "nopt": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz",
- "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==",
- "dev": true,
- "requires": {
- "abbrev": "^2.0.0"
- }
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "path-scurry": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
- "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
- "dev": true,
- "requires": {
- "lru-cache": "^9.1.1 || ^10.0.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
- "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
- "dev": true
- }
- }
- },
- "proto-list": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
- "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
- "dev": true
- },
- "semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true
- },
- "string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
- "requires": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- }
- },
- "strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "requires": {
- "ansi-regex": "^6.0.1"
- }
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- }
- }
-}
diff --git a/package.json b/package.json
deleted file mode 100644
index b8cd943..0000000
--- a/package.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "name": "hugo-bearblog",
- "private": true,
- "version": "1.0.0",
- "description": "🧸 A [Hugo](https://gohugo.io/)-theme based on [Bear Blog](https://bearblog.dev).",
- "main": "index.js",
- "devDependencies": {
- "js-beautify": "^1.15.1"
- },
- "scripts": {
- "test": "npm run beautify",
- "beautify": "js-beautify layouts/**/*.html -r"
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/janraasch/hugo-bearblog.git"
- },
- "author": {
- "name": "Jan Raasch",
- "email": "jan@janraasch.com",
- "url": "https://www.janraasch.com"
- },
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/janraasch/hugo-bearblog/issues"
- },
- "homepage": "https://github.com/janraasch/hugo-bearblog#readme"
-}
diff --git a/theme.toml b/theme.toml
index 066e67a..602a351 100644
--- a/theme.toml
+++ b/theme.toml
@@ -1,25 +1,29 @@
-# theme.toml template for a Hugo theme
-# See https://github.com/gohugoio/hugoThemes#themetoml for an example
-
-name = "Hugo Bear Blog"
+name = "Bear Cub"
license = "MIT"
-licenselink = "https://github.com/janraasch/hugo-bearblog/blob/master/LICENSE"
-description = "A Hugo theme based on »Bear Blog«. Free, no-nonsense, super-fast blogging. »Bear Blog« now includes a dark color scheme to support dark mode!"
-homepage = "https://github.com/janraasch/hugo-bearblog"
-demosite = "https://janraasch.github.io/hugo-bearblog/"
-tags = ["blog", "responsive", "minimal", "seo", "clean", "simple", "light", "minimalist", "mobile", "fast", "white", "minimalistic", "reading", "dark mode"]
-features = ["favicon", "seo", "no stylesheets", "no javascript", "rss", "dark mode"]
-min_version = "v0.110.0"
-# https://gohugo.io/content-management/taxonomies#default-taxonomies
-# https://gohugo.io/templates/taxonomy-templates/#example-list-tags-in-a-single-page-template
-# https://gohugo.io/templates/taxonomy-templates/#example-list-all-site-tags
+licenselink = "https://github.com/clente/hugo-bearcub/blob/master/LICENSE"
+description = "A lightweight Hugo theme based on Bear Blog and Hugo Bear Blog. It is free, multilingual, optimized for search engines, no-nonsense, responsive, light, and fast. Really fast."
+
+# The home page of the theme, where the source can be found.
+homepage = "https://github.com/clente/hugo-bearcub"
+
+# If you have a running demo of the theme.
+demosite = "https://clente.github.io/hugo-bearcub"
+tags = ["blog", "responsive", "minimal", "personal", "dark", "multilingual"]
+features = ["favicon", "seo", "no javascript", "rss", "social cards"]
+
+# If the theme has a single author
[author]
- name = "Jan Raasch"
- homepage = "https://www.janraasch.com"
+ name = "Caio Lente"
+ homepage = "https://lente.dev"
# If porting an existing theme
[original]
- name = "ʕ•ᴥ•ʔ Bear Blog"
- homepage = "https://bearblog.dev"
- repo = "https://github.com/HermanMartinus/bearblog"
+ author = "Jan Raasch"
+ homepage = "https://www.janraasch.com"
+ repo = "https://github.com/janraasch/hugo-bearblog"
+
+# Hugo versions the theme supports
+[module]
+ [module.hugoVersion]
+ min = "0.90"