@sumaris-net/ngx-components 18.5.14 → 18.6.1
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/doc/changelog.md +5 -0
- package/esm2022/public_api.mjs +10 -2
- package/esm2022/src/app/core/about/about.modal.mjs +5 -4
- package/esm2022/src/app/core/home/home.mjs +5 -5
- package/esm2022/src/app/core/home/home.module.mjs +7 -3
- package/esm2022/src/app/shared/file/url.utils.mjs +164 -0
- package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +40 -28
- package/esm2022/src/app/shared/markdown/markdown.component.mjs +348 -0
- package/esm2022/src/app/shared/markdown/markdown.directive.mjs +34 -0
- package/esm2022/src/app/shared/markdown/markdown.modal.mjs +78 -0
- package/esm2022/src/app/shared/markdown/markdown.module.mjs +88 -0
- package/esm2022/src/app/shared/markdown/markdown.service.mjs +203 -0
- package/esm2022/src/app/shared/markdown/markdown.utils.mjs +78 -0
- package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +46 -0
- package/esm2022/src/app/shared/markdown/testing/markdown.testing.module.mjs +29 -0
- package/esm2022/src/app/shared/material/material.animations.mjs +31 -1
- package/esm2022/src/app/shared/pipes/pipes.module.mjs +5 -2
- package/esm2022/src/app/shared/pipes/string.pipes.mjs +17 -1
- package/esm2022/src/app/shared/shared.module.mjs +11 -9
- package/esm2022/src/app/shared/shared.testing.module.mjs +13 -5
- package/fesm2022/sumaris-net.ngx-components.mjs +6735 -5746
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +2 -1
- package/public_api.d.ts +9 -1
- package/src/app/core/home/home.module.d.ts +2 -1
- package/src/app/shared/file/url.utils.d.ts +77 -0
- package/src/app/shared/image/gallery/image-gallery.component.d.ts +10 -1
- package/src/app/shared/inputs.d.ts +1 -1
- package/src/app/shared/markdown/markdown.component.d.ts +80 -0
- package/src/app/shared/markdown/markdown.directive.d.ts +13 -0
- package/src/app/shared/{help/help.modal.d.ts → markdown/markdown.modal.d.ts} +13 -12
- package/src/app/shared/markdown/markdown.module.d.ts +18 -0
- package/src/app/shared/markdown/markdown.service.d.ts +38 -0
- package/src/app/shared/markdown/markdown.utils.d.ts +25 -0
- package/src/app/shared/markdown/testing/markdown.test.d.ts +15 -0
- package/src/app/shared/markdown/testing/markdown.testing.module.d.ts +11 -0
- package/src/app/shared/material/material.animations.d.ts +1 -0
- package/src/app/shared/pipes/pipes.module.d.ts +1 -1
- package/src/app/shared/pipes/string.pipes.d.ts +5 -0
- package/src/app/shared/shared.module.d.ts +19 -19
- package/src/app/shared/shared.testing.module.d.ts +2 -1
- package/src/assets/manifest.json +1 -1
- package/esm2022/src/app/shared/help/help.modal.mjs +0 -86
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import { booleanAttribute, ChangeDetectionStrategy, Component, EventEmitter, Inject, inject, Input, Optional, Output, } from '@angular/core';
|
|
2
|
+
import { LocalSettingsService } from '../../core/services/local-settings.service';
|
|
3
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
4
|
+
import { NetworkService } from '../../core/services/network.service';
|
|
5
|
+
import { HttpErrorResponse } from '@angular/common/http';
|
|
6
|
+
import { slideDownAnimation } from '../material/material.animations';
|
|
7
|
+
import { MarkdownService } from './markdown.service';
|
|
8
|
+
import { Subscription } from 'rxjs';
|
|
9
|
+
import { UrlUtils } from '../file/url.utils';
|
|
10
|
+
import { isNotEmptyArray, isNotNilOrBlank } from '../functions';
|
|
11
|
+
import { NavController } from '@ionic/angular';
|
|
12
|
+
import { MarkdownUtils } from './markdown.utils';
|
|
13
|
+
import { DOCUMENT } from '@angular/common';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "@angular/router";
|
|
16
|
+
import * as i2 from "@angular/common";
|
|
17
|
+
import * as i3 from "@ionic/angular";
|
|
18
|
+
import * as i4 from "ngx-markdown";
|
|
19
|
+
import * as i5 from "../debug/debug.component";
|
|
20
|
+
import * as i6 from "./markdown.directive";
|
|
21
|
+
import * as i7 from "@ngx-translate/core";
|
|
22
|
+
export class AppMarkdownContent {
|
|
23
|
+
cd;
|
|
24
|
+
element;
|
|
25
|
+
_document;
|
|
26
|
+
route;
|
|
27
|
+
_printIframe;
|
|
28
|
+
_clickSubscription;
|
|
29
|
+
navController = inject(NavController);
|
|
30
|
+
settings = inject(LocalSettingsService);
|
|
31
|
+
translate = inject(TranslateService);
|
|
32
|
+
network = inject(NetworkService);
|
|
33
|
+
markdownService = inject(MarkdownService);
|
|
34
|
+
loading = true;
|
|
35
|
+
error = undefined;
|
|
36
|
+
baseUrl;
|
|
37
|
+
_data;
|
|
38
|
+
_src;
|
|
39
|
+
_fallbackSrc;
|
|
40
|
+
_anchor;
|
|
41
|
+
_navHistory = [];
|
|
42
|
+
set data(value) {
|
|
43
|
+
this.setData(value);
|
|
44
|
+
}
|
|
45
|
+
get data() {
|
|
46
|
+
return this._data;
|
|
47
|
+
}
|
|
48
|
+
set src(value) {
|
|
49
|
+
this.setSrc(value);
|
|
50
|
+
}
|
|
51
|
+
get src() {
|
|
52
|
+
return this._src;
|
|
53
|
+
}
|
|
54
|
+
set anchor(value) {
|
|
55
|
+
this._anchor = value;
|
|
56
|
+
}
|
|
57
|
+
get anchor() {
|
|
58
|
+
return this._anchor;
|
|
59
|
+
}
|
|
60
|
+
debug;
|
|
61
|
+
showError = true;
|
|
62
|
+
animated = true;
|
|
63
|
+
enableNavigationHistory = true;
|
|
64
|
+
updateRouteLocation = false;
|
|
65
|
+
markdownUrlChange = new EventEmitter();
|
|
66
|
+
constructor(cd, element, _document, route // Modal editor give 'null'
|
|
67
|
+
) {
|
|
68
|
+
this.cd = cd;
|
|
69
|
+
this.element = element;
|
|
70
|
+
this._document = _document;
|
|
71
|
+
this.route = route;
|
|
72
|
+
// TODO: for DEV only
|
|
73
|
+
//this.debug = !environment.production;
|
|
74
|
+
}
|
|
75
|
+
ngOnDestroy() {
|
|
76
|
+
this._clickSubscription?.unsubscribe();
|
|
77
|
+
this.markdownService.resetBaseUrl();
|
|
78
|
+
}
|
|
79
|
+
goBack(event) {
|
|
80
|
+
console.debug('[markdown] Going back');
|
|
81
|
+
if (isNotEmptyArray(this._navHistory)) {
|
|
82
|
+
const { src, fallbackSrc, data, anchor } = this._navHistory.pop();
|
|
83
|
+
if (src)
|
|
84
|
+
this.setSrc(src, { fallbackSrc, anchor });
|
|
85
|
+
else
|
|
86
|
+
this.setData(data);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.navController.back();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
get canGoBack() {
|
|
93
|
+
return isNotEmptyArray(this._navHistory);
|
|
94
|
+
}
|
|
95
|
+
print(event) {
|
|
96
|
+
console.debug('[markdown] Print');
|
|
97
|
+
if (!this.element) {
|
|
98
|
+
console.error('Erreur : Élément non trouvé.');
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Récupérer le contenu HTML depuis le composant
|
|
102
|
+
const content = this.element.nativeElement.innerHTML;
|
|
103
|
+
// Créer une iframe pour gérer l'impression
|
|
104
|
+
this._printIframe = this.createPrintHiddenIframe(content);
|
|
105
|
+
// Lancer l'impression après un court délai (le temps que l'iframe charge)
|
|
106
|
+
this._printIframe.contentWindow.addEventListener('load', () => {
|
|
107
|
+
this._printIframe.contentWindow?.window.print();
|
|
108
|
+
this._printIframe.remove();
|
|
109
|
+
});
|
|
110
|
+
setTimeout(() => {
|
|
111
|
+
//this._printIframe.contentWindow?.window.print();
|
|
112
|
+
// Supprimer l'iframe après impression
|
|
113
|
+
//this._document.body.removeChild(this._printIframe);
|
|
114
|
+
}, 500);
|
|
115
|
+
}
|
|
116
|
+
/* -- protected functions -- */
|
|
117
|
+
createPrintHiddenIframe(html, style) {
|
|
118
|
+
// Create a iframe with '?print-pdf'
|
|
119
|
+
const iframe = this._document.createElement('iframe');
|
|
120
|
+
iframe.classList.add('cdk-visually-hidden');
|
|
121
|
+
iframe.style.width = '100%';
|
|
122
|
+
iframe.style.height = '100%';
|
|
123
|
+
this._document.body.appendChild(iframe);
|
|
124
|
+
// Charger le contenu HTML dans l'iframe
|
|
125
|
+
const iframeDocument = iframe.contentDocument || iframe.contentWindow?.document;
|
|
126
|
+
if (iframeDocument) {
|
|
127
|
+
iframeDocument.open();
|
|
128
|
+
iframeDocument.write(`
|
|
129
|
+
<html>
|
|
130
|
+
<head>
|
|
131
|
+
<title>${this._document.title}</title>
|
|
132
|
+
<style>
|
|
133
|
+
hr {
|
|
134
|
+
page-break-before: always;
|
|
135
|
+
border: 0 !important;
|
|
136
|
+
padding: 0 !important;
|
|
137
|
+
}
|
|
138
|
+
body {
|
|
139
|
+
font-family: 'Roboto', Helvetica, Arial, sans-serif;
|
|
140
|
+
margin: 0;
|
|
141
|
+
padding: 20px;
|
|
142
|
+
}
|
|
143
|
+
</style>
|
|
144
|
+
</head>
|
|
145
|
+
<body>
|
|
146
|
+
${html}
|
|
147
|
+
</body>
|
|
148
|
+
</html>
|
|
149
|
+
`);
|
|
150
|
+
iframeDocument.close();
|
|
151
|
+
}
|
|
152
|
+
// Inject App style
|
|
153
|
+
this.injectAppStylesIntoIframe(iframe);
|
|
154
|
+
return iframe;
|
|
155
|
+
}
|
|
156
|
+
injectAppStylesIntoIframe(iframe) {
|
|
157
|
+
const iframeDocument = iframe.contentDocument || iframe.contentWindow?.document;
|
|
158
|
+
if (iframeDocument) {
|
|
159
|
+
// Récupérer tous les styles (liens CSS)
|
|
160
|
+
const links = Array.from(this._document.querySelectorAll('link[rel="stylesheet"]'));
|
|
161
|
+
links.forEach((link) => {
|
|
162
|
+
const newLink = iframeDocument.createElement('link');
|
|
163
|
+
newLink.rel = 'stylesheet';
|
|
164
|
+
newLink.href = link.getAttribute('href');
|
|
165
|
+
if (newLink.href)
|
|
166
|
+
iframeDocument.head.appendChild(newLink);
|
|
167
|
+
});
|
|
168
|
+
// Récupérer tous les `styles` en ligne
|
|
169
|
+
const inlineStyles = Array.from(this._document.querySelectorAll('style'));
|
|
170
|
+
inlineStyles.forEach((style) => {
|
|
171
|
+
const newStyle = iframeDocument.createElement('style');
|
|
172
|
+
newStyle.innerHTML = style.innerHTML;
|
|
173
|
+
iframeDocument.head.appendChild(newStyle);
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
setData(value, opts) {
|
|
178
|
+
const anchor = opts?.anchor || null;
|
|
179
|
+
if (this._data !== value || this._anchor !== anchor) {
|
|
180
|
+
if (value) {
|
|
181
|
+
// Save current state to navigation history
|
|
182
|
+
if (opts?.addToNavigationHistory) {
|
|
183
|
+
this._navHistory.push({
|
|
184
|
+
src: this._src,
|
|
185
|
+
fallbackSrc: this._fallbackSrc,
|
|
186
|
+
data: this._data,
|
|
187
|
+
anchor: this._anchor,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
this._data = value;
|
|
191
|
+
this._anchor = anchor;
|
|
192
|
+
// Clear src
|
|
193
|
+
this._src = null;
|
|
194
|
+
this._fallbackSrc = null;
|
|
195
|
+
this.resetError();
|
|
196
|
+
this.markAsLoaded();
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
this._data = null;
|
|
200
|
+
}
|
|
201
|
+
this.cd.markForCheck();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
setSrc(src, opts) {
|
|
205
|
+
// Clean URL (remove fragment and query)
|
|
206
|
+
const anchor = opts?.anchor || UrlUtils.getFragment(src);
|
|
207
|
+
src = UrlUtils.stripFragmentAndQuery(src);
|
|
208
|
+
let fallbackSrc = opts?.fallbackSrc ? UrlUtils.stripFragmentAndQuery(opts.fallbackSrc) : null;
|
|
209
|
+
if (this._src !== src || this._fallbackSrc !== fallbackSrc || this._anchor !== anchor) {
|
|
210
|
+
const url = src ? src + (isNotNilOrBlank(anchor) ? `#${anchor}` : '') : null;
|
|
211
|
+
if (url)
|
|
212
|
+
console.debug(`[markdown] Loading ${url}...`);
|
|
213
|
+
// Give baseUrl to the service, to be able to resolve relative path - e.g. images)
|
|
214
|
+
if (src && UrlUtils.isExternalUrl(src)) {
|
|
215
|
+
this.baseUrl = UrlUtils.getParent(src);
|
|
216
|
+
this.markdownService.setBaseUrl(this.baseUrl);
|
|
217
|
+
}
|
|
218
|
+
if (src) {
|
|
219
|
+
// Save current state to navigation history
|
|
220
|
+
if (opts?.addToNavigationHistory) {
|
|
221
|
+
this._navHistory.push({
|
|
222
|
+
src: this._src,
|
|
223
|
+
fallbackSrc: this._fallbackSrc,
|
|
224
|
+
data: this._data,
|
|
225
|
+
anchor: this._anchor,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
this._src = src;
|
|
229
|
+
this._fallbackSrc = fallbackSrc;
|
|
230
|
+
this._anchor = anchor;
|
|
231
|
+
// Clear data
|
|
232
|
+
this._data = null;
|
|
233
|
+
// Reset error
|
|
234
|
+
this.resetError();
|
|
235
|
+
this.markAsLoading();
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
this._src = null;
|
|
239
|
+
this._fallbackSrc = null;
|
|
240
|
+
this._anchor = null;
|
|
241
|
+
this.cd.markForCheck();
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
onReady() {
|
|
246
|
+
const url = this._src ? this._src + (isNotNilOrBlank(this._anchor) ? `#${this._anchor}` : '') : null;
|
|
247
|
+
if (url) {
|
|
248
|
+
console.debug(`[markdown] Ready - ${url}`);
|
|
249
|
+
// Clear fallback (no more need)
|
|
250
|
+
if (this._fallbackSrc)
|
|
251
|
+
this._fallbackSrc = null;
|
|
252
|
+
// Emit change
|
|
253
|
+
this.markdownUrlChange.emit(url);
|
|
254
|
+
}
|
|
255
|
+
this.startListenClickEvents();
|
|
256
|
+
this.markAsLoaded();
|
|
257
|
+
// Scroll to anchor
|
|
258
|
+
if (isNotNilOrBlank(this._anchor)) {
|
|
259
|
+
this.markdownService.scrollToAnchor(this.element.nativeElement, this._anchor);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
onLoadError(error) {
|
|
263
|
+
// Translate error
|
|
264
|
+
if (error instanceof HttpErrorResponse && this.network.offline) {
|
|
265
|
+
console.error(`[markdown] Error loading markdown URL {${this.src}} (offline: true): `, error);
|
|
266
|
+
this.error = 'NETWORK.INFO.OFFLINE';
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
// Retry with fallback URL
|
|
270
|
+
if (this._fallbackSrc) {
|
|
271
|
+
console.debug(`[markdown] Error loading markdown URL {${this.src}} - fallback to URL ${this._fallbackSrc}`);
|
|
272
|
+
this.setSrc(this._fallbackSrc, { anchor: this._anchor });
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
console.error(`[markdown] Error loading markdown URL {${this.src}} (offline: true): `, error);
|
|
276
|
+
this.error = 'ERROR.LOAD_DATA_ERROR';
|
|
277
|
+
}
|
|
278
|
+
this.markAsLoaded();
|
|
279
|
+
}
|
|
280
|
+
startListenClickEvents() {
|
|
281
|
+
this._clickSubscription?.unsubscribe();
|
|
282
|
+
this._clickSubscription = new Subscription();
|
|
283
|
+
// Listen for click link to Markdown URL
|
|
284
|
+
this._clickSubscription.add(this.markdownService.onClickMarkdownUrl.subscribe((href) => {
|
|
285
|
+
console.debug('[markdown] Received click event, on a markdown URL', href);
|
|
286
|
+
let fragment = UrlUtils.getFragment(href);
|
|
287
|
+
let url = UrlUtils.stripFragmentAndQuery(href);
|
|
288
|
+
let fallbackUrl = null;
|
|
289
|
+
// Resolve relative path
|
|
290
|
+
if (UrlUtils.isRelativeUrl(href) && this.baseUrl) {
|
|
291
|
+
// Get absolute url
|
|
292
|
+
url = MarkdownUtils.resolveRelativeUrl(this.baseUrl, href);
|
|
293
|
+
// Create a fallback url, in relative path was wrong
|
|
294
|
+
fallbackUrl = MarkdownUtils.resolveRelativeUrl(this.baseUrl, href, { absoluteByDefault: true });
|
|
295
|
+
fallbackUrl = url === fallbackUrl ? null : fallbackUrl;
|
|
296
|
+
}
|
|
297
|
+
// Opening the new URL
|
|
298
|
+
this.setSrc(url, { fallbackSrc: fallbackUrl, anchor: fragment, addToNavigationHistory: this.enableNavigationHistory });
|
|
299
|
+
}));
|
|
300
|
+
}
|
|
301
|
+
markAsLoaded() {
|
|
302
|
+
this.loading = false;
|
|
303
|
+
this.cd.markForCheck();
|
|
304
|
+
}
|
|
305
|
+
markAsLoading() {
|
|
306
|
+
this.loading = true;
|
|
307
|
+
this.cd.markForCheck();
|
|
308
|
+
}
|
|
309
|
+
resetError() {
|
|
310
|
+
this.error = null;
|
|
311
|
+
this.cd.markForCheck();
|
|
312
|
+
}
|
|
313
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppMarkdownContent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: DOCUMENT }, { token: i1.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
314
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppMarkdownContent, selector: "app-markdown-content", inputs: { data: "data", src: "src", anchor: "anchor", debug: ["debug", "debug", booleanAttribute], showError: ["showError", "showError", booleanAttribute], animated: ["animated", "animated", booleanAttribute], enableNavigationHistory: ["enableNavigationHistory", "enableNavigationHistory", booleanAttribute], updateRouteLocation: ["updateRouteLocation", "updateRouteLocation", booleanAttribute] }, outputs: { markdownUrlChange: "markdownUrlChange" }, ngImport: i0, template: "<app-debug *ngIf=\"debug\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n loading: {{ loading }}\n <br />\n error: {{ error }}\n <br />\n <br />\n baseUrl: {{ baseUrl }}\n <br />\n markdownUrl: {{ src }}\n <br />\n markdownFragment: {{ _anchor }}\n <br />\n markdownContent: {{ data }}\n <br />\n </ion-col>\n </ion-row>\n </ion-grid>\n</app-debug>\n\n<!-- error -->\n@if (showError && error; as error) {\n <ion-item lines=\"none\" @slideDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n} @else {\n @if (data) {\n <markdown [data]=\"data\" (ready)=\"onReady()\" emoji></markdown>\n } @else if (src) {\n <markdown [src]=\"src\" (error)=\"onLoadError($event)\" (ready)=\"onReady()\" emoji></markdown>\n }\n}\n\n<!-- loading spinner -->\n@if (loading) {\n <div class=\"loading-spinner\">\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n </div>\n}\n\n<ng-template #loadingParagraph>\n <p>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 75%; margin-inline-start: 5%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n </p>\n</ng-template>\n", styles: [":host ::ng-deep markdown div.logo{display:none;visibility:hidden}:host ::ng-deep markdown hr{border-top:1px solid var(--ion-color-medium-tint, #dcdcde);margin:10px 0}:host ::ng-deep markdown blockquote{--block-margin: 16px 0;--block-padding: 4px 16px;--box-shadow: 0 2px 4px rgba(0, 0, 0, .4);display:block;position:relative;width:70%;margin:var(--block-margin);padding:var(--block-padding);font-style:italic;background:var(--ion-color-light);box-shadow:var(--box-shadow)}:host ::ng-deep markdown code{color:rgba(var(--ion-text-color-rgb),.7);background:rgba(var(--ion-text-color-rgb),.03);font-size:.9rem;letter-spacing:-.5px}.loading-spinner ion-skeleton-text{width:100%;height:1.5em}.loading-spinner p{margin-top:var(ion-padding, 16px)}@media print{hr{page-break-before:always;border:none;margin:0}body{font-family:Roboto,Helvetica,Arial,sans-serif;margin:0;padding:20px}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i4.MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "component", type: i5.DebugComponent, selector: "app-debug", inputs: ["titlePrefix", "title", "enable", "expanded"] }, { kind: "directive", type: i6.MarkdownDirective, selector: "markdown,[markdown]" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }], animations: [slideDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
315
|
+
}
|
|
316
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppMarkdownContent, decorators: [{
|
|
317
|
+
type: Component,
|
|
318
|
+
args: [{ selector: 'app-markdown-content', changeDetection: ChangeDetectionStrategy.OnPush, animations: [slideDownAnimation], template: "<app-debug *ngIf=\"debug\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n loading: {{ loading }}\n <br />\n error: {{ error }}\n <br />\n <br />\n baseUrl: {{ baseUrl }}\n <br />\n markdownUrl: {{ src }}\n <br />\n markdownFragment: {{ _anchor }}\n <br />\n markdownContent: {{ data }}\n <br />\n </ion-col>\n </ion-row>\n </ion-grid>\n</app-debug>\n\n<!-- error -->\n@if (showError && error; as error) {\n <ion-item lines=\"none\" @slideDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n} @else {\n @if (data) {\n <markdown [data]=\"data\" (ready)=\"onReady()\" emoji></markdown>\n } @else if (src) {\n <markdown [src]=\"src\" (error)=\"onLoadError($event)\" (ready)=\"onReady()\" emoji></markdown>\n }\n}\n\n<!-- loading spinner -->\n@if (loading) {\n <div class=\"loading-spinner\">\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n </div>\n}\n\n<ng-template #loadingParagraph>\n <p>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 75%; margin-inline-start: 5%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n </p>\n</ng-template>\n", styles: [":host ::ng-deep markdown div.logo{display:none;visibility:hidden}:host ::ng-deep markdown hr{border-top:1px solid var(--ion-color-medium-tint, #dcdcde);margin:10px 0}:host ::ng-deep markdown blockquote{--block-margin: 16px 0;--block-padding: 4px 16px;--box-shadow: 0 2px 4px rgba(0, 0, 0, .4);display:block;position:relative;width:70%;margin:var(--block-margin);padding:var(--block-padding);font-style:italic;background:var(--ion-color-light);box-shadow:var(--box-shadow)}:host ::ng-deep markdown code{color:rgba(var(--ion-text-color-rgb),.7);background:rgba(var(--ion-text-color-rgb),.03);font-size:.9rem;letter-spacing:-.5px}.loading-spinner ion-skeleton-text{width:100%;height:1.5em}.loading-spinner p{margin-top:var(ion-padding, 16px)}@media print{hr{page-break-before:always;border:none;margin:0}body{font-family:Roboto,Helvetica,Arial,sans-serif;margin:0;padding:20px}}\n"] }]
|
|
319
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: Document, decorators: [{
|
|
320
|
+
type: Inject,
|
|
321
|
+
args: [DOCUMENT]
|
|
322
|
+
}] }, { type: i1.ActivatedRoute, decorators: [{
|
|
323
|
+
type: Optional
|
|
324
|
+
}] }], propDecorators: { data: [{
|
|
325
|
+
type: Input
|
|
326
|
+
}], src: [{
|
|
327
|
+
type: Input
|
|
328
|
+
}], anchor: [{
|
|
329
|
+
type: Input
|
|
330
|
+
}], debug: [{
|
|
331
|
+
type: Input,
|
|
332
|
+
args: [{ transform: booleanAttribute }]
|
|
333
|
+
}], showError: [{
|
|
334
|
+
type: Input,
|
|
335
|
+
args: [{ transform: booleanAttribute }]
|
|
336
|
+
}], animated: [{
|
|
337
|
+
type: Input,
|
|
338
|
+
args: [{ transform: booleanAttribute }]
|
|
339
|
+
}], enableNavigationHistory: [{
|
|
340
|
+
type: Input,
|
|
341
|
+
args: [{ transform: booleanAttribute }]
|
|
342
|
+
}], updateRouteLocation: [{
|
|
343
|
+
type: Input,
|
|
344
|
+
args: [{ transform: booleanAttribute }]
|
|
345
|
+
}], markdownUrlChange: [{
|
|
346
|
+
type: Output
|
|
347
|
+
}] } });
|
|
348
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWFya2Rvd24vbWFya2Rvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWFya2Rvd24vbWFya2Rvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7OztBQWUzQyxN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LHVFQUNoQixnQkFBZ0Isa0ZDeEZ0QywrNURBdURBLDI3RkRoQmMsQ0FBQyxrQkFBa0IsQ0FBQzs7NEZBRXJCLGtCQUFrQjtrQkFQOUIsU0FBUzsrQkFDRSxzQkFBc0IsbUJBR2YsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxDQUFDLGtCQUFrQixDQUFDOzswQkF3RDdCLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsUUFBUTt5Q0FqQ0UsSUFBSTtzQkFBaEIsS0FBSztnQkFPTyxHQUFHO3NCQUFmLEtBQUs7Z0JBT08sTUFBTTtzQkFBbEIsS0FBSztnQkFPa0MsS0FBSztzQkFBNUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxTQUFTO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFFBQVE7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsdUJBQXVCO3NCQUE5RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLG1CQUFtQjtzQkFBMUQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFFNUIsaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYWxTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTmV0d29ya1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHNsaWRlRG93bkFuaW1hdGlvbiB9IGZyb20gJy4uL21hdGVyaWFsL21hdGVyaWFsLmFuaW1hdGlvbnMnO1xuaW1wb3J0IHsgTWFya2Rvd25TZXJ2aWNlIH0gZnJvbSAnLi9tYXJrZG93bi5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXJsVXRpbHMgfSBmcm9tICcuLi9maWxlL3VybC51dGlscyc7XG5pbXBvcnQgeyBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsT3JCbGFuayB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgTWFya2Rvd25VdGlscyB9IGZyb20gJy4vbWFya2Rvd24udXRpbHMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcE1hcmtkb3duT3B0aW9ucyB7XG4gIGRhdGE/OiBzdHJpbmc7XG4gIHNyYz86IHN0cmluZztcbiAgc2hvd0Vycm9yPzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW1hcmtkb3duLWNvbnRlbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFya2Rvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXJrZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW3NsaWRlRG93bkFuaW1hdGlvbl0sXG59KVxuZXhwb3J0IGNsYXNzIEFwcE1hcmtkb3duQ29udGVudCBpbXBsZW1lbnRzIEFwcE1hcmtkb3duT3B0aW9ucywgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfcHJpbnRJZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50O1xuICBwcml2YXRlIF9jbGlja1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByb3RlY3RlZCBuYXZDb250cm9sbGVyID0gaW5qZWN0KE5hdkNvbnRyb2xsZXIpO1xuICBwcm90ZWN0ZWQgc2V0dGluZ3MgPSBpbmplY3QoTG9jYWxTZXR0aW5nc1NlcnZpY2UpO1xuICBwcm90ZWN0ZWQgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgbmV0d29yayA9IGluamVjdChOZXR3b3JrU2VydmljZSk7XG4gIHByb3RlY3RlZCBtYXJrZG93blNlcnZpY2UgPSBpbmplY3QoTWFya2Rvd25TZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgbG9hZGluZyA9IHRydWU7XG4gIHByb3RlY3RlZCBlcnJvcjogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCBiYXNlVXJsOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIF9kYXRhOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfc3JjOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfZmFsbGJhY2tTcmM6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9hbmNob3I6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgX25hdkhpc3Rvcnk6IHsgc3JjPzogc3RyaW5nOyBmYWxsYmFja1NyYz86IHN0cmluZzsgZGF0YT86IHN0cmluZzsgYW5jaG9yPzogc3RyaW5nIH1bXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHNldCBkYXRhKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldERhdGEodmFsdWUpO1xuICB9XG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHNyYyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRTcmModmFsdWUpO1xuICB9XG4gIGdldCBzcmMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NyYztcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBhbmNob3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2FuY2hvciA9IHZhbHVlO1xuICB9XG4gIGdldCBhbmNob3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FuY2hvcjtcbiAgfVxuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkZWJ1ZzogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dFcnJvciA9IHRydWU7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBhbmltYXRlZCA9IHRydWU7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBlbmFibGVOYXZpZ2F0aW9uSGlzdG9yeSA9IHRydWU7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB1cGRhdGVSb3V0ZUxvY2F0aW9uID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIG1hcmtkb3duVXJsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGUgLy8gTW9kYWwgZWRpdG9yIGdpdmUgJ251bGwnXG4gICkge1xuICAgIC8vIFRPRE86IGZvciBERVYgb25seVxuICAgIC8vdGhpcy5kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fY2xpY2tTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5tYXJrZG93blNlcnZpY2UucmVzZXRCYXNlVXJsKCk7XG4gIH1cblxuICBnb0JhY2soZXZlbnQ/OiBFdmVudCkge1xuICAgIGNvbnNvbGUuZGVidWcoJ1ttYXJrZG93bl0gR29pbmcgYmFjaycpO1xuICAgIGlmIChpc05vdEVtcHR5QXJyYXkodGhpcy5fbmF2SGlzdG9yeSkpIHtcbiAgICAgIGNvbnN0IHsgc3JjLCBmYWxsYmFja1NyYywgZGF0YSwgYW5jaG9yIH0gPSB0aGlzLl9uYXZIaXN0b3J5LnBvcCgpO1xuICAgICAgaWYgKHNyYykgdGhpcy5zZXRTcmMoc3JjLCB7IGZhbGxiYWNrU3JjLCBhbmNob3IgfSk7XG4gICAgICBlbHNlIHRoaXMuc2V0RGF0YShkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uYXZDb250cm9sbGVyLmJhY2soKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY2FuR29CYWNrKCkge1xuICAgIHJldHVybiBpc05vdEVtcHR5QXJyYXkodGhpcy5fbmF2SGlzdG9yeSk7XG4gIH1cblxuICBwcmludChldmVudD86IEV2ZW50KSB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21hcmtkb3duXSBQcmludCcpO1xuXG4gICAgaWYgKCF0aGlzLmVsZW1lbnQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0VycmV1ciA6IMOJbMOpbWVudCBub24gdHJvdXbDqS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSw6ljdXDDqXJlciBsZSBjb250ZW51IEhUTUwgZGVwdWlzIGxlIGNvbXBvc2FudFxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG5cbiAgICAvLyBDcsOpZXIgdW5lIGlmcmFtZSBwb3VyIGfDqXJlciBsJ2ltcHJlc3Npb25cbiAgICB0aGlzLl9wcmludElmcmFtZSA9IHRoaXMuY3JlYXRlUHJpbnRIaWRkZW5JZnJhbWUoY29udGVudCk7XG5cbiAgICAvLyBMYW5jZXIgbCdpbXByZXNzaW9uIGFwcsOocyB1biBjb3VydCBkw6lsYWkgKGxlIHRlbXBzIHF1ZSBsJ2lmcmFtZSBjaGFyZ2UpXG4gICAgdGhpcy5fcHJpbnRJZnJhbWUuY29udGVudFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4ge1xuICAgICAgdGhpcy5fcHJpbnRJZnJhbWUuY29udGVudFdpbmRvdz8ud2luZG93LnByaW50KCk7XG4gICAgICB0aGlzLl9wcmludElmcmFtZS5yZW1vdmUoKTtcbiAgICB9KTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy90aGlzLl9wcmludElmcmFtZS5jb250ZW50V2luZG93Py53aW5kb3cucHJpbnQoKTtcbiAgICAgIC8vIFN1cHByaW1lciBsJ2lmcmFtZSBhcHLDqHMgaW1wcmVzc2lvblxuICAgICAgLy90aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuX3ByaW50SWZyYW1lKTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIGZ1bmN0aW9ucyAtLSAqL1xuXG4gIHByaXZhdGUgY3JlYXRlUHJpbnRIaWRkZW5JZnJhbWUoaHRtbDogc3RyaW5nLCBzdHlsZT86IHN0cmluZyk6IEhUTUxJRnJhbWVFbGVtZW50IHtcbiAgICAvLyBDcmVhdGUgYSBpZnJhbWUgd2l0aCAnP3ByaW50LXBkZidcbiAgICBjb25zdCBpZnJhbWUgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICBpZnJhbWUuY2xhc3NMaXN0LmFkZCgnY2RrLXZpc3VhbGx5LWhpZGRlbicpO1xuICAgIGlmcmFtZS5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICBpZnJhbWUuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuICAgIHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcblxuICAgIC8vIENoYXJnZXIgbGUgY29udGVudSBIVE1MIGRhbnMgbCdpZnJhbWVcbiAgICBjb25zdCBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50RG9jdW1lbnQgfHwgaWZyYW1lLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50O1xuICAgIGlmIChpZnJhbWVEb2N1bWVudCkge1xuICAgICAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICAgICAgaWZyYW1lRG9jdW1lbnQud3JpdGUoYFxuICAgICAgICA8aHRtbD5cbiAgICAgICAgICA8aGVhZD5cbiAgICAgICAgICAgIDx0aXRsZT4ke3RoaXMuX2RvY3VtZW50LnRpdGxlfTwvdGl0bGU+XG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBociB7XG4gICAgICAgICAgICAgIHBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXM7XG4gICAgICAgICAgICAgIGJvcmRlcjogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib2R5IHtcbiAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8nLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zdHlsZT5cbiAgICAgICAgICA8L2hlYWQ+XG4gICAgICAgICAgPGJvZHk+XG4gICAgICAgICAgICAke2h0bWx9XG4gICAgICAgICAgPC9ib2R5PlxuICAgICAgICA8L2h0bWw+XG4gICAgICBgKTtcbiAgICAgIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLy8gSW5qZWN0IEFwcCBzdHlsZVxuICAgIHRoaXMuaW5qZWN0QXBwU3R5bGVzSW50b0lmcmFtZShpZnJhbWUpO1xuXG4gICAgcmV0dXJuIGlmcmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5qZWN0QXBwU3R5bGVzSW50b0lmcmFtZShpZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgY29uc3QgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudERvY3VtZW50IHx8IGlmcmFtZS5jb250ZW50V2luZG93Py5kb2N1bWVudDtcblxuICAgIGlmIChpZnJhbWVEb2N1bWVudCkge1xuICAgICAgLy8gUsOpY3Vww6lyZXIgdG91cyBsZXMgc3R5bGVzIChsaWVucyBDU1MpXG4gICAgICBjb25zdCBsaW5rcyA9IEFycmF5LmZyb20odGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGlua1tyZWw9XCJzdHlsZXNoZWV0XCJdJykpO1xuICAgICAgbGlua3MuZm9yRWFjaCgobGluaykgPT4ge1xuICAgICAgICBjb25zdCBuZXdMaW5rID0gaWZyYW1lRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICBuZXdMaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgICAgbmV3TGluay5ocmVmID0gbGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgICAgaWYgKG5ld0xpbmsuaHJlZikgaWZyYW1lRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChuZXdMaW5rKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBSw6ljdXDDqXJlciB0b3VzIGxlcyBgc3R5bGVzYCBlbiBsaWduZVxuICAgICAgY29uc3QgaW5saW5lU3R5bGVzID0gQXJyYXkuZnJvbSh0aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZScpKTtcbiAgICAgIGlubGluZVN0eWxlcy5mb3JFYWNoKChzdHlsZSkgPT4ge1xuICAgICAgICBjb25zdCBuZXdTdHlsZSA9IGlmcmFtZURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgIG5ld1N0eWxlLmlubmVySFRNTCA9IHN0eWxlLmlubmVySFRNTDtcbiAgICAgICAgaWZyYW1lRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChuZXdTdHlsZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RGF0YSh2YWx1ZTogc3RyaW5nLCBvcHRzPzogeyBhbmNob3I/OiBzdHJpbmc7IGFkZFRvTmF2aWdhdGlvbkhpc3Rvcnk/OiBib29sZWFuIH0pIHtcbiAgICBjb25zdCBhbmNob3IgPSBvcHRzPy5hbmNob3IgfHwgbnVsbDtcblxuICAgIGlmICh0aGlzLl9kYXRhICE9PSB2YWx1ZSB8fCB0aGlzLl9hbmNob3IgIT09IGFuY2hvcikge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIC8vIFNhdmUgY3VycmVudCBzdGF0ZSB0byBuYXZpZ2F0aW9uIGhpc3RvcnlcbiAgICAgICAgaWYgKG9wdHM/LmFkZFRvTmF2aWdhdGlvbkhpc3RvcnkpIHtcbiAgICAgICAgICB0aGlzLl9uYXZIaXN0b3J5LnB1c2goe1xuICAgICAgICAgICAgc3JjOiB0aGlzLl9zcmMsXG4gICAgICAgICAgICBmYWxsYmFja1NyYzogdGhpcy5fZmFsbGJhY2tTcmMsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLl9kYXRhLFxuICAgICAgICAgICAgYW5jaG9yOiB0aGlzLl9hbmNob3IsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kYXRhID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2FuY2hvciA9IGFuY2hvcjtcblxuICAgICAgICAvLyBDbGVhciBzcmNcbiAgICAgICAgdGhpcy5fc3JjID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmFsbGJhY2tTcmMgPSBudWxsO1xuXG4gICAgICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRTcmMoc3JjOiBzdHJpbmcsIG9wdHM/OiB7IGZhbGxiYWNrU3JjPzogc3RyaW5nOyBhbmNob3I/OiBzdHJpbmc7IGFkZFRvTmF2aWdhdGlvbkhpc3Rvcnk/OiBib29sZWFuIH0pIHtcbiAgICAvLyBDbGVhbiBVUkwgKHJlbW92ZSBmcmFnbWVudCBhbmQgcXVlcnkpXG4gICAgY29uc3QgYW5jaG9yID0gb3B0cz8uYW5jaG9yIHx8IFVybFV0aWxzLmdldEZyYWdtZW50KHNyYyk7XG4gICAgc3JjID0gVXJsVXRpbHMuc3RyaXBGcmFnbWVudEFuZFF1ZXJ5KHNyYyk7XG4gICAgbGV0IGZhbGxiYWNrU3JjID0gb3B0cz8uZmFsbGJhY2tTcmMgPyBVcmxVdGlscy5zdHJpcEZyYWdtZW50QW5kUXVlcnkob3B0cy5mYWxsYmFja1NyYykgOiBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3NyYyAhPT0gc3JjIHx8IHRoaXMuX2ZhbGxiYWNrU3JjICE9PSBmYWxsYmFja1NyYyB8fCB0aGlzLl9hbmNob3IgIT09IGFuY2hvcikge1xuICAgICAgY29uc3QgdXJsID0gc3JjID8gc3JjICsgKGlzTm90TmlsT3JCbGFuayhhbmNob3IpID8gYCMke2FuY2hvcn1gIDogJycpIDogbnVsbDtcbiAgICAgIGlmICh1cmwpIGNvbnNvbGUuZGVidWcoYFttYXJrZG93bl0gTG9hZGluZyAke3VybH0uLi5gKTtcblxuICAgICAgLy8gR2l2ZSBiYXNlVXJsIHRvIHRoZSBzZXJ2aWNlLCB0byBiZSBhYmxlIHRvIHJlc29sdmUgcmVsYXRpdmUgcGF0aCAtIGUuZy4gaW1hZ2VzKVxuICAgICAgaWYgKHNyYyAmJiBVcmxVdGlscy5pc0V4dGVybmFsVXJsKHNyYykpIHtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gVXJsVXRpbHMuZ2V0UGFyZW50KHNyYyk7XG4gICAgICAgIHRoaXMubWFya2Rvd25TZXJ2aWNlLnNldEJhc2VVcmwodGhpcy5iYXNlVXJsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNyYykge1xuICAgICAgICAvLyBTYXZlIGN1cnJlbnQgc3RhdGUgdG8gbmF2aWdhdGlvbiBoaXN0b3J5XG4gICAgICAgIGlmIChvcHRzPy5hZGRUb05hdmlnYXRpb25IaXN0b3J5KSB7XG4gICAgICAgICAgdGhpcy5fbmF2SGlzdG9yeS5wdXNoKHtcbiAgICAgICAgICAgIHNyYzogdGhpcy5fc3JjLFxuICAgICAgICAgICAgZmFsbGJhY2tTcmM6IHRoaXMuX2ZhbGxiYWNrU3JjLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5fZGF0YSxcbiAgICAgICAgICAgIGFuY2hvcjogdGhpcy5fYW5jaG9yLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3JjID0gc3JjO1xuICAgICAgICB0aGlzLl9mYWxsYmFja1NyYyA9IGZhbGxiYWNrU3JjO1xuICAgICAgICB0aGlzLl9hbmNob3IgPSBhbmNob3I7XG5cbiAgICAgICAgLy8gQ2xlYXIgZGF0YVxuICAgICAgICB0aGlzLl9kYXRhID0gbnVsbDtcblxuICAgICAgICAvLyBSZXNldCBlcnJvclxuICAgICAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICAgICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zcmMgPSBudWxsO1xuICAgICAgICB0aGlzLl9mYWxsYmFja1NyYyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2FuY2hvciA9IG51bGw7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uUmVhZHkoKSB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5fc3JjID8gdGhpcy5fc3JjICsgKGlzTm90TmlsT3JCbGFuayh0aGlzLl9hbmNob3IpID8gYCMke3RoaXMuX2FuY2hvcn1gIDogJycpIDogbnVsbDtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFttYXJrZG93bl0gUmVhZHkgLSAke3VybH1gKTtcbiAgICAgIC8vIENsZWFyIGZhbGxiYWNrIChubyBtb3JlIG5lZWQpXG4gICAgICBpZiAodGhpcy5fZmFsbGJhY2tTcmMpIHRoaXMuX2ZhbGxiYWNrU3JjID0gbnVsbDtcblxuICAgICAgLy8gRW1pdCBjaGFuZ2VcbiAgICAgIHRoaXMubWFya2Rvd25VcmxDaGFuZ2UuZW1pdCh1cmwpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRMaXN0ZW5DbGlja0V2ZW50cygpO1xuXG4gICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcblxuICAgIC8vIFNjcm9sbCB0byBhbmNob3JcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKHRoaXMuX2FuY2hvcikpIHtcbiAgICAgIHRoaXMubWFya2Rvd25TZXJ2aWNlLnNjcm9sbFRvQW5jaG9yKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCB0aGlzLl9hbmNob3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvbkxvYWRFcnJvcihlcnJvcj86IHN0cmluZyB8IEVycm9yKSB7XG4gICAgLy8gVHJhbnNsYXRlIGVycm9yXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgdGhpcy5uZXR3b3JrLm9mZmxpbmUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFttYXJrZG93bl0gRXJyb3IgbG9hZGluZyBtYXJrZG93biBVUkwgeyR7dGhpcy5zcmN9fSAob2ZmbGluZTogdHJ1ZSk6IGAsIGVycm9yKTtcbiAgICAgIHRoaXMuZXJyb3IgPSAnTkVUV09SSy5JTkZPLk9GRkxJTkUnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXRyeSB3aXRoIGZhbGxiYWNrIFVSTFxuICAgICAgaWYgKHRoaXMuX2ZhbGxiYWNrU3JjKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoYFttYXJrZG93bl0gRXJyb3IgbG9hZGluZyBtYXJrZG93biBVUkwgeyR7dGhpcy5zcmN9fSAtIGZhbGxiYWNrIHRvIFVSTCAke3RoaXMuX2ZhbGxiYWNrU3JjfWApO1xuICAgICAgICB0aGlzLnNldFNyYyh0aGlzLl9mYWxsYmFja1NyYywgeyBhbmNob3I6IHRoaXMuX2FuY2hvciB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmVycm9yKGBbbWFya2Rvd25dIEVycm9yIGxvYWRpbmcgbWFya2Rvd24gVVJMIHske3RoaXMuc3JjfX0gKG9mZmxpbmU6IHRydWUpOiBgLCBlcnJvcik7XG4gICAgICB0aGlzLmVycm9yID0gJ0VSUk9SLkxPQURfREFUQV9FUlJPUic7XG4gICAgfVxuXG4gICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydExpc3RlbkNsaWNrRXZlbnRzKCkge1xuICAgIHRoaXMuX2NsaWNrU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2NsaWNrU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLy8gTGlzdGVuIGZvciBjbGljayBsaW5rIHRvIE1hcmtkb3duIFVSTFxuICAgIHRoaXMuX2NsaWNrU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMubWFya2Rvd25TZXJ2aWNlLm9uQ2xpY2tNYXJrZG93blVybC5zdWJzY3JpYmUoKGhyZWYpID0+IHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW21hcmtkb3duXSBSZWNlaXZlZCBjbGljayBldmVudCwgb24gYSBtYXJrZG93biBVUkwnLCBocmVmKTtcblxuICAgICAgICBsZXQgZnJhZ21lbnQgPSBVcmxVdGlscy5nZXRGcmFnbWVudChocmVmKTtcbiAgICAgICAgbGV0IHVybCA9IFVybFV0aWxzLnN0cmlwRnJhZ21lbnRBbmRRdWVyeShocmVmKTtcbiAgICAgICAgbGV0IGZhbGxiYWNrVXJsID0gbnVsbDtcblxuICAgICAgICAvLyBSZXNvbHZlIHJlbGF0aXZlIHBhdGhcbiAgICAgICAgaWYgKFVybFV0aWxzLmlzUmVsYXRpdmVVcmwoaHJlZikgJiYgdGhpcy5iYXNlVXJsKSB7XG4gICAgICAgICAgLy8gR2V0IGFic29sdXRlIHVybFxuICAgICAgICAgIHVybCA9IE1hcmtkb3duVXRpbHMucmVzb2x2ZVJlbGF0aXZlVXJsKHRoaXMuYmFzZVVybCwgaHJlZik7XG5cbiAgICAgICAgICAvLyBDcmVhdGUgYSBmYWxsYmFjayB1cmwsIGluIHJlbGF0aXZlIHBhdGggd2FzIHdyb25nXG4gICAgICAgICAgZmFsbGJhY2tVcmwgPSBNYXJrZG93blV0aWxzLnJlc29sdmVSZWxhdGl2ZVVybCh0aGlzLmJhc2VVcmwsIGhyZWYsIHsgYWJzb2x1dGVCeURlZmF1bHQ6IHRydWUgfSk7XG4gICAgICAgICAgZmFsbGJhY2tVcmwgPSB1cmwgPT09IGZhbGxiYWNrVXJsID8gbnVsbCA6IGZhbGxiYWNrVXJsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3BlbmluZyB0aGUgbmV3IFVSTFxuICAgICAgICB0aGlzLnNldFNyYyh1cmwsIHsgZmFsbGJhY2tTcmM6IGZhbGxiYWNrVXJsLCBhbmNob3I6IGZyYWdtZW50LCBhZGRUb05hdmlnYXRpb25IaXN0b3J5OiB0aGlzLmVuYWJsZU5hdmlnYXRpb25IaXN0b3J5IH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtBc0xvYWRlZCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtBc0xvYWRpbmcoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0RXJyb3IoKSB7XG4gICAgdGhpcy5lcnJvciA9IG51bGw7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPGFwcC1kZWJ1ZyAqbmdJZj1cImRlYnVnXCI+XG4gIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgPGlvbi1yb3c+XG4gICAgICA8aW9uLWNvbD5cbiAgICAgICAgbG9hZGluZzoge3sgbG9hZGluZyB9fVxuICAgICAgICA8YnIgLz5cbiAgICAgICAgZXJyb3I6IHt7IGVycm9yIH19XG4gICAgICAgIDxiciAvPlxuICAgICAgICA8YnIgLz5cbiAgICAgICAgYmFzZVVybDoge3sgYmFzZVVybCB9fVxuICAgICAgICA8YnIgLz5cbiAgICAgICAgbWFya2Rvd25Vcmw6IHt7IHNyYyB9fVxuICAgICAgICA8YnIgLz5cbiAgICAgICAgbWFya2Rvd25GcmFnbWVudDoge3sgX2FuY2hvciB9fVxuICAgICAgICA8YnIgLz5cbiAgICAgICAgbWFya2Rvd25Db250ZW50OiB7eyBkYXRhIH19XG4gICAgICAgIDxiciAvPlxuICAgICAgPC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cbiAgPC9pb24tZ3JpZD5cbjwvYXBwLWRlYnVnPlxuXG48IS0tIGVycm9yIC0tPlxuQGlmIChzaG93RXJyb3IgJiYgZXJyb3I7IGFzIGVycm9yKSB7XG4gIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiBAc2xpZGVEb3duQW5pbWF0aW9uPlxuICAgIDxpb24taWNvbiBjb2xvcj1cImRhbmdlclwiIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJhbGVydC1jaXJjbGVcIj48L2lvbi1pY29uPlxuICAgIDxpb24tbGFiZWwgY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cImVycm9yXCIgW2lubmVySFRNTF09XCJlcnJvciB8IHRyYW5zbGF0ZVwiPjwvaW9uLWxhYmVsPlxuICA8L2lvbi1pdGVtPlxufSBAZWxzZSB7XG4gIEBpZiAoZGF0YSkge1xuICAgIDxtYXJrZG93biBbZGF0YV09XCJkYXRhXCIgKHJlYWR5KT1cIm9uUmVhZHkoKVwiIGVtb2ppPjwvbWFya2Rvd24+XG4gIH0gQGVsc2UgaWYgKHNyYykge1xuICAgIDxtYXJrZG93biBbc3JjXT1cInNyY1wiIChlcnJvcik9XCJvbkxvYWRFcnJvcigkZXZlbnQpXCIgKHJlYWR5KT1cIm9uUmVhZHkoKVwiIGVtb2ppPjwvbWFya2Rvd24+XG4gIH1cbn1cblxuPCEtLSBsb2FkaW5nIHNwaW5uZXIgLS0+XG5AaWYgKGxvYWRpbmcpIHtcbiAgPGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nUGFyYWdyYXBoXCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdQYXJhZ3JhcGhcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1BhcmFncmFwaFwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbn1cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nUGFyYWdyYXBoPlxuICA8cD5cbiAgICA8aW9uLXNrZWxldG9uLXRleHQgW2FuaW1hdGVkXT1cImFuaW1hdGVkXCIgc3R5bGU9XCJ3aWR0aDogNzUlOyBtYXJnaW4taW5saW5lLXN0YXJ0OiA1JVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgPGlvbi1za2VsZXRvbi10ZXh0IFthbmltYXRlZF09XCJhbmltYXRlZFwiIHN0eWxlPVwid2lkdGg6IDgwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgPGlvbi1za2VsZXRvbi10ZXh0IFthbmltYXRlZF09XCJhbmltYXRlZFwiIHN0eWxlPVwid2lkdGg6IDgwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgPGlvbi1za2VsZXRvbi10ZXh0IFthbmltYXRlZF09XCJhbmltYXRlZFwiIHN0eWxlPVwid2lkdGg6IDgwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgPGlvbi1za2VsZXRvbi10ZXh0IFthbmltYXRlZF09XCJhbmltYXRlZFwiIHN0eWxlPVwid2lkdGg6IDgwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgPGlvbi1za2VsZXRvbi10ZXh0IFthbmltYXRlZF09XCJhbmltYXRlZFwiIHN0eWxlPVwid2lkdGg6IDgwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gIDwvcD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Directive, HostListener } from '@angular/core';
|
|
2
|
+
import { Subscription } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./markdown.service";
|
|
5
|
+
export class MarkdownDirective {
|
|
6
|
+
service;
|
|
7
|
+
element;
|
|
8
|
+
_subscription = new Subscription();
|
|
9
|
+
constructor(service, element) {
|
|
10
|
+
this.service = service;
|
|
11
|
+
this.element = element;
|
|
12
|
+
// DEBUG
|
|
13
|
+
//console.debug('[markdown] Creating markdown directive');
|
|
14
|
+
}
|
|
15
|
+
processAnchors() {
|
|
16
|
+
// Listening click events
|
|
17
|
+
this._subscription.add(this.service.listenClickEvents(this.element.nativeElement));
|
|
18
|
+
}
|
|
19
|
+
ngOnDestroy() {
|
|
20
|
+
this._subscription.unsubscribe();
|
|
21
|
+
}
|
|
22
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MarkdownDirective, deps: [{ token: i1.MarkdownService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
23
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: MarkdownDirective, selector: "markdown,[markdown]", host: { listeners: { "ready": "processAnchors()" } }, ngImport: i0 });
|
|
24
|
+
}
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MarkdownDirective, decorators: [{
|
|
26
|
+
type: Directive,
|
|
27
|
+
args: [{
|
|
28
|
+
selector: 'markdown,[markdown]',
|
|
29
|
+
}]
|
|
30
|
+
}], ctorParameters: () => [{ type: i1.MarkdownService }, { type: i0.ElementRef }], propDecorators: { processAnchors: [{
|
|
31
|
+
type: HostListener,
|
|
32
|
+
args: ['ready']
|
|
33
|
+
}] } });
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWFya2Rvd24vbWFya2Rvd24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUtwQyxNQUFNLE9BQU8saUJBQWlCO0lBSWxCO0lBQ0E7SUFKRixhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUUzQyxZQUNVLE9BQXdCLEVBQ3hCLE9BQWdDO1FBRGhDLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQ3hCLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBRXhDLFFBQVE7UUFDUiwwREFBMEQ7SUFDNUQsQ0FBQztJQUdNLGNBQWM7UUFDbkIseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDO3dHQW5CVSxpQkFBaUI7NEZBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFIN0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO2lCQUNoQzs2R0FhUSxjQUFjO3NCQURwQixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXJrZG93blNlcnZpY2UgfSBmcm9tICcuL21hcmtkb3duLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ21hcmtkb3duLFttYXJrZG93bl0nLFxufSlcbmV4cG9ydCBjbGFzcyBNYXJrZG93bkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlcnZpY2U6IE1hcmtkb3duU2VydmljZSxcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gICkge1xuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdbbWFya2Rvd25dIENyZWF0aW5nIG1hcmtkb3duIGRpcmVjdGl2ZScpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigncmVhZHknKVxuICBwdWJsaWMgcHJvY2Vzc0FuY2hvcnMoKSB7XG4gICAgLy8gTGlzdGVuaW5nIGNsaWNrIGV2ZW50c1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5zZXJ2aWNlLmxpc3RlbkNsaWNrRXZlbnRzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@ionic/angular";
|
|
4
|
+
import * as i2 from "../../core/services/platform.service";
|
|
5
|
+
import * as i3 from "../../core/services/local-settings.service";
|
|
6
|
+
import * as i4 from "@ngx-translate/core";
|
|
7
|
+
import * as i5 from "../../core/services/network.service";
|
|
8
|
+
import * as i6 from "../toolbar/modal-toolbar";
|
|
9
|
+
import * as i7 from "./markdown.component";
|
|
10
|
+
export class AppMarkdownModal {
|
|
11
|
+
injector;
|
|
12
|
+
viewCtrl;
|
|
13
|
+
platform;
|
|
14
|
+
settings;
|
|
15
|
+
translate;
|
|
16
|
+
network;
|
|
17
|
+
cd;
|
|
18
|
+
loading = true;
|
|
19
|
+
error = undefined;
|
|
20
|
+
debug;
|
|
21
|
+
title;
|
|
22
|
+
showError = true;
|
|
23
|
+
canPrint = false;
|
|
24
|
+
markdownContent;
|
|
25
|
+
markdownUrl;
|
|
26
|
+
static async show(modalCtrl, options) {
|
|
27
|
+
const modal = await modalCtrl.create({
|
|
28
|
+
component: AppMarkdownModal,
|
|
29
|
+
componentProps: options,
|
|
30
|
+
keyboardClose: true,
|
|
31
|
+
cssClass: options?.cssClass || 'modal-large',
|
|
32
|
+
});
|
|
33
|
+
await modal.present();
|
|
34
|
+
return modal.onWillDismiss();
|
|
35
|
+
}
|
|
36
|
+
constructor(injector, viewCtrl, platform, settings, translate, network, cd) {
|
|
37
|
+
this.injector = injector;
|
|
38
|
+
this.viewCtrl = viewCtrl;
|
|
39
|
+
this.platform = platform;
|
|
40
|
+
this.settings = settings;
|
|
41
|
+
this.translate = translate;
|
|
42
|
+
this.network = network;
|
|
43
|
+
this.cd = cd;
|
|
44
|
+
// TODO: for DEV only
|
|
45
|
+
//this.debug = !environment.production;
|
|
46
|
+
}
|
|
47
|
+
close(_) {
|
|
48
|
+
return this.viewCtrl.dismiss();
|
|
49
|
+
}
|
|
50
|
+
goBack(event, content) {
|
|
51
|
+
if (content?.canGoBack) {
|
|
52
|
+
content.goBack(event);
|
|
53
|
+
this.cd.markForCheck();
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this.close(event);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppMarkdownModal, deps: [{ token: i0.Injector }, { token: i1.ModalController }, { token: i2.PlatformService }, { token: i3.LocalSettingsService }, { token: i4.TranslateService }, { token: i5.NetworkService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
60
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppMarkdownModal, selector: "app-markdown-modal", inputs: { debug: "debug", title: "title", showError: "showError", canPrint: "canPrint", markdownContent: "markdownContent", markdownUrl: "markdownUrl" }, ngImport: i0, template: "@if (title || canPrint) {\n <app-modal-toolbar color=\"light\" [title]=\"title | translate\" (cancel)=\"close($event)\">\n @if (content.canGoBack) {\n <ion-button slot=\"start\" class=\"back-button\" (click)=\"goBack($event, content)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n }\n @if (canPrint) {\n <ion-button slot=\"end\" class=\"back-button\" (click)=\"content.print($event)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"print\"></ion-icon>\n </ion-button>\n }\n </app-modal-toolbar>\n}\n\n<ion-content class=\"ion-padding\">\n <app-markdown-content\n #content\n [src]=\"markdownUrl\"\n [data]=\"markdownContent\"\n [showError]=\"showError\"\n [debug]=\"debug\"\n [updateRouteLocation]=\"false\"\n ></app-markdown-content>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{ 'COMMON.BTN_CLOSE' | translate }}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i6.ModalToolbarComponent, selector: "app-modal-toolbar", inputs: ["modalName", "title", "color", "showSpinner", "canValidate", "validateIcon"], outputs: ["cancel", "validate"] }, { kind: "component", type: i7.AppMarkdownContent, selector: "app-markdown-content", inputs: ["data", "src", "anchor", "debug", "showError", "animated", "enableNavigationHistory", "updateRouteLocation"], outputs: ["markdownUrlChange"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
61
|
+
}
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppMarkdownModal, decorators: [{
|
|
63
|
+
type: Component,
|
|
64
|
+
args: [{ selector: 'app-markdown-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (title || canPrint) {\n <app-modal-toolbar color=\"light\" [title]=\"title | translate\" (cancel)=\"close($event)\">\n @if (content.canGoBack) {\n <ion-button slot=\"start\" class=\"back-button\" (click)=\"goBack($event, content)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n }\n @if (canPrint) {\n <ion-button slot=\"end\" class=\"back-button\" (click)=\"content.print($event)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"print\"></ion-icon>\n </ion-button>\n }\n </app-modal-toolbar>\n}\n\n<ion-content class=\"ion-padding\">\n <app-markdown-content\n #content\n [src]=\"markdownUrl\"\n [data]=\"markdownContent\"\n [showError]=\"showError\"\n [debug]=\"debug\"\n [updateRouteLocation]=\"false\"\n ></app-markdown-content>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{ 'COMMON.BTN_CLOSE' | translate }}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n" }]
|
|
65
|
+
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.ModalController }, { type: i2.PlatformService }, { type: i3.LocalSettingsService }, { type: i4.TranslateService }, { type: i5.NetworkService }, { type: i0.ChangeDetectorRef }], propDecorators: { debug: [{
|
|
66
|
+
type: Input
|
|
67
|
+
}], title: [{
|
|
68
|
+
type: Input
|
|
69
|
+
}], showError: [{
|
|
70
|
+
type: Input
|
|
71
|
+
}], canPrint: [{
|
|
72
|
+
type: Input
|
|
73
|
+
}], markdownContent: [{
|
|
74
|
+
type: Input
|
|
75
|
+
}], markdownUrl: [{
|
|
76
|
+
type: Input
|
|
77
|
+
}] } });
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24ubW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXJrZG93bi9tYXJrZG93bi5tb2RhbC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL21hcmtkb3duLm1vZGFsLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQVksS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFzQnZHLE1BQU0sT0FBTyxnQkFBZ0I7SUF5QmY7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUE5QkYsT0FBTyxHQUFHLElBQUksQ0FBQztJQUNmLEtBQUssR0FBVyxTQUFTLENBQUM7SUFFM0IsS0FBSyxDQUFVO0lBQ2YsS0FBSyxDQUFTO0lBQ2QsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNqQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLGVBQWUsQ0FBUztJQUN4QixXQUFXLENBQVM7SUFFN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBMEIsRUFBRSxPQUFnQztRQUM1RSxNQUFNLEtBQUssR0FBRyxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDbkMsU0FBUyxFQUFFLGdCQUFnQjtZQUMzQixjQUFjLEVBQUUsT0FBTztZQUN2QixhQUFhLEVBQUUsSUFBSTtZQUNuQixRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsSUFBSSxhQUFhO1NBQzdDLENBQUMsQ0FBQztRQUVILE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRXRCLE9BQU8sS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxZQUNZLFFBQWtCLEVBQ2xCLFFBQXlCLEVBQ3pCLFFBQXlCLEVBQ3pCLFFBQThCLEVBQzlCLFNBQTJCLEVBQzNCLE9BQXVCLEVBQ3ZCLEVBQXFCO1FBTnJCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsYUFBUSxHQUFSLFFBQVEsQ0FBc0I7UUFDOUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFFL0IscUJBQXFCO1FBQ3JCLHVDQUF1QztJQUN6QyxDQUFDO0lBRUQsS0FBSyxDQUFDLENBQVM7UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFZLEVBQUUsT0FBMkI7UUFDOUMsSUFBSSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDdkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQzt3R0FoRFUsZ0JBQWdCOzRGQUFoQixnQkFBZ0Isb05DdEI3Qix5dUNBb0NBOzs0RkRkYSxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0Usb0JBQW9CLG1CQUViLHVCQUF1QixDQUFDLE1BQU07d1FBTXRDLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3RvciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGFsQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFBsYXRmb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBOZXR3b3JrU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcE1hcmtkb3duQ29udGVudCB9IGZyb20gJy4vbWFya2Rvd24uY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBBcHBNYXJrZG93bk1vZGFsT3B0aW9ucyB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBtYXJrZG93bkNvbnRlbnQ/OiBzdHJpbmc7XG4gIG1hcmtkb3duVXJsPzogc3RyaW5nO1xuICBzaG93RXJyb3I/OiBib29sZWFuO1xuICBjc3NDbGFzcz86IHN0cmluZztcbiAgY2FuUHJpbnQ/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbWFya2Rvd24tbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFya2Rvd24ubW9kYWwuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBNYXJrZG93bk1vZGFsIGltcGxlbWVudHMgQXBwTWFya2Rvd25Nb2RhbE9wdGlvbnMge1xuICBwcm90ZWN0ZWQgbG9hZGluZyA9IHRydWU7XG4gIHByb3RlY3RlZCBlcnJvcjogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpIGRlYnVnOiBib29sZWFuO1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93RXJyb3IgPSB0cnVlO1xuICBASW5wdXQoKSBjYW5QcmludCA9IGZhbHNlO1xuICBASW5wdXQoKSBtYXJrZG93bkNvbnRlbnQ6IHN0cmluZztcbiAgQElucHV0KCkgbWFya2Rvd25Vcmw6IHN0cmluZztcblxuICBzdGF0aWMgYXN5bmMgc2hvdyhtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlciwgb3B0aW9uczogQXBwTWFya2Rvd25Nb2RhbE9wdGlvbnMpIHtcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IG1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBBcHBNYXJrZG93bk1vZGFsLFxuICAgICAgY29tcG9uZW50UHJvcHM6IG9wdGlvbnMsXG4gICAgICBrZXlib2FyZENsb3NlOiB0cnVlLFxuICAgICAgY3NzQ2xhc3M6IG9wdGlvbnM/LmNzc0NsYXNzIHx8ICdtb2RhbC1sYXJnZScsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBtb2RhbC5wcmVzZW50KCk7XG5cbiAgICByZXR1cm4gbW9kYWwub25XaWxsRGlzbWlzcygpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgdmlld0N0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG5ldHdvcms6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgLy8gVE9ETzogZm9yIERFViBvbmx5XG4gICAgLy90aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBjbG9zZShfPzogRXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy52aWV3Q3RybC5kaXNtaXNzKCk7XG4gIH1cblxuICBnb0JhY2soZXZlbnQ6IEV2ZW50LCBjb250ZW50OiBBcHBNYXJrZG93bkNvbnRlbnQpIHtcbiAgICBpZiAoY29udGVudD8uY2FuR29CYWNrKSB7XG4gICAgICBjb250ZW50LmdvQmFjayhldmVudCk7XG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsb3NlKGV2ZW50KTtcbiAgICB9XG4gIH1cbn1cbiIsIkBpZiAodGl0bGUgfHwgY2FuUHJpbnQpIHtcbiAgPGFwcC1tb2RhbC10b29sYmFyIGNvbG9yPVwibGlnaHRcIiBbdGl0bGVdPVwidGl0bGUgfCB0cmFuc2xhdGVcIiAoY2FuY2VsKT1cImNsb3NlKCRldmVudClcIj5cbiAgICBAaWYgKGNvbnRlbnQuY2FuR29CYWNrKSB7XG4gICAgICA8aW9uLWJ1dHRvbiBzbG90PVwic3RhcnRcIiBjbGFzcz1cImJhY2stYnV0dG9uXCIgKGNsaWNrKT1cImdvQmFjaygkZXZlbnQsIGNvbnRlbnQpXCIgcm91dGVyRGlyZWN0aW9uPVwiYmFja1wiPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJhcnJvdy1iYWNrXCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICB9XG4gICAgQGlmIChjYW5QcmludCkge1xuICAgICAgPGlvbi1idXR0b24gc2xvdD1cImVuZFwiIGNsYXNzPVwiYmFjay1idXR0b25cIiAoY2xpY2spPVwiY29udGVudC5wcmludCgkZXZlbnQpXCIgcm91dGVyRGlyZWN0aW9uPVwiYmFja1wiPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJwcmludFwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgfVxuICA8L2FwcC1tb2RhbC10b29sYmFyPlxufVxuXG48aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICA8YXBwLW1hcmtkb3duLWNvbnRlbnRcbiAgICAjY29udGVudFxuICAgIFtzcmNdPVwibWFya2Rvd25VcmxcIlxuICAgIFtkYXRhXT1cIm1hcmtkb3duQ29udGVudFwiXG4gICAgW3Nob3dFcnJvcl09XCJzaG93RXJyb3JcIlxuICAgIFtkZWJ1Z109XCJkZWJ1Z1wiXG4gICAgW3VwZGF0ZVJvdXRlTG9jYXRpb25dPVwiZmFsc2VcIlxuICA+PC9hcHAtbWFya2Rvd24tY29udGVudD5cbjwvaW9uLWNvbnRlbnQ+XG5cbjxpb24tZm9vdGVyIGhpZGRlbi14cyBoaWRkZW4tc20gaGlkZGVuLW1vYmlsZT5cbiAgPGlvbi10b29sYmFyPlxuICAgIDxpb24tcm93IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgIDxpb24tY29sPjwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJzb2xpZFwiIGNvbG9yPVwidGVydGlhcnlcIiAoY2xpY2spPVwiY2xvc2UoKVwiPnt7ICdDT01NT04uQlROX0NMT1NFJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICA8L2lvbi1yb3c+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1mb290ZXI+XG4iXX0=
|