Compare commits

..

109 Commits

Author SHA1 Message Date
Matt Wang
13dd8d2b4a Add changelog for this PR 2024-09-08 23:59:51 -07:00
Matt Wang
b6252e1bb8 First pass: trimming down CHANGELOG, consistent migration page 2024-09-08 23:58:19 -07:00
Matt Wang
8292f46be9 docs: fix (non-systemic) accessibility issues flagged by aXe (#1531)
This PR fixes some accessibility issues in our theme docs (i.e. not generated code) flagged by #1513. Here, I target changes that I say are not "systemic", i.e. issues that are easily resolvable by changing our copy and page structure (rather than issues that are created by how kramdown/rouge generates HTML, or reworking our color themes).

Here's a quick summary of the manual changes I made:

- ~~writing some JS to set `tabindex="0"` on all code blocks; I'd prefer a ruby-native solution, but that involves writing Ruby code, which is incompatible with the pages gem~~ I've moved this to #1533
- rewriting many headings named "Example" which were almost always h4s into more descriptive headings + the appropriate heading level, adding .text-delta to maintain the previous style when necessary
- removing some old heading ID hacks in `index-test` that are no longer necessary, since Jekyll does this automatically now
- fixing the table headings in `docs/utilities/layout.md`
- adding accessible titles + descriptions to the mermaid examples
- occasionally, slightly moving around copy to make it align with new headings

If you test with #1513 with the following rules disabled:

```rb
skipped_rules = [
  'color-contrast', # requires theme auditing
  # issues w/ autogenerated footnotes
  'aria-allowed-role',
  'landmark-no-duplicate-contentinfo',
  'landmark-unique',
  'aria-deprecated-role',
  # issues w/ markdown checkboxes
  'label'
]
```

You should get passing tests :) which is awesome!

## next steps

1. we need to do a pass over our docs copy - very inconsistent. This has been a pain point for me for a while now, just need to find time to sit down and do it. In particular, I'd love to standardize how we display example code (perhaps even hiding it with `<details>` and `<summary>`?), our headings language, what goes into the ToC, our overall writing style, etc.
2. ~~I don't love the JS hack for adding `tabindex="0"` to code blocks (so that they are keyboard-focusable). Ideally, we'd add a custom formatter to rouge to do this, but we can't execute arbitrary Ruby code when users use `github-pages`. I'll look into this some more - maybe rouge would be open to adding this as a feature.~~ see: #1533
4. There are some systemic issues that need a deeper look:
    1. The most common issue is still color-contrast. Fixing this involves:
        - looking at our whites/blacks/grays for core text and highlighting
        - reevaluating our syntax highlighting themes
        - fixing dark mode, once and for all :) 
        - also, picking accessible callout colours!
     2. kramdown's autogenerated footnotes feature creates a bunch of errors that aXe flags: it seems like a deprecated aria role is being used, and perhaps some misuse of markup. Need to look into this more before I can make a solid attempt at resolving this issue.
     3. We demonstrate the use of `- [ ]`, but this generates `<input type="checkbox">` values with no label. I'm not entirely sure what the best way to fix this problem is (without writing custom Ruby code). I'll have to think about this some more.

---------

