UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

267 lines 23 kB
/** * @fileoverview added by tsickle * Generated from: fullscreen.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Input, Inject, ElementRef, Output, EventEmitter } from '@angular/core'; import { DOCUMENT } from '@angular/common'; import { DEFAULT_ZINDEX, DEFAULT_MODE, ESC_KEYCODE } from './fullscreen.config'; export class FullscreenComponent { /** * @param {?} elementRef * @param {?} doc */ constructor(elementRef, doc) { this.elementRef = elementRef; this.doc = doc; this.isFullscreen = false; this.mode = DEFAULT_MODE; this.zIndex = DEFAULT_ZINDEX; this.fullscreenLaunch = new EventEmitter(); this.onFullScreenChange = (/** * @param {?} event * @return {?} */ (event) => { if (this.currentTarget) { /** @type {?} */ const targetElement = this.currentTarget; if (this.doc.fullscreenElement) { // 进入全屏 this.launchNormalFullscreen(targetElement); } else { // 退出全屏 this.currentTarget = null; this.exitNormalFullscreen(targetElement); } // F11退出全屏时,需要将全屏状态传出去 /** @type {?} */ const isFullscreen = !!this.doc.fullscreenElement; this.fullscreenLaunch.emit({ isFullscreen }); this.isFullscreen = isFullscreen; } }); this.handleFullscreen = (/** * @return {?} */ () => tslib_1.__awaiter(this, void 0, void 0, function* () { /** @type {?} */ const targetElement = this.elementRef.nativeElement.querySelector('[fullscreen-target]'); /** @type {?} */ let isFullscreen; if (this.mode === 'normal') { /** @type {?} */ const fullscreen = targetElement.classList.contains('fullscreen'); if (!fullscreen) { // 进入全屏 this.launchNormalFullscreen(targetElement); isFullscreen = true; } else { // 退出全屏 this.exitNormalFullscreen(targetElement); isFullscreen = false; } } else { this.currentTarget = targetElement; if (this.doc.fullscreenElement) { isFullscreen = yield this.exitImmersiveFullScreen(this.doc); } else { isFullscreen = yield this.launchImmersiveFullScreen(this.doc.documentElement); } } this.isFullscreen = isFullscreen; this.fullscreenLaunch.emit({ isFullscreen }); })); this.handleKeyDown = (/** * @param {?} event * @return {?} */ (event) => { if (event.keyCode === ESC_KEYCODE) { // 按ESC键退出全屏 if (this.isFullscreen) { /** @type {?} */ const targetElement = this.elementRef.nativeElement.querySelector('[fullscreen-target]'); if (this.mode === 'normal') { this.exitNormalFullscreen(targetElement); } else { if (this.doc.fullscreenElement) { this.exitImmersiveFullScreen(this.doc); } } this.fullscreenLaunch.emit({ isFullscreen: false }); this.isFullscreen = false; } } }); } /** * @return {?} */ ngOnInit() { document.addEventListener('fullscreenchange', this.onFullScreenChange); document.addEventListener('keydown', this.handleKeyDown); /** @type {?} */ const btnLaunch = this.elementRef.nativeElement.querySelector('[fullscreen-launch]'); if (btnLaunch) { btnLaunch.addEventListener('click', this.handleFullscreen); } } /** * @private * @param {?} targetElement * @return {?} */ launchNormalFullscreen(targetElement) { targetElement.classList.add('fullscreen'); if (this.zIndex) { targetElement.setAttribute('style', `z-index: ${this.zIndex}`); } } /** * @private * @param {?} targetElement * @return {?} */ exitNormalFullscreen(targetElement) { targetElement.classList.remove('fullscreen'); targetElement.style.zIndex = null; } /** * @private * @param {?} docElement * @return {?} */ launchImmersiveFullScreen(docElement) { return tslib_1.__awaiter(this, void 0, void 0, function* () { /** @type {?} */ let fullscreenLaunch; if (docElement.requestFullscreen) { fullscreenLaunch = docElement.requestFullscreen(); } else if (docElement.mozRequestFullScreen) { fullscreenLaunch = docElement.mozRequestFullScreen(); } else if (docElement.webkitRequestFullScreen) { fullscreenLaunch = docElement.webkitRequestFullScreen(); } else if (docElement.msRequestFullscreen) { fullscreenLaunch = docElement.msRequestFullscreen(); } return yield fullscreenLaunch.then((/** * @return {?} */ () => !!this.doc.fullscreenElement)); }); } /** * @private * @param {?} doc * @return {?} */ exitImmersiveFullScreen(doc) { return tslib_1.__awaiter(this, void 0, void 0, function* () { /** @type {?} */ let fullscreenExit; if (doc.exitFullscreen) { fullscreenExit = doc.exitFullscreen(); } else if (doc.mozCancelFullScreen) { fullscreenExit = doc.mozCancelFullScreen(); } else if (doc.webkitCancelFullScreen) { fullscreenExit = doc.webkitCancelFullScreen(); } else if (doc.msExitFullscreen) { fullscreenExit = doc.msExitFullscreen(); } return yield fullscreenExit.then((/** * @return {?} */ () => !!this.doc.fullscreenElement)); }); } /** * @return {?} */ ngOnDestroy() { document.removeEventListener('fullscreenchange', this.onFullScreenChange); document.removeEventListener('keydown', this.handleKeyDown); /** @type {?} */ const btnLaunch = this.elementRef.nativeElement.querySelector('[fullscreen-launch]'); if (btnLaunch) { btnLaunch.removeEventListener('click', this.handleFullscreen); } } } FullscreenComponent.decorators = [ { type: Component, args: [{ selector: 'd-fullscreen', template: "<div class=\"fullscreen-container\">\r\n <ng-content select=\"[fullscreen-launch]\"></ng-content>\r\n <ng-content select=\"[fullscreen-target]\"></ng-content>\r\n</div>\r\n", styles: [":host ::ng-deep .fullscreen{position:fixed;top:0;left:0;width:100%;height:100%;z-index:10;overflow:auto;background-color:#fff}"] }] } ]; /** @nocollapse */ FullscreenComponent.ctorParameters = () => [ { type: ElementRef }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] } ]; FullscreenComponent.propDecorators = { mode: [{ type: Input }], zIndex: [{ type: Input }], target: [{ type: Input }], fullscreenLaunch: [{ type: Output }] }; if (false) { /** * @type {?} * @private */ FullscreenComponent.prototype.currentTarget; /** * @type {?} * @private */ FullscreenComponent.prototype.isFullscreen; /** @type {?} */ FullscreenComponent.prototype.mode; /** @type {?} */ FullscreenComponent.prototype.zIndex; /** @type {?} */ FullscreenComponent.prototype.target; /** @type {?} */ FullscreenComponent.prototype.fullscreenLaunch; /** * @type {?} * @private */ FullscreenComponent.prototype.onFullScreenChange; /** * @type {?} * @private */ FullscreenComponent.prototype.handleFullscreen; /** * @type {?} * @private */ FullscreenComponent.prototype.handleKeyDown; /** * @type {?} * @private */ FullscreenComponent.prototype.elementRef; /** * @type {?} * @private */ FullscreenComponent.prototype.doc; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbHNjcmVlbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1kZXZ1aS9mdWxsc2NyZWVuLyIsInNvdXJjZXMiOlsiZnVsbHNjcmVlbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFPaEYsTUFBTSxPQUFPLG1CQUFtQjs7Ozs7SUFVOUIsWUFDVSxVQUFzQixFQUNKLEdBQVE7UUFEMUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNKLFFBQUcsR0FBSCxHQUFHLENBQUs7UUFWNUIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFcEIsU0FBSSxHQUFtQixZQUFZLENBQUM7UUFDcEMsV0FBTSxHQUFHLGNBQWMsQ0FBQztRQUd2QixxQkFBZ0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQXNEM0QsdUJBQWtCOzs7O1FBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7O3NCQUNoQixhQUFhLEdBQWdCLElBQUksQ0FBQyxhQUFhO2dCQUNyRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxPQUFPO29CQUN2QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQzVDO3FCQUFNLEVBQUUsT0FBTztvQkFDZCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFDMUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUMxQzs7O3NCQUVLLFlB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LE1BQU07Ozs7Ozs7SUFQUCw0Q0FBbUM7Ozs7O0lBQ25DLDJDQUE2Qjs7SUFFN0IsbUNBQTZDOztJQUM3QyxxQ0FBaUM7O0lBQ2pDLHFDQUE2Qjs7SUFFN0IsK0NBQW1FOzs7OztJQXNEbkUsaURBZ0JDOzs7OztJQUVELCtDQXlCQzs7Ozs7SUFFRCw0Q0FlQzs7Ozs7SUEvR0MseUNBQThCOzs7OztJQUM5QixrQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBJbnB1dCwgSW5qZWN0LCBFbGVtZW50UmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZ1bGxzY3JlZW5Nb2RlIH0gZnJvbSAnLi9mdWxsc2NyZWVuLnR5cGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX1pJTkRFWCwgREVGQVVMVF9NT0RFLCBFU0NfS0VZQ09ERSB9IGZyb20gJy4vZnVsbHNjcmVlbi5jb25maWcnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkLWZ1bGxzY3JlZW4nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mdWxsc2NyZWVuLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsgJy4vZnVsbHNjcmVlbi5jb21wb25lbnQuc2NzcycgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRnVsbHNjcmVlbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIGN1cnJlbnRUYXJnZXQ6IEhUTUxFbGVtZW50O1xyXG4gIHByaXZhdGUgaXNGdWxsc2NyZWVuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIG1vZGU6IEZ1bGxzY3JlZW5Nb2RlID0gREVGQVVMVF9NT0RFO1xyXG4gIEBJbnB1dCgpIHpJbmRleCA9IERFRkFVTFRfWklOREVYO1xyXG4gIEBJbnB1dCgpIHRhcmdldDogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIEBPdXRwdXQoKSBmdWxsc2NyZWVuTGF1bmNoOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvYzogYW55XHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmdWxsc2NyZWVuY2hhbmdlJywgdGhpcy5vbkZ1bGxTY3JlZW5DaGFuZ2UpO1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5RG93bik7XHJcbiAgICBjb25zdCBidG5MYXVuY2ggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbZnVsbHNjcmVlbi1sYXVuY2hdJyk7XHJcbiAgICBpZiAoYnRuTGF1bmNoKSB7IGJ0bkxhdW5jaC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlRnVsbHNjcmVlbik7IH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGF1bmNoTm9ybWFsRnVsbHNjcmVlbih0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCkge1xyXG4gICAgdGFyZ2V0RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdmdWxsc2NyZWVuJyk7XHJcbiAgICBpZiAodGhpcy56SW5kZXgpIHtcclxuICAgICAgdGFyZ2V0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYHotaW5kZXg6ICR7dGhpcy56SW5kZXh9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4aXROb3JtYWxGdWxsc2NyZWVuKHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XHJcbiAgICB0YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Z1bGxzY3JlZW4nKTtcclxuICAgIHRhcmdldEVsZW1lbnQuc3R5bGUuekluZGV4ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbGF1bmNoSW1tZXJzaXZlRnVsbFNjcmVlbihkb2NFbGVtZW50OiBhbnkpIHtcclxuICAgIGxldCBmdWxsc2NyZWVuTGF1bmNoO1xyXG4gICAgaWYgKGRvY0VsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgZnVsbHNjcmVlbkxhdW5jaCA9IGRvY0VsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4oKTtcclxuICAgIH0gZWxzZSBpZiAoZG9jRWxlbWVudC5tb3pSZXF1ZXN0RnVsbFNjcmVlbikge1xyXG4gICAgICBmdWxsc2NyZWVuTGF1bmNoID0gZG9jRWxlbWVudC5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xyXG4gICAgfSBlbHNlIGlmIChkb2NFbGVtZW50LndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKSB7XHJcbiAgICAgIGZ1bGxzY3JlZW5MYXVuY2ggPSBkb2NFbGVtZW50LndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKCk7XHJcbiAgICB9IGVsc2UgaWYgKGRvY0VsZW1lbnQubXNSZXF1ZXN0RnVsbHNjcmVlbikge1xyXG4gICAgICBmdWxsc2NyZWVuTGF1bmNoID0gZG9jRWxlbWVudC5tc1JlcXVlc3RGdWxsc2NyZWVuKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXdhaXQgZnVsbHNjcmVlbkxhdW5jaC50aGVuKCgpID0+ICEhdGhpcy5kb2MuZnVsbHNjcmVlbkVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBleGl0SW1tZXJzaXZlRnVsbFNjcmVlbihkb2M6IGFueSkge1xyXG4gICAgbGV0IGZ1bGxzY3JlZW5FeGl0O1xyXG4gICAgaWYgKGRvYy5leGl0RnVsbHNjcmVlbikge1xyXG4gICAgICBmdWxsc2NyZWVuRXhpdCA9IGRvYy5leGl0RnVsbHNjcmVlbigpO1xyXG4gICAgfSBlbHNlIGlmIChkb2MubW96Q2FuY2VsRnVsbFNjcmVlbikge1xyXG4gICAgICBmdWxsc2NyZWVuRXhpdCA9IGRvYy5tb3pDYW5jZWxGdWxsU2NyZWVuKCk7XHJcbiAgICB9IGVsc2UgaWYgKGRvYy53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKSB7XHJcbiAgICAgIGZ1bGxzY3JlZW5FeGl0ID0gZG9jLndlYmtpdENhbmNlbEZ1bGxTY3JlZW4oKTtcclxuICAgIH0gZWxzZSBpZiAoZG9jLm1zRXhpdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgZnVsbHNjcmVlbkV4aXQgPSBkb2MubXNFeGl0RnVsbHNjcmVlbigpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IGZ1bGxzY3JlZW5FeGl0LnRoZW4oKCkgPT4gISF0aGlzLmRvYy5mdWxsc2NyZWVuRWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRnVsbFNjcmVlbkNoYW5nZSA9IChldmVudCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFRhcmdldCkge1xyXG4gICAgICBjb25zdCB0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuY3VycmVudFRhcmdldDtcclxuICAgICAgaWYgKHRoaXMuZG9jLmZ1bGxzY3JlZW5FbGVtZW50KSB7IC8vIOi/m+WFpeWFqOWxj1xyXG4gICAgICAgIHRoaXMubGF1bmNoTm9ybWFsRnVsbHNjcmVlbih0YXJnZXRFbGVtZW50KTtcclxuICAgICAgfSBlbHNlIHsgLy8g6YCA5Ye65YWo5bGPXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmV4aXROb3JtYWxGdWxsc2NyZWVuKHRhcmdldEVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIEYxMemAgOWHuuWFqOWxj+aXtu+8jOmcgOimgeWwhuWFqOWxj+eKtuaAgeS8oOWHuuWOu1xyXG4gICAgICBjb25zdCBpc0Z1bGxzY3JlZW4gPSAhIXRoaXMuZG9jLmZ1bGxzY3JlZW5FbGVtZW50O1xyXG4gICAgICB0aGlzLmZ1bGxzY3JlZW5MYXVuY2guZW1pdCh7XHJcbiAgICAgICAgaXNGdWxsc2NyZWVuXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmlzRnVsbHNjcmVlbiA9IGlzRnVsbHNjcmVlbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRnVsbHNjcmVlbiA9IGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbZnVsbHNjcmVlbi10YXJnZXRdJyk7XHJcbiAgICBsZXQgaXNGdWxsc2NyZWVuO1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ25vcm1hbCcpIHtcclxuICAgICAgY29uc3QgZnVsbHNjcmVlbiA9IHRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdmdWxsc2NyZWVuJyk7XHJcbiAgICAgIGlmICghZnVsbHNjcmVlbikgeyAvLyDov5vlhaXlhajlsY9cclxuICAgICAgICB0aGlzLmxhdW5jaE5vcm1hbEZ1bGxzY3JlZW4odGFyZ2V0RWxlbWVudCk7XHJcbiAgICAgICAgaXNGdWxsc2NyZWVuID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHsgLy8g6YCA5Ye65YWo5bGPXHJcbiAgICAgICAgdGhpcy5leGl0Tm9ybWFsRnVsbHNjcmVlbih0YXJnZXRFbGVtZW50KTtcclxuICAgICAgICBpc0Z1bGxzY3JlZW4gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gdGFyZ2V0RWxlbWVudDtcclxuICAgICAgaWYgKHRoaXMuZG9jLmZ1bGxzY3JlZW5FbGVtZW50KSB7XHJcbiAgICAgICAgaXNGdWxsc2NyZWVuID0gYXdhaXQgdGhpcy5leGl0SW1tZXJzaXZlRnVsbFNjcmVlbih0aGlzLmRvYyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaXNGdWxsc2NyZWVuID0gYXdhaXQgdGhpcy5sYXVuY2hJbW1lcnNpdmVGdWxsU2NyZWVuKHRoaXMuZG9jLmRvY3VtZW50RWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRnVsbHNjcmVlbiA9IGlzRnVsbHNjcmVlbjtcclxuICAgIHRoaXMuZnVsbHNjcmVlbkxhdW5jaC5lbWl0KHtcclxuICAgICAgaXNGdWxsc2NyZWVuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlS2V5RG93biA9IChldmVudCkgPT4ge1xyXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ19LRVlDT0RFKSB7IC8vIOaMiUVTQ+mUrumAgOWHuuWFqOWxj1xyXG4gICAgICBpZiAodGhpcy5pc0Z1bGxzY3JlZW4pIHtcclxuICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW2Z1bGxzY3JlZW4tdGFyZ2V0XScpO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdub3JtYWwnKSB7XHJcbiAgICAgICAgICB0aGlzLmV4aXROb3JtYWxGdWxsc2NyZWVuKHRhcmdldEVsZW1lbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kb2MuZnVsbHNjcmVlbkVsZW1lbnQpIHsgdGhpcy5leGl0SW1tZXJzaXZlRnVsbFNjcmVlbih0aGlzLmRvYyk7IH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mdWxsc2NyZWVuTGF1bmNoLmVtaXQoe1xyXG4gICAgICAgICAgaXNGdWxsc2NyZWVuOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaXNGdWxsc2NyZWVuID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZnVsbHNjcmVlbmNoYW5nZScsIHRoaXMub25GdWxsU2NyZWVuQ2hhbmdlKTtcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleURvd24pO1xyXG4gICAgY29uc3QgYnRuTGF1bmNoID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW2Z1bGxzY3JlZW4tbGF1bmNoXScpO1xyXG4gICAgaWYgKGJ0bkxhdW5jaCkgeyBidG5MYXVuY2gucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUZ1bGxzY3JlZW4pOyB9XHJcbiAgfVxyXG59XHJcbiJdfQ==