| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- /* @flow */
- export default class VNode {
- tag: string | void;
- data: VNodeData | void;
- children: ?Array<VNode>;
- text: string | void;
- elm: Node | void;
- ns: string | void;
- context: Component | void; // rendered in this component's scope
- functionalContext: Component | void; // only for functional component root nodes
- key: string | number | void;
- componentOptions: VNodeComponentOptions | void;
- componentInstance: Component | void; // component instance
- parent: VNode | void; // component placeholder node
- raw: boolean; // contains raw HTML? (server only)
- isStatic: boolean; // hoisted static node
- isRootInsert: boolean; // necessary for enter transition check
- isComment: boolean; // empty comment placeholder?
- isCloned: boolean; // is a cloned node?
- isOnce: boolean; // is a v-once node?
- constructor (
- tag?: string,
- data?: VNodeData,
- children?: ?Array<VNode>,
- text?: string,
- elm?: Node,
- context?: Component,
- componentOptions?: VNodeComponentOptions
- ) {
- this.tag = tag
- this.data = data
- this.children = children
- this.text = text
- this.elm = elm
- this.ns = undefined
- this.context = context
- this.functionalContext = undefined
- this.key = data && data.key
- this.componentOptions = componentOptions
- this.componentInstance = undefined
- this.parent = undefined
- this.raw = false
- this.isStatic = false
- this.isRootInsert = true
- this.isComment = false
- this.isCloned = false
- this.isOnce = false
- }
- // DEPRECATED: alias for componentInstance for backwards compat.
- get child (): Component | void {
- return this.componentInstance
- }
- }
- export const createEmptyVNode = () => {
- const node = new VNode()
- node.text = ''
- node.isComment = true
- return node
- }
- export function createTextVNode (val: string | number) {
- return new VNode(undefined, undefined, undefined, String(val))
- }
- // optimized shallow clone
- // used for static nodes and slot nodes because they may be reused across
- // multiple renders, cloning them avoids errors when DOM manipulations rely
- // on their elm reference.
- export function cloneVNode (vnode: VNode): VNode {
- const cloned = new VNode(
- vnode.tag,
- vnode.data,
- vnode.children,
- vnode.text,
- vnode.elm,
- vnode.context,
- vnode.componentOptions
- )
- cloned.ns = vnode.ns
- cloned.isStatic = vnode.isStatic
- cloned.key = vnode.key
- cloned.isCloned = true
- return cloned
- }
- export function cloneVNodes (vnodes: Array<VNode>): Array<VNode> {
- const res = new Array(vnodes.length)
- for (let i = 0; i < vnodes.length; i++) {
- res[i] = cloneVNode(vnodes[i])
- }
- return res
- }
|