|
- /**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @format
- *
- * @emails oncall+draft_js
- */
- 'use strict';
-
- var EditorState = require("./EditorState");
-
- var UserAgent = require("fbjs/lib/UserAgent");
-
- function editOnFocus(editor, e) {
- var editorState = editor._latestEditorState;
- var currentSelection = editorState.getSelection();
-
- if (currentSelection.getHasFocus()) {
- return;
- }
-
- var selection = currentSelection.set('hasFocus', true);
- editor.props.onFocus && editor.props.onFocus(e); // When the tab containing this text editor is hidden and the user does a
- // find-in-page in a _different_ tab, Chrome on Mac likes to forget what the
- // selection was right after sending this focus event and (if you let it)
- // moves the cursor back to the beginning of the editor, so we force the
- // selection here instead of simply accepting it in order to preserve the
- // old cursor position. See https://crbug.com/540004.
- // But it looks like this is fixed in Chrome 60.0.3081.0.
- // Other browsers also don't have this bug, so we prefer to acceptSelection
- // when possible, to ensure that unfocusing and refocusing a Draft editor
- // doesn't preserve the selection, matching how textareas work.
-
- if (UserAgent.isBrowser('Chrome < 60.0.3081.0')) {
- editor.update(EditorState.forceSelection(editorState, selection));
- } else {
- editor.update(EditorState.acceptSelection(editorState, selection));
- }
- }
-
- module.exports = editOnFocus;
|