1 | import { clone, isString, isFunction, toLowerCase } from '../util';
|
2 | import { isFunctionalComponent } from './functional-component';
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | export function isSameNodeType(node, vnode) {
|
11 | if (isString(vnode)) {
|
12 | return node instanceof Text;
|
13 | }
|
14 | if (isString(vnode.nodeName)) {
|
15 | return isNamedNode(node, vnode.nodeName);
|
16 | }
|
17 | if (isFunction(vnode.nodeName)) {
|
18 | return node._componentConstructor===vnode.nodeName || isFunctionalComponent(vnode);
|
19 | }
|
20 | }
|
21 |
|
22 |
|
23 | export function isNamedNode(node, nodeName) {
|
24 | return node.normalizedNodeName===nodeName || toLowerCase(node.nodeName)===toLowerCase(nodeName);
|
25 | }
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 | export function getNodeProps(vnode) {
|
36 | let props = clone(vnode.attributes);
|
37 | props.children = vnode.children;
|
38 |
|
39 | let defaultProps = vnode.nodeName.defaultProps;
|
40 | if (defaultProps) {
|
41 | for (let i in defaultProps) {
|
42 | if (props[i]===undefined) {
|
43 | props[i] = defaultProps[i];
|
44 | }
|
45 | }
|
46 | }
|
47 |
|
48 | return props;
|
49 | }
|