import { Element } from './Element'; import { NodeStyles } from './Styles'; import { Color } from './Color'; export class Node extends Element { public label?: string; public is_table = false; public table_contents?: Array>; public style?: NodeStyles; public color?: Color; public constructor (name: string, parent?: string, label?: string) { super (name, parent); this.label = label; } private get serialized_table (): string { if (typeof this.table_contents === 'undefined') throw new Error ('table contents are undefined'); const mapped_columns = this.table_contents .map ((val) => `${val.join ('')}`); return `\n ${ mapped_columns.join ('\n ') }\n
`; } // eslint-disable-next-line @typescript-eslint/naming-convention public toString (): string { const attributes = []; if (this.style) attributes.push ({ name: 'style', value: this.style.toString () }); if (this.color) attributes.push ({ name: 'color', value: this.color.toString () }); const attrs = attributes.map ((v) => `${v.name}="${v.value}"`) .join (','); if (this.is_table || typeof this.label !== 'undefined') { return `${this.full_name} [label=<${this.is_table ? this.serialized_table : this.label}>${attributes.length > 0 ? `,${attrs}` : ''}]`; } return `${this.full_name}`; } }