mirror of
https://github.com/usememos/memos.git
synced 2025-06-05 22:09:59 +02:00
chore: update insert content in editor (#336)
This commit is contained in:
@ -47,19 +47,19 @@ const Editor = forwardRef((props: Props, ref: React.ForwardedRef<EditorRefAction
|
|||||||
focus: () => {
|
focus: () => {
|
||||||
editorRef.current?.focus();
|
editorRef.current?.focus();
|
||||||
},
|
},
|
||||||
insertText: (content = "", prefix = "", suffix = prefix) => {
|
insertText: (content = "", prefix = "", suffix = "") => {
|
||||||
if (!editorRef.current) {
|
if (!editorRef.current) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const cursorPosition = editorRef.current.selectionStart;
|
const cursorPosition = editorRef.current.selectionStart;
|
||||||
const endPosition = editorRef.current.selectionEnd;
|
const endPosition = editorRef.current.selectionEnd;
|
||||||
const prevValue = editorRef.current.value;
|
const prevValue = editorRef.current.value;
|
||||||
const value =
|
const value =
|
||||||
prevValue.slice(0, cursorPosition) +
|
prevValue.slice(0, cursorPosition) +
|
||||||
prefix +
|
prefix +
|
||||||
prevValue.slice(cursorPosition, endPosition) +
|
(content || prevValue.slice(cursorPosition, endPosition)) +
|
||||||
suffix +
|
suffix +
|
||||||
content +
|
|
||||||
prevValue.slice(endPosition);
|
prevValue.slice(endPosition);
|
||||||
|
|
||||||
editorRef.current.value = value;
|
editorRef.current.value = value;
|
||||||
|
@ -76,39 +76,37 @@ const MemoEditor: React.FC = () => {
|
|||||||
prevGlobalStateRef.current = editorState;
|
prevGlobalStateRef.current = editorState;
|
||||||
}, [state, editorState.editMemoId]);
|
}, [state, editorState.editMemoId]);
|
||||||
|
|
||||||
const handleInsertMark = (mark: string) => {
|
|
||||||
editorRef.current?.insertText("", mark);
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleKeyDown = (event: React.KeyboardEvent) => {
|
const handleKeyDown = (event: React.KeyboardEvent) => {
|
||||||
if (event.key === "Escape" && state.fullscreen) {
|
if (event.key === "Escape" && state.fullscreen) {
|
||||||
handleFullscreenBtnClick();
|
handleFullscreenBtnClick();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (event.key === "Enter" && (event.ctrlKey || event.metaKey)) {
|
|
||||||
handleSaveBtnClick();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (event.key === "Tab") {
|
if (event.key === "Tab") {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
editorRef.current?.insertText(" ".repeat(TAB_SPACE_WIDTH));
|
editorRef.current?.insertText(" ".repeat(TAB_SPACE_WIDTH));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (event.ctrlKey || event.metaKey) {
|
if (event.ctrlKey || event.metaKey) {
|
||||||
event.preventDefault();
|
if (event.key === "Enter") {
|
||||||
switch (event.key) {
|
handleSaveBtnClick();
|
||||||
case "b":
|
|
||||||
handleInsertMark("**");
|
|
||||||
break;
|
|
||||||
case "i":
|
|
||||||
handleInsertMark("*");
|
|
||||||
break;
|
|
||||||
case "e":
|
|
||||||
handleInsertMark("`");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (event.key === "b") {
|
||||||
|
event.preventDefault();
|
||||||
|
editorRef.current?.insertText("", "**", "**");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event.key === "i") {
|
||||||
|
event.preventDefault();
|
||||||
|
editorRef.current?.insertText("", "*", "*");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event.key === "e") {
|
||||||
|
event.preventDefault();
|
||||||
|
editorRef.current?.insertText("", "`", "`");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleDropEvent = async (event: React.DragEvent) => {
|
const handleDropEvent = async (event: React.DragEvent) => {
|
||||||
@ -235,9 +233,9 @@ const MemoEditor: React.FC = () => {
|
|||||||
const cursorPosition = editorRef.current.getCursorPosition();
|
const cursorPosition = editorRef.current.getCursorPosition();
|
||||||
const prevValue = editorRef.current.getContent().slice(0, cursorPosition);
|
const prevValue = editorRef.current.getContent().slice(0, cursorPosition);
|
||||||
if (prevValue === "" || prevValue.endsWith("\n")) {
|
if (prevValue === "" || prevValue.endsWith("\n")) {
|
||||||
editorRef.current?.insertText("- [ ] ");
|
editorRef.current?.insertText("", "- [ ] ");
|
||||||
} else {
|
} else {
|
||||||
editorRef.current?.insertText("\n- [ ] ");
|
editorRef.current?.insertText("", "\n- [ ] ");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -249,9 +247,9 @@ const MemoEditor: React.FC = () => {
|
|||||||
const cursorPosition = editorRef.current.getCursorPosition();
|
const cursorPosition = editorRef.current.getCursorPosition();
|
||||||
const prevValue = editorRef.current.getContent().slice(0, cursorPosition);
|
const prevValue = editorRef.current.getContent().slice(0, cursorPosition);
|
||||||
if (prevValue === "" || prevValue.endsWith("\n")) {
|
if (prevValue === "" || prevValue.endsWith("\n")) {
|
||||||
editorRef.current?.insertText("```\n\n```");
|
editorRef.current?.insertText("", "```\n", "\n```");
|
||||||
} else {
|
} else {
|
||||||
editorRef.current?.insertText("\n```\n\n```");
|
editorRef.current?.insertText("", "\n```\n", "\n```");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -375,7 +373,7 @@ const MemoEditor: React.FC = () => {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button className="action-btn">
|
<button className="action-btn !hidden sm:!flex ">
|
||||||
<Icon.Smile className="icon-img" onClick={handleEmojiPickerBtnClick} />
|
<Icon.Smile className="icon-img" onClick={handleEmojiPickerBtnClick} />
|
||||||
</button>
|
</button>
|
||||||
<button className="action-btn">
|
<button className="action-btn">
|
||||||
|
Reference in New Issue
Block a user