UNPKG

@lv-saharan/omii

Version:

OMII,OMI + I ,quick web framework!

59 lines (54 loc) 1.84 kB
import { extend } from '../util' import options from '../options' /** * Check if two nodes are equivalent. * * @param {Node} node DOM Node to compare * @param {VNode} vnode Virtual DOM node to compare * @param {boolean} [hydrating=false] If true, ignores component constructors when comparing. * @private */ export function isSameNodeType(node, vnode, hydrating) { if (typeof vnode === 'string' || typeof vnode === 'number') { return node.splitText !== undefined } if (typeof vnode.nodeName === 'string') { return !node._componentConstructor && isNamedNode(node, vnode.nodeName) } else if (typeof vnode.nodeName === 'function') { return options.mapping[node.nodeName.toLowerCase()] === vnode.nodeName } return hydrating || node._componentConstructor === vnode.nodeName } /** * Check if an Element has a given nodeName, case-insensitively. * * @param {Element} node A DOM Element to inspect the name of. * @param {String} nodeName Unnormalized name to compare against. */ export function isNamedNode(node, nodeName) { return ( node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase() ) } /** * Reconstruct Component-style `props` from a VNode. * Ensures default/fallback values from `defaultProps`: * Own-properties of `defaultProps` not present in `vnode.attributes` are added. * * @param {VNode} vnode * @returns {Object} props */ export function getNodeProps(vnode) { let props = extend({}, vnode.attributes) props.children = vnode.children let defaultProps = vnode.nodeName.defaultProps if (defaultProps !== undefined) { for (let i in defaultProps) { if (props[i] === undefined) { props[i] = defaultProps[i] } } } return props }