jekyll-theme-primerpages 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +65 -0
  4. data/_config.yml +149 -0
  5. data/_includes/awesome-nav-breadcrumb-trail.html +33 -0
  6. data/_includes/awesome-nav-breadcrumbs.html +51 -0
  7. data/_includes/awesome-nav-menu-tree.html +21 -0
  8. data/_includes/awesome-nav-menu.html +68 -0
  9. data/_includes/awesome-nav-sidebar.html +7 -0
  10. data/_includes/awesome-nav-tree.html +52 -0
  11. data/_includes/breadcrumbs.html +62 -0
  12. data/_includes/category_index.html +18 -0
  13. data/_includes/collection-menu.html +79 -0
  14. data/_includes/collection-sidebar.html +23 -0
  15. data/_includes/custom-colors.html +99 -0
  16. data/_includes/footer.html +13 -0
  17. data/_includes/head.html +43 -0
  18. data/_includes/header-appbar.html +53 -0
  19. data/_includes/header-sidebar.html +60 -0
  20. data/_includes/header-stacked.html +33 -0
  21. data/_includes/header-topbar.html +59 -0
  22. data/_includes/link-card.html +52 -0
  23. data/_includes/links.html +12 -0
  24. data/_includes/masthead.html +18 -0
  25. data/_includes/mini-repo-info-card.html +30 -0
  26. data/_includes/nav-overlay.html +53 -0
  27. data/_includes/nav.html +51 -0
  28. data/_includes/navbar-underline.html +51 -0
  29. data/_includes/paginator_nav.html +28 -0
  30. data/_includes/post-card.html +27 -0
  31. data/_includes/post-feature-card.html +24 -0
  32. data/_includes/post-gallery.html +52 -0
  33. data/_includes/post-index.html +35 -0
  34. data/_includes/post-tease-image-card.html +22 -0
  35. data/_includes/post-tease-text-card.html +12 -0
  36. data/_includes/post-timeline-card.html +84 -0
  37. data/_includes/post-timeline.html +31 -0
  38. data/_includes/posts.html +12 -0
  39. data/_includes/related.html +116 -0
  40. data/_includes/repo-card.html +43 -0
  41. data/_includes/repositories.html +27 -0
  42. data/_includes/resolve-versioning.html +16 -0
  43. data/_includes/social.html +390 -0
  44. data/_includes/toggle.html +4 -0
  45. data/_includes/user-metadata.html +36 -0
  46. data/_includes/version-selector.html +22 -0
  47. data/_includes/version-warning.html +15 -0
  48. data/_layouts/category_index.html +16 -0
  49. data/_layouts/category_layout.html +33 -0
  50. data/_layouts/default.html +33 -0
  51. data/_layouts/docs.html +189 -0
  52. data/_layouts/docs_index.html +32 -0
  53. data/_layouts/home.html +3 -0
  54. data/_layouts/landing.html +38 -0
  55. data/_layouts/linktree.html +36 -0
  56. data/_layouts/page.html +22 -0
  57. data/_layouts/paginate.html +16 -0
  58. data/_layouts/paginate_timeline.html +17 -0
  59. data/_layouts/post.html +136 -0
  60. data/_layouts/profile.html +48 -0
  61. data/_layouts/repositories.html +11 -0
  62. data/_layouts/tag_index.html +16 -0
  63. data/_layouts/tags.html +12 -0
  64. data/_sass/_admonitions.scss +69 -0
  65. data/_sass/_highlight-syntax.scss +96 -0
  66. data/_sass/_language-colors.scss +1443 -0
  67. data/_sass/_main.scss +274 -0
  68. data/_sass/jekyll-theme-primerpages-compat.scss +5 -0
  69. data/_sass/jekyll-theme-primerpages.scss +7 -0
  70. data/assets/css/style.scss +2 -0
  71. data/assets/css/theme.scss +16 -0
  72. data/assets/img/default.png +0 -0
  73. data/assets/img/favicon.ico +0 -0
  74. data/assets/img/social-preview.png +0 -0
  75. data/assets/img/user-image.jpg +0 -0
  76. data/assets/js/anchor-links.js +47 -0
  77. data/assets/js/mermaid.js +61 -0
  78. data/assets/js/theme-toggle.js +84 -0
  79. data/assets/js/topbar.js +19 -0
  80. data/assets/js/versioning.js +300 -0
  81. metadata +184 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8e85788fbafe6d2a972e879708ea14bced190302c46573bf269d2891316de630
