@esfaenza/es-diagrams 12.2.13 → 13.1.3

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 (50) hide show
  1. package/esfaenza-es-diagrams.d.ts +1 -5
  2. package/esm2020/esfaenza-es-diagrams.mjs +5 -0
  3. package/esm2020/lib/components/es-diagram.component.mjs +519 -0
  4. package/esm2020/lib/esdiagram.module.mjs +33 -0
  5. package/esm2020/lib/extensions/ReactiveExtensions.mjs +36 -0
  6. package/{esm2015/lib/extensions/ResizeSensor.js → esm2020/lib/extensions/ResizeSensor.mjs} +0 -0
  7. package/{esm2015/lib/models/EsDiagramModuleConfig.js → esm2020/lib/models/EsDiagramModuleConfig.mjs} +0 -0
  8. package/{esm2015/lib/models/component/contextmenu/ContextMenuCommand.js → esm2020/lib/models/component/contextmenu/ContextMenuCommand.mjs} +0 -0
  9. package/{esm2015/lib/models/component/contextmenu/ContextMenuOptions.js → esm2020/lib/models/component/contextmenu/ContextMenuOptions.mjs} +0 -0
  10. package/{esm2015/lib/models/component/grouping/ExpandCollapseOptions.js → esm2020/lib/models/component/grouping/ExpandCollapseOptions.mjs} +0 -0
  11. package/{esm2015/lib/models/component/nodes/NodeHTMLTemplate.js → esm2020/lib/models/component/nodes/NodeHTMLTemplate.mjs} +0 -0
  12. package/{esm2015/lib/models/component/nodes/NodeTemplate.js → esm2020/lib/models/component/nodes/NodeTemplate.mjs} +0 -0
  13. package/{esm2015/lib/models/component/nodes/ZoomLevelBasedTemplate.js → esm2020/lib/models/component/nodes/ZoomLevelBasedTemplate.mjs} +0 -0
  14. package/{esm2015/lib/models/layouts/BreadthFirstLayoutOptionsImpl.js → esm2020/lib/models/layouts/BreadthFirstLayoutOptionsImpl.mjs} +0 -0
  15. package/{esm2015/lib/models/layouts/CircleLayoutOptionsImpl.js → esm2020/lib/models/layouts/CircleLayoutOptionsImpl.mjs} +0 -0
  16. package/{esm2015/lib/models/layouts/ConcentricLayoutOptionsImpl.js → esm2020/lib/models/layouts/ConcentricLayoutOptionsImpl.mjs} +0 -0
  17. package/{esm2015/lib/models/layouts/CoseLayoutOptionsImpl.js → esm2020/lib/models/layouts/CoseLayoutOptionsImpl.mjs} +0 -0
  18. package/{esm2015/lib/models/layouts/DagreLayoutOptionsImpl.js → esm2020/lib/models/layouts/DagreLayoutOptionsImpl.mjs} +0 -0
  19. package/{esm2015/lib/models/layouts/GridLayoutOptionsImpl.js → esm2020/lib/models/layouts/GridLayoutOptionsImpl.mjs} +0 -0
  20. package/{esm2015/lib/models/layouts/NullLayoutOptionsImpl.js → esm2020/lib/models/layouts/NullLayoutOptionsImpl.mjs} +0 -0
  21. package/{esm2015/lib/models/layouts/PresetLayoutOptionsImpl.js → esm2020/lib/models/layouts/PresetLayoutOptionsImpl.mjs} +0 -0
  22. package/{esm2015/lib/models/layouts/RandomLayoutOptionsImpl.js → esm2020/lib/models/layouts/RandomLayoutOptionsImpl.mjs} +0 -0
  23. package/{esm2015/lib/models/layouts/base/AnimateLayoutOptionsImpl.js → esm2020/lib/models/layouts/base/AnimateLayoutOptionsImpl.mjs} +0 -0
  24. package/{esm2015/lib/models/layouts/base/BaseLayoutOptionsImpl.js → esm2020/lib/models/layouts/base/BaseLayoutOptionsImpl.mjs} +0 -0
  25. package/{esm2015/lib/models/layouts/base/ShapedLayoutOptionsImpl.js → esm2020/lib/models/layouts/base/ShapedLayoutOptionsImpl.mjs} +0 -0
  26. package/esm2020/lib/services/es-diagram.dispatcher.mjs +89 -0
  27. package/{esm2015/lib/services/es-diagram.loc.js → esm2020/lib/services/es-diagram.loc.mjs} +0 -0
  28. package/esm2020/lib/services/es-diagram.service.mjs +112 -0
  29. package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
  30. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  31. package/fesm2015/{esfaenza-es-diagrams.js → esfaenza-es-diagrams.mjs} +180 -136
  32. package/fesm2015/esfaenza-es-diagrams.mjs.map +1 -0
  33. package/fesm2020/esfaenza-es-diagrams.mjs +1391 -0
  34. package/fesm2020/esfaenza-es-diagrams.mjs.map +1 -0
  35. package/lib/components/es-diagram.component.d.ts +3 -0
  36. package/lib/esdiagram.module.d.ts +7 -0
  37. package/lib/extensions/ReactiveExtensions.d.ts +3 -0
  38. package/lib/services/es-diagram.dispatcher.d.ts +3 -0
  39. package/lib/services/es-diagram.service.d.ts +3 -0
  40. package/package.json +21 -9
  41. package/bundles/esfaenza-es-diagrams.umd.js +0 -1856
  42. package/bundles/esfaenza-es-diagrams.umd.js.map +0 -1
  43. package/esfaenza-es-diagrams.metadata.json +0 -1
  44. package/esm2015/esfaenza-es-diagrams.js +0 -10
  45. package/esm2015/lib/components/es-diagram.component.js +0 -503
  46. package/esm2015/lib/esdiagram.module.js +0 -28
  47. package/esm2015/lib/extensions/ReactiveExtensions.js +0 -34
  48. package/esm2015/lib/services/es-diagram.dispatcher.js +0 -86
  49. package/esm2015/lib/services/es-diagram.service.js +0 -106
  50. package/fesm2015/esfaenza-es-diagrams.js.map +0 -1
