just-the-docs 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +54 -0
- data/_includes/components/breadcrumbs.html +99 -6
- data/_includes/css/activation.scss.liquid +167 -116
- data/_includes/fix_linenos.html +20 -12
- data/assets/js/just-the-docs.js +34 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8593eb0f4214116b46db9b1904d2585e794db893633690a78e5d77ad12c2b4f
|
4
|
+
data.tar.gz: dc7aa12e6092af9eabe4a5fd5509df6270fb197abcadff2bb4c4cb0a23993b25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7673a1920061a093328ab384a5a23b25f5e7ec0a1759d09280aa89d07fe63e4df66ce343cd27265d7774ebf431cf45bd45b8ef44f91656371a9e121efd22d41
|
7
|
+
data.tar.gz: 39cf8e32b64c2973e9b463c52799c7d56ef57b42d06e46d97d3b92034ccfb131826f6e502e24528051dd067f926cbe5a8373af16a28f1bb0993c960a62e30c7e
|
data/CHANGELOG.md
CHANGED
@@ -19,6 +19,60 @@ Code changes to `main` that are *not* in the latest release:
|
|
19
19
|
|
20
20
|
- N/A
|
21
21
|
|
22
|
+
Docs changes made since the latest release:
|
23
|
+
|
24
|
+
- N/A
|
25
|
+
|
26
|
+
## Release v0.8.0
|
27
|
+
|
28
|
+
Hi folks! This first minor release of 2024 has a short number of changes: a large improvement of build times for large sites, a new keyboard shortcut to focus the search bar, and sidebar navigation bugfixes for "pretty" URLs (with `.html` omitted) and the clickable area on Safari. This release has no explicit breaking changes and should be a straightforward upgrade for most (if not all) users.
|
29
|
+
|
30
|
+
### Using Release `v0.8.0`
|
31
|
+
|
32
|
+
Users who have not pinned the theme version will be **automatically upgraded to `v0.8.0` the next time they build their site**.
|
33
|
+
|
34
|
+
To use this release explicitly as a remote theme:
|
35
|
+
|
36
|
+
```yml
|
37
|
+
remote_theme: just-the-docs/just-the-docs@v0.8.0
|
38
|
+
```
|
39
|
+
|
40
|
+
To use this version explicitly as a gem-based theme, pin the version in your `Gemfile` and re-run `bundle install` or `bundle update just-the-docs`:
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
gem "just-the-docs", "0.8.0"
|
44
|
+
```
|
45
|
+
|
46
|
+
To use and pin a previous version of the theme, replace the `0.8.0` with the desired release tag.
|
47
|
+
|
48
|
+
### New Features
|
49
|
+
|
50
|
+
- Added: configurable keyboard shortcut to focus search input by [@kcromanpl-bajra] in [#1411]
|
51
|
+
|
52
|
+
### Bugfixes
|
53
|
+
|
54
|
+
- Fixed: quicker build by [@pdmosses] in [#1397]
|
55
|
+
- Fixed: incorrect navigation when `.html` omitted from URL by [@pdmosses] in [#1374]
|
56
|
+
- Fixed: incorrect positioning of clickable area for navigation links on Safari by [@mattxwang] in [#1403]
|
57
|
+
|
58
|
+
### Documentation
|
59
|
+
|
60
|
+
- Add documentation to "Navigation Structure" on grouping pages with collections by [@mitchnemirov] in [#1390]
|
61
|
+
|
62
|
+
### New Contributors
|
63
|
+
|
64
|
+
- [@mitchnemirov] made their first contribution in [#1390]
|
65
|
+
- [@kcromanpl-bajra] made their first contribution in [#1411]
|
66
|
+
|
67
|
+
[@mitchnemirov]: https://github.com/mitchnemirov
|
68
|
+
[@kcromanpl-bajra]: https://github.com/kcromanpl-bajra
|
69
|
+
|
70
|
+
[#1374]: https://github.com/just-the-docs/just-the-docs/pull/1374
|
71
|
+
[#1390]: https://github.com/just-the-docs/just-the-docs/pull/1390
|
72
|
+
[#1397]: https://github.com/just-the-docs/just-the-docs/pull/1397
|
73
|
+
[#1403]: https://github.com/just-the-docs/just-the-docs/pull/1403
|
74
|
+
[#1411]: https://github.com/just-the-docs/just-the-docs/pull/1411
|
75
|
+
|
22
76
|
## Release v0.7.0
|
23
77
|
|
24
78
|
Hi folks! This is a minor release that adds a new configuration option for opening external links in a new tab and provides many bugfixes (in both correctness and performance) for Just the Docs users with large sites. We anticipate that for most users, this is a straightforward upgrade. However, it introduces some potentially-breaking *internal* changes to undocumented features of the theme.
|
@@ -8,8 +8,91 @@
|
|
8
8
|
|
9
9
|
{%- if page.url != "/" and page.parent -%}
|
10
10
|
|
11
|
-
|
11
|
+
{%- capture nav_list_link -%}
|
12
|
+
<a href="{{ page.url | relative_url }}" class="nav-list-link">
|
13
|
+
{%- endcapture -%}
|
14
|
+
|
15
|
+
{%- capture site_nav -%}
|
16
|
+
{%- include_cached components/site_nav.html -%}
|
17
|
+
{%- endcapture -%}
|
18
|
+
|
19
|
+
{%- if site_nav contains nav_list_link -%}
|
20
|
+
|
21
|
+
{%- capture nav_list_simple -%}
|
22
|
+
<ul class="nav-list">
|
23
|
+
{%- endcapture -%}
|
24
|
+
|
25
|
+
{%- capture nav_list_link_class %} class="nav-list-link">
|
26
|
+
{%- endcapture -%}
|
27
|
+
|
28
|
+
{%- capture nav_category -%}
|
29
|
+
<div class="nav-category">
|
30
|
+
{%- endcapture -%}
|
31
|
+
|
32
|
+
{%- assign nav_anchor_splits =
|
33
|
+
site_nav | split: nav_list_link |
|
34
|
+
first | split: nav_category |
|
35
|
+
last | split: "</a>" -%}
|
36
|
+
|
37
|
+
{%- comment -%}
|
38
|
+
The ordinary pages (if any) and the collections pages (if any) are separated by
|
39
|
+
occurrences of nav_category.
|
40
|
+
|
41
|
+
Any ancestor nav-links of the page are contained in the last group of pages,
|
42
|
+
immediately preceding nav-lists. After splitting at "</a>", the anchor that
|
43
|
+
was split is a potential ancestor link when the following split starts with
|
44
|
+
a nav-list.
|
45
|
+
|
46
|
+
The array nav_breadcrumbs is the stack of current potential ancestors of the
|
47
|
+
current page. A split that contains one or more "</ul>"s requires that number
|
48
|
+
of potential ancestors to be popped from the stack.
|
49
|
+
|
50
|
+
The number of occurrences of a string in nav_split_next is computed by removing
|
51
|
+
them all, then dividing the resulting size difference by the length of the string.
|
52
|
+
{%- endcomment %}
|
53
|
+
|
54
|
+
{%- assign nav_breadcrumbs = "" | split: "" -%}
|
55
|
+
|
56
|
+
{%- for nav_split in nav_anchor_splits -%}
|
57
|
+
{%- unless forloop.last -%}
|
58
|
+
|
59
|
+
{%- assign nav_split_next = nav_anchor_splits[forloop.index] | trim -%}
|
60
|
+
|
61
|
+
{%- assign nav_split_test =
|
62
|
+
nav_split_next | remove_first: nav_list_simple | prepend: nav_list_simple -%}
|
63
|
+
{%- if nav_split_test == nav_split_next -%}
|
64
|
+
{%- assign nav_breadcrumb_link =
|
65
|
+
nav_split | split: "<a " | last | prepend: "<a " |
|
66
|
+
replace: nav_list_link_class, ">" | append: "</a>" -%}
|
67
|
+
{%- assign nav_breadcrumbs = nav_breadcrumbs | push: nav_breadcrumb_link -%}
|
68
|
+
{%- endif -%}
|
69
|
+
|
70
|
+
{%- if nav_split_next contains "</ul>" -%}
|
71
|
+
{%- assign nav_list_end_less = nav_split_next | remove: "</ul>" -%}
|
72
|
+
{%- assign nav_list_end_count =
|
73
|
+
nav_split_next.size | minus: nav_list_end_less.size | divided_by: 5 -%}
|
74
|
+
{% for nav_end_index in (1..nav_list_end_count) %}
|
75
|
+
{%- assign nav_breadcrumbs = nav_breadcrumbs | pop -%}
|
76
|
+
{%- endfor -%}
|
77
|
+
{%- endif -%}
|
12
78
|
|
79
|
+
{%- endunless -%}
|
80
|
+
{%- endfor -%}
|
81
|
+
|
82
|
+
{%- assign nav_parent_link = nav_breadcrumbs[-1] -%}
|
83
|
+
{%- assign nav_grandparent_link = nav_breadcrumbs[-2] -%}
|
84
|
+
|
85
|
+
{%- else -%}
|
86
|
+
|
87
|
+
{%- comment -%}
|
88
|
+
Pages whose links are excluded from the main navigation may still have
|
89
|
+
breadcrumbs. Determining them appears to require inspecting the front matter
|
90
|
+
of all the pages in the same group. For sites with 100s of pages, this is too
|
91
|
+
inefficient in Jekyll 3 (also when the for-loop is replaced by where-filters).
|
92
|
+
{%- endcomment -%}
|
93
|
+
|
94
|
+
{%- assign pages_list = site[page.collection] | default: site.html_pages -%}
|
95
|
+
|
13
96
|
{%- assign parent_page = nil -%}
|
14
97
|
{%- assign grandparent_page = nil -%}
|
15
98
|
|
@@ -35,15 +118,25 @@
|
|
35
118
|
{%- endif -%}
|
36
119
|
|
37
120
|
{%- endfor -%}
|
121
|
+
|
122
|
+
{%- capture nav_parent_link -%}
|
123
|
+
<a href="{{ parent_page.url | relative_url }}">{{ page.parent }}</a>
|
124
|
+
{%- endcapture -%}
|
125
|
+
|
126
|
+
{%- if page.grand_parent %}
|
127
|
+
{%- capture nav_grandparent_link -%}
|
128
|
+
<a href="{{ grandparent_page.url | relative_url }}">{{ page.grand_parent }}</a>
|
129
|
+
{%- endcapture -%}
|
130
|
+
{%- endif -%}
|
131
|
+
|
132
|
+
{%- endif -%}
|
38
133
|
|
39
134
|
<nav aria-label="Breadcrumb" class="breadcrumb-nav">
|
40
135
|
<ol class="breadcrumb-nav-list">
|
41
|
-
{
|
42
|
-
|
43
|
-
<li class="breadcrumb-nav-list-item"><a href="{{ grandparent_page.url | relative_url }}">{{ page.grand_parent }}</a></li>
|
136
|
+
{%- if nav_grandparent_link %}
|
137
|
+
<li class="breadcrumb-nav-list-item">{{ nav_grandparent_link }}</li>
|
44
138
|
{%- endif %}
|
45
|
-
<li class="breadcrumb-nav-list-item"
|
46
|
-
{% endif -%}
|
139
|
+
<li class="breadcrumb-nav-list-item">{{ nav_parent_link }}</li>
|
47
140
|
<li class="breadcrumb-nav-list-item"><span>{{ page.title }}</span></li>
|
48
141
|
</ol>
|
49
142
|
</nav>
|
@@ -1,19 +1,17 @@
|
|
1
1
|
{%- comment -%}
|
2
2
|
Include as: {%- include css/activation.scss.liquid -%}
|
3
|
-
Depends on: page
|
4
|
-
Results in: page-dependent
|
5
|
-
which needs to be
|
6
|
-
Includes:
|
7
|
-
sorted_pages.html.
|
3
|
+
Depends on: page.
|
4
|
+
Results in: page-dependent CSS rules for inclusion in a style element,
|
5
|
+
which needs to be disabled when JS is enabled.
|
6
|
+
Includes: components/site_nav.html.
|
8
7
|
Overwrites:
|
9
|
-
activation_no_nav_link,
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
activation_no_nav_link, nav_list_link, site_nav,
|
9
|
+
nav_list, nav_list_end, nav_list_item, nav_category_list,
|
10
|
+
nav_list_link_prefix, nav_splits, nav_split, nav_levels,
|
11
|
+
nav_list_less, nav_list_count, nav_end_less, nav_end_count,
|
12
|
+
nav_index, nav_slice_size,
|
13
|
+
activation_collection_prefix, activation_other_collection_prefix.
|
14
14
|
Should not be cached, because it depends on page.
|
15
|
-
(For a site with only top-level pages, the rendering of this file is always empty.
|
16
|
-
This property could be detected, and used to reduce the build time for such sites.)
|
17
15
|
{%- endcomment -%}
|
18
16
|
|
19
17
|
{%- comment -%}
|
@@ -37,89 +35,163 @@
|
|
37
35
|
{%- endif %}
|
38
36
|
{% endcapture -%}
|
39
37
|
|
40
|
-
{%-
|
38
|
+
{%- capture nav_list_link -%}
|
39
|
+
<a href="{{ page.url | relative_url }}" class="nav-list-link">
|
40
|
+
{%- endcapture -%}
|
41
41
|
|
42
|
-
{
|
42
|
+
{%- capture site_nav -%}
|
43
|
+
{%- include_cached components/site_nav.html -%}
|
44
|
+
{%- endcapture -%}
|
43
45
|
|
44
|
-
{%-
|
46
|
+
{%- if site_nav contains nav_list_link -%}
|
47
|
+
|
48
|
+
{%- capture nav_list -%}
|
49
|
+
<ul class="nav-list
|
50
|
+
{%- endcapture -%}
|
51
|
+
|
52
|
+
{%- assign nav_list_end = "</ul>" -%}
|
53
|
+
|
54
|
+
{%- capture nav_list_item -%}
|
55
|
+
<li class="nav-list-item
|
56
|
+
{%- endcapture -%}
|
57
|
+
|
58
|
+
{%- capture nav_category_list -%}
|
59
|
+
<ul class="nav-list nav-category-list">
|
60
|
+
{%- endcapture -%}
|
61
|
+
|
62
|
+
{%- assign nav_list_link_prefix =
|
63
|
+
site_nav | split: nav_list_link | first | append: nav_list_link -%}
|
45
64
|
|
46
|
-
{%- assign
|
47
|
-
|
|
48
|
-
| where_exp: "item", "item.title != nil"
|
49
|
-
| where_exp: "item", "item.nav_exclude != true" -%}
|
65
|
+
{%- assign nav_splits =
|
66
|
+
nav_list_link_prefix | split: nav_list_item | pop -%}
|
50
67
|
|
51
|
-
{%- assign
|
52
|
-
{%- assign activation_second_level_index = nil -%}
|
53
|
-
{%- assign activation_third_level_index = nil -%}
|
54
|
-
{%- assign activation_first_level_reversed = nil -%}
|
55
|
-
{%- assign activation_second_level_reversed = nil -%}
|
68
|
+
{%- assign nav_levels = "" | split: "" | push: 1 -%}
|
56
69
|
|
57
70
|
{%- comment -%}
|
58
|
-
The
|
59
|
-
the
|
60
|
-
|
71
|
+
The pattern of occurrences of list and list-item tags in the site_nav string
|
72
|
+
is included in the language defined by the following context-free grammar:
|
73
|
+
|
74
|
+
site_nav = PAGES? EXTERNALS? COLLECTION*
|
61
75
|
|
62
|
-
|
63
|
-
{%- assign activation_first_level = activation_pages
|
64
|
-
| where_exp: "item", "item.parent == nil" -%}
|
65
|
-
{%- include sorted_pages.html pages = activation_first_level -%}
|
66
|
-
{%- for activation_page in sorted_pages -%}
|
67
|
-
{%- if activation_page.title == activation_title -%}
|
68
|
-
{%- assign activation_first_level_index = forloop.index -%}
|
69
|
-
{%- assign activation_first_level_reversed = activation_page.child_nav_order -%}
|
70
|
-
{%- break -%}
|
71
|
-
{%- endif -%}
|
72
|
-
{%- endfor -%}
|
76
|
+
PAGES = nav_list (nav_list_item PAGES?)+ nav_list_end
|
73
77
|
|
74
|
-
|
78
|
+
EXTERNALS = nav_list nav_list_item+ nav_list_end
|
75
79
|
|
76
|
-
|
80
|
+
COLLECTION = nav_list (nav_list_item PAGES?)* nav_list_end
|
81
|
+
| nav_category_list
|
82
|
+
nav_list_item nav_list (nav_list_item PAGES?)* nav_list_end
|
83
|
+
nav_list_end
|
84
|
+
|
85
|
+
To determine the path in the site_nav to the nav_list_link for the current page,
|
86
|
+
the prefix of nav_list_link in site_nav is split at each nav_list_item to give
|
87
|
+
an array of nav_splits.
|
88
|
+
|
89
|
+
In site_nav, occurrences of nav_list must be separated by at least one
|
90
|
+
nav_list_item or nav_list_end. Moreover, when a nav_list_end is followed by a
|
91
|
+
nav_list without an intervening nav_list_item, that nav_list must start either
|
92
|
+
a list of external links or a collection. And when a nav_list is followed by a
|
93
|
+
nav_list_end without an intervening nav_list_item, they form an empty collection.
|
94
|
+
|
95
|
+
nav_levels is the path determined by the previously inspected nav_splits.
|
96
|
+
How many times nav_list and nav_list_end occur in the current nav_split
|
97
|
+
determines how to update the path.
|
98
|
+
|
99
|
+
A nav_split can contain any number of empty non-foldable collections.
|
100
|
+
The path element produced by the outer nav_list of a foldable collection is
|
101
|
+
irrelevant; it is set to zero and subsequently removed.
|
102
|
+
|
103
|
+
The number of occurrences of a string in a nav_split is computed by removing
|
104
|
+
them all, then dividing the resulting size difference by the length of the string.
|
105
|
+
|
106
|
+
Case analysis on (nav_list_count, nav_list_end_count):
|
107
|
+
|
108
|
+
- when (0, 0), the nav_split was between two nav_list_items at the same level;
|
109
|
+
|
110
|
+
- when (0, N+1), all the nav_list_ends in the nav_split are in PAGES or in one
|
111
|
+
COLLECTION;
|
112
|
+
|
113
|
+
- when (M+1, 0), M must be 0 (because two nav_lists in the same nav_split must
|
114
|
+
be separated by at least one nav_list_end);
|
115
|
+
|
116
|
+
- when (M+1, N+1), the nav_split must contain either:
|
117
|
+
- the end of PAGES followed by the start of EXTERNALS, or
|
118
|
+
- the end of PAGES followed by the start of a COLLECTION, or
|
119
|
+
- the end of EXTERNALS followed by the start of a COLLECTION, or
|
120
|
+
- the end of one COLLECTION followed by the start of another, or
|
121
|
+
- (in the first nav_split) one or more empty non-foldable COLLECTIONS
|
122
|
+
followed by the start of a COLLECTION.
|
123
|
+
In general, nav_levels[0] here needs to be incremented by nav_list_count.
|
124
|
+
However, a nav_split that contains the end of an empty foldable collection
|
125
|
+
followed by the just the start of a collection has two occurrences of nav_list,
|
126
|
+
and the increment needs to be one less; similarly when the first nav_split
|
127
|
+
starts with an empty non-foldable collection.
|
128
|
+
{%- endcomment %}
|
77
129
|
|
78
|
-
{%-
|
130
|
+
{%- for nav_split in nav_splits -%}
|
79
131
|
|
80
|
-
{%-
|
81
|
-
{%- assign
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
{%-
|
86
|
-
{%- assign
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
{%-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
132
|
+
{%- assign nav_list_less = nav_split | remove: nav_list -%}
|
133
|
+
{%- assign nav_list_count =
|
134
|
+
nav_split.size | minus: nav_list_less.size |
|
135
|
+
divided_by: nav_list.size -%}
|
136
|
+
|
137
|
+
{%- assign nav_list_end_less = nav_split | remove: nav_list_end -%}
|
138
|
+
{%- assign nav_list_end_count =
|
139
|
+
nav_split.size | minus: nav_list_end_less.size |
|
140
|
+
divided_by: nav_list_end.size -%}
|
141
|
+
|
142
|
+
{%- if nav_list_count == 0 and nav_list_end_count == 0 -%}
|
143
|
+
|
144
|
+
{%- assign nav_index = nav_levels[-1] | plus: 1 -%}
|
145
|
+
{%- assign nav_levels = nav_levels | pop | push: nav_index -%}
|
146
|
+
|
147
|
+
{%- elsif nav_list_count == 0 and nav_list_end_count >= 1 -%}
|
148
|
+
|
149
|
+
{%- assign nav_slice_size = nav_levels.size | minus: nav_list_end_count -%}
|
150
|
+
{%- assign nav_levels = nav_levels | slice: 0, nav_slice_size -%}
|
151
|
+
{%- assign nav_index = nav_levels[-1] | plus: 1 -%}
|
152
|
+
{%- assign nav_levels = nav_levels | pop | push: nav_index -%}
|
153
|
+
|
154
|
+
{%- elsif nav_list_count == 1 and nav_list_end_count == 0 -%}
|
155
|
+
|
156
|
+
{%- if nav_split contains nav_category_list -%}
|
157
|
+
{%- assign nav_levels = nav_levels | push: 0 -%}
|
158
|
+
{%- else -%}
|
159
|
+
{%- assign nav_levels = nav_levels | push: 1 -%}
|
101
160
|
{%- endif -%}
|
102
|
-
{%- endfor -%}
|
103
|
-
{%- endif -%}
|
104
161
|
|
105
|
-
{%-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
{%- if
|
113
|
-
{%- assign
|
114
|
-
|
115
|
-
|
116
|
-
{%- endif -%}
|
117
|
-
{%- break -%}
|
162
|
+
{%- elsif nav_list_count >= 1 and nav_list_end_count >= 1 -%}
|
163
|
+
|
164
|
+
{%- assign nav_index = nav_levels[0] | plus: nav_list_count -%}
|
165
|
+
{%- if nav_levels[-1] == 0 or forloop.first -%}
|
166
|
+
{%- assign nav_index = nav_index | minus: 1 -%}
|
167
|
+
{%- endif -%}
|
168
|
+
{%- assign nav_levels = nav_levels | slice: 0, 0 | push: nav_index -%}
|
169
|
+
{%- if nav_split contains nav_category_list -%}
|
170
|
+
{%- assign nav_levels = nav_levels | push: 0 -%}
|
171
|
+
{%- else -%}
|
172
|
+
{%- assign nav_levels = nav_levels | push: 1 -%}
|
118
173
|
{%- endif -%}
|
119
|
-
|
174
|
+
|
175
|
+
{%- endif -%}
|
176
|
+
|
177
|
+
{%- endfor -%}
|
178
|
+
|
179
|
+
{%- assign nav_levels = nav_levels | where_exp: "item", "item >= 1" -%}
|
180
|
+
|
120
181
|
{%- endif -%}
|
121
182
|
|
122
|
-
{%-
|
183
|
+
{%- comment -%}
|
184
|
+
The generated CSS depends on the position of the current page in each level in
|
185
|
+
the navigation.
|
186
|
+
{%- endcomment -%}
|
187
|
+
|
188
|
+
{%- if nav_levels[1] == nil -%}
|
189
|
+
|
190
|
+
{{ activation_no_nav_link }}
|
191
|
+
|
192
|
+
{%- else -%}
|
193
|
+
|
194
|
+
{%- if nav_levels[2] == nil and nav_levels[3] -%}
|
123
195
|
|
124
196
|
{{ activation_no_nav_link }}
|
125
197
|
|
@@ -158,34 +230,14 @@
|
|
158
230
|
|
159
231
|
{%- else -%}
|
160
232
|
|
161
|
-
{%- for activation_collection in site.just_the_docs.collections -%}
|
162
|
-
{%- if activation_collection[0] == page.collection -%}
|
163
|
-
{%- assign activation_index = forloop.index -%}
|
164
|
-
{%- break -%}
|
165
|
-
{%- endif -%}
|
166
|
-
{%- endfor -%}
|
167
|
-
|
168
|
-
{%- assign activation_pages_top_size = site.html_pages
|
169
|
-
| where_exp:"item", "item.title != nil"
|
170
|
-
| where_exp:"item", "item.parent == nil"
|
171
|
-
| where_exp:"item", "item.nav_exclude != true"
|
172
|
-
| size -%}
|
173
|
-
{%- if activation_pages_top_size > 0 -%}
|
174
|
-
{%- assign activation_index = activation_index | plus: 1 -%}
|
175
|
-
{%- endif -%}
|
176
|
-
|
177
|
-
{%- if site.nav_external_links -%}
|
178
|
-
{%- assign activation_index = activation_index | plus: 1 -%}
|
179
|
-
{%- endif -%}
|
180
|
-
|
181
233
|
{%- capture activation_collection_prefix -%}
|
182
|
-
.site-nav > ul:nth-of-type({{
|
234
|
+
.site-nav > ul:nth-of-type({{ nav_levels[0] }})
|
183
235
|
{%- if site.just_the_docs.collections[page.collection].nav_fold %} > li > ul
|
184
236
|
{%- endif -%}
|
185
237
|
{%- endcapture -%}
|
186
238
|
|
187
239
|
{%- capture activation_other_collection_prefix -%}
|
188
|
-
.site-nav > ul:not(:nth-of-type({{
|
240
|
+
.site-nav > ul:not(:nth-of-type({{ nav_levels[0] }}))
|
189
241
|
{%- endcapture -%}
|
190
242
|
|
191
243
|
{%- endif -%}
|
@@ -197,25 +249,25 @@
|
|
197
249
|
and children of the current page.
|
198
250
|
{%- endcomment %}
|
199
251
|
|
200
|
-
{% if
|
252
|
+
{% if nav_levels[3] -%}
|
201
253
|
|
202
254
|
{{ activation_collection_prefix }} > li > a,
|
203
255
|
{{ activation_collection_prefix }} > li > ul > li > a,
|
204
|
-
{{ activation_collection_prefix }} > li > ul > li > ul > li:not(:nth-child({{
|
256
|
+
{{ activation_collection_prefix }} > li > ul > li > ul > li:not(:nth-child({{ nav_levels[3] }})) > a {
|
205
257
|
background-image: none;
|
206
258
|
}
|
207
259
|
|
208
|
-
{%- elsif
|
260
|
+
{%- elsif nav_levels[2] -%}
|
209
261
|
|
210
262
|
{{ activation_collection_prefix }} > li > a,
|
211
|
-
{{ activation_collection_prefix }} > li > ul > li:not(:nth-child({{
|
263
|
+
{{ activation_collection_prefix }} > li > ul > li:not(:nth-child({{ nav_levels[2] }})) > a,
|
212
264
|
{{ activation_collection_prefix }} > li > ul > li > ul > li > a {
|
213
265
|
background-image: none;
|
214
266
|
}
|
215
267
|
|
216
268
|
{%- else -%}
|
217
269
|
|
218
|
-
{{ activation_collection_prefix }} > li:not(:nth-child({{
|
270
|
+
{{ activation_collection_prefix }} > li:not(:nth-child({{ nav_levels[1] }})) > a,
|
219
271
|
{{ activation_collection_prefix }} > li > ul > li > a,
|
220
272
|
{{ activation_collection_prefix }} > li > ul > li > ul > li > a {
|
221
273
|
background-image: none;
|
@@ -236,9 +288,9 @@
|
|
236
288
|
The following rule styles the link to the current page.
|
237
289
|
{%- endcomment %}
|
238
290
|
|
239
|
-
{{ activation_collection_prefix }} > li:nth-child({{
|
240
|
-
{%- if
|
241
|
-
{%- if
|
291
|
+
{{ activation_collection_prefix }} > li:nth-child({{ nav_levels[1] }})
|
292
|
+
{%- if nav_levels[2] %} > ul > li:nth-child({{ nav_levels[2] }})
|
293
|
+
{%- if nav_levels[3] %} > ul > li:nth-child({{ nav_levels[3] }})
|
242
294
|
{%- endif -%}
|
243
295
|
{%- endif %} > a {
|
244
296
|
font-weight: 600;
|
@@ -259,9 +311,9 @@
|
|
259
311
|
{%- if site.just_the_docs.collections %}
|
260
312
|
.site-nav > ul.nav-category-list > li > button svg,
|
261
313
|
{% endif -%}
|
262
|
-
{{ activation_collection_prefix }} > li:nth-child({{
|
263
|
-
{%- if
|
264
|
-
{{ activation_collection_prefix }} > li:nth-child({{
|
314
|
+
{{ activation_collection_prefix }} > li:nth-child({{ nav_levels[1] }}) > button svg
|
315
|
+
{%- if nav_levels[2] -%},
|
316
|
+
{{ activation_collection_prefix }} > li:nth-child({{ nav_levels[1] }}) > ul > li:nth-child({{ nav_levels[2] }}) > button svg
|
265
317
|
{%- endif %} {
|
266
318
|
transform: rotate(-90deg);
|
267
319
|
}
|
@@ -269,13 +321,12 @@
|
|
269
321
|
{%- if site.just_the_docs.collections %}
|
270
322
|
.site-nav > ul.nav-category-list > li.nav-list-item > ul.nav-list,
|
271
323
|
{% endif -%}
|
272
|
-
{{ activation_collection_prefix }} > li.nav-list-item:nth-child({{
|
273
|
-
{%- if
|
274
|
-
{{ activation_collection_prefix }} > li.nav-list-item:nth-child({{
|
324
|
+
{{ activation_collection_prefix }} > li.nav-list-item:nth-child({{ nav_levels[1] }}) > ul.nav-list
|
325
|
+
{%- if nav_levels[2] %},
|
326
|
+
{{ activation_collection_prefix }} > li.nav-list-item:nth-child({{ nav_levels[1] }}) > ul.nav-list > li.nav-list-item:nth-child({{ nav_levels[2] }}) > ul.nav-list
|
275
327
|
{%- endif %} {
|
276
328
|
display: block;
|
277
329
|
}
|
278
330
|
|
279
331
|
{%- endif -%}
|
280
332
|
{%- endif -%}
|
281
|
-
{%- endif -%}
|
data/_includes/fix_linenos.html
CHANGED
@@ -1,29 +1,37 @@
|
|
1
1
|
{%- comment -%}
|
2
|
-
This file
|
3
|
-
code with line numbers.
|
2
|
+
This file was previously used to "fix" the HTML produced by Jekyll for
|
3
|
+
highlighted code with line numbers. While it often resolves layout issues
|
4
|
+
from the missing HTML tags, it still generates invalid HTML (by placing
|
5
|
+
a `<table>` element within a `<code>` block). As such, we no longer
|
6
|
+
recommend using this workaround. For more information, see the
|
7
|
+
"Code snippets with line numbers" docs page:
|
8
|
+
https://just-the-docs.com/docs/ui-components/code/line-numbers/
|
9
|
+
(or, docs/ui-components/line-nos.md/)
|
4
10
|
|
5
|
-
|
6
|
-
|
11
|
+
The next portion of this file, including the comments and the workaround,
|
12
|
+
are preserved for backwards comptability.
|
7
13
|
|
8
|
-
|
14
|
+
ACKNOWLEDGEMENTS
|
15
|
+
|
16
|
+
The implementation was derived from the workaround provided by
|
9
17
|
Dmitry Hrabrov (DeXP) at
|
10
18
|
https://github.com/penibelst/jekyll-compress-html/issues/71#issuecomment-188144901
|
11
19
|
|
12
|
-
EXPLANATION
|
20
|
+
EXPLANATION (OLD)
|
13
21
|
|
14
|
-
The HTML produced by Rouge highlighting with
|
15
|
-
`code table`. Jekyll
|
22
|
+
The HTML produced by Rouge highlighting with line numbers is of the form
|
23
|
+
`code table`. Jekyll always wraps the highlighted HTML
|
16
24
|
with `pre`. This wrapping is not only unnecessary, but also transforms
|
17
25
|
the conforming HTML produced by Rouge to non-conforming HTML, which
|
18
|
-
results in HTML validation error reports.
|
26
|
+
results in HTML validation error reports.
|
19
27
|
|
20
28
|
The fix removes the outer `pre` tags whenever they contain the pattern
|
21
29
|
`<table class="rouge-table">`.
|
22
|
-
|
30
|
+
|
23
31
|
Apart from avoiding HTML validation errors, the fix allows the use of
|
24
32
|
the [Jekyll layout for compressing HTML](http://jch.penibelst.de),
|
25
33
|
which relies on `pre` tags not being nested, according to
|
26
|
-
https://github.com/penibelst/jekyll-compress-html/issues/71#issuecomment-172069842
|
34
|
+
https://github.com/penibelst/jekyll-compress-html/issues/71#issuecomment-172069842
|
27
35
|
|
28
36
|
USAGE
|
29
37
|
|
@@ -48,7 +56,7 @@ Some code
|
|
48
56
|
|
49
57
|
CAVEATS
|
50
58
|
|
51
|
-
The above does not work when `Some code` happens to contain the matched string
|
59
|
+
The above does not work when `Some code` happens to contain the matched string
|
52
60
|
`<table class="rouge-table">`.
|
53
61
|
|
54
62
|
The use of this file overwrites the variable `fix_linenos_code` with `nil`.
|
data/assets/js/just-the-docs.js
CHANGED
@@ -145,6 +145,18 @@ function searchLoaded(index, docs) {
|
|
145
145
|
var currentInput;
|
146
146
|
var currentSearchIndex = 0;
|
147
147
|
|
148
|
+
{%- if site.search.focus_shortcut_key %}
|
149
|
+
// add event listener on ctrl + <focus_shortcut_key> for showing the search input
|
150
|
+
jtd.addEvent(document, 'keydown', function (e) {
|
151
|
+
if ((e.ctrlKey || e.metaKey) && e.key === '{{ site.search.focus_shortcut_key }}') {
|
152
|
+
e.preventDefault();
|
153
|
+
|
154
|
+
mainHeader.classList.add('nav-open');
|
155
|
+
searchInput.focus();
|
156
|
+
}
|
157
|
+
});
|
158
|
+
{%- endif %}
|
159
|
+
|
148
160
|
function showSearch() {
|
149
161
|
document.documentElement.classList.add('search-active');
|
150
162
|
}
|
@@ -487,11 +499,28 @@ jtd.setTheme = function(theme) {
|
|
487
499
|
// and not have the slash on GitHub Pages
|
488
500
|
|
489
501
|
function navLink() {
|
490
|
-
var
|
491
|
-
|
492
|
-
|
502
|
+
var pathname = document.location.pathname;
|
503
|
+
|
504
|
+
var navLink = document.getElementById('site-nav').querySelector('a[href="' + pathname + '"]');
|
505
|
+
if (navLink) {
|
506
|
+
return navLink;
|
493
507
|
}
|
494
|
-
|
508
|
+
|
509
|
+
// The `permalink` setting may produce navigation links whose `href` ends with `/` or `.html`.
|
510
|
+
// To find these links when `/` is omitted from or added to pathname, or `.html` is omitted:
|
511
|
+
|
512
|
+
if (pathname.endsWith('/') && pathname != '/') {
|
513
|
+
pathname = pathname.slice(0, -1);
|
514
|
+
}
|
515
|
+
|
516
|
+
if (pathname != '/') {
|
517
|
+
navLink = document.getElementById('site-nav').querySelector('a[href="' + pathname + '"], a[href="' + pathname + '/"], a[href="' + pathname + '.html"]');
|
518
|
+
if (navLink) {
|
519
|
+
return navLink;
|
520
|
+
}
|
521
|
+
}
|
522
|
+
|
523
|
+
return null; // avoids `undefined`
|
495
524
|
}
|
496
525
|
|
497
526
|
// Scroll site-nav to ensure the link to the current page is visible
|
@@ -499,8 +528,7 @@ function navLink() {
|
|
499
528
|
function scrollNav() {
|
500
529
|
const targetLink = navLink();
|
501
530
|
if (targetLink) {
|
502
|
-
|
503
|
-
document.getElementById('site-nav').scrollBy(0, rect.top - 3*rect.height);
|
531
|
+
targetLink.scrollIntoView({ block: "center" });
|
504
532
|
targetLink.removeAttribute('href');
|
505
533
|
}
|
506
534
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: just-the-docs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrick Marsceill
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2024-02-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|