@esfaenza/es-diagrams 11.0.2
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.
- package/README.md +1 -0
- package/bundles/esfaenza-es-diagrams.umd.js +1748 -0
- package/bundles/esfaenza-es-diagrams.umd.js.map +1 -0
- package/esfaenza-es-diagrams.d.ts +9 -0
- package/esfaenza-es-diagrams.metadata.json +1 -0
- package/esm2015/esfaenza-es-diagrams.js +10 -0
- package/esm2015/lib/components/es-diagram.component.js +396 -0
- package/esm2015/lib/esdiagram.module.js +28 -0
- package/esm2015/lib/extensions/ReactiveExtensions.js +34 -0
- package/esm2015/lib/extensions/ResizeSensor.js +71 -0
- package/esm2015/lib/models/EsDiagramModuleConfig.js +6 -0
- package/esm2015/lib/models/component/contextmenu/ContextMenuCommand.js +6 -0
- package/esm2015/lib/models/component/contextmenu/ContextMenuOptions.js +7 -0
- package/esm2015/lib/models/component/grouping/ExpandCollapseOptions.js +6 -0
- package/esm2015/lib/models/component/nodes/NodeHTMLTemplate.js +6 -0
- package/esm2015/lib/models/component/nodes/NodeTemplate.js +6 -0
- package/esm2015/lib/models/component/nodes/ZoomLevelBasedTemplate.js +6 -0
- package/esm2015/lib/models/layouts/BreadthFirstLayoutOptionsImpl.js +35 -0
- package/esm2015/lib/models/layouts/CircleLayoutOptionsImpl.js +27 -0
- package/esm2015/lib/models/layouts/ConcentricLayoutOptionsImpl.js +64 -0
- package/esm2015/lib/models/layouts/CoseLayoutOptionsImpl.js +83 -0
- package/esm2015/lib/models/layouts/DagreLayoutOptionsImpl.js +52 -0
- package/esm2015/lib/models/layouts/GridLayoutOptionsImpl.js +38 -0
- package/esm2015/lib/models/layouts/NullLayoutOptionsImpl.js +15 -0
- package/esm2015/lib/models/layouts/PresetLayoutOptionsImpl.js +24 -0
- package/esm2015/lib/models/layouts/RandomLayoutOptionsImpl.js +36 -0
- package/esm2015/lib/models/layouts/base/AnimateLayoutOptionsImpl.js +42 -0
- package/esm2015/lib/models/layouts/base/BaseLayoutOptionsImpl.js +18 -0
- package/esm2015/lib/models/layouts/base/ShapedLayoutOptionsImpl.js +48 -0
- package/esm2015/lib/services/es-diagram.dispatcher.js +86 -0
- package/esm2015/lib/services/es-diagram.loc.js +17 -0
- package/esm2015/lib/services/es-diagram.service.js +106 -0
- package/esm2015/lib/tokens.js +10 -0
- package/esm2015/public-api.js +24 -0
- package/fesm2015/esfaenza-es-diagrams.js +1254 -0
- package/fesm2015/esfaenza-es-diagrams.js.map +1 -0
- package/lib/components/es-diagram.component.d.ts +243 -0
- package/lib/esdiagram.module.d.ts +5 -0
- package/lib/extensions/ReactiveExtensions.d.ts +17 -0
- package/lib/extensions/ResizeSensor.d.ts +43 -0
- package/lib/models/EsDiagramModuleConfig.d.ts +13 -0
- package/lib/models/component/contextmenu/ContextMenuCommand.d.ts +27 -0
- package/lib/models/component/contextmenu/ContextMenuOptions.d.ts +71 -0
- package/lib/models/component/grouping/ExpandCollapseOptions.d.ts +22 -0
- package/lib/models/component/nodes/NodeHTMLTemplate.d.ts +14 -0
- package/lib/models/component/nodes/NodeTemplate.d.ts +13 -0
- package/lib/models/component/nodes/ZoomLevelBasedTemplate.d.ts +14 -0
- package/lib/models/layouts/BreadthFirstLayoutOptionsImpl.d.ts +40 -0
- package/lib/models/layouts/CircleLayoutOptionsImpl.d.ts +28 -0
- package/lib/models/layouts/ConcentricLayoutOptionsImpl.d.ts +74 -0
- package/lib/models/layouts/CoseLayoutOptionsImpl.d.ts +80 -0
- package/lib/models/layouts/DagreLayoutOptionsImpl.d.ts +48 -0
- package/lib/models/layouts/GridLayoutOptionsImpl.d.ts +39 -0
- package/lib/models/layouts/NullLayoutOptionsImpl.d.ts +12 -0
- package/lib/models/layouts/PresetLayoutOptionsImpl.d.ts +37 -0
- package/lib/models/layouts/RandomLayoutOptionsImpl.d.ts +33 -0
- package/lib/models/layouts/base/AnimateLayoutOptionsImpl.d.ts +40 -0
- package/lib/models/layouts/base/BaseLayoutOptionsImpl.d.ts +15 -0
- package/lib/models/layouts/base/ShapedLayoutOptionsImpl.d.ts +46 -0
- package/lib/services/es-diagram.dispatcher.d.ts +41 -0
- package/lib/services/es-diagram.loc.d.ts +49 -0
- package/lib/services/es-diagram.service.d.ts +49 -0
- package/lib/tokens.d.ts +9 -0
- package/package.json +25 -0
- package/public-api.d.ts +20 -0
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Component, EventEmitter, Input, Optional, Output, ViewChild } from '@angular/core';
|
|
3
|
+
import { EsDiagramService } from '../services/es-diagram.service';
|
|
4
|
+
import { EsDiagramDispatcher } from '../services/es-diagram.dispatcher';
|
|
5
|
+
import { ResizeSensor } from "../extensions/ResizeSensor";
|
|
6
|
+
import { ReactiveExtensions } from '../extensions/ReactiveExtensions';
|
|
7
|
+
import * as cy_ from 'cytoscape';
|
|
8
|
+
/** @ignore */ const cytoscape = cy_;
|
|
9
|
+
/**
|
|
10
|
+
* Componente che si occupa di graficare un diagramma e di gestirne il ciclo di vita
|
|
11
|
+
*/
|
|
12
|
+
export class EsDiagramComponent {
|
|
13
|
+
/**
|
|
14
|
+
* Costruttore
|
|
15
|
+
*
|
|
16
|
+
* @ignore
|
|
17
|
+
*/
|
|
18
|
+
constructor(service, dispatcher, exts) {
|
|
19
|
+
this.service = service;
|
|
20
|
+
this.dispatcher = dispatcher;
|
|
21
|
+
this.exts = exts;
|
|
22
|
+
/**
|
|
23
|
+
* Nome del diagramma, fondamentale assegnarlo per permettere alla libreria di schedularne la creazione
|
|
24
|
+
*/
|
|
25
|
+
this.name = "";
|
|
26
|
+
/**
|
|
27
|
+
* Indica se utilizzare il menù contestuale a ruota attorno ad ogni nodo
|
|
28
|
+
*/
|
|
29
|
+
this.UseContextMenu = false;
|
|
30
|
+
/**
|
|
31
|
+
* Dice al componente se il diagramma deve utilizzare il sistema di estensione per l'expand e collapse dei gruppi
|
|
32
|
+
*/
|
|
33
|
+
this.UseExpandCollapse = false;
|
|
34
|
+
/**
|
|
35
|
+
* Blocco completo delle opzioni, alternativo all'assegnazione di **Elements**, **NodeStyles**, **EdgeStyles**, e **Layout**.
|
|
36
|
+
*
|
|
37
|
+
* Qualora entrambe venissero specificate verrà effettuata un'unione fra queste opzioni e quelle specificate, dando priorità alle specificate
|
|
38
|
+
*/
|
|
39
|
+
this.NativeOptions = {};
|
|
40
|
+
/**
|
|
41
|
+
* Aggiorna automaticamente le dimensioni del diagramma quando cambiano le dimensioni della finestra
|
|
42
|
+
*/
|
|
43
|
+
this.AutoupdateSize = true;
|
|
44
|
+
/**
|
|
45
|
+
* Indica di mantenere la posizione dei nodi qualora venissero cambiati dall'Input **Elements**.
|
|
46
|
+
*
|
|
47
|
+
* Se l'ID di un nodo è uguale all'ID di un nodo presente in precedenza, il nuovo nodo ne erediterà la posizione
|
|
48
|
+
*/
|
|
49
|
+
this.PreserveElementsPosition = true;
|
|
50
|
+
/**
|
|
51
|
+
* Qualora venisse modificato l'Input **Elements**, piuttosto che mettere semplicemente il nuovo Elemento in base al Layout precedente, applica anche un'animazione
|
|
52
|
+
*
|
|
53
|
+
* Funziona solamente se il **Layout** corrente del diagramma supporta le animazioni
|
|
54
|
+
*/
|
|
55
|
+
this.AnimateLayoutChanges = true;
|
|
56
|
+
/**
|
|
57
|
+
* Periodo di throttle da quando viene effettuato un resize a quando ricalcolare le dimensioni del diagramma.
|
|
58
|
+
*
|
|
59
|
+
* Può essere tenuto a 0 (redraw istantaneo) finché non ci sono problemi di prestazioni con eventualmente tanti resize a poca distanza l'uno dall'altro.
|
|
60
|
+
*/
|
|
61
|
+
this.ResizeThrottleTime = 0;
|
|
62
|
+
/**
|
|
63
|
+
* Fornisce il global della libreria (namespace **cytoscape**) e si aspetta che dopo operazioni di importazione
|
|
64
|
+
* lasciate all'utente vengano aggiunti tutti i moduli desiderati.
|
|
65
|
+
*
|
|
66
|
+
* È **fondamentale** che il primo parametro (il nome del modulo) sia uguale a ciò di cui viene fatto il require in modo che la libreria
|
|
67
|
+
* possa controllare che il modulo importato non sia già stato importato in precedenza
|
|
68
|
+
*
|
|
69
|
+
* ## Esempio:
|
|
70
|
+
*
|
|
71
|
+
* ```typescript
|
|
72
|
+
* (global) => {
|
|
73
|
+
* return import("cytoscape-extension-library").then(module => global.use("cytoscape-extension-library", module.default));
|
|
74
|
+
*
|
|
75
|
+
* ...
|
|
76
|
+
* }
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
this.ExtensionModulesImporter = null;
|
|
80
|
+
/**
|
|
81
|
+
* Fornisce l'istanza attuale di Cytoscape da cui è possibile prendere le librerie di estensione caricate in **ExtensionModulesImporter**
|
|
82
|
+
* e configurarle in base ai comportamenti specifici
|
|
83
|
+
*
|
|
84
|
+
* ## Esempio:
|
|
85
|
+
*
|
|
86
|
+
* ```typescript
|
|
87
|
+
* (cytoscapeCore) => {
|
|
88
|
+
* // Fare questo lavoro per ogni estensione caricata
|
|
89
|
+
* let extensionConfiguration = { ... };
|
|
90
|
+
* let extensionInstance = cytoscapeCore.extensionLibrary(extensionConfiguration);
|
|
91
|
+
* extensionInstance.doSomethingSpecificToThisExtension();
|
|
92
|
+
*
|
|
93
|
+
* ...
|
|
94
|
+
* }
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
this.ExtensionModulesApplyer = null;
|
|
98
|
+
/**
|
|
99
|
+
* Evento lanciato al click di un nodo, contiene l'oggetto **data** del nodo in questione
|
|
100
|
+
*/
|
|
101
|
+
this.onNodeClick = new EventEmitter();
|
|
102
|
+
/**
|
|
103
|
+
* Indica se il rendering del diagramma è terminato
|
|
104
|
+
*/
|
|
105
|
+
this.Rendered = false;
|
|
106
|
+
/**
|
|
107
|
+
* Api dell'estensione expand-collapse per permettere di effettuare operazioni dall'esterno del diagramma. Vengono valorizzate se **UseExpandCollapse** è **true**
|
|
108
|
+
*/
|
|
109
|
+
this.ExpandCollapseApi = null;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* @ignore
|
|
113
|
+
*
|
|
114
|
+
* Angular Pipeline
|
|
115
|
+
*/
|
|
116
|
+
ngAfterViewInit() {
|
|
117
|
+
if (!this.service || !this.dispatcher)
|
|
118
|
+
throw "Il modulo @esfaenza/diagrams non è stato importato con il forRoot();";
|
|
119
|
+
this.dispatchLoadChart();
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* All'onDestroy ripulisco la memoria dal diagramma
|
|
123
|
+
*/
|
|
124
|
+
ngOnDestroy() {
|
|
125
|
+
this.resizeObserver.dispose();
|
|
126
|
+
this.resizeObserver = null;
|
|
127
|
+
if (this.cy) {
|
|
128
|
+
this.service.log("I", "Diagram" + " " + this.name + ": Unloading destroyed diagram", false);
|
|
129
|
+
this.cy.destroy();
|
|
130
|
+
this.dispatcher.deregister(this.name);
|
|
131
|
+
}
|
|
132
|
+
else
|
|
133
|
+
this.service.log("I", "Chart " + this.name + ": Unloading uncreated chart component. It probably was a duplicated", false);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Registra il diagramma attuale nel Dispatcher in modo che venga caricato appena possibile
|
|
137
|
+
*/
|
|
138
|
+
dispatchLoadChart() {
|
|
139
|
+
this.dispatcher.register(this.name, () => { return this.render(); });
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* @ignore
|
|
143
|
+
*
|
|
144
|
+
* Angular Pipeline: Gestione ri-graficazione del diagramma, se possibile
|
|
145
|
+
*/
|
|
146
|
+
ngOnChanges(changes) {
|
|
147
|
+
let toCheck = ["Templates", "UseContextMenu", "ContextMenuOptions", "UseExpandCollapse", "ExpandCollapseOptions", "NodeStyles", "EdgeStyles", "NativeOptions"];
|
|
148
|
+
if (this.Rendered && toCheck.some(t => changes[t]))
|
|
149
|
+
this.service.log("W", "Redraw based on dynamic Input change is supported only for 'Elements' and 'Layout' inputs, please destroy the component and recreate it with the new settings");
|
|
150
|
+
let elementChanges = changes["Elements"];
|
|
151
|
+
let layoutChanges = changes["Layout"];
|
|
152
|
+
if (elementChanges && !elementChanges.firstChange) {
|
|
153
|
+
this.service.log("I", "Elements have been changed after diagram initialization");
|
|
154
|
+
// Cambiamento agli Elementi: ripulisco gli elementi vecchi, prendo i nuovi, li sistemo e li riassegno.
|
|
155
|
+
// Se il nuovo Input Elements è roba strana mi limito a ripulire il diagramma
|
|
156
|
+
// Se cytoscape aveva già degli elementi precedentemente ne prendo le posizioni in modo da ridisegnarli partendo dallo stesso punto (carino per le animazioni)
|
|
157
|
+
let elements = elementChanges === null || elementChanges === void 0 ? void 0 : elementChanges.currentValue;
|
|
158
|
+
let previous_elements = this.PreserveElementsPosition ? this.cy.nodes() : null;
|
|
159
|
+
this.cy.elements().remove();
|
|
160
|
+
if (elements && elements.length && elements.length > 0) {
|
|
161
|
+
this.reviewCytoscapeElements(elements, previous_elements);
|
|
162
|
+
this.cy.add(elements);
|
|
163
|
+
// Se solo gli elementi cambiano, riapplico il Layout precedente
|
|
164
|
+
if (!layoutChanges && this.LastLayout) {
|
|
165
|
+
// Se devo animare le modifche al layout forzo il parametro relativo
|
|
166
|
+
if (this.AnimateLayoutChanges)
|
|
167
|
+
this.LastLayout.animate = true;
|
|
168
|
+
this.cy.layout(this.LastLayout).run();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Se il layout cambia lo applico e me lo salvo come layout precedente per il futuro
|
|
173
|
+
if (layoutChanges && !layoutChanges.firstChange) {
|
|
174
|
+
this.service.log("I", "Layout have been changed after diagram initialization");
|
|
175
|
+
this.LastLayout = JSON.parse(JSON.stringify(layoutChanges.currentValue));
|
|
176
|
+
this.cy.layout(this.LastLayout).run();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Effettua il rendering del diagramma
|
|
181
|
+
*/
|
|
182
|
+
render() {
|
|
183
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
184
|
+
// Tiro fuori le opzioni con cui generare il diagramma
|
|
185
|
+
let cyOptions = this.getCompletedOptions();
|
|
186
|
+
this.NodesHierarchy = cyOptions.elements && cyOptions.elements.some(t => t.data.parent);
|
|
187
|
+
// Carico eventuali classi di estensione che servono
|
|
188
|
+
yield this.performModulesLoading();
|
|
189
|
+
// Genero il diagramma
|
|
190
|
+
this.cy = cytoscape(cyOptions);
|
|
191
|
+
// Collego gli eventi al componente
|
|
192
|
+
this.bindCytoscapeEvents();
|
|
193
|
+
// Utilizzo le classi di estensione caricate precedentemente per fare il resto delle mie operazioni
|
|
194
|
+
this.performOperationsWithLoadedModules();
|
|
195
|
+
// Imposto la variabile Rendered a true in modo che se da adesso vengono fatte modifiche che dovrebbero causare un redraw posso accorgermene
|
|
196
|
+
// e mandare a cagare lo stronzo di turno
|
|
197
|
+
this.Rendered = true;
|
|
198
|
+
// Se devo aggiornare in automatico in base alla dimensione del contenitore collego il ResizeObserver
|
|
199
|
+
if (this.AutoupdateSize)
|
|
200
|
+
this.listenOnChanges();
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Registra l'ascolto al contenitore del grafico e in caso di modifiche alla dimensione, al massimo una volta ogni 500 millisecondi, lo ridisegna
|
|
205
|
+
*/
|
|
206
|
+
listenOnChanges() {
|
|
207
|
+
this.resizeObserver = new ResizeSensor(this.cyGraph.nativeElement, () => {
|
|
208
|
+
this.exts.throttle(this.name, this.onContainerSizeChanged.bind(this), this.ResizeThrottleTime);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Funzione che si occupa di gestire il repaint del diagramma
|
|
213
|
+
*/
|
|
214
|
+
onContainerSizeChanged() {
|
|
215
|
+
this.service.log("I", "Diagram container size has changed, redrawing");
|
|
216
|
+
this.cy.resize();
|
|
217
|
+
this.cy.fit();
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Collega tutti gli eventi che mi possono servire e li espone in output
|
|
221
|
+
*/
|
|
222
|
+
bindCytoscapeEvents() {
|
|
223
|
+
this.cy.bind('click', 'node', (event) => {
|
|
224
|
+
this.onNodeClick.emit({ data: event.target.data() });
|
|
225
|
+
});
|
|
226
|
+
// Altri eventi...
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Metodo che serve per caricare tutte le estensioni della libreria in base a ciò che viene utilizzato
|
|
230
|
+
*/
|
|
231
|
+
performModulesLoading() {
|
|
232
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
233
|
+
if (this.Layout.name == 'dagre')
|
|
234
|
+
yield this.loadInternal("cytoscape-dagre");
|
|
235
|
+
if (this.NodeHTMLTemplates && this.NodeHTMLTemplates.length > 0)
|
|
236
|
+
yield this.loadInternal("cytoscape-html-node");
|
|
237
|
+
if (this.UseContextMenu)
|
|
238
|
+
yield this.loadInternal("cytoscape-cxtmenu");
|
|
239
|
+
if (this.NodesHierarchy && this.UseExpandCollapse)
|
|
240
|
+
yield this.loadInternal("cytoscape-expand-collapse");
|
|
241
|
+
if (this.ExtensionModulesImporter) {
|
|
242
|
+
// Wrappo il namespace in modo che possa dire la mia sul fatto che l'utente aggiunga un modulo o meno :D
|
|
243
|
+
var wrappedCytoscape = {
|
|
244
|
+
use: (moduleName, module) => {
|
|
245
|
+
if (!module)
|
|
246
|
+
this.service.log("E", this.service.loc("Received an undefined module. Make sure you are correctly loading it") + ": " + moduleName, false);
|
|
247
|
+
if (["cytoscape-dagre", "cytoscape-html-node", "cytoscape-cxtmenu", "cytoscape-expand-collapse"].includes(moduleName))
|
|
248
|
+
this.service.log("W", this.service.loc("Module") + " " + moduleName + " " + this.service.loc("is loaded and managed directly by this library. You don't need to import it or use it directly, just be sure to set the relative options"), false);
|
|
249
|
+
else
|
|
250
|
+
cytoscape.use(module);
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
yield this.ExtensionModulesImporter(wrappedCytoscape);
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Metodo che serve per caricare tutte le estensioni della libreria in base a ciò che viene utilizzato con le opzioni definite dagli Input
|
|
259
|
+
*/
|
|
260
|
+
performOperationsWithLoadedModules() {
|
|
261
|
+
let anyCy = this.cy;
|
|
262
|
+
// Utilizzo del layout, lo salvo per poterlo riutilizzare in futuro
|
|
263
|
+
if (this.Layout) {
|
|
264
|
+
this.LastLayout = JSON.parse(JSON.stringify(this.Layout));
|
|
265
|
+
this.cy.layout(this.LastLayout).run();
|
|
266
|
+
}
|
|
267
|
+
// Utilizzo dell'HTML node
|
|
268
|
+
if (this.NodeHTMLTemplates && this.NodeHTMLTemplates.length > 0) {
|
|
269
|
+
let htmlnode = anyCy.htmlnode();
|
|
270
|
+
htmlnode.createHtmlNode(cytoscape, this.cy, this.NodeHTMLTemplates);
|
|
271
|
+
}
|
|
272
|
+
// Utilizzo del Context Menu
|
|
273
|
+
if (this.UseContextMenu)
|
|
274
|
+
anyCy.cxtmenu(this.ContextMenuOptions);
|
|
275
|
+
// Utilizzo dell'expand collapse solo quando c'è una gerarchia di nodi
|
|
276
|
+
if (this.NodesHierarchy && this.UseExpandCollapse)
|
|
277
|
+
this.ExpandCollapseApi = anyCy.expandCollapse(this.ExpandCollapseOptions);
|
|
278
|
+
// Utilizzo di estensioni extra, implementazione affidata al programmatore
|
|
279
|
+
if (this.ExtensionModulesApplyer)
|
|
280
|
+
this.ExtensionModulesApplyer(this.cy);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Metodo interno per il caricamento dei moduli di estensione
|
|
284
|
+
*
|
|
285
|
+
* @param {'cytoscape-expand-collapse' | 'cytoscape-cxtmenu' | 'cytoscape-html-node' | 'cytoscape-dagre'} moduleId Modulo da caricare
|
|
286
|
+
*/
|
|
287
|
+
loadInternal(moduleId) {
|
|
288
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
289
|
+
let toLoad = yield this.service.importIfNeeded(moduleId);
|
|
290
|
+
if (toLoad)
|
|
291
|
+
cytoscape.use(toLoad);
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Metodo che basandosi sulle opzioni native eventualmente assegnate le completa con gli Input addizionali
|
|
296
|
+
*
|
|
297
|
+
* @returns {cy_.CytoscapeOptions} Opzioni finali unite da Input ed opzioni native
|
|
298
|
+
*/
|
|
299
|
+
getCompletedOptions() {
|
|
300
|
+
var opts = this.NativeOptions || {};
|
|
301
|
+
opts.container = this.cyGraph.nativeElement;
|
|
302
|
+
opts.style = opts.style || [];
|
|
303
|
+
// Per tutte le cose per cui gli Input hanno priorità sovrascrivo gli originali delle opzioni
|
|
304
|
+
if (this.NodeStyles || this.EdgeStyles) {
|
|
305
|
+
opts.style = [];
|
|
306
|
+
if (this.NodeStyles)
|
|
307
|
+
opts.style.push({ selector: 'node', css: this.NodeStyles });
|
|
308
|
+
if (this.EdgeStyles)
|
|
309
|
+
opts.style.push({ selector: 'edge', css: this.EdgeStyles });
|
|
310
|
+
}
|
|
311
|
+
if (this.Elements)
|
|
312
|
+
opts.elements = this.Elements;
|
|
313
|
+
this.reviewCytoscapeElements(opts.elements);
|
|
314
|
+
if (this.Layout)
|
|
315
|
+
opts.layout = this.Layout;
|
|
316
|
+
if (this.Readonly) {
|
|
317
|
+
// Questo coso fa effetti strani....
|
|
318
|
+
//opts.autolock = true;
|
|
319
|
+
opts.autoungrabify = true;
|
|
320
|
+
opts.autounselectify = true;
|
|
321
|
+
opts.boxSelectionEnabled = false;
|
|
322
|
+
opts.userZoomingEnabled = false;
|
|
323
|
+
opts.userPanningEnabled = false;
|
|
324
|
+
}
|
|
325
|
+
return opts;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Aggiustamenti degli elementi di Cytoscape.
|
|
329
|
+
*
|
|
330
|
+
* I nodi non vengono toccati.
|
|
331
|
+
*
|
|
332
|
+
* Per ogni edge viene controllato se è specificata una sorgente ed una destinazione, in caso contrario si cerca di dedurli dall'ID
|
|
333
|
+
*
|
|
334
|
+
* @param {cytoscape.ElementDefinition[]} elements Elementi da sistemare
|
|
335
|
+
*/
|
|
336
|
+
reviewCytoscapeElements(elements, prevPositions) {
|
|
337
|
+
let hasPreviousPositions = prevPositions && prevPositions.length > 0;
|
|
338
|
+
let positionCache = {};
|
|
339
|
+
if (hasPreviousPositions) {
|
|
340
|
+
for (let i = 0; i < prevPositions.length; i++) {
|
|
341
|
+
let item = prevPositions[i];
|
|
342
|
+
if (!positionCache[item.data().id])
|
|
343
|
+
positionCache[item.data().id] = item.position();
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
for (let i = 0; i < elements.length; i++) {
|
|
347
|
+
let el = elements[i];
|
|
348
|
+
if (el.group == "edges" && (!el.data.source && !el.data.target)) {
|
|
349
|
+
if (!el.data.id.includes("-"))
|
|
350
|
+
this.service.log("E", "If you don't specify a source and a target for an edge you have to write its id in the format {source}-{target}");
|
|
351
|
+
else {
|
|
352
|
+
var sourceTarget = el.data.id.split('-');
|
|
353
|
+
el.data.source = sourceTarget[0].trim();
|
|
354
|
+
el.data.target = sourceTarget[1].trim();
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
if (hasPreviousPositions && el.group == "nodes")
|
|
358
|
+
el.position = positionCache[el.data.id];
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
EsDiagramComponent.decorators = [
|
|
363
|
+
{ type: Component, args: [{
|
|
364
|
+
selector: 'es-diagram',
|
|
365
|
+
template: "<div #graph class=\"graph-wrapper {{name}}\"></div>",
|
|
366
|
+
styles: [".graph-wrapper{height:100%;width:100%}.html-node-notransition{transition:none!important;transform:none!important}\n"]
|
|
367
|
+
},] }
|
|
368
|
+
];
|
|
369
|
+
EsDiagramComponent.ctorParameters = () => [
|
|
370
|
+
{ type: EsDiagramService, decorators: [{ type: Optional }] },
|
|
371
|
+
{ type: EsDiagramDispatcher, decorators: [{ type: Optional }] },
|
|
372
|
+
{ type: ReactiveExtensions }
|
|
373
|
+
];
|
|
374
|
+
EsDiagramComponent.propDecorators = {
|
|
375
|
+
cyGraph: [{ type: ViewChild, args: ['graph',] }],
|
|
376
|
+
name: [{ type: Input }],
|
|
377
|
+
UseContextMenu: [{ type: Input }],
|
|
378
|
+
ContextMenuOptions: [{ type: Input }],
|
|
379
|
+
UseExpandCollapse: [{ type: Input }],
|
|
380
|
+
ExpandCollapseOptions: [{ type: Input }],
|
|
381
|
+
NativeOptions: [{ type: Input }],
|
|
382
|
+
Elements: [{ type: Input }],
|
|
383
|
+
NodeStyles: [{ type: Input }],
|
|
384
|
+
EdgeStyles: [{ type: Input }],
|
|
385
|
+
Readonly: [{ type: Input }],
|
|
386
|
+
AutoupdateSize: [{ type: Input }],
|
|
387
|
+
PreserveElementsPosition: [{ type: Input }],
|
|
388
|
+
AnimateLayoutChanges: [{ type: Input }],
|
|
389
|
+
ResizeThrottleTime: [{ type: Input }],
|
|
390
|
+
Layout: [{ type: Input }],
|
|
391
|
+
NodeHTMLTemplates: [{ type: Input }],
|
|
392
|
+
ExtensionModulesImporter: [{ type: Input }],
|
|
393
|
+
ExtensionModulesApplyer: [{ type: Input }],
|
|
394
|
+
onNodeClick: [{ type: Output }]
|
|
395
|
+
};
|
|
396
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtZGlhZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1kaWFncmFtcy9zcmMvbGliL2NvbXBvbmVudHMvZXMtZGlhZ3JhbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxRQUFRLEVBQUUsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFnQmpJLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RSxPQUFPLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxjQUFjLENBQUEsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBRXBDOztHQUVHO0FBTUgsTUFBTSxPQUFPLGtCQUFrQjtJQTZLN0I7Ozs7T0FJRztJQUNILFlBQWdDLE9BQXlCLEVBQXNCLFVBQStCLEVBQVUsSUFBd0I7UUFBaEgsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFBc0IsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFvQjtRQTNLaEo7O1dBRUc7UUFDTSxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRTNCOztXQUVHO1FBQ00sbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFPekM7O1dBRUc7UUFDTSxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFPNUM7Ozs7V0FJRztRQUNNLGtCQUFhLEdBQStCLEVBQUUsQ0FBQztRQXNCeEQ7O1dBRUc7UUFDTSxtQkFBYyxHQUFZLElBQUksQ0FBQztRQUV4Qzs7OztX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RjtZQUVELElBQUksb0JBQW9CLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxPQUFPO2dCQUM3QyxFQUFFLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1NBQzFDO0lBQ0gsQ0FBQzs7O1lBOWRGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsK0RBQTBDOzthQUUzQzs7O1lBaEJRLGdCQUFnQix1QkFtTVYsUUFBUTtZQWxNZCxtQkFBbUIsdUJBa01rQyxRQUFRO1lBL0w3RCxrQkFBa0I7OztzQkFrQnhCLFNBQVMsU0FBQyxPQUFPO21CQUtqQixLQUFLOzZCQUtMLEtBQUs7aUNBS0wsS0FBSztnQ0FLTCxLQUFLO29DQUtMLEtBQUs7NEJBT0wsS0FBSzt1QkFLTCxLQUFLO3lCQUtMLEtBQUs7eUJBS0wsS0FBSzt1QkFLTCxLQUFLOzZCQUtMLEtBQUs7dUNBT0wsS0FBSzttQ0FPTCxLQUFLO2lDQU9MLEtBQUs7cUJBS0wsS0FBSztnQ0FPTCxLQUFLO3VDQW1CTCxLQUFLO3NDQW1CTCxLQUFLOzBCQUtMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3B0aW9uYWwsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuaW1wb3J0IHsgQ29udGV4dE1lbnVPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzL2NvbXBvbmVudC9jb250ZXh0bWVudS9Db250ZXh0TWVudU9wdGlvbnMnO1xuaW1wb3J0IHsgRXhwYW5kQ29sbGFwc2VPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzL2NvbXBvbmVudC9ncm91cGluZy9FeHBhbmRDb2xsYXBzZU9wdGlvbnMnO1xuaW1wb3J0IHsgTm9kZUhUTUxUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQvbm9kZXMvTm9kZUhUTUxUZW1wbGF0ZSc7XG5cbmltcG9ydCB7IEJyZWFkdGhGaXJzdExheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvQnJlYWR0aEZpcnN0TGF5b3V0T3B0aW9uc0ltcGwnO1xuaW1wb3J0IHsgQ2lyY2xlTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9DaXJjbGVMYXlvdXRPcHRpb25zSW1wbCc7XG5pbXBvcnQgeyBDb25jZW50cmljTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9Db25jZW50cmljTGF5b3V0T3B0aW9uc0ltcGwnO1xuaW1wb3J0IHsgQ29zZUxheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvQ29zZUxheW91dE9wdGlvbnNJbXBsJztcbmltcG9ydCB7IERhZ3JlTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9EYWdyZUxheW91dE9wdGlvbnNJbXBsJztcbmltcG9ydCB7IEdyaWRMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0dyaWRMYXlvdXRPcHRpb25zSW1wbCc7XG5pbXBvcnQgeyBOdWxsTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9OdWxsTGF5b3V0T3B0aW9uc0ltcGwnO1xuaW1wb3J0IHsgUHJlc2V0TGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9QcmVzZXRMYXlvdXRPcHRpb25zSW1wbCc7XG5pbXBvcnQgeyBSYW5kb21MYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL1JhbmRvbUxheW91dE9wdGlvbnNJbXBsJztcblxuaW1wb3J0IHsgRXNEaWFncmFtU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2VzLWRpYWdyYW0uc2VydmljZSc7XG5pbXBvcnQgeyBFc0RpYWdyYW1EaXNwYXRjaGVyIH0gZnJvbSAnLi4vc2VydmljZXMvZXMtZGlhZ3JhbS5kaXNwYXRjaGVyJztcbmltcG9ydCB7IFJlc2l6ZVNlbnNvciB9IGZyb20gXCIuLi9leHRlbnNpb25zL1Jlc2l6ZVNlbnNvclwiO1xuXG5pbXBvcnQgeyBSZWFjdGl2ZUV4dGVuc2lvbnMgfSBmcm9tICcuLi9leHRlbnNpb25zL1JlYWN0aXZlRXh0ZW5zaW9ucyc7XG5cbmltcG9ydCAqIGFzIGN5XyBmcm9tICdjeXRvc2NhcGUnO1xuLyoqIEBpZ25vcmUgKi9jb25zdCBjeXRvc2NhcGUgPSBjeV87XG5cbi8qKlxuICogQ29tcG9uZW50ZSBjaGUgc2kgb2NjdXBhIGRpIGdyYWZpY2FyZSB1biBkaWFncmFtbWEgZSBkaSBnZXN0aXJuZSBpbCBjaWNsbyBkaSB2aXRhXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VzLWRpYWdyYW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZXMtZGlhZ3JhbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VzLWRpYWdyYW0uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBFc0RpYWdyYW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXG4gIC8qKlxuICAgKiBSaWZlcmltZW50byBhbGwnb2dnZXR0byBIVE1MIHN1IGN1aSBjcmVhcmUgaWwgZGlhZ3JhbW1hXG4gICAqL1xuICBAVmlld0NoaWxkKCdncmFwaCcpIGN5R3JhcGg6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIE5vbWUgZGVsIGRpYWdyYW1tYSwgZm9uZGFtZW50YWxlIGFzc2VnbmFybG8gcGVyIHBlcm1ldHRlcmUgYWxsYSBsaWJyZXJpYSBkaSBzY2hlZHVsYXJuZSBsYSBjcmVhemlvbmVcbiAgICovXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyA9IFwiXCI7XG5cbiAgLyoqXG4gICAqIEluZGljYSBzZSB1dGlsaXp6YXJlIGlsIG1lbsO5IGNvbnRlc3R1YWxlIGEgcnVvdGEgYXR0b3JubyBhZCBvZ25pIG5vZG9cbiAgICovXG4gIEBJbnB1dCgpIFVzZUNvbnRleHRNZW51OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYSBsZSBvcHppb25pIGRlbCBtZW7DuSBjb250ZXN0dWFsZSBxdWFsb3JhICoqVXNlQ29udGV4dE1lbnUqKiBmb3NzZSAqKnRydWUqKlxuICAgKi9cbiAgQElucHV0KCkgQ29udGV4dE1lbnVPcHRpb25zOiBDb250ZXh0TWVudU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIERpY2UgYWwgY29tcG9uZW50ZSBzZSBpbCBkaWFncmFtbWEgZGV2ZSB1dGlsaXp6YXJlIGlsIHNpc3RlbWEgZGkgZXN0ZW5zaW9uZSBwZXIgbCdleHBhbmQgZSBjb2xsYXBzZSBkZWkgZ3J1cHBpXG4gICAqL1xuICBASW5wdXQoKSBVc2VFeHBhbmRDb2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBPcHppb25pIG5hdGl2ZSBkZWxsJ2VzdGVuc2lvbmUgZXhwYW5kLWNvbGxhcHNlLCB2ZW5nb25vIG92dmlhbWVudGUgdXRpbGl6emF0ZSBzb2xvIHNlICoqVXNlRXhwYW5kQ29sbGFwc2UqKiDDqCAqKnRydWUqKlxuICAgKi9cbiAgQElucHV0KCkgRXhwYW5kQ29sbGFwc2VPcHRpb25zOiBFeHBhbmRDb2xsYXBzZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEJsb2NjbyBjb21wbGV0byBkZWxsZSBvcHppb25pLCBhbHRlcm5hdGl2byBhbGwnYXNzZWduYXppb25lIGRpICoqRWxlbWVudHMqKiwgKipOb2RlU3R5bGVzKiosICoqRWRnZVN0eWxlcyoqLCBlICoqTGF5b3V0KiouXG4gICAqIFxuICAgKiBRdWFsb3JhIGVudHJhbWJlIHZlbmlzc2VybyBzcGVjaWZpY2F0ZSB2ZXJyw6AgZWZmZXR0dWF0YSB1bid1bmlvbmUgZnJhIHF1ZXN0ZSBvcHppb25pIGUgcXVlbGxlIHNwZWNpZmljYXRlLCBkYW5kbyBwcmlvcml0w6AgYWxsZSBzcGVjaWZpY2F0ZVxuICAgKi9cbiAgQElucHV0KCkgTmF0aXZlT3B0aW9uczogY3l0b3NjYXBlLkN5dG9zY2FwZU9wdGlvbnMgPSB7fTtcblxuICAvKipcbiAgICogRGVmaW5pemlvbmUgZGVnbGkgZWxlbWVudGkgZGEgbW9zdHJhcmUgbmVsIGRpYWdyYW1tYVxuICAgKi9cbiAgQElucHV0KCkgRWxlbWVudHM6IGN5dG9zY2FwZS5FbGVtZW50RGVmaW5pdGlvbltdO1xuXG4gIC8qKlxuICAgKiBEZWZpbml6aW9uZSBkZWdsaSBzdGlsaSBkZWkgbm9kaVxuICAgKi9cbiAgQElucHV0KCkgTm9kZVN0eWxlczogY3l0b3NjYXBlLkNzcy5Ob2RlO1xuXG4gIC8qKlxuICAgKiBEZWZpbml6aW9uZSBkZWdsaSBzdGlsaSBkZWkgY29sbGVnYW1lbnRpIGZyYSBpIG5vZGlcbiAgICovXG4gIEBJbnB1dCgpIEVkZ2VTdHlsZXM6IGN5dG9zY2FwZS5Dc3MuRWRnZTtcblxuICAvKipcbiAgICogSW4gdW4gZGlhZ3JhbW1hIGluIHNvbGEgbGV0dHVyYSB0dXR0ZSBsZSBpbnRlcmF6aW9uaSB1dGVudGUgc29ubyBhbm51bGxhdGVcbiAgICovXG4gIEBJbnB1dCgpIFJlYWRvbmx5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZ2dpb3JuYSBhdXRvbWF0aWNhbWVudGUgbGUgZGltZW5zaW9uaSBkZWwgZGlhZ3JhbW1hIHF1YW5kbyBjYW1iaWFubyBsZSBkaW1lbnNpb25pIGRlbGxhIGZpbmVzdHJhXG4gICAqL1xuICBASW5wdXQoKSBBdXRvdXBkYXRlU2l6ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEluZGljYSBkaSBtYW50ZW5lcmUgbGEgcG9zaXppb25lIGRlaSBub2RpIHF1YWxvcmEgdmVuaXNzZXJvIGNhbWJpYXRpIGRhbGwnSW5wdXQgKipFbGVtZW50cyoqLlxuICAgKiBcbiAgICogU2UgbCdJRCBkaSB1biBub2RvIMOoIHVndWFsZSBhbGwnSUQgZGkgdW4gbm9kbyBwcmVzZW50ZSBpbiBwcmVjZWRlbnphLCBpbCBudW92byBub2RvIG5lIGVyZWRpdGVyw6AgbGEgcG9zaXppb25lXG4gICAqL1xuICBASW5wdXQoKSBQcmVzZXJ2ZUVsZW1lbnRzUG9zaXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBRdWFsb3JhIHZlbmlzc2UgbW9kaWZpY2F0byBsJ0lucHV0ICoqRWxlbWVudHMqKiwgcGl1dHRvc3RvIGNoZSBtZXR0ZXJlIHNlbXBsaWNlbWVudGUgaWwgbnVvdm8gRWxlbWVudG8gaW4gYmFzZSBhbCBMYXlvdXQgcHJlY2VkZW50ZSwgYXBwbGljYSBhbmNoZSB1bidhbmltYXppb25lIFxuICAgKiBcbiAgICogRnVuemlvbmEgc29sYW1lbnRlIHNlIGlsICoqTGF5b3V0KiogY29ycmVudGUgZGVsIGRpYWdyYW1tYSBzdXBwb3J0YSBsZSBhbmltYXppb25pXG4gICAqL1xuICBASW5wdXQoKSBBbmltYXRlTGF5b3V0Q2hhbmdlczogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFBlcmlvZG8gZGkgdGhyb3R0bGUgZGEgcXVhbmRvIHZpZW5lIGVmZmV0dHVhdG8gdW4gcmVzaXplIGEgcXVhbmRvIHJpY2FsY29sYXJlIGxlIGRpbWVuc2lvbmkgZGVsIGRpYWdyYW1tYS5cbiAgICogXG4gICAqIFB1w7IgZXNzZXJlIHRlbnV0byBhIDAgKHJlZHJhdyBpc3RhbnRhbmVvKSBmaW5jaMOpIG5vbiBjaSBzb25vIHByb2JsZW1pIGRpIHByZXN0YXppb25pIGNvbiBldmVudHVhbG1lbnRlIHRhbnRpIHJlc2l6ZSBhIHBvY2EgZGlzdGFuemEgbCd1bm8gZGFsbCdhbHRyby5cbiAgICovXG4gIEBJbnB1dCgpIFJlc2l6ZVRocm90dGxlVGltZTogbnVtYmVyID0gMDtcblxuICAvKipcbiAgICogTGF5b3V0IGRpIG9yZGluYW1lbnRvIGRlaSBub2RpXG4gICAqL1xuICBASW5wdXQoKSBMYXlvdXQ6IEJyZWFkdGhGaXJzdExheW91dE9wdGlvbnNJbXBsIHwgQ2lyY2xlTGF5b3V0T3B0aW9uc0ltcGwgfCBDb25jZW50cmljTGF5b3V0T3B0aW9uc0ltcGwgfFxuICAgIENvc2VMYXlvdXRPcHRpb25zSW1wbCB8IERhZ3JlTGF5b3V0T3B0aW9uc0ltcGwgfCBHcmlkTGF5b3V0T3B0aW9uc0ltcGwgfCBOdWxsTGF5b3V0T3B0aW9uc0ltcGwgfCBQcmVzZXRMYXlvdXRPcHRpb25zSW1wbCB8XG4gICAgUmFuZG9tTGF5b3V0T3B0aW9uc0ltcGw7XG5cbiAgLyoqXG4gICAqIFRlbXBsYXRlIEhUTUwgZGEgYXBwbGljYXJlIGFpIG5vZGkgcGVyIGRhcmdsaSBzdGlsaSBwYXJ0aWNvbGFyaSwgZGl2ZXJzaSBkYWxsZSBzaGFwZSBkaSBkZWZhdWx0XG4gICAqL1xuICBASW5wdXQoKSBOb2RlSFRNTFRlbXBsYXRlczogTm9kZUhUTUxUZW1wbGF0ZVtdO1xuXG4gIC8qKlxuICAgKiBGb3JuaXNjZSBpbCBnbG9iYWwgZGVsbGEgbGlicmVyaWEgKG5hbWVzcGFjZSAqKmN5dG9zY2FwZSoqKSBlIHNpIGFzcGV0dGEgY2hlIGRvcG8gb3BlcmF6aW9uaSBkaSBpbXBvcnRhemlvbmUgXG4gICAqIGxhc2NpYXRlIGFsbCd1dGVudGUgdmVuZ2FubyBhZ2dpdW50aSB0dXR0aSBpIG1vZHVsaSBkZXNpZGVyYXRpLiBcbiAgICogXG4gICAqIMOIICoqZm9uZGFtZW50YWxlKiogY2hlIGlsIHByaW1vIHBhcmFtZXRybyAoaWwgbm9tZSBkZWwgbW9kdWxvKSBzaWEgdWd1YWxlIGEgY2nDsiBkaSBjdWkgdmllbmUgZmF0dG8gaWwgcmVxdWlyZSBpbiBtb2RvIGNoZSBsYSBsaWJyZXJpYVxuICAgKiBwb3NzYSBjb250cm9sbGFyZSBjaGUgaWwgbW9kdWxvIGltcG9ydGF0byBub24gc2lhIGdpw6Agc3RhdG8gaW1wb3J0YXRvIGluIHByZWNlZGVuemFcbiAgICogXG4gICAqICMjIEVzZW1waW86XG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIChnbG9iYWwpID0+IHtcbiAgICogICAgcmV0dXJuIGltcG9ydChcImN5dG9zY2FwZS1leHRlbnNpb24tbGlicmFyeVwiKS50aGVuKG1vZHVsZSA9PiBnbG9iYWwudXNlKFwiY3l0b3NjYXBlLWV4dGVuc2lvbi1saWJyYXJ5XCIsIG1vZHVsZS5kZWZhdWx0KSk7XG4gICAqIFxuICAgKiAgICAuLi5cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgpIEV4dGVuc2lvbk1vZHVsZXNJbXBvcnRlcjogKGdsb2JhbDogeyB1c2U6IChtb2R1bGVOYW1lOiBzdHJpbmcsIG1vZHVsZTogdm9pZCB8IGN5dG9zY2FwZS5FeHQpID0+IHZvaWQgfSkgPT4gUHJvbWlzZTxhbnk+ID0gbnVsbDtcblxuICAvKipcbiAgICogRm9ybmlzY2UgbCdpc3RhbnphIGF0dHVhbGUgZGkgQ3l0b3NjYXBlIGRhIGN1aSDDqCBwb3NzaWJpbGUgcHJlbmRlcmUgbGUgbGlicmVyaWUgZGkgZXN0ZW5zaW9uZSBjYXJpY2F0ZSBpbiAqKkV4dGVuc2lvbk1vZHVsZXNJbXBvcnRlcioqXG4gICAqIGUgY29uZmlndXJhcmxlIGluIGJhc2UgYWkgY29tcG9ydGFtZW50aSBzcGVjaWZpY2lcbiAgICogXG4gICAqICMjIEVzZW1waW86XG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIChjeXRvc2NhcGVDb3JlKSA9PiB7XG4gICAqICAgIC8vIEZhcmUgcXVlc3RvIGxhdm9ybyBwZXIgb2duaSBlc3RlbnNpb25lIGNhcmljYXRhXG4gICAqICAgIGxldCBleHRlbnNpb25Db25maWd1cmF0aW9uID0geyAuLi4gfTtcbiAgICogICAgbGV0IGV4dGVuc2lvbkluc3RhbmNlID0gY3l0b3NjYXBlQ29yZS5leHRlbnNpb25MaWJyYXJ5KGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24pO1xuICAgKiAgICBleHRlbnNpb25JbnN0YW5jZS5kb1NvbWV0aGluZ1NwZWNpZmljVG9UaGlzRXh0ZW5zaW9uKCk7XG4gICAqIFxuICAgKiAgICAuLi5cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgpIEV4dGVuc2lvbk1vZHVsZXNBcHBseWVyOiAoY3l0b3NjYXBlQ29yZTogY3l0b3NjYXBlLkNvcmUpID0+IHZvaWQgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBFdmVudG8gbGFuY2lhdG8gYWwgY2xpY2sgZGkgdW4gbm9kbywgY29udGllbmUgbCdvZ2dldHRvICoqZGF0YSoqIGRlbCBub2RvIGluIHF1ZXN0aW9uZVxuICAgKi9cbiAgQE91dHB1dCgpIG9uTm9kZUNsaWNrOiBFdmVudEVtaXR0ZXI8eyBkYXRhOiBhbnkgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZGF0YTogYW55IH0+KCk7XG5cbiAgLyoqXG4gICAqIFZhcmlhYmlsZSBzdSBjdWkgc2FsdmFyc2kgc2UgaSBub2RpIGhhbm5vIHVuYSBnZXJhcmNoaWEgYSBncnVwcGkgbyBuby4gU2VydmUgcGVyIHBvaSBjYXJpY2FyZSBsJ2VzdGVuc2lvbmUgZXhwYW5kLWNvbGxhcHNlIHF1YWxvcmEgZm9zc2UgcmljaGllc3RhXG4gICAqL1xuICBwcml2YXRlIE5vZGVzSGllcmFyY2h5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2Egc2UgaWwgcmVuZGVyaW5nIGRlbCBkaWFncmFtbWEgw6ggdGVybWluYXRvXG4gICAqL1xuICBwcml2YXRlIFJlbmRlcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElzdGFuemEgZGVsIGRpYWdyYW1tYSBhdHR1YWxtZW50ZSBpbiB1c29cbiAgICovXG4gIHB1YmxpYyBjeTogY3l0b3NjYXBlLkNvcmVcblxuICAvKipcbiAgICogQXBpIGRlbGwnZXN0ZW5zaW9uZSBleHBhbmQtY29sbGFwc2UgcGVyIHBlcm1ldHRlcmUgZGkgZWZmZXR0dWFyZSBvcGVyYXppb25pIGRhbGwnZXN0ZXJubyBkZWwgZGlhZ3JhbW1hLiBWZW5nb25vIHZhbG9yaXp6YXRlIHNlICoqVXNlRXhwYW5kQ29sbGFwc2UqKiDDqCAqKnRydWUqKlxuICAgKi9cbiAgcHVibGljIEV4cGFuZENvbGxhcHNlQXBpOiBhbnkgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBPc3NlcnZhdG9yZSBkZWxsZSBtb2RpZmljaGUgYWwgY29udGVuaXRvcmUgZGVsIGRpYWdyYW1tYVxuICAgKi9cbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcjogUmVzaXplU2Vuc29yO1xuXG4gIC8qKlxuICAgKiBSaWZlcmltZW50byBhbGwndWx0aW1vIGxheW91dCB1dGlsaXp6YXRvLiBWaWVuZSByaWFwcGxpY2F0byBxdWFsb3JhIHZlbmlzc2UgY2FtYmlhdG8gbCdJbnB1dCAqKkVsZW1lbnRzKiouXG4gICAqIFxuICAgKiBOb24gdXRpbGl6em8gaWwgbWFrZUxheW91dHMgcGVyY2jDqSBhbHRyaW1lbnRpIHJpc2NoaWVyZWkgZGkgY3JlYXJlIHVuIGxheW91dCByaWZlcml0byBhIFggZWxlbWVudGksIG5lIGFnZ2l1bmdvIDEsIHJpYXBwbGljbyBpbCBMYXlvdXQgXG4gICAqIG1hIG1pIHZpZW5lIHJpYXBwbGljYXRvIGEgWCBlbGVtZW50aSBpbnZlY2UgY2hlIFggKyAxXG4gICAqL1xuICBwcml2YXRlIExhc3RMYXlvdXQ6IGN5dG9zY2FwZS5MYXlvdXRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBDb3N0cnV0dG9yZVxuICAgKiBcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSBzZXJ2aWNlOiBFc0RpYWdyYW1TZXJ2aWNlLCBAT3B0aW9uYWwoKSBwcml2YXRlIGRpc3BhdGNoZXI6IEVzRGlhZ3JhbURpc3BhdGNoZXIsIHByaXZhdGUgZXh0czogUmVhY3RpdmVFeHRlbnNpb25zKSB7IH1cblxuICAvKipcbiAgICogQGlnbm9yZSBcbiAgICogXG4gICAqIEFuZ3VsYXIgUGlwZWxpbmVcbiAgICovXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKCF0aGlzLnNlcnZpY2UgfHwgIXRoaXMuZGlzcGF0Y2hlcilcbiAgICAgIHRocm93IFwiSWwgbW9kdWxvIEBlc2ZhZW56YS9kaWFncmFtcyBub24gw6ggc3RhdG8gaW1wb3J0YXRvIGNvbiBpbCBmb3JSb290KCk7XCI7XG5cbiAgICB0aGlzLmRpc3BhdGNoTG9hZENoYXJ0KCk7XG4gIH1cblxuICAvKipcbiAgICogQWxsJ29uRGVzdHJveSByaXB1bGlzY28gbGEgbWVtb3JpYSBkYWwgZGlhZ3JhbW1hXG4gICAqL1xuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNwb3NlKCk7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5jeSkge1xuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIklcIiwgXCJEaWFncmFtXCIgKyBcIiBcIiArIHRoaXMubmFtZSArIFwiOiBVbmxvYWRpbmcgZGVzdHJveWVkIGRpYWdyYW1cIiwgZmFsc2UpO1xuICAgICAgdGhpcy5jeS5kZXN0cm95KCk7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIuZGVyZWdpc3Rlcih0aGlzLm5hbWUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkNoYXJ0IFwiICsgdGhpcy5uYW1lICsgXCI6IFVubG9hZGluZyB1bmNyZWF0ZWQgY2hhcnQgY29tcG9uZW50LiBJdCBwcm9iYWJseSB3YXMgYSBkdXBsaWNhdGVkXCIsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSBpbCBkaWFncmFtbWEgYXR0dWFsZSBuZWwgRGlzcGF0Y2hlciBpbiBtb2RvIGNoZSB2ZW5nYSBjYXJpY2F0byBhcHBlbmEgcG9zc2liaWxlXG4gICAqL1xuICBwcml2YXRlIGRpc3BhdGNoTG9hZENoYXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2hlci5yZWdpc3Rlcih0aGlzLm5hbWUsICgpID0+IHsgcmV0dXJuIHRoaXMucmVuZGVyKCk7IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmUgXG4gICAqIFxuICAgKiBBbmd1bGFyIFBpcGVsaW5lOiBHZXN0aW9uZSByaS1ncmFmaWNhemlvbmUgZGVsIGRpYWdyYW1tYSwgc2UgcG9zc2liaWxlXG4gICAqL1xuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IGFueSB7XG4gICAgbGV0IHRvQ2hlY2sgPSBbXCJUZW1wbGF0ZXNcIiwgXCJVc2VDb250ZXh0TWVudVwiLCBcIkNvbnRleHRNZW51T3B0aW9uc1wiLCBcIlVzZUV4cGFuZENvbGxhcHNlXCIsIFwiRXhwYW5kQ29sbGFwc2VPcHRpb25zXCIsIFwiTm9kZVN0eWxlc1wiLCBcIkVkZ2VTdHlsZXNcIiwgXCJOYXRpdmVPcHRpb25zXCJdO1xuXG4gICAgaWYgKHRoaXMuUmVuZGVyZWQgJiYgdG9DaGVjay5zb21lKHQgPT4gY2hhbmdlc1t0XSkpXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiV1wiLCBcIlJlZHJhdyBiYXNlZCBvbiBkeW5hbWljIElucHV0IGNoYW5nZSBpcyBzdXBwb3J0ZWQgb25seSBmb3IgJ0VsZW1lbnRzJyBhbmQgJ0xheW91dCcgaW5wdXRzLCBwbGVhc2UgZGVzdHJveSB0aGUgY29tcG9uZW50IGFuZCByZWNyZWF0ZSBpdCB3aXRoIHRoZSBuZXcgc2V0dGluZ3NcIik7XG5cbiAgICBsZXQgZWxlbWVudENoYW5nZXMgPSBjaGFuZ2VzW1wiRWxlbWVudHNcIl07XG4gICAgbGV0IGxheW91dENoYW5nZXMgPSBjaGFuZ2VzW1wiTGF5b3V0XCJdO1xuICAgIGlmIChlbGVtZW50Q2hhbmdlcyAmJiAhZWxlbWVudENoYW5nZXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuc2VydmljZS5sb2coXCJJXCIsIFwiRWxlbWVudHMgaGF2ZSBiZWVuIGNoYW5nZWQgYWZ0ZXIgZGlhZ3JhbSBpbml0aWFsaXphdGlvblwiKTtcblxuICAgICAgLy8gQ2FtYmlhbWVudG8gYWdsaSBFbGVtZW50aTogcmlwdWxpc2NvIGdsaSBlbGVtZW50aSB2ZWNjaGksIHByZW5kbyBpIG51b3ZpLCBsaSBzaXN0ZW1vIGUgbGkgcmlhc3NlZ25vLiBcbiAgICAgIC8vIFNlIGlsIG51b3ZvIElucHV0IEVsZW1lbnRzIMOoIHJvYmEgc3RyYW5hIG1pIGxpbWl0byBhIHJpcHVsaXJlIGlsIGRpYWdyYW1tYVxuICAgICAgLy8gU2UgY3l0b3NjYXBlIGF2ZXZhIGdpw6AgZGVnbGkgZWxlbWVudGkgcHJlY2VkZW50ZW1lbnRlIG5lIHByZW5kbyBsZSBwb3NpemlvbmkgaW4gbW9kbyBkYSByaWRpc2VnbmFybGkgcGFydGVuZG8gZGFsbG8gc3Rlc3NvIHB1bnRvIChjYXJpbm8gcGVyIGxlIGFuaW1hemlvbmkpXG4gICAgICBsZXQgZWxlbWVudHMgPSBlbGVtZW50Q2hhbmdlcz8uY3VycmVudFZhbHVlO1xuICAgICAgbGV0IHByZXZpb3VzX2VsZW1lbnRzID0gdGhpcy5QcmVzZXJ2ZUVsZW1lbnRzUG9zaXRpb24gPyA8YW55PnRoaXMuY3kubm9kZXMoKSA6IG51bGw7XG5cbiAgICAgIHRoaXMuY3kuZWxlbWVudHMoKS5yZW1vdmUoKTtcbiAgICAgIGlmIChlbGVtZW50cyAmJiBlbGVtZW50cy5sZW5ndGggJiYgZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnJldmlld0N5dG9zY2FwZUVsZW1lbnRzKGVsZW1lbnRzLCBwcmV2aW91c19lbGVtZW50cyk7XG4gICAgICAgIHRoaXMuY3kuYWRkKGVsZW1lbnRzKTtcblxuICAgICAgICAvLyBTZSBzb2xvIGdsaSBlbGVtZW50aSBjYW1iaWFubywgcmlhcHBsaWNvIGlsIExheW91dCBwcmVjZWRlbnRlXG4gICAgICAgIGlmICghbGF5b3V0Q2hhbmdlcyAmJiB0aGlzLkxhc3RMYXlvdXQpIHtcblxuICAgICAgICAgIC8vIFNlIGRldm8gYW5pbWFyZSBsZSBtb2RpZmNoZSBhbCBsYXlvdXQgZm9yem8gaWwgcGFyYW1ldHJvIHJlbGF0aXZvXG4gICAgICAgICAgaWYgKHRoaXMuQW5pbWF0ZUxheW91dENoYW5nZXMpXG4gICAgICAgICAgICAoPGFueT50aGlzLkxhc3RMYXlvdXQpLmFuaW1hdGUgPSB0cnVlO1xuXG4gICAgICAgICAgdGhpcy5jeS5sYXlvdXQodGhpcy5MYXN0TGF5b3V0KS5ydW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNlIGlsIGxheW91dCBjYW1iaWEgbG8gYXBwbGljbyBlIG1lIGxvIHNhbHZvIGNvbWUgbGF5b3V0IHByZWNlZGVudGUgcGVyIGlsIGZ1dHVyb1xuICAgIGlmIChsYXlvdXRDaGFuZ2VzICYmICFsYXlvdXRDaGFuZ2VzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkxheW91dCBoYXZlIGJlZW4gY2hhbmdlZCBhZnRlciBkaWFncmFtIGluaXRpYWxpemF0aW9uXCIpO1xuICAgICAgdGhpcy5MYXN0TGF5b3V0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsYXlvdXRDaGFuZ2VzLmN1cnJlbnRWYWx1ZSkpO1xuICAgICAgdGhpcy5jeS5sYXlvdXQodGhpcy5MYXN0TGF5b3V0KS5ydW4oKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFZmZldHR1YSBpbCByZW5kZXJpbmcgZGVsIGRpYWdyYW1tYVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZW5kZXIoKSB7XG5cbiAgICAvLyBUaXJvIGZ1b3JpIGxlIG9wemlvbmkgY29uIGN1aSBnZW5lcmFyZSBpbCBkaWFncmFtbWFcbiAgICBsZXQgY3lPcHRpb25zID0gdGhpcy5nZXRDb21wbGV0ZWRPcHRpb25zKCk7XG4gICAgdGhpcy5Ob2Rlc0hpZXJhcmNoeSA9IGN5T3B0aW9ucy5lbGVtZW50cyAmJiAoPGN5Xy5FbGVtZW50RGVmaW5pdGlvbltdPmN5T3B0aW9ucy5lbGVtZW50cykuc29tZSh0ID0+IHQuZGF0YS5wYXJlbnQpO1xuXG4gICAgLy8gQ2FyaWNvIGV2ZW50dWFsaSBjbGFzc2kgZGkgZXN0ZW5zaW9uZSBjaGUgc2Vydm9ub1xuICAgIGF3YWl0IHRoaXMucGVyZm9ybU1vZHVsZXNMb2FkaW5nKCk7XG5cbiAgICAvLyBHZW5lcm8gaWwgZGlhZ3JhbW1hXG4gICAgdGhpcy5jeSA9IGN5dG9zY2FwZShjeU9wdGlvbnMpO1xuXG4gICAgLy8gQ29sbGVnbyBnbGkgZXZlbnRpIGFsIGNvbXBvbmVudGVcbiAgICB0aGlzLmJpbmRDeXRvc2NhcGVFdmVudHMoKTtcblxuICAgIC8vIFV0aWxpenpvIGxlIGNsYXNzaSBkaSBlc3RlbnNpb25lIGNhcmljYXRlIHByZWNlZGVudGVtZW50ZSBwZXIgZmFyZSBpbCByZXN0byBkZWxsZSBtaWUgb3BlcmF6aW9uaVxuICAgIHRoaXMucGVyZm9ybU9wZXJhdGlvbnNXaXRoTG9hZGVkTW9kdWxlcygpO1xuXG4gICAgLy8gSW1wb3N0byBsYSB2YXJpYWJpbGUgUmVuZGVyZWQgYSB0cnVlIGluIG1vZG8gY2hlIHNlIGRhIGFkZXNzbyB2ZW5nb25vIGZhdHRlIG1vZGlmaWNoZSBjaGUgZG92cmViYmVybyBjYXVzYXJlIHVuIHJlZHJhdyBwb3NzbyBhY2Nvcmdlcm1lbmVcbiAgICAvLyBlIG1hbmRhcmUgYSBjYWdhcmUgbG8gc3Ryb256byBkaSB0dXJub1xuICAgIHRoaXMuUmVuZGVyZWQgPSB0cnVlO1xuXG4gICAgLy8gU2UgZGV2byBhZ2dpb3JuYXJlIGluIGF1dG9tYXRpY28gaW4gYmFzZSBhbGxhIGRpbWVuc2lvbmUgZGVsIGNvbnRlbml0b3JlIGNvbGxlZ28gaWwgUmVzaXplT2JzZXJ2ZXJcbiAgICBpZiAodGhpcy5BdXRvdXBkYXRlU2l6ZSlcbiAgICAgIHRoaXMubGlzdGVuT25DaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgbCdhc2NvbHRvIGFsIGNvbnRlbml0b3JlIGRlbCBncmFmaWNvIGUgaW4gY2FzbyBkaSBtb2RpZmljaGUgYWxsYSBkaW1lbnNpb25lLCBhbCBtYXNzaW1vIHVuYSB2b2x0YSBvZ25pIDUwMCBtaWxsaXNlY29uZGksIGxvIHJpZGlzZWduYVxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5PbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVTZW5zb3IodGhpcy5jeUdyYXBoLm5hdGl2ZUVsZW1lbnQsICgpID0+IHtcbiAgICAgIHRoaXMuZXh0cy50aHJvdHRsZSh0aGlzLm5hbWUsIHRoaXMub25Db250YWluZXJTaXplQ2hhbmdlZC5iaW5kKHRoaXMpLCB0aGlzLlJlc2l6ZVRocm90dGxlVGltZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRnVuemlvbmUgY2hlIHNpIG9jY3VwYSBkaSBnZXN0aXJlIGlsIHJlcGFpbnQgZGVsIGRpYWdyYW1tYVxuICAgKi9cbiAgcHJpdmF0ZSBvbkNvbnRhaW5lclNpemVDaGFuZ2VkKCkge1xuICAgIHRoaXMuc2VydmljZS5sb2coXCJJXCIsIFwiRGlhZ3JhbSBjb250YWluZXIgc2l6ZSBoYXMgY2hhbmdlZCwgcmVkcmF3aW5nXCIpO1xuICAgIHRoaXMuY3kucmVzaXplKCk7XG4gICAgdGhpcy5jeS5maXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWdhIHR1dHRpIGdsaSBldmVudGkgY2hlIG1pIHBvc3Nvbm8gc2VydmlyZSBlIGxpIGVzcG9uZSBpbiBvdXRwdXRcbiAgICovXG4gIHByaXZhdGUgYmluZEN5dG9zY2FwZUV2ZW50cygpIHtcbiAgICB0aGlzLmN5LmJpbmQoJ2NsaWNrJywgJ25vZGUnLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMub25Ob2RlQ2xpY2suZW1pdCh7IGRhdGE6IGV2ZW50LnRhcmdldC5kYXRhKCkgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBBbHRyaSBldmVudGkuLi5cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRvZG8gY2hlIHNlcnZlIHBlciBjYXJpY2FyZSB0dXR0ZSBsZSBlc3RlbnNpb25pIGRlbGxhIGxpYnJlcmlhIGluIGJhc2UgYSBjacOyIGNoZSB2aWVuZSB1dGlsaXp6YXRvXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBlcmZvcm1Nb2R1bGVzTG9hZGluZygpIHtcbiAgICBpZiAodGhpcy5MYXlvdXQubmFtZSA9PSAnZGFncmUnKVxuICAgICAgYXdhaXQgdGhpcy5sb2FkSW50ZXJuYWwoXCJjeXRvc2NhcGUtZGFncmVcIik7XG5cbiAgICBpZiAodGhpcy5Ob2RlSFRNTFRlbXBsYXRlcyAmJiB0aGlzLk5vZGVIVE1MVGVtcGxhdGVzLmxlbmd0aCA+IDApXG4gICAgICBhd2FpdCB0aGlzLmxvYWRJbnRlcm5hbChcImN5dG9zY2FwZS1odG1sLW5vZGVcIik7XG5cbiAgICBpZiAodGhpcy5Vc2VDb250ZXh0TWVudSlcbiAgICAgIGF3YWl0IHRoaXMubG9hZEludGVybmFsKFwiY3l0b3NjYXBlLWN4dG1lbnVcIik7XG5cbiAgICBpZiAodGhpcy5Ob2Rlc0hpZXJhcmNoeSAmJiB0aGlzLlVzZUV4cGFuZENvbGxhcHNlKVxuICAgICAgYXdhaXQgdGhpcy5sb2FkSW50ZXJuYWwoXCJjeXRvc2NhcGUtZXhwYW5kLWNvbGxhcHNlXCIpO1xuXG4gICAgaWYgKHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0ltcG9ydGVyKSB7XG4gICAgICAvLyBXcmFwcG8gaWwgbmFtZXNwYWNlIGluIG1vZG8gY2hlIHBvc3NhIGRpcmUgbGEgbWlhIHN1bCBmYXR0byBjaGUgbCd1dGVudGUgYWdnaXVuZ2EgdW4gbW9kdWxvIG8gbWVubyA6RFxuICAgICAgdmFyIHdyYXBwZWRDeXRvc2NhcGUgPSB7XG4gICAgICAgIHVzZTogKG1vZHVsZU5hbWU6IHN0cmluZywgbW9kdWxlOiBjeXRvc2NhcGUuRXh0KSA9PiB7XG4gICAgICAgICAgaWYgKCFtb2R1bGUpXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UubG9nKFwiRVwiLCB0aGlzLnNlcnZpY2UubG9jKFwiUmVjZWl2ZWQgYW4gdW5kZWZpbmVkIG1vZHVsZS4gTWFrZSBzdXJlIHlvdSBhcmUgY29ycmVjdGx5IGxvYWRpbmcgaXRcIikgKyBcIjogXCIgKyBtb2R1bGVOYW1lLCBmYWxzZSk7XG5cbiAgICAgICAgICBpZiAoW1wiY3l0b3NjYXBlLWRhZ3JlXCIsIFwiY3l0b3NjYXBlLWh0bWwtbm9kZVwiLCBcImN5dG9zY2FwZS1jeHRtZW51XCIsIFwiY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZVwiXS5pbmNsdWRlcyhtb2R1bGVOYW1lKSlcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5sb2coXCJXXCIsIHRoaXMuc2VydmljZS5sb2MoXCJNb2R1bGVcIikgKyBcIiBcIiArIG1vZHVsZU5hbWUgKyBcIiBcIiArIHRoaXMuc2VydmljZS5sb2MoXCJpcyBsb2FkZWQgYW5kIG1hbmFnZWQgZGlyZWN0bHkgYnkgdGhpcyBsaWJyYXJ5LiBZb3UgZG9uJ3QgbmVlZCB0byBpbXBvcnQgaXQgb3IgdXNlIGl0IGRpcmVjdGx5LCBqdXN0IGJlIHN1cmUgdG8gc2V0IHRoZSByZWxhdGl2ZSBvcHRpb25zXCIpLCBmYWxzZSk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgY3l0b3NjYXBlLnVzZShtb2R1bGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0ltcG9ydGVyKHdyYXBwZWRDeXRvc2NhcGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRvZG8gY2hlIHNlcnZlIHBlciBjYXJpY2FyZSB0dXR0ZSBsZSBlc3RlbnNpb25pIGRlbGxhIGxpYnJlcmlhIGluIGJhc2UgYSBjacOyIGNoZSB2aWVuZSB1dGlsaXp6YXRvIGNvbiBsZSBvcHppb25pIGRlZmluaXRlIGRhZ2xpIElucHV0XG4gICAqL1xuICBwcml2YXRlIHBlcmZvcm1PcGVyYXRpb25zV2l0aExvYWRlZE1vZHVsZXMoKSB7XG5cbiAgICBsZXQgYW55Q3kgPSAoPGFueT50aGlzLmN5KTtcblxuICAgIC8vIFV0aWxpenpvIGRlbCBsYXlvdXQsIGxvIHNhbHZvIHBlciBwb3RlcmxvIHJpdXRpbGl6emFyZSBpbiBmdXR1cm9cbiAgICBpZiAodGhpcy5MYXlvdXQpIHtcbiAgICAgIHRoaXMuTGFzdExheW91dCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5MYXlvdXQpKTtcbiAgICAgIHRoaXMuY3kubGF5b3V0KHRoaXMuTGFzdExheW91dCkucnVuKClcbiAgICB9XG5cbiAgICAvLyBVdGlsaXp6byBkZWxsJ0hUTUwgbm9kZVxuICAgIGlmICh0aGlzLk5vZGVIVE1MVGVtcGxhdGVzICYmIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGh0bWxub2RlID0gYW55Q3kuaHRtbG5vZGUoKTtcbiAgICAgIGh0bWxub2RlLmNyZWF0ZUh0bWxOb2RlKGN5dG9zY2FwZSwgdGhpcy5jeSwgdGhpcy5Ob2RlSFRNTFRlbXBsYXRlcyk7XG4gICAgfVxuXG4gICAgLy8gVXRpbGl6em8gZGVsIENvbnRleHQgTWVudVxuICAgIGlmICh0aGlzLlVzZUNvbnRleHRNZW51KVxuICAgICAgYW55Q3kuY3h0bWVudSh0aGlzLkNvbnRleHRNZW51T3B0aW9ucyk7XG5cbiAgICAvLyBVdGlsaXp6byBkZWxsJ2V4cGFuZCBjb2xsYXBzZSBzb2xvIHF1YW5kbyBjJ8OoIHVuYSBnZXJhcmNoaWEgZGkgbm9kaVxuICAgIGlmICh0aGlzLk5vZGVzSGllcmFyY2h5ICYmIHRoaXMuVXNlRXhwYW5kQ29sbGFwc2UpXG4gICAgICB0aGlzLkV4cGFuZENvbGxhcHNlQXBpID0gYW55Q3kuZXhwYW5kQ29sbGFwc2UodGhpcy5FeHBhbmRDb2xsYXBzZU9wdGlvbnMpO1xuXG4gICAgLy8gVXRpbGl6em8gZGkgZXN0ZW5zaW9uaSBleHRyYSwgaW1wbGVtZW50YXppb25lIGFmZmlkYXRhIGFsIHByb2dyYW1tYXRvcmVcbiAgICBpZiAodGhpcy5FeHRlbnNpb25Nb2R1bGVzQXBwbHllcilcbiAgICAgIHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0FwcGx5ZXIodGhpcy5jeSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0b2RvIGludGVybm8gcGVyIGlsIGNhcmljYW1lbnRvIGRlaSBtb2R1bGkgZGkgZXN0ZW5zaW9uZVxuICAgKiBcbiAgICogQHBhcmFtIHsnY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZScgfCAnY3l0b3NjYXBlLWN4dG1lbnUnIHwgJ2N5dG9zY2FwZS1odG1sLW5vZGUnIHwgJ2N5dG9zY2FwZS1kYWdyZSd9IG1vZHVsZUlkIE1vZHVsbyBkYSBjYXJpY2FyZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkSW50ZXJuYWwobW9kdWxlSWQ6ICdjeXRvc2NhcGUtZXhwYW5kLWNvbGxhcHNlJyB8ICdjeXRvc2NhcGUtY3h0bWVudScgfCAnY3l0b3NjYXBlLWh0bWwtbm9kZScgfCAnY3l0b3NjYXBlLWRhZ3JlJykge1xuICAgIGxldCB0b0xvYWQgPSBhd2FpdCB0aGlzLnNlcnZpY2UuaW1wb3J0SWZOZWVkZWQobW9kdWxlSWQpO1xuICAgIGlmICh0b0xvYWQpIGN5dG9zY2FwZS51c2UodG9Mb2FkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRvZG8gY2hlIGJhc2FuZG9zaSBzdWxsZSBvcHppb25pIG5hdGl2ZSBldmVudHVhbG1lbnRlIGFzc2VnbmF0ZSBsZSBjb21wbGV0YSBjb24gZ2xpIElucHV0IGFkZGl6aW9uYWxpXG4gICAqIFxuICAgKiBAcmV0dXJucyB7Y3lfLkN5dG9zY2FwZU9wdGlvbnN9IE9wemlvbmkgZmluYWxpIHVuaXRlIGRhIElucHV0IGVkIG9wemlvbmkgbmF0aXZlXG4gICAqL1xuICBwcml2YXRlIGdldENvbXBsZXRlZE9wdGlvbnMoKTogY3lfLkN5dG9zY2FwZU9wdGlvbnMge1xuICAgIHZhciBvcHRzOiBjeV8uQ3l0b3NjYXBlT3B0aW9ucyA9IHRoaXMuTmF0aXZlT3B0aW9ucyB8fCB7fTtcbiAgICBvcHRzLmNvbnRhaW5lciA9IHRoaXMuY3lHcmFwaC5uYXRpdmVFbGVtZW50O1xuICAgIG9wdHMuc3R5bGUgPSBvcHRzLnN0eWxlIHx8IFtdO1xuXG4gICAgLy8gUGVyIHR1dHRlIGxlIGNvc2UgcGVyIGN1aSBnbGkgSW5wdXQgaGFubm8gcHJpb3JpdMOgIHNvdnJhc2NyaXZvIGdsaSBvcmlnaW5hbGkgZGVsbGUgb3B6aW9uaVxuXG4gICAgaWYgKHRoaXMuTm9kZVN0eWxlcyB8fCB0aGlzLkVkZ2VTdHlsZXMpIHtcbiAgICAgIG9wdHMuc3R5bGUgPSBbXTtcbiAgICAgIGlmICh0aGlzLk5vZGVTdHlsZXMpIG9wdHMuc3R5bGUucHVzaCh7IHNlbGVjdG9yOiAnbm9kZScsIGNzczogdGhpcy5Ob2RlU3R5bGVzIH0pO1xuICAgICAgaWYgKHRoaXMuRWRnZVN0eWxlcykgb3B0cy5zdHlsZS5wdXNoKHsgc2VsZWN0b3I6ICdlZGdlJywgY3NzOiB0aGlzLkVkZ2VTdHlsZXMgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuRWxlbWVudHMpXG4gICAgICBvcHRzLmVsZW1lbnRzID0gdGhpcy5FbGVtZW50cztcblxuICAgIHRoaXMucmV2aWV3Q3l0b3NjYXBlRWxlbWVudHMoPGN5dG9zY2FwZS5FbGVtZW50RGVmaW5pdGlvbltdPm9wdHMuZWxlbWVudHMpO1xuXG4gICAgaWYgKHRoaXMuTGF5b3V0KVxuICAgICAgb3B0cy5sYXlvdXQgPSB0aGlzLkxheW91dDtcblxuICAgIGlmICh0aGlzLlJlYWRvbmx5KSB7XG4gICAgICAvLyBRdWVzdG8gY29zbyBmYSBlZmZldHRpIHN0cmFuaS4uLi5cbiAgICAgIC8vb3B0cy5hdXRvbG9jayA9IHRydWU7XG5cbiAgICAgIG9wdHMuYXV0b3VuZ3JhYmlmeSA9IHRydWU7XG4gICAgICBvcHRzLmF1dG91bnNlbGVjdGlmeSA9IHRydWU7XG4gICAgICBvcHRzLmJveFNlbGVjdGlvbkVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIG9wdHMudXNlclpvb21pbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBvcHRzLnVzZXJQYW5uaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFnZ2l1c3RhbWVudGkgZGVnbGkgZWxlbWVudGkgZGkgQ3l0b3NjYXBlLiBcbiAgICogXG4gICAqIEkgbm9kaSBub24gdmVuZ29ubyB0b2NjYXRpLlxuICAgKiBcbiAgICogUGVyIG9nbmkgZWRnZSB2aWVuZSBjb250cm9sbGF0byBzZSDDqCBzcGVjaWZpY2F0YSB1bmEgc29yZ2VudGUgZWQgdW5hIGRlc3RpbmF6aW9uZSwgaW4gY2FzbyBjb250cmFyaW8gc2kgY2VyY2EgZGkgZGVkdXJsaSBkYWxsJ0lEXG4gICAqIFxuICAgKiBAcGFyYW0ge2N5dG9zY2FwZS5FbGVtZW50RGVmaW5pdGlvbltdfSBlbGVtZW50cyBFbGVtZW50aSBkYSBzaXN0ZW1hcmVcbiAgICovXG4gIHByaXZhdGUgcmV2aWV3Q3l0b3NjYXBlRWxlbWVudHMoZWxlbWVudHM6IGN5dG9zY2FwZS5FbGVtZW50RGVmaW5pdGlvbltdLCBwcmV2UG9zaXRpb25zPzogYW55KSB7XG4gICAgbGV0IGhhc1ByZXZpb3VzUG9zaXRpb25zID0gcHJldlBvc2l0aW9ucyAmJiBwcmV2UG9zaXRpb25zLmxlbmd0aCA+IDA7XG4gICAgbGV0IHBvc2l0aW9uQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBjeXRvc2NhcGUuUG9zaXRpb24gfSA9IHt9O1xuXG4gICAgaWYgKGhhc1ByZXZpb3VzUG9zaXRpb25zKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZQb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGl0ZW0gPSBwcmV2UG9zaXRpb25zW2ldO1xuICAgICAgICBpZiAoIXBvc2l0aW9uQ2FjaGVbaXRlbS5kYXRhKCkuaWRdKVxuICAgICAgICAgIHBvc2l0aW9uQ2FjaGVbaXRlbS5kYXRhKCkuaWRdID0gaXRlbS5wb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBlbCA9IGVsZW1lbnRzW2ldO1xuICAgICAgaWYgKGVsLmdyb3VwID09IFwiZWRnZXNcIiAmJiAoIWVsLmRhdGEuc291cmNlICYmICFlbC5kYXRhLnRhcmdldCkpIHtcbiAgICAgICAgaWYgKCFlbC5kYXRhLmlkLmluY2x1ZGVzKFwiLVwiKSlcbiAgICAgICAgICB0aGlzLnNlcnZpY2UubG9nKFwiRVwiLCBcIklmIHlvdSBkb24ndCBzcGVjaWZ5IGEgc291cmNlIGFuZCBhIHRhcmdldCBmb3IgYW4gZWRnZSB5b3UgaGF2ZSB0byB3cml0ZSBpdHMgaWQgaW4gdGhlIGZvcm1hdCB7c291cmNlfS17dGFyZ2V0fVwiKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIHNvdXJjZVRhcmdldCA9IGVsLmRhdGEuaWQuc3BsaXQoJy0nKTtcbiAgICAgICAgICBlbC5kYXRhLnNvdXJjZSA9IHNvdXJjZVRhcmdldFswXS50cmltKCk7XG4gICAgICAgICAgZWwuZGF0YS50YXJnZXQgPSBzb3VyY2VUYXJnZXRbMV0udHJpbSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNQcmV2aW91c1Bvc2l0aW9ucyAmJiBlbC5ncm91cCA9PSBcIm5vZGVzXCIpXG4gICAgICAgIGVsLnBvc2l0aW9uID0gcG9zaXRpb25DYWNoZVtlbC5kYXRhLmlkXVxuICAgIH1cbiAgfVxufSJdfQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
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
|
+
export class EsDiagramModule {
|
|
9
|
+
static forRoot(config) {
|
|
10
|
+
return {
|
|
11
|
+
ngModule: EsDiagramModule,
|
|
12
|
+
providers: [
|
|
13
|
+
EsDiagramService,
|
|
14
|
+
EsDiagramDispatcher,
|
|
15
|
+
{ provide: DIA_LOCALE, useValue: (config === null || config === void 0 ? void 0 : config.locale) || 'it-IT' },
|
|
16
|
+
{ provide: DIA_DEBUG_MODE, useValue: (config === null || config === void 0 ? void 0 : config.debugMode) || false },
|
|
17
|
+
]
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
EsDiagramModule.decorators = [
|
|
22
|
+
{ type: NgModule, args: [{
|
|
23
|
+
declarations: [EsDiagramComponent],
|
|
24
|
+
imports: [CommonModule, FormsModule, ReactiveFormsModule, CommonModule],
|
|
25
|
+
exports: [EsDiagramComponent]
|
|
26
|
+
},] }
|
|
27
|
+
];
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNkaWFncmFtLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLWRpYWdyYW1zL3NyYy9saWIvZXNkaWFncmFtLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUV0RSxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBT3RELE1BQU0sT0FBTyxlQUFlO0lBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBOEI7UUFDM0MsT0FBTztZQUNMLFFBQVEsRUFBRSxlQUFlO1lBQ3pCLFNBQVMsRUFBRTtnQkFDVCxnQkFBZ0I7Z0JBQ2hCLG1CQUFtQjtnQkFDbkIsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxNQUFNLEtBQUksT0FBTyxFQUFFO2dCQUM1RCxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFNBQVMsS0FBSSxLQUFLLEVBQUU7YUFDbEU7U0FDRixDQUFDO0lBQ0osQ0FBQzs7O1lBaEJGLFFBQVEsU0FBQztnQkFDUixZQUFZLEVBQUUsQ0FBRSxrQkFBa0IsQ0FBRTtnQkFDcEMsT0FBTyxFQUFFLENBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLENBQUU7Z0JBQ3pFLE9BQU8sRUFBRSxDQUFFLGtCQUFrQixDQUFFO2FBQ2hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRXNEaWFncmFtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2VzLWRpYWdyYW0uY29tcG9uZW50J1xuXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgRXNEaWFncmFtU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZXMtZGlhZ3JhbS5zZXJ2aWNlJztcbmltcG9ydCB7IEVzRGlhZ3JhbURpc3BhdGNoZXIgfSBmcm9tICcuL3NlcnZpY2VzL2VzLWRpYWdyYW0uZGlzcGF0Y2hlcic7XG5pbXBvcnQgeyBFc0RpYWdyYW1Nb2R1bGVDb25maWcgfSBmcm9tICcuL21vZGVscy9Fc0RpYWdyYW1Nb2R1bGVDb25maWcnO1xuXG5pbXBvcnQgeyBESUFfTE9DQUxFLCBESUFfREVCVUdfTU9ERSB9IGZyb20gJy4vdG9rZW5zJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbIEVzRGlhZ3JhbUNvbXBvbmVudCBdLFxuICBpbXBvcnRzOiBbIENvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIENvbW1vbk1vZHVsZSBdLFxuICBleHBvcnRzOiBbIEVzRGlhZ3JhbUNvbXBvbmVudCBdXG59KVxuZXhwb3J0IGNsYXNzIEVzRGlhZ3JhbU1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZz86IEVzRGlhZ3JhbU1vZHVsZUNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8RXNEaWFncmFtTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBFc0RpYWdyYW1Nb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgRXNEaWFncmFtU2VydmljZSxcbiAgICAgICAgRXNEaWFncmFtRGlzcGF0Y2hlcixcbiAgICAgICAgeyBwcm92aWRlOiBESUFfTE9DQUxFLCB1c2VWYWx1ZTogY29uZmlnPy5sb2NhbGUgfHwgJ2l0LUlUJyB9LFxuICAgICAgICB7IHByb3ZpZGU6IERJQV9ERUJVR19NT0RFLCB1c2VWYWx1ZTogY29uZmlnPy5kZWJ1Z01vZGUgfHwgZmFsc2UgfSxcbiAgICAgIF1cbiAgICB9O1xuICB9XG59Il19
|
|
@@ -0,0 +1,34 @@
|
|
|
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.ɵprov = i0.ɵɵdefineInjectable({ factory: function ReactiveExtensions_Factory() { return new ReactiveExtensions(); }, token: ReactiveExtensions, providedIn: "root" });
|
|
31
|
+
ReactiveExtensions.decorators = [
|
|
32
|
+
{ type: Injectable, args: [{ providedIn: "root" },] }
|
|
33
|
+
];
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVhY3RpdmVFeHRlbnNpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtZGlhZ3JhbXMvc3JjL2xpYi9leHRlbnNpb25zL1JlYWN0aXZlRXh0ZW5zaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQzs7R0FFRztBQUVILE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFHSTs7V0FFRztRQUNLLG9CQUFlLEdBQTZCLEVBQUUsQ0FBQztLQW9CMUQ7SUFsQkc7Ozs7OztPQU1HO0lBQ0ksUUFBUSxDQUFDLEVBQVUsRUFBRSxJQUFjLEVBQUUsZUFBdUIsQ0FBQztRQUNoRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFFL0IsNkRBQTZEO1FBQzdELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUM7WUFDekIsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU1QywrRUFBK0U7UUFDL0UsSUFBSSxjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbkcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUM7SUFDL0MsQ0FBQzs7OztZQXpCSixVQUFVLFNBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKipcclxuICogQ2xhc3NlIGNoZSBmb3JuaXNjZSBtZXRvZGkgcmVhdHRpdmkgZGkgZXN0ZW5zaW9uZS4gUGVyIG9yYSBpbXBsZW1lbnRhdG8gc29sbyB1bm8gcHNldWRvLXRocm90dGxlXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXHJcbmV4cG9ydCBjbGFzcyBSZWFjdGl2ZUV4dGVuc2lvbnMge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FjaGUgZGkgdHV0dGkgaSB0aW1lciBpbiBlc2VjdXppb25lXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXhlY3V0aW9uVGltZXJzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzZWN1emlvbmUgZGVsZXlhdGEgZGkgdW5hIGZ1bnppb25lLiBTZSB2aWVuZSByaWNoaWFtYXRhIG51b3ZhbWVudGUgcHJpbWEgZGkgdmVuaXJlIGVzZWd1aXRhIGRvcG8gaWwgZGVsYXksIGlsIGRlbGF5IHZpZW5lIHJlc2V0dGF0b1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSWQgcGVyIGFpdXRhcmUgaWwgc2Vydml6aW8gYSBkaXN0aW5ndWVyZSBmdW56aW9uaSBjb24gbm9tZSB1Z3VhbGUgY2hpYW1hdGUgZGEgY29tcG9uZW50aSBkaXZlcnNpXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIEZ1bnppb25lIGRhIGNoaWFtYXJlIGFsIHRlcm1pbmUgZGVsIHRocm90dGxlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGhyb3R0bGVUaW1lIFRlbXBvIGRpIHRocm90dGxpbmcgaW4gbWlsbGlzZWNvbmRpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0aHJvdHRsZShpZDogc3RyaW5nLCBmdW5jOiBGdW5jdGlvbiwgdGhyb3R0bGVUaW1lOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGtleSA9IGZ1bmMubmFtZSArIFwiX1wiICsgaWQ7XHJcblxyXG4gICAgICAgIC8vU2UgaG8gbGEgZnVuemlvbmUgY2hlIHZ1b2xlIGVzZWd1aXJlIHJpcHVsaXNjbyBxdWVsIHRpbWVvdXRcclxuICAgICAgICBpZiAodGhpcy5leGVjdXRpb25UaW1lcnNba2V5XSlcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZXhlY3V0aW9uVGltZXJzW2tleV0pO1xyXG5cclxuICAgICAgICAvL1JpY3JlbyBpbCB0aW1lb3V0IHBlciBlc2VndWlyZSBxdWVsbGEgZnVuemlvbmUgZG9wbyB0aHJvdHRsZVRpbWUgbWlsbGlzZWNvbmRpXHJcbiAgICAgICAgdmFyIGV4ZWN1dGlvblRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7IGZ1bmMoKTsgdGhpcy5leGVjdXRpb25UaW1lcnNba2V5XSA9IG51bGw7IH0sIHRocm90dGxlVGltZSk7XHJcbiAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lcnNba2V5XSA9IGV4ZWN1dGlvblRpbWVyO1xyXG4gICAgfVxyXG59Il19
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// Grabbata felicemente da amcharts, rimuovendo helper interni, cose strane e instupidendola un po':
|
|
2
|
+
// https://github.com/amcharts/amcharts4/blob/7fbb61e90363a2373e6130800dee06b8a62f3aab/src/.internal/core/utils/ResizeSensor.ts
|
|
3
|
+
/**
|
|
4
|
+
* Classe di utilità che tiene d'occhio i cambiamenti di dimensione di un elemento. Un **ResizeSensor** può controllare al massimo un elemento
|
|
5
|
+
*/
|
|
6
|
+
export class ResizeSensor {
|
|
7
|
+
/**
|
|
8
|
+
* Costruttore
|
|
9
|
+
*
|
|
10
|
+
* @param {HTMLElement} element Elemento HTML da controllare
|
|
11
|
+
* @param {Function} callback Callback da chiamare quando le dimensioni di **element** cambiano
|
|
12
|
+
*/
|
|
13
|
+
constructor(element, callback) {
|
|
14
|
+
/**
|
|
15
|
+
* Riferimento all'observer nativo
|
|
16
|
+
*/
|
|
17
|
+
this.observer = null;
|
|
18
|
+
/**
|
|
19
|
+
* Indica se questo oggetto è stato distrutto o no
|
|
20
|
+
*/
|
|
21
|
+
this.Disposed = false;
|
|
22
|
+
/**
|
|
23
|
+
* Elemento da controllare e callback da chiamare quando le dimensioni dell'elemento cambiano
|
|
24
|
+
*/
|
|
25
|
+
this.target = null;
|
|
26
|
+
this.makeSensor();
|
|
27
|
+
this.addTarget(element, callback);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Distruttore
|
|
31
|
+
*/
|
|
32
|
+
dispose() {
|
|
33
|
+
if (!this.Disposed) {
|
|
34
|
+
this.Disposed = true;
|
|
35
|
+
this.removeTarget();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Creazione del sensore che sarà collegato all'elemento da osservare dal metodo **addTarget**
|
|
40
|
+
*/
|
|
41
|
+
makeSensor() {
|
|
42
|
+
if (typeof ResizeObserver == "undefined")
|
|
43
|
+
throw "Resize Observer non è definito. Si prega di utilizzare un browser vero";
|
|
44
|
+
this.observer = new ResizeObserver((entries) => {
|
|
45
|
+
for (let i = 0; i < entries.length; ++i) {
|
|
46
|
+
if (this.target && this.target.targetEl === entries[i].target)
|
|
47
|
+
this.target.callback();
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Dice al sensore di osservare l'elemento **targetEl**, richiamando **callback** qualora le dimensioni cambino
|
|
53
|
+
*
|
|
54
|
+
* @param {HTMLElement} targetEl Elemento HTML da controllare
|
|
55
|
+
* @param {Function} callback Callback da chiamare quando le dimensioni di **element** cambiano
|
|
56
|
+
*/
|
|
57
|
+
addTarget(targetEl, callback) {
|
|
58
|
+
this.observer.observe(targetEl, { box: "content-box" });
|
|
59
|
+
this.target = { targetEl, callback };
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Rimuove l'elemento HTML attuale dall'osservazione del **ResizeObserver**
|
|
63
|
+
*/
|
|
64
|
+
removeTarget() {
|
|
65
|
+
if (!this.target)
|
|
66
|
+
return;
|
|
67
|
+
this.observer.unobserve(this.target.targetEl);
|
|
68
|
+
this.target = null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplU2Vuc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtZGlhZ3JhbXMvc3JjL2xpYi9leHRlbnNpb25zL1Jlc2l6ZVNlbnNvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvR0FBb0c7QUFDcEcsK0hBQStIO0FBTy9IOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFpQnJCOzs7OztPQUtHO0lBQ0gsWUFBWSxPQUFvQixFQUFFLFFBQW9CO1FBckJ0RDs7V0FFRztRQUNLLGFBQVEsR0FBUSxJQUFJLENBQUM7UUFFN0I7O1dBRUc7UUFDSSxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRWpDOztXQUVHO1FBQ0ssV0FBTSxHQUFnRCxJQUFJLENBQUM7UUFTL0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDdkI7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxVQUFVO1FBQ2QsSUFBSSxPQUFPLGNBQWMsSUFBSSxXQUFXO1lBQ3BDLE1BQU0sd0VBQXdFLENBQUM7UUFFbkYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBQyxDQUFDLE9BQW1CLEVBQUUsRUFBRTtZQUN2RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtnQkFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO29CQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQzlCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxTQUFTLENBQUMsUUFBcUIsRUFBRSxRQUFvQjtRQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVk7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDWixPQUFPO1FBRVgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHcmFiYmF0YSBmZWxpY2VtZW50ZSBkYSBhbWNoYXJ0cywgcmltdW92ZW5kbyBoZWxwZXIgaW50ZXJuaSwgY29zZSBzdHJhbmUgZSBpbnN0dXBpZGVuZG9sYSB1biBwbyc6XHJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbWNoYXJ0cy9hbWNoYXJ0czQvYmxvYi83ZmJiNjFlOTAzNjNhMjM3M2U2MTMwODAwZGVlMDZiOGE2MmYzYWFiL3NyYy8uaW50ZXJuYWwvY29yZS91dGlscy9SZXNpemVTZW5zb3IudHNcclxuXHJcbi8qKlxyXG4gKiBPZ2dldHRvIG5hdGl2byAqKlJlc2l6ZU9ic2VydmVyKipcclxuICovXHJcbmRlY2xhcmUgY29uc3QgUmVzaXplT2JzZXJ2ZXI6IGFueTtcclxuXHJcbi8qKlxyXG4gKiBDbGFzc2UgZGkgdXRpbGl0w6AgY2hlIHRpZW5lIGQnb2NjaGlvIGkgY2FtYmlhbWVudGkgZGkgZGltZW5zaW9uZSBkaSB1biBlbGVtZW50by4gVW4gKipSZXNpemVTZW5zb3IqKiBwdcOyIGNvbnRyb2xsYXJlIGFsIG1hc3NpbW8gdW4gZWxlbWVudG9cclxuICovXHJcbmV4cG9ydCBjbGFzcyBSZXNpemVTZW5zb3Ige1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmlmZXJpbWVudG8gYWxsJ29ic2VydmVyIG5hdGl2b1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG9ic2VydmVyOiBhbnkgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIHF1ZXN0byBvZ2dldHRvIMOoIHN0YXRvIGRpc3RydXR0byBvIG5vXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBEaXNwb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWxlbWVudG8gZGEgY29udHJvbGxhcmUgZSBjYWxsYmFjayBkYSBjaGlhbWFyZSBxdWFuZG8gbGUgZGltZW5zaW9uaSBkZWxsJ2VsZW1lbnRvIGNhbWJpYW5vXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdGFyZ2V0OiB7IHRhcmdldEVsOiBFbGVtZW50LCBjYWxsYmFjazogKCkgPT4gdm9pZCB9ID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudG8gSFRNTCBkYSBjb250cm9sbGFyZVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgZGEgY2hpYW1hcmUgcXVhbmRvIGxlIGRpbWVuc2lvbmkgZGkgKiplbGVtZW50KiogY2FtYmlhbm9cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogSFRNTEVsZW1lbnQsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XHJcbiAgICAgICAgdGhpcy5tYWtlU2Vuc29yKCk7XHJcbiAgICAgICAgdGhpcy5hZGRUYXJnZXQoZWxlbWVudCwgY2FsbGJhY2spO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzdHJ1dHRvcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRpc3Bvc2UoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLkRpc3Bvc2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRGlzcG9zZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRhcmdldCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF6aW9uZSBkZWwgc2Vuc29yZSBjaGUgc2Fyw6AgY29sbGVnYXRvIGFsbCdlbGVtZW50byBkYSBvc3NlcnZhcmUgZGFsIG1ldG9kbyAqKmFkZFRhcmdldCoqXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbWFrZVNlbnNvcigpIHtcclxuICAgICAgICBpZiAodHlwZW9mIFJlc2l6ZU9ic2VydmVyID09IFwidW5kZWZpbmVkXCIpXHJcbiAgICAgICAgICAgIHRocm93IFwiUmVzaXplIE9ic2VydmVyIG5vbiDDqCBkZWZpbml0by4gU2kgcHJlZ2EgZGkgdXRpbGl6emFyZSB1biBicm93c2VyIHZlcm9cIjtcclxuXHJcbiAgICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllczogQXJyYXk8YW55PikgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRhcmdldCAmJiB0aGlzLnRhcmdldC50YXJnZXRFbCA9PT0gZW50cmllc1tpXS50YXJnZXQpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXQuY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGljZSBhbCBzZW5zb3JlIGRpIG9zc2VydmFyZSBsJ2VsZW1lbnRvICoqdGFyZ2V0RWwqKiwgcmljaGlhbWFuZG8gKipjYWxsYmFjayoqIHF1YWxvcmEgbGUgZGltZW5zaW9uaSBjYW1iaW5vXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRhcmdldEVsIEVsZW1lbnRvIEhUTUwgZGEgY29udHJvbGxhcmVcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIGRhIGNoaWFtYXJlIHF1YW5kbyBsZSBkaW1lbnNpb25pIGRpICoqZWxlbWVudCoqIGNhbWJpYW5vXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhZGRUYXJnZXQodGFyZ2V0RWw6IEhUTUxFbGVtZW50LCBjYWxsYmFjazogKCkgPT4gdm9pZCkge1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRFbCwgeyBib3g6IFwiY29udGVudC1ib3hcIiB9KTtcclxuICAgICAgICB0aGlzLnRhcmdldCA9IHsgdGFyZ2V0RWwsIGNhbGxiYWNrIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSaW11b3ZlIGwnZWxlbWVudG8gSFRNTCBhdHR1YWxlIGRhbGwnb3NzZXJ2YXppb25lIGRlbCAqKlJlc2l6ZU9ic2VydmVyKipcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbW92ZVRhcmdldCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudGFyZ2V0KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMudGFyZ2V0LnRhcmdldEVsKTtcclxuICAgICAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB9XHJcbn0iXX0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classe di configurazione per il Modulo
|
|
3
|
+
*/
|
|
4
|
+
export class EsDiagramModuleConfig {
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXNEaWFncmFtTW9kdWxlQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtZGlhZ3JhbXMvc3JjL2xpYi9tb2RlbHMvRXNEaWFncmFtTW9kdWxlQ29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHFCQUFxQjtDQVdqQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDbGFzc2UgZGkgY29uZmlndXJhemlvbmUgcGVyIGlsIE1vZHVsb1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEVzRGlhZ3JhbU1vZHVsZUNvbmZpZ3tcclxuXHJcbiAgICAvKipcclxuICAgICAqIExvY2FsZSBkZWwgbW9kdWxvLiBQZXIgb3JhIHNvbm8gc3VwcG9ydGF0aSBzb2xvICdpdC1JVCcgZWQgJ2VuLVVTJ1xyXG4gICAgICovXHJcbiAgICBsb2NhbGU/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRpdmEgbyBkaXNhdHRpdmEgbGEgbW9kYWxpdMOgIGRpIGRlYnVnIHBlciBzY3JpdmVyZSBpIG1lc3NhZ2dpIGEgY29uc29sZVxyXG4gICAgICovXHJcbiAgICBkZWJ1Z01vZGU/OiBib29sZWFuO1xyXG59Il19
|