4
+ data.tar.gz: 68c72c917ec48322cbbb9d6f268b840ad8033eaddd52726200872a6083c15227
5
+ SHA512:
6
+ metadata.gz: cbd956cc3bcf6f95217a1dab4f08fe08f5847bef838e1311bb24b45caa433536551d1c23639be5298ab1795e2e7eaee18307b4736587e0ef305925dd89d5ae3a
7
+ data.tar.gz: 64abeff7b9ca357b8afce82229811ee638841d6b8eb99a5a40743276cf4b93c70a690344983649938c428cf0d1936dea06d8fe8ed6a412c235bcc82bc992f545
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Allison Thackston
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,65 @@
1
+ # PrimerPages Jekyll Theme
2
+
3
+ PrimerPages is a Jekyll theme for GitHub-flavored project sites, profile pages,
4
+ documentation, blogs, and link pages. It is built with GitHub Primer styles and
5
+ published as the `jekyll-theme-primerpages` gem.
6
+
7
+ > [!NOTE]
8
+ > This theme was renamed from `jekyll-theme-profile` to
9
+ > `jekyll-theme-primerpages`. New sites should use the PrimerPages package name.
10
+
11
+ ## Quick Start
12
+
13
+ Add the theme to your site's `Gemfile`:
14
+
15
+ ```ruby
16
+ source "https://rubygems.org"
17
+
18
+ gem "jekyll-theme-primerpages"
19
+ ```
20
+
21
+ Install the gem:
22
+
23
+ ```sh
24
+ bundle install
25
+ ```
26
+
27
+ Enable the theme in `_config.yml`:
28
+
29
+ ```yaml
30
+ theme: jekyll-theme-primerpages
31
+ title: My Site
32
+ description: A site built with PrimerPages
33
+ ```
34
+
35
+ Create an `index.md` page:
36
+
37
+ ```markdown
38
+ ---
39
+ layout: profile
40
+ ---
41
+
42
+ # Hello, PrimerPages
43
+ ```
44
+
45
+ Run the site locally:
46
+
47
+ ```sh
48
+ bundle exec jekyll serve
49
+ ```
50
+
51
+ Then open `http://localhost:4000`.
52
+
53
+ ## Documentation
54
+
55
+ Full documentation is available at [primerpages.com](https://www.primerpages.com).
56
+
57
+ ## Contributing
58
+
59
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development and contribution
60
+ guidelines.
61
+
62
+ ## License
63
+
64
+ The theme is available as open source under the terms of the
65
+ [MIT License](LICENSE).
data/_config.yml ADDED
@@ -0,0 +1,149 @@
1
+ # ######## Jekyll Site Settings ##########
2
+ theme: jekyll-theme-primerpages
3
+ title: PrimerPages
4
+ description: Theme built with jekyll-theme-primerpages
5
+ # image: /assets/img/social-preview.png
6
+ repository: PrimerPages/jekyll-theme-primerpages
7
+
8
+ defaults:
9
+ - scope:
10
+ path: "" # an empty string here means all files in the project
11
+ type: "posts"
12
+ values:
13
+ image: /assets/img/default.png # The default image used for social and posts.
14
+ layout: "post"
15
+ permalink: :year/:month/:day/:title:output_ext
16
+ toc: true
17
+ - scope:
18
+ path: "" # an empty string here means all files in the project
19
+ type: "pages"
20
+ values:
21
+ layout: "page"
22
+ image: /assets/img/default.png # The default image used for social and posts.
23
+
24
+ # ########### Theme settings ###############
25
+ # The style of the website
26
+ style: appbar # One of "stacked", "sidebar", "topbar", "appbar"
27
+ # The user/project avatar. If not set the avatar of the project owner will be used.
28
+ # user_image: /assets/img/user-image.jpg
29
+ # The header brand icon. Use "none", "favicon", or an Octicon name like "mark-github".
30
+ # header_icon: favicon
31
+ # The themes to use for dark and light
32
+ dark_theme: dark # One of dark, dark_dimmed, dark_colorblind, dark_high_contrast, dark_tritanopia
33
+ light_theme: light # One of light, light_colorblind, light_high_contrast, light_tritanopia
34
+
35
+ repo_info: true # Show the information for the source of this project
36
+ user_metadata: true # Show the metadata associated with the user
37
+ profile_link: true # Show a link to the github profile for the user
38
+
39
+ ####################
40
+ # Versioned docs settings
41
+ # versions:
42
+ # enabled: true
43
+ # config: /versions.json
44
+ # prefix: ""
45
+ # # config and prefix are emitted exactly as configured here
46
+ # # versioning is enabled only when this block is present, or when enabled is explicitly true
47
+ # show_warning: true
48
+ # warning_title: Non-default version
49
+ # warning_message: You are viewing a non-default version of these docs.
50
+ # unavailable_label: Version info unavailable
51
+
52
+ ##########################
53
+ # # Social media settings
54
+ # icon_color: "#959da5" # The color of the social media icons on the site
55
+ # social_media: # Your social media accounts
56
+ # behance: your_username
57
+ # dribbble: your_username
58
+ # docker: your_username
59
+ # facebook: your_username
60
+ # github: your_username
61
+ # hackerrank: your_username
62
+ # instagram: your_username
63
+ # keybase: your_username
64
+ # linkedin: your_username
65
+ # mail: email@address
66
+ # mastodon: your_username
67
+ # medium: your_username
68
+ # stackoverflow: your_user_id
69
+ # telegram: your_username
70
+ # threads: your_username
71
+ # tiktok: your_username
72
+ # twitter: your_username
73
+ # unsplash: your_username
74
+ # vk: your_username
75
+ # vscode: your_username
76
+ # youtube: your_username
77
+ # x: your_username
78
+
79
+ ####################
80
+ # Navigation links
81
+ # nav:
82
+ # - name: Posts
83
+ # url: /blog
84
+ # - name: Categories
85
+ # url: /category/
86
+
87
+ ####################
88
+ # List of links for link cards
89
+ # links:
90
+ # - name: All blog posts
91
+ # url: /blog
92
+ # thumbnail: /assets/img/blog-post-icon.png
93
+ # - name: Browse by category
94
+ # url: /category/
95
+ # thumbnail: /assets/img/category-icon.png
96
+
97
+ ###################
98
+ # Repositories to show on home page
99
+ repositories:
100
+ sort_by: stars #pushed or stars
101
+ limit: 24
102
+ exclude:
103
+ archived: true
104
+ forks: true
105
+ repositories:
106
+ # - list of repositories to exclude
107
+
108
+ ########################
109
+ # Post settings
110
+ related_by: "tags or categories"
111
+
112
+ # ########### Plugin settings ###############
113
+ plugins:
114
+ # - jekyll-github-metadata
115
+ # - jekyll-meta
116
+ # - jekyll-octicons
117
+ - jekyll-seo-tag
118
+ # - jekyll-toc
119
+ - jemoji
120
+
121
+ ####################
122
+ # jekyll-paginate settings
123
+ # Include `gem jekyll-paginate` in your gemfile
124
+ # paginate: 6 # The number of posts to show per page of pagination of blog posts
125
+ # paginate_path: "/blog/page:num"
126
+ # ###################
127
+ # jekyll-tagging settings
128
+ # Include `gem jekyll-tagging` in your gemfile
129
+ # tag_page_layout: tags
130
+ # tag_page_dir: tags
131
+ # ####################
132
+ # jekyll-category-pages settings
133
+ # Include `gem jekyll-category-pages` in your gemfile
134
+ # category_path: category
135
+ # category_layout: category_layout.html
136
+ ######################
137
+
138
+ # ########### Build settings ###############
139
+ exclude:
140
+ - spec
141
+ - demo
142
+ - .sass-cache
143
+ - .jekyll-cache
144
+ - gemfiles
145
+ - Gemfile
146
+ - Gemfile.lock
147
+ - node_modules
148
+ - vendor/
149
+ - integration/
@@ -0,0 +1,33 @@
1
+ {% for nav_item in include.items %}
2
+ {% assign item_url = nav_item.url | default: "" %}
3
+ {% assign is_current = nav_item.current | default: false %}
4
+ {% assign contains_current = nav_item.contains_current | default: false %}
5
+ {% assign has_children = nav_item.children and nav_item.children.size > 0 %}
6
+ {% assign skip_item = false %}
7
+
8
+ {% if include.root_url and item_url != "" and item_url == include.root_url %}
9
+ {% assign skip_item = true %}
10
+ {% endif %}
11
+
12
+ {% if is_current or contains_current %}
13
+ {% unless skip_item %}
14
+ {% if is_current %}
15
+ <li class="breadcrumb-item breadcrumb-item-selected" aria-current="page">
16
+ {{ nav_item.title }}
17
+ </li>
18
+ {% elsif item_url != "" %}
19
+ <li class="breadcrumb-item">
20
+ <a href="{{ item_url | relative_url }}">{{ nav_item.title }}</a>
21
+ </li>
22
+ {% else %}
23
+ <li class="breadcrumb-item">
24
+ {{ nav_item.title }}
25
+ </li>
26
+ {% endif %}
27
+ {% endunless %}
28
+
29
+ {% if has_children %}
30
+ {% include awesome-nav-breadcrumb-trail.html items=nav_item.children root_url=include.root_url %}
31
+ {% endif %}
32
+ {% endif %}
33
+ {% endfor %}
@@ -0,0 +1,51 @@
1
+ <div class="Breadcrumb d-flex flex-items-center">
2
+ <nav aria-label="Breadcrumb" class="f5">
3
+ <ol class="breadcrumb">
4
+ {% assign root_crumb = nil %}
5
+ {% if page.breadcrumbs and page.breadcrumbs.size > 0 %}
6
+ {% assign root_crumb = page.breadcrumbs.first %}
7
+ {% endif %}
8
+
9
+ {% if root_crumb %}
10
+ <li class="breadcrumb-item">
11
+ <a href="{{ root_crumb.url | relative_url }}">{{ root_crumb.title }}</a>
12
+ </li>
13
+ {% endif %}
14
+
15
+ {% capture awesome_nav_trail %}
16
+ {% if page.awesome_nav and page.awesome_nav.size > 0 %}
17
+ {% include awesome-nav-breadcrumb-trail.html items=page.awesome_nav root_url=root_crumb.url %}
18
+ {% endif %}
19
+ {% endcapture %}
20
+
21
+ {% assign awesome_nav_trail = awesome_nav_trail | strip %}
22
+
23
+ {% if awesome_nav_trail != "" %}
24
+ {{ awesome_nav_trail }}
25
+ {% elsif page.breadcrumbs and page.breadcrumbs.size > 0 %}
26
+ {% for crumb in page.breadcrumbs %}
27
+ {% if forloop.first %}
28
+ {% continue %}
29
+ {% endif %}
30
+ {% if forloop.last %}
31
+ <li class="breadcrumb-item breadcrumb-item-selected" aria-current="page">
32
+ {{ crumb.title }}
33
+ </li>
34
+ {% elsif crumb.url %}
35
+ <li class="breadcrumb-item">
36
+ <a href="{{ crumb.url | relative_url }}">{{ crumb.title }}</a>
37
+ </li>
38
+ {% else %}
39
+ <li class="breadcrumb-item">
40
+ {{ crumb.title }}
41
+ </li>
42
+ {% endif %}
43
+ {% endfor %}
44
+ {% else %}
45
+ <li class="breadcrumb-item breadcrumb-item-selected" aria-current="page">
46
+ {{ page.title }}
47
+ </li>
48
+ {% endif %}
49
+ </ol>
50
+ </nav>
51
+ </div>
@@ -0,0 +1,21 @@
1
+ {% for nav_item in include.items %}
2
+ {% assign item_url = nav_item.url | default: "" %}
3
+ {% assign has_children = nav_item.children and nav_item.children.size > 0 %}
4
+ {% assign is_current = nav_item.current | default: false %}
5
+
6
+ {% if item_url != "" %}
7
+ <a href="{{ item_url | relative_url }}" class="menu-item border-0" role="menuitem" {% if is_current %}aria-current="page"{% endif %}>
8
+ {{ nav_item.title }}
9
+ </a>
10
+ {% else %}
11
+ <div class="menu-item color-fg-muted border-0">
12
+ {{ nav_item.title }}
13
+ </div>
14
+ {% endif %}
15
+
16
+ {% if has_children %}
17
+ <div class="ml-3">
18
+ {% include awesome-nav-menu-tree.html items=nav_item.children %}
19
+ </div>
20
+ {% endif %}
21
+ {% endfor %}
@@ -0,0 +1,68 @@
1
+ {%- comment -%}
2
+ awesome-nav-menu.html
3
+
4
+ Mobile dropdown menu for awesome_nav-powered docs navigation.
5
+
6
+ Parameters:
7
+ - nav: Navigation items to render.
8
+ - name: Display name for the menu header.
9
+ - index_url: Optional URL for the docs root page.
10
+ - id (default: "awesome-nav-menu"): HTML ID for the menu container.
11
+ {%- endcomment -%}
12
+
13
+ {%- assign nav_items = include.nav | default: page.awesome_nav %}
14
+ {%- assign menu_name = include.name | default: "Documentation" %}
15
+ {%- assign menu_index_url = include.index_url %}
16
+ {%- assign menu_id = include.id | default: "awesome-nav-menu" %}
17
+
18
+ <script>
19
+ $(document).ready(function () {
20
+ const $menu = $("#{{ menu_id }}");
21
+ const $closeButton = $menu.find(".close-menu");
22
+
23
+ if ($menu.length && $closeButton.length) {
24
+ $closeButton.click(() => $menu.removeAttr("open"));
25
+ }
26
+ });
27
+ </script>
28
+
29
+ <details class="details-reset details-overlay" id="{{ menu_id }}">
30
+ <summary class="btn btn-invisible" aria-haspopup="true">
31
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
32
+ <path d="M4 6H20M4 12H20M4 18H20" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
33
+ </svg>
34
+ </summary>
35
+ <div class="awesome-nav-menu-drawer position-fixed top-0 left-0 right-0 bottom-0">
36
+ <button class="awesome-nav-menu-backdrop close-menu position-fixed top-0 left-0 right-0 bottom-0 color-bg-backdrop border-0 p-0 m-0"
37
+ type="button" aria-label="Close navigation menu"></button>
38
+ <div class="awesome-nav-menu-panel position-fixed top-0 left-0 bottom-0 color-bg-default border-right d-flex flex-column">
39
+ <div class="d-flex flex-justify-between flex-items-center p-3 border-bottom">
40
+ <div tabindex="-1" class="SelectMenu-title">
41
+ {%- if menu_index_url %}
42
+ <a href="{{ menu_index_url | relative_url }}"
43
+ class="AppHeader-link d-flex flex-items-center no-underline mr-3">
44
+ <span class="h3 color-fg-default text-bold">{{ menu_name }}</span>
45
+ </a>
46
+ {%- else %}
47
+ <div class="AppHeader-link d-flex flex-items-center no-underline mr-3">
48
+ <span class="h3 color-fg-default text-bold">{{ menu_name }}</span>
49
+ </div>
50
+ {%- endif %}
51
+ </div>
52
+ <button class="SelectMenu-closeButton close-menu" type="button">
53
+ <span class="octicon octicon-x-16"></span>
54
+ </button>
55
+ </div>
56
+ <div class="SideNav color-bg-default flex-1 overflow-y-auto pl-1">
57
+ {%- if menu_index_url %}
58
+ <a href="{{ menu_index_url | relative_url }}" class="SideNav-item border-0" role="menuitem">
59
+ {{ menu_name }}
60
+ </a>
61
+ {%- else %}
62
+ <div class="SideNav-item no-underline h4 border-0">{{ menu_name }}</div>
63
+ {%- endif %}
64
+ {% include awesome-nav-menu-tree.html items=nav_items %}
65
+ </div>
66
+ </div>
67
+ </div>
68
+ </details>
@@ -0,0 +1,7 @@
1
+ {% assign nav_items = include.nav | default: page.awesome_nav %}
2
+ {% assign nav_title = include.title | default: include.name | default: page.docs_name | default: "Documentation" %}
3
+ {% if nav_items and nav_items.size > 0 %}
4
+ <ul data-overflow-nav class="menu ActionList border-0 ml-3">
5
+ {% include awesome-nav-tree.html items=nav_items level=0 %}
6
+ </ul>
7
+ {% endif %}
@@ -0,0 +1,52 @@
1
+ {% for nav_item in include.items %}
2
+ {% assign item_url = nav_item.url | default: "" %}
3
+ {% assign has_children = nav_item.children and nav_item.children.size > 0 %}
4
+ {% assign is_expanded = nav_item.contains_current | default: false %}
5
+ {% assign is_current = nav_item.current | default: false %}
6
+
7
+ {% if has_children %}
8
+ <li class="list-style-none">
9
+ <details class="details-reset" {% if is_expanded %}open{% endif %}>
10
+ <summary class="list-style-none color-fg-default">
11
+ {% if item_url != "" %}
12
+ <a href="{{ item_url | relative_url }}" class="ActionListItem-label no-underline">
13
+ <div class="menu-item ActionList-item border-0 d-flex flex-items-center flex-justify-between" {% if is_current %}aria-current="page"{% endif %}>
14
+ <span>{{ nav_item.title }}</span>
15
+ <span class="awesome-nav-chevron color-fg-muted d-flex flex-items-center" aria-hidden="true">
16
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
17
+ <path d="M12.78 6.22a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L3.22 7.28a.75.75 0 1 1 1.06-1.06L8 9.94l3.72-3.72a.75.75 0 0 1 1.06 0Z"></path>
18
+ </svg>
19
+ </span>
20
+ </div>
21
+ </a>
22
+ {% else %}
23
+ <div class="menu-item ActionList-item border-0 d-flex flex-items-center flex-justify-between">
24
+ <span>{{ nav_item.title }}</span>
25
+ <span class="awesome-nav-chevron color-fg-muted d-flex flex-items-center" aria-hidden="true">
26
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
27
+ <path d="M12.78 6.22a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L3.22 7.28a.75.75 0 1 1 1.06-1.06L8 9.94l3.72-3.72a.75.75 0 0 1 1.06 0Z"></path>
28
+ </svg>
29
+ </span>
30
+ </div>
31
+ {% endif %}
32
+ </summary>
33
+ <ul class="ml-3">
34
+ {% assign next_level = include.level | default: 0 | plus: 1 %}
35
+ {% include awesome-nav-tree.html items=nav_item.children level=next_level %}
36
+ </ul>
37
+ </details>
38
+ </li>
39
+ {% elsif item_url != "" %}
40
+ <li class="list-style-none">
41
+ <a href="{{ item_url | relative_url }}" class="ActionListItem-label no-underline">
42
+ <div class="menu-item ActionList-item border-0" {% if is_current %}aria-current="page"{% endif %}>
43
+ {{ nav_item.title }}
44
+ </div>
45
+ </a>
46
+ </li>
47
+ {% else %}
48
+ <li class="menu-item ActionList-item border-0 color-fg-default">
49
+ {{ nav_item.title }}
50
+ </li>
51
+ {% endif %}
52
+ {% endfor %}
@@ -0,0 +1,62 @@
1
+ {% assign collection = include.collection | default: site.docs %}
2
+ <div class="Breadcrumb d-flex flex-items-center">
3
+ <nav aria-label="Breadcrumb" class="f5">
4
+ <ol class="breadcrumb">
5
+ {%- assign crumbs = page.url | split: '/' %}
6
+ {%- assign url = "/" %}
7
+ {%- for crumb in crumbs %}
8
+ {%- if crumb == "" %}
9
+ <li class="breadcrumb-item">
10
+ <a href="{{ site.baseurl}}/">home</a>
11
+ </li>
12
+ {%- continue %}
13
+ {%- endif %}
14
+ {%- if crumb == crumbs.last %}
15
+ {%- continue %}
16
+ {%- endif %}
17
+ {%- assign index_url = url | append: crumb | append: "/index.html" %}
18
+ {%- assign isa_index = site.pages | where: "url", index_url | first %}
19
+ {%- assign folder_url = url | append: crumb | append: "/" %}
20
+ {%- assign isa_folder = site.pages | where: "url", folder_url | first %}
21
+ {%- assign url = url | append: crumb %}
22
+ {%- assign isa_page = site.pages | where: "url", url | first %}
23
+ {%- assign isa_post = site.posts | where: "url", url | first %}
24
+ {%- assign isa_collection = collection | where: "url", index_url | first %}
25
+
26
+ {%- assign nice_crumb = crumb | url_decode | replace: ".html", "" | replace: "-", " " | replace: "_", " " |
27
+ downcase %}
28
+
29
+ {% comment %}
30
+ Checking the crumb: {{ crumb }}
31
+ [asset url: {{ asset_url }}]
32
+ [index url: {{ index_url }}]
33
+ [folder_url: {{ folder_url }}]
34
+ [url: {{ url }}]
35
+ {% for p in collection %}
36
+ {{ p.url }}
37
+ {% endfor %}
38
+
39
+ [Page?: {% if isa_page %}page!{% endif %}]
40
+ [Post?: {% if isa_post %}post!{% endif %}]
41
+ [Collection?: {% if isa_collection %}collection!{% endif %}]
42
+ {% endcomment %}
43
+
44
+ {%- if page.url == url or page.url == index_url or page.url == folder_url %}
45
+ <li class="breadcrumb-item breadcrumb-item-selected" aria-current="page">
46
+ <a href="{{ page.url | relative_url }}">{{ nice_crumb }}</a>
47
+ </li>
48
+ {%- break %}
49
+ {%- elsif isa_page or isa_post or isa_index or isa_folder or isa_collection %}
50
+ <li class="breadcrumb-item">
51
+ <a href="{{ url | relative_url }}">{{ nice_crumb }}</a>
52
+ </li>
53
+ {%- else %}
54
+ <li class="breadcrumb-item">
55
+ {{ nice_crumb }}
56
+ </li>
57
+ {%- endif %}
58
+ {%- assign url = url | append: "/" %}
59
+ {%- endfor %}
60
+ </ol>
61
+ </nav>
62
+ </div>
@@ -0,0 +1,18 @@
1
+ {% comment %}
2
+ Required:
3
+ - category (String)
4
+ - pages (Array of documents)
5
+ =====================================
6
+ {% endcomment %}
7
+ {%- assign entries = include.pages %}
8
+ {%- assign category = include.category %}
9
+ <div class="d-flex flex-column col-12 col-sm-6 col-lg-4 col-xl-3 pb-4">
10
+ <h3 class="h3">{{ category | capitalize }}</h3>
11
+ <div class="pt-2 mb-4 text-normal">
12
+ <ul class="list-style-none pl-0">
13
+ {% for entry in entries %}
14
+ <li><a class="pt-2" href="{{ entry.url | relative_url }}">{{ entry.title }}</a></li>
15
+ {% endfor %}
16
+ </ul>
17
+ </div>
18
+ </div>
@@ -0,0 +1,79 @@
1
+ {%- comment -%}
2
+ collection-menu.html
3
+
4
+ Generates a dropdown menu for a Jekyll collection, grouping items by their "category" front matter.
5
+ Useful for documentation, guides, or any collection-based navigation.
6
+
7
+ Parameters:
8
+ - collection: The Jekyll collection to display.
9
+ - name: Display name for the collection header.
10
+ - index: Optional index page object for the collection (e.g., site.docs_index).
11
+ - id (default: "collection-menu"): HTML ID for the menu container (useful when multiple menus are present).
12
+
13
+ Example Usage:
14
+ {% include collection-menu.html collection=docs name="Documentation" index="docs/index.html" %}
15
+ {%- endcomment -%}
16
+
17
+ {%- assign collection = include.collection | default: nil %}
18
+ {%- assign collection_name = include.name | default: include.index.title | default: "Collection" %}
19
+ {%- assign collection_index = include.index %}
20
+ {%- assign collection_id = include.id | default: "collection-menu" %}
21
+ {% comment %}computed variables{% endcomment %}
22
+ {%- assign index_url = collection_index.url %}
23
+ {%- assign collection_without_index = collection | where_exp: "item", "item.url != index_url" %}
24
+
25
+ <script>
26
+ $(document).ready(function () {
27
+ const $menu = $("#{{ collection_id }}");
28
+ const $closeButton = $(".close-menu");
29
+
30
+ if ($menu.length && $closeButton.length) {
31
+ $closeButton.click(() => $menu.removeAttr("open")); // Properly closes the dropdown
32
+ }
33
+ });
34
+ </script>
35
+
36
+ <details class="details-reset details-overlay" id="{{ collection_id }}">
37
+ <summary class="btn btn-invisible" aria-haspopup="true">
38
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
39
+ <path d="M4 6H20M4 12H20M4 18H20" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
40
+ </svg>
41
+ </summary>
42
+ <details-menu class="SelectMenu" role="menu">
43
+ <div class="SelectMenu-modal">
44
+
45
+ <div class="SelectMenu-header">
46
+ <div tabindex="-1" class="SelectMenu-title" id="github-logo">
47
+ {%- if collection_index %}
48
+ <a href="{{ collection_index.url | relative_url }}"
49
+ class="AppHeader-link d-flex flex-items-center no-underline mr-3">
50
+ <span class="h3 color-fg-default text-bold">{{ collection_name }}</span>
51
+ </a>
52
+ {%- else %}
53
+ <div class="AppHeader-link d-flex flex-items-center no-underline mr-3">
54
+ <span class="h3 color-fg-default text-bold">{{ collection_name }}</span>
55
+ </div>
56
+ {%- endif %}
57
+ </div>
58
+ <div class="d-flex flex-justify-end">
59
+ <button class="SelectMenu-closeButton close-menu" type="button">
60
+ <span class="octicon octicon-x-16"></span>
61
+ </button>
62
+ </div>
63
+ </div>
64
+ <div class="SideNav border overflow-y-auto">
65
+ {%- assign collection_categories = collection_without_index | group_by: "category" %}
66
+ {%- for category in collection_categories %}
67
+ {%- assign category_name = category.name | default: collection_name %}
68
+ <div class="SideNav-item no-underline h4">{{ category_name | capitalize }}</div>
69
+ {%- for nav_item in category.items %}
70
+ {%- if nav_item.url and nav_item.title %}
71
+ <a href="{{ nav_item.url | relative_url }}" class="SideNav-item" role="menuitem" {% if page.url contains nav_item.url
72
+ %} aria-current="page" {% endif %}>{{ nav_item.title }}</a>
73
+ {%- endif %}
74
+ {%- endfor %}
75
+ {%- endfor %}
76
+ </div>
77
+ </div>
78
+ </details-menu>
79
+ </details>
@@ -0,0 +1,23 @@
1
+ {% assign categories = include.categories | default: doc_categories %}
2
+ {% assign current_page_url = include.current_page_url | default: page.url %}
3
+ {% assign excluded_url = include.excluded_url | default: category_page.url %}
4
+ {% assign default_category_name = include.default_category | default: "" %}
5
+
6
+ <ul data-overflow-nav class="menu ActionList border-0 ml-3">
7
+ {%- for category in categories %}
8
+ {%- assign category_name = category.name | default: default_category_name %}
9
+ <li class="h4">{{ category_name | capitalize }}
10
+ <ul>
11
+ {%- for nav_item in category.items %}
12
+ {% unless nav_item.url == excluded_url %}
13
+ <a href="{{ nav_item.url | relative_url }}" class="ActionListItem-label no-underline">
14
+ <li class="menu-item ActionList-item border-0" {% if current_page_url == nav_item.url %}aria-current="page"{% endif %}>
15
+ {{ nav_item.title }}
16
+ </li>
17
+ </a>
18
+ {% endunless %}
19
+ {%- endfor %}
20
+ </ul>
21
+ </li>
22
+ {%- endfor %}
23
+ </ul>