@terafina/tffa-sfdx-plugin 0.1.1 → 1.0.2
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/README.md +5 -0
- package/assets/favicon.png +0 -0
- package/assets/highlight.css +68 -0
- package/assets/highlight.js +2801 -0
- package/assets/icon.png +0 -0
- package/assets/index.css +447 -0
- package/assets/index.js +411 -0
- package/assets/logo.png +0 -0
- package/assets/lunr.js +3471 -0
- package/assets/mark.js +13 -0
- package/assets/menu.js +34 -0
- package/assets/search.js +98 -0
- package/lib/apexdoc/common/apex-docs-error.d.ts +23 -0
- package/lib/apexdoc/common/apex-docs-error.js +28 -0
- package/lib/apexdoc/common/apex-docs-error.js.map +1 -0
- package/lib/apexdoc/common/array-utils.d.ts +9 -0
- package/lib/apexdoc/common/array-utils.js +36 -0
- package/lib/apexdoc/common/array-utils.js.map +1 -0
- package/lib/apexdoc/common/line-reader.d.ts +40 -0
- package/lib/apexdoc/common/line-reader.js +92 -0
- package/lib/apexdoc/common/line-reader.js.map +1 -0
- package/lib/apexdoc/common/models/apex-model.d.ts +51 -0
- package/lib/apexdoc/common/models/apex-model.js +264 -0
- package/lib/apexdoc/common/models/apex-model.js.map +1 -0
- package/lib/apexdoc/common/models/class-group.d.ts +10 -0
- package/lib/apexdoc/common/models/class-group.js +32 -0
- package/lib/apexdoc/common/models/class-group.js.map +1 -0
- package/lib/apexdoc/common/models/class-model.d.ts +38 -0
- package/lib/apexdoc/common/models/class-model.js +216 -0
- package/lib/apexdoc/common/models/class-model.js.map +1 -0
- package/lib/apexdoc/common/models/engine-config.d.ts +21 -0
- package/lib/apexdoc/common/models/engine-config.js +29 -0
- package/lib/apexdoc/common/models/engine-config.js.map +1 -0
- package/lib/apexdoc/common/models/enum-model.d.ts +15 -0
- package/lib/apexdoc/common/models/enum-model.js +47 -0
- package/lib/apexdoc/common/models/enum-model.js.map +1 -0
- package/lib/apexdoc/common/models/index.d.ts +10 -0
- package/lib/apexdoc/common/models/index.js +14 -0
- package/lib/apexdoc/common/models/index.js.map +1 -0
- package/lib/apexdoc/common/models/method-model.d.ts +26 -0
- package/lib/apexdoc/common/models/method-model.js +309 -0
- package/lib/apexdoc/common/models/method-model.js.map +1 -0
- package/lib/apexdoc/common/models/property-model.d.ts +12 -0
- package/lib/apexdoc/common/models/property-model.js +47 -0
- package/lib/apexdoc/common/models/property-model.js.map +1 -0
- package/lib/apexdoc/common/models/top-level-model.d.ts +19 -0
- package/lib/apexdoc/common/models/top-level-model.js +32 -0
- package/lib/apexdoc/common/models/top-level-model.js.map +1 -0
- package/lib/apexdoc/common/settings.d.ts +55 -0
- package/lib/apexdoc/common/settings.js +124 -0
- package/lib/apexdoc/common/settings.js.map +1 -0
- package/lib/apexdoc/common/tags.d.ts +22 -0
- package/lib/apexdoc/common/tags.js +168 -0
- package/lib/apexdoc/common/tags.js.map +1 -0
- package/lib/apexdoc/common/utils.d.ts +38 -0
- package/lib/apexdoc/common/utils.js +198 -0
- package/lib/apexdoc/common/utils.js.map +1 -0
- package/lib/apexdoc/common/validator-engine.d.ts +24 -0
- package/lib/apexdoc/common/validator-engine.js +162 -0
- package/lib/apexdoc/common/validator-engine.js.map +1 -0
- package/lib/apexdoc/common/validator.d.ts +16 -0
- package/lib/apexdoc/common/validator.js +35 -0
- package/lib/apexdoc/common/validator.js.map +1 -0
- package/lib/apexdoc/engine/file-manager.d.ts +52 -0
- package/lib/apexdoc/engine/file-manager.js +390 -0
- package/lib/apexdoc/engine/file-manager.js.map +1 -0
- package/lib/apexdoc/engine/generators/generator-utils.d.ts +12 -0
- package/lib/apexdoc/engine/generators/generator-utils.js +100 -0
- package/lib/apexdoc/engine/generators/generator-utils.js.map +1 -0
- package/lib/apexdoc/engine/generators/menu-generator.d.ts +9 -0
- package/lib/apexdoc/engine/generators/menu-generator.js +81 -0
- package/lib/apexdoc/engine/generators/menu-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/models/child-enum-markup-generator.d.ts +10 -0
- package/lib/apexdoc/engine/generators/models/child-enum-markup-generator.js +65 -0
- package/lib/apexdoc/engine/generators/models/child-enum-markup-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/models/class-markup-generator.d.ts +8 -0
- package/lib/apexdoc/engine/generators/models/class-markup-generator.js +49 -0
- package/lib/apexdoc/engine/generators/models/class-markup-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/models/enum-markup-generator.d.ts +9 -0
- package/lib/apexdoc/engine/generators/models/enum-markup-generator.js +40 -0
- package/lib/apexdoc/engine/generators/models/enum-markup-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/models/markup-generator.d.ts +27 -0
- package/lib/apexdoc/engine/generators/models/markup-generator.js +148 -0
- package/lib/apexdoc/engine/generators/models/markup-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/models/method-markup-generator.d.ts +22 -0
- package/lib/apexdoc/engine/generators/models/method-markup-generator.js +224 -0
- package/lib/apexdoc/engine/generators/models/method-markup-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/models/property-markup-generator.d.ts +11 -0
- package/lib/apexdoc/engine/generators/models/property-markup-generator.js +66 -0
- package/lib/apexdoc/engine/generators/models/property-markup-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/models/source-markup-generator.d.ts +10 -0
- package/lib/apexdoc/engine/generators/models/source-markup-generator.js +39 -0
- package/lib/apexdoc/engine/generators/models/source-markup-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/models/top-level-markup-generator.d.ts +10 -0
- package/lib/apexdoc/engine/generators/models/top-level-markup-generator.js +49 -0
- package/lib/apexdoc/engine/generators/models/top-level-markup-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/see-link-generator.d.ts +20 -0
- package/lib/apexdoc/engine/generators/see-link-generator.js +183 -0
- package/lib/apexdoc/engine/generators/see-link-generator.js.map +1 -0
- package/lib/commands/tffa/apexdoc.d.ts +29 -0
- package/lib/commands/tffa/apexdoc.js +272 -0
- package/lib/commands/tffa/apexdoc.js.map +1 -0
- package/lib/commands/tffa/ping.d.ts +3 -0
- package/lib/commands/tffa/ping.js +3 -0
- package/lib/commands/tffa/ping.js.map +1 -1
- package/lib/commands/tffa/scan.d.ts +52 -0
- package/lib/commands/tffa/scan.js +362 -0
- package/lib/commands/tffa/scan.js.map +1 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +3 -0
- package/lib/index.js.map +1 -1
- package/lib/shared/model.d.ts +30 -0
- package/lib/shared/model.js +17 -0
- package/lib/shared/model.js.map +1 -0
- package/lib/shared/parser.d.ts +3 -0
- package/lib/shared/parser.js +101 -0
- package/lib/shared/parser.js.map +1 -0
- package/lib/shared/rules.d.ts +3 -0
- package/lib/shared/rules.js +5 -0
- package/lib/shared/rules.js.map +1 -0
- package/oclif.manifest.json +1 -1
- package/package.json +49 -26
- package/CHANGELOG.md +0 -12
package/assets/index.js
ADDED
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
// ==================================================================
|
|
2
|
+
// #region Constants / DOM lifecycle hooks
|
|
3
|
+
// ==================================================================
|
|
4
|
+
|
|
5
|
+
const
|
|
6
|
+
SCOPES = ['global', 'public', 'private', 'protected', 'testMethod', 'webService'],
|
|
7
|
+
MENU_STATE_KEY = 'APEXDOX_MENU',
|
|
8
|
+
ACTIVE_EL_STATE_KEY = 'APEXDOX_ACTIVE_EL',
|
|
9
|
+
SCOPE_STATE_KEY = 'APEXDOX_SCOPE',
|
|
10
|
+
SEARCH_STATE_KEY = 'APEXDOX_SEARCH_RESULTS';
|
|
11
|
+
|
|
12
|
+
const highlightJsSelectors = [
|
|
13
|
+
'pre code',
|
|
14
|
+
'.method-annotations',
|
|
15
|
+
'.class-signature',
|
|
16
|
+
'.attribute-signature',
|
|
17
|
+
'.method-signature',
|
|
18
|
+
'.class-annotations',
|
|
19
|
+
'.prop-annotations'
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
const initializers = [
|
|
23
|
+
initMenu,
|
|
24
|
+
initHighlightJs,
|
|
25
|
+
renderMenuFromState,
|
|
26
|
+
setActiveElement,
|
|
27
|
+
renderSearchFromState,
|
|
28
|
+
readScope,
|
|
29
|
+
hideAllScopes,
|
|
30
|
+
showScopes
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const persisters = [
|
|
34
|
+
persistMenuState,
|
|
35
|
+
persistActiveElement,
|
|
36
|
+
persistSearchState
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const executeAll = funcs => funcs.forEach(func => func());
|
|
40
|
+
|
|
41
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
42
|
+
executeAll(initializers);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
window.onbeforeunload = () => {
|
|
46
|
+
executeAll(persisters);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// #endregion
|
|
50
|
+
// ==================================================================
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
// ==================================================================
|
|
54
|
+
// #region Initialization & Menu Utils, local state
|
|
55
|
+
// ==================================================================
|
|
56
|
+
|
|
57
|
+
function initHighlightJs() {
|
|
58
|
+
// initialize highlighting for code examples and
|
|
59
|
+
// signatures for methods, classes, props and enums
|
|
60
|
+
highlightJsSelectors.forEach(selector => {
|
|
61
|
+
document.querySelectorAll(selector).forEach(block => {
|
|
62
|
+
hljs.highlightElement(block);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// create session storage object for menu state
|
|
68
|
+
// and/or update state with any new menu items
|
|
69
|
+
function initMenu() {
|
|
70
|
+
const hasState = sessionStorage.getItem(MENU_STATE_KEY);
|
|
71
|
+
let items = document.querySelectorAll('.group-name');
|
|
72
|
+
let state = !hasState ? {} : JSON.parse(hasState);
|
|
73
|
+
|
|
74
|
+
if (!hasState) {
|
|
75
|
+
// initialize menu state
|
|
76
|
+
console.log('ApexDox: initializing menu state');
|
|
77
|
+
items.forEach(item => state[item.id] = false);
|
|
78
|
+
} else {
|
|
79
|
+
// If already init, add any new class groups since last load.
|
|
80
|
+
// should really only happen when docs are under development
|
|
81
|
+
updateMenuModel(items, state);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// finally, update sessionStorage with latest state
|
|
85
|
+
sessionStorage.setItem(MENU_STATE_KEY, JSON.stringify(state));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function updateMenuModel(items, state) {
|
|
89
|
+
// 1) get keys currently in state object
|
|
90
|
+
let keys = Object.keys(state);
|
|
91
|
+
|
|
92
|
+
// 2) get ids from each .group-name <details> element
|
|
93
|
+
let groups = Array.prototype.map.call(items, item => ({
|
|
94
|
+
id: item.id,
|
|
95
|
+
isOpen: item.getAttribute('open')
|
|
96
|
+
}));
|
|
97
|
+
|
|
98
|
+
// 3) perform diff to get Ids not yet captured in storage
|
|
99
|
+
let deletedKeys = keys.filter(key =>
|
|
100
|
+
groups.findIndex(group => group.id === key) === -1);
|
|
101
|
+
|
|
102
|
+
let newKeys = groups.filter(item => keys.indexOf(item.id) === -1);
|
|
103
|
+
|
|
104
|
+
// 4) add/delete keys to/from state
|
|
105
|
+
if (deletedKeys.length > 0) {
|
|
106
|
+
deletedKeys.forEach(key => {
|
|
107
|
+
delete state[key];
|
|
108
|
+
});
|
|
109
|
+
console.log('ApexDox: Stale menu keys found, deleting from session storage:');
|
|
110
|
+
console.log(deletedKeys);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (newKeys.length > 0) {
|
|
114
|
+
newKeys.forEach(item => state[item.id] = item.isOpen === '' && true);
|
|
115
|
+
console.log('ApexDox: New menu keys found, adding to session storage:');
|
|
116
|
+
console.log(newKeys.map(function(g) { return g.id }));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function renderMenuFromState() {
|
|
121
|
+
let state = JSON.parse(sessionStorage.getItem(MENU_STATE_KEY));
|
|
122
|
+
if (state) {
|
|
123
|
+
for (let group in state) {
|
|
124
|
+
let item = document.getElementById(group);
|
|
125
|
+
if (state[group]) {
|
|
126
|
+
console.log('ApexDox: Opening ' + group + ' section');
|
|
127
|
+
item.setAttribute('open', '');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// save menu state before each unload so that state is
|
|
134
|
+
// preserved when changing files or when reloading the page.
|
|
135
|
+
function persistMenuState() {
|
|
136
|
+
let items = document.querySelectorAll('.group-name');
|
|
137
|
+
let state = JSON.parse(sessionStorage.getItem(MENU_STATE_KEY));
|
|
138
|
+
|
|
139
|
+
items.forEach(item => {
|
|
140
|
+
let isOpen = item.getAttribute('open');
|
|
141
|
+
console.log(isOpen);
|
|
142
|
+
state[item.id] = isOpen === '' && true;
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
sessionStorage.setItem(MENU_STATE_KEY, JSON.stringify(state));
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// preserve active menu item across loads
|
|
149
|
+
function persistActiveElement() {
|
|
150
|
+
let active = document.querySelector('.active');
|
|
151
|
+
if (active) {
|
|
152
|
+
sessionStorage.setItem(ACTIVE_EL_STATE_KEY, active.id);
|
|
153
|
+
} else {
|
|
154
|
+
sessionStorage.removeItem(ACTIVE_EL_STATE_KEY);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// set active element from storage
|
|
159
|
+
function setActiveElement() {
|
|
160
|
+
const id = sessionStorage.getItem(ACTIVE_EL_STATE_KEY);
|
|
161
|
+
if (id) {
|
|
162
|
+
var item = document.getElementById(id);
|
|
163
|
+
item.classList.add('active');
|
|
164
|
+
// focus element as well so tab
|
|
165
|
+
// navigation can pick up where it left off
|
|
166
|
+
if (item.firstElementChild && item.firstElementChild.tagName === 'A') {
|
|
167
|
+
item.firstElementChild.focus();
|
|
168
|
+
} else {
|
|
169
|
+
item.focus();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// persist any search results across loads
|
|
175
|
+
function persistSearchState() {
|
|
176
|
+
const searchTerm = document.querySelector('#search-input').value;
|
|
177
|
+
const resultsMarkup = document.querySelector('#search-results').innerHTML
|
|
178
|
+
|
|
179
|
+
if (searchTerm.length > 1) {
|
|
180
|
+
const searchState = JSON.stringify({
|
|
181
|
+
searchTerm,
|
|
182
|
+
resultsMarkup
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
sessionStorage.setItem(SEARCH_STATE_KEY, searchState);
|
|
186
|
+
} else {
|
|
187
|
+
sessionStorage.removeItem(SEARCH_STATE_KEY);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// preserve active menu item across loads
|
|
192
|
+
function renderSearchFromState() {
|
|
193
|
+
const state = JSON.parse(sessionStorage.getItem(SEARCH_STATE_KEY));
|
|
194
|
+
|
|
195
|
+
if (state) {
|
|
196
|
+
const searchResults = document.querySelector('#search-results');
|
|
197
|
+
const searchInput = document.querySelector('#search-input');
|
|
198
|
+
|
|
199
|
+
searchInput.value = state.searchTerm;
|
|
200
|
+
searchResults.classList.add('visible');
|
|
201
|
+
searchResults.classList.add('no-transition');
|
|
202
|
+
searchResults.innerHTML = state.resultsMarkup;
|
|
203
|
+
|
|
204
|
+
// remove class which prevents transition on page move
|
|
205
|
+
setTimeout(() => searchResults.classList.remove('no-transition'), 100);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// #endregion
|
|
210
|
+
// ==================================================================
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
// ==================================================================
|
|
214
|
+
// #region Scope Utils
|
|
215
|
+
// ==================================================================
|
|
216
|
+
|
|
217
|
+
function getListScope() {
|
|
218
|
+
let list = [];
|
|
219
|
+
let checkboxes = document.querySelectorAll('input[type=checkbox]');
|
|
220
|
+
checkboxes.forEach(checkbox => {
|
|
221
|
+
if (checkbox.checked && checkbox.id !== 'cbx-all') {
|
|
222
|
+
let str = checkbox.id;
|
|
223
|
+
str = str.replace('cbx-', '');
|
|
224
|
+
list.push(str);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
return list;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
function showScopes() {
|
|
231
|
+
let list = getListScope();
|
|
232
|
+
for (let i = 0; i < list.length; i++) {
|
|
233
|
+
toggleScope(list[i], true);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function showAllScopes() {
|
|
238
|
+
for (let i = 0; i < SCOPES.length; i++) {
|
|
239
|
+
toggleScope(SCOPES[i], true);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
function hideAllScopes() {
|
|
244
|
+
for (let i = 0; i < SCOPES.length; i++) {
|
|
245
|
+
toggleScope(SCOPES[i], false);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function setScope() {
|
|
250
|
+
const list = getListScope();
|
|
251
|
+
const scopes = list.join(',');
|
|
252
|
+
sessionStorage.setItem(SCOPE_STATE_KEY, scopes);
|
|
253
|
+
shouldCheckAll(list);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
function readScope() {
|
|
257
|
+
const strScope = getScope();
|
|
258
|
+
if (strScope != null && strScope != '') {
|
|
259
|
+
|
|
260
|
+
// first clear all the scope checkboxes
|
|
261
|
+
let checkboxes = document.querySelectorAll('input[type=checkbox]');
|
|
262
|
+
checkboxes.forEach(checkbox => checkbox.removeAttribute('checked'));
|
|
263
|
+
|
|
264
|
+
// now check the appropriate scope checkboxes
|
|
265
|
+
let list = strScope.split(',');
|
|
266
|
+
for (let i = 0; i < list.length; i++) {
|
|
267
|
+
let id = 'cbx-' + list[i];
|
|
268
|
+
let checkbox = document.getElementById(id);
|
|
269
|
+
checkbox.setAttribute('checked', true);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// check the all box if all scopes have are active
|
|
273
|
+
shouldCheckAll(list);
|
|
274
|
+
} else {
|
|
275
|
+
showAllScopes();
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
function getScope() {
|
|
280
|
+
const scope = sessionStorage.getItem(SCOPE_STATE_KEY);
|
|
281
|
+
return scope ? scope : '';
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
function shouldCheckAll(list) {
|
|
285
|
+
const checkboxes = document.querySelectorAll('input[type=checkbox]');
|
|
286
|
+
|
|
287
|
+
let allBox = document.getElementById('cbx-all');
|
|
288
|
+
|
|
289
|
+
if (checkboxes.length - 1 === list.length) {
|
|
290
|
+
allBox.setAttribute('checked', true);
|
|
291
|
+
} else {
|
|
292
|
+
allBox.removeAttribute('checked');
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
function toggleScope(scope, isShow) {
|
|
297
|
+
setScope();
|
|
298
|
+
toggleTypeScope(scope, '.properties', '.property', isShow);
|
|
299
|
+
toggleTypeScope(scope, '.enums', '.enum', isShow);
|
|
300
|
+
toggleTypeScope(scope, '.methods', '.method', isShow);
|
|
301
|
+
toggleTypeScope(scope, null, '.class', isShow);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
function toggleTypeScope(scope, tableSelector, itemSelector, isShow) {
|
|
305
|
+
const tables = tableSelector ? document.querySelectorAll(tableSelector) : null;
|
|
306
|
+
const items = document.querySelectorAll(`${itemSelector}.${scope}`);
|
|
307
|
+
|
|
308
|
+
if (isShow === true) {
|
|
309
|
+
if (tables && items.length) { // show tables if they've been hidden
|
|
310
|
+
toggleVisibility(tables, true);
|
|
311
|
+
}
|
|
312
|
+
toggleVisibility(items, true);
|
|
313
|
+
} else {
|
|
314
|
+
toggleVisibility(items, false);
|
|
315
|
+
maybeHideElement(tableSelector, itemSelector); // hide tables if all its rows have been hidden
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
function toggleVisibility(elements, isShow) {
|
|
320
|
+
for (let elem of elements) {
|
|
321
|
+
if (isShow) {
|
|
322
|
+
elem.classList.remove('hide');
|
|
323
|
+
} else {
|
|
324
|
+
elem.classList.add('hide');
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
function maybeHideElement(toHide, itemSelector) {
|
|
330
|
+
let elements, container = document.querySelectorAll(toHide);
|
|
331
|
+
if (elements = document.querySelectorAll(itemSelector)) {
|
|
332
|
+
for (let element of elements) {
|
|
333
|
+
if (!element.classList.contains('hide')) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
toggleVisibility(container, false);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
function toggleActiveClass(elem) {
|
|
342
|
+
// remove isActive from current active element
|
|
343
|
+
let item = document.querySelector('.active');
|
|
344
|
+
item && item.classList.remove('active');
|
|
345
|
+
|
|
346
|
+
// add to new active element
|
|
347
|
+
elem && elem.classList.add('active');
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// #endregion
|
|
351
|
+
// ==================================================================
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
// ==================================================================
|
|
355
|
+
// #region Global Functions
|
|
356
|
+
// ==================================================================
|
|
357
|
+
|
|
358
|
+
window.goToLocation = (url) => {
|
|
359
|
+
// prevent collapsing / expanding menu
|
|
360
|
+
// when clicking on Class Group link
|
|
361
|
+
event.preventDefault();
|
|
362
|
+
|
|
363
|
+
// handle menu navigation
|
|
364
|
+
if (event.currentTarget.classList.contains('nav-item')) {
|
|
365
|
+
toggleActiveClass(event.currentTarget);
|
|
366
|
+
} else {
|
|
367
|
+
const target = document.querySelector(`#item-${url.replace('.html', '')}`);
|
|
368
|
+
if (target) {
|
|
369
|
+
toggleActiveClass(target);
|
|
370
|
+
const details = document.querySelectorAll('details');
|
|
371
|
+
const parentDetail = target.parentNode.previousElementSibling.parentNode;
|
|
372
|
+
|
|
373
|
+
// when navigating from search, open target
|
|
374
|
+
// details element and close all the others.
|
|
375
|
+
for (let detail of details) {
|
|
376
|
+
if (detail !== parentDetail) {
|
|
377
|
+
detail.removeAttribute('open');
|
|
378
|
+
} else {
|
|
379
|
+
parentDetail.setAttribute('open', ''); // same as true
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
} else {
|
|
383
|
+
toggleActiveClass();
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
document.location.href = url;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
window.toggleAllScopes = (isShow) => {
|
|
391
|
+
const checkboxes = document.querySelectorAll('input[type=checkbox]');
|
|
392
|
+
// NOTE: for some reason, just checking or un-checking the checkboxes
|
|
393
|
+
// via attribute and then using hideAllScopes or showAllScopes wasn't
|
|
394
|
+
// working as expected, use click() to trigger the onclick funcs instead.
|
|
395
|
+
checkboxes.forEach(checkbox => {
|
|
396
|
+
if (checkbox.id !== 'cbx-all') {
|
|
397
|
+
if (isShow && !checkbox.checked) {
|
|
398
|
+
checkbox.click();
|
|
399
|
+
} else if (!isShow && checkbox.checked) {
|
|
400
|
+
checkbox.click();
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
window.toggleScope = (scope, isShow) => {
|
|
407
|
+
toggleScope(scope, isShow);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
// #endregion
|
|
411
|
+
// ==================================================================
|
package/assets/logo.png
ADDED
|
Binary file
|