Remaniement de la classe gérant le rendu HTML des données.
This commit is contained in:
parent
ae1bc5339b
commit
fc91c7b665
@ -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:"<table>",
|
||||
allEnding:"</table>",
|
||||
fieldsBegining:"<thead><tr>",
|
||||
fieldsEnding:"</tr></thead>",
|
||||
fieldDisplaying:"<th>#FIELDNAME</th>",
|
||||
linesBegining:"<tbody>",
|
||||
linesEnding:"</tbody>",
|
||||
lineBegining:"<tr>",
|
||||
lineEnding:"</tr>",
|
||||
dataDisplaying:"<td>#VALUE</td>",
|
||||
};
|
||||
allBegining: "<table>",
|
||||
allEnding: "</table>",
|
||||
fieldsBegining: "<thead><tr>",
|
||||
fieldsEnding: "</tr></thead>",
|
||||
fieldDisplaying: "<th>#FIELDNAME</th>",
|
||||
linesBegining: "<tbody>",
|
||||
linesEnding: "</tbody>",
|
||||
lineBegining: "<tr>",
|
||||
lineEnding: "</tr>",
|
||||
dataDisplaying: "<td>#VALUE</td>"
|
||||
};
|
||||
|
||||
// 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);
|
||||
|
@ -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.",
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user