@uiw/react-md-editor
Version:
A markdown editor with preview, implemented with React.js and TypeScript.
87 lines (85 loc) • 3.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = handleKeyDown;
var _InsertTextAtPosition = require("../../utils/InsertTextAtPosition");
var _commands = require("../../commands");
var _list = require("../../commands/list");
/**
* - `13` - `Enter`
* - `9` - `Tab`
*/
function stopPropagation(e) {
e.stopPropagation();
e.preventDefault();
}
function handleKeyDown(e) {
var tabSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
var defaultTabEnable = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var target = e.target;
var starVal = target.value.substr(0, target.selectionStart);
var valArr = starVal.split('\n');
var currentLineStr = valArr[valArr.length - 1];
var textArea = new _commands.TextAreaTextApi(target);
/**
* `9` - `Tab`
*/
if (!defaultTabEnable && e.code && e.code.toLowerCase() === 'tab') {
stopPropagation(e);
var space = new Array(tabSize + 1).join(' ');
if (target.selectionStart !== target.selectionEnd) {
var _star = target.value.substring(0, target.selectionStart).split('\n');
var _end = target.value.substring(0, target.selectionEnd).split('\n');
var modifiedTextLine = [];
_end.forEach(function (item, idx) {
if (item !== _star[idx]) {
modifiedTextLine.push(item);
}
});
var modifiedText = modifiedTextLine.join('\n');
var oldSelectText = target.value.substring(target.selectionStart, target.selectionEnd);
var newStarNum = target.value.substring(0, target.selectionStart).length;
textArea.setSelectionRange({
start: target.value.indexOf(modifiedText),
end: target.selectionEnd
});
var modifiedTextObj = (0, _list.insertBeforeEachLine)(modifiedText, e.shiftKey ? '' : space);
var text = modifiedTextObj.modifiedText;
if (e.shiftKey) {
text = text.split('\n').map(function (item) {
return item.replace(new RegExp("^".concat(space)), '');
}).join('\n');
}
textArea.replaceSelection(text);
var startTabSize = e.shiftKey ? -tabSize : tabSize;
var endTabSize = e.shiftKey ? -modifiedTextLine.length * tabSize : modifiedTextLine.length * tabSize;
textArea.setSelectionRange({
start: newStarNum + startTabSize,
end: newStarNum + oldSelectText.length + endTabSize
});
} else {
return (0, _InsertTextAtPosition.insertTextAtPosition)(target, space);
}
} else if (e.code && e.code.toLowerCase() === 'enter' && (/^(-|\*)\s/.test(currentLineStr) || /^\d+.\s/.test(currentLineStr))) {
/**
* `13` - `Enter`
*/
stopPropagation(e);
var startStr = '\n- ';
if (currentLineStr.startsWith('*')) {
startStr = '\n* ';
}
if (currentLineStr.startsWith('- [ ]')) {
startStr = '\n- [ ] ';
} else if (currentLineStr.startsWith('- [X]')) {
startStr = '\n- [X] ';
}
if (/^\d+.\s/.test(currentLineStr)) {
startStr = "\n".concat(parseInt(currentLineStr) + 1, ". ");
}
return (0, _InsertTextAtPosition.insertTextAtPosition)(target, startStr);
}
}
module.exports = exports.default;
//# sourceMappingURL=handleKeyDown.js.map