docs: function buildElementTagAttribSwitcher( def, code, varName ) {
      var attName, attValue, attribs, attribsNames, attribName;
      for ( attName in def ) {
          attribsNames = getSuffix( attName, "attrib." );
          if ( !attribsNames ) continue;
          attValue = def[ attName ];
          if ( !attValue || attValue[ 0 ] !== 'Bind' ) {
              throw "Only bindings are accepted as values for attrib-switchers!\n" +
                  attName + ": " + JSON.stringify( attValue );
          }
          attribs = attribsNames.split( "|" );
          var actions = [];
          if ( isNonEmptyString( attribs[ 0 ] ) ) {
              code.requires.$ = "require('dom')";
              code.functions[ "addAttribIfTrue" ] = "(element, attribName, value) {\n" +
                  "    if( value ) $.att(element, attribName);\n" +
                  "    else $.removeAtt(element, attribName); };";
              attribName = JSON.stringify( attribs[ 0 ] );
              actions.push( "addAttribIfTrue( " + varName + ", " + attribName + ", v );" );
          }
          if ( isNonEmptyString( attribs[ 1 ] ) ) {
              code.requires.$ = "require('dom')";
              code.functions[ "addAttribIfFalse" ] = "(element, attribName, value) {\n" +
                  "    if( value ) $.removeAtt(element, attribName);\n" +
                  "    else $.att(element, attribName); };";
              attribName = JSON.stringify( attribs[ 1 ] );
              actions.push( "addAttribIfFalse( " + varName + ", " + attribName + ", v );" );
          }
          code.addLinkFromBind( attValue, actions );
      }
  }