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