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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 79221302839a221725323b51efb743c397689ea249a98db44131318666d2a1ef
4
- data.tar.gz: 8c68b1f40dc553be74b86104683dab0a114f7a6399018e7e2de41cf32316f67e
3
+ metadata.gz: 94b91fed73335183488caf2db7c3c4c113070a51eb7e7d1994691f127cbf0377
4
+ data.tar.gz: 6895640f6da81c0b29eea0da4f9dd5f7aee051000bd8246a0971bdb1e913d273
5
5
  SHA512:
6
- metadata.gz: aa2cc4902e2bb21d7a692ed183942740007f45a6bd669dac3bce4565fcb963194ae4bb0fe41a72fdd4c6a3bfe61fa95ee1c0d61d9ff82b958f51d81826052bfc
7
- data.tar.gz: 223b905e9c6212a2d60042b4baf988068c5d3df8d927ee9fb05b3783c161d133fcfce13beb23e050a96e6f96d123418ee264e621babe3e7f794dcb4b170cf492
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', anyOpen);
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, '&#039;');
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 = escapeHtml(item.title || item.url || 'Untitled');
1021
+ var title = highlightSearchMatches(item.title || item.url || 'Untitled', terms);
938
1022
  var url = escapeHtml(item.url || '/');
939
- var snippet = escapeHtml(buildSnippet(item, terms));
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
  : '';
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module VitePressTheme
3
- VERSION = "1.5.3".freeze
3
+ VERSION = "1.6.0".freeze
4
4
  end
5
5
  end
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.5.3
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-06 00:00:00.000000000 Z
11
+ date: 2026-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll