|
3 | 3 | import { isPrimitive } from 'core/util/index'
|
4 | 4 | import VNode from 'core/vdom/vnode'
|
5 | 5 |
|
6 |
| -export function normalizeChildren ( |
7 |
| - children: any, |
8 |
| - ns: string | void, |
9 |
| - nestedIndex: string | void |
10 |
| -): Array<VNode> | void { |
11 |
| - if (isPrimitive(children)) { |
12 |
| - return [createTextVNode(children)] |
13 |
| - } |
14 |
| - if (Array.isArray(children)) { |
15 |
| - const res = [] |
16 |
| - for (let i = 0, l = children.length; i < l; i++) { |
17 |
| - const c = children[i] |
18 |
| - const last = res[res.length - 1] |
19 |
| - // nested |
20 |
| - if (Array.isArray(c)) { |
21 |
| - res.push.apply(res, normalizeChildren(c, ns, `${nestedIndex || ''}_${i}`)) |
22 |
| - } else if (isPrimitive(c)) { |
23 |
| - if (last && last.text) { |
24 |
| - last.text += String(c) |
25 |
| - } else if (c !== '') { |
26 |
| - // convert primitive to vnode |
27 |
| - res.push(createTextVNode(c)) |
| 6 | +export function normalizeChildren (children: any, ns: ?string): Array<VNode> | void { |
| 7 | + return isPrimitive(children) |
| 8 | + ? [createTextVNode(children)] |
| 9 | + : Array.isArray(children) |
| 10 | + ? normalizeArrayChildren(children, ns) |
| 11 | + : undefined |
| 12 | +} |
| 13 | + |
| 14 | +function normalizeArrayChildren (children: any, ns: ?string, nestedIndex?: string): Array<VNode> { |
| 15 | + const res = [] |
| 16 | + let i, c, last |
| 17 | + for (i = 0; i < children.length; i++) { |
| 18 | + c = children[i] |
| 19 | + if (c == null) continue |
| 20 | + last = res[res.length - 1] |
| 21 | + // nested |
| 22 | + if (Array.isArray(c)) { |
| 23 | + res.push.apply(res, normalizeArrayChildren(c, ns, `${nestedIndex || ''}_${i}`)) |
| 24 | + } else if (isPrimitive(c)) { |
| 25 | + if (last && last.text) { |
| 26 | + last.text += String(c) |
| 27 | + } else if (c !== '') { |
| 28 | + // convert primitive to vnode |
| 29 | + res.push(createTextVNode(c)) |
| 30 | + } |
| 31 | + } else { |
| 32 | + if (c.text && last && last.text) { |
| 33 | + if (!last.isCloned) { |
| 34 | + last.text += c.text |
| 35 | + } |
| 36 | + } else { |
| 37 | + // inherit parent namespace |
| 38 | + if (ns) { |
| 39 | + applyNS(c, ns) |
28 | 40 | }
|
29 |
| - } else if (c instanceof VNode) { |
30 |
| - if (c.text && last && last.text) { |
31 |
| - if (!last.isCloned) { |
32 |
| - last.text += c.text |
33 |
| - } |
34 |
| - } else { |
35 |
| - // inherit parent namespace |
36 |
| - if (ns) { |
37 |
| - applyNS(c, ns) |
38 |
| - } |
39 |
| - // default key for nested array children (likely generated by v-for) |
40 |
| - if (c.tag && c.key == null && nestedIndex != null) { |
41 |
| - c.key = `__vlist${nestedIndex}_${i}__` |
42 |
| - } |
43 |
| - res.push(c) |
| 41 | + // default key for nested array children (likely generated by v-for) |
| 42 | + if (c.tag && c.key == null && nestedIndex != null) { |
| 43 | + c.key = `__vlist${nestedIndex}_${i}__` |
44 | 44 | }
|
| 45 | + res.push(c) |
45 | 46 | }
|
46 | 47 | }
|
47 |
| - return res |
48 | 48 | }
|
| 49 | + return res |
49 | 50 | }
|
50 | 51 |
|
51 | 52 | function createTextVNode (val) {
|
|
0 commit comments