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",
"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": {

View File

@ -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.",

View File

@ -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;
@ -46,17 +46,18 @@ export class Render implements DatasRenders
}
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;
}

View File

@ -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();
});