tiny-dream
Version:
A tiny Incremental DOM implementation for modern browsers.
36 lines (27 loc) • 759 B
JavaScript
import getNodeData from './get-node-data'
import initNodeData from './init-node-data'
const getNamespaceForTag = (tag, parent) => {
if (tag === 'svg') {
return 'http://www.w3.org/2000/svg'
}
if (getNodeData(parent).nameOrCtor === 'foreignObject') {
return null
}
return parent.namespaceURI
}
const createElement = (doc, parent, nameOrCtor, key, typeId) => {
let el
if (typeof nameOrCtor === 'function') {
el = new nameOrCtor()
} else {
const namespace = getNamespaceForTag(nameOrCtor, parent)
if (namespace) {
el = doc.createElementNS(namespace, nameOrCtor)
} else {
el = doc.createElement(nameOrCtor)
}
}
initNodeData(el, nameOrCtor, key, typeId)
return el
}
export default createElement