UNPKG

carbon-components-angular

Version:
170 lines (166 loc) 15.2 kB
import { Component, Input, Optional, Output, EventEmitter, HostBinding } from "@angular/core"; import * as i0 from "@angular/core"; import * as i1 from "@angular/platform-browser"; import * as i2 from "@angular/router"; import * as i3 from "@angular/common"; /** * `SideNavItem` can either be a child of `SideNav` or `SideNavMenu` */ export class SideNavItem { constructor(domSanitizer, router) { this.domSanitizer = domSanitizer; this.router = router; /** * Use the routerLink attribute on <a> tag for navigation instead of using event handlers */ this.useRouter = false; /** * Toggles the active (current page) state for the link. */ this.active = false; this.isSubMenu = false; /** * Emits the navigation status promise when the link is activated */ this.navigation = new EventEmitter(); /** * Emits when `active` input is changed. This is mainly used to indicate to any parent menu items that a * child sidenav item is active or not active. */ this.selected = new EventEmitter(); this.role = "listitem"; this._href = "#"; } /** * Link for the item. NOTE: *do not* pass unsafe or untrusted values, this has the potential to open you up to XSS attacks */ set href(v) { // Needed when component is created dynamically with a model. if (v === undefined) { return; } this._href = v; } get href() { return this.domSanitizer.bypassSecurityTrustUrl(this._href); } get sideNav() { return !this.isSubMenu; } get menuItem() { return this.isSubMenu; } ngOnChanges(changes) { if (changes.active) { this.selected.emit(this.active); } } navigate(event) { if (this.router && this.route) { event.preventDefault(); const status = this.router.navigate(this.route, this.routeExtras); this.navigation.emit(status); } else if (this._href === "#") { event.preventDefault(); } } } SideNavItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SideNavItem, deps: [{ token: i1.DomSanitizer }, { token: i2.Router, optional: true }], target: i0.ɵɵFactoryTarget.Component }); SideNavItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SideNavItem, selector: "cds-sidenav-item, ibm-sidenav-item", inputs: { href: "href", useRouter: "useRouter", active: "active", route: "route", isSubMenu: "isSubMenu", routeExtras: "routeExtras", title: "title" }, outputs: { navigation: "navigation", selected: "selected" }, host: { properties: { "class.cds--side-nav__item": "this.sideNav", "class.cds--side-nav__menu-item": "this.menuItem", "attr.role": "this.role" } }, usesOnChanges: true, ngImport: i0, template: ` <a *ngIf="!useRouter; else sidenavItemRouterTpl" class="cds--side-nav__link" [ngClass]="{ 'cds--side-nav__item--active': active }" [href]="href" [attr.aria-current]="(active ? 'page' : null)" [attr.title]="title ? title : null" (click)="navigate($event)"> <ng-template [ngTemplateOutlet]="sidenavItemContentTpl"></ng-template> </a> <ng-template #sidenavItemRouterTpl> <a [routerLink]="route" routerLinkActive="cds--side-nav__item--active" (click)="navigate($event)" ariaCurrentWhenActive="page" [attr.title]="title ? title : null" class="cds--side-nav__link"> <ng-template [ngTemplateOutlet]="sidenavItemContentTpl"></ng-template> </a> </ng-template> <ng-template #sidenavItemContentTpl> <div *ngIf="!isSubMenu" class="cds--side-nav__icon"> <ng-content select="svg, [icon]"></ng-content> </div> <span class="cds--side-nav__link-text"> <ng-content></ng-content> </span> </ng-template> `, isInline: true, styles: [":host{display:list-item}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SideNavItem, decorators: [{ type: Component, args: [{ selector: "cds-sidenav-item, ibm-sidenav-item", template: ` <a *ngIf="!useRouter; else sidenavItemRouterTpl" class="cds--side-nav__link" [ngClass]="{ 'cds--side-nav__item--active': active }" [href]="href" [attr.aria-current]="(active ? 'page' : null)" [attr.title]="title ? title : null" (click)="navigate($event)"> <ng-template [ngTemplateOutlet]="sidenavItemContentTpl"></ng-template> </a> <ng-template #sidenavItemRouterTpl> <a [routerLink]="route" routerLinkActive="cds--side-nav__item--active" (click)="navigate($event)" ariaCurrentWhenActive="page" [attr.title]="title ? title : null" class="cds--side-nav__link"> <ng-template [ngTemplateOutlet]="sidenavItemContentTpl"></ng-template> </a> </ng-template> <ng-template #sidenavItemContentTpl> <div *ngIf="!isSubMenu" class="cds--side-nav__icon"> <ng-content select="svg, [icon]"></ng-content> </div> <span class="cds--side-nav__link-text"> <ng-content></ng-content> </span> </ng-template> `, styles: [":host{display:list-item}\n"] }] }], ctorParameters: function () { return [{ type: i1.DomSanitizer }, { type: i2.Router, decorators: [{ type: Optional }] }]; }, propDecorators: { href: [{ type: Input }], useRouter: [{ type: Input }], sideNav: [{ type: HostBinding, args: ["class.cds--side-nav__item"] }], menuItem: [{ type: HostBinding, args: ["class.cds--side-nav__menu-item"] }], active: [{ type: Input }], route: [{ type: Input }], isSubMenu: [{ type: Input }], routeExtras: [{ type: Input }], title: [{ type: Input }], navigation: [{ type: Output }], selected: [{ type: Output }], role: [{ type: HostBinding, args: ["attr.role"] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZW5hdi1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91aS1zaGVsbC9zaWRlbmF2L3NpZGVuYXYtaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixZQUFZLEVBRVosV0FBVyxFQUVYLE1BQU0sZUFBZSxDQUFDOzs7OztBQUl2Qjs7R0FFRztBQTJDSCxNQUFNLE9BQU8sV0FBVztJQW9FdkIsWUFBc0IsWUFBMEIsRUFBd0IsTUFBYztRQUFoRSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUF3QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBcER0Rjs7V0FFRztRQUNNLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFVM0I7O1dBRUc7UUFDTSxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBUWYsY0FBUyxHQUFHLEtBQUssQ0FBQztRQWEzQjs7V0FFRztRQUNPLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUU1RDs7O1dBR0c7UUFDTyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUV2QixTQUFJLEdBQUcsVUFBVSxDQUFDO1FBRWxDLFVBQUssR0FBRyxHQUFHLENBQUM7SUFFbUUsQ0FBQztJQW5FMUY7O09BRUc7SUFDSCxJQUFhLElBQUksQ0FBQyxDQUFTO1FBQzFCLDZEQUE2RDtRQUM3RCxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDcEIsT0FBTztTQUNQO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFXLENBQUM7SUFDdkUsQ0FBQztJQU9ELElBQThDLE9BQU87UUFDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQW1ELFFBQVE7UUFDMUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3ZCLENBQUM7SUEyQ0QsV0FBVyxDQUFDLE9BQXNCO1FBQ2pDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDaEM7SUFDRixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWlCO1FBQ3pCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQzlCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM3QjthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxHQUFHLEVBQUU7WUFDOUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZCO0lBQ0YsQ0FBQzs7d0dBcEZXLFdBQVc7NEZBQVgsV0FBVyx3Y0F4Q2I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlDVDsyRkFPVyxXQUFXO2tCQTFDdkIsU0FBUzsrQkFDQyxvQ0FBb0MsWUFDcEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlDVDs7MEJBMkVrRCxRQUFROzRDQWhFOUMsSUFBSTtzQkFBaEIsS0FBSztnQkFlRyxTQUFTO3NCQUFqQixLQUFLO2dCQUV3QyxPQUFPO3NCQUFwRCxXQUFXO3VCQUFDLDJCQUEyQjtnQkFJVyxRQUFRO3NCQUExRCxXQUFXO3VCQUFDLGdDQUFnQztnQkFPcEMsTUFBTTtzQkFBZCxLQUFLO2dCQU1HLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQU1HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQUtJLFVBQVU7c0JBQW5CLE1BQU07Z0JBTUcsUUFBUTtzQkFBakIsTUFBTTtnQkFFbUIsSUFBSTtzQkFBN0IsV0FBVzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRJbnB1dCxcblx0T3B0aW9uYWwsXG5cdE91dHB1dCxcblx0RXZlbnRFbWl0dGVyLFxuXHRPbkNoYW5nZXMsXG5cdEhvc3RCaW5kaW5nLFxuXHRTaW1wbGVDaGFuZ2VzXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuXG4vKipcbiAqIGBTaWRlTmF2SXRlbWAgY2FuIGVpdGhlciBiZSBhIGNoaWxkIG9mIGBTaWRlTmF2YCBvciBgU2lkZU5hdk1lbnVgXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJjZHMtc2lkZW5hdi1pdGVtLCBpYm0tc2lkZW5hdi1pdGVtXCIsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PGEgKm5nSWY9XCIhdXNlUm91dGVyOyBlbHNlIHNpZGVuYXZJdGVtUm91dGVyVHBsXCJcblx0XHRcdGNsYXNzPVwiY2RzLS1zaWRlLW5hdl9fbGlua1wiXG5cdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdCdjZHMtLXNpZGUtbmF2X19pdGVtLS1hY3RpdmUnOiBhY3RpdmVcblx0XHRcdH1cIlxuXHRcdFx0W2hyZWZdPVwiaHJlZlwiXG5cdFx0XHRbYXR0ci5hcmlhLWN1cnJlbnRdPVwiKGFjdGl2ZSA/ICdwYWdlJyA6IG51bGwpXCJcblx0XHRcdFthdHRyLnRpdGxlXT1cInRpdGxlID8gdGl0bGUgOiBudWxsXCJcblx0XHRcdChjbGljayk9XCJuYXZpZ2F0ZSgkZXZlbnQpXCI+XG5cdFx0XHQ8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwic2lkZW5hdkl0ZW1Db250ZW50VHBsXCI+PC9uZy10ZW1wbGF0ZT5cblx0XHQ8L2E+XG5cblx0XHQ8bmctdGVtcGxhdGUgI3NpZGVuYXZJdGVtUm91dGVyVHBsPlxuXHRcdFx0PGFcblx0XHRcdFx0W3JvdXRlckxpbmtdPVwicm91dGVcIlxuXHRcdFx0XHRyb3V0ZXJMaW5rQWN0aXZlPVwiY2RzLS1zaWRlLW5hdl9faXRlbS0tYWN0aXZlXCJcblx0XHRcdFx0KGNsaWNrKT1cIm5hdmlnYXRlKCRldmVudClcIlxuXHRcdFx0XHRhcmlhQ3VycmVudFdoZW5BY3RpdmU9XCJwYWdlXCJcblx0XHRcdFx0W2F0dHIudGl0bGVdPVwidGl0bGUgPyB0aXRsZSA6IG51bGxcIlxuXHRcdFx0XHRjbGFzcz1cImNkcy0tc2lkZS1uYXZfX2xpbmtcIj5cblx0XHRcdFx0PG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNpZGVuYXZJdGVtQ29udGVudFRwbFwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHQ8L2E+XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblxuXHRcdDxuZy10ZW1wbGF0ZSAjc2lkZW5hdkl0ZW1Db250ZW50VHBsPlxuXHRcdFx0PGRpdiAqbmdJZj1cIiFpc1N1Yk1lbnVcIiBjbGFzcz1cImNkcy0tc2lkZS1uYXZfX2ljb25cIj5cblx0XHRcdFx0PG5nLWNvbnRlbnQgc2VsZWN0PVwic3ZnLCBbaWNvbl1cIj48L25nLWNvbnRlbnQ+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxzcGFuIGNsYXNzPVwiY2RzLS1zaWRlLW5hdl9fbGluay10ZXh0XCI+XG5cdFx0XHRcdDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblx0XHRcdDwvc3Bhbj5cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHRgLFxuXHRzdHlsZXM6IFtgXG5cdFx0Omhvc3Qge1xuXHRcdFx0ZGlzcGxheTogbGlzdC1pdGVtO1xuXHRcdH1cblx0YF1cbn0pXG5leHBvcnQgY2xhc3MgU2lkZU5hdkl0ZW0gaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXHQvKipcblx0ICogTGluayBmb3IgdGhlIGl0ZW0uIE5PVEU6ICpkbyBub3QqIHBhc3MgdW5zYWZlIG9yIHVudHJ1c3RlZCB2YWx1ZXMsIHRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgdG8gb3BlbiB5b3UgdXAgdG8gWFNTIGF0dGFja3Ncblx0ICovXG5cdEBJbnB1dCgpIHNldCBocmVmKHY6IHN0cmluZykge1xuXHRcdC8vIE5lZWRlZCB3aGVuIGNvbXBvbmVudCBpcyBjcmVhdGVkIGR5bmFtaWNhbGx5IHdpdGggYSBtb2RlbC5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuX2hyZWYgPSB2O1xuXHR9XG5cblx0Z2V0IGhyZWYoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwodGhpcy5faHJlZikgYXMgc3RyaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVzZSB0aGUgcm91dGVyTGluayBhdHRyaWJ1dGUgb24gPGE+IHRhZyBmb3IgbmF2aWdhdGlvbiBpbnN0ZWFkIG9mIHVzaW5nIGV2ZW50IGhhbmRsZXJzXG5cdCAqL1xuXHRASW5wdXQoKSB1c2VSb3V0ZXIgPSBmYWxzZTtcblxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXNpZGUtbmF2X19pdGVtXCIpIGdldCBzaWRlTmF2KCkge1xuXHRcdHJldHVybiAhdGhpcy5pc1N1Yk1lbnU7XG5cdH1cblxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXNpZGUtbmF2X19tZW51LWl0ZW1cIikgZ2V0IG1lbnVJdGVtKCkge1xuXHRcdHJldHVybiB0aGlzLmlzU3ViTWVudTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUb2dnbGVzIHRoZSBhY3RpdmUgKGN1cnJlbnQgcGFnZSkgc3RhdGUgZm9yIHRoZSBsaW5rLlxuXHQgKi9cblx0QElucHV0KCkgYWN0aXZlID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEFycmF5IG9mIGNvbW1hbmRzIHRvIHNlbmQgdG8gdGhlIHJvdXRlciB3aGVuIHRoZSBsaW5rIGlzIGFjdGl2YXRlZFxuXHQgKiBTZWU6IGh0dHBzOi8vYW5ndWxhci5pby9hcGkvcm91dGVyL1JvdXRlciNuYXZpZ2F0ZVxuXHQgKi9cblx0QElucHV0KCkgcm91dGU6IGFueVtdO1xuXG5cdEBJbnB1dCgpIGlzU3ViTWVudSA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBSb3V0ZXIgb3B0aW9ucy4gVXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGByb3V0ZWBcblx0ICogU2VlOiBodHRwczovL2FuZ3VsYXIuaW8vYXBpL3JvdXRlci9Sb3V0ZXIjbmF2aWdhdGVcblx0ICovXG5cdEBJbnB1dCgpIHJvdXRlRXh0cmFzOiBhbnk7XG5cblx0LyoqXG5cdCAqIFRpdGxlIGF0dHJpYnV0ZSBvZiB0aGUgYW5jaG9yIGVsZW1lbnQuXG5cdCAqL1xuXHRASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBFbWl0cyB0aGUgbmF2aWdhdGlvbiBzdGF0dXMgcHJvbWlzZSB3aGVuIHRoZSBsaW5rIGlzIGFjdGl2YXRlZFxuXHQgKi9cblx0QE91dHB1dCgpIG5hdmlnYXRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFByb21pc2U8Ym9vbGVhbj4+KCk7XG5cblx0LyoqXG5cdCAqIEVtaXRzIHdoZW4gYGFjdGl2ZWAgaW5wdXQgaXMgY2hhbmdlZC4gVGhpcyBpcyBtYWlubHkgdXNlZCB0byBpbmRpY2F0ZSB0byBhbnkgcGFyZW50IG1lbnUgaXRlbXMgdGhhdCBhXG5cdCAqIGNoaWxkIHNpZGVuYXYgaXRlbSBpcyBhY3RpdmUgb3Igbm90IGFjdGl2ZS5cblx0ICovXG5cdEBPdXRwdXQoKSBzZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuXHRASG9zdEJpbmRpbmcoXCJhdHRyLnJvbGVcIikgcm9sZSA9IFwibGlzdGl0ZW1cIjtcblxuXHRwcm90ZWN0ZWQgX2hyZWYgPSBcIiNcIjtcblxuXHRjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsIEBPcHRpb25hbCgpIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcikge31cblxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG5cdFx0aWYgKGNoYW5nZXMuYWN0aXZlKSB7XG5cdFx0XHR0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5hY3RpdmUpO1xuXHRcdH1cblx0fVxuXG5cdG5hdmlnYXRlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG5cdFx0aWYgKHRoaXMucm91dGVyICYmIHRoaXMucm91dGUpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRjb25zdCBzdGF0dXMgPSB0aGlzLnJvdXRlci5uYXZpZ2F0ZSh0aGlzLnJvdXRlLCB0aGlzLnJvdXRlRXh0cmFzKTtcblx0XHRcdHRoaXMubmF2aWdhdGlvbi5lbWl0KHN0YXR1cyk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9ocmVmID09PSBcIiNcIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH1cbn1cbiJdfQ==