Compare commits

..

No commits in common. "main" and "v0.4.0" have entirely different histories.
main ... v0.4.0

128 changed files with 3680 additions and 6424 deletions

2
.github/FUNDING.yml vendored
View File

@ -1,2 +0,0 @@
github: just-the-docs
open_collective: just-the-docs

35
.github/release-drafter.yml vendored Normal file
View File

@ -0,0 +1,35 @@
references:
- v+
- main
name-template: "v$RESOLVED_VERSION 🌈"
tag-template: "v$RESOLVED_VERSION"
categories:
- title: "🚀 Features"
labels:
- "feature"
- "enhancement"
- title: "🐛 Bug Fixes"
labels:
- "fix"
- "bugfix"
- "bug"
- title: "🧰 Maintenance"
label:
- "chore"
- "dependencies"
change-template: "- $TITLE @$AUTHOR (#$NUMBER)"
version-resolver:
major:
labels:
- "next-major-release"
minor:
labels:
- "next-minor-release"
patch:
labels:
- "patch"
default: minor
template: |
## Changes
$CHANGES

View File

@ -5,90 +5,32 @@ on:
pull_request: pull_request:
branches: branches:
- main - main
- 'v**'
name: CI name: CI
jobs: jobs:
jekyll-build: jekyll-build:
name: Build (jekyll gem) name: Build Jekyll site
runs-on: ubuntu-latest
strategy: strategy:
fail-fast: false
matrix: matrix:
jekyll-version: [3.9, 4.3] jekyll-version: [3.9, 4.3]
os: [ubuntu-latest, macos-latest, windows-latest]
ruby-version: ["3.1", "3.2", "3.3", "3.4"]
runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v3
- name: Setup Ruby ${{ matrix.ruby-version }}
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby-version }}
bundler-cache: false
- name: Bundle Install (Jekyll ${{ matrix.jekyll-version }})
run: bundle install
env:
BUNDLE_GEMFILE: fixtures/Gemfile-jekyll-${{ matrix.jekyll-version }}
- name: Init Search
run: bundle exec rake search:init
env:
BUNDLE_GEMFILE: fixtures/Gemfile-jekyll-${{ matrix.jekyll-version }}
- name: Build Site
run: bundle exec jekyll build
env:
BUNDLE_GEMFILE: fixtures/Gemfile-jekyll-${{ matrix.jekyll-version }}
github-pages-build:
name: Build (github-pages gem)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Ruby - name: Setup Ruby
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
with: with:
ruby-version: "3.4" ruby-version: '3.1' # Not needed with a .ruby-version file
bundler-cache: false bundler-cache: false
- name: Bundle Install - name: Bundle Install
run: bundle install run: bundle install
env: - name: Install Jekyll ${{ matrix.jekyll-version }}
BUNDLE_GEMFILE: fixtures/Gemfile-github-pages run: gem install jekyll -v ${{ matrix.jekyll-version }}
- name: Init Search
run: bundle exec rake search:init
- name: Build Site - name: Build Site
run: bundle exec jekyll build run: bundle exec jekyll build
env:
BUNDLE_GEMFILE: fixtures/Gemfile-github-pages
validate:
name: Validate HTML
strategy:
fail-fast: false
matrix:
ruby-version: ["3.4"]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Ruby ${{ matrix.ruby-version }}
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby-version }}
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
cache-version: 0 # Increment this number if you need to re-download cached gems
- name: Cache HTMLProofer
id: cache-htmlproofer
uses: actions/cache@v3
with:
path: tmp/.htmlproofer
key: ${{ runner.os }}-htmlproofer
- name: Build Site
run: bundle exec jekyll build
- name: Test with Nu Validator
uses: Cyb3r-Jak3/html5validator-action@2a593a9f2c10593cbac84791a6fc4c47e9a106c8
with:
config: fixtures/html5validator-config.yml
- name: Test with html-proofer
run: bundle exec htmlproofer _site --ignore-urls "/github.com/,/web.archive.org/,/flickr.com/"
env:
NOKOGIRI_USE_SYSTEM_LIBRARIES: true
assets: assets:
name: Test CSS and JS name: Test CSS and JS
@ -96,12 +38,12 @@ jobs:
strategy: strategy:
matrix: matrix:
node-version: [22.x] node-version: [18.x]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3 uses: actions/setup-node@v1
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
- run: npm install - run: npm install

View File

@ -30,16 +30,16 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v3
- name: Setup Ruby - name: Setup Ruby
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
with: with:
ruby-version: "3.4" ruby-version: '3.1' # Not needed with a .ruby-version file
bundler-cache: true # runs 'bundle install' and caches installed gems automatically bundler-cache: true # runs 'bundle install' and caches installed gems automatically
cache-version: 0 # Increment this number if you need to re-download cached gems cache-version: 0 # Increment this number if you need to re-download cached gems
- name: Setup Pages - name: Setup Pages
id: pages id: pages
uses: actions/configure-pages@v3 uses: actions/configure-pages@v2
- name: Build with Jekyll - name: Build with Jekyll
# Outputs to the './_site' directory by default # Outputs to the './_site' directory by default
run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}" run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"
@ -47,9 +47,7 @@ jobs:
JEKYLL_ENV: production JEKYLL_ENV: production
- name: Upload artifact - name: Upload artifact
# Automatically uploads an artifact from the './_site' directory by default # Automatically uploads an artifact from the './_site' directory by default
uses: actions/upload-pages-artifact@v3 uses: actions/upload-pages-artifact@v1
with:
path: _site
# Deployment job # Deployment job
deploy: deploy:
@ -61,4 +59,4 @@ jobs:
steps: steps:
- name: Deploy to GitHub Pages - name: Deploy to GitHub Pages
id: deployment id: deployment
uses: actions/deploy-pages@v4 uses: actions/deploy-pages@v1

View File

@ -1,6 +1,7 @@
name: Publish Ruby Gem name: Publish Ruby Gem
on: workflow_dispatch on:
workflow_dispatch
jobs: jobs:
build: build:
@ -8,11 +9,11 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v3
- name: Setup Ruby 3.4 - name: Set up Ruby 3.1
uses: ruby/setup-ruby@v1 uses: actions/setup-ruby@v1
with: with:
ruby-version: "3.4" ruby-version: 3.1
- name: Publish to GPR - name: Publish to GPR
run: | run: |
@ -26,14 +27,13 @@ jobs:
GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}" GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}"
OWNER: ${{ github.repository_owner }} OWNER: ${{ github.repository_owner }}
# Disabled as this does not handle 2FA - name: Publish to RubyGems
# - name: Publish to RubyGems run: |
# run: | mkdir -p $HOME/.gem
# mkdir -p $HOME/.gem touch $HOME/.gem/credentials
# touch $HOME/.gem/credentials chmod 0600 $HOME/.gem/credentials
# chmod 0600 $HOME/.gem/credentials printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
# printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials gem build *.gemspec
# gem build *.gemspec gem push *.gem
# gem push *.gem env:
# env: GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
# GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"

33
.gitignore vendored
View File

@ -1,30 +1,9 @@
# Not sure what a .gitignore is?
# See: https://git-scm.com/docs/gitignore
# The first files are directly copied from Jekyll's first-party docs on `.gitignore` files:
# https://jekyllrb.com/tutorials/using-jekyll-with-bundler/#commit-to-source-control
# Ignore the default location of the built site, and caches and metadata generated by Jekyll
_site/
.sass-cache/
.jekyll-cache/
.jekyll-metadata
# Ignore folders generated by Bundler
.bundle/
vendor/
# These next files are used by Just the Docs developers. They are not necessary for end users of the theme, only developers.
# We use Stylelint and Prettier, JavaScript tools, to lint and format our own code.
# We use Node.js as our runtime, so we ignore node_modules
node_modules
# .DS_Store is a macOS-only metadata file about directories. Convention is to not commit them.
# See: https://en.wikipedia.org/wiki/.DS_Store
.DS_Store
# These are legacy globs that typically target Ruby theme developers. We may change these at a later date.
*.gem *.gem
.bundle .bundle
.ruby-version .ruby-version
.jekyll-cache
.sass-cache
_site
Gemfile.lock
node_modules
.DS_Store

View File

@ -1,3 +1,4 @@
package.json
package-lock.json package-lock.json
_site _site
assets/css/just-the-docs-default.scss assets/css/just-the-docs-default.scss
@ -5,7 +6,5 @@ assets/css/just-the-docs-light.scss
assets/css/just-the-docs-dark.scss assets/css/just-the-docs-dark.scss
assets/js/vendor/lunr.min.js assets/js/vendor/lunr.min.js
assets/js/search-data.json assets/js/search-data.json
assets/js/zzzz-search-data.json
assets/js/just-the-docs.js assets/js/just-the-docs.js
*.md *.md
_includes/mermaid_config.js

7
.prettierrc Normal file
View File

@ -0,0 +1,7 @@
{
"endOfLine": "lf",
"semi": false,
"singleQuote": false,
"tabWidth": 2,
"trailingComma": "es5"
}

20
.stylelintrc.json Normal file
View File

@ -0,0 +1,20 @@
{
"ignoreFiles": [
"assets/css/just-the-docs-default.scss",
"assets/css/just-the-docs-light.scss",
"assets/css/just-the-docs-dark.scss",
"_sass/vendor/**/*.scss"
],
"extends": [
"stylelint-config-standard-scss",
"stylelint-config-prettier-scss"
],
"plugins": ["stylelint-prettier"],
"rules": {
"prettier/prettier": true,
"alpha-value-notation": null,
"color-function-notation": null,
"no-descending-specificity": null,
"scss/no-global-function-names": null
}
}

View File

