com.phloxui
Version:
PhloxUI Ng2+ Framework
354 lines (353 loc) • 26.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, Input } from '@angular/core';
import { TabModel } from './model/TabModel';
import { AbstractHasData } from './AbstractHasData';
import { AbstractDataView } from './dataview/AbstractDataView';
import { Option } from '../decorator/Option.decorator';
import { NeedFocusService } from '../service/NeedFocusService.service';
const /** @type {?} */ TYPE_NAME = "phx-tab";
export class Tab extends AbstractHasData {
/**
* @param {?} elementRef
* @param {?} needFocusService
*/
constructor(elementRef, needFocusService) {
super(elementRef);
this.showMoreMenu = false;
this._autoFocus = false;
this.needFocusService = needFocusService;
}
/**
* @return {?}
*/
ngOnInit() {
if (this.tabPane !== null && typeof this.tabPane !== 'undefined') {
this.tabPane.addTabHeader(this);
}
if (this.model !== null && typeof this.model !== 'undefined') {
if (this.model.data !== null && typeof this.model.data !== 'undefined') {
this.data = this.model.data;
}
}
}
/**
* @return {?}
*/
getTabLabel() {
if (this.model !== null && typeof this.model !== 'undefined') {
let /** @type {?} */ defaultLabel = (this.model.label === null || typeof this.model.label === 'undefined') ? '' : this.model.label;
let /** @type {?} */ resolveLabel = null;
if (this.model.labelField !== null && typeof this.model.labelField !== 'undefined' && this.model.labelField !== '') {
resolveLabel = AbstractDataView.resolveMappedData(this.model.labelField, this.data);
}
if (resolveLabel !== null && typeof resolveLabel === 'string' && resolveLabel !== '') {
return resolveLabel;
}
else {
return defaultLabel;
}
}
return '';
}
/**
* @return {?}
*/
init() {
if (this.contextMenu != null && typeof this.contextMenu !== 'undefined') {
this.contextMenu.setContext(this);
}
}
/**
* @param {?} $event
* @return {?}
*/
onMoreButtonClick($event) {
$event.stopPropagation();
if (this.contextMenu !== null && typeof this.contextMenu !== 'undefined') {
if (this.contextMenu.isShow()) {
if (this.needFocusService !== null && this.needFocusService !== undefined) {
this.needFocusService.resetFocusingComponent(this);
}
}
else {
let /** @type {?} */ top = $(this.elementRef.nativeElement).offset().top + $(this.elementRef.nativeElement).height();
let /** @type {?} */ left = $(this.elementRef.nativeElement).offset().left - 1;
let /** @type {?} */ width = $(this.elementRef.nativeElement).width() + 2;
this.contextMenu.showAt(top, left, width);
if (this.needFocusService !== null && this.needFocusService !== undefined) {
this.needFocusService.setFocusingComponent(this);
}
}
}
}
/**
* @return {?}
*/
hideMenu() {
if (this.contextMenu != null && typeof this.contextMenu !== 'undefined') {
this.contextMenu.hide();
}
}
/**
* @return {?}
*/
getIndex() {
if (this.tabPane !== null && typeof this.tabPane !== 'undefined') {
return this.tabPane.getTabModelIndex(this.model);
}
return -1;
}
/**
* @param {?} selected
* @return {?}
*/
setSelected(selected) {
this.selected = selected;
}
/**
* @return {?}
*/
getContextMenu() {
return this.contextMenu;
}
/**
* @param {?} menu
* @return {?}
*/
setContextMenu(menu) {
this.contextMenu = menu;
}
/**
* @return {?}
*/
getMenuModelFactory() {
return this.menuFactory;
}
/**
* @param {?} menuFactory
* @return {?}
*/
setMenuModelFactory(menuFactory) {
this.menuFactory = menuFactory;
}
/**
* @return {?}
*/
getModel() {
return this.model;
}
/**
* @return {?}
*/
isSelfDataDirty() {
return false;
}
/**
* @return {?}
*/
selfSaveData() {
}
/**
* @return {?}
*/
selfResetData() {
}
/**
* @return {?}
*/
getTabBody() {
if (this.tabPane !== null && typeof this.tabPane !== 'undefined') {
let /** @type {?} */ index = this.tabPane.getTabHeaderIndex(this);
return this.tabPane.getTabBody(index);
}
return null;
}
/**
* @return {?}
*/
isShowMoreMenu() {
return this.showMoreMenu;
}
/**
* @return {?}
*/
doPreload() { return new Promise((resolve, reject) => { resolve(null); }); }
/**
* @return {?}
*/
doLoaded() {
}
/**
* @param {?} $event
* @return {?}
*/
_doFocus($event) {
// do something when focus
}
/**
* @param {?} $event
* @return {?}
*/
_doLostFocus($event) {
if (this.needFocusService !== null) {
this.needFocusService.resetFocusingComponent(this);
}
}
/**
* @param {?} event
* @return {?}
*/
onFocus(event) {
$(this.elementRef.nativeElement).find(".fake").focus();
}
/**
* @param {?} event
* @return {?}
*/
onLostFocus(event) {
$(this.elementRef.nativeElement).find(".fake").blur();
this.hideMenu();
}
}
Tab.TYPE_NAME = TYPE_NAME;
Tab.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: `<div class="phx-tab table-wrapper">
<div class="table-cell-wrapper middle">
<div *ngIf="getModel() != null" class="phx-tab" [class.dirty]="isDataDirty()" [ngClass]="getModel().styleClass">
<div class="tab-name">{{getTabLabel()}}</div> <div *ngIf="isShowMoreMenu()" class="tab-vertical-ellipsis" (click)="onMoreButtonClick($event)"></div>
<phx-context-menu [model]="getModel().menuModel" [context]="this" class="vertical" [autoFocus]="_autoFocus"></phx-context-menu>
</div>
</div>
<button type="button" class="fake" (focusin)="_doFocus($event)" (blur)="_doLostFocus($event)"></button>
</div>
`
},] },
];
/** @nocollapse */
Tab.ctorParameters = () => [
{ type: ElementRef, },
{ type: NeedFocusService, },
];
Tab.propDecorators = {
"model": [{ type: Input },],
"tabPane": [{ type: Input },],
"menuFactory": [{ type: Input },],
"showMoreMenu": [{ type: Input },],
"dataParent": [{ type: Input },],
"ignoreParentData": [{ type: Input },],
"data": [{ type: Input },],
"ignoreParentDisabled": [{ type: Input },],
"delegateHistory": [{ type: Input },],
"onDisabled": [{ type: Input },],
"onEnabled": [{ type: Input },],
"loadingEnabled": [{ type: Input },],
"i18nKey": [{ type: Input },],
"bypass": [{ type: Input, args: ['i18nBypass',] },],
"options": [{ type: Input },],
"disabled": [{ type: Input },],
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], Tab.prototype, "dataParent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], Tab.prototype, "ignoreParentData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], Tab.prototype, "data", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], Tab.prototype, "ignoreParentDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], Tab.prototype, "delegateHistory", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], Tab.prototype, "onDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], Tab.prototype, "onEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], Tab.prototype, "loadingEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], Tab.prototype, "i18nKey", void 0);
tslib_1.__decorate([
Option('i18nBypass'),
tslib_1.__metadata("design:type", Boolean)
], Tab.prototype, "bypass", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], Tab.prototype, "disabled", void 0);
function Tab_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
Tab.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
Tab.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
Tab.propDecorators;
/** @type {?} */
Tab.TYPE_NAME;
/** @type {?} */
Tab.prototype.model;
/** @type {?} */
Tab.prototype.tabPane;
/** @type {?} */
Tab.prototype.contextMenu;
/** @type {?} */
Tab.prototype.menuFactory;
/** @type {?} */
Tab.prototype.selected;
/** @type {?} */
Tab.prototype.showMoreMenu;
/** @type {?} */
Tab.prototype.dataParent;
/** @type {?} */
Tab.prototype.ignoreParentData;
/** @type {?} */
Tab.prototype.data;
/** @type {?} */
Tab.prototype.ignoreParentDisabled;
/** @type {?} */
Tab.prototype.delegateHistory;
/** @type {?} */
Tab.prototype.onDisabled;
/** @type {?} */
Tab.prototype.onEnabled;
/** @type {?} */
Tab.prototype.loadingEnabled;
/** @type {?} */
Tab.prototype.i18nKey;
/** @type {?} */
Tab.prototype.bypass;
/** @type {?} */
Tab.prototype.options;
/** @type {?} */
Tab.prototype.disabled;
/** @type {?} */
Tab.prototype.needFocusService;
/** @type {?} */
Tab.prototype._autoFocus;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9UYWIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxVQUFVLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQU01QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBSXZFLHVCQUFNLFNBQVMsR0FBVyxTQUFTLENBQUM7QUFnQnBDLE1BQU0sVUFBVyxTQUFRLGVBQWU7Ozs7O0lBcUR0QyxZQUFZLFVBQXNCLEVBQUUsZ0JBQWtDO1FBQ3BFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7S0FDMUM7Ozs7SUFFTSxRQUFRO1FBQ2IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakM7UUFDRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFL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Q3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTs7Ozs7O0lBR2pELFdBQVcsQ0FBQyxLQUFVO1FBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7OztnQkFwTXlCLFNBQVM7O1lBaEJyRCxTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUNuQixRQUFRLEVBQUUsU0FBUztnQkFDbkIsUUFBUSxFQUFFOzs7Ozs7Ozs7Q0FTWDthQUNBOzs7O1lBN0IyQixVQUFVO1lBVTdCLGdCQUFnQjs7O3NCQXdCdEIsS0FBSzt3QkFFTCxLQUFLOzRCQUdMLEtBQUs7NkJBR0wsS0FBSzsyQkFHTCxLQUFLO2lDQUdMLEtBQUs7cUJBR0wsS0FBSztxQ0FHTCxLQUFLO2dDQUdMLEtBQUs7MkJBR0wsS0FBSzswQkFHTCxLQUFLOytCQUdMLEtBQUs7d0JBR0wsS0FBSzt1QkFHTCxLQUFLLFNBQUMsWUFBWTt3QkFHbEIsS0FBSzt5QkFFTCxLQUFLOzs7SUEvQkwsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFO3NDQUNhLFFBQVE7OztJQUU3QixNQUFNLEVBQUU7c0NBQ1ksUUFBUTs7O0lBRTVCLE1BQU0sRUFBRTs7OztJQUdSLE1BQU0sRUFBRTs7OztJQUdSLE1BQU0sQ0FBQyxZQUFZLENBQUM7Ozs7SUFLcEIsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhYk1vZGVsIH0gZnJvbSAnLi9tb2RlbC9UYWJNb2RlbCc7XG5pbXBvcnQgeyBDb250ZXh0TWVudSB9IGZyb20gJy4vQ29udGV4dE1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IElDb250ZXh0IH0gZnJvbSAnLi9JQ29udGV4dCc7XG5pbXBvcnQgeyBJSGFzRGF0YSB9IGZyb20gJy4vSUhhc0RhdGEnO1xuaW1wb3J0IHsgSU5lZWRGb2N1cyB9IGZyb20gJy4vSU5lZWRGb2N1cyc7XG5pbXBvcnQgeyBJTWVudU1vZGVsRmFjdG9yeSB9IGZyb20gJy4vSU1lbnVNb2RlbEZhY3RvcnknO1xuaW1wb3J0IHsgQWJzdHJhY3RIYXNEYXRhIH0gZnJvbSAnLi9BYnN0cmFjdEhhc0RhdGEnO1xuaW1wb3J0IHsgQWJzdHJhY3REYXRhVmlldyB9IGZyb20gJy4vZGF0YXZpZXcvQWJzdHJhY3REYXRhVmlldyc7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi9kZWNvcmF0b3IvT3B0aW9uLmRlY29yYXRvcic7XG5pbXBvcnQgeyBOZWVkRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9OZWVkRm9jdXNTZXJ2aWNlLnNlcnZpY2UnO1xuXG5kZWNsYXJlIHZhciAkOiBhbnk7XG5cbmNvbnN0IFRZUEVfTkFNRTogc3RyaW5nID0gXCJwaHgtdGFiXCI7XG5cbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJwaHgtdGFiIHRhYmxlLXdyYXBwZXJcIj5cblx0PGRpdiBjbGFzcz1cInRhYmxlLWNlbGwtd3JhcHBlciBtaWRkbGVcIj5cblx0XHQ8ZGl2ICpuZ0lmPVwiZ2V0TW9kZWwoKSAhPSBudWxsXCIgY2xhc3M9XCJwaHgtdGFiXCIgW2NsYXNzLmRpcnR5XT1cImlzRGF0YURpcnR5KClcIiBbbmdDbGFzc109XCJnZXRNb2RlbCgpLnN0eWxlQ2xhc3NcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJ0YWItbmFtZVwiPnt7Z2V0VGFiTGFiZWwoKX19PC9kaXY+IDxkaXYgKm5nSWY9XCJpc1Nob3dNb3JlTWVudSgpXCIgY2xhc3M9XCJ0YWItdmVydGljYWwtZWxsaXBzaXNcIiAoY2xpY2spPVwib25Nb3JlQnV0dG9uQ2xpY2soJGV2ZW50KVwiPjwvZGl2PlxuXHRcdFx0PHBoeC1jb250ZXh0LW1lbnUgW21vZGVsXT1cImdldE1vZGVsKCkubWVudU1vZGVsXCIgW2NvbnRleHRdPVwidGhpc1wiIGNsYXNzPVwidmVydGljYWxcIiBbYXV0b0ZvY3VzXT1cIl9hdXRvRm9jdXNcIj48L3BoeC1jb250ZXh0LW1lbnU+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImZha2VcIiAoZm9jdXNpbik9XCJfZG9Gb2N1cygkZXZlbnQpXCIgKGJsdXIpPVwiX2RvTG9zdEZvY3VzKCRldmVudClcIj48L2J1dHRvbj5cbjwvZGl2PlxuYFxufSlcbmV4cG9ydCBjbGFzcyBUYWIgZXh0ZW5kcyBBYnN0cmFjdEhhc0RhdGEgaW1wbGVtZW50cyBPbkluaXQsIElDb250ZXh0LCBJTmVlZEZvY3VzIHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRZUEVfTkFNRTogc3RyaW5nID0gVFlQRV9OQU1FO1xuXG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbW9kZWw6IFRhYk1vZGVsO1xuICBASW5wdXQoKVxuICBwcml2YXRlIHRhYlBhbmU6IGFueTtcbiAgcHJpdmF0ZSBjb250ZXh0TWVudTogQ29udGV4dE1lbnU7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbWVudUZhY3Rvcnk6IElNZW51TW9kZWxGYWN0b3J5O1xuICBwcml2YXRlIHNlbGVjdGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwcml2YXRlIHNob3dNb3JlTWVudTogYm9vbGVhbjtcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhXG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGF0YVBhcmVudDogSUhhc0RhdGE7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGF0YTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkYXRhOiBhbnk7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGVsZWdhdGVIaXN0b3J5OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIG9uRGlzYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIG9uRW5hYmxlZDogRnVuY3Rpb247XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgbG9hZGluZ0VuYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaTE4bktleTogc3RyaW5nO1xuICBASW5wdXQoJ2kxOG5CeXBhc3MnKVxuICBAT3B0aW9uKCdpMThuQnlwYXNzJylcbiAgcHJvdGVjdGVkIGJ5cGFzczogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIG9wdGlvbnM6IGFueTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkaXNhYmxlZDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIG5lZWRGb2N1c1NlcnZpY2U6IE5lZWRGb2N1c1NlcnZpY2U7XG4gIHB1YmxpYyBfYXV0b0ZvY3VzOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIG5lZWRGb2N1c1NlcnZpY2U6IE5lZWRGb2N1c1NlcnZpY2UpIHtcbiAgICBzdXBlcihlbGVtZW50UmVmKTtcbiAgICB0aGlzLnNob3dNb3JlTWVudSA9IGZhbHNlO1xuICAgIHRoaXMuX2F1dG9Gb2N1cyA9IGZhbHNlO1xuICAgIHRoaXMubmVlZEZvY3VzU2VydmljZSA9IG5lZWRGb2N1c1NlcnZpY2U7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGFiUGFuZSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy50YWJQYW5lICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy50YWJQYW5lLmFkZFRhYkhlYWRlcih0aGlzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kZWwgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubW9kZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodGhpcy5tb2RlbC5kYXRhICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm1vZGVsLmRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMubW9kZWwuZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0VGFiTGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCBkZWZhdWx0TGFiZWwgPSAodGhpcy5tb2RlbC5sYWJlbCA9PT0gbnVsbCB8fCB0eXBlb2YgdGhpcy5tb2RlbC5sYWJlbCA9PT0gJ3VuZGVmaW5lZCcpID8gJycgOiB0aGlzLm1vZGVsLmxhYmVsO1xuICAgICAgbGV0IHJlc29sdmVMYWJlbCA9IG51bGw7XG4gICAgICBpZiAodGhpcy5tb2RlbC5sYWJlbEZpZWxkICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm1vZGVsLmxhYmVsRmllbGQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubW9kZWwubGFiZWxGaWVsZCAhPT0gJycpIHtcbiAgICAgICAgcmVzb2x2ZUxhYmVsID0gQWJzdHJhY3REYXRhVmlldy5yZXNvbHZlTWFwcGVkRGF0YSh0aGlzLm1vZGVsLmxhYmVsRmllbGQsIHRoaXMuZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNvbHZlTGFiZWwgIT09IG51bGwgJiYgdHlwZW9mIHJlc29sdmVMYWJlbCA9PT0gJ3N0cmluZycgJiYgcmVzb2x2ZUxhYmVsICE9PSAnJykge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZUxhYmVsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMYWJlbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBwdWJsaWMgaW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb250ZXh0TWVudSAhPSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbnRleHRNZW51ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5jb250ZXh0TWVudS5zZXRDb250ZXh0KHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbk1vcmVCdXR0b25DbGljaygkZXZlbnQ6IEV2ZW50KSB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMuY29udGV4dE1lbnUgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29udGV4dE1lbnUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodGhpcy5jb250ZXh0TWVudS5pc1Nob3coKSkge1xuICAgICAgICBpZih0aGlzLm5lZWRGb2N1c1NlcnZpY2UgIT09IG51bGwgJiYgdGhpcy5uZWVkRm9jdXNTZXJ2aWNlICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgIHRoaXMubmVlZEZvY3VzU2VydmljZS5yZXNldEZvY3VzaW5nQ29tcG9uZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgdG9wID0gJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkub2Zmc2V0KCkudG9wICsgJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuaGVpZ2h0KCk7XG4gICAgICAgIGxldCBsZWZ0ID0gJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkub2Zmc2V0KCkubGVmdCAtIDE7XG4gICAgICAgIGxldCB3aWR0aCA9ICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLndpZHRoKCkgKyAyO1xuXG4gICAgICAgIHRoaXMuY29udGV4dE1lbnUuc2hvd0F0KHRvcCwgbGVmdCwgd2lkdGgpO1xuXG4gICAgICAgIGlmKHRoaXMubmVlZEZvY3VzU2VydmljZSAhPT0gbnVsbCAmJiB0aGlzLm5lZWRGb2N1c1NlcnZpY2UgIT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgdGhpcy5uZWVkRm9jdXNTZXJ2aWNlLnNldEZvY3VzaW5nQ29tcG9uZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhpZGVNZW51KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbnRleHRNZW51ICE9IG51bGwgJiYgdHlwZW9mIHRoaXMuY29udGV4dE1lbnUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmNvbnRleHRNZW51LmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0SW5kZXgoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy50YWJQYW5lICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLnRhYlBhbmUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWJQYW5lLmdldFRhYk1vZGVsSW5kZXgodGhpcy5tb2RlbCk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWxlY3RlZChzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb250ZXh0TWVudSgpOiBDb250ZXh0TWVudSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dE1lbnU7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29udGV4dE1lbnUobWVudTogQ29udGV4dE1lbnUpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRleHRNZW51ID0gbWVudTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNZW51TW9kZWxGYWN0b3J5KCk6IElNZW51TW9kZWxGYWN0b3J5IHtcbiAgICByZXR1cm4gdGhpcy5tZW51RmFjdG9yeTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNZW51TW9kZWxGYWN0b3J5KG1lbnVGYWN0b3J5OiBJTWVudU1vZGVsRmFjdG9yeSk6IHZvaWQge1xuICAgIHRoaXMubWVudUZhY3RvcnkgPSBtZW51RmFjdG9yeTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNb2RlbCgpOiBUYWJNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBwdWJsaWMgaXNTZWxmRGF0YURpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxmU2F2ZURhdGEoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBzZWxmUmVzZXREYXRhKCk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0VGFiQm9keSgpOiBhbnkge1xuICAgIGlmICh0aGlzLnRhYlBhbmUgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMudGFiUGFuZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCBpbmRleCA9IHRoaXMudGFiUGFuZS5nZXRUYWJIZWFkZXJJbmRleCh0aGlzKTtcbiAgICAgIHJldHVybiB0aGlzLnRhYlBhbmUuZ2V0VGFiQm9keShpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIGlzU2hvd01vcmVNZW51KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dNb3JlTWVudTtcbiAgfVxuXG4gIHB1YmxpYyBkb1ByZWxvYWQoKTogUHJvbWlzZTxhbnk+IHsgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7ICAgICAgIHJlc29sdmUobnVsbCk7ICAgICB9KTsgICB9ICBwdWJsaWMgZG9Mb2FkZWQoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBfZG9Gb2N1cygkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgLy8gZG8gc29tZXRoaW5nIHdoZW4gZm9jdXNcbiAgfVxuXG4gIHB1YmxpYyBfZG9Mb3N0Rm9jdXMoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm5lZWRGb2N1c1NlcnZpY2UgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5uZWVkRm9jdXNTZXJ2aWNlLnJlc2V0Rm9jdXNpbmdDb21wb25lbnQodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uRm9jdXMoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoXCIuZmFrZVwiKS5mb2N1cygpXG4gIH1cblxuICBwdWJsaWMgb25Mb3N0Rm9jdXMoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoXCIuZmFrZVwiKS5ibHVyKCk7XG4gICAgdGhpcy5oaWRlTWVudSgpO1xuICB9XG59XG4iXX0=