summaryrefslogtreecommitdiff
path: root/packages/frontend/src/utility/mfm-function-picker.ts
diff options
context:
space:
mode:
authormisskey-release-bot[bot] <157398866+misskey-release-bot[bot]@users.noreply.github.com>2026-03-05 10:56:50 +0000
committerGitHub <noreply@github.com>2026-03-05 10:56:50 +0000
commitfe3dd8edb5f30104cd0a7ed755eb254feda2922d (patch)
treeaf6cf5fa4ca75302ac2de5db742cead00bc13d21 /packages/frontend/src/utility/mfm-function-picker.ts
parentMerge pull request #16998 from misskey-dev/develop (diff)
parentRelease: 2026.3.0 (diff)
downloadmisskey-fe3dd8edb5f30104cd0a7ed755eb254feda2922d.tar.gz
misskey-fe3dd8edb5f30104cd0a7ed755eb254feda2922d.tar.bz2
misskey-fe3dd8edb5f30104cd0a7ed755eb254feda2922d.zip
Merge pull request #17217 from misskey-dev/develop
Release: 2026.3.0
Diffstat (limited to 'packages/frontend/src/utility/mfm-function-picker.ts')
-rw-r--r--packages/frontend/src/utility/mfm-function-picker.ts48
1 files changed, 10 insertions, 38 deletions
diff --git a/packages/frontend/src/utility/mfm-function-picker.ts b/packages/frontend/src/utility/mfm-function-picker.ts
index 09802d580b..5580435db1 100644
--- a/packages/frontend/src/utility/mfm-function-picker.ts
+++ b/packages/frontend/src/utility/mfm-function-picker.ts
@@ -3,55 +3,27 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { nextTick } from 'vue';
import { MFM_TAGS } from '@@/js/const.js';
-import type { Ref } from 'vue';
-import type { MenuItem } from '@/types/menu.js';
import * as os from '@/os.js';
import { i18n } from '@/i18n.js';
/**
* MFMの装飾のリストを表示する
*/
-export function mfmFunctionPicker(anchorElement: HTMLElement | EventTarget | null, textArea: HTMLInputElement | HTMLTextAreaElement, textRef: Ref<string>) {
+export function mfmFunctionPicker(anchorElement: HTMLElement | EventTarget | null, onChosen: (tag: string) => void, onClosed?: () => void) {
os.popupMenu([{
text: i18n.ts.addMfmFunction,
type: 'label',
- }, ...getFunctionList(textArea, textRef)], anchorElement);
-}
-
-function getFunctionList(textArea: HTMLInputElement | HTMLTextAreaElement, textRef: Ref<string>): MenuItem[] {
- return MFM_TAGS.map(tag => ({
+ }, ...MFM_TAGS.map(tag => ({
text: tag,
icon: 'ti ti-icons',
- action: () => add(textArea, textRef, tag),
- }));
-}
-
-function add(textArea: HTMLInputElement | HTMLTextAreaElement, textRef: Ref<string>, type: string) {
- const caretStart: number = textArea.selectionStart as number;
- const caretEnd: number = textArea.selectionEnd as number;
-
- MFM_TAGS.forEach(tag => {
- if (type === tag) {
- if (caretStart === caretEnd) {
- // 単純にFunctionを追加
- const trimmedText = `${textRef.value.substring(0, caretStart)}$[${type} ]${textRef.value.substring(caretEnd)}`;
- textRef.value = trimmedText;
- } else {
- // 選択範囲を囲むようにFunctionを追加
- const trimmedText = `${textRef.value.substring(0, caretStart)}$[${type} ${textRef.value.substring(caretStart, caretEnd)}]${textRef.value.substring(caretEnd)}`;
- textRef.value = trimmedText;
- }
- }
- });
-
- const nextCaretStart: number = caretStart + 3 + type.length;
- const nextCaretEnd: number = caretEnd + 3 + type.length;
-
- // キャレットを戻す
- nextTick(() => {
- textArea.focus();
- textArea.setSelectionRange(nextCaretStart, nextCaretEnd);
+ action: () => {
+ onChosen(tag);
+ },
+ }))], anchorElement, {
+ onClosed: () => {
+ if (onClosed) onClosed();
+ },
});
}
+