UNPKG

vue

Version:

Reactive, component-oriented view layer for modern web interfaces.

58 lines (54 loc) 1.42 kB
/* @flow */ /** * Runtime helper for resolving raw children VNodes into a slot object. */ export function resolveSlots ( children: ?Array<VNode>, context: ?Component ): { [key: string]: Array<VNode> } { const slots = {} if (!children) { return slots } const defaultSlot = [] for (let i = 0, l = children.length; i < l; i++) { const child = children[i] // named slots should only be respected if the vnode was rendered in the // same context. if ((child.context === context || child.functionalContext === context) && child.data && child.data.slot != null ) { const name = child.data.slot const slot = (slots[name] || (slots[name] = [])) if (child.tag === 'template') { slot.push.apply(slot, child.children) } else { slot.push(child) } } else { defaultSlot.push(child) } } // ignore whitespace if (!defaultSlot.every(isWhitespace)) { slots.default = defaultSlot } return slots } function isWhitespace (node: VNode): boolean { return node.isComment || node.text === ' ' } export function resolveScopedSlots ( fns: ScopedSlotsData, // see flow/vnode res?: Object ): { [key: string]: Function } { res = res || {} for (let i = 0; i < fns.length; i++) { if (Array.isArray(fns[i])) { resolveScopedSlots(fns[i], res) } else { res[fns[i].key] = fns[i].fn } } return res }