diff --git a/src/Render.ts b/src/Render.ts
index ef650f2..47fca75 100644
--- a/src/Render.ts
+++ b/src/Render.ts
@@ -1,38 +1,50 @@
-const errors = require("./errors.js");
+const errors=require("./errors.js");
import { DatasRenders, DatasRendersSettings } from "./interfaces";
-import { FreeDatas2HTML } from "./freeDatas2HTML";
+//import { FreeDatas2HTML } from "./freeDatas2HTML";
export class Render implements DatasRenders
{
- private _converter: FreeDatas2HTML;
- public settings: DatasRendersSettings;
- static readonly defaultSettings =
+ private _fields: string[]=[];
+ public settings: DatasRendersSettings;
+ public datas: {[index: string]:string}[]=[];
+ static readonly defaultSettings=
{
- allBegining:"
",
- fieldsBegining:"",
- fieldsEnding:"
",
- fieldDisplaying:"#FIELDNAME | ",
- linesBegining:"",
- linesEnding:"",
- lineBegining:"",
- lineEnding:"
",
- dataDisplaying:"#VALUE | ",
- };
+ allBegining: "",
+ fieldsBegining: "",
+ fieldsEnding: "
",
+ fieldDisplaying: "#FIELDNAME | ",
+ linesBegining: "",
+ linesEnding: "",
+ lineBegining: "",
+ lineEnding: "
",
+ dataDisplaying: "#VALUE | "
+ };
- // Injection de la classe principale
- constructor(converter: FreeDatas2HTML, settings:DatasRendersSettings=Render.defaultSettings)
+ constructor(settings: DatasRendersSettings=Render.defaultSettings)
{
- this._converter=converter;
this.settings=settings;
}
- // Reçoit les données à afficher et retourne le HTML correspondant.
- public rend2HTML(datas: any[]) : string
+ // Les données fournies peuvent être vides du fait de l'action des filtres ou encore de la pagination...
+ // Par contre, il doit y avoir au moins un nom de champ fourni
+ set fields(fields: string[])
{
- // Il peut n'y avoir aucune donnée (filtres...), mais les noms des champs doivent être connus.
- if(this._converter.fields === undefined)
- throw new Error(errors.renderNeedDatas);
+ if(fields.length === 0)
+ throw new Error(errors.renderNeedFields);
+ else
+ this._fields=fields;
+ }
+
+ get fields() : string[]
+ {
+ return this._fields;
+ }
+
+ public rend2HTML() : string
+ {
+ if(this._fields.length === 0)
+ throw new Error(errors.renderNeedFields);
else
{
let datasHTML=this.settings.allBegining;
@@ -40,19 +52,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 field of this._converter.fields)
+ for(let field of this._fields)
datasHTML+=this.settings.fieldDisplaying.replace("#FIELDNAME", field);
datasHTML+=this.settings.fieldsEnding;
}
datasHTML+=this.settings.linesBegining;
-
- // 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)
+
+ // Suivant les objets/lignes, les champs peuvent se trouver dans un ordre différent.
+ // Ou encore des champs peuvent manquer, être en trop...
+ // Tous les champs présents dans "fields" doivent être affichés (même si absents d'un enregistrement) et en respectant l'ordre de ce tableau.
+ for(let row of this.datas)
{
datasHTML+=this.settings.lineBegining;
- for(let field of this._converter.fields)
+ for(let field of this._fields)
{
if(row[field] !== undefined)
datasHTML+=this.settings.dataDisplaying.replace("#VALUE", row[field]).replace("#FIELDNAME", field);
diff --git a/src/errors.js b/src/errors.js
index c8fbe49..ad208c7 100644
--- a/src/errors.js
+++ b/src/errors.js
@@ -26,7 +26,7 @@ module.exports =
remoteSourceHeaderUnallowed: "Le nom d'une des entêtes passées n'est pas autorisé.",
remoteSourceNeedUrl: "Merci de fournir une url valide pour la source distante de données.",
remoteSourceUrlFail: "L'url fournie ne semble pas valide.",
- renderNeedDatas: "Il ne peut y avoir de pagination, si les données n'ont pas été récupérées.",
+ renderNeedFields: "Les noms de champs doivent être fournis avant de demander l'affichage des données.",
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.",
diff --git a/src/interfaces.ts b/src/interfaces.ts
index 86625a0..e9dcacd 100644
--- a/src/interfaces.ts
+++ b/src/interfaces.ts
@@ -3,11 +3,13 @@ export interface Counter
displayElement?: DOMElement; // peut être undefined si on ne souhaite pas d'affichage automatique dans la page
value?: number; // undefined jusqu'à recevoir sa première valeur
}
-export interface DatasRenders // interface à respecter par toute alternative à la classe Render par défaut
+export interface DatasRenders
{
- rend2HTML(datas: any[]): string;
+ fields: string[];
+ datas: {[index: string]:string}[];
+ rend2HTML(): string;
}
-export interface DatasRendersSettings // interface spécifique à la classe Render par défaut.
+export interface DatasRendersSettings // interface spécifique à la classe Render par défaut
{
allBegining: string;
allEnding: string;