text: /**
   * Copyright (c) 2013-present, 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 editOnBlur
   * @format
   * 
   */
  
  'use strict';
  
  var EditorState = require('./EditorState');
  
  var containsNode = require('fbjs/lib/containsNode');
  var getActiveElement = require('fbjs/lib/getActiveElement');
  
  function editOnBlur(editor, e) {
    // In a contentEditable element, when you select a range and then click
    // another active element, this does trigger a `blur` event but will not
    // remove the DOM selection from the contenteditable.
    // This is consistent across all browsers, but we prefer that the editor
    // behave like a textarea, where a `blur` event clears the DOM selection.
    // We therefore force the issue to be certain, checking whether the active
    // element is `body` to force it when blurring occurs within the window (as
    // opposed to clicking to another tab or window).
    if (getActiveElement() === document.body) {
      var _selection = global.getSelection();
      var editorNode = editor.refs.editor;
      if (_selection.rangeCount === 1 && containsNode(editorNode, _selection.anchorNode) && containsNode(editorNode, _selection.focusNode)) {
        _selection.removeAllRanges();
      }
    }
  
    var editorState = editor._latestEditorState;
    var currentSelection = editorState.getSelection();
    if (!currentSelection.getHasFocus()) {
      return;
    }
  
    var selection = currentSelection.set('hasFocus', false);
    editor.props.onBlur && editor.props.onBlur(e);
    editor.update(EditorState.acceptSelection(editorState, selection));
  }
  
  module.exports = editOnBlur;