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",
|
"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.",
|
"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",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -99,6 +99,11 @@ export class FreeDatas2HTML
|
|||||||
return this._nbDatasValid;
|
return this._nbDatasValid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get fields2Rend() : number[]
|
||||||
|
{
|
||||||
|
return this._fields2Rend;
|
||||||
|
}
|
||||||
|
|
||||||
// Vérifie qu'un champ existe bien dans les données parsées.
|
// Vérifie qu'un champ existe bien dans les données parsées.
|
||||||
// Utilisée par les autres classes.
|
// Utilisée par les autres classes.
|
||||||
public checkFieldExist(nb: number) : boolean
|
public checkFieldExist(nb: number) : boolean
|
||||||
@ -109,6 +114,31 @@ export class FreeDatas2HTML
|
|||||||
return true;
|
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.
|
// 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.
|
// ! Ne peut donc être utilisé qu'après avoir parsé les données.
|
||||||
set datasSortingFunctions(SortingFunctions: SortingFunctions[])
|
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
|
// Retourne l'éventuelle fonction spécifique de classement associée à un champ
|
||||||
public getSortingFunctionForField(datasFieldNb: number): SortingFunctions|undefined
|
public getSortingFunctionForField(datasFieldNb: number): SortingFunctions|undefined
|
||||||
{
|
{
|
||||||
@ -176,15 +201,7 @@ export class FreeDatas2HTML
|
|||||||
if(this._fields2Rend.length === 0)
|
if(this._fields2Rend.length === 0)
|
||||||
this.datasRender.fields=this._fields;
|
this.datasRender.fields=this._fields;
|
||||||
else
|
else
|
||||||
{
|
this.datasRender.fields=this.realFields2Rend();
|
||||||
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;
|
|
||||||
}
|
|
||||||
if(this._datasViewElt !== undefined)
|
if(this._datasViewElt !== undefined)
|
||||||
this.refreshView();
|
this.refreshView();
|
||||||
return true;
|
return true;
|
||||||
@ -283,7 +300,6 @@ export class FreeDatas2HTML
|
|||||||
}
|
}
|
||||||
datas2Display=newDatas2Display;
|
datas2Display=newDatas2Display;
|
||||||
}
|
}
|
||||||
|
|
||||||
return datas2Display;
|
return datas2Display;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,19 +10,20 @@ export class SortingField implements SortingFields
|
|||||||
_datasFieldNb: number;
|
_datasFieldNb: number;
|
||||||
_order: "asc"|"desc"|undefined=undefined;
|
_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")
|
constructor(converter: FreeDatas2HTML, datasFieldNb: number, fieldsDOMSelector: string="th")
|
||||||
{
|
{
|
||||||
if(converter.fields.length === 0)
|
if(converter.fields.length === 0)
|
||||||
throw new Error(errors.sortingFieldNeedDatas);
|
throw new Error(errors.sortingFieldNeedDatas);
|
||||||
else if(! converter.checkFieldExist(datasFieldNb))
|
else if(! converter.checkField2Rend(datasFieldNb))
|
||||||
throw new Error(errors.sortingFieldNotFound);
|
throw new Error(errors.sortingFieldNotFound);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const fields=document.querySelectorAll(fieldsDOMSelector);
|
const fields=document.querySelectorAll(fieldsDOMSelector);
|
||||||
if(fields === undefined)
|
if(fields === undefined)
|
||||||
throw new Error(errors.sortingFieldsNotInHTML);
|
throw new Error(errors.sortingFieldsNotInHTML);
|
||||||
else if(fields.length !== converter.fields.length)
|
else if(fields.length !== converter.realFields2Rend().length)
|
||||||
throw new Error(errors.sortingFieldsNbFail);
|
throw new Error(errors.sortingFieldsNbFail);
|
||||||
else
|
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.",
|
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.",
|
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.",
|
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.",
|
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.",
|
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);
|
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, 9); }).toThrowError(errors.sortingFieldNotFound);
|
||||||
expect(() => { return new SortingField(converter, -1); }).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);
|
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);
|
expect(() => { return new SortingField(converter, 0, "td"); }).toThrowError(errors.sortingFieldsNbFail);
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user