/** * 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.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;