Remaniement de la classe gérant le rendu HTML des données.
This commit is contained in:
parent
ae1bc5339b
commit
fc91c7b665
@ -1,11 +1,12 @@
|
|||||||
const errors=require("./errors.js");
|
const errors=require("./errors.js");
|
||||||
import { DatasRenders, DatasRendersSettings } from "./interfaces";
|
import { DatasRenders, DatasRendersSettings } from "./interfaces";
|
||||||
import { FreeDatas2HTML } from "./freeDatas2HTML";
|
//import { FreeDatas2HTML } from "./freeDatas2HTML";
|
||||||
|
|
||||||
export class Render implements DatasRenders
|
export class Render implements DatasRenders
|
||||||
{
|
{
|
||||||
private _converter: FreeDatas2HTML;
|
private _fields: string[]=[];
|
||||||
public settings: DatasRendersSettings;
|
public settings: DatasRendersSettings;
|
||||||
|
public datas: {[index: string]:string}[]=[];
|
||||||
static readonly defaultSettings=
|
static readonly defaultSettings=
|
||||||
{
|
{
|
||||||
allBegining: "<table>",
|
allBegining: "<table>",
|
||||||
@ -17,22 +18,33 @@ export class Render implements DatasRenders
|
|||||||
linesEnding: "</tbody>",
|
linesEnding: "</tbody>",
|
||||||
lineBegining: "<tr>",
|
lineBegining: "<tr>",
|
||||||
lineEnding: "</tr>",
|
lineEnding: "</tr>",
|
||||||
dataDisplaying:"<td>#VALUE</td>",
|
dataDisplaying: "<td>#VALUE</td>"
|
||||||
};
|
};
|
||||||
|
|
||||||
// Injection de la classe principale
|
constructor(settings: DatasRendersSettings=Render.defaultSettings)
|
||||||
constructor(converter: FreeDatas2HTML, settings:DatasRendersSettings=Render.defaultSettings)
|
|
||||||
{
|
{
|
||||||
this._converter=converter;
|
|
||||||
this.settings=settings;
|
this.settings=settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reçoit les données à afficher et retourne le HTML correspondant.
|
// Les données fournies peuvent être vides du fait de l'action des filtres ou encore de la pagination...
|
||||||
public rend2HTML(datas: any[]) : string
|
// 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(fields.length === 0)
|
||||||
if(this._converter.fields === undefined)
|
throw new Error(errors.renderNeedFields);
|
||||||
throw new Error(errors.renderNeedDatas);
|
else
|
||||||
|
this._fields=fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
get fields() : string[]
|
||||||
|
{
|
||||||
|
return this._fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
public rend2HTML() : string
|
||||||
|
{
|
||||||
|
if(this._fields.length === 0)
|
||||||
|
throw new Error(errors.renderNeedFields);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
let datasHTML=this.settings.allBegining;
|
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 )
|
if(this.settings.fieldsBegining !== undefined && this.settings.fieldDisplaying !== undefined && this.settings.fieldsEnding !== undefined )
|
||||||
{
|
{
|
||||||
datasHTML+=this.settings.fieldsBegining;
|
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.fieldDisplaying.replace("#FIELDNAME", field);
|
||||||
datasHTML+=this.settings.fieldsEnding;
|
datasHTML+=this.settings.fieldsEnding;
|
||||||
}
|
}
|
||||||
datasHTML+=this.settings.linesBegining;
|
datasHTML+=this.settings.linesBegining;
|
||||||
|
|
||||||
// Suivant les objets/lignes, les champs peuvent se trouver dans un ordre différent,
|
// Suivant les objets/lignes, les champs peuvent se trouver dans un ordre différent.
|
||||||
// ou encore des champs peuvent manquer ou être en trop.
|
// Ou encore des champs peuvent manquer, être en trop...
|
||||||
// Seuls les champs de "fields" doivent être traités et en respectant l'ordre de ce tableau.
|
// 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 datas)
|
for(let row of this.datas)
|
||||||
{
|
{
|
||||||
datasHTML+=this.settings.lineBegining;
|
datasHTML+=this.settings.lineBegining;
|
||||||
for(let field of this._converter.fields)
|
for(let field of this._fields)
|
||||||
{
|
{
|
||||||
if(row[field] !== undefined)
|
if(row[field] !== undefined)
|
||||||
datasHTML+=this.settings.dataDisplaying.replace("#VALUE", row[field]).replace("#FIELDNAME", field);
|
datasHTML+=this.settings.dataDisplaying.replace("#VALUE", row[field]).replace("#FIELDNAME", field);
|
||||||
|
@ -26,7 +26,7 @@ module.exports =
|
|||||||
remoteSourceHeaderUnallowed: "Le nom d'une des entêtes passées n'est pas autorisé.",
|
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.",
|
remoteSourceNeedUrl: "Merci de fournir une url valide pour la source distante de données.",
|
||||||
remoteSourceUrlFail: "L'url fournie ne semble pas valide.",
|
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.",
|
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.",
|
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.",
|
selectorFieldNotFound: "Au moins un des champs devant servir à filtrer les données n'existe pas dans le fichier.",
|
||||||
|
@ -3,11 +3,13 @@ export interface Counter
|
|||||||
displayElement?: DOMElement; // peut être undefined si on ne souhaite pas d'affichage automatique dans la page
|
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
|
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;
|
allBegining: string;
|
||||||
allEnding: string;
|
allEnding: string;
|
||||||
|
Loading…
Reference in New Issue
Block a user