From: 三咲智子 Kevin Deng Date: Mon, 27 Nov 2023 06:16:05 +0000 (+0800) Subject: refactor: extract dynamicChildren X-Git-Tag: v3.6.0-alpha.1~16^2~801 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c53af4d57dd785732e6957a97784fdda9c2bdbd7;p=thirdparty%2Fvuejs%2Fcore.git refactor: extract dynamicChildren --- diff --git a/packages/compiler-vapor/src/transform.ts b/packages/compiler-vapor/src/transform.ts index 416401b833..67355cdf79 100644 --- a/packages/compiler-vapor/src/transform.ts +++ b/packages/compiler-vapor/src/transform.ts @@ -169,54 +169,55 @@ function transformChildren( const childrenTemplate: string[] = [] children.forEach((child, i) => walkNode(child, i)) - let prevChildren: DynamicInfo[] = [] - let hasStatic = false - - for (let index = 0; index < children.length; index++) { - const child = ctx.dynamic.children[index] - - if (!child || !child.ghost) { - if (prevChildren.length) - if (hasStatic) { - childrenTemplate[index - prevChildren.length] = `` - const anchor = (prevChildren[0].placeholder = ctx.incraseId()) - - ctx.registerOpration({ - type: IRNodeTypes.INSERT_NODE, - loc: ctx.node.loc, - element: prevChildren.map((child) => child.id!), - parent: ctx.reference(), - anchor, - }) - } else { - ctx.registerOpration({ - type: IRNodeTypes.PREPEND_NODE, - loc: ctx.node.loc, - elements: prevChildren.map((child) => child.id!), - parent: ctx.reference(), - }) - } - hasStatic = true - prevChildren = [] - continue - } + processDynamicChildren() + ctx.template += childrenTemplate.join('') - prevChildren.push(child) + if (root) ctx.registerTemplate() - if (index === children.length - 1) { - ctx.registerOpration({ - type: IRNodeTypes.APPEND_NODE, - loc: ctx.node.loc, - elements: prevChildren.map((child) => child.id!), - parent: ctx.reference(), - }) - } - } + function processDynamicChildren() { + let prevChildren: DynamicInfo[] = [] + let hasStatic = false + for (let index = 0; index < children.length; index++) { + const child = ctx.dynamic.children[index] + + if (!child || !child.ghost) { + if (prevChildren.length) + if (hasStatic) { + childrenTemplate[index - prevChildren.length] = `` + const anchor = (prevChildren[0].placeholder = ctx.incraseId()) + + ctx.registerOpration({ + type: IRNodeTypes.INSERT_NODE, + loc: ctx.node.loc, + element: prevChildren.map((child) => child.id!), + parent: ctx.reference(), + anchor, + }) + } else { + ctx.registerOpration({ + type: IRNodeTypes.PREPEND_NODE, + loc: ctx.node.loc, + elements: prevChildren.map((child) => child.id!), + parent: ctx.reference(), + }) + } + hasStatic = true + prevChildren = [] + continue + } - ctx.template += childrenTemplate.join('') + prevChildren.push(child) - // finalize template - if (root) ctx.registerTemplate() + if (index === children.length - 1) { + ctx.registerOpration({ + type: IRNodeTypes.APPEND_NODE, + loc: ctx.node.loc, + elements: prevChildren.map((child) => child.id!), + parent: ctx.reference(), + }) + } + } + } function walkNode(node: TemplateChildNode, index: number) { const child = createContext(node, ctx, index)