UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

254 lines (253 loc) 19.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { EventEmitter } from '@angular/core'; import { AbstractI18NApplicable } from '../share/AbstractI18NApplicable'; import { EventUtils } from '../share/utils/EventUtils'; import { Option } from '../decorator/Option.decorator'; import { CLICK_EVENT, BEFORE_CLICK_EVENT } from '../share/CustomEventType'; export var /** @type {?} */ ACTION_PERFORM = 'actionPerform'; /** * <p style="text-indent: 2em;"> * An abstract base class for <code>menu item</code> component. This class provides you a default [[onClick]] event handler which * automatically call the [[MenuItemModel.actionPerformedHandler]] if specified. It also resets the current focusing component if * [[MenuItemModel.autoResetFocus]] is set to <code>true</code>. A <code>menu item</code> can be, but not necessary, in a parent * <code>menu</code>. It is up to each component implementation which is a sub class of this class to decide that it is required * to allow a <code>menu item</code> can be displayed standalone outside the parent <code>menu</code> or not. * </p> * * @author shiorin, tee4cute * @see [[MenuItemModel]] * @see [[AbstractMenu]] * @abstract */ var AbstractMenuItem = /** @class */ (function (_super) { tslib_1.__extends(AbstractMenuItem, _super); function AbstractMenuItem(needFocusService) { var _this = _super.call(this) || this; _this.needFocusService = needFocusService; _this.clickEvent = new EventEmitter(); _this.beforeClickEvent = new EventEmitter(); return _this; } /** * @param {?} $event * @param {?=} fireEvent * @return {?} */ AbstractMenuItem.prototype.onClick = /** * @param {?} $event * @param {?=} fireEvent * @return {?} */ function ($event, fireEvent) { var _this = this; if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforeClickEvent', $event, fireEvent, function ($event) { // doEvent // doEvent _this.emitActionPerform($event); }, function ($event) { // emitBeforeEvent // emitBeforeEvent _this.emitBeforeClickEvent($event); }, function ($event) { // emitAfterEvent // emitAfterEvent _this.emitClickEvent($event); }, function ($event) { // doPrevented }); }; /** * @param {?=} $event * @return {?} */ AbstractMenuItem.prototype.emitActionPerform = /** * @param {?=} $event * @return {?} */ function ($event) { if (this.model !== null && typeof this.model !== 'undefined') { if (this.model.actionPerformedHandler !== null && typeof this.model.actionPerformedHandler === 'function') { var /** @type {?} */ data = null; var /** @type {?} */ ev = EventUtils.newCustomEvent(ACTION_PERFORM, this, data, $event); this.model.actionPerformedHandler.call(null, ev); var /** @type {?} */ autoFocus = true; if (this.model.autoResetFocus !== null && typeof this.model.autoResetFocus !== 'undefined') { autoFocus = this.model.autoResetFocus; } if (autoFocus) { if (this.needFocusService !== null && typeof this.needFocusService !== 'undefined') { this.needFocusService.resetFocusingComponent(ev); } } } } }; /** * @param {?=} $event * @return {?} */ AbstractMenuItem.prototype.emitBeforeClickEvent = /** * @param {?=} $event * @return {?} */ function ($event) { var /** @type {?} */ eventData = null; // emit event var /** @type {?} */ data = eventData; var /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_CLICK_EVENT, this, data, $event); if (this.beforeClickEvent !== null && this.beforeClickEvent !== undefined) { this.beforeClickEvent.emit(ev); } }; /** * @param {?=} $event * @return {?} */ AbstractMenuItem.prototype.emitClickEvent = /** * @param {?=} $event * @return {?} */ function ($event) { var /** @type {?} */ eventData = null; // emit event var /** @type {?} */ data = eventData; var /** @type {?} */ ev = EventUtils.newCustomEvent(CLICK_EVENT, this, data, $event); if (this.clickEvent !== null && this.clickEvent !== undefined) { this.clickEvent.emit(ev); } }; /** * <p style="text-indent: 1em;"> * Get the parent <code>memu</code> associated with <code>this</code> <code>menu item</code>. * </p> * @return {?} */ AbstractMenuItem.prototype.getMenu = /** * <p style="text-indent: 1em;"> * Get the parent <code>memu</code> associated with <code>this</code> <code>menu item</code>. * </p> * @return {?} */ function () { return this.menu; }; /** * <p style="text-indent: 1em;"> * Set a parent <code>menu</code> associated with <code>this</code> <code>menu item</code>. * </p> * @param {?} menu * @return {?} */ AbstractMenuItem.prototype.setMenu = /** * <p style="text-indent: 1em;"> * Set a parent <code>menu</code> associated with <code>this</code> <code>menu item</code>. * </p> * @param {?} menu * @return {?} */ function (menu) { this.menu = menu; }; /** * <p style="text-indent: 1em;"> * Get the <code>model</code> of <code>this</code> <code>menu item</code>. * </p> * @return {?} */ AbstractMenuItem.prototype.getModel = /** * <p style="text-indent: 1em;"> * Get the <code>model</code> of <code>this</code> <code>menu item</code>. * </p> * @return {?} */ function () { return this.model; }; /** * <p style="text-indent: 1em;"> * Set a <code>model</code> of <code>this</code> <code>menu item</code>. * </p> * @param {?} model * @return {?} */ AbstractMenuItem.prototype.setModel = /** * <p style="text-indent: 1em;"> * Set a <code>model</code> of <code>this</code> <code>menu item</code>. * </p> * @param {?} model * @return {?} */ function (model) { this.model = model; }; /** * @return {?} */ AbstractMenuItem.prototype.getClickEvent = /** * @return {?} */ function () { return this.clickEvent; }; /** * @param {?} event * @return {?} */ AbstractMenuItem.prototype.setClickEvent = /** * @param {?} event * @return {?} */ function (event) { this.clickEvent = event; }; /** * @return {?} */ AbstractMenuItem.prototype.getBeforeClickEvent = /** * @return {?} */ function () { return this.beforeClickEvent; }; /** * @param {?} event * @return {?} */ AbstractMenuItem.prototype.setBeforeClickEvent = /** * @param {?} event * @return {?} */ function (event) { this.beforeClickEvent = event; }; tslib_1.__decorate([ Option('click'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractMenuItem.prototype, "clickEvent", void 0); tslib_1.__decorate([ Option('beforeClick'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractMenuItem.prototype, "beforeClickEvent", void 0); return AbstractMenuItem; }(AbstractI18NApplicable)); export { AbstractMenuItem }; function AbstractMenuItem_tsickle_Closure_declarations() { /** @type {?} */ AbstractMenuItem.prototype.model; /** @type {?} */ AbstractMenuItem.prototype.menu; /** @type {?} */ AbstractMenuItem.prototype.needFocusService; /** @type {?} */ AbstractMenuItem.prototype.clickEvent; /** @type {?} */ AbstractMenuItem.prototype.beforeClickEvent; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RNZW51SXRlbS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9BYnN0cmFjdE1lbnVJdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUF3QyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNbkYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0UsTUFBTSxDQUFDLHFCQUFNLGNBQWMsR0FBVyxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7SUFlUCw0Q0FBc0I7SUFhbkUsMEJBQVksZ0JBQWtDO1FBQTlDLFlBQ0UsaUJBQU8sU0FLUjtRQUhDLEtBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QyxLQUFJLENBQUMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDckMsS0FBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7O0tBQzVDOzs7Ozs7SUFFTSxrQ0FBTzs7Ozs7Y0FBQyxNQUFrQixFQUFFLFNBQW1COztRQUVwRCxFQUFFLENBQUMsQ0FBQyxTQUFTLEtBQUssSUFBSSxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2xELFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDbEI7UUFFRCxVQUFVLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBQyxNQUFhOztZQUV2RixBQURBLFVBQVU7WUFDVixLQUFJLENBQUMsaUJBQWlCLENBQUMsTUFB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Q0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDOzs7Ozs7Ozs7SUFRWixrQ0FBTzs7Ozs7OztjQUFDLElBQWtCO1FBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDOzs7Ozs7OztJQVFaLG1DQUFROzs7Ozs7O1FBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Ozs7Ozs7OztJQVFiLG1DQUFROzs7Ozs7O2NBQUMsS0FBb0I7UUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Ozs7O0lBR2Qsd0NBQWE7Ozs7UUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7Ozs7OztJQUdsQix3Q0FBYTs7OztjQUFDLEtBQXdCO1FBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDOzs7OztJQUduQiw4Q0FBbUI7Ozs7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzs7Ozs7O0lBR3hCLDhDQUFtQjs7OztjQUFDLEtBQXdCO1FBQ2pELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7OztRQWhJL0IsTUFBTSxDQUFDLE9BQU8sQ0FBQzswQ0FDTSxZQUFZOzs7UUFDakMsTUFBTSxDQUFDLGFBQWEsQ0FBQzswQ0FDTSxZQUFZOzsyQkF2QzFDO0VBNEIrQyxzQkFBc0I7U0FBL0MsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQWJzdHJhY3RNZW51IH0gZnJvbSAnLi9BYnN0cmFjdE1lbnUnO1xuXG5pbXBvcnQgeyBOZWVkRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9OZWVkRm9jdXNTZXJ2aWNlLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdEkxOE5BcHBsaWNhYmxlIH0gZnJvbSAnLi4vc2hhcmUvQWJzdHJhY3RJMThOQXBwbGljYWJsZSc7XG5cbmltcG9ydCB7IE1lbnVJdGVtTW9kZWwgfSBmcm9tICcuL21vZGVsL01lbnVJdGVtTW9kZWwnO1xuaW1wb3J0IHsgRXZlbnRVdGlscyB9IGZyb20gJy4uL3NoYXJlL3V0aWxzL0V2ZW50VXRpbHMnO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgQ0xJQ0tfRVZFTlQsIEJFRk9SRV9DTElDS19FVkVOVCB9IGZyb20gJy4uL3NoYXJlL0N1c3RvbUV2ZW50VHlwZSc7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fUEVSRk9STTogc3RyaW5nID0gJ2FjdGlvblBlcmZvcm0nO1xuXG4vKipcbiAqIDxwIHN0eWxlPVwidGV4dC1pbmRlbnQ6IDJlbTtcIj5cbiAqIEFuIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIDxjb2RlPm1lbnUgaXRlbTwvY29kZT4gY29tcG9uZW50LiBUaGlzIGNsYXNzIHByb3ZpZGVzIHlvdSBhIGRlZmF1bHQgW1tvbkNsaWNrXV0gZXZlbnQgaGFuZGxlciB3aGljaFxuICogYXV0b21hdGljYWxseSBjYWxsIHRoZSBbW01lbnVJdGVtTW9kZWwuYWN0aW9uUGVyZm9ybWVkSGFuZGxlcl1dIGlmIHNwZWNpZmllZC4gSXQgYWxzbyByZXNldHMgdGhlIGN1cnJlbnQgZm9jdXNpbmcgY29tcG9uZW50IGlmXG4gKiBbW01lbnVJdGVtTW9kZWwuYXV0b1Jlc2V0Rm9jdXNdXSBpcyBzZXQgdG8gPGNvZGU+dHJ1ZTwvY29kZT4uIEEgPGNvZGU+bWVudSBpdGVtPC9jb2RlPiBjYW4gYmUsIGJ1dCBub3QgbmVjZXNzYXJ5LCBpbiBhIHBhcmVudFxuICogPGNvZGU+bWVudTwvY29kZT4uIEl0IGlzIHVwIHRvIGVhY2ggY29tcG9uZW50IGltcGxlbWVudGF0aW9uIHdoaWNoIGlzIGEgc3ViIGNsYXNzIG9mIHRoaXMgY2xhc3MgdG8gZGVjaWRlIHRoYXQgaXQgaXMgcmVxdWlyZWRcbiAqIHRvIGFsbG93IGEgPGNvZGU+bWVudSBpdGVtPC9jb2RlPiBjYW4gYmUgZGlzcGxheWVkIHN0YW5kYWxvbmUgb3V0c2lkZSB0aGUgcGFyZW50IDxjb2RlPm1lbnU8L2NvZGU+IG9yIG5vdC5cbiAqIDwvcD5cbiAqXG4gKiBAYXV0aG9yIHNoaW9yaW4sIHRlZTRjdXRlXG4gKiBAc2VlIFtbTWVudUl0ZW1Nb2RlbF1dXG4gKiBAc2VlIFtbQWJzdHJhY3RNZW51XV1cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0TWVudUl0ZW0gZXh0ZW5kcyBBYnN0cmFjdEkxOE5BcHBsaWNhYmxlIHtcblxuICAvLyBAT3B0aW9uKClcbiAgLy8gQEkxOE4oKVxuICBwcm90ZWN0ZWQgbW9kZWw6IE1lbnVJdGVtTW9kZWw7XG4gIHByb3RlY3RlZCBtZW51OiBBYnN0cmFjdE1lbnU7XG4gIHByb3RlY3RlZCBuZWVkRm9jdXNTZXJ2aWNlOiBOZWVkRm9jdXNTZXJ2aWNlO1xuXG4gIEBPcHRpb24oJ2NsaWNrJylcbiAgcHJvdGVjdGVkIGNsaWNrRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKCdiZWZvcmVDbGljaycpXG4gIHByb3RlY3RlZCBiZWZvcmVDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICBjb25zdHJ1Y3RvcihuZWVkRm9jdXNTZXJ2aWNlOiBOZWVkRm9jdXNTZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMubmVlZEZvY3VzU2VydmljZSA9IG5lZWRGb2N1c1NlcnZpY2U7XG4gICAgdGhpcy5jbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMuYmVmb3JlQ2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsaWNrKCRldmVudDogTW91c2VFdmVudCwgZmlyZUV2ZW50PzogYm9vbGVhbik6IHZvaWQge1xuXG4gICAgaWYgKGZpcmVFdmVudCA9PT0gbnVsbCB8fCBmaXJlRXZlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmlyZUV2ZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBFdmVudFV0aWxzLmhhbmRsZUJyb3dzZXJFdmVudCh0aGlzLCAnYmVmb3JlQ2xpY2tFdmVudCcsICRldmVudCwgZmlyZUV2ZW50LCAoJGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgLy8gZG9FdmVudFxuICAgICAgdGhpcy5lbWl0QWN0aW9uUGVyZm9ybSgkZXZlbnQpO1xuICAgIH0sICgkZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAvLyBlbWl0QmVmb3JlRXZlbnRcbiAgICAgIHRoaXMuZW1pdEJlZm9yZUNsaWNrRXZlbnQoJGV2ZW50KTtcbiAgICB9LCAoJGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgLy8gZW1pdEFmdGVyRXZlbnRcbiAgICAgIHRoaXMuZW1pdENsaWNrRXZlbnQoJGV2ZW50KTtcbiAgICB9LCAoJGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgLy8gZG9QcmV2ZW50ZWRcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0QWN0aW9uUGVyZm9ybSgkZXZlbnQ/OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0aGlzLm1vZGVsLmFjdGlvblBlcmZvcm1lZEhhbmRsZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubW9kZWwuYWN0aW9uUGVyZm9ybWVkSGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuXG4gICAgICAgIGxldCBkYXRhOiBhbnkgPSBudWxsO1xuICAgICAgICBsZXQgZXYgPSBFdmVudFV0aWxzLm5ld0N1c3RvbUV2ZW50KEFDVElPTl9QRVJGT1JNLCB0aGlzLCBkYXRhLCAkZXZlbnQpO1xuXG4gICAgICAgIHRoaXMubW9kZWwuYWN0aW9uUGVyZm9ybWVkSGFuZGxlci5jYWxsKG51bGwsIGV2KTtcblxuICAgICAgICBsZXQgYXV0b0ZvY3VzID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuYXV0b1Jlc2V0Rm9jdXMgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubW9kZWwuYXV0b1Jlc2V0Rm9jdXMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgYXV0b0ZvY3VzID0gdGhpcy5tb2RlbC5hdXRvUmVzZXRGb2N1cztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgaWYgKHRoaXMubmVlZEZvY3VzU2VydmljZSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5uZWVkRm9jdXNTZXJ2aWNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5uZWVkRm9jdXNTZXJ2aWNlLnJlc2V0Rm9jdXNpbmdDb21wb25lbnQoZXYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBlbWl0QmVmb3JlQ2xpY2tFdmVudCgkZXZlbnQ/OiBhbnkpOiB2b2lkIHtcbiAgICBsZXQgZXZlbnREYXRhOiBhbnkgPSBudWxsO1xuXG4gICAgLy8gZW1pdCBldmVudFxuICAgIGxldCBkYXRhOiBhbnkgPSBldmVudERhdGE7XG4gICAgbGV0IGV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChCRUZPUkVfQ0xJQ0tfRVZFTlQsIHRoaXMsIGRhdGEsICRldmVudCk7XG5cbiAgICBpZiAodGhpcy5iZWZvcmVDbGlja0V2ZW50ICE9PSBudWxsICYmIHRoaXMuYmVmb3JlQ2xpY2tFdmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJlZm9yZUNsaWNrRXZlbnQuZW1pdChldik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGVtaXRDbGlja0V2ZW50KCRldmVudD86IGFueSk6IHZvaWQge1xuICAgIGxldCBldmVudERhdGE6IGFueSA9IG51bGw7XG5cbiAgICAvLyBlbWl0IGV2ZW50XG4gICAgbGV0IGRhdGE6IGFueSA9IGV2ZW50RGF0YTtcbiAgICBsZXQgZXYgPSBFdmVudFV0aWxzLm5ld0N1c3RvbUV2ZW50KENMSUNLX0VWRU5ULCB0aGlzLCBkYXRhLCAkZXZlbnQpO1xuXG4gICAgaWYgKHRoaXMuY2xpY2tFdmVudCAhPT0gbnVsbCAmJiB0aGlzLmNsaWNrRXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZXYpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiA8cCBzdHlsZT1cInRleHQtaW5kZW50OiAxZW07XCI+XG4gICAqIEdldCB0aGUgcGFyZW50IDxjb2RlPm1lbXU8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCA8Y29kZT50aGlzPC9jb2RlPiA8Y29kZT5tZW51IGl0ZW08L2NvZGU+LlxuICAgKiA8L3A+XG4gICAqL1xuICBwdWJsaWMgZ2V0TWVudSgpOiBBYnN0cmFjdE1lbnUge1xuICAgIHJldHVybiB0aGlzLm1lbnU7XG4gIH1cblxuICAvKipcbiAgICogPHAgc3R5bGU9XCJ0ZXh0LWluZGVudDogMWVtO1wiPlxuICAgKiBTZXQgYSBwYXJlbnQgPGNvZGU+bWVudTwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIDxjb2RlPnRoaXM8L2NvZGU+IDxjb2RlPm1lbnUgaXRlbTwvY29kZT4uXG4gICAqIDwvcD5cbiAgICovXG4gIHB1YmxpYyBzZXRNZW51KG1lbnU6IEFic3RyYWN0TWVudSk6IHZvaWQge1xuICAgIHRoaXMubWVudSA9IG1lbnU7XG4gIH1cblxuICAvKipcbiAgICogPHAgc3R5bGU9XCJ0ZXh0LWluZGVudDogMWVtO1wiPlxuICAgKiBHZXQgdGhlIDxjb2RlPm1vZGVsPC9jb2RlPiBvZiA8Y29kZT50aGlzPC9jb2RlPiA8Y29kZT5tZW51IGl0ZW08L2NvZGU+LlxuICAgKiA8L3A+XG4gICAqL1xuICBwdWJsaWMgZ2V0TW9kZWwoKTogTWVudUl0ZW1Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICAvKipcbiAgICogPHAgc3R5bGU9XCJ0ZXh0LWluZGVudDogMWVtO1wiPlxuICAgKiBTZXQgYSA8Y29kZT5tb2RlbDwvY29kZT4gb2YgPGNvZGU+dGhpczwvY29kZT4gPGNvZGU+bWVudSBpdGVtPC9jb2RlPi5cbiAgICogPC9wPlxuICAgKi9cbiAgcHVibGljIHNldE1vZGVsKG1vZGVsOiBNZW51SXRlbU1vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xuICB9XG5cbiAgcHVibGljIGdldENsaWNrRXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNsaWNrRXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgc2V0Q2xpY2tFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLmNsaWNrRXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCZWZvcmVDbGlja0V2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5iZWZvcmVDbGlja0V2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldEJlZm9yZUNsaWNrRXZlbnQoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5iZWZvcmVDbGlja0V2ZW50ID0gZXZlbnQ7XG4gIH1cbn1cbiJdfQ==