UNPKG

ngx-mat-lib

Version:

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

352 lines (351 loc) 26.6 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. */ var XmatBadgeDirective = /** @class */ (function () { function XmatBadgeDirective(_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); } Object.defineProperty(XmatBadgeDirective.prototype, "color", { get: /** * @return {?} */ function () { return this._color; }, /** The color of the badge. Can be `primary`, `accent`, or `warn`. */ set: /** * The color of the badge. Can be `primary`, `accent`, or `warn`. * @param {?} value * @return {?} */ function (value) { this._setColor(value); this._color = value; }, enumerable: true, configurable: true }); Object.defineProperty(XmatBadgeDirective.prototype, "overlap", { /** Whether the badge should overlap its contents or not */ get: /** * Whether the badge should overlap its contents or not * @return {?} */ function () { return this._overlap; }, set: /** * @param {?} val * @return {?} */ function (val) { this._overlap = coerceBooleanProperty(val); }, enumerable: true, configurable: true }); Object.defineProperty(XmatBadgeDirective.prototype, "content", { get: /** * @return {?} */ function () { return this._content; }, /** The content for the badge */ set: /** * The content for the badge * @param {?} value * @return {?} */ function (value) { this._content = value; this.hasContent = value != null && ("" + value).trim().length > 0; this._updateTextContent(); }, enumerable: true, configurable: true }); Object.defineProperty(XmatBadgeDirective.prototype, "description", { get: /** * @return {?} */ function () { return this._description; }, /** Message used to describe the decorated element via aria-describedby */ set: /** * Message used to describe the decorated element via aria-describedby * @param {?} newDescription * @return {?} */ function (newDescription) { if (newDescription !== this._description) { this._updateHostAriaDescription(newDescription, this._description); this._description = newDescription; } }, enumerable: true, configurable: true }); Object.defineProperty(XmatBadgeDirective.prototype, "hidden", { /** Whether the badge is hidden. */ get: /** * Whether the badge is hidden. * @return {?} */ function () { return this._hidden; }, set: /** * @param {?} val * @return {?} */ function (val) { this._hidden = coerceBooleanProperty(val); }, enumerable: true, configurable: true }); /** Whether the badge is above the host or not */ /** * Whether the badge is above the host or not * @return {?} */ XmatBadgeDirective.prototype.isAbove = /** * Whether the badge is above the host or not * @return {?} */ function () { return this.position.indexOf("below") === -1; }; /** Whether the badge is after the host or not */ /** * Whether the badge is after the host or not * @return {?} */ XmatBadgeDirective.prototype.isAfter = /** * Whether the badge is after the host or not * @return {?} */ function () { return this.position.indexOf("before") === -1; }; /** * @return {?} */ XmatBadgeDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this.description && this._badgeElement) { this._ariaDescriber.removeDescription(this._badgeElement, this.description); } }; /** * Injects a span element into the DOM with the content. * @return {?} */ XmatBadgeDirective.prototype._updateTextContent = /** * Injects a span element into the DOM with the content. * @return {?} */ function () { if (!this._badgeElement) { this._badgeElement = this._createBadgeElement(); } else { this._badgeElement.textContent = this.content; } return this._badgeElement; }; /** * Creates the badge element * @return {?} */ XmatBadgeDirective.prototype._createBadgeElement = /** * Creates the badge element * @return {?} */ function () { /** @type {?} */ var rootNode = this._renderer; /** @type {?} */ var badgeElement = document.createElement("span"); /** @type {?} */ var 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(function () { requestAnimationFrame(function () { 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 {?} */ XmatBadgeDirective.prototype._setColor = /** * Adds css theme class given the color to the component host * @param {?} colorPalette * @return {?} */ function (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 {?} */ XmatBadgeDirective.prototype._updateHostAriaDescription = /** * Sets the aria-label property on the element * @param {?} newDescription * @param {?} oldDescription * @return {?} */ function (newDescription, oldDescription) { /** @type {?} */ var 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 = function () { return [ { 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",] }] }; return XmatBadgeDirective; }()); export { XmatBadgeDirective }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1hdC1iYWRnZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtbWF0LWxpYi8iLCJzb3VyY2VzIjpbImxpYi9kaXJlY3RpdmVzL3htYXQtYmFkZ2UveG1hdC1iYWRnZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQ0gsU0FBUyxFQUFFLFVBQVUsRUFDckIsS0FBSyxFQUNMLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7O0lBNkduQiw0QkFBb0IsT0FBZSxFQUNmLGdCQUNBLFdBQ1IsVUFBc0I7UUFIZCxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsbUJBQWMsR0FBZCxjQUFjO1FBQ2QsY0FBUyxHQUFULFNBQVM7Ozs7O1FBakY3QixZQUE4QyxRQUFRLENBQUM7Ozs7OztRQU92RCxnQkFBMEQsYUFBYSxDQUFDOzs7O1FBMkR4RSxrQkFBYSxLQUFLLENBQUM7Ozs7UUFFbkIsVUFBYSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztzQkFHVixTQUFTO3dCQUtaLElBQUk7O1FBUzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQWMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQzVFO0lBNUVELHNCQUNJLHFDQUFLOzs7O1FBS1Q7WUFDSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDdEI7UUFURCxxRUFBcUU7Ozs7OztRQUNyRSxVQUNVLEtBQW1CO1lBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDdkI7OztPQUFBO0lBT0Qsc0JBQ0ksdUNBQU87UUFGWCwyREFBMkQ7Ozs7O1FBQzNEO1lB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LFFBQVEsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDekQ7O0lBN0tMLDRCQUF3QixDQUFDLENBQUM7O2dCQWpCN0IsU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSxhQUFhO29CQUN2QixJQUFJLEVBQUU7d0JBQ0YsT0FBTyxFQUFFLFlBQVk7d0JBQ3JCLDRCQUE0QixFQUFFLFNBQVM7d0JBQ3ZDLDBCQUEwQixFQUFFLFdBQVc7d0JBQ3ZDLDBCQUEwQixFQUFFLFlBQVk7d0JBQ3hDLDJCQUEyQixFQUFFLFlBQVk7d0JBQ3pDLDBCQUEwQixFQUFFLFdBQVc7d0JBQ3ZDLDBCQUEwQixFQUFFLGtCQUFrQjt3QkFDOUMsMkJBQTJCLEVBQUUsbUJBQW1CO3dCQUNoRCwwQkFBMEIsRUFBRSxrQkFBa0I7d0JBQzlDLDJCQUEyQixFQUFFLHVCQUF1QjtxQkFDdkQ7aUJBQ0o7Ozs7Z0JBeEJHLE1BQU07Z0JBTEYsYUFBYTtnQkFPakIsU0FBUztnQkFKRSxVQUFVOzs7dUJBbUNwQixLQUFLLFNBQUMsZUFBZTsyQkFPckIsS0FBSyxTQUFDLG1CQUFtQjt3QkFHekIsS0FBSyxTQUFDLGdCQUFnQjswQkFXdEIsS0FBSyxTQUFDLGtCQUFrQjswQkFVeEIsS0FBSyxTQUFDLFdBQVc7OEJBWWpCLEtBQUssU0FBQyxzQkFBc0I7eUJBYTVCLEtBQUssU0FBQyxpQkFBaUI7OzZCQTlGNUI7O1NBOEJhLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXJpYURlc2NyaWJlcn0gZnJvbSBcIkBhbmd1bGFyL2Nkay9hMTF5XCI7XG5pbXBvcnQge2NvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2VyY2lvblwiO1xuaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBSZW5kZXJlcjJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7VGhlbWVQYWxldHRlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZVwiO1xuXG5leHBvcnQgdHlwZSBYbWF0QmFkZ2VQb3NpdGlvbiA9IFwiYWJvdmUgYWZ0ZXJcIiB8IFwiYWJvdmUgYmVmb3JlXCIgfCBcImJlbG93IGJlZm9yZVwiIHwgXCJiZWxvdyBhZnRlclwiO1xuZXhwb3J0IHR5cGUgWG1hdEJhZGdlU2l6ZSA9IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCI7XG5cbi8qKiBEaXJlY3RpdmUgdG8gZGlzcGxheSBhIHRleHQgYmFkZ2UuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogXCJbeG1hdEJhZGdlXVwiLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgXCJjbGFzc1wiOiBcInhtYXQtYmFkZ2VcIixcbiAgICAgICAgXCJbY2xhc3MueG1hdC1iYWRnZS1vdmVybGFwXVwiOiBcIm92ZXJsYXBcIixcbiAgICAgICAgXCJbY2xhc3MueG1hdC1iYWRnZS1hYm92ZV1cIjogXCJpc0Fib3ZlKClcIixcbiAgICAgICAgXCJbY2xhc3MueG1hdC1iYWRnZS1iZWxvd11cIjogXCIhaXNBYm92ZSgpXCIsXG4gICAgICAgIFwiW2NsYXNzLnhtYXQtYmFkZ2UtYmVmb3JlXVwiOiBcIiFpc0FmdGVyKClcIixcbiAgICAgICAgXCJbY2xhc3MueG1hdC1iYWRnZS1hZnRlcl1cIjogXCJpc0FmdGVyKClcIixcbiAgICAgICAgXCJbY2xhc3MueG1hdC1iYWRnZS1zbWFsbF1cIjogXCJzaXplID09PSAnc21hbGwnXCIsXG4gICAgICAgIFwiW2NsYXNzLnhtYXQtYmFkZ2UtbWVkaXVtXVwiOiBcInNpemUgPT09ICdtZWRpdW0nXCIsXG4gICAgICAgIFwiW2NsYXNzLnhtYXQtYmFkZ2UtbGFyZ2VdXCI6IFwic2l6ZSA9PT0gJ2xhcmdlJ1wiLFxuICAgICAgICBcIltjbGFzcy54bWF0LWJhZGdlLWhpZGRlbl1cIjogXCJoaWRkZW4gfHwgIWhhc0NvbnRlbnRcIixcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBYbWF0QmFkZ2VEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgc3RhdGljIG5leHRJZDogbnVtYmVyID0gMDtcblxuICAgIC8qXG4gICAgICogU2l6ZSBvZiB0aGUgYmFkZ2UuIENhbiBiZSBcInNtYWxsXCIsIFwibWVkaXVtXCIsIG9yIFwibGFyZ2VcIi5cbiAgICAgKi9cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gICAgQElucHV0KFwieG1hdEJhZGdlU2l6ZVwiKSBzaXplOiBYbWF0QmFkZ2VTaXplID0gXCJtZWRpdW1cIjtcblxuICAgIC8qXG4gICAgICogUG9zaXRpb24gdGhlIGJhZGdlIHNob3VsZCByZXNpZGUuXG4gICAgICogQWNjZXB0cyBhbnkgY29tYmluYXRpb24gb2YgXCJhYm92ZVwifFwiYmVsb3dcIiBhbmQgXCJiZWZvcmVcInxcImFmdGVyXCJcbiAgICAgKi9cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gICAgQElucHV0KFwieG1hdEJhZGdlUG9zaXRpb25cIikgcG9zaXRpb246IFhtYXRCYWRnZVBvc2l0aW9uID0gXCJiZWxvdyBhZnRlclwiO1xuXG4gICAgLyoqIFRoZSBjb2xvciBvZiB0aGUgYmFkZ2UuIENhbiBiZSBgcHJpbWFyeWAsIGBhY2NlbnRgLCBvciBgd2FybmAuICovXG4gICAgQElucHV0KFwieG1hdEJhZGdlQ29sb3JcIilcbiAgICBzZXQgY29sb3IodmFsdWU6IFRoZW1lUGFsZXR0ZSkge1xuICAgICAgICB0aGlzLl9zZXRDb2xvcih2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2NvbG9yID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGNvbG9yKCk6IFRoZW1lUGFsZXR0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xvcjtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgYmFkZ2Ugc2hvdWxkIG92ZXJsYXAgaXRzIGNvbnRlbnRzIG9yIG5vdCAqL1xuICAgIEBJbnB1dChcInhtYXRCYWRnZU92ZXJsYXBcIilcbiAgICBnZXQgb3ZlcmxhcCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX292ZXJsYXA7XG4gICAgfVxuXG4gICAgc2V0IG92ZXJsYXAodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX292ZXJsYXAgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIGNvbnRlbnQgZm9yIHRoZSBiYWRnZSAqL1xuICAgIEBJbnB1dChcInhtYXRCYWRnZVwiKVxuICAgIHNldCBjb250ZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY29udGVudCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmhhc0NvbnRlbnQgPSB2YWx1ZSAhPSBudWxsICYmIGAke3ZhbHVlfWAudHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVRleHRDb250ZW50KCk7XG4gICAgfVxuXG4gICAgZ2V0IGNvbnRlbnQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnQ7XG4gICAgfVxuXG4gICAgLyoqIE1lc3NhZ2UgdXNlZCB0byBkZXNjcmliZSB0aGUgZGVjb3JhdGVkIGVsZW1lbnQgdmlhIGFyaWEtZGVzY3JpYmVkYnkgKi9cbiAgICBASW5wdXQoXCJ4bWF0QmFkZ2VEZXNjcmlwdGlvblwiKVxuICAgIHNldCBkZXNjcmlwdGlvbihuZXdEZXNjcmlwdGlvbjogc3RyaW5nKSB7XG4gICAgICAgIGlmIChuZXdEZXNjcmlwdGlvbiAhPT0gdGhpcy5fZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhvc3RBcmlhRGVzY3JpcHRpb24obmV3RGVzY3JpcHRpb24sIHRoaXMuX2Rlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0gbmV3RGVzY3JpcHRpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBiYWRnZSBpcyBoaWRkZW4uICovXG4gICAgQElucHV0KFwieG1hdEJhZGdlSGlkZGVuXCIpXG4gICAgZ2V0IGhpZGRlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGRlbjtcbiAgICB9XG5cbiAgICBzZXQgaGlkZGVuKHZhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9oaWRkZW4gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsKTtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgYmFkZ2UgaGFzIGFueSBjb250ZW50LiAqL1xuICAgIGhhc0NvbnRlbnQgPSBmYWxzZTtcbiAgICAvKiogVW5pcXVlIGlkIGZvciB0aGUgYmFkZ2UgKi9cbiAgICBpZDogbnVtYmVyID0gWG1hdEJhZGdlRGlyZWN0aXZlLm5leHRJZCsrO1xuXG4gICAgcHJpdmF0ZSBfYmFkZ2VFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIF9jb2xvcjogVGhlbWVQYWxldHRlID0gXCJwcmltYXJ5XCI7XG4gICAgcHJpdmF0ZSBfY29udGVudDogc3RyaW5nO1xuICAgIHByaXZhdGUgX2Rlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgcHJpdmF0ZSBfaGlkZGVuOiBib29sZWFuO1xuICAgIHByaXZhdGUgX292ZXJsYXA6IGJvb2xlYW4gPSB0cnVlO1xuXG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9hcmlhRGVzY3JpYmVyOiBBcmlhRGVzY3JpYmVyLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgICAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuXG4gICAgICAgIC8vIEJyaWRnZSB0byB0aGUgbmV3IEFuZ3VsYXI2IHR5cGVkIEVsZW1lbnRSZWZcbiAgICAgICAgdGhpcy5fZWxlbWVudFJlZiA9IG5ldyBFbGVtZW50UmVmPEhUTUxFbGVtZW50PihlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBiYWRnZSBpcyBhYm92ZSB0aGUgaG9zdCBvciBub3QgKi9cbiAgICBpc0Fib3ZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi5pbmRleE9mKFwiYmVsb3dcIikgPT09IC0xO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBiYWRnZSBpcyBhZnRlciB0aGUgaG9zdCBvciBub3QgKi9cbiAgICBpc0FmdGVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi5pbmRleE9mKFwiYmVmb3JlXCIpID09PSAtMTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRpb24gJiYgdGhpcy5fYmFkZ2VFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9hcmlhRGVzY3JpYmVyLnJlbW92ZURlc2NyaXB0aW9uKHRoaXMuX2JhZGdlRWxlbWVudCwgdGhpcy5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSW5qZWN0cyBhIHNwYW4gZWxlbWVudCBpbnRvIHRoZSBET00gd2l0aCB0aGUgY29udGVudC4gKi9cbiAgICBwcml2YXRlIF91cGRhdGVUZXh0Q29udGVudCgpOiBIVE1MU3BhbkVsZW1lbnQge1xuICAgICAgICBpZiAoIXRoaXMuX2JhZGdlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fYmFkZ2VFbGVtZW50ID0gdGhpcy5fY3JlYXRlQmFkZ2VFbGVtZW50KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9iYWRnZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2JhZGdlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlcyB0aGUgYmFkZ2UgZWxlbWVudCAqL1xuICAgIHByaXZhdGUgX2NyZWF0ZUJhZGdlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHJvb3ROb2RlID0gdGhpcy5fcmVuZGVyZXI7XG4gICAgICAgIGNvbnN0IGJhZGdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgICBjb25zdCBhY3RpdmVDbGFzcyA9IFwieG1hdC1iYWRnZS1hY3RpdmVcIjtcblxuICAgICAgICBiYWRnZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiaWRcIiwgYHhtYXQtYmFkZ2UtY29udGVudC0ke3RoaXMuaWR9YCk7XG4gICAgICAgIGJhZGdlRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwieG1hdC1iYWRnZS1jb250ZW50XCIpO1xuICAgICAgICBiYWRnZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG5cbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGJhZGdlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIHRoaXMuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGJhZGdlRWxlbWVudCk7XG5cbiAgICAgICAgLy8gYW5pbWF0ZSBpbiBhZnRlciBpbnNlcnRpb25cbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBiYWRnZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChhY3RpdmVDbGFzcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJhZGdlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBiYWRnZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIEFkZHMgY3NzIHRoZW1lIGNsYXNzIGdpdmVuIHRoZSBjb2xvciB0byB0aGUgY29tcG9uZW50IGhvc3QgKi9cbiAgICBwcml2YXRlIF9zZXRDb2xvcihjb2xvclBhbGV0dGU6IFRoZW1lUGFsZXR0ZSkge1xuICAgICAgICBpZiAoY29sb3JQYWxldHRlICE9PSB0aGlzLl9jb2xvcikge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoYHhtYXQtYmFkZ2UtJHt0aGlzLl9jb2xvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2xvclBhbGV0dGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgeG1hdC1iYWRnZS0ke2NvbG9yUGFsZXR0ZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTZXRzIHRoZSBhcmlhLWxhYmVsIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50ICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlSG9zdEFyaWFEZXNjcmlwdGlvbihuZXdEZXNjcmlwdGlvbjogc3RyaW5nLCBvbGREZXNjcmlwdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIC8vIGVuc3VyZSBjb250ZW50IGF2YWlsYWJsZSBiZWZvcmUgc2V0dGluZyBsYWJlbFxuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5fdXBkYXRlVGV4dENvbnRlbnQoKTtcblxuICAgICAgICBpZiAob2xkRGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24oY29udGVudCwgb2xkRGVzY3JpcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld0Rlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9hcmlhRGVzY3JpYmVyLmRlc2NyaWJlKGNvbnRlbnQsIG5ld0Rlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19