@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
@@ -1,503 +0,0 @@
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
- * Attiva una modalità di selezione "smart"... o perlomeno "smarter" del default di Cytoscape.
58
- *
59
- * - Il click di un elemento non selezionato lo seleziona
60
- * - Il click di un elemento selezionato lo deseleziona
61
- * - Lo stato di selezione viene persistito sull'oggetto originale invece di rimanere in un internal
62
- * - All'assegnazione di oggetti selezionati, questi vengono marcati correttamente con l'overlay di selezione
63
- *
64
- * N.B: la chiamata all'evento **onNodeClick** avviene **DOPO** la gestione della selezione
65
- */
66
- this.SmartSelection = false;
67
- /**
68
- * CSS per la graficazione della selezione dei nodi. Quando un nodo verrà selezionato avrà sopra di se un overlay che 'sborda' di **overlay-padding** pixel,
69
- * di colore **overlay-color** e con un opacità **overlay-opacity**
70
- *
71
- * Assegnando "{}" a questo input, la Smart selection viene gestita ma la gestione grafica è affidata all'utente,
72
- * ad esempio usando dei **NodeHTMLTemplates** che definiscano selettori su nodi ":selected"
73
- *
74
- * @default {'overlay-color':'blue','overlay-opacity':0.5,'overlay-padding':7}
75
- */
76
- this.SmartSelectionStyles = null;
77
- /**
78
- * Periodo di throttle da quando viene effettuato un resize a quando ricalcolare le dimensioni del diagramma.
79
- *
80
- * 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.
81
- */
82
- this.ResizeThrottleTime = 0;
83
- /**
84
- * Fornisce il global della libreria (namespace **cytoscape**) e si aspetta che dopo operazioni di importazione
85
- * lasciate all'utente vengano aggiunti tutti i moduli desiderati.
86
- *
87
- * È **fondamentale** che il primo parametro (il nome del modulo) sia uguale a ciò di cui viene fatto il require in modo che la libreria
88
- * possa controllare che il modulo importato non sia già stato importato in precedenza
89
- *
90
- * ## Esempio:
91
- *
92
- * ```typescript
93
- * (global) => {
94
- * return import("cytoscape-extension-library").then(module => global.use("cytoscape-extension-library", module.default));
95
- *
96
- * ...
97
- * }
98
- * ```
99
- */
100
- this.ExtensionModulesImporter = null;
101
- /**
102
- * Fornisce l'istanza attuale di Cytoscape da cui è possibile prendere le librerie di estensione caricate in **ExtensionModulesImporter**
103
- * e configurarle in base ai comportamenti specifici
104
- *
105
- * ## Esempio:
106
- *
107
- * ```typescript
108
- * (cytoscapeCore) => {
109
- * // Fare questo lavoro per ogni estensione caricata
110
- * let extensionConfiguration = { ... };
111
- * let extensionInstance = cytoscapeCore.extensionLibrary(extensionConfiguration);
112
- * extensionInstance.doSomethingSpecificToThisExtension();
113
- *
114
- * ...
115
- * }
116
- * ```
117
- */
118
- this.ExtensionModulesApplyer = null;
119
- /**
120
- * Evento lanciato al click di un nodo, contiene l'oggetto **data** del nodo in questione
121
- */
122
- this.onNodeClick = new EventEmitter();
123
- /**
124
- * Evento lanciato alla selezione o deselezione di un nodo, contiene l'oggetto **data** del nodo in questione e informazioni sul suo stato di selezione
125
- */
126
- this.onNodeSelection = new EventEmitter();
127
- /**
128
- * Evento lanciato al termine del Layouting. Se si vuole eseguire codice dopo che il Layout è fatto e completamente graficato, questo è il punto
129
- */
130
- this.onLayoutDone = new EventEmitter();
131
- /**
132
- * Evento lanciato al termine del caricamento del diagramma
133
- */
134
- this.onLoaded = new EventEmitter();
135
- /**
136
- * Indica se il rendering del diagramma è terminato
137
- */
138
- this.Rendered = false;
139
- /**
140
- * Api dell'estensione expand-collapse per permettere di effettuare operazioni dall'esterno del diagramma. Vengono valorizzate se **UseExpandCollapse** è **true**
141
- */
142
- this.ExpandCollapseApi = null;
143
- /**
144
- * Api dell'estensione html-node per permettere di effettuare operazioni dall'esterno del diagramma. Vengono valorizzate se sono impostati dei **NodeHTMLTemplates**
145
- */
146
- this.HtmlNodeApi = null;
147
- }
148
- /**
149
- * @ignore
150
- *
151
- * Angular Pipeline
152
- */
153
- ngAfterViewInit() {
154
- if (!this.service || !this.dispatcher)
155
- throw "Il modulo @esfaenza/diagrams non è stato importato con il forRoot();";
156
- this.dispatchLoadChart();
157
- }
158
- /**
159
- * All'onDestroy ripulisco la memoria dal diagramma
160
- */
161
- ngOnDestroy() {
162
- this.resizeObserver.dispose();
163
- this.resizeObserver = null;
164
- if (this.cy) {
165
- this.service.log("I", "Diagram" + " " + this.name + ": Unloading destroyed diagram", false);
166
- this.cy.destroy();
167
- this.dispatcher.deregister(this.name);
168
- }
169
- else
170
- this.service.log("I", "Chart " + this.name + ": Unloading uncreated chart component. It probably was a duplicated", false);
171
- }
172
- /**
173
- * Registra il diagramma attuale nel Dispatcher in modo che venga caricato appena possibile
174
- */
175
- dispatchLoadChart() {
176
- this.dispatcher.register(this.name, () => { return this.render(); });
177
- }
178
- /**
179
- * @ignore
180
- *
181
- * Angular Pipeline: Gestione ri-graficazione del diagramma, se possibile
182
- */
183
- ngOnChanges(changes) {
184
- let toCheck = ["Templates", "UseContextMenu", "ContextMenuOptions", "UseExpandCollapse", "ExpandCollapseOptions", "NodeStyles", "EdgeStyles", "NativeOptions"];
185
- if (this.Rendered && toCheck.some(t => changes[t]))
186
- 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");
187
- let elementChanges = changes["Elements"];
188
- let layoutChanges = changes["Layout"];
189
- if (elementChanges && !elementChanges.firstChange) {
190
- this.service.log("I", "Elements have been changed after diagram initialization");
191
- // Cambiamento agli Elementi: ripulisco gli elementi vecchi, prendo i nuovi, li sistemo e li riassegno.
192
- // Se il nuovo Input Elements è roba strana mi limito a ripulire il diagramma
193
- // Se cytoscape aveva già degli elementi precedentemente ne prendo le posizioni in modo da ridisegnarli partendo dallo stesso punto (carino per le animazioni)
194
- let elements = elementChanges === null || elementChanges === void 0 ? void 0 : elementChanges.currentValue;
195
- let previous_elements = this.PreserveElementsPosition ? this.cy.nodes() : null;
196
- this.cy.elements().remove();
197
- if (elements && elements.length && elements.length > 0) {
198
- this.reviewCytoscapeElements(elements, previous_elements);
199
- this.cy.add(elements);
200
- if (this.SmartSelection)
201
- this.setupElementsSelectionIfNeeded();
202
- // Se solo gli elementi cambiano, riapplico il Layout precedente
203
- if (!layoutChanges && this.LastLayout) {
204
- // Se devo animare le modifche al layout forzo il parametro relativo
205
- if (this.AnimateLayoutChanges)
206
- this.LastLayout.animate = true;
207
- this.cy.layout(this.LastLayout).run();
208
- }
209
- }
210
- }
211
- // Se il layout cambia lo applico e me lo salvo come layout precedente per il futuro
212
- if (layoutChanges && !layoutChanges.firstChange) {
213
- this.service.log("I", "Layout have been changed after diagram initialization");
214
- this.LastLayout = JSON.parse(JSON.stringify(layoutChanges.currentValue));
215
- this.cy.layout(this.LastLayout).run();
216
- }
217
- }
218
- /**
219
- * Effettua il rendering del diagramma
220
- */
221
- render() {
222
- return __awaiter(this, void 0, void 0, function* () {
223
- // Tiro fuori le opzioni con cui generare il diagramma
224
- let cyOptions = this.getCompletedOptions();
225
- this.NodesHierarchy = cyOptions.elements && cyOptions.elements.some(t => t.data.parent);
226
- // Carico eventuali classi di estensione che servono
227
- yield this.performModulesLoading();
228
- // Genero il diagramma
229
- this.cy = cytoscape(cyOptions);
230
- // Collego gli eventi al componente
231
- this.bindCytoscapeEvents();
232
- // Utilizzo le classi di estensione caricate precedentemente per fare il resto delle mie operazioni
233
- this.performOperationsWithLoadedModules();
234
- // Imposto la variabile Rendered a true in modo che se da adesso vengono fatte modifiche che dovrebbero causare un redraw posso accorgermene
235
- // e mandare a cagare lo stronzo di turno
236
- this.Rendered = true;
237
- // Se devo aggiornare in automatico in base alla dimensione del contenitore collego il ResizeObserver
238
- if (this.AutoupdateSize)
239
- this.listenOnChanges();
240
- if (this.SmartSelection) {
241
- this.setupSelectionStyles();
242
- this.setupElementsSelectionIfNeeded();
243
- }
244
- this.onLoaded.emit();
245
- });
246
- }
247
- /**
248
- * Prende tutti gli elementi appena assegnati, e se qualcuno era selezionato la situazione viene persistita su cytoscape
249
- */
250
- setupElementsSelectionIfNeeded() {
251
- for (let i = 0; i < this.Elements.length; i++) {
252
- let eldata = this.Elements[i].data;
253
- if (eldata.__selected) {
254
- let el = this.cy.$id(eldata.id);
255
- el.select();
256
- }
257
- }
258
- }
259
- /**
260
- * Carica gli stili per mostrare carina la selezione dei nodi
261
- */
262
- setupSelectionStyles() {
263
- let cssItem = this.SmartSelectionStyles || {
264
- 'overlay-color': 'blue',
265
- 'overlay-opacity': 0.5,
266
- 'overlay-padding': 7
267
- };
268
- // Backdoor per poter assegnare "{}" a SmartSelectionStyles in modo di utilizzare la smart selection ma senza che nessuno stile venga applicato
269
- // ad esempio qualora si volesse utilizzare l'htmlnode per gestire la grafica degli elementi selezionati
270
- if (cssItem['overlay-color'] && cssItem['overlay-opacity'] && cssItem['overlay-padding'])
271
- this.cy.style().selector('node:selected').css(cssItem);
272
- }
273
- /**
274
- * Registra l'ascolto al contenitore del grafico e in caso di modifiche alla dimensione, al massimo una volta ogni 500 millisecondi, lo ridisegna
275
- */
276
- listenOnChanges() {
277
- this.resizeObserver = new ResizeSensor(this.cyGraph.nativeElement, () => {
278
- this.exts.throttle(this.name, this.onContainerSizeChanged.bind(this), this.ResizeThrottleTime);
279
- });
280
- }
281
- /**
282
- * Funzione che si occupa di gestire il repaint del diagramma
283
- */
284
- onContainerSizeChanged() {
285
- this.service.log("I", "Diagram container size has changed, redrawing");
286
- this.cy.resize();
287
- this.cy.fit();
288
- }
289
- /**
290
- * Collega tutti gli eventi che mi possono servire e li espone in output
291
- */
292
- bindCytoscapeEvents() {
293
- this.cy.bind('click', 'node', (event) => {
294
- let targetData = event.target.data();
295
- if (this.SmartSelection) {
296
- let id = targetData.id;
297
- let el = this.cy.$id(id);
298
- let selected = el.selected();
299
- el.selectify();
300
- if (selected)
301
- el.unselect();
302
- else
303
- el.select();
304
- el.unselectify();
305
- // Questo va anche nella lista degli elementi originali (this.Elements) dato che cytoscape li prende per riferimento (bbbbbravo cyto-chan)
306
- el.data("__selected", !selected);
307
- }
308
- this.onNodeClick.emit({ data: targetData });
309
- });
310
- this.cy.bind('select', 'node', (event) => {
311
- let targetData = event.target.data();
312
- this.onNodeSelection.emit({ data: targetData, selected: true });
313
- });
314
- this.cy.bind('layoutstop', (event) => {
315
- this.onLayoutDone.emit();
316
- });
317
- this.cy.bind('unselect', 'node', (event) => {
318
- let targetData = event.target.data();
319
- this.onNodeSelection.emit({ data: targetData, selected: false });
320
- });
321
- // Altri eventi...
322
- }
323
- /**
324
- * Metodo che serve per caricare tutte le estensioni della libreria in base a ciò che viene utilizzato
325
- */
326
- performModulesLoading() {
327
- return __awaiter(this, void 0, void 0, function* () {
328
- if (this.Layout.name == 'dagre')
329
- yield this.loadInternal("cytoscape-dagre");
330
- if (this.NodeHTMLTemplates && this.NodeHTMLTemplates.length > 0)
331
- yield this.loadInternal("cytoscape-html-node");
332
- if (this.UseContextMenu)
333
- yield this.loadInternal("cytoscape-cxtmenu");
334
- if (this.NodesHierarchy && this.UseExpandCollapse)
335
- yield this.loadInternal("cytoscape-expand-collapse");
336
- if (this.ExtensionModulesImporter) {
337
- // Wrappo il namespace in modo che possa dire la mia sul fatto che l'utente aggiunga un modulo o meno :D
338
- var wrappedCytoscape = {
339
- use: (moduleName, module) => {
340
- if (!module)
341
- this.service.log("E", this.service.loc("Received an undefined module. Make sure you are correctly loading it") + ": " + moduleName, false);
342
- if (["cytoscape-dagre", "cytoscape-html-node", "cytoscape-cxtmenu", "cytoscape-expand-collapse"].includes(moduleName))
343
- 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);
344
- else
345
- cytoscape.use(module);
346
- }
347
- };
348
- yield this.ExtensionModulesImporter(wrappedCytoscape);
349
- }
350
- });
351
- }
352
- /**
353
- * Metodo che serve per caricare tutte le estensioni della libreria in base a ciò che viene utilizzato con le opzioni definite dagli Input
354
- */
355
- performOperationsWithLoadedModules() {
356
- let anyCy = this.cy;
357
- // Utilizzo del layout, lo salvo per poterlo riutilizzare in futuro
358
- if (this.Layout) {
359
- this.LastLayout = JSON.parse(JSON.stringify(this.Layout));
360
- this.cy.layout(this.LastLayout).run();
361
- }
362
- // Utilizzo dell'HTML node
363
- if (this.NodeHTMLTemplates && this.NodeHTMLTemplates.length > 0) {
364
- this.HtmlNodeApi = anyCy.htmlnode();
365
- this.HtmlNodeApi.createHtmlNode(cytoscape, this.cy, this.NodeHTMLTemplates);
366
- }
367
- // Utilizzo del Context Menu
368
- if (this.UseContextMenu)
369
- this.ContextMenuOptions.forEach(o => { anyCy.cxtmenu(o); });
370
- // Utilizzo dell'expand collapse solo quando c'è una gerarchia di nodi
371
- if (this.NodesHierarchy && this.UseExpandCollapse)
372
- this.ExpandCollapseApi = anyCy.expandCollapse(this.ExpandCollapseOptions);
373
- // Utilizzo di estensioni extra, implementazione affidata al programmatore
374
- if (this.ExtensionModulesApplyer)
375
- this.ExtensionModulesApplyer(this.cy);
376
- }
377
- updateCardData() {
378
- if (!this.HtmlNodeApi) {
379
- this.service.log("E", "Cannot update NodeHTMLTemplates as they don't seem to be used");
380
- return;
381
- }
382
- this.HtmlNodeApi.update();
383
- }
384
- /**
385
- * Metodo interno per il caricamento dei moduli di estensione
386
- *
387
- * @param {'cytoscape-expand-collapse' | 'cytoscape-cxtmenu' | 'cytoscape-html-node' | 'cytoscape-dagre'} moduleId Modulo da caricare
388
- */
389
- loadInternal(moduleId) {
390
- return __awaiter(this, void 0, void 0, function* () {
391
- let toLoad = yield this.service.importIfNeeded(moduleId);
392
- if (toLoad)
393
- cytoscape.use(toLoad);
394
- });
395
- }
396
- /**
397
- * Metodo che basandosi sulle opzioni native eventualmente assegnate le completa con gli Input addizionali
398
- *
399
- * @returns {cy_.CytoscapeOptions} Opzioni finali unite da Input ed opzioni native
400
- */
401
- getCompletedOptions() {
402
- var opts = this.NativeOptions || {};
403
- opts.container = this.cyGraph.nativeElement;
404
- opts.style = opts.style || [];
405
- // Per tutte le cose per cui gli Input hanno priorità sovrascrivo gli originali delle opzioni
406
- if (this.NodeStyles || this.EdgeStyles) {
407
- opts.style = [];
408
- if (this.NodeStyles)
409
- opts.style.push({ selector: 'node', css: this.NodeStyles });
410
- if (this.EdgeStyles)
411
- opts.style.push({ selector: 'edge', css: this.EdgeStyles });
412
- }
413
- if (this.Elements)
414
- opts.elements = this.Elements;
415
- this.reviewCytoscapeElements(opts.elements);
416
- if (this.Layout)
417
- opts.layout = this.Layout;
418
- if (this.Readonly) {
419
- // Questo coso fa effetti strani....
420
- //opts.autolock = true;
421
- opts.autoungrabify = true;
422
- opts.autounselectify = false;
423
- opts.boxSelectionEnabled = true;
424
- opts.userZoomingEnabled = false;
425
- opts.userPanningEnabled = false;
426
- }
427
- return opts;
428
- }
429
- /**
430
- * Aggiustamenti degli elementi di Cytoscape.
431
- *
432
- * I nodi non vengono toccati.
433
- *
434
- * Per ogni edge viene controllato se è specificata una sorgente ed una destinazione, in caso contrario si cerca di dedurli dall'ID
435
- *
436
- * @param {cytoscape.ElementDefinition[]} elements Elementi da sistemare
437
- */
438
- reviewCytoscapeElements(elements, prevPositions) {
439
- let hasPreviousPositions = prevPositions && prevPositions.length > 0;
440
- let positionCache = {};
441
- if (hasPreviousPositions) {
442
- for (let i = 0; i < prevPositions.length; i++) {
443
- let item = prevPositions[i];
444
- if (!positionCache[item.data().id])
445
- positionCache[item.data().id] = item.position();
446
- }
447
- }
448
- for (let i = 0; i < elements.length; i++) {
449
- let el = elements[i];
450
- if (el.group == "edges" && (!el.data.source && !el.data.target)) {
451
- if (!el.data.id.includes("-"))
452
- 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}");
453
- else {
454
- var sourceTarget = el.data.id.split('-');
455
- el.data.source = sourceTarget[0].trim();
456
- el.data.target = sourceTarget[1].trim();
457
- }
458
- }
459
- if (hasPreviousPositions && el.group == "nodes")
460
- el.position = positionCache[el.data.id];
461
- }
462
- }
463
- }
464
- EsDiagramComponent.decorators = [
465
- { type: Component, args: [{
466
- selector: 'es-diagram',
467
- template: "<div #graph class=\"graph-wrapper {{name}}\"></div>",
468
- styles: [".graph-wrapper{height:100%;width:100%}.html-node-notransition{transition:none!important;transform:none!important}\n"]
469
- },] }
470
- ];
471
- EsDiagramComponent.ctorParameters = () => [
472
- { type: EsDiagramService, decorators: [{ type: Optional }] },
473
- { type: EsDiagramDispatcher, decorators: [{ type: Optional }] },
474
- { type: ReactiveExtensions }
475
- ];
476
- EsDiagramComponent.propDecorators = {
477
- cyGraph: [{ type: ViewChild, args: ['graph',] }],
478
- name: [{ type: Input }],
479
- UseContextMenu: [{ type: Input }],
480
- ContextMenuOptions: [{ type: Input }],
481
- UseExpandCollapse: [{ type: Input }],
482
- ExpandCollapseOptions: [{ type: Input }],
483
- NativeOptions: [{ type: Input }],
484
- Elements: [{ type: Input }],
485
- NodeStyles: [{ type: Input }],
486
- EdgeStyles: [{ type: Input }],
487
- Readonly: [{ type: Input }],
488
- AutoupdateSize: [{ type: Input }],
489
- PreserveElementsPosition: [{ type: Input }],
490
- AnimateLayoutChanges: [{ type: Input }],
491
- SmartSelection: [{ type: Input }],
492
- SmartSelectionStyles: [{ type: Input }],
493
- ResizeThrottleTime: [{ type: Input }],
494
- Layout: [{ type: Input }],
495
- NodeHTMLTemplates: [{ type: Input }],
496
- ExtensionModulesImporter: [{ type: Input }],
497
- ExtensionModulesApplyer: [{ type: Input }],
498
- onNodeClick: [{ type: Output }],
499
- onNodeSelection: [{ type: Output }],
500
- onLayoutDone: [{ type: Output }],
501
- onLoaded: [{ type: Output }]
502
- };
503
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtZGlhZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1kaWFncmFtcy9zcmMvbGliL2NvbXBvbmVudHMvZXMtZGlhZ3JhbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxRQUFRLEVBQUUsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFnQmpJLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RSxPQUFPLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxjQUFjLENBQUEsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBRXBDOztHQUVHO0FBTUgsTUFBTSxPQUFPLGtCQUFrQjtJQTBON0I7Ozs7T0FJRztJQUNILFlBQWdDLE9BQXlCLEVBQXNCLFVBQStCLEVBQVUsSUFBd0I7UUFBaEgsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFBc0IsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFvQjtRQXhOaEo7O1dBRUc7UUFDTSxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRTNCOztXQUVHO1FBQ00sbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFTekM7O1dBRUc7UUFDTSxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFPNUM7Ozs7V0FJRztRQUNNLGtCQUFhLEdBQStCLEVBQUUsQ0FBQztRQXNCeEQ7O1dBRUc7UUFDTSxtQkFBYyxHQUFZLElBQUksQ0FBQztRQUV4Qzs7OztX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QVE7WUEvT2QsbUJBQW1CLHVCQStPa0MsUUFBUTtZQTVPN0Qsa0JBQWtCOzs7c0JBa0J4QixTQUFTLFNBQUMsT0FBTzttQkFLakIsS0FBSzs2QkFLTCxLQUFLO2lDQU9MLEtBQUs7Z0NBS0wsS0FBSztvQ0FLTCxLQUFLOzRCQU9MLEtBQUs7dUJBS0wsS0FBSzt5QkFLTCxLQUFLO3lCQUtMLEtBQUs7dUJBS0wsS0FBSzs2QkFLTCxLQUFLO3VDQU9MLEtBQUs7bUNBT0wsS0FBSzs2QkFZTCxLQUFLO21DQVdMLEtBQUs7aUNBT0wsS0FBSztxQkFLTCxLQUFLO2dDQU9MLEtBQUs7dUNBbUJMLEtBQUs7c0NBbUJMLEtBQUs7MEJBS0wsTUFBTTs4QkFLTixNQUFNOzJCQUtOLE1BQU07dUJBS04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPcHRpb25hbCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5cclxuaW1wb3J0IHsgQ29udGV4dE1lbnVPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzL2NvbXBvbmVudC9jb250ZXh0bWVudS9Db250ZXh0TWVudU9wdGlvbnMnO1xyXG5pbXBvcnQgeyBFeHBhbmRDb2xsYXBzZU9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbHMvY29tcG9uZW50L2dyb3VwaW5nL0V4cGFuZENvbGxhcHNlT3B0aW9ucyc7XHJcbmltcG9ydCB7IE5vZGVIVE1MVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbHMvY29tcG9uZW50L25vZGVzL05vZGVIVE1MVGVtcGxhdGUnO1xyXG5cclxuaW1wb3J0IHsgQnJlYWR0aEZpcnN0TGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9CcmVhZHRoRmlyc3RMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IENpcmNsZUxheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvQ2lyY2xlTGF5b3V0T3B0aW9uc0ltcGwnO1xyXG5pbXBvcnQgeyBDb25jZW50cmljTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9Db25jZW50cmljTGF5b3V0T3B0aW9uc0ltcGwnO1xyXG5pbXBvcnQgeyBDb3NlTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9Db3NlTGF5b3V0T3B0aW9uc0ltcGwnO1xyXG5pbXBvcnQgeyBEYWdyZUxheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvRGFncmVMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IEdyaWRMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0dyaWRMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IE51bGxMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL051bGxMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IFByZXNldExheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvUHJlc2V0TGF5b3V0T3B0aW9uc0ltcGwnO1xyXG5pbXBvcnQgeyBSYW5kb21MYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL1JhbmRvbUxheW91dE9wdGlvbnNJbXBsJztcclxuXHJcbmltcG9ydCB7IEVzRGlhZ3JhbVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9lcy1kaWFncmFtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFc0RpYWdyYW1EaXNwYXRjaGVyIH0gZnJvbSAnLi4vc2VydmljZXMvZXMtZGlhZ3JhbS5kaXNwYXRjaGVyJztcclxuaW1wb3J0IHsgUmVzaXplU2Vuc29yIH0gZnJvbSBcIi4uL2V4dGVuc2lvbnMvUmVzaXplU2Vuc29yXCI7XHJcblxyXG5pbXBvcnQgeyBSZWFjdGl2ZUV4dGVuc2lvbnMgfSBmcm9tICcuLi9leHRlbnNpb25zL1JlYWN0aXZlRXh0ZW5zaW9ucyc7XHJcblxyXG5pbXBvcnQgKiBhcyBjeV8gZnJvbSAnY3l0b3NjYXBlJztcclxuLyoqIEBpZ25vcmUgKi9jb25zdCBjeXRvc2NhcGUgPSBjeV87XHJcblxyXG4vKipcclxuICogQ29tcG9uZW50ZSBjaGUgc2kgb2NjdXBhIGRpIGdyYWZpY2FyZSB1biBkaWFncmFtbWEgZSBkaSBnZXN0aXJuZSBpbCBjaWNsbyBkaSB2aXRhXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VzLWRpYWdyYW0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lcy1kaWFncmFtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9lcy1kaWFncmFtLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEVzRGlhZ3JhbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJpZmVyaW1lbnRvIGFsbCdvZ2dldHRvIEhUTUwgc3UgY3VpIGNyZWFyZSBpbCBkaWFncmFtbWFcclxuICAgKi9cclxuICBAVmlld0NoaWxkKCdncmFwaCcpIGN5R3JhcGg6IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8qKlxyXG4gICAqIE5vbWUgZGVsIGRpYWdyYW1tYSwgZm9uZGFtZW50YWxlIGFzc2VnbmFybG8gcGVyIHBlcm1ldHRlcmUgYWxsYSBsaWJyZXJpYSBkaSBzY2hlZHVsYXJuZSBsYSBjcmVhemlvbmVcclxuICAgKi9cclxuICBASW5wdXQoKSBuYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2Egc2UgdXRpbGl6emFyZSBpbCBtZW7DuSBjb250ZXN0dWFsZSBhIHJ1b3RhIGF0dG9ybm8gYWQgb2duaSBub2RvXHJcbiAgICovXHJcbiAgQElucHV0KCkgVXNlQ29udGV4dE1lbnU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIGxlIG9wemlvbmkgZGVsIG1lbsO5IGNvbnRlc3R1YWxlIHF1YWxvcmEgKipVc2VDb250ZXh0TWVudSoqIGZvc3NlICoqdHJ1ZSoqLlxyXG4gICAqIFxyXG4gICAqIE9nbmkgZWxlbWVudG8gZGkgcXVlc3RvIGFycmF5IMOoIHVuIHNlbGV0dG9yZSBjb24gaWwgbWVudSBkYSBtb3N0cmFyZSBwZXIgcXVlbGxhIGNhc2lzdGljYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIENvbnRleHRNZW51T3B0aW9uczogQ29udGV4dE1lbnVPcHRpb25zW107XHJcblxyXG4gIC8qKlxyXG4gICAqIERpY2UgYWwgY29tcG9uZW50ZSBzZSBpbCBkaWFncmFtbWEgZGV2ZSB1dGlsaXp6YXJlIGlsIHNpc3RlbWEgZGkgZXN0ZW5zaW9uZSBwZXIgbCdleHBhbmQgZSBjb2xsYXBzZSBkZWkgZ3J1cHBpXHJcbiAgICovXHJcbiAgQElucHV0KCkgVXNlRXhwYW5kQ29sbGFwc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogT3B6aW9uaSBuYXRpdmUgZGVsbCdlc3RlbnNpb25lIGV4cGFuZC1jb2xsYXBzZSwgdmVuZ29ubyBvdnZpYW1lbnRlIHV0aWxpenphdGUgc29sbyBzZSAqKlVzZUV4cGFuZENvbGxhcHNlKiogw6ggKip0cnVlKipcclxuICAgKi9cclxuICBASW5wdXQoKSBFeHBhbmRDb2xsYXBzZU9wdGlvbnM6IEV4cGFuZENvbGxhcHNlT3B0aW9ucztcclxuXHJcbiAgLyoqXHJcbiAgICogQmxvY2NvIGNvbXBsZXRvIGRlbGxlIG9wemlvbmksIGFsdGVybmF0aXZvIGFsbCdhc3NlZ25hemlvbmUgZGkgKipFbGVtZW50cyoqLCAqKk5vZGVTdHlsZXMqKiwgKipFZGdlU3R5bGVzKiosIGUgKipMYXlvdXQqKi5cclxuICAgKiBcclxuICAgKiBRdWFsb3JhIGVudHJhbWJlIHZlbmlzc2VybyBzcGVjaWZpY2F0ZSB2ZXJyw6AgZWZmZXR0dWF0YSB1bid1bmlvbmUgZnJhIHF1ZXN0ZSBvcHppb25pIGUgcXVlbGxlIHNwZWNpZmljYXRlLCBkYW5kbyBwcmlvcml0w6AgYWxsZSBzcGVjaWZpY2F0ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIE5hdGl2ZU9wdGlvbnM6IGN5dG9zY2FwZS5DeXRvc2NhcGVPcHRpb25zID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluaXppb25lIGRlZ2xpIGVsZW1lbnRpIGRhIG1vc3RyYXJlIG5lbCBkaWFncmFtbWFcclxuICAgKi9cclxuICBASW5wdXQoKSBFbGVtZW50czogY3l0b3NjYXBlLkVsZW1lbnREZWZpbml0aW9uW107XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluaXppb25lIGRlZ2xpIHN0aWxpIGRlaSBub2RpXHJcbiAgICovXHJcbiAgQElucHV0KCkgTm9kZVN0eWxlczogY3l0b3NjYXBlLkNzcy5Ob2RlO1xyXG5cclxuICAvKipcclxuICAgKiBEZWZpbml6aW9uZSBkZWdsaSBzdGlsaSBkZWkgY29sbGVnYW1lbnRpIGZyYSBpIG5vZGlcclxuICAgKi9cclxuICBASW5wdXQoKSBFZGdlU3R5bGVzOiBjeXRvc2NhcGUuQ3NzLkVkZ2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluIHVuIGRpYWdyYW1tYSBpbiBzb2xhIGxldHR1cmEgdHV0dGUgbGUgaW50ZXJhemlvbmkgdXRlbnRlIHNvbm8gYW5udWxsYXRlXHJcbiAgICovXHJcbiAgQElucHV0KCkgUmVhZG9ubHk6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIEFnZ2lvcm5hIGF1dG9tYXRpY2FtZW50ZSBsZSBkaW1lbnNpb25pIGRlbCBkaWFncmFtbWEgcXVhbmRvIGNhbWJpYW5vIGxlIGRpbWVuc2lvbmkgZGVsbGEgZmluZXN0cmFcclxuICAgKi9cclxuICBASW5wdXQoKSBBdXRvdXBkYXRlU2l6ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBkaSBtYW50ZW5lcmUgbGEgcG9zaXppb25lIGRlaSBub2RpIHF1YWxvcmEgdmVuaXNzZXJvIGNhbWJpYXRpIGRhbGwnSW5wdXQgKipFbGVtZW50cyoqLlxyXG4gICAqIFxyXG4gICAqIFNlIGwnSUQgZGkgdW4gbm9kbyDDqCB1Z3VhbGUgYWxsJ0lEIGRpIHVuIG5vZG8gcHJlc2VudGUgaW4gcHJlY2VkZW56YSwgaWwgbnVvdm8gbm9kbyBuZSBlcmVkaXRlcsOgIGxhIHBvc2l6aW9uZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIFByZXNlcnZlRWxlbWVudHNQb3NpdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFF1YWxvcmEgdmVuaXNzZSBtb2RpZmljYXRvIGwnSW5wdXQgKipFbGVtZW50cyoqLCBwaXV0dG9zdG8gY2hlIG1ldHRlcmUgc2VtcGxpY2VtZW50ZSBpbCBudW92byBFbGVtZW50byBpbiBiYXNlIGFsIExheW91dCBwcmVjZWRlbnRlLCBhcHBsaWNhIGFuY2hlIHVuJ2FuaW1hemlvbmUgXHJcbiAgICogXHJcbiAgICogRnVuemlvbmEgc29sYW1lbnRlIHNlIGlsICoqTGF5b3V0KiogY29ycmVudGUgZGVsIGRpYWdyYW1tYSBzdXBwb3J0YSBsZSBhbmltYXppb25pXHJcbiAgICovXHJcbiAgQElucHV0KCkgQW5pbWF0ZUxheW91dENoYW5nZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBBdHRpdmEgdW5hIG1vZGFsaXTDoCBkaSBzZWxlemlvbmUgXCJzbWFydFwiLi4uIG8gcGVybG9tZW5vIFwic21hcnRlclwiIGRlbCBkZWZhdWx0IGRpIEN5dG9zY2FwZS5cclxuICAgKiBcclxuICAgKiAtIElsIGNsaWNrIGRpIHVuIGVsZW1lbnRvIG5vbiBzZWxlemlvbmF0byBsbyBzZWxlemlvbmFcclxuICAgKiAtIElsIGNsaWNrIGRpIHVuIGVsZW1lbnRvIHNlbGV6aW9uYXRvIGxvIGRlc2VsZXppb25hXHJcbiAgICogLSBMbyBzdGF0byBkaSBzZWxlemlvbmUgdmllbmUgcGVyc2lzdGl0byBzdWxsJ29nZ2V0dG8gb3JpZ2luYWxlIGludmVjZSBkaSByaW1hbmVyZSBpbiB1biBpbnRlcm5hbFxyXG4gICAqIC0gQWxsJ2Fzc2VnbmF6aW9uZSBkaSBvZ2dldHRpIHNlbGV6aW9uYXRpLCBxdWVzdGkgdmVuZ29ubyBtYXJjYXRpIGNvcnJldHRhbWVudGUgY29uIGwnb3ZlcmxheSBkaSBzZWxlemlvbmVcclxuICAgKiBcclxuICAgKiBOLkI6IGxhIGNoaWFtYXRhIGFsbCdldmVudG8gKipvbk5vZGVDbGljayoqIGF2dmllbmUgKipET1BPKiogbGEgZ2VzdGlvbmUgZGVsbGEgc2VsZXppb25lXHJcbiAgICovXHJcbiAgQElucHV0KCkgU21hcnRTZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ1NTIHBlciBsYSBncmFmaWNhemlvbmUgZGVsbGEgc2VsZXppb25lIGRlaSBub2RpLiBRdWFuZG8gdW4gbm9kbyB2ZXJyw6Agc2VsZXppb25hdG8gYXZyw6Agc29wcmEgZGkgc2UgdW4gb3ZlcmxheSBjaGUgJ3Nib3JkYScgZGkgKipvdmVybGF5LXBhZGRpbmcqKiBwaXhlbCxcclxuICAgKiBkaSBjb2xvcmUgKipvdmVybGF5LWNvbG9yKiogZSBjb24gdW4gb3BhY2l0w6AgKipvdmVybGF5LW9wYWNpdHkqKlxyXG4gICAqIFxyXG4gICAqIEFzc2VnbmFuZG8gXCJ7fVwiIGEgcXVlc3RvIGlucHV0LCBsYSBTbWFydCBzZWxlY3Rpb24gdmllbmUgZ2VzdGl0YSBtYSBsYSBnZXN0aW9uZSBncmFmaWNhIMOoIGFmZmlkYXRhIGFsbCd1dGVudGUsXHJcbiAgICogYWQgZXNlbXBpbyB1c2FuZG8gZGVpICoqTm9kZUhUTUxUZW1wbGF0ZXMqKiBjaGUgZGVmaW5pc2Nhbm8gc2VsZXR0b3JpIHN1IG5vZGkgXCI6c2VsZWN0ZWRcIlxyXG4gICAqIFxyXG4gICAqIEBkZWZhdWx0IHsnb3ZlcmxheS1jb2xvcic6J2JsdWUnLCdvdmVybGF5LW9wYWNpdHknOjAuNSwnb3ZlcmxheS1wYWRkaW5nJzo3fVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIFNtYXJ0U2VsZWN0aW9uU3R5bGVzOiB7ICdvdmVybGF5LWNvbG9yJzogc3RyaW5nLCAnb3ZlcmxheS1vcGFjaXR5JzogbnVtYmVyLCAnb3ZlcmxheS1wYWRkaW5nJzogbnVtYmVyIH0gPSBudWxsXHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcmlvZG8gZGkgdGhyb3R0bGUgZGEgcXVhbmRvIHZpZW5lIGVmZmV0dHVhdG8gdW4gcmVzaXplIGEgcXVhbmRvIHJpY2FsY29sYXJlIGxlIGRpbWVuc2lvbmkgZGVsIGRpYWdyYW1tYS5cclxuICAgKiBcclxuICAgKiBQdcOyIGVzc2VyZSB0ZW51dG8gYSAwIChyZWRyYXcgaXN0YW50YW5lbykgZmluY2jDqSBub24gY2kgc29ubyBwcm9ibGVtaSBkaSBwcmVzdGF6aW9uaSBjb24gZXZlbnR1YWxtZW50ZSB0YW50aSByZXNpemUgYSBwb2NhIGRpc3RhbnphIGwndW5vIGRhbGwnYWx0cm8uXHJcbiAgICovXHJcbiAgQElucHV0KCkgUmVzaXplVGhyb3R0bGVUaW1lOiBudW1iZXIgPSAwO1xyXG5cclxuICAvKipcclxuICAgKiBMYXlvdXQgZGkgb3JkaW5hbWVudG8gZGVpIG5vZGlcclxuICAgKi9cclxuICBASW5wdXQoKSBMYXlvdXQ6IEJyZWFkdGhGaXJzdExheW91dE9wdGlvbnNJbXBsIHwgQ2lyY2xlTGF5b3V0T3B0aW9uc0ltcGwgfCBDb25jZW50cmljTGF5b3V0T3B0aW9uc0ltcGwgfFxyXG4gICAgQ29zZUxheW91dE9wdGlvbnNJbXBsIHwgRGFncmVMYXlvdXRPcHRpb25zSW1wbCB8IEdyaWRMYXlvdXRPcHRpb25zSW1wbCB8IE51bGxMYXlvdXRPcHRpb25zSW1wbCB8IFByZXNldExheW91dE9wdGlvbnNJbXBsIHxcclxuICAgIFJhbmRvbUxheW91dE9wdGlvbnNJbXBsO1xyXG5cclxuICAvKipcclxuICAgKiBUZW1wbGF0ZSBIVE1MIGRhIGFwcGxpY2FyZSBhaSBub2RpIHBlciBkYXJnbGkgc3RpbGkgcGFydGljb2xhcmksIGRpdmVyc2kgZGFsbGUgc2hhcGUgZGkgZGVmYXVsdFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIE5vZGVIVE1MVGVtcGxhdGVzOiBOb2RlSFRNTFRlbXBsYXRlW107XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm5pc2NlIGlsIGdsb2JhbCBkZWxsYSBsaWJyZXJpYSAobmFtZXNwYWNlICoqY3l0b3NjYXBlKiopIGUgc2kgYXNwZXR0YSBjaGUgZG9wbyBvcGVyYXppb25pIGRpIGltcG9ydGF6aW9uZSBcclxuICAgKiBsYXNjaWF0ZSBhbGwndXRlbnRlIHZlbmdhbm8gYWdnaXVudGkgdHV0dGkgaSBtb2R1bGkgZGVzaWRlcmF0aS4gXHJcbiAgICogXHJcbiAgICogw4ggKipmb25kYW1lbnRhbGUqKiBjaGUgaWwgcHJpbW8gcGFyYW1ldHJvIChpbCBub21lIGRlbCBtb2R1bG8pIHNpYSB1Z3VhbGUgYSBjacOyIGRpIGN1aSB2aWVuZSBmYXR0byBpbCByZXF1aXJlIGluIG1vZG8gY2hlIGxhIGxpYnJlcmlhXHJcbiAgICogcG9zc2EgY29udHJvbGxhcmUgY2hlIGlsIG1vZHVsbyBpbXBvcnRhdG8gbm9uIHNpYSBnacOgIHN0YXRvIGltcG9ydGF0byBpbiBwcmVjZWRlbnphXHJcbiAgICogXHJcbiAgICogIyMgRXNlbXBpbzpcclxuICAgKiBcclxuICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICogKGdsb2JhbCkgPT4ge1xyXG4gICAqICAgIHJldHVybiBpbXBvcnQoXCJjeXRvc2NhcGUtZXh0ZW5zaW9uLWxpYnJhcnlcIikudGhlbihtb2R1bGUgPT4gZ2xvYmFsLnVzZShcImN5dG9zY2FwZS1leHRlbnNpb24tbGlicmFyeVwiLCBtb2R1bGUuZGVmYXVsdCkpO1xyXG4gICAqIFxyXG4gICAqICAgIC4uLlxyXG4gICAqIH1cclxuICAgKiBgYGBcclxuICAgKi9cclxuICBASW5wdXQoKSBFeHRlbnNpb25Nb2R1bGVzSW1wb3J0ZXI6IChnbG9iYWw6IHsgdXNlOiAobW9kdWxlTmFtZTogc3RyaW5nLCBtb2R1bGU6IHZvaWQgfCBjeXRvc2NhcGUuRXh0KSA9PiB2b2lkIH0pID0+IFByb21pc2U8YW55PiA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm5pc2NlIGwnaXN0YW56YSBhdHR1YWxlIGRpIEN5dG9zY2FwZSBkYSBjdWkgw6ggcG9zc2liaWxlIHByZW5kZXJlIGxlIGxpYnJlcmllIGRpIGVzdGVuc2lvbmUgY2FyaWNhdGUgaW4gKipFeHRlbnNpb25Nb2R1bGVzSW1wb3J0ZXIqKlxyXG4gICAqIGUgY29uZmlndXJhcmxlIGluIGJhc2UgYWkgY29tcG9ydGFtZW50aSBzcGVjaWZpY2lcclxuICAgKiBcclxuICAgKiAjIyBFc2VtcGlvOlxyXG4gICAqIFxyXG4gICAqIGBgYHR5cGVzY3JpcHRcclxuICAgKiAoY3l0b3NjYXBlQ29yZSkgPT4ge1xyXG4gICAqICAgIC8vIEZhcmUgcXVlc3RvIGxhdm9ybyBwZXIgb2duaSBlc3RlbnNpb25lIGNhcmljYXRhXHJcbiAgICogICAgbGV0IGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24gPSB7IC4uLiB9O1xyXG4gICAqICAgIGxldCBleHRlbnNpb25JbnN0YW5jZSA9IGN5dG9zY2FwZUNvcmUuZXh0ZW5zaW9uTGlicmFyeShleHRlbnNpb25Db25maWd1cmF0aW9uKTtcclxuICAgKiAgICBleHRlbnNpb25JbnN0YW5jZS5kb1NvbWV0aGluZ1NwZWNpZmljVG9UaGlzRXh0ZW5zaW9uKCk7XHJcbiAgICogXHJcbiAgICogICAgLi4uXHJcbiAgICogfVxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEV4dGVuc2lvbk1vZHVsZXNBcHBseWVyOiAoY3l0b3NjYXBlQ29yZTogY3l0b3NjYXBlLkNvcmUpID0+IHZvaWQgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gbGFuY2lhdG8gYWwgY2xpY2sgZGkgdW4gbm9kbywgY29udGllbmUgbCdvZ2dldHRvICoqZGF0YSoqIGRlbCBub2RvIGluIHF1ZXN0aW9uZVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBvbk5vZGVDbGljazogRXZlbnRFbWl0dGVyPHsgZGF0YTogYW55IH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGRhdGE6IGFueSB9PigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gbGFuY2lhdG8gYWxsYSBzZWxlemlvbmUgbyBkZXNlbGV6aW9uZSBkaSB1biBub2RvLCBjb250aWVuZSBsJ29nZ2V0dG8gKipkYXRhKiogZGVsIG5vZG8gaW4gcXVlc3Rpb25lIGUgaW5mb3JtYXppb25pIHN1bCBzdW8gc3RhdG8gZGkgc2VsZXppb25lXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9uTm9kZVNlbGVjdGlvbjogRXZlbnRFbWl0dGVyPHsgZGF0YTogYW55LCBzZWxlY3RlZDogYm9vbGVhbiB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBkYXRhOiBhbnksIHNlbGVjdGVkOiBib29sZWFuIH0+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBsYW5jaWF0byBhbCB0ZXJtaW5lIGRlbCBMYXlvdXRpbmcuIFNlIHNpIHZ1b2xlIGVzZWd1aXJlIGNvZGljZSBkb3BvIGNoZSBpbCBMYXlvdXQgw6ggZmF0dG8gZSBjb21wbGV0YW1lbnRlIGdyYWZpY2F0bywgcXVlc3RvIMOoIGlsIHB1bnRvXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9uTGF5b3V0RG9uZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gbGFuY2lhdG8gYWwgdGVybWluZSBkZWwgY2FyaWNhbWVudG8gZGVsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBvbkxvYWRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAvKipcclxuICAgKiBWYXJpYWJpbGUgc3UgY3VpIHNhbHZhcnNpIHNlIGkgbm9kaSBoYW5ubyB1bmEgZ2VyYXJjaGlhIGEgZ3J1cHBpIG8gbm8uIFNlcnZlIHBlciBwb2kgY2FyaWNhcmUgbCdlc3RlbnNpb25lIGV4cGFuZC1jb2xsYXBzZSBxdWFsb3JhIGZvc3NlIHJpY2hpZXN0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgTm9kZXNIaWVyYXJjaHk6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBzZSBpbCByZW5kZXJpbmcgZGVsIGRpYWdyYW1tYSDDqCB0ZXJtaW5hdG9cclxuICAgKi9cclxuICBwcml2YXRlIFJlbmRlcmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIElzdGFuemEgZGVsIGRpYWdyYW1tYSBhdHR1YWxtZW50ZSBpbiB1c29cclxuICAgKi9cclxuICBwdWJsaWMgY3k6IGN5dG9zY2FwZS5Db3JlXHJcblxyXG4gIC8qKlxyXG4gICAqIEFwaSBkZWxsJ2VzdGVuc2lvbmUgZXhwYW5kLWNvbGxhcHNlIHBlciBwZXJtZXR0ZXJlIGRpIGVmZmV0dHVhcmUgb3BlcmF6aW9uaSBkYWxsJ2VzdGVybm8gZGVsIGRpYWdyYW1tYS4gVmVuZ29ubyB2YWxvcml6emF0ZSBzZSAqKlVzZUV4cGFuZENvbGxhcHNlKiogw6ggKip0cnVlKipcclxuICAgKi9cclxuICBwdWJsaWMgRXhwYW5kQ29sbGFwc2VBcGk6IGFueSA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwaSBkZWxsJ2VzdGVuc2lvbmUgaHRtbC1ub2RlIHBlciBwZXJtZXR0ZXJlIGRpIGVmZmV0dHVhcmUgb3BlcmF6aW9uaSBkYWxsJ2VzdGVybm8gZGVsIGRpYWdyYW1tYS4gVmVuZ29ubyB2YWxvcml6emF0ZSBzZSBzb25vIGltcG9zdGF0aSBkZWkgKipOb2RlSFRNTFRlbXBsYXRlcyoqXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBIdG1sTm9kZUFwaTogYW55ID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogT3NzZXJ2YXRvcmUgZGVsbGUgbW9kaWZpY2hlIGFsIGNvbnRlbml0b3JlIGRlbCBkaWFncmFtbWFcclxuICAgKi9cclxuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVTZW5zb3I7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJpZmVyaW1lbnRvIGFsbCd1bHRpbW8gbGF5b3V0IHV0aWxpenphdG8uIFZpZW5lIHJpYXBwbGljYXRvIHF1YWxvcmEgdmVuaXNzZSBjYW1iaWF0byBsJ0lucHV0ICoqRWxlbWVudHMqKi5cclxuICAgKiBcclxuICAgKiBOb24gdXRpbGl6em8gaWwgbWFrZUxheW91dHMgcGVyY2jDqSBhbHRyaW1lbnRpIHJpc2NoaWVyZWkgZGkgY3JlYXJlIHVuIGxheW91dCByaWZlcml0byBhIFggZWxlbWVudGksIG5lIGFnZ2l1bmdvIDEsIHJpYXBwbGljbyBpbCBMYXlvdXQgXHJcbiAgICogbWEgbWkgdmllbmUgcmlhcHBsaWNhdG8gYSBYIGVsZW1lbnRpIGludmVjZSBjaGUgWCArIDFcclxuICAgKi9cclxuICBwcml2YXRlIExhc3RMYXlvdXQ6IGN5dG9zY2FwZS5MYXlvdXRPcHRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBDb3N0cnV0dG9yZVxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBwcml2YXRlIHNlcnZpY2U6IEVzRGlhZ3JhbVNlcnZpY2UsIEBPcHRpb25hbCgpIHByaXZhdGUgZGlzcGF0Y2hlcjogRXNEaWFncmFtRGlzcGF0Y2hlciwgcHJpdmF0ZSBleHRzOiBSZWFjdGl2ZUV4dGVuc2lvbnMpIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlIFxyXG4gICAqIFxyXG4gICAqIEFuZ3VsYXIgUGlwZWxpbmVcclxuICAgKi9cclxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgaWYgKCF0aGlzLnNlcnZpY2UgfHwgIXRoaXMuZGlzcGF0Y2hlcilcclxuICAgICAgdGhyb3cgXCJJbCBtb2R1bG8gQGVzZmFlbnphL2RpYWdyYW1zIG5vbiDDqCBzdGF0byBpbXBvcnRhdG8gY29uIGlsIGZvclJvb3QoKTtcIjtcclxuXHJcbiAgICB0aGlzLmRpc3BhdGNoTG9hZENoYXJ0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGwnb25EZXN0cm95IHJpcHVsaXNjbyBsYSBtZW1vcmlhIGRhbCBkaWFncmFtbWFcclxuICAgKi9cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLmN5KSB7XHJcbiAgICAgIHRoaXMuc2VydmljZS5sb2coXCJJXCIsIFwiRGlhZ3JhbVwiICsgXCIgXCIgKyB0aGlzLm5hbWUgKyBcIjogVW5sb2FkaW5nIGRlc3Ryb3llZCBkaWFncmFtXCIsIGZhbHNlKTtcclxuICAgICAgdGhpcy5jeS5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5kZXJlZ2lzdGVyKHRoaXMubmFtZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuc2VydmljZS5sb2coXCJJXCIsIFwiQ2hhcnQgXCIgKyB0aGlzLm5hbWUgKyBcIjogVW5sb2FkaW5nIHVuY3JlYXRlZCBjaGFydCBjb21wb25lbnQuIEl0IHByb2JhYmx5IHdhcyBhIGR1cGxpY2F0ZWRcIiwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0cmEgaWwgZGlhZ3JhbW1hIGF0dHVhbGUgbmVsIERpc3BhdGNoZXIgaW4gbW9kbyBjaGUgdmVuZ2EgY2FyaWNhdG8gYXBwZW5hIHBvc3NpYmlsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGlzcGF0Y2hMb2FkQ2hhcnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc3BhdGNoZXIucmVnaXN0ZXIodGhpcy5uYW1lLCAoKSA9PiB7IHJldHVybiB0aGlzLnJlbmRlcigpOyB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmUgXHJcbiAgICogXHJcbiAgICogQW5ndWxhciBQaXBlbGluZTogR2VzdGlvbmUgcmktZ3JhZmljYXppb25lIGRlbCBkaWFncmFtbWEsIHNlIHBvc3NpYmlsZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogYW55IHtcclxuICAgIGxldCB0b0NoZWNrID0gW1wiVGVtcGxhdGVzXCIsIFwiVXNlQ29udGV4dE1lbnVcIiwgXCJDb250ZXh0TWVudU9wdGlvbnNcIiwgXCJVc2VFeHBhbmRDb2xsYXBzZVwiLCBcIkV4cGFuZENvbGxhcHNlT3B0aW9uc1wiLCBcIk5vZGVTdHlsZXNcIiwgXCJFZGdlU3R5bGVzXCIsIFwiTmF0aXZlT3B0aW9uc1wiXTtcclxuXHJcbiAgICBpZiAodGhpcy5SZW5kZXJlZCAmJiB0b0NoZWNrLnNvbWUodCA9PiBjaGFuZ2VzW3RdKSlcclxuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIldcIiwgXCJSZWRyYXcgYmFzZWQgb24gZHluYW1pYyBJbnB1dCBjaGFuZ2UgaXMgc3VwcG9ydGVkIG9ubHkgZm9yICdFbGVtZW50cycgYW5kICdMYXlvdXQnIGlucHV0cywgcGxlYXNlIGRlc3Ryb3kgdGhlIGNvbXBvbmVudCBhbmQgcmVjcmVhdGUgaXQgd2l0aCB0aGUgbmV3IHNldHRpbmdzXCIpO1xyXG5cclxuICAgIGxldCBlbGVtZW50Q2hhbmdlcyA9IGNoYW5nZXNbXCJFbGVtZW50c1wiXTtcclxuICAgIGxldCBsYXlvdXRDaGFuZ2VzID0gY2hhbmdlc1tcIkxheW91dFwiXTtcclxuICAgIGlmIChlbGVtZW50Q2hhbmdlcyAmJiAhZWxlbWVudENoYW5nZXMuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIklcIiwgXCJFbGVtZW50cyBoYXZlIGJlZW4gY2hhbmdlZCBhZnRlciBkaWFncmFtIGluaXRpYWxpemF0aW9uXCIpO1xyXG5cclxuICAgICAgLy8gQ2FtYmlhbWVudG8gYWdsaSBFbGVtZW50aTogcmlwdWxpc2NvIGdsaSBlbGVtZW50aSB2ZWNjaGksIHByZW5kbyBpIG51b3ZpLCBsaSBzaXN0ZW1vIGUgbGkgcmlhc3NlZ25vLiBcclxuICAgICAgLy8gU2UgaWwgbnVvdm8gSW5wdXQgRWxlbWVudHMgw6ggcm9iYSBzdHJhbmEgbWkgbGltaXRvIGEgcmlwdWxpcmUgaWwgZGlhZ3JhbW1hXHJcbiAgICAgIC8vIFNlIGN5dG9zY2FwZSBhdmV2YSBnacOgIGRlZ2xpIGVsZW1lbnRpIHByZWNlZGVudGVtZW50ZSBuZSBwcmVuZG8gbGUgcG9zaXppb25pIGluIG1vZG8gZGEgcmlkaXNlZ25hcmxpIHBhcnRlbmRvIGRhbGxvIHN0ZXNzbyBwdW50byAoY2FyaW5vIHBlciBsZSBhbmltYXppb25pKVxyXG4gICAgICBsZXQgZWxlbWVudHMgPSBlbGVtZW50Q2hhbmdlcz8uY3VycmVudFZhbHVlO1xyXG4gICAgICBsZXQgcHJldmlvdXNfZWxlbWVudHMgPSB0aGlzLlByZXNlcnZlRWxlbWVudHNQb3NpdGlvbiA/IDxhbnk+dGhpcy5jeS5ub2RlcygpIDogbnVsbDtcclxuXHJcbiAgICAgIHRoaXMuY3kuZWxlbWVudHMoKS5yZW1vdmUoKTtcclxuICAgICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLmxlbmd0aCAmJiBlbGVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5yZXZpZXdDeXRvc2NhcGVFbGVtZW50cyhlbGVtZW50cywgcHJldmlvdXNfZWxlbWVudHMpO1xyXG4gICAgICAgIHRoaXMuY3kuYWRkKGVsZW1lbnRzKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU21hcnRTZWxlY3Rpb24pXHJcbiAgICAgICAgICB0aGlzLnNldHVwRWxlbWVudHNTZWxlY3Rpb25JZk5lZWRlZCgpO1xyXG5cclxuICAgICAgICAvLyBTZSBzb2xvIGdsaSBlbGVtZW50aSBjYW1iaWFubywgcmlhcHBsaWNvIGlsIExheW91dCBwcmVjZWRlbnRlXHJcbiAgICAgICAgaWYgKCFsYXlvdXRDaGFuZ2VzICYmIHRoaXMuTGFzdExheW91dCkge1xyXG5cclxuICAgICAgICAgIC8vIFNlIGRldm8gYW5pbWFyZSBsZSBtb2RpZmNoZSBhbCBsYXlvdXQgZm9yem8gaWwgcGFyYW1ldHJvIHJlbGF0aXZvXHJcbiAgICAgICAgICBpZiAodGhpcy5BbmltYXRlTGF5b3V0Q2hhbmdlcylcclxuICAgICAgICAgICAgKDxhbnk+dGhpcy5MYXN0TGF5b3V0KS5hbmltYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICB0aGlzLmN5LmxheW91dCh0aGlzLkxhc3RMYXlvdXQpLnJ1bigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFNlIGlsIGxheW91dCBjYW1iaWEgbG8gYXBwbGljbyBlIG1lIGxvIHNhbHZvIGNvbWUgbGF5b3V0IHByZWNlZGVudGUgcGVyIGlsIGZ1dHVyb1xyXG4gICAgaWYgKGxheW91dENoYW5nZXMgJiYgIWxheW91dENoYW5nZXMuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIklcIiwgXCJMYXlvdXQgaGF2ZSBiZWVuIGNoYW5nZWQgYWZ0ZXIgZGlhZ3JhbSBpbml0aWFsaXphdGlvblwiKTtcclxuICAgICAgdGhpcy5MYXN0TGF5b3V0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsYXlvdXRDaGFuZ2VzLmN1cnJlbnRWYWx1ZSkpO1xyXG4gICAgICB0aGlzLmN5LmxheW91dCh0aGlzLkxhc3RMYXlvdXQpLnJ1bigpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFZmZldHR1YSBpbCByZW5kZXJpbmcgZGVsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgcmVuZGVyKCkge1xyXG5cclxuICAgIC8vIFRpcm8gZnVvcmkgbGUgb3B6aW9uaSBjb24gY3VpIGdlbmVyYXJlIGlsIGRpYWdyYW1tYVxyXG4gICAgbGV0IGN5T3B0aW9ucyA9IHRoaXMuZ2V0Q29tcGxldGVkT3B0aW9ucygpO1xyXG4gICAgdGhpcy5Ob2Rlc0hpZXJhcmNoeSA9IGN5T3B0aW9ucy5lbGVtZW50cyAmJiAoPGN5Xy5FbGVtZW50RGVmaW5pdGlvbltdPmN5T3B0aW9ucy5lbGVtZW50cykuc29tZSh0ID0+IHQuZGF0YS5wYXJlbnQpO1xyXG5cclxuICAgIC8vIENhcmljbyBldmVudHVhbGkgY2xhc3NpIGRpIGVzdGVuc2lvbmUgY2hlIHNlcnZvbm9cclxuICAgIGF3YWl0IHRoaXMucGVyZm9ybU1vZHVsZXNMb2FkaW5nKCk7XHJcblxyXG4gICAgLy8gR2VuZXJvIGlsIGRpYWdyYW1tYVxyXG4gICAgdGhpcy5jeSA9IGN5dG9zY2FwZShjeU9wdGlvbnMpO1xyXG5cclxuICAgIC8vIENvbGxlZ28gZ2xpIGV2ZW50aSBhbCBjb21wb25lbnRlXHJcbiAgICB0aGlzLmJpbmRDeXRvc2NhcGVFdmVudHMoKTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBsZSBjbGFzc2kgZGkgZXN0ZW5zaW9uZSBjYXJpY2F0ZSBwcmVjZWRlbnRlbWVudGUgcGVyIGZhcmUgaWwgcmVzdG8gZGVsbGUgbWllIG9wZXJhemlvbmlcclxuICAgIHRoaXMucGVyZm9ybU9wZXJhdGlvbnNXaXRoTG9hZGVkTW9kdWxlcygpO1xyXG5cclxuICAgIC8vIEltcG9zdG8gbGEgdmFyaWFiaWxlIFJlbmRlcmVkIGEgdHJ1ZSBpbiBtb2RvIGNoZSBzZSBkYSBhZGVzc28gdmVuZ29ubyBmYXR0ZSBtb2RpZmljaGUgY2hlIGRvdnJlYmJlcm8gY2F1c2FyZSB1biByZWRyYXcgcG9zc28gYWNjb3JnZXJtZW5lXHJcbiAgICAvLyBlIG1hbmRhcmUgYSBjYWdhcmUgbG8gc3Ryb256byBkaSB0dXJub1xyXG4gICAgdGhpcy5SZW5kZXJlZCA9IHRydWU7XHJcblxyXG4gICAgLy8gU2UgZGV2byBhZ2dpb3JuYXJlIGluIGF1dG9tYXRpY28gaW4gYmFzZSBhbGxhIGRpbWVuc2lvbmUgZGVsIGNvbnRlbml0b3JlIGNvbGxlZ28gaWwgUmVzaXplT2JzZXJ2ZXJcclxuICAgIGlmICh0aGlzLkF1dG91cGRhdGVTaXplKVxyXG4gICAgICB0aGlzLmxpc3Rlbk9uQ2hhbmdlcygpO1xyXG5cclxuICAgIGlmICh0aGlzLlNtYXJ0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuc2V0dXBTZWxlY3Rpb25TdHlsZXMoKTtcclxuICAgICAgdGhpcy5zZXR1cEVsZW1lbnRzU2VsZWN0aW9uSWZOZWVkZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9uTG9hZGVkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZW5kZSB0dXR0aSBnbGkgZWxlbWVudGkgYXBwZW5hIGFzc2VnbmF0aSwgZSBzZSBxdWFsY3VubyBlcmEgc2VsZXppb25hdG8gbGEgc2l0dWF6aW9uZSB2aWVuZSBwZXJzaXN0aXRhIHN1IGN5dG9zY2FwZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0dXBFbGVtZW50c1NlbGVjdGlvbklmTmVlZGVkKCkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLkVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBlbGRhdGEgPSA8YW55PnRoaXMuRWxlbWVudHNbaV0uZGF0YTtcclxuICAgICAgaWYgKGVsZGF0YS5fX3NlbGVjdGVkKSB7XHJcbiAgICAgICAgbGV0IGVsID0gdGhpcy5jeS4kaWQoZWxkYXRhLmlkKTtcclxuICAgICAgICBlbC5zZWxlY3QoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FyaWNhIGdsaSBzdGlsaSBwZXIgbW9zdHJhcmUgY2FyaW5hIGxhIHNlbGV6aW9uZSBkZWkgbm9kaVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0dXBTZWxlY3Rpb25TdHlsZXMoKXtcclxuICAgIGxldCBjc3NJdGVtID0gdGhpcy5TbWFydFNlbGVjdGlvblN0eWxlcyB8fCB7XHJcbiAgICAgICdvdmVybGF5LWNvbG9yJzogJ2JsdWUnLFxyXG4gICAgICAnb3ZlcmxheS1vcGFjaXR5JzogMC41LFxyXG4gICAgICAnb3ZlcmxheS1wYWRkaW5nJzogN1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBCYWNrZG9vciBwZXIgcG90ZXIgYXNzZWduYXJlIFwie31cIiBhIFNtYXJ0U2VsZWN0aW9uU3R5bGVzIGluIG1vZG8gZGkgdXRpbGl6emFyZSBsYSBzbWFydCBzZWxlY3Rpb24gbWEgc2VuemEgY2hlIG5lc3N1bm8gc3RpbGUgdmVuZ2EgYXBwbGljYXRvXHJcbiAgICAvLyBhZCBlc2VtcGlvIHF1YWxvcmEgc2kgdm9sZXNzZSB1dGlsaXp6YXJlIGwnaHRtbG5vZGUgcGVyIGdlc3RpcmUgbGEgZ3JhZmljYSBkZWdsaSBlbGVtZW50aSBzZWxlemlvbmF0aVxyXG4gICAgaWYoY3NzSXRlbVsnb3ZlcmxheS1jb2xvciddICYmIGNzc0l0ZW1bJ292ZXJsYXktb3BhY2l0eSddICYmIGNzc0l0ZW1bJ292ZXJsYXktcGFkZGluZyddKVxyXG4gICAgICAoPGFueT50aGlzLmN5LnN0eWxlKCkpLnNlbGVjdG9yKCdub2RlOnNlbGVjdGVkJykuY3NzKGNzc0l0ZW0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0cmEgbCdhc2NvbHRvIGFsIGNvbnRlbml0b3JlIGRlbCBncmFmaWNvIGUgaW4gY2FzbyBkaSBtb2RpZmljaGUgYWxsYSBkaW1lbnNpb25lLCBhbCBtYXNzaW1vIHVuYSB2b2x0YSBvZ25pIDUwMCBtaWxsaXNlY29uZGksIGxvIHJpZGlzZWduYVxyXG4gICAqL1xyXG4gIHByaXZhdGUgbGlzdGVuT25DaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVTZW5zb3IodGhpcy5jeUdyYXBoLm5hdGl2ZUVsZW1lbnQsICgpID0+IHtcclxuICAgICAgdGhpcy5leHRzLnRocm90dGxlKHRoaXMubmFtZSwgdGhpcy5vbkNvbnRhaW5lclNpemVDaGFuZ2VkLmJpbmQodGhpcyksIHRoaXMuUmVzaXplVGhyb3R0bGVUaW1lKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRnVuemlvbmUgY2hlIHNpIG9jY3VwYSBkaSBnZXN0aXJlIGlsIHJlcGFpbnQgZGVsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIHByaXZhdGUgb25Db250YWluZXJTaXplQ2hhbmdlZCgpIHtcclxuICAgIHRoaXMuc2VydmljZS5sb2coXCJJXCIsIFwiRGlhZ3JhbSBjb250YWluZXIgc2l6ZSBoYXMgY2hhbmdlZCwgcmVkcmF3aW5nXCIpO1xyXG4gICAgdGhpcy5jeS5yZXNpemUoKTtcclxuICAgIHRoaXMuY3kuZml0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb2xsZWdhIHR1dHRpIGdsaSBldmVudGkgY2hlIG1pIHBvc3Nvbm8gc2VydmlyZSBlIGxpIGVzcG9uZSBpbiBvdXRwdXRcclxuICAgKi9cclxuICBwcml2YXRlIGJpbmRDeXRvc2NhcGVFdmVudHMoKSB7XHJcbiAgICB0aGlzLmN5LmJpbmQoJ2NsaWNrJywgJ25vZGUnLCAoZXZlbnQpID0+IHtcclxuICAgICAgbGV0IHRhcmdldERhdGEgPSBldmVudC50YXJnZXQuZGF0YSgpXHJcbiAgICAgIGlmICh0aGlzLlNtYXJ0U2VsZWN0aW9uKSB7XHJcbiAgICAgICAgbGV0IGlkID0gdGFyZ2V0RGF0YS5pZFxyXG4gICAgICAgIGxldCBlbCA9IHRoaXMuY3kuJGlkKGlkKTtcclxuICAgICAgICBsZXQgc2VsZWN0ZWQgPSBlbC5zZWxlY3RlZCgpO1xyXG5cclxuICAgICAgICBlbC5zZWxlY3RpZnkoKTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWQpXHJcbiAgICAgICAgICBlbC51bnNlbGVjdCgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGVsLnNlbGVjdCgpO1xyXG4gICAgICAgIGVsLnVuc2VsZWN0aWZ5KCk7XHJcblxyXG4gICAgICAgIC8vIFF1ZXN0byB2YSBhbmNoZSBuZWxsYSBsaXN0YSBkZWdsaSBlbGVtZW50aSBvcmlnaW5hbGkgKHRoaXMuRWxlbWVudHMpIGRhdG8gY2hlIGN5dG9zY2FwZSBsaSBwcmVuZGUgcGVyIHJpZmVyaW1lbnRvIChiYmJiYnJhdm8gY3l0by1jaGFuKVxyXG4gICAgICAgIGVsLmRhdGEoXCJfX3NlbGVjdGVkXCIsICFzZWxlY3RlZCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMub25Ob2RlQ2xpY2suZW1pdCh7IGRhdGE6IHRhcmdldERhdGEgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmN5LmJpbmQoJ3NlbGVjdCcsICdub2RlJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgIGxldCB0YXJnZXREYXRhID0gZXZlbnQudGFyZ2V0LmRhdGEoKVxyXG5cclxuICAgICAgdGhpcy5vbk5vZGVTZWxlY3Rpb24uZW1pdCh7IGRhdGE6IHRhcmdldERhdGEsIHNlbGVjdGVkOiB0cnVlIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jeS5iaW5kKCdsYXlvdXRzdG9wJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMub25MYXlvdXREb25lLmVtaXQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3kuYmluZCgndW5zZWxlY3QnLCAnbm9kZScsIChldmVudCkgPT4ge1xyXG4gICAgICBsZXQgdGFyZ2V0RGF0YSA9IGV2ZW50LnRhcmdldC5kYXRhKClcclxuXHJcbiAgICAgIHRoaXMub25Ob2RlU2VsZWN0aW9uLmVtaXQoeyBkYXRhOiB0YXJnZXREYXRhLCBzZWxlY3RlZDogZmFsc2UgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBBbHRyaSBldmVudGkuLi5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2VydmUgcGVyIGNhcmljYXJlIHR1dHRlIGxlIGVzdGVuc2lvbmkgZGVsbGEgbGlicmVyaWEgaW4gYmFzZSBhIGNpw7IgY2hlIHZpZW5lIHV0aWxpenphdG9cclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHBlcmZvcm1Nb2R1bGVzTG9hZGluZygpIHtcclxuICAgIGlmICh0aGlzLkxheW91dC5uYW1lID09ICdkYWdyZScpXHJcbiAgICAgIGF3YWl0IHRoaXMubG9hZEludGVybmFsKFwiY3l0b3NjYXBlLWRhZ3JlXCIpO1xyXG5cclxuICAgIGlmICh0aGlzLk5vZGVIVE1MVGVtcGxhdGVzICYmIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMubGVuZ3RoID4gMClcclxuICAgICAgYXdhaXQgdGhpcy5sb2FkSW50ZXJuYWwoXCJjeXRvc2NhcGUtaHRtbC1ub2RlXCIpO1xyXG5cclxuICAgIGlmICh0aGlzLlVzZUNvbnRleHRNZW51KVxyXG4gICAgICBhd2FpdCB0aGlzLmxvYWRJbnRlcm5hbChcImN5dG9zY2FwZS1jeHRtZW51XCIpO1xyXG5cclxuICAgIGlmICh0aGlzLk5vZGVzSGllcmFyY2h5ICYmIHRoaXMuVXNlRXhwYW5kQ29sbGFwc2UpXHJcbiAgICAgIGF3YWl0IHRoaXMubG9hZEludGVybmFsKFwiY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZVwiKTtcclxuXHJcbiAgICBpZiAodGhpcy5FeHRlbnNpb25Nb2R1bGVzSW1wb3J0ZXIpIHtcclxuICAgICAgLy8gV3JhcHBvIGlsIG5hbWVzcGFjZSBpbiBtb2RvIGNoZSBwb3NzYSBkaXJlIGxhIG1pYSBzdWwgZmF0dG8gY2hlIGwndXRlbnRlIGFnZ2l1bmdhIHVuIG1vZHVsbyBvIG1lbm8gOkRcclxuICAgICAgdmFyIHdyYXBwZWRDeXRvc2NhcGUgPSB7XHJcbiAgICAgICAgdXNlOiAobW9kdWxlTmFtZTogc3RyaW5nLCBtb2R1bGU6IGN5dG9zY2FwZS5FeHQpID0+IHtcclxuICAgICAgICAgIGlmICghbW9kdWxlKVxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UubG9nKFwiRVwiLCB0aGlzLnNlcnZpY2UubG9jKFwiUmVjZWl2ZWQgYW4gdW5kZWZpbmVkIG1vZHVsZS4gTWFrZSBzdXJlIHlvdSBhcmUgY29ycmVjdGx5IGxvYWRpbmcgaXRcIikgKyBcIjogXCIgKyBtb2R1bGVOYW1lLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgaWYgKFtcImN5dG9zY2FwZS1kYWdyZVwiLCBcImN5dG9zY2FwZS1odG1sLW5vZGVcIiwgXCJjeXRvc2NhcGUtY3h0bWVudVwiLCBcImN5dG9zY2FwZS1leHBhbmQtY29sbGFwc2VcIl0uaW5jbHVkZXMobW9kdWxlTmFtZSkpXHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5sb2coXCJXXCIsIHRoaXMuc2VydmljZS5sb2MoXCJNb2R1bGVcIikgKyBcIiBcIiArIG1vZHVsZU5hbWUgKyBcIiBcIiArIHRoaXMuc2VydmljZS5sb2MoXCJpcyBsb2FkZWQgYW5kIG1hbmFnZWQgZGlyZWN0bHkgYnkgdGhpcyBsaWJyYXJ5LiBZb3UgZG9uJ3QgbmVlZCB0byBpbXBvcnQgaXQgb3IgdXNlIGl0IGRpcmVjdGx5LCBqdXN0IGJlIHN1cmUgdG8gc2V0IHRoZSByZWxhdGl2ZSBvcHRpb25zXCIpLCBmYWxzZSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGN5dG9zY2FwZS51c2UobW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGF3YWl0IHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0ltcG9ydGVyKHdyYXBwZWRDeXRvc2NhcGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzZXJ2ZSBwZXIgY2FyaWNhcmUgdHV0dGUgbGUgZXN0ZW5zaW9uaSBkZWxsYSBsaWJyZXJpYSBpbiBiYXNlIGEgY2nDsiBjaGUgdmllbmUgdXRpbGl6emF0byBjb24gbGUgb3B6aW9uaSBkZWZpbml0ZSBkYWdsaSBJbnB1dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGVyZm9ybU9wZXJhdGlvbnNXaXRoTG9hZGVkTW9kdWxlcygpIHtcclxuXHJcbiAgICBsZXQgYW55Q3kgPSAoPGFueT50aGlzLmN5KTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBkZWwgbGF5b3V0LCBsbyBzYWx2byBwZXIgcG90ZXJsbyByaXV0aWxpenphcmUgaW4gZnV0dXJvXHJcbiAgICBpZiAodGhpcy5MYXlvdXQpIHtcclxuICAgICAgdGhpcy5MYXN0TGF5b3V0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLkxheW91dCkpO1xyXG4gICAgICB0aGlzLmN5LmxheW91dCh0aGlzLkxhc3RMYXlvdXQpLnJ1bigpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXRpbGl6em8gZGVsbCdIVE1MIG5vZGVcclxuICAgIGlmICh0aGlzLk5vZGVIVE1MVGVtcGxhdGVzICYmIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLkh0bWxOb2RlQXBpID0gYW55Q3kuaHRtbG5vZGUoKTtcclxuICAgICAgdGhpcy5IdG1sTm9kZUFwaS5jcmVhdGVIdG1sTm9kZShjeXRvc2NhcGUsIHRoaXMuY3ksIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFV0aWxpenpvIGRlbCBDb250ZXh0IE1lbnVcclxuICAgIGlmICh0aGlzLlVzZUNvbnRleHRNZW51KVxyXG4gICAgICB0aGlzLkNvbnRleHRNZW51T3B0aW9ucy5mb3JFYWNoKG8gPT4geyBhbnlDeS5jeHRtZW51KG8pOyB9KTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBkZWxsJ2V4cGFuZCBjb2xsYXBzZSBzb2xvIHF1YW5kbyBjJ8OoIHVuYSBnZXJhcmNoaWEgZGkgbm9kaVxyXG4gICAgaWYgKHRoaXMuTm9kZXNIaWVyYXJjaHkgJiYgdGhpcy5Vc2VFeHBhbmRDb2xsYXBzZSlcclxuICAgICAgdGhpcy5FeHBhbmRDb2xsYXBzZUFwaSA9IGFueUN5LmV4cGFuZENvbGxhcHNlKHRoaXMuRXhwYW5kQ29sbGFwc2VPcHRpb25zKTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBkaSBlc3RlbnNpb25pIGV4dHJhLCBpbXBsZW1lbnRhemlvbmUgYWZmaWRhdGEgYWwgcHJvZ3JhbW1hdG9yZVxyXG4gICAgaWYgKHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0FwcGx5ZXIpXHJcbiAgICAgIHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0FwcGx5ZXIodGhpcy5jeSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlQ2FyZERhdGEoKSB7XHJcbiAgICBpZiAoIXRoaXMuSHRtbE5vZGVBcGkpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIkVcIiwgXCJDYW5ub3QgdXBkYXRlIE5vZGVIVE1MVGVtcGxhdGVzIGFzIHRoZXkgZG9uJ3Qgc2VlbSB0byBiZSB1c2VkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkh0bWxOb2RlQXBpLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludGVybm8gcGVyIGlsIGNhcmljYW1lbnRvIGRlaSBtb2R1bGkgZGkgZXN0ZW5zaW9uZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7J2N5dG9zY2FwZS1leHBhbmQtY29sbGFwc2UnIHwgJ2N5dG9zY2FwZS1jeHRtZW51JyB8ICdjeXRvc2NhcGUtaHRtbC1ub2RlJyB8ICdjeXRvc2NhcGUtZGFncmUnfSBtb2R1bGVJZCBNb2R1bG8gZGEgY2FyaWNhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGxvYWRJbnRlcm5hbChtb2R1bGVJZDogJ2N5dG9zY2FwZS1leHBhbmQtY29sbGFwc2UnIHwgJ2N5dG9zY2FwZS1jeHRtZW51JyB8ICdjeXRvc2NhcGUtaHRtbC1ub2RlJyB8ICdjeXRvc2NhcGUtZGFncmUnKSB7XHJcbiAgICBsZXQgdG9Mb2FkID0gYXdhaXQgdGhpcy5zZXJ2aWNlLmltcG9ydElmTmVlZGVkKG1vZHVsZUlkKTtcclxuICAgIGlmICh0b0xvYWQpIGN5dG9zY2FwZS51c2UodG9Mb2FkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgYmFzYW5kb3NpIHN1bGxlIG9wemlvbmkgbmF0aXZlIGV2ZW50dWFsbWVudGUgYXNzZWduYXRlIGxlIGNvbXBsZXRhIGNvbiBnbGkgSW5wdXQgYWRkaXppb25hbGlcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7Y3lfLkN5dG9zY2FwZU9wdGlvbnN9IE9wemlvbmkgZmluYWxpIHVuaXRlIGRhIElucHV0IGVkIG9wemlvbmkgbmF0aXZlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRDb21wbGV0ZWRPcHRpb25zKCk6IGN5Xy5DeXRvc2NhcGVPcHRpb25zIHtcclxuICAgIHZhciBvcHRzOiBjeV8uQ3l0b3NjYXBlT3B0aW9ucyA9IHRoaXMuTmF0aXZlT3B0aW9ucyB8fCB7fTtcclxuICAgIG9wdHMuY29udGFpbmVyID0gdGhpcy5jeUdyYXBoLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBvcHRzLnN0eWxlID0gb3B0cy5zdHlsZSB8fCBbXTtcclxuXHJcbiAgICAvLyBQZXIgdHV0dGUgbGUgY29zZSBwZXIgY3VpIGdsaSBJbnB1dCBoYW5ubyBwcmlvcml0w6Agc292cmFzY3Jpdm8gZ2xpIG9yaWdpbmFsaSBkZWxsZSBvcHppb25pXHJcblxyXG4gICAgaWYgKHRoaXMuTm9kZVN0eWxlcyB8fCB0aGlzLkVkZ2VTdHlsZXMpIHtcclxuICAgICAgb3B0cy5zdHlsZSA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5Ob2RlU3R5bGVzKSBvcHRzLnN0eWxlLnB1c2goeyBzZWxlY3RvcjogJ25vZGUnLCBjc3M6IHRoaXMuTm9kZVN0eWxlcyB9KTtcclxuICAgICAgaWYgKHRoaXMuRWRnZVN0eWxlcykgb3B0cy5zdHlsZS5wdXNoKHsgc2VsZWN0b3I6ICdlZGdlJywgY3NzOiB0aGlzLkVkZ2VTdHlsZXMgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuRWxlbWVudHMpXHJcbiAgICAgIG9wdHMuZWxlbWVudHMgPSB0aGlzLkVsZW1lbnRzO1xyXG5cclxuICAgIHRoaXMucmV2aWV3Q3l0b3NjYXBlRWxlbWVudHMoPGN5dG9zY2FwZS5FbGVtZW50RGVmaW5pdGlvbltdPm9wdHMuZWxlbWVudHMpO1xyXG5cclxuICAgIGlmICh0aGlzLkxheW91dClcclxuICAgICAgb3B0cy5sYXlvdXQgPSB0aGlzLkxheW91dDtcclxuXHJcbiAgICBpZiAodGhpcy5SZWFkb25seSkge1xyXG4gICAgICAvLyBRdWVzdG8gY29zbyBmYSBlZmZldHRpIHN0cmFuaS4uLi5cclxuICAgICAgLy9vcHRzLmF1dG9sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAgIG9wdHMuYXV0b3VuZ3JhYmlmeSA9IHRydWU7XHJcbiAgICAgIG9wdHMuYXV0b3Vuc2VsZWN0aWZ5ID0gZmFsc2U7XHJcbiAgICAgIG9wdHMuYm94U2VsZWN0aW9uRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgIG9wdHMudXNlclpvb21pbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgICAgIG9wdHMudXNlclBhbm5pbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9wdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZ2dpdXN0YW1lbnRpIGRlZ2xpIGVsZW1lbnRpIGRpIEN5dG9zY2FwZS4gXHJcbiAgICogXHJcbiAgICogSSBub2RpIG5vbiB2ZW5nb25vIHRvY2NhdGkuXHJcbiAgICogXHJcbiAgICogUGVyIG9nbmkgZWRnZSB2aWVuZSBjb250cm9sbGF0byBzZSDDqCBzcGVjaWZpY2F0YSB1bmEgc29yZ2VudGUgZWQgdW5hIGRlc3RpbmF6aW9uZSwgaW4gY2FzbyBjb250cmFyaW8gc2kgY2VyY2EgZGkgZGVkdXJsaSBkYWxsJ0lEXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtjeXRvc2NhcGUuRWxlbWVudERlZmluaXRpb25bXX0gZWxlbWVudHMgRWxlbWVudGkgZGEgc2lzdGVtYXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXZpZXdDeXRvc2NhcGVFbGVtZW50cyhlbGVtZW50czogY3l0b3NjYXBlLkVsZW1lbnREZWZpbml0aW9uW10sIHByZXZQb3NpdGlvbnM/OiBhbnkpIHtcclxuICAgIGxldCBoYXNQcmV2aW91c1Bvc2l0aW9ucyA9IHByZXZQb3NpdGlvbnMgJiYgcHJldlBvc2l0aW9ucy5sZW5ndGggPiAwO1xyXG4gICAgbGV0IHBvc2l0aW9uQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBjeXRvc2NhcGUuUG9zaXRpb24gfSA9IHt9O1xyXG5cclxuICAgIGlmIChoYXNQcmV2aW91c1Bvc2l0aW9ucykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZQb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgaXRlbSA9IHByZXZQb3NpdGlvbnNbaV07XHJcbiAgICAgICAgaWYgKCFwb3NpdGlvbkNhY2hlW2l0ZW0uZGF0YSgpLmlkXSlcclxuICAgICAgICAgIHBvc2l0aW9uQ2FjaGVbaXRlbS5kYXRhKCkuaWRdID0gaXRlbS5wb3NpdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZWwgPSBlbGVtZW50c1tpXTtcclxuICAgICAgaWYgKGVsLmdyb3VwID09IFwiZWRnZXNcIiAmJiAoIWVsLmRhdGEuc291cmNlICYmICFlbC5kYXRhLnRhcmdldCkpIHtcclxuICAgICAgICBpZiAoIWVsLmRhdGEuaWQuaW5jbHVkZXMoXCItXCIpKVxyXG4gICAgICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIkVcIiwgXCJJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHNvdXJjZSBhbmQgYSB0YXJnZXQgZm9yIGFuIGVkZ2UgeW91IGhhdmUgdG8gd3JpdGUgaXRzIGlkIGluIHRoZSBmb3JtYXQge3NvdXJjZX0te3RhcmdldH1cIik7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YXIgc291cmNlVGFyZ2V0ID0gZWwuZGF0YS5pZC5zcGxpdCgnLScpO1xyXG4gICAgICAgICAgZWwuZGF0YS5zb3VyY2UgPSBzb3VyY2VUYXJnZXRbMF0udHJpbSgpO1xyXG4gICAgICAgICAgZWwuZGF0YS50YXJnZXQgPSBzb3VyY2VUYXJnZXRbMV0udHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGhhc1ByZXZpb3VzUG9zaXRpb25zICYmIGVsLmdyb3VwID09IFwibm9kZXNcIilcclxuICAgICAgICBlbC5wb3NpdGlvbiA9IHBvc2l0aW9uQ2FjaGVbZWwuZGF0YS5pZF1cclxuICAgIH1cclxuICB9XHJcbn0iXX0=
@@ -1,28 +0,0 @@
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