@microsoft/applicationinsights-debugplugin-js 3.0.0-beta.2303-11 → 3.0.0-nightly3.2304-28

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 (101) hide show
  1. package/browser/{ai.dbg.3.0.0-beta.2303-11.cjs.js → es5/ai.dbg.3.0.0-nightly3.2304-28.cjs.js} +794 -773
  2. package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.cjs.js.map +1 -0
  3. package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.cjs.min.js +6 -0
  4. package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.cjs.min.js.map +1 -0
  5. package/browser/{ai.dbg.3.0.0-beta.2303-11.gbl.js → es5/ai.dbg.3.0.0-nightly3.2304-28.gbl.js} +795 -774
  6. package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.gbl.js.map +1 -0
  7. package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.gbl.min.js +6 -0
  8. package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.gbl.min.js.map +1 -0
  9. package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.integrity.json +66 -0
  10. package/browser/{ai.dbg.3.0.0-beta.2303-11.js → es5/ai.dbg.3.0.0-nightly3.2304-28.js} +795 -774
  11. package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.js.map +1 -0
  12. package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.min.js +6 -0
  13. package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.min.js.map +1 -0
  14. package/browser/{ai.dbg.3.cjs.js → es5/ai.dbg.3.cjs.js} +793 -772
  15. package/browser/es5/ai.dbg.3.cjs.js.map +1 -0
  16. package/browser/es5/ai.dbg.3.cjs.min.js +6 -0
  17. package/browser/es5/ai.dbg.3.cjs.min.js.map +1 -0
  18. package/browser/{ai.dbg.3.gbl.js → es5/ai.dbg.3.gbl.js} +794 -773
  19. package/browser/es5/ai.dbg.3.gbl.js.map +1 -0
  20. package/browser/es5/ai.dbg.3.gbl.min.js +6 -0
  21. package/browser/es5/ai.dbg.3.gbl.min.js.map +1 -0
  22. package/browser/{ai.dbg.3.js → es5/ai.dbg.3.js} +794 -773
  23. package/browser/es5/ai.dbg.3.js.map +1 -0
  24. package/browser/es5/ai.dbg.3.min.js +6 -0
  25. package/browser/es5/ai.dbg.3.min.js.map +1 -0
  26. package/dist/{applicationinsights-debugplugin-js.js → es5/applicationinsights-debugplugin-js.js} +794 -773
  27. package/dist/es5/applicationinsights-debugplugin-js.js.map +1 -0
  28. package/dist/es5/applicationinsights-debugplugin-js.min.js +6 -0
  29. package/dist/es5/applicationinsights-debugplugin-js.min.js.map +1 -0
  30. package/{dist-esm → dist-es5}/DebugPlugin.js +1 -1
  31. package/{dist-esm → dist-es5}/__DynamicConstants.js +1 -1
  32. package/dist-es5/applicationinsights-debugplugin-js.js +9 -0
  33. package/{dist-esm → dist-es5}/components/Dashboard.js +1 -1
  34. package/{dist-esm → dist-es5}/components/LogEntry.js +1 -1
  35. package/{dist-esm → dist-es5}/components/debugBins.js +1 -1
  36. package/{dist-esm → dist-es5}/components/filterList.js +1 -1
  37. package/{dist-esm → dist-es5}/components/helpers.js +1 -1
  38. package/{dist-esm → dist-es5}/components/styleNodeSrc.js +1 -1
  39. package/dist-es5/interfaces/IDebugPluginConfig.js +8 -0
  40. package/package.json +18 -17
  41. package/tsconfig.json +4 -3
  42. package/types/applicationinsights-debugplugin-js.d.ts +59 -2
  43. package/{dist/applicationinsights-debugplugin-js.d.ts → types/applicationinsights-debugplugin-js.namespaced.d.ts} +1 -1
  44. package/browser/ai.dbg.3.0.0-beta.2303-11.cjs.js.map +0 -1
  45. package/browser/ai.dbg.3.0.0-beta.2303-11.cjs.min.js +0 -6
  46. package/browser/ai.dbg.3.0.0-beta.2303-11.cjs.min.js.map +0 -1
  47. package/browser/ai.dbg.3.0.0-beta.2303-11.gbl.js.map +0 -1
  48. package/browser/ai.dbg.3.0.0-beta.2303-11.gbl.min.js +0 -6
  49. package/browser/ai.dbg.3.0.0-beta.2303-11.gbl.min.js.map +0 -1
  50. package/browser/ai.dbg.3.0.0-beta.2303-11.integrity.json +0 -66
  51. package/browser/ai.dbg.3.0.0-beta.2303-11.js.map +0 -1
  52. package/browser/ai.dbg.3.0.0-beta.2303-11.min.js +0 -6
  53. package/browser/ai.dbg.3.0.0-beta.2303-11.min.js.map +0 -1
  54. package/browser/ai.dbg.3.cjs.js.map +0 -1
  55. package/browser/ai.dbg.3.cjs.min.js +0 -6
  56. package/browser/ai.dbg.3.cjs.min.js.map +0 -1
  57. package/browser/ai.dbg.3.gbl.js.map +0 -1
  58. package/browser/ai.dbg.3.gbl.min.js +0 -6
  59. package/browser/ai.dbg.3.gbl.min.js.map +0 -1
  60. package/browser/ai.dbg.3.js.map +0 -1
  61. package/browser/ai.dbg.3.min.js +0 -6
  62. package/browser/ai.dbg.3.min.js.map +0 -1
  63. package/dist/applicationinsights-debugplugin-js.api.json +0 -464
  64. package/dist/applicationinsights-debugplugin-js.api.md +0 -32
  65. package/dist/applicationinsights-debugplugin-js.js.map +0 -1
  66. package/dist/applicationinsights-debugplugin-js.min.js +0 -6
  67. package/dist/applicationinsights-debugplugin-js.min.js.map +0 -1
  68. package/dist/applicationinsights-debugplugin-js.rollup.d.ts +0 -60
  69. package/dist-esm/applicationinsights-debugplugin-js.js +0 -9
  70. package/dist-esm/interfaces/IDebugPluginConfig.js +0 -8
  71. package/src/DebugPlugin.ts +0 -397
  72. package/src/__DynamicConstants.ts +0 -51
  73. package/src/applicationinsights-debugplugin-js.ts +0 -6
  74. package/src/components/Dashboard.ts +0 -288
  75. package/src/components/LogEntry.ts +0 -102
  76. package/src/components/debugBins.ts +0 -127
  77. package/src/components/filterList.ts +0 -128
  78. package/src/components/helpers.ts +0 -474
  79. package/src/components/styleNodeSrc.ts +0 -435
  80. package/src/interfaces/IDebugPluginConfig.ts +0 -39
  81. package/src/localization/EN-US.json +0 -0
  82. package/types/DebugPlugin.d.ts +0 -9
  83. package/types/__DynamicConstants.d.ts +0 -39
  84. package/types/components/Dashboard.d.ts +0 -19
  85. package/types/components/LogEntry.d.ts +0 -9
  86. package/types/components/debugBins.d.ts +0 -24
  87. package/types/components/filterList.d.ts +0 -7
  88. package/types/components/helpers.d.ts +0 -9
  89. package/types/components/styleNodeSrc.d.ts +0 -2
  90. package/types/interfaces/IDebugPluginConfig.d.ts +0 -28
  91. package/types/tsdoc-metadata.json +0 -11
  92. /package/{dist-esm → dist-es5}/DebugPlugin.js.map +0 -0
  93. /package/{dist-esm → dist-es5}/__DynamicConstants.js.map +0 -0
  94. /package/{dist-esm → dist-es5}/applicationinsights-debugplugin-js.js.map +0 -0
  95. /package/{dist-esm → dist-es5}/components/Dashboard.js.map +0 -0
  96. /package/{dist-esm → dist-es5}/components/LogEntry.js.map +0 -0
  97. /package/{dist-esm → dist-es5}/components/debugBins.js.map +0 -0
  98. /package/{dist-esm → dist-es5}/components/filterList.js.map +0 -0
  99. /package/{dist-esm → dist-es5}/components/helpers.js.map +0 -0
  100. /package/{dist-esm → dist-es5}/components/styleNodeSrc.js.map +0 -0
  101. /package/{dist-esm → dist-es5}/interfaces/IDebugPluginConfig.js.map +0 -0