@ -15,647 +15,12 @@ The project underwent a major maintenance shift in March 2022.
{: .note } {: .note }
This website is built from the `HEAD` of the `main` branch of the theme repository. This website is built from the `HEAD` of the `main` branch of the theme repository.
Code changes to `main` that are *not* in the latest release:
- N/A
Docs changes made since the latest release:
- N/A
## Release v0.10.1
Hi folks! This patch fixes two bugs related to generated navigation elements and improves our docs.
This release should be a straightforward upgrade for all users of Just the Docs. Thank you for your continued support!
### Bugfixes
- Fixed: `back_to_top` not displaying when no other footer variables are set by [@mattxwang] in [#1461]
- Fixed: auto-generated child navigation (TOC) by [@pdmosses] in [#1590]
### Documentation
- Fixed: incorrect docs for example with minimal layout parent, default layout child by [@janbrasna] in [#1540]
- Fixed: unclear docs on using in-page table of contents by [@sebjameswml] in [#1551]
### New Contributors
- [@janbrasna] made their first contribution in [#1540]
- [@sebjameswml] made their first contribution in [#1551]
[@janbrasna]: https://github.com/janbrasna
[@sebjameswml]: https://github.com/sebjameswml
[#1461]: https://github.com/just-the-docs/just-the-docs/pull/1461
[#1540]: https://github.com/just-the-docs/just-the-docs/pull/1540
[#1551]: https://github.com/just-the-docs/just-the-docs/pull/1551
[#1590]: https://github.com/just-the-docs/just-the-docs/pull/1590
## Release v0.10.0
Hi folks! This minor release adds one of our most-requested features: unlimited multi-level navigation (also known as recursive navigation). Huge thanks to [@pdmosses] for his wonderful work in implementing this feature!
This release should be a straightforward upgrade for all users of Just the Docs. Thank you for your continued support!
### Using Release `v0.10.0`
Users who have not pinned the theme version will be **automatically upgraded to `v0.9.0` the next time they build their site**.
To use this release explicitly as a remote theme:
```yml
remote_theme: just-the-docs/just-the-docs@v0.10.0
```
To use this version explicitly as a gem-based theme, pin the version in your `Gemfile` and re-run `bundle install` or `bundle update just-the-docs`:
```ruby
gem "just-the-docs", "0.10.0"
```
To use and pin a previous version of the theme, replace the `0.10.0` with the desired release tag.
### New Features
- Added: Allow unlimited multi-level navigation by [@pdmosses] in [#1431]
### Documentation
- Added: Allow unlimited multi-level navigation by [@pdmosses] in [#1440]
- Added: sitemap (via `jekyll-sitemap` plugin) by [@mattxwang] in [#1530]
- Fixed: (non-systemic) accessibility issues flagged by aXe by [@mattxwang] in [#1531]
[#1431]: https://github.com/just-the-docs/just-the-docs/pull/1431
[#1440]: https://github.com/just-the-docs/just-the-docs/pull/1440
[#1530]: https://github.com/just-the-docs/just-the-docs/pull/1530
[#1530]: https://github.com/just-the-docs/just-the-docs/pull/1531
## Release v0.9.0
Hi folks! This minor release adds a `nav_enabled` set of variables to enable/disable the navigation at a site, layout, and page level --- and uses that to add search and auxilary links to the `minimal` layout. In addition, it fixes `search-data.json` corruption with default layouts and some minor CSS/SCSS issues.
This release should be a straightforward upgrade for all users of Just the Docs. Thank you for your continued support!
### Using Release `v0.9.0`
Users who have not pinned the theme version will be **automatically upgraded to `v0.9.0` the next time they build their site**.
To use this release explicitly as a remote theme:
```yml
remote_theme: just-the-docs/just-the-docs@v0.9.0
```
To use this version explicitly as a gem-based theme, pin the version in your `Gemfile` and re-run `bundle install` or `bundle update just-the-docs`:
```ruby
gem "just-the-docs", "0.9.0"
```
To use and pin a previous version of the theme, replace the `0.9.0` with the desired release tag.
### New Features
- Added: `nav_enabled` site, layout, and page-level variable to selectively show or hide the side/mobile menu by [@kevinlin1] in [#1441]
- Added: site-wide search bar and auxiliary links to the `minimal` layout by [@kevinlin1] in [#1441]
### Bugfixes
- Fixed: protect `search-data.json` file from front matter default for layout by [@mattxwang] in [#1468]
- Fixed: Sass mixed declarations by [@bobvandevijver] in [#1495]
- Fixed: redundant `monospace` in `pre`, `code`, `kbd`, `samp` reset by [@mattxwang] in [#1508]
### Documentation
- Docs: Explained the `nav_enabled` variables as an alternative to using the minimal layout [@kevinlin1] in [#1441].
### New Contributors
- [@bobvandevijver] made their first contribution in [#1495]
[@bobvandevijver]: https://github.com/bobvandevijver
[#1441]: https://github.com/just-the-docs/just-the-docs/pull/1441
[#1468]: https://github.com/just-the-docs/just-the-docs/pull/1468
[#1495]: https://github.com/just-the-docs/just-the-docs/pull/1495
[#1508]: https://github.com/just-the-docs/just-the-docs/pull/1508
## Release v0.8.2
Hi everyone! This patch release fixes a bug where a default layout with unrestricted `scope` (`path: ""`) breaks JavaScript functionality. Users who do not use a default layout with unrestricted `scope` should not be affected. This should be a straightforward upgrade for all users. Thank you to [@pdmosses] for triaging and fixing the bug!
### Bugfixes
- Fixed: Protect theme JS file from front matter default for layout by [@pdmosses] in [#1447]
[#1447]: https://github.com/just-the-docs/just-the-docs/pull/1447
## Release v0.8.1
Hi folks! This patch release fixes a bug introduced in `0.8.0` that affects users who build their sites in strict mode. It is a straightforward upgrade that should require no manual migration changes. Thank you to [@Zarthus] for quickly catching and fixing this bug!
### Bugfixes
- Fixed: Liquid filter typo in breadcrumb component (`strip` instead of `trim`) by [@Zarthus] in [#1434]
### Documentation
- Build docs site using strict mode and `strict_filters` by [@Zarthus] in [#1435]
### New Contributors
- [@Zarthus] made their first contribution in [#1434]
[@Zarthus]: https://github.com/Zarthus
[#1434]: https://github.com/just-the-docs/just-the-docs/pull/1434
[#1435]: https://github.com/just-the-docs/just-the-docs/pull/1435
## Release v0.8.0
Hi folks! This first minor release of 2024 has a short number of changes: a large improvement of build times for large sites, a new keyboard shortcut to focus the search bar, and sidebar navigation bugfixes for "pretty" URLs (with `.html` omitted) and the clickable area on Safari. This release has no explicit breaking changes and should be a straightforward upgrade for most (if not all) users.
### Using Release `v0.8.0`
Users who have not pinned the theme version will be **automatically upgraded to `v0.8.0` the next time they build their site**.
To use this release explicitly as a remote theme:
```yml
remote_theme: just-the-docs/just-the-docs@v0.8.0
```
To use this version explicitly as a gem-based theme, pin the version in your `Gemfile` and re-run `bundle install` or `bundle update just-the-docs`:
```ruby
gem "just-the-docs", "0.8.0"
```
To use and pin a previous version of the theme, replace the `0.8.0` with the desired release tag.
### New Features
- Added: configurable keyboard shortcut to focus search input by [@kcromanpl-bajra] in [#1411]
### Bugfixes
- Fixed: quicker build by [@pdmosses] in [#1397]
- Fixed: incorrect navigation when `.html` omitted from URL by [@pdmosses] in [#1374]
- Fixed: incorrect positioning of clickable area for navigation links on Safari by [@mattxwang] in [#1403]
### Documentation
- Add documentation to "Navigation Structure" on grouping pages with collections by [@mitchnemirov] in [#1390]
### New Contributors
- [@mitchnemirov] made their first contribution in [#1390]
- [@kcromanpl-bajra] made their first contribution in [#1411]
[@mitchnemirov]: https://github.com/mitchnemirov
[@kcromanpl-bajra]: https://github.com/kcromanpl-bajra
[#1374]: https://github.com/just-the-docs/just-the-docs/pull/1374
[#1390]: https://github.com/just-the-docs/just-the-docs/pull/1390
[#1397]: https://github.com/just-the-docs/just-the-docs/pull/1397
[#1403]: https://github.com/just-the-docs/just-the-docs/pull/1403
[#1411]: https://github.com/just-the-docs/just-the-docs/pull/1411
## Release v0.7.0
Hi folks! This is a minor release that adds a new configuration option for opening external links in a new tab and provides many bugfixes (in both correctness and performance) for Just the Docs users with large sites. We anticipate that for most users, this is a straightforward upgrade. However, it introduces some potentially-breaking *internal* changes to undocumented features of the theme.
### Migrating to `v0.7.0`
**Migration**: users will need to migrate if:
- they overrode `_includes/nav.html`, which has moved to `_includes/components/nav.html`
- they have an element with the IDs `jtd-nav-activation` or `jtd-head-nav-stylesheet`
For more, refer to the [migration guide](https://just-the-docs.com/MIGRATION/).
### Using Release `v0.7.0`
Users who have not pinned the theme version will be **automatically upgraded to `v0.7.0` the next time they build their site**.
To use this release explicitly as a remote theme:
```yml
remote_theme: just-the-docs/just-the-docs@v0.7.0
```
To use this version explicitly as a gem-based theme, pin the version in your `Gemfile` and re-run `bundle install` or `bundle update just-the-docs`:
```ruby
gem "just-the-docs", "0.7.0"
```
To use and pin a previous version of the theme, replace the `0.7.0` with the desired release tag.
### New Features
- Added: configuration options for opening external links in new tab by [@CarbonNeuron] in [#1360]
### Bugfixes
- Fixed: remove href from the navigation link to the current page by [@pdmosses] in [#1356]
- Fixed: improve build time by [@pdmosses] in [#1358]
- Fixed: erroneous parentheses in `site_nav` conditional by [@mattxwang] in [#1366]
- Fixed: navigation scroll to active link regression by [@pdmosses] in [#1367]
- Fixed: invalid CSS rules in head elements by [@pdmosses] in [#1368]
- Fixed: accidental disabling of forward-declared stylesheets by [@mattxwang] in [#1373]
{: .warning } {: .warning }
[#1358] moved `_includes/nav.html` to the `_includes/components` directory, This website includes docs for some new features that are not available in `v0.4.0`!
Users who were overriding that file will need to adjust their sites accordingly.
### Documentation: Changes to `main` that are *not* in the latest release:
- Docs: fix typos in `CHANGELOG` and `MIGRATION` by [@thapasusheel] in [#1377] - n/a
### New Contributors
- [@CarbonNeuron] made their first contribution in [#1360]
- [@thapasusheel] made their first contribution in [#1377]
[@CarbonNeuron]: https://github.com/CarbonNeuron
[@thapasusheel]: https://github.com/thapasusheel
[#1356]: https://github.com/just-the-docs/just-the-docs/pull/1356
[#1358]: https://github.com/just-the-docs/just-the-docs/pull/1358
[#1360]: https://github.com/just-the-docs/just-the-docs/pull/1360
[#1366]: https://github.com/just-the-docs/just-the-docs/pull/1366
[#1367]: https://github.com/just-the-docs/just-the-docs/pull/1367
[#1368]: https://github.com/just-the-docs/just-the-docs/pull/1368
[#1373]: https://github.com/just-the-docs/just-the-docs/pull/1373
[#1377]: https://github.com/just-the-docs/just-the-docs/pull/1377
## Release v0.6.2
Hi all, this is a small patch release that includes two changes: adding a missing Windows emoji font fallback, and removing some (now-unused) code introduced in 0.6.
### Bugfixes
- Fixed: Windows emoji font fallback by [@flanakin] in [#1337]
- Removed: unused `.passive` toggle in navigation by [@pdmosses] in [#1335]
[#1335]: https://github.com/just-the-docs/just-the-docs/pull/1335
[#1337]: https://github.com/just-the-docs/just-the-docs/pull/1337
### New Contributors
- [@flanakin] made their first contribution in [#1337]
[@flanakin]: https://github.com/flanakin
## Release v0.6.1
Hi all, this is a small patch release that only includes one change: resolving a bug introduced in 0.6.0 that causes a JS error for pages excluded from navigation.
### Bugfixes
- Fixed: JS error for pages excluded from navigation by [@pdmosses] in [#1332]
[#1332]: https://github.com/just-the-docs/just-the-docs/pull/1332
## Release v0.6.0
Hi all, this is a minor release that introduces performance improvements for build times on large sites, correctly sets the `color-scheme` property, and fixes invalid HTML. However, it introduces some potentially-breaking *internal* changes to undocumented features of the theme.
### Migrating to `v0.6.0`
**Migration**: users will need to migrate if:
- they have an existing `_includes` file named `favicon.html`, `head_nav.html`, or `css/activation.scss.liquid`
- they have code that refers to `#main-content-wrap`
- they override the default `light` theme's code, or the theme-loading logic
- they have different favicons for different pages
For more, refer to the [migration guide](https://just-the-docs.com/MIGRATION/).
### Using Release `v0.6.0`
Users who have not pinned the theme version will be **automatically upgraded to `v0.6.0` the next time they build their site**.
To use this release explicitly as a remote theme:
```yml
remote_theme: just-the-docs/just-the-docs@v0.6.0
```
To use this version explicitly as a gem-based theme, pin the version in your `Gemfile` and re-run `bundle install` or `bundle update just-the-docs`:
```ruby
gem "just-the-docs", "0.6.0"
```
To use and pin a previous version of the theme, replace the `0.6.0` with the desired release tag.
### New Features and Bugfixes
- Added: `$color-scheme` theme variable to specify `color-scheme` for `:root` by [@sigv] in [#1280]
- Fixed: build times for large sites by [@pdmosses] in [#1244]
- Fixed: missing closing `</button>` tag in `sidebar.html` by [@mattxwang] in [#1304]
- Fixed: removed duplicate `#main-content-wrap` minimal and default layouts by [@mattxwang] in [#1305]
### Documentation
{: .warning }
The theme docs are unversioned, and already reflect the above changes.
Docs changes:
- A [footnote]({% link docs/configuration.md %}#fn:js-disabled) in the configuration docs explains how disabling JavaScript affects the display of navigation links when browsing folded collections.
- Invalid HTML has been removed from most documentation examples.
### New Contributors
- [@sigv] made their first contribution in [#1280]
[@sigv]: https://github.com/sigv
[#1244]: https://github.com/just-the-docs/just-the-docs/pull/1244
[#1280]: https://github.com/just-the-docs/just-the-docs/pull/1280
[#1304]: https://github.com/just-the-docs/just-the-docs/pull/1304
[#1305]: https://github.com/just-the-docs/just-the-docs/pull/1305
## Release v0.5.4
Hi all, this is a small patch release that only includes one change: fixing a style clash between Mermaid's labels and Just the Docs' labels.
*Note: for subsequent patch releases, we will omit migration instructions (for brevity). In all cases, immediate migration should be backwards-compatible. Refer to previous major or minor update instructions for more information.*
### Bugfixes
- Fixed: Mermaid labels inheriting theme `.label` styling by [@mattxwang] in [#1278]
[#1278]: https://github.com/just-the-docs/just-the-docs/pull/1278
## Release v0.5.3
Hi all, this is a minor patch release that only includes one change: changing all text-based CSS properties to use `rem` instead of hard-coded `px` values. This has two effects:
1. All deprecation warnings are now fixed on build; you should now get a clean build with `jekyll build`.
2. We have **deprecated the `$root-font-size` SCSS variable**. We will remove it in an upcoming release of the theme.
If you use the stock Just the Docs theme, this release should have no impact on your final built site. If you change the `$root-font-size` SCSS variable, you might experience light layout shifts.
### Using Release `v0.5.3`
Users who have not pinned the theme version will be **automatically upgraded to `v0.5.3` the next time they build their site**.
To use this release explicitly as a remote theme:
```yml
remote_theme: just-the-docs/just-the-docs@v0.5.3
```
To use this version explicitly as a gem-based theme, pin the version in your `Gemfile` and re-run `bundle install` or `bundle update just-the-docs`:
```ruby
gem "just-the-docs", "0.5.3"
```
To use and pin a previous version of the theme, replace the `0.5.3` with the desired release tag.
### Bugfixes
- Fixed: font-size scaling for text-related CSS properties by using `rem` instead of fixed `px` values; deprecate `$root-font-size` by [@mattxwang] in [#1169]
[#1169]: https://github.com/just-the-docs/just-the-docs/pull/1169
## Release v0.5.2
Hi all, this is a minor patch release that mostly focuses on accessibility. Since we follow semantic versioning, this should be a smooth upgrade with no breaking changes.
In addition, the theme docs website has a new canonical URL: <https://just-the-docs.com>. We've also retroactively published the theme docs website for version `v0.3.3` at <https://v0-3-3-docs.just-the-docs.com/>. Thank you to our GitHub sponsors for funding our domain name!
### Using Release `v0.5.2`
Users who have not pinned the theme version will be **automatically upgraded to `v0.5.2` the next time they build their site**.
To use this release explicitly as a remote theme:
```yml
remote_theme: just-the-docs/just-the-docs@v0.5.2
```
To use this version explicitly as a gem-based theme, pin the version in your `Gemfile` and re-run `bundle install` or `bundle update just-the-docs`:
```ruby
gem "just-the-docs", "0.5.2"
```
To use and pin a previous version of the theme, replace the `0.5.2` with the desired release tag.
### Bugfixes
- Fixed: liquid variable leakage in navigation components by [@pdmosses] in [#1243]
- Fixed: ARIA roles and labels for search, header, logo, mobile menu button, and main content by [@joelhawksley] in [#1259]
- Fixed: ARIA labels for all anchors with `href="#"`; adds `aria-pressed` information for toggles by [@mattxwang] in [#1262]
### New Contributors
- [@joelhawksley] made their first contribution in [#1259]
[@joelhawksley]: https://github.com/joelhawksley
[#1243]: https://github.com/just-the-docs/just-the-docs/pull/1243
[#1259]: https://github.com/just-the-docs/just-the-docs/pull/1259
[#1262]: https://github.com/just-the-docs/just-the-docs/pull/1262
## Release v0.5.1
Hi all, this is a very small minor patch release that has two small behavioral bugfixes: fixing a regression introduced in `v0.5.0` on Safari versions `<16.4` (broken media query), and the copy code button providing incorrect feedback in insecure browser contexts. This should be a smooth upgrade with no breaking changes.
As always, we'd love your feedback. [Open an issue](https://github.com/just-the-docs/just-the-docs/issues) or [start a discussion](https://github.com/just-the-docs/just-the-docs/discussions) for bug reports, feature requests, and any other feedback. Thanks for continuing to use Just the Docs!
### Using Release `v0.5.1`
Users who have not pinned the theme version will be **automatically upgraded to `v0.5.1` the next time they build their site**.
To use this release explicitly as a remote theme:
```yml
remote_theme: just-the-docs/just-the-docs@v0.5.1
```
To use this version explicitly as a gem-based theme, pin the version in your `Gemfile` and re-run `bundle install` or `bundle update just-the-docs`:
```ruby
gem "just-the-docs", "0.5.1"
```
To use and pin a previous version of the theme, replace the `0.5.1` with the desired release tag.
### Bugfixes
- Fixed: disable copy code button in insecure contexts [@rmoff] in [#1226]
- Fixed: context-based media feature not supported by Safari `<16.4` by [@mattxwang] in [#1240]
### Documentation
- Added: document copy code button requiring secure context by [@rmoff] in [#1225]
- Fixed: typo ("them" → "theme") in MIGRATION.md by [@waldyrious] in [#1219]
- Fixed: `font-weight` typo (Utilities > Typography) by [@mattxwang] in [#1229]
- Fixed: `just the docs` typo in migration guide by [@mattxwang] in [#1230]
### New Contributors
- [@rmoff] made their first contribution in [#1225]
[#1219]: https://github.com/just-the-docs/just-the-docs/pull/1219
[#1225]: https://github.com/just-the-docs/just-the-docs/pull/1225
[#1226]: https://github.com/just-the-docs/just-the-docs/pull/1226
[#1229]: https://github.com/just-the-docs/just-the-docs/pull/1229
[#1230]: https://github.com/just-the-docs/just-the-docs/pull/1230
[#1240]: https://github.com/just-the-docs/just-the-docs/pull/1240
[@rmoff]: https://github.com/rmoff
## Release v0.5.0
Hope your April is going well! This new release of Just the Docs is relatively minor. It has one **breaking change**: we've reverted the import order of `setup.scss` to be *before* color schemes. In addition, we include two requested fixes: color contrast issues with `::selection` and using Just the Docs with mermaid versions `>=10`.
We've marked this as a minor version bump due to the breaking change. In the next section, we briefly outline what migration steps should be. Users who did not migrate to `v0.4.2` or who do not have a custom `setup.scss` are guaranteed no breaking changes.
As always, we'd love your feedback. [Open an issue](https://github.com/just-the-docs/just-the-docs/issues) or [start a discussion](https://github.com/just-the-docs/just-the-docs/discussions) for bug reports, feature requests, and any other feedback. Thanks for continuing to use Just the Docs!
### Migrating to `v0.5.0`
**Migration**: users with a custom `setup.scss` cannot rely on variables or functions defined in `color_scheme`. This reverts to the behaviour in `v0.4.1`. Users should instead move those variables or functions to the `color_scheme` files themselves.
For more, refer to the [migration guide](https://just-the-docs.com/MIGRATION/).
### Using Release `v0.5.0`
Users who have not pinned the theme version will be **automatically upgraded to `v0.5.0` the next time they build their site**.
To use this release explicitly as a remote theme:
```yml
remote_theme: just-the-docs/just-the-docs@v0.5.0
```
To use this version explicitly as a gem-based theme, pin the version in your `Gemfile` and re-run `bundle install` or `bundle update just-the-docs`:
```ruby
gem "just-the-docs", "0.5.0"
```
To use and pin a previous version of the theme, replace the `0.5.0` with the desired release tag.
### Bugfixes
- **Reverted (breaking)**: "Fix import order for `setup.scss` (#1184)" by [@mattxwang] in [#1209]
- Fixed: color contrast issues with `::selection` (reverting to browser defaults) [@mattxwang] in [#1208]
- Fixed: mermaid `v10`, bundle all mermaid code in component by [@mattxwang] in [#1190]
- Removed: unused images (`just-the-docs.png`, `search.svg`) by [@mattxwang] in [#1107]
- Removed: `CODE_OF_CONDUCT`, `docker-compose`, and `Dockerfile` files from site by [@mattxwang] in [#1187]
**Full Changelog**: [https://github.com/just-the-docs/just-the-docs/compare/v0.4.2...v0.5.0](https://github.com/just-the-docs/just-the-docs/compare/v0.4.2...v0.5.0)
[#1107]: https://github.com/just-the-docs/just-the-docs/pull/1107
[#1187]: https://github.com/just-the-docs/just-the-docs/pull/1187
[#1190]: https://github.com/just-the-docs/just-the-docs/pull/1190
[#1208]: https://github.com/just-the-docs/just-the-docs/pull/1208
[#1209]: https://github.com/just-the-docs/just-the-docs/pull/1209
## Release v0.4.2
Hello! We're back again with another small release. Like `v0.4.1`, this release is a [semver patch](https://semver.org/): it only includes bugfixes, and is fully backwards-compatible.
The big highlight of this theme is fixing our light scheme code highlighting contrast issues; this was one of our most-requested features! This change is fully backwards-compatible; users can [opt-in to our old highlighting theme](https://just-the-docs.com/docs/customization/#deprecated-legacy_light) by using `legacy_light` instead of `light`.
As always, we'd love your feedback. [Open an issue](https://github.com/just-the-docs/just-the-docs/issues) or [start a discussion](https://github.com/just-the-docs/just-the-docs/discussions) for bug reports, feature requests, and any other feedback. Thanks for continuing to use Just the Docs!
### Using Release `v0.4.2`
Users who have not pinned the theme version will be **automatically upgraded to `v0.4.2` the next time they build their site**.
To use this release explicitly as a remote theme:
```yml
remote_theme: just-the-docs/just-the-docs@v0.4.2
```
To use this RC explicitly as a gem-based theme, pin the version in your `Gemfile` and re-run `bundle install` or `bundle update just-the-docs`:
```ruby
gem "just-the-docs", "0.4.2"
```
To use and pin a previous version of the theme, replace the `0.4.2` with the desired release tag.
### Bugfixes
- Fixed: light scheme code highlighting contrast issues; updated to use Atom's One Light colors, consolidate theme variables by [@mattxwang] in [#1166]
- Fixed: duplicate import of `color_schemes` by [@mattxwang] in [#1173]
- Fixed: import order for `setup.scss` by [@mattxwang] in [#1184]
- Removed: unused dark syntax themes by [@mattxwang] in [#1192]
### Documentation
- Added: docs for using mermaid with AsciiDoc by [@flyx] in [#1182]
**Full Changelog**: [https://github.com/just-the-docs/just-the-docs/compare/v0.4.1...v0.4.2](https://github.com/just-the-docs/just-the-docs/compare/v0.4.1...v0.4.2)
[#1166]: https://github.com/just-the-docs/just-the-docs/pull/1166
[#1173]: https://github.com/just-the-docs/just-the-docs/pull/1173
[#1182]: https://github.com/just-the-docs/just-the-docs/pull/1182
[#1184]: https://github.com/just-the-docs/just-the-docs/pull/1184
[#1192]: https://github.com/just-the-docs/just-the-docs/pull/1192
## Release v0.4.1
Hello! We hope you've been enjoying the new `v0.4.0`; we appreciate all the feedback we've gotten already! As promised, future releases will be small with simple steps to upgrade. This is one of them! `v0.4.1` is a [semver patch](https://semver.org/): it only includes bugfixes, and is fully backwards-compatible.
As always, we'd love your feedback. [Open an issue](https://github.com/just-the-docs/just-the-docs/issues) or [start a discussion](https://github.com/just-the-docs/just-the-docs/discussions) for bug reports, feature requests, and any other feedback. Thanks for continuing to use Just the Docs!
### Using Release `v0.4.1`
Users who have not pinned the theme version will be **automatically upgraded to `v0.4.1` the next time they build their site**.
To use this release explicitly as a remote theme:
```yml
remote_theme: just-the-docs/just-the-docs@v0.4.1
```
To use this RC explicitly as a gem-based theme, pin the version in your `Gemfile` and re-run `bundle install` or `bundle update just-the-docs`:
```ruby
gem "just-the-docs", "0.4.1"
```
To use and pin a previous version of the theme, replace the `0.4.1` with the desired release tag.
### Bugfixes
- Fixed: allow later versions of `bundler` by [@mattxwang] in [#1165]
- Fixed: AsciiDoc code block styling by [@flyx] in [#1168]
- Fixed: main content negative margin for viewports in `[$md, $nav-width + $content-width]` by [@Dima-369] in [#1177]
- Removed: unused `OneDarkJekyll` files by [@mattxwang] in [#1167]
### Documentation
- Fixed: re-add `jekyll-github-metadata` to docs site by [@mattxwang] in [#1108]
### New Contributors
- [@flyx] made their first contribution in [#1168]
- [@Dima-369] made their first contribution in [#1177]
[#1108]: https://github.com/just-the-docs/just-the-docs/pull/1108
[#1165]: https://github.com/just-the-docs/just-the-docs/pull/1165
[#1167]: https://github.com/just-the-docs/just-the-docs/pull/1167
[#1168]: https://github.com/just-the-docs/just-the-docs/pull/1168
[#1177]: https://github.com/just-the-docs/just-the-docs/pull/1177
[@flyx]: https://github.com/flyx
[@Dima-369]: https://github.com/Dima-369
**Full Changelog**: [https://github.com/just-the-docs/just-the-docs/compare/v0.4.0...v0.4.1](https://github.com/just-the-docs/just-the-docs/compare/v0.4.0...v0.4.1)
## Release v0.4.0 ## Release v0.4.0
@ -666,16 +31,16 @@ We're so excited to release Just the Docs `v0.4.0`. This release has been almost
`v0.4.0` contains many new features and bugfixes. We enumerate all of them in further sections in this changelog; however, we'd like to call out some of the most-requested changes: `v0.4.0` contains many new features and bugfixes. We enumerate all of them in further sections in this changelog; however, we'd like to call out some of the most-requested changes:
- better support for dark theme: dark highlighting, search input color - better support for dark theme: dark highlighting, search input color
- [callouts](https://just-the-docs.com/docs/ui-components/callouts/), a new design component to highlight content - [callouts](https://just-the-docs.github.io/just-the-docs/docs/ui-components/callouts/), a new design component to highlight content
- [configuring mermaid.js](https://just-the-docs.com/docs/ui-components/code/#mermaid-diagram-code-blocks), a markdown-native diagram visualization library - [configuring mermaid.js](https://just-the-docs.github.io/just-the-docs/docs/ui-components/code/#mermaid-diagram-code-blocks), a markdown-native diagram visualization library
- [copy code button](https://just-the-docs.com/docs/ui-components/code/#copy-button) for code snippets - [copy code button](https://just-the-docs.github.io/just-the-docs/docs/ui-components/code/#copy-button) for code snippets
- external navigation links - [external navigation links](https://just-the-docs.github.io/just-the-docs/docs/navigation-structure/#external-navigation-links)
- major improvements to nav generation efficiency and robustness - major improvements to nav generation efficiency and robustness
- minor improvements to built-in accessibility (SVG icons, nav titles, skip to main content) - minor improvements to built-in accessibility (SVG icons, nav titles, skip to main content)
- [modularized site components](https://just-the-docs.com/docs/customization/#custom-layouts-and-includes) (advanced feature) - [modularized site components](https://just-the-docs.github.io/just-the-docs/docs/customization/#custom-layouts-and-includes) (advanced feature)
- [new custom includes](https://just-the-docs.com/docs/customization/#override-includes): table of contents heading, navigation panel footer, search placeholder, lunr search indices - [new custom includes](https://just-the-docs.github.io/just-the-docs/docs/customization/#override-includes): table of contents heading, navigation panel footer, search placeholder, lunr search indices
- bugfixes involving WEBrick and Ruby 3, Liquid processing in CSS comments, nested task lists, relative URLs, scroll navigation, corrupted search data from rake, breadcrumbs, and more! - bugfixes involving WEBrick and Ruby 3, Liquid processing in CSS comments, nested task lists, relative URLs, scroll navigation, corrupted search data from rake, breadcrumbs, and more!
- more documentation for [custom includes](https://just-the-docs.com/docs/customization/#override-includes), this changelog, and the [migration guide](https://just-the-docs.com/MIGRATION/) - more documentation for [custom includes](https://just-the-docs.github.io/just-the-docs/docs/customization/#override-includes), this changelog, and the [migration guide](https://just-the-docs.github.io/just-the-docs/MIGRATION/)
*After usage instructions and the roadmap, we enumerate all changes from `v0.3.3`.* *After usage instructions and the roadmap, we enumerate all changes from `v0.3.3`.*
@ -708,7 +73,7 @@ remote_theme: just-the-docs/just-the-docs@v0.3.3
### Migration Guide and Strategies ### Migration Guide and Strategies
We've developed a new [migration guide](https://just-the-docs.com/MIGRATION/) for users to migrate from version `v0.3.3` to `v0.4.0`. It outlines major changes in project maintenance (e.g. new repository link, team) as well as breaking changes that may break your site (and potential solutions). We suggest that all users refer to the guide before manually upgrading their site. We've developed a new [migration guide](https://just-the-docs.github.io/just-the-docs/MIGRATION/) for users to migrate from version `v0.3.3` to `v0.4.0`. It outlines major changes in project maintenance (e.g. new repository link, team) as well as breaking changes that may break your site (and potential solutions). We suggest that all users refer to the guide before manually upgrading their site.
**For the vast majority of users, we do not anticipate that this will be a breaking change.** The major touch points are surrounding new includes, navigation (ordering, pages, and collections), the favicon, and a shift to relative URLs. However, users who heavily customize the theme (primarily by overriding includes) will likely have to make minor changes. **For the vast majority of users, we do not anticipate that this will be a breaking change.** The major touch points are surrounding new includes, navigation (ordering, pages, and collections), the favicon, and a shift to relative URLs. However, users who heavily customize the theme (primarily by overriding includes) will likely have to make minor changes.
@ -916,7 +281,7 @@ This RC does not introduce any major user-facing features. It adds more customiz
### Trying out pre-release `v0.4.0.rc5` ### Trying out pre-release `v0.4.0.rc5`
Similar to the prior release, `v0.4.0.rc5` is a **release candidate** for the theme (i.e., a pre-release) with release `v0.4.0` following immediately after. While we don't anticipate many users using this RC, it is still possible to opt-in. Simlar to the prior release, `v0.4.0.rc5` is a **release candidate** for the theme (i.e., a pre-release) with release `v0.4.0` following immediately after. While we don't anticipate many users using this RC, it is still possible to opt-in.
To use this RC explicitly as a remote theme: To use this RC explicitly as a remote theme:
@ -1017,7 +382,7 @@ Have any questions, thoughts, or concerns? We'd love to hear from you! Please [o
### Trying out pre-release `v0.4.0.rc4` ### Trying out pre-release `v0.4.0.rc4`
Similar to the prior release, `v0.4.0.rc4` is a **release candidate** for the theme (i.e., a pre-release) with release `v0.4.0` coming soon. We want your help in testing the changes! As of now, the gem on RubyGems and the repository are updated to `v0.4.0.rc4`. Simlar to the prior release, `v0.4.0.rc4` is a **release candidate** for the theme (i.e., a pre-release) with release `v0.4.0` coming soon. We want your help in testing the changes! As of now, the gem on RubyGems and the repository are updated to `v0.4.0.rc4`.
To use this RC explicitly as a remote theme: To use this RC explicitly as a remote theme:
@ -1138,7 +503,7 @@ As soon as we get stable test results from major downstream users, we'll push ou
### Trying out pre-release `v0.4.0.rc3` ### Trying out pre-release `v0.4.0.rc3`
Similar to the prior release, `v0.4.0.rc3` is a **release candidate** for the theme (i.e., a pre-release) with release `v0.4.0` coming soon. We want your help in testing the changes! As of now, the gem on RubyGems and the repository are updated to `v0.4.0.rc3`. Simlar to the prior release, `v0.4.0.rc3` is a **release candidate** for the theme (i.e., a pre-release) with release `v0.4.0` coming soon. We want your help in testing the changes! As of now, the gem on RubyGems and the repository are updated to `v0.4.0.rc3`.
To use this RC explicitly as a remote theme: To use this RC explicitly as a remote theme:
@ -1214,7 +579,7 @@ The intention of this release candidate is to gather even more feedback on a pot
### Trying out pre-release `v0.4.0.rc2` ### Trying out pre-release `v0.4.0.rc2`
Similar to the prior release, `v0.4.0.rc2` is a **release candidate** for the theme (i.e., a pre-release) with release `v0.4.0` coming soon. We want your help in testing the changes! As of now, the gem on RubyGems and the repository are updated to `v0.4.0.rc2`. Simlar to the prior release, `v0.4.0.rc2` is a **release candidate** for the theme (i.e., a pre-release) with release `v0.4.0` coming soon. We want your help in testing the changes! As of now, the gem on RubyGems and the repository are updated to `v0.4.0.rc2`.
To use this RC explicitly as a remote theme: To use this RC explicitly as a remote theme:
@ -1302,7 +667,7 @@ We want your feedback! Are these changes helpful? Are our docs easy to understan
### Trying out pre-release `v0.4.0.rc1` ### Trying out pre-release `v0.4.0.rc1`
Due to the massive scope of these changes, we're making `v0.4.0.rc1` available as a **release candidate** for the theme (i.e., a pre-release) with release `v0.4.0` coming soon. We want your help in testing the changes! As of now, the gem on RubyGems and the repository are updated to `v0.4.0.rc1`. Due to the massive scope of these changes, we're making `v0.4.0.rc1` avaialble as a **release candidate** for the theme (i.e., a pre-release) with release `v0.4.0` coming soon. We want your help in testing the changes! As of now, the gem on RubyGems and the repository are updated to `v0.4.0.rc1`.
To use this RC explicitly as a remote theme: To use this RC explicitly as a remote theme:
@ -1814,7 +1179,7 @@ fixes #291 #256 #293 #177
## v0.2.1 ## v0.2.1
This update fixes security vulnerabilities in the lodash sub-dependency and bumps other dev dependencies to their latest version. This update fixes security vulnerablities in the lodash sub-dependency and bumps other dev dependencies to their latest version.
## v0.2.0 ## v0.2.0

12
Dockerfile Normal file
View File

@ -0,0 +1,12 @@
FROM ruby:2.7
ENV LC_ALL C.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8
WORKDIR /usr/src/app
COPY Gemfile just-the-docs.gemspec ./
RUN gem install bundler && bundle install
EXPOSE 4000

10
Gemfile
View File

@ -1,12 +1,4 @@
source "https://rubygems.org" source "https://rubygems.org"
gemspec gemspec
gem "base64" gem "webrick", "~> 1.7"
gem "csv"
gem "jekyll-github-metadata", ">= 2.15"
gem "jekyll-include-cache", group: :jekyll_plugins
gem "jekyll-sitemap", group: :jekyll_plugins
gem "html-proofer", "~> 5.0", :group => :development

View File

@ -1,175 +0,0 @@
PATH
remote: .
specs:
just-the-docs (0.10.1)
jekyll (>= 3.8.5)
jekyll-include-cache
jekyll-seo-tag (>= 2.0)
rake (>= 12.3.1)
GEM
remote: https://rubygems.org/
specs:
Ascii85 (2.0.1)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
afm (0.2.2)
async (2.23.0)
console (~> 1.29)
fiber-annotation
io-event (~> 1.9)
metrics (~> 0.12)
traces (~> 0.15)
base64 (0.2.0)
bigdecimal (3.1.9)
colorator (1.1.0)
concurrent-ruby (1.3.5)
console (1.29.3)
fiber-annotation
fiber-local (~> 1.1)
json
csv (3.3.3)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
ethon (0.16.0)
ffi (>= 1.15.0)
eventmachine (1.2.7)
faraday (2.9.0)
faraday-net_http (>= 2.0, < 3.2)
faraday-net_http (3.1.0)
net-http
ffi (1.17.1-arm64-darwin)
ffi (1.17.1-x86_64-linux-gnu)
fiber-annotation (0.2.0)
fiber-local (1.1.0)
fiber-storage
fiber-storage (1.0.0)
forwardable-extended (2.6.0)
google-protobuf (4.29.3-arm64-darwin)
bigdecimal
rake (>= 13)
google-protobuf (4.29.3-x86_64-linux)
bigdecimal
rake (>= 13)
hashery (2.1.2)
html-proofer (5.0.10)
addressable (~> 2.3)
async (~> 2.1)
nokogiri (~> 1.13)
pdf-reader (~> 2.11)
rainbow (~> 3.0)
typhoeus (~> 1.3)
yell (~> 2.0)
zeitwerk (~> 2.5)
http_parser.rb (0.8.0)
i18n (1.14.7)
concurrent-ruby (~> 1.0)
io-event (1.9.0)
jekyll (4.4.1)
addressable (~> 2.4)
base64 (~> 0.2)
colorator (~> 1.0)
csv (~> 3.0)
em-websocket (~> 0.5)
i18n (~> 1.0)
jekyll-sass-converter (>= 2.0, < 4.0)
jekyll-watch (~> 2.0)
json (~> 2.6)
kramdown (~> 2.3, >= 2.3.1)
kramdown-parser-gfm (~> 1.0)
liquid (~> 4.0)
mercenary (~> 0.3, >= 0.3.6)
pathutil (~> 0.9)
rouge (>= 3.0, < 5.0)
safe_yaml (~> 1.0)
terminal-table (>= 1.8, < 4.0)
webrick (~> 1.7)
jekyll-github-metadata (2.16.1)
jekyll (>= 3.4, < 5.0)
octokit (>= 4, < 7, != 4.4.0)
jekyll-include-cache (0.2.1)
jekyll (>= 3.7, < 5.0)
jekyll-sass-converter (3.0.0)
sass-embedded (~> 1.54)
jekyll-seo-tag (2.8.0)
jekyll (>= 3.8, < 5.0)
jekyll-sitemap (1.4.0)
jekyll (>= 3.7, < 5.0)
jekyll-watch (2.2.1)
listen (~> 3.0)
json (2.10.2)
kramdown (2.5.1)
rexml (>= 3.3.9)
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
liquid (4.0.4)
listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.4.0)
metrics (0.12.1)
net-http (0.4.1)
uri
nokogiri (1.18.4-arm64-darwin)
racc (~> 1.4)
nokogiri (1.18.4-x86_64-linux-gnu)
racc (~> 1.4)
octokit (6.1.1)
faraday (>= 1, < 3)
sawyer (~> 0.9)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
pdf-reader (2.14.1)
Ascii85 (>= 1.0, < 3.0, != 2.0.0)
afm (~> 0.2.1)
hashery (~> 2.0)
ruby-rc4
ttfunk
public_suffix (6.0.1)
racc (1.8.1)
rainbow (3.1.1)
rake (13.2.1)
rb-fsevent (0.11.2)
rb-inotify (0.11.1)
ffi (~> 1.0)
rexml (3.4.0)
rouge (4.5.1)
ruby-rc4 (0.1.5)
safe_yaml (1.0.5)
sass-embedded (1.83.4-arm64-darwin)
google-protobuf (~> 4.29)
sass-embedded (1.83.4-x86_64-linux-gnu)
google-protobuf (~> 4.29)
sawyer (0.9.2)
addressable (>= 2.3.5)
faraday (>= 0.17.3, < 3)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
traces (0.15.2)
ttfunk (1.8.0)
bigdecimal (~> 3.1)
typhoeus (1.4.1)
ethon (>= 0.9.0)
unicode-display_width (2.6.0)
uri (0.13.2)
webrick (1.9.1)
yell (2.2.2)
zeitwerk (2.7.2)
PLATFORMS
arm64-darwin
x86_64-linux-gnu
DEPENDENCIES
base64
bundler (>= 2.3.5)
csv
html-proofer (~> 5.0)
jekyll-github-metadata (>= 2.15)
jekyll-include-cache
jekyll-sitemap
just-the-docs!
BUNDLED WITH
2.5.9

View File

@ -6,7 +6,7 @@ layout: default
# Migrating and Upgrading # Migrating and Upgrading
Summary Summary
: A site that uses `just-the-docs` (as a theme or as a remote theme) automatically : A site that uses `just-the-docs` (as a theme or as a remote them) automatically
switches to a new release, unless it is pinned to a previous version. switches to a new release, unless it is pinned to a previous version.
This migration guide draws attention to: This migration guide draws attention to:
@ -33,7 +33,7 @@ This document contains instructions on how to migrate and upgrade Just the Docs
> website is built using the current `main` branch of the theme, which may include > website is built using the current `main` branch of the theme, which may include
> changes made after the latest release; see the [CHANGELOG]. > changes made after the latest release; see the [CHANGELOG].
> >
> If your configuration states `theme: just_the_docs` and your `Gemfile` specifies > If your configuration states `theme: just the docs` and your `Gemfile` specifies
> `gem "just-the-docs"`, your website is always built using the latest release. > `gem "just-the-docs"`, your website is always built using the latest release.
{: .note } {: .note }
@ -41,139 +41,8 @@ This document contains instructions on how to migrate and upgrade Just the Docs
> and pull the changes of a new release to your clone, > and pull the changes of a new release to your clone,
> you may need to resolve merge conflicts. > you may need to resolve merge conflicts.
[CHANGELOG]: {% link CHANGELOG.md %} [CHANGELOG]: {{ site.baseurl }}{% link CHANGELOG.md %}
## v0.9.x - v0.10.0
There are no potentially-breaking changes in v0.10.0.
## v0.8.x - v0.9.0
There are no potentially-breaking changes in v0.9.0.
## v0.7.x - v0.8.0
There are no potentially-breaking changes in v0.8.0.
## v0.6.x - v0.7.0
### POTENTIALLY-BREAKING CHANGES in v0.7.0
There are some *very minor* potentially-breaking changes for users in version `v0.7.0`. **They do not affect the vast majority of users**; however, this may affect users of (undocumented) internal theme structure. They concern:
1. the movement of `_includes/nav.html`, which has moved to `_includes/components/nav.html`
- **explicit migration only necessary if users have overridden `_includes/nav.html`**
2. the addition of `<script>` tags with `id`s `jtd-nav-activation` and `jtd-head-nav-stylesheet`
- **explicit migration only necessary if users have existing elements with those IDs**
#### Moved Include
Version `v0.7.0` has moved (and changed the contents of) `_includes/nav.html`; it is now in `_includes/components/nav.html`. This means that user overrides for the component will *no longer be loaded*, reverting to the Just the Docs default.
Users who have overridden this `_includes` should:
1. copy in the new upstream `_includes/components/nav.html` into their site
2. port over any changes from their custom `_includes/nav.html`
No other changes are necessary.
#### New Script IDs
Version `v0.7.0` adds the `id`s `jtd-nav-activation` and `jtd-head-nav-stylesheet` to some existing script tags. This will cause errors for users that have their own custom components with those IDs.
Users who have elements with those `id`s should rename their elements to avoid a collision.
## v0.5.x - v0.6.0
### POTENTIALLY-BREAKING CHANGES in v0.6.0
There are some *very minor* potentially-breaking changes for users in version `v0.6.0`. **They do not affect the vast majority of users**; however, this may affect users of (undocumented) internal theme structure. They concern:
1. the addition of new `_includes/favicon.html`, `_includes/head_nav.html`, and `_includes/css/activation.scss.liquid`
- **explicit migration only necessary if users have defined a custom file with the same name**
2. removing `id="main-content-wrap` from wrapper `div` elements in default layouts
- **explicit migration only necessary if users have written code that depends on `#main-content-wrap`**
3. loading the new `$color-scheme` variable (from the light scheme by default)
- **explicit migration only necessary if users have overridden the base light theme**
4. caching the favicon for the entire site
- **explicit migration only necessary if users have different favicons for different pages**
#### New Includes
Version `v0.6.0` introduces three new `_includes` files:
- `_includes/favicon.html`, which now contains logic previously in `_includes/head.html`: loading `favicon.ico` if no favicon is specified
- `_includes/head_nav.html`, which generates CSS used for the new efficient navigation implementation
- `_includes/css/activation.scss.liquid`, which is used by `head_nav` for navigation implementation
If users have existing `_includes` files with this name, they should be renamed (and imported with their new name) prior to upgrading to `0.6.0`. No other change is necessary.
#### Removed `#main-content-wrap`
In `_layouts/default.html` and `_layouts/minimal.html`, the `id="main-content-wrap"` has been removed from the wrapper div (in part due to a bug with multiple `id`s on one element). Internally, our theme *does not use* these `id`s; for most users, this does not require any action.
However, code that relies on this `id` must be changed. Each of the related elements still has the unique class `.main-content-wrap`, and can be selected with this class. For example, in CSS:
```css
/* OLD */
#main-content-wrap { /* ... */ }
/* NEW */
.main-content-wrap { /* ... */ }
```
Or in JS:
```js
// OLD
document.getElementById("main-content-wrap");
// NEW
document.getElementsByClassName("main-content-wrap")[0];
```
#### New `$color-scheme` variable
The theme now properly sets the `color-scheme` property. To do so, the new `$color-scheme` SCSS variable has been created. The variable has been added to the default `light` scheme, which is *always* loaded by Just the Docs.
Migration is only needed if:
- the packaged `light` scheme has been *overridden* (this is *not* the same as using a custom scheme)
- or, the scheme logic to always load `light` has been changed
(neither of these behaviours are recommended by Just the Docs)
In either of these cases, users should add a `$color-scheme` SCSS variable to their active scheme with the appropriate value (see: [MDN docs on `color-scheme`](https://developer.mozilla.org/en-US/docs/Web/CSS/color-scheme)).
```scss
$color-scheme: light !default;
```
#### Cached favicon
Version `v0.6.0` adds a new `_include` that caches the favicon for the entire site. This significantly improves page build times for large sites.
However, some users may load different favicons for each page (and/or dynamically change the first favicon load). In this case, they should override the logic in `_includes/favicon.html` by **replacing** it with an empty file (this is *different* from deleting it). No further migration is necessary.
## v0.4.x - v0.5.0
### POTENTIALLY-BREAKING CHANGES in v0.5.0
There is one potentially-breaking change for users migrating from `v0.4.2` to `v0.5.0` concerning `setup.scss`. To provide context:
1. `setup.scss` was introduced in `v0.4.0`
2. in `v0.4.0` and `v0.4.1`, `setup.scss` was imported *before* color scheme SCSS code
3. in `v0.4.2`, we adjusted the order to import `setup.scss` *after* color scheme SCSS code
4. in `v0.5.0`, we have reverted the previous change: `setup.scss` is now again imported *before* color scheme SCSS code
This does not affect most users. Users who did not migrate to `v0.4.2` or who do not have a custom `setup.scss` are guaranteed no breaking changes.
Explicit migration steps are only needed if:
1. a custom `setup.scss` has been defined,
2. **and** the `setup.scss` depends on variables or functions defined in color scheme SCSS code; this change was only possible on `v0.4.2`
For those users, we suggest moving those variables and functions to each relevant color scheme.
## v0.3.3 … v0.4.x ## v0.3.3 … v0.4.x
### REPOSITORY CHANGES ### REPOSITORY CHANGES
@ -183,7 +52,7 @@ For those users, we suggest moving those variables and functions to each relevan
The theme repo is now at <https://github.com/just-the-docs/just-the-docs>. The theme repo is now at <https://github.com/just-the-docs/just-the-docs>.
The name of its default branch is now `main`. The name of its default branch is now `main`.
The theme docs website is now published at <https://just-the-docs.github.io/just-the-docs>. We've also retroactively published the theme docs website for version `v0.3.3` at <https://v0-3-3-docs.just-the-docs.com/>. The theme docs website is now published at <https://just-the-docs.github.io/just-the-docs>.
GitHub provides access to previous versions of the theme repo. GitHub provides access to previous versions of the theme repo.
You can browse [previous versions of the theme docs website] on the [Internet Archive]. You can browse [previous versions of the theme docs website] on the [Internet Archive].
@ -196,7 +65,7 @@ formatted for browsing on GitHub.
It also explains how to install the theme as a Ruby Gem, without creating a new site. It also explains how to install the theme as a Ruby Gem, without creating a new site.
[README]: https://github.com/just-the-docs/just-the-docs/blob/main/README.md [README]: https://github.com/just-the-docs/just-the-docs/blob/main/README.md
[home page]: https://just-the-docs.com [home page]: https://just-the-docs.github.io/just-the-docs
#### Deploy previews #### Deploy previews
@ -385,7 +254,7 @@ For changes since v0.3.3, the log usually references the merged PR that made the
#### Configuration #### Configuration
- Mermaid support: first-class support for [Mermaid](https://mermaid.js.org/) - a JavaScript-based diagram and charting tool supported by GitHub - has been added to the theme. **This feature is opt-in.** See the new doc subsections in [Configuration]({% link docs/configuration.md %}#mermaid-diagrams) and [Code]({% link docs/ui-components/code/index.md %}#mermaid-diagram-code-blocks) for more. - Mermaid support: first-class support for [Mermaid](https://mermaid.js.org/) - a JavaScript-based diagram and charting tool supported by GitHub - has been added to the theme. **This feature is opt-in.** See the new doc subsections in [Configuration]({% link docs/configuration.md %}#mermaid-diagrams) and [Code]({% link docs/ui-components/code.md %}#mermaid-diagram-code-blocks) for more.
- Multiple Google Analytics tags are now supported. PR: [#1029] - Multiple Google Analytics tags are now supported. PR: [#1029]
#### Customization #### Customization

View File

@ -5,7 +5,7 @@
<p align="center"> <p align="center">
<h1 align="center">Just the Docs</h1> <h1 align="center">Just the Docs</h1>
<p align="center">A modern, highly customizable, and responsive Jekyll theme for documentation with built-in search.<br>Easily hosted on GitHub Pages with few dependencies.</p> <p align="center">A modern, highly customizable, and responsive Jekyll theme for documentation with built-in search.<br>Easily hosted on GitHub Pages with few dependencies.</p>
<p align="center"><strong><a href="https://just-the-docs.com/">See it in action!</a></strong></p> <p align="center"><strong><a href="https://just-the-docs.github.io/just-the-docs/">See it in action!</a></strong></p>
<br><br><br> <br><br><br>
</p> </p>
@ -32,7 +32,7 @@ More specifically, the created site:
Other than that, you're free to customize sites that you create with the template, however you like. You can easily change the versions of `just-the-docs` and Jekyll it uses, as well as adding further plugins. Other than that, you're free to customize sites that you create with the template, however you like. You can easily change the versions of `just-the-docs` and Jekyll it uses, as well as adding further plugins.
### Use as a Ruby Gem ### Use RubyGems
Alternatively, you can install the theme as a Ruby Gem, without creating a new site. Alternatively, you can install the theme as a Ruby Gem, without creating a new site.
@ -48,11 +48,17 @@ And add this line to your Jekyll site's `_config.yml`:
theme: just-the-docs theme: just-the-docs
``` ```
And then install all relevant dependencies: And then execute:
```shell $ bundle
$ bundle
``` Or install it yourself as:
$ gem install just-the-docs
Alternatively, you can run it inside Docker while developing your site
$ docker-compose up
## Usage ## Usage
@ -96,7 +102,7 @@ The theme is available as open source under the terms of the [MIT License](http:
[Jekyll]: https://jekyllrb.com [Jekyll]: https://jekyllrb.com
[Just the Docs Template]: https://just-the-docs.github.io/just-the-docs-template/ [Just the Docs Template]: https://just-the-docs.github.io/just-the-docs-template/
[Just the Docs]: https://just-the-docs.com [Just the Docs]: https://just-the-docs.github.io/just-the-docs/
[Just the Docs repo]: https://github.com/just-the-docs/just-the-docs [Just the Docs repo]: https://github.com/just-the-docs/just-the-docs
[GitHub Pages]: https://pages.github.com/ [GitHub Pages]: https://pages.github.com/
[Template README]: https://github.com/just-the-docs/just-the-docs-template/blob/main/README.md [Template README]: https://github.com/just-the-docs/just-the-docs-template/blob/main/README.md

View File

@ -15,19 +15,11 @@
# in the templates via {{ site.myvariable }}. # in the templates via {{ site.myvariable }}.
title: Just the Docs title: Just the Docs
description: A Jekyll theme for documentation description: A Jekyll theme for documentation
baseurl: "" # the subpath of your site, e.g. /blog baseurl: "/just-the-docs" # the subpath of your site, e.g. /blog
url: "https://just-the-docs.com" # the base hostname & protocol for your site, e.g. http://example.com url: "https://just-the-docs.github.io" # the base hostname & protocol for your site, e.g. http://example.com
repository: just-the-docs/just-the-docs # for github-metadata
permalink: pretty permalink: pretty
defaults:
- scope:
path: "docs" # an empty string here means all files in the project
type: "pages"
values:
layout: "default"
exclude: exclude:
# from https://github.com/jekyll/jekyll/blob/master/lib/site_template/_config.yml: # from https://github.com/jekyll/jekyll/blob/master/lib/site_template/_config.yml:
- .sass-cache/ - .sass-cache/
@ -50,11 +42,6 @@ exclude:
- package-lock.json - package-lock.json
- Rakefile - Rakefile
- README.md - README.md
- CODE_OF_CONDUCT.md
- docker-compose.yml
- Dockerfile
# theme test code
- fixtures/
# Set a path/url to a logo that will be displayed instead of the title # Set a path/url to a logo that will be displayed instead of the title
#logo: "/assets/images/just-the-docs.png" #logo: "/assets/images/just-the-docs.png"
@ -85,12 +72,12 @@ search:
# Enable or disable the search button that appears in the bottom right corner of every page # Enable or disable the search button that appears in the bottom right corner of every page
# Supports true or false (default) # Supports true or false (default)
button: false button: false
# Focus the search input by pressing `ctrl + focus_shortcut_key` (or `cmd + focus_shortcut_key` on macOS)
focus_shortcut_key: "k"
# For copy button on code # For copy button on code
enable_copy_code_button: true enable_copy_code_button: true
# To disable support for mermaid diagrams (https://mermaid.js.org),
# comment out the `mermaid` and `version` keys below
# By default, consuming the theme as a gem leaves mermaid disabled; it is opt-in # By default, consuming the theme as a gem leaves mermaid disabled; it is opt-in
mermaid: mermaid:
# Version of mermaid library # Version of mermaid library
@ -98,12 +85,8 @@ mermaid:
version: "9.1.6" version: "9.1.6"
# Put any additional configuration, such as setting the theme, in _includes/mermaid_config.js # Put any additional configuration, such as setting the theme, in _includes/mermaid_config.js
# See also docs/ui-components/code # See also docs/ui-components/code
# To load mermaid from a local library, also use the `path` key to specify the location of the library; e.g. # To load mermaid from a local file use the `path` key to specify the location of the library instead; e.g.
# for (v10+):
# path: "/assets/js/mermaid.esm.min.mjs"
# for (<v10):
# path: "/assets/js/mermaid.min.js" # path: "/assets/js/mermaid.min.js"
# Note: copy both `mermaid.esm.min.mjs` (v10+) or `mermaid.min.js` (<v10) and the associated `.map` file from the specified version of `mermaid/dist` to `/assets/js/`.
# Enable or disable heading anchors # Enable or disable heading anchors
heading_anchors: true heading_anchors: true
@ -111,15 +94,11 @@ heading_anchors: true
# Aux links for the upper right navigation # Aux links for the upper right navigation
aux_links: aux_links:
"Just the Docs on GitHub": "Just the Docs on GitHub":
- "https://github.com/just-the-docs/just-the-docs" - "//github.com/just-the-docs/just-the-docs"
# Makes Aux links open in a new tab. Default is false # Makes Aux links open in a new tab. Default is false
aux_links_new_tab: false aux_links_new_tab: false
# Enable or disable the side/mobile menu globally
# Nav menu can also be selectively enabled or disabled using page variables or the minimal layout
nav_enabled: true
# Sort order for navigation links # Sort order for navigation links
# nav_sort: case_insensitive # default, equivalent to nil # nav_sort: case_insensitive # default, equivalent to nil
nav_sort: case_sensitive # Capital letters sorted before lowercase nav_sort: case_sensitive # Capital letters sorted before lowercase
@ -129,13 +108,6 @@ nav_external_links:
- title: Just the Docs on GitHub - title: Just the Docs on GitHub
url: https://github.com/just-the-docs/just-the-docs url: https://github.com/just-the-docs/just-the-docs
# Show navigation error report
nav_error_report: true # default is false/nil.
liquid:
error_mode: strict
strict_filters: true
# Footer content # Footer content
# appears at the bottom of every page's main content # appears at the bottom of every page's main content
@ -143,12 +115,14 @@ liquid:
back_to_top: true back_to_top: true
back_to_top_text: "Back to top" back_to_top_text: "Back to top"
footer_content: 'Copyright &copy; 2017-2020 Patrick Marsceill. Distributed by an <a href="https://github.com/just-the-docs/just-the-docs/tree/main/LICENSE.txt">MIT license.</a> <a href="https://www.netlify.com/">This site is powered by Netlify.</a>' footer_content: "Copyright &copy; 2017-2020 Patrick Marsceill. Distributed by an <a href=\"https://github.com/just-the-docs/just-the-docs/tree/main/LICENSE.txt\">MIT license.</a> <a href=\"https://www.netlify.com/\">This site is powered by Netlify.</a>"
# Footer last edited timestamp # Footer last edited timestamp
last_edit_timestamp: true # show or hide edit time - page must have `last_modified_date` defined in the frontmatter last_edit_timestamp: true # show or hide edit time - page must have `last_modified_date` defined in the frontmatter
last_edit_time_format: "%b %e %Y at %I:%M %p" # uses ruby's time format: https://ruby-doc.org/stdlib-2.7.0/libdoc/time/rdoc/Time.html last_edit_time_format: "%b %e %Y at %I:%M %p" # uses ruby's time format: https://ruby-doc.org/stdlib-2.7.0/libdoc/time/rdoc/Time.html
# Footer "Edit this page on GitHub" link text # Footer "Edit this page on GitHub" link text
gh_edit_link: true # show or hide edit this page link gh_edit_link: true # show or hide edit this page link
gh_edit_link_text: "Edit this page on GitHub" gh_edit_link_text: "Edit this page on GitHub"
@ -185,9 +159,6 @@ callouts:
plugins: plugins:
- jekyll-seo-tag - jekyll-seo-tag
- jekyll-github-metadata
- jekyll-include-cache
- jekyll-sitemap
kramdown: kramdown:
syntax_highlighter_opts: syntax_highlighter_opts:

View File

@ -1,96 +1,15 @@
{%- comment -%} {% unless page.url == "/" %}
Include as: {%- include components/breadcrumbs.html -%} {% if page.parent %}
Depends on: page, site. <nav aria-label="Breadcrumb" class="breadcrumb-nav">
Includes: components/site_nav.html.
Results in: HTML for the breadcrumbs component.
Overwrites:
nav_list_link, site_nav, nav_list_simple, nav_list_link_class, nav_category,
nav_anchor_splits, nav_breadcrumbs, nav_split, nav_split_next, nav_split_test,
nav_breadcrumb_link, nav_list_end_less, nav_list_end_count, nav_end_index, nav_breadcrumb.
{%- endcomment -%}
{%- if page.url != "/" and page.parent and page.title -%}
{%- capture site_nav -%}
{%- include_cached components/site_nav.html all=true -%}
{%- endcapture -%}
{%- capture nav_list_link -%}
<a href="{{ page.url | relative_url }}" class="nav-list-link">
{%- endcapture -%}
{%- capture nav_list_simple -%}
<ul class="nav-list">
{%- endcapture -%}
{%- capture nav_list_link_class %} class="nav-list-link">
{%- endcapture -%}
{%- capture nav_category -%}
<div class="nav-category">
{%- endcapture -%}
{%- assign nav_anchor_splits =
site_nav | split: nav_list_link |
first | split: nav_category |
last | split: "</a>" -%}
{%- comment -%}
The ordinary pages (if any) and the collections pages (if any) are separated by
occurrences of nav_category.
Any ancestor nav-links of the page are contained in the last group of pages,
immediately preceding nav-lists. After splitting at "</a>", the anchor that
was split is a potential ancestor link when the following split starts with
a nav-list.
The array nav_breadcrumbs is the stack of current potential ancestors of the
current page. A split that contains one or more "</ul>"s requires that number
of potential ancestors to be popped from the stack.
The number of occurrences of a string in nav_split_next is computed by removing
them all, then dividing the resulting size difference by the length of the string.
{%- endcomment %}
{%- assign nav_breadcrumbs = "" | split: "" -%}
{%- for nav_split in nav_anchor_splits -%}
{%- unless forloop.last -%}
{%- assign nav_split_next = nav_anchor_splits[forloop.index] | strip -%}
{%- assign nav_split_test =
nav_split_next | remove_first: nav_list_simple | prepend: nav_list_simple -%}
{%- if nav_split_test == nav_split_next -%}
{%- assign nav_breadcrumb_link =
nav_split | split: "<a " | last | prepend: "<a " |
replace: nav_list_link_class, ">" | append: "</a>" -%}
{%- assign nav_breadcrumbs = nav_breadcrumbs | push: nav_breadcrumb_link -%}
{%- endif -%}
{%- if nav_split_next contains "</ul>" -%}
{%- assign nav_list_end_less = nav_split_next | remove: "</ul>" -%}
{%- assign nav_list_end_count =
nav_split_next.size | minus: nav_list_end_less.size | divided_by: 5 -%}
{% for nav_end_index in (1..nav_list_end_count) %}
{%- assign nav_breadcrumbs = nav_breadcrumbs | pop -%}
{%- endfor -%}
{%- endif -%}
{%- endunless -%}
{%- endfor -%}
<nav aria-label="Breadcrumb" class="breadcrumb-nav">
<ol class="breadcrumb-nav-list"> <ol class="breadcrumb-nav-list">
{%- for nav_breadcrumb in nav_breadcrumbs %} {% if page.grand_parent %}
<li class="breadcrumb-nav-list-item">{{ nav_breadcrumb }}</li> <li class="breadcrumb-nav-list-item"><a href="{{ first_level_url }}">{{ page.grand_parent }}</a></li>
{%- endfor %} <li class="breadcrumb-nav-list-item"><a href="{{ second_level_url }}">{{ page.parent }}</a></li>
{% else %}
<li class="breadcrumb-nav-list-item"><a href="{{ first_level_url }}">{{ page.parent }}</a></li>
{% endif %}
<li class="breadcrumb-nav-list-item"><span>{{ page.title }}</span></li> <li class="breadcrumb-nav-list-item"><span>{{ page.title }}</span></li>
</ol> </ol>
</nav> </nav>
{% endif %}
{% if site.nav_error_report %} {% endunless %}
{{ nav_error_report }}
{% endif %}
{%- endif -%}

View File

@ -1,90 +1,9 @@
{%- comment -%}
Include as: {%- include components/children_nav.html -%}
Depends on: page, site, nav_breadcrumbs.
Results in: HTML for the children-navigation component.
Includes: components/nav/sorted.html, toc_heading_custom.html.
Overwrites:
nav_ancestor_links, nav_top_node_titles, nav_child_candidates, nav_children,
nav_child, nav_child_ok, nav_child_ancestor, nav_sorted.
{%- endcomment -%}
{%- comment -%}
Whether a page has any children is checked efficiently by inspecting the cached
site_nav. If the page has no children, nav_children is set to an empty array;
otherwise nav_children is left unset. (The site_nav is rendered the first time
it is included, and that may overwrite various variables.)
{%- endcomment -%}
{%- if page.has_children == false -%}
{%- assign nav_children = "" | split: "" -%}
{%- else -%}
{%- capture site_nav -%}
{%- include_cached components/site_nav.html all=true -%}
{%- endcapture -%}
{%- assign nav_children = nil -%}
{%- capture nav_list_link -%}
<a href="{{ page.url | relative_url }}" class="nav-list-link">
{%- endcapture -%}
{%- capture nav_list_simple -%}
<ul class="nav-list">
{%- endcapture -%}
{%- assign nav_child_start = site_nav
| split: nav_list_link | last
| split: "</a>" | slice: 1 | first -%}
{%- assign nav_child_test = nav_child_start
| remove_first: nav_list_simple | prepend: nav_list_simple -%}
{%- if nav_child_start != nav_child_test -%}
{%- assign nav_children = "" | split: "" -%}
{%- endif -%}
{%- endif -%}
{%- unless nav_children -%}
{%- comment -%}
The layout is assumed to include components/breadcrumbs.html before this file,
otherwise it needs to be included here.
{%- endcomment -%}
{%- assign nav_ancestors = "" | split: "" -%}
{%- for nav_link in nav_breadcrumbs -%}
{%- assign nav_title = nav_link | split: ">" | slice: 1 | first | append: ">" | remove: "</a>" -%}
{%- assign nav_ancestors = nav_ancestors | push: nav_title -%}
{%- endfor -%}
{%- assign nav_parenthood = site[page.collection] | default: site.html_pages
| where_exp: "item", "item.title != nil" | group_by: "parent" -%}
{%- assign nav_top_nodes = nav_parenthood
| where_exp: "item", "item.name == ''" | map: "items" | first -%}
{% assign nav_top_node_titles = nav_top_nodes | map: "title" -%}
{%- include components/nav/children.html node=page ancestors=nav_ancestors all=true -%}
{%- endunless -%}
{%- if nav_children.size >= 1 -%}
{%- if page.child_nav_order == 'desc' or page.child_nav_order == 'reversed' -%}
{%- assign nav_children = nav_children | reverse -%}
{%- endif -%}
<hr> <hr>
{% include toc_heading_custom.html %} {% include toc_heading_custom.html %}
<ul> <ul>
{% for nav_child in nav_children %} {% for child in include.toc_list %}
<li> <li>
<a href="{{ nav_child.url | relative_url }}">{{ nav_child.title }}</a>{% if nav_child.summary %} - {{ nav_child.summary }}{% endif %} <a href="{{ child.url | relative_url }}">{{ child.title }}</a>{% if child.summary %} - {{ child.summary }}{% endif %}
</li> </li>
{% endfor %} {% endfor %}
</ul> </ul>
{%- endif -%}

View File

@ -1,7 +1,7 @@
{% capture footer_custom %} {% capture footer_custom %}
{%- include footer_custom.html -%} {%- include footer_custom.html -%}
{% endcapture %} {% endcapture %}
{% if footer_custom != "" or site.last_edit_timestamp or site.gh_edit_link or site.back_to_top %} {% if footer_custom != "" or site.last_edit_timestamp or site.gh_edit_link %}
<hr> <hr>
<footer> <footer>
{% if site.back_to_top %} {% if site.back_to_top %}

View File

@ -1,45 +1,5 @@
{% comment %}
The complexity of this file comes from a breaking change in Mermaid v10; mermaid.init has been deprecated (and supposedly, didn't work earlier?).
So, we check whether the user's Mermaid version is >= 10; if not, we fall back to the previous init syntax.
If a user is using a custom mermaid file and doesn't specify a version, we default to the < v10 behaviour. Users who use version v10 or above should specify this in the version key.
{% endcomment %}
{% if site.mermaid.version %}
{% assign mermaid_major_version = site.mermaid.version | split: "." | first | plus: 0 %}
{% else %}
{% assign mermaid_major_version = 9 %}
{% endif %}
{% if mermaid_major_version > 9 %}
<script type="module">
{% if site.mermaid.path %}
import mermaid from '{{ site.mermaid.path | relative_url }}';
{% else %}
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@{{ site.mermaid.version }}/dist/mermaid.esm.min.mjs';
{% endif %}
var config = {% include mermaid_config.js %};
mermaid.initialize(config);
mermaid.run({
querySelector: '.language-mermaid',
});
</script>
{% else %}
{% if site.mermaid.path %}
<script src="{{ site.mermaid.path | relative_url }}"></script>
{% else %}
<script src="https://cdn.jsdelivr.net/npm/mermaid@{{ site.mermaid.version }}/dist/mermaid.min.js"></script>
{% endif %}
<script> <script>
var config = {% include mermaid_config.js %}; var config = {% include mermaid_config.js %};
mermaid.initialize(config); mermaid.initialize(config);
window.mermaid.init(undefined, document.querySelectorAll('.language-mermaid')); window.mermaid.init(undefined, document.querySelectorAll('.language-mermaid'));
</script> </script>
{% endif %}

View File

@ -1,48 +0,0 @@
{%- comment -%}
Include as: {%- include components/nav/children.html node=node ancestors=title_array all=bool -%}
Depends on: include.node, include.ancestors, include.all, nav_parenthood, nav_top_node_titles.
Includes: components/nav/sorted.html.
Assigns to: nav_children.
Overwrites:
nav_candidates, nav_child, nav_child_ok.
{%- endcomment -%}
{%- assign nav_children = "" | split: "" -%}
{%- if include.all == true or include.node.has_children != false -%}
{%- assign nav_candidates = nav_parenthood
| where: "name", include.node.title | map: "items" | first -%}
{%- for nav_child in nav_candidates -%}
{%- assign nav_child_ok = true -%}
{%- if nav_child.grand_parent and nav_child.grand_parent != include.node.parent -%}
{%- assign nav_child_ok = false -%}
{%- endif -%}
{%- if nav_child.ancestor and nav_child.ancestor != include.node.title -%}
{%- unless include.ancestors contains nav_child.ancestor -%}
{%- assign nav_child_ok = false -%}
{%- endunless -%}
{%- endif -%}
{%- comment -%}
The following check rejects nav_child as 3rd-level when include.node is 2nd-level
and nav_child can also be 2nd-level. This is for backwards compatibility with
existing 3-level sites.
{%- endcomment -%}
{%- if nav_child.grand_parent == nil and nav_child.ancestor == nil and
nav_top_node_titles contains nav_child.parent and include.ancestors.size >= 1 -%}
{%- assign nav_child_ok = false -%}
{%- endif -%}
{%- if nav_child_ok -%}
{%- assign nav_children = nav_children | push: nav_child -%}
{%- endif -%}
{%- endfor -%}
{%- endif -%}
{%- include components/nav/sorted.html pages=nav_children -%}
{%- assign nav_children = nav_sorted -%}

View File

@ -1,53 +0,0 @@
{%- comment -%}
Include as: {%- include components/nav/links.html pages=page_array ancestors=title_array all=bool -%}
Depends on: include.pages, include.ancestors, include.all.
Results in: HTML for the main navigation when all is nil or false;
includes links to pages excluded from the main navigation when all is true.
Includes: components/nav/sorted.html, components/nav/children.html, components/nav/links.html.
Overwrites:
node, nav_children, nav_ancestors.
{%- endcomment -%}
<ul class="nav-list">
{%- for node in include.pages -%}
{%- if include.all == true or node.nav_exclude != true -%}
{%- if include.ancestors contains node.title -%}
<li class="nav-list-item">
<a href="{{ node.url | relative_url }}" class="nav-list-link"></a>
</li>
{%- capture nav_error_report -%}
<blockquote class="warning">
A page has the same title as its parent page or one of its ancestral pages!<br>
This causes an incorrect link in the main navigation panel.<br>
Page title: <code>{{ node.title }}</code>, location: <code>{{ node.path }}</code>.
</blockquote>
{%- endcapture -%}
{%- else -%}
{%- include components/nav/children.html node=node ancestors=include.ancestors all=include.all -%}
<li class="nav-list-item">
{%- if nav_children.size >= 1 -%}
<button class="nav-list-expander btn-reset" aria-label="toggle items in {{ node.title }} category" aria-pressed="false">
<svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg>
</button>
{%- endif -%}
<a href="{{ node.url | relative_url }}" class="nav-list-link">{{ node.title }}</a>
{%- if nav_children.size >= 1 -%}
{%- if node.child_nav_order == 'desc' or node.child_nav_order == 'reversed' -%}
{%- assign nav_children = nav_children | reverse -%}
{%- endif -%}
{%- assign nav_ancestors = include.ancestors | push: node.title -%}
{%- include components/nav/links.html pages=nav_children ancestors=nav_ancestors all=include.all -%}
{%- endif -%}
</li>
{%- endif -%}
{%- endif -%}
{%- endfor -%}
</ul>
{%- comment -%}{%- endcomment -%}

View File

@ -1,23 +0,0 @@
{%- comment -%}
Include as: {%- include components/nav/pages.html pages=page_array all=bool -%}
Depends on: include.pages.
Results in: HTML for the main navigation when all is nil or false;
adds links to pages excluded from the main navigation when all is true.
Includes: components/nav/links.html
Assigns to:
nav_parenthood, nav_top_nodes, nav_top_node_titles, nav_ancestors.
{%- endcomment -%}
{%- assign nav_parenthood = include.pages
| where_exp: "item", "item.title != nil" | group_by: "parent" -%}
{%- assign nav_top_nodes = nav_parenthood
| where_exp: "item", "item.name == ''" | map: "items" | first -%}
{%- include components/nav/sorted.html pages=nav_top_nodes -%}
{% assign nav_top_node_titles = nav_top_nodes | map: "title" -%}
{%- assign nav_ancestors = "" | split: "" -%}
{%- include components/nav/links.html pages=nav_sorted ancestors=nav_ancestors all=include.all -%}

View File

@ -1,109 +0,0 @@
{%- comment -%}
Include as: {%- include components/nav/sorted.html pages=page_array -%}
Depends on: include.pages.
Assigns to: nav_sorted.
Overwrites:
nav_order_pages, title_order_pages, double_quote, empty_array,
nav_number_pages, nav_string_pages, nav_order_groups, group,
title_number_pages, title_string_pages, title_order_groups.
{%- endcomment -%}
{%- comment -%}
The `nav_order` values of pages affect the order in which they are shown in
the navigation panel and in the automatically generated tables of contents.
Sibling pages with the same `nav_order` value may be shown in any order.
Sibling pages with no `nav_order` value are shown after all pages that have
explicit `nav_order` values, ordered by their `title` values.
The `nav_order` and `title` values can be numbers or strings. To avoid build
failures, we sort numbers and strings separately. We sort numbers by their
values, and strings lexicographically. The case-sensitivity of string sorting
is determined by the configuration setting of `nav_sort`. Pages with no `title`
value are excluded from the navigation.
Note: Numbers used as `title` or `nav_order` values should not be in quotes,
unless you intend them to be lexicographically ordered. Numbers are written
without spaces or thousands-separators. Negative numbers are preceded by `-`.
Floats are written with the integral and fractional parts separated by `.`.
(Bounds on the magnitude and precision are presumably the same as in Liquid.)
{%- endcomment -%}
{%- assign nav_order_pages = include.pages
| where_exp: "item", "item.nav_order != nil" -%}
{%- assign title_order_pages = include.pages
| where_exp: "item", "item.nav_order == nil" -%}
{%- comment -%}
First, filter `nav_order_pages` and `title_order_pages` according to the type
of value to be used for sorting.
The first character of the result of filtering with `jsonify` is `"` only for
strings. Removing `"` from its `slice : 0` has size 0 for strings and 1 for
numbers, so grouping the pages gives at most two groups.
{%- endcomment -%}
{%- assign double_quote = '"' -%}
{%- assign empty_array = "" | split: "" -%}
{%- assign nav_string_pages = empty_array -%}
{%- assign nav_number_pages = empty_array -%}
{%- unless nav_order_pages == empty -%}
{%- assign nav_order_groups = nav_order_pages
| group_by_exp: "item",
"item.nav_order | jsonify | slice: 0 | remove: double_quote | size" -%}
{%- for group in nav_order_groups -%}
{%- if group.name == 0 -%}
{%- assign nav_string_pages = group.items -%}
{%- elsif group.name == 1 -%}
{%- assign nav_number_pages = group.items -%}
{%- endif -%}
{%- endfor -%}
{%- endunless -%}
{%- assign title_string_pages = empty_array -%}
{%- assign title_number_pages = empty_array -%}
{%- unless title_order_pages == empty -%}
{%- assign title_order_groups = title_order_pages
| group_by_exp: "item",
"item.title | jsonify | slice: 0 | remove: double_quote | size" -%}
{%- for group in title_order_groups -%}
{%- if group.name == 0 -%}
{%- assign title_string_pages = group.items -%}
{%- elsif group.name == 1 -%}
{%- assign title_number_pages = group.items -%}
{%- endif -%}
{%- endfor -%}
{%- endunless -%}
{%- comment -%}
Now sort each array of pages separately, then concatenate the sorted arrays.
{%- endcomment -%}
{%- unless nav_number_pages == empty -%}
{%- assign nav_number_pages = nav_number_pages | sort: "nav_order" -%}
{%- endunless -%}
{%- unless nav_string_pages == empty -%}
{%- if site.nav_sort == 'case_insensitive' -%}
{%- assign nav_string_pages = nav_string_pages | sort_natural: "nav_order" -%}
{%- else -%}
{%- assign nav_string_pages = nav_string_pages | sort: "nav_order" -%}
{%- endif -%}
{%- endunless -%}
{%- unless title_number_pages == empty -%}
{%- assign title_number_pages = title_number_pages | sort: "title" -%}
{%- endunless -%}
{%- unless title_string_pages == empty -%}
{%- if site.nav_sort == 'case_insensitive' -%}
{%- assign title_string_pages = title_string_pages | sort_natural: "title" -%}
{%- else -%}
{%- assign title_string_pages = title_string_pages | sort: "title" -%}
{%- endif -%}
{%- endunless -%}
{%- assign nav_sorted = nav_number_pages
| concat: nav_string_pages
| concat: title_number_pages
| concat: title_string_pages -%}

View File

@ -1,7 +1,7 @@
{% if site.search.button %} {% if site.search.button %}
<button id="search-button" class="search-button btn-reset" aria-label="Focus on search"> <a href="#" id="search-button" class="search-button">
<svg viewBox="0 0 24 24" class="icon" aria-hidden="true"><use xlink:href="#svg-search"></use></svg> <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-search"></use></svg>
</button> </a>
{% endif %} {% endif %}
<div class="search-overlay"></div> <div class="search-overlay"></div>

View File

@ -1,6 +1,6 @@
{% capture search_placeholder %}{% include search_placeholder_custom.html %}{% endcapture %} {% capture search_placeholder %}{% include search_placeholder_custom.html %}{% endcapture %}
<div class="search" role="search"> <div class="search">
<div class="search-input-wrap"> <div class="search-input-wrap">
<input type="text" id="search-input" class="search-input" tabindex="0" placeholder="{{ search_placeholder | strip_html | strip }}" aria-label="{{ search_placeholder | strip_html| strip }}" autocomplete="off"> <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="{{ search_placeholder | strip_html | strip }}" aria-label="{{ search_placeholder | strip_html| strip }}" autocomplete="off">
<label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label> <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>

View File

@ -1,23 +1,60 @@
{%- comment -%}
Include as: {%- include components/sidebar.html -%}
Depends on: page(?), site.
Results in: HTML for the side bar.
Includes:
title.html, components/site_nav.html, nav_footer_custom.html
Overwrites:
nav_footer_custom.
Should not be cached, because nav_footer_custom.html might depend on page.
{%- endcomment -%}
<div class="side-bar"> <div class="side-bar">
<div class="site-header" role="banner"> <div class="site-header">
<a href="{{ '/' | relative_url }}" class="site-title lh-tight">{% include title.html %}</a> <a href="{{ '/' | relative_url }}" class="site-title lh-tight">{% include title.html %}</a>
<button id="menu-button" class="site-button btn-reset" aria-label="Toggle menu" aria-pressed="false"> <a href="#" id="menu-button" class="site-button">
<svg viewBox="0 0 24 24" class="icon" aria-hidden="true"><use xlink:href="#svg-menu"></use></svg> <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
</button> </a>
</div> </div>
<nav aria-label="Main" id="site-nav" class="site-nav">
{% include_cached components/site_nav.html %} {% assign pages_top_size = site.html_pages
| where_exp:"item", "item.title != nil"
| where_exp:"item", "item.parent == nil"
| where_exp:"item", "item.nav_exclude != true"
| size %}
{% if pages_top_size > 0 %}
{% include nav.html pages=site.html_pages key=nil %}
{% endif %}
{%- if site.nav_external_links -%}
<ul class="nav-list">
{%- for node in site.nav_external_links -%}
<li class="nav-list-item external">
<a href="{{ node.url | absolute_url }}" class="nav-list-link external">
{{ node.title }}
{% unless node.hide_icon %}<svg viewBox="0 0 24 24" aria-labelledby="svg-external-link-title"><use xlink:href="#svg-external-link"></use></svg>{% endunless %}
</a>
</li>
{%- endfor -%}
</ul>
{%- endif -%}
{% if site.just_the_docs.collections %}
{% assign collections_size = site.just_the_docs.collections | size %}
{% for collection_entry in site.just_the_docs.collections %}
{% assign collection_key = collection_entry[0] %}
{% assign collection_value = collection_entry[1] %}
{% assign collection = site[collection_key] %}
{% if collection_value.nav_exclude != true %}
{% if collections_size > 1 or pages_top_size > 0 %}
{% if collection_value.nav_fold == true %}
<ul class="nav-list nav-category-list">
<li class="nav-list-item{% if page.collection == collection_key %} active{% endif %}">
{%- if collection.size > 0 -%}
<a href="#" class="nav-list-expander"><svg viewBox="0 0 24 24"><use xlink:href="#svg-arrow-right"></use></svg></a>
{%- endif -%}
<div class="nav-category">{{ collection_value.name }}</div>
{% include nav.html pages=collection key=collection_key %}
</li>
</ul>
{% else %}
<div class="nav-category">{{ collection_value.name }}</div>
{% include nav.html pages=collection key=collection_key %}
{% endif %}
{% else %}
{% include nav.html pages=collection key=collection_key %}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
</nav>
{% capture nav_footer_custom %} {% capture nav_footer_custom %}
{%- include nav_footer_custom.html -%} {%- include nav_footer_custom.html -%}

View File

@ -1,72 +0,0 @@
{%- comment -%}
Include as: {%- include_cached components/site_nav.html all=bool -%}
Depends on: site.
Results in: cached HTML for the main navigation when `all` is nil or false;
includes links to pages excluded from the main navigation when `all` is true.
Includes:
components/nav/pages.html
Overwrites:
pages_top_size, collections_size, collection_entry,
collection_key, collection_value, collection.
{%- endcomment -%}
<nav aria-label="Main" id="site-nav" class="site-nav">
{% assign pages_top_size = site.html_pages
| where_exp:"item", "item.title != nil"
| where_exp:"item", "item.parent == nil"
| where_exp:"item", "item.nav_exclude != true"
| size %}
{% if pages_top_size > 0 %}
{% include components/nav/pages.html pages=site.html_pages all=include.all %}
{% endif %}
{%- if site.nav_external_links -%}
<ul class="nav-list">
{%- for node in site.nav_external_links -%}
<li class="nav-list-item external">
<a href="{{ node.url | absolute_url }}" class="nav-list-link external"
{% if node.opens_in_new_tab or node.opens_in_new_tab == nil and site.nav_external_links_new_tab %}
target="_blank" rel="noopener noreferrer"
{% endif %}
>
{{ node.title }}
{% unless node.hide_icon %}<svg viewBox="0 0 24 24" aria-labelledby="svg-external-link-title"><use xlink:href="#svg-external-link"></use></svg>{% endunless %}
</a>
</li>
{%- endfor -%}
</ul>
{%- endif -%}
{% if site.just_the_docs.collections %}
{% assign collections_size = site.just_the_docs.collections | size %}
{% for collection_entry in site.just_the_docs.collections %}
{% assign collection_key = collection_entry[0] %}
{% assign collection_value = collection_entry[1] %}
{% assign collection = site[collection_key] %}
{% if collection_value.nav_exclude != true %}
{% if collections_size > 1 or pages_top_size > 0 %}
{% if collection_value.nav_fold == true %}
<ul class="nav-list nav-category-list">
<li class="nav-list-item">
{%- if collection.size > 0 -%}
<button class="nav-list-expander btn-reset" aria-label="Toggle collection {{ collection_value.name }}" aria-pressed="false">
<svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg>
</button>
{%- endif -%}
<div class="nav-category">{{ collection_value.name }}</div>
{% include components/nav/pages.html pages=collection all=include.all %}
</li>
</ul>
{% else %}
<div class="nav-category">{{ collection_value.name }}</div>
{% include components/nav/pages.html pages=collection all=include.all %}
{% endif %}
{% else %}
{% include components/nav/pages.html pages=collection all=include.all %}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
</nav>
{% if site.nav_error_report %}
{{ nav_error_report }}
{%- endif %}

View File

@ -1,325 +0,0 @@
{%- comment -%}
Include as: {%- include css/activation.scss.liquid -%}
Depends on: page.
Results in: page-dependent CSS rules for inclusion in a style element,
which needs to be disabled when JS is enabled.
Includes: components/site_nav.html.
Overwrites:
activation_no_nav_link, nav_list_link, site_nav,
nav_list, nav_list_end, nav_list_item, nav_category_list,
nav_list_link_prefix, nav_splits, nav_split, nav_levels,
nav_list_less, nav_list_count, nav_end_less, nav_end_count,
nav_index, nav_slice_size,
activation_collection_prefix, activation_other_collection_prefix.
Should not be cached, because it depends on page.
{%- endcomment -%}
{%- comment -%}
The CSS rules in activation_no_nav_link are for use on pages excluded from the main navigation.
- The first rule ensures that no nav-link has a background image.
- The other two rules ensure that all folding collections are expanded.
{%- endcomment -%}
{%- capture site_nav -%}
{%- include_cached components/site_nav.html -%}
{%- endcapture -%}
{%- capture activation_no_nav_link %}
.site-nav ul li a {
background-image: none;
}
{%- if site.just_the_docs.collections %}
.site-nav > ul.nav-category-list > li > button svg {
transform: rotate(-90deg);
}
.site-nav > ul.nav-category-list > li.nav-list-item > ul.nav-list {
display: block;
}
{%- endif %}
{% endcapture -%}
{%- capture nav_list_link -%}
<a href="{{ page.url | relative_url }}" class="nav-list-link">
{%- endcapture -%}
{%- if site_nav contains nav_list_link -%}
{%- capture nav_list -%}
<ul class="nav-list
{%- endcapture -%}
{%- assign nav_list_end = "</ul>" -%}
{%- capture nav_list_item -%}
<li class="nav-list-item
{%- endcapture -%}
{%- capture nav_category_list -%}
<ul class="nav-list nav-category-list">
{%- endcapture -%}
{%- assign nav_list_link_prefix =
site_nav | split: nav_list_link | first | append: nav_list_link -%}
{%- assign nav_splits =
nav_list_link_prefix | split: nav_list_item | pop -%}
{%- assign nav_levels = "" | split: "" | push: 1 -%}
{%- comment -%}
The pattern of occurrences of list and list-item tags in the site_nav string
is included in the language defined by the following context-free grammar:
site_nav = PAGES? EXTERNALS? COLLECTION*
PAGES = nav_list (nav_list_item PAGES?)+ nav_list_end
EXTERNALS = nav_list nav_list_item+ nav_list_end
COLLECTION = nav_list (nav_list_item PAGES?)* nav_list_end
| nav_category_list
nav_list_item nav_list (nav_list_item PAGES?)* nav_list_end
nav_list_end
To determine the path in the site_nav to the nav_list_link for the current page,
the prefix of nav_list_link in site_nav is split at each nav_list_item to give
an array of nav_splits.
In site_nav, occurrences of nav_list must be separated by at least one
nav_list_item or nav_list_end. Moreover, when a nav_list_end is followed by a
nav_list without an intervening nav_list_item, that nav_list must start either
a list of external links or a collection. And when a nav_list is followed by a
nav_list_end without an intervening nav_list_item, they form an empty collection.
nav_levels is the path determined by the previously inspected nav_splits.
How many times nav_list and nav_list_end occur in the current nav_split
determines how to update the path.
A nav_split can contain any number of empty non-foldable collections.
The path element produced by the outer nav_list of a foldable collection is
irrelevant; it is set to zero and subsequently removed.
The number of occurrences of a string in a nav_split is computed by removing
them all, then dividing the resulting size difference by the length of the string.
Case analysis on (nav_list_count, nav_list_end_count):
- when (0, 0), the nav_split was between two nav_list_items at the same level;
- when (0, N+1), all the nav_list_ends in the nav_split are in PAGES or in one
COLLECTION;
- when (M+1, 0), M must be 0 (because two nav_lists in the same nav_split must
be separated by at least one nav_list_end);
- when (M+1, N+1), the nav_split must contain either:
- the end of PAGES followed by the start of EXTERNALS, or
- the end of PAGES followed by the start of a COLLECTION, or
- the end of EXTERNALS followed by the start of a COLLECTION, or
- the end of one COLLECTION followed by the start of another, or
- (in the first nav_split) one or more empty non-foldable COLLECTIONS
followed by the start of a COLLECTION.
In general, nav_levels[0] here needs to be incremented by nav_list_count.
However, a nav_split that contains the end of an empty foldable collection
followed by the just the start of a collection has two occurrences of nav_list,
and the increment needs to be one less; similarly when the first nav_split
starts with an empty non-foldable collection.
{%- endcomment %}
{%- for nav_split in nav_splits -%}
{%- assign nav_list_less = nav_split | remove: nav_list -%}
{%- assign nav_list_count =
nav_split.size | minus: nav_list_less.size |
divided_by: nav_list.size -%}
{%- assign nav_list_end_less = nav_split | remove: nav_list_end -%}
{%- assign nav_list_end_count =
nav_split.size | minus: nav_list_end_less.size |
divided_by: nav_list_end.size -%}
{%- if nav_list_count == 0 and nav_list_end_count == 0 -%}
{%- assign nav_index = nav_levels[-1] | plus: 1 -%}
{%- assign nav_levels = nav_levels | pop | push: nav_index -%}
{%- elsif nav_list_count == 0 and nav_list_end_count >= 1 -%}
{%- assign nav_slice_size = nav_levels.size | minus: nav_list_end_count -%}
{%- assign nav_levels = nav_levels | slice: 0, nav_slice_size -%}
{%- assign nav_index = nav_levels[-1] | plus: 1 -%}
{%- assign nav_levels = nav_levels | pop | push: nav_index -%}
{%- elsif nav_list_count == 1 and nav_list_end_count == 0 -%}
{%- if nav_split contains nav_category_list -%}
{%- assign nav_levels = nav_levels | push: 0 -%}
{%- else -%}
{%- assign nav_levels = nav_levels | push: 1 -%}
{%- endif -%}
{%- elsif nav_list_count >= 1 and nav_list_end_count >= 1 -%}
{%- assign nav_index = nav_levels[0] | plus: nav_list_count -%}
{%- if nav_levels[-1] == 0 or forloop.first -%}
{%- assign nav_index = nav_index | minus: 1 -%}
{%- endif -%}
{%- assign nav_levels = nav_levels | slice: 0, 0 | push: nav_index -%}
{%- if nav_split contains nav_category_list -%}
{%- assign nav_levels = nav_levels | push: 0 -%}
{%- else -%}
{%- assign nav_levels = nav_levels | push: 1 -%}
{%- endif -%}
{%- endif -%}
{%- endfor -%}
{%- assign nav_levels = nav_levels | where_exp: "item", "item >= 1" -%}
{%- comment -%}
The generated CSS depends on the position of the current page in each level in
the navigation.
nav_page_level is the depth of the navigation hierarchy (ignoring collections).
In existing 3-level sites, nav_page_level <= 3.
In multi-level sites, nav_page_level is unbounded.
{%- endcomment -%}
{%- assign nav_page_level = nav_levels.size | minus: 1 -%}
{%- assign nav_page_parent_level = nav_page_level | minus: 1 -%}
{%- assign nav_page_grandparent_level = nav_page_level | minus: 2 -%}
{%- comment -%}
The site-nav is:
- an optional ul.nav-list with li.nav-list-items for non-collection top-level pages
- an optional ul.nav-list with li.nav-list-item.externals
- any number of just-the-docs.collections
A non-foldable collection is:
- a div.nav-category with the collection name, followed by:
- a ul.nav-list with li.nav-list-items for its top-level pages
A foldable collection is:
- a ul.nav-list.nav-category-list with a single li.nav-list-item containing:
- an optional button with the expander svg
- a div.nav-category with the collection name
- a ul.nav-list with li.nav-list-items for its top-level pages
The generated CSS uses:
- activation_collection_prefix, to select the site-nav > ul.nav-list for the page
- activation_other_collection_prefix, to select all the other site-nav > ul.nav-lists
{%- endcomment -%}
{%- if page.collection == nil -%}
{%- capture activation_collection_prefix -%}
.site-nav > ul.nav-list:first-child
{%- endcapture -%}
{%- capture activation_other_collection_prefix -%}
.site-nav > ul.nav-list:not(:first-child)
{%- endcapture -%}
{%- else -%}
{%- capture activation_collection_prefix -%}
.site-nav > ul:nth-of-type({{ nav_levels[0] }})
{%- if site.just_the_docs.collections[page.collection].nav_fold %} > li > ul
{%- endif -%}
{%- endcapture -%}
{%- capture activation_other_collection_prefix -%}
.site-nav > ul:not(:nth-of-type({{ nav_levels[0] }}))
{%- endcapture -%}
{%- endif -%}
{%- comment -%}
The required background image of the link to the current page may involve SCSS.
To avoid page-dependent SCSS, all nav links initially have that background image.
The following rule removes the image from the links to all parents, siblings,
and children of the current page.
{%- endcomment %}
{% if nav_page_level >= 2 -%}
{%- for i in (1..nav_page_parent_level) -%}
{{ activation_collection_prefix }} >
{%- for j in (2..i) %} li > ul >
{%- endfor %} li > a,
{% endfor -%}
{%- endif %}
{{ activation_collection_prefix }} >
{%- for i in (1..nav_page_parent_level) %} li > ul >
{%- endfor %} li:not(:nth-child({{ nav_levels[nav_page_level] }})) > a,
{{ activation_collection_prefix }} >
{%- for i in (1..nav_page_level) %} li > ul >
{%- endfor %} li a {
background-image: none;
}
{%- comment -%}
The following rule removes the image from the links to pages in other collections.
{%- endcomment %}
{{ activation_other_collection_prefix }} a,
.site-nav li.external a {
background-image: none;
}
{%- comment -%}
The following rule styles the link to the current page.
{%- endcomment %}
{{ activation_collection_prefix }} > li:nth-child({{ nav_levels[1] }})
{%- for i in (2..nav_page_level) %} > ul > li:nth-child({{ nav_levels[i] }})
{%- endfor %} > a {
font-weight: 600;
text-decoration: none;
}
{%- comment -%}
The following rules unfold all collections, and display the links to any children
of the current page.
To avoid dependence on the SCSS variable nav-list-expander-right, the direction
of the rotation of the expander icon is fixed, and corresponds to the appearance
when nav-list-expander-right is true. This results in a minor visual difference
between the appearance of active expander icons when JS is enabled/disabled and
nav-list-expander-right is false, which seems unavoidable.
{%- endcomment %}
{%- if site.just_the_docs.collections %}
.site-nav > ul.nav-category-list > li > button svg,
{% endif -%}
{{ activation_collection_prefix }} > li:nth-child({{ nav_levels[1] }}) > button svg
{%- for i in (2..nav_page_level) %},
{{ activation_collection_prefix }} > li:nth-child({{ nav_levels[1] }}) >
{%- for j in (2..i) %} ul > li:nth-child({{ nav_levels[j] }}) >
{%- endfor %} button svg
{%- endfor %} {
transform: rotate(-90deg);
}
{%- if site.just_the_docs.collections %}
.site-nav > ul.nav-category-list > li.nav-list-item > ul.nav-list,
{% endif -%}
{{ activation_collection_prefix }} > li.nav-list-item:nth-child({{ nav_levels[1] }}) > ul.nav-list
{%- for i in (2..nav_page_level) %},
{{ activation_collection_prefix }} > li.nav-list-item:nth-child({{ nav_levels[1] }}) >
{%- for j in (2..i) %} ul.nav-list > li.nav-list-item:nth-child({{ nav_levels[j] }}) >
{%- endfor %} ul.nav-list
{%- endfor %} {
display: block;
}
{%- else -%}
{%- comment -%}
not site_nav contains nav_list_link
{%- endcomment -%}
{{ activation_no_nav_link }}
{%- endif -%}

View File

@ -4,9 +4,7 @@ $logo: "{{ site.logo | relative_url }}";
@import "./support/support"; @import "./support/support";
@import "./custom/setup"; @import "./custom/setup";
@import "./color_schemes/light"; @import "./color_schemes/light";
{% unless include.color_scheme == "light" %}
@import "./color_schemes/{{ include.color_scheme }}"; @import "./color_schemes/{{ include.color_scheme }}";
{% endunless %}
@import "./modules"; @import "./modules";
{% include css/callouts.scss.liquid color_scheme = include.color_scheme %} {% include css/callouts.scss.liquid color_scheme = include.color_scheme %}
{% include css/custom.scss.liquid %} {% include css/custom.scss.liquid %}

View File

@ -1,23 +0,0 @@
{%- comment -%}
Include as: {%- include_cached favicon.html -%}
Depends on: site.static_files.
Results in: HTML for a link to an existing `favicon.ico` file.
Overwrites:
file.
The endoflife.date site has 226 pages and 3410 static files. @marcwrobel pointed
out that the time taken by evaluating the code in this file on every page when
building that site was significant, and suggested making it optional. As it is
page-independent, it can easily be cached. Doing that reduced the time taken by
rendering `_includes/head.html` from 15.294s to 10.760s, thereby reducing the
total build time from 26.074s to 21.656s -- a saving of about 17%.
{%- endcomment -%}
{% for file in site.static_files %}
{% if file.path == site.favicon_ico or file.path == '/favicon.ico' %}
{% assign favicon = true %}
{% endif %}
{% endfor %}
{% if favicon %}
<link rel="icon" href="{{ site.favicon_ico | default: '/favicon.ico' | relative_url }}" type="image/x-icon">
{% endif %}

View File

@ -1,26 +1,18 @@
{%- comment -%} {%- comment -%}
This file was previously used to "fix" the HTML produced by Jekyll for This file can be used to fix the HTML produced by Jekyll for highlighted
highlighted code with line numbers. While it often resolves layout issues code with line numbers.
from the missing HTML tags, it still generates invalid HTML (by placing
a `<table>` element within a `<code>` block). As such, we no longer
recommend using this workaround. For more information, see the
"Code snippets with line numbers" docs page:
https://just-the-docs.com/docs/ui-components/code/line-numbers/
(or, docs/ui-components/line-nos.md/)
The next portion of this file, including the comments and the workaround, It works with `{% highlight some_language linenos %}...{% endhighlight %}`
are preserved for backwards comptability. and with the Kramdown option to add line numbers to fenced code.
ACKNOWLEDGEMENTS
The implementation was derived from the workaround provided by The implementation was derived from the workaround provided by
Dmitry Hrabrov (DeXP) at Dmitry Hrabrov (DeXP) at
https://github.com/penibelst/jekyll-compress-html/issues/71#issuecomment-188144901 https://github.com/penibelst/jekyll-compress-html/issues/71#issuecomment-188144901
EXPLANATION (OLD) EXPLANATION
The HTML produced by Rouge highlighting with line numbers is of the form The HTML produced by Rouge highlighting with lie numbers is of the form
`code table`. Jekyll always wraps the highlighted HTML `code table`. Jekyll (<= 4.1.1) always wraps the highlighted HTML
with `pre`. This wrapping is not only unnecessary, but also transforms with `pre`. This wrapping is not only unnecessary, but also transforms
the conforming HTML produced by Rouge to non-conforming HTML, which the conforming HTML produced by Rouge to non-conforming HTML, which
results in HTML validation error reports. results in HTML validation error reports.

View File

@ -1,27 +1,9 @@
{%- comment -%}
Include as: {%- include head.html -%}
Depends on: site.ga_tracking, site.ga_tracking_anonymize_ip,
site.search_enabled, site.static_files, site.favicon_ico.
Results in: HTML for the head element.
Includes:
css/activation.scss.liquid, head_custom.html.
Overwrites:
ga_tracking_ids, ga_property, file, favicon.
Should not be cached, because included files depend on page.
{%- endcomment -%}
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge"> <meta http-equiv="X-UA-Compatible" content="IE=Edge">
<link rel="stylesheet" href="{{ '/assets/css/just-the-docs-default.css' | relative_url }}"> <link rel="stylesheet" href="{{ '/assets/css/just-the-docs-default.css' | relative_url }}">
<link rel="stylesheet" href="{{ '/assets/css/just-the-docs-head-nav.css' | relative_url }}" id="jtd-head-nav-stylesheet">
<style id="jtd-nav-activation">
{% include css/activation.scss.liquid %}
</style>
{% if site.ga_tracking != nil %} {% if site.ga_tracking != nil %}
{% assign ga_tracking_ids = site.ga_tracking | split: "," %} {% assign ga_tracking_ids = site.ga_tracking | split: "," %}
<script async src="https://www.googletagmanager.com/gtag/js?id={{ ga_tracking_ids.first }}"></script> <script async src="https://www.googletagmanager.com/gtag/js?id={{ ga_tracking_ids.first }}"></script>
@ -40,11 +22,26 @@
<script src="{{ '/assets/js/vendor/lunr.min.js' | relative_url }}"></script> <script src="{{ '/assets/js/vendor/lunr.min.js' | relative_url }}"></script>
{% endif %} {% endif %}
{% if site.mermaid %}
{% if site.mermaid.path %}
<script src="{{ site.mermaid.path | relative_url }}"></script>
{% else %}
<script src="https://cdn.jsdelivr.net/npm/mermaid@{{ site.mermaid.version }}/dist/mermaid.min.js"></script>
{% endif %}
{% endif %}
<script src="{{ '/assets/js/just-the-docs.js' | relative_url }}"></script> <script src="{{ '/assets/js/just-the-docs.js' | relative_url }}"></script>
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
{% include_cached favicon.html %} {% for file in site.static_files %}
{% if file.path == site.favicon_ico or file.path == '/favicon.ico' %}
{% assign favicon = true %}
{% endif %}
{% endfor %}
{% if favicon %}
<link rel="icon" href="{{ site.favicon_ico | default: '/favicon.ico' | relative_url }}" type="image/x-icon">
{% endif %}
{% seo %} {% seo %}

251
_includes/nav.html Normal file
View File

@ -0,0 +1,251 @@
{%- comment -%}
The `nav_order` values of pages affect the order in which they are shown in
the navigation panel and in the automatically generated tables of contents.
Sibling pages with the same `nav_order` value may be shown in any order.
Sibling pages with no `nav_order` value are shown after all pages that have
explicit `nav_order` values, ordered by their `title` values.
The `nav_order` and `title` values can be numbers or strings. To avoid build
failures, we sort numbers and strings separately. We sort numbers by their
values, and strings lexicographically. The case-sensitivity of string sorting
is determined by the configuration setting of `nav_sort`. Pages with no `title`
value are excluded from the navigation.
Note: Numbers used as `title` or `nav_order` values should not be in quotes,
unless you intend them to be lexicographically ordered. Numbers are written
without spaces or thousands-separators. Negative numbers are preceded by `-`.
Floats are written with the integral and fractional parts separated by `.`.
(Bounds on the magnitude and precision are presumably the same as in Liquid.)
{%- endcomment -%}
{%- assign title_pages = include.pages
| where_exp: "item", "item.title != nil" -%}
{%- comment -%}
A page with `nav_exclude: true` does not appear in the main navigation.
If it has a `parent`, it may appear in the parent's table of contents.
If it specifies `has_children: true`, it should appear in the breadcrumbs
of the child pages, but its order in relation to other pages is irrelevant.
Pages that never appear can be removed from the pages that need to be sorted.
This optimisation can be significant on a site with many pages.
In Jekyll 4, the pages to be sorted can be filtered by:
{%- assign title_pages = title_pages
| where_exp: "item", "item.nav_exclude != true or item.parent != nil" -%}
That filter is not allowed in Jekyll 3. The following iterative code gives the
same effect, but it is activated only when it will filter more than 50% of the
pages.
{%- endcomment -%}
{%- unless title_pages == empty -%}
{%- assign unsorted_pages = title_pages
| where_exp: "item", "item.parent == nil"
| where_exp: "item", "item.nav_exclude == true" -%}
{%- assign title_pages_size = title_pages.size -%}
{%- assign unsorted_pages_percent = unsorted_pages.size
| times: 100 | divided_by: title_pages_size -%}
{%- if unsorted_pages_percent > 50 -%}
{%- assign sorted_pages = "" | split: "" -%}
{%- for item in title_pages -%}
{%- if item.nav_exclude != true or item.parent -%}
{%- assign sorted_pages = sorted_pages | push: item -%}
{%- endif -%}
{%- endfor -%}
{%- assign title_pages = sorted_pages -%}
{%- endif -%}
{%- endunless -%}
{%- assign nav_order_pages = title_pages
| where_exp: "item", "item.nav_order != nil" -%}
{%- assign title_order_pages = title_pages
| where_exp: "item", "item.nav_order == nil" -%}
{%- comment -%}
Divide the arrays of `nav_order_pages` and `title_order_pages` according to
the type of value.
The first character of the result of `jsonify` is `"` only for strings.
Grouping by a single character also ensures the number of groups is small.
{%- endcomment -%}
{%- assign nav_number_pages = "" | split: "" -%}
{%- assign nav_string_pages = "" | split: "" -%}
{%- assign nav_order_groups = nav_order_pages
| group_by_exp: "item", "item.nav_order | jsonify | slice: 0" -%}
{%- for group in nav_order_groups -%}
{%- if group.name == '"' -%}
{%- assign nav_string_pages = group.items -%}
{%- else -%}
{%- assign nav_number_pages = nav_number_pages | concat: group.items -%}
{%- endif -%}
{%- endfor -%}
{%- unless nav_number_pages == empty -%}
{%- assign nav_number_pages = nav_number_pages | sort: "nav_order" -%}
{%- endunless -%}
{%- unless nav_string_pages == empty -%}
{%- if site.nav_sort == 'case_insensitive' -%}
{%- assign nav_string_pages = nav_string_pages | sort_natural: "nav_order" -%}
{%- else -%}
{%- assign nav_string_pages = nav_string_pages | sort: "nav_order" -%}
{%- endif -%}
{%- endunless -%}
{%- assign title_number_pages = "" | split: "" -%}
{%- assign title_string_pages = "" | split: "" -%}
{%- assign title_order_groups = title_order_pages
| group_by_exp: "item", "item.title | jsonify | slice: 0" -%}
{%- for group in title_order_groups -%}
{%- if group.name == '"' -%}
{%- assign title_string_pages = group.items -%}
{%- else -%}
{%- assign title_number_pages = title_number_pages | concat: group.items -%}
{%- endif -%}
{%- endfor -%}
{%- unless title_number_pages == empty -%}
{%- assign title_number_pages = title_number_pages | sort: "title" -%}
{%- endunless -%}
{%- unless title_string_pages == empty -%}
{%- if site.nav_sort == 'case_insensitive' -%}
{%- assign title_string_pages = title_string_pages | sort_natural: "title" -%}
{%- else -%}
{%- assign title_string_pages = title_string_pages | sort: "title" -%}
{%- endif -%}
{%- endunless -%}
{%- assign pages_list = nav_number_pages | concat: nav_string_pages
| concat: title_number_pages | concat: title_string_pages -%}
{%- assign first_level_pages = pages_list
| where_exp: "item", "item.parent == nil" -%}
{%- assign second_level_pages = pages_list
| where_exp: "item", "item.parent != nil"
| where_exp: "item", "item.grand_parent == nil" -%}
{%- assign third_level_pages = pages_list
| where_exp: "item", "item.grand_parent != nil" -%}
{%- comment -%}
The order of sibling pages in `pages_list` determines the order of display of
links to them in lists of navigation links and in auto-generated TOCs.
Note that Liquid evaluates conditions from right to left (and it does not allow
the use of parentheses). Some conditions are not so easy to express clearly...
For example, consider the following condition:
C: page.collection = = include.key and
page.url = = node.url or
page.grand_parent = = node.title or
page.parent = = node.title and
page.grand_parent = = nil
Here, `node` is a first-level page. The last part of the condition
-- namely: `page.parent = = node.title and page.grand_parent = = nil` --
is evaluated first; it holds if and only if `page` is a child of `node`.
The condition `page.grand_parent = = node.title or ...` holds when
`page` is a grandchild of node, OR `...` holds.
The condition `page.url = = node.url or ...` holds when
`page` is `node`, OR `...` holds.
The condition C: `page.collection = = include.key and ...` holds when we are
generating the nav links for a collection that includes `page`, AND `...` holds.
{%- endcomment -%}
<ul class="nav-list">
{%- for node in first_level_pages -%}
{%- unless node.nav_exclude -%}
<li class="nav-list-item{% if page.collection == include.key and page.url == node.url or page.grand_parent == node.title or page.parent == node.title and page.grand_parent == nil %} active{% endif %}">
{%- if node.has_children -%}
<a href="#" class="nav-list-expander" aria-label="toggle links in {{ node.title }} category">
<svg viewBox="0 0 24 24"><use xlink:href="#svg-arrow-right"></use></svg>
</a>
{%- endif -%}
<a href="{{ node.url | relative_url }}" class="nav-list-link{% if page.url == node.url %} active{% endif %}">{{ node.title }}</a>
{%- if node.has_children -%}
{%- assign children_list = second_level_pages
| where: "parent", node.title -%}
{%- if node.child_nav_order == 'desc' or node.child_nav_order == 'reversed' -%}
{%- assign children_list = children_list | reverse -%}
{%- endif -%}
<ul class="nav-list">
{%- for child in children_list -%}
{%- unless child.nav_exclude -%}
<li class="nav-list-item {% if page.url == child.url or page.parent == child.title %} active{% endif %}">
{%- if child.has_children -%}
<a href="#" class="nav-list-expander" aria-label="toggle links in {{ child.title }} category">
<svg viewBox="0 0 24 24"><use xlink:href="#svg-arrow-right"></use></svg>
</a>
{%- endif -%}
<a href="{{ child.url | relative_url }}" class="nav-list-link{% if page.url == child.url %} active{% endif %}">{{ child.title }}</a>
{%- if child.has_children -%}
{%- assign grand_children_list = third_level_pages
| where: "parent", child.title
| where: "grand_parent", node.title -%}
{%- if child.child_nav_order == 'desc' or child.child_nav_order == 'reversed' -%}
{%- assign grand_children_list = grand_children_list | reverse -%}
{%- endif -%}
<ul class="nav-list">
{%- for grand_child in grand_children_list -%}
{%- unless grand_child.nav_exclude -%}
<li class="nav-list-item {% if page.url == grand_child.url %} active{% endif %}">
<a href="{{ grand_child.url | relative_url }}" class="nav-list-link{% if page.url == grand_child.url %} active{% endif %}">{{ grand_child.title }}</a>
</li>
{%- endunless -%}
{%- endfor -%}
</ul>
{%- endif -%}
</li>
{%- endunless -%}
{%- endfor -%}
</ul>
{%- endif -%}
</li>
{%- endunless -%}
{%- endfor -%}
</ul>
{%- comment -%}
`page.collection` is the name of the Jekyll collection that contains the page,
if any, and otherwise nil. Similarly for `include.key`.
If the current page is in the collection (if any) whose navigation is currently
being generated, the following code sets `first_level_url` to the URL used in
the page's top-level breadcrumb (if any), and `second_level_url` to that used
in the page's second-level breadcrumb (if any).
For pages with children, the code also sets `toc_list` to the list of child pages,
reversing the order if needed.
{%- endcomment -%}
{%- if page.collection == include.key -%}
{%- for node in first_level_pages -%}
{%- if page.grand_parent == node.title or page.parent == node.title and page.grand_parent == nil -%}
{%- assign first_level_url = node.url | relative_url -%}
{%- endif -%}
{%- if node.has_children -%}
{%- assign children_list = second_level_pages | where: "parent", node.title -%}
{%- for child in children_list -%}
{%- if child.has_children -%}
{%- if page.url == child.url or page.parent == child.title and page.grand_parent == child.parent -%}
{%- assign second_level_url = child.url | relative_url -%}
{%- endif -%}
{%- endif -%}
{%- endfor -%}
{%- endif -%}
{%- endfor -%}
{%- if page.has_children == true and page.has_toc != false -%}
{%- assign toc_list = pages_list
| where: "parent", page.title
| where_exp: "item", "item.grand_parent == page.parent" -%}
{%- if page.child_nav_order == 'desc' or page.child_nav_order == 'reversed' -%}
{%- assign toc_list = toc_list | reverse -%}
{%- endif -%}
{%- endif -%}
{%- endif -%}

View File

@ -1,5 +1,5 @@
{% if site.logo %} {% if site.logo %}
<div class="site-logo" role="img" aria-label="{{ site.title }}"></div> <div class="site-logo"></div>
{% else %} {% else %}
{{ site.title }} {{ site.title }}
{% endif %} {% endif %}

View File

@ -9,30 +9,24 @@ layout: table_wrappers
<body> <body>
<a class="skip-to-main" href="#main-content">Skip to main content</a> <a class="skip-to-main" href="#main-content">Skip to main content</a>
{% include icons/icons.html %} {% include icons/icons.html %}
{% if page.nav_enabled == true %}
{% include components/sidebar.html %} {% include components/sidebar.html %}
{% elsif layout.nav_enabled == true and page.nav_enabled == nil %}
{% include components/sidebar.html %}
{% elsif site.nav_enabled != false and layout.nav_enabled == nil and page.nav_enabled == nil %}
{% include components/sidebar.html %}
{% endif %}
<div class="main" id="top"> <div class="main" id="top">
{% include components/header.html %} {% include components/header.html %}
<div class="main-content-wrap"> <div id="main-content-wrap" class="main-content-wrap">
{% include components/breadcrumbs.html %} {% include components/breadcrumbs.html %}
<div id="main-content" class="main-content"> <div id="main-content" class="main-content" role="main">
<main>
{% if site.heading_anchors != false %} {% if site.heading_anchors != false %}
{% include vendor/anchor_headings.html html=content beforeHeading="true" anchorBody="<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><use xlink:href=\"#svg-link\"></use></svg>" anchorClass="anchor-heading" anchorAttrs="aria-labelledby=\"%html_id%\"" %} {% include vendor/anchor_headings.html html=content beforeHeading="true" anchorBody="<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><use xlink:href=\"#svg-link\"></use></svg>" anchorClass="anchor-heading" anchorAttrs="aria-labelledby=\"%html_id%\"" %}
{% else %} {% else %}
{{ content }} {{ content }}
{% endif %} {% endif %}
{% if page.has_toc != false %} {% if page.has_children == true and page.has_toc != false %}
{% include components/children_nav.html %} {% include components/children_nav.html toc_list=toc_list %}
{% endif %} {% endif %}
</main>
{% include components/footer.html %} {% include components/footer.html %}
</div> </div>
</div> </div>
{% if site.search_enabled != false %} {% if site.search_enabled != false %}

View File

@ -1,6 +1,60 @@
--- ---
layout: default layout: table_wrappers
nav_enabled: false
--- ---
{{ content }} <!DOCTYPE html>
<html lang="{{ site.lang | default: 'en-US' }}">
{% include head.html %}
<body>
<a class="skip-to-main" href="#main-content">Skip to main content</a>
{% include icons/icons.html %}
{% comment %}
This is a bandaid fix to properly render breadcrumbs; as of now, there is some variable leakage between the sidebar component (which computes parents, grandparents) and the breadcrumbs component. We plan to remove this in a future release to deduplicate code.
For more context, see https://github.com/just-the-docs/just-the-docs/pull/1058#discussion_r1057014053
{% endcomment %}
{% capture nav %}
{% assign pages_top_size = site.html_pages
| where_exp:"item", "item.title != nil"
| where_exp:"item", "item.parent == nil"
| where_exp:"item", "item.nav_exclude != true"
| size %}
{% if pages_top_size > 0 %}
{% include nav.html pages=site.html_pages key=nil %}
{% endif %}
{% if site.just_the_docs.collections %}
{% assign collections_size = site.just_the_docs.collections | size %}
{% for collection_entry in site.just_the_docs.collections %}
{% assign collection_key = collection_entry[0] %}
{% assign collection_value = collection_entry[1] %}
{% assign collection = site[collection_key] %}
{% if collection_value.nav_exclude != true %}
{% include nav.html pages=collection key=collection_key %}
{% endif %}
{% endfor %}
{% endif %}
{% endcapture %}
<div id="main-content-wrap" class="main-content-wrap" id="top">
{% include components/breadcrumbs.html %}
<div id="main-content" class="main-content" role="main">
{% if site.heading_anchors != false %}
{% include vendor/anchor_headings.html html=content beforeHeading="true" anchorBody="<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><use xlink:href=\"#svg-link\"></use></svg>" anchorClass="anchor-heading" anchorAttrs="aria-labelledby=\"%html_id%\"" %}
{% else %}
{{ content }}
{% endif %}
{% if page.has_children == true and page.has_toc != false %}
{% include components/children_nav.html toc_list=toc_list %}
{% endif %}
{% include components/footer.html %}
</div>
</div>
{% if site.mermaid %}
{% include components/mermaid.html %}
{% endif %}
</body>
</html>

View File

@ -1,18 +1,19 @@
// Base element style overrides // Base element style overrides
// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id // stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id
:root {
color-scheme: $color-scheme;
}
* { * {
box-sizing: border-box; box-sizing: border-box;
} }
html { ::selection {
scroll-behavior: smooth; color: $white;
background: $link-color;
}
html {
@include fs-4; @include fs-4;
scroll-behavior: smooth;
} }
body { body {
@ -108,6 +109,6 @@ blockquote {
// resets user-agent stylesheets for blockquotes // resets user-agent stylesheets for blockquotes
margin-block-start: 0; margin-block-start: 0;
margin-inline-start: 0; margin-inline-start: 0;
padding-left: 1rem; padding-left: 15px;
border-left: 3px solid $border-color; border-left: 3px solid $border-color;
} }

View File

@ -17,9 +17,7 @@
background-color: $base-button-color; background-color: $base-button-color;
border-width: 0; border-width: 0;
border-radius: $border-radius; border-radius: $border-radius;
box-shadow: box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
0 1px 2px rgba(0, 0, 0, 0.12),
0 3px 10px rgba(0, 0, 0, 0.08);
appearance: none; appearance: none;
&:focus { &:focus {
@ -89,9 +87,7 @@
&:focus { &:focus {
text-decoration: none; text-decoration: none;
outline: none; outline: none;
box-shadow: box-shadow: inset 0 0 0 2px $grey-dk-100, 0 0 0 3px rgba(blue, 0.25);
inset 0 0 0 2px $grey-dk-100,
0 0 0 3px rgba(blue, 0.25);
} }
&:focus:hover, &:focus:hover,
@ -115,13 +111,3 @@
.btn-green { .btn-green {
@include btn-color($white, $green-100); @include btn-color($white, $green-100);
} }
.btn-reset {
background: none;
border: none;
margin: 0;
text-align: inherit;
font: inherit;
border-radius: 0;
appearance: none;
}

View File

@ -50,11 +50,6 @@ a:visited code {
// Kramdown line_numbers = true: fences have a wider gutter than with Liquid? // Kramdown line_numbers = true: fences have a wider gutter than with Liquid?
// ```[LANG]...``` // ```[LANG]...```
// or in AsciiDoc:
//
// ----
// ...
// ----
// the code may appear with 3 different types: // the code may appear with 3 different types:
// container \ case: default case, code with line number, code with html rendering // container \ case: default case, code with line number, code with html rendering
@ -64,7 +59,6 @@ a:visited code {
// last level: code, pre, code (optionality) // last level: code, pre, code (optionality)
// highlighter level: span, span, span // highlighter level: span, span, span
// the spacing are only in the second level for case 1, 3 and in the third level for case 2 // the spacing are only in the second level for case 1, 3 and in the third level for case 2
// in AsciiDoc, there is a parent container that contains optionally a title and the content.
// select top level container // select top level container
div.highlighter-rouge, div.highlighter-rouge,
@ -117,17 +111,17 @@ figure.highlight {
} }
// setting the spacing and scrollbar on the second level for the first case // setting the spacing and scrollbar on the second level for the first case
// remove all space on the second and third level // remove all space on the second and thirt level
// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc div.highlighter-rouge,
@mixin scroll-and-spacing($code-div, $pre-select) { div.listingblock {
#{$code-div} { div.highlight {
overflow-x: auto; overflow-x: auto;
padding: $sp-3; padding: $sp-3;
margin: 0; margin: 0;
border: 0; border: 0;
} }
#{$pre-select}, pre.highlight,
code { code {
padding: 0; padding: 0;
margin: 0; margin: 0;
@ -135,19 +129,6 @@ figure.highlight {
} }
} }
// for Markdown
div.highlighter-rouge {
@include scroll-and-spacing("div.highlight", "pre.highlight");
}
// for AsciiDoc. we also need to fix the margins for its parent container.
div.listingblock {
margin-top: 0;
margin-bottom: $sp-3;
@include scroll-and-spacing("div.content", "div.content > pre");
}
// {% highlight LANG %}...{% endhighlight %}, // {% highlight LANG %}...{% endhighlight %},
// {% highlight LANG linenos %}...{% endhighlight %}: // {% highlight LANG linenos %}...{% endhighlight %}:
@ -176,12 +157,12 @@ figure.highlight {
td, td,
pre { pre {
@include fs-2;
min-width: 0; min-width: 0;
padding: 0; padding: 0;
background-color: $code-background-color; background-color: $code-background-color;
border: 0; border: 0;
@include fs-2;
} }
td.gl { td.gl {

View File

@ -1,18 +1,32 @@
$color-scheme: dark;
$body-background-color: $grey-dk-300; $body-background-color: $grey-dk-300;
$body-heading-color: $grey-lt-000;
$body-text-color: $grey-lt-300;
$link-color: $blue-000;
$nav-child-link-color: $grey-dk-000;
$sidebar-color: $grey-dk-300; $sidebar-color: $grey-dk-300;
$base-button-color: $grey-dk-250; $border-color: $grey-dk-200;
$body-text-color: $grey-lt-300;
$body-heading-color: $grey-lt-000;
$nav-child-link-color: $grey-dk-000;
$search-result-preview-color: $grey-dk-000;
$link-color: $blue-000;
$btn-primary-color: $blue-200; $btn-primary-color: $blue-200;
$base-button-color: $grey-dk-250;
$search-background-color: $grey-dk-250;
$table-background-color: $grey-dk-250;
$feedback-color: darken($sidebar-color, 3%);
// The following highlight theme is more legible than that used for the light color scheme
// @import "./vendor/OneDarkJekyll/syntax-one-dark";
// $code-background-color: #282c34; // OneDarkJekyll default for syntax-one-dark
// $code-linenumber-color: #abb2bf; // OneDarkJekyll .nf for syntax-one-dark
@import "./vendor/OneDarkJekyll/syntax-one-dark-vivid";
$code-background-color: #31343f; // OneDarkJekyll default for syntax-one-dark-vivid $code-background-color: #31343f; // OneDarkJekyll default for syntax-one-dark-vivid
$code-linenumber-color: #dee2f7; // OneDarkJekyll .nf for syntax-one-dark-vivid $code-linenumber-color: #dee2f7; // OneDarkJekyll .nf for syntax-one-dark-vivid
$feedback-color: darken($sidebar-color, 3%);
$table-background-color: $grey-dk-250;
$search-background-color: $grey-dk-250;
$search-result-preview-color: $grey-dk-000;
$border-color: $grey-dk-200;
@import "./vendor/OneDarkJekyll/syntax"; // this is the one-dark-vivid atom syntax theme // @import "./vendor/OneDarkJekyll/syntax-firewatch";
// $code-background-color: #282c34; // OneDarkJekyll default for syntax-firewatch
// $code-linenumber-color: #abb2bf; // OneDarkJekyll .nf for syntax-firewatch
// @import "./vendor/OneDarkJekyll/syntax-firewatch-green";
// $code-background-color: #282c34; // OneDarkJekyll default for syntax-firewatch-green
// $code-linenumber-color: #abb2bf; // OneDarkJekyll .nf for syntax-firewatch-green

View File

@ -1,208 +0,0 @@
// Moved from _sass/code.scss
.highlight .c {
color: #586e75;
} // comment //
.highlight .err {
color: #93a1a1;
} // error //
.highlight .g {
color: #93a1a1;
} // generic //
.highlight .k {
color: #859900;
} // keyword //
.highlight .l {
color: #93a1a1;
} // literal //
.highlight .n {
color: #93a1a1;
} // name //
.highlight .o {
color: #859900;
} // operator //
.highlight .x {
color: #cb4b16;
} // other //
.highlight .p {
color: #93a1a1;
} // punctuation //
.highlight .cm {
color: #586e75;
} // comment.multiline //
.highlight .cp {
color: #859900;
} // comment.preproc //
.highlight .c1 {
color: #586e75;
} // comment.single //
.highlight .cs {
color: #859900;
} // comment.special //
.highlight .gd {
color: #2aa198;
} // generic.deleted //
.highlight .ge {
font-style: italic;
color: #93a1a1;
} // generic.emph //
.highlight .gr {
color: #dc322f;
} // generic.error //
.highlight .gh {
color: #cb4b16;
} // generic.heading //
.highlight .gi {
color: #859900;
} // generic.inserted //
.highlight .go {
color: #93a1a1;
} // generic.output //
.highlight .gp {
color: #93a1a1;
} // generic.prompt //
.highlight .gs {
font-weight: bold;
color: #93a1a1;
} // generic.strong //
.highlight .gu {
color: #cb4b16;
} // generic.subheading //
.highlight .gt {
color: #93a1a1;
} // generic.traceback //
.highlight .kc {
color: #cb4b16;
} // keyword.constant //
.highlight .kd {
color: #268bd2;
} // keyword.declaration //
.highlight .kn {
color: #859900;
} // keyword.namespace //
.highlight .kp {
color: #859900;
} // keyword.pseudo //
.highlight .kr {
color: #268bd2;
} // keyword.reserved //
.highlight .kt {
color: #dc322f;
} // keyword.type //
.highlight .ld {
color: #93a1a1;
} // literal.date //
.highlight .m {
color: #2aa198;
} // literal.number //
.highlight .s {
color: #2aa198;
} // literal.string //
.highlight .na {
color: #555;
} // name.attribute //
.highlight .nb {
color: #b58900;
} // name.builtin //
.highlight .nc {
color: #268bd2;
} // name.class //
.highlight .no {
color: #cb4b16;
} // name.constant //
.highlight .nd {
color: #268bd2;
} // name.decorator //
.highlight .ni {
color: #cb4b16;
} // name.entity //
.highlight .ne {
color: #cb4b16;
} // name.exception //
.highlight .nf {
color: #268bd2;
} // name.function //
.highlight .nl {
color: #555;
} // name.label //
.highlight .nn {
color: #93a1a1;
} // name.namespace //
.highlight .nx {
color: #555;
} // name.other //
.highlight .py {
color: #93a1a1;
} // name.property //
.highlight .nt {
color: #268bd2;
} // name.tag //
.highlight .nv {
color: #268bd2;
} // name.variable //
.highlight .ow {
color: #859900;
} // operator.word //
.highlight .w {
color: #93a1a1;
} // text.whitespace //
.highlight .mf {
color: #2aa198;
} // literal.number.float //
.highlight .mh {
color: #2aa198;
} // literal.number.hex //
.highlight .mi {
color: #2aa198;
} // literal.number.integer //
.highlight .mo {
color: #2aa198;
} // literal.number.oct //
.highlight .sb {
color: #586e75;
} // literal.string.backtick //
.highlight .sc {
color: #2aa198;
} // literal.string.char //
.highlight .sd {
color: #93a1a1;
} // literal.string.doc //
.highlight .s2 {
color: #2aa198;
} // literal.string.double //
.highlight .se {
color: #cb4b16;
} // literal.string.escape //
.highlight .sh {
color: #93a1a1;
} // literal.string.heredoc //
.highlight .si {
color: #2aa198;
} // literal.string.interpol //
.highlight .sx {
color: #2aa198;
} // literal.string.other //
.highlight .sr {
color: #dc322f;
} // literal.string.regex //
.highlight .s1 {
color: #2aa198;
} // literal.string.single //
.highlight .ss {
color: #2aa198;
} // literal.string.symbol //
.highlight .bp {
color: #268bd2;
} // name.builtin.pseudo //
.highlight .vc {
color: #268bd2;
} // name.variable.class //
.highlight .vg {
color: #268bd2;
} // name.variable.global //
.highlight .vi {
color: #268bd2;
} // name.variable.instance //
.highlight .il {
color: #2aa198;
} // literal.number.integer.long //

View File

@ -1,16 +1,208 @@
$color-scheme: light !default; // Moved from _sass/code.scss
$body-background-color: $white !default;
$body-heading-color: $grey-dk-300 !default;
$body-text-color: $grey-dk-100 !default;
$link-color: $purple-000 !default;
$nav-child-link-color: $grey-dk-100 !default;
$sidebar-color: $grey-lt-000 !default;
$base-button-color: #f7f7f7 !default;
$btn-primary-color: $purple-100 !default;
$code-background-color: $grey-lt-000 !default;
$feedback-color: darken($sidebar-color, 3%) !default;
$table-background-color: $white !default;
$search-background-color: $white !default;
$search-result-preview-color: $grey-dk-000 !default;
@import "./vendor/OneLightJekyll/syntax"; .highlight .c {
color: #586e75;
} // comment //
.highlight .err {
color: #93a1a1;
} // error //
.highlight .g {
color: #93a1a1;
} // generic //
.highlight .k {
color: #859900;
} // keyword //
.highlight .l {
color: #93a1a1;
} // literal //
.highlight .n {
color: #93a1a1;
} // name //
.highlight .o {
color: #859900;
} // operator //
.highlight .x {
color: #cb4b16;
} // other //
.highlight .p {
color: #93a1a1;
} // punctuation //
.highlight .cm {
color: #586e75;
} // comment.multiline //
.highlight .cp {
color: #859900;
} // comment.preproc //
.highlight .c1 {
color: #586e75;
} // comment.single //
.highlight .cs {
color: #859900;
} // comment.special //
.highlight .gd {
color: #2aa198;
} // generic.deleted //
.highlight .ge {
font-style: italic;
color: #93a1a1;
} // generic.emph //
.highlight .gr {
color: #dc322f;
} // generic.error //
.highlight .gh {
color: #cb4b16;
} // generic.heading //
.highlight .gi {
color: #859900;
} // generic.inserted //
.highlight .go {
color: #93a1a1;
} // generic.output //
.highlight .gp {
color: #93a1a1;
} // generic.prompt //
.highlight .gs {
font-weight: bold;
color: #93a1a1;
} // generic.strong //
.highlight .gu {
color: #cb4b16;
} // generic.subheading //
.highlight .gt {
color: #93a1a1;
} // generic.traceback //
.highlight .kc {
color: #cb4b16;
} // keyword.constant //
.highlight .kd {
color: #268bd2;
} // keyword.declaration //
.highlight .kn {
color: #859900;
} // keyword.namespace //
.highlight .kp {
color: #859900;
} // keyword.pseudo //
.highlight .kr {
color: #268bd2;
} // keyword.reserved //
.highlight .kt {
color: #dc322f;
} // keyword.type //
.highlight .ld {
color: #93a1a1;
} // literal.date //
.highlight .m {
color: #2aa198;
} // literal.number //
.highlight .s {
color: #2aa198;
} // literal.string //
.highlight .na {
color: #555;
} // name.attribute //
.highlight .nb {
color: #b58900;
} // name.builtin //
.highlight .nc {
color: #268bd2;
} // name.class //
.highlight .no {
color: #cb4b16;
} // name.constant //
.highlight .nd {
color: #268bd2;
} // name.decorator //
.highlight .ni {
color: #cb4b16;
} // name.entity //
.highlight .ne {
color: #cb4b16;
} // name.exception //
.highlight .nf {
color: #268bd2;
} // name.function //
.highlight .nl {
color: #555;
} // name.label //
.highlight .nn {
color: #93a1a1;
} // name.namespace //
.highlight .nx {
color: #555;
} // name.other //
.highlight .py {
color: #93a1a1;
} // name.property //
.highlight .nt {
color: #268bd2;
} // name.tag //
.highlight .nv {
color: #268bd2;
} // name.variable //
.highlight .ow {
color: #859900;
} // operator.word //
.highlight .w {
color: #93a1a1;
} // text.whitespace //
.highlight .mf {
color: #2aa198;
} // literal.number.float //
.highlight .mh {
color: #2aa198;
} // literal.number.hex //
.highlight .mi {
color: #2aa198;
} // literal.number.integer //
.highlight .mo {
color: #2aa198;
} // literal.number.oct //
.highlight .sb {
color: #586e75;
} // literal.string.backtick //
.highlight .sc {
color: #2aa198;
} // literal.string.char //
.highlight .sd {
color: #93a1a1;
} // literal.string.doc //
.highlight .s2 {
color: #2aa198;
} // literal.string.double //
.highlight .se {
color: #cb4b16;
} // literal.string.escape //
.highlight .sh {
color: #93a1a1;
} // literal.string.heredoc //
.highlight .si {
color: #2aa198;
} // literal.string.interpol //
.highlight .sx {
color: #2aa198;
} // literal.string.other //
.highlight .sr {
color: #dc322f;
} // literal.string.regex //
.highlight .s1 {
color: #2aa198;
} // literal.string.single //
.highlight .ss {
color: #2aa198;
} // literal.string.symbol //
.highlight .bp {
color: #268bd2;
} // name.builtin.pseudo //
.highlight .vc {
color: #268bd2;
} // name.variable.class //
.highlight .vg {
color: #268bd2;
} // name.variable.global //
.highlight .vi {
color: #268bd2;
} // name.variable.instance //
.highlight .il {
color: #2aa198;
} // literal.number.integer.long //

View File

@ -1,11 +1,7 @@
// Labels (not the form kind) // Labels (not the form kind)
// this :not() prevents a style clash with Mermaid.js's .label,
// diagram labels, which also use .label .label-blue {
// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272
// and the accompanying PR
.label:not(g),
.label-blue:not(g) {
display: inline-block; display: inline-block;
padding: 0.16em 0.56em; padding: 0.16em 0.56em;
margin-right: $sp-2; margin-right: $sp-2;
@ -14,24 +10,24 @@
text-transform: uppercase; text-transform: uppercase;
vertical-align: middle; vertical-align: middle;
background-color: $blue-100; background-color: $blue-100;
border-radius: 12px;
@include fs-2; @include fs-2;
border-radius: 12px;
} }
.label-green:not(g) { .label-green {
background-color: $green-200; background-color: $green-200;
} }
.label-purple:not(g) { .label-purple {
background-color: $purple-100; background-color: $purple-100;
} }
.label-red:not(g) { .label-red {
background-color: $red-200; background-color: $red-200;
} }
.label-yellow:not(g) { .label-yellow {
color: $grey-dk-200; color: $grey-dk-200;
background-color: $yellow-200; background-color: $yellow-200;
} }

View File

@ -19,57 +19,28 @@
width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width}); width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});
min-width: $nav-width; min-width: $nav-width;
} }
}
& + .main { .main {
@include mq(md) { @include mq(md) {
position: relative;
max-width: $content-width;
margin-left: $nav-width-md; margin-left: $nav-width-md;
} }
@include mq(lg) { @include mq(lg) {
// stylelint-disable function-name-case margin-left: calc(
// disable for Max(), we want to use the CSS max() function (100% - #{$nav-width + $content-width}) / 2 + #{$nav-width}
margin-left: Max(
#{$nav-width},
calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})
); );
// stylelint-enable function-name-case
}
.main-header {
display: none;
background-color: $sidebar-color;
@include mq(md) {
display: flex;
background-color: $body-background-color;
}
&.nav-open {
display: block;
@include mq(md) {
display: flex;
}
}
}
}
}
.main {
margin: auto;
@include mq(md) {
position: relative;
max-width: $content-width;
} }
} }
.main-content-wrap { .main-content-wrap {
@include container;
padding-top: $gutter-spacing-sm; padding-top: $gutter-spacing-sm;
padding-bottom: $gutter-spacing-sm; padding-bottom: $gutter-spacing-sm;
@include container;
@include mq(md) { @include mq(md) {
padding-top: $gutter-spacing; padding-top: $gutter-spacing;
padding-bottom: $gutter-spacing; padding-bottom: $gutter-spacing;
@ -78,12 +49,23 @@
.main-header { .main-header {
z-index: 0; z-index: 0;
border-bottom: $border $border-color; display: none;
background-color: $sidebar-color;
@include mq(md) { @include mq(md) {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
height: $header-height; height: $header-height;
background-color: $body-background-color;
border-bottom: $border $border-color;
}
&.nav-open {
display: block;
@include mq(md) {
display: flex;
}
} }
} }
@ -126,6 +108,8 @@
} }
.site-title { .site-title {
@include container;
flex-grow: 1; flex-grow: 1;
display: flex; display: flex;
height: 100%; height: 100%;
@ -133,9 +117,6 @@
padding-top: $sp-3; padding-top: $sp-3;
padding-bottom: $sp-3; padding-bottom: $sp-3;
color: $body-heading-color; color: $body-heading-color;
@include container;
@include fs-6; @include fs-6;
@include mq(md) { @include mq(md) {
@ -201,15 +182,14 @@ body {
// stylelint-enable selector-max-type // stylelint-enable selector-max-type
.site-footer { .site-footer {
@include container;
position: absolute; position: absolute;
bottom: 0; bottom: 0;
left: 0; left: 0;
padding-top: $sp-4; padding-top: $sp-4;
padding-bottom: $sp-4; padding-bottom: $sp-4;
color: $grey-dk-000; color: $grey-dk-000;
@include container;
@include fs-2; @include fs-2;
@include mq(md) { @include mq(md) {

View File

@ -8,11 +8,11 @@
list-style: none; list-style: none;
.nav-list-item { .nav-list-item {
@include fs-4;
position: relative; position: relative;
margin: 0; margin: 0;
@include fs-4;
@include mq(md) { @include mq(md) {
@include fs-3; @include fs-3;
} }

View File

@ -21,7 +21,7 @@
} }
.site-title { .site-title {
font-size: 1rem !important; font-size: $root-font-size !important;
font-weight: 700 !important; font-weight: 700 !important;
} }

View File

@ -23,9 +23,7 @@
height: $sp-8; height: $sp-8;
overflow: hidden; overflow: hidden;
border-radius: $border-radius; border-radius: $border-radius;
box-shadow: box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
0 1px 2px rgba(0, 0, 0, 0.12),
0 3px 10px rgba(0, 0, 0, 0.08);
transition: height linear #{$transition-duration * 0.5}; transition: height linear #{$transition-duration * 0.5};
@include mq(md) { @include mq(md) {
@ -44,7 +42,7 @@
width: 100%; width: 100%;
height: 100%; height: 100%;
padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5}; padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};
font-size: 1rem; font-size: 16px;
color: $body-text-color; color: $body-text-color;
background-color: $search-background-color; background-color: $search-background-color;
border-top: 0; border-top: 0;
@ -55,7 +53,7 @@
@include mq(md) { @include mq(md) {
padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5}; padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};
font-size: 0.875rem; font-size: 14px;
background-color: $body-background-color; background-color: $body-background-color;
transition: padding-left linear #{$transition-duration * 0.5}; transition: padding-left linear #{$transition-duration * 0.5};
} }
@ -98,9 +96,7 @@
background-color: $search-background-color; background-color: $search-background-color;
border-bottom-right-radius: $border-radius; border-bottom-right-radius: $border-radius;
border-bottom-left-radius: $border-radius; border-bottom-left-radius: $border-radius;
box-shadow: box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
0 1px 2px rgba(0, 0, 0, 0.12),
0 3px 10px rgba(0, 0, 0, 0.08);
@include mq(md) { @include mq(md) {
top: 100%; top: 100%;
@ -234,9 +230,7 @@
background-color: $search-background-color; background-color: $search-background-color;
border: 1px solid rgba($link-color, 0.3); border: 1px solid rgba($link-color, 0.3);
border-radius: #{$sp-9 * 0.5}; border-radius: #{$sp-9 * 0.5};
box-shadow: box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
0 1px 2px rgba(0, 0, 0, 0.12),
0 3px 10px rgba(0, 0, 0, 0.08);
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
@ -250,9 +244,7 @@
height: 0; height: 0;
background-color: rgba(0, 0, 0, 0.3); background-color: rgba(0, 0, 0, 0.3);
opacity: 0; opacity: 0;
transition: transition: opacity ease $transition-duration, width 0s $transition-duration,
opacity ease $transition-duration,
width 0s $transition-duration,
height 0s $transition-duration; height 0s $transition-duration;
} }
@ -272,9 +264,7 @@
@include mq(md) { @include mq(md) {
width: $search-results-width; width: $search-results-width;
box-shadow: box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
0 1px 2px rgba(0, 0, 0, 0.12),
0 3px 10px rgba(0, 0, 0, 0.08);
} }
} }
@ -300,10 +290,7 @@
width: 100%; width: 100%;
height: 100%; height: 100%;
opacity: 1; opacity: 1;
transition: transition: opacity ease $transition-duration, width 0s, height 0s;
opacity ease $transition-duration,
width 0s,
height 0s;
} }
@include mq(md) { @include mq(md) {

View File

@ -0,0 +1,9 @@
@function rem($size, $unit: "") {
$rem-size: $size / $root-font-size;
@if $unit == false {
@return #{$rem-size};
} @else {
@return #{$rem-size}rem;
}
}

View File

@ -1,10 +1,9 @@
// Typography // Typography
// prettier-ignore
$body-font-family: system-ui, -apple-system, blinkmacsystemfont, "Segoe UI", $body-font-family: system-ui, -apple-system, blinkmacsystemfont, "Segoe UI",
roboto, "Helvetica Neue", arial, sans-serif, "Segoe UI Emoji" !default; roboto, "Helvetica Neue", arial, sans-serif !default;
$mono-font-family: "SFMono-Regular", menlo, consolas, monospace !default; $mono-font-family: "SFMono-Regular", menlo, consolas, monospace !default;
$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems $root-font-size: 16px !default; // Base font-size for rems
$body-line-height: 1.4 !default; $body-line-height: 1.4 !default;
$content-line-height: 1.6 !default; $content-line-height: 1.6 !default;
$body-heading-line-height: 1.25 !default; $body-heading-line-height: 1.25 !default;
@ -12,18 +11,18 @@ $body-heading-line-height: 1.25 !default;
// Font size // Font size
// `-sm` suffix is the size at the small (and above) media query // `-sm` suffix is the size at the small (and above) media query
$font-size-1: 0.5625rem !default; $font-size-1: 9px !default;
$font-size-1-sm: 0.625rem !default; $font-size-1-sm: 10px !default;
$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small $font-size-2: 11px !default; // h4 - uppercased!, h6 not uppercased, text-small
$font-size-3: 0.75rem !default; // h5 $font-size-3: 12px !default; // h5
$font-size-4: 0.875rem !default; $font-size-4: 14px !default;
$font-size-5: 1rem !default; // h3 $font-size-5: 16px !default; // h3
$font-size-6: 1.125rem !default; // h2 $font-size-6: 18px !default; // h2
$font-size-7: 1.5rem !default; $font-size-7: 24px !default;
$font-size-8: 2rem !default; // h1 $font-size-8: 32px !default; // h1
$font-size-9: 2.25rem !default; $font-size-9: 36px !default;
$font-size-10: 2.625rem !default; $font-size-10: 42px !default;
$font-size-10-sm: 3rem !default; $font-size-10-sm: 48px !default;
// Colors // Colors
@ -57,6 +56,19 @@ $red-000: #f77e7e !default;
$red-100: #f96e65 !default; $red-100: #f96e65 !default;
$red-200: #e94c4c !default; $red-200: #e94c4c !default;
$red-300: #dd2e2e !default; $red-300: #dd2e2e !default;
$body-background-color: $white !default;
$sidebar-color: $grey-lt-000 !default;
$search-background-color: $white !default;
$table-background-color: $white !default;
$code-background-color: $grey-lt-000 !default;
$feedback-color: darken($sidebar-color, 3%) !default;
$body-text-color: $grey-dk-100 !default;
$body-heading-color: $grey-dk-300 !default;
$search-result-preview-color: $grey-dk-000 !default;
$nav-child-link-color: $grey-dk-100 !default;
$link-color: $purple-000 !default;
$btn-primary-color: $purple-100 !default;
$base-button-color: #f7f7f7 !default;
// Spacing // Spacing
@ -96,22 +108,22 @@ $border-color: $grey-lt-100 !default;
$gutter-spacing: $sp-6 !default; $gutter-spacing: $sp-6 !default;
$gutter-spacing-sm: $sp-4 !default; $gutter-spacing-sm: $sp-4 !default;
$nav-width: 16.5rem !default; $nav-width: 264px !default;
$nav-width-md: 15.5rem !default; $nav-width-md: 248px !default;
$nav-list-item-height: $sp-6 !default; $nav-list-item-height: $sp-6 !default;
$nav-list-item-height-sm: $sp-8 !default; $nav-list-item-height-sm: $sp-8 !default;
$nav-list-expander-right: true; $nav-list-expander-right: true;
$content-width: 50rem !default; $content-width: 800px !default;
$header-height: 3.75rem !default; $header-height: 60px !default;
$search-results-width: $content-width - $nav-width !default; $search-results-width: $content-width - $nav-width !default;
$transition-duration: 400ms; $transition-duration: 400ms;
// Media queries in pixels // Media queries in pixels
$media-queries: ( $media-queries: (
xs: 20rem, xs: 320px,
sm: 31.25rem, sm: 500px,
md: $content-width, md: $content-width,
lg: $content-width + $nav-width, lg: $content-width + $nav-width,
xl: 87.5rem, xl: 1400px,
) !default; ) !default;

View File

@ -4,9 +4,7 @@
color: $fg; color: $fg;
background-color: darken($bg, 2%); background-color: darken($bg, 2%);
background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%)); background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));
box-shadow: box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12);
0 1px 3px rgba(0, 0, 0, 0.25),
0 4px 10px rgba(0, 0, 0, 0.12);
&:hover, &:hover,
&.zeroclipboard-is-hover { &.zeroclipboard-is-hover {

View File

@ -12,11 +12,12 @@
// If the key exists in the map // If the key exists in the map
@if $value { @if $value {
// Prints a media query based on the value // Prints a media query based on the value
@media (min-width: $value) { @media (min-width: rem($value)) {
@content; @content;
} }
} @else { } @else {
@warn "No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map."; @warn "No value could be retrieved from `#{$media-query}`. "
+ "Please make sure it is defined in `$media-queries` map.";
} }
} }

View File

@ -1,7 +1,5 @@
@mixin fs-1 { @mixin fs-1 {
& {
font-size: $font-size-1 !important; font-size: $font-size-1 !important;
}
@include mq(sm) { @include mq(sm) {
font-size: $font-size-1-sm !important; font-size: $font-size-1-sm !important;
@ -9,9 +7,7 @@
} }
@mixin fs-2 { @mixin fs-2 {
& {
font-size: $font-size-2 !important; font-size: $font-size-2 !important;
}
@include mq(sm) { @include mq(sm) {
font-size: $font-size-3 !important; font-size: $font-size-3 !important;
@ -19,9 +15,7 @@
} }
@mixin fs-3 { @mixin fs-3 {
& {
font-size: $font-size-3 !important; font-size: $font-size-3 !important;
}
@include mq(sm) { @include mq(sm) {
font-size: $font-size-4 !important; font-size: $font-size-4 !important;
@ -29,9 +23,7 @@
} }
@mixin fs-4 { @mixin fs-4 {
& {
font-size: $font-size-4 !important; font-size: $font-size-4 !important;
}
@include mq(sm) { @include mq(sm) {
font-size: $font-size-5 !important; font-size: $font-size-5 !important;
@ -39,9 +31,7 @@
} }
@mixin fs-5 { @mixin fs-5 {
& {
font-size: $font-size-5 !important; font-size: $font-size-5 !important;
}
@include mq(sm) { @include mq(sm) {
font-size: $font-size-6 !important; font-size: $font-size-6 !important;
@ -49,9 +39,7 @@
} }
@mixin fs-6 { @mixin fs-6 {
& {
font-size: $font-size-6 !important; font-size: $font-size-6 !important;
}
@include mq(sm) { @include mq(sm) {
font-size: $font-size-7 !important; font-size: $font-size-7 !important;
@ -60,10 +48,8 @@
} }
@mixin fs-7 { @mixin fs-7 {
& {
font-size: $font-size-7 !important; font-size: $font-size-7 !important;
line-height: $body-heading-line-height; line-height: $body-heading-line-height;
}
@include mq(sm) { @include mq(sm) {
font-size: $font-size-8 !important; font-size: $font-size-8 !important;
@ -71,10 +57,8 @@
} }
@mixin fs-8 { @mixin fs-8 {
& {
font-size: $font-size-8 !important; font-size: $font-size-8 !important;
line-height: $body-heading-line-height; line-height: $body-heading-line-height;
}
@include mq(sm) { @include mq(sm) {
font-size: $font-size-9 !important; font-size: $font-size-9 !important;
@ -82,10 +66,8 @@
} }
@mixin fs-9 { @mixin fs-9 {
& {
font-size: $font-size-9 !important; font-size: $font-size-9 !important;
line-height: $body-heading-line-height; line-height: $body-heading-line-height;
}
@include mq(sm) { @include mq(sm) {
font-size: $font-size-10 !important; font-size: $font-size-10 !important;
@ -93,10 +75,8 @@
} }
@mixin fs-10 { @mixin fs-10 {
& {
font-size: $font-size-10 !important; font-size: $font-size-10 !important;
line-height: $body-heading-line-height; line-height: $body-heading-line-height;
}
@include mq(sm) { @include mq(sm) {
font-size: $font-size-10-sm !important; font-size: $font-size-10-sm !important;

View File

@ -1,2 +1,3 @@
@import "./variables"; @import "./variables";
@import "./functions";
@import "./mixins/mixins"; @import "./mixins/mixins";

View File

@ -8,9 +8,7 @@
margin-bottom: $sp-5; margin-bottom: $sp-5;
overflow-x: auto; overflow-x: auto;
border-radius: $border-radius; border-radius: $border-radius;
box-shadow: box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
0 1px 2px rgba(0, 0, 0, 0.12),
0 3px 10px rgba(0, 0, 0, 0.08);
} }
table { table {
@ -21,14 +19,14 @@ table {
th, th,
td { td {
min-width: 7.5rem; @include fs-3;
min-width: 120px;
padding: $sp-2 $sp-3; padding: $sp-2 $sp-3;
background-color: $table-background-color; background-color: $table-background-color;
border-bottom: $border rgba($border-color, 0.5); border-bottom: $border rgba($border-color, 0.5);
border-left: $border $border-color; border-left: $border $border-color;
@include fs-3;
&:first-of-type { &:first-of-type {
border-left: 0; border-left: 0;
} }

View File

@ -3,9 +3,9 @@
h1, h1,
.text-alpha { .text-alpha {
font-weight: 300;
@include fs-8; @include fs-8;
font-weight: 300;
} }
h2, h2,
@ -21,11 +21,11 @@ h3,
h4, h4,
.text-delta { .text-delta {
@include fs-2;
font-weight: 400; font-weight: 400;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.1em; letter-spacing: 0.1em;
@include fs-2;
} }
h4 code { h4 code {

25
_sass/vendor/OneDarkJekyll/README.md vendored Normal file
View File

@ -0,0 +1,25 @@
# OneDarkJekyll
*Use Atom's One Dark syntax colors in your Jekyll powered blog!*
It's LESS file which can be compiled to a - Pygments, Rouge compatible - stylesheet from Atom editor's One Dark syntax theme (and any theme based on it, for example One Dark Vivid, Firewatch, etc.).
Download the stylesheet files or compile a new one from any Atom syntax theme which based on One Dark (the variable names in `colors.less` must match with One Dark's)
## Create a new syntax stylesheet
1. `npm install -g less less-plugin-clean-css`
2. Clone this repository
3. Download the `colors.css` file from the syntax theme's repository (for example https://github.com/atom/one-dark-syntax/blob/master/styles/colors.less in case of One-Dark)
4. Put the previously downloaded file next to `syntax.less`
5. Run `lessc syntax.less syntax.css --clean-css`
6. Use the `syntax.css`
It's not final and in case you find any error/improvement feel free to create a PR. :)
----
# UPDATES FOR USE IN JUST-THE-DOCS:
1. Layout added in `*.css`
2. Renamed `*.css` to `*.scss`

30
_sass/vendor/OneDarkJekyll/colors.less vendored Normal file
View File

@ -0,0 +1,30 @@
// Config -----------------------------------
@syntax-hue: 220;
@syntax-saturation: 13%;
@syntax-brightness: 18%;
// Monochrome -----------------------------------
@mono-1: hsl(@syntax-hue, 14%, 71%); // default text
@mono-2: hsl(@syntax-hue, 9%, 55%);
@mono-3: hsl(@syntax-hue, 10%, 40%);
// Colors -----------------------------------
@hue-1: hsl(187, 47%, 55%); // <-cyan
@hue-2: hsl(207, 82%, 66%); // <-blue
@hue-3: hsl(286, 60%, 67%); // <-purple
@hue-4: hsl( 95, 38%, 62%); // <-green
@hue-5: hsl(355, 65%, 65%); // <-red 1
@hue-5-2: hsl( 5, 48%, 51%); // <-red 2
@hue-6: hsl( 29, 54%, 61%); // <-orange 1
@hue-6-2: hsl( 39, 67%, 69%); // <-orange 2
// Base colors -----------------------------------
@syntax-fg: @mono-1;
@syntax-bg: hsl(@syntax-hue, @syntax-saturation, @syntax-brightness);
@syntax-gutter: darken(@syntax-fg, 26%);
@syntax-guide: fade(@syntax-fg, 15%);
@syntax-accent: hsl(@syntax-hue, 100%, 66% );

View File

@ -1,273 +1,200 @@
// Generated with OneLightJekyll applied to Atom's One Light theme
.highlight, .highlight,
pre.highlight { pre.highlight {
background: #f9f9f9; background: #282c34;
color: #383942; color: #abb2bf;
} }
.highlight pre { .highlight pre {
background: #f9f9f9; background: #282c34;
} }
.highlight .hll { .highlight .hll {
background: #f9f9f9; background: #282c34;
} }
.highlight .c { .highlight .c {
color: #9fa0a6; color: #5c6370;
font-style: italic; font-style: italic;
} }
.highlight .err { .highlight .err {
color: #fff; color: #960050;
background-color: #e05151; background-color: #1e0010;
} }
.highlight .k { .highlight .k {
color: #a625a4; color: #5ba473;
} }
.highlight .l { .highlight .l {
color: #50a04f; color: #c8ae9d;
} }
.highlight .n { .highlight .n {
color: #383942; color: #abb2bf;
} }
.highlight .o { .highlight .o {
color: #383942; color: #abb2bf;
} }
.highlight .p { .highlight .p {
color: #383942; color: #abb2bf;
} }
.highlight .cm { .highlight .cm {
color: #9fa0a6; color: #5c6370;
font-style: italic; font-style: italic;
} }
.highlight .cp { .highlight .cp {
color: #9fa0a6; color: #5c6370;
font-style: italic; font-style: italic;
} }
.highlight .c1 { .highlight .c1 {
color: #9fa0a6; color: #5c6370;
font-style: italic; font-style: italic;
} }
.highlight .cs { .highlight .cs {
color: #9fa0a6; color: #5c6370;
font-style: italic; font-style: italic;
} }
.highlight .ge { .highlight .ge {
font-style: italic; font-style: italic;
} }
.highlight .gs { .highlight .gs {
font-weight: 700; font-weight: 700;
} }
.highlight .kc { .highlight .kc {
color: #a625a4; color: #5ba473;
} }
.highlight .kd { .highlight .kd {
color: #a625a4; color: #5ba473;
} }
.highlight .kn { .highlight .kn {
color: #a625a4; color: #5ba473;
} }
.highlight .kp { .highlight .kp {
color: #a625a4; color: #5ba473;
} }
.highlight .kr { .highlight .kr {
color: #a625a4; color: #5ba473;
} }
.highlight .kt { .highlight .kt {
color: #a625a4; color: #5ba473;
} }
.highlight .ld { .highlight .ld {
color: #50a04f; color: #c8ae9d;
} }
.highlight .m { .highlight .m {
color: #b66a00; color: #d19a66;
} }
.highlight .s { .highlight .s {
color: #50a04f; color: #c8ae9d;
} }
.highlight .na { .highlight .na {
color: #b66a00; color: #d19a66;
} }
.highlight .nb { .highlight .nb {
color: #ca7601; color: #e5c07b;
} }
.highlight .nc { .highlight .nc {
color: #ca7601; color: #e5c07b;
} }
.highlight .no { .highlight .no {
color: #ca7601; color: #e5c07b;
} }
.highlight .nd { .highlight .nd {
color: #ca7601; color: #e5c07b;
} }
.highlight .ni { .highlight .ni {
color: #ca7601; color: #e5c07b;
} }
.highlight .ne { .highlight .ne {
color: #ca7601; color: #e5c07b;
} }
.highlight .nf { .highlight .nf {
color: #383942; color: #abb2bf;
} }
.highlight .nl { .highlight .nl {
color: #ca7601; color: #e5c07b;
} }
.highlight .nn { .highlight .nn {
color: #383942; color: #abb2bf;
} }
.highlight .nx { .highlight .nx {
color: #383942; color: #abb2bf;
} }
.highlight .py { .highlight .py {
color: #ca7601; color: #e5c07b;
} }
.highlight .nt { .highlight .nt {
color: #e35549; color: #77b181;
} }
.highlight .nv { .highlight .nv {
color: #ca7601; color: #e5c07b;
} }
.highlight .ow { .highlight .ow {
font-weight: 700; font-weight: 700;
} }
.highlight .w { .highlight .w {
color: #f8f8f2; color: #f8f8f2;
} }
.highlight .mf { .highlight .mf {
color: #b66a00; color: #d19a66;
} }
.highlight .mh { .highlight .mh {
color: #b66a00; color: #d19a66;
} }
.highlight .mi { .highlight .mi {
color: #b66a00; color: #d19a66;
} }
.highlight .mo { .highlight .mo {
color: #b66a00; color: #d19a66;
} }
.highlight .sb { .highlight .sb {
color: #50a04f; color: #c8ae9d;
} }
.highlight .sc { .highlight .sc {
color: #50a04f; color: #c8ae9d;
} }
.highlight .sd { .highlight .sd {
color: #50a04f; color: #c8ae9d;
} }
.highlight .s2 { .highlight .s2 {
color: #50a04f; color: #c8ae9d;
} }
.highlight .se { .highlight .se {
color: #50a04f; color: #c8ae9d;
} }
.highlight .sh { .highlight .sh {
color: #50a04f; color: #c8ae9d;
} }
.highlight .si { .highlight .si {
color: #50a04f; color: #c8ae9d;
} }
.highlight .sx { .highlight .sx {
color: #50a04f; color: #c8ae9d;
} }
.highlight .sr { .highlight .sr {
color: #0083bb; color: #56b6c2;
} }
.highlight .s1 { .highlight .s1 {
color: #50a04f; color: #c8ae9d;
} }
.highlight .ss { .highlight .ss {
color: #0083bb; color: #56b6c2;
} }
.highlight .bp { .highlight .bp {
color: #ca7601; color: #e5c07b;
} }
.highlight .vc { .highlight .vc {
color: #ca7601; color: #e5c07b;
} }
.highlight .vg { .highlight .vg {
color: #ca7601; color: #e5c07b;
} }
.highlight .vi { .highlight .vi {
color: #e35549; color: #77b181;
} }
.highlight .il { .highlight .il {
color: #b66a00; color: #d19a66;
} }
.highlight .gu { .highlight .gu {
color: #75715e; color: #75715e;
} }
.highlight .gd { .highlight .gd {
color: #e05151; color: #f92672;
} }
.highlight .gi { .highlight .gi {
color: #43d089; color: #a6e22e;
}
.highlight .language-json .w + .s2 {
color: #e35549;
}
.highlight .language-json .kc {
color: #0083bb;
} }

View File

@ -0,0 +1,200 @@
.highlight,
pre.highlight {
background: #282c34;
color: #abb2bf;
}
.highlight pre {
background: #282c34;
}
.highlight .hll {
background: #282c34;
}
.highlight .c {
color: #5c6370;
font-style: italic;
}
.highlight .err {
color: #960050;
background-color: #1e0010;
}
.highlight .k {
color: #dd672c;
}
.highlight .l {
color: #c8ae9d;
}
.highlight .n {
color: #abb2bf;
}
.highlight .o {
color: #abb2bf;
}
.highlight .p {
color: #abb2bf;
}
.highlight .cm {
color: #5c6370;
font-style: italic;
}
.highlight .cp {
color: #5c6370;
font-style: italic;
}
.highlight .c1 {
color: #5c6370;
font-style: italic;
}
.highlight .cs {
color: #5c6370;
font-style: italic;
}
.highlight .ge {
font-style: italic;
}
.highlight .gs {
font-weight: 700;
}
.highlight .kc {
color: #dd672c;
}
.highlight .kd {
color: #dd672c;
}
.highlight .kn {
color: #dd672c;
}
.highlight .kp {
color: #dd672c;
}
.highlight .kr {
color: #dd672c;
}
.highlight .kt {
color: #dd672c;
}
.highlight .ld {
color: #c8ae9d;
}
.highlight .m {
color: #d19a66;
}
.highlight .s {
color: #c8ae9d;
}
.highlight .na {
color: #d19a66;
}
.highlight .nb {
color: #e5c07b;
}
.highlight .nc {
color: #e5c07b;
}
.highlight .no {
color: #e5c07b;
}
.highlight .nd {
color: #e5c07b;
}
.highlight .ni {
color: #e5c07b;
}
.highlight .ne {
color: #e5c07b;
}
.highlight .nf {
color: #abb2bf;
}
.highlight .nl {
color: #e5c07b;
}
.highlight .nn {
color: #abb2bf;
}
.highlight .nx {
color: #abb2bf;
}
.highlight .py {
color: #e5c07b;
}
.highlight .nt {
color: #e06c75;
}
.highlight .nv {
color: #e5c07b;
}
.highlight .ow {
font-weight: 700;
}
.highlight .w {
color: #f8f8f2;
}
.highlight .mf {
color: #d19a66;
}
.highlight .mh {
color: #d19a66;
}
.highlight .mi {
color: #d19a66;
}
.highlight .mo {
color: #d19a66;
}
.highlight .sb {
color: #c8ae9d;
}
.highlight .sc {
color: #c8ae9d;
}
.highlight .sd {
color: #c8ae9d;
}
.highlight .s2 {
color: #c8ae9d;
}
.highlight .se {
color: #c8ae9d;
}
.highlight .sh {
color: #c8ae9d;
}
.highlight .si {
color: #c8ae9d;
}
.highlight .sx {
color: #c8ae9d;
}
.highlight .sr {
color: #56b6c2;
}
.highlight .s1 {
color: #c8ae9d;
}
.highlight .ss {
color: #56b6c2;
}
.highlight .bp {
color: #e5c07b;
}
.highlight .vc {
color: #e5c07b;
}
.highlight .vg {
color: #e5c07b;
}
.highlight .vi {
color: #e06c75;
}
.highlight .il {
color: #d19a66;
}
.highlight .gu {
color: #75715e;
}
.highlight .gd {
color: #f92672;
}
.highlight .gi {
color: #a6e22e;
}

View File

@ -1,265 +1,200 @@
// Generated with OneDarkJekyll applied to Atom's One Dark Vivid theme
.highlight, .highlight,
pre.highlight { pre.highlight {
background: #31343f; background: #31343f;
color: #dee2f7; color: #dee2f7;
} }
.highlight pre { .highlight pre {
background: #31343f; background: #31343f;
} }
.highlight .hll { .highlight .hll {
background: #31343f; background: #31343f;
} }
.highlight .c { .highlight .c {
color: #63677e; color: #63677e;
font-style: italic; font-style: italic;
} }
.highlight .err { .highlight .err {
color: #960050; color: #960050;
background-color: #1e0010; background-color: #1e0010;
} }
.highlight .k { .highlight .k {
color: #e19ef5; color: #e19ef5;
} }
.highlight .l { .highlight .l {
color: #a3eea0; color: #a3eea0;
} }
.highlight .n { .highlight .n {
color: #dee2f7; color: #dee2f7;
} }
.highlight .o { .highlight .o {
color: #dee2f7; color: #dee2f7;
} }
.highlight .p { .highlight .p {
color: #dee2f7; color: #dee2f7;
} }
.highlight .cm { .highlight .cm {
color: #63677e; color: #63677e;
font-style: italic; font-style: italic;
} }
.highlight .cp { .highlight .cp {
color: #63677e; color: #63677e;
font-style: italic; font-style: italic;
} }
.highlight .c1 { .highlight .c1 {
color: #63677e; color: #63677e;
font-style: italic; font-style: italic;
} }
.highlight .cs { .highlight .cs {
color: #63677e; color: #63677e;
font-style: italic; font-style: italic;
} }
.highlight .ge { .highlight .ge {
font-style: italic; font-style: italic;
} }
.highlight .gs { .highlight .gs {
font-weight: 700; font-weight: 700;
} }
.highlight .kc { .highlight .kc {
color: #e19ef5; color: #e19ef5;
} }
.highlight .kd { .highlight .kd {
color: #e19ef5; color: #e19ef5;
} }
.highlight .kn { .highlight .kn {
color: #e19ef5; color: #e19ef5;
} }
.highlight .kp { .highlight .kp {
color: #e19ef5; color: #e19ef5;
} }
.highlight .kr { .highlight .kr {
color: #e19ef5; color: #e19ef5;
} }
.highlight .kt { .highlight .kt {
color: #e19ef5; color: #e19ef5;
} }
.highlight .ld { .highlight .ld {
color: #a3eea0; color: #a3eea0;
} }
.highlight .m { .highlight .m {
color: #eddc96; color: #eddc96;
} }
.highlight .s { .highlight .s {
color: #a3eea0; color: #a3eea0;
} }
.highlight .na { .highlight .na {
color: #eddc96; color: #eddc96;
} }
.highlight .nb { .highlight .nb {
color: #fdce68; color: #fdce68;
} }
.highlight .nc { .highlight .nc {
color: #fdce68; color: #fdce68;
} }
.highlight .no { .highlight .no {
color: #fdce68; color: #fdce68;
} }
.highlight .nd { .highlight .nd {
color: #fdce68; color: #fdce68;
} }
.highlight .ni { .highlight .ni {
color: #fdce68; color: #fdce68;
} }
.highlight .ne { .highlight .ne {
color: #fdce68; color: #fdce68;
} }
.highlight .nf { .highlight .nf {
color: #dee2f7; color: #dee2f7;
} }
.highlight .nl { .highlight .nl {
color: #fdce68; color: #fdce68;
} }
.highlight .nn { .highlight .nn {
color: #dee2f7; color: #dee2f7;
} }
.highlight .nx { .highlight .nx {
color: #dee2f7; color: #dee2f7;
} }
.highlight .py { .highlight .py {
color: #fdce68; color: #fdce68;
} }
.highlight .nt { .highlight .nt {
color: #f9867b; color: #f9867b;
} }
.highlight .nv { .highlight .nv {
color: #fdce68; color: #fdce68;
} }
.highlight .ow { .highlight .ow {
font-weight: 700; font-weight: 700;
} }
.highlight .w { .highlight .w {
color: #f8f8f2; color: #f8f8f2;
} }
.highlight .mf { .highlight .mf {
color: #eddc96; color: #eddc96;
} }
.highlight .mh { .highlight .mh {
color: #eddc96; color: #eddc96;
} }
.highlight .mi { .highlight .mi {
color: #eddc96; color: #eddc96;
} }
.highlight .mo { .highlight .mo {
color: #eddc96; color: #eddc96;
} }
.highlight .sb { .highlight .sb {
color: #a3eea0; color: #a3eea0;
} }
.highlight .sc { .highlight .sc {
color: #a3eea0; color: #a3eea0;
} }
.highlight .sd { .highlight .sd {
color: #a3eea0; color: #a3eea0;
} }
.highlight .s2 { .highlight .s2 {
color: #a3eea0; color: #a3eea0;
} }
.highlight .se { .highlight .se {
color: #a3eea0; color: #a3eea0;
} }
.highlight .sh { .highlight .sh {
color: #a3eea0; color: #a3eea0;
} }
.highlight .si { .highlight .si {
color: #a3eea0; color: #a3eea0;
} }
.highlight .sx { .highlight .sx {
color: #a3eea0; color: #a3eea0;
} }
.highlight .sr { .highlight .sr {
color: #7be2f9; color: #7be2f9;
} }
.highlight .s1 { .highlight .s1 {
color: #a3eea0; color: #a3eea0;
} }
.highlight .ss { .highlight .ss {
color: #7be2f9; color: #7be2f9;
} }
.highlight .bp { .highlight .bp {
color: #fdce68; color: #fdce68;
} }
.highlight .vc { .highlight .vc {
color: #fdce68; color: #fdce68;
} }
.highlight .vg { .highlight .vg {
color: #fdce68; color: #fdce68;
} }
.highlight .vi { .highlight .vi {
color: #f9867b; color: #f9867b;
} }
.highlight .il { .highlight .il {
color: #eddc96; color: #eddc96;
} }
.highlight .gu { .highlight .gu {
color: #75715e; color: #75715e;
} }
.highlight .gd { .highlight .gd {
color: #f92672; color: #f92672;
} }
.highlight .gi { .highlight .gi {
color: #a6e22e; color: #a6e22e;
} }

View File

@ -0,0 +1,200 @@
.highlight,
pre.highlight {
background: #282c34;
color: #abb2bf;
}
.highlight pre {
background: #282c34;
}
.highlight .hll {
background: #282c34;
}
.highlight .c {
color: #5c6370;
font-style: italic;
}
.highlight .err {
color: #960050;
background-color: #1e0010;
}
.highlight .k {
color: #c678dd;
}
.highlight .l {
color: #98c379;
}
.highlight .n {
color: #abb2bf;
}
.highlight .o {
color: #abb2bf;
}
.highlight .p {
color: #abb2bf;
}
.highlight .cm {
color: #5c6370;
font-style: italic;
}
.highlight .cp {
color: #5c6370;
font-style: italic;
}
.highlight .c1 {
color: #5c6370;
font-style: italic;
}
.highlight .cs {
color: #5c6370;
font-style: italic;
}
.highlight .ge {
font-style: italic;
}
.highlight .gs {
font-weight: 700;
}
.highlight .kc {
color: #c678dd;
}
.highlight .kd {
color: #c678dd;
}
.highlight .kn {
color: #c678dd;
}
.highlight .kp {
color: #c678dd;
}
.highlight .kr {
color: #c678dd;
}
.highlight .kt {
color: #c678dd;
}
.highlight .ld {
color: #98c379;
}
.highlight .m {
color: #d19a66;
}
.highlight .s {
color: #98c379;
}
.highlight .na {
color: #d19a66;
}
.highlight .nb {
color: #e5c07b;
}
.highlight .nc {
color: #e5c07b;
}
.highlight .no {
color: #e5c07b;
}
.highlight .nd {
color: #e5c07b;
}
.highlight .ni {
color: #e5c07b;
}
.highlight .ne {
color: #e5c07b;
}
.highlight .nf {
color: #abb2bf;
}
.highlight .nl {
color: #e5c07b;
}
.highlight .nn {
color: #abb2bf;
}
.highlight .nx {
color: #abb2bf;
}
.highlight .py {
color: #e5c07b;
}
.highlight .nt {
color: #e06c75;
}
.highlight .nv {
color: #e5c07b;
}
.highlight .ow {
font-weight: 700;
}
.highlight .w {
color: #f8f8f2;
}
.highlight .mf {
color: #d19a66;
}
.highlight .mh {
color: #d19a66;
}
.highlight .mi {
color: #d19a66;
}
.highlight .mo {
color: #d19a66;
}
.highlight .sb {
color: #98c379;
}
.highlight .sc {
color: #98c379;
}
.highlight .sd {
color: #98c379;
}
.highlight .s2 {
color: #98c379;
}
.highlight .se {
color: #98c379;
}
.highlight .sh {
color: #98c379;
}
.highlight .si {
color: #98c379;
}
.highlight .sx {
color: #98c379;
}
.highlight .sr {
color: #56b6c2;
}
.highlight .s1 {
color: #98c379;
}
.highlight .ss {
color: #56b6c2;
}
.highlight .bp {
color: #e5c07b;
}
.highlight .vc {
color: #e5c07b;
}
.highlight .vg {
color: #e5c07b;
}
.highlight .vi {
color: #e06c75;
}
.highlight .il {
color: #d19a66;
}
.highlight .gu {
color: #75715e;
}
.highlight .gd {
color: #f92672;
}
.highlight .gi {
color: #a6e22e;
}

View File

@ -0,0 +1,56 @@
@import "colors.less";
// Official Syntax Variables -----------------------------------
// General colors
@syntax-text-color: @syntax-fg;
@syntax-cursor-color: @syntax-accent;
@syntax-selection-color: lighten(@syntax-background-color, 10%);
@syntax-selection-flash-color: @syntax-accent;
@syntax-background-color: @syntax-bg;
// Guide colors
@syntax-wrap-guide-color: @syntax-guide;
@syntax-indent-guide-color: @syntax-guide;
@syntax-invisible-character-color: @syntax-guide;
// For find and replace markers
@syntax-result-marker-color: fade(@syntax-accent, 24%);
@syntax-result-marker-color-selected: @syntax-accent;
// Gutter colors
@syntax-gutter-text-color: @syntax-gutter;
@syntax-gutter-text-color-selected: @syntax-fg;
@syntax-gutter-background-color: @syntax-bg; // unused
@syntax-gutter-background-color-selected: lighten(@syntax-bg, 2%);
// Git colors - For git diff info. i.e. in the gutter
@syntax-color-renamed: hsl(208, 100%, 60%);
@syntax-color-added: hsl(150, 60%, 54%);
@syntax-color-modified: hsl(40, 60%, 70%);
@syntax-color-removed: hsl(0, 70%, 60%);
// For language entity colors
@syntax-color-variable: @hue-5;
@syntax-color-constant: @hue-6;
@syntax-color-property: @syntax-fg;
@syntax-color-value: @syntax-fg;
@syntax-color-function: @hue-2;
@syntax-color-method: @hue-2;
@syntax-color-class: @hue-6-2;
@syntax-color-keyword: @hue-3;
@syntax-color-tag: @hue-5;
@syntax-color-attribute: @hue-6;
@syntax-color-import: @hue-3;
@syntax-color-snippet: @hue-4;
// Custom Syntax Variables -----------------------------------
// Don't use in packages
@syntax-cursor-line: hsla(@syntax-hue, 100%, 80%, .04); // needs to be semi-transparent to show search results
@syntax-deprecated-fg: darken(@syntax-color-modified, 50%);
@syntax-deprecated-bg: @syntax-color-modified;
@syntax-illegal-fg: white;
@syntax-illegal-bg: @syntax-color-removed;

93
_sass/vendor/OneDarkJekyll/syntax.less vendored Normal file
View File

@ -0,0 +1,93 @@
/*
LESS for Pygments
*/
@import "syntax-variables.less";
pre.highlight,
.highlight {
background: @syntax-bg;
color: @mono-1;
}
.highlight {
pre { background: @syntax-bg; }
.hll { background: @syntax-bg; }
.c { color: @mono-3; font-style: italic; } /* Comment */
.err { color: @syntax-illegal-fg; background-color: @syntax-illegal-bg; } /* Error */
.k { color: @hue-3; } /* Keyword */
.l { color: @hue-4; } /* Literal */
.n { color: @mono-1; } /* Name */
.o { color: @mono-1; } /* Operator */
.p { color: @mono-1; } /* Punctuation */
.cm { color: @mono-3; font-style: italic; } /* Comment.Multiline */
.cp { color: @mono-3; font-style: italic; } /* Comment.Preproc */
.c1 { color: @mono-3; font-style: italic; } /* Comment.Single */
.cs { color: @mono-3; font-style: italic; } /* Comment.Special */
.ge { font-style: italic } /* Generic.Emph */
.gs { font-weight: bold } /* Generic.Strong */
.kc { color: @hue-3; } /* Keyword.Constant */
.kd { color: @hue-3; } /* Keyword.Declaration */
.kn { color: @hue-3; } /* Keyword.Namespace */
.kp { color: @hue-3; } /* Keyword.Pseudo */
.kr { color: @hue-3; } /* Keyword.Reserved */
.kt { color: @hue-3; } /* Keyword.Type */
.ld { color: @hue-4; } /* Literal.Date */
.m { color: @hue-6; } /* Literal.Number */
.s { color: @hue-4; } /* Literal.String */
.na { color: @hue-6; } /* Name.Attribute */
.nb { color: @hue-6-2; } /* Name.Builtin */
.nc { color: @hue-6-2; } /* Name.Class */
.no { color: @hue-6-2; } /* Name.Constant */
.nd { color: @hue-6-2; } /* Name.Decorator */
.ni { color: @hue-6-2; } /* Name.Entity */
.ne { color: @hue-6-2; } /* Name.Exception */
.nf { color: @mono-1; } /* Name.Function */
.nl { color: @hue-6-2; } /* Name.Label */
.nn { color: @mono-1; } /* Name.Namespace */
.nx { color: @mono-1; } /* Name.Other */
.py { color: @hue-6-2; } /* Name.Property */
.nt { color: @hue-5; } /* Name.Tag */
.nv { color: @hue-6-2; } /* Name.Variable */
.ow { font-weight: bold; } /* Operator.Word */
.w { color: #f8f8f2 } /* Text.Whitespace */
.mf { color: @hue-6; } /* Literal.Number.Float */
.mh { color: @hue-6; } /* Literal.Number.Hex */
.mi { color: @hue-6; } /* Literal.Number.Integer */
.mo { color: @hue-6; } /* Literal.Number.Oct */
.sb { color: @hue-4; } /* Literal.String.Backtick */
.sc { color: @hue-4; } /* Literal.String.Char */
.sd { color: @hue-4; } /* Literal.String.Doc */
.s2 { color: @hue-4; } /* Literal.String.Double */
.se { color: @hue-4; } /* Literal.String.Escape */
.sh { color: @hue-4; } /* Literal.String.Heredoc */
.si { color: @hue-4; } /* Literal.String.Interpol */
.sx { color: @hue-4; } /* Literal.String.Other */
.sr { color: @hue-1; } /* Literal.String.Regex */
.s1 { color: @hue-4; } /* Literal.String.Single */
.ss { color: @hue-1; } /* Literal.String.Symbol */
.bp { color: @hue-6-2; } /* Name.Builtin.Pseudo */
.vc { color: @hue-6-2; } /* Name.Variable.Class */
.vg { color: @hue-6-2; } /* Name.Variable.Global */
.vi { color: @hue-5; } /* Name.Variable.Instance */
.il { color: @hue-6; } /* Literal.Number.Integer.Long */
.gh { } /* Generic Heading & Diff Header */
.gu { color: #75715e; } /* Generic.Subheading & Diff Unified/Comment? */
.gd { color: @syntax-color-removed; } /* Generic.Deleted & Diff Deleted */
.gi { color: @syntax-color-added; } /* Generic.Inserted & Diff Inserted */
::selection { background-color: @syntax-selection-color; }
.language-json {
.w + .s2 { color: @hue-5; }
.kc { color: @hue-1; }
}
.language-python {
// python related modifications
}
.language-csharp {
// csharp related modifications
}
}

View File

@ -1,65 +0,0 @@
OneLightJekyll relies on two works: OneDarkJekyll, and Atom's One Light theme. This file contains the licensing for all the related software.
---
OneLightJekyll (https://github.com/just-the-docs/OneLightJekyll/blob/main/LICENSE)
MIT License
Copyright (c) 2023 Matthew Wang
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.
---
OneDarkJekyll (https://github.com/mgyongyosi/OneDarkJekyll/blob/master/LICENSE)
MIT License
Copyright (c) 2016 Mihály Gyöngyösi
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.
---
Atom One Light (https://github.com/atom/atom/blob/master/LICENSE.md)
Copyright (c) 2011-2022 GitHub Inc.
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.

View File

@ -10,7 +10,7 @@
html { html {
line-height: 1.15; /* 1 */ line-height: 1.15; /* 1 */
text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */
} }
/* Sections /* Sections
@ -62,7 +62,7 @@ hr {
*/ */
pre { pre {
font-family: monospace; /* 1 */ font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */ font-size: 1em; /* 2 */
} }
@ -105,7 +105,7 @@ strong {
code, code,
kbd, kbd,
samp { samp {
font-family: monospace; /* 1 */ font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */ font-size: 1em; /* 2 */
} }
@ -198,7 +198,7 @@ button,
[type="button"], [type="button"],
[type="reset"], [type="reset"],
[type="submit"] { [type="submit"] {
appearance: button; -webkit-appearance: button;
} }
/** /**
@ -290,7 +290,7 @@ textarea {
*/ */
[type="search"] { [type="search"] {
appearance: textfield; /* 1 */ -webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */ outline-offset: -2px; /* 2 */
} }
@ -299,7 +299,7 @@ textarea {
*/ */
[type="search"]::-webkit-search-decoration { [type="search"]::-webkit-search-decoration {
appearance: none; -webkit-appearance: none;
} }
/** /**
@ -308,7 +308,7 @@ textarea {
*/ */
::-webkit-file-upload-button { ::-webkit-file-upload-button {
appearance: button; /* 1 */ -webkit-appearance: button; /* 1 */
font: inherit; /* 2 */ font: inherit; /* 2 */
} }

View File

@ -1,24 +0,0 @@
---
---
{%- if site.color_scheme and site.color_scheme != "nil" -%}
{%- assign color_scheme = site.color_scheme -%}
{%- else -%}
{%- assign color_scheme = "light" -%}
{%- endif -%}
{%- capture newline %}
{% endcapture -%}
{%- capture scss -%}
{% include css/just-the-docs.scss.liquid color_scheme=color_scheme %}
.site-nav ul li a {
background-image: linear-gradient(
-90deg,
rgba($feedback-color, 1) 0%,
rgba($feedback-color, 0.8) 80%,
rgba($feedback-color, 0) 100%
);
}
{%- endcapture -%}
{{ scss | scssify | split: newline | slice: -3, 3 | join: newline }}

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

1
assets/images/search.svg Normal file
View File

@ -0,0 +1 @@
<svg width="28" height="28" viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg"><title>Search</title><g fill-rule="nonzero" fill="#959396"><path d="M17.332 20.735c-5.537 0-10-4.6-10-10.247 0-5.646 4.463-10.247 10-10.247 5.536 0 10 4.601 10 10.247s-4.464 10.247-10 10.247zm0-4c3.3 0 6-2.783 6-6.247 0-3.463-2.7-6.247-6-6.247s-6 2.784-6 6.247c0 3.464 2.7 6.247 6 6.247z"/><path d="M11.672 13.791L.192 25.271 3.02 28.1 14.5 16.62z"/></g></svg>

After

Width:  |  Height:  |  Size: 444 B

View File

@ -1,5 +1,4 @@
--- ---
layout: null
--- ---
(function (jtd, undefined) { (function (jtd, undefined) {
@ -32,7 +31,7 @@ function initNav() {
} }
if (target) { if (target) {
e.preventDefault(); e.preventDefault();
target.ariaPressed = target.parentNode.classList.toggle('active'); target.parentNode.classList.toggle('active');
} }
}); });
@ -40,19 +39,15 @@ function initNav() {
const mainHeader = document.getElementById('main-header'); const mainHeader = document.getElementById('main-header');
const menuButton = document.getElementById('menu-button'); const menuButton = document.getElementById('menu-button');
disableHeadStyleSheets();
jtd.addEvent(menuButton, 'click', function(e){ jtd.addEvent(menuButton, 'click', function(e){
e.preventDefault(); e.preventDefault();
if (menuButton.classList.toggle('nav-open')) { if (menuButton.classList.toggle('nav-open')) {
siteNav.classList.add('nav-open'); siteNav.classList.add('nav-open');
mainHeader.classList.add('nav-open'); mainHeader.classList.add('nav-open');
menuButton.ariaPressed = true;
} else { } else {
siteNav.classList.remove('nav-open'); siteNav.classList.remove('nav-open');
mainHeader.classList.remove('nav-open'); mainHeader.classList.remove('nav-open');
menuButton.ariaPressed = false;
} }
}); });
@ -69,26 +64,6 @@ function initNav() {
{%- endif %} {%- endif %}
} }
// The <head> element is assumed to include the following stylesheets:
// - a <link> to /assets/css/just-the-docs-head-nav.css,
// with id 'jtd-head-nav-stylesheet'
// - a <style> containing the result of _includes/css/activation.scss.liquid.
// To avoid relying on the order of stylesheets (which can change with HTML
// compression, user-added JavaScript, and other side effects), stylesheets
// are only interacted with via ID
function disableHeadStyleSheets() {
const headNav = document.getElementById('jtd-head-nav-stylesheet');
if (headNav) {
headNav.disabled = true;
}
const activation = document.getElementById('jtd-nav-activation');
if (activation) {
activation.disabled = true;
}
}
{%- if site.search_enabled != false %} {%- if site.search_enabled != false %}
// Site search // Site search
@ -146,18 +121,6 @@ function searchLoaded(index, docs) {
var currentInput; var currentInput;
var currentSearchIndex = 0; var currentSearchIndex = 0;
{%- if site.search.focus_shortcut_key %}
// add event listener on ctrl + <focus_shortcut_key> for showing the search input
jtd.addEvent(document, 'keydown', function (e) {
if ((e.ctrlKey || e.metaKey) && e.key === '{{ site.search.focus_shortcut_key }}') {
e.preventDefault();
mainHeader.classList.add('nav-open');
searchInput.focus();
}
});
{%- endif %}
function showSearch() { function showSearch() {
document.documentElement.classList.add('search-active'); document.documentElement.classList.add('search-active');
} }
@ -496,74 +459,26 @@ jtd.setTheme = function(theme) {
cssFile.setAttribute('href', '{{ "assets/css/just-the-docs-" | relative_url }}' + theme + '.css'); cssFile.setAttribute('href', '{{ "assets/css/just-the-docs-" | relative_url }}' + theme + '.css');
} }
// Note: pathname can have a trailing slash on a local jekyll server
// and not have the slash on GitHub Pages
function navLink() {
var pathname = document.location.pathname;
var navLink = document.getElementById('site-nav').querySelector('a[href="' + pathname + '"]');
if (navLink) {
return navLink;
}
// The `permalink` setting may produce navigation links whose `href` ends with `/` or `.html`.
// To find these links when `/` is omitted from or added to pathname, or `.html` is omitted:
if (pathname.endsWith('/') && pathname != '/') {
pathname = pathname.slice(0, -1);
}
if (pathname != '/') {
navLink = document.getElementById('site-nav').querySelector('a[href="' + pathname + '"], a[href="' + pathname + '/"], a[href="' + pathname + '.html"]');
if (navLink) {
return navLink;
}
}
return null; // avoids `undefined`
}
// Scroll site-nav to ensure the link to the current page is visible // Scroll site-nav to ensure the link to the current page is visible
function scrollNav() { function scrollNav() {
const targetLink = navLink(); const href = document.location.pathname;
if (targetLink) { const siteNav = document.getElementById('site-nav');
targetLink.scrollIntoView({ block: "center" }); const targetLink = siteNav.querySelector('a[href="' + href + '"], a[href="' + href + '/"]');
targetLink.removeAttribute('href'); if(targetLink){
} const rect = targetLink.getBoundingClientRect();
} siteNav.scrollBy(0, rect.top - 3*rect.height);
// Find the nav-list-link that refers to the current page
// then make it and all enclosing nav-list-item elements active.
function activateNav() {
var target = navLink();
if (target) {
target.classList.toggle('active', true);
}
while (target) {
while (target && !(target.classList && target.classList.contains('nav-list-item'))) {
target = target.parentNode;
}
if (target) {
target.classList.toggle('active', true);
target = target.parentNode;
}
} }
} }
// Document ready // Document ready
jtd.onReady(function(){ jtd.onReady(function(){
if (document.getElementById('site-nav')) {
initNav(); initNav();
activateNav();
scrollNav();
}
{%- if site.search_enabled != false %} {%- if site.search_enabled != false %}
initSearch(); initSearch();
{%- endif %} {%- endif %}
scrollNav();
}); });
// Copy button on code // Copy button on code
@ -573,12 +488,7 @@ jtd.onReady(function(){
jtd.onReady(function(){ jtd.onReady(function(){
if (!window.isSecureContext) { var codeBlocks = document.querySelectorAll('div.highlighter-rouge, div.listingblock, figure.highlight');
console.log('Window does not have a secure context, therefore code clipboard copy functionality will not be available. For more details see https://web.dev/async-clipboard/#security-and-permissions');
return;
}
var codeBlocks = document.querySelectorAll('div.highlighter-rouge, div.listingblock > div.content, figure.highlight');
// note: the SVG svg-copied and svg-copy is only loaded as a Jekyll include if site.enable_copy_code_button is true; see _includes/icons/icons.html // note: the SVG svg-copied and svg-copy is only loaded as a Jekyll include if site.enable_copy_code_button is true; see _includes/icons/icons.html
var svgCopied = '<svg viewBox="0 0 24 24" class="copy-icon"><use xlink:href="#svg-copied"></use></svg>'; var svgCopied = '<svg viewBox="0 0 24 24" class="copy-icon"><use xlink:href="#svg-copied"></use></svg>';

View File

@ -1,5 +1,4 @@
--- ---
layout: null
permalink: /assets/js/search-data.json permalink: /assets/js/search-data.json
--- ---
{ {

14
docker-compose.yml Normal file
View File

@ -0,0 +1,14 @@
version: "3.5"
services:
jekyll:
build:
context: ./
ports:
- 4000:4000
volumes:
- .:/usr/src/app
stdin_open: true
tty: true
command: bundle exec jekyll serve -H 0.0.0.0 -t

View File

@ -1,4 +1,5 @@
--- ---
layout: default
title: Configuration title: Configuration
nav_order: 2 nav_order: 2
--- ---
@ -65,8 +66,6 @@ search:
# Enable or disable the search button that appears in the bottom right corner of every page # Enable or disable the search button that appears in the bottom right corner of every page
# Supports true or false (default) # Supports true or false (default)
button: false button: false
# Focus the search input by pressing `ctrl + focus_shortcut_key` (or `cmd + focus_shortcut_key` on macOS)
focus_shortcut_key: 'k'
``` ```
## Mermaid Diagrams ## Mermaid Diagrams
@ -86,7 +85,7 @@ mermaid:
Provide a `path` instead of a `version` key to load the mermaid library from a local file. Provide a `path` instead of a `version` key to load the mermaid library from a local file.
See [the Code documentation]({% link docs/ui-components/code/index.md %}#mermaid-diagram-code-blocks) for more configuration options and information. See [the Code documentation]({% link docs/ui-components/code.md %}#mermaid-diagram-code-blocks) for more configuration options and information.
## Aux links ## Aux links
@ -100,14 +99,6 @@ aux_links:
aux_links_new_tab: false aux_links_new_tab: false
``` ```
## Navigation sidebar
```yaml
# Enable or disable the side/mobile menu globally
# Nav menu can also be selectively enabled or disabled using page variables or the minimal layout
nav_enabled: true
```
## Heading anchor links ## Heading anchor links
```yaml ```yaml
@ -125,7 +116,7 @@ New (v0.4.0)
{: .label .label-green } {: .label .label-green }
External links can be added to the navigation through the `nav_external_links` option. External links can be added to the navigation through the `nav_external_links` option.
See [Navigation Structure]({% link docs/navigation/main/external.md %}) for more details. See [Navigation Structure]({% link docs/navigation-structure.md %}#external-navigation-links) for more details.
## Footer content ## Footer content
@ -152,7 +143,7 @@ gh_edit_view_mode: "tree" # "tree" or "edit" if you want the user to jump into t
_note: `footer_content` is deprecated, but still supported. For a better experience we have moved this into an include called `_includes/footer_custom.html` which will allow for robust markup / liquid-based content._ _note: `footer_content` is deprecated, but still supported. For a better experience we have moved this into an include called `_includes/footer_custom.html` which will allow for robust markup / liquid-based content._
- the "page last modified" data will only display if a page has a key called `last_modified_date`, formatted in some readable date format - the "page last modified" data will only display if a page has a key called `last_modified_date`, formatted in some readable date format
- `last_edit_time_format` uses Ruby's DateTime formatter; for examples and information, please refer to the [official Ruby docs on `strftime` formatting](https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html) - `last_edit_time_format` uses Ruby's DateTime formatter; see examples and more information [at this link.](https://apidock.com/ruby/DateTime/strftime)
- `gh_edit_repository` is the URL of the project's GitHub repository - `gh_edit_repository` is the URL of the project's GitHub repository
- `gh_edit_branch` is the branch that the docs site is served from; defaults to `main` - `gh_edit_branch` is the branch that the docs site is served from; defaults to `main`
- `gh_edit_source` is the source directory that your project files are stored in (should be the same as [site.source](https://jekyllrb.com/docs/configuration/options/)) - `gh_edit_source` is the source directory that your project files are stored in (should be the same as [site.source](https://jekyllrb.com/docs/configuration/options/))
@ -304,16 +295,6 @@ just_the_docs:
The navigation for all your normal pages (if any) is displayed before those in collections. The navigation for all your normal pages (if any) is displayed before those in collections.
<span>New (v0.4.0)</span>{: .label .label-green }
Including `nav_fold: true` in a collection configuration *folds* that collection:
an expander symbol appears next to the collection name,
and clicking it displays/hides the links to the top-level pages of the collection.[^js-disabled]
[^js-disabled]: <span>New (v0.6.0)</span>{: .label .label-green }
When JavaScript is disabled in the browser, all folded collections are automatically expanded,
since clicking expander symbols has no effect.
(In previous releases, navigation into folded collections required JavaScript to be enabled.)
You can reference multiple collections. You can reference multiple collections.
This creates categories in the navigation with the configured names. This creates categories in the navigation with the configured names.

View File

@ -1,4 +1,5 @@
--- ---
layout: default
title: Customization title: Customization
nav_order: 6 nav_order: 6
--- ---
@ -20,8 +21,8 @@ Just the Docs supports two color schemes: light (default), and dark.
To enable a color scheme, set the `color_scheme` parameter in your site's `_config.yml` file: To enable a color scheme, set the `color_scheme` parameter in your site's `_config.yml` file:
### Example: preview dark color scheme #### Example
{: .no_toc .text-delta } {: .no_toc }
```yaml ```yaml
# Color scheme supports "light" (default) and "dark" # Color scheme supports "light" (default) and "dark"
@ -44,15 +45,6 @@ jtd.addEvent(toggleDarkMode, 'click', function(){
}); });
</script> </script>
### deprecated: `legacy_light`
{: .d-inline-block .no_toc }
New (v0.4.2)
{: .label .label-green }
In Just the Docs version `0.4.2`, we changed the default syntax highlighting theme for the `light` color scheme to have higher contrast. Users who want to use the old highlighting need to explicitly opt-in with the deprecated `legacy_light` color scheme. In a future major release of Just the Docs, we will remove this color scheme.
## Custom schemes ## Custom schemes
### Define a custom scheme ### Define a custom scheme
@ -76,8 +68,8 @@ Available variables are listed in the [\_variables.scss](https://github.com/just
For example, to change the link color from the purple default to blue, include the following inside your scheme file: For example, to change the link color from the purple default to blue, include the following inside your scheme file:
#### Example: custom link color #### Example
{: .no_toc .text-delta } {: .no_toc }
```scss ```scss
$link-color: $blue-000; $link-color: $blue-000;
@ -121,7 +113,7 @@ jtd.setTheme("foo")
New (v0.4.0) New (v0.4.0)
{: .label .label-green } {: .label .label-green }
To define new SCSS variables or functions, place SCSS code in `_sass/custom/setup.scss`. This should *not* be used for defining custom styles (see the next section) or overriding color scheme variables (in this case, you should create a new color scheme). To define new SCSS variables, functions, or override existing theme variables, place SCSS code in `_sass/custom/setup.scss`. This should *not* be used for defining custom styles (see the next section).
This is most commonly-used to define [custom callout colors]({% link docs/configuration.md %}#callouts). For example, This is most commonly-used to define [custom callout colors]({% link docs/configuration.md %}#callouts). For example,
@ -142,11 +134,11 @@ Additionally, you may want to add completely custom CSS specific to your content
To do this, put your styles in the file `_sass/custom/custom.scss`. To do this, put your styles in the file `_sass/custom/custom.scss`.
This will allow for all overrides to be kept in a single file, and for any upstream changes to still be applied. This will allow for all overrides to be kept in a single file, and for any upstream changes to still be applied.
### Example: custom print styles
{: .no_toc .text-delta }
For example, if you'd like to add your own styles for printing a page, you could add the following styles. For example, if you'd like to add your own styles for printing a page, you could add the following styles.
#### Example
{: .no_toc }
```scss ```scss
// Print-only styles. // Print-only styles.
@media print { @media print {
@ -177,9 +169,9 @@ New (v0.4.0)
`_includes/toc_heading_custom.html` `_includes/toc_heading_custom.html`
If the page has any child pages, and `has_toc` is not set to `false`, this content appears as a heading above the [auto-generating list of child pages]({% link docs/navigation/children.md %}) after the page's content. If the page has any child pages, and `has_toc` is not set to `false`, this content appears as a heading above the [auto-generating list of child pages]({% link docs/navigation-structure.md %}#auto-generating-table-of-contents) after the page's content.
#### Example: changing TOC heading #### Example
{: .no_toc } {: .no_toc }
To change the default TOC heading to "Contents", create `_includes/toc_heading_custom.html` and add: To change the default TOC heading to "Contents", create `_includes/toc_heading_custom.html` and add:
@ -328,9 +320,43 @@ Future versions may subdivide components further; we guarantee that we will only
### Alternative layouts and example (`minimal`) ### Alternative layouts and example (`minimal`)
Users can develop custom layouts that compose, omit, or add components differently. We provide one first-class example titled `minimal`, which disables the navigation sidebar. To see an example, visit the [minimal layout test]({{site.baseurl}}/docs/minimal-test/) page. Users can develop custom layouts that compose, omit, or add components differently. We provide one first-class example titled `minimal`, inspired by Kevin Lin's work in [just-the-class](https://github.com/kevinlin1/just-the-class). This `minimal` layout does not render the sidebar, header, or search. To see an example, visit the [minimal layout test]({{site.baseurl}}/docs/minimal-test/) page.
Users can indicate this alternative layout in page front matter: Here is a simplified code example of what it looks like:
{% raw %}
```liquid
<!-- a simplified version of _layouts/minimal.html -->
<html>
{% include head.html %}
<body>
{% include icons/icons.html %}
{% comment %} Bandaid fix for breadcrumbs here! {% endcomment %}
{% include components/breadcrumbs.html %}
{% if site.heading_anchors != false %}
{% include vendor/anchor_headings.html html=content ... %}
{% else %}
{{ content }}
{% endif %}
{% if page.has_children == true and page.has_toc != false %}
{% include components/children_nav.html %}
{% endif %}
{% include components/footer.html %}
{% if site.mermaid %}
{% include components/mermaid.html %}
{% endif %}
</body>
</html>
```
{% endraw %}
This layout is packaged in Just the Docs. Users can indicate this alternative layout in page front matter:
{% raw %} {% raw %}
@ -349,10 +375,10 @@ Similarly, users and developers can create other alternative layouts using Just
Under the hood, Under the hood,
- `default` inherit from the `table_wrappers` layout, which wraps all HTML `<table>` tags with a `div .table-wrapper` - `default` and `minimal` inherit from the `table_wrappers` layout, which wraps all HTML `<table>` tags with a `div .table-wrapper`
- `table_wrappers` inherits from `vendor/compress`, which is a local copy of Anatol Broder's [jekyll-compress-html](https://github.com/penibelst/jekyll-compress-html) Jekyll plugin - `table_wrappers` inherits from `vendor/compress`, which is a local copy of Anatol Broder's [jekyll-compress-html](https://github.com/penibelst/jekyll-compress-html) Jekyll plugin
The `minimal` layout inherits from the `default` but assigns `nav_enabled: false` to disable the navigation sidebar. Note that as of now, `minimal` and `default` have no inheritance relationship.
### Overridden default Jekyll layouts ### Overridden default Jekyll layouts

View File

@ -1,4 +1,5 @@
--- ---
layout: default
title: Markdown kitchen sink title: Markdown kitchen sink
nav_order: 99 nav_order: 99
--- ---
@ -21,23 +22,23 @@ jtd.addEvent(toggleDarkMode, 'click', function(){
Text can be **bold**, _italic_, or ~~strikethrough~~. Text can be **bold**, _italic_, or ~~strikethrough~~.
[Link to another page]({{site.baseurl}}/). [Link to another page](another-page).
There should be whitespace between paragraphs. There should be whitespace between paragraphs.
There should be whitespace between paragraphs. We recommend including a README, or a file with information about your project. There should be whitespace between paragraphs. We recommend including a README, or a file with information about your project.
# Header 1 # [](#header-1)Header 1
This is a normal paragraph following a header. GitHub is a code hosting platform for version control and collaboration. It lets you and others work together on projects from anywhere. This is a normal paragraph following a header. GitHub is a code hosting platform for version control and collaboration. It lets you and others work together on projects from anywhere.
## Header 2 ## [](#header-2)Header 2
> This is a blockquote following a header. > This is a blockquote following a header.
> >
> When something is important enough, you do it even if the odds are not in your favor. > When something is important enough, you do it even if the odds are not in your favor.
### Header 3 ### [](#header-3)Header 3
```js ```js
// Javascript code with syntax highlighting. // Javascript code with syntax highlighting.
@ -54,19 +55,19 @@ GitHubPages::Dependencies.gems.each do |gem, version|
end end
``` ```
#### Header 4 `with code not transformed` #### [](#header-4)Header 4 `with code not transformed`
* This is an unordered list following a header. * This is an unordered list following a header.
* This is an unordered list following a header. * This is an unordered list following a header.
* This is an unordered list following a header. * This is an unordered list following a header.
##### Header 5 ##### [](#header-5)Header 5
1. This is an ordered list following a header. 1. This is an ordered list following a header.
2. This is an ordered list following a header. 2. This is an ordered list following a header.
3. This is an ordered list following a header. 3. This is an ordered list following a header.
###### Header 6 ###### [](#header-6)Header 6
[This is a very long link which wraps and therefore doesn't overflow [This is a very long link which wraps and therefore doesn't overflow
even when it comes at the beginning](.) of the line. even when it comes at the beginning](.) of the line.
@ -303,25 +304,13 @@ The following code is displayed as a diagram only when a `mermaid` key supplied
```mermaid ```mermaid
graph TD; graph TD;
accTitle: the diamond pattern
accDescr: a graph with four nodes: A points to B and C, while B and C both point to D
A-->B; A-->B;
A-->C; A-->C;
B-->D; B-->D;
C-->D; C-->D;
``` ```
### Collapsed Section
The following uses the [`<details>`](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/organizing-information-with-collapsed-sections) tag to create a collapsed section. ```
The final element.
<details markdown="block"> ```
<summary>Shopping list (click me!)</summary>
This is content inside a `<details>` dropdown.
- [ ] Apples
- [ ] Oranges
- [ ] Milk
</details>

View File

@ -1,52 +0,0 @@
---
title: Layout
layout: default
nav_order: 4.5
---
# Layout
You specify the layout for a page in its [front matter]. Just the Docs has a `default` layout with a sidebar, used for almost all pages in the theme docs, and a `minimal` layout that omits the sidebar.
{: .fs-6 .fw-300 }
## The layout concept
See the [Jekyll docs page about layouts] for an explanation of the general idea of layouts and how to specify them.
You can use [Jekyll's front matter defaults] to specify the same layout for many pages.
## The `default` layout
This page uses the default layout. This site configures `layout: default` as a [front matter default](https://jekyllrb.com/docs/configuration/front-matter-defaults/) value for all pages in the `docs` directory.
The default layout of Just the Docs is a *responsive* layout: on medium and larger width displays, it displays a sidebar, including a navigation panel; on smaller width displays, the sidebar is automatically hidden under a button.
All pages except top-level pages automatically have a list of so-called *breadcrumbs*: links to their parent pages and any higher-level ancestors. They show the breadcrumbs above the main content of the page.
Each page that has child pages generally has a list of links to those pages (you can suppress it by `has_toc: false` in the front matter). It shows the list as a *table of contents* below the main content.
## The `minimal` layout
A child and grandchild page of this page use the minimal layout. This differs from the default layout by omitting the sidebar---and thereby also the navigation panel. To navigate between pages with the minimal layout, you can use the breadcrumbs and the tables of contents.
## Selectively hiding or showing the sidebar
[Jekyll's front matter defaults] can be used to apply the `minimal` layout for many pages. But there are also other variables that can control the page layout. In `_config.yml`, you can set `nav_enabled: false` to disable the sidebar navigation panel across the entire site. This can then be selectively enabled on a page-by-page basis by assigning the `nav_enabled: true` page [front matter] variable. For instance, this could be used to enable sidebar navigation on a home page while all other pages have sidebar navigation disabled.
```yaml
---
layout: default
title: Home
nav_enabled: true
---
```
## Other layouts
Just the Docs has further layouts: `about`, `home`, `page`, and `post`. Currently, they are all based on the `default` layout. See the [Jekyll docs about inheritance] for how to customize them.
[front matter]: https://jekyllrb.com/docs/front-matter/ "Jekyll docs about front matter"
[Jekyll docs page about layouts]: https://jekyllrb.com/docs/layouts/ "Jekyll docs about layouts"
[Jekyll's front matter defaults]: https://jekyllrb.com/docs/configuration/front-matter-defaults/ "Jekyll docs about front matter defaults"
[Jekyll docs about inheritance]: https://jekyllrb.com/docs/layouts/#inheritance "Jekyll docs about inheritance"

View File

@ -1,10 +0,0 @@
---
title: Default layout child page
layout: default
parent: A minimal layout page
grand_parent: Layout
---
# Default layout child page
This is a child page that uses the `default` layout as compared to its parent page (which uses the `minimal` layout).

View File

@ -1,10 +0,0 @@
---
title: Minimal layout child page
layout: minimal
parent: A minimal layout page
grand_parent: Layout
---
# Minimal layout child page
This is a child page that uses the same minimal layout as its parent page.

View File

@ -1,11 +0,0 @@
---
title: A minimal layout page
layout: minimal
parent: Layout
---
# A minimal layout page
This page illustrates the built-in layout `minimal`.
One of its child pages also uses the minimal layout; the other child pages uses the default layout.

View File

@ -4,8 +4,6 @@ title: Minimal layout test
nav_exclude: true nav_exclude: true
--- ---
# Minimal Layout Test Page
[Return to main website]({{site.baseurl}}/). [Return to main website]({{site.baseurl}}/).
This page demonstrates the packaged `minimal` layout, which does not render the sidebar or header. It can be used for standalone pages. It is also an example of using the new modular site components to define custom layouts; see ["Custom layouts and includes" in the customization docs]({{site.baseurl}}/docs/customization/#custom-layouts-and-includes) for more information. This page demonstrates the packaged `minimal` layout, which does not render the sidebar or header. It can be used for standalone pages. It is also an example of using the new modular site components to define custom layouts; see ["Custom layouts and includes" in the customization docs]({{site.baseurl}}/docs/customization/#custom-layouts-and-includes) for more information.

View File

@ -0,0 +1,316 @@
---
layout: default
title: Navigation Structure
nav_order: 5
---
# Navigation Structure
{: .no_toc }
<details open markdown="block">
<summary>
Table of contents
</summary>
{: .text-delta }
- TOC
{:toc}
</details>
---
## Main navigation
The main navigation for your Just the Docs site is on the left side of the page at large screens and on the top (behind a tap) on small screens. The main navigation can be structured to accommodate a multi-level menu system (pages with children and grandchildren).
By default, all pages will appear as top level pages in the main nav unless a parent page is defined (see [Pages with Children](#pages-with-children)).
---
## Ordering pages
To specify a page order, you can use the `nav_order` parameter in your pages' YAML front matter.
#### Example
{: .no_toc }
```yaml
---
layout: default
title: Customization
nav_order: 4
---
```
The parameter values determine the order of the top-level pages, and of child pages with the same parent. You can reuse the same parameter values (e.g., integers starting from 1) for the child pages of different parents.
The parameter values can be numbers (integers, floats) and/or strings. Pages with numerical `nav_order` parameters always come before those with string `nav_order` parameters. When you omit `nav_order` parameters, they default to the titles of the pages. If you want to make the page order independent of the page titles, you can set explicit `nav_order` parameters on all pages. All pages with explicit `nav_order` parameters
come before all pages ordered by their `title` values.
By default, all Capital letters come before all lowercase letters; you can add `nav_sort: case_insensitive` in the configuration file to ignore the case. Enclosing strings in (single or double) quotation marks is optional. Numeric values are not enclosed in quotation marks, e.g., `42`, `-1.0`; numbers in quotation marks are lexicographically ordered, so `"10"` comes before `"2"`, for example.
---
## Excluding pages
For specific pages that you do not wish to include in the main navigation, e.g. a 404 page or a landing page, use the `nav_exclude: true` parameter in the YAML front matter for that page.
#### Example
{: .no_toc }
```yaml
---
layout: default
title: 404
nav_exclude: true
---
```
The `nav_exclude` parameter does not affect the [auto-generating list of child pages](#auto-generating-table-of-contents), which you can use to access pages excluded from the main navigation.
Pages with no `title` are automatically excluded from the main navigation.
---
## Pages with children
Sometimes you will want to create a page with many children (a section). First, it is recommended that you keep pages that are related in a directory together... For example, in these docs, we keep all of the written documentation in the `./docs` directory and each of the sections in subdirectories like `./docs/ui-components` and `./docs/utilities`. This gives us an organization like:
```
+-- ..
|-- (Jekyll files)
|
|-- docs
| |-- ui-components
| | |-- index.md (parent page)
| | |-- buttons.md
| | |-- code.md
| | |-- labels.md
| | |-- tables.md
| | +-- typography.md
| |
| |-- utilities
| | |-- index.md (parent page)
| | |-- color.md
| | |-- layout.md
| | |-- responsive-modifiers.md
| | +-- typography.md
| |
| |-- (other md files, pages with no children)
| +-- ..
|
|-- (Jekyll files)
+-- ..
```
On the parent pages, add this YAML front matter parameter:
- `has_children: true` (tells us that this is a parent page)
#### Example
{: .no_toc }
```yaml
---
layout: default
title: UI Components
nav_order: 2
has_children: true
---
```
Here we're setting up the UI Components landing page that is available at `/docs/ui-components`, which has children and is ordered second in the main nav.
### Child pages
{: .text-gamma }
On child pages, simply set the `parent:` YAML front matter to whatever the parent's page title is and set a nav order (this number is now scoped within the section).
#### Example
{: .no_toc }
```yaml
---
layout: default
title: Buttons
parent: UI Components
nav_order: 2
---
```
The Buttons page appears as a child of UI Components and appears second in the UI Components section.
### Ordering child pages
{: .d-inline-block }
New (v0.4.0)
{: .label .label-green }
You can optionally add the following to the YAML front matter to reverse the default sort order of child pages:
- `child_nav_order: reversed`
#### Example
{: .no_toc }
```yaml
---
layout: default
title: Reversed Child Pages
child_nav_order: reversed
---
```
### Auto-generating Table of Contents
By default, all pages with children will automatically append a Table of Contents which lists the child pages after the parent page's content. To disable this auto Table of Contents, set `has_toc: false` in the parent page's YAML front matter.
#### Example
{: .no_toc }
```yaml
---
layout: default
title: UI Components
nav_order: 2
has_children: true
has_toc: false
---
```
### Children with children
{: .text-gamma }
Child pages can also have children (grandchildren). This is achieved by using a similar pattern on the child and grandchild pages.
1. Add the `has_children` attribute to the child
1. Add the `parent` and `grand_parent` attribute to the grandchild
#### Example
{: .no_toc }
```yaml
---
layout: default
title: Buttons
parent: UI Components
nav_order: 2
has_children: true
---
```
```yaml
---
layout: default
title: Buttons Child Page
parent: Buttons
grand_parent: UI Components
nav_order: 1
---
```
This would create the following navigation structure:
```
+-- ..
|
|-- UI Components
| |-- ..
| |
| |-- Buttons
| | |-- Button Child Page
| |
| |-- ..
|
+-- ..
```
{: .note }
Currently, the navigation structure is limited to 3 levels: grandchild pages cannot themselves have child pages.
---
## Auxiliary Links
To add auxiliary links to your site (in the upper right on all pages), add it to the `aux_links` [configuration option]({% link docs/configuration.md %}#aux-links) in your site's `_config.yml` file.
#### Example
{: .no_toc }
```yaml
# Aux links for the upper right navigation
aux_links:
"Just the Docs on GitHub":
- "//github.com/just-the-docs/just-the-docs"
```
---
## External Navigation Links
{: .d-inline-block }
New (v0.4.0)
{: .label .label-green }
To add external links to the navigation, add them to the `nav_external_links` [configuration]({% link docs/configuration.md %}) option in your site's `_config.yml` file.
External links will appear in the navigation after the links to ordinary pages, but before any collections.
#### Example
{: .no_toc }
```yaml
# External navigation links
nav_external_links:
- title: Just the Docs on GitHub
url: https://github.com/just-the-docs/just-the-docs
hide_icon: false # set to true to hide the external link icon - defaults to false
```
The external links are decorated by an icon, which distinguishes them from internal links.
You can suppress the icon by setting `hide_icon: true`.
---
## In-page navigation with Table of Contents
To generate a Table of Contents on your docs pages, you can use the `{:toc}` method from Kramdown, immediately after an `<ol>` in Markdown. This will automatically generate an ordered list of anchor links to various sections of the page based on headings and heading levels. There may be occasions where you're using a heading and you don't want it to show up in the TOC, so to skip a particular heading use the `{: .no_toc }` CSS class.
#### Example
{: .no_toc }
```markdown
# Navigation Structure
{: .no_toc }
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
```
This example skips the page name heading (`#`) from the TOC, as well as the heading for the Table of Contents itself (`##`) because it is redundant, followed by the table of contents itself. To get an unordered list, replace `1. TOC` above by `- TOC`.
### Collapsible Table of Contents
The Table of Contents can be made collapsible using the `<details>` and `<summary>` elements , as in the following example. The attribute `open` (expands the Table of Contents by default) and the styling with `{: .text-delta }` are optional.
```markdown
<details open markdown="block">
<summary>
Table of contents
</summary>
{: .text-delta }
1. TOC
{:toc}
</details>
```
The result is shown at [the top of this page](#navigation-structure) (`{:toc}` can be used only once on each page).

View File

@ -1,20 +0,0 @@
---
title: Auxiliary Links
parent: Navigation
nav_order: 2
---
# Auxiliary Links
You can add a list of auxiliary links to your site, shown at the top right on all pages. You do this by including the `aux_links` [configuration option]({% link docs/configuration.md %}#aux-links) in your site's `_config.yml` file.
## Example Auxiliary Link
{: .text-delta }
This website has an auxiliary link: "Just the Docs on GitHub". It is rendered with the following code:
```yaml
aux_links:
Just the Docs on GitHub:
- https://github.com/just-the-docs/just-the-docs
```

View File

@ -1,22 +0,0 @@
---
title: Child Pages
parent: Navigation
nav_order: 4
---
# Child Pages
By default, all parent pages will automatically have a so-called 'Table of Contents' at the bottom, showing links to all their child pages.
To disable this automatic list, set `has_toc: false` in the parent page's front matter.
## Example: disabling table of contents
{: .text-delta }
```yaml
---
title: UI Components
nav_order: 3
has_toc: false
---
```

View File

@ -1,96 +0,0 @@
---
title: In-Page Navigation
parent: Navigation
nav_order: 5
---
# In-Page Navigation
{: .no_toc }
## Table of Contents
{: .no_toc .text-delta }
1. TOC
{:toc}
To support in-page navigation, you can generate a *Table of Contents* (TOC) with links to headings, like the one shown above, as well as a link to the top of the page.
## Generating Table of Contents
To generate a *Table of Contents* in a page, you use Kramdown's `{:toc}` method, immediately after the start of a list. This will automatically generate a list of anchor links to various sections of the page, based on headings and heading levels.
{: .note }
`{:toc}` can be used only once on each page.
You **must** have a list immediately preceding the table of contents. The type of list determines the style of your table of contents.
For an *ordered* table of contents, use the following markdown code:
```md
1. TOC
{:toc}
```
The `{:toc}` line *must* follow the `1. TOC` line, which begins a list.
For an *unordered* table of contents, instead use the following markdown code:
```
- TOC
{:toc}
```
## Omitting Heading from Table of Contents
If you want to omit a particular heading from the TOC, follow it immediately by `{: .no_toc }` (possibly together with other CSS class names).
```markdown
# In-Page Navigation
{: .no_toc }
## Table of Contents
{: .no_toc .text-delta }
1. TOC
{:toc}
```
This example omits the top-level heading (`In-Page Navigation`) from the TOC, as well as the heading for the *Table of Contents* itself.
## Collapsible Table of Contents (with `<details>` and `<summary>`)
You can make the Table of Contents collapsible using the `<details>` and `<summary>` elements, as in the following example.
```markdown
<details open markdown="block">
<summary>
Table of contents
</summary>
{: .text-delta }
1. TOC
{:toc}
</details>
```
The attribute `open` (which expands the Table of Contents by default) and the styling (here with `text-delta`) are optional.
## Back to Top {#back-to-top-doc}
{: .warning }
The default id for a section with heading "Back to Top" is `"back-to-top"`.
To avoid invalid HTML, sites that set the `back_to_top` configuration variable
should override the default id for such sections. The Markdown source file for
the current page uses `## Back to Top {#back-to-top-doc}`.
You can add a link from the bottom of each page to its top. You do this by including the `back_to_top` configuration option in your site's `_config.yml` file, together with `back_to_top_text` for the anchor link.
### Example
{: .no_toc }
```yaml
back_to_top: true
back_to_top_text: "Back to top"
```
{: .warning }
Back-to-top links currently appear only when *other* configuration options require footer generation!

View File

@ -1,16 +0,0 @@
---
title: Navigation
nav_order: 5
---
# Navigation
The default page layout supports various navigation features:
* a **main navigation** panel, highlighting the currently selected page;
* a list of **auxiliary** links, shown on all pages;
* lists of **breadcrumbs**, shown on all except top level pages;
* optional lists of links to **child pages** (so-called 'tables of contents'); and
* section heading links for **in-page navigation**, with an optional **back-to-top** link.
See the following pages for how to specify these features, with illustrative examples.

View File

@ -1,52 +0,0 @@
---
title: Ancestry
parent: Main Navigation
nav_order: 4
---
# Ancestry
If no two pages on your website have the same `title`, you only need to set the `parent` titles to fix the hierarchy. You can also have the same `title` on pages that have no children, provided that they have different parent pages.
If two parents have the same `title`, but different grandparents, you can set their `grand_parent` titles to distinguish between their parents. The `grand_parent` title needs to be the same as the `parent` of the `parent`.
## Example: distinguishing parents with `grand_parent`
{: .text-delta }
```yaml
---
title: T
parent: S
grand_parent: X
---
```
```yaml
---
title: T
parent: S
grand_parent: Y
---
```
The `ancestor` field of a page generalizes `grand_parent` to higher levels.
The following pages illustrate `parent` disambiguation using `grand_parent` and `ancestor` titles. Some descendants of both [Page X][X] and [Page Y][Y] have the same title, so references to those descendants as `parent` always require disambiguation.
- [X][X] is a parent page
- [S][XS] is the only child of [X][X]. The `parent` reference to [X][X] is unambiguous.
- [T][XT] is the only child of [S][XS]. Its `parent` is disambiguated by its `grand_parent`.
- [U][XU] is the only child of [T][XT]. Its `parent` is disambiguated by its `ancestor`.
- [Y][Y] is a sibling of [X][X].
- [S][YS] is the only child of [Y][Y]. The `parent` reference to [Y][Y] is unambiguous.
- [T][YT] is the only child of [S][YS]. Its `parent` is disambiguated by its `ancestor`
- [U][YU] is the only child of [T][YT]. Its `parent` is disambiguated by its `ancestor`.
[X]: {% link docs/navigation/main/x.md %}
[XS]: {% link docs/navigation/main/xs.md %}
[XT]: {% link docs/navigation/main/xt.md %}
[XU]: {% link docs/navigation/main/xu.md %}
[Y]: {% link docs/navigation/main/y.md %}
[YS]: {% link docs/navigation/main/ys.md %}
[YT]: {% link docs/navigation/main/yt.md %}
[YU]: {% link docs/navigation/main/yu.md %}

View File

@ -1,69 +0,0 @@
---
title: Collections
parent: Main Navigation
nav_order: 5
---
# Collections
By default, the navigation includes only [normal pages](https://jekyllrb.com/docs/pages/).
However, you can configure Just the Docs to include also pages from [Jekyll collections](https://jekyllrb.com/docs/collections/).
{: .note }
> You store collection pages in directories that start with an underscore (`_`), e.g., `_tests`. You won't see your `tests` collection pages in the navigation if you store them in a `tests` directory![^1]
[^1]: You can optionally specify a directory to store all your collections. For example, if you specify `collections_dir: my_collections` in `_config.yml`, you should then store the pages of the `tests` collection in the `my_collections/_tests` directory.
## Example: defining custom collections
{: .text-delta }
To define a Jekyll `tests` collection named `Tests` in your main navigation, store its pages in the `_tests` directory, and add the following to `_config.yml`:
```yaml
collections:
tests:
output: true
just_the_docs:
collections:
tests:
name: Tests
```
Together with the `name` to be used for a collection in the navigation, you can configure the following options:
* `nav_exclude: true` to exclude the entire collection from the main navigation
* `nav_fold: true` to fold the collection, instead of showing links to all its top-level pages[^2]
* `search_exclude: true` to exclude all the collection pages from search results
[^2]:
When JavaScript is disabled in the browser, all folded collections are automatically expanded,
since clicking expander symbols has no effect.
The main navigation for all your normal pages (if any) is displayed before those in collections. When *all* your pages are in a single collection, its name is not displayed.
## Example: multiple collections
{: .text-delta }
You can configure multiple collections. This creates categories in the main navigation with the configured names.
```yaml
collections:
tests:
output: true
tutorials:
output: true
just_the_docs:
collections:
tests:
name: Tests
search_exclude: true
tutorials:
name: Tutorials
nav_fold: true
```
The navigation for each collection is a separate name space for page titles: a page in one collection cannot be the `parent` of a page in a different collection, nor of a normal page.
----

View File

@ -1,30 +0,0 @@
---
title: Excluding Pages
parent: Main Navigation
nav_order: 2
---
# Excluding Pages
For specific pages that you do not wish to include in the main navigation (e.g., a 404 page or a landing page) set `nav_exclude: true` in their front matter.
## Example: using `nav_exclude`
{: .text-delta }
```yaml
---
layout: default
title: 404
nav_exclude: true
permalink: /404
---
```
The `nav_exclude` parameter does not affect the [breadcrumbs]({% link docs/navigation/parents.md %}), nor the [lists of child pages]({% link docs/navigation/children.md %}), which you can use to access pages excluded from the main navigation.
Pages with no `title` are automatically excluded from the main navigation, except when they are in collections (where Jekyll provides default titles based on file names).
Child pages are automatically excluded from the main navigation when their parent page is excluded.
{: .warning }
It is currently possible to exclude all the child pages of a page from the main navigation by setting `has_children: false` in its front matter. However, the `has_children` parameter may be ignored altogether in a future release, so it is better to use the `nav_exclude` parameter on each child page.

View File

@ -1,34 +0,0 @@
---
title: External Links
parent: Main Navigation
nav_order: 6
---
# External Links
To add external links to the navigation, add them to the `nav_external_links` [configuration]({% link docs/configuration.md %}) option in your site's `_config.yml` file.
External links will appear in the navigation after the links to ordinary pages, but before any collections.
## Example: external links
{: .text-delta }
```yaml
# External navigation links
nav_external_links:
- title: Just the Docs on GitHub
url: https://github.com/just-the-docs/just-the-docs
hide_icon: false # set to true to hide the external link icon - defaults to false
opens_in_new_tab: false # set to true to open this link in a new tab - defaults to false
```
## Opening external links in a new tab
The external links are decorated by an icon, which distinguishes them from internal links.
You can suppress the icon by setting `hide_icon: true`.
By default, external links are not opened in a new tab. However, this can be enabled by:
1. setting `opens_in_new_tab: true` in the link's configuration object
2. setting the configuration option `nav_external_links_new_tab: true` in `_config.yml`
When they conflict, `opens_in_new_tab` takes precedence.

View File

@ -1,41 +0,0 @@
---
title: Main Navigation
parent: Navigation
nav_order: 1
---
# Main Navigation
The main navigation for your Just the Docs site is at the left side of the page on large screens, and at the top (behind a tap) on small screens.
You need to specify the `title` of each page in its front matter. Page titles are independent of file names and directory structure. The navigation uses the title of the page as an anchor for links to the page.
By default, links to all pages appear in the main navigation at the top level, ordered alphabetically by their titles. By adding further fields to the front matter of individual pages, you can [change their order]({% link docs/navigation/main/order.md %}), [exclude pages]({% link docs/navigation/main/exclude.md %}), and change their [parent pages]({% link docs/navigation/main/levels.md %}).
{: .new-title }
> New (v0.10.0)
>
> The main navigation can be structured as a multi-level menu of unlimited depth:
> pages can always have child pages.
For the construction of the navigation display to work (and to avoid potential confusion when browsing) ***the page titles on your site need to satisfy the following requirements:***
* Top-level pages must have different titles.
* Pages with the same parent must have different titles.
* The title of each page must be different from the titles of all its child pages, and from the titles of their child pages, etc.
{: .new-title }
> New (v0.10.0)
>
> If *all* the pages of your site have different titles, you need only to specify the `title` of each page, and the `parent` title of each lower-level page.[^1]
[^1]: Previous versions of Just the Docs restricted the navigation to three levels. You also needed to specify `has_children: true` on all parent pages, and a `grand_parent` title on all grandchild pages. The `has_children` parameter is now redundant, and the `grand_parent` parameter can usually be omitted.
If your site has pages with the same title, you need to avoid confusion when you reference that title as `parent` on other pages. When the pages with the same title have different `parent` pages, you can distinguish between them using the `grand_parent` parameter.
{: .new-title }
> New (v0.10.0)
>
> For deeper navigation structures, you can specify the title of a grandparent or higher level page as an `ancestor` title.
----

View File

@ -1,126 +0,0 @@
---
title: Page Levels
parent: Main Navigation
nav_order: 3
---
# Page Levels
Sometimes you will want to create a page with many children. First, it is recommended that you store related pages together in a directory. For example, in these docs, we keep all of the written documentation pages in the `./docs` directory, and each of the sections in subdirectories like `./docs/ui-components` and `./docs/utilities`. This gives us an organization like this:
{: .lh-0 }
```
┌─ ...
├─ (Jekyll files)
├─ docs
├─ configuration.md
├─ ui-components
├─ index.md (parent page)
├─ buttons.md
├─ callouts.md
├─ code
├─ index.md (parent page)
└─ line-numbers.md
├─ labels.md
├─ tables.md
└─ typography.md
├─ ...
└─ MIGRATION.md
├─ index.md (home page)
├─ (Jekyll files)
└─ ...
```
## Example: page with no parents
{: .text-delta }
```yaml
---
title: UI Components
nav_order: 3
---
```
Here we're setting up the UI Components landing page that is available at URL `/docs/ui-components`, which is ordered second in the main navigation.
The navigation links for all pages with children come with an expander. When you click the expander, the display of the children is toggled, so you can expand or collapse all the children displays, regardless of which page is currently active.
## Child Pages
On child pages, simply set the `parent` front matter to the parent page's `title`, and set a navigation order (relative to pages having the same parent).
### Example: creating a child page
{: .text-delta }
```yaml
---
title: Buttons
parent: UI Components
nav_order: 2
---
```
The Buttons page appears as a child of UI Components and appears second in the UI Components pages.
{: .new-title }
> New (v0.10.0)
>
> The `has_children` field is now redundant (and ignored, except when significant for backwards compatibility).
## Multi-level Child Pages
Child pages can themselves have children, to any number of levels.
### Example: pages with (recursive) children
{: .text-delta }
```yaml
---
title: Main Navigation
parent: Navigation
nav_order: 1
---
```
```yaml
---
title: Ancestry
parent: Main Navigation
nav_order: 4
---
```
```yaml
---
title: X
parent: Ancestry
---
```
```yaml
---
title: Y
parent: Ancestry
---
```
This creates the following navigation structure:
{: .lh-0 }
```
┌─ ...
├─ ...
├─ Navigation
├─ ...
├─ Main Navigation
├─ ...
├─ Ancestry
├─ X
└─ Y
├─ ...
└─ ...
├─ ...
└─ ...
├─ ...
└─ ...
```

View File

@ -1,36 +0,0 @@
---
title: Ordering Pages
parent: Main Navigation
nav_order: 1
---
# Ordering Pages
To specify a page order, you can use the `nav_order` parameter in the front matter of the pages.
## Example: using `nav_order`
{: .text-delta }
```yaml
---
title: Customization
nav_order: 6
---
```
The parameter values determine the order of the top-level pages, and of child pages with the same parent. You can reuse the same parameter values (e.g., integers starting from 1) for the child pages of different parents.
The parameter values can be numbers (integers, floats[^floats]) and/or strings. When you omit `nav_order` parameters, they default to the titles of the pages, which are ordered alphabetically. Pages with numerical `nav_order` parameters always come before those with strings or default `nav_order` parameters. If you want to make the page order independent of the page titles, you can set explicit `nav_order` parameters on all pages.
{: .warning }
The order of pages with equal `nav_order` parameters is unstable: it may change with each build.
By default, all Capital letters come before all lowercase letters; you can add `nav_sort: case_insensitive` in the configuration file to ignore the case.[^case-insensitive]
Enclosing strings in quotation marks in front matter is optional, unless they contain "`[`", "`]`", "`{`", "`}`", "`,`", "`: `", or "` #`". Boolean, integer, and float values are treated as strings when enclosed in quotation marks.
----
[^floats]: Jekyll treats each integer *N* as equal to the corresponding float *N.0*.
[^case-insensitive]: *Note for users of previous versions of Just the Docs:* The option `nav_sort: case_insensitive` previously affected the ordering of numerical `nav_order` parameters: e.g., `10` came before `2`. Also, all pages with explicit `nav_order` parameters previously came before all pages with default parameters. Both were potentially confusing, and they have now been eliminated.

View File

@ -1,10 +0,0 @@
---
title: X
parent: Ancestry
---
# X
```yaml
title: X
parent: Ancestry
```

View File

@ -1,10 +0,0 @@
---
title: S
parent: X
---
# S
```yaml
title: S
parent: X
```

View File

@ -1,12 +0,0 @@
---
title: T
parent: S
grand_parent: X
---
# T
```yaml
title: T
parent: S
grand_parent: X
```

View File

@ -1,12 +0,0 @@
---
title: U
parent: T
ancestor: X
---
# U
```yaml
title: U
parent: T
ancestor: X
```

View File

@ -1,10 +0,0 @@
---
title: Y
parent: Ancestry
---
# Y
```yaml
title: Y
parent: Ancestry
```

View File

@ -1,10 +0,0 @@
---
title: S
parent: Y
---
# S
```yaml
title: S
parent: Y
```

View File

@ -1,12 +0,0 @@
---
title: T
parent: S
ancestor: Y
---
# T
```yaml
title: T
parent: S
ancestor: Y
```

View File

@ -1,12 +0,0 @@
---
title: U
parent: T
ancestor: Y
---
# U
```yaml
title: U
parent: T
ancestor: Y
```

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