Olian04/brynja

View on GitHub
src/renderNode.ts

Summary

Maintainability
A
1 hr
Test Coverage
import { VNode } from './interfaces/VNode';

export function renderNode(node: VNode): HTMLElement {
  const elem = document.createElement(node.tag);
  if (node.value) {
    // @ts-ignore
    elem.value = node.value;
    elem.setAttribute('value', '' + node.value);
  }

  if (node.text !== '') {
    const $text = document.createTextNode(node.text);
    elem.appendChild($text);
  }

  Object.keys(node.props).forEach((prop) => {
    elem.setAttribute(prop, node.props[prop]);
  });
  Object.keys(node.events).forEach((event) => {
    // @ts-ignore
    elem[`on${event}`] = (e) => {
      node.events[event].forEach((cb) => {
        cb(e);
      });
    };
  });
  node.children.forEach((node) => {
    elem.appendChild(renderNode(node));
  });
  return elem;
}