text: /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactDOMOption
   */
  
  'use strict';
  
  var ReactChildren = require('./ReactChildren');
  var ReactDOMSelect = require('./ReactDOMSelect');
  
  var assign = require('./Object.assign');
  var warning = require('fbjs/lib/warning');
  
  var valueContextKey = ReactDOMSelect.valueContextKey;
  
  /**
   * Implements an <option> native component that warns when `selected` is set.
   */
  var ReactDOMOption = {
    mountWrapper: function (inst, props, context) {
      // TODO (yungsters): Remove support for `selected` in <option>.
      if (process.env.NODE_ENV !== 'production') {
        process.env.NODE_ENV !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : undefined;
      }
  
      // Look up whether this option is 'selected' via context
      var selectValue = context[valueContextKey];
  
      // If context key is null (e.g., no specified value or after initial mount)
      // or missing (e.g., for <datalist>), we don't change props.selected
      var selected = null;
      if (selectValue != null) {
        selected = false;
        if (Array.isArray(selectValue)) {
          // multiple
          for (var i = 0; i < selectValue.length; i++) {
            if ('' + selectValue[i] === '' + props.value) {
              selected = true;
              break;
            }
          }
        } else {
          selected = '' + selectValue === '' + props.value;
        }
      }
  
      inst._wrapperState = { selected: selected };
    },
  
    getNativeProps: function (inst, props, context) {
      var nativeProps = assign({ selected: undefined, children: undefined }, props);
  
      // Read state only from initial mount because <select> updates value
      // manually; we need the initial state only for server rendering
      if (inst._wrapperState.selected != null) {
        nativeProps.selected = inst._wrapperState.selected;
      }
  
      var content = '';
  
      // Flatten children and warn if they aren't strings or numbers;
      // invalid types are ignored.
      ReactChildren.forEach(props.children, function (child) {
        if (child == null) {
          return;
        }
        if (typeof child === 'string' || typeof child === 'number') {
          content += child;
        } else {
          process.env.NODE_ENV !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : undefined;
        }
      });
  
      if (content) {
        nativeProps.children = content;
      }
  
      return nativeProps;
    }
  
  };
  
  module.exports = ReactDOMOption;