const errors = require("./errors.js"); import { DatasRenders, DatasRendersSettings } from "./freeDatas2HTMLInterfaces"; import { FreeDatas2HTML } from "./freeDatas2HTML"; export class Render implements DatasRenders { private _converter: FreeDatas2HTML; public settings: DatasRendersSettings; static readonly defaultSettings = { allBegining:"", allEnding:"
", fieldsBegining:"", fieldsEnding:"", fieldDisplaying:"#FIELDNAME", linesBegining:"", linesEnding:"", lineBegining:"", lineEnding:"", dataDisplaying:"#VALUE", }; // Injection de la classe principale constructor(converter: FreeDatas2HTML, settings:DatasRendersSettings=Render.defaultSettings) { this._converter=converter; this.settings=settings; } // Reçoit les données à afficher et créer le HTML correspondant public rend2HTML(datas: any[]) : string { if(this._converter.parseMetas === undefined || this._converter.parseMetas.fields === undefined) throw new Error(errors.renderNeedDatas); else { let datasHTML=this.settings.allBegining; // On ne souhaite pas nécessairement afficher les noms de colonne if(this.settings.fieldsBegining !== undefined && this.settings.fieldDisplaying !== undefined) { datasHTML+=this.settings.fieldsBegining; for (let i in this._converter.parseMetas!.fields) datasHTML+=this.settings.fieldDisplaying.replace("#FIELDNAME", this._converter.parseMetas.fields[Number(i)]); datasHTML+=this.settings.fieldsEnding; } datasHTML+=this.settings.linesBegining; for (let row in datas) { datasHTML+=this.settings.lineBegining; for(let field in datas[row]) { if(this._converter.parseMetas.fields.indexOf(field) !== -1) datasHTML+=this.settings.dataDisplaying.replace("#VALUE" , datas[row][field]).replace("#FIELDNAME" , field); } datasHTML+=this.settings.lineEnding; } datasHTML+=this.settings.linesEnding+this.settings.allEnding; return datasHTML; } } }