@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
310 lines • 25.5 kB
JavaScript
/**
* @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';
var FullscreenComponent = /** @class */ (function () {
function FullscreenComponent(elementRef, doc) {
var _this = this;
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 {?}
*/
function (event) {
if (_this.currentTarget) {
/** @type {?} */
var targetElement = _this.currentTarget;
if (_this.doc.fullscreenElement) { // 进入全屏
_this.launchNormalFullscreen(targetElement);
}
else { // 退出全屏
_this.currentTarget = null;
_this.exitNormalFullscreen(targetElement);
}
// F11退出全屏时,需要将全屏状态传出去
/** @type {?} */
var isFullscreen = !!_this.doc.fullscreenElement;
_this.fullscreenLaunch.emit({
isFullscreen: isFullscreen
});
_this.isFullscreen = isFullscreen;
}
});
this.handleFullscreen = (/**
* @return {?}
*/
function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var targetElement, isFullscreen, fullscreen;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
targetElement = this.elementRef.nativeElement.querySelector('[fullscreen-target]');
if (!(this.mode === 'normal')) return [3 /*break*/, 1];
fullscreen = targetElement.classList.contains('fullscreen');
if (!fullscreen) { // 进入全屏
this.launchNormalFullscreen(targetElement);
isFullscreen = true;
}
else { // 退出全屏
this.exitNormalFullscreen(targetElement);
isFullscreen = false;
}
return [3 /*break*/, 5];
case 1:
this.currentTarget = targetElement;
if (!this.doc.fullscreenElement) return [3 /*break*/, 3];
return [4 /*yield*/, this.exitImmersiveFullScreen(this.doc)];
case 2:
isFullscreen = _a.sent();
return [3 /*break*/, 5];
case 3: return [4 /*yield*/, this.launchImmersiveFullScreen(this.doc.documentElement)];
case 4:
isFullscreen = _a.sent();
_a.label = 5;
case 5:
this.isFullscreen = isFullscreen;
this.fullscreenLaunch.emit({
isFullscreen: isFullscreen
});
return [2 /*return*/];
}
});
}); });
this.handleKeyDown = (/**
* @param {?} event
* @return {?}
*/
function (event) {
if (event.keyCode === ESC_KEYCODE) { // 按ESC键退出全屏
if (_this.isFullscreen) {
/** @type {?} */
var 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 {?}
*/
FullscreenComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
document.addEventListener('fullscreenchange', this.onFullScreenChange);
document.addEventListener('keydown', this.handleKeyDown);
/** @type {?} */
var btnLaunch = this.elementRef.nativeElement.querySelector('[fullscreen-launch]');
if (btnLaunch) {
btnLaunch.addEventListener('click', this.handleFullscreen);
}
};
/**
* @private
* @param {?} targetElement
* @return {?}
*/
FullscreenComponent.prototype.launchNormalFullscreen = /**
* @private
* @param {?} targetElement
* @return {?}
*/
function (targetElement) {
targetElement.classList.add('fullscreen');
if (this.zIndex) {
targetElement.setAttribute('style', "z-index: " + this.zIndex);
}
};
/**
* @private
* @param {?} targetElement
* @return {?}
*/
FullscreenComponent.prototype.exitNormalFullscreen = /**
* @private
* @param {?} targetElement
* @return {?}
*/
function (targetElement) {
targetElement.classList.remove('fullscreen');
targetElement.style.zIndex = null;
};
/**
* @private
* @param {?} docElement
* @return {?}
*/
FullscreenComponent.prototype.launchImmersiveFullScreen = /**
* @private
* @param {?} docElement
* @return {?}
*/
function (docElement) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var fullscreenLaunch;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
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 [4 /*yield*/, fullscreenLaunch.then((/**
* @return {?}
*/
function () { return !!_this.doc.fullscreenElement; }))];
case 1: return [2 /*return*/, _a.sent()];
}
});
});
};
/**
* @private
* @param {?} doc
* @return {?}
*/
FullscreenComponent.prototype.exitImmersiveFullScreen = /**
* @private
* @param {?} doc
* @return {?}
*/
function (doc) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var fullscreenExit;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
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 [4 /*yield*/, fullscreenExit.then((/**
* @return {?}
*/
function () { return !!_this.doc.fullscreenElement; }))];
case 1: return [2 /*return*/, _a.sent()];
}
});
});
};
/**
* @return {?}
*/
FullscreenComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
document.removeEventListener('fullscreenchange', this.onFullScreenChange);
document.removeEventListener('keydown', this.handleKeyDown);
/** @type {?} */
var 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 = function () { return [
{ type: ElementRef },
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
]; };
FullscreenComponent.propDecorators = {
mode: [{ type: Input }],
zIndex: [{ type: Input }],
target: [{ type: Input }],
fullscreenLaunch: [{ type: Output }]
};
return FullscreenComponent;
}());
export { FullscreenComponent };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbHNjcmVlbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1kZXZ1aS9mdWxsc2NyZWVuLyIsInNvdXJjZXMiOlsiZnVsbHNjcmVlbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFaEY7SUFlRSw2QkFDVSxVQUFzQixFQUNKLEdBQVE7UUFGcEMsaUJBR0s7UUFGSyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ0osUUFBRyxHQUFILEdBQUcsQ0FBSztRQVY1QixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUVwQixTQUFJLEdBQW1CLFlBQVksQ0FBQztRQUNwQyxXQUFNLEdBQUcsY0FBYyxDQUFDO1FBR3ZCLHFCQUFnQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBc0QzRCx1QkFBa0I7Ozs7UUFBRyxVQUFDLEtBQUs7WUFDakMsSUFBSSxLQUFJLENBQUMsYUFBYSxFQUFFOztvQkFDaEIsYUFBYSxHQUFnQixLQUFJLENBQUMsYUFBYTtnQkFDckQsSUFBSSxLQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsT0FBTztvQkFDdkMsS0FBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUM1QztxQkFBTSxFQUFFLE9BQU87b0JBQ2QsS0FBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7b0JBQzFCLEtBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDMUM7OztvQkFFSyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEtB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QkFUcUQsVUFBVTtnREFzQjNELE1BQU0sU0FBQyxRQUFROzs7dUJBUmpCLEtBQUs7eUJBQ0wsS0FBSzt5QkFDTCxLQUFLO21DQUVMLE1BQU07O0lBMEhULDBCQUFDO0NBQUEsQUF2SUQsSUF1SUM7U0FsSVksbUJBQW1COzs7Ozs7SUFDOUIsNENBQW1DOzs7OztJQUNuQywyQ0FBNkI7O0lBRTdCLG1DQUE2Qzs7SUFDN0MscUNBQWlDOztJQUNqQyxxQ0FBNkI7O0lBRTdCLCtDQUFtRTs7Ozs7SUFzRG5FLGlEQWdCQzs7Ozs7SUFFRCwrQ0F5QkM7Ozs7O0lBRUQsNENBZUM7Ozs7O0lBL0dDLHlDQUE4Qjs7Ozs7SUFDOUIsa0NBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIEluamVjdCwgRWxlbWVudFJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGdWxsc2NyZWVuTW9kZSB9IGZyb20gJy4vZnVsbHNjcmVlbi50eXBlJztcclxuaW1wb3J0IHsgREVGQVVMVF9aSU5ERVgsIERFRkFVTFRfTU9ERSwgRVNDX0tFWUNPREUgfSBmcm9tICcuL2Z1bGxzY3JlZW4uY29uZmlnJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZC1mdWxsc2NyZWVuJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZnVsbHNjcmVlbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbICcuL2Z1bGxzY3JlZW4uY29tcG9uZW50LnNjc3MnIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZ1bGxzY3JlZW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBjdXJyZW50VGFyZ2V0OiBIVE1MRWxlbWVudDtcclxuICBwcml2YXRlIGlzRnVsbHNjcmVlbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBtb2RlOiBGdWxsc2NyZWVuTW9kZSA9IERFRkFVTFRfTU9ERTtcclxuICBASW5wdXQoKSB6SW5kZXggPSBERUZBVUxUX1pJTkRFWDtcclxuICBASW5wdXQoKSB0YXJnZXQ6IEhUTUxFbGVtZW50O1xyXG5cclxuICBAT3V0cHV0KCkgZnVsbHNjcmVlbkxhdW5jaDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2M6IGFueVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZnVsbHNjcmVlbmNoYW5nZScsIHRoaXMub25GdWxsU2NyZWVuQ2hhbmdlKTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleURvd24pO1xyXG4gICAgY29uc3QgYnRuTGF1bmNoID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW2Z1bGxzY3JlZW4tbGF1bmNoXScpO1xyXG4gICAgaWYgKGJ0bkxhdW5jaCkgeyBidG5MYXVuY2guYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUZ1bGxzY3JlZW4pOyB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxhdW5jaE5vcm1hbEZ1bGxzY3JlZW4odGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQpIHtcclxuICAgIHRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZnVsbHNjcmVlbicpO1xyXG4gICAgaWYgKHRoaXMuekluZGV4KSB7XHJcbiAgICAgIHRhcmdldEVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHlsZScsIGB6LWluZGV4OiAke3RoaXMuekluZGV4fWApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleGl0Tm9ybWFsRnVsbHNjcmVlbih0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCkge1xyXG4gICAgdGFyZ2V0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdmdWxsc2NyZWVuJyk7XHJcbiAgICB0YXJnZXRFbGVtZW50LnN0eWxlLnpJbmRleCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxhdW5jaEltbWVyc2l2ZUZ1bGxTY3JlZW4oZG9jRWxlbWVudDogYW55KSB7XHJcbiAgICBsZXQgZnVsbHNjcmVlbkxhdW5jaDtcclxuICAgIGlmIChkb2NFbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuKSB7XHJcbiAgICAgIGZ1bGxzY3JlZW5MYXVuY2ggPSBkb2NFbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuKCk7XHJcbiAgICB9IGVsc2UgaWYgKGRvY0VsZW1lbnQubW96UmVxdWVzdEZ1bGxTY3JlZW4pIHtcclxuICAgICAgZnVsbHNjcmVlbkxhdW5jaCA9IGRvY0VsZW1lbnQubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTtcclxuICAgIH0gZWxzZSBpZiAoZG9jRWxlbWVudC53ZWJraXRSZXF1ZXN0RnVsbFNjcmVlbikge1xyXG4gICAgICBmdWxsc2NyZWVuTGF1bmNoID0gZG9jRWxlbWVudC53ZWJraXRSZXF1ZXN0RnVsbFNjcmVlbigpO1xyXG4gICAgfSBlbHNlIGlmIChkb2NFbGVtZW50Lm1zUmVxdWVzdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgZnVsbHNjcmVlbkxhdW5jaCA9IGRvY0VsZW1lbnQubXNSZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IGZ1bGxzY3JlZW5MYXVuY2gudGhlbigoKSA9PiAhIXRoaXMuZG9jLmZ1bGxzY3JlZW5FbGVtZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZXhpdEltbWVyc2l2ZUZ1bGxTY3JlZW4oZG9jOiBhbnkpIHtcclxuICAgIGxldCBmdWxsc2NyZWVuRXhpdDtcclxuICAgIGlmIChkb2MuZXhpdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgZnVsbHNjcmVlbkV4aXQgPSBkb2MuZXhpdEZ1bGxzY3JlZW4oKTtcclxuICAgIH0gZWxzZSBpZiAoZG9jLm1vekNhbmNlbEZ1bGxTY3JlZW4pIHtcclxuICAgICAgZnVsbHNjcmVlbkV4aXQgPSBkb2MubW96Q2FuY2VsRnVsbFNjcmVlbigpO1xyXG4gICAgfSBlbHNlIGlmIChkb2Mud2Via2l0Q2FuY2VsRnVsbFNjcmVlbikge1xyXG4gICAgICBmdWxsc2NyZWVuRXhpdCA9IGRvYy53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7XHJcbiAgICB9IGVsc2UgaWYgKGRvYy5tc0V4aXRGdWxsc2NyZWVuKSB7XHJcbiAgICAgIGZ1bGxzY3JlZW5FeGl0ID0gZG9jLm1zRXhpdEZ1bGxzY3JlZW4oKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhd2FpdCBmdWxsc2NyZWVuRXhpdC50aGVuKCgpID0+ICEhdGhpcy5kb2MuZnVsbHNjcmVlbkVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkZ1bGxTY3JlZW5DaGFuZ2UgPSAoZXZlbnQpID0+IHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLmN1cnJlbnRUYXJnZXQ7XHJcbiAgICAgIGlmICh0aGlzLmRvYy5mdWxsc2NyZWVuRWxlbWVudCkgeyAvLyDov5vlhaXlhajlsY9cclxuICAgICAgICB0aGlzLmxhdW5jaE5vcm1hbEZ1bGxzY3JlZW4odGFyZ2V0RWxlbWVudCk7XHJcbiAgICAgIH0gZWxzZSB7IC8vIOmAgOWHuuWFqOWxj1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5leGl0Tm9ybWFsRnVsbHNjcmVlbih0YXJnZXRFbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBGMTHpgIDlh7rlhajlsY/ml7bvvIzpnIDopoHlsIblhajlsY/nirbmgIHkvKDlh7rljrtcclxuICAgICAgY29uc3QgaXNGdWxsc2NyZWVuID0gISF0aGlzLmRvYy5mdWxsc2NyZWVuRWxlbWVudDtcclxuICAgICAgdGhpcy5mdWxsc2NyZWVuTGF1bmNoLmVtaXQoe1xyXG4gICAgICAgIGlzRnVsbHNjcmVlblxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5pc0Z1bGxzY3JlZW4gPSBpc0Z1bGxzY3JlZW47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUZ1bGxzY3JlZW4gPSBhc3luYyAoKSA9PiB7XHJcbiAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW2Z1bGxzY3JlZW4tdGFyZ2V0XScpO1xyXG4gICAgbGV0IGlzRnVsbHNjcmVlbjtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdub3JtYWwnKSB7XHJcbiAgICAgIGNvbnN0IGZ1bGxzY3JlZW4gPSB0YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZnVsbHNjcmVlbicpO1xyXG4gICAgICBpZiAoIWZ1bGxzY3JlZW4pIHsgLy8g6L+b5YWl5YWo5bGPXHJcbiAgICAgICAgdGhpcy5sYXVuY2hOb3JtYWxGdWxsc2NyZWVuKHRhcmdldEVsZW1lbnQpO1xyXG4gICAgICAgIGlzRnVsbHNjcmVlbiA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7IC8vIOmAgOWHuuWFqOWxj1xyXG4gICAgICAgIHRoaXMuZXhpdE5vcm1hbEZ1bGxzY3JlZW4odGFyZ2V0RWxlbWVudCk7XHJcbiAgICAgICAgaXNGdWxsc2NyZWVuID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFRhcmdldCA9IHRhcmdldEVsZW1lbnQ7XHJcbiAgICAgIGlmICh0aGlzLmRvYy5mdWxsc2NyZWVuRWxlbWVudCkge1xyXG4gICAgICAgIGlzRnVsbHNjcmVlbiA9IGF3YWl0IHRoaXMuZXhpdEltbWVyc2l2ZUZ1bGxTY3JlZW4odGhpcy5kb2MpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlzRnVsbHNjcmVlbiA9IGF3YWl0IHRoaXMubGF1bmNoSW1tZXJzaXZlRnVsbFNjcmVlbih0aGlzLmRvYy5kb2N1bWVudEVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0Z1bGxzY3JlZW4gPSBpc0Z1bGxzY3JlZW47XHJcbiAgICB0aGlzLmZ1bGxzY3JlZW5MYXVuY2guZW1pdCh7XHJcbiAgICAgIGlzRnVsbHNjcmVlblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUtleURvd24gPSAoZXZlbnQpID0+IHtcclxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSBFU0NfS0VZQ09ERSkgeyAvLyDmjIlFU0PplK7pgIDlh7rlhajlsY9cclxuICAgICAgaWYgKHRoaXMuaXNGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tmdWxsc2NyZWVuLXRhcmdldF0nKTtcclxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnbm9ybWFsJykge1xyXG4gICAgICAgICAgdGhpcy5leGl0Tm9ybWFsRnVsbHNjcmVlbih0YXJnZXRFbGVtZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZG9jLmZ1bGxzY3JlZW5FbGVtZW50KSB7IHRoaXMuZXhpdEltbWVyc2l2ZUZ1bGxTY3JlZW4odGhpcy5kb2MpOyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnVsbHNjcmVlbkxhdW5jaC5lbWl0KHtcclxuICAgICAgICAgIGlzRnVsbHNjcmVlbjogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmlzRnVsbHNjcmVlbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Z1bGxzY3JlZW5jaGFuZ2UnLCB0aGlzLm9uRnVsbFNjcmVlbkNoYW5nZSk7XHJcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlEb3duKTtcclxuICAgIGNvbnN0IGJ0bkxhdW5jaCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tmdWxsc2NyZWVuLWxhdW5jaF0nKTtcclxuICAgIGlmIChidG5MYXVuY2gpIHsgYnRuTGF1bmNoLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVGdWxsc2NyZWVuKTsgfVxyXG4gIH1cclxufVxyXG4iXX0=