import deindent from '../../utils/deindent.js'; import flattenReference from '../../utils/flattenReference.js'; export default class Block { constructor ( options ) { Object.assign( this, options ); } addBinding ( binding, name ) { const conditions = [ `!( '${binding.name}' in state )`].concat( // TODO handle contextual bindings... this.conditions.map( c => `(${c})` ) ); const { keypath } = flattenReference( binding.value ); this.generator.bindings.push( deindent` if ( ${conditions.join( '&&' )} ) { tmp = ${name}.data(); if ( '${keypath}' in tmp ) { state.${binding.name} = tmp.${keypath}; settled = false; } } ` ); } child ( options ) { return new Block( Object.assign( {}, this, options, { parent: this } ) ); } contextualise ( expression, context, isEventHandler ) { return this.generator.contextualise( this, expression, context, isEventHandler ); } }