jekyll-vitepress-theme 1.5.3 → 1.6.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 +4 -4
- data/assets/css/vitepress-overrides.css +8 -0
- data/assets/js/vitepress-theme.js +89 -5
- data/lib/jekyll/vitepress_theme/version.rb +1 -1
- 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: 94b91fed73335183488caf2db7c3c4c113070a51eb7e7d1994691f127cbf0377
|
|
4
|
+
data.tar.gz: 6895640f6da81c0b29eea0da4f9dd5f7aee051000bd8246a0971bdb1e913d273
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f0261386407867a9cfdce94a18d61da607c51da6de06cb13b65266c00d20b1e30689610eb0c317c5579a465c3ad1da3d628329c35a3688f1fee347d767784071
|
|
7
|
+
data.tar.gz: bbf0b76426124e822bdc534a691009e96100d847bc74b688718ec0e144f908182a9934e45f73b553b984a67513af75cca0e3ff60cd28c6497e0cd51a931462f8
|
|
@@ -631,6 +631,14 @@ body.vp-search-open {
|
|
|
631
631
|
color: var(--vp-c-text-2);
|
|
632
632
|
}
|
|
633
633
|
|
|
634
|
+
.VPSearchResult mark {
|
|
635
|
+
padding: 0;
|
|
636
|
+
color: var(--vp-c-brand-1);
|
|
637
|
+
background: transparent;
|
|
638
|
+
text-decoration: underline;
|
|
639
|
+
text-underline-offset: 2px;
|
|
640
|
+
}
|
|
641
|
+
|
|
634
642
|
.VPSearchEmpty {
|
|
635
643
|
padding: 20px 16px;
|
|
636
644
|
line-height: 22px;
|
|
@@ -174,6 +174,60 @@
|
|
|
174
174
|
var navScreenVersionOpen = false;
|
|
175
175
|
var versionOpen = false;
|
|
176
176
|
var extraOpen = false;
|
|
177
|
+
var bodyScrollLocked = false;
|
|
178
|
+
var bodyInitialOverflow = '';
|
|
179
|
+
var rootInitialOverflowY = '';
|
|
180
|
+
|
|
181
|
+
function hasScrollableAncestor(element) {
|
|
182
|
+
if (!element || element === document.body || element.nodeType !== 1) {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
var style = window.getComputedStyle(element);
|
|
187
|
+
if (
|
|
188
|
+
style.overflowX === 'scroll' ||
|
|
189
|
+
style.overflowY === 'scroll' ||
|
|
190
|
+
(style.overflowX === 'auto' && element.clientWidth < element.scrollWidth) ||
|
|
191
|
+
(style.overflowY === 'auto' && element.clientHeight < element.scrollHeight)
|
|
192
|
+
) {
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return hasScrollableAncestor(element.parentElement);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function preventBodyTouchMove(event) {
|
|
200
|
+
if (hasScrollableAncestor(event.target)) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (event.touches && event.touches.length > 1) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
event.preventDefault();
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
function setBodyScrollLocked(locked) {
|
|
212
|
+
if (locked === bodyScrollLocked) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
if (locked) {
|
|
217
|
+
bodyInitialOverflow = document.body.style.overflow;
|
|
218
|
+
rootInitialOverflowY = root.style.overflowY;
|
|
219
|
+
root.style.overflowY = 'hidden';
|
|
220
|
+
document.body.style.overflow = 'hidden';
|
|
221
|
+
document.body.addEventListener('touchmove', preventBodyTouchMove, { passive: false });
|
|
222
|
+
bodyScrollLocked = true;
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
root.style.overflowY = rootInitialOverflowY;
|
|
227
|
+
document.body.style.overflow = bodyInitialOverflow;
|
|
228
|
+
document.body.removeEventListener('touchmove', preventBodyTouchMove);
|
|
229
|
+
bodyScrollLocked = false;
|
|
230
|
+
}
|
|
177
231
|
|
|
178
232
|
function setVersionOpen(open) {
|
|
179
233
|
if (!versionSelector || !versionButton || !versionMenu) {
|
|
@@ -583,8 +637,6 @@
|
|
|
583
637
|
formatLastUpdatedTimes(document);
|
|
584
638
|
|
|
585
639
|
function syncMobileMenus() {
|
|
586
|
-
var anyOpen = navScreenOpen || sidebarOpen;
|
|
587
|
-
|
|
588
640
|
if (sidebar) {
|
|
589
641
|
sidebar.classList.toggle('open', sidebarOpen);
|
|
590
642
|
}
|
|
@@ -594,7 +646,7 @@
|
|
|
594
646
|
}
|
|
595
647
|
|
|
596
648
|
if (backdrop) {
|
|
597
|
-
backdrop.classList.toggle('is-active',
|
|
649
|
+
backdrop.classList.toggle('is-active', sidebarOpen);
|
|
598
650
|
}
|
|
599
651
|
|
|
600
652
|
if (hamburger) {
|
|
@@ -612,6 +664,7 @@
|
|
|
612
664
|
|
|
613
665
|
document.body.classList.toggle('vp-nav-screen-open', navScreenOpen);
|
|
614
666
|
document.body.classList.toggle('vp-sidebar-open', sidebarOpen);
|
|
667
|
+
setBodyScrollLocked(navScreenOpen || sidebarOpen);
|
|
615
668
|
}
|
|
616
669
|
|
|
617
670
|
function closeMobileMenus() {
|
|
@@ -808,6 +861,37 @@
|
|
|
808
861
|
.replace(/'/g, ''');
|
|
809
862
|
}
|
|
810
863
|
|
|
864
|
+
function escapeRegex(value) {
|
|
865
|
+
return String(value || '').replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
function highlightSearchMatches(value, terms) {
|
|
869
|
+
var text = String(value || '');
|
|
870
|
+
var uniqueTerms = Array.from(new Set(terms))
|
|
871
|
+
.filter(Boolean)
|
|
872
|
+
.sort(function (a, b) {
|
|
873
|
+
return b.length - a.length;
|
|
874
|
+
});
|
|
875
|
+
|
|
876
|
+
if (!text || !uniqueTerms.length) {
|
|
877
|
+
return escapeHtml(text);
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
var pattern = new RegExp('(' + uniqueTerms.map(escapeRegex).join('|') + ')', 'gi');
|
|
881
|
+
var html = '';
|
|
882
|
+
var lastIndex = 0;
|
|
883
|
+
var match;
|
|
884
|
+
|
|
885
|
+
while ((match = pattern.exec(text)) !== null) {
|
|
886
|
+
html += escapeHtml(text.slice(lastIndex, match.index));
|
|
887
|
+
html += '<mark>' + escapeHtml(match[0]) + '</mark>';
|
|
888
|
+
lastIndex = pattern.lastIndex;
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
html += escapeHtml(text.slice(lastIndex));
|
|
892
|
+
return html;
|
|
893
|
+
}
|
|
894
|
+
|
|
811
895
|
function scoreSearchItem(item, terms, query) {
|
|
812
896
|
var title = String(item.title || '').toLowerCase();
|
|
813
897
|
var content = String(item.content || '').toLowerCase();
|
|
@@ -934,9 +1018,9 @@
|
|
|
934
1018
|
var html = ranked
|
|
935
1019
|
.map(function (entry) {
|
|
936
1020
|
var item = entry.item;
|
|
937
|
-
var title =
|
|
1021
|
+
var title = highlightSearchMatches(item.title || item.url || 'Untitled', terms);
|
|
938
1022
|
var url = escapeHtml(item.url || '/');
|
|
939
|
-
var snippet =
|
|
1023
|
+
var snippet = highlightSearchMatches(buildSnippet(item, terms), terms);
|
|
940
1024
|
var turboAttributes = searchFrameTarget && url !== '/'
|
|
941
1025
|
? ' data-turbo="true" data-turbo-frame="' + escapeHtml(searchFrameTarget) + '" data-turbo-action="advance"'
|
|
942
1026
|
: '';
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jekyll-vitepress-theme
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Carmine Paolino
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-06-
|
|
11
|
+
date: 2026-06-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: jekyll
|