From be57ef6927fa8fd4a2750d7018fa1cbf4b917183 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20PENHO=C3=8BT?= Date: Thu, 7 Oct 2021 16:17:08 +0200 Subject: [PATCH] =?UTF-8?q?Revu=20de=20la=20cr=C3=A9ation=20du=20HTML=20de?= =?UTF-8?q?s=20donn=C3=A9es=20re=C3=A7ues,=20qui=20peuvent=20avoir=20des?= =?UTF-8?q?=20champs=20absents=20ou=20trop=20ou=20encore=20fournis=20dans?= =?UTF-8?q?=20un=20ordre=20variable.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/errors.js | 1 - src/freeDatas2HTMLRender.ts | 19 ++++++++++--------- tests/renderSpec.ts | 7 ++++--- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 7e21b7e..6addb89 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "freedatas2html", - "version": "0.7.1", + "version": "0.7.2", "description": "Visualization of data from various sources (CSV, API, HTML...) with filters, classification, pagination, etc.", "main": "index.js", "scripts": { diff --git a/src/errors.js b/src/errors.js index fd26fba..f0d9bcf 100644 --- a/src/errors.js +++ b/src/errors.js @@ -19,7 +19,6 @@ module.exports = parserRemoteFail: "Erreur rencontrée durant l'accès aux données distantes.", parserTypeError: "Une donnée a été trouvée avec un type imprévu : ", renderNeedDatas: "Il ne peut y avoir de pagination, si les données n'ont pas été récupérées.", - renderUnknownField: "Un champ non attendu a été trouvé dans les données à afficher : ", selector2HTMLFail: "Le création d'un filtre dans le DOM nécessite l'initialisation de l'élément HTML et du numéro du champs à filter.", selectorCheckIsOkFail: "Le test est lancé sur un filtre incorrectement initialisé ou sur un attribut absent de la donnée à tester.", selectorFieldNotFound: "Au moins un des champs devant servir à filtrer les données n'existe pas dans le fichier.", diff --git a/src/freeDatas2HTMLRender.ts b/src/freeDatas2HTMLRender.ts index f86ae24..814238a 100644 --- a/src/freeDatas2HTMLRender.ts +++ b/src/freeDatas2HTMLRender.ts @@ -36,7 +36,7 @@ export class Render implements DatasRenders else { let datasHTML=this.settings.allBegining; - // On ne souhaite pas nécessairement afficher les noms des champs + // Les noms des champs ne sont pas forcément affichés séparément. if(this.settings.fieldsBegining !== undefined && this.settings.fieldDisplaying !== undefined && this.settings.fieldsEnding !== undefined ) { datasHTML+=this.settings.fieldsBegining; @@ -45,18 +45,19 @@ export class Render implements DatasRenders datasHTML+=this.settings.fieldsEnding; } datasHTML+=this.settings.linesBegining; - - for (let row in datas) + + // Suivant les objets/lignes, les champs peuvent se trouver dans un ordre différent, + // ou encore des champs peuvent manquer ou être en trop. + // Seuls les champs de "fields" doivent être traités et en respectant l'ordre de ce tableau. + for (let row of datas) { datasHTML+=this.settings.lineBegining; - for(let field in datas[row]) + for(let field of this._converter.fields) { - // On n'affiche que les champs attendus et signale les erreurs dans la console - /// REVOIR : IL FAUT QUE L'ON SOIT DANS LA BONNE COLONNE !!!! - if(this._converter.fields.indexOf(field) !== -1) - datasHTML+=this.settings.dataDisplaying.replace("#VALUE" , datas[row][field]).replace("#FIELDNAME" , field); + if(row[field] !== undefined) + datasHTML+=this.settings.dataDisplaying.replace("#VALUE", row[field]).replace("#FIELDNAME", field); else - console.log(errors.renderUnknownField+field); + datasHTML+=this.settings.dataDisplaying.replace("#VALUE", "").replace("#FIELDNAME", field); } datasHTML+=this.settings.lineEnding; } diff --git a/tests/renderSpec.ts b/tests/renderSpec.ts index 9480d97..a597a38 100644 --- a/tests/renderSpec.ts +++ b/tests/renderSpec.ts @@ -12,16 +12,17 @@ describe("Test du moteur de rendu HTML.", () => converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:8080/datas/datas1.csv"}); render=new Render(converter); converter.fields=[ "Z", "Élément", "Symbole", "Famille" ] ; - datas=[{"Z":"1","Élément":"Hydrogène","Symbole":"H","Famille":"Non-métal"},{"Z":"2","Élément":"Hélium","Symbole":"He","Famille":"Gaz noble"},{"Z":"3","Élément":"Lithium","Symbole":"Li","Famille":"Métal alcalin"},{"Z":"4","Élément":"Béryllium","Symbole":"Be","Famille":"","Champ ignoré":"Je me sens ignoré !"}] ;// Famille volontairement vide et champ à ignoré pour le dernier + // Les champs des différentes lignes ne sont pas forcément dans le même ordre, dans les champs peuvent être vide ou encore en trop... + datas=[{"Z":"1","Élément":"Hydrogène","Symbole":"H","Famille":"Non-métal"},{"Famille":"Gaz noble","Élément":"Hélium","Z":"2","Symbole":"He"},{"Champ ignoré":"Je me champ ignoré !", "Z":"3","Élément":"Lithium","Famille":"Métal alcalin","Symbole":"Li"},{"Z":"4","Élément":"Béryllium","Symbole":"Be","Famille":"","Champ ignoré":"Je me champ ignoré !"}] ; }); - it("Doit générer une erreur, si lancé sans fournir une liste des champs de données.", () => + it("Doit générer une erreur, si lancé sans fournir une liste des champs.", () => { converter.fields=undefined; expect(() => { return render.rend2HTML(datas) }).toThrowError(errors.renderNeedDatas); }); - it("Ne doit pas générer d'erreur, si lancé avec une liste des champs de données, même s'il n'y a aucune donnée à afficher.", () => + it("Ne doit pas générer d'erreur, si lancé avec une liste des champs, même s'il n'y a aucune donnée à afficher.", () => { expect(() => { return render.rend2HTML([])}).not.toThrowError(); });