react-lz-editor
Version:
An open source react rich-text editor (mordern react editor includes media support such as texts, images, videos, audios, links etc.), development based on Draft-Js and Ant-design, good support html, markdown, draft-raw mode.
59 lines (45 loc) • 1.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _draftJs = require('draft-js');
var _getSelectedBlocks = require('./getSelectedBlocks');
var _getSelectedBlocks2 = _interopRequireDefault(_getSelectedBlocks);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = function (editorState, modifier) {
for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
var contentState = editorState.getCurrentContent();
var currentSelection = editorState.getSelection();
var startKey = currentSelection.getStartKey();
var endKey = currentSelection.getEndKey();
var startOffset = currentSelection.getStartOffset();
var endOffset = currentSelection.getEndOffset();
var isSameBlock = startKey === endKey;
var selectedBlocks = (0, _getSelectedBlocks2.default)(contentState, startKey, endKey);
var finalEditorState = editorState;
selectedBlocks.forEach(function (block) {
var currentBlockKey = block.getKey();
var selectionStart = startOffset;
var selectionEnd = endOffset;
if (currentBlockKey === startKey) {
selectionStart = startOffset;
selectionEnd = isSameBlock ? endOffset : block.getText().length;
} else if (currentBlockKey === endKey) {
selectionStart = isSameBlock ? startOffset : 0;
selectionEnd = endOffset;
} else {
selectionStart = 0;
selectionEnd = block.getText().length;
}
var selection = new _draftJs.SelectionState({
anchorKey: currentBlockKey,
anchorOffset: selectionStart,
focusKey: currentBlockKey,
focusOffset: selectionEnd
});
finalEditorState = modifier.apply(undefined, [finalEditorState, selection].concat(args));
});
return _draftJs.EditorState.forceSelection(finalEditorState, currentSelection);
};