diff --git a/karma.conf.js b/karma.conf.js index ff22e5b..219cf4a 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -12,7 +12,7 @@ module.exports = function(config) { frameworks: ["jasmine", "karma-typescript"], // list of files / patterns to load in the browser - files: [ "src/*.ts", "tests/*.ts" , { pattern: 'tests/datas/*.csv', watched: true, included: false, served: true } ], + files: [ "src/*.ts", "tests/*.ts" , { pattern: 'tests/datas/*', watched: true, included: false, served: true } ], proxies: { "/datas/": "http://localhost:9876/base/tests/datas/" }, diff --git a/package.json b/package.json index d6bb2fc..7e21b7e 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { "name": "freedatas2html", - "version": "0.7.0", + "version": "0.7.1", "description": "Visualization of data from various sources (CSV, API, HTML...) with filters, classification, pagination, etc.", "main": "index.js", "scripts": { - "test": "karma start", + "test": "clear && karma start", "build": "webpack", "start": "webpack serve" }, diff --git a/src/freeDatas2HTML.ts b/src/freeDatas2HTML.ts index 3a2558f..0a068e2 100644 --- a/src/freeDatas2HTML.ts +++ b/src/freeDatas2HTML.ts @@ -185,7 +185,7 @@ export class FreeDatas2HTML } } - createDatas2Display(fields: string[], datas: any[]) : string + private createDatas2Display(fields: string[], datas: any[]) : string { // Dois-je classer les données par rapport à un champ ? if(this.datasSortedField !== undefined && this.datasSortedField.datasFieldNb !==undefined) diff --git a/src/freeDatas2HTMLRender.ts b/src/freeDatas2HTMLRender.ts index 9fdd225..f86ae24 100644 --- a/src/freeDatas2HTMLRender.ts +++ b/src/freeDatas2HTMLRender.ts @@ -40,17 +40,19 @@ export class Render implements DatasRenders if(this.settings.fieldsBegining !== undefined && this.settings.fieldDisplaying !== undefined && this.settings.fieldsEnding !== undefined ) { datasHTML+=this.settings.fieldsBegining; - for (let i in this._converter.fields) - datasHTML+=this.settings.fieldDisplaying.replace("#FIELDNAME", this._converter.fields[Number(i)]); + for (let field of this._converter.fields) + datasHTML+=this.settings.fieldDisplaying.replace("#FIELDNAME", field); datasHTML+=this.settings.fieldsEnding; } datasHTML+=this.settings.linesBegining; + for (let row in datas) { datasHTML+=this.settings.lineBegining; for(let field in datas[row]) { // 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); else diff --git a/src/freeDatas2HTMLSelector.ts b/src/freeDatas2HTMLSelector.ts index 6fbe7a4..9bacdab 100644 --- a/src/freeDatas2HTMLSelector.ts +++ b/src/freeDatas2HTMLSelector.ts @@ -28,7 +28,7 @@ export class Selector implements Selectors } // Ignore un séparateur de données vide - // Attention : pas de trim() ici, car l'espace peut être un séparateur + // Attention : pas de trim(), car l'espace peut être un séparateur set separator(separator: string|undefined) { if(separator === "") @@ -64,7 +64,7 @@ export class Selector implements Selectors { if(this._separator === undefined) { - let checkedValue=String(this._converter.datas[row][this.name]).trim(); // trim() nécessaire pour éviter problème de classement du tableau (sort) + let checkedValue=String(this._converter.datas[row][this.name]); if(checkedValue !== "" && this.values.indexOf(checkedValue) === -1) this.values.push(checkedValue); } @@ -73,7 +73,7 @@ export class Selector implements Selectors let checkedValues=String(this._converter.datas[row][this.name]).split(this._separator); // String() car les données peuvent être des chiffres, etc. for(let i in checkedValues) { - let checkedValue=checkedValues[i].trim(); + let checkedValue=checkedValues[i]; if(checkedValue !== "" && this.values.indexOf(checkedValue) === -1) this.values.push(checkedValue); } @@ -130,7 +130,7 @@ export class Selector implements Selectors const selectedValueTxt=this.values[selectedValue] ; if(this._separator === undefined) { - if(data[this.name].trim() !== selectedValueTxt) // retour du trim() utilisé pour créer la liste + if(data[this.name] !== selectedValueTxt) return false; else return true; @@ -141,7 +141,7 @@ export class Selector implements Selectors let checkedValues=String(data[this.name]).split(this._separator); for(let j in checkedValues) { - if(checkedValues[j].trim() === selectedValueTxt) + if(checkedValues[j] === selectedValueTxt) { find=true; break; diff --git a/src/freeDatas2HTMLSortingField.ts b/src/freeDatas2HTMLSortingField.ts index 73dd2bc..a7634d9 100644 --- a/src/freeDatas2HTMLSortingField.ts +++ b/src/freeDatas2HTMLSortingField.ts @@ -1,5 +1,5 @@ -const { compare }= require('natural-orderby'); -const errors = require("./errors.js"); +const { compare }=require('natural-orderby'); +const errors=require("./errors.js"); import { SortingFields } from "./freeDatas2HTMLInterfaces"; import { FreeDatas2HTML } from "./freeDatas2HTML"; @@ -8,10 +8,10 @@ export class SortingField implements SortingFields _converter: FreeDatas2HTML; _fieldsDOMSelector: string; _datasFieldNb: number; - _order: "asc"|"desc"|undefined = undefined; + _order: "asc"|"desc"|undefined=undefined; // Injection de la classe principale, mais uniquement si le nom des champs ont été importés et affichés correctement - constructor(converter: FreeDatas2HTML, datasFieldNb: number, fieldsDOMSelector: string = "th") + constructor(converter: FreeDatas2HTML, datasFieldNb: number, fieldsDOMSelector: string="th") { if(converter.fields === undefined) throw new Error(errors.sortingFieldNeedDatas); @@ -28,7 +28,7 @@ export class SortingField implements SortingFields { this._converter=converter; this._datasFieldNb=datasFieldNb; - this._fieldsDOMSelector= fieldsDOMSelector; + this._fieldsDOMSelector=fieldsDOMSelector; } } } @@ -68,7 +68,7 @@ export class SortingField implements SortingFields field._order="asc"; else field._order="desc"; - field._converter.datasSortedField = field; + field._converter.datasSortedField=field; field._converter.refreshView(); }); } diff --git a/tests/datas/datas1.csv b/tests/datas/datas1.csv index 3c6f544..f5553ab 100644 --- a/tests/datas/datas1.csv +++ b/tests/datas/datas1.csv @@ -116,4 +116,4 @@ Z (numéro atomique),Élément,Symbole,Famille,Abondance des éléments dans la 115,Moscovium,Mc,Indéfinie,Inexistant 116,Livermorium,Lv,Indéfinie,Inexistant 117,Tennesse,Ts,Indéfinie,Inexistant -118,Oganesson,Og,Indéfinie,Inexistant +118,Oganesson,Og,Indéfinie,Inexistant \ No newline at end of file diff --git a/tests/paginationSpec.ts b/tests/paginationSpec.ts index 63dfa2f..cc33654 100644 --- a/tests/paginationSpec.ts +++ b/tests/paginationSpec.ts @@ -3,7 +3,7 @@ import { FreeDatas2HTML, Pagination } from "../src/freeDatas2HTML"; const errors=require("../src/errors.js"); const fixtures=require("./fixtures.js"); -xdescribe("Test de la pagination.", () => +describe("Test de la pagination.", () => { let converter: FreeDatas2HTML; let pagination: Pagination; diff --git a/tests/selectorSpec.ts b/tests/selectorSpec.ts index e85c1b9..6a97016 100644 --- a/tests/selectorSpec.ts +++ b/tests/selectorSpec.ts @@ -3,7 +3,7 @@ import { FreeDatas2HTML, Selector } from "../src/freeDatas2HTML"; const errors=require("../src/errors.js"); const fixtures=require("./fixtures.js"); -xdescribe("Test des filtres de données", () => +describe("Test des filtres de données", () => { let converter: FreeDatas2HTML; let selector: Selector; @@ -59,10 +59,6 @@ xdescribe("Test des filtres de données", () => { beforeEach( async () => { - document.body.insertAdjacentHTML("afterbegin", fixtures.datasViewEltHTML); - converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"}); - converter.datasViewElt={ id:"datas" }; - await converter.run(); selector=new Selector(converter, 3, { id:"selector1" }); }); diff --git a/tests/sortingFieldSpec.ts b/tests/sortingFieldSpec.ts index 8f5c99b..cf8279e 100644 --- a/tests/sortingFieldSpec.ts +++ b/tests/sortingFieldSpec.ts @@ -3,7 +3,7 @@ import { FreeDatas2HTML, Selector, SortingField } from "../src/freeDatas2HTML"; const errors=require("../src/errors.js"); const fixtures=require("./fixtures.js"); -xdescribe("Test des champs de classement.", () => +describe("Test des champs de classement.", () => { let converter: FreeDatas2HTML; let sortingField: SortingField; @@ -13,7 +13,8 @@ xdescribe("Test des champs de classement.", () => document.body.insertAdjacentHTML("afterbegin", fixtures.datasViewEltHTML); converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"}); converter.datasViewElt={ id:"datas" }; - await converter.run(); + await converter.run(); + const fields=document.querySelectorAll("th"); }); afterEach( () => @@ -29,24 +30,24 @@ xdescribe("Test des champs de classement.", () => expect(() => { return new SortingField(converter, 0); }).toThrowError(errors.sortingFieldNeedDatas); }); - it("Doit générer une erreur, si initialisé sans élements HTML textuels dans la page servant d'entêtes aux données.", () => - { - expect(() => { return new SortingField(converter, 0, "th.cols"); }).toThrowError(errors.sortingsFieldNotInHTML); - }); - - it("Doit générer une erreur, si le nombre d'éléments du DOM devant servir d'entêtes est différent du nombre de champs des données.", () => - { - expect(() => { return new SortingField(converter, 0, "td"); }).toThrowError(errors.sortingFieldsNbFail); - }); - - it("Doit générer une erreur, si initialiser 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 pas dans les données.", () => { expect(() => { return new SortingField(converter, 9); }).toThrowError(errors.sortingFieldFieldNotFound); expect(() => { return new SortingField(converter, -1); }).toThrowError(errors.sortingFieldFieldNotFound); expect(() => { return new SortingField(converter, 1.1); }).toThrowError(errors.sortingFieldFieldNotFound); }); - - it("Si tous les paramètres sont ok, ils doivent être acceptés.", () => + + it("Doit générer une erreur, si initialisé sans élements HTML textuels dans la page servant d'entêtes aux données.", () => + { + expect(() => { return new SortingField(converter, 0, "th.cols"); }).toThrowError(errors.sortingsFieldNotInHTML); + }); + + it("Doit générer une erreur, si le nombre d'éléments du DOM devant servir d'entêtes est différent du nombre de champs des données.", () => + { + expect(() => { return new SortingField(converter, 0, "td"); }).toThrowError(errors.sortingFieldsNbFail); + }); + + it("Si tous les paramètres sont ok, ils doivent être acceptés.", () => { const sortingField=new SortingField(converter, 1, "th"); expect(sortingField.datasFieldNb).toEqual(1);