ngx-mat-lib
Version:
A bunch of utilities and components to use in your Angular 7+ apps!
352 lines (351 loc) • 26.6 kB
JavaScript
/**
* @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