'use strict';
exports.__esModule = true;
exports.isSameNodeType = isSameNodeType;
exports.isNamedNode = isNamedNode;
exports.getNodeProps = getNodeProps;
var _util = require('../util');
var _functionalComponent = require('./functional-component');
var _dom = require('../dom');
/** Check if two nodes are equivalent.
* @param {Element} node
* @param {VNode} vnode
* @private
*/
function isSameNodeType(node, vnode) {
Iif (_functionalComponent.isFunctionalComponent(vnode)) return true;
var nodeName = vnode.nodeName;
if (_util.isFunction(nodeName)) return node._componentConstructor === nodeName;
// if (getNodeType(node)===3) return isString(vnode);
if (_util.isString(vnode)) return _dom.getNodeType(node) === 3;
return isNamedNode(node, nodeName);
}
function isNamedNode(node, nodeName) {
// let name = node.normalizedNodeName || node.nodeName;
// if (name!==undefined) {
Eif (typeof node.nodeName !== undefined) {
return node.nodeName.toUpperCase() === nodeName.toUpperCase();
}
// try {
// return node.nodeName===nodeName.toUpperCase();
// } catch (err) {}
}
/**
* 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
*/
function getNodeProps(vnode) {
var props = _util.clone(vnode.attributes),
c = vnode.children;
if (c) props.children = c;
var defaultProps = vnode.nodeName.defaultProps;
if (defaultProps) {
for (var i in defaultProps) {
if (_util.hasOwnProperty.call(defaultProps, i) && !(i in props)) {
props[i] = defaultProps[i];
}
}
}
return props;
}
|