angular-line-awesome
Version:
Angular Line Awesome is an Angular component to manage Line Awesome icons.
135 lines • 22 kB
JavaScript
import { Component, Input, HostBinding, Optional, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';
import { parseTransformString, applyCssTransforms, faNormalizeIcon, laClassList, IconNamePrefix as prefix } from '../../line-awesome.core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/platform-browser";
import * as i2 from "../../services/la-icon-library.service";
import * as i3 from "../../directives/la-stack-item-size/la-stack-item-size.directive";
export class LaIconComponent {
/**
* Specify a title for the icon.
* This text will be displayed in a tooltip on hover and presented to the
* screen readers.
*/
get titleAttr() {
return this.title;
}
constructor(sanitizer, renderer, iconRegistry, stackItem) {
this.sanitizer = sanitizer;
this.renderer = renderer;
this.iconRegistry = iconRegistry;
this.stackItem = stackItem;
this.classes = [];
}
/**
* Programmatically trigger rendering of the icon.
*
* This method is useful, when creating dynamically or
* changing its inputs programmatically as in these cases icon won't be
* re-rendered automatically.
*/
render() {
this.ngOnChanges({});
}
ngOnChanges(changes) {
if (!this.icon) {
throw new Error('Property `icon` is required for `la-icon` component.');
}
if (changes) {
const iconDefinition = faNormalizeIcon(this.icon);
const params = this.buildParams();
this.renderIcon(iconDefinition, params);
}
}
buildParams() {
const classOpts = {
flip: this.flip,
spin: this.spin,
pulse: this.pulse,
border: this.border,
inverse: this.inverse,
size: this.size || null,
pull: this.pull || null,
rotate: this.rotate || null,
fixedWidth: this.fixedWidth,
stackItemSize: this.stackItem ? this.stackItem.stackItemSize : null
};
const parsedTransform = typeof this.transform === 'string'
? parseTransformString(this.transform)
: this.transform || {};
return {
title: this.title,
transform: parsedTransform,
classes: [...laClassList(classOpts), ...this.classes],
styles: this.styles != null ? this.styles : {}
};
}
renderIcon(definition, params) {
const svgData = this.iconRegistry.getIcon(definition);
const renderedIcon = this.svgElementFromString(svgData);
const attributes = {
'aria-hidden': 'true',
role: 'img',
focusable: 'false',
// Note: prefix and prefix-icon-name classes are helpfully to make the tests
class: [definition.prefix, `${prefix}-${definition.iconName}`, ...params.classes].join(' ')
};
// Apply attributes, note the classes also goes here
for (const [key, value] of Object.entries(attributes)) {
this.renderer.setAttribute(renderedIcon, key, value);
}
// Apply css transforms
this.renderer.setStyle(renderedIcon, 'transform', applyCssTransforms(params.transform));
// Inject svg icon
this.renderedIconHTML = this.sanitizer.bypassSecurityTrustHtml(renderedIcon.outerHTML);
}
svgElementFromString(svgContent) {
const div = this.renderer.createElement('div');
div.innerHTML = svgContent;
return div.querySelector('svg');
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: LaIconComponent, deps: [{ token: i1.DomSanitizer }, { token: i0.Renderer2 }, { token: i2.LaIconLibrary }, { token: i3.LaStackItemSizeDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: LaIconComponent, selector: "la-icon", inputs: { icon: "icon", size: "size", fixedWidth: "fixedWidth", rotate: "rotate", flip: "flip", pull: "pull", spin: "spin", pulse: "pulse", border: "border", inverse: "inverse", styles: "styles", classes: "classes", transform: "transform", mask: "mask", title: "title" }, host: { properties: { "innerHTML": "this.renderedIconHTML", "attr.title": "this.titleAttr" } }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, styles: [".la-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.la-xs{font-size:.75em}.la-2x{font-size:1em}.la-2x{font-size:2em}.la-3x{font-size:3em}.la-4x{font-size:4em}.la-5x{font-size:5em}.la-6x{font-size:6em}.la-7x{font-size:7em}.la-8x{font-size:8em}.la-9x{font-size:9em}.la-10x{font-size:10em}.la-fw{text-align:center;width:1.25em}.la-fw{width:1.25em;text-align:center}.la-ul{padding-left:0;margin-left:1.4285714286em;list-style-type:none}.la-ul>li{position:relative}.la-li{position:absolute;left:-2em;text-align:center;width:1.4285714286em;line-height:inherit}.la-li.la-lg{left:-1.1428571429em}.la-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.la.la-pull-left{margin-right:.3em}.la.la-pull-right{margin-left:.3em}.la.pull-left{margin-right:.3em}.la.pull-right{margin-left:.3em}.la-pull-left{float:left}.la-pull-right{float:right}.la.la-pull-left,.las.la-pull-left,.lar.la-pull-left,.lal.la-pull-left,.lab.la-pull-left{margin-right:.3em}.la.la-pull-right,.las.la-pull-right,.lar.la-pull-right,.lal.la-pull-right,.lab.la-pull-right{margin-left:.3em}.la-spin{animation:la-spin 2s infinite linear}.la-pulse{animation:la-spin 1s infinite steps(8)}@keyframes la-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.la-rotate-90{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";transform:rotate(90deg)}.la-rotate-180{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";transform:rotate(180deg)}.la-rotate-270{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";transform:rotate(270deg)}.la-flip-horizontal{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";transform:scaleX(-1)}.la-flip-vertical{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";transform:scaleY(-1)}.la-flip-both,.la-flip-horizontal.la-flip-vertical{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";transform:scale(-1)}:root .la-rotate-90,:root .la-rotate-180,:root .la-rotate-270,:root .la-flip-horizontal,:root .la-flip-vertical,:root .la-flip-both{filter:none}.la-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.la-stack-1x,.la-stack-2x{left:0;position:absolute;text-align:center;width:100%}.la-stack-1x{line-height:inherit}.la-stack-2x{font-size:2em}.la-inverse{color:#fff}svg{display:inline-block;height:1em;overflow:visible;vertical-align:-.125em;fill:currentColor}svg:not(:root){overflow:hidden}.la-stack-1x{margin-top:.5em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: LaIconComponent, decorators: [{
type: Component,
args: [{ selector: 'la-icon', template: '', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".la-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.la-xs{font-size:.75em}.la-2x{font-size:1em}.la-2x{font-size:2em}.la-3x{font-size:3em}.la-4x{font-size:4em}.la-5x{font-size:5em}.la-6x{font-size:6em}.la-7x{font-size:7em}.la-8x{font-size:8em}.la-9x{font-size:9em}.la-10x{font-size:10em}.la-fw{text-align:center;width:1.25em}.la-fw{width:1.25em;text-align:center}.la-ul{padding-left:0;margin-left:1.4285714286em;list-style-type:none}.la-ul>li{position:relative}.la-li{position:absolute;left:-2em;text-align:center;width:1.4285714286em;line-height:inherit}.la-li.la-lg{left:-1.1428571429em}.la-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.la.la-pull-left{margin-right:.3em}.la.la-pull-right{margin-left:.3em}.la.pull-left{margin-right:.3em}.la.pull-right{margin-left:.3em}.la-pull-left{float:left}.la-pull-right{float:right}.la.la-pull-left,.las.la-pull-left,.lar.la-pull-left,.lal.la-pull-left,.lab.la-pull-left{margin-right:.3em}.la.la-pull-right,.las.la-pull-right,.lar.la-pull-right,.lal.la-pull-right,.lab.la-pull-right{margin-left:.3em}.la-spin{animation:la-spin 2s infinite linear}.la-pulse{animation:la-spin 1s infinite steps(8)}@keyframes la-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.la-rotate-90{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";transform:rotate(90deg)}.la-rotate-180{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";transform:rotate(180deg)}.la-rotate-270{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";transform:rotate(270deg)}.la-flip-horizontal{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";transform:scaleX(-1)}.la-flip-vertical{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";transform:scaleY(-1)}.la-flip-both,.la-flip-horizontal.la-flip-vertical{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";transform:scale(-1)}:root .la-rotate-90,:root .la-rotate-180,:root .la-rotate-270,:root .la-flip-horizontal,:root .la-flip-vertical,:root .la-flip-both{filter:none}.la-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.la-stack-1x,.la-stack-2x{left:0;position:absolute;text-align:center;width:100%}.la-stack-1x{line-height:inherit}.la-stack-2x{font-size:2em}.la-inverse{color:#fff}svg{display:inline-block;height:1em;overflow:visible;vertical-align:-.125em;fill:currentColor}svg:not(:root){overflow:hidden}.la-stack-1x{margin-top:.5em}\n"] }]
}], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i0.Renderer2 }, { type: i2.LaIconLibrary }, { type: i3.LaStackItemSizeDirective, decorators: [{
type: Optional
}] }], propDecorators: { icon: [{
type: Input
}], size: [{
type: Input
}], fixedWidth: [{
type: Input
}], rotate: [{
type: Input
}], flip: [{
type: Input
}], pull: [{
type: Input
}], spin: [{
type: Input
}], pulse: [{
type: Input
}], border: [{
type: Input
}], inverse: [{
type: Input
}], styles: [{
type: Input
}], classes: [{
type: Input
}], transform: [{
type: Input
}], mask: [{
type: Input
}], title: [{
type: Input
}], renderedIconHTML: [{
type: HostBinding,
args: ['innerHTML']
}], titleAttr: [{
type: HostBinding,
args: ['attr.title']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGEtaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWxpbmUtYXdlc29tZS9zcmMvbGliL2NvbXBvbmVudHMvbGEtaWNvbi9sYS1pY29uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxXQUFXLEVBRVgsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQVdMLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLFdBQVcsRUFDWCxjQUFjLElBQUksTUFBTSxFQUN6QixNQUFNLHlCQUF5QixDQUFDOzs7OztBQVdqQyxNQUFNLE9BQU8sZUFBZTtJQWtCMUI7Ozs7T0FJRztJQUNILElBQ0ksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsWUFDVSxTQUF1QixFQUN2QixRQUFtQixFQUNuQixZQUEyQixFQUNmLFNBQW1DO1FBSC9DLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUNmLGNBQVMsR0FBVCxTQUFTLENBQTBCO1FBcEJoRCxZQUFPLEdBQWMsRUFBRSxDQUFDO0lBcUI5QixDQUFDO0lBRUo7Ozs7OztPQU1HO0lBQ0gsTUFBTTtRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztTQUN6RTtRQUVELElBQUksT0FBTyxFQUFFO1lBQ1gsTUFBTSxjQUFjLEdBQUcs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R0FBRyxHQUFnQixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RCxHQUFHLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQztRQUMzQixPQUFPLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQzs4R0E3R1UsZUFBZTtrR0FBZixlQUFlLG9iQUxoQixFQUFFOzsyRkFLRCxlQUFlO2tCQVIzQixTQUFTOytCQUVFLFNBQVMsWUFDVCxFQUFFLG1CQUVLLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7OzBCQWtDbEMsUUFBUTt5Q0EvQkYsSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFb0IsZ0JBQWdCO3NCQUF6QyxXQUFXO3VCQUFDLFdBQVc7Z0JBT3BCLFNBQVM7c0JBRFosV0FBVzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBIb3N0QmluZGluZyxcbiAgUmVuZGVyZXIyLFxuICBPcHRpb25hbCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2FmZUh0bWwsIERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgTGFTdGFja0l0ZW1TaXplRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9sYS1zdGFjay1pdGVtLXNpemUvbGEtc3RhY2staXRlbS1zaXplLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICBTaXplUHJvcCxcbiAgU3R5bGVzLFxuICBQdWxsUHJvcCxcbiAgUm90YXRlUHJvcCxcbiAgVHJhbnNmb3JtLFxuICBGbGlwUHJvcCxcbiAgTGFQcm9wcyxcbiAgSWNvblBhcmFtcyxcbiAgSWNvblByb3AsXG4gIEljb24sXG4gIHBhcnNlVHJhbnNmb3JtU3RyaW5nLFxuICBhcHBseUNzc1RyYW5zZm9ybXMsXG4gIGZhTm9ybWFsaXplSWNvbixcbiAgbGFDbGFzc0xpc3QsXG4gIEljb25OYW1lUHJlZml4IGFzIHByZWZpeFxufSBmcm9tICcuLi8uLi9saW5lLWF3ZXNvbWUuY29yZSc7XG5pbXBvcnQgeyBMYUljb25MaWJyYXJ5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGEtaWNvbi1saWJyYXJ5LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsYS1pY29uJyxcbiAgdGVtcGxhdGU6ICcnLFxuICBzdHlsZVVybHM6IFsnLi9sYS1pY29uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIExhSWNvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGljb246IEljb25Qcm9wO1xuICBASW5wdXQoKSBzaXplPzogU2l6ZVByb3A7XG4gIEBJbnB1dCgpIGZpeGVkV2lkdGg/OiBib29sZWFuO1xuICBASW5wdXQoKSByb3RhdGU/OiBSb3RhdGVQcm9wO1xuICBASW5wdXQoKSBmbGlwPzogRmxpcFByb3A7XG4gIEBJbnB1dCgpIHB1bGw/OiBQdWxsUHJvcDtcbiAgQElucHV0KCkgc3Bpbj86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHB1bHNlPzogYm9vbGVhbjtcbiAgQElucHV0KCkgYm9yZGVyPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaW52ZXJzZT86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHN0eWxlcz86IFN0eWxlcztcbiAgQElucHV0KCkgY2xhc3Nlcz86IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIHRyYW5zZm9ybT86IHN0cmluZyB8IFRyYW5zZm9ybTtcbiAgQElucHV0KCkgbWFzaz86IEljb25Qcm9wO1xuICBASW5wdXQoKSB0aXRsZT86IHN0cmluZztcblxuICBASG9zdEJpbmRpbmcoJ2lubmVySFRNTCcpIHJlbmRlcmVkSWNvbkhUTUw6IFNhZmVIdG1sO1xuICAvKipcbiAgICogU3BlY2lmeSBhIHRpdGxlIGZvciB0aGUgaWNvbi5cbiAgICogVGhpcyB0ZXh0IHdpbGwgYmUgZGlzcGxheWVkIGluIGEgdG9vbHRpcCBvbiBob3ZlciBhbmQgcHJlc2VudGVkIHRvIHRoZVxuICAgKiBzY3JlZW4gcmVhZGVycy5cbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci50aXRsZScpXG4gIGdldCB0aXRsZUF0dHIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50aXRsZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgaWNvblJlZ2lzdHJ5OiBMYUljb25MaWJyYXJ5LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgc3RhY2tJdGVtOiBMYVN0YWNrSXRlbVNpemVEaXJlY3RpdmVcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBQcm9ncmFtbWF0aWNhbGx5IHRyaWdnZXIgcmVuZGVyaW5nIG9mIHRoZSBpY29uLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwsIHdoZW4gY3JlYXRpbmcgZHluYW1pY2FsbHkgb3JcbiAgICogY2hhbmdpbmcgaXRzIGlucHV0cyBwcm9ncmFtbWF0aWNhbGx5IGFzIGluIHRoZXNlIGNhc2VzIGljb24gd29uJ3QgYmVcbiAgICogcmUtcmVuZGVyZWQgYXV0b21hdGljYWxseS5cbiAgICovXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLm5nT25DaGFuZ2VzKHt9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoIXRoaXMuaWNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eSBgaWNvbmAgaXMgcmVxdWlyZWQgZm9yIGBsYS1pY29uYCBjb21wb25lbnQuJyk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgIGNvbnN0IGljb25EZWZpbml0aW9uID0gZmFOb3JtYWxpemVJY29uKHRoaXMuaWNvbik7XG4gICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmJ1aWxkUGFyYW1zKCk7XG4gICAgICB0aGlzLnJlbmRlckljb24oaWNvbkRlZmluaXRpb24sIHBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkUGFyYW1zKCkge1xuICAgIGNvbnN0IGNsYXNzT3B0czogTGFQcm9wcyA9IHtcbiAgICAgIGZsaXA6IHRoaXMuZmxpcCxcbiAgICAgIHNwaW46IHRoaXMuc3BpbixcbiAgICAgIHB1bHNlOiB0aGlzLnB1bHNlLFxuICAgICAgYm9yZGVyOiB0aGlzLmJvcmRlcixcbiAgICAgIGludmVyc2U6IHRoaXMuaW52ZXJzZSxcbiAgICAgIHNpemU6IHRoaXMuc2l6ZSB8fCBudWxsLFxuICAgICAgcHVsbDogdGhpcy5wdWxsIHx8IG51bGwsXG4gICAgICByb3RhdGU6IHRoaXMucm90YXRlIHx8IG51bGwsXG4gICAgICBmaXhlZFdpZHRoOiB0aGlzLmZpeGVkV2lkdGgsXG4gICAgICBzdGFja0l0ZW1TaXplOiB0aGlzLnN0YWNrSXRlbSA/IHRoaXMuc3RhY2tJdGVtLnN0YWNrSXRlbVNpemUgOiBudWxsXG4gICAgfTtcblxuICAgIGNvbnN0IHBhcnNlZFRyYW5zZm9ybSA9XG4gICAgICB0eXBlb2YgdGhpcy50cmFuc2Zvcm0gPT09ICdzdHJpbmcnXG4gICAgICAgID8gcGFyc2VUcmFuc2Zvcm1TdHJpbmcodGhpcy50cmFuc2Zvcm0pXG4gICAgICAgIDogdGhpcy50cmFuc2Zvcm0gfHwge307XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGU6IHRoaXMudGl0bGUsXG4gICAgICB0cmFuc2Zvcm06IHBhcnNlZFRyYW5zZm9ybSxcbiAgICAgIGNsYXNzZXM6IFsuLi5sYUNsYXNzTGlzdChjbGFzc09wdHMpLCAuLi50aGlzLmNsYXNzZXNdLFxuICAgICAgc3R5bGVzOiB0aGlzLnN0eWxlcyAhPSBudWxsID8gdGhpcy5zdHlsZXMgOiB7fVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckljb24oZGVmaW5pdGlvbjogSWNvbiwgcGFyYW1zOiBJY29uUGFyYW1zKSB7XG4gICAgY29uc3Qgc3ZnRGF0YSA9IHRoaXMuaWNvblJlZ2lzdHJ5LmdldEljb24oZGVmaW5pdGlvbik7XG4gICAgY29uc3QgcmVuZGVyZWRJY29uOiBTVkdFbGVtZW50ID0gdGhpcy5zdmdFbGVtZW50RnJvbVN0cmluZyhzdmdEYXRhKTtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgJ2FyaWEtaGlkZGVuJzogJ3RydWUnLFxuICAgICAgcm9sZTogJ2ltZycsXG4gICAgICBmb2N1c2FibGU6ICdmYWxzZScsXG4gICAgICAvLyBOb3RlOiBwcmVmaXggYW5kIHByZWZpeC1pY29uLW5hbWUgY2xhc3NlcyBhcmUgaGVscGZ1bGx5IHRvIG1ha2UgdGhlIHRlc3RzXG4gICAgICBjbGFzczogW2RlZmluaXRpb24ucHJlZml4LCBgJHtwcmVmaXh9LSR7ZGVmaW5pdGlvbi5pY29uTmFtZX1gLCAuLi5wYXJhbXMuY2xhc3Nlc10uam9pbignICcpXG4gICAgfTtcbiAgICAvLyBBcHBseSBhdHRyaWJ1dGVzLCBub3RlIHRoZSBjbGFzc2VzIGFsc28gZ29lcyBoZXJlXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHJlbmRlcmVkSWNvbiwga2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIC8vIEFwcGx5IGNzcyB0cmFuc2Zvcm1zXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShyZW5kZXJlZEljb24sICd0cmFuc2Zvcm0nLCBhcHBseUNzc1RyYW5zZm9ybXMocGFyYW1zLnRyYW5zZm9ybSkpO1xuICAgIC8vIEluamVjdCBzdmcgaWNvblxuICAgIHRoaXMucmVuZGVyZWRJY29uSFRNTCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHJlbmRlcmVkSWNvbi5vdXRlckhUTUwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdmdFbGVtZW50RnJvbVN0cmluZyhzdmdDb250ZW50OiBzdHJpbmcpOiBTVkdFbGVtZW50IHtcbiAgICBjb25zdCBkaXY6IEhUTUxFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYuaW5uZXJIVE1MID0gc3ZnQ29udGVudDtcbiAgICByZXR1cm4gZGl2LnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpO1xuICB9XG59XG4iXX0=