UNPKG

@edugouvfr/ngx-dsfr

Version:

NgxDsfr est un portage Angular des éléments d'interface du Système de Design de l'État Français (DSFR).

125 lines 25.4 kB
import { CommonModule, NgOptimizedImage } from '@angular/common'; import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core'; import { DsfrSizeConst } from '../../shared'; import { DsfrLinkComponent } from '../link'; import { DsfrTranscriptionComponent } from '../transcription'; import * as i0 from "@angular/core"; import * as i1 from "@angular/platform-browser"; import * as i2 from "../../shared/services/logger.service"; import * as i3 from "@angular/common"; export class DsfrContentComponent { constructor(sanitizer, loggerService) { this.sanitizer = sanitizer; this.loggerService = loggerService; // -- Commun images / vidéos ----------------------------------------------------------------------------------------- /** Type du média 'image' | 'video', 'image' par défaut. */ this.type = 'image'; /** Le format conseillé par défaut est le 16:9. */ this.ratio = '16:9'; // ------------------------------------------------------------------------------------------------------------------- /** * Si une route est spécifiée, émet un événement avec la route comme valeur, sinon n'émet rien. */ this.linkSelect = new EventEmitter(); this._size = DsfrSizeConst.MD; } get size() { return this._size; } /** @deprecated (since 1.6) utiliser `transcriptionContent` à la place */ get transcription() { return this.transcriptionContent; } /** @deprecated (since 1.6) utiliser `transcriptionLinkLabel` à la place */ get transcriptionLabel() { return this.linkLabel; } /** @deprecated (since 1.6) utiliser `transcriptionContent` à la place */ set transcription(value) { this.transcriptionContent = value; } /** @deprecated (since 1.6) utiliser `transcriptionLinkLabel` à la place */ set transcriptionLabel(value) { this.linkLabel = value; } /** Redimensionnement du composant : `LG` : 125%, `MD` : 100% (défault), `SM` : 75%. */ set size(value) { this._size = value?.toUpperCase(); } /** * @deprecated (since 1.11.5) utiliser `routePath` à la place. * routerLink provoque un bug accessibilité sur la navigation au clavier (ajout d'un tabindex=0) **/ set routerLink(value) { if (value) this.routePath = value; } ngOnInit() { this.verifyAccessibility(); } /** @internal */ onLinkSelect() { if (this.route) { this.linkSelect.emit(this.route); } } /** * @internal */ sanitizedSource() { return this.sanitizer.bypassSecurityTrustResourceUrl(this.source); } verifyAccessibility() { const missingVideoTitle = this.type === 'video' && !this.tooltipMessage; if (missingVideoTitle) { this.loggerService.warn('dsfr-content : Renseigner le titre du contenu est obligatoire (tooltipMessage).'); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrContentComponent, deps: [{ token: i1.DomSanitizer }, { token: i2.LoggerService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DsfrContentComponent, isStandalone: true, selector: "dsfr-content", inputs: { type: "type", legend: "legend", ratio: "ratio", source: "source", linkLabel: "linkLabel", link: "link", linkTarget: "linkTarget", route: "route", routePath: "routePath", routerLinkActive: "routerLinkActive", routerLinkExtras: "routerLinkExtras", tooltipMessage: "tooltipMessage", transcriptionContent: "transcriptionContent", transcriptionHeading: "transcriptionHeading", alternate: "alternate", transcription: "transcription", transcriptionLabel: "transcriptionLabel", size: "size", routerLink: "routerLink" }, outputs: { linkSelect: "linkSelect" }, ngImport: i0, template: "<figure\n class=\"fr-content-media\"\n [class.fr-content-media--lg]=\"size === 'LG'\"\n [class.fr-content-media--sm]=\"size === 'SM'\"\n role=\"group\"\n [attr.aria-label]=\"legend\">\n @if (type === 'image') {\n <div class=\"fr-content-media__img\">\n @if (source) {\n <img\n class=\"fr-responsive-img\"\n [attr.title]=\"tooltipMessage || null\"\n [ngClass]=\"{\n 'fr-ratio-32x9': ratio === '16:9/2',\n 'fr-ratio-16x9': ratio === '16:9',\n 'fr-ratio-3x2': ratio === '3:2',\n 'fr-ratio-4x3': ratio === '4:3',\n 'fr-ratio-1x1': ratio === '1:1',\n 'fr-ratio-3x4': ratio === '3:4',\n 'fr-ratio-2x3': ratio === '2:3'\n }\"\n [src]=\"source\"\n [alt]=\"alternate\" />\n }\n <!-- since 1.6 slot par d\u00E9faut d\u00E9pr\u00E9ci\u00E9 -->\n <ng-content></ng-content>\n <!-- since 1.6 ajout du slot 'svg' -->\n <ng-content select=\"[svg]\"></ng-content>\n </div>\n } @else if (type === 'video') {\n <iframe\n [attr.title]=\"tooltipMessage || null\"\n class=\"fr-responsive-vid\"\n [class.fr-ratio-16x9]=\"ratio === '16:9'\"\n [class.fr-ratio-4x3]=\"ratio === '4:3'\"\n [class.fr-ratio-1x1]=\"ratio === '1:1'\"\n [src]=\"sanitizedSource()\"\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen></iframe>\n }\n\n @if (legend || linkLabel) {\n <figcaption class=\"fr-content-media__caption\">\n {{ legend }}\n @if (linkLabel) {\n <dsfr-link\n [link]=\"link\"\n [label]=\"linkLabel\"\n [linkTarget]=\"linkTarget\"\n [route]=\"route\"\n [routePath]=\"routePath\"\n [routerLinkActive]=\"routerLinkActive ?? ''\"\n [routerLinkExtras]=\"routerLinkExtras\"\n (linkSelect)=\"onLinkSelect()\">\n </dsfr-link>\n }\n </figcaption>\n }\n</figure>\n@if (transcriptionContent) {\n <dsfr-transcription [heading]=\"transcriptionHeading\" [content]=\"transcriptionContent\"></dsfr-transcription>\n} @else {\n <!-- since 1.6 ajout du slot 'transcription' -->\n <ng-content select=\"[transcription]\"></ng-content>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: DsfrTranscriptionComponent, selector: "dsfr-transcription", inputs: ["content", "heading"] }, { kind: "component", type: DsfrLinkComponent, selector: "dsfr-link", inputs: ["ariaCurrent", "ariaLabel", "ariaControls", "customClass", "disabled", "icon", "iconPosition", "linkId", "label", "link", "linkTarget", "route", "routePath", "routerLinkActive", "routerLinkActiveOptions", "routerLinkExtras", "linkSize", "tooltipMessage", "mode", "ariaCurrentWhenActive", "size", "targetLink", "routerLink"], outputs: ["linkSelect"] }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrContentComponent, decorators: [{ type: Component, args: [{ selector: 'dsfr-content', encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule, DsfrTranscriptionComponent, DsfrLinkComponent, NgOptimizedImage], template: "<figure\n class=\"fr-content-media\"\n [class.fr-content-media--lg]=\"size === 'LG'\"\n [class.fr-content-media--sm]=\"size === 'SM'\"\n role=\"group\"\n [attr.aria-label]=\"legend\">\n @if (type === 'image') {\n <div class=\"fr-content-media__img\">\n @if (source) {\n <img\n class=\"fr-responsive-img\"\n [attr.title]=\"tooltipMessage || null\"\n [ngClass]=\"{\n 'fr-ratio-32x9': ratio === '16:9/2',\n 'fr-ratio-16x9': ratio === '16:9',\n 'fr-ratio-3x2': ratio === '3:2',\n 'fr-ratio-4x3': ratio === '4:3',\n 'fr-ratio-1x1': ratio === '1:1',\n 'fr-ratio-3x4': ratio === '3:4',\n 'fr-ratio-2x3': ratio === '2:3'\n }\"\n [src]=\"source\"\n [alt]=\"alternate\" />\n }\n <!-- since 1.6 slot par d\u00E9faut d\u00E9pr\u00E9ci\u00E9 -->\n <ng-content></ng-content>\n <!-- since 1.6 ajout du slot 'svg' -->\n <ng-content select=\"[svg]\"></ng-content>\n </div>\n } @else if (type === 'video') {\n <iframe\n [attr.title]=\"tooltipMessage || null\"\n class=\"fr-responsive-vid\"\n [class.fr-ratio-16x9]=\"ratio === '16:9'\"\n [class.fr-ratio-4x3]=\"ratio === '4:3'\"\n [class.fr-ratio-1x1]=\"ratio === '1:1'\"\n [src]=\"sanitizedSource()\"\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen></iframe>\n }\n\n @if (legend || linkLabel) {\n <figcaption class=\"fr-content-media__caption\">\n {{ legend }}\n @if (linkLabel) {\n <dsfr-link\n [link]=\"link\"\n [label]=\"linkLabel\"\n [linkTarget]=\"linkTarget\"\n [route]=\"route\"\n [routePath]=\"routePath\"\n [routerLinkActive]=\"routerLinkActive ?? ''\"\n [routerLinkExtras]=\"routerLinkExtras\"\n (linkSelect)=\"onLinkSelect()\">\n </dsfr-link>\n }\n </figcaption>\n }\n</figure>\n@if (transcriptionContent) {\n <dsfr-transcription [heading]=\"transcriptionHeading\" [content]=\"transcriptionContent\"></dsfr-transcription>\n} @else {\n <!-- since 1.6 ajout du slot 'transcription' -->\n <ng-content select=\"[transcription]\"></ng-content>\n}\n" }] }], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i2.LoggerService }], propDecorators: { type: [{ type: Input }], legend: [{ type: Input }], ratio: [{ type: Input }], source: [{ type: Input }], linkLabel: [{ type: Input }], link: [{ type: Input }], linkTarget: [{ type: Input }], route: [{ type: Input }], routePath: [{ type: Input }], routerLinkActive: [{ type: Input }], routerLinkExtras: [{ type: Input }], tooltipMessage: [{ type: Input }], transcriptionContent: [{ type: Input }], transcriptionHeading: [{ type: Input }], alternate: [{ type: Input }], linkSelect: [{ type: Output }], transcription: [{ type: Input }], transcriptionLabel: [{ type: Input }], size: [{ type: Input }], routerLink: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHNmci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jb250ZW50L2NvbnRlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY29udGVudC9jb250ZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2xHLE9BQU8sRUFBNEMsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXZGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7QUFjOUQsTUFBTSxPQUFPLG9CQUFvQjtJQStFL0IsWUFDVSxTQUF1QixFQUN2QixhQUE0QjtRQUQ1QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBaEZ0QyxzSEFBc0g7UUFFdEgsMkRBQTJEO1FBQ2xELFNBQUksR0FBYyxPQUFPLENBQUM7UUFLbkMsa0RBQWtEO1FBQ3pDLFVBQUssR0FBNEIsTUFBTSxDQUFDO1FBNERqRCxzSEFBc0g7UUFFdEg7O1dBRUc7UUFDTyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUUxQyxVQUFLLEdBQWEsYUFBYSxDQUFDLEVBQUUsQ0FBQztJQUt4QyxDQUFDO0lBRUosSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDbkMsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxJQUFhLGFBQWEsQ0FBQyxLQUFhO1FBQ3RDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxJQUFhLGtCQUFrQixDQUFDLEtBQWE7UUFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELHVGQUF1RjtJQUN2RixJQUFhLElBQUksQ0FBQyxLQUFlO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQWEsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7O1FBR0k7SUFDSixJQUFhLFVBQVUsQ0FBQyxLQUFvQztRQUMxRCxJQUFJLEtBQUs7WUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRXhFLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxpRkFBaUYsQ0FBQyxDQUFDO1FBQzdHLENBQUM7SUFDSCxDQUFDOytHQWpKVSxvQkFBb0I7bUdBQXBCLG9CQUFvQix5bkJDckJqQyx1dUVBaUVBLDJDRDlDWSxZQUFZLDZIQUFFLDBCQUEwQiwrRkFBRSxpQkFBaUI7OzRGQUUxRCxvQkFBb0I7a0JBUGhDLFNBQVM7K0JBQ0UsY0FBYyxpQkFFVCxpQkFBaUIsQ0FBQyxJQUFJLGNBQ3pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSwwQkFBMEIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQzs2R0FNL0UsSUFBSTtzQkFBWixLQUFLO2dCQUdHLE1BQU07c0JBQWQsS0FBSztnQkFHRyxLQUFLO3NCQUFiLEtBQUs7Z0JBR0csTUFBTTtzQkFBZCxLQUFLO2dCQVNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csS0FBSztzQkFBYixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQVNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFPRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBU0csU0FBUztzQkFBakIsS0FBSztnQkFPSSxVQUFVO3NCQUFuQixNQUFNO2dCQXdCTSxhQUFhO3NCQUF6QixLQUFLO2dCQUtPLGtCQUFrQjtzQkFBOUIsS0FBSztnQkFLTyxJQUFJO3NCQUFoQixLQUFLO2dCQVFPLFVBQVU7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nT3B0aW1pemVkSW1hZ2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkV4dHJhcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEc2ZyTGlua1RhcmdldCwgRHNmck5hdmlnYXRpb24sIERzZnJTaXplLCBEc2ZyU2l6ZUNvbnN0IH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRHNmckxpbmtDb21wb25lbnQgfSBmcm9tICcuLi9saW5rJztcbmltcG9ydCB7IERzZnJUcmFuc2NyaXB0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vdHJhbnNjcmlwdGlvbic7XG5pbXBvcnQgeyBEc2ZyTWVkaWEgfSBmcm9tICcuL2NvbnRlbnQubW9kZWwnO1xuXG4vLyBodHRwczovL3d3dy5zeXN0ZW1lLWRlLWRlc2lnbi5nb3V2LmZyL2VsZW1lbnRzLWQtaW50ZXJmYWNlL2ZvbmRhbWVudGF1eC10ZWNobmlxdWVzL21lZGlhcy9cbnR5cGUgUmF0aW9JbWFnZSA9ICcxNjo5LzInIHwgJzE2OjknIHwgJzM6MicgfCAnNDozJyB8ICcxOjEnIHwgJzM6NCcgfCAnMjozJztcbnR5cGUgUmF0aW9WaWRlbyA9ICcxNjo5JyB8ICc0OjMnIHwgJzE6MSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RzZnItY29udGVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZW50LmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRHNmclRyYW5zY3JpcHRpb25Db21wb25lbnQsIERzZnJMaW5rQ29tcG9uZW50LCBOZ09wdGltaXplZEltYWdlXSxcbn0pXG5leHBvcnQgY2xhc3MgRHNmckNvbnRlbnRDb21wb25lbnQgaW1wbGVtZW50cyBEc2ZyTmF2aWdhdGlvbiwgT25Jbml0IHtcbiAgLy8gLS0gQ29tbXVuIGltYWdlcyAvIHZpZMOpb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKiogVHlwZSBkdSBtw6lkaWEgJ2ltYWdlJyB8ICd2aWRlbycsICdpbWFnZScgcGFyIGTDqWZhdXQuICovXG4gIEBJbnB1dCgpIHR5cGU6IERzZnJNZWRpYSA9ICdpbWFnZSc7XG5cbiAgLyoqIEzDqWdlbmRlLCBvcHRpb25uZWxsZSAqL1xuICBASW5wdXQoKSBsZWdlbmQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogTGUgZm9ybWF0IGNvbnNlaWxsw6kgcGFyIGTDqWZhdXQgZXN0IGxlIDE2OjkuICovXG4gIEBJbnB1dCgpIHJhdGlvOiBSYXRpb0ltYWdlIHwgUmF0aW9WaWRlbyA9ICcxNjo5JztcblxuICAvKiogTWVkaWEsIGltYWdlLCB2aWTDqW8gb3UgYXVkaW8sIG9ibGlnYXRvaXJlICovXG4gIEBJbnB1dCgpIHNvdXJjZTogc3RyaW5nO1xuXG4gIC8vIC0tIExpZW4gZGUgdHJhbnNjcmlwdGlvbiBzb3VzIGxlIG1lZGlhIChvcHRpb25uZWwpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogTGFiZWwgZHUgbGllbiAoZGUgdHJhbnNjcmlwdGlvbiksIG9wdGlvbm5lbC5cbiAgICpcbiAgICogQHNpbmNlIDEuNiByZW1wbGFjZSAndHJhbnNjcmlwdGlvbkxhYmVsJy5cbiAgICovXG4gIEBJbnB1dCgpIGxpbmtMYWJlbDogc3RyaW5nO1xuXG4gIC8qKiBMaWVuIGRlIHRyYW5zY3JpcHRpb24gKG91IGF1dHJlKSwgb3B0aW9ubmVsLiAqL1xuICBASW5wdXQoKSBsaW5rOiBzdHJpbmc7XG5cbiAgLyoqIFRhcmdldCBkdSBsaWVuLiBUYXJnZXQgcGFyIGTDqWZhdXQgZGUgbCdhcHBsaWNhdGlvbiBzaSBsYSBwcm9wcmnDqXTDqSBlc3Qgbm9uIHJlbnNlaWduw6llLiAqL1xuICBASW5wdXQoKSBsaW5rVGFyZ2V0OiBEc2ZyTGlua1RhcmdldDtcblxuICAvKiogUGF0aCBpbnRlcm5lLiBFeGNsdXNpZiBhdmVjIGxpbmsgZXQgcm91dGVQYXRoICovXG4gIEBJbnB1dCgpIHJvdXRlOiBzdHJpbmc7XG5cbiAgLyoqIFBhdGggYW5ndWxhciBnw6lyw6kgZW4gdGFudCBxdWUgZGlyZWN0aXZlIHJvdXRlckxpbmsuIEV4Y2x1c2lmIGF2ZWMgbGluayBldCByb3V0ZS4gKi9cbiAgQElucHV0KCkgcm91dGVQYXRoOiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKiogUm91dGVyTGluayA6IGNsYXNzZSB1dGlsaXPDqWUgcG91ciBsYSBkaXJlY3RpdmUgcm91dGVyTGluayBhY3RpdmUuICovXG4gIEBJbnB1dCgpIHJvdXRlckxpbmtBY3RpdmU6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBSb3V0ZXJMaW5rIDogdmFsZXVycyBhZGRpdGlvbm5lbGxlcyBkZSBuYXZpZ2F0aW9uIHBvdXIgbGUgcm91dGVyTGluayAocXVlcnlQYXJhbXMsIHN0YXRlLCBldGMuKSAqL1xuICBASW5wdXQoKSByb3V0ZXJMaW5rRXh0cmFzOiBOYXZpZ2F0aW9uRXh0cmFzO1xuXG4gIC8qKiBNZXNzYWdlIGR1IHRvb2x0aXAgZHUgbcOpZGlhLiAqL1xuICBASW5wdXQoKSB0b29sdGlwTWVzc2FnZTogc3RyaW5nO1xuXG4gIC8vIC0tIE1vZGFsIGRlIHRyYW5zY3JpcHRpb24gKG9wdGlvbm5lbCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQ29udGVudSwgc2ltcGxlLCBvcHRpb25uZWwgZGUgbGEgbW9kYWxlIGRlIHRyYW5zY3JpcHRpb24uXG4gICAqXG4gICAqIEBzaW5jZSAxLjYgcmVtcGxhY2UgJ3RyYW5zY3JpcHRpb24nLlxuICAgKi9cbiAgQElucHV0KCkgdHJhbnNjcmlwdGlvbkNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGl0cmUgZHUgbcOpZGlhIChpbWFnZSBvdSB2aWTDqW8pLCBkZSBuaXZlYXUgaDEuXG4gICAqXG4gICAqIEBzaW5jZSAxLjZcbiAgICovXG4gIEBJbnB1dCgpIHRyYW5zY3JpcHRpb25IZWFkaW5nOiBzdHJpbmc7XG5cbiAgLy8gLS0gSW1hZ2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBTcMOpY2lmaXF1ZSBhdXggaW1hZ2VzLlxuICAgKiBBbHRlcm5hdGl2ZSBkJ3VuZSBpbWFnZSAoYXR0cmlidXQgYWx0KSwgZG9pdCB0b3Vqb3VycyDDqnRyZSBwcsOpc2VudGUsIHNhIHZhbGV1ciBwZXV0IMOqdHJlIHZpZGUgKGltYWdlIG7igJlhcHBvcnRhbnRcbiAgICogcGFzIGRlIHNlbnMgc3VwcGzDqW1lbnRhaXJlIGF1IGNvbnRleHRlKSBvdSBub24gKHBvcnRldXNlIGRlIHRleHRlIG91IGFwcG9ydGFudCBkdSBzZW5zKSBzZWxvbiB2b3RyZSBjb250ZXh0ZS5cbiAgICovXG4gIEBJbnB1dCgpIGFsdGVybmF0ZTogc3RyaW5nO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogU2kgdW5lIHJvdXRlIGVzdCBzcMOpY2lmacOpZSwgw6ltZXQgdW4gw6l2w6luZW1lbnQgYXZlYyBsYSByb3V0ZSBjb21tZSB2YWxldXIsIHNpbm9uIG4nw6ltZXQgcmllbi5cbiAgICovXG4gIEBPdXRwdXQoKSBsaW5rU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSBfc2l6ZTogRHNmclNpemUgPSBEc2ZyU2l6ZUNvbnN0Lk1EO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlLFxuICApIHt9XG5cbiAgZ2V0IHNpemUoKTogRHNmclNpemUge1xuICAgIHJldHVybiB0aGlzLl9zaXplO1xuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkIChzaW5jZSAxLjYpIHV0aWxpc2VyIGB0cmFuc2NyaXB0aW9uQ29udGVudGAgw6AgbGEgcGxhY2UgKi9cbiAgZ2V0IHRyYW5zY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2NyaXB0aW9uQ29udGVudDtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAoc2luY2UgMS42KSB1dGlsaXNlciBgdHJhbnNjcmlwdGlvbkxpbmtMYWJlbGAgw6AgbGEgcGxhY2UgICovXG4gIGdldCB0cmFuc2NyaXB0aW9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5saW5rTGFiZWw7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKHNpbmNlIDEuNikgdXRpbGlzZXIgYHRyYW5zY3JpcHRpb25Db250ZW50YCDDoCBsYSBwbGFjZSAgKi9cbiAgQElucHV0KCkgc2V0IHRyYW5zY3JpcHRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudHJhbnNjcmlwdGlvbkNvbnRlbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAoc2luY2UgMS42KSB1dGlsaXNlciBgdHJhbnNjcmlwdGlvbkxpbmtMYWJlbGAgw6AgbGEgcGxhY2UgICovXG4gIEBJbnB1dCgpIHNldCB0cmFuc2NyaXB0aW9uTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMubGlua0xhYmVsID0gdmFsdWU7XG4gIH1cblxuICAvKiogUmVkaW1lbnNpb25uZW1lbnQgZHUgY29tcG9zYW50IDogYExHYCA6IDEyNSUsIGBNRGAgOiAxMDAlIChkw6lmYXVsdCksIGBTTWAgOiA3NSUuICovXG4gIEBJbnB1dCgpIHNldCBzaXplKHZhbHVlOiBEc2ZyU2l6ZSkge1xuICAgIHRoaXMuX3NpemUgPSA8RHNmclNpemU+dmFsdWU/LnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgKHNpbmNlIDEuMTEuNSkgdXRpbGlzZXIgYHJvdXRlUGF0aGAgw6AgbGEgcGxhY2UuXG4gICAqIHJvdXRlckxpbmsgcHJvdm9xdWUgdW4gYnVnIGFjY2Vzc2liaWxpdMOpIHN1ciBsYSBuYXZpZ2F0aW9uIGF1IGNsYXZpZXIgKGFqb3V0IGQndW4gdGFiaW5kZXg9MClcbiAgICoqL1xuICBASW5wdXQoKSBzZXQgcm91dGVyTGluayh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUpIHRoaXMucm91dGVQYXRoID0gdmFsdWU7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnZlcmlmeUFjY2Vzc2liaWxpdHkoKTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgb25MaW5rU2VsZWN0KCkge1xuICAgIGlmICh0aGlzLnJvdXRlKSB7XG4gICAgICB0aGlzLmxpbmtTZWxlY3QuZW1pdCh0aGlzLnJvdXRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBzYW5pdGl6ZWRTb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh0aGlzLnNvdXJjZSk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUFjY2Vzc2liaWxpdHkoKTogdm9pZCB7XG4gICAgY29uc3QgbWlzc2luZ1ZpZGVvVGl0bGUgPSB0aGlzLnR5cGUgPT09ICd2aWRlbycgJiYgIXRoaXMudG9vbHRpcE1lc3NhZ2U7XG5cbiAgICBpZiAobWlzc2luZ1ZpZGVvVGl0bGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyU2VydmljZS53YXJuKCdkc2ZyLWNvbnRlbnQgOiBSZW5zZWlnbmVyIGxlIHRpdHJlIGR1IGNvbnRlbnUgZXN0IG9ibGlnYXRvaXJlICh0b29sdGlwTWVzc2FnZSkuJyk7XG4gICAgfVxuICB9XG59XG4iLCI8ZmlndXJlXG4gIGNsYXNzPVwiZnItY29udGVudC1tZWRpYVwiXG4gIFtjbGFzcy5mci1jb250ZW50LW1lZGlhLS1sZ109XCJzaXplID09PSAnTEcnXCJcbiAgW2NsYXNzLmZyLWNvbnRlbnQtbWVkaWEtLXNtXT1cInNpemUgPT09ICdTTSdcIlxuICByb2xlPVwiZ3JvdXBcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImxlZ2VuZFwiPlxuICBAaWYgKHR5cGUgPT09ICdpbWFnZScpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZnItY29udGVudC1tZWRpYV9faW1nXCI+XG4gICAgICBAaWYgKHNvdXJjZSkge1xuICAgICAgICA8aW1nXG4gICAgICAgICAgY2xhc3M9XCJmci1yZXNwb25zaXZlLWltZ1wiXG4gICAgICAgICAgW2F0dHIudGl0bGVdPVwidG9vbHRpcE1lc3NhZ2UgfHwgbnVsbFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2ZyLXJhdGlvLTMyeDknOiByYXRpbyA9PT0gJzE2OjkvMicsXG4gICAgICAgICAgICAnZnItcmF0aW8tMTZ4OSc6IHJhdGlvID09PSAnMTY6OScsXG4gICAgICAgICAgICAnZnItcmF0aW8tM3gyJzogcmF0aW8gPT09ICczOjInLFxuICAgICAgICAgICAgJ2ZyLXJhdGlvLTR4Myc6IHJhdGlvID09PSAnNDozJyxcbiAgICAgICAgICAgICdmci1yYXRpby0xeDEnOiByYXRpbyA9PT0gJzE6MScsXG4gICAgICAgICAgICAnZnItcmF0aW8tM3g0JzogcmF0aW8gPT09ICczOjQnLFxuICAgICAgICAgICAgJ2ZyLXJhdGlvLTJ4Myc6IHJhdGlvID09PSAnMjozJ1xuICAgICAgICAgIH1cIlxuICAgICAgICAgIFtzcmNdPVwic291cmNlXCJcbiAgICAgICAgICBbYWx0XT1cImFsdGVybmF0ZVwiIC8+XG4gICAgICB9XG4gICAgICA8IS0tIHNpbmNlIDEuNiBzbG90IHBhciBkw6lmYXV0IGTDqXByw6ljacOpIC0tPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgPCEtLSBzaW5jZSAxLjYgYWpvdXQgZHUgc2xvdCAnc3ZnJyAtLT5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzdmddXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICB9IEBlbHNlIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgPGlmcmFtZVxuICAgICAgW2F0dHIudGl0bGVdPVwidG9vbHRpcE1lc3NhZ2UgfHwgbnVsbFwiXG4gICAgICBjbGFzcz1cImZyLXJlc3BvbnNpdmUtdmlkXCJcbiAgICAgIFtjbGFzcy5mci1yYXRpby0xNng5XT1cInJhdGlvID09PSAnMTY6OSdcIlxuICAgICAgW2NsYXNzLmZyLXJhdGlvLTR4M109XCJyYXRpbyA9PT0gJzQ6MydcIlxuICAgICAgW2NsYXNzLmZyLXJhdGlvLTF4MV09XCJyYXRpbyA9PT0gJzE6MSdcIlxuICAgICAgW3NyY109XCJzYW5pdGl6ZWRTb3VyY2UoKVwiXG4gICAgICBhbGxvdz1cImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlXCJcbiAgICAgIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT5cbiAgfVxuXG4gIEBpZiAobGVnZW5kIHx8IGxpbmtMYWJlbCkge1xuICAgIDxmaWdjYXB0aW9uIGNsYXNzPVwiZnItY29udGVudC1tZWRpYV9fY2FwdGlvblwiPlxuICAgICAge3sgbGVnZW5kIH19XG4gICAgICBAaWYgKGxpbmtMYWJlbCkge1xuICAgICAgICA8ZHNmci1saW5rXG4gICAgICAgICAgW2xpbmtdPVwibGlua1wiXG4gICAgICAgICAgW2xhYmVsXT1cImxpbmtMYWJlbFwiXG4gICAgICAgICAgW2xpbmtUYXJnZXRdPVwibGlua1RhcmdldFwiXG4gICAgICAgICAgW3JvdXRlXT1cInJvdXRlXCJcbiAgICAgICAgICBbcm91dGVQYXRoXT1cInJvdXRlUGF0aFwiXG4gICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwicm91dGVyTGlua0FjdGl2ZSA/PyAnJ1wiXG4gICAgICAgICAgW3JvdXRlckxpbmtFeHRyYXNdPVwicm91dGVyTGlua0V4dHJhc1wiXG4gICAgICAgICAgKGxpbmtTZWxlY3QpPVwib25MaW5rU2VsZWN0KClcIj5cbiAgICAgICAgPC9kc2ZyLWxpbms+XG4gICAgICB9XG4gICAgPC9maWdjYXB0aW9uPlxuICB9XG48L2ZpZ3VyZT5cbkBpZiAodHJhbnNjcmlwdGlvbkNvbnRlbnQpIHtcbiAgPGRzZnItdHJhbnNjcmlwdGlvbiBbaGVhZGluZ109XCJ0cmFuc2NyaXB0aW9uSGVhZGluZ1wiIFtjb250ZW50XT1cInRyYW5zY3JpcHRpb25Db250ZW50XCI+PC9kc2ZyLXRyYW5zY3JpcHRpb24+XG59IEBlbHNlIHtcbiAgPCEtLSBzaW5jZSAxLjYgYWpvdXQgZHUgc2xvdCAndHJhbnNjcmlwdGlvbicgLS0+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlt0cmFuc2NyaXB0aW9uXVwiPjwvbmctY29udGVudD5cbn1cbiJdfQ==