ctt-babylon 0.11.3 → 0.11.5
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/core/babylon-av-img-social/babylon-av-img-social.component.mjs +5 -5
- package/esm2022/lib/components/core/babylon-av-img-social/babylon-av-img-social.directive.mjs +6 -4
- package/esm2022/lib/components/core/babylon-ba-img-txt/babylon-ba-img-txt.component.mjs +3 -3
- package/esm2022/lib/components/core/babylon-ba-sli-img-txt/babylon-ba-sli-img-txt.component.mjs +2 -2
- package/esm2022/lib/components/core/babylon-booking-widget/babylon-booking-widget.component.mjs +100 -56
- package/esm2022/lib/components/core/babylon-he-svg-list/babylon-he-svg-list.component.mjs +7 -4
- package/esm2022/lib/components/core/babylon-sli-c1-img-text/babylon-sli-c1-img-text.component.mjs +12 -5
- package/esm2022/lib/components/core/babylon-sli-c5-img-txt/babylon-sli-c5-img-txt.component.mjs +3 -3
- package/esm2022/lib/services/mapper/mapper.service.mjs +2 -2
- package/fesm2022/ctt-babylon.mjs +129 -75
- package/fesm2022/ctt-babylon.mjs.map +1 -1
- package/lib/components/core/babylon-booking-widget/babylon-booking-widget.component.d.ts +10 -39
- package/lib/components/core/babylon-sli-c1-img-text/babylon-sli-c1-img-text.component.d.ts +2 -1
- package/package.json +1 -1
package/esm2022/lib/components/core/babylon-booking-widget/babylon-booking-widget.component.mjs
CHANGED
|
@@ -1,16 +1,32 @@
|
|
|
1
1
|
import { isPlatformBrowser } from '@angular/common';
|
|
2
|
-
import { Component, Inject, Input, PLATFORM_ID, ViewChild, } from '@angular/core';
|
|
2
|
+
import { afterNextRender, Component, Inject, Input, PLATFORM_ID, ViewChild, } from '@angular/core';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
+
let widgetScriptPromise = null;
|
|
5
|
+
function loadOnce(src) {
|
|
6
|
+
if (widgetScriptPromise)
|
|
7
|
+
return widgetScriptPromise;
|
|
8
|
+
widgetScriptPromise = new Promise((resolve, reject) => {
|
|
9
|
+
// Si ya existe, resolvemos
|
|
10
|
+
if (window.WidgetSearch || window.initializeWidgetSearch) {
|
|
11
|
+
resolve();
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const s = document.createElement('script');
|
|
15
|
+
s.src = src;
|
|
16
|
+
s.async = true;
|
|
17
|
+
s.onload = () => resolve();
|
|
18
|
+
s.onerror = () => reject(new Error('No se pudo cargar el script del widget'));
|
|
19
|
+
document.head.appendChild(s);
|
|
20
|
+
});
|
|
21
|
+
return widgetScriptPromise;
|
|
22
|
+
}
|
|
4
23
|
export class BabylonBookingWidgetComponent {
|
|
5
24
|
constructor(platformId, zone) {
|
|
6
|
-
this.platformId = platformId;
|
|
7
25
|
this.zone = zone;
|
|
8
|
-
// Base
|
|
9
26
|
this.widgetId = 'widget-search';
|
|
10
|
-
this.hotelId = '
|
|
27
|
+
this.hotelId = 'alecad';
|
|
11
28
|
this.type = 'chain';
|
|
12
29
|
this.theme = 'light';
|
|
13
|
-
// Extra config (con defaults)
|
|
14
30
|
this.currency = 'EUR';
|
|
15
31
|
this.locale = 'es-ES';
|
|
16
32
|
this.layout = 'inline';
|
|
@@ -21,63 +37,96 @@ export class BabylonBookingWidgetComponent {
|
|
|
21
37
|
this.showPromoCode = true;
|
|
22
38
|
this.showChildAges = true;
|
|
23
39
|
this.maxChildren = 2;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
* <lib-babylon-booking-widget [configOverride]="{ currency:'USD', showPrice:true }" />
|
|
27
|
-
*/
|
|
28
|
-
this.configOverride = {};
|
|
29
|
-
this.initialized = false;
|
|
30
|
-
}
|
|
31
|
-
ngAfterViewInit() {
|
|
32
|
-
if (!isPlatformBrowser(this.platformId))
|
|
33
|
-
return;
|
|
34
|
-
if (this.initialized)
|
|
40
|
+
this.mounted = false;
|
|
41
|
+
if (!isPlatformBrowser(platformId))
|
|
35
42
|
return;
|
|
36
|
-
|
|
43
|
+
afterNextRender(() => {
|
|
44
|
+
this.zone.runOutsideAngular(async () => {
|
|
45
|
+
if (this.mounted)
|
|
46
|
+
return;
|
|
47
|
+
// ⬇️ PON AQUÍ la URL real del script de Witbooking
|
|
48
|
+
await loadOnce('https://widget-engine.b-cdn.net/widget.min.js');
|
|
49
|
+
this.mount();
|
|
50
|
+
});
|
|
51
|
+
});
|
|
37
52
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
if (!WidgetSearch)
|
|
53
|
+
mount() {
|
|
54
|
+
if (this.mounted)
|
|
41
55
|
return;
|
|
56
|
+
this.mounted = true;
|
|
42
57
|
const el = this.widgetContainer.nativeElement;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
showHotelSelector: this.showHotelSelector,
|
|
54
|
-
showPromoCode: this.showPromoCode,
|
|
55
|
-
showChildAges: this.showChildAges,
|
|
56
|
-
maxChildren: this.maxChildren,
|
|
57
|
-
baseUrl: this.baseUrl,
|
|
58
|
-
urlChain: this.urlChain,
|
|
59
|
-
urlHotel: this.urlHotel,
|
|
60
|
-
buttonText: this.buttonText,
|
|
61
|
-
...this.configOverride, // al final para que pise defaults
|
|
62
|
-
};
|
|
63
|
-
this.zone.runOutsideAngular(() => {
|
|
64
|
-
this.initialized = true;
|
|
65
|
-
new WidgetSearch(el, config);
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
ngOnDestroy() {
|
|
69
|
-
this.initialized = false;
|
|
58
|
+
// Opción A (si existe): init global manual :contentReference[oaicite:1]{index=1}
|
|
59
|
+
if (window.initializeWidgetSearch) {
|
|
60
|
+
window.initializeWidgetSearch();
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// Opción B: constructor :contentReference[oaicite:2]{index=2}
|
|
64
|
+
if (window.WidgetSearch) {
|
|
65
|
+
// Si tu WidgetSearch acepta (el, config), aquí puedes pasar config.
|
|
66
|
+
new window.WidgetSearch(el, {});
|
|
67
|
+
}
|
|
70
68
|
}
|
|
71
69
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BabylonBookingWidgetComponent, deps: [{ token: PLATFORM_ID }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
72
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BabylonBookingWidgetComponent, isStandalone: true, selector: "lib-babylon-booking-widget", inputs: { widgetId: "widgetId", hotelId: "hotelId", type: "type", theme: "theme", currency: "currency", locale: "locale", layout: "layout", defaultAdults: "defaultAdults", defaultChildren: "defaultChildren", showPrice: "showPrice", showHotelSelector: "showHotelSelector", showPromoCode: "showPromoCode", showChildAges: "showChildAges", maxChildren: "maxChildren", baseUrl: "baseUrl", urlChain: "urlChain", urlHotel: "urlHotel", buttonText: "buttonText"
|
|
70
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BabylonBookingWidgetComponent, isStandalone: true, selector: "lib-babylon-booking-widget", inputs: { widgetId: "widgetId", hotelId: "hotelId", type: "type", theme: "theme", currency: "currency", locale: "locale", layout: "layout", defaultAdults: "defaultAdults", defaultChildren: "defaultChildren", showPrice: "showPrice", showHotelSelector: "showHotelSelector", showPromoCode: "showPromoCode", showChildAges: "showChildAges", maxChildren: "maxChildren", baseUrl: "baseUrl", urlChain: "urlChain", urlHotel: "urlHotel", buttonText: "buttonText" }, viewQueries: [{ propertyName: "widgetContainer", first: true, predicate: ["widgetContainer"], descendants: true, static: true }], ngImport: i0, template: `
|
|
71
|
+
<div
|
|
72
|
+
#widgetContainer
|
|
73
|
+
[id]="widgetId"
|
|
74
|
+
[attr.data-book-id]="hotelId"
|
|
75
|
+
[attr.data-type]="type"
|
|
76
|
+
[attr.data-theme]="theme"
|
|
77
|
+
[attr.data-currency]="currency"
|
|
78
|
+
[attr.data-locale]="locale"
|
|
79
|
+
[attr.data-layout]="layout"
|
|
80
|
+
[attr.data-default-adults]="defaultAdults"
|
|
81
|
+
[attr.data-default-children]="defaultChildren"
|
|
82
|
+
[attr.data-show-price]="showPrice"
|
|
83
|
+
[attr.data-show-hotel-selector]="showHotelSelector"
|
|
84
|
+
[attr.data-show-promo-code]="showPromoCode"
|
|
85
|
+
[attr.data-show-child-ages]="showChildAges"
|
|
86
|
+
[attr.data-max-children]="maxChildren"
|
|
87
|
+
[attr.data-base-url]="baseUrl"
|
|
88
|
+
[attr.data-url-chain]="urlChain"
|
|
89
|
+
[attr.data-url-hotel]="urlHotel"
|
|
90
|
+
[attr.data-button-text]="buttonText"
|
|
91
|
+
></div>
|
|
92
|
+
`, isInline: true }); }
|
|
73
93
|
}
|
|
74
94
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BabylonBookingWidgetComponent, decorators: [{
|
|
75
95
|
type: Component,
|
|
76
|
-
args: [{
|
|
96
|
+
args: [{
|
|
97
|
+
selector: 'lib-babylon-booking-widget',
|
|
98
|
+
standalone: true,
|
|
99
|
+
template: `
|
|
100
|
+
<div
|
|
101
|
+
#widgetContainer
|
|
102
|
+
[id]="widgetId"
|
|
103
|
+
[attr.data-book-id]="hotelId"
|
|
104
|
+
[attr.data-type]="type"
|
|
105
|
+
[attr.data-theme]="theme"
|
|
106
|
+
[attr.data-currency]="currency"
|
|
107
|
+
[attr.data-locale]="locale"
|
|
108
|
+
[attr.data-layout]="layout"
|
|
109
|
+
[attr.data-default-adults]="defaultAdults"
|
|
110
|
+
[attr.data-default-children]="defaultChildren"
|
|
111
|
+
[attr.data-show-price]="showPrice"
|
|
112
|
+
[attr.data-show-hotel-selector]="showHotelSelector"
|
|
113
|
+
[attr.data-show-promo-code]="showPromoCode"
|
|
114
|
+
[attr.data-show-child-ages]="showChildAges"
|
|
115
|
+
[attr.data-max-children]="maxChildren"
|
|
116
|
+
[attr.data-base-url]="baseUrl"
|
|
117
|
+
[attr.data-url-chain]="urlChain"
|
|
118
|
+
[attr.data-url-hotel]="urlHotel"
|
|
119
|
+
[attr.data-button-text]="buttonText"
|
|
120
|
+
></div>
|
|
121
|
+
`,
|
|
122
|
+
}]
|
|
77
123
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
78
124
|
type: Inject,
|
|
79
125
|
args: [PLATFORM_ID]
|
|
80
|
-
}] }, { type: i0.NgZone }], propDecorators: {
|
|
126
|
+
}] }, { type: i0.NgZone }], propDecorators: { widgetContainer: [{
|
|
127
|
+
type: ViewChild,
|
|
128
|
+
args: ['widgetContainer', { static: true }]
|
|
129
|
+
}], widgetId: [{
|
|
81
130
|
type: Input
|
|
82
131
|
}], hotelId: [{
|
|
83
132
|
type: Input
|
|
@@ -113,10 +162,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
113
162
|
type: Input
|
|
114
163
|
}], buttonText: [{
|
|
115
164
|
type: Input
|
|
116
|
-
}], configOverride: [{
|
|
117
|
-
type: Input
|
|
118
|
-
}], widgetContainer: [{
|
|
119
|
-
type: ViewChild,
|
|
120
|
-
args: ['widgetContainer', { static: true }]
|
|
121
165
|
}] } });
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1ib29raW5nLXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tYm9va2luZy13aWRnZXQvYmFieWxvbi1ib29raW5nLXdpZGdldC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUNILGVBQWUsRUFDZixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFFTCxXQUFXLEVBQ1gsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDOztBQVN2QixJQUFJLG1CQUFtQixHQUF5QixJQUFJLENBQUM7QUFFckQsU0FBUyxRQUFRLENBQUMsR0FBVztJQUN6QixJQUFJLG1CQUFtQjtRQUFFLE9BQU8sbUJBQW1CLENBQUM7SUFFcEQsbUJBQW1CLEdBQUcsSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDeEQsMkJBQTJCO1FBQzNCLElBQUksTUFBTSxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUU7WUFDdEQsT0FBTyxFQUFFLENBQUM7WUFDVixPQUFPO1NBQ1Y7UUFFRCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ1osQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDZixDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQ2IsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUMsQ0FB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QkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBhZnRlck5leHRSZW5kZXIsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBQTEFURk9STV9JRCxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgIFdpZGdldFNlYXJjaDogYW55O1xuICAgICAgICBpbml0aWFsaXplV2lkZ2V0U2VhcmNoPzogKCkgPT4gdm9pZDtcbiAgICB9XG59XG5cbmxldCB3aWRnZXRTY3JpcHRQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGxvYWRPbmNlKHNyYzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHdpZGdldFNjcmlwdFByb21pc2UpIHJldHVybiB3aWRnZXRTY3JpcHRQcm9taXNlO1xuXG4gICAgd2lkZ2V0U2NyaXB0UHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgLy8gU2kgeWEgZXhpc3RlLCByZXNvbHZlbW9zXG4gICAgICAgIGlmICh3aW5kb3cuV2lkZ2V0U2VhcmNoIHx8IHdpbmRvdy5pbml0aWFsaXplV2lkZ2V0U2VhcmNoKSB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgIHMuc3JjID0gc3JjO1xuICAgICAgICBzLmFzeW5jID0gdHJ1ZTtcbiAgICAgICAgcy5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgICAgIHMub25lcnJvciA9ICgpID0+XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdObyBzZSBwdWRvIGNhcmdhciBlbCBzY3JpcHQgZGVsIHdpZGdldCcpKTtcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB3aWRnZXRTY3JpcHRQcm9taXNlO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1iYWJ5bG9uLWJvb2tpbmctd2lkZ2V0JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICN3aWRnZXRDb250YWluZXJcbiAgICAgICAgICAgIFtpZF09XCJ3aWRnZXRJZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWJvb2staWRdPVwiaG90ZWxJZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXR5cGVdPVwidHlwZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRoZW1lXT1cInRoZW1lXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtY3VycmVuY3ldPVwiY3VycmVuY3lcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1sb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbGF5b3V0XT1cImxheW91dFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWRlZmF1bHQtYWR1bHRzXT1cImRlZmF1bHRBZHVsdHNcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1kZWZhdWx0LWNoaWxkcmVuXT1cImRlZmF1bHRDaGlsZHJlblwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXNob3ctcHJpY2VdPVwic2hvd1ByaWNlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtc2hvdy1ob3RlbC1zZWxlY3Rvcl09XCJzaG93SG90ZWxTZWxlY3RvclwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXNob3ctcHJvbW8tY29kZV09XCJzaG93UHJvbW9Db2RlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtc2hvdy1jaGlsZC1hZ2VzXT1cInNob3dDaGlsZEFnZXNcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1tYXgtY2hpbGRyZW5dPVwibWF4Q2hpbGRyZW5cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1iYXNlLXVybF09XCJiYXNlVXJsXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdXJsLWNoYWluXT1cInVybENoYWluXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdXJsLWhvdGVsXT1cInVybEhvdGVsXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtYnV0dG9uLXRleHRdPVwiYnV0dG9uVGV4dFwiXG4gICAgICAgID48L2Rpdj5cbiAgICBgLFxufSlcbmV4cG9ydCBjbGFzcyBCYWJ5bG9uQm9va2luZ1dpZGdldENvbXBvbmVudCB7XG4gICAgQFZpZXdDaGlsZCgnd2lkZ2V0Q29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICB3aWRnZXRDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBJbnB1dCgpIHdpZGdldElkID0gJ3dpZGdldC1zZWFyY2gnO1xuICAgIEBJbnB1dCgpIGhvdGVsSWQgPSAnYWxlY2FkJztcbiAgICBASW5wdXQoKSB0eXBlOiAnY2hhaW4nIHwgJ2hvdGVsJyB8IHN0cmluZyA9ICdjaGFpbic7XG4gICAgQElucHV0KCkgdGhlbWU6ICdsaWdodCcgfCAnZGFyaycgfCBzdHJpbmcgPSAnbGlnaHQnO1xuICAgIEBJbnB1dCgpIGN1cnJlbmN5ID0gJ0VVUic7XG4gICAgQElucHV0KCkgbG9jYWxlID0gJ2VzLUVTJztcbiAgICBASW5wdXQoKSBsYXlvdXQ6ICdpbmxpbmUnIHwgJ3BvcHVwJyB8IHN0cmluZyA9ICdpbmxpbmUnO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRBZHVsdHMgPSAyO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRDaGlsZHJlbiA9IDA7XG4gICAgQElucHV0KCkgc2hvd1ByaWNlID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2hvd0hvdGVsU2VsZWN0b3IgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dQcm9tb0NvZGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dDaGlsZEFnZXMgPSB0cnVlO1xuICAgIEBJbnB1dCgpIG1heENoaWxkcmVuID0gMjtcbiAgICBASW5wdXQoKSBiYXNlVXJsPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHVybENoYWluPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHVybEhvdGVsPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIG1vdW50ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwbGF0Zm9ybUlkOiBvYmplY3QsXG4gICAgICAgIHByaXZhdGUgem9uZTogTmdab25lXG4gICAgKSB7XG4gICAgICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIocGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgICAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb3VudGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAvLyDirIfvuI8gUE9OIEFRVcONIGxhIFVSTCByZWFsIGRlbCBzY3JpcHQgZGUgV2l0Ym9va2luZ1xuICAgICAgICAgICAgICAgIGF3YWl0IGxvYWRPbmNlKCdodHRwczovL3dpZGdldC1lbmdpbmUuYi1jZG4ubmV0L3dpZGdldC5taW4uanMnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMubW91bnQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdW50KCkge1xuICAgICAgICBpZiAodGhpcy5tb3VudGVkKSByZXR1cm47XG4gICAgICAgIHRoaXMubW91bnRlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLndpZGdldENvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIC8vIE9wY2nDs24gQSAoc2kgZXhpc3RlKTogaW5pdCBnbG9iYWwgbWFudWFsIDpjb250ZW50UmVmZXJlbmNlW29haWNpdGU6MV17aW5kZXg9MX1cbiAgICAgICAgaWYgKHdpbmRvdy5pbml0aWFsaXplV2lkZ2V0U2VhcmNoKSB7XG4gICAgICAgICAgICB3aW5kb3cuaW5pdGlhbGl6ZVdpZGdldFNlYXJjaCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3BjacOzbiBCOiBjb25zdHJ1Y3RvciA6Y29udGVudFJlZmVyZW5jZVtvYWljaXRlOjJde2luZGV4PTJ9XG4gICAgICAgIGlmICh3aW5kb3cuV2lkZ2V0U2VhcmNoKSB7XG4gICAgICAgICAgICAvLyBTaSB0dSBXaWRnZXRTZWFyY2ggYWNlcHRhIChlbCwgY29uZmlnKSwgYXF1w60gcHVlZGVzIHBhc2FyIGNvbmZpZy5cbiAgICAgICAgICAgIG5ldyB3aW5kb3cuV2lkZ2V0U2VhcmNoKGVsLCB7fSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|