just-the-hm-docs 1.0.0.rc1

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 (114) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +24 -0
  4. data/Rakefile +1 -0
  5. data/_includes/components/aux_nav.html +15 -0
  6. data/_includes/components/breadcrumbs.html +15 -0
  7. data/_includes/components/children_nav.html +9 -0
  8. data/_includes/components/footer.html +34 -0
  9. data/_includes/components/header.html +11 -0
  10. data/_includes/components/mermaid.html +5 -0
  11. data/_includes/components/search_footer.html +7 -0
  12. data/_includes/components/search_header.html +9 -0
  13. data/_includes/components/sidebar.html +69 -0
  14. data/_includes/css/callouts.scss.liquid +93 -0
  15. data/_includes/css/custom.scss.liquid +1 -0
  16. data/_includes/css/just-the-docs.scss.liquid +10 -0
  17. data/_includes/fix_linenos.html +65 -0
  18. data/_includes/footer_custom.html +3 -0
  19. data/_includes/head.html +46 -0
  20. data/_includes/head_custom.html +4 -0
  21. data/_includes/header_custom.html +0 -0
  22. data/_includes/icons/code_copy.html +15 -0
  23. data/_includes/icons/document.html +6 -0
  24. data/_includes/icons/expand.html +6 -0
  25. data/_includes/icons/external_link.html +5 -0
  26. data/_includes/icons/icons.html +13 -0
  27. data/_includes/icons/link.html +6 -0
  28. data/_includes/icons/menu.html +6 -0
  29. data/_includes/icons/search.html +6 -0
  30. data/_includes/js/custom.js +0 -0
  31. data/_includes/lunr/custom-data.json +0 -0
  32. data/_includes/lunr/custom-index.js +0 -0
  33. data/_includes/mermaid_config.js +1 -0
  34. data/_includes/nav.html +251 -0
  35. data/_includes/nav_footer_custom.html +0 -0
  36. data/_includes/search_placeholder_custom.html +1 -0
  37. data/_includes/title.html +5 -0
  38. data/_includes/toc_heading_custom.html +1 -0
  39. data/_includes/vendor/anchor_headings.html +172 -0
  40. data/_layouts/about.html +5 -0
  41. data/_layouts/default.html +41 -0
  42. data/_layouts/home.html +5 -0
  43. data/_layouts/minimal.html +60 -0
  44. data/_layouts/page.html +5 -0
  45. data/_layouts/post.html +5 -0
  46. data/_layouts/table_wrappers.html +7 -0
  47. data/_layouts/vendor/compress.html +10 -0
  48. data/_sass/base.scss +114 -0
  49. data/_sass/buttons.scss +113 -0
  50. data/_sass/code.scss +210 -0
  51. data/_sass/color_schemes/dark.scss +28 -0
  52. data/_sass/color_schemes/hm.scss +26 -0
  53. data/_sass/color_schemes/light.scss +208 -0
  54. data/_sass/content.scss +239 -0
  55. data/_sass/custom/custom.scss +30 -0
  56. data/_sass/custom/hm-branding.scss +259 -0
  57. data/_sass/custom/hm-code.scss +153 -0
  58. data/_sass/custom/hm-colors.scss +15 -0
  59. data/_sass/custom/hm-notes.scss +38 -0
  60. data/_sass/custom/setup.scss +160 -0
  61. data/_sass/labels.scss +33 -0
  62. data/_sass/layout.scss +206 -0
  63. data/_sass/modules.scss +17 -0
  64. data/_sass/navigation.scss +235 -0
  65. data/_sass/print.scss +40 -0
  66. data/_sass/search.scss +311 -0
  67. data/_sass/skiptomain.scss +30 -0
  68. data/_sass/support/_functions.scss +11 -0
  69. data/_sass/support/_variables.scss +129 -0
  70. data/_sass/support/mixins/_buttons.scss +27 -0
  71. data/_sass/support/mixins/_layout.scss +34 -0
  72. data/_sass/support/mixins/_typography.scss +84 -0
  73. data/_sass/support/mixins/mixins.scss +3 -0
  74. data/_sass/support/support.scss +3 -0
  75. data/_sass/tables.scss +54 -0
  76. data/_sass/typography.scss +63 -0
  77. data/_sass/utilities/_colors.scss +237 -0
  78. data/_sass/utilities/_layout.scss +101 -0
  79. data/_sass/utilities/_lists.scss +15 -0
  80. data/_sass/utilities/_spacing.scss +162 -0
  81. data/_sass/utilities/_typography.scss +85 -0
  82. data/_sass/utilities/utilities.scss +5 -0
  83. data/_sass/vendor/OneDarkJekyll/LICENSE +21 -0
  84. data/_sass/vendor/OneDarkJekyll/README.md +25 -0
  85. data/_sass/vendor/OneDarkJekyll/colors.less +30 -0
  86. data/_sass/vendor/OneDarkJekyll/syntax-firewatch-green.scss +200 -0
  87. data/_sass/vendor/OneDarkJekyll/syntax-firewatch.scss +200 -0
  88. data/_sass/vendor/OneDarkJekyll/syntax-one-dark-vivid.scss +200 -0
  89. data/_sass/vendor/OneDarkJekyll/syntax-one-dark.scss +200 -0
  90. data/_sass/vendor/OneDarkJekyll/syntax-variables.less +56 -0
  91. data/_sass/vendor/OneDarkJekyll/syntax.less +93 -0
  92. data/_sass/vendor/normalize.scss/README.md +7 -0
  93. data/_sass/vendor/normalize.scss/normalize.scss +351 -0
  94. data/assets/css/just-the-docs-dark.scss +3 -0
  95. data/assets/css/just-the-docs-default.scss +8 -0
  96. data/assets/css/just-the-docs-light.scss +3 -0
  97. data/assets/favicon/android-chrome-192x192.png +0 -0
  98. data/assets/favicon/android-chrome-512x512.png +0 -0
  99. data/assets/favicon/apple-touch-icon.png +0 -0
  100. data/assets/favicon/favicon-16x16.png +0 -0
  101. data/assets/favicon/favicon-32x32.png +0 -0
  102. data/assets/favicon/favicon.ico +0 -0
  103. data/assets/favicon/site.webmanifest +1 -0
  104. data/assets/images/.gitkeep +0 -0
  105. data/assets/images/hm-logo.svg +1 -0
  106. data/assets/images/search.svg +1 -0
  107. data/assets/js/just-the-docs.js +528 -0
  108. data/assets/js/vendor/lunr.min.js +61 -0
  109. data/assets/js/zzzz-search-data.json +74 -0
  110. data/bin/just-the-hm-docs +16 -0
  111. data/changelog.md +17 -0
  112. data/favicon.ico +0 -0
  113. data/lib/tasks/search.rake +88 -0
  114. metadata +217 -0
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1 @@
1
+ {"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
File without changes
@@ -0,0 +1 @@
1
+ <svg width="38" height="38" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="#FF424A" d="M0 0h38v38H0z"/><mask id="a" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="5" y="11" width="28" height="16"><path fill-rule="evenodd" clip-rule="evenodd" d="M5.925 11.277h26.569v15.674H5.925V11.277Z" fill="#fff"/></mask><g mask="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M32.082 22.565c-.293.167-.605.27-.931.27-.742 0-1.17-.376-1.347-.984-.36-1.233-.024-3.468.1-4.93.167-1.978.247-2.754.279-3.168.075-.965-.3-2.04-1.391-2.032-1.014.007-2.337 1.231-2.921 2.463.142-1.578-.31-2.915-1.503-2.907-1.194.009-2.417 1.794-2.79 2.562.076-.718.117-1.019.15-1.407.032-.387.02-.668-.384-.707-.244-.025-.72.06-.996.107-.353.06-.467.314-.532.863-.047.397-.17 1.969-.292 3.483-.277.022-.73.11-1 .148-.51.072-.835.128-1.333.217.168-1.77.415-3.66.5-4.352.051-.42.011-.682-.42-.734-.245-.03-.988.078-1.219.116-.38.063-.524.389-.573.643-.194 1.027-.38 2.884-.504 4.767-.815.2-1.621.432-2.425.698.08-1.462.133-3.093.083-3.898-.072-1.16-.732-1.923-1.746-1.923-1.08 0-2.327.585-3.11 1.25-.51.435-.799.939-.799 1.338 0 .406.203.775.738.775.413-.57 1.496-1.568 2.1-1.568.545 0 .684.475.684.96 0 .398-.08 2.239-.158 3.794-2.075.933-4.417 2.713-4.417 5.497 0 1.803 1.093 2.986 2.66 2.986 2.05 0 3.124-1.869 3.46-3.911.171-1.047.303-2.405.393-3.58l.028-.01a43.509 43.509 0 0 1 2.413-.732c-.123 2.36-.186 4.5.442 6.05.53 1.31 1.656 2.255 3.42 2.242 1.213-.01 2.344-.5 2.85-.961a.701.701 0 0 0 .233-.512c-.011-.3-.2-.545-.45-.71-.502.287-1.058.53-1.847.56-.789.03-1.86-.403-2.3-1.854-.38-1.25-.27-3.715-.166-5.299.764-.152 1.535-.306 2.31-.39l.024-.037-.028.332c-.153 1.758-.354 4.486-.346 5.029.007.413.215.58.523.578.308-.003.858-.11 1.05-.176.157-.054.282-.126.368-.261.077-.122.118-.304.133-.544.039-.646.145-2.236.245-3.245.1-1.008.198-1.886.38-2.664.363-1.567 1.11-3.264 1.79-3.269.437-.003.451.825.328 1.963-.124 1.137-.457 5.3-.45 5.804.007.44.136.671.511.669.308-.002.89-.046 1.12-.139.145-.058.252-.111.326-.241.065-.115.104-.288.12-.576.037-.66.276-3.327.484-4.17.398-1.608 1.23-2.683 1.693-2.686.462-.003.318 1.142.197 2.448-.233 2.521-.472 5.152.155 6.438.371.761 1.039 1.476 2.622 1.476.593 0 1.276-.24 1.641-.602a.915.915 0 0 0 .236-.6.924.924 0 0 0-.41-.747ZM8.507 25.178c-.5 0-.862-.446-.862-1.357 0-1.542 1.252-2.853 2.583-3.607-.088.954-.22 1.98-.312 2.61-.173 1.167-.58 2.354-1.409 2.354Z" fill="#fff"/></g></svg>
@@ -0,0 +1 @@
1
+ <svg width="28" height="28" viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg"><title>Search</title><g fill-rule="nonzero" fill="#959396"><path d="M17.332 20.735c-5.537 0-10-4.6-10-10.247 0-5.646 4.463-10.247 10-10.247 5.536 0 10 4.601 10 10.247s-4.464 10.247-10 10.247zm0-4c3.3 0 6-2.783 6-6.247 0-3.463-2.7-6.247-6-6.247s-6 2.784-6 6.247c0 3.464 2.7 6.247 6 6.247z"/><path d="M11.672 13.791L.192 25.271 3.02 28.1 14.5 16.62z"/></g></svg>
@@ -0,0 +1,528 @@
1
+ ---
2
+ ---
3
+ (function (jtd, undefined) {
4
+
5
+ // Event handling
6
+
7
+ jtd.addEvent = function(el, type, handler) {
8
+ if (el.attachEvent) el.attachEvent('on'+type, handler); else el.addEventListener(type, handler);
9
+ }
10
+ jtd.removeEvent = function(el, type, handler) {
11
+ if (el.detachEvent) el.detachEvent('on'+type, handler); else el.removeEventListener(type, handler);
12
+ }
13
+ jtd.onReady = function(ready) {
14
+ // in case the document is already rendered
15
+ if (document.readyState!='loading') ready();
16
+ // modern browsers
17
+ else if (document.addEventListener) document.addEventListener('DOMContentLoaded', ready);
18
+ // IE <= 8
19
+ else document.attachEvent('onreadystatechange', function(){
20
+ if (document.readyState=='complete') ready();
21
+ });
22
+ }
23
+
24
+ // Show/hide mobile menu
25
+
26
+ function initNav() {
27
+ jtd.addEvent(document, 'click', function(e){
28
+ var target = e.target;
29
+ while (target && !(target.classList && target.classList.contains('nav-list-expander'))) {
30
+ target = target.parentNode;
31
+ }
32
+ if (target) {
33
+ e.preventDefault();
34
+ target.parentNode.classList.toggle('active');
35
+ }
36
+ });
37
+
38
+ const siteNav = document.getElementById('site-nav');
39
+ const mainHeader = document.getElementById('main-header');
40
+ const menuButton = document.getElementById('menu-button');
41
+
42
+ jtd.addEvent(menuButton, 'click', function(e){
43
+ e.preventDefault();
44
+
45
+ if (menuButton.classList.toggle('nav-open')) {
46
+ siteNav.classList.add('nav-open');
47
+ mainHeader.classList.add('nav-open');
48
+ } else {
49
+ siteNav.classList.remove('nav-open');
50
+ mainHeader.classList.remove('nav-open');
51
+ }
52
+ });
53
+
54
+ {%- if site.search_enabled != false and site.search.button %}
55
+ const searchInput = document.getElementById('search-input');
56
+ const searchButton = document.getElementById('search-button');
57
+
58
+ jtd.addEvent(searchButton, 'click', function(e){
59
+ e.preventDefault();
60
+
61
+ mainHeader.classList.add('nav-open');
62
+ searchInput.focus();
63
+ });
64
+ {%- endif %}
65
+ }
66
+
67
+ {%- if site.search_enabled != false %}
68
+ // Site search
69
+
70
+ function initSearch() {
71
+ var request = new XMLHttpRequest();
72
+ request.open('GET', '{{ "assets/js/search-data.json" | relative_url }}', true);
73
+
74
+ request.onload = function(){
75
+ if (request.status >= 200 && request.status < 400) {
76
+ var docs = JSON.parse(request.responseText);
77
+
78
+ lunr.tokenizer.separator = {{ site.search.tokenizer_separator | default: site.search_tokenizer_separator | default: "/[\s\-/]+/" }}
79
+
80
+ var index = lunr(function(){
81
+ this.ref('id');
82
+ this.field('title', { boost: 200 });
83
+ this.field('content', { boost: 2 });
84
+ {%- if site.search.rel_url != false %}
85
+ this.field('relUrl');
86
+ {%- endif %}
87
+ this.metadataWhitelist = ['position']
88
+
89
+ for (var i in docs) {
90
+ {% include lunr/custom-index.js %}
91
+ this.add({
92
+ id: i,
93
+ title: docs[i].title,
94
+ content: docs[i].content,
95
+ {%- if site.search.rel_url != false %}
96
+ relUrl: docs[i].relUrl
97
+ {%- endif %}
98
+ });
99
+ }
100
+ });
101
+
102
+ searchLoaded(index, docs);
103
+ } else {
104
+ console.log('Error loading ajax request. Request status:' + request.status);
105
+ }
106
+ };
107
+
108
+ request.onerror = function(){
109
+ console.log('There was a connection error');
110
+ };
111
+
112
+ request.send();
113
+ }
114
+
115
+ function searchLoaded(index, docs) {
116
+ var index = index;
117
+ var docs = docs;
118
+ var searchInput = document.getElementById('search-input');
119
+ var searchResults = document.getElementById('search-results');
120
+ var mainHeader = document.getElementById('main-header');
121
+ var currentInput;
122
+ var currentSearchIndex = 0;
123
+
124
+ function showSearch() {
125
+ document.documentElement.classList.add('search-active');
126
+ }
127
+
128
+ function hideSearch() {
129
+ document.documentElement.classList.remove('search-active');
130
+ }
131
+
132
+ function update() {
133
+ currentSearchIndex++;
134
+
135
+ var input = searchInput.value;
136
+ if (input === '') {
137
+ hideSearch();
138
+ } else {
139
+ showSearch();
140
+ // scroll search input into view, workaround for iOS Safari
141
+ window.scroll(0, -1);
142
+ setTimeout(function(){ window.scroll(0, 0); }, 0);
143
+ }
144
+ if (input === currentInput) {
145
+ return;
146
+ }
147
+ currentInput = input;
148
+ searchResults.innerHTML = '';
149
+ if (input === '') {
150
+ return;
151
+ }
152
+
153
+ var results = index.query(function (query) {
154
+ var tokens = lunr.tokenizer(input)
155
+ query.term(tokens, {
156
+ boost: 10
157
+ });
158
+ query.term(tokens, {
159
+ wildcard: lunr.Query.wildcard.TRAILING
160
+ });
161
+ });
162
+
163
+ if ((results.length == 0) && (input.length > 2)) {
164
+ var tokens = lunr.tokenizer(input).filter(function(token, i) {
165
+ return token.str.length < 20;
166
+ })
167
+ if (tokens.length > 0) {
168
+ results = index.query(function (query) {
169
+ query.term(tokens, {
170
+ editDistance: Math.round(Math.sqrt(input.length / 2 - 1))
171
+ });
172
+ });
173
+ }
174
+ }
175
+
176
+ if (results.length == 0) {
177
+ var noResultsDiv = document.createElement('div');
178
+ noResultsDiv.classList.add('search-no-result');
179
+ noResultsDiv.innerText = 'No results found';
180
+ searchResults.appendChild(noResultsDiv);
181
+
182
+ } else {
183
+ var resultsList = document.createElement('ul');
184
+ resultsList.classList.add('search-results-list');
185
+ searchResults.appendChild(resultsList);
186
+
187
+ addResults(resultsList, results, 0, 10, 100, currentSearchIndex);
188
+ }
189
+
190
+ function addResults(resultsList, results, start, batchSize, batchMillis, searchIndex) {
191
+ if (searchIndex != currentSearchIndex) {
192
+ return;
193
+ }
194
+ for (var i = start; i < (start + batchSize); i++) {
195
+ if (i == results.length) {
196
+ return;
197
+ }
198
+ addResult(resultsList, results[i]);
199
+ }
200
+ setTimeout(function() {
201
+ addResults(resultsList, results, start + batchSize, batchSize, batchMillis, searchIndex);
202
+ }, batchMillis);
203
+ }
204
+
205
+ function addResult(resultsList, result) {
206
+ var doc = docs[result.ref];
207
+
208
+ var resultsListItem = document.createElement('li');
209
+ resultsListItem.classList.add('search-results-list-item');
210
+ resultsList.appendChild(resultsListItem);
211
+
212
+ var resultLink = document.createElement('a');
213
+ resultLink.classList.add('search-result');
214
+ resultLink.setAttribute('href', doc.url);
215
+ resultsListItem.appendChild(resultLink);
216
+
217
+ var resultTitle = document.createElement('div');
218
+ resultTitle.classList.add('search-result-title');
219
+ resultLink.appendChild(resultTitle);
220
+
221
+ // note: the SVG svg-doc is only loaded as a Jekyll include if site.search_enabled is true; see _includes/icons/icons.html
222
+ var resultDoc = document.createElement('div');
223
+ resultDoc.classList.add('search-result-doc');
224
+ resultDoc.innerHTML = '<svg viewBox="0 0 24 24" class="search-result-icon"><use xlink:href="#svg-doc"></use></svg>';
225
+ resultTitle.appendChild(resultDoc);
226
+
227
+ var resultDocTitle = document.createElement('div');
228
+ resultDocTitle.classList.add('search-result-doc-title');
229
+ resultDocTitle.innerHTML = doc.doc;
230
+ resultDoc.appendChild(resultDocTitle);
231
+ var resultDocOrSection = resultDocTitle;
232
+
233
+ if (doc.doc != doc.title) {
234
+ resultDoc.classList.add('search-result-doc-parent');
235
+ var resultSection = document.createElement('div');
236
+ resultSection.classList.add('search-result-section');
237
+ resultSection.innerHTML = doc.title;
238
+ resultTitle.appendChild(resultSection);
239
+ resultDocOrSection = resultSection;
240
+ }
241
+
242
+ var metadata = result.matchData.metadata;
243
+ var titlePositions = [];
244
+ var contentPositions = [];
245
+ for (var j in metadata) {
246
+ var meta = metadata[j];
247
+ if (meta.title) {
248
+ var positions = meta.title.position;
249
+ for (var k in positions) {
250
+ titlePositions.push(positions[k]);
251
+ }
252
+ }
253
+ if (meta.content) {
254
+ var positions = meta.content.position;
255
+ for (var k in positions) {
256
+ var position = positions[k];
257
+ var previewStart = position[0];
258
+ var previewEnd = position[0] + position[1];
259
+ var ellipsesBefore = true;
260
+ var ellipsesAfter = true;
261
+ for (var k = 0; k < {{ site.search.preview_words_before | default: 5 }}; k++) {
262
+ var nextSpace = doc.content.lastIndexOf(' ', previewStart - 2);
263
+ var nextDot = doc.content.lastIndexOf('. ', previewStart - 2);
264
+ if ((nextDot >= 0) && (nextDot > nextSpace)) {
265
+ previewStart = nextDot + 1;
266
+ ellipsesBefore = false;
267
+ break;
268
+ }
269
+ if (nextSpace < 0) {
270
+ previewStart = 0;
271
+ ellipsesBefore = false;
272
+ break;
273
+ }
274
+ previewStart = nextSpace + 1;
275
+ }
276
+ for (var k = 0; k < {{ site.search.preview_words_after | default: 10 }}; k++) {
277
+ var nextSpace = doc.content.indexOf(' ', previewEnd + 1);
278
+ var nextDot = doc.content.indexOf('. ', previewEnd + 1);
279
+ if ((nextDot >= 0) && (nextDot < nextSpace)) {
280
+ previewEnd = nextDot;
281
+ ellipsesAfter = false;
282
+ break;
283
+ }
284
+ if (nextSpace < 0) {
285
+ previewEnd = doc.content.length;
286
+ ellipsesAfter = false;
287
+ break;
288
+ }
289
+ previewEnd = nextSpace;
290
+ }
291
+ contentPositions.push({
292
+ highlight: position,
293
+ previewStart: previewStart, previewEnd: previewEnd,
294
+ ellipsesBefore: ellipsesBefore, ellipsesAfter: ellipsesAfter
295
+ });
296
+ }
297
+ }
298
+ }
299
+
300
+ if (titlePositions.length > 0) {
301
+ titlePositions.sort(function(p1, p2){ return p1[0] - p2[0] });
302
+ resultDocOrSection.innerHTML = '';
303
+ addHighlightedText(resultDocOrSection, doc.title, 0, doc.title.length, titlePositions);
304
+ }
305
+
306
+ if (contentPositions.length > 0) {
307
+ contentPositions.sort(function(p1, p2){ return p1.highlight[0] - p2.highlight[0] });
308
+ var contentPosition = contentPositions[0];
309
+ var previewPosition = {
310
+ highlight: [contentPosition.highlight],
311
+ previewStart: contentPosition.previewStart, previewEnd: contentPosition.previewEnd,
312
+ ellipsesBefore: contentPosition.ellipsesBefore, ellipsesAfter: contentPosition.ellipsesAfter
313
+ };
314
+ var previewPositions = [previewPosition];
315
+ for (var j = 1; j < contentPositions.length; j++) {
316
+ contentPosition = contentPositions[j];
317
+ if (previewPosition.previewEnd < contentPosition.previewStart) {
318
+ previewPosition = {
319
+ highlight: [contentPosition.highlight],
320
+ previewStart: contentPosition.previewStart, previewEnd: contentPosition.previewEnd,
321
+ ellipsesBefore: contentPosition.ellipsesBefore, ellipsesAfter: contentPosition.ellipsesAfter
322
+ }
323
+ previewPositions.push(previewPosition);
324
+ } else {
325
+ previewPosition.highlight.push(contentPosition.highlight);
326
+ previewPosition.previewEnd = contentPosition.previewEnd;
327
+ previewPosition.ellipsesAfter = contentPosition.ellipsesAfter;
328
+ }
329
+ }
330
+
331
+ var resultPreviews = document.createElement('div');
332
+ resultPreviews.classList.add('search-result-previews');
333
+ resultLink.appendChild(resultPreviews);
334
+
335
+ var content = doc.content;
336
+ for (var j = 0; j < Math.min(previewPositions.length, {{ site.search.previews | default: 3 }}); j++) {
337
+ var position = previewPositions[j];
338
+
339
+ var resultPreview = document.createElement('div');
340
+ resultPreview.classList.add('search-result-preview');
341
+ resultPreviews.appendChild(resultPreview);
342
+
343
+ if (position.ellipsesBefore) {
344
+ resultPreview.appendChild(document.createTextNode('... '));
345
+ }
346
+ addHighlightedText(resultPreview, content, position.previewStart, position.previewEnd, position.highlight);
347
+ if (position.ellipsesAfter) {
348
+ resultPreview.appendChild(document.createTextNode(' ...'));
349
+ }
350
+ }
351
+ }
352
+
353
+ {%- if site.search.rel_url != false %}
354
+ var resultRelUrl = document.createElement('span');
355
+ resultRelUrl.classList.add('search-result-rel-url');
356
+ resultRelUrl.innerText = doc.relUrl;
357
+ resultTitle.appendChild(resultRelUrl);
358
+ {%- endif %}
359
+ }
360
+
361
+ function addHighlightedText(parent, text, start, end, positions) {
362
+ var index = start;
363
+ for (var i in positions) {
364
+ var position = positions[i];
365
+ var span = document.createElement('span');
366
+ span.innerHTML = text.substring(index, position[0]);
367
+ parent.appendChild(span);
368
+ index = position[0] + position[1];
369
+ var highlight = document.createElement('span');
370
+ highlight.classList.add('search-result-highlight');
371
+ highlight.innerHTML = text.substring(position[0], index);
372
+ parent.appendChild(highlight);
373
+ }
374
+ var span = document.createElement('span');
375
+ span.innerHTML = text.substring(index, end);
376
+ parent.appendChild(span);
377
+ }
378
+ }
379
+
380
+ jtd.addEvent(searchInput, 'focus', function(){
381
+ setTimeout(update, 0);
382
+ });
383
+
384
+ jtd.addEvent(searchInput, 'keyup', function(e){
385
+ switch (e.keyCode) {
386
+ case 27: // When esc key is pressed, hide the results and clear the field
387
+ searchInput.value = '';
388
+ break;
389
+ case 38: // arrow up
390
+ case 40: // arrow down
391
+ case 13: // enter
392
+ e.preventDefault();
393
+ return;
394
+ }
395
+ update();
396
+ });
397
+
398
+ jtd.addEvent(searchInput, 'keydown', function(e){
399
+ switch (e.keyCode) {
400
+ case 38: // arrow up
401
+ e.preventDefault();
402
+ var active = document.querySelector('.search-result.active');
403
+ if (active) {
404
+ active.classList.remove('active');
405
+ if (active.parentElement.previousSibling) {
406
+ var previous = active.parentElement.previousSibling.querySelector('.search-result');
407
+ previous.classList.add('active');
408
+ }
409
+ }
410
+ return;
411
+ case 40: // arrow down
412
+ e.preventDefault();
413
+ var active = document.querySelector('.search-result.active');
414
+ if (active) {
415
+ if (active.parentElement.nextSibling) {
416
+ var next = active.parentElement.nextSibling.querySelector('.search-result');
417
+ active.classList.remove('active');
418
+ next.classList.add('active');
419
+ }
420
+ } else {
421
+ var next = document.querySelector('.search-result');
422
+ if (next) {
423
+ next.classList.add('active');
424
+ }
425
+ }
426
+ return;
427
+ case 13: // enter
428
+ e.preventDefault();
429
+ var active = document.querySelector('.search-result.active');
430
+ if (active) {
431
+ active.click();
432
+ } else {
433
+ var first = document.querySelector('.search-result');
434
+ if (first) {
435
+ first.click();
436
+ }
437
+ }
438
+ return;
439
+ }
440
+ });
441
+
442
+ jtd.addEvent(document, 'click', function(e){
443
+ if (e.target != searchInput) {
444
+ hideSearch();
445
+ }
446
+ });
447
+ }
448
+ {%- endif %}
449
+
450
+ // Switch theme
451
+
452
+ jtd.getTheme = function() {
453
+ var cssFileHref = document.querySelector('[rel="stylesheet"]').getAttribute('href');
454
+ return cssFileHref.substring(cssFileHref.lastIndexOf('-') + 1, cssFileHref.length - 4);
455
+ }
456
+
457
+ jtd.setTheme = function(theme) {
458
+ var cssFile = document.querySelector('[rel="stylesheet"]');
459
+ cssFile.setAttribute('href', '{{ "assets/css/just-the-docs-" | relative_url }}' + theme + '.css');
460
+ }
461
+
462
+ // Scroll site-nav to ensure the link to the current page is visible
463
+
464
+ function scrollNav() {
465
+ const href = document.location.pathname;
466
+ const siteNav = document.getElementById('site-nav');
467
+ const targetLink = siteNav.querySelector('a[href="' + href + '"], a[href="' + href + '/"]');
468
+ if(targetLink){
469
+ const rect = targetLink.getBoundingClientRect();
470
+ siteNav.scrollBy(0, rect.top - 3*rect.height);
471
+ }
472
+ }
473
+
474
+ // Document ready
475
+
476
+ jtd.onReady(function(){
477
+ initNav();
478
+ {%- if site.search_enabled != false %}
479
+ initSearch();
480
+ {%- endif %}
481
+ scrollNav();
482
+ });
483
+
484
+ // Copy button on code
485
+
486
+
487
+ {%- if site.enable_copy_code_button != false %}
488
+
489
+ jtd.onReady(function(){
490
+
491
+ var codeBlocks = document.querySelectorAll('div.highlighter-rouge, div.listingblock, figure.highlight');
492
+
493
+ // note: the SVG svg-copied and svg-copy is only loaded as a Jekyll include if site.enable_copy_code_button is true; see _includes/icons/icons.html
494
+ var svgCopied = '<svg viewBox="0 0 24 24" class="copy-icon"><use xlink:href="#svg-copied"></use></svg>';
495
+ var svgCopy = '<svg viewBox="0 0 24 24" class="copy-icon"><use xlink:href="#svg-copy"></use></svg>';
496
+
497
+ codeBlocks.forEach(codeBlock => {
498
+ var copyButton = document.createElement('button');
499
+ var timeout = null;
500
+ copyButton.type = 'button';
501
+ copyButton.ariaLabel = 'Copy code to clipboard';
502
+ copyButton.innerHTML = svgCopy;
503
+ codeBlock.append(copyButton);
504
+
505
+ copyButton.addEventListener('click', function () {
506
+ if(timeout === null) {
507
+ var code = codeBlock.querySelector('pre:not(.lineno)').innerText;
508
+ window.navigator.clipboard.writeText(code);
509
+
510
+ copyButton.innerHTML = svgCopied;
511
+
512
+ var timeoutSetting = 4000;
513
+
514
+ timeout = setTimeout(function () {
515
+ copyButton.innerHTML = svgCopy;
516
+ timeout = null;
517
+ }, timeoutSetting);
518
+ }
519
+ });
520
+ });
521
+
522
+ });
523
+
524
+ {%- endif %}
525
+
526
+ })(window.jtd = window.jtd || {});
527
+
528
+ {% include js/custom.js %}