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).

209 lines 23.4 kB
import { Component, Input } from '@angular/core'; import { downloadDetail, } from '../../shared'; import * as i0 from "@angular/core"; import * as i1 from "../../shared"; // Ne peut pas être déplacé dans 'shared' à cause de la dépendance sur DsfrBadge et DsfrTag export const DEFAULT_HEADING_LEVEL = 'H3'; export class BasePanelComponent { constructor(langService) { this.langService = langService; /** * Permet de positionner des badges (jusqu'à 4 badges maxi) en haut du composant, optionnel. * @see DsfrBadge */ this.badges = []; /** * Permet d'avoir un fond gris ou transparent. */ this.customBackground = 'default'; /** * Permet d'afficher une ombre ou ne pas mettre de bordure. */ this.customBorder = 'default'; /** * Permet de désactiver le composant. */ this.disabled = false; /** * Equivalent à l'attribut html natif 'download'. * - true : la fenêtre de téléchargement s'affiche directement, * - false : le fichier est ouvert avant d'être téléchargé, * - string : nouveau nom de fichier proposé au téléchargement. */ this.downloadDirect = true; /** * Si 'true' (défaut) : le détail du téléchargement est automatiquement renseigné par le script DSFR. * - Dans ce cas, les propriétés : 'downloadMimeType', 'downloadSizeBytes', 'downloadLangCode' sont ignorées. * Si 'false' : le détail est calculé par la librairie 'ngx-dsfr'. * Dans les 2 cas, l'unité dépend de la langue du site, en octets (ko, Mo, ...) pour 'fr', en 'bytes' (KB, MB...) pour les autres langues. * Ce mécanisme peut être forcé avec 'downloadSizeUnit'. */ this.downloadAssessFile = true; /** * Permet de désactiver le lien étendu de la carte. */ this.enlargeLink = true; /** * Le niveau de titre devant être utilisé (tag `h4` par défaut). * Cette balise ne produit pas de style, mais de la structure. */ this.headingLevel = DEFAULT_HEADING_LEVEL; /** * Passe le composant en mode horizontal. */ this.horizontal = false; /** * Dimension du composant, 'MD' par défaut ('SM, 'MD' uniquement pour la tuile). */ this.size = 'MD'; this._download = false; this._tags = []; } get downloadSizeUnit() { return this._downloadSizeUnit || this.langService.lang ? 'octets' : 'bytes'; } get linkTarget() { return this._linkTarget; } get tags() { return this._tags; } get itemLink() { const label = this.heading ? this.heading : ''; const itemLink = { label: label, ariaLabel: this.ariaLabel }; // ariaLabel @since 1.7 if (this.link) { itemLink.link = this.link; } else if (this.route) { itemLink.route = this.route; } return itemLink; } get download() { return this._download; } get detailBottom() { return !this.download ? this._detailBottom : this.downloadDetail; } /** * Dans le cas d'un téléchargement sans l'option 'downloadAssessFile', * on crée le détail à l'aide des propriétés 'downloadSizeBytes', 'downloadMimeType'. * @internal */ get downloadDetail() { return downloadDetail(this.downloadMimeType, this.downloadSizeBytes, this.downloadSizeUnit); } /** * Transforme le composant classique en composant de téléchargement. */ set download(download) { this._download = download; if (this._download) this.enlargeLink = true; } /** Zone de détail se trouvant visuellement sous la description et à côté de l’icône, optionnel. * Pour la tuile, on peut passer un slot de sélecteur "detail". * En cas de téléchargement le détail est remplacé par les informations du fichier calculées selon downloadAssessFile. */ set detailBottom(value) { this._detailBottom = value; } /** * Force l'unité par défaut qui dépend de la langue du site, en octets (ko, Mo, ...) pour 'fr', en 'bytes' (KB, MB...) pour les autres langues. */ set downloadSizeUnit(value) { this._downloadSizeUnit = value; } /** * Attribut target du lien. */ set linkTarget(target) { this._linkTarget = target; // Si un lien est externe, le composant ne peut pas être entièrement cliquable if (target === '_blank') this.enlargeLink = false; } /** * Permet de positionner des tags en haut de la carte (cliquables ou non), optionnel. * @see DsfrTag */ set tags(tags) { this._tags = tags; // Vérifie si un tag est cliquable pour désactiver enlargeLink. if (tags?.find((tag) => tag.link)) this.enlargeLink = false; } /** * @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 */ hasLink() { return !!(this.link || this.route || this.routePath); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BasePanelComponent, deps: [{ token: i1.LangService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BasePanelComponent, selector: "ng-component", inputs: { ariaLabel: "ariaLabel", badges: "badges", customBackground: "customBackground", customBorder: "customBorder", description: "description", disabled: "disabled", downloadDirect: "downloadDirect", downloadAssessFile: "downloadAssessFile", downloadLangCode: "downloadLangCode", downloadMimeType: "downloadMimeType", downloadSizeBytes: "downloadSizeBytes", enlargeLink: "enlargeLink", heading: "heading", headingLevel: "headingLevel", horizontal: "horizontal", link: "link", route: "route", routePath: "routePath", routerLinkActive: "routerLinkActive", routerLinkExtras: "routerLinkExtras", size: "size", download: "download", detailBottom: "detailBottom", downloadSizeUnit: "downloadSizeUnit", linkTarget: "linkTarget", tags: "tags", routerLink: "routerLink" }, ngImport: i0, template: '', isInline: true }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BasePanelComponent, decorators: [{ type: Component, args: [{ template: '' }] }], ctorParameters: function () { return [{ type: i1.LangService }]; }, propDecorators: { ariaLabel: [{ type: Input }], badges: [{ type: Input }], customBackground: [{ type: Input }], customBorder: [{ type: Input }], description: [{ type: Input }], disabled: [{ type: Input }], downloadDirect: [{ type: Input }], downloadAssessFile: [{ type: Input }], downloadLangCode: [{ type: Input }], downloadMimeType: [{ type: Input }], downloadSizeBytes: [{ type: Input }], enlargeLink: [{ type: Input }], heading: [{ type: Input }], headingLevel: [{ type: Input }], horizontal: [{ type: Input }], link: [{ type: Input }], route: [{ type: Input }], routePath: [{ type: Input }], routerLinkActive: [{ type: Input }], routerLinkExtras: [{ type: Input }], size: [{ type: Input }], download: [{ type: Input }], detailBottom: [{ type: Input }], downloadSizeUnit: [{ type: Input }], linkTarget: [{ type: Input }], tags: [{ type: Input }], routerLink: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHNmci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJkL2Jhc2UtcGFuZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFRTCxjQUFjLEdBQ2YsTUFBTSxjQUFjLENBQUM7OztBQUl0QiwyRkFBMkY7QUFFM0YsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQXFCLElBQUksQ0FBQztBQUc1RCxNQUFNLE9BQWdCLGtCQUFrQjtJQTJIdEMsWUFBOEIsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUF2SHREOzs7V0FHRztRQUNNLFdBQU0sR0FBZ0IsRUFBRSxDQUFDO1FBRWxDOztXQUVHO1FBQ00scUJBQWdCLEdBQXdCLFNBQVMsQ0FBQztRQUUzRDs7V0FFRztRQUNNLGlCQUFZLEdBQW9CLFNBQVMsQ0FBQztRQU9uRDs7V0FFRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUI7Ozs7O1dBS0c7UUFDTSxtQkFBYyxHQUFxQixJQUFJLENBQUM7UUFFakQ7Ozs7OztXQU1HO1FBQ00sdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBa0JuQzs7V0FFRztRQUNNLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBUzVCOzs7V0FHRztRQUNNLGlCQUFZLEdBQVcscUJBQXFCLENBQUM7UUFFdEQ7O1dBRUc7UUFDTSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBNEI1Qjs7V0FFRztRQUNNLFNBQUksR0FBYSxJQUFJLENBQUM7UUFFdkIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUdsQixVQUFLLEdBQWMsRUFBRSxDQUFDO0lBRzJCLENBQUM7SUFFMUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FB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QUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDOytHQTVObUIsa0JBQWtCO21HQUFsQixrQkFBa0Isb3pCQURqQixFQUFFOzs0RkFDSCxrQkFBa0I7a0JBRHZDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO2tHQUdoQixTQUFTO3NCQUFqQixLQUFLO2dCQU1HLE1BQU07c0JBQWQsS0FBSztnQkFLRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBUUcsY0FBYztzQkFBdEIsS0FBSztnQkFTRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBTUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUtHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFLRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFPRyxPQUFPO3NCQUFmLEtBQUs7Z0JBTUcsWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQU1HLElBQUk7c0JBQVosS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFLRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBS0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFxRE8sUUFBUTtzQkFBcEIsS0FBSztnQkFTTyxZQUFZO3NCQUF4QixLQUFLO2dCQU9PLGdCQUFnQjtzQkFBNUIsS0FBSztnQkFPTyxVQUFVO3NCQUF0QixLQUFLO2dCQVdPLElBQUk7c0JBQWhCLEtBQUs7Z0JBV08sVUFBVTtzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FeHRyYXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgRHNmckZpbGVTaXplVW5pdCxcbiAgRHNmckhlYWRpbmdMZXZlbCxcbiAgRHNmckxpbmssXG4gIERzZnJMaW5rVGFyZ2V0LFxuICBEc2ZyTmF2aWdhdGlvbixcbiAgRHNmclNpemUsXG4gIExhbmdTZXJ2aWNlLFxuICBkb3dubG9hZERldGFpbCxcbn0gZnJvbSAnLi4vLi4vc2hhcmVkJztcbmltcG9ydCB7IERzZnJCYWRnZSB9IGZyb20gJy4uL2JhZGdlJztcbmltcG9ydCB7IERzZnJQYW5lbEJhY2tncm91bmQsIERzZnJQYW5lbEJvcmRlciB9IGZyb20gJy4uL2NhcmQnO1xuaW1wb3J0IHsgRHNmclRhZyB9IGZyb20gJy4uL3RhZyc7XG4vLyBOZSBwZXV0IHBhcyDDqnRyZSBkw6lwbGFjw6kgZGFucyAnc2hhcmVkJyDDoCBjYXVzZSBkZSBsYSBkw6lwZW5kYW5jZSBzdXIgRHNmckJhZGdlIGV0IERzZnJUYWdcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVBRElOR19MRVZFTDogRHNmckhlYWRpbmdMZXZlbCA9ICdIMyc7XG5cbkBDb21wb25lbnQoeyB0ZW1wbGF0ZTogJycgfSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlUGFuZWxDb21wb25lbnQgaW1wbGVtZW50cyBEc2ZyTmF2aWdhdGlvbiB7XG4gIC8qKiBAc2luY2UgMS43IExhIHByb3ByacOpdMOpIGFyaWFMYWJlbCBkw6lmaW5pdCB1bmUgdmFsZXVyIGRlIGNoYcOubmUgcXVpIMOpdGlxdWV0dGUgdW4gw6lsw6ltZW50IGludGVyYWN0aWYuICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogUGVybWV0IGRlIHBvc2l0aW9ubmVyIGRlcyBiYWRnZXMgKGp1c3F1J8OgIDQgYmFkZ2VzIG1heGkpIGVuIGhhdXQgZHUgY29tcG9zYW50LCBvcHRpb25uZWwuXG4gICAqIEBzZWUgRHNmckJhZGdlXG4gICAqL1xuICBASW5wdXQoKSBiYWRnZXM6IERzZnJCYWRnZVtdID0gW107XG5cbiAgLyoqXG4gICAqIFBlcm1ldCBkJ2F2b2lyIHVuIGZvbmQgZ3JpcyBvdSB0cmFuc3BhcmVudC5cbiAgICovXG4gIEBJbnB1dCgpIGN1c3RvbUJhY2tncm91bmQ6IERzZnJQYW5lbEJhY2tncm91bmQgPSAnZGVmYXVsdCc7XG5cbiAgLyoqXG4gICAqIFBlcm1ldCBkJ2FmZmljaGVyIHVuZSBvbWJyZSBvdSBuZSBwYXMgbWV0dHJlIGRlIGJvcmR1cmUuXG4gICAqL1xuICBASW5wdXQoKSBjdXN0b21Cb3JkZXI6IERzZnJQYW5lbEJvcmRlciA9ICdkZWZhdWx0JztcblxuICAvKipcbiAgICogVW5lIGRlc2NyaXB0aW9uIG9wdGlvbm5lbGxlIHBsZWluIHRleHRlLlxuICAgKi9cbiAgQElucHV0KCkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogUGVybWV0IGRlIGTDqXNhY3RpdmVyIGxlIGNvbXBvc2FudC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVxdWl2YWxlbnQgw6AgbCdhdHRyaWJ1dCBodG1sIG5hdGlmICdkb3dubG9hZCcuXG4gICAqIC0gdHJ1ZSA6IGxhIGZlbsOqdHJlIGRlIHTDqWzDqWNoYXJnZW1lbnQgcydhZmZpY2hlIGRpcmVjdGVtZW50LFxuICAgKiAtIGZhbHNlIDogbGUgZmljaGllciBlc3Qgb3V2ZXJ0IGF2YW50IGQnw6p0cmUgdMOpbMOpY2hhcmfDqSxcbiAgICogLSBzdHJpbmcgOiBub3V2ZWF1IG5vbSBkZSBmaWNoaWVyIHByb3Bvc8OpIGF1IHTDqWzDqWNoYXJnZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKSBkb3dubG9hZERpcmVjdDogYm9vbGVhbiB8IHN0cmluZyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNpICd0cnVlJyAoZMOpZmF1dCkgOiBsZSBkw6l0YWlsIGR1IHTDqWzDqWNoYXJnZW1lbnQgZXN0IGF1dG9tYXRpcXVlbWVudCByZW5zZWlnbsOpIHBhciBsZSBzY3JpcHQgRFNGUi5cbiAgICogLSBEYW5zIGNlIGNhcywgbGVzIHByb3ByacOpdMOpcyA6ICdkb3dubG9hZE1pbWVUeXBlJywgJ2Rvd25sb2FkU2l6ZUJ5dGVzJywgJ2Rvd25sb2FkTGFuZ0NvZGUnIHNvbnQgaWdub3LDqWVzLlxuICAgKiBTaSAnZmFsc2UnIDogbGUgZMOpdGFpbCBlc3QgY2FsY3Vsw6kgcGFyIGxhIGxpYnJhaXJpZSAnbmd4LWRzZnInLlxuICAgKiBEYW5zIGxlcyAyIGNhcywgbCd1bml0w6kgZMOpcGVuZCBkZSBsYSBsYW5ndWUgZHUgc2l0ZSwgZW4gb2N0ZXRzIChrbywgTW8sIC4uLikgcG91ciAnZnInLCBlbiAnYnl0ZXMnIChLQiwgTUIuLi4pIHBvdXIgbGVzIGF1dHJlcyBsYW5ndWVzLlxuICAgKiBDZSBtw6ljYW5pc21lIHBldXQgw6p0cmUgZm9yY8OpIGF2ZWMgJ2Rvd25sb2FkU2l6ZVVuaXQnLlxuICAgKi9cbiAgQElucHV0KCkgZG93bmxvYWRBc3Nlc3NGaWxlID0gdHJ1ZTtcblxuICAvKipcbiAgICogT2JsaWdhdG9pcmUsIGRhbnMgbGUgY2FzIGQndW4gdMOpbMOpY2hhcmdlbWVudCBzaSBsZSBkb2N1bWVudCBuJ2VzdCBwYXMgZHUgbcOqbWUgbGFuZ2FnZSBxdWUgbGEgcGFnZSBjb3VyYW50ZS5cbiAgICogRXggOiBkb3dubG9hZExhbmdDb2RlPVwiZW5cIi5cbiAgICovXG4gIEBJbnB1dCgpIGRvd25sb2FkTGFuZ0NvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogRm9ybWF0IGR1IGZpY2hpZXIsIMOgIHJlbnNlaWduZXIgc2kgZG93bmxvYWRBc3Nlc3NGaWxlIGVzdCBmYXV4LlxuICAgKi9cbiAgQElucHV0KCkgZG93bmxvYWRNaW1lVHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQb2lkcyBkdSBmaWNoaWVyIGVuIG9jdGV0cywgw6AgcmVuc2VpZ25lciBzaSBkb3dubG9hZEFzc2Vzc0ZpbGUgZXN0IGZhdXguXG4gICAqICovXG4gIEBJbnB1dCgpIGRvd25sb2FkU2l6ZUJ5dGVzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBlcm1ldCBkZSBkw6lzYWN0aXZlciBsZSBsaWVuIMOpdGVuZHUgZGUgbGEgY2FydGUuXG4gICAqL1xuICBASW5wdXQoKSBlbmxhcmdlTGluayA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRpdHJlIGR1IGNvbXBvc2FudC5cbiAgICogTGUgZmFpdCBkZSB2YWxvcmlzZXIgY2V0dGUgcHJvcHJpw6l0w6kgZXN0IHByaW9yaXRhaXJlIHN1ciBsZSBuZy1jb250ZW50IFtoZWFkaW5nXS5cbiAgICogQXR0ZW50aW9uIGZvbmN0aW9ubmVsbGVtZW50IGxhIHByw6lzZW5jZSBkJ3VuIHRpdHJlIGVzdCBvYmxpZ2F0b2lyZS5cbiAgICovXG4gIEBJbnB1dCgpIGhlYWRpbmc6IHN0cmluZztcblxuICAvKipcbiAgICogTGUgbml2ZWF1IGRlIHRpdHJlIGRldmFudCDDqnRyZSB1dGlsaXPDqSAodGFnIGBoNGAgcGFyIGTDqWZhdXQpLlxuICAgKiBDZXR0ZSBiYWxpc2UgbmUgcHJvZHVpdCBwYXMgZGUgc3R5bGUsIG1haXMgZGUgbGEgc3RydWN0dXJlLlxuICAgKi9cbiAgQElucHV0KCkgaGVhZGluZ0xldmVsOiBzdHJpbmcgPSBERUZBVUxUX0hFQURJTkdfTEVWRUw7XG5cbiAgLyoqXG4gICAqIFBhc3NlIGxlIGNvbXBvc2FudCBlbiBtb2RlIGhvcml6b250YWwuXG4gICAqL1xuICBASW5wdXQoKSBob3Jpem9udGFsID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFBlcm1ldCBkZSBwb3NpdGlvbm5lciB1biBsaWVuIGRlIHR5cGUgaHJlZi5cbiAgICogU2VydCBhdXNzaSBkZSBsaWVuIGRlIHTDqWzDqWNoYXJnZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKSBsaW5rOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBlcm1ldCBkZSBwb3NpdGlvbm5lciB1bmUgcm91dGUgQW5ndWxhciBxdWkgc2VyYSByw6ljdXDDqXLDqWUgdmlhICdvdXRwdXQgdGlsZVNlbGVjdC5cbiAgICovXG4gIEBJbnB1dCgpIHJvdXRlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggYW5ndWxhciBnw6lyw6kgZW4gdGFudCBxdWUgZGlyZWN0aXZlIHJvdXRlckxpbmsuIFByaW9yaXRhaXJlIGV0IGV4Y2x1c2lmIGF2ZWMgbGluayBldCByb3V0ZS5cbiAgICovXG4gIEBJbnB1dCgpIHJvdXRlUGF0aDogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENsYXNzZSBDU1MgdXRpbGlzw6llIHBvdXIgbGEgZGlyZWN0aXZlIHJvdXRlckxpbmsgYWN0aXZlLlxuICAgKi9cbiAgQElucHV0KCkgcm91dGVyTGlua0FjdGl2ZTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFJvdXRlckxpbmsgOiB2YWxldXJzIGFkZGl0aW9ubmVsbGVzIGRlIG5hdmlnYXRpb24gcG91ciBsZSByb3V0ZXJMaW5rIChxdWVyeVBhcmFtcywgc3RhdGUsIGV0Yy4pXG4gICAqL1xuICBASW5wdXQoKSByb3V0ZXJMaW5rRXh0cmFzOiBOYXZpZ2F0aW9uRXh0cmFzO1xuXG4gIC8qKlxuICAgKiBEaW1lbnNpb24gZHUgY29tcG9zYW50LCAnTUQnIHBhciBkw6lmYXV0ICgnU00sICdNRCcgdW5pcXVlbWVudCBwb3VyIGxhIHR1aWxlKS5cbiAgICovXG4gIEBJbnB1dCgpIHNpemU6IERzZnJTaXplID0gJ01EJztcblxuICBwcml2YXRlIF9kb3dubG9hZCA9IGZhbHNlO1xuICBwcml2YXRlIF9kb3dubG9hZFNpemVVbml0OiBEc2ZyRmlsZVNpemVVbml0O1xuICBwcml2YXRlIF9saW5rVGFyZ2V0OiBEc2ZyTGlua1RhcmdldDtcbiAgcHJpdmF0ZSBfdGFnczogRHNmclRhZ1tdID0gW107XG4gIHByaXZhdGUgX2RldGFpbEJvdHRvbTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcml2YXRlIGxhbmdTZXJ2aWNlOiBMYW5nU2VydmljZSkge31cblxuICBnZXQgZG93bmxvYWRTaXplVW5pdCgpOiBEc2ZyRmlsZVNpemVVbml0IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxvYWRTaXplVW5pdCB8fCB0aGlzLmxhbmdTZXJ2aWNlLmxhbmcgPyAnb2N0ZXRzJyA6ICdieXRlcyc7XG4gIH1cblxuICBnZXQgbGlua1RhcmdldCgpOiBEc2ZyTGlua1RhcmdldCB7XG4gICAgcmV0dXJuIHRoaXMuX2xpbmtUYXJnZXQ7XG4gIH1cblxuICBnZXQgdGFncygpOiBEc2ZyVGFnW10ge1xuICAgIHJldHVybiB0aGlzLl90YWdzO1xuICB9XG5cbiAgZ2V0IGl0ZW1MaW5rKCk6IERzZnJMaW5rIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuaGVhZGluZyA/IHRoaXMuaGVhZGluZyA6ICcnO1xuICAgIGNvbnN0IGl0ZW1MaW5rOiBEc2ZyTGluayA9IHsgbGFiZWw6IGxhYmVsLCBhcmlhTGFiZWw6IHRoaXMuYXJpYUxhYmVsIH07IC8vIGFyaWFMYWJlbCBAc2luY2UgMS43XG4gICAgaWYgKHRoaXMubGluaykge1xuICAgICAgaXRlbUxpbmsubGluayA9IHRoaXMubGluaztcbiAgICB9IGVsc2UgaWYgKHRoaXMucm91dGUpIHtcbiAgICAgIGl0ZW1MaW5rLnJvdXRlID0gdGhpcy5yb3V0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1MaW5rO1xuICB9XG5cbiAgZ2V0IGRvd25sb2FkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kb3dubG9hZDtcbiAgfVxuXG4gIGdldCBkZXRhaWxCb3R0b20oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gIXRoaXMuZG93bmxvYWQgPyB0aGlzLl9kZXRhaWxCb3R0b20gOiB0aGlzLmRvd25sb2FkRGV0YWlsO1xuICB9XG5cbiAgLyoqXG4gICAqIERhbnMgbGUgY2FzIGQndW4gdMOpbMOpY2hhcmdlbWVudCBzYW5zIGwnb3B0aW9uICdkb3dubG9hZEFzc2Vzc0ZpbGUnLFxuICAgKiBvbiBjcsOpZSBsZSBkw6l0YWlsIMOgIGwnYWlkZSBkZXMgcHJvcHJpw6l0w6lzICdkb3dubG9hZFNpemVCeXRlcycsICdkb3dubG9hZE1pbWVUeXBlJy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGRvd25sb2FkRGV0YWlsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRvd25sb2FkRGV0YWlsKHRoaXMuZG93bmxvYWRNaW1lVHlwZSwgdGhpcy5kb3dubG9hZFNpemVCeXRlcywgdGhpcy5kb3dubG9hZFNpemVVbml0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1lIGxlIGNvbXBvc2FudCBjbGFzc2lxdWUgZW4gY29tcG9zYW50IGRlIHTDqWzDqWNoYXJnZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZG93bmxvYWQoZG93bmxvYWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kb3dubG9hZCA9IGRvd25sb2FkO1xuICAgIGlmICh0aGlzLl9kb3dubG9hZCkgdGhpcy5lbmxhcmdlTGluayA9IHRydWU7XG4gIH1cblxuICAvKiogWm9uZSBkZSBkw6l0YWlsIHNlIHRyb3V2YW50IHZpc3VlbGxlbWVudCBzb3VzIGxhIGRlc2NyaXB0aW9uIGV0IMOgIGPDtHTDqSBkZSBs4oCZaWPDtG5lLCBvcHRpb25uZWwuXG4gICAqIFBvdXIgbGEgdHVpbGUsIG9uIHBldXQgcGFzc2VyIHVuIHNsb3QgZGUgc8OpbGVjdGV1ciBcImRldGFpbFwiLlxuICAgKiBFbiBjYXMgZGUgdMOpbMOpY2hhcmdlbWVudCBsZSBkw6l0YWlsIGVzdCByZW1wbGFjw6kgcGFyIGxlcyBpbmZvcm1hdGlvbnMgZHUgZmljaGllciBjYWxjdWzDqWVzIHNlbG9uIGRvd25sb2FkQXNzZXNzRmlsZS5cbiAgICovXG4gIEBJbnB1dCgpIHNldCBkZXRhaWxCb3R0b20odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2RldGFpbEJvdHRvbSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlIGwndW5pdMOpIHBhciBkw6lmYXV0IHF1aSBkw6lwZW5kIGRlIGxhIGxhbmd1ZSBkdSBzaXRlLCBlbiBvY3RldHMgKGtvLCBNbywgLi4uKSBwb3VyICdmcicsIGVuICdieXRlcycgKEtCLCBNQi4uLikgcG91ciBsZXMgYXV0cmVzIGxhbmd1ZXMuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZG93bmxvYWRTaXplVW5pdCh2YWx1ZTogRHNmckZpbGVTaXplVW5pdCkge1xuICAgIHRoaXMuX2Rvd25sb2FkU2l6ZVVuaXQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRyaWJ1dCB0YXJnZXQgZHUgbGllbi5cbiAgICovXG4gIEBJbnB1dCgpIHNldCBsaW5rVGFyZ2V0KHRhcmdldDogRHNmckxpbmtUYXJnZXQpIHtcbiAgICB0aGlzLl9saW5rVGFyZ2V0ID0gdGFyZ2V0O1xuXG4gICAgLy8gU2kgdW4gbGllbiBlc3QgZXh0ZXJuZSwgbGUgY29tcG9zYW50IG5lIHBldXQgcGFzIMOqdHJlIGVudGnDqHJlbWVudCBjbGlxdWFibGVcbiAgICBpZiAodGFyZ2V0ID09PSAnX2JsYW5rJykgdGhpcy5lbmxhcmdlTGluayA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcm1ldCBkZSBwb3NpdGlvbm5lciBkZXMgdGFncyBlbiBoYXV0IGRlIGxhIGNhcnRlIChjbGlxdWFibGVzIG91IG5vbiksIG9wdGlvbm5lbC5cbiAgICogQHNlZSBEc2ZyVGFnXG4gICAqL1xuICBASW5wdXQoKSBzZXQgdGFncyh0YWdzOiBEc2ZyVGFnW10pIHtcbiAgICB0aGlzLl90YWdzID0gdGFncztcblxuICAgIC8vIFbDqXJpZmllIHNpIHVuIHRhZyBlc3QgY2xpcXVhYmxlIHBvdXIgZMOpc2FjdGl2ZXIgZW5sYXJnZUxpbmsuXG4gICAgaWYgKHRhZ3M/LmZpbmQoKHRhZykgPT4gdGFnLmxpbmspKSB0aGlzLmVubGFyZ2VMaW5rID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgKEBzaW5jZSAxLjExLjUpIHV0aWxpc2VyIGByb3V0ZVBhdGhgIMOgIGxhIHBsYWNlLlxuICAgKiByb3V0ZXJMaW5rIHByb3ZvcXVlIHVuIGJ1ZyBhY2Nlc3NpYmlsaXTDqSBzdXIgbGEgbmF2aWdhdGlvbiBhdSBjbGF2aWVyIChham91dCBkJ3VuIHRhYmluZGV4PTApXG4gICAqKi9cbiAgQElucHV0KCkgc2V0IHJvdXRlckxpbmsodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlKSB0aGlzLnJvdXRlUGF0aCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBoYXNMaW5rKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLmxpbmsgfHwgdGhpcy5yb3V0ZSB8fCB0aGlzLnJvdXRlUGF0aCk7XG4gIH1cbn1cbiJdfQ==