Add RootNode

This commit is contained in:
Misode
2020-05-24 12:03:45 +02:00
parent fb8b7df088
commit 92161c39f1
5 changed files with 62 additions and 37 deletions

View File

@@ -1,9 +1,13 @@
import { AbstractNode, NodeChildren, NodeMods } from './AbstractNode'
export class ObjectNode extends AbstractNode<any> {
private fields: NodeChildren
export interface IObject {
[name: string]: any
}
constructor(fields: NodeChildren, mods?: NodeMods<any>) {
export class ObjectNode extends AbstractNode<IObject> {
protected fields: NodeChildren
constructor(fields: NodeChildren, mods?: NodeMods<IObject>) {
super(mods)
this.fields = fields
Object.values(fields).forEach(child => {
@@ -11,11 +15,25 @@ export class ObjectNode extends AbstractNode<any> {
})
}
render(field: string, value: any) {
getFields() {
return this.fields
}
transform(value: IObject) {
if (value === undefined) return undefined
value = value || {}
return `<span>${field}:</span><div>
let res: any = {}
Object.keys(this.fields).forEach(f =>
res[f] = this.fields[f].transform(value[f])
)
return res;
}
render(field: string, value: IObject) {
if (value === undefined) return ``
return `<span>${field}:</span><div style="padding-left:8px">
${Object.keys(this.fields).map(f => {
return '> ' + this.fields[f].render(f, value[f])
return this.fields[f].render(f, value[f])
}).join('<br>')}
</div>`
}