UNPKG

fundamental-ngx

Version:

SAP Fundamentals, implemented in Angular

252 lines 17.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from '@angular/core'; import { SplitButtonActionTitle } from './split-button-utils/split-button.directives'; /** * Split Button component, used to enhance standard HTML button and add possibility to put some dropdown with * additional options. * * ```html * <fd-split-button> * Action Button * <div fd-split-button-menu> * <fd-menu> * <ul fd-menu-list> * <li fd-menu-item> * <a [routerLink]="'/'">option</a> * </li> * <li fd-menu-item> * <a [routerLink]="'/'">option2</a> * </li> * </ul> * </fd-menu> * </div> * </fd-split-button> * ``` */ var SplitButtonComponent = /** @class */ (function () { function SplitButtonComponent() { /** * The trigger events that will open/close the popover. * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp). */ this.triggers = ['click']; /** * Whether the popover should close when a click is made outside its boundaries. */ this.closeOnOutsideClick = true; /** * Whether the popover should close when the escape key is pressed. */ this.closeOnEscapeKey = true; /** * Whether the popover should be focusTrapped. */ this.focusTrapped = false; /** * The icon to include in the button. See the icon page for the list of icons. */ this.glyph = 'slim-arrow-down'; /** * Preset options for the popover body width. * * `at-least` will apply a minimum width to the body equivalent to the width of the control. * * `equal` will apply a width to the body equivalent to the width of the control. * * Leave blank for no effect. */ this.fillControlMode = 'at-least'; /** * @hidden */ this.isOpen = false; /** * Event sent when is open popover changed */ this.isOpenChange = new EventEmitter(); /** * Event sent when primary button is clicked */ this.primaryButtonClicked = new EventEmitter(); } /** * Handles primary button click * */ /** * Handles primary button click * * @param {?} $event * @return {?} */ SplitButtonComponent.prototype.buttonClick = /** * Handles primary button click * * @param {?} $event * @return {?} */ function ($event) { this.primaryButtonClicked.emit(); $event.stopPropagation(); }; /** * Toggles the popover open state. */ /** * Toggles the popover open state. * @return {?} */ SplitButtonComponent.prototype.toggle = /** * Toggles the popover open state. * @return {?} */ function () { if (this.isOpen) { this.close(); } else { this.open(); } }; /** * Closes the popover. */ /** * Closes the popover. * @return {?} */ SplitButtonComponent.prototype.close = /** * Closes the popover. * @return {?} */ function () { if (this.isOpen) { this.isOpen = false; this.isOpenChange.emit(this.isOpen); } }; /** * Opens the popover. */ /** * Opens the popover. * @return {?} */ SplitButtonComponent.prototype.open = /** * Opens the popover. * @return {?} */ function () { if (!this.isOpen) { this.isOpen = true; this.isOpenChange.emit(this.isOpen); } }; SplitButtonComponent.decorators = [ { type: Component, args: [{ selector: 'fd-split-button', template: "<fd-popover [(isOpen)]=\"isOpen\"\n [focusTrapped]=\"focusTrapped\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n [disabled]=\"disabled\"\n [triggers]=\"triggers\"\n [fillControlMode]=\"fillControlMode\">\n <fd-popover-control>\n <div class=\"fd-button-split\">\n <button fd-button\n [fdType]=\"fdType\"\n [options]=\"options\"\n [compact]=\"compact\"\n (click)=\"buttonClick($event)\"\n [disabled]=\"disabled\">\n <ng-container *ngIf=\"titleTemplate\">\n <ng-container [fd-split-button-load-action-title]=\"titleTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!titleTemplate\">\n {{mainActionTitle}}\n </ng-container>\n </button>\n <button fd-button\n [attr.aria-expanded]=\"disabled ? false : isOpen\"\n [attr.aria-disabled]=\"disabled\"\n aria-haspopup=\"true\"\n [fdType]=\"fdType\"\n [options]=\"options\"\n [compact]=\"compact\"\n [glyph]=\"glyph\">\n </button>\n </div>\n </fd-popover-control>\n <fd-popover-body>\n <ng-content select=\"[fd-split-button-menu]\"></ng-content>\n </fd-popover-body>\n</fd-popover>\n" }] } ]; SplitButtonComponent.propDecorators = { titleTemplate: [{ type: ContentChild, args: [SplitButtonActionTitle, { read: TemplateRef },] }], triggers: [{ type: Input }], closeOnOutsideClick: [{ type: Input }], closeOnEscapeKey: [{ type: Input }], focusTrapped: [{ type: Input }], compact: [{ type: Input }], glyph: [{ type: Input }], disabled: [{ type: Input }], mainActionTitle: [{ type: Input }], fdType: [{ type: Input }], options: [{ type: Input }], fillControlMode: [{ type: Input }], isOpen: [{ type: Input }], isOpenChange: [{ type: Output }], primaryButtonClicked: [{ type: Output }] }; return SplitButtonComponent; }()); export { SplitButtonComponent }; if (false) { /** * @hidden * @type {?} */ SplitButtonComponent.prototype.titleTemplate; /** * The trigger events that will open/close the popover. * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp). * @type {?} */ SplitButtonComponent.prototype.triggers; /** * Whether the popover should close when a click is made outside its boundaries. * @type {?} */ SplitButtonComponent.prototype.closeOnOutsideClick; /** * Whether the popover should close when the escape key is pressed. * @type {?} */ SplitButtonComponent.prototype.closeOnEscapeKey; /** * Whether the popover should be focusTrapped. * @type {?} */ SplitButtonComponent.prototype.focusTrapped; /** * Whether to apply compact mode to the button. * @type {?} */ SplitButtonComponent.prototype.compact; /** * The icon to include in the button. See the icon page for the list of icons. * @type {?} */ SplitButtonComponent.prototype.glyph; /** * The icon to include in the button. See the icon page for the list of icons. * @type {?} */ SplitButtonComponent.prototype.disabled; /** * The Title for main action button * @type {?} */ SplitButtonComponent.prototype.mainActionTitle; /** * The type of the button. Types include 'standard', 'positive', 'medium', and 'negative'. * Leave empty for default (Action button).' * @type {?} */ SplitButtonComponent.prototype.fdType; /** * Button options. Options include 'emphasized' and 'light'. Leave empty for default.' * @type {?} */ SplitButtonComponent.prototype.options; /** * Preset options for the popover body width. * * `at-least` will apply a minimum width to the body equivalent to the width of the control. * * `equal` will apply a width to the body equivalent to the width of the control. * * Leave blank for no effect. * @type {?} */ SplitButtonComponent.prototype.fillControlMode; /** * @hidden * @type {?} */ SplitButtonComponent.prototype.isOpen; /** * Event sent when is open popover changed * @type {?} */ SplitButtonComponent.prototype.isOpenChange; /** * Event sent when primary button is clicked * @type {?} */ SplitButtonComponent.prototype.primaryButtonClicked; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2Z1bmRhbWVudGFsLW5neC8iLCJzb3VyY2VzIjpbImxpYi9zcGxpdC1idXR0b24vc3BsaXQtYnV0dG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCdEY7SUFBQTs7Ozs7UUFhSSxhQUFRLEdBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7OztRQUkvQix3QkFBbUIsR0FBWSxJQUFJLENBQUM7Ozs7UUFJcEMscUJBQWdCLEdBQVksSUFBSSxDQUFDOzs7O1FBSWpDLGlCQUFZLEdBQVksS0FBSyxDQUFDOzs7O1FBUTlCLFVBQUssR0FBVyxpQkFBaUIsQ0FBQzs7Ozs7OztRQTBCbEMsb0JBQWUsR0FBb0IsVUFBVSxDQUFDOzs7O1FBSTlDLFdBQU0sR0FBWSxLQUFLLENBQUM7Ozs7UUFJZixpQkFBWSxHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDOzs7O1FBSWxFLHlCQUFvQixHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO0lBeUN2RixDQUFDO0lBdkNHOztVQUVNOzs7Ozs7O0lBQ0MsMENBQVc7Ozs7OztJQUFsQixVQUFtQixNQUFNO1FBQ3JCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHOzs7OztJQUNJLHFDQUFNOzs7O0lBQWI7UUFDSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDaEI7YUFBTTtZQUNILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNmO0lBQ0wsQ0FBQztJQUVEOztPQUVHOzs7OztJQUNJLG9DQUFLOzs7O0lBQVo7UUFDSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdkM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7Ozs7O0lBQ0ksbUNBQUk7Ozs7SUFBWDtRQUNJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQzs7Z0JBOUdKLFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixnaURBQTBDO2lCQUM3Qzs7O2dDQUlJLFlBQVksU0FBQyxzQkFBc0IsRUFBRSxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUM7MkJBS3hELEtBQUs7c0NBSUwsS0FBSzttQ0FJTCxLQUFLOytCQUlMLEtBQUs7MEJBSUwsS0FBSzt3QkFJTCxLQUFLOzJCQUlMLEtBQUs7a0NBSUwsS0FBSzt5QkFLTCxLQUFLOzBCQUlMLEtBQUs7a0NBU0wsS0FBSzt5QkFJTCxLQUFLOytCQUlMLE1BQU07dUNBSU4sTUFBTTs7SUEwQ1gsMkJBQUM7Q0FBQSxBQWhIRCxJQWdIQztTQTVHWSxvQkFBb0I7Ozs7OztJQUc3Qiw2Q0FDZ0M7Ozs7OztJQUloQyx3Q0FDK0I7Ozs7O0lBRy9CLG1EQUNvQzs7Ozs7SUFHcEMsZ0RBQ2lDOzs7OztJQUdqQyw0Q0FDOEI7Ozs7O0lBRzlCLHVDQUNpQjs7Ozs7SUFHakIscUNBQ2tDOzs7OztJQUdsQyx3Q0FDa0I7Ozs7O0lBR2xCLCtDQUN3Qjs7Ozs7O0lBSXhCLHNDQUNlOzs7OztJQUdmLHVDQUMyQjs7Ozs7Ozs7SUFRM0IsK0NBQzhDOzs7OztJQUc5QyxzQ0FDd0I7Ozs7O0lBR3hCLDRDQUMyRTs7Ozs7SUFHM0Usb0RBQ21GIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNwbGl0QnV0dG9uQWN0aW9uVGl0bGUgfSBmcm9tICcuL3NwbGl0LWJ1dHRvbi11dGlscy9zcGxpdC1idXR0b24uZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBQb3BvdmVyRmlsbE1vZGUgfSBmcm9tICcuLi9wb3BvdmVyL3BvcG92ZXItZGlyZWN0aXZlL3BvcG92ZXIuZGlyZWN0aXZlJztcblxuLyoqXG4gKiBTcGxpdCBCdXR0b24gY29tcG9uZW50LCB1c2VkIHRvIGVuaGFuY2Ugc3RhbmRhcmQgSFRNTCBidXR0b24gYW5kIGFkZCBwb3NzaWJpbGl0eSB0byBwdXQgc29tZSBkcm9wZG93biB3aXRoXG4gKiBhZGRpdGlvbmFsIG9wdGlvbnMuXG4gKlxuICogYGBgaHRtbFxuICogICAgPGZkLXNwbGl0LWJ1dHRvbj5cbiAqICAgICAgICBBY3Rpb24gQnV0dG9uXG4gKiAgICAgICAgPGRpdiBmZC1zcGxpdC1idXR0b24tbWVudT5cbiAqICAgICAgICAgICAgPGZkLW1lbnU+XG4gKiAgICAgICAgICAgICAgICA8dWwgZmQtbWVudS1saXN0PlxuICogICAgICAgICAgICAgICAgICAgIDxsaSBmZC1tZW51LWl0ZW0+XG4gKiAgICAgICAgICAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiJy8nXCI+b3B0aW9uPC9hPlxuICogICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gKiAgICAgICAgICAgICAgICAgICAgPGxpIGZkLW1lbnUtaXRlbT5cbiAqICAgICAgICAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCInLydcIj5vcHRpb24yPC9hPlxuICogICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gKiAgICAgICAgICAgICAgICA8L3VsPlxuICogICAgICAgICAgICA8L2ZkLW1lbnU+XG4gKiAgICAgICAgPC9kaXY+XG4gKiAgICA8L2ZkLXNwbGl0LWJ1dHRvbj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXNwbGl0LWJ1dHRvbicsXG4gICAgdGVtcGxhdGVVcmw6ICdzcGxpdC1idXR0b24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFNwbGl0QnV0dG9uQ29tcG9uZW50IHtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChTcGxpdEJ1dHRvbkFjdGlvblRpdGxlLCB7cmVhZDogVGVtcGxhdGVSZWZ9KVxuICAgIHRpdGxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogVGhlIHRyaWdnZXIgZXZlbnRzIHRoYXQgd2lsbCBvcGVuL2Nsb3NlIHRoZSBwb3BvdmVyLlxuICAgICAqICBBY2NlcHRzIGFueSBbSFRNTCBET00gRXZlbnRzXShodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2pzcmVmL2RvbV9vYmpfZXZlbnQuYXNwKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHRyaWdnZXJzOiBzdHJpbmdbXSA9IFsnY2xpY2snXTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBwb3BvdmVyIHNob3VsZCBjbG9zZSB3aGVuIGEgY2xpY2sgaXMgbWFkZSBvdXRzaWRlIGl0cyBib3VuZGFyaWVzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xvc2VPbk91dHNpZGVDbGljazogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgcG9wb3ZlciBzaG91bGQgY2xvc2Ugd2hlbiB0aGUgZXNjYXBlIGtleSBpcyBwcmVzc2VkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xvc2VPbkVzY2FwZUtleTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgcG9wb3ZlciBzaG91bGQgYmUgZm9jdXNUcmFwcGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZm9jdXNUcmFwcGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0byBhcHBseSBjb21wYWN0IG1vZGUgdG8gdGhlIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbXBhY3Q6IGJvb2xlYW47XG5cbiAgICAvKiogVGhlIGljb24gdG8gaW5jbHVkZSBpbiB0aGUgYnV0dG9uLiBTZWUgdGhlIGljb24gcGFnZSBmb3IgdGhlIGxpc3Qgb2YgaWNvbnMuICovXG4gICAgQElucHV0KClcbiAgICBnbHlwaDogc3RyaW5nID0gJ3NsaW0tYXJyb3ctZG93bic7XG5cbiAgICAvKiogVGhlIGljb24gdG8gaW5jbHVkZSBpbiB0aGUgYnV0dG9uLiBTZWUgdGhlIGljb24gcGFnZSBmb3IgdGhlIGxpc3Qgb2YgaWNvbnMuICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKiBUaGUgVGl0bGUgZm9yIG1haW4gIGFjdGlvbiBidXR0b24gKi9cbiAgICBASW5wdXQoKVxuICAgIG1haW5BY3Rpb25UaXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSB0eXBlIG9mIHRoZSBidXR0b24uIFR5cGVzIGluY2x1ZGUgJ3N0YW5kYXJkJywgJ3Bvc2l0aXZlJywgJ21lZGl1bScsIGFuZCAnbmVnYXRpdmUnLlxuICAgICAqIExlYXZlIGVtcHR5IGZvciBkZWZhdWx0IChBY3Rpb24gYnV0dG9uKS4nKi9cbiAgICBASW5wdXQoKVxuICAgIGZkVHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEJ1dHRvbiBvcHRpb25zLiAgT3B0aW9ucyBpbmNsdWRlICdlbXBoYXNpemVkJyBhbmQgJ2xpZ2h0Jy4gTGVhdmUgZW1wdHkgZm9yIGRlZmF1bHQuJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgb3B0aW9uczogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBQcmVzZXQgb3B0aW9ucyBmb3IgdGhlIHBvcG92ZXIgYm9keSB3aWR0aC5cbiAgICAgKiAqIGBhdC1sZWFzdGAgd2lsbCBhcHBseSBhIG1pbmltdW0gd2lkdGggdG8gdGhlIGJvZHkgZXF1aXZhbGVudCB0byB0aGUgd2lkdGggb2YgdGhlIGNvbnRyb2wuXG4gICAgICogKiBgZXF1YWxgIHdpbGwgYXBwbHkgYSB3aWR0aCB0byB0aGUgYm9keSBlcXVpdmFsZW50IHRvIHRoZSB3aWR0aCBvZiB0aGUgY29udHJvbC5cbiAgICAgKiAqIExlYXZlIGJsYW5rIGZvciBubyBlZmZlY3QuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmaWxsQ29udHJvbE1vZGU6IFBvcG92ZXJGaWxsTW9kZSA9ICdhdC1sZWFzdCc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNPcGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRXZlbnQgc2VudCB3aGVuIGlzIG9wZW4gcG9wb3ZlciBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgaXNPcGVuQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRXZlbnQgc2VudCB3aGVuIHByaW1hcnkgYnV0dG9uIGlzIGNsaWNrZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBwcmltYXJ5QnV0dG9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogIEhhbmRsZXMgcHJpbWFyeSBidXR0b24gY2xpY2tcbiAgICAgKiAgKi9cbiAgICBwdWJsaWMgYnV0dG9uQ2xpY2soJGV2ZW50KSB7XG4gICAgICAgIHRoaXMucHJpbWFyeUJ1dHRvbkNsaWNrZWQuZW1pdCgpO1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgcG9wb3ZlciBvcGVuIHN0YXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIHBvcG92ZXIuXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNPcGVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBwb3BvdmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNPcGVuKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19