third_party/polymer3/bower_components/polymer/lib/mixins/property-effects.js
function addEffectForBindingPart(constructor, templateInfo, binding, part, index) {
  if (!part.literal) {
    if (binding.kind === 'attribute' && binding.target[0] === '-') {
      console.warn('Cannot set attribute ' + binding.target +
        ' because "-" is not a valid attribute starting character');
    } else {
      let dependencies = part.dependencies;
      let info = { index, binding, part, evaluator: constructor };
      for (let j=0; j<dependencies.length; j++) {
        let trigger = dependencies[j];
        if (typeof trigger == 'string') {
          trigger = parseArg(trigger);
          trigger.wildcard = true;
        }
        constructor._addTemplatePropertyEffect(templateInfo, trigger.rootProperty, {
          fn: runBindingEffect,
          info, trigger
        });
      }
    }
  }
}
function addEffectForBindingPart(constructor, templateInfo, binding, part, index) {
  if (!part.literal) {
    if (binding.kind === 'attribute' && binding.target[0] === '-') {
      console.warn('Cannot set attribute ' + binding.target +
        ' because "-" is not a valid attribute starting character');
    } else {
      let dependencies = part.dependencies;
      let info = { index, binding, part, evaluator: constructor };
      for (let j=0; j<dependencies.length; j++) {
        let trigger = dependencies[j];
        if (typeof trigger == 'string') {
          trigger = parseArg(trigger);
          trigger.wildcard = true;
        }
        constructor._addTemplatePropertyEffect(templateInfo, trigger.rootProperty, {
          fn: runBindingEffect,
          info, trigger
        });
      }
    }
  }
}
function addEffectForBindingPart ( constructor , templateInfo , binding , part , index ) { if ( ! part . literal ) { if ( binding . kind === 'attribute' && binding . target [ 0 ] === '-' ) { console . warn ( 'Cannot set attribute ' + binding . target + ' because "-" is not a valid attribute starting character' ) ; } else { let dependencies = part . dependencies ; let info = { index , binding , part , evaluator : constructor } ; for ( let j = 0 ; j < dependencies . length ; j ++ ) { let trigger = dependencies [ j ] ; if ( typeof trigger == 'string' ) { trigger = parseArg ( trigger ) ; trigger . wildcard = true ; } constructor . _addTemplatePropertyEffect ( templateInfo , trigger . rootProperty , { fn : runBindingEffect , info , trigger } ) ; } } } }
Adds property effects to the given `templateInfo` for the given binding
part.

@param {Function} constructor Class that `_parseTemplate` is currently
running on
@param {TemplateInfo} templateInfo Template metadata for current template
@param {!Binding} binding Binding metadata
@param {!BindingPart} part Binding part metadata
@param {number} index Index into `nodeInfoList` for this node
@return {void}
Adds property effects to the given templateInfo for the given binding part .