UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

179 lines (178 loc) 15.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { PhloxAppInfo } from '../component/model/PhloxAppInfo'; /** * <p style="text-indent: 2em;"> * An abstract base class of <code>PhloxUI</code> application's <code>page</code>. All component classes extending this class can be * added into [[PhloxApp]] component and can be navigated via its <code>router</code>. * </p> * * @author shiorin, tee4cute * @see [[PhloxApp]] * @abstract */ var /** * <p style="text-indent: 2em;"> * An abstract base class of <code>PhloxUI</code> application's <code>page</code>. All component classes extending this class can be * added into [[PhloxApp]] component and can be navigated via its <code>router</code>. * </p> * * @author shiorin, tee4cute * @see [[PhloxApp]] * @abstract */ AbstractPage = /** @class */ (function () { /** * This constructor will automatically add <code><b>this</b></code> <code>page</code> instance into the given [[PhloxApp]] <code>application</code> (<code><b>app</b></code>). */ function AbstractPage(phloxAppService, name, bgProcessMgr) { this.PAGE_LOOP_TIMEOUT = 5; this.name = name; this.bgProcessMgr = bgProcessMgr; if (phloxAppService !== null && typeof phloxAppService !== 'undefined') { this.phloxAppService = phloxAppService; if (this.app !== null && typeof this.app !== 'undefined') { // Add this page instance to app this.app.addItem(this); } } } Object.defineProperty(AbstractPage.prototype, "app", { get: /** * A [[PhloxApp]] component in which this <code>page</code> is associated with. * @return {?} */ function () { if (this.phloxAppService === null || typeof this.phloxAppService === 'undefined') { return null; } return this.phloxAppService.getInstance(); }, enumerable: true, configurable: true }); /** * @return {?} */ AbstractPage.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; if (this.bgProcessMgr !== null && typeof this.bgProcessMgr !== 'undefined') { this.bgProcessMgr.execute(function () { return new Promise(function (resolve, reject) { var /** @type {?} */ timeout = PhloxAppInfo.DEFAULT_PAGE_LOAD_TIMEOUT; if (_this.app !== null && typeof _this.app !== 'undefined') { var /** @type {?} */ info = _this.app.getAppInfo(); if (info !== null && typeof info !== 'undefined' && info.settings.PAGE_LOAD_TIMEOUT !== null && typeof info.settings.PAGE_LOAD_TIMEOUT !== 'undefined') { timeout = info.settings.PAGE_LOAD_TIMEOUT; } } var /** @type {?} */ startTime = null; var /** @type {?} */ handler = function () { if (startTime === null) { startTime = (new Date()).getTime(); } var /** @type {?} */ currentTime = (new Date()).getTime(); if (_this.isPageLoaded()) { resolve(); } else if ((currentTime - startTime) >= timeout) { reject(); } else { setTimeout(handler, _this.PAGE_LOOP_TIMEOUT); } }; handler(); }); }, { type: "connection.page" }); } }; /** * <p style="text-indent: 1em;"> * Get an <code>application</code> instance in which this <code>page</code> is associated with. * </p> * @return {?} */ AbstractPage.prototype.getApplication = /** * <p style="text-indent: 1em;"> * Get an <code>application</code> instance in which this <code>page</code> is associated with. * </p> * @return {?} */ function () { return this.app; }; /** * <p style="text-indent: 1em;"> * Get a name of this <code>page</code>. This must be also a <code>router</code>'s uri path. * </p> * @return {?} */ AbstractPage.prototype.getName = /** * <p style="text-indent: 1em;"> * Get a name of this <code>page</code>. This must be also a <code>router</code>'s uri path. * </p> * @return {?} */ function () { return this.name; }; /** * <p style="text-indent: 1em;"> * To check that this <code>page</code> is being showed or displayed by [[PhloxApp]] component or not. * </p> * @return {?} */ AbstractPage.prototype.isActive = /** * <p style="text-indent: 1em;"> * To check that this <code>page</code> is being showed or displayed by [[PhloxApp]] component or not. * </p> * @return {?} */ function () { return this.active; }; return AbstractPage; }()); /** * <p style="text-indent: 2em;"> * An abstract base class of <code>PhloxUI</code> application's <code>page</code>. All component classes extending this class can be * added into [[PhloxApp]] component and can be navigated via its <code>router</code>. * </p> * * @author shiorin, tee4cute * @see [[PhloxApp]] * @abstract */ export { AbstractPage }; function AbstractPage_tsickle_Closure_declarations() { /** @type {?} */ AbstractPage.prototype.PAGE_LOOP_TIMEOUT; /** @type {?} */ AbstractPage.prototype.phloxAppService; /** @type {?} */ AbstractPage.prototype.bgProcessMgr; /** * A flag indicating that this <code>page</code> is being showed or displayed by [[PhloxApp]] component or not. * @type {?} */ AbstractPage.prototype.active; /** * A name of this <code>page</code>. This must be also a <code>router</code>'s uri path. * @type {?} */ AbstractPage.prototype.name; /** * @abstract * @return {?} */ AbstractPage.prototype.isPageLoaded = function () { }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RQYWdlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L0Fic3RyYWN0UGFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBT0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7OztBQVcvRDs7Ozs7Ozs7OztBQUFBO0lBMEJJOztPQUVHO0lBQ0gsc0JBQVksZUFBZ0MsRUFBRSxJQUFZLEVBQUUsWUFBc0M7aUNBM0I5RCxDQUFDO1FBNEJqQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUVqQyxFQUFFLENBQUMsQ0FBQyxlQUFlLEtBQUssSUFBSSxJQUFJLE9BQU8sZUFBZSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7WUFFdkMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7O2dCQUV2RCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMxQjtTQUNKO0tBQ0o7MEJBaENXLDZCQUFHOzs7Ozs7WUFDWCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxlQUFlLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDL0UsTUFBTSxDQUFDLElBQUksQ0FBQzthQUNmO1lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7Ozs7Ozs7O0lBOEJ2QywrQkFBUTs7Ozs7UUFDYixFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssV0FBVyxDQUFDLENBQUEsQ0FBQztZQUN2RSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztnQkFDeEIsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBTyxFQUFFLE1BQU07b0JBRWpDLHFCQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMseUJBQXlCLENBQUM7b0JBQ3JELEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSSxDQUFDLEdBQUcsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO3dCQUN6RCxxQkFBSSxJQUFJLEdBQUcsS0FBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDakMsRUFBRSxDQUFBLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixLQUFLLFdBQVcsQ0FBQyxDQUFBLENBQUM7NEJBQ3JKLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO3lCQUMzQztxQkFDRjtvQkFFRCxxQkFBSSxTQUFTLEdBQVEsSUFBSSxDQUFDO29CQUMxQixxQkFBSSxPQUFPLEdBQWE7d0JBRXRCLEVBQUUsQ0FBQSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQSxDQUFDOzRCQUNyQixTQUFTLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7eUJBQ3BDO3dCQUNELHFCQUFJLFdBQVcsR0FBUSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDOUMsRUFBRSxDQUFDLENBQUMsS0FBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEIsT0FBTyxFQUFFLENBQUM7eUJBQ1g7d0JBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7NEJBQ2hELE1BQU0sRUFBRSxDQUFDO3lCQUNWO3dCQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNOLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7eUJBQzdDO3FCQUVGLENBQUM7b0JBRUYsT0FBTyxFQUFFLENBQUM7aUJBQ1gsQ0FBQyxDQUFDO2FBQ0osRUFBRTtnQkFDQyxJQUFJLEVBQUUsaUJBQWlCO2FBQzFCLENBQUMsQ0FBQztTQUNOOzs7Ozs7OztJQVFJLHFDQUFjOzs7Ozs7O1FBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDOzs7Ozs7OztJQVFiLDhCQUFPOzs7Ozs7O1FBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Ozs7Ozs7O0lBUWQsK0JBQVE7Ozs7Ozs7UUFDWCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7dUJBM0gzQjtJQStIQyxDQUFBOzs7Ozs7Ozs7OztBQTdHRCx3QkE2R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBobG94QXBwIH0gZnJvbSAnLi9QaGxveEFwcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSU5hdmlnYXRlZSB9IGZyb20gJy4vSU5hdmlnYXRlZSc7XG5pbXBvcnQgeyBJQXBwbGljYXRpb25Bd2FyZSB9IGZyb20gJy4vSUFwcGxpY2F0aW9uQXdhcmUnO1xuaW1wb3J0IHsgSVBhZ2VMb2FkIH0gZnJvbSAnLi4vc2hhcmUvSVBhZ2VMb2FkJztcbmltcG9ydCB7IFBobG94QXBwU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvUGhsb3hBcHBTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFja2dyb3VuZFByb2Nlc3NNYW5hZ2VyIH0gZnJvbSAnLi4vc2VydmljZS9CYWNrZ3JvdW5kUHJvY2Vzc01hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQaGxveEFwcEluZm8gfSBmcm9tICcuLi9jb21wb25lbnQvbW9kZWwvUGhsb3hBcHBJbmZvJztcblxuLyoqXG4gKiA8cCBzdHlsZT1cInRleHQtaW5kZW50OiAyZW07XCI+XG4gKiBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIG9mIDxjb2RlPlBobG94VUk8L2NvZGU+IGFwcGxpY2F0aW9uJ3MgPGNvZGU+cGFnZTwvY29kZT4uIEFsbCBjb21wb25lbnQgY2xhc3NlcyBleHRlbmRpbmcgdGhpcyBjbGFzcyBjYW4gYmVcbiAqIGFkZGVkIGludG8gW1tQaGxveEFwcF1dIGNvbXBvbmVudCBhbmQgY2FuIGJlIG5hdmlnYXRlZCB2aWEgaXRzIDxjb2RlPnJvdXRlcjwvY29kZT4uXG4gKiA8L3A+XG4gKlxuICogQGF1dGhvciBzaGlvcmluLCB0ZWU0Y3V0ZVxuICogQHNlZSBbW1BobG94QXBwXV1cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UGFnZSBpbXBsZW1lbnRzIElOYXZpZ2F0ZWUsIElBcHBsaWNhdGlvbkF3YXJlLCBPbkluaXQsIElQYWdlTG9hZCB7XG5cbiAgICBwcml2YXRlIFBBR0VfTE9PUF9USU1FT1VUOiBudW1iZXIgPSA1O1xuICAgIHByb3RlY3RlZCBwaGxveEFwcFNlcnZpY2U6IFBobG94QXBwU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgYmdQcm9jZXNzTWdyOiBCYWNrZ3JvdW5kUHJvY2Vzc01hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBBIFtbUGhsb3hBcHBdXSBjb21wb25lbnQgaW4gd2hpY2ggdGhpcyA8Y29kZT5wYWdlPC9jb2RlPiBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXQgYXBwKCk6IFBobG94QXBwIHtcbiAgICAgICAgaWYgKHRoaXMucGhsb3hBcHBTZXJ2aWNlID09PSBudWxsIHx8IHR5cGVvZiB0aGlzLnBobG94QXBwU2VydmljZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBobG94QXBwU2VydmljZS5nZXRJbnN0YW5jZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhpcyA8Y29kZT5wYWdlPC9jb2RlPiBpcyBiZWluZyBzaG93ZWQgb3IgZGlzcGxheWVkIGJ5IFtbUGhsb3hBcHBdXSBjb21wb25lbnQgb3Igbm90LlxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RpdmU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBBIG5hbWUgb2YgdGhpcyA8Y29kZT5wYWdlPC9jb2RlPi4gVGhpcyBtdXN0IGJlIGFsc28gYSA8Y29kZT5yb3V0ZXI8L2NvZGU+J3MgdXJpIHBhdGguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG5hbWU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoaXMgY29uc3RydWN0b3Igd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCA8Y29kZT48Yj50aGlzPC9iPjwvY29kZT4gPGNvZGU+cGFnZTwvY29kZT4gaW5zdGFuY2UgaW50byB0aGUgZ2l2ZW4gW1tQaGxveEFwcF1dIDxjb2RlPmFwcGxpY2F0aW9uPC9jb2RlPiAoPGNvZGU+PGI+YXBwPC9iPjwvY29kZT4pLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHBobG94QXBwU2VydmljZTogUGhsb3hBcHBTZXJ2aWNlLCBuYW1lOiBzdHJpbmcsIGJnUHJvY2Vzc01ncjogQmFja2dyb3VuZFByb2Nlc3NNYW5hZ2VyKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuYmdQcm9jZXNzTWdyID0gYmdQcm9jZXNzTWdyO1xuXG4gICAgICAgIGlmIChwaGxveEFwcFNlcnZpY2UgIT09IG51bGwgJiYgdHlwZW9mIHBobG94QXBwU2VydmljZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMucGhsb3hBcHBTZXJ2aWNlID0gcGhsb3hBcHBTZXJ2aWNlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hcHAgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuYXBwICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIHBhZ2UgaW5zdGFuY2UgdG8gYXBwXG4gICAgICAgICAgICAgICAgdGhpcy5hcHAuYWRkSXRlbSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgIGlmKHRoaXMuYmdQcm9jZXNzTWdyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmJnUHJvY2Vzc01nciAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgICAgIHRoaXMuYmdQcm9jZXNzTWdyLmV4ZWN1dGUoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgICAgICAgICBsZXQgdGltZW91dCA9IFBobG94QXBwSW5mby5ERUZBVUxUX1BBR0VfTE9BRF9USU1FT1VUO1xuICAgICAgICAgICAgICBpZiAodGhpcy5hcHAgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuYXBwICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGxldCBpbmZvID0gdGhpcy5hcHAuZ2V0QXBwSW5mbygpO1xuICAgICAgICAgICAgICAgIGlmKGluZm8gIT09IG51bGwgJiYgdHlwZW9mIGluZm8gIT09ICd1bmRlZmluZWQnICYmIGluZm8uc2V0dGluZ3MuUEFHRV9MT0FEX1RJTUVPVVQgIT09IG51bGwgJiYgdHlwZW9mIGluZm8uc2V0dGluZ3MuUEFHRV9MT0FEX1RJTUVPVVQgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBpbmZvLnNldHRpbmdzLlBBR0VfTE9BRF9USU1FT1VUO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGxldCBzdGFydFRpbWU6IGFueSA9IG51bGw7XG4gICAgICAgICAgICAgIGxldCBoYW5kbGVyOiBGdW5jdGlvbiA9ICgpID0+IHtcblxuICAgICAgICAgICAgICAgIGlmKHN0YXJ0VGltZSA9PT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICBzdGFydFRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudFRpbWU6IGFueSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQYWdlTG9hZGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjdXJyZW50VGltZSAtIHN0YXJ0VGltZSkgPj0gdGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoaGFuZGxlciwgdGhpcy5QQUdFX0xPT1BfVElNRU9VVCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgaGFuZGxlcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgICB0eXBlOiBcImNvbm5lY3Rpb24ucGFnZVwiXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogPHAgc3R5bGU9XCJ0ZXh0LWluZGVudDogMWVtO1wiPlxuICAgICAqIEdldCBhbiA8Y29kZT5hcHBsaWNhdGlvbjwvY29kZT4gaW5zdGFuY2UgaW4gd2hpY2ggdGhpcyA8Y29kZT5wYWdlPC9jb2RlPiBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAgICogPC9wPlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRBcHBsaWNhdGlvbigpOiBQaGxveEFwcCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiA8cCBzdHlsZT1cInRleHQtaW5kZW50OiAxZW07XCI+XG4gICAgICogR2V0IGEgbmFtZSBvZiB0aGlzIDxjb2RlPnBhZ2U8L2NvZGU+LiBUaGlzIG11c3QgYmUgYWxzbyBhIDxjb2RlPnJvdXRlcjwvY29kZT4ncyB1cmkgcGF0aC5cbiAgICAgKiA8L3A+XG4gICAgICovXG4gICAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiA8cCBzdHlsZT1cInRleHQtaW5kZW50OiAxZW07XCI+XG4gICAgICogVG8gY2hlY2sgdGhhdCB0aGlzIDxjb2RlPnBhZ2U8L2NvZGU+IGlzIGJlaW5nIHNob3dlZCBvciBkaXNwbGF5ZWQgYnkgW1tQaGxveEFwcF1dIGNvbXBvbmVudCBvciBub3QuXG4gICAgICogPC9wPlxuICAgICAqL1xuICAgIHB1YmxpYyBpc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhYnN0cmFjdCBpc1BhZ2VMb2FkZWQoKTogYm9vbGVhbjtcbn1cbiJdfQ==