From 422316c3c2f7ad367affb4ea7273a1ece93a3305 Mon Sep 17 00:00:00 2001 From: Mathias Chouet <mathias.chouet@irstea.fr> Date: Thu, 30 Apr 2020 10:31:01 +0200 Subject: [PATCH] Improve HTML entities decoding, and fix wrong --- src/app/app.component.ts | 13 ++++--------- .../generic-select/generic-select.component.html | 2 +- .../select-field-line.component.ts | 3 ++- src/locale/messages.fr.json | 4 ++-- 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/app/app.component.ts b/src/app/app.component.ts index c7bd6a30d..92170a313 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -24,6 +24,8 @@ import { DialogSaveSessionComponent } from "./components/dialog-save-session/dia import { QuicknavComponent } from "./components/quicknav/quicknav.component"; import { NotificationsService } from "./services/notifications.service"; +import { decodeHtml } from './util'; + import { HotkeysService, Hotkey } from "angular2-hotkeys"; import { MatomoInjector, MatomoTracker } from "ngx-matomo"; @@ -268,13 +270,6 @@ export class AppComponent implements OnInit, OnDestroy, Observer { } } - /** clodo trick @see https://www.julesgaston.fr/encoder-decoder-entites-html-entities-javascript/ */ - public static decodeHTMLEntities(text: string): string { - const textArea = document.createElement("textarea"); - textArea.innerHTML = text; - return textArea.value; - } - /** * Triggered at app startup. * Preferences are loaded by app setup service @@ -338,11 +333,11 @@ export class AppComponent implements OnInit, OnDestroy, Observer { } public getCalculatorLabel(t: CalculatorType) { - return AppComponent.decodeHTMLEntities(this.formulaireService.getLocalisedTitleFromCalculatorType(t)); + return decodeHtml(this.formulaireService.getLocalisedTitleFromCalculatorType(t)); } public getFullCalculatorTitle(calc: { title: string, type: CalculatorType, active?: boolean }): string { - return AppComponent.decodeHTMLEntities(calc.title + " (" + this.getCalculatorLabel(calc.type) + ")"); + return decodeHtml(calc.title + " (" + this.getCalculatorLabel(calc.type) + ")"); } public get calculators() { diff --git a/src/app/components/generic-select/generic-select.component.html b/src/app/components/generic-select/generic-select.component.html index 8c352a2cf..7ce468d11 100644 --- a/src/app/components/generic-select/generic-select.component.html +++ b/src/app/components/generic-select/generic-select.component.html @@ -1,7 +1,7 @@ <mat-form-field> <mat-select [id]="selectId" [placeholder]="label" [(value)]="selectedValue" [multiple]="isMultiple" [disabled]="isDisabled"> <mat-select-trigger *ngIf="isMultiple"> - {{ selectedValue && selectedValue[0] ? selectedValue[0].label : '' }} + {{ selectedValue && selectedValue[0] ? entryLabel(selectedValue[0]) : '' }} <span *ngIf="selectedValue?.length > 1" class="multiple-selection-label"> (+ {{ selectedValue.length - 1 }} {{ selectedValue?.length === 2 ? uitextAndOther : uitextAndOthers }}) </span> diff --git a/src/app/components/select-field-line/select-field-line.component.ts b/src/app/components/select-field-line/select-field-line.component.ts index 09d05640b..b438c0256 100644 --- a/src/app/components/select-field-line/select-field-line.component.ts +++ b/src/app/components/select-field-line/select-field-line.component.ts @@ -5,6 +5,7 @@ import { SelectEntry } from "../../formulaire/elements/select-entry"; import { I18nService } from "../../services/internationalisation.service"; import { ApplicationSetupService } from "../../services/app-setup.service"; import { SelectFieldCustom } from "../../formulaire/elements/select-field-custom"; +import { decodeHtml } from "../../util"; @Component({ selector: "select-field-line", @@ -46,7 +47,7 @@ export class SelectFieldLineComponent implements OnInit { } protected entryLabel(entry: SelectEntry): string { - return entry.label; + return decodeHtml(entry.label); } public get selectedValue(): SelectEntry | SelectEntry[] { diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index cbea22c5c..fe6856a2e 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -487,7 +487,7 @@ "INFO_REMOUSRESULTS_TIRANT": "Tirant d'eau (m)", "INFO_REMOUSRESULTS_TIRANTCRITIQUE": "Tirant d'eau critique", "INFO_REMOUSRESULTS_TIRANTNORMAL": "Tirant d'eau normal", - "INFO_REPORT_BUG_BODY": "Ceci est un rapport d'erreur.\n\nMerci de décrire rapidement ci-dessous le problème rencontré, et les étapes qui vous y ont mené :\n\n\n\n\n--- État de la session en cours - ne pas modifier le texte ci-dessous ---\n--------------------------------------------------------------------------------------------\n\n", + "INFO_REPORT_BUG_BODY": "Ceci est un rapport d'erreur.\n\nMerci de décrire rapidement ci-dessous le problème rencontré, et les étapes qui vous y ont mené:\n\n\n\n\n--- État de la session en cours - ne pas modifier le texte ci-dessous ---\n--------------------------------------------------------------------------------------------\n\n", "INFO_REPORT_BUG_SUBJECT": "Rapport d'erreur", "INFO_REQUIRES": "dépend de", "INFO_RESULTS_EXPORT_AS_SPREADSHEET": "Exporter en XLSX", @@ -539,7 +539,7 @@ "INFO_THEME_VERIFICATION_TITRE": "Vérification de passes", "INFO_TITREJOURNAL": "Journal de calcul", "INFO_TITREJOURNAL_GLOBAL": "Synthèse du journal de calcul", - "INFO_WELCOME_CONTENT": "<p>Le logiciel Cassiopée a été développé par le pôle R&D écohydraulique regroupant l'<a href=\"https ://ofb.gouv.fr\" target=\"_blank\">OFB</a> (Office Français de la Biodiversité) et l’<a href=\"https ://www.imft.fr\" target=\"_blank\">IMFT</a> (Institut de mécanique des fluides de Toulouse) et par l'<a href=\"http ://g-eau.fr\" target=\"_blank\">UMR G-EAU</a> (UMR Gestion de l'Eau, Acteurs, Usages).</p><p>Il regroupe des outils d'aide à la conception des dispositifs de franchissement piscicoles pour la montaison et la dévalaison ainsi que des outils de calcul hydraulique utiles pour l'ingénierie en environnement et agriculture.</p><p>Pour plus d'informations, consulter les <a href=\"assets/docs/fr/mentions_legales.html\" target=\"_blank\">mentions légales</a> et la <a href=\"assets/docs/fr/index.html\" target=\"_blank\">documentation</a>.</p>", + "INFO_WELCOME_CONTENT": "<p>Le logiciel Cassiopée a été développé par le pôle R&D écohydraulique regroupant l'<a href=\"https://ofb.gouv.fr\" target=\"_blank\">OFB</a> (Office Français de la Biodiversité) et l’<a href=\"https://www.imft.fr\" target=\"_blank\">IMFT</a> (Institut de mécanique des fluides de Toulouse) et par l'<a href=\"http://g-eau.fr\" target=\"_blank\">UMR G-EAU</a> (UMR Gestion de l'Eau, Acteurs, Usages).</p><p>Il regroupe des outils d'aide à la conception des dispositifs de franchissement piscicoles pour la montaison et la dévalaison ainsi que des outils de calcul hydraulique utiles pour l'ingénierie en environnement et agriculture.</p><p>Pour plus d'informations, consulter les <a href=\"assets/docs/fr/mentions_legales.html\" target=\"_blank\">mentions légales</a> et la <a href=\"assets/docs/fr/index.html\" target=\"_blank\">documentation</a>.</p>", "INFO_WELCOME_SUBTITLE": "Modules de calcul d'hydraulique", "INFO_EXAMPLE_LABEL_CHANNEL_FLOW": "Débit d'un chenal avec ouvrages", "INFO_EXAMPLE_LABEL_PAB_COMPLETE": "Passe à bassins type", -- GitLab