@web-atoms/core 2.6.21 → 2.6.25

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 (137) hide show
  1. package/dist/App.d.ts +1 -1
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js.map +1 -1
  4. package/dist/core/SingleInvoker.d.ts.map +1 -1
  5. package/dist/core/SingleInvoker.js.map +1 -1
  6. package/dist/core/sleep.js.map +1 -1
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/dist-esm/App.d.ts +1 -1
  9. package/dist-esm/App.d.ts.map +1 -1
  10. package/dist-esm/App.js +231 -235
  11. package/dist-esm/App.js.map +1 -1
  12. package/dist-esm/Atom.js +93 -96
  13. package/dist-esm/MockApp.js +17 -18
  14. package/dist-esm/Pack.js +1 -3
  15. package/dist-esm/core/AtomBinder.js +189 -187
  16. package/dist-esm/core/AtomComponent.js +479 -502
  17. package/dist-esm/core/AtomDispatcher.js +46 -48
  18. package/dist-esm/core/AtomDisposableList.js +24 -25
  19. package/dist-esm/core/AtomEnumerator.js +15 -16
  20. package/dist-esm/core/AtomList.js +193 -192
  21. package/dist-esm/core/AtomLoader.js +229 -215
  22. package/dist-esm/core/AtomMap.js +7 -8
  23. package/dist-esm/core/AtomOnce.js +22 -24
  24. package/dist-esm/core/AtomSelectableList.js +240 -243
  25. package/dist-esm/core/AtomUri.js +70 -72
  26. package/dist-esm/core/AtomWatcher.js +105 -111
  27. package/dist-esm/core/Bind.js +271 -269
  28. package/dist-esm/core/BindableProperty.js +26 -27
  29. package/dist-esm/core/CancelTokenFactory.js +21 -24
  30. package/dist-esm/core/Color.js +1 -2
  31. package/dist-esm/core/Colors.js +545 -231
  32. package/dist-esm/core/Command.js +236 -223
  33. package/dist-esm/core/Defer.js +21 -22
  34. package/dist-esm/core/EventScope.js +96 -88
  35. package/dist-esm/core/ExpressionParser.js +132 -144
  36. package/dist-esm/core/ExtendControl.js +7 -8
  37. package/dist-esm/core/FormattedError.js +7 -8
  38. package/dist-esm/core/FormattedString.js +4 -5
  39. package/dist-esm/core/Hacks.js +41 -42
  40. package/dist-esm/core/IFetchEvent.js +1 -2
  41. package/dist-esm/core/IScreen.js +1 -2
  42. package/dist-esm/core/IValueConverter.js +1 -2
  43. package/dist-esm/core/InheritedProperty.js +61 -63
  44. package/dist-esm/core/InjectProperty.js +12 -13
  45. package/dist-esm/core/KeyValuePairs.js +1 -2
  46. package/dist-esm/core/Markdown.js +14 -17
  47. package/dist-esm/core/MarkdownError.js +6 -7
  48. package/dist-esm/core/PropertyBinding.js +1 -2
  49. package/dist-esm/core/PropertyMap.js +28 -27
  50. package/dist-esm/core/Route.js +149 -148
  51. package/dist-esm/core/SingleInvoker.d.ts.map +1 -1
  52. package/dist-esm/core/SingleInvoker.js +32 -35
  53. package/dist-esm/core/SingleInvoker.js.map +1 -1
  54. package/dist-esm/core/StringHelper.js +49 -51
  55. package/dist-esm/core/TransientDisposable.js +14 -16
  56. package/dist-esm/core/WatchProperty.js +18 -17
  57. package/dist-esm/core/WebImage.js +7 -8
  58. package/dist-esm/core/XNode.js +134 -117
  59. package/dist-esm/core/sleep.js +21 -24
  60. package/dist-esm/core/sleep.js.map +1 -1
  61. package/dist-esm/core/types.js +102 -103
  62. package/dist-esm/di/DISingleton.js +7 -5
  63. package/dist-esm/di/DITransient.js +7 -5
  64. package/dist-esm/di/IMockOrInject.js +1 -2
  65. package/dist-esm/di/IServiceProvider.js +1 -2
  66. package/dist-esm/di/Inject.js +67 -67
  67. package/dist-esm/di/Register.js +25 -26
  68. package/dist-esm/di/RegisterScoped.js +4 -3
  69. package/dist-esm/di/RegisterSingleton.js +4 -3
  70. package/dist-esm/di/ServiceCollection.js +38 -37
  71. package/dist-esm/di/ServiceProvider.js +94 -94
  72. package/dist-esm/di/TypeKey.js +13 -12
  73. package/dist-esm/services/BusyIndicatorService.js +7 -11
  74. package/dist-esm/services/CacheService.js +54 -62
  75. package/dist-esm/services/FetchBuilder.js +327 -278
  76. package/dist-esm/services/JsonService.js +118 -116
  77. package/dist-esm/services/MockNavigationService.js +127 -126
  78. package/dist-esm/services/NavigationService.js +95 -102
  79. package/dist-esm/services/ReferenceService.js +30 -33
  80. package/dist-esm/services/http/AjaxOptions.js +1 -3
  81. package/dist-esm/services/http/JsonError.js +16 -15
  82. package/dist-esm/services/http/RestService.js +314 -323
  83. package/dist-esm/style/StyleRule.js +1 -2
  84. package/dist-esm/test.js +0 -1
  85. package/dist-esm/tsconfig.esm.tsbuildinfo +1 -1
  86. package/dist-esm/unit/AtomTest.js +10 -11
  87. package/dist-esm/view-model/Action.js +258 -223
  88. package/dist-esm/view-model/AtomViewModel.js +234 -232
  89. package/dist-esm/view-model/AtomWindowViewModel.js +13 -14
  90. package/dist-esm/view-model/BindableUrlParameter.js +7 -8
  91. package/dist-esm/view-model/Delay.js +21 -25
  92. package/dist-esm/view-model/Disposable.js +28 -29
  93. package/dist-esm/view-model/Load.js +72 -73
  94. package/dist-esm/view-model/Once.js +33 -35
  95. package/dist-esm/view-model/baseTypes.js +4 -5
  96. package/dist-esm/view-model/bindPromise.js +24 -27
  97. package/dist-esm/view-model/bindProperty.js +3 -4
  98. package/dist-esm/view-model/bindUrlParameter.js +39 -43
  99. package/dist-esm/web/controls/AtomComboBox.js +56 -63
  100. package/dist-esm/web/controls/AtomControl.js +485 -490
  101. package/dist-esm/web/controls/AtomGridSplitter.js +57 -50
  102. package/dist-esm/web/controls/AtomGridView.js +230 -222
  103. package/dist-esm/web/controls/AtomItemsControl.js +677 -688
  104. package/dist-esm/web/controls/AtomPage.js +6 -7
  105. package/dist-esm/web/controls/AtomTemplate.js +1 -3
  106. package/dist-esm/web/controls/AtomTemplateControl.js +28 -29
  107. package/dist-esm/web/controls/AtomViewStack.js +19 -20
  108. package/dist-esm/web/core/AtomUI.js +200 -200
  109. package/dist-esm/web/core/Encoder.js +142 -152
  110. package/dist-esm/web/core/HtmlNode.js +141 -139
  111. package/dist-esm/web/images/Busy.js +1 -2
  112. package/dist-esm/web/images/BusyDataUrl.js +2 -869
  113. package/dist-esm/web/images/Button.js +1 -2
  114. package/dist-esm/web/images/ButtonDataUrl.js +2 -30
  115. package/dist-esm/web/images/CloseButton.js +1 -2
  116. package/dist-esm/web/images/CloseButtonDataUrl.js +2 -30
  117. package/dist-esm/web/images/CloseButtonHover.js +1 -2
  118. package/dist-esm/web/images/CloseButtonHoverDataUrl.js +2 -24
  119. package/dist-esm/web/services/LastTarget.js +31 -29
  120. package/dist-esm/web/services/MarkdownService.js +19 -31
  121. package/dist-esm/web/services/NotificationPopup.js +28 -21
  122. package/dist-esm/web/services/PopupService.js +512 -478
  123. package/dist-esm/web/services/PopupWindow.js +266 -247
  124. package/dist-esm/web/styles/AtomAlertWindowStyle.js +39 -40
  125. package/dist-esm/web/styles/AtomFrameStyle.js +15 -16
  126. package/dist-esm/web/styles/AtomNotificationStyle.js +19 -20
  127. package/dist-esm/web/styles/AtomPageLinkStyle.js +11 -12
  128. package/dist-esm/web/styles/AtomPopupStyle.js +9 -10
  129. package/dist-esm/web/styles/AtomStyle.js +61 -64
  130. package/dist-esm/web/styles/AtomStyleSheet.js +50 -51
  131. package/dist-esm/web/styles/AtomWindowStyle.js +116 -117
  132. package/dist-esm/web/styles/IStyleDeclaration.js +1 -2
  133. package/dist-esm/web/styles/StyleBuilder.js +79 -80
  134. package/package.json +3 -1
  135. package/src/App.ts +1 -1
  136. package/src/core/SingleInvoker.ts +1 -1
  137. package/src/core/sleep.ts +1 -1
