qcobjects 2.4.107-ts → 2.4.108-ts

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 (197) hide show
  1. package/.hintrc +5 -0
  2. package/VERSION +1 -1
  3. package/build/ArrayCollection.js +136 -0
  4. package/build/BackendMicroservice.js +211 -0
  5. package/build/Base64.js +100 -0
  6. package/build/CONFIG.js +85 -0
  7. package/build/Cast.js +53 -0
  8. package/build/Class.js +284 -0
  9. package/build/ClassFactory.js +38 -0
  10. package/build/ComplexStorageCache.js +91 -0
  11. package/build/Component.js +1133 -0
  12. package/build/ComponentFactory.js +113 -0
  13. package/build/ConfigSettings.js +39 -0
  14. package/build/Controller.js +81 -0
  15. package/build/Crypt.js +87 -0
  16. package/build/DDO.js +81 -0
  17. package/build/DOMCreateElement.js +15 -0
  18. package/build/DataStringify.js +22 -0
  19. package/build/DefaultTemplateHandler.js +57 -0
  20. package/build/DocumentLayout.js +20 -0
  21. package/build/Effect.js +46 -0
  22. package/build/Export.js +11 -0
  23. package/build/Import.js +140 -0
  24. package/build/IncrementInstanceID.js +11 -0
  25. package/build/InheritClass.js +194 -0
  26. package/build/LegacyCopy.js +31 -0
  27. package/build/Logger.js +33 -0
  28. package/build/MainProcess.js +549 -0
  29. package/build/NamespaceRef.js +29 -0
  30. package/build/New.js +17 -0
  31. package/build/ObjectName.js +22 -0
  32. package/build/Package.js +67 -0
  33. package/build/PrimaryCollections.js +7 -0
  34. package/build/Processor.js +81 -0
  35. package/build/QCObjects.js +182 -4843
  36. package/build/Ready.js +49 -0
  37. package/build/RegisterClass.js +28 -0
  38. package/build/Service.js +112 -0
  39. package/build/SourceCSS.js +56 -0
  40. package/build/SourceJS.js +73 -0
  41. package/build/Tag.js +77 -0
  42. package/build/Timer.js +30 -0
  43. package/build/Toggle.js +59 -0
  44. package/build/TransitionEffect.js +65 -0
  45. package/build/VO.js +11 -0
  46. package/build/View.js +18 -0
  47. package/build/WidgetsFactory.js +537 -0
  48. package/build/assign.js +32 -0
  49. package/build/asyncLoad.js +43 -0
  50. package/build/basePath.js +32 -0
  51. package/build/captureFalseTouch.js +32 -0
  52. package/build/componentLoader.js +258 -0
  53. package/build/defaultProcessors.js +130 -0
  54. package/build/domain.js +4 -0
  55. package/build/findPackageNodePath.js +47 -0
  56. package/build/getType.js +38 -0
  57. package/build/globalSettings.js +115 -0
  58. package/build/index.d.ts +1045 -0
  59. package/build/index.js +24 -4
  60. package/build/index.mjs +1 -1
  61. package/build/introspection.js +86 -0
  62. package/build/isQCObjects.js +20 -0
  63. package/build/is_a.js +19 -0
  64. package/build/is_forbidden_name.js +15 -0
  65. package/build/is_raw_class.js +7 -0
  66. package/build/loadSDK.js +63 -0
  67. package/build/localStorage.js +19 -0
  68. package/build/make_global.js +24 -0
  69. package/build/mathFunctions.js +7 -0
  70. package/build/platform.js +28 -0
  71. package/build/range.js +17 -0
  72. package/build/routings.js +21 -0
  73. package/build/secretKey.js +5 -0
  74. package/build/serviceLoader.js +300 -0
  75. package/build/shortCode.js +14 -0
  76. package/build/subelements.js +8 -0
  77. package/build/super.js +20 -0
  78. package/build/tag_filter.js +4 -0
  79. package/build/top.js +23 -0
  80. package/build/uniqueID.js +5 -0
  81. package/build/waitUntil.js +31 -0
  82. package/build-esbuild.js +62 -0
  83. package/eslint.config.mjs +87 -0
  84. package/package.json +26 -23
  85. package/public/browser/index.js +6502 -0
  86. package/public/browser/index.js.map +7 -0
  87. package/public/cjs/index.cjs +6586 -0
  88. package/public/cjs/index.cjs.map +7 -0
  89. package/public/esm/index.mjs +6494 -0
  90. package/public/esm/index.mjs.map +7 -0
  91. package/spec/helpers/mock-sdk.helper.ts +5 -0
  92. package/spec/mocks/qcobjects-sdk.mock.ts +1 -0
  93. package/spec/support/jasmine.json +3 -3
  94. package/spec/testsClassFactorySpec.ts +40 -0
  95. package/spec/{testsConfigSpec.js → testsConfigSpec.ts} +2 -2
  96. package/spec/{testsGlobalFeaturesSpec.js → testsGlobalFeaturesSpec.ts} +10 -8
  97. package/spec/{testsSpec.js → testsSpec.ts} +11 -10
  98. package/spec/{testsTypeSpec.js → testsTypeSpec.ts} +5 -3
  99. package/src/ArrayCollection.ts +143 -0
  100. package/src/BackendMicroservice.ts +229 -0
  101. package/src/Base64.ts +92 -0
  102. package/src/CONFIG.ts +96 -0
  103. package/src/Cast.ts +46 -0
  104. package/src/Class.ts +303 -0
  105. package/src/ClassFactory.ts +34 -0
  106. package/src/ComplexStorageCache.ts +97 -0
  107. package/src/Component.ts +1222 -0
  108. package/src/ComponentFactory.ts +122 -0
  109. package/src/ConfigSettings.ts +62 -0
  110. package/src/Controller.ts +90 -0
  111. package/src/Crypt.ts +87 -0
  112. package/src/DDO.ts +93 -0
  113. package/src/DOMCreateElement.ts +12 -0
  114. package/src/DataStringify.ts +19 -0
  115. package/src/DefaultTemplateHandler.ts +55 -0
  116. package/src/DocumentLayout.ts +16 -0
  117. package/src/Effect.ts +56 -0
  118. package/src/Export.ts +8 -0
  119. package/src/Import.ts +135 -0
  120. package/src/IncrementInstanceID.ts +8 -0
  121. package/src/InheritClass.ts +210 -0
  122. package/src/LegacyCopy.ts +27 -0
  123. package/src/Logger.ts +32 -0
  124. package/src/MainProcess.ts +629 -0
  125. package/src/NamespaceRef.ts +26 -0
  126. package/src/New.ts +15 -0
  127. package/src/ObjectName.ts +16 -0
  128. package/src/Package.ts +67 -0
  129. package/src/PrimaryCollections.ts +7 -0
  130. package/src/Processor.ts +93 -0
  131. package/src/QCObjects.ts +100 -0
  132. package/src/Ready.ts +44 -0
  133. package/src/RegisterClass.ts +26 -0
  134. package/src/Service.ts +127 -0
  135. package/src/SourceCSS.ts +59 -0
  136. package/src/SourceJS.ts +76 -0
  137. package/src/Tag.ts +76 -0
  138. package/src/Timer.ts +42 -0
  139. package/src/Toggle.ts +65 -0
  140. package/src/TransitionEffect.ts +80 -0
  141. package/src/VO.ts +8 -0
  142. package/src/View.ts +17 -0
  143. package/src/WidgetsFactory.ts +543 -0
  144. package/src/assign.ts +33 -0
  145. package/src/asyncLoad.ts +42 -0
  146. package/src/basePath.ts +29 -0
  147. package/src/captureFalseTouch.ts +29 -0
  148. package/src/componentLoader.ts +252 -0
  149. package/src/defaultProcessors.ts +145 -0
  150. package/src/domain.ts +1 -0
  151. package/src/findPackageNodePath.ts +43 -0
  152. package/src/getType.ts +36 -0
  153. package/src/globalSettings.ts +118 -0
  154. package/src/index.mts +1 -1
  155. package/src/index.ts +1 -1
  156. package/src/introspection.ts +80 -0
  157. package/src/isQCObjects.ts +19 -0
  158. package/src/is_a.ts +16 -0
  159. package/src/is_forbidden_name.ts +12 -0
  160. package/src/is_raw_class.ts +3 -0
  161. package/src/loadSDK.ts +59 -0
  162. package/src/localStorage.ts +17 -0
  163. package/src/make_global.ts +19 -0
  164. package/src/mathFunctions.ts +3 -0
  165. package/src/platform.ts +30 -0
  166. package/src/range.ts +15 -0
  167. package/src/routings.ts +18 -0
  168. package/src/secretKey.ts +3 -0
  169. package/src/serviceLoader.ts +306 -0
  170. package/src/shortCode.ts +11 -0
  171. package/src/subelements.ts +4 -0
  172. package/src/super.ts +17 -0
  173. package/src/tag_filter.ts +1 -0
  174. package/src/top.ts +111 -0
  175. package/src/types/global/index.d.ts +597 -0
  176. package/src/uniqueID.ts +3 -0
  177. package/src/waitUntil.ts +26 -0
  178. package/tsconfig.d.json +35 -8
  179. package/tsconfig.jasmine.json +39 -0
  180. package/tsconfig.json +46 -12
  181. package/.eslintignore +0 -5
  182. package/.eslintrc.cjs +0 -21
  183. package/.eslintrc.json +0 -24
  184. package/browser/QCObjects.js +0 -2
  185. package/browser/QCObjects.js.map +0 -7
  186. package/browser/chunks/chunk-O2PFFZVJ.js +0 -713
  187. package/browser/chunks/chunk-O2PFFZVJ.js.map +0 -7
  188. package/browser/chunks/chunk-TBLBK5VV.js +0 -713
  189. package/browser/chunks/chunk-TBLBK5VV.js.map +0 -7
  190. package/browser/chunks/chunk-ZYLXOA35.js +0 -713
  191. package/browser/chunks/chunk-ZYLXOA35.js.map +0 -7
  192. package/browser/index.js +0 -2
  193. package/browser/index.js.map +0 -7
  194. package/spec/testsClassFactorySpec.js +0 -41
  195. package/src/QCObjects.js +0 -5247
  196. package/src/index.d.ts +0 -8
  197. package/types/index.d.ts +0 -472