@@ -0,0 +1,33 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { EsDiagramComponent } from './components/es-diagram.component';
3
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { CommonModule } from '@angular/common';
5
+ import { EsDiagramService } from './services/es-diagram.service';
6
+ import { EsDiagramDispatcher } from './services/es-diagram.dispatcher';
7
+ import { DIA_LOCALE, DIA_DEBUG_MODE } from './tokens';
8
+ import * as i0 from "@angular/core";
9
+ export class EsDiagramModule {
10
+ static forRoot(config) {
11
+ return {
12
+ ngModule: EsDiagramModule,
13
+ providers: [
14
+ EsDiagramService,
15
+ EsDiagramDispatcher,
16
+ { provide: DIA_LOCALE, useValue: config?.locale || 'it-IT' },
17
+ { provide: DIA_DEBUG_MODE, useValue: config?.debugMode || false },
18
+ ]
19
+ };
20
+ }
21
+ }
22
+ EsDiagramModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: EsDiagramModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23
+ EsDiagramModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: EsDiagramModule, declarations: [EsDiagramComponent], imports: [CommonModule, FormsModule, ReactiveFormsModule, CommonModule], exports: [EsDiagramComponent] });
24
+ EsDiagramModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: EsDiagramModule, imports: [[CommonModule, FormsModule, ReactiveFormsModule, CommonModule]] });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: EsDiagramModule, decorators: [{
26
+ type: NgModule,
27
+ args: [{
28
+ declarations: [EsDiagramComponent],
29
+ imports: [CommonModule, FormsModule, ReactiveFormsModule, CommonModule],
30
+ exports: [EsDiagramComponent]
31
+ }]
32
+ }] });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNkaWFncmFtLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLWRpYWdyYW1zL3NyYy9saWIvZXNkaWFncmFtLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUV0RSxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDOztBQU90RCxNQUFNLE9BQU8sZUFBZTtJQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQThCO1FBQzNDLE9BQU87WUFDTCxRQUFRLEVBQUUsZUFBZTtZQUN6QixTQUFTLEVBQUU7Z0JBQ1QsZ0JBQWdCO2dCQUNoQixtQkFBbUI7Z0JBQ25CLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQzVELEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsSUFBSSxLQUFLLEVBQUU7YUFDbEU7U0FDRixDQUFDO0lBQ0osQ0FBQzs7NEdBWFUsZUFBZTs2R0FBZixlQUFlLGlCQUpWLGtCQUFrQixhQUN2QixZQUFZLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFlBQVksYUFDNUQsa0JBQWtCOzZHQUVsQixlQUFlLFlBSGpCLENBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLENBQUU7MkZBRzlELGVBQWU7a0JBTDNCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUUsa0JBQWtCLENBQUU7b0JBQ3BDLE9BQU8sRUFBRSxDQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxDQUFFO29CQUN6RSxPQUFPLEVBQUUsQ0FBRSxrQkFBa0IsQ0FBRTtpQkFDaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBFc0RpYWdyYW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZXMtZGlhZ3JhbS5jb21wb25lbnQnXG5cbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQgeyBFc0RpYWdyYW1TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9lcy1kaWFncmFtLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXNEaWFncmFtRGlzcGF0Y2hlciB9IGZyb20gJy4vc2VydmljZXMvZXMtZGlhZ3JhbS5kaXNwYXRjaGVyJztcbmltcG9ydCB7IEVzRGlhZ3JhbU1vZHVsZUNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL0VzRGlhZ3JhbU1vZHVsZUNvbmZpZyc7XG5cbmltcG9ydCB7IERJQV9MT0NBTEUsIERJQV9ERUJVR19NT0RFIH0gZnJvbSAnLi90b2tlbnMnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFsgRXNEaWFncmFtQ29tcG9uZW50IF0sXG4gIGltcG9ydHM6IFsgQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgQ29tbW9uTW9kdWxlIF0sXG4gIGV4cG9ydHM6IFsgRXNEaWFncmFtQ29tcG9uZW50IF1cbn0pXG5leHBvcnQgY2xhc3MgRXNEaWFncmFtTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoY29uZmlnPzogRXNEaWFncmFtTW9kdWxlQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxFc0RpYWdyYW1Nb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEVzRGlhZ3JhbU1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICBFc0RpYWdyYW1TZXJ2aWNlLFxuICAgICAgICBFc0RpYWdyYW1EaXNwYXRjaGVyLFxuICAgICAgICB7IHByb3ZpZGU6IERJQV9MT0NBTEUsIHVzZVZhbHVlOiBjb25maWc/LmxvY2FsZSB8fCAnaXQtSVQnIH0sXG4gICAgICAgIHsgcHJvdmlkZTogRElBX0RFQlVHX01PREUsIHVzZVZhbHVlOiBjb25maWc/LmRlYnVnTW9kZSB8fCBmYWxzZSB9LFxuICAgICAgXVxuICAgIH07XG4gIH1cbn0iXX0=
@@ -0,0 +1,36 @@
1
+ import { Injectable } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Classe che fornisce metodi reattivi di estensione. Per ora implementato solo uno pseudo-throttle
5
+ */
6
+ export class ReactiveExtensions {
7
+ constructor() {
8
+ /**
9
+ * Cache di tutti i timer in esecuzione
10
+ */
11
+ this.executionTimers = {};
12
+ }
13
+ /**
14
+ * Esecuzione deleyata di una funzione. Se viene richiamata nuovamente prima di venire eseguita dopo il delay, il delay viene resettato
15
+ *
16
+ * @param {string} id Id per aiutare il servizio a distinguere funzioni con nome uguale chiamate da componenti diversi
17
+ * @param {Function} func Funzione da chiamare al termine del throttle
18
+ * @param {number} throttleTime Tempo di throttling in millisecondi
19
+ */
20
+ throttle(id, func, throttleTime = 0) {
21
+ let key = func.name + "_" + id;
22
+ //Se ho la funzione che vuole eseguire ripulisco quel timeout
23
+ if (this.executionTimers[key])
24
+ clearTimeout(this.executionTimers[key]);
25
+ //Ricreo il timeout per eseguire quella funzione dopo throttleTime millisecondi
26
+ var executionTimer = setTimeout(() => { func(); this.executionTimers[key] = null; }, throttleTime);
27
+ this.executionTimers[key] = executionTimer;
28
+ }
29
+ }
30
+ ReactiveExtensions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ReactiveExtensions, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
31
+ ReactiveExtensions.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ReactiveExtensions, providedIn: "root" });
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ReactiveExtensions, decorators: [{
33
+ type: Injectable,
34
+ args: [{ providedIn: "root" }]
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVhY3RpdmVFeHRlbnNpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtZGlhZ3JhbXMvc3JjL2xpYi9leHRlbnNpb25zL1JlYWN0aXZlRXh0ZW5zaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQzs7R0FFRztBQUVILE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFHSTs7V0FFRztRQUNLLG9CQUFlLEdBQTZCLEVBQUUsQ0FBQztLQW9CMUQ7SUFsQkc7Ozs7OztPQU1HO0lBQ0ksUUFBUSxDQUFDLEVBQVUsRUFBRSxJQUFjLEVBQUUsZUFBdUIsQ0FBQztRQUNoRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFFL0IsNkRBQTZEO1FBQzdELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUM7WUFDekIsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU1QywrRUFBK0U7UUFDL0UsSUFBSSxjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbkcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUM7SUFDL0MsQ0FBQzs7K0dBeEJRLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBREwsTUFBTTsyRkFDbkIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzZSBjaGUgZm9ybmlzY2UgbWV0b2RpIHJlYXR0aXZpIGRpIGVzdGVuc2lvbmUuIFBlciBvcmEgaW1wbGVtZW50YXRvIHNvbG8gdW5vIHBzZXVkby10aHJvdHRsZVxyXG4gKi9cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxyXG5leHBvcnQgY2xhc3MgUmVhY3RpdmVFeHRlbnNpb25zIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhY2hlIGRpIHR1dHRpIGkgdGltZXIgaW4gZXNlY3V6aW9uZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGV4ZWN1dGlvblRpbWVyczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFc2VjdXppb25lIGRlbGV5YXRhIGRpIHVuYSBmdW56aW9uZS4gU2UgdmllbmUgcmljaGlhbWF0YSBudW92YW1lbnRlIHByaW1hIGRpIHZlbmlyZSBlc2VndWl0YSBkb3BvIGlsIGRlbGF5LCBpbCBkZWxheSB2aWVuZSByZXNldHRhdG9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElkIHBlciBhaXV0YXJlIGlsIHNlcnZpemlvIGEgZGlzdGluZ3VlcmUgZnVuemlvbmkgY29uIG5vbWUgdWd1YWxlIGNoaWFtYXRlIGRhIGNvbXBvbmVudGkgZGl2ZXJzaVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBGdW56aW9uZSBkYSBjaGlhbWFyZSBhbCB0ZXJtaW5lIGRlbCB0aHJvdHRsZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRocm90dGxlVGltZSBUZW1wbyBkaSB0aHJvdHRsaW5nIGluIG1pbGxpc2Vjb25kaVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdGhyb3R0bGUoaWQ6IHN0cmluZywgZnVuYzogRnVuY3Rpb24sIHRocm90dGxlVGltZTogbnVtYmVyID0gMCkge1xyXG4gICAgICAgIGxldCBrZXkgPSBmdW5jLm5hbWUgKyBcIl9cIiArIGlkO1xyXG5cclxuICAgICAgICAvL1NlIGhvIGxhIGZ1bnppb25lIGNoZSB2dW9sZSBlc2VndWlyZSByaXB1bGlzY28gcXVlbCB0aW1lb3V0XHJcbiAgICAgICAgaWYgKHRoaXMuZXhlY3V0aW9uVGltZXJzW2tleV0pXHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmV4ZWN1dGlvblRpbWVyc1trZXldKTtcclxuXHJcbiAgICAgICAgLy9SaWNyZW8gaWwgdGltZW91dCBwZXIgZXNlZ3VpcmUgcXVlbGxhIGZ1bnppb25lIGRvcG8gdGhyb3R0bGVUaW1lIG1pbGxpc2Vjb25kaVxyXG4gICAgICAgIHZhciBleGVjdXRpb25UaW1lciA9IHNldFRpbWVvdXQoKCkgPT4geyBmdW5jKCk7IHRoaXMuZXhlY3V0aW9uVGltZXJzW2tleV0gPSBudWxsOyB9LCB0aHJvdHRsZVRpbWUpO1xyXG4gICAgICAgIHRoaXMuZXhlY3V0aW9uVGltZXJzW2tleV0gPSBleGVjdXRpb25UaW1lcjtcclxuICAgIH1cclxufSJdfQ==
@@ -0,0 +1,89 @@
1
+ import { Injectable, Inject } from '@angular/core';
2
+ import { DIA_DEBUG_MODE } from '../tokens';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Classe che si occupa del dispatch delle operazioni di rendering degli oggetti utilizzando una coda
6
+ */
7
+ export class EsDiagramDispatcher {
8
+ /**
9
+ * @ignore
10
+ */
11
+ constructor(logs) {
12
+ this.logs = logs;
13
+ /**
14
+ * Coda di inizializzazioni ancora da eseguire. Quando questa è vuota significa che nessuno sta creando oggetti
15
+ */
16
+ this.Initializations = [];
17
+ /**
18
+ * Lista degli oggetti inizializzati e attivi in un dato momento (viene registrata la proprietà **name**). Non è possibile registrare due grafici con lo stesso identificativo
19
+ */
20
+ this.Initialized = [];
21
+ }
22
+ /**
23
+ * Registra un oggetto da visualizzare insieme alla propria funzione di creazione. Quest'ultima sarà differita fino a che tutti gli oggetti
24
+ * precedentemente registati non hanno finito la fase di inizializzazione
25
+ *
26
+ * @param {string} name Identificativo dell'oggetto da registrare
27
+ * @param {Function} creationFunction Funzione che fisicamente dovrà occuparsi della creazione dell'oggetto
28
+ */
29
+ register(name, creationFunction) {
30
+ if (this.Initialized.indexOf(name) != -1)
31
+ throw "Attempting to register a duplicate object '" + name + "'. Make sure the 'name' properties of your diagram are univoque";
32
+ this.log("DISPATCHER: Registering diagram creation function execution for " + name);
33
+ this.Initializations.push({ name: name, function: creationFunction });
34
+ if (this.Initializations.length == 1) {
35
+ this.log("DISPATCHER: Initial drain started");
36
+ this.drainInitQueues();
37
+ }
38
+ }
39
+ /**
40
+ * Deregistra un oggetto presente. Chiamata generalmente al dispose dell'oggetto in questione quando non dev'essere più mostrato nella pagina corrente
41
+ *
42
+ * @param {string} name Identificativo dell'oggetto da deregistrare
43
+ */
44
+ deregister(name) {
45
+ let index = this.Initialized.indexOf(name);
46
+ if (index == -1) {
47
+ //Questo succede quando si cerca di distruggere l'oggetto mentre sta venendo graficato
48
+ this.log("DISPATCHER: Registration missing for object " + name + " it was probably destroyed during load");
49
+ return;
50
+ }
51
+ this.log("DISPATCHER: Object deregistered " + name);
52
+ this.Initialized.splice(index, 1);
53
+ }
54
+ /**
55
+ * Metodo che esegue in maniera sequenziale le funzioni di inizializzazione degli oggetti finché presenti
56
+ * in modo che nessun oggetto possa essere inizializzato contemporaneamente ad un altro
57
+ */
58
+ drainInitQueues() {
59
+ let toExecute = this.Initializations[0];
60
+ this.log("DISPATCHER: Executing initialization function for object " + toExecute.name);
61
+ toExecute.function().then(() => {
62
+ this.log("DISPATCHER: initialization for object " + toExecute.name + " is done");
63
+ this.Initialized.push(toExecute.name);
64
+ this.Initializations.splice(0, 1);
65
+ if (this.Initializations.length >= 1) {
66
+ this.log("DISPATCHER: Found queued initializations. Continuing");
67
+ this.drainInitQueues();
68
+ }
69
+ else
70
+ this.log("DISPATCHER: queue is over, nothing more to do");
71
+ });
72
+ }
73
+ /**
74
+ * @ignore
75
+ */
76
+ log(text) {
77
+ if (this.logs)
78
+ console.log("@esfaenza/es-diagrams: " + text);
79
+ }
80
+ }
81
+ EsDiagramDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: EsDiagramDispatcher, deps: [{ token: DIA_DEBUG_MODE }], target: i0.ɵɵFactoryTarget.Injectable });
82
+ EsDiagramDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: EsDiagramDispatcher });
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: EsDiagramDispatcher, decorators: [{
84
+ type: Injectable
85
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
86
+ type: Inject,
87
+ args: [DIA_DEBUG_MODE]
88
+ }] }]; } });
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtZGlhZ3JhbS5kaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtZGlhZ3JhbXMvc3JjL2xpYi9zZXJ2aWNlcy9lcy1kaWFncmFtLmRpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFFM0M7O0dBRUc7QUFFSCxNQUFNLE9BQU8sbUJBQW1CO0lBWTVCOztPQUVHO0lBQ0gsWUFBNEMsSUFBYTtRQUFiLFNBQUksR0FBSixJQUFJLENBQVM7UUFiekQ7O1dBRUc7UUFDSyxvQkFBZSxHQUFzQyxFQUFFLENBQUM7UUFFaEU7O1dBRUc7UUFDSyxnQkFBVyxHQUFhLEVBQUUsQ0FBQztJQUswQixDQUFDO0lBRTlEOzs7Ozs7T0FNRztJQUNJLFFBQVEsQ0FBQyxJQUFZLEVBQUUsZ0JBQTBCO1FBQ3BELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sNkNBQTZDLEdBQUcsSUFBSSxHQUFHLGlFQUFpRSxDQUFDO1FBRW5JLElBQUksQ0FBQyxHQUFHLENBQUMsa0VBQWtFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUMxQjtJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksVUFBVSxDQUFDLElBQVk7UUFDMUIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQ2Y7WUFDSSxzRkFBc0Y7WUFDdEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyw4Q0FBOEMsR0FBRyxJQUFJLEdBQUcsd0NBQXdDLENBQUMsQ0FBQztZQUMzRyxPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZUFBZTtRQUNuQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsMkRBQTJELEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZGLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsd0NBQXdDLEdBQUcsU0FBUyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUMxQjs7Z0JBRUcsSUFBSSxDQUFDLEdBQUcsQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0ssR0FBRyxDQUFDLElBQVk7UUFDcEIsSUFBSSxJQUFJLENBQUMsSUFBSTtZQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQzs7Z0hBakZRLG1CQUFtQixrQkFlUixjQUFjO29IQWZ6QixtQkFBbUI7MkZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVTs7MEJBZ0JNLE1BQU07MkJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgRElBX0RFQlVHX01PREUgfSBmcm9tICcuLi90b2tlbnMnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzZSBjaGUgc2kgb2NjdXBhIGRlbCBkaXNwYXRjaCBkZWxsZSBvcGVyYXppb25pIGRpIHJlbmRlcmluZyBkZWdsaSBvZ2dldHRpIHV0aWxpenphbmRvIHVuYSBjb2RhIFxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRXNEaWFncmFtRGlzcGF0Y2hlciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb2RhIGRpIGluaXppYWxpenphemlvbmkgYW5jb3JhIGRhIGVzZWd1aXJlLiBRdWFuZG8gcXVlc3RhIMOoIHZ1b3RhIHNpZ25pZmljYSBjaGUgbmVzc3VubyBzdGEgY3JlYW5kbyBvZ2dldHRpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgSW5pdGlhbGl6YXRpb25zOiB7IG5hbWU6IHN0cmluZywgZnVuY3Rpb246IGFueSB9W10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpc3RhIGRlZ2xpIG9nZ2V0dGkgaW5pemlhbGl6emF0aSBlIGF0dGl2aSBpbiB1biBkYXRvIG1vbWVudG8gKHZpZW5lIHJlZ2lzdHJhdGEgbGEgcHJvcHJpZXTDoCAqKm5hbWUqKikuIE5vbiDDqCBwb3NzaWJpbGUgcmVnaXN0cmFyZSBkdWUgZ3JhZmljaSBjb24gbG8gc3Rlc3NvIGlkZW50aWZpY2F0aXZvXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgSW5pdGlhbGl6ZWQ6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoRElBX0RFQlVHX01PREUpIHByaXZhdGUgbG9nczogYm9vbGVhbikgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RyYSB1biBvZ2dldHRvIGRhIHZpc3VhbGl6emFyZSBpbnNpZW1lIGFsbGEgcHJvcHJpYSBmdW56aW9uZSBkaSBjcmVhemlvbmUuIFF1ZXN0J3VsdGltYSBzYXLDoCBkaWZmZXJpdGEgZmlubyBhIGNoZSB0dXR0aSBnbGkgb2dnZXR0aVxyXG4gICAgICogcHJlY2VkZW50ZW1lbnRlIHJlZ2lzdGF0aSBub24gaGFubm8gZmluaXRvIGxhIGZhc2UgZGkgaW5pemlhbGl6emF6aW9uZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBJZGVudGlmaWNhdGl2byBkZWxsJ29nZ2V0dG8gZGEgcmVnaXN0cmFyZVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3JlYXRpb25GdW5jdGlvbiBGdW56aW9uZSBjaGUgZmlzaWNhbWVudGUgZG92csOgIG9jY3VwYXJzaSBkZWxsYSBjcmVhemlvbmUgZGVsbCdvZ2dldHRvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGNyZWF0aW9uRnVuY3Rpb246IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuSW5pdGlhbGl6ZWQuaW5kZXhPZihuYW1lKSAhPSAtMSlcclxuICAgICAgICAgICAgdGhyb3cgXCJBdHRlbXB0aW5nIHRvIHJlZ2lzdGVyIGEgZHVwbGljYXRlIG9iamVjdCAnXCIgKyBuYW1lICsgXCInLiBNYWtlIHN1cmUgdGhlICduYW1lJyBwcm9wZXJ0aWVzIG9mIHlvdXIgZGlhZ3JhbSBhcmUgdW5pdm9xdWVcIjtcclxuXHJcbiAgICAgICAgdGhpcy5sb2coXCJESVNQQVRDSEVSOiBSZWdpc3RlcmluZyBkaWFncmFtIGNyZWF0aW9uIGZ1bmN0aW9uIGV4ZWN1dGlvbiBmb3IgXCIgKyBuYW1lKTtcclxuICAgICAgICB0aGlzLkluaXRpYWxpemF0aW9ucy5wdXNoKHsgbmFtZTogbmFtZSwgZnVuY3Rpb246IGNyZWF0aW9uRnVuY3Rpb24gfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuSW5pdGlhbGl6YXRpb25zLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKFwiRElTUEFUQ0hFUjogSW5pdGlhbCBkcmFpbiBzdGFydGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmRyYWluSW5pdFF1ZXVlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERlcmVnaXN0cmEgdW4gb2dnZXR0byBwcmVzZW50ZS4gQ2hpYW1hdGEgZ2VuZXJhbG1lbnRlIGFsIGRpc3Bvc2UgZGVsbCdvZ2dldHRvIGluIHF1ZXN0aW9uZSBxdWFuZG8gbm9uIGRldidlc3NlcmUgcGnDuSBtb3N0cmF0byBuZWxsYSBwYWdpbmEgY29ycmVudGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgSWRlbnRpZmljYXRpdm8gZGVsbCdvZ2dldHRvIGRhIGRlcmVnaXN0cmFyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGVyZWdpc3RlcihuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLkluaXRpYWxpemVkLmluZGV4T2YobmFtZSk7XHJcbiAgICAgICAgaWYgKGluZGV4ID09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy9RdWVzdG8gc3VjY2VkZSBxdWFuZG8gc2kgY2VyY2EgZGkgZGlzdHJ1Z2dlcmUgbCdvZ2dldHRvIG1lbnRyZSBzdGEgdmVuZW5kbyBncmFmaWNhdG9cclxuICAgICAgICAgICAgdGhpcy5sb2coXCJESVNQQVRDSEVSOiBSZWdpc3RyYXRpb24gbWlzc2luZyBmb3Igb2JqZWN0IFwiICsgbmFtZSArIFwiIGl0IHdhcyBwcm9iYWJseSBkZXN0cm95ZWQgZHVyaW5nIGxvYWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9nKFwiRElTUEFUQ0hFUjogT2JqZWN0IGRlcmVnaXN0ZXJlZCBcIiArIG5hbWUpO1xyXG4gICAgICAgIHRoaXMuSW5pdGlhbGl6ZWQuc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBlc2VndWUgaW4gbWFuaWVyYSBzZXF1ZW56aWFsZSBsZSBmdW56aW9uaSBkaSBpbml6aWFsaXp6YXppb25lIGRlZ2xpIG9nZ2V0dGkgZmluY2jDqSBwcmVzZW50aSBcclxuICAgICAqIGluIG1vZG8gY2hlIG5lc3N1biBvZ2dldHRvIHBvc3NhIGVzc2VyZSBpbml6aWFsaXp6YXRvIGNvbnRlbXBvcmFuZWFtZW50ZSBhZCB1biBhbHRyb1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGRyYWluSW5pdFF1ZXVlcygpIHtcclxuICAgICAgICBsZXQgdG9FeGVjdXRlID0gdGhpcy5Jbml0aWFsaXphdGlvbnNbMF07XHJcbiAgICAgICAgdGhpcy5sb2coXCJESVNQQVRDSEVSOiBFeGVjdXRpbmcgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIG9iamVjdCBcIiArIHRvRXhlY3V0ZS5uYW1lKTtcclxuXHJcbiAgICAgICAgdG9FeGVjdXRlLmZ1bmN0aW9uKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKFwiRElTUEFUQ0hFUjogaW5pdGlhbGl6YXRpb24gZm9yIG9iamVjdCBcIiArIHRvRXhlY3V0ZS5uYW1lICsgXCIgaXMgZG9uZVwiKTtcclxuICAgICAgICAgICAgdGhpcy5Jbml0aWFsaXplZC5wdXNoKHRvRXhlY3V0ZS5uYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5Jbml0aWFsaXphdGlvbnMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5Jbml0aWFsaXphdGlvbnMubGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nKFwiRElTUEFUQ0hFUjogRm91bmQgcXVldWVkIGluaXRpYWxpemF0aW9ucy4gQ29udGludWluZ1wiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJhaW5Jbml0UXVldWVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2coXCJESVNQQVRDSEVSOiBxdWV1ZSBpcyBvdmVyLCBub3RoaW5nIG1vcmUgdG8gZG9cIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbG9nKHRleHQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmxvZ3MpXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQGVzZmFlbnphL2VzLWRpYWdyYW1zOiBcIiArIHRleHQpO1xyXG4gICAgfVxyXG59Il19
@@ -0,0 +1,112 @@
1
+ import { Inject, Injectable, Optional } from "@angular/core";
2
+ import { DIA_DEBUG_MODE, DIA_LOCALE } from "../tokens";
3
+ import { Loc } from "../services/es-diagram.loc";
4
+ // Questo modulo esporta sia un namespace che si chiama "cytoscape" sia la funzione "cytoscape" (costruttore)
5
+ // Con questi 2 salti si riescono a non avere problemi di typings: https://github.com/jvandemo/generator-angular2-library/issues/221#issuecomment-355945207
6
+ import * as cy_ from 'cytoscape';
7
+ import * as i0 from "@angular/core";
8
+ /** @ignore */ const cytoscape = cy_;
9
+ /**
10
+ * Loader dei moduli di Cytoscape. Utilizza una cache per tenerseli in memoria a livello di applicazione
11
+ * in modo da non dover ricaricare nulla dopo avere usato un modulo almeno una volta
12
+ */
13
+ export class EsDiagramService {
14
+ /**
15
+ * Costruttore
16
+ *
17
+ * @ignore
18
+ */
19
+ constructor(DIA_LOCALE, DIA_DEBUG_MODE) {
20
+ this.DIA_LOCALE = DIA_LOCALE;
21
+ this.DIA_DEBUG_MODE = DIA_DEBUG_MODE;
22
+ /**
23
+ * Cache dei moduli caricati
24
+ */
25
+ this.modulesCache = {};
26
+ }
27
+ /**
28
+ * Permette di importare, se serve un dato tema o localizzazione
29
+ *
30
+ * @param {'cytoscape-expand-collapse' | 'cytoscape-cxtmenu' | 'cytoscape-html-node' | 'cytoscape-dagre'} moduleId Nome del modulo di Cytoscape da importare (dev'essere il nome della cartella in node_modules)
31
+ *
32
+ * @returns {Promise<void | cytoscape.Ext>} Funzione di estensione per Cytoscape presa dal modulo richiesto
33
+ */
34
+ async importIfNeeded(moduleId) {
35
+ // Ognuno esporta il modulo un po' come cazzo gli pare quindi ocio.
36
+ // Notare che tutti i "moudle" dopo lo then sono castati ad <any> e che l'oggetto recuperato ogni tanto è "default", altre volte è il "register", altre è l'"ext", eccetera...
37
+ if (!this.modulesCache[moduleId]) {
38
+ this.log("I", this.loc("Module not available. Loading it now") + ": " + moduleId, false);
39
+ switch (moduleId) {
40
+ case "cytoscape-cxtmenu": return import("cytoscape-cxtmenu").then((module) => this.modulesCache[moduleId] = module.default).catch(err => this.handleError(moduleId, err));
41
+ case "cytoscape-expand-collapse": return import("cytoscape-expand-collapse").then((module) => this.modulesCache[moduleId] = module.default).catch(err => this.handleError(moduleId, err));
42
+ case "cytoscape-html-node": return import("@esfaenza/cytoscape-html-node").then((module) => this.modulesCache[moduleId] = module.register).catch(err => this.handleError(moduleId, err));
43
+ case "cytoscape-dagre":
44
+ await import("dagre").catch(err => this.handleError("dagre", err));
45
+ return import("cytoscape-dagre").then((module) => this.modulesCache[moduleId] = module.default).catch(err => this.handleError(moduleId, err));
46
+ }
47
+ }
48
+ else {
49
+ // I moduli non devono mai essere ricaricati nel globale, quindi invece che restituire la copia della cache restituisco vuoto
50
+ this.log("I", this.loc("Module already loaded") + ": " + moduleId, false);
51
+ return new Promise((resolve) => { resolve(null); });
52
+ }
53
+ }
54
+ /**
55
+ * Gestione degli errori di caricamento dei moduli qualora qualcuno utilizzasse un modulo non installato
56
+ *
57
+ * @param {string} moduleId Nome del modulo che si è cercato di caricare
58
+ * @param {any} err Errore restituito dalla promise di caricamento
59
+ */
60
+ handleError(moduleId, err) {
61
+ this.log("E", this.loc("Module cannot be loaded") + ": " + moduleId + " - " + err, false);
62
+ }
63
+ /**
64
+ * Scrittore di log a console. Attivo solo quando la libreria è in modalità di Debug
65
+ *
66
+ * @param {'E' | 'I' | 'W'} severity Tipo di messaggio (Errore, Info, Warning)
67
+ * @param {string} text Testo da tradurre
68
+ * @param {boolean} requiresTranslation Indica se **text** è una frase già tradotta o se è da tradurre
69
+ */
70
+ log(severity, text, requiresTranslation = true) {
71
+ if (!this.DIA_DEBUG_MODE)
72
+ return;
73
+ var message = "@esfaenza/diagrams: " + (requiresTranslation ? this.loc(text) : text);
74
+ switch (severity) {
75
+ case 'E':
76
+ console.error(message);
77
+ break;
78
+ case 'I':
79
+ console.info(message);
80
+ break;
81
+ case 'W':
82
+ console.warn(message);
83
+ break;
84
+ }
85
+ }
86
+ /**
87
+ * Metodo di localizzazione dei messaggi
88
+ *
89
+ * @param {string} text Messaggio da tradurre
90
+ *
91
+ * @returns {string} Messaggio tradotto
92
+ */
93
+ loc(text) {
94
+ return Loc[text][this.DIA_LOCALE];
95
+ }
96
+ }
97
+ EsDiagramService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: EsDiagramService, deps: [{ token: DIA_LOCALE, optional: true }, { token: DIA_DEBUG_MODE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
98
+ EsDiagramService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: EsDiagramService });
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: EsDiagramService, decorators: [{
100
+ type: Injectable
101
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
102
+ type: Optional
103
+ }, {
104
+ type: Inject,
105
+ args: [DIA_LOCALE]
106
+ }] }, { type: undefined, decorators: [{
107
+ type: Optional
108
+ }, {
109
+ type: Inject,
110
+ args: [DIA_DEBUG_MODE]
111
+ }] }]; } });
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtZGlhZ3JhbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtZGlhZ3JhbXMvc3JjL2xpYi9zZXJ2aWNlcy9lcy1kaWFncmFtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVqRCw2R0FBNkc7QUFDN0csMkpBQTJKO0FBQzNKLE9BQU8sS0FBSyxHQUFHLE1BQU0sV0FBVyxDQUFDOztBQUNqQyxjQUFjLENBQUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBRXJDOzs7R0FHRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFPekI7Ozs7T0FJRztJQUNILFlBQW9ELFVBQWtCLEVBQThDLGNBQXNCO1FBQXRGLGVBQVUsR0FBVixVQUFVLENBQVE7UUFBOEMsbUJBQWMsR0FBZCxjQUFjLENBQVE7UUFWMUk7O1dBRUc7UUFDSyxpQkFBWSxHQUF1QyxFQUFFLENBQUM7SUFPZ0YsQ0FBQztJQUUvSTs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQXVHO1FBRS9ILG9FQUFvRTtRQUNwRSw4S0FBOEs7UUFDOUssSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsQ0FBQyxHQUFHLElBQUksR0FBRyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekYsUUFBUSxRQUFRLEVBQUU7Z0JBQ2QsS0FBSyxtQkFBbUIsQ0FBQyxDQUFDLE9BQU8sTUFB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SSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM1QixNQUFNO1lBQ1YsS0FBSyxHQUFHO2dCQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzVCLE1BQU07U0FDYjtJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxHQUFHLENBQUMsSUFBWTtRQUNuQixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEMsQ0FBQzs7NkdBckZRLGdCQUFnQixrQkFZTyxVQUFVLDZCQUFrRCxjQUFjO2lIQVpqRyxnQkFBZ0I7MkZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVTs7MEJBYU0sUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxVQUFVOzswQkFBK0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQgeyBESUFfREVCVUdfTU9ERSwgRElBX0xPQ0FMRSB9IGZyb20gXCIuLi90b2tlbnNcIjtcclxuaW1wb3J0IHsgTG9jIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2VzLWRpYWdyYW0ubG9jXCI7XHJcblxyXG4vLyBRdWVzdG8gbW9kdWxvIGVzcG9ydGEgc2lhIHVuIG5hbWVzcGFjZSBjaGUgc2kgY2hpYW1hIFwiY3l0b3NjYXBlXCIgc2lhIGxhIGZ1bnppb25lIFwiY3l0b3NjYXBlXCIgKGNvc3RydXR0b3JlKVxyXG4vLyBDb24gcXVlc3RpIDIgc2FsdGkgc2kgcmllc2Nvbm8gYSBub24gYXZlcmUgcHJvYmxlbWkgZGkgdHlwaW5nczogaHR0cHM6Ly9naXRodWIuY29tL2p2YW5kZW1vL2dlbmVyYXRvci1hbmd1bGFyMi1saWJyYXJ5L2lzc3Vlcy8yMjEjaXNzdWVjb21tZW50LTM1NTk0NTIwN1xyXG5pbXBvcnQgKiBhcyBjeV8gZnJvbSAnY3l0b3NjYXBlJztcclxuLyoqIEBpZ25vcmUgKi8gY29uc3QgY3l0b3NjYXBlID0gY3lfO1xyXG5cclxuLyoqXHJcbiAqIExvYWRlciBkZWkgbW9kdWxpIGRpIEN5dG9zY2FwZS4gVXRpbGl6emEgdW5hIGNhY2hlIHBlciB0ZW5lcnNlbGkgaW4gbWVtb3JpYSBhIGxpdmVsbG8gZGkgYXBwbGljYXppb25lIFxyXG4gKiBpbiBtb2RvIGRhIG5vbiBkb3ZlciByaWNhcmljYXJlIG51bGxhIGRvcG8gYXZlcmUgdXNhdG8gdW4gbW9kdWxvIGFsbWVubyB1bmEgdm9sdGFcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEVzRGlhZ3JhbVNlcnZpY2Uge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FjaGUgZGVpIG1vZHVsaSBjYXJpY2F0aVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG1vZHVsZXNDYWNoZTogeyBbaW5kZXg6IHN0cmluZ106IGN5dG9zY2FwZS5FeHQgfSA9IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29zdHJ1dHRvcmVcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KERJQV9MT0NBTEUpIHByaXZhdGUgRElBX0xPQ0FMRTogc3RyaW5nLCBAT3B0aW9uYWwoKSBASW5qZWN0KERJQV9ERUJVR19NT0RFKSBwcml2YXRlIERJQV9ERUJVR19NT0RFOiBzdHJpbmcpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVybWV0dGUgZGkgaW1wb3J0YXJlLCBzZSBzZXJ2ZSB1biBkYXRvIHRlbWEgbyBsb2NhbGl6emF6aW9uZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0geydjeXRvc2NhcGUtZXhwYW5kLWNvbGxhcHNlJyB8ICdjeXRvc2NhcGUtY3h0bWVudScgfCAnY3l0b3NjYXBlLWh0bWwtbm9kZScgfCAnY3l0b3NjYXBlLWRhZ3JlJ30gbW9kdWxlSWQgTm9tZSBkZWwgbW9kdWxvIGRpIEN5dG9zY2FwZSBkYSBpbXBvcnRhcmUgKGRldidlc3NlcmUgaWwgbm9tZSBkZWxsYSBjYXJ0ZWxsYSBpbiBub2RlX21vZHVsZXMpXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQgfCBjeXRvc2NhcGUuRXh0Pn0gRnVuemlvbmUgZGkgZXN0ZW5zaW9uZSBwZXIgQ3l0b3NjYXBlIHByZXNhIGRhbCBtb2R1bG8gcmljaGllc3RvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBpbXBvcnRJZk5lZWRlZChtb2R1bGVJZDogJ2N5dG9zY2FwZS1leHBhbmQtY29sbGFwc2UnIHwgJ2N5dG9zY2FwZS1jeHRtZW51JyB8ICdjeXRvc2NhcGUtaHRtbC1ub2RlJyB8ICdjeXRvc2NhcGUtZGFncmUnKTogUHJvbWlzZTx2b2lkIHwgY3l0b3NjYXBlLkV4dD4ge1xyXG5cclxuICAgICAgICAvLyBPZ251bm8gZXNwb3J0YSBpbCBtb2R1bG8gdW4gcG8nIGNvbWUgY2F6em8gZ2xpIHBhcmUgcXVpbmRpIG9jaW8uIFxyXG4gICAgICAgIC8vIE5vdGFyZSBjaGUgdHV0dGkgaSBcIm1vdWRsZVwiIGRvcG8gbG8gdGhlbiBzb25vIGNhc3RhdGkgYWQgPGFueT4gZSBjaGUgbCdvZ2dldHRvIHJlY3VwZXJhdG8gb2duaSB0YW50byDDqCBcImRlZmF1bHRcIiwgYWx0cmUgdm9sdGUgw6ggaWwgXCJyZWdpc3RlclwiLCBhbHRyZSDDqCBsJ1wiZXh0XCIsIGVjY2V0ZXJhLi4uXHJcbiAgICAgICAgaWYgKCF0aGlzLm1vZHVsZXNDYWNoZVttb2R1bGVJZF0pIHtcclxuICAgICAgICAgICAgdGhpcy5sb2coXCJJXCIsIHRoaXMubG9jKFwiTW9kdWxlIG5vdCBhdmFpbGFibGUuIExvYWRpbmcgaXQgbm93XCIpICsgXCI6IFwiICsgbW9kdWxlSWQsIGZhbHNlKTtcclxuICAgICAgICAgICAgc3dpdGNoIChtb2R1bGVJZCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImN5dG9zY2FwZS1jeHRtZW51XCI6IHJldHVybiBpbXBvcnQoXCJjeXRvc2NhcGUtY3h0bWVudVwiKS50aGVuKChtb2R1bGU6IGFueSkgPT4gdGhpcy5tb2R1bGVzQ2FjaGVbbW9kdWxlSWRdID0gbW9kdWxlLmRlZmF1bHQpLmNhdGNoKGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKG1vZHVsZUlkLCBlcnIpKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJjeXRvc2NhcGUtZXhwYW5kLWNvbGxhcHNlXCI6IHJldHVybiBpbXBvcnQoXCJjeXRvc2NhcGUtZXhwYW5kLWNvbGxhcHNlXCIpLnRoZW4oKG1vZHVsZTogYW55KSA9PiB0aGlzLm1vZHVsZXNDYWNoZVttb2R1bGVJZF0gPSBtb2R1bGUuZGVmYXVsdCkuY2F0Y2goZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IobW9kdWxlSWQsIGVycikpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImN5dG9zY2FwZS1odG1sLW5vZGVcIjogcmV0dXJuIGltcG9ydChcIkBlc2ZhZW56YS9jeXRvc2NhcGUtaHRtbC1ub2RlXCIpLnRoZW4oKG1vZHVsZTogYW55KSA9PiB0aGlzLm1vZHVsZXNDYWNoZVttb2R1bGVJZF0gPSBtb2R1bGUucmVnaXN0ZXIpLmNhdGNoKGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKG1vZHVsZUlkLCBlcnIpKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJjeXRvc2NhcGUtZGFncmVcIjpcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBpbXBvcnQoXCJkYWdyZVwiKS5jYXRjaChlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihcImRhZ3JlXCIsIGVycikpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbXBvcnQoXCJjeXRvc2NhcGUtZGFncmVcIikudGhlbigobW9kdWxlOiBhbnkpID0+IHRoaXMubW9kdWxlc0NhY2hlW21vZHVsZUlkXSA9IG1vZHVsZS5kZWZhdWx0KS5jYXRjaChlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihtb2R1bGVJZCwgZXJyKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEkgbW9kdWxpIG5vbiBkZXZvbm8gbWFpIGVzc2VyZSByaWNhcmljYXRpIG5lbCBnbG9iYWxlLCBxdWluZGkgaW52ZWNlIGNoZSByZXN0aXR1aXJlIGxhIGNvcGlhIGRlbGxhIGNhY2hlIHJlc3RpdHVpc2NvIHZ1b3RvXHJcbiAgICAgICAgICAgIHRoaXMubG9nKFwiSVwiLCB0aGlzLmxvYyhcIk1vZHVsZSBhbHJlYWR5IGxvYWRlZFwiKSArIFwiOiBcIiArIG1vZHVsZUlkLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4geyByZXNvbHZlKG51bGwpIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlc3Rpb25lIGRlZ2xpIGVycm9yaSBkaSBjYXJpY2FtZW50byBkZWkgbW9kdWxpIHF1YWxvcmEgcXVhbGN1bm8gdXRpbGl6emFzc2UgdW4gbW9kdWxvIG5vbiBpbnN0YWxsYXRvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVJZCBOb21lIGRlbCBtb2R1bG8gY2hlIHNpIMOoIGNlcmNhdG8gZGkgY2FyaWNhcmVcclxuICAgICAqIEBwYXJhbSB7YW55fSBlcnIgRXJyb3JlIHJlc3RpdHVpdG8gZGFsbGEgcHJvbWlzZSBkaSBjYXJpY2FtZW50b1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGhhbmRsZUVycm9yKG1vZHVsZUlkOiBzdHJpbmcsIGVycjogYW55KSB7XHJcbiAgICAgICAgdGhpcy5sb2coXCJFXCIsIHRoaXMubG9jKFwiTW9kdWxlIGNhbm5vdCBiZSBsb2FkZWRcIikgKyBcIjogXCIgKyBtb2R1bGVJZCArIFwiIC0gXCIgKyBlcnIsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjcml0dG9yZSBkaSBsb2cgYSBjb25zb2xlLiBBdHRpdm8gc29sbyBxdWFuZG8gbGEgbGlicmVyaWEgw6ggaW4gbW9kYWxpdMOgIGRpIERlYnVnXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7J0UnIHwgJ0knIHwgJ1cnfSBzZXZlcml0eSBUaXBvIGRpIG1lc3NhZ2dpbyAoRXJyb3JlLCBJbmZvLCBXYXJuaW5nKVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGVzdG8gZGEgdHJhZHVycmVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVxdWlyZXNUcmFuc2xhdGlvbiBJbmRpY2Egc2UgKip0ZXh0Kiogw6ggdW5hIGZyYXNlIGdpw6AgdHJhZG90dGEgbyBzZSDDqCBkYSB0cmFkdXJyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbG9nKHNldmVyaXR5OiAnRScgfCAnSScgfCAnVycsIHRleHQ6IHN0cmluZywgcmVxdWlyZXNUcmFuc2xhdGlvbjogYm9vbGVhbiA9IHRydWUpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLkRJQV9ERUJVR19NT0RFKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHZhciBtZXNzYWdlID0gXCJAZXNmYWVuemEvZGlhZ3JhbXM6IFwiICsgKHJlcXVpcmVzVHJhbnNsYXRpb24gPyB0aGlzLmxvYyh0ZXh0KSA6IHRleHQpO1xyXG4gICAgICAgIHN3aXRjaCAoc2V2ZXJpdHkpIHtcclxuICAgICAgICAgICAgY2FzZSAnRSc6IGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnSSc6IGNvbnNvbGUuaW5mbyhtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdXJzogY29uc29sZS53YXJuKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGRpIGxvY2FsaXp6YXppb25lIGRlaSBtZXNzYWdnaVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBNZXNzYWdnaW8gZGEgdHJhZHVycmVcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gTWVzc2FnZ2lvIHRyYWRvdHRvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBsb2ModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gTG9jW3RleHRdW3RoaXMuRElBX0xPQ0FMRV07XHJcbiAgICB9XHJcbn0iXX0=