croco-html 2.0.8 → 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/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 +64 -38
- 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
|
@@ -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==
|