Support custom elements that extend native elems

This commit is contained in:
Jorge Bucaran 2019-07-17 04:28:04 +09:00
parent 6c0cc07d33
commit 91e6d339b9
No known key found for this signature in database
GPG Key ID: E54BA3C0E646DB30
1 changed files with 19 additions and 18 deletions

View File

@ -123,34 +123,35 @@ var patchProperty = function(node, key, oldValue, newValue, listener, isSvg) {
}
}
var createNode = function(vnode, listener, isSvg) {
var createNode = function(vdom, listener, isSvg) {
var ns = "http://www.w3.org/2000/svg"
var props = vdom.props
var node =
vnode.type === TEXT_NODE
? document.createTextNode(vnode.name)
: (isSvg = isSvg || vnode.name === "svg")
? document.createElementNS("http://www.w3.org/2000/svg", vnode.name)
: document.createElement(vnode.name)
var props = vnode.props
vdom.type === TEXT_NODE
? document.createTextNode(vdom.name)
: (isSvg = isSvg || vdom.name === "svg")
? document.createElementNS(ns, vdom.name, { is: props.is })
: document.createElement(vdom.name, { is: props.is })
for (var k in props) {
patchProperty(node, k, null, props[k], listener, isSvg)
}
for (var i = 0, len = vnode.children.length; i < len; i++) {
for (var i = 0, len = vdom.children.length; i < len; i++) {
node.appendChild(
createNode(
(vnode.children[i] = getVNode(vnode.children[i])),
(vdom.children[i] = getVNode(vdom.children[i])),
listener,
isSvg
)
)
}
return (vnode.node = node)
return (vdom.node = node)
}
var getKey = function(vnode) {
return vnode == null ? null : vnode.key
var getKey = function(vdom) {
return vdom == null ? null : vdom.key
}
var patch = function(parent, node, oldVNode, newVNode, listener, isSvg) {
@ -397,18 +398,18 @@ export var Lazy = function(props) {
}
export var h = function(name, props) {
for (var vnode, rest = [], children = [], i = arguments.length; i-- > 2; ) {
for (var vdom, rest = [], children = [], i = arguments.length; i-- > 2; ) {
rest.push(arguments[i])
}
while (rest.length > 0) {
if (isArray((vnode = rest.pop()))) {
for (var i = vnode.length; i-- > 0; ) {
rest.push(vnode[i])
if (isArray((vdom = rest.pop()))) {
for (var i = vdom.length; i-- > 0; ) {
rest.push(vdom[i])
}
} else if (vnode === false || vnode === true || vnode == null) {
} else if (vdom === false || vdom === true || vdom == null) {
} else {
children.push(typeof vnode === "object" ? vnode : createTextVNode(vnode))
children.push(typeof vdom === "object" ? vdom : createTextVNode(vdom))
}
}