@ -46,7 +46,7 @@ export default function visitElement ( generator, block, state, node ) {
block . builders . create . addLine ( ` ${ generator . helper ( 'setAttribute' ) } ( ${ name } , ' ${ generator . cssId } ', '' ); ` ) ;
}
function visitAttributes ( ) {
function visitAttributes AndAddProps ( ) {
let intro ;
let outro ;
@ -63,25 +63,6 @@ export default function visitElement ( generator, block, state, node ) {
} ) ;
if ( intro || outro ) addTransitions ( generator , block , childState , node , intro , outro ) ;
}
if ( ! state . parentNode ) {
// TODO we eventually need to consider what happens to elements
// that belong to the same outgroup as an outroing element...
block . builders . detach . addLine ( ` ${ generator . helper ( 'detachNode' ) } ( ${ name } ); ` ) ;
}
if ( node . name !== 'select' ) {
// <select> value attributes are an annoying special case — it must be handled
// *after* its children have been updated
visitAttributes ( ) ;
}
// special case – bound <option> without a value attribute
if ( node . name === 'option' && ! node . attributes . find ( attribute => attribute . type === 'Attribute' && attribute . name === 'value' ) ) { // TODO check it's bound
const statement = ` ${ name } .__value = ${ name } .textContent; ` ;
node . initialUpdate = node . lateUpdate = statement ;
}
if ( childState . allUsedContexts . length || childState . usesComponent ) {
const initialProps = [ ] ;
@ -113,6 +94,25 @@ export default function visitElement ( generator, block, state, node ) {
block . builders . update . addBlock ( updates . join ( '\n' ) ) ;
}
}
}
if ( ! state . parentNode ) {
// TODO we eventually need to consider what happens to elements
// that belong to the same outgroup as an outroing element...
block . builders . detach . addLine ( ` ${ generator . helper ( 'detachNode' ) } ( ${ name } ); ` ) ;
}
if ( node . name !== 'select' ) {
// <select> value attributes are an annoying special case — it must be handled
// *after* its children have been updated
visitAttributesAndAddProps ( ) ;
}
// special case – bound <option> without a value attribute
if ( node . name === 'option' && ! node . attributes . find ( attribute => attribute . type === 'Attribute' && attribute . name === 'value' ) ) { // TODO check it's bound
const statement = ` ${ name } .__value = ${ name } .textContent; ` ;
node . initialUpdate = node . lateUpdate = statement ;
}
node . children . forEach ( child => {
visit ( generator , block , childState , child ) ;
@ -123,7 +123,7 @@ export default function visitElement ( generator, block, state, node ) {
}
if ( node . name === 'select' ) {
visitAttributes ( ) ;
visitAttributes AndAddProps ( ) ;
}
if ( node . initialUpdate ) {