UNPKG

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
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