UNPKG

carbon-components-angular

Version:
171 lines (167 loc) 15.3 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"; import * as i4 from "./routerlink-extended.directive"; /** * `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 [attr.title]="title ? title : null" [routerLink]="route" [routeExtras]="routeExtras" routerLinkActive="cds--side-nav__item--active" ariaCurrentWhenActive="page" 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"] }, { kind: "directive", type: i4.RouterLinkExtendedDirective, selector: "[routerLink]", inputs: ["routeExtras"] }] }); 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 [attr.title]="title ? title : null" [routerLink]="route" [routeExtras]="routeExtras" routerLinkActive="cds--side-nav__item--active" ariaCurrentWhenActive="page" 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZW5hdi1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91aS1zaGVsbC9zaWRlbmF2L3NpZGVuYXYtaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixZQUFZLEVBRVosV0FBVyxFQUVYLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFJdkI7O0dBRUc7QUEyQ0gsTUFBTSxPQUFPLFdBQVc7SUFvRXZCLFlBQXNCLFlBQTBCLEVBQXdCLE1BQWM7UUFBaEUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFBd0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXBEdEY7O1dBRUc7UUFDTSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBVTNCOztXQUVHO1FBQ00sV0FBTSxHQUFHLEtBQUssQ0FBQztRQVFmLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFhM0I7O1dBRUc7UUFDTyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFFNUQ7OztXQUdHO1FBQ08sYUFBUSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFdkIsU0FBSSxHQUFHLFVBQVUsQ0FBQztRQUVsQyxVQUFLLEdBQUcsR0FBRyxDQUFDO0lBRW1FLENBQUM7SUFuRTFGOztPQUVHO0lBQ0gsSUFBYSxJQUFJLENBQUMsQ0FBUztRQUMxQiw2REFBNkQ7UUFDN0QsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO1lBQ3BCLE9BQU87U0FDUDtRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDUCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBVyxDQUFDO0lBQ3ZFLENBQUM7SUFPRCxJQUE4QyxPQUFPO1FBQ3BELE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFtRCxRQUFRO1FBQzFELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN2QixDQUFDO0lBMkNELFdBQVcsQ0FBQyxPQUFzQjtRQUNqQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hDO0lBQ0YsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFpQjtRQUN6QixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUM5QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDN0I7YUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssR0FBRyxFQUFFO1lBQzlCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjtJQUNGLENBQUM7O3dHQXBGVyxXQUFXOzRGQUFYLFdBQVcsd2NBeENiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQ1Q7MkZBT1csV0FBVztrQkExQ3ZCLFNBQVM7K0JBQ0Msb0NBQW9DLFlBQ3BDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQ1Q7OzBCQTJFa0QsUUFBUTs0Q0FoRTlDLElBQUk7c0JBQWhCLEtBQUs7Z0JBZUcsU0FBUztzQkFBakIsS0FBSztnQkFFd0MsT0FBTztzQkFBcEQsV0FBVzt1QkFBQywyQkFBMkI7Z0JBSVcsUUFBUTtzQkFBMUQsV0FBVzt1QkFBQyxnQ0FBZ0M7Z0JBT3BDLE1BQU07c0JBQWQsS0FBSztnQkFNRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFNRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtHLEtBQUs7c0JBQWIsS0FBSztnQkFLSSxVQUFVO3NCQUFuQixNQUFNO2dCQU1HLFFBQVE7c0JBQWpCLE1BQU07Z0JBRW1CLElBQUk7c0JBQTdCLFdBQVc7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0SW5wdXQsXG5cdE9wdGlvbmFsLFxuXHRPdXRwdXQsXG5cdEV2ZW50RW1pdHRlcixcblx0T25DaGFuZ2VzLFxuXHRIb3N0QmluZGluZyxcblx0U2ltcGxlQ2hhbmdlc1xufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcblxuLyoqXG4gKiBgU2lkZU5hdkl0ZW1gIGNhbiBlaXRoZXIgYmUgYSBjaGlsZCBvZiBgU2lkZU5hdmAgb3IgYFNpZGVOYXZNZW51YFxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiY2RzLXNpZGVuYXYtaXRlbSwgaWJtLXNpZGVuYXYtaXRlbVwiLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxhICpuZ0lmPVwiIXVzZVJvdXRlcjsgZWxzZSBzaWRlbmF2SXRlbVJvdXRlclRwbFwiXG5cdFx0XHRjbGFzcz1cImNkcy0tc2lkZS1uYXZfX2xpbmtcIlxuXHRcdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0XHQnY2RzLS1zaWRlLW5hdl9faXRlbS0tYWN0aXZlJzogYWN0aXZlXG5cdFx0XHR9XCJcblx0XHRcdFtocmVmXT1cImhyZWZcIlxuXHRcdFx0W2F0dHIuYXJpYS1jdXJyZW50XT1cIihhY3RpdmUgPyAncGFnZScgOiBudWxsKVwiXG5cdFx0XHRbYXR0ci50aXRsZV09XCJ0aXRsZSA/IHRpdGxlIDogbnVsbFwiXG5cdFx0XHQoY2xpY2spPVwibmF2aWdhdGUoJGV2ZW50KVwiPlxuXHRcdFx0PG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNpZGVuYXZJdGVtQ29udGVudFRwbFwiPjwvbmctdGVtcGxhdGU+XG5cdFx0PC9hPlxuXG5cdFx0PG5nLXRlbXBsYXRlICNzaWRlbmF2SXRlbVJvdXRlclRwbD5cblx0XHRcdDxhXG5cdFx0XHRcdFthdHRyLnRpdGxlXT1cInRpdGxlID8gdGl0bGUgOiBudWxsXCJcblx0XHRcdFx0W3JvdXRlckxpbmtdPVwicm91dGVcIlxuXHRcdFx0XHRbcm91dGVFeHRyYXNdPVwicm91dGVFeHRyYXNcIlxuXHRcdFx0XHRyb3V0ZXJMaW5rQWN0aXZlPVwiY2RzLS1zaWRlLW5hdl9faXRlbS0tYWN0aXZlXCJcblx0XHRcdFx0YXJpYUN1cnJlbnRXaGVuQWN0aXZlPVwicGFnZVwiXG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1zaWRlLW5hdl9fbGlua1wiPlxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwic2lkZW5hdkl0ZW1Db250ZW50VHBsXCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDwvYT5cblx0XHQ8L25nLXRlbXBsYXRlPlxuXG5cdFx0PG5nLXRlbXBsYXRlICNzaWRlbmF2SXRlbUNvbnRlbnRUcGw+XG5cdFx0XHQ8ZGl2ICpuZ0lmPVwiIWlzU3ViTWVudVwiIGNsYXNzPVwiY2RzLS1zaWRlLW5hdl9faWNvblwiPlxuXHRcdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJzdmcsIFtpY29uXVwiPjwvbmctY29udGVudD5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PHNwYW4gY2xhc3M9XCJjZHMtLXNpZGUtbmF2X19saW5rLXRleHRcIj5cblx0XHRcdFx0PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXHRcdFx0PC9zcGFuPlxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdGAsXG5cdHN0eWxlczogW2Bcblx0XHQ6aG9zdCB7XG5cdFx0XHRkaXNwbGF5OiBsaXN0LWl0ZW07XG5cdFx0fVxuXHRgXVxufSlcbmV4cG9ydCBjbGFzcyBTaWRlTmF2SXRlbSBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG5cdC8qKlxuXHQgKiBMaW5rIGZvciB0aGUgaXRlbS4gTk9URTogKmRvIG5vdCogcGFzcyB1bnNhZmUgb3IgdW50cnVzdGVkIHZhbHVlcywgdGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBvcGVuIHlvdSB1cCB0byBYU1MgYXR0YWNrc1xuXHQgKi9cblx0QElucHV0KCkgc2V0IGhyZWYodjogc3RyaW5nKSB7XG5cdFx0Ly8gTmVlZGVkIHdoZW4gY29tcG9uZW50IGlzIGNyZWF0ZWQgZHluYW1pY2FsbHkgd2l0aCBhIG1vZGVsLlxuXHRcdGlmICh2ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5faHJlZiA9IHY7XG5cdH1cblxuXHRnZXQgaHJlZigpIHtcblx0XHRyZXR1cm4gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybCh0aGlzLl9ocmVmKSBhcyBzdHJpbmc7XG5cdH1cblxuXHQvKipcblx0ICogVXNlIHRoZSByb3V0ZXJMaW5rIGF0dHJpYnV0ZSBvbiA8YT4gdGFnIGZvciBuYXZpZ2F0aW9uIGluc3RlYWQgb2YgdXNpbmcgZXZlbnQgaGFuZGxlcnNcblx0ICovXG5cdEBJbnB1dCgpIHVzZVJvdXRlciA9IGZhbHNlO1xuXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tc2lkZS1uYXZfX2l0ZW1cIikgZ2V0IHNpZGVOYXYoKSB7XG5cdFx0cmV0dXJuICF0aGlzLmlzU3ViTWVudTtcblx0fVxuXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tc2lkZS1uYXZfX21lbnUtaXRlbVwiKSBnZXQgbWVudUl0ZW0oKSB7XG5cdFx0cmV0dXJuIHRoaXMuaXNTdWJNZW51O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvZ2dsZXMgdGhlIGFjdGl2ZSAoY3VycmVudCBwYWdlKSBzdGF0ZSBmb3IgdGhlIGxpbmsuXG5cdCAqL1xuXHRASW5wdXQoKSBhY3RpdmUgPSBmYWxzZTtcblxuXHQvKipcblx0ICogQXJyYXkgb2YgY29tbWFuZHMgdG8gc2VuZCB0byB0aGUgcm91dGVyIHdoZW4gdGhlIGxpbmsgaXMgYWN0aXZhdGVkXG5cdCAqIFNlZTogaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9yb3V0ZXIvUm91dGVyI25hdmlnYXRlXG5cdCAqL1xuXHRASW5wdXQoKSByb3V0ZTogYW55W107XG5cblx0QElucHV0KCkgaXNTdWJNZW51ID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFJvdXRlciBvcHRpb25zLiBVc2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHJvdXRlYFxuXHQgKiBTZWU6IGh0dHBzOi8vYW5ndWxhci5pby9hcGkvcm91dGVyL1JvdXRlciNuYXZpZ2F0ZVxuXHQgKi9cblx0QElucHV0KCkgcm91dGVFeHRyYXM6IGFueTtcblxuXHQvKipcblx0ICogVGl0bGUgYXR0cmlidXRlIG9mIHRoZSBhbmNob3IgZWxlbWVudC5cblx0ICovXG5cdEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEVtaXRzIHRoZSBuYXZpZ2F0aW9uIHN0YXR1cyBwcm9taXNlIHdoZW4gdGhlIGxpbmsgaXMgYWN0aXZhdGVkXG5cdCAqL1xuXHRAT3V0cHV0KCkgbmF2aWdhdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvbWlzZTxib29sZWFuPj4oKTtcblxuXHQvKipcblx0ICogRW1pdHMgd2hlbiBgYWN0aXZlYCBpbnB1dCBpcyBjaGFuZ2VkLiBUaGlzIGlzIG1haW5seSB1c2VkIHRvIGluZGljYXRlIHRvIGFueSBwYXJlbnQgbWVudSBpdGVtcyB0aGF0IGFcblx0ICogY2hpbGQgc2lkZW5hdiBpdGVtIGlzIGFjdGl2ZSBvciBub3QgYWN0aXZlLlxuXHQgKi9cblx0QE91dHB1dCgpIHNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG5cdEBIb3N0QmluZGluZyhcImF0dHIucm9sZVwiKSByb2xlID0gXCJsaXN0aXRlbVwiO1xuXG5cdHByb3RlY3RlZCBfaHJlZiA9IFwiI1wiO1xuXG5cdGNvbnN0cnVjdG9yKHByb3RlY3RlZCBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplciwgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyKSB7fVxuXG5cdG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcblx0XHRpZiAoY2hhbmdlcy5hY3RpdmUpIHtcblx0XHRcdHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLmFjdGl2ZSk7XG5cdFx0fVxuXHR9XG5cblx0bmF2aWdhdGUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcblx0XHRpZiAodGhpcy5yb3V0ZXIgJiYgdGhpcy5yb3V0ZSkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGNvbnN0IHN0YXR1cyA9IHRoaXMucm91dGVyLm5hdmlnYXRlKHRoaXMucm91dGUsIHRoaXMucm91dGVFeHRyYXMpO1xuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uLmVtaXQoc3RhdHVzKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuX2hyZWYgPT09IFwiI1wiKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fVxufVxuIl19