Revu de la création du HTML des données reçues, qui peuvent avoir des champs absents ou trop ou encore fournis dans un ordre variable.

This commit is contained in:
Fabrice PENHOËT 2021-10-07 16:17:08 +02:00
parent c8086135fe
commit be57ef6927
4 changed files with 15 additions and 14 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "freedatas2html", "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.", "description": "Visualization of data from various sources (CSV, API, HTML...) with filters, classification, pagination, etc.",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {

View File

@ -19,7 +19,6 @@ module.exports =
parserRemoteFail: "Erreur rencontrée durant l'accès aux données distantes.", 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 : ", 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.", 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.", 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.", 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.", selectorFieldNotFound: "Au moins un des champs devant servir à filtrer les données n'existe pas dans le fichier.",

View File

@ -36,7 +36,7 @@ export class Render implements DatasRenders
else else
{ {
let datasHTML=this.settings.allBegining; 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 ) if(this.settings.fieldsBegining !== undefined && this.settings.fieldDisplaying !== undefined && this.settings.fieldsEnding !== undefined )
{ {
datasHTML+=this.settings.fieldsBegining; datasHTML+=this.settings.fieldsBegining;
@ -45,18 +45,19 @@ export class Render implements DatasRenders
datasHTML+=this.settings.fieldsEnding; datasHTML+=this.settings.fieldsEnding;
} }
datasHTML+=this.settings.linesBegining; 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; 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 if(row[field] !== undefined)
/// REVOIR : IL FAUT QUE L'ON SOIT DANS LA BONNE COLONNE !!!! datasHTML+=this.settings.dataDisplaying.replace("#VALUE", row[field]).replace("#FIELDNAME", field);
if(this._converter.fields.indexOf(field) !== -1)
datasHTML+=this.settings.dataDisplaying.replace("#VALUE" , datas[row][field]).replace("#FIELDNAME" , field);
else else
console.log(errors.renderUnknownField+field); datasHTML+=this.settings.dataDisplaying.replace("#VALUE", "").replace("#FIELDNAME", field);
} }
datasHTML+=this.settings.lineEnding; datasHTML+=this.settings.lineEnding;
} }

View File

@ -12,16 +12,17 @@ describe("Test du moteur de rendu HTML.", () =>
converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:8080/datas/datas1.csv"}); converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:8080/datas/datas1.csv"});
render=new Render(converter); render=new Render(converter);
converter.fields=[ "Z", "Élément", "Symbole", "Famille" ] ; 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; converter.fields=undefined;
expect(() => { return render.rend2HTML(datas) }).toThrowError(errors.renderNeedDatas); 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(); expect(() => { return render.rend2HTML([])}).not.toThrowError();
}); });