bajo-spatial 2.2.0 → 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.
- package/docs/BajoSpatial.html +1 -1
- package/docs/data/search.json +1 -1
- package/docs/global.html +1 -1
- package/docs/index.js.html +57 -17
- package/docs/scripts/core.js +477 -476
- package/docs/scripts/resize.js +36 -36
- package/docs/scripts/search.js +105 -105
- package/docs/scripts/third-party/fuse.js +1 -1
- package/docs/scripts/third-party/hljs-line-num-original.js +285 -282
- package/docs/scripts/third-party/hljs-line-num.js +1 -1
- package/docs/scripts/third-party/hljs-original.js +1202 -1195
- package/docs/scripts/third-party/hljs.js +1 -1
- package/docs/scripts/third-party/popper.js +1 -1
- package/docs/scripts/third-party/tippy.js +1 -1
- package/docs/scripts/third-party/tocbot.js +509 -508
- package/index.js +44 -4
- package/package.json +4 -2
- package/test/bajo-spatial.test.js +181 -0
- package/wiki/CHANGES.md +5 -0
package/docs/scripts/core.js
CHANGED
|
@@ -1,115 +1,115 @@
|
|
|
1
1
|
/* global document */
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
var accordionLocalStorageKey = 'accordion-id';
|
|
3
|
+
var themeLocalStorageKey = 'theme';
|
|
4
|
+
var fontSizeLocalStorageKey = 'font-size';
|
|
5
|
+
var html = document.querySelector('html');
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
var MAX_FONT_SIZE = 30;
|
|
8
|
+
var MIN_FONT_SIZE = 10;
|
|
9
9
|
|
|
10
10
|
// eslint-disable-next-line no-undef
|
|
11
|
-
|
|
11
|
+
var localStorage = window.localStorage;
|
|
12
12
|
|
|
13
|
-
function getTheme
|
|
14
|
-
|
|
13
|
+
function getTheme() {
|
|
14
|
+
var theme = localStorage.getItem(themeLocalStorageKey);
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
if (theme) return theme;
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
theme = document.body.getAttribute('data-theme');
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
switch (theme) {
|
|
21
|
+
case 'dark':
|
|
22
|
+
case 'light':
|
|
23
|
+
return theme;
|
|
24
|
+
case 'fallback-dark':
|
|
25
|
+
if (
|
|
26
|
+
// eslint-disable-next-line no-undef
|
|
27
|
+
window.matchMedia('(prefers-color-scheme)').matches &&
|
|
28
28
|
// eslint-disable-next-line no-undef
|
|
29
29
|
window.matchMedia('(prefers-color-scheme: light)').matches
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
) {
|
|
31
|
+
return 'light';
|
|
32
|
+
}
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
return 'dark';
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
case 'fallback-light':
|
|
37
|
+
if (
|
|
38
|
+
// eslint-disable-next-line no-undef
|
|
39
|
+
window.matchMedia('(prefers-color-scheme)').matches &&
|
|
40
40
|
// eslint-disable-next-line no-undef
|
|
41
41
|
window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
) {
|
|
43
|
+
return 'dark';
|
|
44
|
+
}
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
return 'light';
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
default:
|
|
49
|
+
return 'dark';
|
|
50
|
+
}
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
function localUpdateTheme
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
function localUpdateTheme(theme) {
|
|
54
|
+
var body = document.body;
|
|
55
|
+
var svgUse = document.querySelectorAll('.theme-svg-use');
|
|
56
|
+
var iconID = theme === 'dark' ? '#light-theme-icon' : '#dark-theme-icon';
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
body.setAttribute('data-theme', theme);
|
|
59
|
+
body.classList.remove('dark', 'light');
|
|
60
|
+
body.classList.add(theme);
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
svgUse.forEach(function (svg) {
|
|
63
|
+
svg.setAttribute('xlink:href', iconID);
|
|
64
|
+
});
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
function updateTheme
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
function updateTheme(theme) {
|
|
68
|
+
localUpdateTheme(theme);
|
|
69
|
+
localStorage.setItem(themeLocalStorageKey, theme);
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
function toggleTheme
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
function toggleTheme() {
|
|
73
|
+
var body = document.body;
|
|
74
|
+
var theme = body.getAttribute('data-theme');
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
var newTheme = theme === 'dark' ? 'light' : 'dark';
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
updateTheme(newTheme);
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
(function () {
|
|
82
|
-
|
|
82
|
+
var theme = getTheme();
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
})()
|
|
84
|
+
updateTheme(theme);
|
|
85
|
+
})();
|
|
86
86
|
|
|
87
87
|
/**
|
|
88
88
|
* Function to set accordion id to localStorage.
|
|
89
89
|
* @param {string} id Accordion id
|
|
90
90
|
*/
|
|
91
|
-
function setAccordionIdToLocalStorage
|
|
92
|
-
|
|
91
|
+
function setAccordionIdToLocalStorage(id) {
|
|
92
|
+
/**
|
|
93
93
|
* @type {object}
|
|
94
94
|
*/
|
|
95
|
-
|
|
95
|
+
var ids = JSON.parse(localStorage.getItem(accordionLocalStorageKey));
|
|
96
96
|
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
ids[id] = id;
|
|
98
|
+
localStorage.setItem(accordionLocalStorageKey, JSON.stringify(ids));
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
/**
|
|
102
102
|
* Function to remove accordion id from localStorage.
|
|
103
103
|
* @param {string} id Accordion id
|
|
104
104
|
*/
|
|
105
|
-
function removeAccordionIdFromLocalStorage
|
|
106
|
-
|
|
105
|
+
function removeAccordionIdFromLocalStorage(id) {
|
|
106
|
+
/**
|
|
107
107
|
* @type {object}
|
|
108
108
|
*/
|
|
109
|
-
|
|
109
|
+
var ids = JSON.parse(localStorage.getItem(accordionLocalStorageKey));
|
|
110
110
|
|
|
111
|
-
|
|
112
|
-
|
|
111
|
+
delete ids[id];
|
|
112
|
+
localStorage.setItem(accordionLocalStorageKey, JSON.stringify(ids));
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
/**
|
|
@@ -117,374 +117,374 @@ function removeAccordionIdFromLocalStorage (id) {
|
|
|
117
117
|
*
|
|
118
118
|
* @returns {object}
|
|
119
119
|
*/
|
|
120
|
-
function getAccordionIdsFromLocalStorage
|
|
121
|
-
|
|
120
|
+
function getAccordionIdsFromLocalStorage() {
|
|
121
|
+
/**
|
|
122
122
|
* @type {object}
|
|
123
123
|
*/
|
|
124
|
-
|
|
124
|
+
var ids = JSON.parse(localStorage.getItem(accordionLocalStorageKey));
|
|
125
125
|
|
|
126
|
-
|
|
126
|
+
return ids || {};
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
function toggleAccordion
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
function toggleAccordion(element) {
|
|
130
|
+
var currentNode = element;
|
|
131
|
+
var isCollapsed = currentNode.getAttribute('data-isopen') === 'false';
|
|
132
132
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
133
|
+
if (isCollapsed) {
|
|
134
|
+
currentNode.setAttribute('data-isopen', 'true');
|
|
135
|
+
setAccordionIdToLocalStorage(currentNode.id);
|
|
136
|
+
} else {
|
|
137
|
+
currentNode.setAttribute('data-isopen', 'false');
|
|
138
|
+
removeAccordionIdFromLocalStorage(currentNode.id);
|
|
139
|
+
}
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
function initAccordion
|
|
143
|
-
|
|
144
|
-
|
|
142
|
+
function initAccordion() {
|
|
143
|
+
if (
|
|
144
|
+
localStorage.getItem(accordionLocalStorageKey) === undefined ||
|
|
145
145
|
localStorage.getItem(accordionLocalStorageKey) === null
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
const allAccordion = document.querySelectorAll('.sidebar-section-title')
|
|
150
|
-
const ids = getAccordionIdsFromLocalStorage()
|
|
151
|
-
|
|
152
|
-
allAccordion.forEach(function (item) {
|
|
153
|
-
item.addEventListener('click', function () {
|
|
154
|
-
toggleAccordion(item)
|
|
155
|
-
})
|
|
156
|
-
if (item.id in ids) {
|
|
157
|
-
toggleAccordion(item)
|
|
146
|
+
) {
|
|
147
|
+
localStorage.setItem(accordionLocalStorageKey, '{}');
|
|
158
148
|
}
|
|
159
|
-
|
|
149
|
+
var allAccordion = document.querySelectorAll('.sidebar-section-title');
|
|
150
|
+
var ids = getAccordionIdsFromLocalStorage();
|
|
151
|
+
|
|
152
|
+
allAccordion.forEach(function (item) {
|
|
153
|
+
item.addEventListener('click', function () {
|
|
154
|
+
toggleAccordion(item);
|
|
155
|
+
});
|
|
156
|
+
if (item.id in ids) {
|
|
157
|
+
toggleAccordion(item);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
function isSourcePage
|
|
163
|
-
|
|
162
|
+
function isSourcePage() {
|
|
163
|
+
return Boolean(document.querySelector('#source-page'));
|
|
164
164
|
}
|
|
165
165
|
|
|
166
|
-
function bringElementIntoView
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
166
|
+
function bringElementIntoView(element, updateHistory = true) {
|
|
167
|
+
// If element is null then we are not going further
|
|
168
|
+
if (!element) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
171
|
|
|
172
|
-
|
|
172
|
+
/**
|
|
173
173
|
* tocbotInstance is defined in layout.tmpl
|
|
174
174
|
* It is defined when we are initializing tocbot.
|
|
175
175
|
*
|
|
176
176
|
*/
|
|
177
|
-
// eslint-disable-next-line no-undef
|
|
178
|
-
if (tocbotInstance) {
|
|
179
|
-
setTimeout(
|
|
180
|
-
// eslint-disable-next-line no-undef
|
|
181
|
-
() => tocbotInstance.updateTocListActiveElement(element),
|
|
182
|
-
60
|
|
183
|
-
)
|
|
184
|
-
}
|
|
185
|
-
const navbar = document.querySelector('.navbar-container')
|
|
186
|
-
const body = document.querySelector('.main-content')
|
|
187
|
-
const elementTop = element.getBoundingClientRect().top
|
|
188
|
-
|
|
189
|
-
let offset = 16
|
|
190
|
-
|
|
191
|
-
if (navbar) {
|
|
192
|
-
offset += navbar.scrollHeight
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
if (body) {
|
|
196
|
-
body.scrollBy(0, elementTop - offset)
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
if (updateHistory) {
|
|
200
177
|
// eslint-disable-next-line no-undef
|
|
201
|
-
|
|
202
|
-
|
|
178
|
+
if (tocbotInstance) {
|
|
179
|
+
setTimeout(
|
|
180
|
+
// eslint-disable-next-line no-undef
|
|
181
|
+
() => tocbotInstance.updateTocListActiveElement(element),
|
|
182
|
+
60
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
var navbar = document.querySelector('.navbar-container');
|
|
186
|
+
var body = document.querySelector('.main-content');
|
|
187
|
+
var elementTop = element.getBoundingClientRect().top;
|
|
188
|
+
|
|
189
|
+
var offset = 16;
|
|
190
|
+
|
|
191
|
+
if (navbar) {
|
|
192
|
+
offset += navbar.scrollHeight;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if (body) {
|
|
196
|
+
body.scrollBy(0, elementTop - offset);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (updateHistory) {
|
|
200
|
+
// eslint-disable-next-line no-undef
|
|
201
|
+
history.pushState(null, null, '#' + element.id);
|
|
202
|
+
}
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
// eslint-disable-next-line no-unused-vars
|
|
206
|
-
function bringLinkToView
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
206
|
+
function bringLinkToView(event) {
|
|
207
|
+
event.preventDefault();
|
|
208
|
+
event.stopPropagation();
|
|
209
|
+
var id = event.currentTarget.getAttribute('href');
|
|
210
210
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
211
|
+
if (!id) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
214
|
|
|
215
|
-
|
|
215
|
+
var element = document.getElementById(id.slice(1));
|
|
216
216
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
217
|
+
if (element) {
|
|
218
|
+
bringElementIntoView(element);
|
|
219
|
+
}
|
|
220
220
|
}
|
|
221
221
|
|
|
222
|
-
function bringIdToViewOnMount
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
222
|
+
function bringIdToViewOnMount() {
|
|
223
|
+
if (isSourcePage()) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
226
|
|
|
227
|
-
|
|
228
|
-
|
|
227
|
+
// eslint-disable-next-line no-undef
|
|
228
|
+
var id = window.location.hash;
|
|
229
229
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
230
|
+
if (id === '') {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
233
|
|
|
234
|
-
|
|
234
|
+
var element = document.getElementById(id.slice(1));
|
|
235
235
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
236
|
+
if (!element) {
|
|
237
|
+
id = decodeURI(id);
|
|
238
|
+
element = document.getElementById(id.slice(1));
|
|
239
|
+
}
|
|
240
240
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
241
|
+
if (element) {
|
|
242
|
+
bringElementIntoView(element, false);
|
|
243
|
+
}
|
|
244
244
|
}
|
|
245
245
|
|
|
246
|
-
function createAnchorElement
|
|
247
|
-
|
|
246
|
+
function createAnchorElement(id) {
|
|
247
|
+
var anchor = document.createElement('a');
|
|
248
248
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
249
|
+
anchor.textContent = '#';
|
|
250
|
+
anchor.href = '#' + id;
|
|
251
|
+
anchor.classList.add('link-anchor');
|
|
252
|
+
anchor.onclick = bringLinkToView;
|
|
253
253
|
|
|
254
|
-
|
|
254
|
+
return anchor;
|
|
255
255
|
}
|
|
256
256
|
|
|
257
|
-
function addAnchor
|
|
258
|
-
|
|
257
|
+
function addAnchor() {
|
|
258
|
+
var main = document.querySelector('.main-content').querySelector('section');
|
|
259
259
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
260
|
+
var h1 = main.querySelectorAll('h1');
|
|
261
|
+
var h2 = main.querySelectorAll('h2');
|
|
262
|
+
var h3 = main.querySelectorAll('h3');
|
|
263
|
+
var h4 = main.querySelectorAll('h4');
|
|
264
264
|
|
|
265
|
-
|
|
265
|
+
var targets = [h1, h2, h3, h4];
|
|
266
266
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
267
|
+
targets.forEach(function (target) {
|
|
268
|
+
target.forEach(function (heading) {
|
|
269
|
+
var anchor = createAnchorElement(heading.id);
|
|
270
270
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
271
|
+
heading.classList.add('has-anchor');
|
|
272
|
+
heading.append(anchor);
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
275
|
}
|
|
276
276
|
|
|
277
277
|
/**
|
|
278
278
|
*
|
|
279
279
|
* @param {string} value
|
|
280
280
|
*/
|
|
281
|
-
function copy
|
|
282
|
-
|
|
281
|
+
function copy(value) {
|
|
282
|
+
const el = document.createElement('textarea');
|
|
283
283
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
284
|
+
el.value = value;
|
|
285
|
+
document.body.appendChild(el);
|
|
286
|
+
el.select();
|
|
287
|
+
document.execCommand('copy');
|
|
288
|
+
document.body.removeChild(el);
|
|
289
289
|
}
|
|
290
290
|
|
|
291
|
-
function showTooltip
|
|
292
|
-
|
|
291
|
+
function showTooltip(id) {
|
|
292
|
+
var tooltip = document.getElementById(id);
|
|
293
293
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
294
|
+
tooltip.classList.add('show-tooltip');
|
|
295
|
+
setTimeout(function () {
|
|
296
|
+
tooltip.classList.remove('show-tooltip');
|
|
297
|
+
}, 3000);
|
|
298
298
|
}
|
|
299
299
|
|
|
300
300
|
/* eslint-disable-next-line */
|
|
301
301
|
function copyFunction(id) {
|
|
302
|
-
|
|
303
|
-
|
|
302
|
+
// selecting the pre element
|
|
303
|
+
var code = document.getElementById(id);
|
|
304
304
|
|
|
305
|
-
|
|
306
|
-
|
|
305
|
+
// selecting the ol.linenums
|
|
306
|
+
var element = code.querySelector('.linenums');
|
|
307
307
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
308
|
+
if (!element) {
|
|
309
|
+
// selecting the code block
|
|
310
|
+
element = code.querySelector('code');
|
|
311
|
+
}
|
|
312
312
|
|
|
313
|
-
|
|
314
|
-
|
|
313
|
+
// copy
|
|
314
|
+
copy(element.innerText.trim().replace(/(^\t)/gm, ''));
|
|
315
315
|
|
|
316
|
-
|
|
317
|
-
|
|
316
|
+
// show tooltip
|
|
317
|
+
showTooltip('tooltip-' + id);
|
|
318
318
|
}
|
|
319
319
|
|
|
320
|
-
function hideTocOnSourcePage
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
320
|
+
function hideTocOnSourcePage() {
|
|
321
|
+
if (isSourcePage()) {
|
|
322
|
+
document.querySelector('.toc-container').style.display = 'none';
|
|
323
|
+
}
|
|
324
324
|
}
|
|
325
325
|
|
|
326
|
-
function getPreTopBar
|
|
327
|
-
|
|
328
|
-
|
|
326
|
+
function getPreTopBar(id, lang = '') {
|
|
327
|
+
// tooltip
|
|
328
|
+
var tooltip = '<div class="tooltip" id="tooltip-' + id + '">Copied!</div>';
|
|
329
329
|
|
|
330
|
-
|
|
331
|
-
|
|
330
|
+
// template of copy to clipboard icon container
|
|
331
|
+
var copyToClipboard =
|
|
332
332
|
'<button aria-label="copy code" class="icon-button copy-code" onclick="copyFunction(\'' +
|
|
333
333
|
id +
|
|
334
334
|
'\')"><svg class="sm-icon" alt="click to copy"><use xlink:href="#copy-icon"></use></svg>' +
|
|
335
335
|
tooltip +
|
|
336
|
-
'</button>'
|
|
336
|
+
'</button>';
|
|
337
337
|
|
|
338
|
-
|
|
338
|
+
var langNameDiv =
|
|
339
339
|
'<div class="code-lang-name-container"><div class="code-lang-name">' +
|
|
340
340
|
lang.toLocaleUpperCase() +
|
|
341
|
-
'</div></div>'
|
|
341
|
+
'</div></div>';
|
|
342
342
|
|
|
343
|
-
|
|
343
|
+
var topBar =
|
|
344
344
|
'<div class="pre-top-bar-container">' +
|
|
345
345
|
langNameDiv +
|
|
346
346
|
copyToClipboard +
|
|
347
|
-
'</div>'
|
|
347
|
+
'</div>';
|
|
348
348
|
|
|
349
|
-
|
|
349
|
+
return topBar;
|
|
350
350
|
}
|
|
351
351
|
|
|
352
|
-
function getPreDiv
|
|
353
|
-
|
|
352
|
+
function getPreDiv() {
|
|
353
|
+
var divElement = document.createElement('div');
|
|
354
354
|
|
|
355
|
-
|
|
355
|
+
divElement.classList.add('pre-div');
|
|
356
356
|
|
|
357
|
-
|
|
357
|
+
return divElement;
|
|
358
358
|
}
|
|
359
359
|
|
|
360
|
-
function processAllPre
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
360
|
+
function processAllPre() {
|
|
361
|
+
var targets = document.querySelectorAll('pre');
|
|
362
|
+
var footer = document.querySelector('#PeOAagUepe');
|
|
363
|
+
var navbar = document.querySelector('#VuAckcnZhf');
|
|
364
364
|
|
|
365
|
-
|
|
366
|
-
|
|
365
|
+
var navbarHeight = 0;
|
|
366
|
+
var footerHeight = 0;
|
|
367
367
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
368
|
+
if (footer) {
|
|
369
|
+
footerHeight = footer.getBoundingClientRect().height;
|
|
370
|
+
}
|
|
371
371
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
372
|
+
if (navbar) {
|
|
373
|
+
navbarHeight = navbar.getBoundingClientRect().height;
|
|
374
|
+
}
|
|
375
375
|
|
|
376
|
-
|
|
377
|
-
|
|
376
|
+
// eslint-disable-next-line no-undef
|
|
377
|
+
var preMaxHeight = window.innerHeight - navbarHeight - footerHeight - 250;
|
|
378
378
|
|
|
379
|
-
|
|
380
|
-
|
|
379
|
+
targets.forEach(function (pre, idx) {
|
|
380
|
+
var parent = pre.parentNode;
|
|
381
381
|
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
382
|
+
if (parent && parent.getAttribute('data-skip-pre-process') === 'true') {
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
385
|
|
|
386
|
-
|
|
387
|
-
|
|
386
|
+
var div = getPreDiv();
|
|
387
|
+
var id = 'ScDloZOMdL' + idx;
|
|
388
388
|
|
|
389
|
-
|
|
390
|
-
|
|
389
|
+
var lang = pre.getAttribute('data-lang') || 'code';
|
|
390
|
+
var topBar = getPreTopBar(id, lang);
|
|
391
391
|
|
|
392
|
-
|
|
392
|
+
div.innerHTML = topBar;
|
|
393
393
|
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
394
|
+
pre.style.maxHeight = preMaxHeight + 'px';
|
|
395
|
+
pre.id = id;
|
|
396
|
+
pre.classList.add('prettyprint');
|
|
397
|
+
pre.parentNode.insertBefore(div, pre);
|
|
398
|
+
div.appendChild(pre);
|
|
399
|
+
});
|
|
400
400
|
}
|
|
401
401
|
|
|
402
|
-
function highlightAndBringLineIntoView
|
|
403
|
-
|
|
404
|
-
|
|
402
|
+
function highlightAndBringLineIntoView() {
|
|
403
|
+
// eslint-disable-next-line no-undef
|
|
404
|
+
var lineNumber = window.location.hash.replace('#line', '');
|
|
405
405
|
|
|
406
|
-
|
|
407
|
-
|
|
406
|
+
try {
|
|
407
|
+
var selector = '[data-line-number="' + lineNumber + '"';
|
|
408
408
|
|
|
409
|
-
|
|
409
|
+
var element = document.querySelector(selector);
|
|
410
410
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
411
|
+
element.scrollIntoView();
|
|
412
|
+
element.parentNode.classList.add('selected');
|
|
413
|
+
} catch (error) {
|
|
414
|
+
console.error(error);
|
|
415
|
+
}
|
|
416
416
|
}
|
|
417
417
|
|
|
418
|
-
function getFontSize
|
|
419
|
-
|
|
418
|
+
function getFontSize() {
|
|
419
|
+
var currentFontSize = 16;
|
|
420
420
|
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
421
|
+
try {
|
|
422
|
+
currentFontSize = Number.parseInt(
|
|
423
|
+
html.style.fontSize.split('px')[0],
|
|
424
|
+
10
|
|
425
|
+
);
|
|
426
|
+
} catch (error) {
|
|
427
|
+
console.log(error);
|
|
428
|
+
}
|
|
429
429
|
|
|
430
|
-
|
|
430
|
+
return currentFontSize;
|
|
431
431
|
}
|
|
432
432
|
|
|
433
|
-
function localUpdateFontSize
|
|
434
|
-
|
|
433
|
+
function localUpdateFontSize(fontSize) {
|
|
434
|
+
html.style.fontSize = fontSize + 'px';
|
|
435
435
|
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
436
|
+
var fontSizeText = document.querySelector(
|
|
437
|
+
'#b77a68a492f343baabea06fad81f651e'
|
|
438
|
+
);
|
|
439
439
|
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
440
|
+
if (fontSizeText) {
|
|
441
|
+
fontSizeText.innerHTML = fontSize;
|
|
442
|
+
}
|
|
443
443
|
}
|
|
444
444
|
|
|
445
|
-
function updateFontSize
|
|
446
|
-
|
|
447
|
-
|
|
445
|
+
function updateFontSize(fontSize) {
|
|
446
|
+
localUpdateFontSize(fontSize);
|
|
447
|
+
localStorage.setItem(fontSizeLocalStorageKey, fontSize);
|
|
448
448
|
}
|
|
449
449
|
|
|
450
450
|
(function () {
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
451
|
+
var fontSize = getFontSize();
|
|
452
|
+
var fontSizeInLocalStorage = localStorage.getItem(fontSizeLocalStorageKey);
|
|
453
|
+
|
|
454
|
+
if (fontSizeInLocalStorage) {
|
|
455
|
+
var n = Number.parseInt(fontSizeInLocalStorage, 10);
|
|
456
|
+
|
|
457
|
+
if (n === fontSize) {
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
updateFontSize(n);
|
|
461
|
+
} else {
|
|
462
|
+
updateFontSize(fontSize);
|
|
459
463
|
}
|
|
460
|
-
|
|
461
|
-
} else {
|
|
462
|
-
updateFontSize(fontSize)
|
|
463
|
-
}
|
|
464
|
-
})()
|
|
464
|
+
})();
|
|
465
465
|
|
|
466
466
|
// eslint-disable-next-line no-unused-vars
|
|
467
|
-
function incrementFont
|
|
468
|
-
|
|
467
|
+
function incrementFont(event) {
|
|
468
|
+
var n = getFontSize();
|
|
469
469
|
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
470
|
+
if (n < MAX_FONT_SIZE) {
|
|
471
|
+
updateFontSize(n + 1);
|
|
472
|
+
}
|
|
473
473
|
}
|
|
474
474
|
|
|
475
475
|
// eslint-disable-next-line no-unused-vars
|
|
476
|
-
function decrementFont
|
|
477
|
-
|
|
476
|
+
function decrementFont(event) {
|
|
477
|
+
var n = getFontSize();
|
|
478
478
|
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
479
|
+
if (n > MIN_FONT_SIZE) {
|
|
480
|
+
updateFontSize(n - 1);
|
|
481
|
+
}
|
|
482
482
|
}
|
|
483
483
|
|
|
484
|
-
function fontSizeTooltip
|
|
485
|
-
|
|
484
|
+
function fontSizeTooltip() {
|
|
485
|
+
var fontSize = getFontSize();
|
|
486
486
|
|
|
487
|
-
|
|
487
|
+
return `
|
|
488
488
|
<div class="font-size-tooltip">
|
|
489
489
|
<button aria-label="decrease-font-size" class="icon-button ${
|
|
490
490
|
fontSize >= MAX_FONT_SIZE ? 'disabled' : ''
|
|
@@ -510,216 +510,217 @@ function fontSizeTooltip () {
|
|
|
510
510
|
</button>
|
|
511
511
|
</div>
|
|
512
512
|
|
|
513
|
-
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
function initTooltip
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
513
|
+
`;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
function initTooltip() {
|
|
517
|
+
// add tooltip to navbar item
|
|
518
|
+
// eslint-disable-next-line no-undef
|
|
519
|
+
tippy('.theme-toggle', {
|
|
520
|
+
content: 'Toggle Theme',
|
|
521
|
+
delay: 500,
|
|
522
|
+
});
|
|
523
|
+
|
|
524
|
+
// eslint-disable-next-line no-undef
|
|
525
|
+
tippy('.search-button', {
|
|
526
|
+
content: 'Search',
|
|
527
|
+
delay: 500,
|
|
528
|
+
});
|
|
529
529
|
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
530
|
+
// eslint-disable-next-line no-undef
|
|
531
|
+
tippy('.font-size', {
|
|
532
|
+
content: 'Change font size',
|
|
533
|
+
delay: 500,
|
|
534
|
+
});
|
|
535
535
|
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
536
|
+
// eslint-disable-next-line no-undef
|
|
537
|
+
tippy('.codepen-button', {
|
|
538
|
+
content: 'Open code in CodePen',
|
|
539
|
+
placement: 'left',
|
|
540
|
+
});
|
|
541
541
|
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
542
|
+
// eslint-disable-next-line no-undef
|
|
543
|
+
tippy('.copy-code', {
|
|
544
|
+
content: 'Copy this code',
|
|
545
|
+
placement: 'left',
|
|
546
|
+
});
|
|
547
547
|
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
548
|
+
// eslint-disable-next-line no-undef
|
|
549
|
+
tippy('.font-size', {
|
|
550
|
+
content: fontSizeTooltip(),
|
|
551
|
+
trigger: 'click',
|
|
552
|
+
interactive: true,
|
|
553
|
+
allowHTML: true,
|
|
554
|
+
placement: 'left',
|
|
555
|
+
});
|
|
556
556
|
}
|
|
557
557
|
|
|
558
|
-
function fixTable
|
|
559
|
-
|
|
558
|
+
function fixTable() {
|
|
559
|
+
const tables = document.querySelectorAll('table');
|
|
560
|
+
|
|
561
|
+
for (const table of tables) {
|
|
562
|
+
if (table.classList.contains('hljs-ln')) {
|
|
563
|
+
// don't want to wrap code blocks.
|
|
564
|
+
return;
|
|
565
|
+
}
|
|
560
566
|
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
567
|
+
var div = document.createElement('div');
|
|
568
|
+
|
|
569
|
+
div.classList.add('table-div');
|
|
570
|
+
table.parentNode.insertBefore(div, table);
|
|
571
|
+
div.appendChild(table);
|
|
565
572
|
}
|
|
573
|
+
}
|
|
566
574
|
|
|
567
|
-
|
|
575
|
+
function hideMobileMenu() {
|
|
576
|
+
var mobileMenuContainer = document.querySelector('#mobile-sidebar');
|
|
577
|
+
var target = document.querySelector('#mobile-menu');
|
|
578
|
+
var svgUse = target.querySelector('use');
|
|
568
579
|
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
580
|
+
if (mobileMenuContainer) {
|
|
581
|
+
mobileMenuContainer.classList.remove('show');
|
|
582
|
+
}
|
|
583
|
+
if (target) {
|
|
584
|
+
target.setAttribute('data-isopen', 'false');
|
|
585
|
+
}
|
|
586
|
+
if (svgUse) {
|
|
587
|
+
svgUse.setAttribute('xlink:href', '#menu-icon');
|
|
588
|
+
}
|
|
573
589
|
}
|
|
574
590
|
|
|
575
|
-
function
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
591
|
+
function showMobileMenu() {
|
|
592
|
+
var mobileMenuContainer = document.querySelector('#mobile-sidebar');
|
|
593
|
+
var target = document.querySelector('#mobile-menu');
|
|
594
|
+
var svgUse = target.querySelector('use');
|
|
579
595
|
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
596
|
+
if (mobileMenuContainer) {
|
|
597
|
+
mobileMenuContainer.classList.add('show');
|
|
598
|
+
}
|
|
599
|
+
if (target) {
|
|
600
|
+
target.setAttribute('data-isopen', 'true');
|
|
601
|
+
}
|
|
602
|
+
if (svgUse) {
|
|
603
|
+
svgUse.setAttribute('xlink:href', '#close-icon');
|
|
604
|
+
}
|
|
589
605
|
}
|
|
590
606
|
|
|
591
|
-
function
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
const svgUse = target.querySelector('use')
|
|
607
|
+
function onMobileMenuClick() {
|
|
608
|
+
var target = document.querySelector('#mobile-menu');
|
|
609
|
+
var isOpen = target.getAttribute('data-isopen') === 'true';
|
|
595
610
|
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
}
|
|
602
|
-
if (svgUse) {
|
|
603
|
-
svgUse.setAttribute('xlink:href', '#close-icon')
|
|
604
|
-
}
|
|
611
|
+
if (isOpen) {
|
|
612
|
+
hideMobileMenu();
|
|
613
|
+
} else {
|
|
614
|
+
showMobileMenu();
|
|
615
|
+
}
|
|
605
616
|
}
|
|
606
617
|
|
|
607
|
-
function
|
|
608
|
-
|
|
609
|
-
const isOpen = target.getAttribute('data-isopen') === 'true'
|
|
618
|
+
function initMobileMenu() {
|
|
619
|
+
var menu = document.querySelector('#mobile-menu');
|
|
610
620
|
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
}
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
function initMobileMenu () {
|
|
619
|
-
const menu = document.querySelector('#mobile-menu')
|
|
620
|
-
|
|
621
|
-
if (menu) {
|
|
622
|
-
menu.addEventListener('click', onMobileMenuClick)
|
|
623
|
-
}
|
|
624
|
-
}
|
|
625
|
-
|
|
626
|
-
function addHrefToSidebarTitle () {
|
|
627
|
-
const titles = document.querySelectorAll('.sidebar-title-anchor')
|
|
621
|
+
if (menu) {
|
|
622
|
+
menu.addEventListener('click', onMobileMenuClick);
|
|
623
|
+
}
|
|
624
|
+
}
|
|
628
625
|
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
626
|
+
function addHrefToSidebarTitle() {
|
|
627
|
+
var titles = document.querySelectorAll('.sidebar-title-anchor');
|
|
628
|
+
|
|
629
|
+
titles.forEach(function (title) {
|
|
630
|
+
// eslint-disable-next-line no-undef
|
|
631
|
+
title.setAttribute('href', baseURL);
|
|
632
|
+
});
|
|
633
633
|
}
|
|
634
634
|
|
|
635
|
-
function highlightActiveLinkInSidebar
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
635
|
+
function highlightActiveLinkInSidebar() {
|
|
636
|
+
const list = document.location.href.split('/');
|
|
637
|
+
const targetURL = decodeURI(list[list.length - 1]);
|
|
638
|
+
let element = document.querySelector(`.sidebar a[href*='${targetURL}']`);
|
|
639
639
|
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
640
|
+
if (!element) {
|
|
641
|
+
try {
|
|
642
|
+
element = document.querySelector(
|
|
643
643
|
`.sidebar a[href*='${targetURL.split('#')[0]}']`
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
644
|
+
);
|
|
645
|
+
} catch (e) {
|
|
646
|
+
console.error(e);
|
|
647
647
|
|
|
648
|
-
|
|
648
|
+
return;
|
|
649
|
+
}
|
|
649
650
|
}
|
|
650
|
-
}
|
|
651
651
|
|
|
652
|
-
|
|
652
|
+
if (!element) return;
|
|
653
653
|
|
|
654
|
-
|
|
655
|
-
|
|
654
|
+
element.parentElement.classList.add('active');
|
|
655
|
+
element.scrollIntoView();
|
|
656
656
|
}
|
|
657
657
|
|
|
658
|
-
function onDomContentLoaded
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
initMobileMenu()
|
|
662
|
-
|
|
663
|
-
if (themeButton) {
|
|
664
|
-
themeButton.forEach(function (button) {
|
|
665
|
-
button.addEventListener('click', toggleTheme)
|
|
666
|
-
})
|
|
667
|
-
}
|
|
658
|
+
function onDomContentLoaded() {
|
|
659
|
+
var themeButton = document.querySelectorAll('.theme-toggle');
|
|
668
660
|
|
|
669
|
-
|
|
661
|
+
initMobileMenu();
|
|
670
662
|
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
// we are able to cross-check the correctness of
|
|
676
|
-
// result.
|
|
677
|
-
obj.el.parentNode.setAttribute('data-lang', 'code')
|
|
663
|
+
if (themeButton) {
|
|
664
|
+
themeButton.forEach(function (button) {
|
|
665
|
+
button.addEventListener('click', toggleTheme);
|
|
666
|
+
});
|
|
678
667
|
}
|
|
679
|
-
})
|
|
680
|
-
// eslint-disable-next-line no-undef
|
|
681
|
-
hljs.highlightAll()
|
|
682
|
-
// eslint-disable-next-line no-undef
|
|
683
|
-
hljs.initLineNumbersOnLoad({
|
|
684
|
-
singleLine: true
|
|
685
|
-
})
|
|
686
668
|
|
|
687
|
-
|
|
669
|
+
// Highlighting code
|
|
688
670
|
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
}
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
671
|
+
// eslint-disable-next-line no-undef
|
|
672
|
+
hljs.addPlugin({
|
|
673
|
+
'after:highlightElement': function (obj) {
|
|
674
|
+
// Replace 'code' with result.language when
|
|
675
|
+
// we are able to cross-check the correctness of
|
|
676
|
+
// result.
|
|
677
|
+
obj.el.parentNode.setAttribute('data-lang', 'code');
|
|
678
|
+
},
|
|
679
|
+
});
|
|
680
|
+
// eslint-disable-next-line no-undef
|
|
681
|
+
hljs.highlightAll();
|
|
682
|
+
// eslint-disable-next-line no-undef
|
|
683
|
+
hljs.initLineNumbersOnLoad({
|
|
684
|
+
singleLine: true,
|
|
685
|
+
});
|
|
686
|
+
|
|
687
|
+
// Highlight complete
|
|
688
|
+
|
|
689
|
+
initAccordion();
|
|
690
|
+
addAnchor();
|
|
691
|
+
processAllPre();
|
|
692
|
+
hideTocOnSourcePage();
|
|
693
|
+
setTimeout(function () {
|
|
694
|
+
bringIdToViewOnMount();
|
|
695
|
+
if (isSourcePage()) {
|
|
696
|
+
highlightAndBringLineIntoView();
|
|
697
|
+
}
|
|
698
|
+
}, 1000);
|
|
699
|
+
initTooltip();
|
|
700
|
+
fixTable();
|
|
701
|
+
addHrefToSidebarTitle();
|
|
702
|
+
highlightActiveLinkInSidebar();
|
|
703
703
|
}
|
|
704
704
|
|
|
705
705
|
// eslint-disable-next-line no-undef
|
|
706
|
-
window.addEventListener('DOMContentLoaded', onDomContentLoaded)
|
|
706
|
+
window.addEventListener('DOMContentLoaded', onDomContentLoaded);
|
|
707
707
|
|
|
708
708
|
// eslint-disable-next-line no-undef
|
|
709
709
|
window.addEventListener('hashchange', (event) => {
|
|
710
|
-
|
|
710
|
+
const url = new URL(event.newURL);
|
|
711
711
|
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
})
|
|
712
|
+
if (url.hash !== '') {
|
|
713
|
+
bringIdToViewOnMount(url.hash);
|
|
714
|
+
}
|
|
715
|
+
});
|
|
716
716
|
|
|
717
717
|
// eslint-disable-next-line no-undef
|
|
718
718
|
window.addEventListener('storage', (event) => {
|
|
719
|
-
|
|
719
|
+
if (event.newValue === 'undefined') return;
|
|
720
720
|
|
|
721
|
-
|
|
721
|
+
initTooltip();
|
|
722
722
|
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
723
|
+
if (event.key === themeLocalStorageKey) localUpdateTheme(event.newValue);
|
|
724
|
+
if (event.key === fontSizeLocalStorageKey)
|
|
725
|
+
localUpdateFontSize(event.newValue);
|
|
726
|
+
});
|