Compare commits

..
3 Commits
191 changed files with 3626 additions and 6007 deletions
+5 -9
View File
@@ -1,10 +1,6 @@
assets/fonts/* linguist-vendored
assets/js/main.min.js linguist-vendored
assets/js/lunr/* linguist-vendored
assets/js/plugins/* linguist-vendored
assets/js/vendor/* linguist-vendored
assets/fonts/* linguist-vendored
assets/js/main.min.js linguist-vendored
assets/js/lunr/* linguist-vendored
assets/js/plugins/* linguist-vendored
assets/js/vendor/* linguist-vendored
_sass/minimal-mistakes/vendor/* linguist-vendored
CHANGELOG.md text merge=union
docs/_docs/18-history.md text merge=union
*.md text
+6 -3
View File
@@ -1,8 +1,11 @@
# Contributing
Found a typo in the documentation or interested in [fixing a bug](https://github.com/mmistakes/minimal-mistakes/issues)? Then by all means [submit an issue](https://github.com/mmistakes/minimal-mistakes/issues/new) or [pull request](https://help.github.com/articles/using-pull-requests/). If this is your first pull request, it may be helpful to read up on the [GitHub Flow](https://guides.github.com/introduction/flow/) first.
For help with using the theme or general Jekyll support questions, please use the [Jekyll Talk forums](https://talk.jekyllrb.com/).
Having trouble working with the theme? Found a typo in the documentation?
Interested in adding a feature or [fixing a bug](https://github.com/mmistakes/minimal-mistakes/issues)?
Then by all means [submit an issue](https://github.com/mmistakes/minimal-mistakes/issues/new)
or [pull request](https://help.github.com/articles/using-pull-requests/).
If this is your first pull request, it may be helpful to read up on the
[GitHub Flow](https://guides.github.com/introduction/flow/) first.
Minimal Mistakes has been designed as a base for you to customize and fit your
site's unique needs. Please keep this in mind when requesting features and/or
+1
View File
@@ -0,0 +1 @@
custom: https://www.paypal.me/mmistakes
+68
View File
@@ -0,0 +1,68 @@
---
name: "Bug Report"
about: "Is something not working as expected?"
---
<!--
Before opening a new issue please:
- Verify you have the latest versions of Jekyll and Minimal Mistakes
installed by running `bundle update`.
- Thoroughly read the theme's documentation at
https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/
- Search all issues at https://github.com/mmistakes/minimal-mistakes/issues
for solutions and to avoid duplication.
- Ask for help at http://talk.jekyllrb.com/
After exhausting these suggestions use the format below.
-->
## Environment
<!--
Please include theme version, Jekyll version, public git repository, whether
you are hosting with GitHub Pages, and the operating system you tested with.
Issues without a link to a public repository or ZIP file will likely go ignored.
Being able to see your actual files is necessary to troubleshoot, as most
issues stem from invalid/missing YAML Front Matter, a mis-configured _config.sys
file, or problematic site content.
-->
- Minimal Mistakes version:
- Ruby gem or remote theme version:
- Jekyll version:
- Git repository URL:
- GitHub Pages hosted (if yes provide URL to site):
- Operating system:
## Expected behavior
<!--
What is it you expected to happen? This should be a description of how the
functionality you tried to use is supposed to work.
-->
## Steps to reproduce the behavior
<!--
Describe the steps you took for this problem to exist. Such as: you installed
the theme, customized _config.yml, added your own posts, and started up a
Jekyll server locally.
If an error occurred on GitHub Pages when pushing, please test a local version
following these setup instructions:
https://help.github.com/articles/setting-up-your-github-pages-site-locally-with-jekyll/
Then provide a complete log by running `bundle exec jekyll build --trace --verbose`
and include this output in the filed issue.
Screenshots can also be included if they help illustrate a behavior.
-->
## Other
<!--
NOTE: Please provide a code repository, gist, code snippet, sample files,
screenshots, or anything else you think will aid in reproducing the issue.
-->
-94
View File
@@ -1,94 +0,0 @@
name: Bug Report
description: There is something wrong with the theme. 99% of the time you should select Support below.
body:
- type: markdown
attributes:
value: |
Before opening a new issue please:
- Verify you have the latest versions of Jekyll and Minimal Mistakes
installed by running `bundle update`.
- Thoroughly read the theme's documentation at
https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/
- Search all issues at https://github.com/mmistakes/minimal-mistakes/issues
for solutions and to avoid duplication.
- Ask for help at https://talk.jekyllrb.com/
If none of the above solved your problem, you can continue below.
- type: textarea
id: environment
attributes:
label: Theme version and system environment
description: |
Please include theme version, Jekyll version, public git repository, whether
you are hosting with GitHub Pages, and the operating system you tested with.
Issues without a link to a public repository or ZIP file will likely go ignored.
Being able to see your actual files is necessary to troubleshoot, as most
issues stem from invalid/missing YAML Front Matter, a mis-configured _config.yml
file, or problematic site content.
value: |-
- Minimal Mistakes version:
- Ruby gem or remote theme version:
- Jekyll version:
- Git repository URL:
- URL to the page with the problem:
- Operating system:
- Browser version:
validations:
required: true
- type: textarea
id: what-happened
attributes:
label: What happened?
description: |
Describe the problem **in detail**. For example:
- What is missing?
- What error do you see? Attach the error log if available.
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: Expected behavior
description: |
Please describe the expected behavior and the actual result you got.
placeholder: >
What is it you expected to happen? This should be a description of how the
functionality you tried to use is supposed to work.
validations:
required: true
- type: textarea
id: steps-to-reproduce
attributes:
label: Steps to reproduce the behavior
description: |
Describe the steps you took for this problem to come up. Such as: you installed
the theme, customized _config.yml, added your own posts, and started up a
Jekyll server locally.
If an error occurred on GitHub Pages when pushing, please test a local version
following these setup instructions:
https://help.github.com/articles/setting-up-your-github-pages-site-locally-with-jekyll/
Then provide a complete log by running `bundle exec jekyll build --trace --verbose`
and include this output in the filed issue.
Screenshots can also be included if they help illustrate a behavior.
validations:
required: true
- type: textarea
id: other
attributes:
label: Other
description: |
Please provide a code repository, gist, code snippet, sample files,
screenshots, or anything else you think will aid in reproducing the issue.
validations:
required: false
-5
View File
@@ -1,5 +0,0 @@
blank_issues_enabled: false
contact_links:
- name: Support
url: https://github.com/mmistakes/minimal-mistakes/discussions
about: Please post your support questions in the Discussions section.
+16
View File
@@ -0,0 +1,16 @@
---
name: "Documentation"
about: "Found a typo or something that needs clarification?"
---
<!-- Thanks for taking the time to open an issue and help make the docs better -->
## Motivation
<!-- Why should we update our docs? -->
<!-- What should we do instead? -->
## Suggestion
<!-- What should we do instead? -->
-25
View File
@@ -1,25 +0,0 @@
name: Documentation
description: Found a typo or something that needs clarification?
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to open an issue and help make the docs better.
- type: textarea
id: motivation
attributes:
label: Motivation
description: |
Why should we update our docs?
validations:
required: true
- type: textarea
id: suggestion
attributes:
label: Suggestion
description: |
What should we do instead?
validations:
required: true
+32
View File
@@ -0,0 +1,32 @@
---
name: "Enhancement / Feature Request"
about: "What would make this theme better?"
---
<!--
Before opening a new issue please search all issues at
https://github.com/mmistakes/minimal-mistakes/issues to avoid duplication.
-->
## Summary
<!--
A short explanation of the enhancement or feature.
-->
## Motivation
<!--
Why do you want to see this feature in the theme?
What use cases does it support?
NOTE: This theme has been designed as a base for you to customize and fit
your site's unique needs. If a feature is not something most people will use,
it likely won't be considered. When in doubt ask.
-->
## Drawbacks
<!--
Why should this enhancement or feature **not** be considered?
-->
+22
View File
@@ -0,0 +1,22 @@
---
name: "Question"
about: "Having trouble working with the theme?"
---
<!--
Before opening a new issue please:
- Verify you have the latest versions of Jekyll and Minimal Mistakes
installed by running `bundle update`.
- Thoroughly read the theme's documentation at
https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/
- Search all issues at https://github.com/mmistakes/minimal-mistakes/issues
for solutions and to avoid duplication.
- Ask for help at http://talk.jekyllrb.com/
After exhausting these suggestions ask your question below.
NOTE: Please provide a code repository, gist, code snippet, sample files, or
screenshots to triage your issue.
-->
+1 -5
View File
@@ -23,8 +23,4 @@
<!--
Is this related to any GitHub issue(s)?
-->
<!--
Please confirm that you want to submit this Pull Request to Minimal Mistakes, the free Jekyll theme by Michael Rose, by deleting this comment block.
-->
-->
+21
View File
@@ -0,0 +1,21 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 30
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- "Status: Accepted"
- "Status: Under Consideration"
# Label to use when marking an issue as stale
staleLabel: "Status: Stale"
# 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.
If this is a **bug** and you can still reproduce this error on the `master` branch, please reply with any additional information you have about it in order to keep the issue open.
If this is a feature request, please consider whether it can be accomplished in another way. If it cannot, please elaborate on why it is core to this project and why you feel more than 80% of users would find this beneficial.
This issue will automatically be closed in 7 days if no further activity occurs. Thank you for all your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
-35
View File
@@ -1,35 +0,0 @@
name: Cleanup bad PR
on:
pull_request_target:
types: [opened, reopened]
permissions:
contents: read
jobs:
close-pr:
permissions:
pull-requests: write
runs-on: ubuntu-latest
if: "contains(github.event.pull_request.body, 'by deleting this comment block') || github.event.pull_request.body == ''"
steps:
- uses: actions-ecosystem/action-add-labels@v1
with:
labels: 'Type: Invalid'
- uses: actions-ecosystem/action-add-labels@v1
with:
labels: 'Type: Spam'
- uses: superbrothers/close-pull-request@v3
with:
# Optional. Post an issue comment just before closing a pull request.
comment: |
**You have created a Pull Request to the wrong repository.** This is the repository for [Minimal Mistakes][1], the free Jekyll theme. See [GitHub Docs: About pull requests][2] if you need help.
[1]: https://mmistakes.github.io/minimal-mistakes/
[2]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests
- uses: sudo-bot/action-pull-request-lock@v1.0.5
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
number: ${{ github.event.pull_request.number }}
lock-reason: spam
-47
View File
@@ -1,47 +0,0 @@
name: build
on:
push:
branches:
- master
workflow_dispatch: {}
repository_dispatch: {}
jobs:
build:
if: github.repository == 'mmistakes/minimal-mistakes'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.2'
- name: Setup cache for Bundler
id: cache
uses: actions/cache@v4
with:
path: |
docs/Gemfile.lock
docs/vendor/bundle
key: ${{ runner.os }}-bundler-${{ hashFiles('docs/Gemfile') }}
restore-keys: |
${{ runner.os }}-bundler-
- name: Install - Bundler
env:
MAKE: make -j2
working-directory: docs/
run: |
bundle config set path vendor/bundle
bundle install --jobs=4 --retry=3
bundle clean
- name: Update Algolia index
working-directory: docs/
run: bundle exec jekyll algolia push
env:
ALGOLIA_API_KEY: ${{ secrets.ALGOLIA_API_KEY }}
continue-on-error: true
+7 -23
View File
@@ -1,32 +1,16 @@
# Vim
*~
*.sw[p_]
# IntelliJ IDEA
*.idea
# Sublime Text
*.gem
*.sublime-project
*.sublime-workspace
# Ruby Gem
*.gem
.bundle
Gemfile.lock
**/vendor/bundle
# Node.js and NPM
node_modules
npm-debug.log*
package-lock.json
codekit-config.json
# macOS
.DS_Store
# Jekyll generated files
.jekyll-cache
.jekyll-metadata
.sass-cache
_asset_bundler_cache
_site
codekit-config.json
example/_site
Gemfile.lock
node_modules
npm-debug.log*
vendor/bundle
+241 -652
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,2 +1,2 @@
source "https://rubygems.org"
gemspec
gemspec
+2 -2
View File
@@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2013-2024 Michael Rose and contributors
Copyright (c) 2013-2019 Michael Rose and contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
SOFTWARE.
+31 -47
View File
@@ -1,13 +1,19 @@
# [Minimal Mistakes Jekyll theme](https://mmistakes.github.io/minimal-mistakes/)
[![LICENSE](https://img.shields.io/badge/license-MIT-lightgrey.svg)](https://raw.githubusercontent.com/mmistakes/minimal-mistakes/master/LICENSE)
[![Jekyll](https://img.shields.io/badge/jekyll-%3E%3D%203.7-blue.svg)](https://jekyllrb.com/)
[![Jekyll](https://img.shields.io/badge/jekyll-%3E%3D%203.6-blue.svg)](https://jekyllrb.com/)
[![Ruby gem](https://img.shields.io/gem/v/minimal-mistakes-jekyll.svg)](https://rubygems.org/gems/minimal-mistakes-jekyll)
[![Tip Me via PayPal](https://img.shields.io/badge/PayPal-tip%20me-green.svg?logo=paypal)](https://www.paypal.me/mmistakes)
Minimal Mistakes is a flexible two-column Jekyll theme, perfect for building personal sites, blogs, and portfolios. As the name implies, styling is purposely minimalistic to be enhanced and customized by you :smile:.
:sparkles: See what's new in the [CHANGELOG](CHANGELOG.md).
**Note:** The theme uses the [jekyll-include-cache](https://github.com/benbalter/jekyll-include-cache) plugin which will need to be installed in your `Gemfile` and must be retained in the `plugins` array of `_config.yml`. Otherwise you'll encounter `Unknown tag 'include_cached'` errors at build.
**If you enjoy this theme, please consider [supporting me](https://www.paypal.me/mmistakes) to continue developing and maintaining it.**
[![Support via PayPal](https://cdn.rawgit.com/twolfson/paypal-github-button/1.0.0/dist/button.svg)](https://www.paypal.me/mmistakes)
**Note:** The theme uses the [jekyll-include-cache](https://github.com/benbalter/jekyll-include-cache) plugin which will need to be installed in your `Gemfile` and added to the `plugins` array of `_config.yml`. Otherwise you'll throw `Unknown tag 'include_cached'` errors at build.
[![Minimal Mistakes live preview][2]][1]
@@ -25,25 +31,25 @@ Minimal Mistakes is a flexible two-column Jekyll theme, perfect for building per
- Several responsive layout options (single, archive index, search, splash, and paginated home page).
- Optimized for search engines with support for [Twitter Cards](https://dev.twitter.com/cards/overview) and [Open Graph](http://ogp.me/) data.
- Optional [header images](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#headers), [custom sidebars](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#sidebars), [table of contents](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#table-of-contents), [galleries](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#gallery), related posts, [breadcrumb links](https://mmistakes.github.io/minimal-mistakes/docs/configuration/#breadcrumb-navigation-beta), [navigation lists](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#navigation-list), and more.
- Commenting support (powered by [Disqus](https://disqus.com/), [Facebook](https://developers.facebook.com/docs/plugins/comments), Google+, [Discourse](https://www.discourse.org/), static-based via [Staticman](https://staticman.net/), [utterances](https://utteranc.es/), and [giscus](https://giscus.app/)).
- Commenting support (powered by [Disqus](https://disqus.com/), [Facebook](https://developers.facebook.com/docs/plugins/comments), Google+, [Discourse](https://www.discourse.org/), static-based via [Staticman](https://staticman.net/), and [utterances](https://utteranc.es/)).
- [Google Analytics](https://www.google.com/analytics/) support.
- UI localized text in English (default), Arabic (عربي), Brazilian Portuguese (Português brasileiro), Bulgarian, Catalan, Chinese, Czech, Danish, Dutch, Finnish, French (Français), German (Deutsch), Greek, Hebrew, Hindi (हिंदी), Hungarian, Indonesian, Irish (Gaeilge), Italian (Italiano), Japanese, Kiswahili, Korean, Malayalam, Myanmar (Burmese), Nepali (Nepalese), Norwegian (Norsk), Persian (فارسی), Polish, Punjabi (ਪੰਜਾਬੀ), Romanian, Russian, Slovak, Spanish (Español), Swedish, Thai, Turkish (Türkçe), Ukrainian (Українська) and Vietnamese.
- UI localized text in English (default), Brazilian Portuguese (Português brasileiro), Catalan, Chinese, Danish, Dutch, French (Français), German (Deutsch), Greek, Hindi (हिंदी), Hungarian, Indonesian, Italian (Italiano), Japanese, Korean, Malayalam, Nepali (Nepalese), Persian (فارسی), Polish, Punjabi (ਪੰਜਾਬੀ), Romanian, Russian, Slovak, Spanish (Español), Swedish, Thai, Turkish (Türkçe), and Vietnamese.
## Skins (color variations)
This theme comes in nine different skins (in addition to the default one).
This theme comes in nine different skins (including the default one).
| `air` | `contrast` | `dark` |
| --- | --- | --- |
| [![air skin](https://mmistakes.github.io/minimal-mistakes/assets/images/air-skin-archive.png)](https://mmistakes.github.io/minimal-mistakes/assets/images/air-skin-archive-large.png) | [![contrast skin](https://mmistakes.github.io/minimal-mistakes/assets/images/contrast-skin-archive.png)](https://mmistakes.github.io/minimal-mistakes/assets/images/contrast-skin-archive-large.png) | [![dark skin](https://mmistakes.github.io/minimal-mistakes/assets/images/dark-skin-archive.png)](https://mmistakes.github.io/minimal-mistakes/assets/images/dark-skin-archive-large.png) |
| ![air skin](https://mmistakes.github.io/minimal-mistakes/assets/images/air-skin-archive.png) | ![contrast skin](https://mmistakes.github.io/minimal-mistakes/assets/images/contrast-skin-archive.png) | ![dark skin](https://mmistakes.github.io/minimal-mistakes/assets/images/dark-skin-archive.png) |
| `dirt` | `mint` | `sunrise` |
| --- | --- | --- |
| [![dirt skin](https://mmistakes.github.io/minimal-mistakes/assets/images/dirt-skin-archive.png)](https://mmistakes.github.io/minimal-mistakes/assets/images/dirt-skin-archive-large.png) | [![mint skin](https://mmistakes.github.io/minimal-mistakes/assets/images/mint-skin-archive.png)](https://mmistakes.github.io/minimal-mistakes/assets/images/mint-skin-archive-large.png) | [![sunrise skin](https://mmistakes.github.io/minimal-mistakes/assets/images/sunrise-skin-archive.png)](https://mmistakes.github.io/minimal-mistakes/assets/images/sunrise-skin-archive-large.png) |
| ![dirt skin](https://mmistakes.github.io/minimal-mistakes/assets/images/dirt-skin-archive.png) | ![mint skin](https://mmistakes.github.io/minimal-mistakes/assets/images/mint-skin-archive.png) | ![sunrise skin](https://mmistakes.github.io/minimal-mistakes/assets/images/sunrise-skin-archive.png) |
| `aqua` | `neon` | `plum` |
| --- | --- | --- |
| [![aqua skin](https://mmistakes.github.io/minimal-mistakes/assets/images/aqua-skin-archive.png)](https://mmistakes.github.io/minimal-mistakes/assets/images/aqua-skin-archive-large.png) | [![neon skin](https://mmistakes.github.io/minimal-mistakes/assets/images/neon-skin-archive.png)](https://mmistakes.github.io/minimal-mistakes/assets/images/neon-skin-archive-large.png) | [![plum skin](https://mmistakes.github.io/minimal-mistakes/assets/images/plum-skin-archive.png)](https://mmistakes.github.io/minimal-mistakes/assets/images/plum-skin-archive-large.png) |
| ![aqua skin](https://mmistakes.github.io/minimal-mistakes/assets/images/aqua-skin-archive.png) | ![neon skin](https://mmistakes.github.io/minimal-mistakes/assets/images/neon-skin-archive.png) | ![plum skin](https://mmistakes.github.io/minimal-mistakes/assets/images/plum-skin-archive.png) |
## Demo pages
@@ -110,54 +116,33 @@ To install:
source "https://rubygems.org"
gem "github-pages", group: :jekyll_plugins
gem "jekyll-include-cache", group: :jekyll_plugins
```
2. Add `jekyll-include-cache` to the `plugins` array of your `_config.yml`.
3. Fetch and update bundled gems by running the following [Bundler](https://bundler.io/) command:
3. Fetch and update bundled gems by running the following [Bundler](http://bundler.io/) command:
```bash
bundle
```
4. Add `remote_theme: "mmistakes/minimal-mistakes@4.27.1"` to your `_config.yml` file. Remove any other `theme:` or `remote_theme:` entry.
4. Add `remote_theme: "mmistakes/minimal-mistakes@4.17.1"` to your `_config.yml` file. Remove any other `theme:` or `remote_theme:` entry.
<!--
Dev note: The version number is currently hard-coded in these files:
- package.json
- README.md (this file)
- docs/_data/theme.yml
- docs/_pages/home.md (in Front Matter "excerpt")
`package.json` holds the authoritative version number, and the others can be updated with `bundle exec rake version`.
The following files should also be regenerated:
- _includes/copyright.html, _includes/copyright.js, _sass/minimal-mistakes/_copyright.scss
(Run `bundle exec rake clean` then `bundle exec rake copyright` - all three references `package.json`)
- assets/js/main.min.js (Run `bundle exec rake js`, references `_includes/copyright.js`)
*Tip*: The default Rake task will update all of the above files at once.
Additionally, the license year is hard-coded in these files and are NOT covered by a Rake task:
- README.md (this file, near the end)
- LICENSE
-->
**Looking for an example?** Use the [Minimal Mistakes remote theme starter](https://github.com/mmistakes/mm-github-pages-starter/generate) for the quickest method of getting a GitHub Pages hosted site up and running. Generate a new repository from the starter, replace sample content with your own, and configure as needed.
**Looking for an example?** Fork the [Minimal Mistakes remote theme starter](https://github.com/mmistakes/mm-github-pages-starter) for the quickest method of getting a GitHub Pages hosted site up and running. Replace sample content with your own and configure as needed.
## Usage
For detailed instructions on how to configure, customize, add/migrate content, and more read the [theme's documentation](https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/).
---
## Contributing
Found a typo in the documentation or interested in [fixing a bug](https://github.com/mmistakes/minimal-mistakes/issues)? Then by all means [submit an issue](https://github.com/mmistakes/minimal-mistakes/issues/new) or [pull request](https://help.github.com/articles/using-pull-requests/). If this is your first pull request, it may be helpful to read up on the [GitHub Flow](https://guides.github.com/introduction/flow/) first.
Having trouble working with the theme? Found a typo in the documentation? Interested in adding a feature or [fixing a bug](https://github.com/mmistakes/minimal-mistakes/issues)? Then by all means [submit an issue](https://github.com/mmistakes/minimal-mistakes/issues/new) or [pull request](https://help.github.com/articles/using-pull-requests/). If this is your first pull request, it may be helpful to read up on the [GitHub Flow](https://guides.github.com/introduction/flow/) first.
For help with using the theme or general Jekyll support questions, please use the [Jekyll Talk forums](https://talk.jekyllrb.com/).
Minimal Mistakes has been designed as a base for you to customize and fit your site's unique needs. Please keep this in mind when requesting features and/or submitting pull requests. If it's not something that most people will use, I probably won't consider it. When in doubt ask.
This goes for author sidebar links and "share button" additions -- I have no intention of merging in every possibly option, the essentials are there to get you started :smile:.
### Pull Requests
@@ -175,6 +160,8 @@ To set up your environment to develop this theme, run `bundle install`.
To test the theme, run `bundle exec rake preview` and open your browser at `http://localhost:4000/test/`. This starts a Jekyll server using content in the `test/` directory. As modifications are made to the theme and test site, it will regenerate and you should see the changes in the browser after a refresh.
---
## Credits
### Creator
@@ -187,7 +174,7 @@ To test the theme, run `bundle exec rake preview` and open your browser at `http
### Icons + Demo Images:
- [The Noun Project](https://thenounproject.com) - Garrett Knoll, Arthur Shlain, and [tracy tam](https://thenounproject.com/tracytam)
- [The Noun Project](https://thenounproject.com) -- Garrett Knoll, Arthur Shlain, and [tracy tam](https://thenounproject.com/tracytam)
- [Font Awesome](http://fontawesome.io/)
- [Unsplash](https://unsplash.com/)
@@ -204,13 +191,14 @@ To test the theme, run `bundle exec rake preview` and open your browser at `http
- [Gumshoe](https://github.com/cferdinandi/gumshoe)
- [jQuery throttle / debounce](http://benalman.com/projects/jquery-throttle-debounce-plugin/)
- [Lunr](http://lunrjs.com)
- [Clipboard.js](https://clipboardjs.com)
---
## License
The MIT License (MIT)
Copyright (c) 2013-2024 Michael Rose and contributors
Copyright (c) 2013-2019 Michael Rose and contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -250,7 +238,7 @@ Breakpoint is distributed under the terms of the [MIT/GPL Licenses](http://opens
Minimal Mistakes incorporates [FitVids.js](https://github.com/davatron5000/FitVids.js/),
Copyright (c) 2013 Dave Rubert and Chris Coyier.
FitVids is distributed under the terms of the [WTFPL License](http://www.wtfpl.net/).
FitVids is distributed under the terms of the [WTFPL License](http://sam.zoy.org/wtfpl/).
Minimal Mistakes incorporates [Magnific Popup](http://dimsemenov.com/plugins/magnific-popup/),
Copyright (c) 2014-2016 Dmitry Semenov, http://dimsemenov.com.
@@ -262,7 +250,7 @@ Smooth Scroll is distributed under the terms of the [MIT License](http://opensou
Minimal Mistakes incorporates [Gumshoejs](http://github.com/cferdinandi/gumshoe),
Copyright (c) 2019 Chris Ferdinandi.
Gumshoejs is distributed under the terms of the [MIT License](http://opensource.org/licenses/MIT).
Smooth Scroll is distributed under the terms of the [MIT License](http://opensource.org/licenses/MIT).
Minimal Mistakes incorporates [jQuery throttle / debounce](http://benalman.com/projects/jquery-throttle-debounce-plugin/),
Copyright (c) 2010 "Cowboy" Ben Alman.
@@ -283,7 +271,3 @@ Pure Liquid Jekyll Table of Contents is distributed under the terms of the [MIT
Minimal Mistakes incorporates [Lunr](http://lunrjs.com),
Copyright (c) 2018 Oliver Nightingale.
Lunr is distributed under the terms of the [MIT License](http://opensource.org/licenses/MIT).
Minimal Mistakes incorporates [clipboard.js](https://clipboardjs.com/),
Copyright (c) 2021 Zeno Rocha.
Clipboard.js is distributed under the terms of the [MIT License](https://opensource.org/licenses/MIT).
+2 -137
View File
@@ -1,15 +1,6 @@
require "bundler/gem_tasks"
require "jekyll"
require "json"
require "listen"
require "rake/clean"
require "shellwords"
require "time"
require "yaml"
task :default => %i[copyright changelog js version]
package_json = JSON.parse(File.read("package.json"))
def listen_ignore_paths(base, options)
[
@@ -74,7 +65,8 @@ task :preview do
puts " Halting auto-regeneration."
exit 0
end
sleep
loop { sleep 1000 }
end
rescue ThreadError
# You pressed Ctrl-C, oh my!
@@ -82,130 +74,3 @@ task :preview do
Jekyll::Commands::Serve.process(options)
end
task :history => :changelog
task :changelog => "docs/_docs/18-history.md"
file "docs/_docs/18-history.md" => "CHANGELOG.md" do |t|
front_matter = {
title: "History",
classes: "wide",
permalink: "/docs/history/",
excerpt: "Change log of enhancements and bug fixes made to the theme.",
sidebar: {
nav: "docs",
},
last_modified_at: Time.now.iso8601,
toc: false,
}
# https://stackoverflow.com/a/49553523/5958455
front_matter = JSON.parse(JSON.dump(front_matter))
File.open(t.name, "w") do |f|
f.puts front_matter.to_yaml
f.puts "---"
f.puts ""
f.puts "<!--\n Sourced from CHANGELOG.md\n See Rakefile `task :changelog` for details\n-->"
f.puts ""
f.puts "{% raw %}"
# Remove H1
changelog = File.read(t.prerequisites.first)
.gsub(/^# [^\n]*$/m, "")
.gsub(/\(#(\d+)\)$/m, "[#\\1](https://github.com/mmistakes/minimal-mistakes/issues/\\1)")
.strip
f.write changelog
f.puts ""
f.puts "{% endraw %}"
end
end
COPYRIGHT_LINES = [
"Minimal Mistakes Jekyll Theme #{package_json["version"]} by Michael Rose",
"Copyright 2013-#{Time.now.year} Michael Rose - mademistakes.com | @mmistakes",
"Free for personal and commercial use under the MIT license",
"https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE",
]
COPYRIGHT_FILES = [
"_includes/copyright.html",
"_includes/copyright.js",
"_sass/minimal-mistakes/_copyright.scss",
]
def genenerate_copyright_file(filename, header, prefix, footer)
File.open(filename, "w") do |f|
f.puts header
COPYRIGHT_LINES.each do |line|
f.puts "#{prefix}#{line}"
end
f.puts footer
end
end
file "_includes/copyright.html" => "package.json" do |t|
genenerate_copyright_file(t.name, "<!--", " ", "-->")
end
file "_includes/copyright.js" => "package.json" do |t|
genenerate_copyright_file(t.name, "/*!", " * ", " */")
end
file "_sass/minimal-mistakes/_copyright.scss" => "package.json" do |t|
genenerate_copyright_file(t.name, "/*!", " * ", " */")
end
task :copyright => COPYRIGHT_FILES
CLEAN.include(*COPYRIGHT_FILES)
JS_FILES = ["assets/js/vendor/jquery/jquery-3.6.0.js"] + Dir.glob("assets/js/plugins/*.js") + ["assets/js/_main.js"]
JS_TARGET = "assets/js/main.min.js"
task :js => JS_TARGET
file JS_TARGET => ["_includes/copyright.js"] + JS_FILES do |t|
sh Shellwords.join(%w[npx uglifyjs -c --comments /@mmistakes/ --source-map -m -o] +
[t.name] + t.prerequisites)
end
task :watch_js do
listener = Listen.to(
"assets/js",
ignore: /main\.min\.js$/,
) do |modified, added, removed|
Rake::Task[:js].invoke
end
trap("INT") do
listener.stop
exit 0
end
begin
listener.start
sleep
rescue ThreadError
end
end
task :version => ["docs/_data/theme.yml", "README.md", "docs/_pages/home.md"]
file "docs/_data/theme.yml" => "package.json" do |t|
theme = { "version" => package_json["version"] }
File.open(t.name, "w") do |f|
f.puts "# for use with in-page templates"
f.puts theme.to_yaml
end
end
file "README.md" => "package.json" do |t|
content = File.read(t.name)
content = content.gsub(/(mmistakes\/minimal-mistakes@)[\d.]+/, '\1' + package_json["version"])
File.write(t.name, content)
end
file "docs/_pages/home.md" => "package.json" do |t|
content = File.read(t.name)
content = content.gsub(/(\breleases\/tag\/|Latest release v)[\d.]+/, '\1' + package_json["version"])
File.write(t.name, content)
end
task :gem do
sh 'gem build minimal-mistakes-jekyll.gemspec'
end
+23 -55
View File
@@ -16,7 +16,6 @@ minimal_mistakes_skin : "default" # "air", "aqua", "contrast", "dark", "dirt"
# Site Settings
locale : "en-US"
rtl : # true, false (default) # turns direction of the page into right to left for RTL languages
title : "Site Title"
title_separator : "-"
subtitle : # site tagline that appears below site title in masthead
@@ -28,13 +27,10 @@ repository : # GitHub username/repo-name e.g. "mmistakes/minimal-m
teaser : # path of fallback teaser image, e.g. "/assets/images/500x300.png"
logo : # path of logo image to display in the masthead, e.g. "/assets/images/88x88.png"
masthead_title : # overrides the website title displayed in the masthead, use " " for no title
breadcrumbs : # true, false (default)
# breadcrumbs : false # true, false (default)
words_per_minute : 200
enable_copy_code_button : # true, false (default)
copyright : # "copyright" name, defaults to site.title
copyright_url : # "copyright" URL, defaults to site.url
comments:
provider : # false (default), "disqus", "discourse", "facebook", "staticman", "staticman_v2", "utterances", "giscus", "custom"
provider : # false (default), "disqus", "discourse", "facebook", "staticman", "staticman_v2", "utterances", "custom"
disqus:
shortname : # https://help.disqus.com/customer/portal/articles/466208-what-s-a-shortname-
discourse:
@@ -47,32 +43,31 @@ comments:
utterances:
theme : # "github-light" (default), "github-dark"
issue_term : # "pathname" (default)
giscus:
repo_id : # Shown during giscus setup at https://giscus.app
category_name : # Full text name of the category
category_id : # Shown during giscus setup at https://giscus.app
discussion_term : # "pathname" (default), "url", "title", "og:title"
reactions_enabled : # '1' for enabled (default), '0' for disabled
theme : # "light" (default), "dark", "dark_dimmed", "transparent_dark", "preferred_color_scheme"
strict : # 1 for enabled, 0 for disabled (default)
input_position : # "top", "bottom" # The comment input box will be placed above or below the comments
emit_metadata : # 1 for enabled, 0 for disabled (default) # https://github.com/giscus/giscus/blob/main/ADVANCED-USAGE.md#imetadatamessage
lang : # "en" (default)
lazy : # true, false # Loading of the comments will be deferred until the user scrolls near the comments container.
staticman:
branch : # "master"
endpoint : # "https://{your Staticman v3 API}/v3/entry/github/"
staticman:
allowedFields : # ['name', 'email', 'url', 'message']
branch : # "master"
commitMessage : # "New comment by {fields.name}"
filename : # comment-{@timestamp}
format : # "yml"
moderation : # true
path : # "/_data/comments/{options.slug}" (default)
requiredFields : # ['name', 'email', 'message']
transforms:
email : # "md5"
generatedFields:
date:
type : # "date"
options:
format : # "iso8601" (default), "timestamp-seconds", "timestamp-milliseconds"
endpoint : # URL of your own deployment with trailing slash, will fallback to the public instance
reCaptcha:
siteKey :
secret :
atom_feed:
path : # blank (default) uses feed.xml
hide : # true, false (default)
search : # true, false (default)
search_full_content : # true, false (default)
search_provider : # lunr (default), algolia, google
lunr:
search_within_pages : # true, false (default)
algolia:
application_id : # YOUR_APPLICATION_ID
index_name : # YOUR_INDEX_NAME
@@ -84,9 +79,8 @@ google:
# SEO Related
google_site_verification :
bing_site_verification :
naver_site_verification :
yandex_site_verification :
baidu_site_verification :
naver_site_verification :
# Social Sharing
twitter:
@@ -105,7 +99,7 @@ social:
# Analytics
analytics:
provider : # false (default), "google", "google-universal", "google-gtag", "custom"
provider : false # false (default), "google", "google-universal", "custom"
google:
tracking_id :
anonymize_ip : # true, false (default)
@@ -121,7 +115,7 @@ author:
links:
- label: "Email"
icon: "fas fa-fw fa-envelope-square"
# url: "mailto:your.name@email.com"
# url: mailto:your.name@email.com
- label: "Website"
icon: "fas fa-fw fa-link"
# url: "https://your-website.com"
@@ -184,10 +178,8 @@ exclude:
- gulpfile.js
- LICENSE
- log
- minimal-mistakes-jekyll.gemspec
- node_modules
- package.json
- package-lock.json
- Rakefile
- README
- tmp
@@ -228,33 +220,9 @@ sass:
# Outputting
permalink: /:categories/:title/
timezone: # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
# Pagination with jekyll-paginate
paginate: 5 # amount of posts to show
paginate_path: /page:num/
# Pagination with jekyll-paginate-v2
# See https://github.com/sverrirs/jekyll-paginate-v2/blob/master/README-GENERATOR.md#site-configuration
# for configuration details
pagination:
# Set enabled to true to use paginate v2
# enabled: true
debug: false
collection: 'posts'
per_page: 10
permalink: '/page/:num/'
title: ':title - page :num'
limit: 0
sort_field: 'date'
sort_reverse: true
category: 'posts'
tag: ''
locale: ''
trail:
before: 2
after: 2
timezone: # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
# Plugins (previously gems:)
+84 -659
View File
File diff suppressed because it is too large Load Diff
View File
+13 -5
View File
@@ -10,21 +10,29 @@
{% assign title = post.title %}
{% endif %}
<div class="{{ include.type | default: 'list' }}__item">
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork"{% if post.locale %} lang="{{ post.locale }}"{% endif %}>
<div class="{{ include.type | default: "list" }}__item">
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
{% if include.type == "grid" and teaser %}
<div class="archive__item-teaser">
<img src="{{ teaser | relative_url }}" alt="">
<img src=
{% if teaser contains "://" %}
"{{ teaser }}"
{% else %}
"{{ teaser | relative_url }}"
{% endif %}
alt="">
</div>
{% endif %}
<h2 class="archive__item-title no_toc" itemprop="headline">
<h2 class="archive__item-title" itemprop="headline">
{% if post.link %}
<a href="{{ post.link }}">{{ title }}</a> <a href="{{ post.url | relative_url }}" rel="permalink"><i class="fas fa-link" aria-hidden="true" title="permalink"></i><span class="sr-only">Permalink</span></a>
{% else %}
<a href="{{ post.url | relative_url }}" rel="permalink">{{ title }}</a>
{% endif %}
</h2>
{% include page__meta.html type=include.type %}
{% if post.read_time %}
<p class="page__meta"><i class="far fa-clock" aria-hidden="true"></i> {% include read-time.html %}</p>
{% endif %}
{% if post.excerpt %}<p class="archive__item-excerpt" itemprop="description">{{ post.excerpt | markdownify | strip_html | truncate: 160 }}</p>{% endif %}
</article>
</div>
+1 -1
View File
@@ -1,6 +1,6 @@
<!--
<li>
<a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fas fa-fw" aria-hidden="true"></i> Custom Social Profile Link
</a>
</li>
+78 -61
View File
@@ -1,22 +1,39 @@
{% assign author = page.author | default: page.authors[0] | default: site.author %}
{% assign author = site.data.authors[author] | default: author %}
<div itemscope itemtype="https://schema.org/Person" class="h-card">
<div itemscope itemtype="https://schema.org/Person">
{% if author.avatar %}
<div class="author__avatar">
<a href="{{ author.home | default: '/' | absolute_url }}">
<img src="{{ author.avatar | relative_url }}" alt="{{ author.name }}" itemprop="image" class="u-photo">
</a>
{% if author.avatar contains "://" %}
{% assign author_src = author.avatar %}
{% else %}
{% assign author_src = author.avatar | relative_url %}
{% endif %}
{% if author.home %}
{% if author.home contains "://" %}
{% assign author_link = author.home %}
{% else %}
{% assign author_link = author.home | relative_url %}
{% endif %}
<a href="{{ author_link }}">
<img src="{{ author_src }}" alt="{{ author.name }}" itemprop="image">
</a>
{% else %}
<img src="{{ author_src }}" alt="{{ author.name }}" itemprop="image">
{% endif %}
</div>
{% endif %}
<div class="author__content">
<h3 class="author__name p-name" itemprop="name">
<a class="u-url" rel="me" href="{{ author.home | default: '/' | absolute_url }}" itemprop="url">{{ author.name }}</a>
</h3>
{% if author.home %}
<a href="{{ author_link }}"><h3 class="author__name" itemprop="name">{{ author.name }}</h3></a>
{% else %}
<h3 class="author__name" itemprop="name">{{ author.name }}</h3>
{% endif %}
{% if author.bio %}
<div class="author__bio p-note" itemprop="description">
<div class="author__bio" itemprop="description">
{{ author.bio | markdownify }}
</div>
{% endif %}
@@ -27,159 +44,159 @@
<ul class="author__urls social-icons">
{% if author.location %}
<li itemprop="homeLocation" itemscope itemtype="https://schema.org/Place">
<i class="fas fa-fw fa-map-marker-alt" aria-hidden="true"></i> <span itemprop="name" class="p-locality">{{ author.location }}</span>
<i class="fas fa-fw fa-map-marker-alt" aria-hidden="true"></i> <span itemprop="name">{{ author.location }}</span>
</li>
{% endif %}
{% if author.links %}
{% for link in author.links %}
{% if link.label and link.url %}
<li><a href="{{ link.url }}" rel="nofollow noopener noreferrer me"{% if link.url contains 'http' %} itemprop="sameAs"{% endif %}><i class="{{ link.icon | default: 'fas fa-link' }}" aria-hidden="true"></i><span class="label">{{ link.label }}</span></a></li>
<li><a href="{{ link.url }}" rel="nofollow noopener noreferrer"><i class="{{ link.icon | default: 'fas fa-link' }}" aria-hidden="true"></i> {{ link.label }}</a></li>
{% endif %}
{% endfor %}
{% endif %}
{% if author.uri %}
<li>
<a href="{{ author.uri }}" itemprop="url" rel="me">
<i class="fas fa-fw fa-link" aria-hidden="true"></i><span class="label">{{ site.data.ui-text[site.locale].website_label | default: "Website" }}</span>
<a href="{{ author.uri }}" itemprop="url">
<i class="fas fa-fw fa-link" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].website_label | default: "Website" }}
</a>
</li>
{% endif %}
{% if author.email %}
<li>
<a href="mailto:{{ author.email }}" rel="me" class="u-email">
<a href="mailto:{{ author.email }}">
<meta itemprop="email" content="{{ author.email }}" />
<i class="fas fa-fw fa-envelope-square" aria-hidden="true"></i><span class="label">{{ site.data.ui-text[site.locale].email_label | default: "Email" }}</span>
<i class="fas fa-fw fa-envelope-square" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].email_label | default: "Email" }}
</a>
</li>
{% endif %}
{% if author.keybase %}
<li>
<a href="https://keybase.io/{{ author.keybase }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-keybase" aria-hidden="true"></i><span class="label">Keybase</span>
<a href="https://keybase.io/{{ author.keybase }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fas fa-fw fa-key" aria-hidden="true"></i> Keybase
</a>
</li>
{% endif %}
{% if author.twitter %}
<li>
<a href="https://twitter.com/{{ author.twitter }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-twitter-square" aria-hidden="true"></i><span class="label">Twitter</span>
<a href="https://twitter.com/{{ author.twitter }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
</a>
</li>
{% endif %}
{% if author.facebook %}
<li>
<a href="https://www.facebook.com/{{ author.facebook }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-facebook-square" aria-hidden="true"></i><span class="label">Facebook</span>
<a href="https://www.facebook.com/{{ author.facebook }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-facebook-square" aria-hidden="true"></i> Facebook
</a>
</li>
{% endif %}
{% if author.linkedin %}
<li>
<a href="https://www.linkedin.com/in/{{ author.linkedin }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-linkedin" aria-hidden="true"></i><span class="label">LinkedIn</span>
<a href="https://www.linkedin.com/in/{{ author.linkedin }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-linkedin" aria-hidden="true"></i> LinkedIn
</a>
</li>
{% endif %}
{% if author.xing %}
<li>
<a href="https://www.xing.com/profile/{{ author.xing }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-xing-square" aria-hidden="true"></i><span class="label">XING</span>
<a href="https://www.xing.com/profile/{{ author.xing }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-xing-square" aria-hidden="true"></i> XING
</a>
</li>
{% endif %}
{% if author.instagram %}
<li>
<a href="https://instagram.com/{{ author.instagram }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-instagram" aria-hidden="true"></i><span class="label">Instagram</span>
<a href="https://instagram.com/{{ author.instagram }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-instagram" aria-hidden="true"></i> Instagram
</a>
</li>
{% endif %}
{% if author.tumblr %}
<li>
<a href="https://{{ author.tumblr }}.tumblr.com" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-tumblr-square" aria-hidden="true"></i><span class="label">Tumblr</span>
<a href="https://{{ author.tumblr }}.tumblr.com" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-tumblr-square" aria-hidden="true"></i> Tumblr
</a>
</li>
{% endif %}
{% if author.bitbucket %}
<li>
<a href="https://bitbucket.org/{{ author.bitbucket }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-bitbucket" aria-hidden="true"></i><span class="label">Bitbucket</span>
<a href="https://bitbucket.org/{{ author.bitbucket }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-bitbucket" aria-hidden="true"></i> Bitbucket
</a>
</li>
{% endif %}
{% if author.github %}
<li>
<a href="https://github.com/{{ author.github }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-github" aria-hidden="true"></i><span class="label">GitHub</span>
<a href="https://github.com/{{ author.github }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-github" aria-hidden="true"></i> GitHub
</a>
</li>
{% endif %}
{% if author.gitlab %}
<li>
<a href="https://gitlab.com/{{ author.gitlab }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-gitlab" aria-hidden="true"></i><span class="label">GitLab</span>
<a href="https://gitlab.com/{{ author.gitlab }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-gitlab" aria-hidden="true"></i> GitLab
</a>
</li>
{% endif %}
{% if author.stackoverflow %}
<li>
<a href="https://stackoverflow.com/users/{{ author.stackoverflow }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-stack-overflow" aria-hidden="true"></i><span class="label">Stack Overflow</span>
<a href="https://stackoverflow.com/users/{{ author.stackoverflow }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-stack-overflow" aria-hidden="true"></i> Stack Overflow
</a>
</li>
{% endif %}
{% if author.lastfm %}
<li>
<a href="https://last.fm/user/{{ author.lastfm }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-lastfm-square" aria-hidden="true"></i><span class="label">Last.fm</span>
<a href="https://last.fm/user/{{ author.lastfm }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-lastfm-square" aria-hidden="true"></i> Last.fm
</a>
</li>
{% endif %}
{% if author.dribbble %}
<li>
<a href="https://dribbble.com/{{ author.dribbble }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-dribbble" aria-hidden="true"></i><span class="label">Dribbble</span>
<a href="https://dribbble.com/{{ author.dribbble }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-dribbble" aria-hidden="true"></i> Dribbble
</a>
</li>
{% endif %}
{% if author.pinterest %}
<li>
<a href="https://www.pinterest.com/{{ author.pinterest }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-pinterest" aria-hidden="true"></i><span class="label">Pinterest</span>
<a href="https://www.pinterest.com/{{ author.pinterest }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-pinterest" aria-hidden="true"></i> Pinterest
</a>
</li>
{% endif %}
{% if author.foursquare %}
<li>
<a href="https://foursquare.com/{{ author.foursquare }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-foursquare" aria-hidden="true"></i><span class="label">Foursquare</span>
<a href="https://foursquare.com/{{ author.foursquare }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-foursquare" aria-hidden="true"></i> Foursquare
</a>
</li>
{% endif %}
{% if author.steam %}
<li>
<a href="https://steamcommunity.com/id/{{ author.steam }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-steam" aria-hidden="true"></i><span class="label">Steam</span>
<a href="https://steamcommunity.com/id/{{ author.steam }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-steam" aria-hidden="true"></i> Steam
</a>
</li>
{% endif %}
@@ -187,14 +204,14 @@
{% if author.youtube %}
{% if author.youtube contains "://" %}
<li>
<a href="{{ author.youtube }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-youtube" aria-hidden="true"></i><span class="label">YouTube</span>
<a href="{{ author.youtube }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-youtube" aria-hidden="true"></i> YouTube
</a>
</li>
{% elsif author.youtube %}
{% else author.youtube %}
<li>
<a href="https://www.youtube.com/user/{{ author.youtube }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-youtube" aria-hidden="true"></i><span class="label">YouTube</span>
<a href="https://www.youtube.com/user/{{ author.youtube }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-youtube" aria-hidden="true"></i> YouTube
</a>
</li>
{% endif %}
@@ -202,40 +219,40 @@
{% if author.soundcloud %}
<li>
<a href="https://soundcloud.com/{{ author.soundcloud }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-soundcloud" aria-hidden="true"></i><span class="label">SoundCloud</span>
<a href="https://soundcloud.com/{{ author.soundcloud }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-soundcloud" aria-hidden="true"></i> SoundCloud
</a>
</li>
{% endif %}
{% if author.weibo %}
<li>
<a href="https://www.weibo.com/{{ author.weibo }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-weibo" aria-hidden="true"></i><span class="label">Weibo</span>
<a href="https://www.weibo.com/{{ author.weibo }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-weibo" aria-hidden="true"></i> Weibo
</a>
</li>
{% endif %}
{% if author.flickr %}
<li>
<a href="https://www.flickr.com/{{ author.flickr }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-flickr" aria-hidden="true"></i><span class="label">Flickr</span>
<a href="https://www.flickr.com/{{ author.flickr }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-flickr" aria-hidden="true"></i> Flickr
</a>
</li>
{% endif %}
{% if author.codepen %}
<li>
<a href="https://codepen.io/{{ author.codepen }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-codepen" aria-hidden="true"></i><span class="label">CodePen</span>
<a href="https://codepen.io/{{ author.codepen }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-codepen" aria-hidden="true"></i> CodePen
</a>
</li>
{% endif %}
{% if author.vine %}
<li>
<a href="https://vine.co/u/{{ author.vine }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-vine" aria-hidden="true"></i><span class="label">{{ site.data.ui-text[site.locale].email_label | default: "Email" }}</span>
<a href="https://vine.co/u/{{ author.vine }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
<i class="fab fa-fw fa-vine" aria-hidden="true"></i> Vine
</a>
</li>
{% endif %}
View File
+3 -4
View File
@@ -19,18 +19,17 @@
{% for crumb in crumbs offset: 1 %}
{% if forloop.first %}
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href="{{ '/' | relative_url }}" itemprop="item"><span itemprop="name">{{ site.data.ui-text[site.locale].breadcrumb_home_label | default: "Home" }}</span></a>
<a href="{{ site.url }}{{ site.baseurl }}/" itemprop="item"><span itemprop="name">{{ site.data.ui-text[site.locale].breadcrumb_home_label | default: "Home" }}</span></a>
<meta itemprop="position" content="{{ i }}" />
</li>
<span class="sep">{{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}</span>
{% endif %}
{% if forloop.last %}
<li class="current"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>{{ page.title }}</li>
<li class="current">{{ page.title }}</li>
{% else %}
{% assign i = i | plus: 1 %}
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href="{{ crumb | downcase | replace: '%20', '-' | prepend: path_type | prepend: crumb_path | relative_url }}" itemprop="item"><span itemprop="name">{{ crumb | url_decode | replace: '-', ' ' | capitalize }}</span></a>
<a href="{{ crumb | downcase | replace: '%20', '-' | prepend: path_type | prepend: crumb_path | relative_url }}" itemprop="item"><span itemprop="name">{{ crumb | replace: '-', ' ' | replace: '%20', ' ' | capitalize }}</span></a>
<meta itemprop="position" content="{{ i }}" />
</li>
<span class="sep">{{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}</span>
+3
View File
@@ -0,0 +1,3 @@
<!--[if lt IE 9]>
<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="https://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
<![endif]-->
+10 -3
View File
@@ -6,13 +6,20 @@
{% endcase %}
{% if site.category_archive.path %}
{% assign categories_sorted = page.categories | sort_natural %}
{% comment %}
<!-- Sort alphabetically regardless of case e.g. a B c d E -->
<!-- modified from http://www.codeofclimber.ru/2015/sorting-site-tags-in-jekyll/ -->
{% endcomment %}
{% capture page_categories %}{% for category in page.categories %}{{ category | downcase }}|{{ category }}{% unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %}
{% assign category_hashes = page_categories | split: ',' | sort %}
<p class="page__taxonomy">
<strong><i class="fas fa-fw fa-folder-open" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].categories_label | default: "Categories:" }} </strong>
<span itemprop="keywords">
{% for category_word in categories_sorted %}
<a href="{{ category_word | slugify | prepend: path_type | prepend: site.category_archive.path | relative_url }}" class="page__taxonomy-item p-category" rel="tag">{{ category_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
{% for hash in category_hashes %}
{% assign keyValue = hash | split: '|' %}
{% capture category_word %}{{ keyValue[1] | strip_newlines }}{% endcapture %}
<a href="{{ category_word | slugify | prepend: path_type | prepend: site.category_archive.path | relative_url }}" class="page__taxonomy-item" rel="tag">{{ category_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
{% endfor %}
</span>
</p>
+1 -1
View File
@@ -13,7 +13,7 @@
<p class="comment__date">
{% if include.date %}
{% if include.index %}<a href="#comment{{ include.index }}" itemprop="url">{% endif %}
<time datetime="{{ include.date | date_to_xmlschema }}" itemprop="datePublished">{{ include.date | date: "%B %-d, %Y at %I:%M %p" }}</time>
<time datetime="{{ include.date | date_to_xmlschema }}" itemprop="datePublished">{{ include.date | date: "%B %d, %Y at %I:%M %p" }}</time>
{% if include.index %}</a>{% endif %}
{% endif %}
</p>
@@ -1,3 +0,0 @@
<!-- start custom comments scripts -->
<!-- end custom comments scripts -->
+3 -3
View File
@@ -1,10 +1,10 @@
{% if site.comments.disqus.shortname %}
<script>
var disqus_config = function () {
this.page.url = "{{ page.url | absolute_url }}"; /* Replace PAGE_URL with your page's canonical URL variable */
this.page.identifier = "{{ page.id }}"; /* Replace PAGE_IDENTIFIER with your page's unique identifier variable */
this.page.url = "{{ page.url | absolute_url }}"; // Replace PAGE_URL with your page's canonical URL variable
this.page.identifier = "{{ page.id }}"; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
};
(function() { /* DON'T EDIT BELOW THIS LINE */
(function() { // DON'T EDIT BELOW THIS LINE
var d = document, s = d.createElement('script');
s.src = 'https://{{ site.comments.disqus.shortname }}.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
-34
View File
@@ -1,34 +0,0 @@
<script>
'use strict';
(function () {
var commentContainer = document.querySelector('#giscus-comments');
if (!commentContainer) {
return;
}
var script = document.createElement('script');
script.setAttribute('src', 'https://giscus.app/client.js');
script.setAttribute('data-repo', '{{ site.repository | downcase }}');
script.setAttribute('data-repo-id', '{{ site.comments.giscus.repo_id }}');
script.setAttribute('data-category', '{{ site.comments.giscus.category_name }}');
script.setAttribute('data-category-id', '{{ site.comments.giscus.category_id }}');
script.setAttribute('data-mapping', '{{ site.comments.giscus.discussion_term | default: "pathname" }}');
script.setAttribute('data-strict', '{{ site.comments.giscus.strict | default: 0 }}');
script.setAttribute('data-reactions-enabled', '{{ site.comments.giscus.reactions_enabled | default: 1 }}');
script.setAttribute('data-emit-metadata', '{{ site.comments.giscus.emit_metadata | default: 0 }}');
script.setAttribute('data-input-position', '{{ site.comments.giscus.input_position | default: "top" }}');
script.setAttribute('data-theme', '{{ site.comments.giscus.theme | default: "light" }}');
script.setAttribute('data-lang', '{{ site.comments.giscus.lang | default: "en" }}');
{% if site.comments.giscus.lazy %}
script.setAttribute('data-loading', 'lazy');
{% endif %}
script.setAttribute('crossorigin', 'anonymous');
script.setAttribute('async', '');
commentContainer.appendChild(script);
})();
</script>
+1 -3
View File
@@ -12,9 +12,7 @@
{% include /comments-providers/staticman_v2.html %}
{% when "utterances" %}
{% include /comments-providers/utterances.html %}
{% when "giscus" %}
{% include /comments-providers/giscus.html %}
{% when "custom" %}
{% include /comments-providers/custom_scripts.html %}
{% include /comments-providers/custom.html %}
{% endcase %}
{% endif %}
@@ -1,4 +1,4 @@
{% if site.repository and site.comments.staticman.branch %}
{% if site.repository and site.staticman.branch %}
<script>
(function ($) {
$('#new_comment').submit(function () {
@@ -12,7 +12,6 @@
script.setAttribute('src', 'https://utteranc.es/client.js');
script.setAttribute('repo', '{{ site.repository }}');
script.setAttribute('issue-term', '{{ site.comments.utterances.issue_term | default: "pathname" }}');
{% if site.comments.utterances.label %}script.setAttribute('label', '{{ site.comments.utterances.label }}');{% endif %}
script.setAttribute('theme', '{{ site.comments.utterances.theme | default: "github-light" }}');
script.setAttribute('crossorigin', 'anonymous');
+15 -36
View File
@@ -12,28 +12,19 @@
<section class="fb-comments" data-href="{{ page.url | absolute_url }}" data-mobile="true" data-num-posts="{{ site.comments.facebook.num_posts | default: 5 }}" data-width="100%" data-colorscheme="{{ site.comments.facebook.colorscheme | default: 'light' }}"></section>
{% when "staticman_v2" %}
<section id="static-comments">
{% if site.repository and site.comments.staticman.branch %}
{% if site.repository and site.staticman.branch %}
<!-- Start static comments -->
<div class="js-comments">
{% if site.data.comments[page.slug] %}
<h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_title | default: "Comments" }}</h4>
{% assign comments = site.data.comments[page.slug] %}
<!-- In order to sort by date we must have an array of objects, not an array of arrays, so
create a new array of plain comment objects and then sort by the comment date. -->
{% assign commentObjects = '' | split: '' %}
{% for comment in comments %}
{% assign commentObject = comment[1] %}
{% assign commentObjects = commentObjects | push: commentObject %}
{% endfor %}
{% assign comments = commentObjects | sort: "date" %}
{% assign comments = site.data.comments[page.slug] | sort %}
{% for comment in comments %}
{% assign email = comment.email %}
{% assign name = comment.name %}
{% assign url = comment.url %}
{% assign date = comment.date %}
{% assign message = comment.message %}
{% assign email = comment[1].email %}
{% assign name = comment[1].name %}
{% assign url = comment[1].url %}
{% assign date = comment[1].date %}
{% assign message = comment[1].message %}
{% include comment.html index=forloop.index email=email name=name url=url date=date message=message %}
{% endfor %}
{% endif %}
@@ -44,7 +35,7 @@
<div class="page__comments-form">
<h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_label | default: "Leave a Comment" }}</h4>
<p class="small">{{ site.data.ui-text[site.locale].comment_form_info | default: "Your email address will not be published. Required fields are marked" }} <span class="required">*</span></p>
<form id="new_comment" class="page__comments-form js-form form" method="post" action="{{ site.comments.staticman.endpoint }}{{ site.repository }}/{{ site.comments.staticman.branch }}/comments">
<form id="new_comment" class="page__comments-form js-form form" method="post" action="{{ site.staticman.endpoint | default: 'https://api.staticman.net/v2/entry/' }}{{ site.repository }}/{{ site.staticman.branch }}/comments">
<div class="form__spinner">
<i class="fas fa-spinner fa-spin fa-3x fa-fw"></i>
<span class="sr-only">{{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }}</span>
@@ -100,23 +91,14 @@
<div class="js-comments">
{% if site.data.comments[page.slug] %}
<h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_title | default: "Comments" }}</h4>
{% assign comments = site.data.comments[page.slug] %}
<!-- In order to sort by date we must have an array of objects, not an array of arrays, so
create a new array of plain comment objects and then sort by the comment date. -->
{% assign commentObjects = '' | split: '' %}
{% for comment in comments %}
{% assign commentObject = comment[1] %}
{% assign commentObjects = commentObjects | push: commentObject %}
{% endfor %}
{% assign comments = commentObjects | sort: "date" %}
{% assign comments = site.data.comments[page.slug] | sort %}
{% for comment in comments %}
{% assign email = comment.email %}
{% assign name = comment.name %}
{% assign url = comment.url %}
{% assign date = comment.date %}
{% assign message = comment.message %}
{% assign email = comment[1].email %}
{% assign name = comment[1].name %}
{% assign url = comment[1].url %}
{% assign date = comment[1].date %}
{% assign message = comment[1].message %}
{% include comment.html index=forloop.index email=email name=name url=url date=date message=message %}
{% endfor %}
{% endif %}
@@ -171,10 +153,7 @@
{% when "utterances" %}
<h4 class="page__comments-title">{{ comments_label }}</h4>
<section id="utterances-comments"></section>
{% when "giscus" %}
<h4 class="page__comments-title">{{ comments_label }}</h4>
<section id="giscus-comments"></section>
{% when "custom" %}
{% include /comments-providers/custom.html %}
<section id="custom-comments"></section>
{% endcase %}
</div>
-6
View File
@@ -1,6 +0,0 @@
<!--
Minimal Mistakes Jekyll Theme 4.27.1 by Michael Rose
Copyright 2013-2025 Michael Rose - mademistakes.com | @mmistakes
Free for personal and commercial use under the MIT license
https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
-->
-6
View File
@@ -1,6 +0,0 @@
/*!
* Minimal Mistakes Jekyll Theme 4.27.1 by Michael Rose
* Copyright 2013-2025 Michael Rose - mademistakes.com | @mmistakes
* Free for personal and commercial use under the MIT license
* https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
*/
+14 -8
View File
@@ -1,13 +1,19 @@
{% assign entries = include.entries | default: site[include.collection] | where_exp: "post", "post.hidden != true" %}
{% assign entries = site[include.collection] %}
{% if include.sort_by %}
{% assign entries = entries | sort: include.sort_by %}
{% endif %}
{% if include.sort_order == 'reverse' %}
{% assign entries = entries | reverse %}
{% if include.sort_by == 'title' %}
{% if include.sort_order == 'reverse' %}
{% assign entries = entries | sort: 'title' | reverse %}
{% else %}
{% assign entries = entries | sort: 'title' %}
{% endif %}
{% elsif include.sort_by == 'date' %}
{% if include.sort_order == 'reverse' %}
{% assign entries = entries | sort: 'date' | reverse %}
{% else %}
{% assign entries = entries | sort: 'date' %}
{% endif %}
{% endif %}
{%- for post in entries -%}
{% include archive-single.html type=include.type %}
{% include archive-single.html %}
{%- endfor -%}
+16 -4
View File
@@ -7,12 +7,24 @@
<div class="feature__wrapper">
{% for f in feature_row %}
{% if f.url contains "://" %}
{% capture f_url %}{{ f.url }}{% endcapture %}
{% else %}
{% capture f_url %}{{ f.url | relative_url }}{% endcapture %}
{% endif %}
<div class="feature__item{% if include.type %}--{{ include.type }}{% endif %}">
<div class="archive__item">
{% if f.image_path %}
<div class="archive__item-teaser">
<img src="{{ f.image_path | relative_url }}"
alt="{% if f.alt %}{{ f.alt }}{% endif %}">
<img src=
{% if f.image_path contains "://" %}
"{{ f.image_path }}"
{% else %}
"{{ f.image_path | relative_url }}"
{% endif %}
alt="{% if f.alt %}{{ f.alt }}{% endif %}">
{% if f.image_caption %}
<span class="archive__item-caption">{{ f.image_caption | markdownify | remove: "<p>" | remove: "</p>" }}</span>
{% endif %}
@@ -31,11 +43,11 @@
{% endif %}
{% if f.url %}
<p><a href="{{ f.url | relative_url }}" class="btn {{ f.btn_class }}">{{ f.btn_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a></p>
<p><a href="{{ f_url }}" class="btn {{ f.btn_class }}">{{ f.btn_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a></p>
{% endif %}
</div>
</div>
</div>
{% endfor %}
</div>
</div>
+9 -8
View File
@@ -1,11 +1,12 @@
<figure class="{{ include.class }}">
{%- if include.popup -%}<a href="{{ include.image_path | relative_url }}" class="image-popup"{% if include.caption %} title="{{ include.caption | markdownify | strip_html }}"{% endif %}>{%- endif -%}
<img src="{{ include.image_path | relative_url }}"
alt="{% if include.alt %}{{ include.alt | escape_once }}{% endif %}">
{%- if include.popup -%}</a>{%- endif -%}
{%- if include.caption -%}
<img src=
{% if include.image_path contains "://" %}
"{{ include.image_path }}"
{% else %}
"{{ include.image_path | relative_url }}"
{% endif %}
alt="{% if include.alt %}{{ include.alt }}{% endif %}">
{% if include.caption %}
<figcaption>
{{ include.caption | markdownify | remove: "<p>" | remove: "</p>" }}
</figcaption>
{%- endif -%}
</figure>
</figcaption>{% endif %}</figure>
+2 -4
View File
@@ -12,10 +12,8 @@
{% endfor %}
{% endif %}
{% unless site.atom_feed.hide %}
<li><a href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ '/feed.xml' | relative_url }}{% endif %}"><i class="fas fa-fw fa-rss-square" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].feed_label | default: "Feed" }}</a></li>
{% endunless %}
<li><a href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ '/feed.xml' | relative_url }}{% endif %}"><i class="fas fa-fw fa-rss-square" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].feed_label | default: "Feed" }}</a></li>
</ul>
</div>
<div class="page__footer-copyright">&copy; {{ site.time | date: '%Y' }} <a href="{{ site.copyright_url | default: site.url }}">{{ site.copyright | default: site.title }}</a>. {{ site.data.ui-text[site.locale].powered_by | default: "Powered by" }} <a href="https://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/jekyll-themes/minimal-mistakes/" rel="nofollow">Minimal Mistakes</a>.</div>
<div class="page__footer-copyright">&copy; {{ site.time | date: '%Y' }} {{ site.name | default: site.title }}. {{ site.data.ui-text[site.locale].powered_by | default: "Powered by" }} <a href="https://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+23 -7
View File
@@ -19,17 +19,33 @@
<figure class="{{ gallery_layout }} {{ include.class }}">
{% for img in gallery %}
{% if img.url %}
<a href="{{ img.url | relative_url }}"
{% if img.title %}title="{{ img.title }}"{% endif %}>
<img src="{{ img.image_path | relative_url }}"
alt="{% if img.alt %}{{ img.alt }}{% endif %}">
<a href=
{% if img.url contains "://" %}
"{{ img.url }}"
{% else %}
"{{ img.url | relative_url }}"
{% endif %}
{% if img.title %}title="{{ img.title }}"{% endif %}
>
<img src=
{% if img.image_path contains "://" %}
"{{ img.image_path }}"
{% else %}
"{{ img.image_path | relative_url }}"
{% endif %}
alt="{% if img.alt %}{{ img.alt }}{% endif %}">
</a>
{% else %}
<img src="{{ img.image_path | relative_url }}"
alt="{% if img.alt %}{{ img.alt }}{% endif %}">
<img src=
{% if img.image_path contains "://" %}
"{{ img.image_path }}"
{% else %}
"{{ img.image_path | relative_url }}"
{% endif %}
alt="{% if img.alt %}{{ img.alt }}{% endif %}">
{% endif %}
{% endfor %}
{% if include.caption %}
<figcaption>{{ include.caption | markdownify | remove: "<p>" | remove: "</p>" }}</figcaption>
{% endif %}
</figure>
</figure>
+23 -10
View File
@@ -2,27 +2,40 @@
{% include seo.html %}
{% unless site.atom_feed.hide %}
<link href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ '/feed.xml' | relative_url }}{% endif %}" type="application/atom+xml" rel="alternate" title="{{ site.title }} Feed">
{% endunless %}
<link href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ '/feed.xml' | relative_url }}{% endif %}" type="application/atom+xml" rel="alternate" title="{{ site.title }} Feed">
{%- comment %} https://docs.google.com/presentation/d/1rmxwWa9P6_xHqonmh5ONXRS-jPc5XKbnv99Rjkhe04s/present {% endcomment -%}
<!-- https://t.co/dKP3o1e -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script>
document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
{% if site.enable_copy_code_button -%}
window.enable_copy_code_button = true;
{%- endif %}
</script>
<!-- For all browsers -->
<link rel="stylesheet" href="{{ '/assets/css/main.css' | relative_url }}">
<link rel="preload" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@latest/css/all.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@latest/css/all.min.css"></noscript>
<!--[if IE]>
<style>
/* old IE unsupported flexbox fixes */
.greedy-nav .site-title {
padding-right: 3em;
}
.greedy-nav button {
position: absolute;
top: 0;
right: 0;
height: 100%;
}
</style>
<![endif]-->
{% if site.head_scripts %}
{% for script in site.head_scripts %}
<script src="{{ script | relative_url }}"></script>
{% if script contains "://" %}
{% capture script_path %}{{ script }}{% endcapture %}
{% else %}
{% capture script_path %}{{ script | relative_url }}{% endcapture %}
{% endif %}
<script src="{{ script_path }}"></script>
{% endfor %}
{% endif %}
+15 -8
View File
@@ -1,11 +1,15 @@
{% capture logo_path %}{{ site.logo }}{% endcapture %}
{% if site.logo contains "://" %}
{% capture logo_path %}{{ site.logo }}{% endcapture %}
{% else %}
{% capture logo_path %}{{ site.logo }}{% endcapture %}
{% endif %}
<div class="masthead">
<div class="masthead__inner-wrap">
<div class="masthead__menu">
<nav id="site-nav" class="greedy-nav">
{% unless logo_path == empty %}
<a class="site-logo" href="{{ '/' | relative_url }}"><img src="{{ logo_path | relative_url }}" alt="{{ site.masthead_title | default: site.title }}"></a>
<a class="site-logo" href="{{ '/' | relative_url }}"><img src="{{ logo_path | relative_url }}" alt=""></a>
{% endunless %}
<a class="site-title" href="{{ '/' | relative_url }}">
{{ site.masthead_title | default: site.title }}
@@ -13,19 +17,22 @@
</a>
<ul class="visible-links">
{%- for link in site.data.navigation.main -%}
{%- if link.url contains '://' -%}
{%- assign url = link.url -%}
{%- else -%}
{%- assign url = link.url | relative_url -%}
{%- endif -%}
<li class="masthead__menu-item">
<a
href="{{ link.url | relative_url }}"
{% if link.description %} title="{{ link.description }}"{% endif %}
{% if link.target %} target="{{ link.target }}"{% endif %}
>{{ link.title }}</a>
<a href="{{ url }}" {% if link.description %}title="{{ link.description }}"{% endif %}>{{ link.title }}</a>
</li>
{%- endfor -%}
</ul>
{% if site.search == true %}
<button class="search__toggle" type="button">
<span class="visually-hidden">{{ site.data.ui-text[site.locale].search_label | default: "Toggle search" }}</span>
<i class="fas fa-search"></i>
<svg class="icon" width="16" height="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.99 16">
<path d="M15.5,13.12L13.19,10.8a1.69,1.69,0,0,0-1.28-.55l-0.06-.06A6.5,6.5,0,0,0,5.77,0,6.5,6.5,0,0,0,2.46,11.59a6.47,6.47,0,0,0,7.74.26l0.05,0.05a1.65,1.65,0,0,0,.5,1.24l2.38,2.38A1.68,1.68,0,0,0,15.5,13.12ZM6.4,2A4.41,4.41,0,1,1,2,6.4,4.43,4.43,0,0,1,6.4,2Z" transform="translate(-.01)"></path>
</svg>
</button>
{% endif %}
<button class="greedy-nav__toggle hidden" type="button">
+37 -17
View File
@@ -1,27 +1,47 @@
{% assign navigation = site.data.navigation[include.nav] %}
<nav class="nav__list">
{% if page.sidebar.title %}<h3 class="nav__title" style="padding-left: 0;">{{ page.sidebar.title }}</h3>{% endif %}
<input id="ac-toc" name="accordion-toc" type="checkbox" />
<label for="ac-toc">{{ site.data.ui-text[site.locale].menu_label | default: "Toggle Menu" }}</label>
<ul class="nav__items">
{% for navname in include.nav %}
{% assign navigation = site.data.navigation[navname] %}
{% for nav in navigation %}
<li>
{% if nav.url %}
<a href="{{ nav.url | relative_url }}"><span class="nav__sub-title">{{ nav.title }}</span></a>
{% for nav in navigation %}
<li>
{% if nav.url %}
{% comment %} internal/external URL check {% endcomment %}
{% if nav.url contains "://" %}
{% assign nav_url = nav.url %}
{% else %}
<span class="nav__sub-title">{{ nav.title }}</span>
{% assign nav_url = nav.url | relative_url %}
{% endif %}
{% if nav.children != null %}
<ul>
{% for child in nav.children %}
<li><a href="{{ child.url | relative_url }}"{% if child.url == page.url %} class="active"{% endif %}>{{ child.title }}</a></li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
<a href="{{ nav_url }}"><span class="nav__sub-title">{{ nav.title }}</span></a>
{% else %}
<span class="nav__sub-title">{{ nav.title }}</span>
{% endif %}
{% if nav.children != null %}
<ul>
{% for child in nav.children %}
{% comment %} internal/external URL check {% endcomment %}
{% if child.url contains "://" %}
{% assign child_url = child.url %}
{% else %}
{% assign child_url = child.url | relative_url %}
{% endif %}
{% comment %} set "active" class on current page {% endcomment %}
{% if child.url == page.url %}
{% assign active = "active" %}
{% else %}
{% assign active = "" %}
{% endif %}
<li><a href="{{ child_url }}" class="{{ active }}">{{ child.title }}</a></li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
</nav>
</nav>
-6
View File
@@ -1,6 +0,0 @@
{% assign date_format = site.date_format | default: "%B %-d, %Y" %}
{% if page.last_modified_at %}
<p class="page__date"><strong><i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}</strong> <time class="dt-published" datetime="{{ page.last_modified_at | date: "%Y-%m-%d" }}">{{ page.last_modified_at | date: date_format }}</time></p>
{% elsif page.date %}
<p class="page__date"><strong><i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}</strong> <time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}">{{ page.date | date: date_format }}</time></p>
{% endif %}
+33 -14
View File
@@ -1,13 +1,25 @@
{% capture overlay_img_path %}{{ page.header.overlay_image | relative_url }}{% endcapture %}
{% if page.header.image contains "://" %}
{% capture img_path %}{{ page.header.image }}{% endcapture %}
{% else %}
{% capture img_path %}{{ page.header.image | relative_url }}{% endcapture %}
{% endif %}
{% if page.header.overlay_filter contains "gradient" %}
{% if page.header.cta_url contains "://" %}
{% capture cta_path %}{{ page.header.cta_url }}{% endcapture %}
{% else %}
{% capture cta_path %}{{ page.header.cta_url | relative_url }}{% endcapture %}
{% endif %}
{% if page.header.overlay_image contains "://" %}
{% capture overlay_img_path %}{{ page.header.overlay_image }}{% endcapture %}
{% elsif page.header.overlay_image %}
{% capture overlay_img_path %}{{ page.header.overlay_image | relative_url }}{% endcapture %}
{% endif %}
{% if page.header.overlay_filter contains "rgba" %}
{% capture overlay_filter %}{{ page.header.overlay_filter }}{% endcapture %}
{% elsif page.header.overlay_filter contains "rgba" %}
{% capture overlay_filter %}{{ page.header.overlay_filter }}{% endcapture %}
{% capture overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}){% endcapture %}
{% elsif page.header.overlay_filter %}
{% capture overlay_filter %}rgba(0, 0, 0, {{ page.header.overlay_filter }}){% endcapture %}
{% capture overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}){% endcapture %}
{% endif %}
{% if page.header.image_description %}
@@ -19,7 +31,7 @@
{% assign image_description = image_description | markdownify | strip_html | strip_newlines | escape_once %}
<div class="page__hero{% if page.header.overlay_color or page.header.overlay_image %}--overlay{% endif %}"
style="{% if page.header.overlay_color %}background-color: {{ page.header.overlay_color | default: 'transparent' }};{% endif %} {% if overlay_img_path %}background-image: {% if overlay_filter %}{{ overlay_filter }}, {% endif %}url('{{ overlay_img_path }}');{% endif %}"
style="{% if page.header.overlay_color %}background-color: {{ page.header.overlay_color | default: 'transparent' }};{% endif %} {% if overlay_img_path %}background-image: {% if overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}), {% endif %}url('{{ overlay_img_path }}');{% endif %}"
>
{% if page.header.overlay_color or page.header.overlay_image %}
<div class="wrapper">
@@ -30,22 +42,29 @@
{{ page.title | default: site.title | markdownify | remove: "<p>" | remove: "</p>" }}
{% endif %}
</h1>
{% if page.tagline %}
<p class="page__lead">{{ page.tagline | markdownify | remove: "<p>" | remove: "</p>" }}</p>
{% elsif page.header.show_overlay_excerpt != false and page.excerpt %}
{% if page.header.show_overlay_excerpt != false and page.excerpt %}
<p class="page__lead">{{ page.excerpt | markdownify | remove: "<p>" | remove: "</p>" }}</p>
{% endif %}
{% include page__meta.html %}
{% if page.read_time %}
<p class="page__meta"><i class="far fa-clock" aria-hidden="true"></i> {% include read-time.html %}</p>
{% endif %}
{% if page.header.cta_url %}
<p><a href="{{ cta_path }}" class="btn btn--light-outline btn--large">{{ page.header.cta_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a></p>
{% endif %}
{% if page.header.actions %}
<p>
{% for action in page.header.actions %}
<a href="{{ action.url | relative_url }}" class="btn btn--light-outline btn--large">{{ action.label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a>
{% if action.url contains "://" %}
{% assign url = action.url %}
{% else %}
{% assign url = action.url | relative_url %}
{% endif %}
<a href="{{ url }}" class="btn btn--light-outline btn--large">{{ action.label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a>
{% endfor %}
</p>
{% endif %}
</div>
{% else %}
<img src="{{ page.header.image | relative_url }}" alt="{{ image_description }}" class="page__hero-image">
<img src="{{ img_path }}" alt="{{ image_description }}" class="page__hero-image">
{% endif %}
{% if page.header.caption %}
<span class="page__hero-caption">{{ page.header.caption | markdownify | remove: "<p>" | remove: "</p>" }}</span>
+4 -2
View File
@@ -1,2 +1,4 @@
{% assign video = page.header.video %}
{% include video id=video.id provider=video.provider danmaku=video.danmaku %}
{% capture video_id %}{{ page.header.video.id }}{% endcapture %}
{% capture video_provider %}{{ page.header.video.provider }}{% endcapture %}
{% include video id=video_id provider=video_provider %}
-31
View File
@@ -1,31 +0,0 @@
{% assign document = post | default: page %}
{% if document.read_time or document.show_date %}
<p class="page__meta">
{% if document.show_date and document.date %}
{% assign date = document.date %}
<span class="page__meta-date">
<i class="far {% if include.type == 'grid' and document.read_time and document.show_date %}fa-fw {% endif %}fa-calendar-alt" aria-hidden="true"></i>
{% assign date_format = site.date_format | default: "%B %-d, %Y" %}
<time datetime="{{ date | date_to_xmlschema }}">{{ date | date: date_format }}</time>
</span>
{% endif %}
{% if document.read_time and document.show_date %}<span class="page__meta-sep"></span>{% endif %}
{% if document.read_time %}
{% assign words_per_minute = document.words_per_minute | default: site.words_per_minute | default: 200 %}
{% assign words = document.content | strip_html | number_of_words %}
<span class="page__meta-readtime">
<i class="far {% if include.type == 'grid' and document.read_time and document.show_date %}fa-fw {% endif %}fa-clock" aria-hidden="true"></i>
{% if words < words_per_minute %}
{{ site.data.ui-text[site.locale].less_than | default: "less than" }} 1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
{% elsif words == words_per_minute %}
1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
{% else %}
{{ words | divided_by: words_per_minute }} {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
{% endif %}
</span>
{% endif %}
</p>
{% endif %}
-11
View File
@@ -1,11 +0,0 @@
{% assign posts = include.posts | where_exp: "post", "post.hidden != true" %}
<div class="page__related">
{% include before-related.html %}
<h2 class="page__related-title">{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}</h2>
<div class="grid__wrapper">
{% for post in posts limit:4 %}
{% if post.id == page.id %}{% continue %}{% endif %}
{% include archive-single.html type="grid" %}
{% endfor %}
</div>
</div>
-70
View File
@@ -1,70 +0,0 @@
{% if paginator.total_pages > 1 %}
<nav class="pagination">
{% assign paginate_path_last = site.paginate_path | split: '/' | last %}
{% assign first_page_path = paginator.first_page_path | default: site.paginate_path | replace: paginate_path_last, '' | replace: '//', '/' | relative_url %}
<ul>
{% comment %} Link for previous page {% endcomment %}
{% if paginator.previous_page %}
{% if paginator.previous_page == 1 %}
<li><a href="{{ first_page_path }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
{% else %}
<li><a href="{{ site.paginate_path | replace: ':num', paginator.previous_page | replace: '//', '/' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
{% endif %}
{% else %}
<li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</span></a></li>
{% endif %}
{% comment %} First page {% endcomment %}
{% if paginator.page == 1 %}
<li><a href="#" class="disabled current">1</a></li>
{% else %}
<li><a href="{{ first_page_path }}">1</a></li>
{% endif %}
{% assign page_start = 2 %}
{% if paginator.page > 4 %}
{% assign page_start = paginator.page | minus: 2 %}
{% comment %} Ellipsis for truncated links {% endcomment %}
<li><a href="#" class="disabled">&hellip;</a></li>
{% endif %}
{% assign page_end = paginator.total_pages | minus: 1 %}
{% assign pages_to_end = paginator.total_pages | minus: paginator.page %}
{% if pages_to_end > 4 %}
{% assign page_end = paginator.page | plus: 2 %}
{% endif %}
{% for index in (page_start..page_end) %}
{% if index == paginator.page %}
<li><a href="{{ site.paginate_path | replace: ':num', index | replace: '//', '/' | relative_url }}" class="disabled current">{{ index }}</a></li>
{% else %}
{% comment %} Distance from current page and this link {% endcomment %}
{% assign dist = paginator.page | minus: index %}
{% if dist < 0 %}
{% comment %} Distance must be a positive value {% endcomment %}
{% assign dist = 0 | minus: dist %}
{% endif %}
<li><a href="{{ site.paginate_path | replace: ':num', index | relative_url }}">{{ index }}</a></li>
{% endif %}
{% endfor %}
{% comment %} Ellipsis for truncated links {% endcomment %}
{% if pages_to_end > 3 %}
<li><a href="#" class="disabled">&hellip;</a></li>
{% endif %}
{% if paginator.page == paginator.total_pages %}
<li><a href="#" class="disabled current">{{ paginator.page }}</a></li>
{% else %}
<li><a href="{{ site.paginate_path | replace: ':num', paginator.total_pages | replace: '//', '/' | relative_url }}">{{ paginator.total_pages }}</a></li>
{% endif %}
{% comment %} Link next page {% endcomment %}
{% if paginator.next_page %}
<li><a href="{{ site.paginate_path | replace: ':num', paginator.next_page | replace: '//', '/' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a></li>
{% else %}
<li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</span></a></li>
{% endif %}
</ul>
</nav>
{% endif %}
-68
View File
@@ -1,68 +0,0 @@
<nav class="pagination">
<ul>
{% comment %} Link for previous page {% endcomment %}
{% if paginator.previous_page %}
{% if paginator.previous_page == 1 %}
<li><a href="{{ paginator.first_page_path | relative_url }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
{% else %}
<li><a href="{{ paginator.previous_page_path | relative_url }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
{% endif %}
{% else %}
<li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</span></a></li>
{% endif %}
{% comment %} Determine whether the first page and the last page are already included in trail {% endcomment %}
{% for trail in paginator.page_trail %}
{% if trail.num == paginator.first_page %}
{% assign has_first_page = true %}
{% elsif trail.num == paginator.last_page %}
{% assign has_last_page = true %}
{% endif %}
{% endfor %}
{% comment %} First page {% endcomment %}
{% unless has_first_page %}
{% if paginator.page == 1 %}
<li><a href="#" class="disabled current">1</a></li>
{% else %}
<li><a href="{{ paginator.first_page_path | relative_url }}">1</a></li>
{% endif %}
{% endunless %}
{% comment %} Ellipsis for truncated links {% endcomment %}
{% assign ellipsis_start = paginator.first_page | plus: 1 %}
{% if paginator.page_trail.first.num > ellipsis_start %}
<li><a href="#" class="disabled">&hellip;</a></li>
{% endif %}
{% comment %} Main pagination trail {% endcomment %}
{% for trail in paginator.page_trail %}
{% if paginator.page == trail.num %}
<li><a href="{{ trail.path | remove: 'index.html' | relative_url }}" class="disabled current">{{ trail.num }}</a></li>
{% else %}
<li><a href="{{ trail.path | remove: 'index.html' | relative_url }}">{{ trail.num }}</a></li>
{% endif %}
{% endfor %}
{% comment %} Ellipsis for truncated links {% endcomment %}
{% assign ellipsis_end = paginator.last_page | minus: 1 %}
{% if paginator.page_trail.last.num < ellipsis_end %}
<li><a href="#" class="disabled">&hellip;</a></li>
{% endif %}
{% unless has_last_page %}
{% if paginator.page == paginator.total_pages %}
<li><a href="#" class="disabled current">{{ paginator.page }}</a></li>
{% else %}
<li><a href="{{ paginator.last_page_path | remove: 'index.html' | relative_url }}">{{ paginator.total_pages }}</a></li>
{% endif %}
{% endunless %}
{% comment %} Link next page {% endcomment %}
{% if paginator.next_page %}
<li><a href="{{ paginator.next_page_path | remove: 'index.html' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a></li>
{% else %}
<li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</span></a></li>
{% endif %}
</ul>
</nav>
+67 -5
View File
@@ -1,7 +1,69 @@
{% if paginator.total_pages > 1 %}
{% if site.paginate %}
{% include paginator-v1.html %}
{% elsif site.pagination.enabled %}
{% include paginator-v2.html %}
{% endif %}
<nav class="pagination">
{% assign first_page_path = site.paginate_path | replace: 'page:num', '' | replace: '//', '/' | relative_url %}
<ul>
{% comment %} Link for previous page {% endcomment %}
{% if paginator.previous_page %}
{% if paginator.previous_page == 1 %}
<li><a href="{{ first_page_path }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
{% else %}
<li><a href="{{ site.paginate_path | replace: ':num', paginator.previous_page | replace: '//', '/' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
{% endif %}
{% else %}
<li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</span></a></li>
{% endif %}
{% comment %} First page {% endcomment %}
{% if paginator.page == 1 %}
<li><a href="#" class="disabled current">1</a></li>
{% else %}
<li><a href="{{ first_page_path }}">1</a></li>
{% endif %}
{% assign page_start = 2 %}
{% if paginator.page > 4 %}
{% assign page_start = paginator.page | minus: 2 %}
{% comment %} Ellipsis for truncated links {% endcomment %}
<li><a href="#" class="disabled">&hellip;</a></li>
{% endif %}
{% assign page_end = paginator.total_pages | minus: 1 %}
{% assign pages_to_end = paginator.total_pages | minus: paginator.page %}
{% if pages_to_end > 4 %}
{% assign page_end = paginator.page | plus: 2 %}
{% endif %}
{% for index in (page_start..page_end) %}
{% if index == paginator.page %}
<li><a href="{{ site.paginate_path | replace: ':num', index | replace: '//', '/' | relative_url }}" class="disabled current">{{ index }}</a></li>
{% else %}
{% comment %} Distance from current page and this link {% endcomment %}
{% assign dist = paginator.page | minus: index %}
{% if dist < 0 %}
{% comment %} Distance must be a positive value {% endcomment %}
{% assign dist = 0 | minus: dist %}
{% endif %}
<li><a href="{{ site.paginate_path | replace: ':num', index | relative_url }}">{{ index }}</a></li>
{% endif %}
{% endfor %}
{% comment %} Ellipsis for truncated links {% endcomment %}
{% if pages_to_end > 3 %}
<li><a href="#" class="disabled">&hellip;</a></li>
{% endif %}
{% if paginator.page == paginator.total_pages %}
<li><a href="#" class="disabled current">{{ paginator.page }}</a></li>
{% else %}
<li><a href="{{ site.paginate_path | replace: ':num', paginator.total_pages | replace: '//', '/' | relative_url }}">{{ paginator.total_pages }}</a></li>
{% endif %}
{% comment %} Link next page {% endcomment %}
{% if paginator.next_page %}
<li><a href="{{ site.paginate_path | replace: ':num', paginator.next_page | replace: '//', '/' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a></li>
{% else %}
<li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</span></a></li>
{% endif %}
</ul>
</nav>
{% endif %}
+3 -3
View File
@@ -1,14 +1,14 @@
{% if page.previous or page.next %}
<nav class="pagination">
{% if page.previous %}
<a href="{{ page.previous.url | relative_url }}" class="pagination--pager" title="{{ page.previous.title | markdownify | strip_html | strip}}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a>
<a href="{{ page.previous.url | relative_url }}" class="pagination--pager" title="{{ page.previous.title | markdownify | strip_html }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a>
{% else %}
<a href="#" class="pagination--pager disabled">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a>
{% endif %}
{% if page.next %}
<a href="{{ page.next.url | relative_url }}" class="pagination--pager" title="{{ page.next.title | markdownify | strip_html | strip}}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a>
<a href="{{ page.next.url | relative_url }}" class="pagination--pager" title="{{ page.next.title | markdownify | strip_html }}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a>
{% else %}
<a href="#" class="pagination--pager disabled">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a>
{% endif %}
</nav>
{% endif %}
{% endif %}
+1 -2
View File
@@ -1,4 +1,3 @@
{% assign posts = site.categories[include.taxonomy] | where_exp: "post", "post.hidden != true" %}
{%- for post in posts -%}
{%- for post in site.categories[include.taxonomy] -%}
{% include archive-single.html %}
{%- endfor -%}
+1 -2
View File
@@ -1,4 +1,3 @@
{% assign posts = site.tags[include.taxonomy] | where_exp: "post", "post.hidden != true" %}
{%- for post in posts -%}
{%- for post in site.tags[include.taxonomy] -%}
{% include archive-single.html %}
{%- endfor -%}
-37
View File
@@ -1,37 +0,0 @@
{% assign items_max = 0 %}
{% for item in include.taxonomies %}
{% if item[1].size > items_max %}
{% assign items_max = item[1].size %}
{% endif %}
{% endfor %}
<ul class="taxonomy__index">
{% for i in (1..items_max) reversed %}
{% for item in include.taxonomies %}
{% if item[1].size == i %}
<li>
<a href="#{{ item[0] | slugify }}">
<strong>{{ item[0] }}</strong> <span class="taxonomy__count">{{ i }}</span>
</a>
</li>
{% endif %}
{% endfor %}
{% endfor %}
</ul>
{% assign entries_layout = page.entries_layout | default: 'list' %}
{% for i in (1..items_max) reversed %}
{% for taxonomy in include.taxonomies %}
{% if taxonomy[1].size == i %}
<section id="{{ taxonomy[0] | slugify }}" class="taxonomy__section">
<h2 class="archive__subtitle">{{ taxonomy[0] }}</h2>
<div class="entries-{{ entries_layout }}">
{% for post in taxonomy.last %}
{% include archive-single.html type=entries_layout %}
{% endfor %}
</div>
<a href="#page-title" class="back-to-top">{{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} &uarr;</a>
</section>
{% endif %}
{% endfor %}
{% endfor %}
+15
View File
@@ -0,0 +1,15 @@
{% assign words_per_minute = page.words_per_minute | default: site.words_per_minute | default: 200 %}
{% if post.read_time %}
{% assign words = post.content | strip_html | number_of_words %}
{% elsif page.read_time %}
{% assign words = page.content | strip_html | number_of_words %}
{% endif %}
{% if words < words_per_minute %}
{{ site.data.ui-text[site.locale].less_than | default: "less than" }} 1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
{% elsif words == words_per_minute %}
1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
{% else %}
{{ words | divided_by:words_per_minute }} {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
{% endif %}
-16
View File
@@ -1,16 +0,0 @@
<script type="application/ld+json">
{
"@context": "https://schema.org",
{% if site.social.type == "Organization" -%}
"@type": "Organization",
"url": {{ '/' | absolute_url | jsonify }}{% if site.og_image %},
"logo": {{ site_og_image | jsonify }}{% endif %}{% if site.social.links %},
"sameAs": {{ site.social.links | jsonify }}{% endif %}
{%- else -%}
"@type": "Person",
"name": {{ site.social.name | default: site.name | jsonify }},
"url": {{ '/' | absolute_url | jsonify }}{% if site.social.links %},
"sameAs": {{ site.social.links | jsonify }}{% endif %}
{%- endif %}
}
</script>
+13 -2
View File
@@ -1,9 +1,15 @@
{% if site.footer_scripts %}
{% for script in site.footer_scripts %}
<script src="{{ script | relative_url }}"></script>
{% if script contains "://" %}
{% capture script_path %}{{ script }}{% endcapture %}
{% else %}
{% capture script_path %}{{ script | relative_url }}{% endcapture %}
{% endif %}
<script src="{{ script_path }}"></script>
{% endfor %}
{% else %}
<script src="{{ '/assets/js/main.min.js' | relative_url }}"></script>
<script src="https://kit.fontawesome.com/4eee35f757.js"></script>
{% endif %}
{% if site.search == true or page.layout == "search" %}
@@ -23,6 +29,11 @@
{% if site.after_footer_scripts %}
{% for script in site.after_footer_scripts %}
<script src="{{ script | relative_url }}"></script>
{% if script contains "://" %}
{% capture script_path %}{{ script }}{% endcapture %}
{% else %}
{% capture script_path %}{{ script | relative_url }}{% endcapture %}
{% endif %}
<script src="{{ script_path }}"></script>
{% endfor %}
{% endif %}
+51 -79
View File
@@ -1,82 +1,54 @@
<!-- Including InstantSearch.js library and styling -->
<script src="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch-theme-algolia.min.css">
<script>
// Including InstantSearch.js library and styling
const loadSearch = function() {
const loadCSS = function(src) {
var link = document.createElement('link');
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = src;
link.media = 'all';
document.head.appendChild(link);
};
var script = document.createElement('script');
script.setAttribute("type", "text/javascript");
script.setAttribute("src", "https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.js");
script.addEventListener("load", function() {
// Instantiating InstantSearch.js with Algolia credentials
const search = instantsearch({
appId: '{{ site.algolia.application_id }}',
apiKey: '{{ site.algolia.search_only_api_key }}',
indexName: '{{ site.algolia.index_name }}',
searchParameters: {
restrictSearchableAttributes: ['title', 'content']
}
});
const hitTemplate = function(hit) {
const url = hit.url;
const hightlight = hit._highlightResult;
const title = hightlight.title && hightlight.title.value || "";
const content = hightlight.html && hightlight.html.value || "";
return `
<div class="list__item">
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
<h2 class="archive__item-title" itemprop="headline"><a href="{{ site.baseurl }}${url}">${title}</a></h2>
<div class="archive__item-excerpt" itemprop="description">${content}</div>
</article>
</div>
`;
}
// Adding searchbar and results widgets
search.addWidget(
instantsearch.widgets.searchBox({
container: '.search-searchbar',
{% unless site.algolia.powered_by == false %}poweredBy: true,{% endunless %}
placeholder: '{{ site.data.ui-text[site.locale].search_placeholder_text | default: "Enter your search term..." }}'
})
);
search.addWidget(
instantsearch.widgets.hits({
container: '.search-hits',
templates: {
item: hitTemplate,
empty: '{{ site.data.ui-text[site.locale].search_algolia_no_results | default: "No results" }}',
}
})
);
if (!search.started) {
search.start();
}
});
document.body.appendChild(script);
loadCSS("https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.css");
loadCSS("https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch-theme-algolia.min.css");
};
// Starting the search only when toggle is clicked
$(document).ready(function() {
var scriptLoaded = false;
$(".search__toggle").on("click", function() {
if (!scriptLoaded) {
loadSearch();
scriptLoaded = true;
}
});
// Instanciating InstantSearch.js with Algolia credentials
const search = instantsearch({
appId: '{{ site.algolia.application_id }}',
apiKey: '{{ site.algolia.search_only_api_key }}',
indexName: '{{ site.algolia.index_name }}',
searchParameters: {
restrictSearchableAttributes: [
'title',
'content'
]
}
});
const hitTemplate = function(hit) {
const url = hit.url;
const title = hit._highlightResult.title.value;
const content = hit._highlightResult.html.value;
return `
<div class="list__item">
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
<h2 class="archive__item-title" itemprop="headline"><a href="{{ site.baseurl }}${url}">${title}</a></h2>
<div class="archive__item-excerpt" itemprop="description">${content}</div>
</article>
</div>
`;
}
// Adding searchbar and results widgets
search.addWidget(
instantsearch.widgets.searchBox({
container: '.search-searchbar',
{% unless site.algolia.powered_by == false %}poweredBy: true,{% endunless %}
placeholder: '{{ site.data.ui-text[site.locale].search_placeholder_text | default: "Enter your search term..." }}'
})
);
search.addWidget(
instantsearch.widgets.hits({
container: '.search-hits',
templates: {
item: hitTemplate
}
})
);
// Starting the search
search.start();
</script>
+2 -2
View File
@@ -2,7 +2,7 @@
{%- assign search_provider = site.search_provider | default: "lunr" -%}
{%- case search_provider -%}
{%- when "lunr" -%}
<form class="search-content__form" onkeydown="return event.key != 'Enter';" role="search">
<form class="search-content__form" onkeydown="return event.key != 'Enter';">
<label class="sr-only" for="search">
{{ site.data.ui-text[site.locale].search_label_text | default: 'Enter your search term...' }}
</label>
@@ -10,7 +10,7 @@
</form>
<div id="results" class="results"></div>
{%- when "google" -%}
<form onsubmit="return googleCustomSearchExecute();" id="cse-search-box-form-id" role="search">
<form onsubmit="return googleCustomSearchExecute();" id="cse-search-box-form-id">
<label class="sr-only" for="cse-search-input-box-id">
{{ site.data.ui-text[site.locale].search_label_text | default: 'Enter your search term...' }}
</label>
+53 -26
View File
@@ -1,21 +1,28 @@
<!-- begin _includes/seo.html -->
{%- assign title_separator = site.title_separator | default: '-' -%}
{%- if site.url -%}
{%- assign seo_url = site.url | append: site.baseurl -%}
{%- endif -%}
{%- assign seo_url = seo_url | default: site.github.url -%}
{%- assign page_title = page.title | default: site.title | replace: '|', '&#124;' -%}
{%- if page_title contains site.title -%}
{%- assign seo_title = page_title | replace: '|', '&#124;' -%}
{%- else -%}
{%- assign seo_title = page_title | append: " " | append: title_separator | append: " " | append: site.title | replace: '|', '&#124;' -%}
{% assign title_separator = site.title_separator | default: '-' | replace: '|', '&#124;' %}
{%- if page.title -%}
{%- assign seo_title = page.title | append: " " | append: title_separator | append: " " | append: site.title -%}
{%- endif -%}
{%- assign page_title = page_title | markdownify | strip_html | strip_newlines | escape_once -%}
{%- assign seo_title = seo_title | markdownify | strip_html | strip_newlines | escape_once -%}
{%- if seo_title -%}
{%- assign seo_title = seo_title | markdownify | strip_html | strip_newlines | escape_once -%}
{%- endif -%}
{%- assign canonical_url = page.canonical_url | default: page.url | replace: "/index.html", "/" | absolute_url %}
{% if page.canonical_url %}
{%- assign canonical_url = page.canonical_url %}
{% else %}
{%- assign canonical_url = page.url | replace: "index.html", "" | absolute_url %}
{% endif %}
{%- assign seo_description = page.description | default: page.excerpt | default: site.description -%}
{%- if seo_description -%}
{%- assign seo_description = seo_description | markdownify | strip_html | newline_to_br | strip_newlines | replace: '<br />', ' ' | escape_once | strip -%}
{%- assign seo_description = seo_description | markdownify | strip_html | strip_newlines | escape_once -%}
{%- endif -%}
{%- assign author = page.author | default: page.authors[0] | default: site.author -%}
@@ -25,9 +32,23 @@
{%- assign author_twitter = author.twitter | replace: "@", "" -%}
{%- endif -%}
{%- assign page_large_image = page.header.og_image | default: page.header.overlay_image | default: page.header.image | absolute_url | escape -%}
{%- assign page_teaser_image = page.header.teaser | default: site.og_image | absolute_url | escape -%}
{%- assign site_og_image = site.og_image | absolute_url | escape -%}
{%- assign page_large_image = page.header.og_image | default: page.header.overlay_image | default: page.header.image -%}
{%- unless page_large_image contains '://' -%}
{%- assign page_large_image = page_large_image | absolute_url -%}
{%- endunless -%}
{%- assign page_large_image = page_large_image | escape -%}
{%- assign page_teaser_image = page.header.teaser | default: site.og_image -%}
{%- unless page_teaser_image contains '://' -%}
{%- assign page_teaser_image = page_teaser_image | absolute_url -%}
{%- endunless -%}
{%- assign page_teaser_image = page_teaser_image | escape -%}
{%- assign site_og_image = site.og_image -%}
{%- unless site_og_image contains '://' -%}
{%- assign site_og_image = site_og_image | absolute_url -%}
{%- endunless -%}
{%- assign site_og_image = site_og_image | escape -%}
{%- if page.date -%}
{%- assign og_type = "article" -%}
@@ -35,23 +56,20 @@
{%- assign og_type = "website" -%}
{%- endif -%}
<title>{{ seo_title }}{% if paginator %}{% unless paginator.page == 1 %} {{ title_separator }} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}{% endif %}</title>
<title>{{ seo_title | default: site.title }}{% if paginator %}{% unless paginator.page == 1 %} {{ title_separator }} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}{% endif %}</title>
<meta name="description" content="{{ seo_description }}">
{% if author.name %}
<meta name="author" content="{{ author.name | default: author }}">
{% if og_type == "article" %}
<meta property="article:author" content="{{ author.name | default: author }}">
{% endif %}
{% endif %}
<meta property="og:type" content="{{ og_type }}">
<meta property="og:locale" content="{{ site.locale | replace: "-", "_" | default: "en_US" }}">
<meta property="og:site_name" content="{{ site.title }}">
<meta property="og:title" content="{{ page_title }}">
<meta property="og:title" content="{{ page.title | default: site.title | markdownify | strip_html | strip_newlines | escape_once }}">
<meta property="og:url" content="{{ canonical_url }}">
{% if seo_description %}
{% if page.excerpt %}
<meta property="og:description" content="{{ seo_description }}">
{% endif %}
@@ -63,7 +81,7 @@
{% if site.twitter.username %}
<meta name="twitter:site" content="@{{ site.twitter.username | replace: "@", "" }}">
<meta name="twitter:title" content="{{ page_title }}">
<meta name="twitter:title" content="{{ page.title | default: site.title | markdownify | strip_html | strip_newlines | escape_once }}">
<meta name="twitter:description" content="{{ seo_description }}">
<meta name="twitter:url" content="{{ canonical_url }}">
@@ -109,9 +127,21 @@
<link rel="next" href="{{ paginator.next_page_path | absolute_url }}">
{% endif %}
{% if page.url == '/' %}
{% include schema.html %}
{% endif %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
{% if site.social.type == "Organization" %}
"@type": "Organization",
"url": {{ '/' | absolute_url | jsonify }}{% if site.og_image %},
"logo": {{ site_og_image | jsonify }}{% endif %}
{% else %}
"@type": "Person",
"name": {{ site.social.name | default: site.name | jsonify }},
"url": {{ '/' | absolute_url |jsonify }}{% if site.social.links %},
"sameAs": {{ site.social.links | jsonify }}{% endif %}
{% endif %}
}
</script>
{% if site.google_site_verification %}
<meta name="google-site-verification" content="{{ site.google_site_verification }}" />
@@ -128,7 +158,4 @@
{% if site.naver_site_verification %}
<meta name="naver-site-verification" content="{{ site.naver_site_verification }}">
{% endif %}
{% if site.baidu_site_verification %}
<meta name="baidu-site-verification" content="{{ site.baidu_site_verification }}">
{% endif %}
<!-- end _includes/seo.html -->
+8 -3
View File
@@ -4,8 +4,13 @@
{% if page.sidebar %}
{% for s in page.sidebar %}
{% if s.image %}
<img src="{{ s.image | relative_url }}"
alt="{% if s.image_alt %}{{ s.image_alt }}{% endif %}">
<img src=
{% if s.image contains "://" %}
"{{ s.image }}"
{% else %}
"{{ s.image | relative_url }}"
{% endif %}
alt="{% if s.image_alt %}{{ s.image_alt }}{% endif %}">
{% endif %}
{% if s.title %}<h3>{{ s.title }}</h3>{% endif %}
{% if s.text %}{{ s.text | markdownify }}{% endif %}
@@ -16,4 +21,4 @@
{% endif %}
{% endif %}
</div>
{% endif %}
{% endif %}
+1
View File
@@ -1,4 +1,5 @@
<nav class="skip-links">
<h2 class="screen-reader-text">{{ site.data.ui-text[site.locale].skip_links | default: 'Skip links' }}</h2>
<ul>
<li><a href="#site-nav" class="screen-reader-shortcut">{{ site.data.ui-text[site.locale].skip_primary_nav | default: 'Skip to primary navigation' }}</a></li>
<li><a href="#main" class="screen-reader-shortcut">{{ site.data.ui-text[site.locale].skip_content | default: 'Skip to content' }}</a></li>
+6 -14
View File
@@ -1,19 +1,11 @@
<section class="page__share">
<h4 class="page__share-title">{{ site.data.ui-text[site.locale].share_on_label | default: "Share on" }}</h4>
{% if site.data.ui-text[site.locale].share_on_label %}
<h4 class="page__share-title">{{ site.data.ui-text[site.locale].share_on_label | default: "Share on" }}</h4>
{% endif %}
<a href="https://x.com/intent/tweet?{% if site.twitter.username %}via={{ site.twitter.username | url_encode }}&{% endif %}text={{ page.title | url_encode }}%20{{ page.url | absolute_url | url_encode }}" class="btn btn--x" aria-label="Share on X" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} X">
<i class="fab fa-fw fa-x-twitter" aria-hidden="true"></i><span> X</span>
</a>
<a href="https://twitter.com/intent/tweet?{% if site.twitter.username %}via={{ site.twitter.username | url_encode }}&{% endif %}text={{ page.title | url_encode }}%20{{ page.url | absolute_url | url_encode }}" class="btn btn--twitter" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} Twitter"><i class="fab fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
<a href="https://www.facebook.com/sharer/sharer.php?u={{ page.url | absolute_url | url_encode }}" class="btn btn--facebook" aria-label="Share on Facebook" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} Facebook">
<i class="fab fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span>
</a>
<a href="https://www.facebook.com/sharer/sharer.php?u={{ page.url | absolute_url | url_encode }}" class="btn btn--facebook" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} Facebook"><i class="fab fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url={{ page.url | absolute_url }}" class="btn btn--linkedin" aria-label="Share on LinkedIn" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} LinkedIn">
<i class="fab fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span>
</a>
<a href="https://bsky.app/intent/compose?text={{ page.title | url_encode }}%20{{ page.url | absolute_url | url_encode }}" class="btn btn--bluesky" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} Bluesky">
<i class="fab fa-fw fa-bluesky" aria-hidden="true"></i><span> Bluesky</span>
</a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url={{ page.url | absolute_url | url_encode }}" class="btn btn--linkedin" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} LinkedIn"><i class="fab fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
</section>
+10 -3
View File
@@ -6,13 +6,20 @@
{% endcase %}
{% if site.tag_archive.path %}
{% assign tags_sorted = page.tags | sort_natural %}
{% comment %}
<!-- Sort alphabetically regardless of case e.g. a B c d E -->
<!-- modified from http://www.codeofclimber.ru/2015/sorting-site-tags-in-jekyll/ -->
{% endcomment %}
{% capture page_tags %}{% for tag in page.tags %}{{ tag | downcase }}|{{ tag }}{% unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %}
{% assign tag_hashes = page_tags | split: ',' | sort %}
<p class="page__taxonomy">
<strong><i class="fas fa-fw fa-tags" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].tags_label | default: "Tags:" }} </strong>
<span itemprop="keywords">
{% for tag_word in tags_sorted %}
<a href="{{ tag_word | slugify | prepend: path_type | prepend: site.tag_archive.path | relative_url }}" class="page__taxonomy-item p-category" rel="tag">{{ tag_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
{% for hash in tag_hashes %}
{% assign keyValue = hash | split: '|' %}
{% capture tag_word %}{{ keyValue[1] | strip_newlines }}{% endcapture %}
<a href="{{ tag_word | slugify | prepend: path_type | prepend: site.tag_archive.path | relative_url }}" class="page__taxonomy-item" rel="tag">{{ tag_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
{% endfor %}
</span>
</p>
+41 -145
View File
@@ -1,30 +1,6 @@
{% capture tocWorkspace %}
{% comment %}
Copyright (c) 2017 Vladimir "allejo" Jimenez
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 the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
{% endcomment %}
{% comment %}
Version 1.2.1
Version 1.0.5
https://github.com/allejo/jekyll-toc
"...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way" ~jaybe
@@ -33,157 +9,77 @@
{% include toc.html html=content sanitize=true class="inline_toc" id="my_toc" h_min=2 h_max=3 %}
Parameters:
* html (string) - the HTML of compiled markdown generated by kramdown in Jekyll
* html (string) - the HTML of compiled markdown generated by kramdown in Jekyll
Optional Parameters:
* sanitize (bool) : false - when set to true, the headers will be stripped of any HTML in the TOC
* class (string) : '' - a CSS class assigned to the TOC
* id (string) : '' - an ID to assigned to the TOC
* h_min (int) : 1 - the minimum TOC header level to use; any header lower than this value will be ignored
* h_max (int) : 6 - the maximum TOC header level to use; any header greater than this value will be ignored
* ordered (bool) : false - when set to true, an ordered list will be outputted instead of an unordered list
* item_class (string) : '' - add custom class(es) for each list item; has support for '%level%' placeholder, which is the current heading level
* submenu_class (string) : '' - add custom class(es) for each child group of headings; has support for '%level%' placeholder which is the current "submenu" heading level
* base_url (string) : '' - add a base url to the TOC links for when your TOC is on another page than the actual content
* anchor_class (string) : '' - add custom class(es) for each anchor element
* skip_no_ids (bool) : false - skip headers that do not have an `id` attribute
* flat_toc (bool) : false - when set to true, the TOC will be a single level list
* sanitize (bool) : false - when set to true, the headers will be stripped of any HTML in the TOC
* class (string) : '' - a CSS class assigned to the TOC
* id (string) : '' - an ID to assigned to the TOC
* h_min (int) : 1 - the minimum TOC header level to use; any header lower than this value will be ignored
* h_max (int) : 6 - the maximum TOC header level to use; any header greater than this value will be ignored
* ordered (bool) : false - when set to true, an ordered list will be outputted instead of an unordered list
* item_class (string) : '' - add custom class for each list item; has support for '%level%' placeholder, which is the current heading level
* baseurl (string) : '' - add a base url to the TOC links for when your TOC is on another page than the actual content
Output:
An ordered or unordered list representing the table of contents of a markdown block. This snippet will only
generate the table of contents and will NOT output the markdown given to it
An ordered or unordered list representing the table of contents of a markdown block. This snippet will only generate the table of contents and will NOT output the markdown given to it
{% endcomment %}
{% capture newline %}
{% endcapture %}
{% assign newline = newline | rstrip %} <!-- Remove the extra spacing but preserve the newline -->
{% capture deprecation_warnings %}{% endcapture %}
{% if include.baseurl %}
{% capture deprecation_warnings %}{{ deprecation_warnings }}<!-- jekyll-toc :: "baseurl" has been deprecated, use "base_url" instead -->{{ newline }}{% endcapture %}
{% endif %}
{% if include.skipNoIDs %}
{% capture deprecation_warnings %}{{ deprecation_warnings }}<!-- jekyll-toc :: "skipNoIDs" has been deprecated, use "skip_no_ids" instead -->{{ newline }}{% endcapture %}
{% endif %}
{% capture jekyll_toc %}{% endcapture %}
{% capture my_toc %}{% endcapture %}
{% assign orderedList = include.ordered | default: false %}
{% assign flatToc = include.flat_toc | default: false %}
{% assign baseURL = include.base_url | default: include.baseurl | default: '' %}
{% assign skipNoIDs = include.skip_no_ids | default: include.skipNoIDs | default: false %}
{% assign minHeader = include.h_min | default: 1 %}
{% assign maxHeader = include.h_max | default: 6 %}
{% assign nodes = include.html | strip | split: '<h' %}
{% assign nodes = include.html | split: '<h' %}
{% assign firstHeader = true %}
{% assign currLevel = 0 %}
{% assign lastLevel = 0 %}
{% capture listModifier %}{% if orderedList %}ol{% else %}ul{% endif %}{% endcapture %}
{% capture listModifier %}{% if orderedList %}1.{% else %}-{% endif %}{% endcapture %}
{% for node in nodes %}
{% if node == "" %}
{% continue %}
{% endif %}
{% assign currLevel = node | replace: '"', '' | slice: 0, 1 | times: 1 %}
{% assign headerLevel = node | replace: '"', '' | slice: 0, 1 | times: 1 %}
{% if currLevel < minHeader or currLevel > maxHeader %}
{% continue %}
{% endif %}
{% assign _workspace = node | split: '</h' %}
{% assign _idWorkspace = _workspace[0] | split: 'id="' %}
{% assign _idWorkspace = _idWorkspace[1] | split: '"' %}
{% assign htmlID = _idWorkspace[0] %}
{% assign _classWorkspace = _workspace[0] | split: 'class="' %}
{% assign _classWorkspace = _classWorkspace[1] | split: '"' %}
{% assign htmlClass = _classWorkspace[0] %}
{% if htmlClass contains "no_toc" %}
{% if headerLevel < minHeader or headerLevel > maxHeader %}
{% continue %}
{% endif %}
{% if firstHeader %}
{% assign minHeader = currLevel %}
{% assign firstHeader = false %}
{% assign minHeader = headerLevel %}
{% endif %}
{% assign indentAmount = headerLevel | minus: minHeader | add: 1 %}
{% assign _workspace = node | split: '</h' %}
{% assign _idWorkspace = _workspace[0] | split: 'id="' %}
{% assign _idWorkspace = _idWorkspace[1] | split: '"' %}
{% assign html_id = _idWorkspace[0] %}
{% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %}
{% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}
{% if include.item_class and include.item_class != blank %}
{% capture listItemClass %} class="{{ include.item_class | replace: '%level%', currLevel | split: '.' | join: ' ' }}"{% endcapture %}
{% endif %}
{% assign space = '' %}
{% for i in (1..indentAmount) %}
{% assign space = space | prepend: ' ' %}
{% endfor %}
{% if include.submenu_class and include.submenu_class != blank %}
{% assign subMenuLevel = currLevel | minus: 1 %}
{% capture subMenuClass %} class="{{ include.submenu_class | replace: '%level%', subMenuLevel | split: '.' | join: ' ' }}"{% endcapture %}
{% endif %}
{% unless include.item_class == blank %}
{% capture listItemClass %}{:.{{ include.item_class | replace: '%level%', headerLevel }}}{% endcapture %}
{% endunless %}
{% capture anchorBody %}{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}{% endcapture %}
{% if htmlID %}
{% capture anchorAttributes %} href="{% if baseURL %}{{ baseURL }}{% endif %}#{{ htmlID }}"{% endcapture %}
{% if include.anchor_class %}
{% capture anchorAttributes %}{{ anchorAttributes }} class="{{ include.anchor_class | split: '.' | join: ' ' }}"{% endcapture %}
{% endif %}
{% capture listItem %}<a{{ anchorAttributes }}>{{ anchorBody }}</a>{% endcapture %}
{% elsif skipNoIDs == true %}
{% continue %}
{% else %}
{% capture listItem %}{{ anchorBody }}{% endcapture %}
{% endif %}
{% if currLevel > lastLevel and flatToc == false %}
{% capture jekyll_toc %}{{ jekyll_toc }}<{{ listModifier }}{{ subMenuClass }}>{% endcapture %}
{% elsif currLevel < lastLevel and flatToc == false %}
{% assign repeatCount = lastLevel | minus: currLevel %}
{% for i in (1..repeatCount) %}
{% capture jekyll_toc %}{{ jekyll_toc }}</li></{{ listModifier }}>{% endcapture %}
{% endfor %}
{% capture jekyll_toc %}{{ jekyll_toc }}</li>{% endcapture %}
{% else %}
{% capture jekyll_toc %}{{ jekyll_toc }}</li>{% endcapture %}
{% endif %}
{% capture jekyll_toc %}{{ jekyll_toc }}<li{{ listItemClass }}>{{ listItem }}{% endcapture %}
{% assign lastLevel = currLevel %}
{% assign firstHeader = false %}
{% capture my_toc %}{{ my_toc }}
{{ space }}{{ listModifier }} {{ listItemClass }} [{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}]({% if include.baseurl %}{{ include.baseurl }}{% endif %}#{{ html_id }}){% endcapture %}
{% endfor %}
{% if flatToc == true %}
{% assign repeatCount = 1 %}
{% else %}
{% assign repeatCount = minHeader | minus: 1 %}
{% assign repeatCount = lastLevel | minus: repeatCount %}
{% if include.class %}
{% capture my_toc %}{:.{{ include.class }}}
{{ my_toc | lstrip }}{% endcapture %}
{% endif %}
{% for i in (1..repeatCount) %}
{% capture jekyll_toc %}{{ jekyll_toc }}</li></{{ listModifier }}>{% endcapture %}
{% endfor %}
{% if jekyll_toc != '' %}
{% assign rootAttributes = '' %}
{% if include.class and include.class != blank %}
{% capture rootAttributes %} class="{{ include.class | split: '.' | join: ' ' }}"{% endcapture %}
{% endif %}
{% if include.id and include.id != blank %}
{% capture rootAttributes %}{{ rootAttributes }} id="{{ include.id }}"{% endcapture %}
{% endif %}
{% if rootAttributes %}
{% assign nodes = jekyll_toc | split: '>' %}
{% capture jekyll_toc %}<{{ listModifier }}{{ rootAttributes }}>{{ nodes | shift | join: '>' }}>{% endcapture %}
{% endif %}
{% if include.id %}
{% capture my_toc %}{: #{{ include.id }}}
{{ my_toc | lstrip }}{% endcapture %}
{% endif %}
{% endcapture %}{% assign tocWorkspace = '' %}{{ deprecation_warnings }}{{ jekyll_toc -}}
{% endcapture %}{% assign tocWorkspace = '' %}{{ my_toc | markdownify | strip }}
+10 -21
View File
@@ -1,24 +1,13 @@
{% capture video_id %}{{ include.id }}{% endcapture %}
{% capture video_provider %}{{ include.provider }}{% endcapture %}
{% capture video_danmaku %}{{ include.danmaku | default: 0 }}{% endcapture %}
{% capture video_src %}
{% case video_provider %}
{% when "vimeo" %}
https://player.vimeo.com/video/{{ video_id }}?dnt=true
{% when "youtube" %}
https://www.youtube-nocookie.com/embed/{{ video_id }}
{% when "google-drive" %}
https://drive.google.com/file/d/{{ video_id }}/preview
{% when "bilibili" %}
https://player.bilibili.com/player.html?bvid={{ video_id }}&page=1&as_wide=1&high_quality=1&danmaku={{ video_danmaku }}
{% endcase %}
{% endcapture %}
{% assign video_src = video_src | strip %}
<!-- Courtesy of embedresponsively.com -->
{% unless video_src == "" %}
<div class="responsive-video-container">
<iframe src="{{ video_src }}" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowfullscreen></iframe>
</div>
{% endunless %}
<!-- Courtesy of embedresponsively.com //-->
<div class="responsive-video-container">
{% if video_provider == "vimeo" %}
<iframe src="https://player.vimeo.com/video/{{ video_id }}?dnt=true" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
{% elsif video_provider == "youtube" %}
<iframe src="https://www.youtube-nocookie.com/embed/{{ video_id }}" frameborder="0" allowfullscreen></iframe>
{% elsif video_provider == "google-drive" %}
<iframe src="https://drive.google.com/file/d/{{ video_id }}/preview" frameborder="0" allowfullscreen></iframe>
{% endif %}
</div>
+2 -16
View File
@@ -3,27 +3,13 @@ layout: default
author_profile: false
---
{% if page.header.overlay_color or page.header.overlay_image or page.header.image %}
{% include page__hero.html %}
{% elsif page.header.video.id and page.header.video.provider %}
{% include page__hero_video.html %}
{% endif %}
{% if page.url != "/" and site.breadcrumbs %}
{% unless paginator %}
{% include breadcrumbs.html %}
{% endunless %}
{% endif %}
<div id="main" role="main">
{% include sidebar.html %}
<div class="archive">
{% unless page.header.overlay_color or page.header.overlay_image %}
<h1 id="page-title" class="page__title"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>{{ page.title }}</h1>
{% endunless %}
<h1 class="page__title">{{ page.title }}</h1>
{% for post in page.posts %}
{% include archive-single.html %}
{% endfor %}
</div>
</div>
</div>
+2 -2
View File
@@ -19,8 +19,8 @@ layout: default
<div class="archive">
{% unless page.header.overlay_color or page.header.overlay_image %}
<h1 id="page-title" class="page__title"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>{{ page.title }}</h1>
<h1 id="page-title" class="page__title">{{ page.title }}</h1>
{% endunless %}
{{ content }}
</div>
</div>
</div>
+36 -1
View File
@@ -4,4 +4,39 @@ layout: archive
{{ content }}
{% include posts-taxonomy.html taxonomies=site.categories %}
{% assign categories_max = 0 %}
{% for category in site.categories %}
{% if category[1].size > categories_max %}
{% assign categories_max = category[1].size %}
{% endif %}
{% endfor %}
<ul class="taxonomy__index">
{% for i in (1..categories_max) reversed %}
{% for category in site.categories %}
{% if category[1].size == i %}
<li>
<a href="#{{ category[0] | slugify }}">
<strong>{{ category[0] }}</strong> <span class="taxonomy__count">{{ i }}</span>
</a>
</li>
{% endif %}
{% endfor %}
{% endfor %}
</ul>
{% for i in (1..categories_max) reversed %}
{% for category in site.categories %}
{% if category[1].size == i %}
<section id="{{ category[0] | slugify | downcase }}" class="taxonomy__section">
<h2 class="archive__subtitle">{{ category[0] }}</h2>
<div class="entries-{{ page.entries_layout | default: 'list' }}">
{% for post in category.last %}
{% include archive-single.html type=page.entries_layout %}
{% endfor %}
</div>
<a href="#page-title" class="back-to-top">{{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} &uarr;</a>
</section>
{% endif %}
{% endfor %}
{% endfor %}
+2 -3
View File
@@ -4,7 +4,6 @@ layout: archive
{{ content }}
{% assign entries_layout = page.entries_layout | default: 'list' %}
<div class="entries-{{ entries_layout }}">
{% include posts-category.html taxonomy=page.taxonomy type=entries_layout %}
<div class="entries-{{ page.entries_layout }}">
{% include posts-category.html taxonomy=page.taxonomy type=page.entries_layout %}
</div>
+2 -3
View File
@@ -4,7 +4,6 @@ layout: archive
{{ content }}
{% assign entries_layout = page.entries_layout | default: 'list' %}
<div class="entries-{{ entries_layout }}">
{% include documents-collection.html collection=page.collection sort_by=page.sort_by sort_order=page.sort_order type=entries_layout %}
<div class="entries-{{ page.entries_layout }}">
{% include documents-collection.html collection=page.collection sort_by=page.sort_by sort_order=page.sort_order type=page.entries_layout %}
</div>
+10 -4
View File
@@ -2,20 +2,25 @@
---
<!doctype html>
{% include copyright.html %}
<html lang="{{ site.locale | replace: "_", "-" | default: "en" }}" class="no-js">
<!--
Minimal Mistakes Jekyll Theme 4.17.1 by Michael Rose
Copyright 2013-2019 Michael Rose - mademistakes.com | @mmistakes
Free for personal and commercial use under the MIT license
https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
-->
<html lang="{{ site.locale | slice: 0,2 | default: "en" }}" class="no-js">
<head>
{% include head.html %}
{% include head/custom.html %}
</head>
<body class="layout--{{ page.layout | default: layout.layout }}{% if page.classes or layout.classes %}{{ page.classes | default: layout.classes | join: ' ' | prepend: ' ' }}{% endif %}" dir="{% if site.rtl %}rtl{% else %}ltr{% endif %}">
<body class="layout--{{ page.layout | default: layout.layout }}{% if page.classes or layout.classes %}{{ page.classes | default: layout.classes | join: ' ' | prepend: ' ' }}{% endif %}">
{% include_cached skip-links.html %}
{% include_cached browser-upgrade.html %}
{% include_cached masthead.html %}
<div class="initial-content">
{{ content }}
{% include after-content.html %}
</div>
{% if site.search == true %}
@@ -32,5 +37,6 @@
</div>
{% include scripts.html %}
</body>
</html>
+3 -10
View File
@@ -6,15 +6,8 @@ layout: archive
<h3 class="archive__subtitle">{{ site.data.ui-text[site.locale].recent_posts | default: "Recent Posts" }}</h3>
{% if paginator %}
{% assign posts = paginator.posts %}
{% else %}
{% assign posts = site.posts %}
{% endif %}
{% assign entries_layout = page.entries_layout | default: 'list' %}
<div class="entries-{{ entries_layout }}">
{% include documents-collection.html entries=posts type=entries_layout %}
</div>
{% for post in paginator.posts %}
{% include archive-single.html %}
{% endfor %}
{% include paginator.html %}
+4 -5
View File
@@ -5,7 +5,7 @@ layout: archive
{{ content }}
<ul class="taxonomy__index">
{% assign postsInYear = site.posts | where_exp: "item", "item.hidden != true" | group_by_exp: 'post', 'post.date | date: "%Y"' %}
{% assign postsInYear = site.posts | group_by_exp: 'post', 'post.date | date: "%Y"' %}
{% for year in postsInYear %}
<li>
<a href="#{{ year.name }}">
@@ -15,14 +15,13 @@ layout: archive
{% endfor %}
</ul>
{% assign entries_layout = page.entries_layout | default: 'list' %}
{% assign postsByYear = site.posts | where_exp: "item", "item.hidden != true" | group_by_exp: 'post', 'post.date | date: "%Y"' %}
{% assign postsByYear = site.posts | group_by_exp: 'post', 'post.date | date: "%Y"' %}
{% for year in postsByYear %}
<section id="{{ year.name }}" class="taxonomy__section">
<h2 class="archive__subtitle">{{ year.name }}</h2>
<div class="entries-{{ entries_layout }}">
<div class="entries-{{ page.entries_layout | default: 'list' }}">
{% for post in year.items %}
{% include archive-single.html type=entries_layout %}
{% include archive-single.html type=page.entries_layout %}
{% endfor %}
</div>
<a href="#page-title" class="back-to-top">{{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} &uarr;</a>
+3 -3
View File
@@ -17,7 +17,7 @@ layout: default
<div class="archive">
{% unless page.header.overlay_color or page.header.overlay_image %}
<h1 id="page-title" class="page__title"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>{{ page.title }}</h1>
<h1 id="page-title" class="page__title">{{ page.title }}</h1>
{% endunless %}
{{ content }}
@@ -25,11 +25,11 @@ layout: default
{%- assign search_provider = site.search_provider | default: "lunr" -%}
{%- case search_provider -%}
{%- when "lunr" -%}
<input type="text" id="search" class="search-input" placeholder="{{ site.data.ui-text[site.locale].search_placeholder_text | default: 'Enter your search term...' }}" />
<input type="text" id="search" class="search-input" tabindex="-1" placeholder="{{ site.data.ui-text[site.locale].search_placeholder_text | default: 'Enter your search term...' }}" />
<div id="results" class="results"></div>
{%- when "google" -%}
<form onsubmit="return googleCustomSearchExecute();" id="cse-search-box-form-id">
<input type="text" id="cse-search-input-box-id" class="search-input" placeholder="{{ site.data.ui-text[site.locale].search_placeholder_text | default: 'Enter your search term...' }}" />
<input type="text" id="cse-search-input-box-id" class="search-input" tabindex="-1" placeholder="{{ site.data.ui-text[site.locale].search_placeholder_text | default: 'Enter your search term...' }}" />
</form>
<div id="results" class="results">
<gcse:searchresults-only></gcse:searchresults-only>
+36 -28
View File
@@ -8,11 +8,7 @@ layout: default
{% include page__hero_video.html %}
{% endif %}
{% assign breadcrumbs_enabled = site.breadcrumbs %}
{% if page.breadcrumbs != null %}
{% assign breadcrumbs_enabled = page.breadcrumbs %}
{% endif %}
{% if page.url != "/" and breadcrumbs_enabled %}
{% if page.url != "/" and site.breadcrumbs %}
{% unless paginator %}
{% include breadcrumbs.html %}
{% endunless %}
@@ -21,21 +17,19 @@ layout: default
<div id="main" role="main">
{% include sidebar.html %}
<article class="page" itemscope itemtype="https://schema.org/CreativeWork"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>
{% if page.title %}<meta itemprop="headline" content="{{ page.title | replace: '|', '&#124;' | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
<article class="page" itemscope itemtype="https://schema.org/CreativeWork">
{% if page.title %}<meta itemprop="headline" content="{{ page.title | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
{% if page.excerpt %}<meta itemprop="description" content="{{ page.excerpt | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
{% if page.date %}<meta itemprop="datePublished" content="{{ page.date | date_to_xmlschema }}">{% endif %}
{% if page.last_modified_at %}<meta itemprop="dateModified" content="{{ page.last_modified_at | date_to_xmlschema }}">{% endif %}
{% if page.date %}<meta itemprop="datePublished" content="{{ page.date | date: "%B %d, %Y" }}">{% endif %}
{% if page.last_modified_at %}<meta itemprop="dateModified" content="{{ page.last_modified_at | date: "%B %d, %Y" }}">{% endif %}
<div class="page__inner-wrap">
{% unless page.header.overlay_color or page.header.overlay_image %}
<header>
{% if page.title -%}
<h1 id="page-title" class="page__title" itemprop="headline">
<a href="{{ page.url | absolute_url }}" itemprop="url">{{ page.title | markdownify | remove: "<p>" | remove: "</p>" }}</a>
</h1>
{%- endif %}
{% include page__meta.html %}
{% if page.title %}<h1 id="page-title" class="page__title" itemprop="headline">{{ page.title | markdownify | remove: "<p>" | remove: "</p>" }}</h1>{% endif %}
{% if page.read_time %}
<p class="page__meta"><i class="far fa-clock" aria-hidden="true"></i> {% include read-time.html %}</p>
{% endif %}
</header>
{% endunless %}
@@ -44,7 +38,7 @@ layout: default
<aside class="sidebar__right {% if page.toc_sticky %}sticky{% endif %}">
<nav class="toc">
<header><h4 class="nav__title"><i class="fas fa-{{ page.toc_icon | default: 'file-alt' }}"></i> {{ page.toc_label | default: site.data.ui-text[site.locale].toc_label | default: "On this page" }}</h4></header>
{% include toc.html sanitize=true html=content h_min=1 h_max=6 class="toc__menu" skip_no_ids=true %}
{% include toc.html sanitize=true html=content h_min=1 h_max=6 class="toc__menu" %}
</nav>
</aside>
{% endif %}
@@ -57,7 +51,11 @@ layout: default
<h4 class="page__meta-title">{{ site.data.ui-text[site.locale].meta_label }}</h4>
{% endif %}
{% include page__taxonomy.html %}
{% include page__date.html %}
{% if page.last_modified_at %}
<p class="page__date"><strong><i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}</strong> <time datetime="{{ page.last_modified_at | date: "%Y-%m-%d" }}">{{ page.last_modified_at | date: "%B %d, %Y" }}</time></p>
{% elsif page.date %}
<p class="page__date"><strong><i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}</strong> <time datetime="{{ page.date | date_to_xmlschema }}">{{ page.date | date: "%B %d, %Y" }}</time></p>
{% endif %}
</footer>
{% if page.share %}{% include social-share.html %}{% endif %}
@@ -65,23 +63,33 @@ layout: default
{% include post_pagination.html %}
</div>
{% if site.comments.provider and page.comments %}
{% if jekyll.environment == 'production' %}
{% include comments.html %}
{% else %}
<p>
Comments are configured with provider: <strong>{{ site.comments.provider }}</strong>,
but are disabled in non-production environments.
</p>
{% endif %}
{% if jekyll.environment == 'production' and site.comments.provider and page.comments %}
{% include comments.html %}
{% endif %}
</article>
{% comment %}<!-- only show related on a post page when `related: true` -->{% endcomment %}
{% if page.id and page.related and site.related_posts.size > 0 %}
{% include page__related.html posts=site.related_posts %}
<div class="page__related">
<h4 class="page__related-title">{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}</h4>
<div class="grid__wrapper">
{% for post in site.related_posts limit:4 %}
{% include archive-single.html type="grid" %}
{% endfor %}
</div>
</div>
{% comment %}<!-- otherwise show recent posts if no related when `related: true` -->{% endcomment %}
{% elsif page.id and page.related %}
{% include page__related.html posts=site.posts %}
<div class="page__related">
<h4 class="page__related-title">{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}</h4>
<div class="grid__wrapper">
{% for post in site.posts limit:4 %}
{% if post.id == page.id %}
{% continue %}
{% endif %}
{% include archive-single.html type="grid" %}
{% endfor %}
</div>
</div>
{% endif %}
</div>
+3 -3
View File
@@ -9,11 +9,11 @@ layout: default
{% endif %}
<div id="main" role="main">
<article class="splash" itemscope itemtype="https://schema.org/CreativeWork"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>
<article class="splash" itemscope itemtype="https://schema.org/CreativeWork">
{% if page.title %}<meta itemprop="headline" content="{{ page.title | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
{% if page.excerpt %}<meta itemprop="description" content="{{ page.excerpt | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
{% if page.date %}<meta itemprop="datePublished" content="{{ page.date | date_to_xmlschema }}">{% endif %}
{% if page.last_modified_at %}<meta itemprop="dateModified" content="{{ page.last_modified_at | date_to_xmlschema }}">{% endif %}
{% if page.date %}<meta itemprop="datePublished" content="{{ page.date | date: "%B %d, %Y" }}">{% endif %}
{% if page.last_modified_at %}<meta itemprop="dateModified" content="{{ page.last_modified_at | date: "%B %d, %Y" }}">{% endif %}
<section class="page__content" itemprop="text">
{{ content }}
+2 -3
View File
@@ -4,7 +4,6 @@ layout: archive
{{ content }}
{% assign entries_layout = page.entries_layout | default: 'list' %}
<div class="entries-{{ entries_layout }}">
{% include posts-tag.html taxonomy=page.taxonomy type=entries_layout %}
<div class="entries-{{ page.entries_layout | default: 'list' }}">
{% include posts-tag.html taxonomy=page.taxonomy type=page.entries_layout %}
</div>
+36 -1
View File
@@ -4,4 +4,39 @@ layout: archive
{{ content }}
{% include posts-taxonomy.html taxonomies=site.tags %}
{% assign tags_max = 0 %}
{% for tag in site.tags %}
{% if tag[1].size > tags_max %}
{% assign tags_max = tag[1].size %}
{% endif %}
{% endfor %}
<ul class="taxonomy__index">
{% for i in (1..tags_max) reversed %}
{% for tag in site.tags %}
{% if tag[1].size == i %}
<li>
<a href="#{{ tag[0] | slugify }}">
<strong>{{ tag[0] }}</strong> <span class="taxonomy__count">{{ i }}</span>
</a>
</li>
{% endif %}
{% endfor %}
{% endfor %}
</ul>
{% for i in (1..tags_max) reversed %}
{% for tag in site.tags %}
{% if tag[1].size == i %}
<section id="{{ tag[0] | slugify | downcase }}" class="taxonomy__section">
<h2 class="archive__subtitle">{{ tag[0] }}</h2>
<div class="entries-{{ page.entries_layout | default: 'list' }}">
{% for post in tag.last %}
{% include archive-single.html type=page.entries_layout %}
{% endfor %}
</div>
<a href="#page-title" class="back-to-top">{{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} &uarr;</a>
</section>
{% endif %}
{% endfor %}
{% endfor %}
+5 -2
View File
@@ -1,5 +1,8 @@
/* Copyright comment */
@import "minimal-mistakes/copyright";
/*!
* Minimal Mistakes Jekyll Theme 4.17.1 by Michael Rose
* Copyright 2013-2019 Michael Rose - mademistakes.com | @mmistakes
* Licensed under MIT (https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE)
*/
/* Variables */
@import "minimal-mistakes/variables";
+85 -69
View File
@@ -7,14 +7,14 @@
margin-bottom: 2em;
@include breakpoint($large) {
float: inline-end;
float: right;
width: calc(100% - #{$right-sidebar-width-narrow});
padding-inline-end: $right-sidebar-width-narrow;
padding-right: $right-sidebar-width-narrow;
}
@include breakpoint($x-large) {
width: calc(100% - #{$right-sidebar-width});
padding-inline-end: $right-sidebar-width;
padding-right: $right-sidebar-width;
}
}
@@ -32,7 +32,7 @@
}
.archive__subtitle {
margin: 1.414em 0 0.5em;
margin: 1.414em 0 0;
padding-bottom: 0.5em;
font-size: $type-size-5;
color: $muted-text-color;
@@ -53,7 +53,10 @@
a[rel="permalink"]::before {
content: '';
position: absolute;
inset: 0;
left: 0;
top: 0;
right: 0;
bottom: 0;
}
a + a {
@@ -95,14 +98,14 @@
.archive__item-caption {
position: absolute;
bottom: 0;
inset-inline-end: 0;
right: 0;
margin: 0 auto;
padding: 2px 5px;
color: #fff;
font-family: $caption-font-family;
font-size: $type-size-8;
background: #000;
text-align: end;
text-align: right;
z-index: 5;
opacity: 0.5;
border-radius: $border-radius 0 0 0;
@@ -137,11 +140,11 @@
/* extend grid elements to the right */
@include breakpoint($large) {
margin-inline-end: -1 * $right-sidebar-width-narrow;
margin-right: -1 * $right-sidebar-width-narrow;
}
@include breakpoint($x-large) {
margin-inline-end: -1 * $right-sidebar-width;
margin-right: -1 * $right-sidebar-width;
}
}
}
@@ -150,22 +153,23 @@
margin-bottom: 2em;
@include breakpoint($small) {
float: inline-start;
float: left;
width: span(5 of 10);
&:nth-child(2n + 1) {
clear: both;
margin-inline-start: 0;
margin-left: 0;
}
&:nth-child(2n + 2) {
clear: none;
margin-inline-start: gutter(of 10);
margin-left: gutter(of 10);
}
}
@include breakpoint($medium) {
margin-inline: 0; /* override margin*/
margin-left: 0; /* override margin*/
margin-right: 0; /* override margin*/
width: span(3 of 12);
&:nth-child(2n + 1) {
@@ -178,17 +182,17 @@
&:nth-child(4n + 2) {
clear: none;
margin-inline-start: gutter(1 of 12);
margin-left: gutter(1 of 12);
}
&:nth-child(4n + 3) {
clear: none;
margin-inline-start: gutter(1 of 12);
margin-left: gutter(1 of 12);
}
&:nth-child(4n + 4) {
clear: none;
margin-inline-start: gutter(1 of 12);
margin-left: gutter(1 of 12);
}
}
@@ -197,14 +201,6 @@
font-size: 0.6em;
}
.page__meta-sep {
display: block;
&::before {
display: none;
}
}
.archive__item-title {
margin-top: 0.5em;
font-size: $type-size-5;
@@ -250,23 +246,23 @@
font-size: 1.125em;
@include breakpoint($small) {
float: inline-start;
float: left;
margin-bottom: 0;
width: span(4 of 12);
&:nth-child(3n + 1) {
clear: both;
margin-inline-start: 0;
margin-left: 0;
}
&:nth-child(3n + 2) {
clear: none;
margin-inline-start: gutter(of 12);
margin-left: gutter(of 12);
}
&:nth-child(3n + 3) {
clear: none;
margin-inline-start: gutter(of 12);
margin-left: gutter(of 12);
}
.feature__item-teaser {
@@ -276,89 +272,114 @@
}
.archive__item-body {
padding-inline: gutter(1 of 12);
padding-left: gutter(1 of 12);
padding-right: gutter(1 of 12);
}
a.btn::before {
content: '';
position: absolute;
inset: 0;
left: 0;
top: 0;
right: 0;
bottom: 0;
}
&--left, &--right {
&--left {
position: relative;
margin-inline: 0;
float: left;
margin-left: 0;
margin-right: 0;
width: 100%;
clear: both;
font-size: 1.125em;
a.btn::before {
content: '';
position: absolute;
inset: 0;
.archive__item {
float: left;
}
.archive__item-teaser {
margin-bottom: 2em;
}
}
&--left {
float: inline-start;
.archive__item {
float: inline-start;
a.btn::before {
content: '';
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
}
@include breakpoint($small) {
.archive__item-teaser {
float: inline-start;
float: left;
width: span(5 of 12);
}
.archive__item-body {
float: inline-end;
float: right;
padding-left: gutter(0.5 of 12);
padding-right: gutter(1 of 12);
width: span(7 of 12);
padding-inline-start: gutter(0.5 of 12);
padding-inline-end: gutter(1 of 12);
}
}
}
&--right {
float: inline-end;
position: relative;
float: left;
margin-left: 0;
margin-right: 0;
width: 100%;
clear: both;
font-size: 1.125em;
.archive__item {
float: inline-end;
float: left;
}
.archive__item-teaser {
margin-bottom: 2em;
}
a.btn::before {
content: '';
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
}
@include breakpoint($small) {
text-align: end;
text-align: right;
.archive__item-teaser {
float: inline-end;
float: right;
width: span(5 of 12);
}
.archive__item-body {
float: inline-start;
float: left;
width: span(7 of 12);
padding-inline-start: gutter(1 of 12);
padding-inline-end: gutter(0.5 of 12);
padding-left: gutter(0.5 of 12);
padding-right: gutter(1 of 12);
}
}
}
&--center {
position: relative;
float: inline-start;
margin-inline: 0;
float: left;
margin-left: 0;
margin-right: 0;
width: 100%;
clear: both;
font-size: 1.125em;
.archive__item {
float: inline-start;
float: left;
width: 100%;
}
@@ -369,7 +390,10 @@
a.btn::before {
content: '';
position: absolute;
inset: 0;
left: 0;
top: 0;
right: 0;
bottom: 0;
}
@include breakpoint($small) {
@@ -410,22 +434,14 @@
Wide Pages
========================================================================== */
.wide {
.wide {
.archive {
@include breakpoint($large) {
padding-inline-end: 0;
padding-right: 0;
}
@include breakpoint($x-large) {
padding-inline-end: 0;
padding-right: 0;
}
}
}
/* Place inside a single layout */
.layout--single {
.feature__wrapper {
display: inline-block;
}
}
}
+30 -14
View File
@@ -6,8 +6,6 @@ html {
/* sticky footer fix */
position: relative;
min-height: 100%;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
body {
@@ -37,27 +35,27 @@ h6 {
h1 {
margin-top: 0;
font-size: $h-size-1;
font-size: $type-size-3;
}
h2 {
font-size: $h-size-2;
font-size: $type-size-4;
}
h3 {
font-size: $h-size-3;
font-size: $type-size-5;
}
h4 {
font-size: $h-size-4;
font-size: $type-size-6;
}
h5 {
font-size: $h-size-5;
font-size: $type-size-6;
}
h6 {
font-size: $h-size-6;
font-size: $type-size-6;
}
small,
@@ -109,18 +107,18 @@ abbr[data-original-title] {
/* blockquotes */
blockquote {
margin-block: 2em;
margin-inline-end: 1em;
padding-inline: 1em;
margin: 2em 1em 2em 0;
padding-left: 1em;
padding-right: 1em;
font-style: italic;
border-inline-start: 0.25em solid $primary-color;
border-left: 0.25em solid $primary-color;
cite {
font-style: italic;
&::before {
&:before {
content: "\2014";
padding-inline-end: 5px;
padding-right: 5px;
}
}
}
@@ -162,6 +160,24 @@ pre {
overflow-x: auto; /* add scrollbars to wide code blocks*/
}
p > code,
a > code,
li > code,
figcaption > code,
td > code {
padding-top: 0.1rem;
padding-bottom: 0.1rem;
font-size: 0.8em;
background: $code-background-color;
border-radius: $border-radius;
&:before,
&:after {
letter-spacing: -0.2em;
content: "\00a0"; /* non-breaking space*/
}
}
/* horizontal rule */
hr {
+4 -6
View File
@@ -21,11 +21,11 @@
cursor: pointer;
.icon {
margin-inline-end: 0.5em;
margin-right: 0.5em;
}
.icon + .hidden {
margin-inline-start: -0.5em; /* override for hidden text*/
margin-left: -0.5em; /* override for hidden text*/
}
/* button colors */
@@ -39,9 +39,7 @@
(info, $info-color),
(facebook, $facebook-color),
(twitter, $twitter-color),
(linkedin, $linkedin-color),
(mastodon, $mastodon-color),
(bluesky, $bluesky-color);
(linkedin, $linkedin-color);
@each $buttoncolor, $color in $buttoncolors {
&--#{$buttoncolor} {
@@ -96,4 +94,4 @@
&--small {
font-size: $type-size-7;
}
}
}
-6
View File
@@ -1,6 +0,0 @@
/*!
* Minimal Mistakes Jekyll Theme 4.27.1 by Michael Rose
* Copyright 2013-2025 Michael Rose - mademistakes.com | @mmistakes
* Free for personal and commercial use under the MIT license
* https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
*/
+9 -6
View File
@@ -4,9 +4,11 @@
.page__footer {
@include clearfix;
float: inline-start;
margin-inline: 0;
float: left;
margin-left: 0;
margin-right: 0;
width: 100%;
clear: both;
margin-top: 3em;
color: $muted-text-color;
-webkit-animation: $intro-transition;
@@ -17,7 +19,8 @@
footer {
@include clearfix;
margin-inline: auto;
margin-left: auto;
margin-right: auto;
margin-top: 2em;
max-width: 100%;
padding: 0 1em 2em;
@@ -65,13 +68,13 @@
text-transform: uppercase;
}
li + li::before {
li + li:before {
content: "";
padding-inline-end: 5px;
padding-right: 5px;
}
a {
padding-inline-end: 10px;
padding-right: 10px;
font-weight: bold;
}
+66 -21
View File
@@ -3,7 +3,7 @@
========================================================================== */
form {
margin-bottom: 5px;
margin: 0 0 5px 0;
padding: 1em;
background-color: $form-background-color;
@@ -17,7 +17,7 @@ form {
display: block;
width: 100%;
margin-bottom: 5px * 2;
margin-inline-start: -7px;
*margin-left: -7px;
padding: 0;
color: $text-color;
border: 0;
@@ -45,6 +45,7 @@ button,
select,
textarea {
vertical-align: baseline;
*vertical-align: middle;
}
input,
@@ -101,21 +102,24 @@ input[type="radio"] {
height: auto;
padding: 0;
margin: 3px 0;
*margin-top: 0;
line-height: normal;
cursor: pointer;
border-radius: 0;
border: 0 \9;
box-shadow: none;
}
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box;
padding: 0;
*width: 13px;
*height: 13px;
}
input[type="image"] {
border: 0;
box-shadow: none;
}
input[type="file"] {
@@ -134,6 +138,12 @@ input[type="submit"] {
width: auto;
height: auto;
cursor: pointer;
*overflow: visible;
}
select,
input[type="file"] {
*margin-top: 4px;
}
select {
@@ -163,14 +173,14 @@ input[type="hidden"] {
.radio,
.checkbox {
padding-inline-start: 18px;
padding-left: 18px;
font-weight: normal;
}
.radio input[type="radio"],
.checkbox input[type="checkbox"] {
float: inline-start;
margin-inline-start: -18px;
float: left;
margin-left: -18px;
}
.radio.inline,
@@ -183,7 +193,7 @@ input[type="hidden"] {
.radio.inline + .radio.inline,
.checkbox.inline + .checkbox.inline {
margin-inline-start: 10px;
margin-left: 10px;
}
/*
@@ -238,7 +248,7 @@ select:focus {
.help-inline {
display: inline-block;
vertical-align: middle;
padding-inline-start: 5px;
padding-left: 5px;
}
/*
@@ -269,16 +279,16 @@ select:focus {
.form-inline .radio,
.form-inline .checkbox,
.form-inline .radio {
padding-inline-start: 0;
padding-left: 0;
margin-bottom: 0;
vertical-align: middle;
}
.form-inline .radio input[type="radio"],
.form-inline .checkbox input[type="checkbox"] {
float: inline-start;
margin-inline-start: 0;
margin-inline-end: 3px;
float: left;
margin-left: 0;
margin-right: 3px;
}
/*
@@ -293,7 +303,8 @@ select:focus {
}
.form-search .search-query {
padding-inline: 14px;
padding-left: 14px;
padding-right: 14px;
margin-bottom: 0;
border-radius: 14px;
}
@@ -305,23 +316,23 @@ select:focus {
.form-search .radio,
.form-search .checkbox,
.form-inline .radio {
padding-inline-start: 0;
padding-left: 0;
margin-bottom: 0;
vertical-align: middle;
}
.form-search .radio input[type="radio"],
.form-search .checkbox input[type="checkbox"] {
float: inline-start;
margin-inline-start: 0;
margin-inline-end: 3px;
float: left;
margin-left: 0;
margin-right: 3px;
}
/*
.form--loading
========================================================================== */
.form--loading::before {
.form--loading:before {
content: "";
}
@@ -329,10 +340,10 @@ select:focus {
display: block;
}
.form::before {
.form:before {
position: absolute;
top: 0;
inset-inline-start: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(255, 255, 255, 0.7);
@@ -343,6 +354,40 @@ select:focus {
display: none;
position: absolute;
top: 50%;
inset-inline-start: 50%;
left: 50%;
z-index: 11;
}
/*
Google search form
========================================================================== */
#goog-fixurl {
ul {
list-style: none;
margin-left: 0;
padding-left: 0;
li {
list-style-type: none;
}
}
}
#goog-wm-qt {
width: auto;
margin-right: 10px;
margin-bottom: 20px;
padding: 8px 20px;
display: inline-block;
font-size: $type-size-6;
background-color: #fff;
color: #000;
border-width: 2px !important;
border-style: solid !important;
border-color: $border-color;
border-radius: $border-radius;
}
#goog-wm-sb {
@extend .btn;
}
+9 -7
View File
@@ -13,7 +13,8 @@
&__inner-wrap {
@include clearfix;
margin-inline: auto;
margin-left: auto;
margin-right: auto;
padding: 1em;
max-width: 100%;
display: -webkit-box;
@@ -49,7 +50,7 @@
-ms-flex-item-align: center;
align-self: center;
font-weight: bold;
// z-index: 20;
z-index: 20;
}
.site-subtitle {
@@ -58,16 +59,17 @@
}
.masthead__menu {
float: inline-start;
margin-inline: 0;
float: left;
margin-left: 0;
margin-right: 0;
width: 100%;
clear: both;
.site-nav {
margin-inline-start: 0;
margin-left: 0;
@include breakpoint($small) {
float: inline-end;
float: right;
}
}
@@ -85,7 +87,7 @@
white-space: nowrap;
&--lg {
padding-inline-end: 2em;
padding-right: 2em;
font-weight: 700;
}
}
+39 -44
View File
@@ -10,7 +10,8 @@
@include clearfix;
margin: 0 auto;
max-width: 100%;
padding-inline: 1em;
padding-left: 1em;
padding-right: 1em;
font-family: $sans-serif;
-webkit-animation: $intro-transition;
animation: $intro-transition;
@@ -27,7 +28,7 @@
font-size: $type-size-6;
@include breakpoint($large) {
float: inline-end;
float: right;
width: calc(100% - #{$right-sidebar-width-narrow});
}
@@ -51,7 +52,7 @@
.pagination {
@include clearfix();
float: inline-start;
float: left;
margin-top: 1em;
padding-top: 1em;
width: 100%;
@@ -65,8 +66,8 @@
li {
display: block;
float: inline-start;
margin-inline-start: -1px;
float: left;
margin-left: -1px;
a {
display: block;
@@ -100,18 +101,18 @@
}
&:first-child {
margin-inline-start: 0;
margin-left: 0;
a {
border-start-start-radius: $border-radius;
border-end-start-radius: $border-radius;
border-top-left-radius: $border-radius;
border-bottom-left-radius: $border-radius;
}
}
&:last-child {
a {
border-start-end-radius: $border-radius;
border-end-end-radius: $border-radius;
border-top-right-radius: $border-radius;
border-bottom-right-radius: $border-radius;
}
}
}
@@ -120,7 +121,7 @@
&--pager {
display: block;
padding: 1em 2em;
float: inline-start;
float: left;
width: 50%;
font-family: $sans-serif;
font-size: $type-size-5;
@@ -136,14 +137,14 @@
}
&:first-child {
border-start-end-radius: 0;
border-end-end-radius: 0;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
&:last-child {
margin-inline-start: -1px;
border-start-start-radius: 0;
border-end-start-radius: 0;
margin-left: -1px;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
&.disabled {
@@ -183,28 +184,21 @@
margin: 0 1rem;
color: $masthead-link-color;
text-decoration: none;
-webkit-transition: none;
transition: none;
&:hover {
color: $masthead-link-color-hover;
}
&.site-logo {
margin-inline-start: 0;
margin-inline-end: 0.5rem;
margin-left: 0;
margin-right: 0.5rem;
}
&.site-title {
margin-inline-start: 0;
margin-left: 0;
}
}
img {
-webkit-transition: none;
transition: none;
}
&__toggle {
-ms-flex-item-align: center;
align-self: center;
@@ -239,7 +233,7 @@
&:before {
content: "";
position: absolute;
inset-inline-start: 0;
left: 0;
bottom: 0;
height: 4px;
background: $primary-color;
@@ -261,7 +255,7 @@
.hidden-links {
position: absolute;
top: 100%;
inset-inline-end: 0;
right: 0;
margin-top: 15px;
padding: 5px;
border: 1px solid $border-color;
@@ -286,11 +280,11 @@
}
}
&::before {
&:before {
content: "";
position: absolute;
top: -11px;
inset-inline-end: 10px;
right: 10px;
width: 0;
border-style: solid;
border-width: 0 10px 10px;
@@ -299,11 +293,11 @@
z-index: 0;
}
&::after {
&:after {
content: "";
position: absolute;
top: -10px;
inset-inline-end: 10px;
right: 10px;
width: 0;
border-style: solid;
border-width: 0 10px 10px;
@@ -360,11 +354,11 @@
transition: 0.2s ease-out;
cursor: pointer;
&::before,
&::after {
&:before,
&:after {
content: "";
position: absolute;
inset-inline-end: 1em;
right: 1em;
top: 1.25em;
width: 0.75em;
height: 0.125em;
@@ -445,8 +439,9 @@
}
.active {
margin-inline-start: -0.5em;
padding-inline: 0.5em;
margin-left: -0.5em;
padding-left: 0.5em;
padding-right: 0.5em;
font-weight: bold;
}
@@ -514,8 +509,8 @@
color: #fff;
font-size: $type-size-6;
background: $primary-color;
border-start-start-radius: $border-radius;
border-start-end-radius: $border-radius;
border-top-left-radius: $border-radius;
border-top-right-radius: $border-radius;
}
// Scrollspy marks toc items as .active when they are in focus
@@ -549,23 +544,23 @@
}
li ul > li a {
padding-inline-start: 1.25rem;
padding-left: 1.25rem;
font-weight: normal;
}
li ul li ul > li a {
padding-inline-start: 1.75rem;
padding-left: 1.75rem;
}
li ul li ul li ul > li a {
padding-inline-start: 2.25rem;
padding-left: 2.25rem;
}
li ul li ul li ul li ul > li a {
padding-inline-start: 2.75rem;
padding-left: 2.75rem;
}
li ul li ul li ul li ul li ul > li a {
padding-inline-start: 3.25rem;
padding-left: 3.25rem
}
}
+6 -15
View File
@@ -13,18 +13,17 @@
@mixin notice($notice-color) {
margin: 2em 0 !important; /* override*/
padding: 1em;
color: $text-color;
color: $dark-gray;
font-family: $global-font-family;
font-size: $type-size-6 !important;
text-indent: initial; /* override*/
background-color: mix($background-color, $notice-color, $notice-background-mix);
background-color: mix(#fff, $notice-color, 90%);
border-radius: $border-radius;
box-shadow: 0 1px 1px rgba($notice-color, 0.25);
h4 {
margin-top: 0 !important; /* override*/
margin-bottom: 0.75em;
line-height: inherit;
}
@at-root .page__content #{&} h4 {
@@ -46,25 +45,17 @@
}
a {
color: mix(#000, $notice-color, 10%);
color: $notice-color;
&:hover {
color: mix(#000, $notice-color, 50%);
color: mix(#000, $notice-color, 40%);
}
}
@at-root #{selector-unify(&, "blockquote")} {
border-inline-start-color: mix(#000, $notice-color, 10%);
}
code {
background-color: mix($background-color, $notice-color, $code-notice-background-mix)
background-color: mix(#fff, $notice-color, 95%)
}
pre code {
background-color: inherit;
}
ul {
&:last-child {
margin-bottom: 0; /* override*/
@@ -106,4 +97,4 @@
.notice--danger {
@include notice($danger-color);
}
}
+46 -54
View File
@@ -4,8 +4,10 @@
#main {
@include clearfix;
margin-inline: auto;
padding-inline: 1em;
margin-left: auto;
margin-right: auto;
padding-left: 1em;
padding-right: 1em;
-webkit-animation: $intro-transition;
animation: $intro-transition;
max-width: 100%;
@@ -35,20 +37,21 @@ body {
.page {
@include breakpoint($large) {
float: inline-end;
float: right;
width: calc(100% - #{$right-sidebar-width-narrow});
padding-inline-end: $right-sidebar-width-narrow;
padding-right: $right-sidebar-width-narrow;
}
@include breakpoint($x-large) {
width: calc(100% - #{$right-sidebar-width});
padding-inline-end: $right-sidebar-width;
padding-right: $right-sidebar-width;
}
.page__inner-wrap {
float: inline-start;
float: left;
margin-top: 1em;
margin-inline: 0;
margin-left: 0;
margin-right: 0;
width: 100%;
clear: both;
@@ -56,8 +59,9 @@ body {
.page__meta,
.page__share {
position: relative;
float: inline-start;
margin-inline: 0;
float: left;
margin-left: 0;
margin-right: 0;
width: 100%;
clear: both;
}
@@ -68,11 +72,6 @@ body {
margin-top: 0;
line-height: 1;
a {
color: $text-color;
text-decoration: none;
}
& + .page__meta {
margin-top: -0.5em;
}
@@ -92,7 +91,7 @@ body {
h1, h2, h3, h4, h5, h6 {
.header-link {
position: relative;
inset-inline-start: 0.5em;
left: 0.5em;
opacity: 0;
font-size: 0.8em;
-webkit-transition: opacity 0.2s ease-in-out 0.1s;
@@ -135,20 +134,6 @@ body {
}
}
:not(pre) > code {
padding-top: 0.1rem;
padding-bottom: 0.1rem;
font-size: 0.8em;
background: $code-background-color;
border-radius: $border-radius;
&::before,
&::after {
letter-spacing: -0.2em;
content: "\00a0"; /* non-breaking space*/
}
}
dt {
margin-top: 1em;
font-family: $sans-serif;
@@ -156,7 +141,7 @@ body {
}
dd {
margin-inline-start: 1em;
margin-left: 1em;
font-family: $sans-serif;
font-size: $type-size-6;
}
@@ -168,7 +153,7 @@ body {
/* blockquote citations */
blockquote + .small {
margin-top: -1.5em;
padding-inline-start: 1.25rem;
padding-left: 1.25rem;
}
}
@@ -199,7 +184,8 @@ body {
}
.wrapper {
padding-inline: 1em;
padding-left: 1em;
padding-right: 1em;
@include breakpoint($x-large) {
max-width: $x-large;
@@ -237,14 +223,14 @@ body {
.page__hero-caption {
position: absolute;
bottom: 0;
inset-inline-end: 0;
right: 0;
margin: 0 auto;
padding: 2px 5px;
color: #fff;
font-family: $caption-font-family;
font-size: $type-size-7;
background: #000;
text-align: end;
text-align: right;
z-index: 5;
opacity: 0.5;
border-radius: $border-radius 0 0 0;
@@ -313,11 +299,6 @@ body {
text-transform: uppercase;
}
.page__meta-sep::before {
content: "\2022";
padding-inline: 0.5em;
}
/*
Page taxonomy
========================================================================== */
@@ -328,13 +309,13 @@ body {
}
strong {
margin-inline-end: 10px;
margin-right: 10px;
}
}
.page__taxonomy-item {
display: inline-block;
margin-inline-end: 5px;
margin-right: 5px;
margin-bottom: 8px;
padding: 5px 10px;
text-decoration: none;
@@ -371,11 +352,11 @@ body {
.taxonomy__title {
margin-bottom: 0.5em;
color: $muted-text-color;
color: lighten($text-color, 60%);
}
.taxonomy__count {
color: $muted-text-color;
color: lighten($text-color, 50%);
}
.taxonomy__index {
@@ -408,10 +389,10 @@ body {
.back-to-top {
display: block;
clear: both;
color: $muted-text-color;
color: lighten($text-color, 50%);
font-size: 0.6em;
text-transform: uppercase;
text-align: end;
text-align: right;
text-decoration: none;
}
@@ -420,8 +401,9 @@ body {
========================================================================== */
.page__comments {
float: inline-start;
margin-inline: 0;
float: left;
margin-left: 0;
margin-right: 0;
width: 100%;
clear: both;
}
@@ -463,7 +445,7 @@ body {
}
.comment__avatar-wrapper {
float: inline-start;
float: left;
width: 60px;
height: 60px;
@@ -487,7 +469,7 @@ body {
}
.comment__content-wrapper {
float: inline-end;
float: right;
width: calc(100% - 60px);
@include breakpoint($large) {
@@ -518,13 +500,13 @@ body {
.page__related {
@include clearfix();
float: inline-start;
float: left;
margin-top: 2em;
padding-top: 1em;
border-top: 1px solid $border-color;
@include breakpoint($large) {
float: inline-end;
float: right;
width: calc(100% - #{$right-sidebar-width-narrow});
}
@@ -549,13 +531,23 @@ body {
========================================================================== */
.wide {
.page, .page__related {
.page {
@include breakpoint($large) {
padding-inline-end: 0;
padding-right: 0;
}
@include breakpoint($x-large) {
padding-inline-end: 0;
padding-right: 0;
}
}
.page__related {
@include breakpoint($large) {
padding-right: 0;
}
@include breakpoint($x-large) {
padding-right: 0;
}
}
}
+8 -5
View File
@@ -8,18 +8,18 @@ html {
/* apply a natural box layout model to all elements */
box-sizing: border-box;
background-color: $background-color;
font-size: $doc-font-size;
font-size: 16px;
@include breakpoint($medium) {
font-size: $doc-font-size-medium;
font-size: 18px;
}
@include breakpoint($large) {
font-size: $doc-font-size-large;
font-size: 20px;
}
@include breakpoint($x-large) {
font-size: $doc-font-size-x-large;
font-size: 22px;
}
-webkit-text-size-adjust: 100%;
@@ -64,6 +64,8 @@ audio,
canvas,
video {
display: inline-block;
*display: inline;
*zoom: 1;
}
/* Prevents modern browsers from displaying 'audio' without controls */
@@ -140,6 +142,7 @@ textarea {
button,
input {
*overflow: visible; /* inner spacing ie IE6/7*/
line-height: normal; /* FF3/4 have !important on line-height in UA stylesheet*/
}
@@ -181,4 +184,4 @@ input[type="search"]::-webkit-search-cancel-button {
textarea {
overflow: auto; /* remove vertical scrollbar in IE6-9*/
vertical-align: top; /* readability and alignment cross-browser*/
}
}
+6 -3
View File
@@ -9,7 +9,8 @@
}
.search__toggle {
margin-inline: 1rem;
margin-left: 1rem;
margin-right: 1rem;
height: $nav-toggle-height;
border: 0;
outline: none;
@@ -37,8 +38,10 @@
&__inner-wrap {
width: 100%;
margin-inline: auto;
padding-inline: 1em;
margin-left: auto;
margin-right: auto;
padding-left: 1em;
padding-right: 1em;
-webkit-animation: $intro-transition;
animation: $intro-transition;
-webkit-animation-delay: 0.15s;
+37 -68
View File
@@ -8,16 +8,16 @@
.sidebar {
@include clearfix();
// @include breakpoint(max-width $large) {
// /* fix z-index order of follow links */
// position: relative;
// z-index: 10;
// -webkit-transform: translate3d(0, 0, 0);
// transform: translate3d(0, 0, 0);
// }
@include breakpoint(max-width $large) {
/* fix z-index order of follow links */
position: relative;
z-index: 10;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
@include breakpoint($large) {
float: inline-start;
float: left;
width: calc(#{$right-sidebar-width-narrow} - 1em);
opacity: 0.75;
-webkit-transition: opacity 0.2s ease-in-out;
@@ -32,7 +32,7 @@
/* calculate height of nav list
viewport height - nav height - masthead x-padding
*/
max-height: calc(100vh - #{$nav-height} - 2em);
height: calc(100vh - #{$nav-height} - 2em);
}
}
@@ -63,7 +63,7 @@
img {
width: 100%;
&.emoji {
width: 20px;
height: 20px;
@@ -77,10 +77,10 @@
@include breakpoint($large) {
position: absolute;
top: 0;
inset-inline-end: 0;
right: 0;
width: $right-sidebar-width-narrow;
margin-inline-end: -1 * $right-sidebar-width-narrow;
padding-inline-start: 1em;
margin-right: -1 * $right-sidebar-width-narrow;
padding-left: 1em;
z-index: 10;
&.sticky {
@@ -88,32 +88,25 @@
position: -webkit-sticky;
position: sticky;
top: 2em;
float: inline-end;
.toc {
.toc__menu {
overflow-y: auto;
max-height: calc(100vh - 7em);
}
}
float: right;
}
}
@include breakpoint($x-large) {
width: $right-sidebar-width;
margin-inline-end: -1 * $right-sidebar-width;
margin-right: -1 * $right-sidebar-width;
}
}
.splash .sidebar__right {
@include breakpoint($large) {
position: relative;
float: inline-end;
margin-inline-end: 0;
float: right;
margin-right: 0;
}
@include breakpoint($x-large) {
margin-inline-end: 0;
margin-right: 0;
}
}
@@ -147,13 +140,15 @@
.author__content {
display: table-cell;
vertical-align: top;
padding-inline: 15px 25px;
padding-left: 15px;
padding-right: 25px;
line-height: 1;
@include breakpoint($large) {
display: block;
width: 100%;
padding-inline: 0;
padding-left: 0;
padding-right: 0;
}
a {
@@ -189,7 +184,8 @@
display: table-cell;
vertical-align: middle;
font-family: $sans-serif;
z-index: 20;
z-index: 10;
position: relative;
cursor: pointer;
li:last-child {
@@ -198,38 +194,13 @@
}
}
.author__urls {
span.label {
padding-inline-start: 5px;
}
}
@include breakpoint($large) {
display: block;
}
button {
position: relative;
margin-bottom: 0;
&:before {
@supports (pointer-events: none) {
content: '';
position: fixed;
top: 0;
inset-inline-start: 0;
width: 100%;
height: 100%;
pointer-events: none;
}
}
&.open {
&:before {
pointer-events: auto;
}
}
@include breakpoint($large) {
display: none;
}
@@ -239,13 +210,14 @@
.author__urls {
display: none;
position: absolute;
inset-inline-end: 0;
right: 0;
margin-top: 15px;
padding: 10px;
list-style-type: none;
border: 1px solid $border-color;
border-radius: $border-radius;
background: $background-color;
z-index: -1;
box-shadow: 0 2px 4px 0 rgba(#000, 0.16), 0 2px 10px 0 rgba(#000, 0.12);
cursor: default;
@@ -263,12 +235,12 @@
box-shadow: none;
}
&::before {
&:before {
display: block;
content: "";
position: absolute;
top: -11px;
inset-inline-start: calc(50% - 10px);
left: calc(50% - 10px);
width: 0;
border-style: solid;
border-width: 0 10px 10px;
@@ -285,7 +257,7 @@
content: "";
position: absolute;
top: -10px;
inset-inline-start: calc(50% - 10px);
left: calc(50% - 10px);
width: 0;
border-style: solid;
border-width: 0 10px 10px;
@@ -297,11 +269,6 @@
}
}
ul {
padding: 10px;
list-style-type: none;
}
li {
white-space: nowrap;
}
@@ -309,8 +276,9 @@
a {
display: block;
margin-bottom: 5px;
padding-block: 2px;
padding-inline-end: 5px;
padding-right: 5px;
padding-top: 2px;
padding-bottom: 2px;
color: inherit;
font-size: $type-size-5;
text-decoration: none;
@@ -331,10 +299,10 @@
@include breakpoint($large) {
position: initial;
top: initial;
inset-inline-end: initial;
right: initial;
width: initial;
margin-inline-end: initial;
padding-inline-start: initial;
margin-right: initial;
padding-left: initial;
z-index: initial;
&.sticky {
@@ -344,6 +312,7 @@
@include breakpoint($x-large) {
width: initial;
margin-inline-end: initial;
margin-right: initial;
}
}
+5 -10
View File
@@ -13,11 +13,6 @@ figure.highlight {
line-height: 1.8;
border-radius: $border-radius;
[dir=rtl] & {
direction: ltr;
text-align: start;
}
> pre,
pre.highlight {
margin: 0;
@@ -38,17 +33,17 @@ figure.highlight {
/* line numbers*/
&.gutter,
&.rouge-gutter {
padding-inline-end: 1em;
padding-right: 1em;
width: 1em;
color: $base04;
border-inline-end: 1px solid $base04;
text-align: end;
border-right: 1px solid $base04;
text-align: right;
}
/* code */
&.code,
&.rouge-code {
padding-inline-start: 1em;
padding-left: 1em;
}
}
@@ -326,4 +321,4 @@ figure.highlight {
th, td {
border-bottom: 0;
}
}
}

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