@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).
117 lines • 22.9 kB
JavaScript
import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
import { DsfrSizeConst } from '../../shared';
import * as i0 from "@angular/core";
import * as i1 from "@angular/platform-browser";
import * as i2 from "@angular/common";
import * as i3 from "../transcription/transcription.component";
import * as i4 from "../link/link.component";
export class DsfrContentComponent {
constructor(sanitizer) {
this.sanitizer = sanitizer;
// -- 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;
}
/** @internal */
onLinkSelect() {
if (this.route) {
this.linkSelect.emit(this.route);
}
}
/**
* @internal
*/
sanitizedSource() {
return this.sanitizer.bypassSecurityTrustResourceUrl(this.source);
}
/** @internal */
hasTranscriptionLink() {
return !!this.linkLabel;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DsfrContentComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DsfrContentComponent, 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 <div *ngIf=\"type === 'image'\" class=\"fr-content-media__img\">\n <img\n *ngIf=\"source\"\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\n <iframe\n *ngIf=\"type === 'video'\"\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 <figcaption *ngIf=\"legend || linkLabel\" class=\"fr-content-media__caption\">\n {{ legend }}\n <dsfr-link\n *ngIf=\"linkLabel\"\n [label]=\"linkLabel\"\n [link]=\"link\"\n [linkTarget]=\"linkTarget\"\n [route]=\"route\"\n [routePath]=\"routePath\"\n [routerLinkActive]=\"routerLinkActive ?? ''\"\n [routerLinkExtras]=\"routerLinkExtras\"\n (linkSelect)=\"onLinkSelect()\"></dsfr-link>\n </figcaption>\n\n <dsfr-transcription\n *ngIf=\"transcriptionContent\"\n [heading]=\"transcriptionHeading\"\n [content]=\"transcriptionContent\"></dsfr-transcription>\n <!-- @since 1.6 ajout du slot 'transcription' -->\n <ng-content *ngIf=\"!transcriptionContent\" select=\"[transcription]\"></ng-content>\n</figure>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DsfrTranscriptionComponent, selector: "dsfr-transcription", inputs: ["content", "heading"] }, { kind: "component", type: i4.DsfrLinkComponent, selector: "dsfr-link", inputs: ["ariaCurrent", "ariaLabel", "ariaControls", "customClass", "disabled", "icon", "iconPosition", "linkId", "label", "link", "linkTarget", "route", "routePath", "routerLinkActive", "routerLinkActiveOptions", "routerLinkExtras", "size", "tooltipMessage", "mode", "targetLink", "routerLink"], outputs: ["linkSelect"] }], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DsfrContentComponent, decorators: [{
type: Component,
args: [{ selector: 'dsfr-content', encapsulation: ViewEncapsulation.None, 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 <div *ngIf=\"type === 'image'\" class=\"fr-content-media__img\">\n <img\n *ngIf=\"source\"\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\n <iframe\n *ngIf=\"type === 'video'\"\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 <figcaption *ngIf=\"legend || linkLabel\" class=\"fr-content-media__caption\">\n {{ legend }}\n <dsfr-link\n *ngIf=\"linkLabel\"\n [label]=\"linkLabel\"\n [link]=\"link\"\n [linkTarget]=\"linkTarget\"\n [route]=\"route\"\n [routePath]=\"routePath\"\n [routerLinkActive]=\"routerLinkActive ?? ''\"\n [routerLinkExtras]=\"routerLinkExtras\"\n (linkSelect)=\"onLinkSelect()\"></dsfr-link>\n </figcaption>\n\n <dsfr-transcription\n *ngIf=\"transcriptionContent\"\n [heading]=\"transcriptionHeading\"\n [content]=\"transcriptionContent\"></dsfr-transcription>\n <!-- @since 1.6 ajout du slot 'transcription' -->\n <ng-content *ngIf=\"!transcriptionContent\" select=\"[transcription]\"></ng-content>\n</figure>\n" }]
}], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHNmci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jb250ZW50L2NvbnRlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY29udGVudC9jb250ZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHMUYsT0FBTyxFQUE0QyxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7OztBQVl2RixNQUFNLE9BQU8sb0JBQW9CO0lBMkUvQixZQUFvQixTQUF1QjtRQUF2QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBMUUzQyxzSEFBc0g7UUFFdEgsMkRBQTJEO1FBQ2xELFNBQUksR0FBYyxPQUFPLENBQUM7UUFLbkMsa0RBQWtEO1FBQ3pDLFVBQUssR0FBNEIsTUFBTSxDQUFDO1FBd0RqRCxzSEFBc0g7UUFFdEg7O1dBRUc7UUFDTyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUUxQyxVQUFLLEdBQWEsYUFBYSxDQUFDLEVBQUUsQ0FBQztJQUVHLENBQUM7SUFFL0MsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDbkMsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxJQUFhLGFBQWEsQ0FBQyxLQUFhO1FBQ3RDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxJQUFhLGtCQUFrQixDQUFDLEtBQWE7UUFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELHVGQUF1RjtJQUN2RixJQUFhLElBQUksQ0FBQyxLQUFlO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQWEsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7O1FBR0k7SUFDSixJQUFhLFVBQVUsQ0FBQyxLQUFvQztRQUMxRCxJQUFJLEtBQUs7WUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLG9CQUFvQjtRQUNsQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7K0dBbklVLG9CQUFvQjttR0FBcEIsb0JBQW9CLHFtQkNmakMsMm1FQTZEQTs7NEZEOUNhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxjQUFjLGlCQUVULGlCQUFpQixDQUFDLElBQUk7bUdBTTVCLElBQUk7c0JBQVosS0FBSztnQkFHRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csS0FBSztzQkFBYixLQUFLO2dCQUdHLE1BQU07c0JBQWQsS0FBSztnQkFRRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFRRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBS0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQVNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFxQk0sYUFBYTtzQkFBekIsS0FBSztnQkFLTyxrQkFBa0I7c0JBQTlCLEtBQUs7Z0JBS08sSUFBSTtzQkFBaEIsS0FBSztnQkFRTyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE5hdmlnYXRpb25FeHRyYXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRHNmckxpbmtUYXJnZXQsIERzZnJOYXZpZ2F0aW9uLCBEc2ZyU2l6ZSwgRHNmclNpemVDb25zdCB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBEc2ZyTWVkaWEgfSBmcm9tICcuL21lZGlhJztcblxuLy8gaHR0cHM6Ly93d3cuc3lzdGVtZS1kZS1kZXNpZ24uZ291di5mci9lbGVtZW50cy1kLWludGVyZmFjZS9mb25kYW1lbnRhdXgtdGVjaG5pcXVlcy9tZWRpYXMvXG50eXBlIFJhdGlvSW1hZ2UgPSAnMTY6OS8yJyB8ICcxNjo5JyB8ICczOjInIHwgJzQ6MycgfCAnMToxJyB8ICczOjQnIHwgJzI6Myc7XG50eXBlIFJhdGlvVmlkZW8gPSAnMTY6OScgfCAnNDozJyB8ICcxOjEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkc2ZyLWNvbnRlbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29udGVudC5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIERzZnJDb250ZW50Q29tcG9uZW50IGltcGxlbWVudHMgRHNmck5hdmlnYXRpb24ge1xuICAvLyAtLSBDb21tdW4gaW1hZ2VzIC8gdmlkw6lvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKiBUeXBlIGR1IG3DqWRpYSAnaW1hZ2UnIHwgJ3ZpZGVvJywgJ2ltYWdlJyBwYXIgZMOpZmF1dC4gKi9cbiAgQElucHV0KCkgdHlwZTogRHNmck1lZGlhID0gJ2ltYWdlJztcblxuICAvKiogTMOpZ2VuZGUsIG9wdGlvbm5lbGxlICovXG4gIEBJbnB1dCgpIGxlZ2VuZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBMZSBmb3JtYXQgY29uc2VpbGzDqSBwYXIgZMOpZmF1dCBlc3QgbGUgMTY6OS4gKi9cbiAgQElucHV0KCkgcmF0aW86IFJhdGlvSW1hZ2UgfCBSYXRpb1ZpZGVvID0gJzE2OjknO1xuXG4gIC8qKiBAcmVxdWlyZXMgbWVkaWEsIGltYWdlLCB2aWTDqW8gb3UgYXVkaW8sIG9ibGlnYXRvaXJlICovXG4gIEBJbnB1dCgpIHNvdXJjZTogc3RyaW5nO1xuXG4gIC8vIC0tIExpZW4gZGUgdHJhbnNjcmlwdGlvbiBzb3VzIGxlIG1lZGlhIChvcHRpb25uZWwpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQHNpbmNlIDEuNiByZW1wbGFjZSAndHJhbnNjcmlwdGlvbkxhYmVsJy5cbiAgICogTGFiZWwgZHUgbGllbiAoZGUgdHJhbnNjcmlwdGlvbiksIG9wdGlvbm5lbC5cbiAgICovXG4gIEBJbnB1dCgpIGxpbmtMYWJlbDogc3RyaW5nO1xuXG4gIC8qKiBMaWVuIGRlIHRyYW5zY3JpcHRpb24gKG91IGF1dHJlKSwgb3B0aW9ubmVsLiAqL1xuICBASW5wdXQoKSBsaW5rOiBzdHJpbmc7XG5cbiAgLyoqIFRhcmdldCBkdSBsaWVuLiBUYXJnZXQgcGFyIGTDqWZhdXQgZGUgbCdhcHBsaWNhdGlvbiBzaSBsYSBwcm9wcmnDqXTDqSBlc3Qgbm9uIHJlbnNlaWduw6llLiAqL1xuICBASW5wdXQoKSBsaW5rVGFyZ2V0OiBEc2ZyTGlua1RhcmdldDtcblxuICAvKiogUGF0aCBpbnRlcm5lLiBFeGNsdXNpZiBhdmVjIGxpbmsgZXQgcm91dGVQYXRoICovXG4gIEBJbnB1dCgpIHJvdXRlOiBzdHJpbmc7XG5cbiAgLyoqIFBhdGggYW5ndWxhciBnw6lyw6kgZW4gdGFudCBxdWUgZGlyZWN0aXZlIHJvdXRlckxpbmsuIEV4Y2x1c2lmIGF2ZWMgbGluayBldCByb3V0ZS4gKi9cbiAgQElucHV0KCkgcm91dGVQYXRoOiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKiogUm91dGVyTGluayA6IGNsYXNzZSB1dGlsaXPDqWUgcG91ciBsYSBkaXJlY3RpdmUgcm91dGVyTGluayBhY3RpdmUuICovXG4gIEBJbnB1dCgpIHJvdXRlckxpbmtBY3RpdmU6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBSb3V0ZXJMaW5rIDogdmFsZXVycyBhZGRpdGlvbm5lbGxlcyBkZSBuYXZpZ2F0aW9uIHBvdXIgbGUgcm91dGVyTGluayAocXVlcnlQYXJhbXMsIHN0YXRlLCBldGMuKSAqL1xuICBASW5wdXQoKSByb3V0ZXJMaW5rRXh0cmFzOiBOYXZpZ2F0aW9uRXh0cmFzO1xuXG4gIC8qKiBNZXNzYWdlIGR1IHRvb2x0aXAgZHUgbcOpZGlhLiAqL1xuICBASW5wdXQoKSB0b29sdGlwTWVzc2FnZTogc3RyaW5nO1xuXG4gIC8vIC0tIE1vZGFsIGRlIHRyYW5zY3JpcHRpb24gKG9wdGlvbm5lbCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQHNpbmNlIDEuNiByZW1wbGFjZSAndHJhbnNjcmlwdGlvbicuXG4gICAqIENvbnRlbnUsIHNpbXBsZSwgb3B0aW9ubmVsIGRlIGxhIG1vZGFsZSBkZSB0cmFuc2NyaXB0aW9uLlxuICAgKi9cbiAgQElucHV0KCkgdHJhbnNjcmlwdGlvbkNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHNpbmNlIDEuNiBUaXRyZSBkdSBtw6lkaWEgKGltYWdlIG91IHZpZMOpbyksIGRlIG5pdmVhdSBoMS5cbiAgICovXG4gIEBJbnB1dCgpIHRyYW5zY3JpcHRpb25IZWFkaW5nOiBzdHJpbmc7XG5cbiAgLy8gLS0gSW1hZ2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBTcMOpY2lmaXF1ZSBhdXggaW1hZ2VzLlxuICAgKiBBbHRlcm5hdGl2ZSBkJ3VuZSBpbWFnZSAoYXR0cmlidXQgYWx0KSwgZG9pdCB0b3Vqb3VycyDDqnRyZSBwcsOpc2VudGUsIHNhIHZhbGV1ciBwZXV0IMOqdHJlIHZpZGUgKGltYWdlIG7igJlhcHBvcnRhbnRcbiAgICogcGFzIGRlIHNlbnMgc3VwcGzDqW1lbnRhaXJlIGF1IGNvbnRleHRlKSBvdSBub24gKHBvcnRldXNlIGRlIHRleHRlIG91IGFwcG9ydGFudCBkdSBzZW5zKSBzZWxvbiB2b3RyZSBjb250ZXh0ZS5cbiAgICovXG4gIEBJbnB1dCgpIGFsdGVybmF0ZTogc3RyaW5nO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogU2kgdW5lIHJvdXRlIGVzdCBzcMOpY2lmacOpZSwgw6ltZXQgdW4gw6l2w6luZW1lbnQgYXZlYyBsYSByb3V0ZSBjb21tZSB2YWxldXIsIHNpbm9uIG4nw6ltZXQgcmllbi5cbiAgICovXG4gIEBPdXRwdXQoKSBsaW5rU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSBfc2l6ZTogRHNmclNpemUgPSBEc2ZyU2l6ZUNvbnN0Lk1EO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHt9XG5cbiAgZ2V0IHNpemUoKTogRHNmclNpemUge1xuICAgIHJldHVybiB0aGlzLl9zaXplO1xuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkIChAc2luY2UgMS42KSB1dGlsaXNlciBgdHJhbnNjcmlwdGlvbkNvbnRlbnRgIMOgIGxhIHBsYWNlICovXG4gIGdldCB0cmFuc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNjcmlwdGlvbkNvbnRlbnQ7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKEBzaW5jZSAxLjYpIHV0aWxpc2VyIGB0cmFuc2NyaXB0aW9uTGlua0xhYmVsYCDDoCBsYSBwbGFjZSAgKi9cbiAgZ2V0IHRyYW5zY3JpcHRpb25MYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxpbmtMYWJlbDtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAoQHNpbmNlIDEuNikgdXRpbGlzZXIgYHRyYW5zY3JpcHRpb25Db250ZW50YCDDoCBsYSBwbGFjZSAgKi9cbiAgQElucHV0KCkgc2V0IHRyYW5zY3JpcHRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudHJhbnNjcmlwdGlvbkNvbnRlbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAoQHNpbmNlIDEuNikgdXRpbGlzZXIgYHRyYW5zY3JpcHRpb25MaW5rTGFiZWxgIMOgIGxhIHBsYWNlICAqL1xuICBASW5wdXQoKSBzZXQgdHJhbnNjcmlwdGlvbkxhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxpbmtMYWJlbCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqIFJlZGltZW5zaW9ubmVtZW50IGR1IGNvbXBvc2FudCA6IGBMR2AgOiAxMjUlLCBgTURgIDogMTAwJSAoZMOpZmF1bHQpLCBgU01gIDogNzUlLiAqL1xuICBASW5wdXQoKSBzZXQgc2l6ZSh2YWx1ZTogRHNmclNpemUpIHtcbiAgICB0aGlzLl9zaXplID0gPERzZnJTaXplPnZhbHVlPy50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIChAc2luY2UgMS4xMS41KSB1dGlsaXNlciBgcm91dGVQYXRoYCDDoCBsYSBwbGFjZS5cbiAgICogcm91dGVyTGluayBwcm92b3F1ZSB1biBidWcgYWNjZXNzaWJpbGl0w6kgc3VyIGxhIG5hdmlnYXRpb24gYXUgY2xhdmllciAoYWpvdXQgZCd1biB0YWJpbmRleD0wKVxuICAgKiovXG4gIEBJbnB1dCgpIHNldCByb3V0ZXJMaW5rKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSkgdGhpcy5yb3V0ZVBhdGggPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgb25MaW5rU2VsZWN0KCkge1xuICAgIGlmICh0aGlzLnJvdXRlKSB7XG4gICAgICB0aGlzLmxpbmtTZWxlY3QuZW1pdCh0aGlzLnJvdXRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBzYW5pdGl6ZWRTb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh0aGlzLnNvdXJjZSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGhhc1RyYW5zY3JpcHRpb25MaW5rKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMubGlua0xhYmVsO1xuICB9XG59XG4iLCI8ZmlndXJlXG4gIGNsYXNzPVwiZnItY29udGVudC1tZWRpYVwiXG4gIFtjbGFzcy5mci1jb250ZW50LW1lZGlhLS1sZ109XCJzaXplID09PSAnTEcnXCJcbiAgW2NsYXNzLmZyLWNvbnRlbnQtbWVkaWEtLXNtXT1cInNpemUgPT09ICdTTSdcIlxuICByb2xlPVwiZ3JvdXBcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImxlZ2VuZFwiPlxuICA8ZGl2ICpuZ0lmPVwidHlwZSA9PT0gJ2ltYWdlJ1wiIGNsYXNzPVwiZnItY29udGVudC1tZWRpYV9faW1nXCI+XG4gICAgPGltZ1xuICAgICAgKm5nSWY9XCJzb3VyY2VcIlxuICAgICAgY2xhc3M9XCJmci1yZXNwb25zaXZlLWltZ1wiXG4gICAgICBbYXR0ci50aXRsZV09XCJ0b29sdGlwTWVzc2FnZSB8fCBudWxsXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2ZyLXJhdGlvLTMyeDknOiByYXRpbyA9PT0gJzE2OjkvMicsXG4gICAgICAgICdmci1yYXRpby0xNng5JzogcmF0aW8gPT09ICcxNjo5JyxcbiAgICAgICAgJ2ZyLXJhdGlvLTN4Mic6IHJhdGlvID09PSAnMzoyJyxcbiAgICAgICAgJ2ZyLXJhdGlvLTR4Myc6IHJhdGlvID09PSAnNDozJyxcbiAgICAgICAgJ2ZyLXJhdGlvLTF4MSc6IHJhdGlvID09PSAnMToxJyxcbiAgICAgICAgJ2ZyLXJhdGlvLTN4NCc6IHJhdGlvID09PSAnMzo0JyxcbiAgICAgICAgJ2ZyLXJhdGlvLTJ4Myc6IHJhdGlvID09PSAnMjozJ1xuICAgICAgfVwiXG4gICAgICBbc3JjXT1cInNvdXJjZVwiXG4gICAgICBbYWx0XT1cImFsdGVybmF0ZVwiIC8+XG5cbiAgICA8IS0tIEBzaW5jZSAxLjYgc2xvdCBwYXIgZMOpZmF1dCBkw6lwcsOpY2nDqSAtLT5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPCEtLSBAc2luY2UgMS42IGFqb3V0IGR1IHNsb3QgJ3N2ZycgLS0+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3N2Z11cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuXG4gIDxpZnJhbWVcbiAgICAqbmdJZj1cInR5cGUgPT09ICd2aWRlbydcIlxuICAgIFthdHRyLnRpdGxlXT1cInRvb2x0aXBNZXNzYWdlIHx8IG51bGxcIlxuICAgIGNsYXNzPVwiZnItcmVzcG9uc2l2ZS12aWRcIlxuICAgIFtjbGFzcy5mci1yYXRpby0xNng5XT1cInJhdGlvID09PSAnMTY6OSdcIlxuICAgIFtjbGFzcy5mci1yYXRpby00eDNdPVwicmF0aW8gPT09ICc0OjMnXCJcbiAgICBbY2xhc3MuZnItcmF0aW8tMXgxXT1cInJhdGlvID09PSAnMToxJ1wiXG4gICAgW3NyY109XCJzYW5pdGl6ZWRTb3VyY2UoKVwiXG4gICAgYWxsb3c9XCJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZVwiXG4gICAgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPlxuXG4gIDxmaWdjYXB0aW9uICpuZ0lmPVwibGVnZW5kIHx8IGxpbmtMYWJlbFwiIGNsYXNzPVwiZnItY29udGVudC1tZWRpYV9fY2FwdGlvblwiPlxuICAgIHt7IGxlZ2VuZCB9fVxuICAgIDxkc2ZyLWxpbmtcbiAgICAgICpuZ0lmPVwibGlua0xhYmVsXCJcbiAgICAgIFtsYWJlbF09XCJsaW5rTGFiZWxcIlxuICAgICAgW2xpbmtdPVwibGlua1wiXG4gICAgICBbbGlua1RhcmdldF09XCJsaW5rVGFyZ2V0XCJcbiAgICAgIFtyb3V0ZV09XCJyb3V0ZVwiXG4gICAgICBbcm91dGVQYXRoXT1cInJvdXRlUGF0aFwiXG4gICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCJyb3V0ZXJMaW5rQWN0aXZlID8/ICcnXCJcbiAgICAgIFtyb3V0ZXJMaW5rRXh0cmFzXT1cInJvdXRlckxpbmtFeHRyYXNcIlxuICAgICAgKGxpbmtTZWxlY3QpPVwib25MaW5rU2VsZWN0KClcIj48L2RzZnItbGluaz5cbiAgPC9maWdjYXB0aW9uPlxuXG4gIDxkc2ZyLXRyYW5zY3JpcHRpb25cbiAgICAqbmdJZj1cInRyYW5zY3JpcHRpb25Db250ZW50XCJcbiAgICBbaGVhZGluZ109XCJ0cmFuc2NyaXB0aW9uSGVhZGluZ1wiXG4gICAgW2NvbnRlbnRdPVwidHJhbnNjcmlwdGlvbkNvbnRlbnRcIj48L2RzZnItdHJhbnNjcmlwdGlvbj5cbiAgPCEtLSBAc2luY2UgMS42IGFqb3V0IGR1IHNsb3QgJ3RyYW5zY3JpcHRpb24nIC0tPlxuICA8bmctY29udGVudCAqbmdJZj1cIiF0cmFuc2NyaXB0aW9uQ29udGVudFwiIHNlbGVjdD1cIlt0cmFuc2NyaXB0aW9uXVwiPjwvbmctY29udGVudD5cbjwvZmlndXJlPlxuIl19