design-angular-kit-lombardia
Version:
Un toolkit Angular conforme alle linee guida di design per i servizi web della Regione Lombardia
89 lines • 24.4 kB
JavaScript
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { TranslateModule } from '@ngx-translate/core';
import { ItIconComponent } from '../../utils/icon/icon.component';
import { It25NavBarModule } from '../navbar/navbar.module';
import { It25NavBarComponent } from '../navbar/navbar/navbar.component';
import { ItButtonDirective } from '../../core/button/button.directive';
import { inputToBoolean } from '../../../utils/coercion';
import * as i0 from "@angular/core";
import * as i1 from "@ngx-translate/core";
import * as i2 from "../navbar/navbar/navbar.component";
// import { HeaderSticky } from 'bootstrap-lombardia';
export class It25HeaderComponent {
// private stickyHeader?: HeaderSticky;
constructor() {
// @Input({ transform: inputToBoolean }) sticky?: boolean;
this.showSlim = true;
this.smallHeader = true;
this.showSearch = true;
// @Input() slimTitle: string | undefined;
// @Input() slimTitleLink: string | undefined = '#';
this.loginStyle = 'none';
this.menuStyle = 'horizontal';
this.expand = true;
this.loginClick = new EventEmitter();
this.menuClick = new EventEmitter();
this.searchClick = new EventEmitter();
}
ngAfterViewInit() {
this.updateListeners();
}
updateListeners() {
// if (!this.stickyHeader && this.headerWrapper && this.sticky) {
// this.stickyHeader = new HeaderSticky(this.headerWrapper.nativeElement);
// }
}
emitLoginClick(event) {
event.preventDefault();
this.loginClick.emit(event);
}
emitMenuClick(event) {
event.preventDefault();
this.menuClick.emit(event);
}
emitSearchClick(event) {
event.preventDefault();
this.searchClick.emit(event);
}
toggleCollapse() {
this.it25NavBarComponent?.toggleCollapse();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: It25HeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: It25HeaderComponent, isStandalone: true, selector: "it25-header", inputs: { showSlim: ["showSlim", "showSlim", inputToBoolean], smallHeader: ["smallHeader", "smallHeader", inputToBoolean], showSearch: ["showSearch", "showSearch", inputToBoolean], loginStyle: "loginStyle", menuStyle: "menuStyle", megamenu: ["megamenu", "megamenu", inputToBoolean], expand: ["expand", "expand", inputToBoolean] }, outputs: { loginClick: "loginClick", menuClick: "menuClick", searchClick: "searchClick" }, viewQueries: [{ propertyName: "headerWrapper", first: true, predicate: ["headerWrapper"], descendants: true }, { propertyName: "it25NavBarComponent", first: true, predicate: It25NavBarComponent, descendants: true }], ngImport: i0, template: "<header #headerWrapper class=\"it-header-wrapper\" data-bs-position-type=\"fixed\" data-bs-target=\"#header-nav-wrapper\">\n @if (showSlim) {\n <div class=\"it-header-slim-wrapper it25-top-bar\">\n <div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"it-header-slim-wrapper-content\">\n <a class=\"navbar-brand\" href=\"#\">\n <img src=\"bootstrap-lombardia/dist/assets/img/logo-rl-bianco.png\" alt=\"logo regione lombardia\" class=\"d-md-none\" />\n </a>\n <div class=\"it-header-slim-right-zone\">\n <ng-content select=\"[slimRightZone]\"></ng-content>\n @if (loginStyle === 'default') {\n <a class=\"btn btn-primary btn-sm btn-full\" (click)=\"emitLoginClick($event)\" href=\"#\">\n <it-icon name=\"user\" color=\"white\"></it-icon>\n {{ 'it.navigation.login' | translate }}\n </a>\n }\n @if (loginStyle === 'logged') {\n <ng-content select=\"[userSettings]\"></ng-content>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n <div class=\"it-nav-wrapper\">\n <div class=\"it-header-center-wrapper it25-barra-ist\" [class.it-small-header]=\"smallHeader\">\n <div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"it-header-center-content-wrapper\">\n <div class=\"it-brand-wrapper\">\n <ng-content select=\"[brand]\"></ng-content>\n </div>\n <div class=\"it-right-zone\">\n <ng-content select=\"[rightZone]\"></ng-content>\n @if (showSearch) {\n <form>\n <div class=\"it-search-wrapper\">\n <input\n id=\"search-input99\"\n class=\"form-control d-none d-lg-flex mr-sm-2 ml-auto\"\n type=\"search\"\n placeholder=\"Cerca...\"\n aria-label=\"Testo per ricerca\" />\n <button class=\"btn p-0 m-1\" type=\"submit\" aria-label=\"Esegui ricerca\">\n <svg class=\"icon\"><use xlink:href=\"bootstrap-lombardia/dist/svg/sprites.svg#it-search\"></use></svg>\n </button>\n </div>\n </form>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n @if (menuStyle === 'horizontal') {\n <div class=\"it-header-navbar-wrapper theme-light-desk it25-menu-orizzontale\" id=\"header-nav-wrapper\">\n <div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\"col-12\">\n <it25-navbar [megamenu]=\"megamenu\" [expand]=\"expand\" [horizontal]=\"true\">\n <ng-container navItems>\n <ng-content select=\"[navItems]\"></ng-content>\n </ng-container>\n </it25-navbar>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n @if (menuStyle === 'vertical') {\n <it25-navbar [megamenu]=\"megamenu\" [expand]=\"expand\" [vertical]=\"true\">\n <ng-container navItems>\n <ng-content select=\"[verticalNavItems]\"></ng-content>\n </ng-container>\n </it25-navbar>\n }\n</header>\n", styles: [".it-header-navbar-wrapper.theme-light-desk.it25-menu-orizzontale{top:28%;margin-top:0}@media screen and (max-width: 991px){.it-header-navbar-wrapper.theme-light-desk.it25-menu-orizzontale{background:transparent}}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: ItIconComponent, selector: "it-icon", inputs: ["name", "size", "color", "padded", "svgClass", "title", "labelWaria"] }, { kind: "ngmodule", type: It25NavBarModule }, { kind: "component", type: i2.It25NavBarComponent, selector: "it25-navbar", inputs: ["vertical", "horizontal", "megamenu", "expand"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: It25HeaderComponent, decorators: [{
type: Component,
args: [{ standalone: true, selector: 'it25-header', changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, ItIconComponent, ItButtonDirective, It25NavBarModule], template: "<header #headerWrapper class=\"it-header-wrapper\" data-bs-position-type=\"fixed\" data-bs-target=\"#header-nav-wrapper\">\n @if (showSlim) {\n <div class=\"it-header-slim-wrapper it25-top-bar\">\n <div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"it-header-slim-wrapper-content\">\n <a class=\"navbar-brand\" href=\"#\">\n <img src=\"bootstrap-lombardia/dist/assets/img/logo-rl-bianco.png\" alt=\"logo regione lombardia\" class=\"d-md-none\" />\n </a>\n <div class=\"it-header-slim-right-zone\">\n <ng-content select=\"[slimRightZone]\"></ng-content>\n @if (loginStyle === 'default') {\n <a class=\"btn btn-primary btn-sm btn-full\" (click)=\"emitLoginClick($event)\" href=\"#\">\n <it-icon name=\"user\" color=\"white\"></it-icon>\n {{ 'it.navigation.login' | translate }}\n </a>\n }\n @if (loginStyle === 'logged') {\n <ng-content select=\"[userSettings]\"></ng-content>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n <div class=\"it-nav-wrapper\">\n <div class=\"it-header-center-wrapper it25-barra-ist\" [class.it-small-header]=\"smallHeader\">\n <div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"it-header-center-content-wrapper\">\n <div class=\"it-brand-wrapper\">\n <ng-content select=\"[brand]\"></ng-content>\n </div>\n <div class=\"it-right-zone\">\n <ng-content select=\"[rightZone]\"></ng-content>\n @if (showSearch) {\n <form>\n <div class=\"it-search-wrapper\">\n <input\n id=\"search-input99\"\n class=\"form-control d-none d-lg-flex mr-sm-2 ml-auto\"\n type=\"search\"\n placeholder=\"Cerca...\"\n aria-label=\"Testo per ricerca\" />\n <button class=\"btn p-0 m-1\" type=\"submit\" aria-label=\"Esegui ricerca\">\n <svg class=\"icon\"><use xlink:href=\"bootstrap-lombardia/dist/svg/sprites.svg#it-search\"></use></svg>\n </button>\n </div>\n </form>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n @if (menuStyle === 'horizontal') {\n <div class=\"it-header-navbar-wrapper theme-light-desk it25-menu-orizzontale\" id=\"header-nav-wrapper\">\n <div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\"col-12\">\n <it25-navbar [megamenu]=\"megamenu\" [expand]=\"expand\" [horizontal]=\"true\">\n <ng-container navItems>\n <ng-content select=\"[navItems]\"></ng-content>\n </ng-container>\n </it25-navbar>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n @if (menuStyle === 'vertical') {\n <it25-navbar [megamenu]=\"megamenu\" [expand]=\"expand\" [vertical]=\"true\">\n <ng-container navItems>\n <ng-content select=\"[verticalNavItems]\"></ng-content>\n </ng-container>\n </it25-navbar>\n }\n</header>\n", styles: [".it-header-navbar-wrapper.theme-light-desk.it25-menu-orizzontale{top:28%;margin-top:0}@media screen and (max-width: 991px){.it-header-navbar-wrapper.theme-light-desk.it25-menu-orizzontale{background:transparent}}\n"] }]
}], ctorParameters: () => [], propDecorators: { showSlim: [{
type: Input,
args: [{ transform: inputToBoolean }]
}], smallHeader: [{
type: Input,
args: [{ transform: inputToBoolean }]
}], showSearch: [{
type: Input,
args: [{ transform: inputToBoolean }]
}], loginStyle: [{
type: Input
}], menuStyle: [{
type: Input
}], loginClick: [{
type: Output
}], menuClick: [{
type: Output
}], searchClick: [{
type: Output
}], headerWrapper: [{
type: ViewChild,
args: ['headerWrapper']
}], it25NavBarComponent: [{
type: ViewChild,
args: [It25NavBarComponent]
}], megamenu: [{
type: Input,
args: [{ transform: inputToBoolean }]
}], expand: [{
type: Input,
args: [{ transform: inputToBoolean }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvaXQyNS9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvaXQyNS9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQUN6RCxzREFBc0Q7QUFVdEQsTUFBTSxPQUFPLG1CQUFtQjtJQTJCOUIseUNBQXlDO0lBRXpDO1FBNUJBLDREQUE0RDtRQUV0QixhQUFRLEdBQWEsSUFBSSxDQUFDO1FBRTFCLGdCQUFXLEdBQWEsSUFBSSxDQUFDO1FBRTdCLGVBQVUsR0FBYSxJQUFJLENBQUM7UUFFbEUsNENBQTRDO1FBQzVDLHNEQUFzRDtRQUU3QyxlQUFVLEdBQWtDLE1BQU0sQ0FBQztRQUNuRCxjQUFTLEdBQW1ELFlBQVksQ0FBQztRQVk1QyxXQUFNLEdBQWEsSUFBSSxDQUFDO1FBSzVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUM1QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0lBQy9DLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxlQUFlO1FBQ2IscUVBQXFFO1FBQ3JFLGdGQUFnRjtRQUNoRixRQUFRO0lBQ1YsQ0FBQztJQUVTLGNBQWMsQ0FBQyxLQUFZO1FBQ25DLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRVMsYUFBYSxDQUFDLEtBQVk7UUFDbEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFUyxlQUFlLENBQUMsS0FBWTtRQUNwQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLENBQUM7SUFDN0MsQ0FBQzs4R0E5RFUsbUJBQW1CO2tHQUFuQixtQkFBbUIsNEZBR1YsY0FBYywrQ0FFZCxjQUFjLDRDQUVkLGNBQWMsd0ZBaUJkLGNBQWMsZ0NBQ2QsY0FBYyw4UUFIdkIsbUJBQW1CLGdEQ3hDaEMsMi9HQW9GQSwrUURwRVksZUFBZSw0RkFBRSxlQUFlLG1JQUFxQixnQkFBZ0I7OzJGQUVwRSxtQkFBbUI7a0JBUi9CLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLGFBQWEsbUJBR04sdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUM7d0RBSzFDLFFBQVE7c0JBQTdDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO2dCQUVFLFdBQVc7c0JBQWhELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO2dCQUVFLFVBQVU7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO2dCQUszQixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBRTZCLGFBQWE7c0JBQWhELFNBQVM7dUJBQUMsZUFBZTtnQkFFYyxtQkFBbUI7c0JBQTFELFNBQVM7dUJBQUMsbUJBQW1CO2dCQUVRLFFBQVE7c0JBQTdDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO2dCQUNFLE1BQU07c0JBQTNDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSXRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJdDI1TmF2QmFyTW9kdWxlIH0gZnJvbSAnLi4vbmF2YmFyL25hdmJhci5tb2R1bGUnO1xuaW1wb3J0IHsgSXQyNU5hdkJhckNvbXBvbmVudCB9IGZyb20gJy4uL25hdmJhci9uYXZiYXIvbmF2YmFyLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEl0QnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vY29yZS9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBpbnB1dFRvQm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvZXJjaW9uJztcbi8vIGltcG9ydCB7IEhlYWRlclN0aWNreSB9IGZyb20gJ2Jvb3RzdHJhcC1sb21iYXJkaWEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdpdDI1LWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIEl0SWNvbkNvbXBvbmVudCwgSXRCdXR0b25EaXJlY3RpdmUsIEl0MjVOYXZCYXJNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBJdDI1SGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8vICAgQElucHV0KHsgdHJhbnNmb3JtOiBpbnB1dFRvQm9vbGVhbiB9KSBzdGlja3k/OiBib29sZWFuO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgc2hvd1NsaW0/OiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIHNtYWxsSGVhZGVyPzogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBpbnB1dFRvQm9vbGVhbiB9KSBzaG93U2VhcmNoPzogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gICBASW5wdXQoKSBzbGltVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLy8gICBASW5wdXQoKSBzbGltVGl0bGVMaW5rOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnIyc7XG5cbiAgQElucHV0KCkgbG9naW5TdHlsZTogJ25vbmUnIHwgJ2RlZmF1bHQnIHwgJ2xvZ2dlZCcgPSAnbm9uZSc7XG4gIEBJbnB1dCgpIG1lbnVTdHlsZTogJ25vbmUnIHwgJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyB8ICdzaWRlYmFyJyA9ICdob3Jpem9udGFsJztcblxuICBAT3V0cHV0KCkgbG9naW5DbGljazogRXZlbnRFbWl0dGVyPEV2ZW50PjtcbiAgQE91dHB1dCgpIG1lbnVDbGljazogRXZlbnRFbWl0dGVyPEV2ZW50PjtcblxuICBAT3V0cHV0KCkgc2VhcmNoQ2xpY2s6IEV2ZW50RW1pdHRlcjxFdmVudD47XG5cbiAgQFZpZXdDaGlsZCgnaGVhZGVyV3JhcHBlcicpIHByaXZhdGUgaGVhZGVyV3JhcHBlcj86IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoSXQyNU5hdkJhckNvbXBvbmVudCkgcHJpdmF0ZSBpdDI1TmF2QmFyQ29tcG9uZW50PzogSXQyNU5hdkJhckNvbXBvbmVudDtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIG1lZ2FtZW51PzogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBpbnB1dFRvQm9vbGVhbiB9KSBleHBhbmQ/OiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyAgIHByaXZhdGUgc3RpY2t5SGVhZGVyPzogSGVhZGVyU3RpY2t5O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubG9naW5DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gICAgdGhpcy5tZW51Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICAgIHRoaXMuc2VhcmNoQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMudXBkYXRlTGlzdGVuZXJzKCk7XG4gIH1cblxuICB1cGRhdGVMaXN0ZW5lcnMoKSB7XG4gICAgLy8gICAgIGlmICghdGhpcy5zdGlja3lIZWFkZXIgJiYgdGhpcy5oZWFkZXJXcmFwcGVyICYmIHRoaXMuc3RpY2t5KSB7XG4gICAgLy8gICAgICAgdGhpcy5zdGlja3lIZWFkZXIgPSBuZXcgSGVhZGVyU3RpY2t5KHRoaXMuaGVhZGVyV3JhcHBlci5uYXRpdmVFbGVtZW50KTtcbiAgICAvLyAgICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGVtaXRMb2dpbkNsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5sb2dpbkNsaWNrLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVtaXRNZW51Q2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLm1lbnVDbGljay5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbWl0U2VhcmNoQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnNlYXJjaENsaWNrLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgdG9nZ2xlQ29sbGFwc2UoKSB7XG4gICAgdGhpcy5pdDI1TmF2QmFyQ29tcG9uZW50Py50b2dnbGVDb2xsYXBzZSgpO1xuICB9XG59XG4iLCI8aGVhZGVyICNoZWFkZXJXcmFwcGVyIGNsYXNzPVwiaXQtaGVhZGVyLXdyYXBwZXJcIiBkYXRhLWJzLXBvc2l0aW9uLXR5cGU9XCJmaXhlZFwiIGRhdGEtYnMtdGFyZ2V0PVwiI2hlYWRlci1uYXYtd3JhcHBlclwiPlxuICBAaWYgKHNob3dTbGltKSB7XG4gICAgPGRpdiBjbGFzcz1cIml0LWhlYWRlci1zbGltLXdyYXBwZXIgaXQyNS10b3AtYmFyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXQtaGVhZGVyLXNsaW0td3JhcHBlci1jb250ZW50XCI+XG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2YmFyLWJyYW5kXCIgaHJlZj1cIiNcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImJvb3RzdHJhcC1sb21iYXJkaWEvZGlzdC9hc3NldHMvaW1nL2xvZ28tcmwtYmlhbmNvLnBuZ1wiIGFsdD1cImxvZ28gcmVnaW9uZSBsb21iYXJkaWFcIiBjbGFzcz1cImQtbWQtbm9uZVwiIC8+XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0LWhlYWRlci1zbGltLXJpZ2h0LXpvbmVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc2xpbVJpZ2h0Wm9uZV1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgQGlmIChsb2dpblN0eWxlID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBidG4tZnVsbFwiIChjbGljayk9XCJlbWl0TG9naW5DbGljaygkZXZlbnQpXCIgaHJlZj1cIiNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGl0LWljb24gbmFtZT1cInVzZXJcIiBjb2xvcj1cIndoaXRlXCI+PC9pdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICB7eyAnaXQubmF2aWdhdGlvbi5sb2dpbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChsb2dpblN0eWxlID09PSAnbG9nZ2VkJykge1xuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3VzZXJTZXR0aW5nc11cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG4gIDxkaXYgY2xhc3M9XCJpdC1uYXYtd3JhcHBlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJpdC1oZWFkZXItY2VudGVyLXdyYXBwZXIgaXQyNS1iYXJyYS1pc3RcIiBbY2xhc3MuaXQtc21hbGwtaGVhZGVyXT1cInNtYWxsSGVhZGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXQtaGVhZGVyLWNlbnRlci1jb250ZW50LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0LWJyYW5kLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbYnJhbmRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0LXJpZ2h0LXpvbmVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcmlnaHRab25lXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICBAaWYgKHNob3dTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgIDxmb3JtPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXQtc2VhcmNoLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic2VhcmNoLWlucHV0OTlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZC1ub25lIGQtbGctZmxleCBtci1zbS0yIG1sLWF1dG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNlcmNhLi4uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJUZXN0byBwZXIgcmljZXJjYVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBwLTAgbS0xXCIgdHlwZT1cInN1Ym1pdFwiIGFyaWEtbGFiZWw9XCJFc2VndWkgcmljZXJjYVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImljb25cIj48dXNlIHhsaW5rOmhyZWY9XCJib290c3RyYXAtbG9tYmFyZGlhL2Rpc3Qvc3ZnL3Nwcml0ZXMuc3ZnI2l0LXNlYXJjaFwiPjwvdXNlPjwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgQGlmIChtZW51U3R5bGUgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgPGRpdiBjbGFzcz1cIml0LWhlYWRlci1uYXZiYXItd3JhcHBlciB0aGVtZS1saWdodC1kZXNrIGl0MjUtbWVudS1vcml6em9udGFsZVwiIGlkPVwiaGVhZGVyLW5hdi13cmFwcGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxpdDI1LW5hdmJhciBbbWVnYW1lbnVdPVwibWVnYW1lbnVcIiBbZXhwYW5kXT1cImV4cGFuZFwiIFtob3Jpem9udGFsXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG5hdkl0ZW1zPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25hdkl0ZW1zXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9pdDI1LW5hdmJhcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIEBpZiAobWVudVN0eWxlID09PSAndmVydGljYWwnKSB7XG4gICAgPGl0MjUtbmF2YmFyIFttZWdhbWVudV09XCJtZWdhbWVudVwiIFtleHBhbmRdPVwiZXhwYW5kXCIgW3ZlcnRpY2FsXT1cInRydWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgbmF2SXRlbXM+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlt2ZXJ0aWNhbE5hdkl0ZW1zXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvaXQyNS1uYXZiYXI+XG4gIH1cbjwvaGVhZGVyPlxuIl19