From 57f1b64ddb023e6e5c03ed5cc9bb22e8ba572181 Mon Sep 17 00:00:00 2001 From: Rich-Harris Date: Sun, 9 Apr 2017 12:11:07 -0400 Subject: [PATCH] start refactoring element code a bit --- src/generators/dom/visitors/Element.js | 24 ++++------ .../attributes/addElementAttributes.js | 46 +++++++++---------- .../visitors/attributes/addElementBinding.js | 42 ++++++++--------- 3 files changed, 54 insertions(+), 58 deletions(-) diff --git a/src/generators/dom/visitors/Element.js b/src/generators/dom/visitors/Element.js index 7f3b8d4e65..01e347ef59 100644 --- a/src/generators/dom/visitors/Element.js +++ b/src/generators/dom/visitors/Element.js @@ -20,11 +20,13 @@ export default function visitElement ( generator, block, state, node ) { const name = block.getUniqueName( node.name ); - const local = { - name, - namespace: node.name === 'svg' ? 'http://www.w3.org/2000/svg' : state.namespace, - isComponent: false, + const childState = Object.assign( {}, state, { + isTopLevel: false, + parentNode: name, + namespace: node.name === 'svg' ? 'http://www.w3.org/2000/svg' : state.namespace + }); + const local = { allUsedContexts: [], create: new CodeBuilder(), @@ -34,7 +36,7 @@ export default function visitElement ( generator, block, state, node ) { const isToplevel = !state.parentNode; - addElementAttributes( generator, block, node, local ); + addElementAttributes( generator, block, childState, node, local ); if ( local.allUsedContexts.length ) { const initialProps = local.allUsedContexts.map( contextName => { @@ -66,11 +68,11 @@ export default function visitElement ( generator, block, state, node ) { let render; - if ( local.namespace ) { - if ( local.namespace === 'http://www.w3.org/2000/svg' ) { + if ( childState.namespace ) { + if ( childState.namespace === 'http://www.w3.org/2000/svg' ) { render = `var ${name} = ${generator.helper( 'createSvgElement' )}( '${node.name}' )`; } else { - render = `var ${name} = document.createElementNS( '${local.namespace}', '${node.name}' );`; + render = `var ${name} = document.createElementNS( '${childState.namespace}', '${node.name}' );`; } } else { render = `var ${name} = ${generator.helper( 'createElement' )}( '${node.name}' );`; @@ -98,12 +100,6 @@ export default function visitElement ( generator, block, state, node ) { block.createMountStatement( name, state.parentNode ); - const childState = Object.assign( {}, state, { - isTopLevel: false, - parentNode: name, - namespace: local.namespace - }); - node.children.forEach( child => { visit( generator, block, childState, child ); }); diff --git a/src/generators/dom/visitors/attributes/addElementAttributes.js b/src/generators/dom/visitors/attributes/addElementAttributes.js index 8936db3d17..16fc52d085 100644 --- a/src/generators/dom/visitors/attributes/addElementAttributes.js +++ b/src/generators/dom/visitors/attributes/addElementAttributes.js @@ -4,12 +4,12 @@ import deindent from '../../../../utils/deindent.js'; import flattenReference from '../../../../utils/flattenReference.js'; import getStaticAttributeValue from './binding/getStaticAttributeValue.js'; -export default function addElementAttributes ( generator, block, node, local ) { +export default function addElementAttributes ( generator, block, state, node, local ) { node.attributes.forEach( attribute => { const name = attribute.name; if ( attribute.type === 'Attribute' ) { - let metadata = local.namespace ? null : attributeLookup[ name ]; + let metadata = state.namespace ? null : attributeLookup[ name ]; if ( metadata && metadata.appliesTo && !~metadata.appliesTo.indexOf( node.name ) ) metadata = null; let dynamic = false; @@ -32,28 +32,28 @@ export default function addElementAttributes ( generator, block, node, local ) { // attributes without values, e.g.