croco-html 2.0.7 → 2.0.9
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/esm2022/lib/components/xml-tags/file-image-tag-view/file-image-tag-view.component.mjs +4 -2
- package/esm2022/lib/components/xml-tags/xml-tag-external-video/resize-observable.mjs +13 -0
- package/esm2022/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.mjs +29 -14
- package/fesm2022/croco-html.mjs +67 -39
- package/fesm2022/croco-html.mjs.map +1 -1
- package/lib/components/xml-tags/xml-tag-external-video/resize-observable.d.ts +2 -0
- package/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.d.ts +6 -4
- package/lib/index.d.ts +6 -6
- package/package.json +2 -2
package/esm2022/lib/components/xml-tags/file-image-tag-view/file-image-tag-view.component.mjs
CHANGED
|
@@ -15,7 +15,9 @@ export class FileImageTagViewComponent {
|
|
|
15
15
|
this.imageSrc = this.viewOptions.useCustomImageUrlRenderer
|
|
16
16
|
? this.viewOptions.renderImageUrl(data.fileId, 'Medium')
|
|
17
17
|
: data.src;
|
|
18
|
-
|
|
18
|
+
if (!this.imageSrc) {
|
|
19
|
+
this.imageSrc = data.src;
|
|
20
|
+
}
|
|
19
21
|
}
|
|
20
22
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: FileImageTagViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
21
23
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: FileImageTagViewComponent, selector: "croco-html-file-image-tag-view", inputs: { item: "item", viewOptions: "viewOptions" }, ngImport: i0, template: "\r\n<img class=\"mx-auto d-block img-fluid\" [src]=\"imageSrc\" alt=\"\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u043D\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043E\"/>", styles: [""] }); }
|
|
@@ -28,4 +30,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
|
|
|
28
30
|
}], viewOptions: [{
|
|
29
31
|
type: Input
|
|
30
32
|
}] } });
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pbWFnZS10YWctdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcm9jby1odG1sL3NyYy9saWIvY29tcG9uZW50cy94bWwtdGFncy9maWxlLWltYWdlLXRhZy12aWV3L2ZpbGUtaW1hZ2UtdGFnLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3JvY28taHRtbC9zcmMvbGliL2NvbXBvbmVudHMveG1sLXRhZ3MvZmlsZS1pbWFnZS10YWctdmlldy9maWxlLWltYWdlLXRhZy12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOztBQVV6RCxNQUFNLE9BQU8seUJBQXlCO0lBTHRDO1FBV0UsZ0JBQVcsR0FBb0I7WUFDN0IseUJBQXlCLEVBQUUsS0FBSztZQUNoQyxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVE7Z0JBQzdCLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztTQUNGLENBQUE7UUFFRCxhQUFRLEdBQUcsRUFBRSxDQUFDO0tBY2Y7SUFaQyxRQUFRO1FBRU4sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUF3QixDQUFDO1FBRTlDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUI7WUFDeEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO1lBQ3hELENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBRWIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7OEdBMUJVLHlCQUF5QjtrR0FBekIseUJBQXlCLDRIQ1Z0QyxrTkFDd0Y7OzJGRFMzRSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UsZ0NBQWdDOzhCQU8xQyxJQUFJO3NCQURILEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEludGVyZmFjZUJsb2NrIH0gZnJvbSAnLi4vLi4vLi4vZXh0ZW5zaW9ucy9JbnRlcmZhY2VCbG9jayc7XHJcbmltcG9ydCB7IEZpbGVJbWFnZVRhZ0RhdGEgfSBmcm9tICcuLi8uLi8uLi9leHRlbnNpb25zJztcclxuaW1wb3J0IHsgSVRhZ1ZpZXdPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Nyb2NvLWh0bWwtZmlsZS1pbWFnZS10YWctdmlldycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtaW1hZ2UtdGFnLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9maWxlLWltYWdlLXRhZy12aWV3LmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlSW1hZ2VUYWdWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBcclxuICBASW5wdXQoKVxyXG4gIGl0ZW06IEludGVyZmFjZUJsb2NrO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHZpZXdPcHRpb25zOiBJVGFnVmlld09wdGlvbnMgPSB7XHJcbiAgICB1c2VDdXN0b21JbWFnZVVybFJlbmRlcmVyOiBmYWxzZSxcclxuICAgIHJlbmRlckltYWdlVXJsKGZpbGVJZCwgc2l6ZVR5cGUpIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9LFxyXG4gIH0gXHJcblxyXG4gIGltYWdlU3JjID0gXCJcIjtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgbGV0IGRhdGEgPSB0aGlzLml0ZW0uZGF0YSBhcyBGaWxlSW1hZ2VUYWdEYXRhO1xyXG5cclxuICAgIHRoaXMuaW1hZ2VTcmMgPSB0aGlzLnZpZXdPcHRpb25zLnVzZUN1c3RvbUltYWdlVXJsUmVuZGVyZXIgXHJcbiAgICAgID8gdGhpcy52aWV3T3B0aW9ucy5yZW5kZXJJbWFnZVVybChkYXRhLmZpbGVJZCwgJ01lZGl1bScpXHJcbiAgICAgIDogZGF0YS5zcmM7XHJcblxyXG4gICAgaWYgKCF0aGlzLmltYWdlU3JjKSB7XHJcbiAgICAgIHRoaXMuaW1hZ2VTcmMgPSBkYXRhLnNyYztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiXHJcbjxpbWcgY2xhc3M9XCJteC1hdXRvIGQtYmxvY2sgaW1nLWZsdWlkXCIgW3NyY109XCJpbWFnZVNyY1wiIGFsdD1cItCY0LfQvtCx0YDQsNC20LXQvdC40LUg0L3QtSDQt9Cw0LPRgNGD0LbQtdC90L5cIi8+Il19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
export function resizeObservable(elem, options) {
|
|
3
|
+
return new Observable((subscriber) => {
|
|
4
|
+
const resizeObserver = new ResizeObserver(([entry]) => {
|
|
5
|
+
subscriber.next(entry);
|
|
6
|
+
});
|
|
7
|
+
resizeObserver.observe(elem, options);
|
|
8
|
+
return function unsubscribe() {
|
|
9
|
+
resizeObserver.unobserve(elem);
|
|
10
|
+
};
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLW9ic2VydmFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcm9jby1odG1sL3NyYy9saWIvY29tcG9uZW50cy94bWwtdGFncy94bWwtdGFnLWV4dGVybmFsLXZpZGVvL3Jlc2l6ZS1vYnNlcnZhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEMsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQWEsRUFBRSxPQUErQjtJQUM3RSxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7UUFDbkMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDcEQsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUNILGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sU0FBUyxXQUFXO1lBQ3pCLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc2l6ZU9ic2VydmFibGUoZWxlbTogRWxlbWVudCwgb3B0aW9ucz86IFJlc2l6ZU9ic2VydmVyT3B0aW9ucyk6IE9ic2VydmFibGU8UmVzaXplT2JzZXJ2ZXJFbnRyeT4ge1xyXG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xyXG4gICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKFtlbnRyeV0pID0+IHtcclxuICAgICAgc3Vic2NyaWJlci5uZXh0KGVudHJ5KTtcclxuICAgIH0pO1xyXG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbGVtLCBvcHRpb25zKTtcclxuICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpOiB2b2lkIHtcclxuICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGVsZW0pO1xyXG4gICAgfTtcclxuICB9KTtcclxufVxyXG5cclxuIl19
|
package/esm2022/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.mjs
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, signal, ViewChild } from '@angular/core';
|
|
2
|
+
import { resizeObservable } from "./resize-observable";
|
|
3
|
+
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
|
4
|
+
import { distinctUntilChanged, map } from "rxjs";
|
|
2
5
|
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/
|
|
4
|
-
import * as i2 from "@angular/
|
|
5
|
-
import * as i3 from "@angular/youtube-player";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
import * as i2 from "@angular/youtube-player";
|
|
6
8
|
export class XmlTagExternalVideoComponent {
|
|
7
9
|
set data(value) {
|
|
8
10
|
this.tagData = value.data;
|
|
@@ -12,8 +14,10 @@ export class XmlTagExternalVideoComponent {
|
|
|
12
14
|
this.videoId = this.getYouTubeId(value.link);
|
|
13
15
|
}
|
|
14
16
|
;
|
|
15
|
-
constructor(
|
|
16
|
-
this.
|
|
17
|
+
constructor(destroyRef) {
|
|
18
|
+
this.destroyRef = destroyRef;
|
|
19
|
+
this.playerWidth = signal(NaN);
|
|
20
|
+
this.playerHeight = signal(NaN);
|
|
17
21
|
}
|
|
18
22
|
ngOnInit() {
|
|
19
23
|
const youtubeIframeApiUrl = 'https://www.youtube.com/iframe_api';
|
|
@@ -24,26 +28,37 @@ export class XmlTagExternalVideoComponent {
|
|
|
24
28
|
tag.setAttribute('src', youtubeIframeApiUrl);
|
|
25
29
|
document.body.appendChild(tag);
|
|
26
30
|
}
|
|
31
|
+
if (this.playerContainerRef) {
|
|
32
|
+
resizeObservable(this.playerContainerRef.nativeElement)
|
|
33
|
+
.pipe(map(({ contentRect: { height, width } }) => ({ height, width })), distinctUntilChanged((a, b) => a.height === b.height && a.width === b.width), takeUntilDestroyed(this.destroyRef))
|
|
34
|
+
.subscribe(({ height, width }) => {
|
|
35
|
+
this.playerHeight.set(height);
|
|
36
|
+
this.playerWidth.set(width);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
27
39
|
}
|
|
28
40
|
getYouTubeId(youtubeLink) {
|
|
29
41
|
//https://www.youtube.com/watch?v=l3KfbfkxJOU
|
|
30
|
-
|
|
31
|
-
|
|
42
|
+
const url = new URL(youtubeLink);
|
|
43
|
+
if (url.pathname.endsWith('watch')) {
|
|
32
44
|
return url.searchParams.get("v");
|
|
33
45
|
}
|
|
34
46
|
//https://youtu.be/jzBneaWSswY
|
|
35
|
-
const bits =
|
|
47
|
+
const bits = url.pathname.split('/');
|
|
36
48
|
return bits[bits.length - 1];
|
|
37
49
|
}
|
|
38
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: XmlTagExternalVideoComponent, deps: [{ token:
|
|
39
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: XmlTagExternalVideoComponent, selector: "croco-html-xml-tag-external-video", inputs: { data: "data", tagData: "tagData" }, ngImport: i0, template: "<div class=\"d-flex justify-content-center\">\r\n <youtube-player height=\"
|
|
50
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: XmlTagExternalVideoComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
51
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: XmlTagExternalVideoComponent, selector: "croco-html-xml-tag-external-video", inputs: { data: "data", tagData: "tagData" }, viewQueries: [{ propertyName: "playerContainerRef", first: true, predicate: ["playerContainer"], descendants: true, static: true }], ngImport: i0, template: "<div #playerContainer class=\"d-flex justify-content-center y-video\">\r\n <youtube-player [height]=\"playerHeight()\" [width]=\"playerWidth()\" *ngIf=\"videoId\" [videoId]=\"videoId\"></youtube-player>\r\n</div>\r\n", styles: ["@media only screen and (min-width: 769px){.y-video{display:block;width:640px;height:360px;margin:0 auto}}@media only screen and (max-width: 827px){.y-video{display:block;width:100%;height:315px}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.YouTubePlayer, selector: "youtube-player", inputs: ["videoId", "height", "width", "startSeconds", "endSeconds", "suggestedQuality", "playerVars", "disableCookies", "loadApi", "disablePlaceholder", "showBeforeIframeApiLoads", "placeholderButtonLabel", "placeholderImageQuality"], outputs: ["ready", "stateChange", "error", "apiChange", "playbackQualityChange", "playbackRateChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
40
52
|
}
|
|
41
53
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: XmlTagExternalVideoComponent, decorators: [{
|
|
42
54
|
type: Component,
|
|
43
|
-
args: [{ selector: 'croco-html-xml-tag-external-video', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"d-flex justify-content-center\">\r\n <youtube-player height=\"
|
|
44
|
-
}], ctorParameters: () => [{ type:
|
|
55
|
+
args: [{ selector: 'croco-html-xml-tag-external-video', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #playerContainer class=\"d-flex justify-content-center y-video\">\r\n <youtube-player [height]=\"playerHeight()\" [width]=\"playerWidth()\" *ngIf=\"videoId\" [videoId]=\"videoId\"></youtube-player>\r\n</div>\r\n", styles: ["@media only screen and (min-width: 769px){.y-video{display:block;width:640px;height:360px;margin:0 auto}}@media only screen and (max-width: 827px){.y-video{display:block;width:100%;height:315px}}\n"] }]
|
|
56
|
+
}], ctorParameters: () => [{ type: i0.DestroyRef }], propDecorators: { data: [{
|
|
45
57
|
type: Input
|
|
46
58
|
}], tagData: [{
|
|
47
59
|
type: Input
|
|
60
|
+
}], playerContainerRef: [{
|
|
61
|
+
type: ViewChild,
|
|
62
|
+
args: ['playerContainer', { static: true }]
|
|
48
63
|
}] } });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sLXRhZy1leHRlcm5hbC12aWRlby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcm9jby1odG1sL3NyYy9saWIvY29tcG9uZW50cy94bWwtdGFncy94bWwtdGFnLWV4dGVybmFsLXZpZGVvL3htbC10YWctZXh0ZXJuYWwtdmlkZW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3JvY28taHRtbC9zcmMvbGliL2NvbXBvbmVudHMveG1sLXRhZ3MveG1sLXRhZy1leHRlcm5hbC12aWRlby94bWwtdGFnLWV4dGVybmFsLXZpZGVvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUdULEtBQUssRUFDRyxNQUFNLEVBQ2QsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7QUFRL0MsTUFBTSxPQUFPLDRCQUE0QjtJQUN2QyxJQUFvQixJQUFJLENBQUMsS0FBcUI7UUFDNUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFBQSxDQUFDO0lBRUYsSUFBb0IsT0FBTyxDQUFDLEtBQTJCO1FBQ3JELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUFBLENBQUM7SUFTRixZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBSm5DLGdCQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBR1ksQ0FBQztJQUUvQyxRQUFRO1FBQ04sTUFBTSxtQkFBbUIsR0FBRyxvQ0FBb0MsQ0FBQztRQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxlQUFlLG1CQUFtQixJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BFLDhGQUE4RjtZQUM5Riw2RUFBNkU7WUFDN0UsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBQzdDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7aUJBQ3BELElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFDaEUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQzVFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDcEM7aUJBQ0EsU0FBUyxDQUFDLENBQUMsRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsV0FBa0I7UUFFckMsNkNBQTZDO1FBQzdDLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pDLElBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQztZQUNqQyxPQUFPLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCw4QkFBOEI7UUFDOUIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDcEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDOzhHQXJEVSw0QkFBNEI7a0dBQTVCLDRCQUE0Qiw0UENyQnpDLDJOQUdBOzsyRkRrQmEsNEJBQTRCO2tCQU54QyxTQUFTOytCQUNFLG1DQUFtQyxtQkFHNUIsdUJBQXVCLENBQUMsTUFBTTsrRUFHM0IsSUFBSTtzQkFBdkIsS0FBSztnQkFJYyxPQUFPO3NCQUExQixLQUFLO2dCQUcrQyxrQkFBa0I7c0JBQXRFLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgRGVzdHJveVJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCwgc2lnbmFsLFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0ludGVyZmFjZUJsb2NrfSBmcm9tIFwiLi4vLi4vLi4vZXh0ZW5zaW9ucy9JbnRlcmZhY2VCbG9ja1wiO1xyXG5pbXBvcnQge0V4dGVybmFsVmlkZW9UYWdEYXRhfSBmcm9tICcuLi8uLi8uLi9leHRlbnNpb25zJztcclxuaW1wb3J0IHtyZXNpemVPYnNlcnZhYmxlfSBmcm9tIFwiLi9yZXNpemUtb2JzZXJ2YWJsZVwiO1xyXG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSBcIkBhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wXCI7XHJcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY3JvY28taHRtbC14bWwtdGFnLWV4dGVybmFsLXZpZGVvJyxcclxuICB0ZW1wbGF0ZVVybDogJy4veG1sLXRhZy1leHRlcm5hbC12aWRlby5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4veG1sLXRhZy1leHRlcm5hbC12aWRlby5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgWG1sVGFnRXh0ZXJuYWxWaWRlb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgcHVibGljIHNldCBkYXRhKHZhbHVlOiBJbnRlcmZhY2VCbG9jaykge1xyXG4gICAgdGhpcy50YWdEYXRhID0gdmFsdWUuZGF0YTtcclxuICB9O1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHRhZ0RhdGEodmFsdWU6IEV4dGVybmFsVmlkZW9UYWdEYXRhKSB7XHJcbiAgICB0aGlzLnZpZGVvSWQgPSB0aGlzLmdldFlvdVR1YmVJZCh2YWx1ZS5saW5rKTtcclxuICB9O1xyXG4gIEBWaWV3Q2hpbGQoJ3BsYXllckNvbnRhaW5lcicsIHtzdGF0aWM6IHRydWV9KSBwdWJsaWMgcGxheWVyQ29udGFpbmVyUmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gIHB1YmxpYyB2aWRlb0lkPzogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgcGxheWVyV2lkdGggPSBzaWduYWwoTmFOKTtcclxuICBwdWJsaWMgcGxheWVySGVpZ2h0ID0gc2lnbmFsKE5hTik7XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRlc3Ryb3lSZWYgOkRlc3Ryb3lSZWYpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHlvdXR1YmVJZnJhbWVBcGlVcmwgPSAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vaWZyYW1lX2FwaSc7XHJcbiAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtzcmM9XCIke3lvdXR1YmVJZnJhbWVBcGlVcmx9XCJdYCkpIHtcclxuICAgICAgLy8gVGhpcyBjb2RlIGxvYWRzIHRoZSBJRnJhbWUgUGxheWVyIEFQSSBjb2RlIGFzeW5jaHJvbm91c2x5LCBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucyBhdFxyXG4gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlI0dldHRpbmdfU3RhcnRlZFxyXG4gICAgICBjb25zdCB0YWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuICAgICAgdGFnLnNldEF0dHJpYnV0ZSgnc3JjJywgeW91dHViZUlmcmFtZUFwaVVybCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGFnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wbGF5ZXJDb250YWluZXJSZWYpIHtcclxuICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLnBsYXllckNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50KVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgbWFwKCh7IGNvbnRlbnRSZWN0OiB7IGhlaWdodCwgd2lkdGggfSB9KSA9PiAoeyBoZWlnaHQsIHdpZHRoIH0pKSxcclxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhLmhlaWdodCA9PT0gYi5oZWlnaHQgJiYgYS53aWR0aCA9PT0gYi53aWR0aCksXHJcbiAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoe2hlaWdodCx3aWR0aH0pID0+IHtcclxuICAgICAgICAgIHRoaXMucGxheWVySGVpZ2h0LnNldChoZWlnaHQpO1xyXG4gICAgICAgICAgdGhpcy5wbGF5ZXJXaWR0aC5zZXQod2lkdGgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRZb3VUdWJlSWQoeW91dHViZUxpbms6c3RyaW5nKTogc3RyaW5nIHtcclxuXHJcbiAgICAvL2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9bDNLZmJma3hKT1VcclxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoeW91dHViZUxpbmspO1xyXG4gICAgaWYodXJsLnBhdGhuYW1lLmVuZHNXaXRoKCd3YXRjaCcpKXtcclxuICAgICAgcmV0dXJuIHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwidlwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvL2h0dHBzOi8veW91dHUuYmUvanpCbmVhV1Nzd1lcclxuICAgIGNvbnN0IGJpdHMgPSB1cmwucGF0aG5hbWUuc3BsaXQoJy8nKVxyXG4gICAgcmV0dXJuIGJpdHNbYml0cy5sZW5ndGggLSAxXTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAjcGxheWVyQ29udGFpbmVyIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgeS12aWRlb1wiPlxyXG4gIDx5b3V0dWJlLXBsYXllciBbaGVpZ2h0XT1cInBsYXllckhlaWdodCgpXCIgW3dpZHRoXT1cInBsYXllcldpZHRoKClcIiAqbmdJZj1cInZpZGVvSWRcIiBbdmlkZW9JZF09XCJ2aWRlb0lkXCI+PC95b3V0dWJlLXBsYXllcj5cclxuPC9kaXY+XHJcbiJdfQ==
|