function _createOpenTagMarkupAndPutListeners(transaction, props) {
	    var ret = '<' + this._currentElement.type;

	    for (var propKey in props) {
	      if (!props.hasOwnProperty(propKey)) {
	        continue;
	      }
	      var propValue = props[propKey];
	      if (propValue == null) {
	        continue;
	      }
	      if (registrationNameModules.hasOwnProperty(propKey)) {
	        if (propValue) {
	          enqueuePutListener(this, propKey, propValue, transaction);
	        }
	      } else {
	        if (propKey === STYLE) {
	          if (propValue) {
	            if (process.env.NODE_ENV !== 'production') {
	              // See `_updateDOMProperties`. style block
	              this._previousStyle = propValue;
	            }
	            propValue = this._previousStyleCopy = _assign({}, props.style);
	          }
	          propValue = CSSPropertyOperations.createMarkupForStyles(propValue, this);
	        }
	        var markup = null;
	        if (this._tag != null && isCustomComponent(this._tag, props)) {
	          if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
	            markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue);
	          }
	        } else {
	          markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);
	        }
	        if (markup) {
	          ret += ' ' + markup;
	        }
	      }
	    }

	    // For static pages, no need to put React ID and checksum. Saves lots of
	    // bytes.
	    if (transaction.renderToStaticMarkup) {
	      return ret;
	    }

	    if (!this._nativeParent) {
	      ret += ' ' + DOMPropertyOperations.createMarkupForRoot();
	    }
	    ret += ' ' + DOMPropertyOperations.createMarkupForID(this._domID);
	    return ret;
	  }
/**
	   * Creates markup for the open tag and all attributes.
	   *
	   * This method has side effects because events get registered.
	   *
	   * Iterating over object properties is faster than iterating over arrays.
	   * @see http://jsperf.com/obj-vs-arr-iteration
	   *
	   * @private
	   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
	   * @param {object} props
	   * @return {string} Markup of opening tag.
	   */
Creates markup for the open tag and all attributes.
This method has side effects because events get registered.

Iterating over object properties is faster than iterating over arrays.

@private
@param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
@param {object} props
@return {string} Markup of opening tag.
Creates markup for the open tag and all attributes . This method has side effects because events get registered . Iterating over object properties is faster than iterating over arrays . @private @param { ReactReconcileTransaction|ReactServerRenderingTransaction } transaction @param { object } props @return { string } Markup of opening tag .
function _createOpenTagMarkupAndPutListeners(transaction, props) {
	    var ret = '<' + this._currentElement.type;
	    for (var propKey in props) {
	      if (!props.hasOwnProperty(propKey)) {
	        continue;
	      }
	      var propValue = props[propKey];
	      if (propValue == null) {
	        continue;
	      }
	      if (registrationNameModules.hasOwnProperty(propKey)) {
	        if (propValue) {
	          enqueuePutListener(this, propKey, propValue, transaction);
	        }
	      } else {
	        if (propKey === STYLE) {
	          if (propValue) {
	            if (process.env.NODE_ENV !== 'production') {
	              this._previousStyle = propValue;
	            }
	            propValue = this._previousStyleCopy = _assign({}, props.style);
	          }
	          propValue = CSSPropertyOperations.createMarkupForStyles(propValue, this);
	        }
	        var markup = null;
	        if (this._tag != null && isCustomComponent(this._tag, props)) {
	          if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
	            markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue);
	          }
	        } else {
	          markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);
	        }
	        if (markup) {
	          ret += ' ' + markup;
	        }
	      }
	    }
	    if (transaction.renderToStaticMarkup) {
	      return ret;
	    }
	    if (!this._nativeParent) {
	      ret += ' ' + DOMPropertyOperations.createMarkupForRoot();
	    }
	    ret += ' ' + DOMPropertyOperations.createMarkupForID(this._domID);
	    return ret;
	  }
function _createOpenTagMarkupAndPutListeners ( transaction , props ) { var ret = '<' + this . _currentElement . type ; for ( var propKey in props ) { if ( ! props . hasOwnProperty ( propKey ) ) { continue ; } var propValue = props [ propKey ] ; if ( propValue == null ) { continue ; } if ( registrationNameModules . hasOwnProperty ( propKey ) ) { if ( propValue ) { enqueuePutListener ( this , propKey , propValue , transaction ) ; } } else { if ( propKey === STYLE ) { if ( propValue ) { if ( process . env . NODE_ENV !== 'production' ) { this . _previousStyle = propValue ; } propValue = this . _previousStyleCopy = _assign ( { } , props . style ) ; } propValue = CSSPropertyOperations . createMarkupForStyles ( propValue , this ) ; } var markup = null ; if ( this . _tag != null && isCustomComponent ( this . _tag , props ) ) { if ( ! RESERVED_PROPS . hasOwnProperty ( propKey ) ) { markup = DOMPropertyOperations . createMarkupForCustomAttribute ( propKey , propValue ) ; } } else { markup = DOMPropertyOperations . createMarkupForProperty ( propKey , propValue ) ; } if ( markup ) { ret += ' ' + markup ; } } } if ( transaction . renderToStaticMarkup ) { return ret ; } if ( ! this . _nativeParent ) { ret += ' ' + DOMPropertyOperations . createMarkupForRoot ( ) ; } ret += ' ' + DOMPropertyOperations . createMarkupForID ( this . _domID ) ; return ret ; }
Creates markup for the open tag and all attributes.
Creates markup for the open tag and all attributes .
// See `_updateDOMProperties`. style block // For static pages, no need to put React ID and checksum. Saves lots of // bytes.