Adaptations pour que les champs de classement prennent en compte le fait que tous les champs parsés ne sont pas forcément affichés.
This commit is contained in:
parent
3ea65db323
commit
27564f2d2b
@ -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": {
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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.",
|
||||
};
|
@ -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);
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user