Co-authored-by: Michael Ball <michael@mball.co>
2024-09-06 13:18:26 -07:00
Matt Wang
ce32212026 docs: add sitemap (via jekyll-sitemap plugin) (#1530)
Splitting this out of #1513 to make my life reviewing a bit easier! Note that this does *not* affect our downstream users, just the docs site for this project itself. 

---------

Co-authored-by: Michael Ball <michael@mball.co>
2024-09-04 16:08:19 -07:00
dependabot[bot]
9f48631732 Bump stylelint from 16.8.2 to 16.9.0 (#1525)
Bumps [stylelint](https://github.com/stylelint/stylelint) from 16.8.2 to 16.9.0.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.8.2...16.9.0)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-28 13:35:06 -07:00
dependabot[bot]
1ebf644f84 Bump rexml from 3.3.3 to 3.3.6 (#1520)
Bumps [rexml](https://github.com/ruby/rexml) from 3.3.3 to 3.3.6.
- [Release notes](https://github.com/ruby/rexml/releases)
- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/rexml/compare/v3.3.3...v3.3.6)

---
updated-dependencies:
- dependency-name: rexml
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-22 15:30:15 -07:00
Peter Mosses
26be7e9b0c Update CHANGELOG.md
Remove outdated URL
2024-08-20 23:15:36 +02:00
Peter Mosses
dd0b814bfd Docs: Allow unlimited multi-level navigation (#1440)
* Remove `jekyll-default-layout` plugin

* Move docs/navigation-structure to docs/navigation

* Fix uses of line-nos in md files

* Update CHANGELOG.md

---------

Co-authored-by: Matt Wang <matt@matthewwang.me>
2024-08-20 22:50:47 +02:00
Peter Mosses
a4e4e312aa Feature: Allow unlimited multi-level navigation (#1431)
* Allow unlimited multi-level navigation

This PR supersedes #462.

The only user-level difference from #462 is that disambiguation of parent pages has to use either `grand_parent` or `ancestor` titles: the somewhat unnatural `section_id` and `in_section` fields are not supported.

The implementation has been significantly simplified by the changes introduced in v0.7.0 of the theme.

* Detect cyclic parenthood

A page should not have a parent or ancestor with the same title. If it does, the location of the repeated link is marked by ∞, to facilitate debugging the navigation (and an unbounded loop leading to a build exception is avoided).

* Add nav_error_report warning in main navigation

When activated by `nav_error_report: true` in `_config.yml`, displays warnings about pages with the same title as their parent page or an ancestral page.

* Cache site-nav with links to all pages

The extra cached site-nav is used for determining breadcrumbs and children navigation, which may involve pages that are excluded from the main navigation.

* Replace code for determining children by inclusion of components/nav/children.html

* Update CHANGELOG.md

---------

Co-authored-by: Matt Wang <matt@matthewwang.me>
2024-08-20 22:34:11 +02:00
dependabot[bot]
0fc476871c Bump stylelint from 16.8.1 to 16.8.2 (#1515)
Bumps [stylelint](https://github.com/stylelint/stylelint) from 16.8.1 to 16.8.2.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.8.1...16.8.2)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-16 11:18:12 -07:00
Matt Wang
ac78bfea6c Fix CHANGELOG typo
🤦
2024-08-12 12:27:06 -07:00
Matt Wang
facad4c85a 0.9.0 2024-08-12 12:23:52 -07:00
Matt Wang
3974fb87e2 Prep: 0.9.0 2024-08-12 12:21:46 -07:00
Matt Wang
060bb31a78 Apply Stylelint to vendor/ code, fix errors (#1508)
Changes are in three categories:

- whitespace
- devendoring prefixes for properties that have entered the CSS spec - reasonable to autofix
- removing a duplicate `monospace` in `monospace, monospace` `font-family` decl in normalize.scss - not autofix
2024-08-12 12:10:00 -07:00
Matt Wang
4862864318 Bump stylelint to v16, SCSS config to v13 (#1507)
Seems like this major update isn't caught by dependabot. Should be a straightforward upgrade!

Separately, going to plan on removing files from our `ignoreFiles` -- in particular, auditing our vendor files (which have some issues).
2024-08-12 11:34:37 -07:00
Bob van de Vijver
9aa1eeac3c Fix Sass mixed declarations (#1495)
As requested (https://github.com/just-the-docs/just-the-docs/issues/1493#issuecomment-2227203330), a PR to resolve the Sass deprecations. Seems to solve all deprecations I am seeing, and I am not seeing any weird changes in the resulting CSS file.

Closes #1493.

<details>
<summary>Git diff of generated CSS file</summary>


```patch
diff --git a/just-the-docs-default.css b/just-the-docs-default.css.new
index fe42b2d..50a103b 100644
--- a/just-the-docs-default.css
+++ b/just-the-docs-default.css.new
@@ -591,9 +591,11 @@ template {
 }

 html {
-  font-size: 0.875rem !important;
   scroll-behavior: smooth;
 }
+html {
+  font-size: 0.875rem !important;
+}
 @media (min-width: 31.25rem) {
   html {
     font-size: 1rem !important;
@@ -715,25 +717,50 @@ blockquote {
     min-width: 16.5rem;
   }
 }
-
 @media (min-width: 50rem) {
-  .main {
-    position: relative;
-    max-width: 50rem;
+  .side-bar + .main {
     margin-left: 15.5rem;
   }
 }
 @media (min-width: 66.5rem) {
-  .main {
+  .side-bar + .main {
     margin-left: max(16.5rem, (100% - 66.5rem) / 2 + 16.5rem);
   }
 }
+.side-bar + .main .main-header {
+  display: none;
+  background-color: #f5f6fa;
+}
+@media (min-width: 50rem) {
+  .side-bar + .main .main-header {
+    display: flex;
+    background-color: #fff;
+  }
+}
+.side-bar + .main .main-header.nav-open {
+  display: block;
+}
+@media (min-width: 50rem) {
+  .side-bar + .main .main-header.nav-open {
+    display: flex;
+  }
+}
+
+.main {
+  margin: auto;
+}
+@media (min-width: 50rem) {
+  .main {
+    position: relative;
+    max-width: 50rem;
+  }
+}

 .main-content-wrap {
-  padding-right: 1rem;
-  padding-left: 1rem;
   padding-top: 1rem;
   padding-bottom: 1rem;
+  padding-right: 1rem;
+  padding-left: 1rem;
 }
 @media (min-width: 50rem) {
   .main-content-wrap {
@@ -750,24 +777,13 @@ blockquote {

 .main-header {
   z-index: 0;
-  display: none;
-  background-color: #f5f6fa;
+  border-bottom: 1px solid #eeebee;
 }
 @media (min-width: 50rem) {
   .main-header {
     display: flex;
     justify-content: space-between;
     height: 3.75rem;
-    background-color: #fff;
-    border-bottom: 1px solid #eeebee;
-  }
-}
-.main-header.nav-open {
-  display: block;
-}
-@media (min-width: 50rem) {
-  .main-header.nav-open {
-    display: flex;
   }
 }

@@ -814,8 +830,6 @@ blockquote {
 }

 .site-title {
-  padding-right: 1rem;
-  padding-left: 1rem;
   flex-grow: 1;
   display: flex;
   height: 100%;
@@ -823,7 +837,8 @@ blockquote {
   padding-top: 0.75rem;
   padding-bottom: 0.75rem;
   color: #27262b;
-  font-size: 1.125rem !important;
+  padding-right: 1rem;
+  padding-left: 1rem;
 }
 @media (min-width: 50rem) {
   .site-title {
@@ -831,6 +846,9 @@ blockquote {
     padding-left: 2rem;
   }
 }
+.site-title {
+  font-size: 1.125rem !important;
+}
 @media (min-width: 31.25rem) {
   .site-title {
     font-size: 1.5rem !important;
@@ -877,15 +895,14 @@ body {
 }

 .site-footer {
-  padding-right: 1rem;
-  padding-left: 1rem;
   position: absolute;
   bottom: 0;
   left: 0;
   padding-top: 1rem;
   padding-bottom: 1rem;
   color: #959396;
-  font-size: 0.6875rem !important;
+  padding-right: 1rem;
+  padding-left: 1rem;
 }
 @media (min-width: 50rem) {
   .site-footer {
@@ -893,6 +910,9 @@ body {
     padding-left: 2rem;
   }
 }
+.site-footer {
+  font-size: 0.6875rem !important;
+}
 @media (min-width: 31.25rem) {
   .site-footer {
     font-size: 0.75rem !important;
@@ -948,6 +968,8 @@ body {
   color: #959396;
   content: counter(step-counter);
   counter-increment: step-counter;
+}
+.main-content ol > li::before {
   font-size: 0.75rem !important;
 }
 @media (min-width: 31.25rem) {
@@ -1150,10 +1172,12 @@ body {
   list-style: none;
 }
 .nav-list .nav-list-item {
-  font-size: 0.875rem !important;
   position: relative;
   margin: 0;
 }
+.nav-list .nav-list-item {
+  font-size: 0.875rem !important;
+}
 @media (min-width: 31.25rem) {
   .nav-list .nav-list-item {
     font-size: 1rem !important;
@@ -1246,6 +1270,8 @@ body {
   text-align: start;
   text-transform: uppercase;
   border-bottom: 1px solid #eeebee;
+}
+.nav-category {
   font-size: 0.6875rem !important;
 }
 @media (min-width: 31.25rem) {
@@ -1280,6 +1306,8 @@ body {
 .aux-nav {
   height: 100%;
   overflow-x: auto;
+}
+.aux-nav {
   font-size: 0.6875rem !important;
 }
 @media (min-width: 31.25rem) {
@@ -1320,6 +1348,8 @@ body {

 .breadcrumb-nav-list-item {
   display: table-cell;
+}
+.breadcrumb-nav-list-item {
   font-size: 0.6875rem !important;
 }
 @media (min-width: 31.25rem) {
@@ -1341,11 +1371,14 @@ body {
   content: "";
 }

+h1,
+.text-alpha {
+  font-weight: 300;
+}
 h1,
 .text-alpha {
   font-size: 2rem !important;
   line-height: 1.25;
-  font-weight: 300;
 }
 @media (min-width: 31.25rem) {
   h1,
@@ -1381,11 +1414,14 @@ h3,

 h4,
 .text-delta {
-  font-size: 0.6875rem !important;
   font-weight: 400;
   text-transform: uppercase;
   letter-spacing: 0.1em;
 }
+h4,
+.text-delta {
+  font-size: 0.6875rem !important;
+}
 @media (min-width: 31.25rem) {
   h4,
   .text-delta {
@@ -1454,9 +1490,12 @@ h6,
   text-transform: uppercase;
   vertical-align: middle;
   background-color: #2869e6;
-  font-size: 0.6875rem !important;
   border-radius: 12px;
 }
+.label:not(g),
+.label-blue:not(g) {
+  font-size: 0.6875rem !important;
+}
 @media (min-width: 31.25rem) {
   .label:not(g),
   .label-blue:not(g) {
@@ -1752,6 +1791,8 @@ h6,
   padding-left: 0;
   margin-bottom: 0.25rem;
   list-style: none;
+}
+.search-results-list {
   font-size: 0.875rem !important;
 }
 @media (min-width: 31.25rem) {
@@ -1804,6 +1845,8 @@ h6,
 }
 .search-result-doc.search-result-doc-parent {
   opacity: 0.5;
+}
+.search-result-doc.search-result-doc-parent {
   font-size: 0.75rem !important;
 }
 @media (min-width: 31.25rem) {
@@ -1844,6 +1887,8 @@ h6,
   color: #959396;
   text-overflow: ellipsis;
   white-space: nowrap;
+}
+.search-result-rel-url {
   font-size: 0.5625rem !important;
 }
 @media (min-width: 31.25rem) {
@@ -1862,6 +1907,8 @@ h6,
   word-wrap: break-word;
   border-left: 1px solid;
   border-left-color: #eeebee;
+}
+.search-result-previews {
   font-size: 0.6875rem !important;
 }
 @media (min-width: 31.25rem) {
@@ -1889,6 +1936,8 @@ h6,

 .search-no-result {
   padding: 0.5rem 0.75rem;
+}
+.search-no-result {
   font-size: 0.75rem !important;
 }
 @media (min-width: 31.25rem) {
@@ -1998,13 +2047,16 @@ table {

 th,
 td {
-  font-size: 0.75rem !important;
   min-width: 7.5rem;
   padding: 0.5rem 0.75rem;
   background-color: #fff;
   border-bottom: 1px solid rgba(238, 235, 238, 0.5);
   border-left: 1px solid #eeebee;
 }
+th,
+td {
+  font-size: 0.75rem !important;
+}
 @media (min-width: 31.25rem) {
   th,
   td {
@@ -2135,12 +2187,15 @@ figure.highlight :not(pre) > code {
 }
 .highlight .table-wrapper td,
 .highlight .table-wrapper pre {
-  font-size: 0.6875rem !important;
   min-width: 0;
   padding: 0;
   background-color: #f5f6fa;
   border: 0;
 }
+.highlight .table-wrapper td,
+.highlight .table-wrapper pre {
+  font-size: 0.6875rem !important;
+}
 @media (min-width: 31.25rem) {
   .highlight .table-wrapper td,
   .highlight .table-wrapper pre {
```
</details>
2024-08-12 11:34:20 -07:00
dependabot[bot]
3a7066ce70 Bump rexml from 3.2.8 to 3.3.3 (#1504)
Bumps [rexml](https://github.com/ruby/rexml) from 3.2.8 to 3.3.3.
- [Release notes](https://github.com/ruby/rexml/releases)
- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/rexml/compare/v3.2.8...v3.3.3)

---
updated-dependencies:
- dependency-name: rexml
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-07 17:05:21 -07:00
dependabot[bot]
f3b947d64d Bump prettier from 3.3.2 to 3.3.3 (#1494)
Bumps [prettier](https://github.com/prettier/prettier) from 3.3.2 to 3.3.3.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.3.2...3.3.3)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-15 19:43:34 -07:00
dependabot[bot]
da4be68cfc Bump prettier from 3.2.5 to 3.3.2 (#1482)
Bumps [prettier](https://github.com/prettier/prettier) from 3.2.5 to 3.3.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.2.5...3.3.2)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-24 11:28:16 -07:00
dependabot[bot]
6242d32e21 Bump rexml from 3.2.6 to 3.2.8 (#1476)
Bumps [rexml](https://github.com/ruby/rexml) from 3.2.6 to 3.2.8.
- [Release notes](https://github.com/ruby/rexml/releases)
- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/rexml/compare/v3.2.6...v3.2.8)

---
updated-dependencies:
- dependency-name: rexml
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-30 15:18:22 -07:00
Matt Wang
2dd535c2da Fix: protect search-data.json file from front matter default for layout (#1468)
Fixes #1466. Prior art: #1447. Otherwise self-explanatory.

To test:

1. First, clone [template repository](https://github.com/just-the-docs/just-the-docs-template/tree/main). Observe that search works.
2. Next, add a default layout to all files
```yml
defaults:
  - scope:
      path: ""
    values:
      layout: "default"
```
3. Observe that search no longer works.
4. Apply this patch
5. Observe that search works again!
2024-05-15 17:06:27 -07:00
dependabot[bot]
1b79df8ebb Bump nokogiri from 1.16.4 to 1.16.5 (#1474)
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.16.4 to 1.16.5.
- [Release notes](https://github.com/sparklemotion/nokogiri/releases)
- [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.16.4...v1.16.5)

---
updated-dependencies:
- dependency-name: nokogiri
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Matt Wang <matt@matthewwang.me>
2024-05-15 16:55:43 -07:00
dependabot[bot]
644287cf6b Bump html-proofer from 5.0.8 to 5.0.9 (#1472)
Bumps [html-proofer](https://github.com/gjtorikian/html-proofer) from 5.0.8 to 5.0.9.
- [Release notes](https://github.com/gjtorikian/html-proofer/releases)
- [Changelog](https://github.com/gjtorikian/html-proofer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/gjtorikian/html-proofer/compare/v5.0.8...v5.0.9)

---
updated-dependencies:
- dependency-name: html-proofer
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-15 16:46:15 -07:00
Matt Wang
dd4613e8b1 Fix broken link to apidock.com (#1475)
(and, makes the link text more accessible)

Previous link: https://apidock.com/ruby/DateTime/strftime
2024-05-15 16:45:30 -07:00
Kevin Lin
a251382b7a Add nav_enabled variables for more customizable and feature-complete minimal layouts (#1441)
* Add nav_enabled variables for site/layout/page-level control

* _sass: Add a space around `+` operator

* assets: Do not compile based on site.nav_enabled

* _config.yml: nav_enabled can be selectively enabled

* CHANGELOG.md: Add nav_enabled feature and docs

* docs: Prefer em dash in describing minimal layout

* docs: Add section on Selectively hiding or showing the sidebar

* _layouts: Display sidebar based on variable importance

* docs: Update documentation on the minimal layout

* docs: Document site.nav_enabled configuration variable

---------

Co-authored-by: Matt Wang <matt@matthewwang.me>
2024-04-22 15:07:29 -07:00
Matt Wang
063a130ffd Update preferred Ruby version to 3.3, update deps (#1460)
This PR essentially updates the "default" Ruby version to 3.3. In the process, it:

- fixes a bug with the linux platform for `sass-embedded`
- regenerates the `Gemfile.lock` with Bundler 2.5.9
- adds Ruby 3.3 to the testing matrix & updates our deployment actions to use Ruby 3.3
- removes Ruby 3.0 from the testing matrix, as it is now end of life

This PR is motivated by https://github.com/just-the-docs/just-the-docs-template/pull/45, where I discovered that depending on the bundler/RubyGems version, the platform resolution for platformed gems can fail.
2024-04-17 16:59:47 -07:00
dependabot[bot]
df78a847b2 Bump rake from 13.2.0 to 13.2.1 (#1453)
Bumps [rake](https://github.com/ruby/rake) from 13.2.0 to 13.2.1.
- [Release notes](https://github.com/ruby/rake/releases)
- [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc)
- [Commits](https://github.com/ruby/rake/compare/v13.2.0...v13.2.1)

---
updated-dependencies:
- dependency-name: rake
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-05 14:35:10 -07:00
dependabot[bot]
5110bf71d7 Bump rake from 13.1.0 to 13.2.0 (#1449)
Bumps [rake](https://github.com/ruby/rake) from 13.1.0 to 13.2.0.
- [Release notes](https://github.com/ruby/rake/releases)
- [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc)
- [Commits](https://github.com/ruby/rake/compare/v13.1.0...v13.2.0)

---
updated-dependencies:
- dependency-name: rake
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-02 10:27:40 -07:00
Matt Wang
e92afffb9c 0.8.2 2024-04-01 11:26:23 -07:00
Matt Wang
e434f916ce Prep 0.8.2 2024-04-01 11:25:25 -07:00
Peter Mosses
328893dd30 Fix: Protect theme JS file from front matter default for layout (#1447)
Fix #1445

Front matter defaults with unrestricted `scope` (`path: ""`) can affect theme code files. [Jekyll](https://jekyllrb.com/docs/front-matter/#predefined-global-variables) supports using `null` to "produce a file without using a layout file".

This PR adds `layout: null` to `just-the-docs.js`, to avoid this file being affected by the following front matter defaults:

```yaml
defaults:
  -
    scope:
      path: ""
    values:
      layout: "default"
```
2024-04-01 19:59:07 +02:00
Matt Wang
7de5f7abe5 0.8.1 2024-03-06 14:53:10 -08:00
Matt Wang
930a0e0c36 Prep 0.8.1 2024-03-06 14:50:44 -08:00
Jos Ahrens
880f4dc8b0 Build docs site using strict mode and strict_filters (#1435)
Ref: https://github.com/just-the-docs/just-the-docs/pull/1434#issuecomment-1981666074
2024-03-06 14:48:00 -08:00
Jos Ahrens
15a0b6e91b Fix Liquid filter typo in breadcrumb component (strip instead of trim) (#1434)
We are running into an issue upgrading from 0.7 to 0.8, suggesting that `trim` is not a method.

```
1.963   Liquid Exception: Liquid error (/usr/gem/gems/just-the-docs-0.8.0/_includes/components/breadcrumbs.html line 59): undefined filter trim included in /_layouts/default.html
1.968 /usr/gem/gems/liquid-4.0.4/lib/liquid/strainer.rb:58:in `invoke': Liquid error (/usr/gem/gems/just-the-docs-0.8.0/_includes/components/breadcrumbs.html line 59): undefined filter trim included  (Liquid::UndefinedFilter)
```
Looking at the liquid docs, we're probably looking for `strip` and not `trim`

https://shopify.github.io/liquid/filters/strip/

https://github.com/Shopify/liquid/blob/main/History.md#300--2014-11-12, I don't see a trim so it may have been an extension? This does work normally on just-the-docs itself running from scratch, so it might also be a bug in our application (or combination of different versions in plugins).
2024-03-06 14:39:45 -08:00
Matthew Wang
5357ffad22 0.8.0 2024-02-22 22:07:18 -08:00
Matthew Wang
6fc71c108b Prep 0.8.0 2024-02-22 22:05:07 -08:00
Peter Mosses
820d256bcd Quicker build (#1397)
This PR uses the cached site-nav to determine the position of each page in the navigation hierarchy. [Profiling](https://just-the-docs.github.io/just-the-docs-tests/tests/profiles/index/) shows that it significantly reduces the v0.7.0 build time for larger sites – especially with Jekyll 3. The improvement is due mainly to the elimination of loops and filters that depended on the entire site. 

For example:

- [endoflife.date](https://just-the-docs.github.io/just-the-docs-tests/tests/profiles/endoflife.date/index/) drops from 32s to 11s
- [machinetranslate.org](https://just-the-docs.github.io/just-the-docs-tests/tests/profiles/machinetranslate.org/index/) drops from 267s to ~~73s~~ 56s

### Testing

[Just the Docs Tests](https://just-the-docs.github.io/just-the-docs-tests/) is currently built using this PR branch. With JS disabled, the highlighting and unfolding of the navigation panel should be as with v0.7.0.

A diff of the tests site built with this PR branch compared to v0.7.0 should report no significant changes. For more rigorous testing, diffs of variants of the tests site should also be inspected.
2024-02-22 21:56:52 -08:00
dependabot[bot]
b8f6f2b75c Bump prettier from 3.2.2 to 3.2.5 (#1424)
Bumps [prettier](https://github.com/prettier/prettier) from 3.2.2 to 3.2.5.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.2.2...3.2.5)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-21 16:00:19 -08:00
Roman KC
01719a8752 Add configurable keyboard shortcut to focus search input (#1411)
Adds a keyboard shortcut to use Ctrl/Cmd and a configurable key to focus the search input. The key is configurable with `search.focus_shortcut_key`; enables it on the core docs site with `'k'` (default on many sites).

---------
Co-authored-by: Matt Wang <mxw@cs.washington.edu>
2024-02-21 20:43:45 +00:00
dependabot[bot]
52b4b444d0 Bump nokogiri from 1.15.4 to 1.16.2 (#1425)
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.15.4 to 1.16.2.
- [Release notes](https://github.com/sparklemotion/nokogiri/releases)
- [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.15.4...v1.16.2)

---
updated-dependencies:
- dependency-name: nokogiri
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-07 02:21:58 -08:00
Peter Mosses
742281635f Fix navigation when .html omitted (#1374)
* Prefer exact match of pathname
* Update CHANGELOG.md
2024-01-25 18:02:39 +01:00
dependabot[bot]
e96bf6ae3d Bump prettier from 3.1.1 to 3.2.2 (#1415)
Bumps [prettier](https://github.com/prettier/prettier) from 3.1.1 to 3.2.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.1.1...3.2.2)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-15 14:05:09 -08:00
Matt Wang
da38718d7a Fix incorrect positioning of clickable area for navigation links on Safari (#1403)
Closes #1392.

Unfortunately, this PR has not actually diagnosed the root problem with the `scrollBy` calculation/method and Safari. However, by using the [`scrollIntoView`](https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView) function (which essentially does what the calculation was meant to do), this problem is "magically" solved! As a side effect, I think this makes the code easier to maintain (I myself was thinking: why is there a magic `3` multiplier?). 

~~I will point out that this does change *how much is scrolled*; following the spec for the method, the sidebar is now scrolled so that the active navigation link is top-aligned with the scroll container (which in this case, is the navigation sidebar's "cutoff"). I personally am fine with this change, but happy to fiddle around (e.g. we could vertically align to the `center` via [`scrollIntoViewOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView#parameters), though I'm not sure if this causes compatability problems).~~

I will point out that this does change *how much is scrolled*; we are now using the `center` option to `scrollBy`, which centers the target link. As Peter has commented in the PR thread, this seems to be the best compromise for maintaining the spirit of the previous calculation.

### testing

Peter did a great job writing a reproducible bug report in #1392. To test this, 

1. first, follow the instructions verbatim on `main`. observe that the bug appears on Safari on macOS, but not Firefox and Chrome
2. then, apply this change (e.g. check out the branch)
3. next, replay the instructions - observing that
    1. the bug is fixed on Safari
    2. there is no change to the behaviour on Firefox and Chrome (other than the "start" of the scroll")

### compatability

On [Can I use](https://caniuse.com/scrollintoview), `scrollIntoView` has 98.15% adoption (the only "major" holdout being Opera Mini); and, the partial support from IE is about an option that we don't use. So, I'm pretty confident that we should be able to roll out this change without our users being locked out by a new-ish method.
2024-01-01 14:19:24 -08:00
dependabot[bot]
0352428017 Bump jekyll-github-metadata from 2.16.0 to 2.16.1 (#1407)
Bumps [jekyll-github-metadata](https://github.com/jekyll/github-metadata) from 2.16.0 to 2.16.1.
- [Release notes](https://github.com/jekyll/github-metadata/releases)
- [Changelog](https://github.com/jekyll/github-metadata/blob/main/History.markdown)
- [Commits](https://github.com/jekyll/github-metadata/compare/v2.16.0...v2.16.1)

---
updated-dependencies:
- dependency-name: jekyll-github-metadata
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-29 15:09:56 -08:00
dependabot[bot]
69583cb94c Bump jekyll from 4.3.2 to 4.3.3 (#1406)
Bumps [jekyll](https://github.com/jekyll/jekyll) from 4.3.2 to 4.3.3.
- [Release notes](https://github.com/jekyll/jekyll/releases)
- [Changelog](https://github.com/jekyll/jekyll/blob/master/History.markdown)
- [Commits](https://github.com/jekyll/jekyll/compare/v4.3.2...v4.3.3)

---
updated-dependencies:
- dependency-name: jekyll
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-28 14:24:01 -08:00
Matthew
b12ed38e7b Update CHANGELOG 2023-12-18 10:00:50 -08:00
Mitch Nemirovsky
8f0bcd6875 Add documentation to "Navigation Structure" on collections and grouping pages (#1390)
Added link and short blurb about document collections to the navigation structure page, for quicker reference and suggestion during reading documentation.

Allows easier reference when trying to create page groups / categories without using a blank Parent page. Avoids automatically folded Parent page when Child pages are the necessary ones.
2023-12-18 09:58:09 -08:00
dependabot[bot]
d8a23a0b26 Bump prettier from 3.1.0 to 3.1.1 (#1402)
Bumps [prettier](https://github.com/prettier/prettier) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.1.0...3.1.1)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-12 23:03:43 -08:00
Matt Wang
fd689b47e0 docs: fix misleading docs on code with line numbers (#1349)
Closes #1306.

Co-authored-by: Peter Mosses <18308236+pdmosses@users.noreply.github.com>
2023-11-15 11:45:14 -08:00
dependabot[bot]
4e7f8345b4 Bump prettier from 3.0.3 to 3.1.0 (#1393)
Bumps [prettier](https://github.com/prettier/prettier) from 3.0.3 to 3.1.0.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.0.3...3.1.0)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-13 10:23:11 -08:00
dependabot[bot]
a9a336f1b0 Bump stylelint-config-standard-scss from 11.0.0 to 11.1.0 (#1386)
Bumps [stylelint-config-standard-scss](https://github.com/stylelint-scss/stylelint-config-standard-scss) from 11.0.0 to 11.1.0.
- [Release notes](https://github.com/stylelint-scss/stylelint-config-standard-scss/releases)
- [Changelog](https://github.com/stylelint-scss/stylelint-config-standard-scss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint-scss/stylelint-config-standard-scss/compare/v11.0.0...v11.1.0)

---
updated-dependencies:
- dependency-name: stylelint-config-standard-scss
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-03 16:00:56 -07:00
dependabot[bot]
1c27df3de6 Bump rake from 13.0.6 to 13.1.0 (#1385)
Bumps [rake](https://github.com/ruby/rake) from 13.0.6 to 13.1.0.
- [Release notes](https://github.com/ruby/rake/releases)
- [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc)
- [Commits](https://github.com/ruby/rake/compare/v13.0.6...v13.1.0)

---
updated-dependencies:
- dependency-name: rake
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-01 22:41:07 -07:00
Matthew
870a6a4ff6 Fix Gemfile.lock post-release 2023-10-25 12:18:07 -07:00
Matthew
2ed7a7d0fc Version 0.7.0 2023-10-25 12:09:00 -07:00
Matthew
a387ea12a8 Prep 0.7.0 2023-10-25 12:03:04 -07:00
Matt Wang
80bd7bfc9f Fix accidental disabling of forward-declared stylesheets (#1373)
PR for the issue flagged in https://github.com/just-the-docs/just-the-docs/discussions/1359#discussioncomment-7267686 (and related to #1358, #1350, etc.). This PR essentially just disables the `head-nav` stylesheet by ID instead of relying on the index; this makes the code more robust against stylesheets that are arbitrarily entered into the document (such as by JavaScript, which is the case of #1359).
2023-10-25 11:52:44 -07:00
Peter Mosses
56e0f1c800 Fix invalid CSS rules in head elements (#1368)
Rectify and simplify CSS rules  used in the head element. The rules now avoid the invalid use of nested `:not()` pseudo-classes.

- Update CHANGELOG.md
- Remove ignore statements re CSS parse errors
- Add rules for excluded pages and simplify
- Add `activation_no_nav_link` with the rules for excluded pages
- Insert `activation_no_nav_link` when no other rules are generated
- Replace `:nth-child(1)` by `:first-child`
- Correct `:nth-child(n + {{ activation_index | plus: 1 }})` to `:not(:first-child)`
- Eliminate `activation_collection_index`
- Generate `.nav-category-list` selectors only for sites with collections

---------

Co-authored-by: Matt Wang <matt@matthewwang.me>
2023-10-25 18:22:18 +01:00
Matthew
fad37122ae Update Changelog 2023-10-20 15:36:25 -07:00
Susheel Thapa
cdae4f63d5 docs: fix typos in CHANGELOG and MIGRATION (#1377)
This PR fixed the typos in CHANGELOG and MIGRATION files

```pseudo
Simlar > Similar
avaialble > available
vulnerablities > vulnerabilities
concering > concerning
```
2023-10-20 11:34:40 -07:00
dependabot[bot]
b75fd5e824 Bump stylelint from 15.10.3 to 15.11.0 (#1375)
Bumps [stylelint](https://github.com/stylelint/stylelint) from 15.10.3 to 15.11.0.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/15.10.3...15.11.0)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-18 01:30:16 -07:00
Peter Mosses
ae52352eae Fixed: navigation scroll to active link regression (#1367)
* Defer removal of href

The `href` with the URL of the current page is inspected by `navLink()`, so it should not be removed until after the calls of `navLink()` in `scrollNav()` and `activateNav()`.

As `scrollNav()` follows `activateNav()`, the removal of `href` needs to be left to `scrollNav()`.

* Update CHANGELOG.md
2023-10-08 10:37:24 +02:00
dependabot[bot]
3d01bc9183 Bump postcss from 8.4.28 to 8.4.31 (#1369)
Bumps [postcss](https://github.com/postcss/postcss) from 8.4.28 to 8.4.31.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.28...8.4.31)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-07 20:11:33 -07:00
Matt Wang
66b84a03e7 Fixes erroneous parentheses in site_nav conditional (#1366)
Ref: https://github.com/just-the-docs/just-the-docs/pull/1360#issuecomment-1751358990.

I'm sorry for not catching this earlier; I'm surprised that this slipped my mind (maybe I'm juggling too many templating languages).

Though, also, I'm surprised that this doesn't flag as a compiler error?
2023-10-06 15:37:27 -07:00
Matt Wang
dfe751e45b docs: fix navigation structure header hierarchy, uniqueness (#1363)
This PR touches the "Navigation Structure" docs page, by:

- fixing the header hierarchy; we no longer jump from `h2` -> `h4`
    - this does technically result in a styling change, which I'm personally fine with. However, if we want to keep the old one, I can also do that!
- makes each header text unique, by annotating the "Example" with what the example is for
- adding a "New" label for the feature introduced in #1360

The main goal of this PR is to improve the accessibility of this docs page: the current generated markup will cause minor problems for screenreader users. If we like this change, I can then roll this out to the rest of the docs pages.
2023-10-05 10:13:39 -07:00
CarbonNeuron
33ba8d8eaa Add configuration options for opening external links in new tab (#1360)
I've whipped up a solution that solves #1103. I've added a config option `nav_external_links_new_tab`, which is off by default. When turned on, it'll pop external nav links into a new tab. The idea was borrowed from how [aux_nav.html](https://github.com/just-the-docs/just-the-docs/blob/main/_includes/components/aux_nav.html) does it with `aux_links_new_tab`.

---------

Co-authored-by: Matt Wang <matt@matthewwang.me>
2023-10-04 12:10:56 -07:00
Peter Mosses
2ccc451c2a Fix: improve build time (#1358)
* Remove "passive" toggle

PR #1244 introduced the "passive" toggle, but just-the-docs.js subsequently disabled the only styling that used it, so it became redundant.
This removes it.

* Reduce build time for page-dependent CSS

Fix #1323

- Remove `_includes/head_nav.html`.
- Generate page-independent SCSS in `assets/css/just-the-docs-head-nav.css`.
- Link to `/assets/css/just-the-docs-head-nav.css` in `head.html`.
- Disable the above stylesheet in `assets/js/just-the-docs.js`.
- Generate page-dependent CSS in `_includes/css/activation.scss.liquid` and include in `head.html`.

* No override svg rotate

* Disable both stylesheets safely

* Move the site nav to a new include

- Fix the complete site nav
- Move the site nav to `_includes/site_nav.html`
- Cache the site nav
- Uncache `nav.html`

* Move nav and site_nav to _includes/components

* Replace id prefix

* Update breadcrumbs.html

Replace several filters by a single loop through all the pages,
but breaking as soon as possible.

Profiling indicates that this saves up to 50% of the breadcrumbs build time for the filters.

* Update just-the-docs-head-nav.css

Adjust the number of lines to keep

* Update head.html

Remove superflous type.

* Update activation.scss.liquid

Remove a superfluous closing brace.
Adjust layout.

* Use `scssify` to remove nesting

Preliminary profiling indicates that using `scssify` on the small number of nested CSS rules produced by `activation.scss.liquid` is quick enough.

* Update head.scss

Manual attempt at prettier (pending installation in Atom).

* Avoid generation of nested CSS

Local profiling indicated that using `scssify` on each page takes about 1% of the build time.

- Update `_includes/css/activation.scss.liquid` to generate non-nested CSS.
- Remove use of `scssify` from `_includes/head.html`.

* Ignore false positives from validator

Ignores: `:1.810-1.823: error: CSS: Parse Error.` and `:1.811-1.824: error: CSS: Parse Error.`; had to shift things around since the local config overrides the CI flag.

* Inline `_sass/head.css`

* Update CHANGELOG.md

---------

Co-authored-by: Matthew Wang <matt@matthewwang.me>
2023-10-01 14:47:26 +02:00
Peter Mosses
cd4f1b02b2 Remove href from the navigation link to the current page (#1356)
* Remove href from link to active page

* Update CHANGELOG.md

Co-authored-by: Matt Wang <matt@matthewwang.me>

---------

Co-authored-by: Matt Wang <matt@matthewwang.me>
2023-09-29 22:33:15 +02:00
Matt Wang
b342531fe4 ci: update actions to latest major versions (#1361)
Most of these are motivated by the EOL for Node 16 (for more, see [GitHub's post on it](https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/)).
2023-09-27 09:40:09 -07:00
Matthew Wang
328b26abd2 Fix committed lockfile
Agh - shouldn't have made this mistake!
2023-09-19 17:28:04 -07:00
Matthew Wang
22fc061ef4 0.6.2 2023-09-19 17:26:18 -07:00
Matt Wang
200ae6e99d Create FUNDING.yml (#1348) 2023-09-12 00:27:10 -07:00
Peter Mosses
0964e1f8ae Remove the passive toggle (#1335)
* Remove "passive" toggle

PR #1244 introduced the "passive" toggle, but just-the-docs.js subsequently disabled the only styling that used it, so it became redundant.
This removes it.

* Update CHANGELOG.md

* Update CHANGELOG.md

Co-authored-by: Matt Wang <matt@matthewwang.me>

* Update CHANGELOG.md

Co-authored-by: Matt Wang <matt@matthewwang.me>

---------

Co-authored-by: Matt Wang <matt@matthewwang.me>
2023-09-06 22:20:26 +02:00
dependabot[bot]
2b434e5f82 Bump stylelint-config-standard-scss from 10.0.0 to 11.0.0 (#1342)
Bumps [stylelint-config-standard-scss](https://github.com/stylelint-scss/stylelint-config-standard-scss) from 10.0.0 to 11.0.0.
- [Release notes](https://github.com/stylelint-scss/stylelint-config-standard-scss/releases)
- [Changelog](https://github.com/stylelint-scss/stylelint-config-standard-scss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint-scss/stylelint-config-standard-scss/compare/v10.0.0...v11.0.0)

---
updated-dependencies:
- dependency-name: stylelint-config-standard-scss
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-05 12:57:10 -07:00
omahs
281839fa32 Fix docs typos (#1341) 2023-09-03 00:00:25 -07:00
Matt Wang
4556629454 Update .gitignore (#1327)
This PR moves over the changes from https://github.com/just-the-docs/just-the-docs/pull/1112, namely making the `.gitignore` more descriptive and bringing it to parity with the recommendations from Jekyll.

---------

Co-authored-by: Peter Mosses <18308236+pdmosses@users.noreply.github.com>
2023-08-30 10:22:08 -07:00
Matthew Wang
bebaee046a Update CHANGELOG.md 2023-08-30 10:14:43 -07:00
Michael Flanakin
c115932255 Fix Windows emoji font fallback (#1337) 2023-08-30 10:13:18 -07:00
dependabot[bot]
5deba46197 Bump prettier from 3.0.2 to 3.0.3 (#1338)
Bumps [prettier](https://github.com/prettier/prettier) from 3.0.2 to 3.0.3.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-30 09:43:03 -07:00
Matthew Wang
720dd430d7 Update outdated ruby workflow 2023-08-26 13:41:08 -04:00
Matthew Wang
3a205e545c Fix typo in Changelog 2023-08-26 13:36:37 -04:00
Matthew Wang
8f9c0c44e1 Fix lockfile after version bump 2023-08-26 13:35:24 -04:00
Matthew Wang
cef1203301 v0.6.1 2023-08-26 13:33:17 -04:00
Peter Mosses
6041c7cd8e Fix JS error for pages excluded from navigation (#1332)
Fix #1331

Pages excluded from the navigation do not have a second (page-specific) stylesheet in the head. When JS is enabled, an error arises when such a page is loaded, due to `initNav()` trying to disable a non-existent stylesheet.

This PR stops JS trying to disable the second stylesheet when it doesn't exist.

Note that issue #1331 was reported in connection with optimising the build of the endoflife.date site by following [my suggestion](https://github.com/just-the-docs/just-the-docs/pull/1244#issuecomment-1660246728) in #1244, but the bug also appears on the theme website at https://just-the-docs.com/404.html.
2023-08-26 13:30:53 -04:00
Matt Wang
8d8b444b46 ci: Add Internet Archive to ignored URLs (#1326) 2023-08-22 19:07:18 -04:00
Flo
3bfd1522da Add Gemfile.lock (#1307)
Co-authored-by: Matt Wang <matt@matthewwang.me>
2023-08-22 18:58:59 -04:00
Matt Wang
396613820f ci: bump Ruby to 3.2, changes core test matrix to 3.x (#1325)
Ruby 3.2 has stabilized (and the bug with Liquid has been patched). I think this is a good time for us to bump all of our versions, especially with the discussion in #1307.

Separately, I've:

- changed the core test matrix to be across `3.0`, `3.1`, and `3.2`. Ruby 2 has been EOL for ~ 4 months, while 3.0 is around for about 7 more months. 
- standardized the formatting of our CI ruby versions to be strings; this is because the number `3.0` gets YAML-casted to `3`
2023-08-22 18:49:39 -04:00
dependabot[bot]
82cd4d372d Bump stylelint from 15.10.2 to 15.10.3 (#1324)
Bumps [stylelint](https://github.com/stylelint/stylelint) from 15.10.2 to 15.10.3.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/15.10.2...15.10.3)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-21 10:48:21 -04:00
Matthew Wang
03a99c6557 0.6.0 2023-08-19 21:59:34 -04:00
Matthew Wang
7b181153a8 Prep v0.6.0 2023-08-19 21:57:45 -04:00
Matt Wang
d7e4a808b5 Fix incorrect HTML in theme & docs; validate HTML in CI (#1305)
This PR is motivated from https://github.com/just-the-docs/just-the-docs/pull/1259#issuecomment-1655899503. It adds a new workflow (`CI / Validate HTML (3.1)`) that validates the output of `bundle exec jekyll build`. It does this with two separate tools:

1. The [`html5validator-action`](https://github.com/Cyb3r-Jak3/html5validator-action), which is a wrapper (Docker image + argument forwarding) around the [Nu HTML checker](https://github.com/validator/validator), which is what is used by the [W3C markup validation service](https://validator.w3.org/)
2. [`html-proofer`](https://github.com/gjtorikian/html-proofer), which performs auxiliary checks on the validity of script, image, and link *values*, but not the markup itself
    - note: prior versions of `html-proofer` did use nokogiri to also validate HTML, but the author has elected to remove that feature in versions 4+

I then fix a few issues that are flagged by these tools. I'll split this into,

**changes affecting users**:
- strictly incorrect: in `_layouts/minimal.html`, a `<div>` had duplicate `id`s. I've removed the incorrect one, which is related to...
- semantically wrong (but not technically incorrect): in both `minimal` and `default` layouts, we had two `<div>` tags with `id="main-content-wrap"`. These don't do anything; the associated styling is with the *class* `main-content-wrap`. I've elected to remove these `id`s to avoid confusion and keep the layouts in sync; however, **this is technically a breaking change**
    - observe that `#main-content` is used for the "skip to main content" feature, which I missed in an earlier iteration of this PR

**changes affecting only our documentation**
- a broken link to mermaid docs (I've changed it to a valid one)
- an incorrectly-specified `aux_link` to our own repository
- various links that point to the bare URL `another-page`, which is clearly invalid; I've changed these to point to our homepage
- an incorrect header link
- various links to `http://example.com`, which I've changed to point to our homepage
- an incorrect link to `@flyx`'s profile for the AsciiDoctor gist
- a handful of (otherwise-valid) `http` links that should be `https`: the lunr docs, and patrick's personal website

The commit history shows the Nu validator flagging issues in CI properly in commits [4128b23](4128b23ef2) and [3527220](35272203ba).

## relevant configuration

- I exclude `github.com` URLs from external link checks with `html-proofer`. This is because GitHub does not like it when we ping too frequently, and rate limits us, which in turn provides many false positives. This is aligned with their documentation, which uses this ignore.
- I've pinned the hash for the 3rd-party action that wraps the W3C markup validation service. This aligns with #1148, but means that we'll have to keep an eye on it for updates.
2023-08-19 21:17:26 -04:00
Peter Mosses
9d0ce1c22a Fix the navigation panel (#1244)
* Fix the nav html and cache it

- Remove `active` class from nav html
- Add js to insert `active` class on link to selected page
- Include attempt to generate page-specific css for same styling when js is off

* Refactor nav, breadcrumbs, children_nav

Fix #1118

Improve the modularity of building the nav-panel, breadcrumbs, and children-nav
by making them independent. This also significantly simplifies the Liquid code.

* Manual merge of fix-leakage

Also fix order of breadcrumbs

* Fix order of breadcrumbs

* Revert layout in HTML

Revert to the previous layout in the HTML, to allow the use of `diff` to check the built site.

* Update breadcrumbs.html

Revert inclusion of single breadcrumb for top-level pages.

* Update breadcrumbs.html

Revert to the previous layout in the HTML, to allow the use of `diff` to check the built site.

* Update children_nav.html

Revert to the previous layout in the HTML, to allow the use of `diff` to check the built site.

* Delete nav_init.html

* Update sidebar.html

Caches.

* Add a comment

* Update nav.html

- Comment on independence from page.
- Remove redundant comment.
- Remove superfluous conditionals.

* Update just-the-docs.gemspec

Revert jekyll version spec change.

* Update just-the-docs.gemspec

Revert runtime dependency on kramdown-parser-gfm.

* Revert inclusion of activation.scss.liquid

Inclusion makes HTML of all pages differ from 0.5.1

* Update default.html

Restore deleted "<!DOCTYPE html>"

* Update children_nav.html

Restore line break.

* Delete activation.scss.liquid

This was merely an example of page-specific CSS for use when JS off.

* Remove an unused include parameter

`nav.html` does not depend on `include.key`.

* Generate page-specific styling for nav links and lists in the side-nav

In this PR, the code in `includes/nav.html` is fixed, and none of its elements have class `active`. When JS is enabled, `activateNav()` adds the class `active` to all nav-list-items that enclose the nav-list-link to the current page, so the navigation works as usual. Unobtrusive JS requires the same behaviour when JS is disabled.

- Add `_includes/css/activation.scss.liquid` to compute the indices in the enclosing nav-lists of the nav-list-link to the current page, and generate page-specific styling.
- Insert Liquid code in `_includes/head.html` to include the CSS generated by `_includes/css/activation.scss.liquid` (which depends on `site.color_scheme`).
- Update the toggling in `initNav()` to allow also contraction of enclosing levels when JS is enabled.

Caveat: When JS is enabled, buttons can be used to switch the colour scheme dynamically. The page-specific styling of the site-nav is generated statically, and doesn't change, so the background-image of the nav-list-link to the current page is incorrect. (I guess that could be fixed by generating a style element for each available colour scheme, and using JS to reorder the stylesheets in the DOM.)

A further issue is that the `@import` rules used in `_includes/head.html` cause duplication. Replacing them by `@use` rules would avoid duplication, but that is out of scope for this PR.

* Fix activation for collections

- Adjust generated selectors to pages in collections.
- Expand all folded collections when JS is disabled.

This PR should now make unobtrusive use of JS:

- When JS is disabled, the navigation panel shows links to the top pages in all collections (in contrast to the current version of the theme).
- When JS is enabled, folded collections remain folded until their pages are selected.

* Respect `child_nav_order`

- Assumes reverse order when set to any truthy value.

* Suppress liquid line breaks

* Cache the search for favicon.ico

- Move the code for finding the favicon.ico file to `_includes/favicon.html`.
- Replace that code in `_includes.html` by a cached include of `favicon.html`.

* Add "jekyll-include-cache" in fixtures

Needed when CI ignores the gemspec.

* Add gem "jekyll-include-cache" in fixtures

Needed when CI ignores the gemspec.

* Update head.html

- Avoid duplication of color_scheme CSS in `style` element.
- Avoid generation of whitespace by Liquid code.

* Update sorted_pages.html

- Minor optimisation.
- Minor improvements to layout of Liquid code.

* Ensure split is not at start of rules generated by css/activation.scss.liquid

A custom color scheme might not import any highlighting style rules, so we should not assume that there is anything before the first occurrence of `.site-nav`.

* Update head.html

- Add implicit import of light color scheme.
- Revert to previous Liquid code for removing color scheme rules.

* Manual resolution of merge conflicts with v0.5.2

- Copied replacement of links on nav expanders by buttons.
- Removed (page-dependent) conditions associated with `active`.

* Manual resolution of merge conflict with v0.5.2

If previously "" (neither active nor passive), then `active && passive` is true, and the target is now "active".
If previously only "active", then the target is now just "passive".
If previously only "passive", then the target is now just "active".
The state "active passive" is never used.
The value of `active` is true just when the target is left "active".

* Update fixtures/Gemfile-github-pages

Co-authored-by: Matt Wang <matt@matthewwang.me>

* Update head.html

The result of `activation.scss.liquid` is "" for pages with no `title` or with `nav_exclude`. This update  stops `head.html`  including a `style` element with an invalid body on such pages.

Note that when the result of `scssify` doesn't contain `.site-nav`, `split` produces a one-element array, so `shift` produces an empty array, and `join` then produces an empty string.

* Fix omitted `.site-nav`

Restore the previous prepending of `.site-nav`, which was dropped when suppressing the generation of an incorrect `<style>` element for pages excluded from the navigation.

* Add a footnote about `.site-nav`

* Make setTheme remove background images from nav links

With a fixed nav panel, a <style> in the <head> sets a background image to highlight the nav list link to the current page. The image color depends on site.color_scheme.

Ideally, setTheme(theme) would change the image color to match the theme/scheme. Here, for simplicity, we merely remove the image.

* Explain `nav_fold` in collections.

* Refactor

Attempt at cleaning up the duplicated nav links code and simplifying removal of the background image:

* Add function `navLink()`
* Replace `removeNavBackgroundImages()` by `removeNavBackgroundImage()`
* Replace var `siteNav` by `document.getElementById('site-nav')`
* Replace code in `scrollNav` and `activateNav` by `navLink()`
* Replace a (non-local!) reference to `siteNav` by `document`

* Disable the page-specific stylesheet when JS is enabled

The page-specific `<style>` in the `<head>` is needed only when JS is disabled. Moreover, it incorrectly overrides dynamic stylesheets set by setTheme(theme).

The page-specific stylesheet is assumed to have index 1 in the list of stylesheets. It would be safer to select it by `id`, but adding an `id` can break existing sites.

* Avoid constraint on use of `.site-nav`, and refactor

Avoid the constraint on use of `.site-nav` by determining how many occurrences are produced by `css/activation.scss.liquid` when custom color schemes are ignored.

Move the Liquid code used for generating the page-dependent style element to a new include `head_nav.html`, to simplify `head.html`.

Remove the footnote about `.site-nav` in `docs/customization.md`.

Test the styling with JS disabled, since the resulting style element is disabled by JS.

* Revert "Avoid constraint on use of `.site-nav`, and refactor"

This reverts commit 5284892a7486ef9d2af9929c8a509b89731bb233.

* Avoid constraint on use of `.site-nav`, and refactor

(This corrects a bug in the previous reverted commit for excluded pages such as 404.html.)

Avoid the constraint on use of `.site-nav` by determining how many occurrences are produced by `css/activation.scss.liquid` when custom color schemes are ignored.

Move the Liquid code used for generating the page-dependent style element to a new include `head_nav.html`, to simplify `head.html`.

Remove the footnote about `.site-nav` in `docs/customization.md`.

Test the styling with JS disabled, since the resulting style element is disabled by JS.

* Update comment

* Fix duplicate plugins setting

@mattxwang noticed that the second `plugins` setting was apparently overriding the first, leading to a missing plugin when using `fixtures/Gemfile-github-pages`.

* Avoid double inclusion of activation file

The previous changes to remove the constraint re ".site-nav" duplicated the inclusion of `css/activation.scss.liquid`.
That caused significant extra build time, which the current changes to `head_nav.html` avoid (without affecting the built site).

* Clarify collection configuration docs

* Update and clarify the CHANGELOG

---------

Co-authored-by: Matt Wang <matt@matthewwang.me>
2023-08-18 20:35:14 +02:00
dependabot[bot]
d041f59c6d Bump prettier from 3.0.1 to 3.0.2 (#1318)
Bumps [prettier](https://github.com/prettier/prettier) from 3.0.1 to 3.0.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.0.1...3.0.2)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-16 11:34:40 -04:00
dependabot[bot]
7602fa1eae Bump prettier from 3.0.0 to 3.0.1 (#1312)
Bumps [prettier](https://github.com/prettier/prettier) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.0.0...3.0.1)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-03 13:19:13 -04:00
Matthew Wang
e044134886 Update CHANGELOG 2023-07-28 12:08:16 -04:00
Matt Wang
525742ee05 Fix missing closing </button> tag in sidebar.html (#1304)
Ref: https://github.com/just-the-docs/just-the-docs/pull/1259#issuecomment-1655899503.
2023-07-28 12:07:01 -04:00
Matt Wang
f246498a8f Update CHANGELOG.md 2023-07-24 19:13:18 -04:00
Valters Jansons
e8032a0c2a Add theme variable to specify color-scheme for :root (#1280)
Previously, the color scheme information was not passed on to the
browser. This could result in scrollbars being light, when the dark
theme is in use.

Now, `:root { color-scheme: $color-scheme; }` is specified.
This will ensure the color theme is enforced.

Ref: https://developer.mozilla.org/en-US/docs/Web/CSS/color-scheme
2023-07-24 19:09:32 -04:00
Brian Blaylock
caa9946914 Add example of using <details> tag in Markdown kitchen sink (#1297)
* Add example of using <details> tag in Markdown kitchen sink

I hoped you would consider adding this example of how to use the <details> tag in the Markdown kitchen sink. I found some useful information in https://github.com/just-the-docs/just-the-docs/issues/246 and, this an example would be handy on this page.

* removed style and called it "collapsed section" instead of dropdown

Also added a link to GitHub's description of how to write a collapsed section.
2023-07-19 21:20:21 +00:00
dependabot[bot]
b4d29cc055 Bump stylelint from 15.10.1 to 15.10.2 (#1296)
Bumps [stylelint](https://github.com/stylelint/stylelint) from 15.10.1 to 15.10.2.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/15.10.1...15.10.2)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-19 09:37:49 -04:00
dependabot[bot]
c9d3b967cd Bump prettier from 2.8.8 to 3.0.0 (#1291)
* Bump prettier from 2.8.8 to 3.0.0

Bumps [prettier](https://github.com/prettier/prettier) from 2.8.8 to 3.0.0.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.8.8...3.0.0)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Run `npm run format`

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Matthew Wang <matt@matthewwang.me>
2023-07-08 19:11:45 -04:00
dependabot[bot]
95a30db50f Bump stylelint from 15.10.0 to 15.10.1 (#1292)
Bumps [stylelint](https://github.com/stylelint/stylelint) from 15.10.0 to 15.10.1.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/15.10.0...15.10.1)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-06 06:54:40 -04:00
dependabot[bot]
df03a0423b Bump stylelint from 15.9.0 to 15.10.0 (#1289)
Bumps [stylelint](https://github.com/stylelint/stylelint) from 15.9.0 to 15.10.0.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/15.9.0...15.10.0)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-05 09:32:42 -04:00
Matthew Wang
9959191af1 v0.5.4 2023-07-05 01:05:57 -04:00
dependabot[bot]
75a06359aa Bump stylelint-config-standard-scss from 9.0.0 to 10.0.0 (#1287)
Bumps [stylelint-config-standard-scss](https://github.com/stylelint-scss/stylelint-config-standard-scss) from 9.0.0 to 10.0.0.
- [Release notes](https://github.com/stylelint-scss/stylelint-config-standard-scss/releases)
- [Changelog](https://github.com/stylelint-scss/stylelint-config-standard-scss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint-scss/stylelint-config-standard-scss/compare/v9.0.0...v10.0.0)

---
updated-dependencies:
- dependency-name: stylelint-config-standard-scss
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-30 09:45:46 -04:00
Matt Wang
c21def31fa Fix .label-* coloring bug (#1286)
Closes #1285.

(missed this in code review, which is also my bad! this is because the `:not` selector changes specificity, which in turn changes the cascade)
2023-06-27 03:13:29 -07:00
Matt Wang
1359fcb9ca Fix Mermaid labels inheriting theme .label styling (#1278)
This is the minimum code change that fixes the issue discussed in #1271 and #1272. In short, Mermaid has its own `.label` that it uses for styling + JS behaviour. To fix this, I add a relatively simple `:not()` that prevents usage with `g`, which is invalid in non-SVG HTML anyways. There should be minimal performance impact.

To test, observe:

- on `main`, selecting the "A" label in https://just-the-docs.com/docs/ui-components/code/#mermaid-diagram-code-blocks has the class `.label`; dev tools will indicate that JtD's `.label` styling is applied
- but, on this branch, dev tools will indicate that the `.label` styling is not applied; observe otherwise that the page behaves the same

Closes #1272.
2023-06-24 16:57:01 -07:00
dependabot[bot]
24372f02a9 Bump stylelint from 15.8.0 to 15.9.0 (#1281)
Bumps [stylelint](https://github.com/stylelint/stylelint) from 15.8.0 to 15.9.0.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/15.8.0...15.9.0)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-23 10:14:49 -07:00
dependabot[bot]
20a80e4ac1 Bump stylelint from 15.7.0 to 15.8.0 (#1276)
Bumps [stylelint](https://github.com/stylelint/stylelint) from 15.7.0 to 15.8.0.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/15.7.0...15.8.0)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-19 14:08:34 -07:00
99 changed files with 3501 additions and 3553 deletions

2
.github/FUNDING.yml vendored Normal file
View File

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

View File

@@ -16,10 +16,10 @@ jobs:
matrix:
jekyll-version: [3.9, 4.3]
os: [ ubuntu-latest, macos-latest, windows-latest ]
ruby-version: [2.7, 3.1]
ruby-version: ["3.1", "3.2", "3.3"]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup Ruby ${{ matrix.ruby-version }}
uses: ruby/setup-ruby@v1
with:
@@ -42,11 +42,11 @@ jobs:
name: Build (github-pages gem)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.1'
ruby-version: "3.2"
bundler-cache: false
- name: Bundle Install
run: bundle install
@@ -57,6 +57,39 @@ jobs:
env:
BUNDLE_GEMFILE: fixtures/Gemfile-github-pages
validate:
name: Validate HTML
strategy:
fail-fast: false
matrix:
ruby-version: ["3.2"]
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/"
env:
NOKOGIRI_USE_SYSTEM_LIBRARIES: true
assets:
name: Test CSS and JS
runs-on: ubuntu-latest
@@ -66,9 +99,9 @@ jobs:
node-version: [18.x]
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- run: npm install

View File

@@ -30,16 +30,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.1' # Not needed with a .ruby-version file
ruby-version: "3.3"
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: Setup Pages
id: pages
uses: actions/configure-pages@v2
uses: actions/configure-pages@v3
- name: Build with Jekyll
# Outputs to the './_site' directory by default
run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"
@@ -47,7 +47,7 @@ jobs:
JEKYLL_ENV: production
- name: Upload artifact
# Automatically uploads an artifact from the './_site' directory by default
uses: actions/upload-pages-artifact@v1
uses: actions/upload-pages-artifact@v2
# Deployment job
deploy:
@@ -59,4 +59,4 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v1
uses: actions/deploy-pages@v2

View File

@@ -9,11 +9,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Ruby 3.1
uses: actions/setup-ruby@v1
- uses: actions/checkout@v4
- name: Setup Ruby 3.3
uses: ruby/setup-ruby@v1
with:
ruby-version: 3.1
ruby-version: "3.3"
- name: Publish to GPR
run: |

33
.gitignore vendored
View File

@@ -1,9 +1,30 @@
# 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
.bundle
.ruby-version
.jekyll-cache
.sass-cache
_site
Gemfile.lock
node_modules
.DS_Store

File diff suppressed because it is too large Load Diff

View File

@@ -3,4 +3,7 @@ gemspec
gem "jekyll-github-metadata", ">= 2.15"
gem "webrick", "~> 1.7"
gem "jekyll-include-cache", group: :jekyll_plugins
gem "jekyll-sitemap", group: :jekyll_plugins
gem "html-proofer", "~> 5.0", :group => :development

165
Gemfile.lock Normal file
View File

@@ -0,0 +1,165 @@
PATH
remote: .
specs:
just-the-docs (0.9.0)
jekyll (>= 3.8.5)
jekyll-include-cache
jekyll-seo-tag (>= 2.0)
rake (>= 12.3.1)
GEM
remote: https://rubygems.org/
specs:
Ascii85 (1.1.0)
addressable (2.8.6)
public_suffix (>= 2.0.2, < 6.0)
afm (0.2.2)
async (2.11.0)
console (~> 1.25, >= 1.25.2)
fiber-annotation
io-event (~> 1.5, >= 1.5.1)
timers (~> 4.1)
bigdecimal (3.1.8)
colorator (1.1.0)
concurrent-ruby (1.2.3)
console (1.25.2)
fiber-annotation
fiber-local (~> 1.1)
json
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.16.3)
fiber-annotation (0.2.0)
fiber-local (1.1.0)
fiber-storage
fiber-storage (0.1.0)
forwardable-extended (2.6.0)
google-protobuf (4.26.1-arm64-darwin)
rake (>= 13)
google-protobuf (4.26.1-x86_64-linux)
rake (>= 13)
hashery (2.1.2)
html-proofer (5.0.9)
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.4)
concurrent-ruby (~> 1.0)
io-event (1.5.1)
jekyll (4.3.3)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (~> 1.0)
jekyll-sass-converter (>= 2.0, < 4.0)
jekyll-watch (~> 2.0)
kramdown (~> 2.3, >= 2.3.1)
kramdown-parser-gfm (~> 1.0)
liquid (~> 4.0)
mercenary (>= 0.3.6, < 0.5)
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.7.2)
kramdown (2.4.0)
rexml
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)
net-http (0.4.1)
uri
nokogiri (1.16.5-arm64-darwin)
racc (~> 1.4)
nokogiri (1.16.5-x86_64-linux)
racc (~> 1.4)
octokit (6.1.1)
faraday (>= 1, < 3)
sawyer (~> 0.9)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
pdf-reader (2.12.0)
Ascii85 (~> 1.0)
afm (~> 0.2.1)
hashery (~> 2.0)
ruby-rc4
ttfunk
public_suffix (5.0.5)
racc (1.7.3)
rainbow (3.1.1)
rake (13.2.1)
rb-fsevent (0.11.2)
rb-inotify (0.10.1)
ffi (~> 1.0)
rexml (3.3.6)
strscan
rouge (4.2.1)
ruby-rc4 (0.1.5)
safe_yaml (1.0.5)
sass-embedded (1.75.0-arm64-darwin)
google-protobuf (>= 3.25, < 5.0)
sass-embedded (1.75.0-x86_64-linux-gnu)
google-protobuf (>= 3.25, < 5.0)
sawyer (0.9.2)
addressable (>= 2.3.5)
faraday (>= 0.17.3, < 3)
strscan (3.1.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
timers (4.3.5)
ttfunk (1.8.0)
bigdecimal (~> 3.1)
typhoeus (1.4.1)
ethon (>= 0.9.0)
unicode-display_width (2.5.0)
uri (0.13.0)
webrick (1.8.1)
yell (2.2.2)
zeitwerk (2.6.13)
PLATFORMS
arm64-darwin
x86_64-linux-gnu
DEPENDENCIES
bundler (>= 2.3.5)
html-proofer (~> 5.0)
jekyll-github-metadata (>= 2.15)
jekyll-include-cache
jekyll-sitemap
just-the-docs!
BUNDLED WITH
2.5.9

View File

@@ -41,13 +41,121 @@ This document contains instructions on how to migrate and upgrade Just the Docs
> and pull the changes of a new release to your clone,
> you may need to resolve merge conflicts.
[CHANGELOG]: {{ site.baseurl }}{% link CHANGELOG.md %}
[CHANGELOG]: {% link CHANGELOG.md %}
## 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` concering `setup.scss`. To provide context:
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
@@ -273,7 +381,7 @@ For changes since v0.3.3, the log usually references the merged PR that made the
#### 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.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/index.md %}#mermaid-diagram-code-blocks) for more.
- Multiple Google Analytics tags are now supported. PR: [#1029]
#### Customization

View File

@@ -21,6 +21,13 @@ repository: just-the-docs/just-the-docs # for github-metadata
permalink: pretty
defaults:
- scope:
path: "docs" # an empty string here means all files in the project
type: "pages"
values:
layout: "default"
exclude:
# from https://github.com/jekyll/jekyll/blob/master/lib/site_template/_config.yml:
- .sass-cache/
@@ -78,6 +85,8 @@ search:
# Enable or disable the search button that appears in the bottom right corner of every page
# Supports true or false (default)
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
enable_copy_code_button: true
@@ -102,11 +111,15 @@ heading_anchors: true
# Aux links for the upper right navigation
aux_links:
"Just the Docs on GitHub":
- "//github.com/just-the-docs/just-the-docs"
- "https://github.com/just-the-docs/just-the-docs"
# Makes Aux links open in a new tab. Default is 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
# nav_sort: case_insensitive # default, equivalent to nil
nav_sort: case_sensitive # Capital letters sorted before lowercase
@@ -116,6 +129,13 @@ nav_external_links:
- title: Just the Docs on GitHub
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
# appears at the bottom of every page's main content
@@ -123,14 +143,12 @@ nav_external_links:
back_to_top: true
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
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
# Footer "Edit this page on GitHub" link text
gh_edit_link: true # show or hide edit this page link
gh_edit_link_text: "Edit this page on GitHub"
@@ -168,6 +186,8 @@ callouts:
plugins:
- jekyll-seo-tag
- jekyll-github-metadata
- jekyll-include-cache
- jekyll-sitemap
kramdown:
syntax_highlighter_opts:

View File

@@ -1,43 +1,96 @@
{%- comment -%}
Include as: {%- include components/breadcrumbs.html -%}
Depends on: page, site.
Includes: components/site_nav.html.
Results in: HTML for the breadcrumbs component.
Overwrites:
pages_list, parent_page, grandparent_page.
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 -%}
{%- if page.url != "/" and page.parent and page.title -%}
{%- assign pages_list = site[page.collection]
| default: site.html_pages
| where_exp: "item", "item.title != nil"
| where_exp: "item", "item.has_children != nil" -%}
{%- capture nav_list_link -%}
<a href="{{ page.url | relative_url }}" class="nav-list-link">
{%- endcapture -%}
{%- if page.grand_parent -%}
{%- assign parent_page = pages_list
| where: "title", page.parent
| where: "parent", page.grand_parent
| first -%}
{%- assign grandparent_page = pages_list
| where: "title", page.grand_parent
| first -%}
{%- else -%}
{%- assign parent_page = pages_list
| where: "title", page.parent
| where_exp: "item", "item.parent == nil"
| first -%}
{%- capture site_nav -%}
{%- include_cached components/site_nav.html all=true -%}
{%- 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">
{% if page.parent -%}
{%- if page.grand_parent %}
<li class="breadcrumb-nav-list-item"><a href="{{ grandparent_page.url | relative_url }}">{{ page.grand_parent }}</a></li>
{%- endif %}
<li class="breadcrumb-nav-list-item"><a href="{{ parent_page.url | relative_url }}">{{ page.parent }}</a></li>
{% endif -%}
{%- for nav_breadcrumb in nav_breadcrumbs %}
<li class="breadcrumb-nav-list-item">{{ nav_breadcrumb }}</li>
{%- endfor %}
<li class="breadcrumb-nav-list-item"><span>{{ page.title }}</span></li>
</ol>
</nav>
{% if site.nav_error_report %}
{{ nav_error_report }}
{% endif %}
{%- endif -%}

View File

@@ -1,33 +1,89 @@
{%- comment -%}
Include as: {%- include components/children_nav.html -%}
Depends on: page, site.
Depends on: page, site, nav_breadcrumbs.
Results in: HTML for the children-navigation component.
Includes:
sorted_pages.html
toc_heading_custom.html
Includes: components/nav/sorted.html, toc_heading_custom.html.
Overwrites:
child_pages.
nav_ancestor_links, nav_top_node_titles, nav_child_candidates, nav_children,
nav_child, nav_child_ok, nav_child_ancestor, nav_sorted.
{%- endcomment -%}
{%- if page.has_children == true and page.has_toc != false -%}
{%- assign child_pages = site[page.collection]
| default: site.html_pages
| where: "parent", page.title
| where: "grand_parent", page.parent -%}
{%- 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.
{%- endcomment -%}
{%- include sorted_pages.html pages = child_pages -%}
{%- if page.has_children == false -%}
{%- assign nav_children = "" | split: "" -%}
{%- else -%}
{%- assign nav_children = nil -%}
{%- capture nav_list_link -%}
<a href="{{ page.url | relative_url }}" class="nav-list-link">
{%- endcapture -%}
{%- capture site_nav -%}
{%- include_cached components/site_nav.html all=true -%}
{%- 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 sorted_pages = sorted_pages | reverse -%}
{%- endif -%}
{%- assign nav_children = nav_children | reverse -%}
{%- endif -%}
<hr>
{% include toc_heading_custom.html %}
<ul>
{% for child in sorted_pages %}
{% for nav_child in nav_children %}
<li>
<a href="{{ child.url | relative_url }}">{{ child.title }}</a>{% if child.summary %} - {{ child.summary }}{% endif %}
<a href="{{ nav_child.url | relative_url }}">{{ nav_child.title }}</a>{% if nav_child.summary %} - {{ nav_child.summary }}{% endif %}
</li>
{% endfor %}
</ul>
{%- endif -%}

View File

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

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

@@ -0,0 +1,23 @@
{%- 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,9 +1,9 @@
{%- comment -%}
Include as: {%- include sorted_pages.html pages = pages -%}
Include as: {%- include components/nav/sorted.html pages=page_array -%}
Depends on: include.pages.
Assigns to: sorted_pages.
Assigns to: nav_sorted.
Overwrites:
nav_order_pages, title_order_pages,
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 -%}
@@ -34,24 +34,50 @@
| 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.
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 `jsonify` is `"` only for strings.
Grouping by a single character also ensures the number of groups is small.
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 nav_number_pages = "" | split: "" -%}
{%- assign nav_string_pages = "" | split: "" -%}
{%- 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" -%}
| group_by_exp: "item",
"item.nav_order | jsonify | slice: 0 | remove: double_quote | size" -%}
{%- for group in nav_order_groups -%}
{%- if group.name == '"' -%}
{%- if group.name == 0 -%}
{%- assign nav_string_pages = group.items -%}
{%- else -%}
{%- assign nav_number_pages = nav_number_pages | concat: 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" -%}
@@ -65,18 +91,6 @@
{%- 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 -%}
@@ -89,7 +103,7 @@
{%- endif -%}
{%- endunless -%}
{%- assign sorted_pages = nav_number_pages
{%- assign nav_sorted = nav_number_pages
| concat: nav_string_pages
| concat: title_number_pages
| concat: title_string_pages -%}

View File

@@ -1,62 +1,23 @@
{%- 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="site-header" role="banner">
<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">
<svg viewBox="0 0 24 24" class="icon" aria-hidden="true"><use xlink:href="#svg-menu"></use></svg>
</a>
</div>
<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 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 -%}
<button class="nav-list-expander btn-reset" aria-label="Toggle collection {{ collection_value.name }}" aria-pressed="{% if page.collection == collection_key %}true{% else %}false{% endif %}">
<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 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>
</div>
{% include_cached components/site_nav.html %}
{% capture nav_footer_custom %}
{%- include nav_footer_custom.html -%}

View File

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

@@ -0,0 +1,325 @@
{%- 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 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 -%}
{%- capture site_nav -%}
{%- include_cached components/site_nav.html -%}
{%- 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 -%}

23
_includes/favicon.html Normal file
View File

@@ -0,0 +1,23 @@
{%- 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,18 +1,26 @@
{%- comment -%}
This file can be used to fix the HTML produced by Jekyll for highlighted
code with line numbers.
This file was previously used to "fix" the HTML produced by Jekyll for
highlighted code with line numbers. While it often resolves layout issues
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/)
It works with `{% highlight some_language linenos %}...{% endhighlight %}`
and with the Kramdown option to add line numbers to fenced code.
The next portion of this file, including the comments and the workaround,
are preserved for backwards comptability.
ACKNOWLEDGEMENTS
The implementation was derived from the workaround provided by
Dmitry Hrabrov (DeXP) at
https://github.com/penibelst/jekyll-compress-html/issues/71#issuecomment-188144901
EXPLANATION
EXPLANATION (OLD)
The HTML produced by Rouge highlighting with lie numbers is of the form
`code table`. Jekyll (<= 4.1.1) always wraps the highlighted HTML
The HTML produced by Rouge highlighting with line numbers is of the form
`code table`. Jekyll always wraps the highlighted HTML
with `pre`. This wrapping is not only unnecessary, but also transforms
the conforming HTML produced by Rouge to non-conforming HTML, which
results in HTML validation error reports.

View File

@@ -1,9 +1,27 @@
{%- 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>
<meta charset="UTF-8">
<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-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 %}
{% assign ga_tracking_ids = site.ga_tracking | split: "," %}
<script async src="https://www.googletagmanager.com/gtag/js?id={{ ga_tracking_ids.first }}"></script>
@@ -26,14 +44,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
{% 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 %}
{% include_cached favicon.html %}
{% seo %}

View File

@@ -1,106 +0,0 @@
{%- comment -%}
Include as: {%- include nav.html pages = pages key = key -%}
Depends on: include.pages, include.key, page, site.
Results in: HTML for the navigation panel.
Includes:
sorted_pages.html
Overwrites:
nav_pages, first_level_pages, second_level_pages, third_level_pages,
node, children_list, child, grand_children_list, grand_child.
{%- endcomment -%}
{%- assign nav_pages = include.pages
| where_exp: "item", "item.title != nil"
| where_exp: "item", "item.nav_exclude != true" -%}
{%- include sorted_pages.html pages = nav_pages -%}
{%- assign first_level_pages = sorted_pages
| where_exp: "item", "item.parent == nil" -%}
{%- assign second_level_pages = sorted_pages
| where_exp: "item", "item.parent != nil"
| where_exp: "item", "item.grand_parent == nil" -%}
{%- assign third_level_pages = sorted_pages
| where_exp: "item", "item.grand_parent != nil" -%}
{%- comment -%}
The order of sibling pages in `sorted_pages` determines the order of display of
links to them in lists of navigation links.
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 -%}
<button class="nav-list-expander btn-reset" aria-label="toggle items in {{ node.title }} category" aria-pressed="{% 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 %}true{% else %}false{% endif %}">
<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{% 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 -%}
<button class="nav-list-expander btn-reset" aria-label="toggle items in {{ child.title }} category" aria-pressed="{% if page.url == child.url or page.parent == child.title %}true{% else %}false{% endif %}">
<svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg>
</button>
{%- 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>

View File

@@ -9,10 +9,16 @@ layout: table_wrappers
<body>
<a class="skip-to-main" href="#main-content">Skip to main content</a>
{% include icons/icons.html %}
{% if page.nav_enabled == true %}
{% 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">
{% include components/header.html %}
<div id="main-content-wrap" class="main-content-wrap">
<div class="main-content-wrap">
{% include components/breadcrumbs.html %}
<div id="main-content" class="main-content">
<main>
@@ -22,7 +28,7 @@ layout: table_wrappers
{{ content }}
{% endif %}
{% if page.has_children == true and page.has_toc != false %}
{% if page.has_toc != false %}
{% include components/children_nav.html %}
{% endif %}
</main>

View File

@@ -1,34 +1,6 @@
---
layout: table_wrappers
layout: default
nav_enabled: false
---
<!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 %}
<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 %}
{% endif %}
{% include components/footer.html %}
</div>
</div>
{% if site.mermaid %}
{% include components/mermaid.html %}
{% endif %}
</body>
</html>

View File

@@ -1,14 +1,18 @@
// Base element style overrides
// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id
:root {
color-scheme: $color-scheme;
}
* {
box-sizing: border-box;
}
html {
@include fs-4;
scroll-behavior: smooth;
@include fs-4;
}
body {

View File

@@ -17,7 +17,9 @@
background-color: $base-button-color;
border-width: 0;
border-radius: $border-radius;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
box-shadow:
0 1px 2px rgba(0, 0, 0, 0.12),
0 3px 10px rgba(0, 0, 0, 0.08);
appearance: none;
&:focus {
@@ -87,7 +89,9 @@
&:focus {
text-decoration: none;
outline: none;
box-shadow: inset 0 0 0 2px $grey-dk-100, 0 0 0 3px rgba(blue, 0.25);
box-shadow:
inset 0 0 0 2px $grey-dk-100,
0 0 0 3px rgba(blue, 0.25);
}
&:focus:hover,

View File

@@ -142,10 +142,10 @@ div.highlighter-rouge {
// for AsciiDoc. we also need to fix the margins for its parent container.
div.listingblock {
@include scroll-and-spacing("div.content", "div.content > pre");
margin-top: 0;
margin-bottom: $sp-3;
@include scroll-and-spacing("div.content", "div.content > pre");
}
// {% highlight LANG %}...{% endhighlight %},
@@ -176,12 +176,12 @@ figure.highlight {
td,
pre {
@include fs-2;
min-width: 0;
padding: 0;
background-color: $code-background-color;
border: 0;
@include fs-2;
}
td.gl {

View File

@@ -1,3 +1,4 @@
$color-scheme: dark;
$body-background-color: $grey-dk-300;
$body-heading-color: $grey-lt-000;
$body-text-color: $grey-lt-300;

View File

@@ -1,3 +1,4 @@
$color-scheme: light !default;
$body-background-color: $white !default;
$body-heading-color: $grey-dk-300 !default;
$body-text-color: $grey-dk-100 !default;

View File

@@ -1,7 +1,11 @@
// Labels (not the form kind)
.label,
.label-blue {
// this :not() prevents a style clash with Mermaid.js's
// diagram labels, which also use .label
// 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;
padding: 0.16em 0.56em;
margin-right: $sp-2;
@@ -10,24 +14,24 @@
text-transform: uppercase;
vertical-align: middle;
background-color: $blue-100;
@include fs-2;
border-radius: 12px;
@include fs-2;
}
.label-green {
.label-green:not(g) {
background-color: $green-200;
}
.label-purple {
.label-purple:not(g) {
background-color: $purple-100;
}
.label-red {
.label-red:not(g) {
background-color: $red-200;
}
.label-yellow {
.label-yellow:not(g) {
color: $grey-dk-200;
background-color: $yellow-200;
}

View File

@@ -19,12 +19,9 @@
width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});
min-width: $nav-width;
}
}
.main {
& + .main {
@include mq(md) {
position: relative;
max-width: $content-width;
margin-left: $nav-width-md;
}
@@ -37,14 +34,42 @@
);
// 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 {
@include container;
padding-top: $gutter-spacing-sm;
padding-bottom: $gutter-spacing-sm;
@include container;
@include mq(md) {
padding-top: $gutter-spacing;
padding-bottom: $gutter-spacing;
@@ -53,23 +78,12 @@
.main-header {
z-index: 0;
display: none;
background-color: $sidebar-color;
border-bottom: $border $border-color;
@include mq(md) {
display: flex;
justify-content: space-between;
height: $header-height;
background-color: $body-background-color;
border-bottom: $border $border-color;
}
&.nav-open {
display: block;
@include mq(md) {
display: flex;
}
}
}
@@ -112,8 +126,6 @@
}
.site-title {
@include container;
flex-grow: 1;
display: flex;
height: 100%;
@@ -121,6 +133,9 @@
padding-top: $sp-3;
padding-bottom: $sp-3;
color: $body-heading-color;
@include container;
@include fs-6;
@include mq(md) {
@@ -186,14 +201,15 @@ body {
// stylelint-enable selector-max-type
.site-footer {
@include container;
position: absolute;
bottom: 0;
left: 0;
padding-top: $sp-4;
padding-bottom: $sp-4;
color: $grey-dk-000;
@include container;
@include fs-2;
@include mq(md) {

View File

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

View File

@@ -23,7 +23,9 @@
height: $sp-8;
overflow: hidden;
border-radius: $border-radius;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
box-shadow:
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};
@include mq(md) {
@@ -96,7 +98,9 @@
background-color: $search-background-color;
border-bottom-right-radius: $border-radius;
border-bottom-left-radius: $border-radius;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
box-shadow:
0 1px 2px rgba(0, 0, 0, 0.12),
0 3px 10px rgba(0, 0, 0, 0.08);
@include mq(md) {
top: 100%;
@@ -230,7 +234,9 @@
background-color: $search-background-color;
border: 1px solid rgba($link-color, 0.3);
border-radius: #{$sp-9 * 0.5};
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
box-shadow:
0 1px 2px rgba(0, 0, 0, 0.12),
0 3px 10px rgba(0, 0, 0, 0.08);
align-items: center;
justify-content: center;
}
@@ -244,7 +250,9 @@
height: 0;
background-color: rgba(0, 0, 0, 0.3);
opacity: 0;
transition: opacity ease $transition-duration, width 0s $transition-duration,
transition:
opacity ease $transition-duration,
width 0s $transition-duration,
height 0s $transition-duration;
}
@@ -264,7 +272,9 @@
@include mq(md) {
width: $search-results-width;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
box-shadow:
0 1px 2px rgba(0, 0, 0, 0.12),
0 3px 10px rgba(0, 0, 0, 0.08);
}
}
@@ -290,7 +300,10 @@
width: 100%;
height: 100%;
opacity: 1;
transition: opacity ease $transition-duration, width 0s, height 0s;
transition:
opacity ease $transition-duration,
width 0s,
height 0s;
}
@include mq(md) {

View File

@@ -1,7 +1,8 @@
// Typography
// prettier-ignore
$body-font-family: system-ui, -apple-system, blinkmacsystemfont, "Segoe UI",
roboto, "Helvetica Neue", arial, sans-serif !default;
roboto, "Helvetica Neue", arial, sans-serif, "Segoe UI Emoji" !default;
$mono-font-family: "SFMono-Regular", menlo, consolas, monospace !default;
$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems
$body-line-height: 1.4 !default;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -5,204 +5,269 @@ pre.highlight {
background: #f9f9f9;
color: #383942;
}
.highlight pre {
background: #f9f9f9;
}
.highlight .hll {
background: #f9f9f9;
}
.highlight .c {
color: #9fa0a6;
font-style: italic;
}
.highlight .err {
color: #fff;
background-color: #e05151;
}
.highlight .k {
color: #a625a4;
}
.highlight .l {
color: #50a04f;
}
.highlight .n {
color: #383942;
}
.highlight .o {
color: #383942;
}
.highlight .p {
color: #383942;
}
.highlight .cm {
color: #9fa0a6;
font-style: italic;
}
.highlight .cp {
color: #9fa0a6;
font-style: italic;
}
.highlight .c1 {
color: #9fa0a6;
font-style: italic;
}
.highlight .cs {
color: #9fa0a6;
font-style: italic;
}
.highlight .ge {
font-style: italic;
}
.highlight .gs {
font-weight: 700;
}
.highlight .kc {
color: #a625a4;
}
.highlight .kd {
color: #a625a4;
}
.highlight .kn {
color: #a625a4;
}
.highlight .kp {
color: #a625a4;
}
.highlight .kr {
color: #a625a4;
}
.highlight .kt {
color: #a625a4;
}
.highlight .ld {
color: #50a04f;
}
.highlight .m {
color: #b66a00;
}
.highlight .s {
color: #50a04f;
}
.highlight .na {
color: #b66a00;
}
.highlight .nb {
color: #ca7601;
}
.highlight .nc {
color: #ca7601;
}
.highlight .no {
color: #ca7601;
}
.highlight .nd {
color: #ca7601;
}
.highlight .ni {
color: #ca7601;
}
.highlight .ne {
color: #ca7601;
}
.highlight .nf {
color: #383942;
}
.highlight .nl {
color: #ca7601;
}
.highlight .nn {
color: #383942;
}
.highlight .nx {
color: #383942;
}
.highlight .py {
color: #ca7601;
}
.highlight .nt {
color: #e35549;
}
.highlight .nv {
color: #ca7601;
}
.highlight .ow {
font-weight: 700;
}
.highlight .w {
color: #f8f8f2;
}
.highlight .mf {
color: #b66a00;
}
.highlight .mh {
color: #b66a00;
}
.highlight .mi {
color: #b66a00;
}
.highlight .mo {
color: #b66a00;
}
.highlight .sb {
color: #50a04f;
}
.highlight .sc {
color: #50a04f;
}
.highlight .sd {
color: #50a04f;
}
.highlight .s2 {
color: #50a04f;
}
.highlight .se {
color: #50a04f;
}
.highlight .sh {
color: #50a04f;
}
.highlight .si {
color: #50a04f;
}
.highlight .sx {
color: #50a04f;
}
.highlight .sr {
color: #0083bb;
}
.highlight .s1 {
color: #50a04f;
}
.highlight .ss {
color: #0083bb;
}
.highlight .bp {
color: #ca7601;
}
.highlight .vc {
color: #ca7601;
}
.highlight .vg {
color: #ca7601;
}
.highlight .vi {
color: #e35549;
}
.highlight .il {
color: #b66a00;
}
.highlight .gu {
color: #75715e;
}
.highlight .gd {
color: #e05151;
}
.highlight .gi {
color: #43d089;
}
.highlight .language-json .w + .s2 {
color: #e35549;
}
.highlight .language-json .kc {
color: #0083bb;
}

View File

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

View File

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

View File

@@ -1,4 +1,5 @@
---
layout: null
---
(function (jtd, undefined) {
@@ -39,6 +40,8 @@ function initNav() {
const mainHeader = document.getElementById('main-header');
const menuButton = document.getElementById('menu-button');
disableHeadStyleSheets();
jtd.addEvent(menuButton, 'click', function(e){
e.preventDefault();
@@ -66,6 +69,26 @@ function initNav() {
{%- 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 %}
// Site search
@@ -123,6 +146,18 @@ function searchLoaded(index, docs) {
var currentInput;
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() {
document.documentElement.classList.add('search-active');
}
@@ -461,26 +496,74 @@ jtd.setTheme = function(theme) {
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
function scrollNav() {
const href = document.location.pathname;
const siteNav = document.getElementById('site-nav');
const targetLink = siteNav.querySelector('a[href="' + href + '"], a[href="' + href + '/"]');
const targetLink = navLink();
if (targetLink) {
const rect = targetLink.getBoundingClientRect();
siteNav.scrollBy(0, rect.top - 3*rect.height);
targetLink.scrollIntoView({ block: "center" });
targetLink.removeAttribute('href');
}
}
// 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
jtd.onReady(function(){
if (document.getElementById('site-nav')) {
initNav();
activateNav();
scrollNav();
}
{%- if site.search_enabled != false %}
initSearch();
{%- endif %}
scrollNav();
});
// Copy button on code

View File

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

View File

@@ -1,5 +1,4 @@
---
layout: default
title: Configuration
nav_order: 2
---
@@ -66,6 +65,8 @@ search:
# Enable or disable the search button that appears in the bottom right corner of every page
# Supports true or false (default)
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
@@ -85,7 +86,7 @@ mermaid:
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.md %}#mermaid-diagram-code-blocks) for more configuration options and information.
See [the Code documentation]({% link docs/ui-components/code/index.md %}#mermaid-diagram-code-blocks) for more configuration options and information.
## Aux links
@@ -99,6 +100,14 @@ aux_links:
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
```yaml
@@ -116,7 +125,7 @@ New (v0.4.0)
{: .label .label-green }
External links can be added to the navigation through the `nav_external_links` option.
See [Navigation Structure]({% link docs/navigation-structure.md %}#external-navigation-links) for more details.
See [Navigation Structure]({% link docs/navigation/main/external.md %}) for more details.
## Footer content
@@ -143,7 +152,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._
- 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; see examples and more information [at this link.](https://apidock.com/ruby/DateTime/strftime)
- `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)
- `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_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/))
@@ -295,6 +304,16 @@ just_the_docs:
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.
This creates categories in the navigation with the configured names.

View File

@@ -1,5 +1,4 @@
---
layout: default
title: Customization
nav_order: 6
---
@@ -21,8 +20,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:
#### Example
{: .no_toc }
### Example: preview dark color scheme
{: .no_toc .text-delta }
```yaml
# Color scheme supports "light" (default) and "dark"
@@ -52,7 +51,7 @@ 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 are 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.
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
@@ -77,8 +76,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:
#### Example
{: .no_toc }
#### Example: custom link color
{: .no_toc .text-delta }
```scss
$link-color: $blue-000;
@@ -143,10 +142,10 @@ 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`.
This will allow for all overrides to be kept in a single file, and for any upstream changes to still be applied.
For example, if you'd like to add your own styles for printing a page, you could add the following styles.
### Example: custom print styles
{: .no_toc .text-delta }
#### Example
{: .no_toc }
For example, if you'd like to add your own styles for printing a page, you could add the following styles.
```scss
// Print-only styles.
@@ -178,9 +177,9 @@ New (v0.4.0)
`_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-structure.md %}#auto-generating-table-of-contents) 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/children.md %}) after the page's content.
#### Example
#### Example: changing TOC heading
{: .no_toc }
To change the default TOC heading to "Contents", create `_includes/toc_heading_custom.html` and add:
@@ -329,43 +328,9 @@ Future versions may subdivide components further; we guarantee that we will only
### 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`, 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 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.
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:
Users can indicate this alternative layout in page front matter:
{% raw %}
@@ -384,10 +349,10 @@ Similarly, users and developers can create other alternative layouts using Just
Under the hood,
- `default` and `minimal` inherit from the `table_wrappers` layout, which wraps all HTML `<table>` tags with a `div .table-wrapper`
- `default` 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
Note that as of now, `minimal` and `default` have no inheritance relationship.
The `minimal` layout inherits from the `default` but assigns `nav_enabled: false` to disable the navigation sidebar.
### Overridden default Jekyll layouts

View File

@@ -1,5 +1,4 @@
---
layout: default
title: Markdown kitchen sink
nav_order: 99
---
@@ -22,23 +21,23 @@ jtd.addEvent(toggleDarkMode, 'click', function(){
Text can be **bold**, _italic_, or ~~strikethrough~~.
[Link to another page](another-page).
[Link to another page]({{site.baseurl}}/).
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.
# [](#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.
## [](#header-2)Header 2
## Header 2
> This is a blockquote following a header.
>
> When something is important enough, you do it even if the odds are not in your favor.
### [](#header-3)Header 3
### Header 3
```js
// Javascript code with syntax highlighting.
@@ -55,19 +54,19 @@ GitHubPages::Dependencies.gems.each do |gem, version|
end
```
#### [](#header-4)Header 4 `with code not transformed`
#### 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.
##### [](#header-5)Header 5
##### Header 5
1. 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.
###### [](#header-6)Header 6
###### Header 6
[This is a very long link which wraps and therefore doesn't overflow
even when it comes at the beginning](.) of the line.
@@ -304,13 +303,25 @@ The following code is displayed as a diagram only when a `mermaid` key supplied
```mermaid
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-->C;
B-->D;
C-->D;
```
### Collapsed Section
```
The final element.
```
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.
<details markdown="block">
<summary>Shopping list (click me!)</summary>
This is content inside a `<details>` dropdown.
- [ ] Apples
- [ ] Oranges
- [ ] Milk
</details>

View File

@@ -2,7 +2,6 @@
title: Layout
layout: default
nav_order: 4.5
has_children: true
---
# Layout
@@ -18,17 +17,30 @@ You can use [Jekyll's front matter defaults] to specify the same layout for many
## The `default` layout
This page uses 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.
It 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.
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.
Each child (and grandchild) page of a top-level page has so-called *breadcrumbs*: links to its parent (and grandparent) pages. It shows the breadcrumbs above the main content of the page.
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.
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

View File

@@ -5,4 +5,6 @@ parent: A minimal layout page
grand_parent: Layout
---
# A minimal layout page
This is a child page that uses the same minimal layout as its parent page.

View File

@@ -5,4 +5,6 @@ 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

@@ -2,7 +2,6 @@
title: A minimal layout page
layout: minimal
parent: Layout
has_children: true
---
# A minimal layout page

View File

@@ -4,6 +4,8 @@ title: Minimal layout test
nav_exclude: true
---
# Minimal Layout Test Page
[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.

View File

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

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

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

@@ -0,0 +1,80 @@
---
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.
## 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.
To get an unordered list, replace `1. TOC` by `- TOC` in the above example.
## 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.
{: .note }
`{:toc}` can be used only once on each page.
## 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!

16
docs/navigation/index.md Normal file
View File

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

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

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

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

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

@@ -0,0 +1,41 @@
---
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 (Multi-level)
>
> 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 (Multi-level)
>
> 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 (Multi-level)
>
> For deeper navigation structures, you can specify the title of a grandparent or higher level page as an `ancestor` title.
----

View File

@@ -0,0 +1,126 @@
---
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 (Multi-level)
>
> 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

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

10
docs/navigation/main/x.md Normal file
View File

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

View File

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

View File

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

View File

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

10
docs/navigation/main/y.md Normal file
View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,11 @@
---
title: Breadcrumbs
parent: Navigation
nav_order: 3
---
# Breadcrumbs
When using the default layout, all pages except top-level pages will automatically have a list of 'breadcrumbs' at the top, linking to the parent page and to any higher-level ancestors.
The default layout does not provide an option to suppress the list of breadcrumbs. To do that, you would need to define a new layout, or override the file `_includes/components/breadcrumbs.html` (e.g., with an empty file).

View File

@@ -1,5 +1,4 @@
---
layout: default
title: Search
nav_order: 7
---
@@ -15,7 +14,7 @@ nav_order: 7
---
Just the Docs uses [lunr.js](http://lunrjs.com) to add a client-side search interface powered by a JSON index that Jekyll generates.
Just the Docs uses [lunr.js](https://lunrjs.com) to add a client-side search interface powered by a JSON index that Jekyll generates.
All search results are shown in an auto-complete style interface (there is no search results page).
By default, all generated HTML pages are indexed using the following data points:
@@ -94,13 +93,26 @@ The search button displays in the bottom right corner of the screen and triggers
search.button: true
```
### Focus search bar with a keyboard shortcut
Just the Docs supports focusing the search bar input with a keyboard shortcut. After setting the `search.focus_shortcut_key` config item key, users who press <kbd>Ctrl</kbd> + `search.focus_shortcut_key` (or on macOS, <kbd>Command</kbd> + `search.focus_shortcut_key`) will focus the search bar.
Note that this feature is **disabled by default**. `search.focus_shortcut_key` should be a [valid value from `KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key); this involves all ASCII alphanumeric values, as well as modifier keys.
For example,
```yaml
search:
focus_shortcut_key: 'k'
```
Will make <kbd>Ctrl</kbd> + <kbd>K</kbd> focus the search bar for Windows users (and <kbd>Command</kbd> + <kbd>K</kbd> on macOS).
## Hiding pages from search
Sometimes you might have a page that you don't want to be indexed for the search nor to show up in search results, e.g., a 404 page.
To exclude a page from search, add the `search_exclude: true` parameter to the page's YAML front matter:
#### Example
{: .no_toc }
```yaml
@@ -144,7 +156,8 @@ By default, the search feature indexes a page's `.content`, `.title`, and *some*
2. Add a new file named `_includes/lunr/custom-data.json`. Insert custom Liquid code that reads your data (e.g. the page object at `include.page`) then generates custom Javascript fields that hold the custom data you want to index. Verify these fields in the generated `assets/js/search-data.json`.
3. Add a new file named `_includes/lunr/custom-index.js`. Insert custom Javascript code that reads your custom Javascript fields and inserts them into the search index. You may want to inspect `assets/js/just-the-docs.js` to better understand the code.
#### Example
### Example: adding custom `usage` and `examples` fields
{: .text-delta }
This example adds front matter `usage` and `examples` fields to the search index.

View File

@@ -1,5 +1,4 @@
---
layout: default
title: Buttons
parent: UI Components
nav_order: 2
@@ -21,22 +20,22 @@ nav_order: 2
### Links that look like buttons
<div class="code-example" markdown="1">
[Link button](http://example.com/){: .btn }
[Link button](https://just-the-docs.com){: .btn }
[Link button](http://example.com/){: .btn .btn-purple }
[Link button](http://example.com/){: .btn .btn-blue }
[Link button](http://example.com/){: .btn .btn-green }
[Link button](https://just-the-docs.com){: .btn .btn-purple }
[Link button](https://just-the-docs.com){: .btn .btn-blue }
[Link button](https://just-the-docs.com){: .btn .btn-green }
[Link button](http://example.com/){: .btn .btn-outline }
[Link button](https://just-the-docs.com){: .btn .btn-outline }
</div>
```markdown
[Link button](http://example.com/){: .btn }
[Link button](https://just-the-docs.com){: .btn }
[Link button](http://example.com/){: .btn .btn-purple }
[Link button](http://example.com/){: .btn .btn-blue }
[Link button](http://example.com/){: .btn .btn-green }
[Link button](https://just-the-docs.com){: .btn .btn-purple }
[Link button](https://just-the-docs.com){: .btn .btn-blue }
[Link button](https://just-the-docs.com){: .btn .btn-green }
[Link button](http://example.com/){: .btn .btn-outline }
[Link button](https://just-the-docs.com){: .btn .btn-outline }
```
### Button element
@@ -60,20 +59,20 @@ Wrap the button in a container that uses the [font-size utility classes]({% link
<div class="code-example" markdown="1">
<span class="fs-6">
[Big ass button](http://example.com/){: .btn }
[Big ass button](https://just-the-docs.com){: .btn }
</span>
<span class="fs-3">
[Tiny ass button](http://example.com/){: .btn }
[Tiny ass button](https://just-the-docs.com){: .btn }
</span>
</div>
```markdown
<span class="fs-8">
[Link button](http://example.com/){: .btn }
[Link button](https://just-the-docs.com){: .btn }
</span>
<span class="fs-3">
[Tiny ass button](http://example.com/){: .btn }
[Tiny ass button](https://just-the-docs.com){: .btn }
</span>
```
@@ -82,16 +81,16 @@ Wrap the button in a container that uses the [font-size utility classes]({% link
Use the [margin utility classes]({% link docs/utilities/layout.md %}#spacing) to add spacing between two buttons in the same block.
<div class="code-example" markdown="1">
[Button with space](http://example.com/){: .btn .btn-purple .mr-2 }
[Button](http://example.com/){: .btn .btn-blue }
[Button with space](https://just-the-docs.com){: .btn .btn-purple .mr-2 }
[Button](https://just-the-docs.com){: .btn .btn-blue }
[Button with more space](http://example.com/){: .btn .btn-green .mr-4 }
[Button](http://example.com/){: .btn .btn-blue }
[Button with more space](https://just-the-docs.com){: .btn .btn-green .mr-4 }
[Button](https://just-the-docs.com){: .btn .btn-blue }
</div>
```markdown
[Button with space](http://example.com/){: .btn .btn-purple .mr-2 }
[Button](http://example.com/){: .btn .btn-blue }
[Button with space](https://just-the-docs.com){: .btn .btn-purple .mr-2 }
[Button](https://just-the-docs.com){: .btn .btn-blue }
[Button with more space](http://example.com/){: .btn .btn-green .mr-4 }
[Button](http://example.com/){: .btn .btn-blue }
[Button with more space](https://just-the-docs.com){: .btn .btn-green .mr-4 }
[Button](https://just-the-docs.com){: .btn .btn-blue }
```

View File

@@ -1,5 +1,4 @@
---
layout: default
title: Callouts
parent: UI Components
nav_order: 7
@@ -23,8 +22,8 @@ When you have [configured]({% link docs/configuration.md %}#callouts) the `colo
[^postfix]:
You can put the callout markup either before or after its content.
#### An untitled callout
{: .no_toc }
## An untitled callout
{: .no_toc .text-delta }
```markdown
{: .highlight }
@@ -35,8 +34,8 @@ A paragraph
A paragraph
#### A single paragraph callout
{: .no_toc }
## A single paragraph callout
{: .no_toc .text-delta }
```markdown
{: .note }
@@ -58,8 +57,8 @@ A paragraph
>
> A paragraph with a custom title callout
#### A multi-paragraph callout
{: .no_toc }
## A multi-paragraph callout
{: .no_toc .text-delta }
```markdown
{: .important }
@@ -97,8 +96,8 @@ A paragraph
>
> The last paragraph
#### An indented callout
{: .no_toc }
## An indented callout
{: .no_toc .text-delta }
```markdown
> {: .highlight }
@@ -108,8 +107,8 @@ A paragraph
> {: .highlight }
A paragraph
#### Indented multi-paragraph callouts
{: .no_toc }
## Indented multi-paragraph callouts
{: .no_toc .text-delta }
```markdown
> {: .new }
@@ -128,8 +127,8 @@ A paragraph
> > The last paragraph
#### Nested callouts
{: .no_toc }
## Nested callouts
{: .no_toc .text-delta }
```markdown
{: .important }
@@ -141,8 +140,8 @@ A paragraph
> {: .warning }
> A paragraph
#### Opaque background
{: .no_toc }
## Opaque background
{: .no_toc .text-delta }
```markdown
{: .important }

View File

@@ -1,8 +1,6 @@
---
layout: default
title: Code
parent: UI Components
has_children: true
nav_order: 6
---
@@ -58,6 +56,8 @@ var fun = function lang(l) {
```
{% endhighlight %}
Syntax highlighting, line numbers, and HTML compression do not work together; **the combination of these features generates invalid HTML that renders incorrectly**. To learn more, see ["Code with line numbers"]({% link docs/ui-components/code/line-numbers.md %}).
---
## Code blocks with rendered examples
@@ -68,22 +68,22 @@ To demonstrate front end code, sometimes it's useful to show a rendered example
<div class="code-example" markdown="1">
[Link button](http://example.com/){: .btn }
[Link button](https://just-the-docs.com){: .btn }
</div>
```markdown
[Link button](http://example.com/){: .btn }
[Link button](https://just-the-docs.com){: .btn }
```
</div>
{% highlight markdown %}
<div class="code-example" markdown="1">
[Link button](http://example.com/){: .btn }
[Link button](https://just-the-docs.com){: .btn }
</div>
```markdown
[Link button](http://example.com/){: .btn }
[Link button](https://just-the-docs.com){: .btn }
```
{% endhighlight %}
@@ -115,7 +115,7 @@ Additional configuration options are loaded through `_includes/mermaid_config.js
This loads the default settings.
The contents of this object should follow [mermaid's configuration API](https://mermaid-js.github.io/mermaid/#/./Setup?id=configuration). For example, to override the theme, change `_includes/mermaid_config.js` to:
The contents of this object should follow [mermaid's configuration API](https://mermaid.js.org/config/configuration.html). For example, to override the theme, change `_includes/mermaid_config.js` to:
```js
// _includes/mermaid_config.js
@@ -129,6 +129,8 @@ Once mermaid is installed, it can be used in markdown files. The markdown for a
{% highlight markdown %}
```mermaid
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-->C;
B-->D;
@@ -140,6 +142,8 @@ which renders:
```mermaid
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-->C;
B-->D;
@@ -177,6 +181,8 @@ By default, AsciiDoc generates HTML markup that mermaid cannot properly parse. T
++++
<pre class="language-mermaid">
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-->C;
B-->D;
@@ -185,7 +191,7 @@ graph TD;
++++
{% endhighlight %}
Alternatively, community member [@flyx](https://.github.com/flyx) has contributed a Ruby extension that does not require extra markup. The extension is available [as a GitHub Gist](https://gist.github.com/flyx/9fff080cf4edc95d495bc661a002232c). Thank you to [@flyx](https://.github.com/flyx)!
Alternatively, community member [@flyx](https://github.com/flyx) has contributed a Ruby extension that does not require extra markup. The extension is available [as a GitHub Gist](https://gist.github.com/flyx/9fff080cf4edc95d495bc661a002232c). Thank you to [@flyx](https://github.com/flyx)!
The [asciidoctor-diagram](https://docs.asciidoctor.org/diagram-extension/latest/) extension which also supports mermaid is not recommended for use with Just the Docs, since it requires separate configuration e.g. for theming, and is known to not be trivial to set up.

View File

@@ -0,0 +1,101 @@
---
title: Line Numbers
parent: Code
---
# Code Snippets with Line Numbers
{: .warning }
In prior versions of the docs, we provided "workarounds" to rendering issues arising from code snippets with line numbers. While these seemed to resolve visual layout issues, they did not resolve core issues with Jekyll generating invalid HTML. See [the detailed explanation](#detailed-error-explanation) for more information.
The default settings for HTML compression are incompatible with the HTML
produced by Jekyll for line numbers from highlighted code
-- both when using Kramdown code fences and when using Liquid highlight tags.
To avoid non-conforming HTML and unsatisfactory layout, HTML compression
can be turned off by using the following configuration option:
{% highlight yaml %}
compress_html:
ignore:
envs: all
{% endhighlight %}
When using Kramdown code fences, line numbers are turned on globally by the
following configuration option:
{% highlight yaml %}
kramdown:
syntax_highlighter_opts:
block:
line_numbers: true
{% endhighlight %}
Line numbers can then be suppressed locally using Liquid tags (_without_ the
`linenos` option) instead of fences:
{% highlight yaml %}
{% raw %}{% highlight some_language %}
Some code
{% endhighlight %}{% endraw %}
{% endhighlight %}
## Detailed Error Explanation
Consider this following code snippet, intended to highlight a simple Ruby program:
```
{% raw %}{% highlight ruby linenos %}
def foo
puts 'foo'
end
{% endhighlight %}{% endraw %}
```
If this is directly placed within a file processed by Jekyll (via Just the Docs, with HTML compression enabled), the following markup will be generated:
```html
<figure class="highlight">><code class="language-ruby" data-lang="ruby"><div class="table-wrapper"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
</pre><td class="code"><pre><span class="k">def</span> <span class="nf">foo</span>
<span class="nb">puts</span> <span class="s1">'foo'</span>
<span class="k">end</span>
</pre></figure>
```
This HTML is invalid; in particular, there are two issues:
1. there are many missing closing tags, and a superfluous `>`, which produce visually garbled output
2. a `<table>` is placed within a `<code>` element, which is syntactically invalid HTML (but is often allowed by browsers)
To emphasize this first difference, here is the same markup output, indented by tag:
```html
<figure class="highlight">
>
<code class="language-ruby" data-lang="ruby">
<div class="table-wrapper">
<table class="rouge-table">
<tbody>
<tr>
<td class="gutter gl">
<pre class="lineno">
1
2
3
</pre>
<td class="code">
<pre>
<span class="k">def</span>
<span class="nf">foo</span>
<span class="nb">puts</span>
<span class="s1">'foo'</span>
<span class="k">end</span>
</pre>
</figure>
```
In order, there are missing `</td>`, `</td>`, `</tr>`, `</tbody>`, `</table>`, `</div>`, and `</code>` tags. As a result, the following elements of the page - including the site footer - become visually garbled as browsers attempt to recover gracefully.
Prior workarounds we suggested (such as [Dmitry Hrabrov's in `jekyll-compress-html`#71](https://github.com/penibelst/jekyll-compress-html/issues/71#issuecomment-188144901)) resolve the missing tag problem. However, they still place a `<table>` within a `<code>` element. The HTML spec normatively states that `<code>` elements should only contain "[phrasing content](https://html.spec.whatwg.org/multipage/dom.html#phrasing-content-2)", which does not include `<table>` ([spec ref](https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-code-element)). To avoid incorrectly rendered HTML, the previously-suggested workaround using the current version of `_includes/fix_linenos.html` should _not_ be used!

View File

@@ -1,9 +1,6 @@
---
layout: default
title: UI Components
nav_order: 3
has_children: true
permalink: /docs/ui-components
---
# UI Components

View File

@@ -1,5 +1,4 @@
---
layout: default
title: Labels
parent: UI Components
nav_order: 3

View File

@@ -1,126 +0,0 @@
---
layout: default
title: Code with line numbers
parent: Code
grand_parent: UI Components
permalink: /docs/ui-components/code/line-numbers/
---
# Code snippets with line numbers
The default settings for HTML compression are incompatible with the HTML
produced by Jekyll (4.1.1 or earlier) for line numbers from highlighted code
-- both when using Kramdown code fences and when using Liquid highlight tags.
To avoid non-conforming HTML and unsatisfactory layout, HTML compression
can be turned off by using the following configuration option:
{% highlight yaml %}
compress_html:
ignore:
envs: all
{% endhighlight %}
When using Kramdown code fences, line numbers are turned on globally by the
following configuration option:
{% highlight yaml %}
kramdown:
syntax_highlighter_opts:
block:
line_numbers: true
{% endhighlight %}
Line numbers can then be suppressed locally using Liquid tags (_without_ the
`linenos` option) instead of fences:
{% highlight yaml %}
{% raw %}{% highlight some_language %}
Some code
{% endhighlight %}{% endraw %}
{% endhighlight %}
## Workarounds
To use HTML compression together with line numbers, all highlighted code
needs to be wrapped using one of the following workarounds.
(The variable name `some_var` can be changed to avoid clashes; it can also
be replaced by `code` -- but note that `code=code` cannot be removed).
### Code fences (three backticks)
{% highlight default %}
{% raw %}{% capture some_var %}
```some_language
Some code
```
{% endcapture %}
{% assign some_var = some_var | markdownify %}
{% include fix_linenos.html code=some_var %}{% endraw %}
{% endhighlight %}
### Liquid highlighting
{% highlight default %}
{% raw %}{% capture some_var %}
{% highlight some_language linenos %}
Some code
{% endhighlight %}
{% endcapture %}
{% include fix_linenos.html code=some_var %}{% endraw %}
{% endhighlight %}
_Credit:_ The original version of the above workaround was suggested by
Dmitry Hrabrov at
<https://github.com/penibelst/jekyll-compress-html/issues/71#issuecomment-188144901>.
## Examples
✅ Using code fences + workaround (will only show line numbers if enabled globally in `_config.yml`):
{% capture code_fence %}
```js
// Javascript code with syntax highlighting in fences
var fun = function lang(l) {
dateformat.i18n = require('./lang/' + l)
return true;
}
```
{% endcapture %}
{% assign code_fence = code_fence | markdownify %}
{% include fix_linenos.html code=code_fence %}
✅ Using liquid highlighting + workaround:
{% capture code %}
{% highlight ruby linenos %}
# Ruby code with syntax highlighting and fixed line numbers using Liquid
GitHubPages::Dependencies.gems.each do |gem, version|
s.add_dependency(gem, "= #{version}")
end
{% endhighlight %}
{% endcapture %}
{% include fix_linenos.html code=code %}
{% assign code = nil %}
Narrow code stays close to the line numbers:
{% capture code %}
{% highlight ruby linenos %}
def foo
puts 'foo'
end
{% endhighlight %}
{% endcapture %}
{% include fix_linenos.html code=code %}
{% assign code = nil %}
❌ With the compression options used for the theme docs, the following example illustrates
the **incorrect** formatting arising from the incompatibility of HTML compression
and the non-conforming HTML produced by Jekyll for line numbers:
{% highlight ruby linenos %}
def foo
puts 'foo'
end
{% endhighlight %}

View File

@@ -1,5 +1,4 @@
---
layout: default
title: Lists
parent: UI Components
nav_order: 5

View File

@@ -1,5 +1,4 @@
---
layout: default
title: Tables
parent: UI Components
nav_order: 4

View File

@@ -1,5 +1,4 @@
---
layout: default
title: Typography
parent: UI Components
nav_order: 1
@@ -21,7 +20,7 @@ nav_order: 1
By default, Just the Docs uses a native system font stack for sans-serif fonts:
```scss
system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif
system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Segoe UI Emoji"
```
ABCDEFGHIJKLMNOPQRSTUVWXYZ
@@ -97,12 +96,12 @@ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
<div class="code-example" markdown="1">
Text can be **bold**, _italic_, or ~~strikethrough~~.
[Link to another page](another-page).
[Link to another page]({{site.baseurl}}/).
</div>
```markdown
Text can be **bold**, _italic_, or ~~strikethrough~~.
[Link to another page](another-page).
[Link to another page]({{site.baseurl}}/).
```
---

View File

@@ -1,5 +1,4 @@
---
layout: default
title: Color
parent: Utilities
---

10
docs/utilities/index.md Normal file
View File

@@ -0,0 +1,10 @@
---
title: Utilities
nav_order: 4
---
# Utilities
{: .no_toc }
CSS utility classes come in handy when you want to override default styles to create additional whitespace (margins/padding), correct unexpected shifts in font size or weight, add color, or hide (or show) something at a specific screen size.
{: .fs-6 .fw-300 }

View File

@@ -1,5 +1,4 @@
---
layout: default
title: Layout
parent: Utilities
---
@@ -19,7 +18,7 @@ parent: Utilities
These spacers are available to use for margins and padding with responsive utility classes. Combine these prefixes with a screen size and spacing scale to use them responsively.
| Classname prefix | What it does |
| Classname prefix | Related CSS Property |
|:-----------------|:------------------------------|
| `.m-` | `margin` |
| `.mx-` | `margin-left`, `margin-right` |
@@ -29,7 +28,7 @@ These spacers are available to use for margins and padding with responsive utili
| `.mb-` | `margin-bottom` |
| `.ml-` | `margin-left` |
| Classname prefix | What it does |
| Classname prefix | Related CSS Property |
|:-----------------|:--------------------------------|
| `.p-` | `padding` |
| `.px-` | `padding-left`, `padding-right` |
@@ -55,13 +54,13 @@ Spacing values are based on a `1rem = 16px` spacing scale, broken down into thes
Use `mx-auto` to horizontally center elements.
#### Examples
{: .no_toc }
### Applying Spacing Utilities with `{: }`
{: .no_toc .text-delta }
In Markdown, use the `{: }` wrapper to apply custom classes:
```markdown
This paragraph will have a margin bottom of 1rem/16px at large screens.
This paragraph will have a margin bottom of 1rem/16px on large screens.
{: .mb-lg-4 }
This paragraph will have 2rem/32px of padding on the right and left at all screen sizes.
@@ -70,7 +69,7 @@ This paragraph will have 2rem/32px of padding on the right and left at all scree
## Horizontal Alignment
| Classname | What it does |
| CSS Class | Applied CSS Declaration |
|:------------------------|:---------------------------------|
| `.float-left` | `float: left` |
| `.float-right` | `float: right` |
@@ -83,7 +82,7 @@ _Note: any of the `flex-` classes must be used on a parent element that has `d-f
## Vertical Alignment
| Classname | What it does |
| CSS Class | Applied CSS Declaration |
|:-----------------------|:--------------------------------|
| `.v-align-baseline` | `vertical-align: baseline` |
| `.v-align-bottom` | `vertical-align: bottom` |
@@ -96,7 +95,7 @@ _Note: any of the `flex-` classes must be used on a parent element that has `d-f
Display classes aid in adapting the layout of the elements on a page:
| Class | |
| CSS Class | Applied CSS Declaration |
|:------------------|:------------------------|
| `.d-block` | `display: block` |
| `.d-flex` | `display: flex` |
@@ -106,8 +105,8 @@ Display classes aid in adapting the layout of the elements on a page:
Use these classes in conjunction with the responsive modifiers.
#### Examples
{: .no_toc }
### Applying Display Utilities with `{: }`
{: .no_toc .text-delta }
In Markdown, use the `{: }` wrapper to apply custom classes:

View File

@@ -1,5 +1,4 @@
---
layout: default
title: Responsive Modifiers
parent: Utilities
---

View File

@@ -1,5 +1,4 @@
---
layout: default
title: Typography
parent: Utilities
---

View File

@@ -1,13 +0,0 @@
---
layout: default
title: Utilities
nav_order: 4
has_children: true
permalink: docs/utilities
---
# Utilities
{: .no_toc }
CSS utility classes come in handy when you to want to override default styles to create additional whitespace (margins/padding), correct unexpected shifts in font size or weight, add color, or hide (or show) something at a specific screen size.
{: .fs-6 .fw-300 }

View File

@@ -5,6 +5,9 @@ gem "jekyll", "~> 3.9"
gem "jekyll-seo-tag", ">= 2.0"
gem "rake", ">= 12.3.1"
gem "jekyll-include-cache", group: :jekyll_plugins
gem "jekyll-sitemap", group: :jekyll_plugins
# required for Jekyll 3
gem "webrick", "~> 1.7"
gem "kramdown-parser-gfm", '~> 1.1'

View File

@@ -5,5 +5,8 @@ gem "jekyll", "~> 4.3"
gem "jekyll-seo-tag", ">= 2.0"
gem "rake", ">= 12.3.1"
gem "jekyll-include-cache", group: :jekyll_plugins
gem "jekyll-sitemap", group: :jekyll_plugins
# docs-only
gem "jekyll-github-metadata", ">= 2.15"

View File

@@ -0,0 +1 @@
root: _site

View File

@@ -1,6 +1,6 @@
---
layout: default
title: Home
layout: home
nav_order: 1
description: "Just the Docs is a responsive Jekyll theme with built-in search that is easily customizable and hosted on GitHub Pages."
permalink: /
@@ -49,7 +49,7 @@ See the theme [README][Just the Docs README] for how to use the theme as a gem w
## About the project
Just the Docs is &copy; 2017-{{ "now" | date: "%Y" }} by [Patrick Marsceill](http://patrickmarsceill.com).
Just the Docs is &copy; 2017-{{ "now" | date: "%Y" }} by [Patrick Marsceill](https://patrickmarsceill.com).
### License

View File

@@ -2,7 +2,7 @@
Gem::Specification.new do |spec|
spec.name = "just-the-docs"
spec.version = "0.5.3"
spec.version = "0.9.0"
spec.authors = ["Patrick Marsceill", "Matthew Wang"]
spec.email = ["patrick.marsceill@gmail.com", "matt@matthewwang.me"]
@@ -22,5 +22,6 @@ Gem::Specification.new do |spec|
spec.add_development_dependency "bundler", ">= 2.3.5"
spec.add_runtime_dependency "jekyll", ">= 3.8.5"
spec.add_runtime_dependency "jekyll-seo-tag", ">= 2.0"
spec.add_runtime_dependency "jekyll-include-cache"
spec.add_runtime_dependency "rake", ">= 12.3.1"
end

View File

@@ -9,6 +9,7 @@ namespace :search do
File.open('assets/js/zzzz-search-data.json', 'w') do |f|
f.puts '---
layout: null
permalink: /assets/js/search-data.json
---
{

1997
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -7,9 +7,9 @@
"bugs": "https://github.com/just-the-docs/just-the-docs/issues",
"devDependencies": {
"npm-run-all": "^4.1.5",
"prettier": "^2.8.8",
"stylelint": "^15.7.0",
"stylelint-config-standard-scss": "^9.0.0"
"prettier": "^3.3.3",
"stylelint": "^16.9.0",
"stylelint-config-standard-scss": "^13.1.0"
},
"scripts": {
"lint": "npm-run-all --parallel --continue-on-error lint:*",
@@ -22,8 +22,7 @@
"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"
"assets/css/just-the-docs-dark.scss"
],
"extends": [
"stylelint-config-standard-scss"