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

109 lines 15.3 kB
import { CommonModule } from '@angular/common'; import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core'; import { RouterModule } from '@angular/router'; import { DsfrPositionConst } from '../../models'; import * as i0 from "@angular/core"; /** Ce composant permet de gérer facilement une ancre href ou un `routerLink` sans ajout de styles. * Utilisé par le `header`, `footer`, `breadcrumb` et `sidemenu`. */ export class LinkDownloadComponent { constructor() { /** * Active la version download avec l'attribut download. * Permet l'utilisation de `downloadAssessFile` et `langCode` */ this.downloadDirect = false; /** Option de détail de téléchargement renseigné automatiquement. * Si la valeur est 'bytes', l'unité sera en Bytes */ this.downloadAssessFile = false; /** * Langue courante. hreflang ne sera indiquée que différent de la langue courante. */ this.langCode = 'fr'; /** * Propage la valeur de 'route' ou de 'link' (selon le cas) lors du click sur le lien. */ this.linkSelect = new EventEmitter(); } get disabled() { return !(this.item.route || this.item.routerLink || this.item.link); } get item() { return this._item; } /** Item représentant un lien `<a>` avec ou sans `routerLink`. */ set item(item) { if (item.label) { this._item = { ...item, label: item.label }; } else { this._item = item; } if (this.item) this.item.customClass = this.getLinkClasses(); } /** * Si === 'true', télécharge directement le fichier sans l'ouvrir, 'false' par défaut. * @internal */ isDirectDownload() { return this.downloadDirect !== false; } /** @internal */ getHref() { if (this.item.route) return this.item.route; if (this.item.link) return this.item.link; return undefined; } /** @internal */ getNewFileName() { return typeof this.downloadDirect === 'string' ? this.downloadDirect : ''; } onLinkSelect(event) { if (this.item.route && !this.item.routerLink) { event.preventDefault(); this.linkSelect.emit(this.item.route); } else if (this.item.link) { this.linkSelect.emit(this.item.link); } } /** @internal */ getLinkTarget(item) { return item.target ?? item.linkTarget; } /** @internal */ getLinkClasses() { const classes = []; classes.push(!this.customClass ? 'fr-link' : this.customClass); if (this._item.icon) { classes.push(this._item.icon); // Dans le header, les liens utilisent la classe fr-btn, pour être cohérent, on va utiliser fr-btn--icon-left et right const likeButton = this.customClass?.search('fr-btn') >= 0; const prefixPos = likeButton ? 'fr-btn--icon-' : 'fr-link--icon-'; classes.push(this._item.iconPosition === DsfrPositionConst.RIGHT ? prefixPos + 'right' : prefixPos + 'left'); } return classes.join(' '); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LinkDownloadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LinkDownloadComponent, isStandalone: true, selector: "edu-link-download", inputs: { customClass: "customClass", downloadDirect: "downloadDirect", downloadAssessFile: "downloadAssessFile", langCode: "langCode", item: "item" }, outputs: { linkSelect: "linkSelect" }, ngImport: i0, template: "<!-- Lien de t\u00E9l\u00E9chargement-->\n<a\n [attr.aria-controls]=\"item.ariaControls || null\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-label]=\"item.ariaLabel || null\"\n [attr.href]=\"getHref() || null\"\n [attr.download]=\"!isDirectDownload() ? null : getNewFileName()\"\n [attr.data-fr-assess-file]=\"downloadAssessFile || null\"\n [attr.hreflang]=\"langCode || null\"\n (click)=\"onLinkSelect($event)\"\n [innerHTML]=\"item.label\">\n <ng-content></ng-content>\n</a>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LinkDownloadComponent, decorators: [{ type: Component, args: [{ selector: 'edu-link-download', encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule, RouterModule], template: "<!-- Lien de t\u00E9l\u00E9chargement-->\n<a\n [attr.aria-controls]=\"item.ariaControls || null\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-label]=\"item.ariaLabel || null\"\n [attr.href]=\"getHref() || null\"\n [attr.download]=\"!isDirectDownload() ? null : getNewFileName()\"\n [attr.data-fr-assess-file]=\"downloadAssessFile || null\"\n [attr.hreflang]=\"langCode || null\"\n (click)=\"onLinkSelect($event)\"\n [innerHTML]=\"item.label\">\n <ng-content></ng-content>\n</a>\n" }] }], propDecorators: { customClass: [{ type: Input }], downloadDirect: [{ type: Input }], downloadAssessFile: [{ type: Input }], langCode: [{ type: Input }], linkSelect: [{ type: Output }], item: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1kb3dubG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHNmci1jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvbGluay1kb3dubG9hZC9saW5rLWRvd25sb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1kc2ZyLWNvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9saW5rLWRvd25sb2FkL2xpbmstZG93bmxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBNEIsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBUzNFO29FQUNvRTtBQUNwRSxNQUFNLE9BQU8scUJBQXFCO0lBVGxDO1FBYUU7OztXQUdHO1FBQ00sbUJBQWMsR0FBcUIsS0FBSyxDQUFDO1FBRWxEOztXQUVHO1FBQ00sdUJBQWtCLEdBQXNCLEtBQUssQ0FBQztRQUV2RDs7V0FFRztRQUNNLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFFekI7O1dBRUc7UUFDTyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztLQXVFbkQ7SUFuRUMsSUFBSSxRQUFRO1FBQ1YsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0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QUcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7K0dBN0ZVLHFCQUFxQjttR0FBckIscUJBQXFCLDRRQ2RsQyxnZkFhQSwyQ0RIWSxZQUFZLDhCQUFFLFlBQVk7OzRGQUl6QixxQkFBcUI7a0JBVGpDLFNBQVM7K0JBQ0UsbUJBQW1CLGlCQUVkLGlCQUFpQixDQUFDLElBQUksY0FDekIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQzs4QkFNNUIsV0FBVztzQkFBbkIsS0FBSztnQkFNRyxjQUFjO3NCQUF0QixLQUFLO2dCQUtHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtJLFVBQVU7c0JBQW5CLE1BQU07Z0JBYU0sSUFBSTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEc2ZyTGluaywgRHNmckxpbmtUYXJnZXQsIERzZnJQb3NpdGlvbkNvbnN0IH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZWR1LWxpbmstZG93bmxvYWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGluay1kb3dubG9hZC5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJvdXRlck1vZHVsZV0sXG59KVxuLyoqIENlIGNvbXBvc2FudCBwZXJtZXQgZGUgZ8OpcmVyIGZhY2lsZW1lbnQgdW5lIGFuY3JlIGhyZWYgb3UgdW4gYHJvdXRlckxpbmtgIHNhbnMgYWpvdXQgZGUgc3R5bGVzLlxuICogVXRpbGlzw6kgcGFyIGxlIGBoZWFkZXJgLCBgZm9vdGVyYCwgYGJyZWFkY3J1bWJgIGV0IGBzaWRlbWVudWAuICovXG5leHBvcnQgY2xhc3MgTGlua0Rvd25sb2FkQ29tcG9uZW50IHtcbiAgLyoqIENsYXNzZSBwZXJzb25uYWxpc8OpZSBkdSBjb21wb3NhbnQsIHBhciBleGVtcGxlLCBgZnItYnRuYCwgYGZyLW5hdl9fbGlua2AsIC4uLiAqL1xuICBASW5wdXQoKSBjdXN0b21DbGFzczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBY3RpdmUgbGEgdmVyc2lvbiBkb3dubG9hZCBhdmVjIGwnYXR0cmlidXQgZG93bmxvYWQuXG4gICAqIFBlcm1ldCBsJ3V0aWxpc2F0aW9uIGRlIGBkb3dubG9hZEFzc2Vzc0ZpbGVgIGV0ICBgbGFuZ0NvZGVgXG4gICAqL1xuICBASW5wdXQoKSBkb3dubG9hZERpcmVjdDogYm9vbGVhbiB8IHN0cmluZyA9IGZhbHNlO1xuXG4gIC8qKiBPcHRpb24gZGUgZMOpdGFpbCBkZSB0w6lsw6ljaGFyZ2VtZW50IHJlbnNlaWduw6kgYXV0b21hdGlxdWVtZW50LlxuICAgKiBTaSBsYSB2YWxldXIgZXN0ICdieXRlcycsIGwndW5pdMOpIHNlcmEgZW4gQnl0ZXNcbiAgICovXG4gIEBJbnB1dCgpIGRvd25sb2FkQXNzZXNzRmlsZTogYm9vbGVhbiB8ICdieXRlcycgPSBmYWxzZTtcblxuICAvKipcbiAgICogTGFuZ3VlIGNvdXJhbnRlLiBocmVmbGFuZyBuZSBzZXJhIGluZGlxdcOpZSBxdWUgZGlmZsOpcmVudCBkZSBsYSBsYW5ndWUgY291cmFudGUuXG4gICAqL1xuICBASW5wdXQoKSBsYW5nQ29kZSA9ICdmcic7XG5cbiAgLyoqXG4gICAqIFByb3BhZ2UgbGEgdmFsZXVyIGRlICdyb3V0ZScgb3UgZGUgJ2xpbmsnIChzZWxvbiBsZSBjYXMpIGxvcnMgZHUgY2xpY2sgc3VyIGxlIGxpZW4uXG4gICAqL1xuICBAT3V0cHV0KCkgbGlua1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIHByaXZhdGUgX2l0ZW06IERzZnJMaW5rO1xuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0aGlzLml0ZW0ucm91dGUgfHwgdGhpcy5pdGVtLnJvdXRlckxpbmsgfHwgdGhpcy5pdGVtLmxpbmspO1xuICB9XG5cbiAgZ2V0IGl0ZW0oKTogRHNmckxpbmsge1xuICAgIHJldHVybiB0aGlzLl9pdGVtO1xuICB9XG5cbiAgLyoqIEl0ZW0gcmVwcsOpc2VudGFudCB1biBsaWVuIGA8YT5gIGF2ZWMgb3Ugc2FucyBgcm91dGVyTGlua2AuICovXG4gIEBJbnB1dCgpIHNldCBpdGVtKGl0ZW06IERzZnJMaW5rKSB7XG4gICAgaWYgKGl0ZW0ubGFiZWwpIHtcbiAgICAgIHRoaXMuX2l0ZW0gPSB7IC4uLml0ZW0sIGxhYmVsOiBpdGVtLmxhYmVsIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2l0ZW0gPSBpdGVtO1xuICAgIH1cbiAgICBpZiAodGhpcy5pdGVtKSB0aGlzLml0ZW0uY3VzdG9tQ2xhc3MgPSB0aGlzLmdldExpbmtDbGFzc2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2kgPT09ICd0cnVlJywgdMOpbMOpY2hhcmdlIGRpcmVjdGVtZW50IGxlIGZpY2hpZXIgc2FucyBsJ291dnJpciwgJ2ZhbHNlJyBwYXIgZMOpZmF1dC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBpc0RpcmVjdERvd25sb2FkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRvd25sb2FkRGlyZWN0ICE9PSBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgZ2V0SHJlZigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLml0ZW0ucm91dGUpIHJldHVybiB0aGlzLml0ZW0ucm91dGU7XG4gICAgaWYgKHRoaXMuaXRlbS5saW5rKSByZXR1cm4gdGhpcy5pdGVtLmxpbms7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgZ2V0TmV3RmlsZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuZG93bmxvYWREaXJlY3QgPT09ICdzdHJpbmcnID8gdGhpcy5kb3dubG9hZERpcmVjdCA6ICcnO1xuICB9XG5cbiAgb25MaW5rU2VsZWN0KGV2ZW50OiBFdmVudCkge1xuICAgIGlmICh0aGlzLml0ZW0ucm91dGUgJiYgIXRoaXMuaXRlbS5yb3V0ZXJMaW5rKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5saW5rU2VsZWN0LmVtaXQodGhpcy5pdGVtLnJvdXRlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbS5saW5rKSB7XG4gICAgICB0aGlzLmxpbmtTZWxlY3QuZW1pdCh0aGlzLml0ZW0ubGluayk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBnZXRMaW5rVGFyZ2V0KGl0ZW06IERzZnJMaW5rKTogRHNmckxpbmtUYXJnZXQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBpdGVtLnRhcmdldCA/PyBpdGVtLmxpbmtUYXJnZXQ7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHByaXZhdGUgZ2V0TGlua0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjbGFzc2VzID0gW107XG4gICAgY2xhc3Nlcy5wdXNoKCF0aGlzLmN1c3RvbUNsYXNzID8gJ2ZyLWxpbmsnIDogdGhpcy5jdXN0b21DbGFzcyk7XG5cbiAgICBpZiAodGhpcy5faXRlbS5pY29uKSB7XG4gICAgICBjbGFzc2VzLnB1c2godGhpcy5faXRlbS5pY29uKTtcbiAgICAgIC8vIERhbnMgbGUgaGVhZGVyLCBsZXMgbGllbnMgdXRpbGlzZW50IGxhIGNsYXNzZSBmci1idG4sIHBvdXIgw6p0cmUgY29ow6lyZW50LCBvbiB2YSB1dGlsaXNlciBmci1idG4tLWljb24tbGVmdCBldCByaWdodFxuICAgICAgY29uc3QgbGlrZUJ1dHRvbiA9IHRoaXMuY3VzdG9tQ2xhc3M/LnNlYXJjaCgnZnItYnRuJykgPj0gMDtcbiAgICAgIGNvbnN0IHByZWZpeFBvcyA9IGxpa2VCdXR0b24gPyAnZnItYnRuLS1pY29uLScgOiAnZnItbGluay0taWNvbi0nO1xuICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuX2l0ZW0uaWNvblBvc2l0aW9uID09PSBEc2ZyUG9zaXRpb25Db25zdC5SSUdIVCA/IHByZWZpeFBvcyArICdyaWdodCcgOiBwcmVmaXhQb3MgKyAnbGVmdCcpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgfVxufVxuIiwiPCEtLSBMaWVuIGRlIHTDqWzDqWNoYXJnZW1lbnQtLT5cbjxhXG4gIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXRlbS5hcmlhQ29udHJvbHMgfHwgbnVsbFwiXG4gIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0uYXJpYUxhYmVsIHx8IG51bGxcIlxuICBbYXR0ci5ocmVmXT1cImdldEhyZWYoKSB8fCBudWxsXCJcbiAgW2F0dHIuZG93bmxvYWRdPVwiIWlzRGlyZWN0RG93bmxvYWQoKSA/IG51bGwgOiBnZXROZXdGaWxlTmFtZSgpXCJcbiAgW2F0dHIuZGF0YS1mci1hc3Nlc3MtZmlsZV09XCJkb3dubG9hZEFzc2Vzc0ZpbGUgfHwgbnVsbFwiXG4gIFthdHRyLmhyZWZsYW5nXT1cImxhbmdDb2RlIHx8IG51bGxcIlxuICAoY2xpY2spPVwib25MaW5rU2VsZWN0KCRldmVudClcIlxuICBbaW5uZXJIVE1MXT1cIml0ZW0ubGFiZWxcIj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9hPlxuIl19