@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
JavaScript
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==