export interface LogEntry {
render: () => HTMLElement[];
}
export class LogLines implements LogEntry {
lines: string[]
constructor (...lines: string[]) {
this.lines = lines
}
render (): HTMLElement[] {
const p = document.createElement('p')
this.lines.forEach(line => {
const div = document.createElement('div')
div.innerText = line
p.appendChild(div)
})
return [p]
}
}
export class CompositeLog implements LogEntry {
entries: LogEntry[]
constructor (...entries: LogEntry[]) {
this.entries = entries
}
render (): HTMLElement[] {
return this.entries.map(entry => entry.render()).reduce((results: HTMLElement[], next: HTMLElement[]) => results.concat(next), [])
}
}
export function log (entry: LogEntry): void {
entry.render().forEach(elem => document.querySelector('#log')?.appendChild(elem))
}