@@ -0,0 +1,1133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Component = void 0;
4
+ const Base64_1 = require("./Base64");
5
+ const basePath_1 = require("./basePath");
6
+ const Cast_1 = require("./Cast");
7
+ const ClassFactory_1 = require("./ClassFactory");
8
+ const ComponentFactory_1 = require("./ComponentFactory");
9
+ const DataStringify_1 = require("./DataStringify");
10
+ const domain_1 = require("./domain");
11
+ const DOMCreateElement_1 = require("./DOMCreateElement");
12
+ const getType_1 = require("./getType");
13
+ const InheritClass_1 = require("./InheritClass");
14
+ const introspection_1 = require("./introspection");
15
+ const is_a_1 = require("./is_a");
16
+ const isQCObjects_1 = require("./isQCObjects");
17
+ const Logger_1 = require("./Logger");
18
+ const New_1 = require("./New");
19
+ const Package_1 = require("./Package");
20
+ const platform_1 = require("./platform");
21
+ const Processor_1 = require("./Processor");
22
+ const routings_1 = require("./routings");
23
+ const top_1 = require("./top");
24
+ const CONFIG_1 = require("./CONFIG");
25
+ const serviceLoader_1 = require("./serviceLoader");
26
+ const tag_filter_1 = require("./tag_filter");
27
+ const componentLoader_1 = require("./componentLoader");
28
+ class Component extends InheritClass_1.InheritClass {
29
+ static shadowed = false;
30
+ static cached = true;
31
+ name;
32
+ templateURI;
33
+ url;
34
+ tplsource;
35
+ tplextension;
36
+ template;
37
+ validRoutingWays = ["pathname", "hash", "search"];
38
+ basePath = basePath_1._basePath_;
39
+ domain = domain_1._domain_;
40
+ templateHandler = "DefaultTemplateHandler";
41
+ processorHandler;
42
+ routingWay = null;
43
+ routingNodes = [];
44
+ routings = [];
45
+ routingPath = "";
46
+ routingPaths = [];
47
+ _componentHelpers = [];
48
+ subcomponents = [];
49
+ splashScreenComponent = undefined;
50
+ controller = undefined;
51
+ routingController = undefined;
52
+ view = undefined;
53
+ effect = undefined;
54
+ effectClass;
55
+ method = "GET";
56
+ cached = true;
57
+ __promise__ = null;
58
+ data;
59
+ __namespace = undefined;
60
+ _parsedAssignmentText;
61
+ __shadowRoot;
62
+ _serviceClassName = null;
63
+ enableServiceClass = true;
64
+ serviceInstance;
65
+ serviceData;
66
+ shadowed = false;
67
+ container;
68
+ innerHTML;
69
+ reload;
70
+ static subcomponents;
71
+ assignRoutingParams = true;
72
+ responseTo;
73
+ static responseTo;
74
+ constructor({ __parent__, templateURI = "", template, tplsource = "default", tplextension, url = "", name = "", method = "GET", data = {}, reload = false, shadowed = false, cached = true, enableServiceClass, assignRoutingParams = true, _body = (0, DOMCreateElement_1._DOMCreateElement)("div"), __promise__ = null, __shadowRoot, body, shadowRoot, splashScreenComponent, controller, view }) {
75
+ if (arguments.length < 1) {
76
+ throw Error("No arguments in component. You must at least give one argument.");
77
+ }
78
+ super({
79
+ __parent__,
80
+ templateURI,
81
+ template,
82
+ tplsource,
83
+ tplextension,
84
+ url,
85
+ name,
86
+ method,
87
+ data,
88
+ reload,
89
+ shadowed,
90
+ cached,
91
+ enableServiceClass,
92
+ assignRoutingParams,
93
+ _body,
94
+ __promise__,
95
+ __shadowRoot,
96
+ body,
97
+ shadowRoot,
98
+ splashScreenComponent,
99
+ controller,
100
+ view
101
+ });
102
+ const self = this;
103
+ if (typeof self.name === "undefined") {
104
+ Logger_1.logger.warn("A name is not defined for " + (0, getType_1.__getType__)(self));
105
+ }
106
+ self.routingWay = CONFIG_1.CONFIG.get("routingWay");
107
+ self.processorHandler = new Processor_1.Processor({
108
+ component: self
109
+ });
110
+ /* assign body data attributes to data */
111
+ self.data = (typeof self.data === "undefined" || self.data === null) ? ({}) : (self.data);
112
+ self.data = Object.assign(self.data, self.dataAttributes);
113
+ self.createServiceInstance()
114
+ .then(() => {
115
+ if (typeof self.__new__ === "function") {
116
+ self.__new__(self);
117
+ }
118
+ self._generateRoutingPaths(self.body)
119
+ .then(function () {
120
+ self._reroute_()
121
+ .then(function () {
122
+ return self.rebuild()
123
+ .then(function () {
124
+ Logger_1.logger.info(`Component._new_ The component ${self.name} was built successfully!`);
125
+ }).catch(function (standardResponse) {
126
+ Logger_1.logger.warn(`Component._new_ Something went wrong building the component ${self.name}`);
127
+ console.error(standardResponse);
128
+ });
129
+ }).catch((e) => {
130
+ throw Error(`Unexpected error ${e}`);
131
+ });
132
+ }).catch((e) => {
133
+ throw Error(`Unexpected error ${e}`);
134
+ });
135
+ }).catch((e) => {
136
+ throw Error(`Unexpected error. ${e}`);
137
+ });
138
+ }
139
+ set cacheIndex(value) {
140
+ // readonly
141
+ Logger_1.logger.debug("[cacheIndex] This property is readonly");
142
+ }
143
+ get cacheIndex() {
144
+ const self = this;
145
+ const __routing_path__ = (0, DataStringify_1._DataStringify)(self.routingPath);
146
+ return Base64_1.Base64.encode(self.name + __routing_path__);
147
+ }
148
+ set parsedAssignmentText(value) {
149
+ // readonly
150
+ Logger_1.logger.debug("[parsedAssignmentText] This property is readonly");
151
+ }
152
+ get parsedAssignmentText() {
153
+ const self = this;
154
+ self._parsedAssignmentText = self.parseTemplate(self.template);
155
+ if (typeof self._parsedAssignmentText === "undefined") {
156
+ throw Error(`[Component][${this.name}][parsedAssignmentText] Could not generate content!`);
157
+ }
158
+ return self._parsedAssignmentText;
159
+ }
160
+ set shadowRoot(value) {
161
+ const self = this;
162
+ if (typeof self.__shadowRoot === "undefined") {
163
+ self.__shadowRoot = value;
164
+ }
165
+ else {
166
+ Logger_1.logger.debug("[shadowRoot] This property can only be assigned once!");
167
+ }
168
+ }
169
+ get shadowRoot() {
170
+ const self = this;
171
+ return self.__shadowRoot;
172
+ }
173
+ set routingSelected(value) {
174
+ Logger_1.logger.debug("[routingSelected] This is a read-only property of the component");
175
+ }
176
+ get routingSelected() {
177
+ const self = this;
178
+ return (0, routings_1.__valid_routings__)(self.routings, self.routingPath);
179
+ }
180
+ set routingParams(value) {
181
+ Logger_1.logger.debug("[routingParams] This is a read-only property of the component");
182
+ }
183
+ get routingParams() {
184
+ const component = this;
185
+ return [{}].concat(component.routingSelected.map(function (routing) {
186
+ return (0, routings_1.__routing_params__)(routing, component.routingPath);
187
+ })).reduce(function (accumulator, colData) {
188
+ return Object.assign(accumulator, colData);
189
+ });
190
+ }
191
+ set serviceClassName(_serviceClassName) {
192
+ this._serviceClassName = _serviceClassName;
193
+ }
194
+ get serviceClassName() {
195
+ let _serviceClassName = "";
196
+ if (platform_1.isBrowser) {
197
+ _serviceClassName = (this.body.getAttribute("serviceClass") !== null) ? (this.body.getAttribute("serviceClass")) : (this._serviceClassName);
198
+ }
199
+ else {
200
+ _serviceClassName = this._serviceClassName;
201
+ }
202
+ return _serviceClassName;
203
+ }
204
+ get responseToData() {
205
+ let _response_to_data_ = false;
206
+ if (platform_1.isBrowser) {
207
+ const responseToAttr = this.body.getAttribute("response-to");
208
+ _response_to_data_ = responseToAttr === "data" || this.responseTo === "data";
209
+ }
210
+ else {
211
+ _response_to_data_ = this.responseTo === "data";
212
+ }
213
+ return _response_to_data_;
214
+ }
215
+ get responseToTemplate() {
216
+ let _response_to_template_ = false;
217
+ if (platform_1.isBrowser) {
218
+ const responseToAttr = this.body.getAttribute("response-to");
219
+ _response_to_template_ = responseToAttr === "template" || this.responseTo === "template";
220
+ }
221
+ else {
222
+ _response_to_template_ = this.responseTo === "template";
223
+ }
224
+ return _response_to_template_;
225
+ }
226
+ createServiceInstance() {
227
+ const component = this;
228
+ let data = this.data;
229
+ let __serviceClass;
230
+ const __classDefinition = component.getClass().__definition;
231
+ const _serviceClassName = component.serviceClassName;
232
+ return new Promise(function (resolve, reject) {
233
+ /* __enable_service_class__ = true by default */
234
+ const __enable_service_class__ = component.enableServiceClass;
235
+ let _response_to_data_ = component.responseToData;
236
+ let _response_to_template_ = component.responseToTemplate;
237
+ if (__enable_service_class__ && _serviceClassName !== null) {
238
+ __serviceClass = (0, ClassFactory_1.ClassFactory)(_serviceClassName);
239
+ }
240
+ if (!_response_to_data_ && __classDefinition && Object.hasOwn(__classDefinition, "responseTo")) {
241
+ _response_to_data_ = (__classDefinition.responseTo === "data");
242
+ }
243
+ else if (!_response_to_data_ && Object.hasOwn((0, ClassFactory_1.ClassFactory)("Component"), "responseTo")) {
244
+ _response_to_data_ = ((0, ClassFactory_1.ClassFactory)("Component").responseTo === "data");
245
+ }
246
+ if (!_response_to_template_ && __classDefinition && Object.hasOwn(__classDefinition, "responseTo")) {
247
+ _response_to_template_ = (__classDefinition.responseTo === "template");
248
+ }
249
+ else if (!_response_to_template_ && Object.hasOwn((0, ClassFactory_1.ClassFactory)("Component"), "responseTo")) {
250
+ _response_to_template_ = ((0, ClassFactory_1.ClassFactory)("Component").responseTo === "template");
251
+ }
252
+ if (typeof __serviceClass !== "undefined" &&
253
+ (typeof __enable_service_class__ !== "undefined" &&
254
+ __enable_service_class__ === true) &&
255
+ (_response_to_data_ || _response_to_template_)) {
256
+ Logger_1.logger.info("Loading service " + _serviceClassName);
257
+ const serviceInstance = (0, New_1.New)(__serviceClass, {
258
+ data
259
+ });
260
+ (0, serviceLoader_1.serviceLoader)(serviceInstance)?.then(function ({ service }) {
261
+ let serviceResponse;
262
+ if (typeof service.JSONresponse !== "undefined" && service.JSONresponse !== null) {
263
+ serviceResponse = service.JSONresponse;
264
+ }
265
+ else {
266
+ serviceResponse = service.template;
267
+ }
268
+ if (_response_to_data_) {
269
+ if (typeof data === "object" && typeof serviceResponse === "object") {
270
+ data = Object.assign(data, serviceResponse);
271
+ }
272
+ else {
273
+ data = serviceResponse;
274
+ }
275
+ component.data = data;
276
+ }
277
+ component.serviceInstance = serviceInstance;
278
+ component.serviceData = data;
279
+ if (_response_to_template_) {
280
+ component.template = serviceResponse;
281
+ }
282
+ resolve(serviceResponse);
283
+ }, function (rejectedResponse) {
284
+ Logger_1.logger.debug(`Service loading rejected for ${_serviceClassName} in ${component.name}`);
285
+ reject(rejectedResponse);
286
+ }).catch(function (e) {
287
+ Logger_1.logger.debug("Something went wroing while trying to load the service " + _serviceClassName);
288
+ throw Error(`Error loading ${_serviceClassName} for ${component.name}. Detail: ${e}`);
289
+ });
290
+ }
291
+ else {
292
+ resolve(null);
293
+ }
294
+ });
295
+ }
296
+ _bindroute_() {
297
+ const _component_ = this;
298
+ if (!_component_._bindroute_.loaded) {
299
+ if (platform_1.isBrowser) {
300
+ _component_.hostElements("a").map(function (a) {
301
+ a.oldclick = a.onclick;
302
+ a.onclick = function (e) {
303
+ let _ret_ = true;
304
+ if (!top_1._top.global.get("routingPaths")) {
305
+ top_1._top.global.set("routingPaths", []);
306
+ }
307
+ const routingWay = CONFIG_1.CONFIG.get("routingWay");
308
+ const routingPath = e.target[routingWay];
309
+ if (top_1._top.global.get("routingPaths").includes(routingPath) &&
310
+ e.target[routingWay] !== location[routingWay] &&
311
+ e.target.href !== document.location.href) {
312
+ Logger_1.logger.debug("A ROUTING WAS FOUND: " + routingPath);
313
+ window.history.pushState({
314
+ href: e.target.href
315
+ }, e?.target?.href, e.target.href);
316
+ Component.route().catch((e) => { throw Error(`Unexpected error: ${e}`); });
317
+ _ret_ = false;
318
+ }
319
+ else {
320
+ Logger_1.logger.debug("NO ROUTING FOUND FOR: " + routingPath);
321
+ }
322
+ if (typeof e.target.oldclick !== "undefined" && typeof e.target.oldclick === "function") {
323
+ e.target.oldclick.call(e.target, e);
324
+ }
325
+ return _ret_;
326
+ };
327
+ return null;
328
+ });
329
+ }
330
+ else {
331
+ // not yet implemented.
332
+ }
333
+ _component_._bindroute_.loaded = true;
334
+ }
335
+ else {
336
+ Logger_1.logger.debug(`Routes already bound to popstate events for ${_component_.name}`);
337
+ }
338
+ }
339
+ done(standardResponse) {
340
+ const _ret_ = new Promise((resolve) => {
341
+ if (typeof standardResponse !== "undefined") {
342
+ const { request, component } = standardResponse;
343
+ resolve({ request, component });
344
+ }
345
+ else {
346
+ resolve({ request: undefined, component: undefined });
347
+ }
348
+ });
349
+ return _ret_;
350
+ }
351
+ createControllerInstance() {
352
+ let _Controller;
353
+ if (platform_1.isBrowser) {
354
+ if (typeof this.body === "undefined") {
355
+ throw new Error("The component has no body");
356
+ }
357
+ var controllerName = this.body.getAttribute("controllerClass");
358
+ if (!controllerName) {
359
+ controllerName = "Controller";
360
+ }
361
+ _Controller = (0, ClassFactory_1.ClassFactory)(controllerName);
362
+ if (typeof _Controller !== "undefined") {
363
+ this.controller = (0, New_1.New)(_Controller, {
364
+ component: this
365
+ });
366
+ }
367
+ }
368
+ return new Promise((resolve, reject) => {
369
+ if (platform_1.isBrowser) {
370
+ if (typeof _Controller !== "undefined" && typeof this.controller !== "undefined") {
371
+ if (typeof (this.controller).done === "function") {
372
+ try {
373
+ this.controller.done.call(this.controller);
374
+ }
375
+ catch (e) {
376
+ throw Error(e);
377
+ }
378
+ }
379
+ else {
380
+ Logger_1.logger.debug(`${controllerName} does not have a done() method.`);
381
+ reject(new Error(`${controllerName} does not have a done() method.`));
382
+ }
383
+ if (typeof this.controller.createRoutingController === "function") {
384
+ this.controller.createRoutingController.call(this.controller);
385
+ }
386
+ else {
387
+ Logger_1.logger.debug(`${controllerName} does not have a createRoutingController() method.`);
388
+ }
389
+ }
390
+ }
391
+ resolve({ component: this, controller: this.controller });
392
+ });
393
+ }
394
+ createEffectInstance() {
395
+ const _component_ = this;
396
+ return new Promise(function (resolve) {
397
+ if (platform_1.isBrowser) {
398
+ const effectClassName = _component_.body?.getAttribute("effectClass");
399
+ let applyEffectTo = _component_.body?.getAttribute("apply-effect-to");
400
+ applyEffectTo = (applyEffectTo !== null) ? (applyEffectTo) : ("load");
401
+ if (effectClassName !== null && applyEffectTo === "observe") {
402
+ _component_.applyObserveTransitionEffect(effectClassName);
403
+ }
404
+ else if (effectClassName !== null && applyEffectTo === "load") {
405
+ _component_.applyTransitionEffect(effectClassName);
406
+ }
407
+ }
408
+ resolve({ component: _component_, effect: _component_.effect });
409
+ });
410
+ }
411
+ createViewInstance() {
412
+ const _component_ = this;
413
+ return new Promise(function (resolve) {
414
+ const viewName = (platform_1.isBrowser) ? (_component_.body.getAttribute("viewClass")) : (null);
415
+ if (viewName !== null) {
416
+ const _View = (0, ClassFactory_1.ClassFactory)(viewName);
417
+ if (typeof _View !== "undefined") {
418
+ _component_.view = (0, New_1.New)(_View, {
419
+ component: _component_
420
+ }); // Initializes the main view for the component
421
+ if (Object.hasOwn(_component_.view, "done") && typeof _component_.view?.done === "function") {
422
+ _component_.view?.done.call(_component_.view);
423
+ }
424
+ }
425
+ }
426
+ resolve({ component: _component_, view: _component_.view });
427
+ });
428
+ }
429
+ __done__() {
430
+ const _component_ = this;
431
+ const componentDone = function () {
432
+ if (typeof _component_ === "undefined") {
433
+ throw new Error("componentDone() has lost its context");
434
+ }
435
+ if (typeof _component_.body === "undefined") {
436
+ throw new Error("The component has no body");
437
+ }
438
+ (async () => {
439
+ await _component_.createViewInstance();
440
+ await _component_.createControllerInstance();
441
+ await _component_.createEffectInstance();
442
+ })()
443
+ .catch((e) => {
444
+ throw new Error(`Unknown error ${e}.`);
445
+ });
446
+ Logger_1.logger.debug(`Trying to run component helpers for ${_component_.name}...`);
447
+ try {
448
+ _component_.runComponentHelpers();
449
+ Logger_1.logger.debug(`Component helpers for ${_component_.name} executed.`);
450
+ }
451
+ catch (e) {
452
+ Logger_1.logger.debug(`Component helpers for ${_component_.name} could not be executed.`);
453
+ throw Error(e);
454
+ }
455
+ _component_.subcomponents = _component_.__buildSubComponents__();
456
+ _component_._bindroute_();
457
+ if (platform_1.isBrowser) {
458
+ _component_.body.setAttribute("loaded", "true");
459
+ }
460
+ };
461
+ return new Promise(function (resolve, reject) {
462
+ try {
463
+ resolve(componentDone.call(_component_));
464
+ }
465
+ catch (e) {
466
+ reject(new Error(e));
467
+ }
468
+ });
469
+ }
470
+ hostElements(tagFilter) {
471
+ const _component_ = this;
472
+ let elementList = [];
473
+ if (platform_1.isBrowser) {
474
+ elementList = (_component_.shadowed && (typeof _component_.shadowRoot !== "undefined")) ? _component_.shadowRoot.subelements(tagFilter) : (_component_.body.subelements(tagFilter));
475
+ }
476
+ return elementList;
477
+ }
478
+ get subtags() {
479
+ const _component_ = this;
480
+ const tagFilter = tag_filter_1._tag_filter_;
481
+ return _component_.hostElements(tagFilter);
482
+ }
483
+ get bodyAttributes() {
484
+ const _component_ = this;
485
+ const c = _component_.body;
486
+ return (platform_1.isBrowser) ? ([...c.getAttributeNames()].map(a => { return { [a]: c.getAttribute(a) }; }).reduce((accumulator, colData) => { return Object.assign(accumulator, colData); })) : ({});
487
+ }
488
+ get dataAttributes() {
489
+ const _component_ = this;
490
+ const c = _component_.body;
491
+ return (platform_1.isBrowser) ? ([{}].concat([...c.getAttributeNames()].filter(n => n.startsWith("data-")).map(a => { return { [a.split("-")[1]]: c.getAttribute(a) }; })).reduce((accumulator, colData) => { return Object.assign(accumulator, colData); })) : ({});
492
+ }
493
+ __buildSubComponents__(rebuildObjects = false) {
494
+ const _component_ = this;
495
+ let elementList = _component_.subtags;
496
+ if (!rebuildObjects) {
497
+ elementList = elementList.filter((t) => t.getAttribute("loaded") !== "true");
498
+ }
499
+ if ((typeof _component_ !== "undefined") || _component_.subcomponents.length < 1) {
500
+ _component_.subcomponents = (0, ComponentFactory_1._buildComponentsFromElements_)(elementList, _component_);
501
+ }
502
+ return _component_.subcomponents;
503
+ }
504
+ fail(standardResponse) {
505
+ const _ret_ = new Promise((resolve, reject) => {
506
+ if (typeof standardResponse !== "undefined") {
507
+ const { error, component } = standardResponse;
508
+ resolve({ error, component });
509
+ }
510
+ else {
511
+ reject(new Error(" Unknown error."));
512
+ }
513
+ });
514
+ return _ret_;
515
+ }
516
+ set(key, value) {
517
+ this[key] = value;
518
+ }
519
+ get(key, _defaultValue) {
520
+ return this[key] || _defaultValue;
521
+ }
522
+ feedComponent() {
523
+ const _component_ = this;
524
+ Logger_1.logger.debug(`[Component][${this.name}][feedComponent] start feeding component...`);
525
+ const _feedComponent_InBrowser = function (_component_) {
526
+ if (typeof _component_.container === "undefined" && typeof _component_.body === "undefined") {
527
+ Logger_1.logger.warn("COMPONENT {{NAME}} has an undefined container and body".replace("{{NAME}}", _component_.name));
528
+ return;
529
+ }
530
+ const container = (typeof _component_.container === "undefined" || _component_.container === null) ? (_component_.body) : (_component_.container);
531
+ const parsedAssignmentText = _component_.parsedAssignmentText;
532
+ _component_.innerHTML = parsedAssignmentText;
533
+ if (_component_.shadowed) {
534
+ Logger_1.logger.debug("COMPONENT {{NAME}} is shadowed".replace("{{NAME}}", _component_.name));
535
+ Logger_1.logger.debug("Preparing slots for Shadowed COMPONENT {{NAME}}".replace("{{NAME}}", _component_.name));
536
+ const tmp_shadowContainer = (0, DOMCreateElement_1._DOMCreateElement)("div");
537
+ container.subelements("[slot]").map((c) => {
538
+ if (c.parentElement === container) {
539
+ tmp_shadowContainer.appendChild(c);
540
+ }
541
+ return c;
542
+ });
543
+ Logger_1.logger.debug("Creating shadowedContainer for COMPONENT {{NAME}}".replace("{{NAME}}", _component_.name));
544
+ const shadowContainer = (0, DOMCreateElement_1._DOMCreateElement)("div");
545
+ shadowContainer.classList.add("shadowHost");
546
+ try {
547
+ _component_.shadowRoot = shadowContainer.attachShadow({
548
+ mode: "open"
549
+ });
550
+ }
551
+ catch (e) {
552
+ Logger_1.logger.debug(`An error ocurred: ${e}.`);
553
+ try {
554
+ Logger_1.logger.debug("Shadowed COMPONENT {{NAME}} is repeated".replace("{{NAME}}", _component_.name));
555
+ _component_.shadowRoot = shadowContainer.shadowRoot;
556
+ }
557
+ catch (e) {
558
+ Logger_1.logger.debug(`An error ocurred: ${e}.`);
559
+ Logger_1.logger.warn("Shadowed COMPONENT {{NAME}} is not allowed on this browser".replace("{{NAME}}", _component_.name));
560
+ }
561
+ }
562
+ if (typeof _component_.shadowRoot !== "undefined" && _component_.shadowRoot !== null) {
563
+ if (_component_.reload) {
564
+ Logger_1.logger.debug("FORCED RELOADING OF CONTAINER FOR Shadowed COMPONENT {{NAME}}".replace("{{NAME}}", _component_.name));
565
+ if (shadowContainer !== null && shadowContainer.shadowRoot !== null) {
566
+ shadowContainer.shadowRoot.innerHTML = _component_.innerHTML;
567
+ }
568
+ }
569
+ else {
570
+ tmp_shadowContainer.innerHTML = _component_.parseTemplate(tmp_shadowContainer.innerHTML);
571
+ Logger_1.logger.debug("ADDING Shadowed COMPONENT {{NAME}} ".replace("{{NAME}}", _component_.name));
572
+ if (shadowContainer !== null && shadowContainer.shadowRoot !== null) {
573
+ shadowContainer.shadowRoot.innerHTML += _component_.innerHTML;
574
+ }
575
+ }
576
+ Logger_1.logger.debug("ADDING Slots to Shadowed COMPONENT {{NAME}} ".replace("{{NAME}}", _component_.name));
577
+ shadowContainer.innerHTML += tmp_shadowContainer.innerHTML;
578
+ Logger_1.logger.debug("APPENDING Shadowed COMPONENT {{NAME}} to Container ".replace("{{NAME}}", _component_.name));
579
+ const qs = container.querySelector(".shadowHost");
580
+ if (!(typeof qs !== "undefined" && qs !== null)) {
581
+ container.appendChild(shadowContainer);
582
+ }
583
+ else {
584
+ Logger_1.logger.debug("Shadowed Container for COMPONENT {{NAME}} is already present in the tree ".replace("{{NAME}}", _component_.name));
585
+ if (_component_.shadowRoot !== null && shadowContainer.shadowRoot !== null) {
586
+ _component_.shadowRoot.innerHTML = shadowContainer.shadowRoot.innerHTML;
587
+ }
588
+ }
589
+ }
590
+ else {
591
+ Logger_1.logger.warn("Shadowed COMPONENT {{NAME}} is bad configured".replace("{{NAME}}", _component_.name));
592
+ }
593
+ }
594
+ else {
595
+ if (_component_.reload) {
596
+ Logger_1.logger.debug("FORCED RELOADING OF CONTAINER FOR COMPONENT {{NAME}}".replace("{{NAME}}", _component_.name));
597
+ container.innerHTML = _component_.innerHTML;
598
+ }
599
+ else if (container && _component_) {
600
+ Logger_1.logger.debug("ADDING COMPONENT {{NAME}} ".replace("{{NAME}}", _component_.name));
601
+ container.innerHTML += _component_.innerHTML;
602
+ }
603
+ else {
604
+ Logger_1.logger.warn("COMPONENT {{NAME}} is not added to the DOM".replace("{{NAME}}", _component_.name));
605
+ }
606
+ }
607
+ };
608
+ const _feedComponent_InNode = function (_component_) {
609
+ const parsedAssignmentText = _component_.parsedAssignmentText;
610
+ _component_.innerHTML = parsedAssignmentText;
611
+ };
612
+ let _ret_;
613
+ if (!(0, is_a_1.is_a)(_component_, "Component")) {
614
+ Logger_1.logger.warn("Trying to feed a non component object");
615
+ return Promise.reject(new Error(`Trying to feed a non component object ${typeof _component_}`));
616
+ }
617
+ return new Promise((resolve, reject) => {
618
+ if (platform_1.isBrowser) {
619
+ try {
620
+ _ret_ = _feedComponent_InBrowser(_component_);
621
+ resolve(_ret_);
622
+ }
623
+ catch (e) {
624
+ reject(new Error(e));
625
+ }
626
+ }
627
+ else {
628
+ try {
629
+ _ret_ = _feedComponent_InNode(_component_);
630
+ resolve(_ret_);
631
+ }
632
+ catch (e) {
633
+ reject(new Error(e));
634
+ }
635
+ }
636
+ });
637
+ }
638
+ rebuild() {
639
+ const _component = this;
640
+ var _promise = new Promise(function (resolve, reject) {
641
+ if (typeof _component === "undefined" || _component === null) {
642
+ reject(new Error("Component is undefined"));
643
+ }
644
+ if ((0, isQCObjects_1.isQCObjects_Object)(_component) && (0, is_a_1.is_a)(_component, "Component")) {
645
+ switch (true) {
646
+ case (_component.get("tplsource") === "none"):
647
+ Logger_1.logger.debug("Component " + _component.name + " has specified template-source=none, so no template load was done");
648
+ var standardResponse = {
649
+ request: undefined,
650
+ component: _component
651
+ };
652
+ _component.__done__().then(function () {
653
+ if (typeof _component.done === "function") {
654
+ _component.done.call(_component, standardResponse)
655
+ .catch((e) => {
656
+ Logger_1.logger.debug(`It was an error while calling done() in ${_component.name}: ${e}`);
657
+ });
658
+ }
659
+ resolve.call(_promise, standardResponse);
660
+ }, function () {
661
+ reject.call(_promise, standardResponse);
662
+ });
663
+ break;
664
+ case (_component.get("tplsource") === "inline"):
665
+ Logger_1.logger.debug("Component " + _component.name + " has specified template-source=inline, so it is assumed that template is already declared");
666
+ (async (_component) => {
667
+ await _component.feedComponent.bind(_component)();
668
+ })(_component)
669
+ .catch((e) => {
670
+ Logger_1.logger.debug(`It was not possible to feed the component ${_component.name}: ${e}`);
671
+ });
672
+ var standardResponse = {
673
+ request: undefined,
674
+ component: _component
675
+ };
676
+ _component.__done__().then(async () => {
677
+ if (typeof _component.done === "function") {
678
+ await _component.done(standardResponse);
679
+ }
680
+ resolve.call(_promise, standardResponse);
681
+ }, function () {
682
+ reject.call(_promise, standardResponse);
683
+ });
684
+ break;
685
+ case (_component.get("tplsource") === "default" &&
686
+ _component.get("templateURI") !== ""):
687
+ _component.set("url", _component.get("basePath") + _component.get("templateURI"));
688
+ ((0, componentLoader_1.componentLoader)(_component, false))?.then(function (standardResponse) {
689
+ resolve.call(_promise, standardResponse);
690
+ }, function (standardResponse) {
691
+ reject.call(_promise, standardResponse);
692
+ });
693
+ break;
694
+ case (_component.get("tplsource") === "external" &&
695
+ _component.get("templateURI") !== ""):
696
+ _component.set("url", _component.get("templateURI"));
697
+ ((0, componentLoader_1.componentLoader)(_component, false)).then(function (standardResponse) {
698
+ resolve.call(_promise, standardResponse);
699
+ }, function (standardResponse) {
700
+ reject.call(_promise, standardResponse);
701
+ });
702
+ break;
703
+ case _component.get("tplsource") === "default" && _component.get("templateURI", "") === "":
704
+ Logger_1.logger.debug(`Component ${_component.name} template-source is ${_component.get("tplsource")} and no templateURI is present`);
705
+ reject.call(_promise, `Component ${_component.name} template-source is ${_component.get("tplsource")} and no templateURI is present`);
706
+ break;
707
+ default:
708
+ Logger_1.logger.debug("Component " + _component.name + " will not be rebuilt because no templateURI is present");
709
+ reject.call(_promise, {
710
+ request: null,
711
+ component: _component
712
+ });
713
+ break;
714
+ }
715
+ }
716
+ });
717
+ return _promise;
718
+ }
719
+ Cast(oClass) {
720
+ /* Cast method for components has been deprecated. Don't use this method, it is available only for compatibility purposes */
721
+ const o = (0, introspection_1._methods_)(oClass).map((m) => m.name.replace(/bound /g, "")).map(m => {
722
+ return {
723
+ [m]: oClass[m].bind(this)
724
+ };
725
+ }).reduce((c, p) => Object.assign(c, p), {});
726
+ return (0, Cast_1._Cast)(this, o);
727
+ }
728
+ route() {
729
+ return this.constructor.route();
730
+ }
731
+ static route() {
732
+ const componentClass = this; /* is can be class or object */
733
+ let _route_promise_;
734
+ const isValidInstance = !!(((0, isQCObjects_1.isQCObjects_Object)(componentClass) && (0, is_a_1.is_a)(componentClass, "Component")));
735
+ const __route__ = function (componentList) {
736
+ const _componentNames_ = [];
737
+ const _promises_ = componentList.filter(function (rc) {
738
+ return typeof rc !== "undefined";
739
+ }).map(function (rc) {
740
+ if (typeof rc.name !== "undefined") {
741
+ _componentNames_.push(rc.name);
742
+ }
743
+ else {
744
+ throw new Error((0, getType_1.__getType__)(rc) + " does not have a name");
745
+ }
746
+ return new Promise(function (resolve, reject) {
747
+ if (typeof rc !== "undefined" && !!rc._reroute_) {
748
+ rc._reroute_()
749
+ .then(function () {
750
+ rc.reload = true;
751
+ rc.rebuild()
752
+ .then(() => {
753
+ resolve();
754
+ })
755
+ .catch((e) => {
756
+ Logger_1.logger.debug(`Error ${e}`);
757
+ });
758
+ return;
759
+ })
760
+ .then(function () {
761
+ if (Object.hasOwn(rc, "subcomponents") &&
762
+ typeof rc.subcomponents !== "undefined" &&
763
+ rc.subcomponents.length > 0) {
764
+ Logger_1.logger.debug("LOOKING FOR ROUTINGS IN SUBCOMPONENTS FOR: " + rc.name);
765
+ return __route__.call(rc, rc.subcomponents);
766
+ }
767
+ else {
768
+ Logger_1.logger.debug("No subcomponents to look for routings in: " + rc.name);
769
+ if (rc.subtags.length > 0) {
770
+ rc.subcomponents = rc.__buildSubComponents__(true);
771
+ }
772
+ resolve();
773
+ }
774
+ }).catch((e) => {
775
+ Logger_1.logger.debug(`Error: ${e}`);
776
+ });
777
+ }
778
+ else if (typeof rc !== "undefined") {
779
+ reject(new Error("Component " + rc.name + " is not an instance of Component"));
780
+ }
781
+ return;
782
+ });
783
+ });
784
+ return Promise.all(_promises_)
785
+ .then(function () {
786
+ Logger_1.logger.debug("ROUTING COMPLETED FOR " + _componentNames_.join(", "));
787
+ }).catch(function (err) {
788
+ Logger_1.logger.warn("ROUTING FAILED FOR " + _componentNames_.join(", ") + ": " + err);
789
+ });
790
+ };
791
+ if (isValidInstance || !!top_1.componentsStack) {
792
+ if (isValidInstance) {
793
+ Logger_1.logger.debug("loading routings for instance " + componentClass.name);
794
+ }
795
+ _route_promise_ = __route__.call(componentClass, (isValidInstance) ? (componentClass.subcomponents) : (top_1.componentsStack));
796
+ }
797
+ else {
798
+ Logger_1.logger.debug("An undetermined result expected if load routings. So will not be loaded this time.");
799
+ throw Error("There is no valid instance and no components stack available to apply rountings");
800
+ }
801
+ return _route_promise_;
802
+ }
803
+ fullscreen() {
804
+ if (platform_1.isBrowser) {
805
+ const elem = this.body;
806
+ if (elem.requestFullscreen) {
807
+ elem.requestFullscreen()
808
+ .catch((e) => {
809
+ throw new Error(`An error ocurred when requesting fullscreen: ${e}`);
810
+ });
811
+ }
812
+ else if (elem.mozRequestFullScreen) {
813
+ /* Firefox */
814
+ elem.mozRequestFullScreen();
815
+ }
816
+ else if (elem.webkitRequestFullscreen) {
817
+ /* Chrome, Safari & Opera */
818
+ elem.webkitRequestFullscreen();
819
+ }
820
+ else if (elem.msRequestFullscreen) {
821
+ /* IE/Edge */
822
+ elem.msRequestFullscreen();
823
+ }
824
+ }
825
+ else {
826
+ // not yet implemented.
827
+ }
828
+ }
829
+ closefullscreen() {
830
+ if (platform_1.isBrowser) {
831
+ if (document.exitFullscreen) {
832
+ document.exitFullscreen()
833
+ .catch((e) => { throw new Error(`An error ocurred when trying to exit fullscrenn ${e}.`); });
834
+ }
835
+ else if (document.mozCancelFullScreen) {
836
+ document.mozCancelFullScreen();
837
+ }
838
+ else if (document.webkitExitFullscreen) {
839
+ document.webkitExitFullscreen();
840
+ }
841
+ else if (document.msExitFullscreen) {
842
+ document.msExitFullscreen();
843
+ }
844
+ }
845
+ else {
846
+ // noy yet implemented.
847
+ }
848
+ }
849
+ _generateRoutingPaths(componentBody) {
850
+ const component = this;
851
+ return new Promise(function (resolve) {
852
+ if (platform_1.isBrowser) {
853
+ if ((0, routings_1.__valid_routing_way__)(component.validRoutingWays, component.routingWay || "")) {
854
+ if (typeof componentBody !== "undefined") {
855
+ component.innerHTML = componentBody?.innerHTML;
856
+ component.routingNodes = componentBody?.subelements("routing");
857
+ component.routings = [];
858
+ component.routingNodes.map((routingNode) => {
859
+ const attributeNames = routingNode.getAttributeNames();
860
+ const routing = {};
861
+ attributeNames.map((attributeName, a) => {
862
+ routing[attributeNames[a]] = routingNode.getAttribute(attributeNames[a]);
863
+ return attributeName;
864
+ });
865
+ component.routings.push(routing);
866
+ if (!component.routingPaths) {
867
+ component.routingPaths = [];
868
+ }
869
+ if (!component.routingPaths.includes(routing.path)) {
870
+ component.routingPaths.push(routing.path);
871
+ }
872
+ if (!top_1._top.global.get("routingPaths")) {
873
+ top_1._top.global.set("routingPaths", []);
874
+ }
875
+ if (!top_1._top.global.get("routingPaths").includes(routing.path)) {
876
+ top_1._top.global.get("routingPaths").push(routing.path);
877
+ }
878
+ return routingNode;
879
+ });
880
+ }
881
+ }
882
+ }
883
+ else {
884
+ // not yet implemented.
885
+ }
886
+ resolve();
887
+ });
888
+ }
889
+ parseTemplate(template) {
890
+ const _self = this;
891
+ let _parsedAssignmentText;
892
+ const value = template;
893
+ if (Object.hasOwn(_self, "templateHandler")) {
894
+ const templateHandlerName = _self.templateHandler;
895
+ Logger_1.logger.debug(`[Component][${this.name}][parseTemplate] Attempting to use ${templateHandlerName} ...`);
896
+ const templateHandlerClass = (0, ClassFactory_1.ClassFactory)(templateHandlerName);
897
+ const templateInstance = (0, New_1.New)(templateHandlerClass, {
898
+ component: _self,
899
+ template: value
900
+ });
901
+ templateInstance.component = _self;
902
+ let selfData = _self.data;
903
+ if (Object.hasOwn(_self, "assignRoutingParams") && _self.assignRoutingParams) {
904
+ try {
905
+ selfData = Object.assign(selfData, _self.routingParams);
906
+ }
907
+ catch (e) {
908
+ Logger_1.logger.debug(`An error ocurred: ${e}.`);
909
+ Logger_1.logger.debug("[parseTemplate] it was not possible to assign the routing params to the template");
910
+ }
911
+ }
912
+ _parsedAssignmentText = templateInstance.assign(selfData);
913
+ }
914
+ else {
915
+ Logger_1.logger.debug(`[Component][${this.name}][parseTemplate] No value for templateHandler. Using raw content...`);
916
+ _parsedAssignmentText = value;
917
+ }
918
+ return _parsedAssignmentText;
919
+ }
920
+ _reroute_() {
921
+ /* This method set the selected routing and makes the switch to the templateURI */
922
+ const rc = this;
923
+ return new Promise(function (resolve) {
924
+ if (platform_1.isBrowser) {
925
+ if ((0, routings_1.__valid_routing_way__)(rc.validRoutingWays, rc.routingWay || "")) {
926
+ rc.routingPath = location[rc.routingWay];
927
+ rc.routingSelected.map((routing) => {
928
+ const componentURI = (0, ComponentFactory_1.ComponentURI)({
929
+ "COMPONENTS_BASE_PATH": CONFIG_1.CONFIG.get("componentsBasePath"),
930
+ "COMPONENT_NAME": routing.name.toString(),
931
+ "TPLEXTENSION": (Object.hasOwn(routing, "tplextension")) ? (routing.tplextension || "") : (rc.tplextension),
932
+ "TPL_SOURCE": "default" /* here is always default in order to get the right uri */
933
+ });
934
+ rc.templateURI = componentURI;
935
+ return routing;
936
+ });
937
+ if (rc.routingSelected.length > 0) {
938
+ rc.template = "";
939
+ if (typeof rc.body !== "undefined" && rc.body !== null) {
940
+ rc.body.innerHTML = "";
941
+ }
942
+ }
943
+ }
944
+ }
945
+ resolve(rc);
946
+ });
947
+ }
948
+ lazyLoadImages() {
949
+ if (platform_1.isBrowser) {
950
+ const component = this;
951
+ const _componentRoot = component.componentRoot;
952
+ if (typeof _componentRoot !== "undefined" && _componentRoot !== null) {
953
+ const _imgLazyLoaded = [..._componentRoot.subelements("img[lazy-src]")];
954
+ const _lazyLoadImages = function (image) {
955
+ image.setAttribute("src", image.getAttribute("lazy-src")?.toString());
956
+ image.onload = () => {
957
+ image.removeAttribute("lazy-src");
958
+ };
959
+ };
960
+ if ("IntersectionObserver" in window) {
961
+ const observer = new IntersectionObserver((items, observer) => {
962
+ items.forEach((item) => {
963
+ if (item.isIntersecting) {
964
+ _lazyLoadImages(item.target);
965
+ observer.unobserve(item.target);
966
+ }
967
+ });
968
+ });
969
+ _imgLazyLoaded.map(function (img) {
970
+ return observer.observe(img);
971
+ });
972
+ }
973
+ else {
974
+ _imgLazyLoaded.map(_lazyLoadImages);
975
+ }
976
+ }
977
+ }
978
+ else {
979
+ // not yet implemented
980
+ }
981
+ return null;
982
+ }
983
+ applyTransitionEffect(effectClassName) {
984
+ const _Effect = (0, ClassFactory_1.ClassFactory)(effectClassName);
985
+ if (typeof _Effect === "undefined") {
986
+ throw Error(`${effectClassName} not found.`);
987
+ }
988
+ if (typeof _Effect !== "undefined" && (0, is_a_1.is_a)(_Effect, "TransitionEffect")) {
989
+ this.effect = (0, New_1.New)(_Effect, {
990
+ component: this
991
+ });
992
+ this.effect?.apply(this.effect?.defaultParams);
993
+ }
994
+ else {
995
+ Logger_1.logger.debug(`${effectClassName} is ${(0, getType_1.__getType__)(_Effect)} but is not a TransitionEffect`);
996
+ }
997
+ }
998
+ applyObserveTransitionEffect(effectClassName) {
999
+ if (platform_1.isBrowser) {
1000
+ const component = this;
1001
+ const _componentRoot = component.componentRoot;
1002
+ const _applyEffect_ = function () {
1003
+ component.applyTransitionEffect(effectClassName);
1004
+ };
1005
+ if ("IntersectionObserver" in window) {
1006
+ const observer = new IntersectionObserver((items, observer) => {
1007
+ items.forEach((item) => {
1008
+ if (item.isIntersecting) {
1009
+ _applyEffect_();
1010
+ observer.unobserve(item.target);
1011
+ }
1012
+ });
1013
+ });
1014
+ observer.observe(_componentRoot);
1015
+ }
1016
+ else {
1017
+ _applyEffect_();
1018
+ }
1019
+ }
1020
+ else {
1021
+ // not yet implemented
1022
+ }
1023
+ }
1024
+ get componentRoot() {
1025
+ return (this.shadowed) ? (this.shadowRoot) : (this.body);
1026
+ }
1027
+ scrollIntoHash() {
1028
+ if (platform_1.isBrowser) {
1029
+ const component = this;
1030
+ if (document.location.hash !== "") {
1031
+ const _componentRoot = component.componentRoot;
1032
+ (_componentRoot?.subelements(document.location.hash)).map((element) => {
1033
+ if (typeof element.scrollIntoView === "function") {
1034
+ element.scrollIntoView(CONFIG_1.CONFIG.get("scrollIntoHash", {
1035
+ behavior: "auto",
1036
+ block: "top",
1037
+ inline: "top"
1038
+ }));
1039
+ }
1040
+ return element;
1041
+ });
1042
+ }
1043
+ }
1044
+ else {
1045
+ // not yet implemented
1046
+ }
1047
+ }
1048
+ i18n_translate() {
1049
+ if (platform_1.isBrowser) {
1050
+ if (CONFIG_1.CONFIG.get("use_i18n")) {
1051
+ const component = this;
1052
+ const _componentRoot = component.componentRoot;
1053
+ const lang1 = CONFIG_1.CONFIG.get("lang", "en");
1054
+ const lang2 = navigator.language.slice(0, 2);
1055
+ const i18n = top_1._top.global.get("i18n");
1056
+ if ((lang1 !== lang2) && (typeof i18n === "object" && Object.hasOwn(i18n, "messages"))) {
1057
+ const callback_i18n = () => {
1058
+ return new Promise(function (resolve) {
1059
+ const messages = i18n.messages.filter(function (message) {
1060
+ return Object.hasOwn(message, lang1) && Object.hasOwn(message, lang2);
1061
+ });
1062
+ (_componentRoot?.subelements("ul,li,h1,h2,h3,a,b,p,input,textarea,summary,details,option,component"))
1063
+ .map((element) => {
1064
+ messages.map(function (message) {
1065
+ let _innerHTML = element.innerHTML;
1066
+ _innerHTML = _innerHTML?.replace(new RegExp(`${message[lang1]}`, "g"), message[lang2]);
1067
+ element.innerHTML = _innerHTML;
1068
+ return null;
1069
+ });
1070
+ return element;
1071
+ });
1072
+ resolve();
1073
+ });
1074
+ };
1075
+ callback_i18n.call(component).then(function () {
1076
+ Logger_1.logger.debug("i18n loaded for component: " + component.name);
1077
+ }).catch((e) => { throw new Error(`An error ocurred when parsing i18n: ${e}.`); });
1078
+ }
1079
+ }
1080
+ }
1081
+ else {
1082
+ // not yet implemented
1083
+ }
1084
+ }
1085
+ addComponentHelper(componentHelper) {
1086
+ const component = this;
1087
+ component._componentHelpers.push(componentHelper);
1088
+ }
1089
+ runComponentHelpers() {
1090
+ if (platform_1.isBrowser) {
1091
+ const component = this;
1092
+ let __component_helpers__ = [];
1093
+ /*
1094
+ * BEGIN use i18n translation
1095
+ */
1096
+ __component_helpers__.push(component.i18n_translate.bind(component));
1097
+ /*
1098
+ * END use i18n translation
1099
+ */
1100
+ /*
1101
+ * BEGIN component scrollIntoHash
1102
+ */
1103
+ __component_helpers__.push(component.scrollIntoHash.bind(component));
1104
+ /*
1105
+ * END component scrollIntoHash
1106
+ */
1107
+ /*
1108
+ * BEGIN component images lazy-load
1109
+ */
1110
+ __component_helpers__.push(component.lazyLoadImages.bind(component));
1111
+ /*
1112
+ * END component images lazy-load
1113
+ */
1114
+ __component_helpers__ = __component_helpers__.concat(component._componentHelpers);
1115
+ __component_helpers__.map((_component_helper_) => {
1116
+ Logger_1.logger.debug(`Executing ${_component_helper_.name} as component helper for ${component.name}...`);
1117
+ _component_helper_();
1118
+ return _component_helper_;
1119
+ });
1120
+ }
1121
+ else {
1122
+ // not yet implemented
1123
+ }
1124
+ }
1125
+ }
1126
+ exports.Component = Component;
1127
+ (0, Package_1.Package)("com.qcobjects", [
1128
+ Component
1129
+ ]);
1130
+ (introspection_1._methods_)((0, ClassFactory_1.ClassFactory)("Component")).map((__c__) => {
1131
+ (introspection_1._protected_code_)(__c__);
1132
+ return __c__;
1133
+ });