com.phloxui
Version:
PhloxUI Ng2+ Framework
226 lines (225 loc) • 16.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, Input, EventEmitter, Output } from '@angular/core';
import { AbstractRippleButton } from './AbstractRippleButton';
import { PhloxAppService } from '../service/PhloxAppService.service';
import { NeedFocusService } from '../service/NeedFocusService.service';
import { CLICK_EVENT, BEFORE_CLICK_EVENT } from '../share/CustomEventType';
import { Option } from '../decorator/Option.decorator';
import { EventUtils } from '../share/utils/EventUtils';
const /** @type {?} */ TYPE_NAME = "phx-simple-ripple-btn";
export class SimpleRippleButton extends AbstractRippleButton {
/**
* @param {?} phloxAppService
* @param {?} needFocusService
*/
constructor(phloxAppService, needFocusService) {
super(phloxAppService, needFocusService);
this.beforeClickEvent = new EventEmitter();
this.clickEvent = new EventEmitter();
}
/**
* @return {?}
*/
ngOnInit() {
}
/**
* @param {?} $event
* @return {?}
*/
doFocus($event) {
}
/**
* @param {?} $event
* @return {?}
*/
doLostFocus($event) {
}
/**
* @param {?} label
* @return {?}
*/
setLabel(label) {
this.label = label;
}
/**
* @return {?}
*/
getLabel() {
return this.label;
}
/**
* @param {?} $event
* @param {?=} fireEvent
* @return {?}
*/
onClick($event, fireEvent) {
super.onClick($event);
if (this.clickHandler !== null && typeof this.clickHandler === 'function') {
this.clickHandler.call(this, $event);
}
if (fireEvent === null || fireEvent === undefined) {
fireEvent = true;
}
EventUtils.handleBrowserEvent(this, 'beforeClickEvent', $event, fireEvent, ($browserEvent) => {
// Do nothing while clicked.
}, this.emitBeforeClickEvent, this.emitClickEvent);
}
/**
* @param {?=} $event
* @return {?}
*/
emitBeforeClickEvent($event) {
// emit event
let /** @type {?} */ data = {
event: $event,
instance: this
};
let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_CLICK_EVENT, this, data, $event);
if (this.beforeClickEvent !== null && this.beforeClickEvent !== undefined) {
this.beforeClickEvent.emit(ev);
}
}
/**
* @param {?=} $event
* @return {?}
*/
emitClickEvent($event) {
// emit event
let /** @type {?} */ data = {
event: $event,
instance: this
};
let /** @type {?} */ ev = EventUtils.newCustomEvent(CLICK_EVENT, this, data, $event);
if (this.clickEvent !== null && this.clickEvent !== undefined) {
this.clickEvent.emit(ev);
}
}
/**
* @return {?}
*/
getClickEvent() {
return this.clickEvent;
}
/**
* @param {?} event
* @return {?}
*/
setClickEvent(event) {
this.clickEvent = event;
}
/**
* @return {?}
*/
getBeforeClickEvent() {
return this.beforeClickEvent;
}
/**
* @param {?} event
* @return {?}
*/
setBeforeClickEvent(event) {
this.beforeClickEvent = event;
}
/**
* @return {?}
*/
isDisabled() {
return this.disabled;
}
}
SimpleRippleButton.TYPE_NAME = TYPE_NAME;
SimpleRippleButton.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: `<div class="phx-simple-ripple-btn" [class.disabled]="isDisabled()">
<button type="button" (click)="onClick($event)" (focusin)="onFocusing($event)" (blur)="onLostFocusing($event)">
<div class="table-wrapper fluid">
<div class="table-cell-wrapper middle">
{{getLabel()}}
</div>
</div>
</button>
</div>
`
},] },
];
/** @nocollapse */
SimpleRippleButton.ctorParameters = () => [
{ type: PhloxAppService, },
{ type: NeedFocusService, },
];
SimpleRippleButton.propDecorators = {
"label": [{ type: Input },],
"disabled": [{ type: Input },],
"clickHandler": [{ type: Input },],
"beforeClickEvent": [{ type: Output, args: ['phxBeforeClick',] },],
"clickEvent": [{ type: Output, args: ['phxClick',] },],
"dataParent": [{ type: Input },],
"beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },],
"focusEvent": [{ type: Output, args: ['phxFocus',] },],
"beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },],
"lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },],
};
tslib_1.__decorate([
Option('beforeClick'),
tslib_1.__metadata("design:type", EventEmitter)
], SimpleRippleButton.prototype, "beforeClickEvent", void 0);
tslib_1.__decorate([
Option('click'),
tslib_1.__metadata("design:type", EventEmitter)
], SimpleRippleButton.prototype, "clickEvent", void 0);
tslib_1.__decorate([
Option('beforeFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], SimpleRippleButton.prototype, "beforeFocusEvent", void 0);
tslib_1.__decorate([
Option('focus'),
tslib_1.__metadata("design:type", EventEmitter)
], SimpleRippleButton.prototype, "focusEvent", void 0);
tslib_1.__decorate([
Option('beforeLostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], SimpleRippleButton.prototype, "beforeLostFocusEvent", void 0);
tslib_1.__decorate([
Option('lostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], SimpleRippleButton.prototype, "lostFocusEvent", void 0);
function SimpleRippleButton_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
SimpleRippleButton.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
SimpleRippleButton.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
SimpleRippleButton.propDecorators;
/** @type {?} */
SimpleRippleButton.TYPE_NAME;
/** @type {?} */
SimpleRippleButton.prototype.label;
/** @type {?} */
SimpleRippleButton.prototype.disabled;
/** @type {?} */
SimpleRippleButton.prototype.clickHandler;
/** @type {?} */
SimpleRippleButton.prototype.beforeClickEvent;
/** @type {?} */
SimpleRippleButton.prototype.clickEvent;
/** @type {?} */
SimpleRippleButton.prototype.dataParent;
/** @type {?} */
SimpleRippleButton.prototype.beforeFocusEvent;
/** @type {?} */
SimpleRippleButton.prototype.focusEvent;
/** @type {?} */
SimpleRippleButton.prototype.beforeLostFocusEvent;
/** @type {?} */
SimpleRippleButton.prototype.lostFocusEvent;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2ltcGxlUmlwcGxlQnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9TaW1wbGVSaXBwbGVCdXR0b24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJdkQsdUJBQU0sU0FBUyxHQUFXLHVCQUF1QixDQUFDO0FBZ0JsRCxNQUFNLHlCQUEwQixTQUFRLG9CQUFvQjs7Ozs7SUErQjFELFlBQVksZUFBZ0MsRUFBRSxnQkFBa0M7UUFDOUUsS0FBSyxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXpDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTNDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztLQUMzQzs7OztJQUVNLFFBQVE7Ozs7OztJQUlMLE9BQU8sQ0FBQyxNQUFhO0tBRTlCOzs7OztJQUVTLFdBQVcsQ0FBQyxNQUFhO0tBRWxDOzs7OztJQUVNLFFBQVEsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDOzs7OztJQUdkLFFBQVE7UUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzs7Ozs7OztJQUdiLE9BQU8sQ0FBQyxNQUFrQixFQUFFLFNBQW1CO1FBQ3BELEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3RDO1FBRUQsRUFBRSxDQUFDLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNsRCxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ2xCO1FBRUQsVUFBVSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsYUFBb0IsRUFBUSxFQUFFOztTQUV6RyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Ozs7OztJQUczQyxvQkFBb0IsQ0FBQyxNQUFZOztRQUV6QyxxQkFBSSxJQUFJLEdBQVE7WUFDZCxLQUFLLEVBQUUsTUFBTTtZQUNiLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztRQUNGLHFCQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFM0UsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2hDO0tBQ0Y7Ozs7O0lBRVMsY0FBYyxDQUFDLE1BQVk7O1FBRW5DLHFCQUFJLElBQUksR0FBUTtZQUNkLEtBQUssRUFBRSxNQUFNO1lBQ2IsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBQ0YscUJBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFcEUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzFCO0tBQ0Y7Ozs7SUFFTSxhQUFhO1FBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDOzs7Ozs7SUFHbEIsYUFBYSxDQUFDLEtBQXdCO1FBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDOzs7OztJQUduQixtQkFBbUI7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzs7Ozs7O0lBR3hCLG1CQUFtQixDQUFDLEtBQVU7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQzs7Ozs7SUFHekIsVUFBVTtRQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7K0JBcEhvQixTQUFTOztZQWhCckQsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDbkIsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLFFBQVEsRUFBRTs7Ozs7Ozs7O0NBU1g7YUFDQTs7OztZQXhCUSxlQUFlO1lBQ2YsZ0JBQWdCOzs7c0JBNEJ0QixLQUFLO3lCQUVMLEtBQUs7NkJBRUwsS0FBSztpQ0FHTCxNQUFNLFNBQUMsZ0JBQWdCOzJCQUd2QixNQUFNLFNBQUMsVUFBVTsyQkFFakIsS0FBSztpQ0FFTCxNQUFNLFNBQUMsZ0JBQWdCOzJCQUd2QixNQUFNLFNBQUMsVUFBVTtxQ0FHakIsTUFBTSxTQUFDLG9CQUFvQjsrQkFHM0IsTUFBTSxTQUFDLGNBQWM7OztJQWpCckIsTUFBTSxDQUFDLGFBQWEsQ0FBQztzQ0FFSSxZQUFZOzs7SUFDckMsTUFBTSxDQUFDLE9BQU8sQ0FBQztzQ0FFSSxZQUFZOzs7SUFJL0IsTUFBTSxDQUFDLGFBQWEsQ0FBQztzQ0FDTSxZQUFZOzs7SUFFdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQztzQ0FDTSxZQUFZOzs7SUFFakMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO3NDQUNNLFlBQVk7OztJQUUzQyxNQUFNLENBQUMsV0FBVyxDQUFDO3NDQUNNLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdFJpcHBsZUJ1dHRvbiB9IGZyb20gJy4vQWJzdHJhY3RSaXBwbGVCdXR0b24nO1xuaW1wb3J0IHsgUGhsb3hBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9QaGxveEFwcFNlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBOZWVkRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9OZWVkRm9jdXNTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ0xJQ0tfRVZFTlQsIEJFRk9SRV9DTElDS19FVkVOVCB9IGZyb20gJy4uL3NoYXJlL0N1c3RvbUV2ZW50VHlwZSc7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi9kZWNvcmF0b3IvT3B0aW9uLmRlY29yYXRvcic7XG5pbXBvcnQgeyBJSGFzRGF0YSB9IGZyb20gJy4vSUhhc0RhdGEnO1xuaW1wb3J0IHsgRXZlbnRVdGlscyB9IGZyb20gJy4uL3NoYXJlL3V0aWxzL0V2ZW50VXRpbHMnO1xuXG5kZWNsYXJlIHZhciAkOiBhbnk7XG5cbmNvbnN0IFRZUEVfTkFNRTogc3RyaW5nID0gXCJwaHgtc2ltcGxlLXJpcHBsZS1idG5cIjtcblxuQENvbXBvbmVudCh7XG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gIHNlbGVjdG9yOiBUWVBFX05BTUUsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInBoeC1zaW1wbGUtcmlwcGxlLWJ0blwiIFtjbGFzcy5kaXNhYmxlZF09XCJpc0Rpc2FibGVkKClcIj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiIChmb2N1c2luKT1cIm9uRm9jdXNpbmcoJGV2ZW50KVwiIChibHVyKT1cIm9uTG9zdEZvY3VzaW5nKCRldmVudClcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlciBmbHVpZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNlbGwtd3JhcHBlciBtaWRkbGVcIj5cbiAgICAgICAge3tnZXRMYWJlbCgpfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuYFxufSlcbmV4cG9ydCBjbGFzcyBTaW1wbGVSaXBwbGVCdXR0b24gZXh0ZW5kcyBBYnN0cmFjdFJpcHBsZUJ1dHRvbiBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcblxuICBASW5wdXQoKVxuICBwcml2YXRlIGxhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgY2xpY2tIYW5kbGVyOiBGdW5jdGlvbjtcbiAgQE9wdGlvbignYmVmb3JlQ2xpY2snKVxuICBAT3V0cHV0KCdwaHhCZWZvcmVDbGljaycpXG4gIHByaXZhdGUgYmVmb3JlQ2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPcHRpb24oJ2NsaWNrJylcbiAgQE91dHB1dCgncGh4Q2xpY2snKVxuICBwcml2YXRlIGNsaWNrRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgZGF0YVBhcmVudDogSUhhc0RhdGE7XG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUZvY3VzJylcbiAgQE9wdGlvbignYmVmb3JlRm9jdXMnKVxuICBwcm90ZWN0ZWQgYmVmb3JlRm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEZvY3VzJylcbiAgQE9wdGlvbignZm9jdXMnKVxuICBwcm90ZWN0ZWQgZm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUxvc3RGb2N1cycpXG4gIEBPcHRpb24oJ2JlZm9yZUxvc3RGb2N1cycpXG4gIHByb3RlY3RlZCBiZWZvcmVMb3N0Rm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeExvc3RGb2N1cycpXG4gIEBPcHRpb24oJ2xvc3RGb2N1cycpXG4gIHByb3RlY3RlZCBsb3N0Rm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgY29uc3RydWN0b3IocGhsb3hBcHBTZXJ2aWNlOiBQaGxveEFwcFNlcnZpY2UsIG5lZWRGb2N1c1NlcnZpY2U6IE5lZWRGb2N1c1NlcnZpY2UpIHtcbiAgICBzdXBlcihwaGxveEFwcFNlcnZpY2UsIG5lZWRGb2N1c1NlcnZpY2UpO1xuXG4gICAgdGhpcy5iZWZvcmVDbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgdGhpcy5jbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHByb3RlY3RlZCBkb0ZvY3VzKCRldmVudDogRXZlbnQpOiB2b2lkIHtcblxuICB9XG5cbiAgcHJvdGVjdGVkIGRvTG9zdEZvY3VzKCRldmVudDogRXZlbnQpOiB2b2lkIHtcblxuICB9XG5cbiAgcHVibGljIHNldExhYmVsKGxhYmVsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbDtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsaWNrKCRldmVudDogTW91c2VFdmVudCwgZmlyZUV2ZW50PzogYm9vbGVhbik6IHZvaWQge1xuICAgIHN1cGVyLm9uQ2xpY2soJGV2ZW50KTtcblxuICAgIGlmICh0aGlzLmNsaWNrSGFuZGxlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jbGlja0hhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuY2xpY2tIYW5kbGVyLmNhbGwodGhpcywgJGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoZmlyZUV2ZW50ID09PSBudWxsIHx8IGZpcmVFdmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaXJlRXZlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIEV2ZW50VXRpbHMuaGFuZGxlQnJvd3NlckV2ZW50KHRoaXMsICdiZWZvcmVDbGlja0V2ZW50JywgJGV2ZW50LCBmaXJlRXZlbnQsICgkYnJvd3NlckV2ZW50OiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgLy8gRG8gbm90aGluZyB3aGlsZSBjbGlja2VkLlxuICAgIH0sIHRoaXMuZW1pdEJlZm9yZUNsaWNrRXZlbnQsIHRoaXMuZW1pdENsaWNrRXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVtaXRCZWZvcmVDbGlja0V2ZW50KCRldmVudD86IGFueSk6IHZvaWQge1xuICAgIC8vIGVtaXQgZXZlbnRcbiAgICBsZXQgZGF0YTogYW55ID0ge1xuICAgICAgZXZlbnQ6ICRldmVudCxcbiAgICAgIGluc3RhbmNlOiB0aGlzXG4gICAgfTtcbiAgICBsZXQgZXYgPSBFdmVudFV0aWxzLm5ld0N1c3RvbUV2ZW50KEJFRk9SRV9DTElDS19FVkVOVCwgdGhpcywgZGF0YSwgJGV2ZW50KTtcblxuICAgIGlmICh0aGlzLmJlZm9yZUNsaWNrRXZlbnQgIT09IG51bGwgJiYgdGhpcy5iZWZvcmVDbGlja0V2ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYmVmb3JlQ2xpY2tFdmVudC5lbWl0KGV2KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdENsaWNrRXZlbnQoJGV2ZW50PzogYW55KTogdm9pZCB7XG4gICAgLy8gZW1pdCBldmVudFxuICAgIGxldCBkYXRhOiBhbnkgPSB7XG4gICAgICBldmVudDogJGV2ZW50LFxuICAgICAgaW5zdGFuY2U6IHRoaXNcbiAgICB9O1xuICAgIGxldCBldiA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoQ0xJQ0tfRVZFTlQsIHRoaXMsIGRhdGEsICRldmVudCk7XG5cbiAgICBpZiAodGhpcy5jbGlja0V2ZW50ICE9PSBudWxsICYmIHRoaXMuY2xpY2tFdmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChldik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldENsaWNrRXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNsaWNrRXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgc2V0Q2xpY2tFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLmNsaWNrRXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCZWZvcmVDbGlja0V2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5iZWZvcmVDbGlja0V2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldEJlZm9yZUNsaWNrRXZlbnQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuYmVmb3JlQ2xpY2tFdmVudCA9IGV2ZW50O1xuICB9XG5cbiAgcHVibGljIGlzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gIH1cbn1cbiJdfQ==