1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | 'use strict';
|
12 |
|
13 | var DraftModifier = require("./DraftModifier");
|
14 |
|
15 | var EditorState = require("./EditorState");
|
16 |
|
17 | var getContentStateFragment = require("./getContentStateFragment");
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | function keyCommandTransposeCharacters(editorState) {
|
26 | var selection = editorState.getSelection();
|
27 |
|
28 | if (!selection.isCollapsed()) {
|
29 | return editorState;
|
30 | }
|
31 |
|
32 | var offset = selection.getAnchorOffset();
|
33 |
|
34 | if (offset === 0) {
|
35 | return editorState;
|
36 | }
|
37 |
|
38 | var blockKey = selection.getAnchorKey();
|
39 | var content = editorState.getCurrentContent();
|
40 | var block = content.getBlockForKey(blockKey);
|
41 | var length = block.getLength();
|
42 |
|
43 | if (length <= 1) {
|
44 | return editorState;
|
45 | }
|
46 |
|
47 | var removalRange;
|
48 | var finalSelection;
|
49 |
|
50 | if (offset === length) {
|
51 |
|
52 | removalRange = selection.set('anchorOffset', offset - 1);
|
53 | finalSelection = selection;
|
54 | } else {
|
55 | removalRange = selection.set('focusOffset', offset + 1);
|
56 | finalSelection = removalRange.set('anchorOffset', offset + 1);
|
57 | }
|
58 |
|
59 |
|
60 |
|
61 | var movedFragment = getContentStateFragment(content, removalRange);
|
62 | var afterRemoval = DraftModifier.removeRange(content, removalRange, 'backward');
|
63 |
|
64 | var selectionAfter = afterRemoval.getSelectionAfter();
|
65 | var targetOffset = selectionAfter.getAnchorOffset() - 1;
|
66 | var targetRange = selectionAfter.merge({
|
67 | anchorOffset: targetOffset,
|
68 | focusOffset: targetOffset
|
69 | });
|
70 | var afterInsert = DraftModifier.replaceWithFragment(afterRemoval, targetRange, movedFragment);
|
71 | var newEditorState = EditorState.push(editorState, afterInsert, 'insert-fragment');
|
72 | return EditorState.acceptSelection(newEditorState, finalSelection);
|
73 | }
|
74 |
|
75 | module.exports = keyCommandTransposeCharacters; |
\ | No newline at end of file |