UNPKG

ngx-mat-lib

Version:

A bunch of utilities and components to use in your Angular 7+ apps!

299 lines (298 loc) 23.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { AriaDescriber } from "@angular/cdk/a11y"; import { coerceBooleanProperty } from "@angular/cdk/coercion"; import { Directive, ElementRef, Input, NgZone, Renderer2 } from "@angular/core"; /** @typedef {?} */ var XmatBadgePosition; export { XmatBadgePosition }; /** @typedef {?} */ var XmatBadgeSize; export { XmatBadgeSize }; /** * Directive to display a text badge. */ export class XmatBadgeDirective { /** * @param {?} _ngZone * @param {?} _ariaDescriber * @param {?} _renderer * @param {?} elementRef */ constructor(_ngZone, _ariaDescriber, _renderer, elementRef) { this._ngZone = _ngZone; this._ariaDescriber = _ariaDescriber; this._renderer = _renderer; /* * Size of the badge. Can be "small", "medium", or "large". */ // tslint:disable-next-line:no-input-rename this.size = "medium"; /* * Position the badge should reside. * Accepts any combination of "above"|"below" and "before"|"after" */ // tslint:disable-next-line:no-input-rename this.position = "below after"; /** * Whether the badge has any content. */ this.hasContent = false; /** * Unique id for the badge */ this.id = XmatBadgeDirective.nextId++; this._color = "primary"; this._overlap = true; // Bridge to the new Angular6 typed ElementRef this._elementRef = new ElementRef(elementRef.nativeElement); } /** * The color of the badge. Can be `primary`, `accent`, or `warn`. * @param {?} value * @return {?} */ set color(value) { this._setColor(value); this._color = value; } /** * @return {?} */ get color() { return this._color; } /** * Whether the badge should overlap its contents or not * @return {?} */ get overlap() { return this._overlap; } /** * @param {?} val * @return {?} */ set overlap(val) { this._overlap = coerceBooleanProperty(val); } /** * The content for the badge * @param {?} value * @return {?} */ set content(value) { this._content = value; this.hasContent = value != null && `${value}`.trim().length > 0; this._updateTextContent(); } /** * @return {?} */ get content() { return this._content; } /** * Message used to describe the decorated element via aria-describedby * @param {?} newDescription * @return {?} */ set description(newDescription) { if (newDescription !== this._description) { this._updateHostAriaDescription(newDescription, this._description); this._description = newDescription; } } /** * @return {?} */ get description() { return this._description; } /** * Whether the badge is hidden. * @return {?} */ get hidden() { return this._hidden; } /** * @param {?} val * @return {?} */ set hidden(val) { this._hidden = coerceBooleanProperty(val); } /** * Whether the badge is above the host or not * @return {?} */ isAbove() { return this.position.indexOf("below") === -1; } /** * Whether the badge is after the host or not * @return {?} */ isAfter() { return this.position.indexOf("before") === -1; } /** * @return {?} */ ngOnDestroy() { if (this.description && this._badgeElement) { this._ariaDescriber.removeDescription(this._badgeElement, this.description); } } /** * Injects a span element into the DOM with the content. * @return {?} */ _updateTextContent() { if (!this._badgeElement) { this._badgeElement = this._createBadgeElement(); } else { this._badgeElement.textContent = this.content; } return this._badgeElement; } /** * Creates the badge element * @return {?} */ _createBadgeElement() { /** @type {?} */ const rootNode = this._renderer; /** @type {?} */ const badgeElement = document.createElement("span"); /** @type {?} */ const activeClass = "xmat-badge-active"; badgeElement.setAttribute("id", `xmat-badge-content-${this.id}`); badgeElement.classList.add("xmat-badge-content"); badgeElement.textContent = this.content; if (this.description) { badgeElement.setAttribute("aria-label", this.description); } this._elementRef.nativeElement.appendChild(badgeElement); // animate in after insertion if (typeof requestAnimationFrame === "function") { this._ngZone.runOutsideAngular(() => { requestAnimationFrame(() => { badgeElement.classList.add(activeClass); }); }); } else { badgeElement.classList.add(activeClass); } return badgeElement; } /** * Adds css theme class given the color to the component host * @param {?} colorPalette * @return {?} */ _setColor(colorPalette) { if (colorPalette !== this._color) { if (this._color) { this._elementRef.nativeElement.classList.remove(`xmat-badge-${this._color}`); } if (colorPalette) { this._elementRef.nativeElement.classList.add(`xmat-badge-${colorPalette}`); } } } /** * Sets the aria-label property on the element * @param {?} newDescription * @param {?} oldDescription * @return {?} */ _updateHostAriaDescription(newDescription, oldDescription) { /** @type {?} */ const content = this._updateTextContent(); if (oldDescription) { this._ariaDescriber.removeDescription(content, oldDescription); } if (newDescription) { this._ariaDescriber.describe(content, newDescription); } } } XmatBadgeDirective.nextId = 0; XmatBadgeDirective.decorators = [ { type: Directive, args: [{ selector: "[xmatBadge]", host: { "class": "xmat-badge", "[class.xmat-badge-overlap]": "overlap", "[class.xmat-badge-above]": "isAbove()", "[class.xmat-badge-below]": "!isAbove()", "[class.xmat-badge-before]": "!isAfter()", "[class.xmat-badge-after]": "isAfter()", "[class.xmat-badge-small]": "size === 'small'", "[class.xmat-badge-medium]": "size === 'medium'", "[class.xmat-badge-large]": "size === 'large'", "[class.xmat-badge-hidden]": "hidden || !hasContent", }, },] } ]; /** @nocollapse */ XmatBadgeDirective.ctorParameters = () => [ { type: NgZone }, { type: AriaDescriber }, { type: Renderer2 }, { type: ElementRef } ]; XmatBadgeDirective.propDecorators = { size: [{ type: Input, args: ["xmatBadgeSize",] }], position: [{ type: Input, args: ["xmatBadgePosition",] }], color: [{ type: Input, args: ["xmatBadgeColor",] }], overlap: [{ type: Input, args: ["xmatBadgeOverlap",] }], content: [{ type: Input, args: ["xmatBadge",] }], description: [{ type: Input, args: ["xmatBadgeDescription",] }], hidden: [{ type: Input, args: ["xmatBadgeHidden",] }] }; if (false) { /** @type {?} */ XmatBadgeDirective.nextId; /** @type {?} */ XmatBadgeDirective.prototype.size; /** @type {?} */ XmatBadgeDirective.prototype.position; /** * Whether the badge has any content. * @type {?} */ XmatBadgeDirective.prototype.hasContent; /** * Unique id for the badge * @type {?} */ XmatBadgeDirective.prototype.id; /** @type {?} */ XmatBadgeDirective.prototype._badgeElement; /** @type {?} */ XmatBadgeDirective.prototype._color; /** @type {?} */ XmatBadgeDirective.prototype._content; /** @type {?} */ XmatBadgeDirective.prototype._description; /** @type {?} */ XmatBadgeDirective.prototype._elementRef; /** @type {?} */ XmatBadgeDirective.prototype._hidden; /** @type {?} */ XmatBadgeDirective.prototype._overlap; /** @type {?} */ XmatBadgeDirective.prototype._ngZone; /** @type {?} */ XmatBadgeDirective.prototype._ariaDescriber; /** @type {?} */ XmatBadgeDirective.prototype._renderer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1hdC1iYWRnZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtbWF0LWxpYi8iLCJzb3VyY2VzIjpbImxpYi9kaXJlY3RpdmVzL3htYXQtYmFkZ2UveG1hdC1iYWRnZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQ0gsU0FBUyxFQUFFLFVBQVUsRUFDckIsS0FBSyxFQUNMLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7QUFzQnZCLE1BQU0sT0FBTyxrQkFBa0I7Ozs7Ozs7SUF1RjNCLFlBQW9CLE9BQWUsRUFDZixnQkFDQSxXQUNSLFVBQXNCO1FBSGQsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLG1CQUFjLEdBQWQsY0FBYztRQUNkLGNBQVMsR0FBVCxTQUFTOzs7OztRQWpGN0IsWUFBOEMsUUFBUSxDQUFDOzs7Ozs7UUFPdkQsZ0JBQTBELGFBQWEsQ0FBQzs7OztRQTJEeEUsa0JBQWEsS0FBSyxDQUFDOzs7O1FBRW5CLFVBQWEsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7c0JBR1YsU0FBUzt3QkFLWixJQUFJOztRQVM1QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksVUFBVSxDQUFjLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUM1RTs7Ozs7O0lBNUVELElBQ0ksS0FBSyxDQUFDLEtBQW1CO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7S0FDdkI7Ozs7SUFFRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDdEI7Ozs7O0lBR0QsSUFDSSxPQUFPO1FBQ1AsT0FBTyxJ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QUFhO2dCQUN2QixJQUFJLEVBQUU7b0JBQ0YsT0FBTyxFQUFFLFlBQVk7b0JBQ3JCLDRCQUE0QixFQUFFLFNBQVM7b0JBQ3ZDLDBCQUEwQixFQUFFLFdBQVc7b0JBQ3ZDLDBCQUEwQixFQUFFLFlBQVk7b0JBQ3hDLDJCQUEyQixFQUFFLFlBQVk7b0JBQ3pDLDBCQUEwQixFQUFFLFdBQVc7b0JBQ3ZDLDBCQUEwQixFQUFFLGtCQUFrQjtvQkFDOUMsMkJBQTJCLEVBQUUsbUJBQW1CO29CQUNoRCwwQkFBMEIsRUFBRSxrQkFBa0I7b0JBQzlDLDJCQUEyQixFQUFFLHVCQUF1QjtpQkFDdkQ7YUFDSjs7OztZQXhCRyxNQUFNO1lBTEYsYUFBYTtZQU9qQixTQUFTO1lBSkUsVUFBVTs7O21CQW1DcEIsS0FBSyxTQUFDLGVBQWU7dUJBT3JCLEtBQUssU0FBQyxtQkFBbUI7b0JBR3pCLEtBQUssU0FBQyxnQkFBZ0I7c0JBV3RCLEtBQUssU0FBQyxrQkFBa0I7c0JBVXhCLEtBQUssU0FBQyxXQUFXOzBCQVlqQixLQUFLLFNBQUMsc0JBQXNCO3FCQWE1QixLQUFLLFNBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcmlhRGVzY3JpYmVyfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2ExMXlcIjtcbmltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvZXJjaW9uXCI7XG5pbXBvcnQge1xuICAgIERpcmVjdGl2ZSwgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIFJlbmRlcmVyMlxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtUaGVtZVBhbGV0dGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XG5cbmV4cG9ydCB0eXBlIFhtYXRCYWRnZVBvc2l0aW9uID0gXCJhYm92ZSBhZnRlclwiIHwgXCJhYm92ZSBiZWZvcmVcIiB8IFwiYmVsb3cgYmVmb3JlXCIgfCBcImJlbG93IGFmdGVyXCI7XG5leHBvcnQgdHlwZSBYbWF0QmFkZ2VTaXplID0gXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIjtcblxuLyoqIERpcmVjdGl2ZSB0byBkaXNwbGF5IGEgdGV4dCBiYWRnZS4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiBcIlt4bWF0QmFkZ2VdXCIsXG4gICAgaG9zdDoge1xuICAgICAgICBcImNsYXNzXCI6IFwieG1hdC1iYWRnZVwiLFxuICAgICAgICBcIltjbGFzcy54bWF0LWJhZGdlLW92ZXJsYXBdXCI6IFwib3ZlcmxhcFwiLFxuICAgICAgICBcIltjbGFzcy54bWF0LWJhZGdlLWFib3ZlXVwiOiBcImlzQWJvdmUoKVwiLFxuICAgICAgICBcIltjbGFzcy54bWF0LWJhZGdlLWJlbG93XVwiOiBcIiFpc0Fib3ZlKClcIixcbiAgICAgICAgXCJbY2xhc3MueG1hdC1iYWRnZS1iZWZvcmVdXCI6IFwiIWlzQWZ0ZXIoKVwiLFxuICAgICAgICBcIltjbGFzcy54bWF0LWJhZGdlLWFmdGVyXVwiOiBcImlzQWZ0ZXIoKVwiLFxuICAgICAgICBcIltjbGFzcy54bWF0LWJhZGdlLXNtYWxsXVwiOiBcInNpemUgPT09ICdzbWFsbCdcIixcbiAgICAgICAgXCJbY2xhc3MueG1hdC1iYWRnZS1tZWRpdW1dXCI6IFwic2l6ZSA9PT0gJ21lZGl1bSdcIixcbiAgICAgICAgXCJbY2xhc3MueG1hdC1iYWRnZS1sYXJnZV1cIjogXCJzaXplID09PSAnbGFyZ2UnXCIsXG4gICAgICAgIFwiW2NsYXNzLnhtYXQtYmFkZ2UtaGlkZGVuXVwiOiBcImhpZGRlbiB8fCAhaGFzQ29udGVudFwiLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFhtYXRCYWRnZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICBzdGF0aWMgbmV4dElkOiBudW1iZXIgPSAwO1xuXG4gICAgLypcbiAgICAgKiBTaXplIG9mIHRoZSBiYWRnZS4gQ2FuIGJlIFwic21hbGxcIiwgXCJtZWRpdW1cIiwgb3IgXCJsYXJnZVwiLlxuICAgICAqL1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgICBASW5wdXQoXCJ4bWF0QmFkZ2VTaXplXCIpIHNpemU6IFhtYXRCYWRnZVNpemUgPSBcIm1lZGl1bVwiO1xuXG4gICAgLypcbiAgICAgKiBQb3NpdGlvbiB0aGUgYmFkZ2Ugc2hvdWxkIHJlc2lkZS5cbiAgICAgKiBBY2NlcHRzIGFueSBjb21iaW5hdGlvbiBvZiBcImFib3ZlXCJ8XCJiZWxvd1wiIGFuZCBcImJlZm9yZVwifFwiYWZ0ZXJcIlxuICAgICAqL1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgICBASW5wdXQoXCJ4bWF0QmFkZ2VQb3NpdGlvblwiKSBwb3NpdGlvbjogWG1hdEJhZGdlUG9zaXRpb24gPSBcImJlbG93IGFmdGVyXCI7XG5cbiAgICAvKiogVGhlIGNvbG9yIG9mIHRoZSBiYWRnZS4gQ2FuIGJlIGBwcmltYXJ5YCwgYGFjY2VudGAsIG9yIGB3YXJuYC4gKi9cbiAgICBASW5wdXQoXCJ4bWF0QmFkZ2VDb2xvclwiKVxuICAgIHNldCBjb2xvcih2YWx1ZTogVGhlbWVQYWxldHRlKSB7XG4gICAgICAgIHRoaXMuX3NldENvbG9yKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fY29sb3IgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgY29sb3IoKTogVGhlbWVQYWxldHRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBiYWRnZSBzaG91bGQgb3ZlcmxhcCBpdHMgY29udGVudHMgb3Igbm90ICovXG4gICAgQElucHV0KFwieG1hdEJhZGdlT3ZlcmxhcFwiKVxuICAgIGdldCBvdmVybGFwKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxhcDtcbiAgICB9XG5cbiAgICBzZXQgb3ZlcmxhcCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fb3ZlcmxhcCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWwpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgY29udGVudCBmb3IgdGhlIGJhZGdlICovXG4gICAgQElucHV0KFwieG1hdEJhZGdlXCIpXG4gICAgc2V0IGNvbnRlbnQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9jb250ZW50ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGFzQ29udGVudCA9IHZhbHVlICE9IG51bGwgJiYgYCR7dmFsdWV9YC50cmltKCkubGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5fdXBkYXRlVGV4dENvbnRlbnQoKTtcbiAgICB9XG5cbiAgICBnZXQgY29udGVudCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudDtcbiAgICB9XG5cbiAgICAvKiogTWVzc2FnZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSBkZWNvcmF0ZWQgZWxlbWVudCB2aWEgYXJpYS1kZXNjcmliZWRieSAqL1xuICAgIEBJbnB1dChcInhtYXRCYWRnZURlc2NyaXB0aW9uXCIpXG4gICAgc2V0IGRlc2NyaXB0aW9uKG5ld0Rlc2NyaXB0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG5ld0Rlc2NyaXB0aW9uICE9PSB0aGlzLl9kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlSG9zdEFyaWFEZXNjcmlwdGlvbihuZXdEZXNjcmlwdGlvbiwgdGhpcy5fZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgdGhpcy5fZGVzY3JpcHRpb24gPSBuZXdEZXNjcmlwdGlvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBkZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGJhZGdlIGlzIGhpZGRlbi4gKi9cbiAgICBASW5wdXQoXCJ4bWF0QmFkZ2VIaWRkZW5cIilcbiAgICBnZXQgaGlkZGVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZGVuO1xuICAgIH1cblxuICAgIHNldCBoaWRkZW4odmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hpZGRlbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWwpO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBiYWRnZSBoYXMgYW55IGNvbnRlbnQuICovXG4gICAgaGFzQ29udGVudCA9IGZhbHNlO1xuICAgIC8qKiBVbmlxdWUgaWQgZm9yIHRoZSBiYWRnZSAqL1xuICAgIGlkOiBudW1iZXIgPSBYbWF0QmFkZ2VEaXJlY3RpdmUubmV4dElkKys7XG5cbiAgICBwcml2YXRlIF9iYWRnZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgX2NvbG9yOiBUaGVtZVBhbGV0dGUgPSBcInByaW1hcnlcIjtcbiAgICBwcml2YXRlIF9jb250ZW50OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZGVzY3JpcHRpb246IHN0cmluZztcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgICBwcml2YXRlIF9oaWRkZW46IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfb3ZlcmxhcDogYm9vbGVhbiA9IHRydWU7XG5cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX25nWm9uZTogTmdab25lLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2FyaWFEZXNjcmliZXI6IEFyaWFEZXNjcmliZXIsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG5cbiAgICAgICAgLy8gQnJpZGdlIHRvIHRoZSBuZXcgQW5ndWxhcjYgdHlwZWQgRWxlbWVudFJlZlxuICAgICAgICB0aGlzLl9lbGVtZW50UmVmID0gbmV3IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGJhZGdlIGlzIGFib3ZlIHRoZSBob3N0IG9yIG5vdCAqL1xuICAgIGlzQWJvdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLmluZGV4T2YoXCJiZWxvd1wiKSA9PT0gLTE7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGJhZGdlIGlzIGFmdGVyIHRoZSBob3N0IG9yIG5vdCAqL1xuICAgIGlzQWZ0ZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLmluZGV4T2YoXCJiZWZvcmVcIikgPT09IC0xO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdGlvbiAmJiB0aGlzLl9iYWRnZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24odGhpcy5fYmFkZ2VFbGVtZW50LCB0aGlzLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBJbmplY3RzIGEgc3BhbiBlbGVtZW50IGludG8gdGhlIERPTSB3aXRoIHRoZSBjb250ZW50LiAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZVRleHRDb250ZW50KCk6IEhUTUxTcGFuRWxlbWVudCB7XG4gICAgICAgIGlmICghdGhpcy5fYmFkZ2VFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9iYWRnZUVsZW1lbnQgPSB0aGlzLl9jcmVhdGVCYWRnZUVsZW1lbnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2JhZGdlRWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMuY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYmFkZ2VFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGVzIHRoZSBiYWRnZSBlbGVtZW50ICovXG4gICAgcHJpdmF0ZSBfY3JlYXRlQmFkZ2VFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLl9yZW5kZXJlcjtcbiAgICAgICAgY29uc3QgYmFkZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUNsYXNzID0gXCJ4bWF0LWJhZGdlLWFjdGl2ZVwiO1xuXG4gICAgICAgIGJhZGdlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBgeG1hdC1iYWRnZS1jb250ZW50LSR7dGhpcy5pZH1gKTtcbiAgICAgICAgYmFkZ2VFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJ4bWF0LWJhZGdlLWNvbnRlbnRcIik7XG4gICAgICAgIGJhZGdlRWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMuY29udGVudDtcblxuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgYmFkZ2VFbGVtZW50LnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgdGhpcy5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoYmFkZ2VFbGVtZW50KTtcblxuICAgICAgICAvLyBhbmltYXRlIGluIGFmdGVyIGluc2VydGlvblxuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGJhZGdlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmFkZ2VFbGVtZW50LmNsYXNzTGlzdC5hZGQoYWN0aXZlQ2xhc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJhZGdlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKiogQWRkcyBjc3MgdGhlbWUgY2xhc3MgZ2l2ZW4gdGhlIGNvbG9yIHRvIHRoZSBjb21wb25lbnQgaG9zdCAqL1xuICAgIHByaXZhdGUgX3NldENvbG9yKGNvbG9yUGFsZXR0ZTogVGhlbWVQYWxldHRlKSB7XG4gICAgICAgIGlmIChjb2xvclBhbGV0dGUgIT09IHRoaXMuX2NvbG9yKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY29sb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShgeG1hdC1iYWRnZS0ke3RoaXMuX2NvbG9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbG9yUGFsZXR0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGB4bWF0LWJhZGdlLSR7Y29sb3JQYWxldHRlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFNldHMgdGhlIGFyaWEtbGFiZWwgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgKi9cbiAgICBwcml2YXRlIF91cGRhdGVIb3N0QXJpYURlc2NyaXB0aW9uKG5ld0Rlc2NyaXB0aW9uOiBzdHJpbmcsIG9sZERlc2NyaXB0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgLy8gZW5zdXJlIGNvbnRlbnQgYXZhaWxhYmxlIGJlZm9yZSBzZXR0aW5nIGxhYmVsXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLl91cGRhdGVUZXh0Q29udGVudCgpO1xuXG4gICAgICAgIGlmIChvbGREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fYXJpYURlc2NyaWJlci5yZW1vdmVEZXNjcmlwdGlvbihjb250ZW50LCBvbGREZXNjcmlwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3RGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2FyaWFEZXNjcmliZXIuZGVzY3JpYmUoY29udGVudCwgbmV3RGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=