@@ -1,288 +0,0 @@
1
- import dynamicProto from "@microsoft/dynamicproto-js";
2
- import { arrForEach, arrIndexOf } from "@microsoft/applicationinsights-core-js";
3
- import { ITimerHandler, scheduleTimeout } from "@nevware21/ts-utils";
4
- import { LogEntry } from "./LogEntry";
5
- import { FilterList } from "./filterList";
6
- import { copySelectedTree } from "./helpers";
7
- import { tempStyle } from "./styleNodeSrc";
8
-
9
- export interface IDashboardConfig {
10
- prefix: string;
11
- trackers: string[];
12
- excludeKeys: string[],
13
- maxMessages: number,
14
- includeFunctions: boolean
15
- }
16
-
17
- export class Dashboard {
18
- constructor(config: IDashboardConfig) {
19
- let msgTracker: LogEntry[] = [];
20
-
21
- let textFilter: string ="";
22
-
23
- /**
24
- * the root element of the logger
25
- */
26
- let rootElement: HTMLDivElement;
27
-
28
- /**
29
- * the style that is only on the webpage when the log is active
30
- */
31
- let tempStyleEl: HTMLStyleElement;
32
-
33
- let filterList: FilterList;
34
-
35
- let loggerEl: HTMLElement;
36
-
37
- dynamicProto(Dashboard, this, (_self) => {
38
- let prefix = config.prefix;
39
- let trackers = config.trackers;
40
- const rootEl = rootElement = document.createElement("div");
41
- rootEl.className = `${prefix}-dbg-lgr-dashboard`;
42
-
43
- tempStyleEl = document.createElement("style");
44
- tempStyleEl.innerHTML = tempStyle(prefix);
45
-
46
- // TODO: research more accessibility (aria)
47
- rootEl.style.position = "fixed";
48
- rootEl.style.width = "100vw";
49
- rootEl.style.height = "100vh";
50
- rootEl.style.backgroundColor = "#ffffff";
51
- rootEl.style.opacity = "1";
52
- rootEl.style.pointerEvents = "auto";
53
- rootEl.style.top = "-100%";
54
- rootEl.style.transition = ".2s top cubic-bezier(0.87, 0, 0.13, 1)";
55
-
56
- const logHeading = document.createElement("h1");
57
- logHeading.textContent = "dashboard";
58
- logHeading.style.fontFamily = "monospace";
59
- logHeading.style.textAlign = "center";
60
- rootEl.appendChild(logHeading);
61
-
62
- _createLogger(rootEl, prefix, trackers);
63
-
64
- _self.getElm = () => {
65
- return rootEl;
66
- };
67
-
68
- _self.isDisplayed = () => {
69
- return !!(rootEl.parentElement || rootEl.parentNode);
70
- };
71
-
72
- _self.getTextFilter = () => {
73
- return textFilter;
74
- };
75
-
76
- _self.setTextFilter = (value: string) => {
77
- if (value !== textFilter) {
78
- textFilter = value;
79
- _self.render();
80
- }
81
- };
82
-
83
- _self.getTrackers = () => {
84
- return trackers;
85
- };
86
-
87
- _self.newLogEntry = (target: Object, tm: number, key?: string, level?: number, kind?: string, keep?: boolean) => {
88
- const _self = this;
89
- msgTracker.push(new LogEntry(target, tm, key, level, kind, keep));
90
- if (msgTracker.length > config.maxMessages) {
91
- let lp = 0;
92
- while (lp < msgTracker.length) {
93
- let entry = msgTracker[lp];
94
- if (!entry.isKeep()) {
95
- let el = entry.getEl();
96
- if (el && el.parentElement) {
97
- el.parentElement.removeChild(el);
98
- }
99
- msgTracker.splice(lp, 1);
100
- break;
101
- }
102
-
103
- lp++;
104
- }
105
- }
106
- _self.render();
107
- };
108
-
109
- _self.show = () => {
110
- if (!this.isDisplayed()) {
111
- document.body.appendChild(rootEl);
112
- document.head.appendChild(tempStyleEl);
113
- rootEl.style.top = "0%";
114
- rootEl.style.pointerEvents = "auto";
115
- _self.render();
116
- }
117
- };
118
-
119
- _self.hide = () => {
120
- if (_self.isDisplayed()) {
121
- rootEl.style.top = "-100%";
122
- rootEl.style.pointerEvents = "none";
123
- document.head.removeChild(tempStyleEl);
124
- document.body.removeChild(rootEl);
125
- }
126
- };
127
-
128
- _self.render = () => {
129
- if (_self.isDisplayed()) {
130
- const excludedTypes = filterList.getCurrentFilter();
131
- arrForEach(msgTracker, (entry) => {
132
- let el = entry.getEl();
133
- if (el && el.parentElement) {
134
- el.parentElement.removeChild(el);
135
- }
136
-
137
- if (!entry.isMatch(textFilter, config.excludeKeys, config.includeFunctions)) {
138
- return;
139
- }
140
-
141
- let type = entry.getKind();
142
- let allowOther = arrIndexOf(excludedTypes, "other") === -1; // Other types are not excluded
143
- if (arrIndexOf(trackers, type) === -1 && !allowOther) {
144
- // Not a tracked type and we are not allowing other types
145
- return;
146
- } else if (arrIndexOf(excludedTypes, type) !== -1) {
147
- // This type is explicitly excluded
148
- return;
149
- }
150
-
151
- let newEl = entry.render(textFilter, config.excludeKeys, config.includeFunctions);
152
- if (newEl) {
153
- loggerEl.appendChild(newEl);
154
- }
155
- });
156
- }
157
- };
158
-
159
- function clearEvents() {
160
- let newEvents: LogEntry[] = [];
161
- arrForEach(msgTracker, (entry) => {
162
- if (entry.isKeep()) {
163
- newEvents.push(entry);
164
- } else {
165
- let el = entry.getEl();
166
- if (el && el.parentElement) {
167
- el.parentElement.removeChild(el);
168
- }
169
- }
170
- });
171
-
172
- msgTracker = newEvents;
173
- _self.render();
174
- }
175
-
176
- function closeDashboard() {
177
- _self.hide();
178
- }
179
-
180
- function _createLogger(hostDiv: HTMLElement, prefix: string, trackers: string[]) {
181
- loggerEl = document.createElement("div");
182
- loggerEl.className = `${prefix}-dbg-lgr`;
183
-
184
- const controlDiv = document.createElement("div");
185
- controlDiv.className = "controls";
186
-
187
- const textFilterInput = document.createElement("input");
188
- textFilterInput.className = "text-filter-input";
189
- textFilterInput.setAttribute("placeholder", "filter text");
190
- textFilterInput.onchange = (evt: Event) => {
191
- _self.setTextFilter(textFilterInput.value);
192
- };
193
-
194
- textFilterInput.onblur = (evt: Event) => {
195
- _self.setTextFilter(textFilterInput.value);
196
- };
197
-
198
- textFilterInput.onkeyup = (evt: Event) => {
199
- keyupTimer && keyupTimer.cancel();
200
- keyupTimer = null;
201
-
202
- let newValue = textFilterInput.value;
203
- if (newValue !== _self.getTextFilter()) {
204
- keyupTimer = scheduleTimeout(() => {
205
- keyupTimer = null;
206
- _self.setTextFilter(textFilterInput.value);
207
- }, 200);
208
- }
209
- };
210
-
211
- controlDiv.appendChild(textFilterInput);
212
-
213
- const copyButton = document.createElement("button");
214
- copyButton.innerText = "copy current node";
215
- copyButton.className = "btn-secondary";
216
- copyButton.onclick = copySelectedTree;
217
- copyButton.ontouchend = copySelectedTree;
218
-
219
- let keyupTimer: ITimerHandler = null;
220
-
221
- filterList = new FilterList(controlDiv, trackers.slice(0), () => _self.render());
222
-
223
- controlDiv.appendChild(copyButton);
224
-
225
- const clearEventsBtn = document.createElement("button");
226
- clearEventsBtn.innerText = "clear events";
227
- clearEventsBtn.className = "btn-secondary";
228
- clearEventsBtn.onclick = clearEvents;
229
- clearEventsBtn.ontouchend = clearEvents;
230
-
231
- controlDiv.appendChild(clearEventsBtn);
232
-
233
- const closeEventsBtn = document.createElement("button");
234
- closeEventsBtn.id = "close-dashboard";
235
- closeEventsBtn.innerText = "close dashboard";
236
- closeEventsBtn.className = "btn-primary";
237
- closeEventsBtn.onclick = closeDashboard;
238
- closeEventsBtn.ontouchend = closeDashboard;
239
-
240
- controlDiv.appendChild(closeEventsBtn);
241
-
242
- hostDiv.appendChild(controlDiv);
243
-
244
- hostDiv.appendChild(loggerEl);
245
- }
246
- });
247
- }
248
-
249
- public getElm(): HTMLElement {
250
- // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
251
- return null;
252
- }
253
-
254
- public isDisplayed(): boolean {
255
- // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
256
- return false;
257
- }
258
-
259
- public getTextFilter(): string {
260
- // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
261
- return null;
262
- }
263
-
264
- public setTextFilter(value: string) {
265
- // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
266
- }
267
-
268
- public getTrackers(): string[] {
269
- // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
270
- return null;
271
- }
272
-
273
- public newLogEntry(target: Object, tm: number, key?: string, level?: number, kind?: string, keep?: boolean) {
274
- // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
275
- }
276
-
277
- public render(): void {
278
- // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
279
- }
280
-
281
- public show(): void {
282
- // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
283
- }
284
-
285
- public hide(): void {
286
- // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
287
- }
288
- }
@@ -1,102 +0,0 @@
1
- import { isArray, isBoolean, isError, isNumber, isObject, isString, objToString } from "@microsoft/applicationinsights-core-js";
2
- import { MAX_DEPTH, formatLogElements, getTargetKeys, getTargetName, makeRegex, toggleClassName, traverseAndReplace } from "./helpers";
3
-
4
- export class LogEntry {
5
- isKeep: () => boolean;
6
- isMatch: (textFilter: string, excludedKeys: string[], includeFunctions: boolean) => boolean;
7
- render: (searchText: string, excludeKeys: string[], includeFunctions: boolean) => HTMLElement;
8
- getEl: () => HTMLElement;
9
- getKind: () => string;
10
-
11
- constructor(target: Object, tm: number, key?: string, level?: number, kind?: string, keep?: boolean) {
12
- let _self = this;
13
- let searchContent: any = null;
14
- let lastTextFilter: string;
15
- let theEl: HTMLElement = null;
16
-
17
- _self.isKeep = () => {
18
- return !!keep;
19
- }
20
-
21
- function _testValue(rg: RegExp, value: string) {
22
- if (rg && value) {
23
- return rg.exec(value) !== null;
24
- }
25
-
26
- return false;
27
- }
28
-
29
- function _testObj(rg: RegExp, value: any, excludedKeys: string[], includeFunctions: boolean): boolean {
30
- if (value !== null && value !== undefined && value !== "") {
31
- if (isArray(value)) {
32
- for (let lp = 0; lp < value.length; lp++) {
33
- if (_testObj(rg, value[lp], excludedKeys, includeFunctions)) {
34
- return true;
35
- }
36
- }
37
- } else if (isObject(value) || isError(value)) {
38
- let keys = getTargetKeys(value, excludedKeys, includeFunctions);
39
- for (let lp = 0; lp < keys.length; lp++) {
40
- let key = keys[lp];
41
- if (_testValue(rg, key) || _testObj(rg, value[key], excludedKeys, includeFunctions)) {
42
- return true;
43
- }
44
- }
45
- } else if (isString(value) || isNumber(value) || isBoolean(value)) {
46
- return _testValue(rg, objToString(value));
47
- }
48
- }
49
-
50
- return false;
51
- }
52
-
53
- _self.isMatch = (textFilter: string, excludedKeys: string[], includeFunctions: boolean) => {
54
- let rg = makeRegex(textFilter);
55
- if (rg) {
56
- if (_testValue(rg, key)) {
57
- return true;
58
- }
59
-
60
- if (_testValue(rg, getTargetName(_self))) {
61
- return true;
62
- }
63
-
64
- if (!searchContent) {
65
- // Delaying creating the search optimization until needed -- for performance
66
- searchContent = traverseAndReplace(target, MAX_DEPTH, level, [], excludedKeys, includeFunctions);
67
- }
68
-
69
- return _testObj(rg, searchContent, excludedKeys, includeFunctions);
70
- }
71
-
72
- return true;
73
- }
74
-
75
- _self.render = (textFilter: string, excludeKeys: string[], includeFunctions: boolean): HTMLElement => {
76
- if (!theEl || lastTextFilter !== textFilter) {
77
- lastTextFilter = textFilter;
78
- let ms: string = "" + tm;
79
- while (ms.length < 4) {
80
- ms = "0" + ms;
81
- }
82
-
83
- ms = ms.replace(/(.)(\d{3}){1}$/g, "$1.$2s")
84
- while (ms.length <= 9) {
85
- ms = " " + ms;
86
- }
87
- theEl = formatLogElements(target, `[${ms}]`, key, level, textFilter, excludeKeys, [], includeFunctions).root;
88
- toggleClassName(theEl, " tree-root");
89
- }
90
-
91
- return theEl;
92
- }
93
-
94
- _self.getEl = () => {
95
- return theEl;
96
- }
97
-
98
- _self.getKind = () => {
99
- return kind;
100
- }
101
- }
102
- }
@@ -1,127 +0,0 @@
1
- // Copyright (c) Microsoft Corporation. All rights reserved.
2
- // Licensed under the MIT License.
3
-
4
- import { scheduleTimeout } from "@nevware21/ts-utils";
5
-
6
- export class DebugBinParent {
7
- public showChildren: boolean = false;
8
-
9
- private el: HTMLDivElement;
10
- private elSpan: HTMLSpanElement;
11
- private value: number = 0;
12
- constructor(
13
- private parent: HTMLDivElement,
14
- private children: Array<DebugBin | HTMLButtonElement>,
15
- bottomDistance: number,
16
- prefix: string
17
- ) {
18
- const _self = this;
19
-
20
- _self.el = document.createElement("div");
21
- _self.el.setAttribute("tabindex", "0");
22
- _self.el.className = `${prefix}-debug-bin-parent`;
23
- _self.el.style.bottom = `${20 + bottomDistance}px`;
24
-
25
- _self.elSpan = document.createElement("span");
26
- _self.elSpan.innerText = `${_self.value}`;
27
- _self.elSpan.setAttribute("data-name", "AppInsights");
28
- _self.el.appendChild(_self.elSpan);
29
-
30
- _self.el.onclick = () => {
31
- _self.showChildren = !_self.showChildren;
32
- _self.el.className = (_self.showChildren) ? `${prefix}-debug-bin-parent active` : `${prefix}-debug-bin-parent`;
33
- _self.render();
34
- }
35
-
36
- _self.el.onkeydown = (evt: KeyboardEvent) => {
37
- if (evt.which === 13 || evt.which === 32) {
38
- evt.preventDefault();
39
- (evt.target as HTMLElement).click();
40
- }
41
- }
42
-
43
- _self.render();
44
- }
45
-
46
- addClassToEl(name: string) {
47
- const _self = this;
48
- if (_self.el.className.indexOf(name) === -1) {
49
- _self.el.className += ` ${name}`;
50
- }
51
- }
52
-
53
- addChild(bin: DebugBin | HTMLButtonElement) {
54
- this.children.push(bin);
55
- }
56
-
57
- addButton(handler: (evt: MouseEvent) => void, label: string) {
58
- const btn = document.createElement("button");
59
- btn.innerText = label;
60
- btn.onclick = handler;
61
- this.addChild(btn);
62
- }
63
-
64
- increment() {
65
- const _self = this;
66
- _self.elSpan.innerText = `${++_self.value}`;
67
- }
68
-
69
- render() {
70
- const _self = this;
71
- if (!_self.el.parentElement) {
72
- _self.parent.appendChild(_self.el);
73
- }
74
- for (const ch of _self.children) {
75
- if (ch instanceof DebugBin) {
76
- if (ch.el.parentElement !== _self.el && _self.showChildren) {
77
- _self.el.appendChild(ch.el);
78
- } else if (ch.el.parentElement === _self.el && !_self.showChildren) {
79
- _self.el.removeChild(ch.el);
80
- }
81
- } else {
82
- if (_self.showChildren) {
83
- _self.el.appendChild(ch);
84
- } else {
85
- _self.el.removeChild(ch);
86
- }
87
- }
88
- }
89
- }
90
- }
91
-
92
- export class DebugBin {
93
- public el: HTMLDivElement;
94
- private elName: HTMLSpanElement;
95
- private elValue: HTMLSpanElement;
96
-
97
- constructor(
98
- private name: string,
99
- private value: number,
100
- private parent: DebugBinParent,
101
- bottomDistance: number,
102
- backgroundColor?: string
103
- ) {
104
- const _self = this;
105
- parent.addChild(_self);
106
-
107
- _self.el = document.createElement("div");
108
-
109
- _self.elName = document.createElement("span");
110
- _self.elName.innerText = `${name}: `;
111
- _self.elName.className = "el-name";
112
- _self.el.appendChild(_self.elName);
113
-
114
- _self.elValue = document.createElement("span");
115
- _self.elValue.innerText = `${value}`;
116
- _self.elValue.className = "el-value";
117
- _self.el.appendChild(_self.elValue);
118
- }
119
-
120
- increment() {
121
- const _self = this;
122
- _self.elValue.innerText = `${++_self.value}`;
123
- _self.parent.increment();
124
- _self.elValue.className = "el-value incremented";
125
- scheduleTimeout(() => _self.elValue.className = "el-value", 1);
126
- }
127
- }
@@ -1,128 +0,0 @@
1
- // Copyright (c) Microsoft Corporation. All rights reserved.
2
- // Licensed under the MIT License.
3
-
4
- import { arrIndexOf } from "@microsoft/applicationinsights-core-js";
5
-
6
- export class FilterList {
7
-
8
- private el: HTMLElement;
9
- private filterList: string[];
10
- private children: HTMLElement[] = [];
11
-
12
- constructor(
13
- parent: HTMLElement,
14
- trackers: string[],
15
- toggleCb: () => void
16
- ) {
17
- const _self = this;
18
- let active = false;
19
-
20
- trackers = trackers.concat("other");
21
- _self.filterList = [];
22
-
23
- _self.el = document.createElement("div");
24
- _self.el.className = "filterlist";
25
-
26
- const inputEl = document.createElement("div");
27
- inputEl.className = "filterlist-input";
28
- inputEl.innerText = "filter nodes...";
29
- _self.el.appendChild(inputEl);
30
-
31
- const dropdownMenuEl = document.createElement("div");
32
- dropdownMenuEl.className = "filterlist-dropdown";
33
- _self.el.appendChild(dropdownMenuEl)
34
-
35
- dropdownMenuEl.onkeyup = (evt) => {
36
- if (active && evt.keyCode === 27) {
37
- evt.stopPropagation();
38
- _hideDropdown();
39
- }
40
- }
41
-
42
- for (const t of trackers) {
43
- const chEl = document.createElement("div");
44
- chEl.setAttribute("tabindex", "0");
45
- chEl.setAttribute("filter-type", t);
46
- chEl.className = "filterlist-toggle";
47
-
48
- const checkbox = document.createElement("div");
49
- checkbox.className = "checkbox on"
50
-
51
- const label = document.createElement("span");
52
- label.className = "label";
53
- label.innerText = t;
54
-
55
- chEl.appendChild(checkbox);
56
- chEl.appendChild(label);
57
-
58
- chEl.onkeyup = (evt) => {
59
- if (active && evt.keyCode === 27) {
60
- evt.stopPropagation();
61
- _hideDropdown();
62
- }
63
- }
64
-
65
- chEl.onclick = (evt) => {
66
- evt.stopPropagation();
67
- chEl.focus();
68
- if (checkbox.className === "checkbox off") {
69
- if (evt.shiftKey) {
70
- _self.filterList = trackers.concat();
71
- for (const ch of _self.children) {
72
- (ch.childNodes[0] as HTMLElement).className = "checkbox off";
73
- }
74
- }
75
- _self.filterList.splice(arrIndexOf(_self.filterList, t), 1);
76
- checkbox.className = "checkbox on";
77
- } else {
78
- if (evt.shiftKey) {
79
- _self.filterList = [];
80
- for (const ch of _self.children) {
81
- (ch.childNodes[0] as HTMLElement).className = "checkbox on";
82
- }
83
- }
84
- _self.filterList.push(t);
85
- checkbox.className = "checkbox off";
86
- }
87
- toggleCb();
88
- }
89
- _self.children.push(chEl);
90
- }
91
-
92
- function _hideDropdown() {
93
- active = false;
94
- for (const ch of _self.children) {
95
- dropdownMenuEl.removeChild(ch);
96
- }
97
- }
98
-
99
- function _showDropdown() {
100
- active = true;
101
- for (const ch of _self.children) {
102
- dropdownMenuEl.appendChild(ch);
103
- }
104
- dropdownMenuEl.focus();
105
- }
106
-
107
- _self.el.onkeyup = (evt) => {
108
- if (active && evt.keyCode === 27) {
109
- evt.stopPropagation();
110
- _hideDropdown();
111
- }
112
- }
113
-
114
- _self.el.onclick = () => {
115
- if (!active) {
116
- _showDropdown();
117
- } else {
118
- _hideDropdown();
119
- }
120
- }
121
-
122
- parent.appendChild(_self.el);
123
- }
124
-
125
- getCurrentFilter = () => {
126
- return this.filterList;
127
- }
128
- }