From 27564f2d2bc653b7bad4ff9a71b99a227ee7cdc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20PENHO=C3=8BT?= Date: Wed, 27 Oct 2021 16:51:14 +0200 Subject: [PATCH] =?UTF-8?q?Adaptations=20pour=20que=20les=20champs=20de=20?= =?UTF-8?q?classement=20prennent=20en=20compte=20le=20fait=20que=20tous=20?= =?UTF-8?q?les=20champs=20pars=C3=A9s=20ne=20sont=20pas=20forc=C3=A9ment?= =?UTF-8?q?=20affich=C3=A9s.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/FreeDatas2HTML.ts | 46 ++++++++++++++++++++++++++------------- src/SortingField.ts | 7 +++--- src/errors.js | 2 +- tests/sortingFieldSpec.ts | 4 ++-- 5 files changed, 39 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 65a4b4e..24c1504 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "freedatas2html", - "version": "0.9.6", + "version": "0.9.7", "description": "Conversion and display of data in different formats (CSV, JSON, HTML) with the possibility of filtering, classifying and paginating the results.", "main": "index.js", "scripts": { diff --git a/src/FreeDatas2HTML.ts b/src/FreeDatas2HTML.ts index 7e4dcbc..69b8e36 100644 --- a/src/FreeDatas2HTML.ts +++ b/src/FreeDatas2HTML.ts @@ -99,6 +99,11 @@ export class FreeDatas2HTML return this._nbDatasValid; } + get fields2Rend() : number[] + { + return this._fields2Rend; + } + // Vérifie qu'un champ existe bien dans les données parsées. // Utilisée par les autres classes. public checkFieldExist(nb: number) : boolean @@ -109,6 +114,31 @@ export class FreeDatas2HTML return true; } + public realFields2Rend() : string[] + { + if(this._fields2Rend.length === 0) + return this._fields; + else + { + const realFields=[]; + for(let i=0; i < this._fields.length; i++) + { + if(this._fields2Rend.indexOf(i) !== -1) + realFields.push(this._fields[i]); + } + return realFields; + } + } + + // Vérifie qu'un champ faire partie de ceux à afficher. + public checkField2Rend(nb: number) : boolean + { + if(this.realFields2Rend()[nb] === undefined) + return false; + else + return true; + } + // Vérifie que les numéros de champs pour lesquels il y a des fonctions de classement spécifiques sont cohérents. // ! Ne peut donc être utilisé qu'après avoir parsé les données. set datasSortingFunctions(SortingFunctions: SortingFunctions[]) @@ -141,11 +171,6 @@ export class FreeDatas2HTML } } - get fields2Rend() : number[] - { - return this._fields2Rend; - } - // Retourne l'éventuelle fonction spécifique de classement associée à un champ public getSortingFunctionForField(datasFieldNb: number): SortingFunctions|undefined { @@ -176,15 +201,7 @@ export class FreeDatas2HTML if(this._fields2Rend.length === 0) this.datasRender.fields=this._fields; else - { - const fields2Rend: string[]=[]; - for(let i=0; i< this._fields.length; i++) - { - if(this._fields2Rend.indexOf(i) !== -1) - fields2Rend.push(this._fields[i]); - } - this.datasRender.fields=fields2Rend; - } + this.datasRender.fields=this.realFields2Rend(); if(this._datasViewElt !== undefined) this.refreshView(); return true; @@ -283,7 +300,6 @@ export class FreeDatas2HTML } datas2Display=newDatas2Display; } - return datas2Display; } } diff --git a/src/SortingField.ts b/src/SortingField.ts index ce3125c..70cbda6 100644 --- a/src/SortingField.ts +++ b/src/SortingField.ts @@ -10,19 +10,20 @@ export class SortingField implements SortingFields _datasFieldNb: number; _order: "asc"|"desc"|undefined=undefined; - // Injection de la classe principale, mais uniquement si les noms des champs ont été importés et affichés correctement + // Injection de la classe principale, mais uniquement si les noms des champs ont été importés et affichés correctement. + // Attention le numéro de champ concerne les champs effectivement affichés et non ceux issus du parseur. constructor(converter: FreeDatas2HTML, datasFieldNb: number, fieldsDOMSelector: string="th") { if(converter.fields.length === 0) throw new Error(errors.sortingFieldNeedDatas); - else if(! converter.checkFieldExist(datasFieldNb)) + else if(! converter.checkField2Rend(datasFieldNb)) throw new Error(errors.sortingFieldNotFound); else { const fields=document.querySelectorAll(fieldsDOMSelector); if(fields === undefined) throw new Error(errors.sortingFieldsNotInHTML); - else if(fields.length !== converter.fields.length) + else if(fields.length !== converter.realFields2Rend().length) throw new Error(errors.sortingFieldsNbFail); else { diff --git a/src/errors.js b/src/errors.js index cb195ea..041e5a6 100644 --- a/src/errors.js +++ b/src/errors.js @@ -34,7 +34,7 @@ module.exports = selectorFieldNotFound: "Au moins un des champs devant servir à filtrer les données n'existe pas dans le fichier.", selectorSelectedIndexNotFound: "La valeur sélectionnée n'a pas été trouvée dans la liste des champs.", sortingFieldNeedDatas: "La création d'un champ de classement nécessite la transmission de la liste des champs.", - sortingFieldNotFound: "Au moins un des champs devant permettre de classer les données n'existe pas dans le fichier.", + sortingFieldNotFound: "Au moins un des champs devant permettre de classer les données n'existe pas dans ceux à afficher.", sortingFieldsNbFail: "Le nombre de champs trouvés dans le DOM ne correspond pas à celui des données à classer.", sortingFieldsNotInHTML: "Les champs pouvant servir à classer les données n'ont pas été trouvés dans le DOM.", }; \ No newline at end of file diff --git a/tests/sortingFieldSpec.ts b/tests/sortingFieldSpec.ts index 860f400..ec07123 100644 --- a/tests/sortingFieldSpec.ts +++ b/tests/sortingFieldSpec.ts @@ -31,7 +31,7 @@ describe("Test des champs de classement.", () => expect(() => { return new SortingField(converter, 0); }).toThrowError(errors.sortingFieldNeedDatas); }); - it("Doit générer une erreur, si initialisé avec un numéro du champ de classement n'existant pas dans les données.", () => + it("Doit générer une erreur, si initialisé avec un numéro du champ de classement n'existant dans ceux à afficher.", () => { expect(() => { return new SortingField(converter, 9); }).toThrowError(errors.sortingFieldNotFound); expect(() => { return new SortingField(converter, -1); }).toThrowError(errors.sortingFieldNotFound); @@ -43,7 +43,7 @@ describe("Test des champs de classement.", () => expect(() => { return new SortingField(converter, 0, "th.cols"); }).toThrowError(errors.sortingsFieldNotInHTML); }); - it("Doit générer une erreur, si le nombre d'éléments trouvés dans le DOM pour les entêtes est différent du nombre de champs des données.", () => + it("Doit générer une erreur, si le nombre d'éléments trouvés dans le DOM pour les entêtes est différent du nombre de champs à afficher.", () => { expect(() => { return new SortingField(converter, 0, "td"); }).toThrowError(errors.sortingFieldsNbFail); });