jekyll-vitepress-theme 0.9.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.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +93 -0
- data/_includes/doc_footer.html +184 -0
- data/_includes/head.html +98 -0
- data/_includes/home.html +315 -0
- data/_includes/local_nav.html +23 -0
- data/_includes/nav.html +232 -0
- data/_includes/search.html +14 -0
- data/_includes/sidebar.html +47 -0
- data/_includes/vp_slots/doc_footer.html +0 -0
- data/_includes/vp_slots/head.html +1 -0
- data/_includes/vp_slots/layout_bottom.html +0 -0
- data/_layouts/default.html +127 -0
- data/_layouts/home.html +5 -0
- data/assets/css/vitepress-components.css +1524 -0
- data/assets/css/vitepress-core.css +2149 -0
- data/assets/css/vitepress-overrides.css +1408 -0
- data/assets/css/vp-icons.css +24 -0
- data/assets/images/favicon/apple-touch-icon.png +0 -0
- data/assets/images/favicon/favicon-96x96.png +0 -0
- data/assets/images/favicon/favicon.ico +0 -0
- data/assets/images/favicon/site.webmanifest +21 -0
- data/assets/images/favicon/web-app-manifest-192x192.png +0 -0
- data/assets/images/favicon/web-app-manifest-512x512.png +0 -0
- data/assets/images/file-icons/css.svg +1 -0
- data/assets/images/file-icons/default.svg +1 -0
- data/assets/images/file-icons/docker.svg +1 -0
- data/assets/images/file-icons/env.svg +1 -0
- data/assets/images/file-icons/go.svg +1 -0
- data/assets/images/file-icons/html.svg +1 -0
- data/assets/images/file-icons/java.svg +1 -0
- data/assets/images/file-icons/javascript.svg +1 -0
- data/assets/images/file-icons/json.svg +1 -0
- data/assets/images/file-icons/kotlin.svg +1 -0
- data/assets/images/file-icons/make.svg +1 -0
- data/assets/images/file-icons/markdown.svg +1 -0
- data/assets/images/file-icons/php.svg +1 -0
- data/assets/images/file-icons/python.svg +1 -0
- data/assets/images/file-icons/ruby.svg +1 -0
- data/assets/images/file-icons/rust.svg +1 -0
- data/assets/images/file-icons/shell.svg +1 -0
- data/assets/images/file-icons/sql.svg +1 -0
- data/assets/images/file-icons/text.svg +1 -0
- data/assets/images/file-icons/toml.svg +1 -0
- data/assets/images/file-icons/typescript.svg +1 -0
- data/assets/images/file-icons/vue.svg +1 -0
- data/assets/images/file-icons/xml.svg +1 -0
- data/assets/images/file-icons/yaml-dark.svg +1 -0
- data/assets/images/file-icons/yaml.svg +1 -0
- data/assets/images/logo.svg +337 -0
- data/assets/images/social-icons/bitbucket.svg +1 -0
- data/assets/images/social-icons/bluesky.svg +1 -0
- data/assets/images/social-icons/devdotto.svg +1 -0
- data/assets/images/social-icons/discord.svg +1 -0
- data/assets/images/social-icons/dribbble.svg +1 -0
- data/assets/images/social-icons/facebook.svg +1 -0
- data/assets/images/social-icons/github.svg +1 -0
- data/assets/images/social-icons/gitlab.svg +1 -0
- data/assets/images/social-icons/instagram.svg +1 -0
- data/assets/images/social-icons/linkedin.svg +1 -0
- data/assets/images/social-icons/mastodon.svg +1 -0
- data/assets/images/social-icons/medium.svg +1 -0
- data/assets/images/social-icons/npm.svg +1 -0
- data/assets/images/social-icons/reddit.svg +1 -0
- data/assets/images/social-icons/rss.svg +1 -0
- data/assets/images/social-icons/slack.svg +1 -0
- data/assets/images/social-icons/stackoverflow.svg +1 -0
- data/assets/images/social-icons/telegram.svg +1 -0
- data/assets/images/social-icons/twitch.svg +1 -0
- data/assets/images/social-icons/twitter.svg +1 -0
- data/assets/images/social-icons/x.svg +1 -0
- data/assets/images/social-icons/youtube.svg +1 -0
- data/assets/images/theme/vitepress-logo-large.svg +340 -0
- data/assets/images/theme/vitepress-logo-mini.svg +337 -0
- data/assets/js/vitepress-theme.js +1301 -0
- data/lib/jekyll/vitepress_theme/hooks.rb +111 -0
- data/lib/jekyll/vitepress_theme/version.rb +5 -0
- data/lib/jekyll-vitepress-theme.rb +3 -0
- metadata +143 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: b16443ae3825807e971321a1c4492381c0f87e0e45e990c71189ab42dfed67ec
|
|
4
|
+
data.tar.gz: 87acf037fa7f85bbfda93cee166d5788f0c4a1e82c4183acbbfc4bd8c65c90ab
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: a745075f8f8ce30ab015f96eb5acf3fa2f82a5860f311e6775fadf9078b170698592687c52913753192b0be4bcc9ad5ad1d795b09e895bad2b513a7654b53b10
|
|
7
|
+
data.tar.gz: b5288a28f63ca4725bdbb0e1f3334db18bdb96f8588f6504436daca4bcb596ab45ec53e66656853ab112c0b0dbb08830c53da0868212a8081107644bc90d514d
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Carmine Paolino
|
|
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,93 @@
|
|
|
1
|
+
# Jekyll VitePress Theme
|
|
2
|
+
|
|
3
|
+
A reusable Jekyll theme gem that reproduces the VitePress default docs experience.
|
|
4
|
+
|
|
5
|
+
## What it includes
|
|
6
|
+
|
|
7
|
+
- VitePress-style layout structure (top nav, sidebar, outline, doc footer)
|
|
8
|
+
- Appearance toggle with `auto -> dark -> light`
|
|
9
|
+
- Local search modal (`/`, `Ctrl/Cmd+K`, `Cmd+K`)
|
|
10
|
+
- Code block copy button, language labels, file-title bars and icons
|
|
11
|
+
- Rouge-native syntax theme config (`vp_theme.rouge_theme.light/dark`)
|
|
12
|
+
- Last-updated hook via plugin
|
|
13
|
+
- Slot includes for lightweight theme extension (`_includes/vp_slots/head.html`, `doc_footer.html`, `layout_bottom.html`)
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
1. Add the gem to your `Gemfile`:
|
|
18
|
+
|
|
19
|
+
```ruby
|
|
20
|
+
gem "jekyll-vitepress-theme"
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
2. Enable it in `_config.yml`:
|
|
24
|
+
|
|
25
|
+
```yaml
|
|
26
|
+
theme: jekyll-vitepress-theme
|
|
27
|
+
plugins:
|
|
28
|
+
- jekyll-vitepress-theme
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
3. Add `vp_theme` configuration:
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
vp_theme:
|
|
35
|
+
nav:
|
|
36
|
+
- text: Guide
|
|
37
|
+
link: /what-is-jekyll-vitepress-theme/
|
|
38
|
+
collections: [getting_started, core_features, advanced]
|
|
39
|
+
sidebar_collections:
|
|
40
|
+
- id: getting_started
|
|
41
|
+
text: Introduction
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Local development (this repo)
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
bundle install
|
|
48
|
+
npm install
|
|
49
|
+
bundle exec jekyll serve --livereload
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Open `http://127.0.0.1:4000`.
|
|
53
|
+
|
|
54
|
+
## Local Quality Gates
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# one-shot verification
|
|
58
|
+
bundle exec rake verify
|
|
59
|
+
|
|
60
|
+
# regenerate built-in social icon assets after changing icon list
|
|
61
|
+
npm run build:social-icons
|
|
62
|
+
|
|
63
|
+
# install and run git hooks
|
|
64
|
+
bundle exec overcommit --install
|
|
65
|
+
bundle exec overcommit --sign pre-commit
|
|
66
|
+
bundle exec overcommit --sign pre-push
|
|
67
|
+
bundle exec overcommit --run
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Docs versioning (this repo)
|
|
71
|
+
|
|
72
|
+
- `main` deploys unreleased docs to `/next/`
|
|
73
|
+
- `main` runs a release gate; when the gem version is unpublished, release docs deploy to `/v/x.y.z/` and refresh `/latest/`
|
|
74
|
+
- `gh-pages/versions.yml` is the single source of truth for the version selector
|
|
75
|
+
|
|
76
|
+
## Theme configuration
|
|
77
|
+
|
|
78
|
+
See docs pages:
|
|
79
|
+
|
|
80
|
+
- [Getting Started](/getting-started/)
|
|
81
|
+
- [Configuration Reference](/configuration-reference/)
|
|
82
|
+
- [Frontmatter Reference](/frontmatter-reference/)
|
|
83
|
+
|
|
84
|
+
## Release a gem
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
gem build jekyll-vitepress-theme.gemspec
|
|
88
|
+
gem push jekyll-vitepress-theme-<version>.gem
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## License
|
|
92
|
+
|
|
93
|
+
MIT
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
{% assign edit_link_enabled = true %}
|
|
2
|
+
{% if site.vp_theme.edit_link == false or page.edit_link == false %}
|
|
3
|
+
{% assign edit_link_enabled = false %}
|
|
4
|
+
{% endif %}
|
|
5
|
+
|
|
6
|
+
{% assign edit_link = nil %}
|
|
7
|
+
{% if edit_link_enabled and site.vp_theme.edit_link and site.vp_theme.edit_link.pattern and page.path %}
|
|
8
|
+
{% assign edit_link = site.vp_theme.edit_link.pattern | replace: ':path', page.path %}
|
|
9
|
+
{% endif %}
|
|
10
|
+
|
|
11
|
+
{% assign edit_link_text = 'Edit this page on GitHub' %}
|
|
12
|
+
{% if site.vp_theme.edit_link and site.vp_theme.edit_link.text %}
|
|
13
|
+
{% assign edit_link_text = site.vp_theme.edit_link.text %}
|
|
14
|
+
{% endif %}
|
|
15
|
+
|
|
16
|
+
{% assign last_updated_enabled = true %}
|
|
17
|
+
{% if site.vp_theme.last_updated == false or page.last_updated == false %}
|
|
18
|
+
{% assign last_updated_enabled = false %}
|
|
19
|
+
{% endif %}
|
|
20
|
+
|
|
21
|
+
{% assign last_updated_text = 'Last updated' %}
|
|
22
|
+
{% if site.vp_theme.last_updated and site.vp_theme.last_updated.text %}
|
|
23
|
+
{% assign last_updated_text = site.vp_theme.last_updated.text %}
|
|
24
|
+
{% endif %}
|
|
25
|
+
|
|
26
|
+
{% assign last_updated_format = '%-d %b %Y, %H:%M' %}
|
|
27
|
+
{% if site.vp_theme.last_updated and site.vp_theme.last_updated.format %}
|
|
28
|
+
{% assign last_updated_format = site.vp_theme.last_updated.format %}
|
|
29
|
+
{% endif %}
|
|
30
|
+
|
|
31
|
+
{% assign last_updated_at = page.last_updated_at | default: page.last_updated | default: nil %}
|
|
32
|
+
{% assign show_last_updated = false %}
|
|
33
|
+
{% if last_updated_enabled and last_updated_at %}
|
|
34
|
+
{% assign show_last_updated = true %}
|
|
35
|
+
{% endif %}
|
|
36
|
+
|
|
37
|
+
{% assign prev_doc = nil %}
|
|
38
|
+
{% assign next_doc = nil %}
|
|
39
|
+
{% if page.collection %}
|
|
40
|
+
{% assign docs = site[page.collection] | sort: 'nav_order' %}
|
|
41
|
+
{% assign found_current = false %}
|
|
42
|
+
{% for doc in docs %}
|
|
43
|
+
{% if found_current and next_doc == nil %}
|
|
44
|
+
{% assign next_doc = doc %}
|
|
45
|
+
{% endif %}
|
|
46
|
+
|
|
47
|
+
{% if doc.url == page.url %}
|
|
48
|
+
{% assign found_current = true %}
|
|
49
|
+
{% elsif found_current == false %}
|
|
50
|
+
{% assign prev_doc = doc %}
|
|
51
|
+
{% endif %}
|
|
52
|
+
{% endfor %}
|
|
53
|
+
{% endif %}
|
|
54
|
+
|
|
55
|
+
{% assign doc_footer_enabled = true %}
|
|
56
|
+
{% if site.vp_theme.doc_footer == false or page.doc_footer == false %}
|
|
57
|
+
{% assign doc_footer_enabled = false %}
|
|
58
|
+
{% endif %}
|
|
59
|
+
|
|
60
|
+
{% assign prev_enabled = doc_footer_enabled %}
|
|
61
|
+
{% assign next_enabled = doc_footer_enabled %}
|
|
62
|
+
{% assign prev_desc = 'Previous page' %}
|
|
63
|
+
{% assign next_desc = 'Next page' %}
|
|
64
|
+
|
|
65
|
+
{% if site.vp_theme.doc_footer and site.vp_theme.doc_footer != false %}
|
|
66
|
+
{% if site.vp_theme.doc_footer.prev == false %}
|
|
67
|
+
{% assign prev_enabled = false %}
|
|
68
|
+
{% elsif site.vp_theme.doc_footer.prev %}
|
|
69
|
+
{% assign prev_desc = site.vp_theme.doc_footer.prev %}
|
|
70
|
+
{% endif %}
|
|
71
|
+
|
|
72
|
+
{% if site.vp_theme.doc_footer.next == false %}
|
|
73
|
+
{% assign next_enabled = false %}
|
|
74
|
+
{% elsif site.vp_theme.doc_footer.next %}
|
|
75
|
+
{% assign next_desc = site.vp_theme.doc_footer.next %}
|
|
76
|
+
{% endif %}
|
|
77
|
+
{% endif %}
|
|
78
|
+
|
|
79
|
+
{% if page.doc_footer and page.doc_footer != false %}
|
|
80
|
+
{% if page.doc_footer.prev == false %}
|
|
81
|
+
{% assign prev_enabled = false %}
|
|
82
|
+
{% elsif page.doc_footer.prev %}
|
|
83
|
+
{% assign prev_desc = page.doc_footer.prev %}
|
|
84
|
+
{% endif %}
|
|
85
|
+
|
|
86
|
+
{% if page.doc_footer.next == false %}
|
|
87
|
+
{% assign next_enabled = false %}
|
|
88
|
+
{% elsif page.doc_footer.next %}
|
|
89
|
+
{% assign next_desc = page.doc_footer.next %}
|
|
90
|
+
{% endif %}
|
|
91
|
+
{% endif %}
|
|
92
|
+
|
|
93
|
+
{% if page.prev == false %}
|
|
94
|
+
{% assign prev_enabled = false %}
|
|
95
|
+
{% endif %}
|
|
96
|
+
|
|
97
|
+
{% if page.next == false %}
|
|
98
|
+
{% assign next_enabled = false %}
|
|
99
|
+
{% endif %}
|
|
100
|
+
|
|
101
|
+
{% assign prev_url = nil %}
|
|
102
|
+
{% assign prev_title = nil %}
|
|
103
|
+
{% assign next_url = nil %}
|
|
104
|
+
{% assign next_title = nil %}
|
|
105
|
+
|
|
106
|
+
{% if prev_enabled %}
|
|
107
|
+
{% if page.prev and page.prev != false and page.prev.link %}
|
|
108
|
+
{% assign prev_url = page.prev.link %}
|
|
109
|
+
{% assign prev_title = page.prev.text | default: page.prev.link %}
|
|
110
|
+
{% elsif prev_doc %}
|
|
111
|
+
{% assign prev_url = prev_doc.url | relative_url %}
|
|
112
|
+
{% assign prev_title = prev_doc.title %}
|
|
113
|
+
{% endif %}
|
|
114
|
+
{% endif %}
|
|
115
|
+
|
|
116
|
+
{% if next_enabled %}
|
|
117
|
+
{% if page.next and page.next != false and page.next.link %}
|
|
118
|
+
{% assign next_url = page.next.link %}
|
|
119
|
+
{% assign next_title = page.next.text | default: page.next.link %}
|
|
120
|
+
{% elsif next_doc %}
|
|
121
|
+
{% assign next_url = next_doc.url | relative_url %}
|
|
122
|
+
{% assign next_title = next_doc.title %}
|
|
123
|
+
{% endif %}
|
|
124
|
+
{% endif %}
|
|
125
|
+
|
|
126
|
+
{% assign show_prev_link = false %}
|
|
127
|
+
{% assign show_next_link = false %}
|
|
128
|
+
{% if prev_url and prev_title %}
|
|
129
|
+
{% assign show_prev_link = true %}
|
|
130
|
+
{% endif %}
|
|
131
|
+
{% if next_url and next_title %}
|
|
132
|
+
{% assign show_next_link = true %}
|
|
133
|
+
{% endif %}
|
|
134
|
+
|
|
135
|
+
{% assign show_footer = false %}
|
|
136
|
+
{% if edit_link or show_last_updated or show_prev_link or show_next_link %}
|
|
137
|
+
{% assign show_footer = true %}
|
|
138
|
+
{% endif %}
|
|
139
|
+
|
|
140
|
+
{% if show_footer %}
|
|
141
|
+
<footer class="VPDocFooter">
|
|
142
|
+
{% if edit_link or show_last_updated %}
|
|
143
|
+
<div class="edit-info">
|
|
144
|
+
{% if edit_link %}
|
|
145
|
+
<div class="edit-link">
|
|
146
|
+
<a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="{{ edit_link }}" target="_blank" rel="noreferrer">
|
|
147
|
+
<span class="vpi-square-pen edit-link-icon"></span>
|
|
148
|
+
{{ edit_link_text }}
|
|
149
|
+
</a>
|
|
150
|
+
</div>
|
|
151
|
+
{% endif %}
|
|
152
|
+
{% if show_last_updated %}
|
|
153
|
+
<div class="last-updated">
|
|
154
|
+
<p class="VPLastUpdated">{{ last_updated_text }}: <time datetime="{{ last_updated_at | date_to_xmlschema }}" lang="{{ site.lang | default: 'en-US' }}">{{ last_updated_at | date: last_updated_format }}</time></p>
|
|
155
|
+
</div>
|
|
156
|
+
{% endif %}
|
|
157
|
+
</div>
|
|
158
|
+
{% endif %}
|
|
159
|
+
|
|
160
|
+
{% if show_prev_link or show_next_link %}
|
|
161
|
+
<nav class="prev-next" aria-labelledby="doc-footer-aria-label">
|
|
162
|
+
<span class="visually-hidden" id="doc-footer-aria-label">Pager</span>
|
|
163
|
+
|
|
164
|
+
<div class="pager">
|
|
165
|
+
{% if show_prev_link %}
|
|
166
|
+
<a class="VPLink link pager-link prev" href="{{ prev_url }}">
|
|
167
|
+
<span class="desc">{{ prev_desc }}</span>
|
|
168
|
+
<span class="title">{{ prev_title }}</span>
|
|
169
|
+
</a>
|
|
170
|
+
{% endif %}
|
|
171
|
+
</div>
|
|
172
|
+
|
|
173
|
+
<div class="pager">
|
|
174
|
+
{% if show_next_link %}
|
|
175
|
+
<a class="VPLink link pager-link next" href="{{ next_url }}">
|
|
176
|
+
<span class="desc">{{ next_desc }}</span>
|
|
177
|
+
<span class="title">{{ next_title }}</span>
|
|
178
|
+
</a>
|
|
179
|
+
{% endif %}
|
|
180
|
+
</div>
|
|
181
|
+
</nav>
|
|
182
|
+
{% endif %}
|
|
183
|
+
</footer>
|
|
184
|
+
{% endif %}
|
data/_includes/head.html
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<head>
|
|
2
|
+
<meta charset="UTF-8">
|
|
3
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
4
|
+
{% assign page_title = page.title | default: site.title %}
|
|
5
|
+
<title>{% if page_title and page_title != site.title %}{{ page_title }} | {{ site.title }}{% else %}{{ site.title }}{% endif %}</title>
|
|
6
|
+
<meta name="description" content="{{ page.description | default: site.description | escape }}">
|
|
7
|
+
<link rel="icon" href="{{ site.vp_theme.logo | default: site.vp_theme.logo_light | default: '/vitepress-logo-mini.svg' | relative_url }}">
|
|
8
|
+
{% assign vp_google_fonts_url = site.vp_theme.google_fonts_url | default: 'https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap' %}
|
|
9
|
+
{% if vp_google_fonts_url %}
|
|
10
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
11
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
12
|
+
<link rel="stylesheet" href="{{ vp_google_fonts_url }}">
|
|
13
|
+
{% endif %}
|
|
14
|
+
|
|
15
|
+
<script>
|
|
16
|
+
(function() {
|
|
17
|
+
var storageKey = 'vitepress-theme-appearance';
|
|
18
|
+
var validModes = ['auto', 'dark', 'light'];
|
|
19
|
+
function normalizeMode(value) {
|
|
20
|
+
return validModes.indexOf(value) >= 0 ? value : 'auto';
|
|
21
|
+
}
|
|
22
|
+
var mode = 'auto';
|
|
23
|
+
try {
|
|
24
|
+
var stored = window.localStorage.getItem(storageKey);
|
|
25
|
+
if (stored) mode = normalizeMode(stored);
|
|
26
|
+
} catch (e) {}
|
|
27
|
+
|
|
28
|
+
var isDark = mode === 'dark' || (mode === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches);
|
|
29
|
+
document.documentElement.classList.toggle('dark', isDark);
|
|
30
|
+
document.documentElement.classList.toggle('light', !isDark);
|
|
31
|
+
document.documentElement.setAttribute('data-appearance-mode', mode);
|
|
32
|
+
|
|
33
|
+
if (/Mac|iPhone|iPad|iPod/.test(navigator.platform)) {
|
|
34
|
+
document.documentElement.classList.add('mac');
|
|
35
|
+
}
|
|
36
|
+
})();
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<link rel="stylesheet" href="{{ '/assets/css/vitepress-core.css' | relative_url }}">
|
|
40
|
+
<link rel="stylesheet" href="{{ '/assets/css/vitepress-components.css' | relative_url }}">
|
|
41
|
+
<link rel="stylesheet" href="{{ '/assets/css/vp-icons.css' | relative_url }}">
|
|
42
|
+
<link rel="stylesheet" href="{{ '/assets/css/vitepress-overrides.css' | relative_url }}">
|
|
43
|
+
|
|
44
|
+
{% assign vp_font_family_base = site.vp_theme.font_family_base %}
|
|
45
|
+
{% assign vp_font_family_mono = site.vp_theme.font_family_mono %}
|
|
46
|
+
{% assign vp_css_vars_light = site.vp_theme.css_vars.light %}
|
|
47
|
+
{% assign vp_css_vars_dark = site.vp_theme.css_vars.dark %}
|
|
48
|
+
{% assign has_theme_var_overrides = false %}
|
|
49
|
+
{% if vp_font_family_base or vp_font_family_mono %}
|
|
50
|
+
{% assign has_theme_var_overrides = true %}
|
|
51
|
+
{% endif %}
|
|
52
|
+
{% if vp_css_vars_light and vp_css_vars_light.size > 0 %}
|
|
53
|
+
{% assign has_theme_var_overrides = true %}
|
|
54
|
+
{% endif %}
|
|
55
|
+
{% if vp_css_vars_dark and vp_css_vars_dark.size > 0 %}
|
|
56
|
+
{% assign has_theme_var_overrides = true %}
|
|
57
|
+
{% endif %}
|
|
58
|
+
{% if has_theme_var_overrides %}
|
|
59
|
+
<style id="vp-theme-vars">
|
|
60
|
+
:root {
|
|
61
|
+
{% if vp_font_family_base %}--vp-font-family-base: {{ vp_font_family_base }};{% endif %}
|
|
62
|
+
{% if vp_font_family_mono %}--vp-font-family-mono: {{ vp_font_family_mono }};{% endif %}
|
|
63
|
+
{% if vp_css_vars_light %}
|
|
64
|
+
{% for pair in vp_css_vars_light %}
|
|
65
|
+
{% assign css_var_name = pair[0] | strip %}
|
|
66
|
+
{% if css_var_name contains '--' %}
|
|
67
|
+
{{ css_var_name }}: {{ pair[1] }};
|
|
68
|
+
{% else %}
|
|
69
|
+
--{{ css_var_name }}: {{ pair[1] }};
|
|
70
|
+
{% endif %}
|
|
71
|
+
{% endfor %}
|
|
72
|
+
{% endif %}
|
|
73
|
+
}
|
|
74
|
+
{% if vp_css_vars_dark and vp_css_vars_dark.size > 0 %}
|
|
75
|
+
.dark {
|
|
76
|
+
{% for pair in vp_css_vars_dark %}
|
|
77
|
+
{% assign css_var_name = pair[0] | strip %}
|
|
78
|
+
{% if css_var_name contains '--' %}
|
|
79
|
+
{{ css_var_name }}: {{ pair[1] }};
|
|
80
|
+
{% else %}
|
|
81
|
+
--{{ css_var_name }}: {{ pair[1] }};
|
|
82
|
+
{% endif %}
|
|
83
|
+
{% endfor %}
|
|
84
|
+
}
|
|
85
|
+
{% endif %}
|
|
86
|
+
</style>
|
|
87
|
+
{% endif %}
|
|
88
|
+
|
|
89
|
+
{% assign vp_rouge_css = site.vp_theme._generated_rouge_css %}
|
|
90
|
+
{% if vp_rouge_css and vp_rouge_css != '' %}
|
|
91
|
+
<style id="vp-rouge-theme">
|
|
92
|
+
{{ vp_rouge_css }}
|
|
93
|
+
</style>
|
|
94
|
+
{% endif %}
|
|
95
|
+
|
|
96
|
+
{% include vp_slots/head.html %}
|
|
97
|
+
<script src="{{ '/assets/js/vitepress-theme.js' | relative_url }}" defer></script>
|
|
98
|
+
</head>
|