package/dist-esm/Atom.js CHANGED
@@ -1,106 +1,103 @@
1
1
  export class Atom {
2
- static { this.designMode = false; }
3
- static superProperty(tc, target, name) {
4
- let c = tc;
5
- do {
6
- c = Object.getPrototypeOf(c);
7
- if (!c) {
8
- throw new Error("No property descriptor found for " + name);
9
- }
10
- const pd = Object.getOwnPropertyDescriptor(c.prototype, name);
11
- if (!pd) {
12
- continue;
13
- }
14
- return pd.get.apply(target);
15
- } while (true);
16
- }
17
- static get(target, path) {
18
- const segments = path.split(".");
19
- for (const iterator of segments) {
20
- if (target === undefined || target === null) {
21
- return target;
22
- }
23
- target = target[iterator];
24
- }
2
+ static {
3
+ this.designMode = false;
4
+ }
5
+ static superProperty(tc, target, name) {
6
+ let c = tc;
7
+ do {
8
+ c = Object.getPrototypeOf(c);
9
+ if (!c) {
10
+ throw new Error("No property descriptor found for " + name);
11
+ }
12
+ const pd = Object.getOwnPropertyDescriptor(c.prototype, name);
13
+ if (!pd) {
14
+ continue;
15
+ }
16
+ return pd.get.apply(target);
17
+ } while (true);
18
+ }
19
+ static get(target, path) {
20
+ const segments = path.split(".");
21
+ for (const iterator of segments) {
22
+ if (target === undefined || target === null) {
25
23
  return target;
24
+ }
25
+ target = target[iterator];
26
26
  }
27
- static delay(n, ct) {
28
- return new Promise((resolve, reject) => {
29
- const h = {};
30
- h.id = setTimeout(() => {
31
- resolve();
32
- }, n);
33
- if (ct) {
34
- ct.registerForCancel(() => {
35
- clearTimeout(h.id);
36
- reject(new Error("cancelled"));
37
- });
38
- }
27
+ return target;
28
+ }
29
+ static delay(n, ct) {
30
+ return new Promise((resolve, reject) => {
31
+ const h = {};
32
+ h.id = setTimeout(() => {
33
+ resolve();
34
+ }, n);
35
+ if (ct) {
36
+ ct.registerForCancel(() => {
37
+ clearTimeout(h.id);
38
+ reject(new Error("cancelled"));
39
39
  });
40
+ }
41
+ });
42
+ }
43
+ static encodeParameters(p) {
44
+ if (!p) {
45
+ return "";
40
46
  }
41
- static encodeParameters(p) {
42
- if (!p) {
43
- return "";
44
- }
45
- let s = "";
46
- for (const key in p) {
47
- if (p.hasOwnProperty(key)) {
48
- const element = p[key];
49
- let v = element;
50
- if (v === undefined || v === null) {
51
- continue;
52
- }
53
- if (v instanceof Date) {
54
- v = v.toISOString();
55
- }
56
- else if (typeof element === "object") {
57
- v = JSON.stringify(element);
58
- }
59
- if (s) {
60
- s += "&";
61
- }
62
- s += `${key}=${encodeURIComponent(v)}`;
63
- }
64
- }
65
- return s;
66
- }
67
- static url(url, query, hash) {
68
- if (!url) {
69
- return url;
47
+ let s = "";
48
+ for (const key in p) {
49
+ if (p.hasOwnProperty(key)) {
50
+ const element = p[key];
51
+ let v = element;
52
+ if (v === undefined || v === null) {
53
+ continue;
70
54
  }
71
- let p = this.encodeParameters(query);
72
- if (p) {
73
- if (url.indexOf("?") === -1) {
74
- url += "?";
75
- }
76
- else {
77
- url += "&";
78
- }
79
- url += p;
55
+ if (v instanceof Date) {
56
+ v = v.toISOString();
57
+ } else if (typeof element === "object") {
58
+ v = JSON.stringify(element);
80
59
  }
81
- p = this.encodeParameters(hash);
82
- if (p) {
83
- if (url.indexOf("#") === -1) {
84
- url += "#";
85
- }
86
- else {
87
- url += "&";
88
- }
89
- url += p;
60
+ if (s) {
61
+ s += "&";
90
62
  }
91
- return url;
63
+ s += `${key}=${encodeURIComponent(v)}`;
64
+ }
92
65
  }
93
- static postAsync(app, f) {
94
- return new Promise((resolve, reject) => {
95
- app.callLater(async () => {
96
- try {
97
- resolve(await f());
98
- }
99
- catch (error) {
100
- reject(error);
101
- }
102
- });
103
- });
66
+ return s;
67
+ }
68
+ static url(url, query, hash) {
69
+ if (!url) {
70
+ return url;
71
+ }
72
+ let p = this.encodeParameters(query);
73
+ if (p) {
74
+ if (url.indexOf("?") === -1) {
75
+ url += "?";
76
+ } else {
77
+ url += "&";
78
+ }
79
+ url += p;
104
80
  }
105
- }
106
- //# sourceMappingURL=Atom.js.map
81
+ p = this.encodeParameters(hash);
82
+ if (p) {
83
+ if (url.indexOf("#") === -1) {
84
+ url += "#";
85
+ } else {
86
+ url += "&";
87
+ }
88
+ url += p;
89
+ }
90
+ return url;
91
+ }
92
+ static postAsync(app, f) {
93
+ return new Promise((resolve, reject) => {
94
+ app.callLater(async () => {
95
+ try {
96
+ resolve(await f());
97
+ } catch (error) {
98
+ reject(error);
99
+ }
100
+ });
101
+ });
102
+ }
103
+ }
@@ -2,23 +2,22 @@ import { App } from "./App.js";
2
2
  import { MockNavigationService } from "./services/MockNavigationService.js";
3
3
  import { NavigationService } from "./services/NavigationService.js";
4
4
  export class MockApp extends App {
5
- constructor() {
6
- super();
7
- this.put(NavigationService, new MockNavigationService(this));
5
+ constructor() {
6
+ super();
7
+ this.put(NavigationService, new MockNavigationService(this));
8
+ }
9
+ updateDefaultStyle(textContent) {
10
+ if (this.styleElement) {
11
+ if (this.styleElement.textContent === textContent) {
12
+ return;
13
+ }
8
14
  }
9
- updateDefaultStyle(textContent) {
10
- if (this.styleElement) {
11
- if (this.styleElement.textContent === textContent) {
12
- return;
13
- }
14
- }
15
- const ss = document.createElement("style");
16
- ss.textContent = textContent;
17
- if (this.styleElement) {
18
- this.styleElement.remove();
19
- }
20
- document.head.appendChild(ss);
21
- this.styleElement = ss;
15
+ const ss = document.createElement("style");
16
+ ss.textContent = textContent;
17
+ if (this.styleElement) {
18
+ this.styleElement.remove();
22
19
  }
23
- }
24
- //# sourceMappingURL=MockApp.js.map
20
+ document.head.appendChild(ss);
21
+ this.styleElement = ss;
22
+ }
23
+ }
package/dist-esm/Pack.js CHANGED
@@ -1,3 +1 @@
1
- export default function Pack(...a) {
2
- }
3
- //# sourceMappingURL=Pack.js.map
1
+ export default function Pack(...a) {}
@@ -2,199 +2,201 @@ import { ArrayHelper } from "./types.js";
2
2
  export const symbolHandlers = Symbol.for("handlers");
3
3
  export const symbolBindable = Symbol.for("bindable");
4
4
  export class AtomBinder {
5
- static refreshValue(target, key) {
6
- const handlers = AtomBinder.get_WatchHandler(target, key);
7
- if (handlers === undefined || handlers == null) {
8
- return;
9
- }
10
- for (const item of handlers) {
11
- item(target, key);
12
- }
13
- if (target.onPropertyChanged) {
14
- target.onPropertyChanged(key);
15
- }
5
+ static refreshValue(target, key) {
6
+ const handlers = AtomBinder.get_WatchHandler(target, key);
7
+ if (handlers === undefined || handlers == null) {
8
+ return;
16
9
  }
17
- static add_WatchHandler(target, key, handler) {
18
- if (target == null) {
19
- return;
20
- }
21
- const handlers = AtomBinder.get_WatchHandler(target, key);
22
- handlers.push(handler);
23
- if (Array.isArray(target)) {
24
- return;
25
- }
26
- const pv = AtomBinder.getPropertyDescriptor(target, key);
27
- if (pv && pv.get) {
28
- return;
29
- }
30
- const tw = target;
31
- let bindables = tw[symbolBindable];
32
- if (bindables === undefined) {
33
- bindables = {};
34
- Object.defineProperty(tw, symbolBindable, {
35
- value: bindables,
36
- enumerable: false,
37
- writable: true,
38
- configurable: true
39
- });
40
- }
41
- if (!bindables[key]) {
42
- bindables[key] = 1;
43
- const o = target[key];
44
- const nk = Symbol.for(key);
45
- target[nk] = o;
46
- const set = function (v) {
47
- const ov = this[nk];
48
- if (ov === undefined ? ov === v : ov == v) {
49
- return;
50
- }
51
- this[nk] = v;
52
- AtomBinder.refreshValue(this, key);
53
- };
54
- const get = function () {
55
- return this[nk];
56
- };
57
- if (pv) {
58
- delete target[key];
59
- Object.defineProperty(target, key, {
60
- get,
61
- set,
62
- configurable: true,
63
- enumerable: true
64
- });
65
- }
66
- else {
67
- Object.defineProperty(target, key, {
68
- get, set, enumerable: true, configurable: true
69
- });
70
- }
71
- }
10
+ for (const item of handlers) {
11
+ item(target, key);
72
12
  }
73
- static getPropertyDescriptor(target, key) {
74
- const pv = Object.getOwnPropertyDescriptor(target, key);
75
- if (!pv) {
76
- const pt = Object.getPrototypeOf(target);
77
- if (pt) {
78
- return AtomBinder.getPropertyDescriptor(pt, key);
79
- }
80
- }
81
- return pv;
13
+ if (target.onPropertyChanged) {
14
+ target.onPropertyChanged(key);
82
15
  }
83
- static get_WatchHandler(target, key) {
84
- if (target == null) {
85
- return null;
86
- }
87
- let handlers = target[symbolHandlers];
88
- if (handlers === undefined) {
89
- handlers = {};
90
- Object.defineProperty(target, symbolHandlers, {
91
- value: handlers,
92
- enumerable: false,
93
- writable: true,
94
- configurable: true
95
- });
96
- }
97
- let handlersForKey = handlers[key];
98
- if (handlersForKey === undefined || handlersForKey == null) {
99
- handlersForKey = [];
100
- handlers[key] = handlersForKey;
101
- }
102
- return handlersForKey;
16
+ }
17
+ static add_WatchHandler(target, key, handler) {
18
+ if (target == null) {
19
+ return;
103
20
  }
104
- static remove_WatchHandler(target, key, handler) {
105
- if (target == null) {
106
- return;
107
- }
108
- const handlers = target[symbolHandlers];
109
- if (typeof handlers === "undefined") {
110
- return;
111
- }
112
- const handlersForKey = target[symbolHandlers][key];
113
- if (handlersForKey === undefined || handlersForKey == null) {
114
- return;
115
- }
116
- ArrayHelper.remove(handlersForKey, (f) => f === handler);
117
- if (!handlersForKey.length) {
118
- handlers[key] = null;
119
- delete handlers[key];
120
- }
21
+ const handlers = AtomBinder.get_WatchHandler(target, key);
22
+ handlers.push(handler);
23
+ if (Array.isArray(target)) {
24
+ return;
121
25
  }
122
- static invokeItemsEvent(target, mode, index, item, oldItem) {
123
- const key = "_items";
124
- const handlers = AtomBinder.get_WatchHandler(target, key);
125
- if (!handlers) {
126
- return;
127
- }
128
- for (const obj of handlers) {
129
- obj(target, mode, index, item, oldItem);
130
- }
131
- AtomBinder.refreshValue(target, "length");
26
+ const pv = AtomBinder.getPropertyDescriptor(target, key);
27
+ if (pv && pv.get) {
28
+ return;
132
29
  }
133
- static refreshItems(ary) {
134
- AtomBinder.invokeItemsEvent(ary, "refresh", -1, null);
30
+ const tw = target;
31
+ let bindables = tw[symbolBindable];
32
+ if (bindables === undefined) {
33
+ bindables = {};
34
+ Object.defineProperty(tw, symbolBindable, {
35
+ value: bindables,
36
+ enumerable: false,
37
+ writable: true,
38
+ configurable: true
39
+ });
135
40
  }
136
- static add_CollectionChanged(target, handler) {
137
- if (target == null) {
138
- throw new Error("Target Array to watch cannot be null");
139
- }
140
- if (handler == null) {
141
- throw new Error("Target handle to watch an Array cannot be null");
142
- }
143
- const handlers = AtomBinder.get_WatchHandler(target, "_items");
144
- handlers.push(handler);
145
- return { dispose: () => {
146
- AtomBinder.remove_CollectionChanged(target, handler);
147
- }
148
- };
149
- }
150
- static remove_CollectionChanged(t, handler) {
151
- if (t == null) {
152
- return;
153
- }
154
- const target = t;
155
- const handlers = target[symbolHandlers];
156
- if (typeof handlers === "undefined") {
157
- return;
158
- }
159
- const key = "_items";
160
- const handlersForKey = handlers[key];
161
- if (handlersForKey === undefined || handlersForKey == null) {
162
- return;
163
- }
164
- ArrayHelper.remove(handlersForKey, (f) => f === handler);
165
- if (!handlersForKey.length) {
166
- handlers[key] = null;
167
- delete handlers[key];
168
- }
41
+ if (!bindables[key]) {
42
+ bindables[key] = 1;
43
+ const o = target[key];
44
+ const nk = Symbol.for(key);
45
+ target[nk] = o;
46
+ const set = function (v) {
47
+ const ov = this[nk];
48
+ if (ov === undefined ? ov === v : ov == v) {
49
+ return;
50
+ }
51
+ this[nk] = v;
52
+ AtomBinder.refreshValue(this, key);
53
+ };
54
+ const get = function () {
55
+ return this[nk];
56
+ };
57
+ if (pv) {
58
+ delete target[key];
59
+ Object.defineProperty(target, key, {
60
+ get,
61
+ set,
62
+ configurable: true,
63
+ enumerable: true
64
+ });
65
+ } else {
66
+ Object.defineProperty(target, key, {
67
+ get,
68
+ set,
69
+ enumerable: true,
70
+ configurable: true
71
+ });
72
+ }
169
73
  }
170
- static watch(item, property, f) {
171
- AtomBinder.add_WatchHandler(item, property, f);
172
- return {
173
- dispose: () => {
174
- AtomBinder.remove_WatchHandler(item, property, f);
175
- }
176
- };
177
- }
178
- static clear(a) {
179
- a.length = 0;
180
- this.invokeItemsEvent(a, "refresh", -1, null);
181
- AtomBinder.refreshValue(a, "length");
182
- }
183
- static addItem(a, item) {
184
- const index = a.length;
185
- a.push(item);
186
- this.invokeItemsEvent(a, "add", index, item);
187
- AtomBinder.refreshValue(a, "length");
188
- }
189
- static removeItem(a, item) {
190
- const i = a.findIndex((x) => x === item);
191
- if (i === -1) {
192
- return false;
193
- }
194
- a.splice(i, 1);
195
- AtomBinder.invokeItemsEvent(a, "remove", i, item);
196
- AtomBinder.refreshValue(a, "length");
197
- return true;
74
+ }
75
+ static getPropertyDescriptor(target, key) {
76
+ const pv = Object.getOwnPropertyDescriptor(target, key);
77
+ if (!pv) {
78
+ const pt = Object.getPrototypeOf(target);
79
+ if (pt) {
80
+ return AtomBinder.getPropertyDescriptor(pt, key);
81
+ }
82
+ }
83
+ return pv;
84
+ }
85
+ static get_WatchHandler(target, key) {
86
+ if (target == null) {
87
+ return null;
88
+ }
89
+ let handlers = target[symbolHandlers];
90
+ if (handlers === undefined) {
91
+ handlers = {};
92
+ Object.defineProperty(target, symbolHandlers, {
93
+ value: handlers,
94
+ enumerable: false,
95
+ writable: true,
96
+ configurable: true
97
+ });
98
+ }
99
+ let handlersForKey = handlers[key];
100
+ if (handlersForKey === undefined || handlersForKey == null) {
101
+ handlersForKey = [];
102
+ handlers[key] = handlersForKey;
103
+ }
104
+ return handlersForKey;
105
+ }
106
+ static remove_WatchHandler(target, key, handler) {
107
+ if (target == null) {
108
+ return;
109
+ }
110
+ const handlers = target[symbolHandlers];
111
+ if (typeof handlers === "undefined") {
112
+ return;
113
+ }
114
+ const handlersForKey = target[symbolHandlers][key];
115
+ if (handlersForKey === undefined || handlersForKey == null) {
116
+ return;
117
+ }
118
+ ArrayHelper.remove(handlersForKey, f => f === handler);
119
+ if (!handlersForKey.length) {
120
+ handlers[key] = null;
121
+ delete handlers[key];
122
+ }
123
+ }
124
+ static invokeItemsEvent(target, mode, index, item, oldItem) {
125
+ const key = "_items";
126
+ const handlers = AtomBinder.get_WatchHandler(target, key);
127
+ if (!handlers) {
128
+ return;
129
+ }
130
+ for (const obj of handlers) {
131
+ obj(target, mode, index, item, oldItem);
132
+ }
133
+ AtomBinder.refreshValue(target, "length");
134
+ }
135
+ static refreshItems(ary) {
136
+ AtomBinder.invokeItemsEvent(ary, "refresh", -1, null);
137
+ }
138
+ static add_CollectionChanged(target, handler) {
139
+ if (target == null) {
140
+ throw new Error("Target Array to watch cannot be null");
141
+ }
142
+ if (handler == null) {
143
+ throw new Error("Target handle to watch an Array cannot be null");
144
+ }
145
+ const handlers = AtomBinder.get_WatchHandler(target, "_items");
146
+ handlers.push(handler);
147
+ return {
148
+ dispose: () => {
149
+ AtomBinder.remove_CollectionChanged(target, handler);
150
+ }
151
+ };
152
+ }
153
+ static remove_CollectionChanged(t, handler) {
154
+ if (t == null) {
155
+ return;
156
+ }
157
+ const target = t;
158
+ const handlers = target[symbolHandlers];
159
+ if (typeof handlers === "undefined") {
160
+ return;
161
+ }
162
+ const key = "_items";
163
+ const handlersForKey = handlers[key];
164
+ if (handlersForKey === undefined || handlersForKey == null) {
165
+ return;
166
+ }
167
+ ArrayHelper.remove(handlersForKey, f => f === handler);
168
+ if (!handlersForKey.length) {
169
+ handlers[key] = null;
170
+ delete handlers[key];
171
+ }
172
+ }
173
+ static watch(item, property, f) {
174
+ AtomBinder.add_WatchHandler(item, property, f);
175
+ return {
176
+ dispose: () => {
177
+ AtomBinder.remove_WatchHandler(item, property, f);
178
+ }
179
+ };
180
+ }
181
+ static clear(a) {
182
+ a.length = 0;
183
+ this.invokeItemsEvent(a, "refresh", -1, null);
184
+ AtomBinder.refreshValue(a, "length");
185
+ }
186
+ static addItem(a, item) {
187
+ const index = a.length;
188
+ a.push(item);
189
+ this.invokeItemsEvent(a, "add", index, item);
190
+ AtomBinder.refreshValue(a, "length");
191
+ }
192
+ static removeItem(a, item) {
193
+ const i = a.findIndex(x => x === item);
194
+ if (i === -1) {
195
+ return false;
198
196
  }
199
- }
200
- //# sourceMappingURL=AtomBinder.js.map
197
+ a.splice(i, 1);
198
+ AtomBinder.invokeItemsEvent(a, "remove", i, item);
199
+ AtomBinder.refreshValue(a, "length");
200
+ return true;
201
+ }
202
+ }