summaryrefslogtreecommitdiff
path: root/packages/frontend/src/components/MkPostForm.vue
diff options
context:
space:
mode:
Diffstat (limited to 'packages/frontend/src/components/MkPostForm.vue')
-rw-r--r--packages/frontend/src/components/MkPostForm.vue30
1 files changed, 27 insertions, 3 deletions
diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue
index 4b027cf105..9734b51927 100644
--- a/packages/frontend/src/components/MkPostForm.vue
+++ b/packages/frontend/src/components/MkPostForm.vue
@@ -1166,17 +1166,41 @@ async function insertEmoji(ev: MouseEvent) {
},
() => {
textAreaReadOnly.value = false;
- nextTick(() => focus());
+ nextTick(() => {
+ if (textareaEl.value) {
+ textareaEl.value.focus();
+ textareaEl.value.setSelectionRange(pos, posEnd);
+ }
+ });
},
);
}
async function insertMfmFunction(ev: MouseEvent) {
if (textareaEl.value == null) return;
+ let pos = textareaEl.value.selectionStart ?? 0;
+ let posEnd = textareaEl.value.selectionEnd ?? text.value.length;
mfmFunctionPicker(
ev.currentTarget ?? ev.target,
- textareaEl.value,
- text,
+ (tag) => {
+ if (pos === posEnd) {
+ text.value = `${text.value.substring(0, pos)}$[${tag} ]${text.value.substring(pos)}`;
+ pos += tag.length + 3;
+ posEnd = pos;
+ } else {
+ text.value = `${text.value.substring(0, pos)}$[${tag} ${text.value.substring(pos, posEnd)}]${text.value.substring(posEnd)}`;
+ pos += tag.length + 3;
+ posEnd = pos;
+ }
+ },
+ () => {
+ nextTick(() => {
+ if (textareaEl.value) {
+ textareaEl.value.focus();
+ textareaEl.value.setSelectionRange(pos, posEnd);
+ }
+ });
+ },
);
}