diff options
| author | おさむのひと <46447427+samunohito@users.noreply.github.com> | 2023-12-03 17:25:34 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-03 17:25:34 +0900 |
| commit | 5e1d87240426e08858b7fc5ccad5ca235bd3c6e7 (patch) | |
| tree | 4720b482d224941eb50426514ad43c24a8d99bb9 /packages/frontend/src/scripts | |
| parent | fix(backend): reject malformed timestamp (#12554) (diff) | |
| download | sharkey-5e1d87240426e08858b7fc5ccad5ca235bd3c6e7.tar.gz sharkey-5e1d87240426e08858b7fc5ccad5ca235bd3c6e7.tar.bz2 sharkey-5e1d87240426e08858b7fc5ccad5ca235bd3c6e7.zip | |
入力フォームでもリアクション選択時に使用するピッカーを使うようにしたい (#12337)
* 入力フォームでもリアクション選択時に使用するピッカーを使うようにしたい
* erase console.log
* fix CHANGELOG.md
* reaction-picker.ts を戻し、今回の対応を入れた emoji-picker.ts を新たに作成
* fix CHANGELOG.md
* tweak
---------
Co-authored-by: osamu <46447427+sam-osamu@users.noreply.github.com>
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
Diffstat (limited to 'packages/frontend/src/scripts')
| -rw-r--r-- | packages/frontend/src/scripts/emoji-picker.ts | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/packages/frontend/src/scripts/emoji-picker.ts b/packages/frontend/src/scripts/emoji-picker.ts new file mode 100644 index 0000000000..d6d6bf1245 --- /dev/null +++ b/packages/frontend/src/scripts/emoji-picker.ts @@ -0,0 +1,57 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { defineAsyncComponent, Ref, ref } from 'vue'; +import { popup } from '@/os.js'; + +/** + * 絵文字ピッカーを表示する。 + * 類似の機能として{@link ReactionPicker}が存在しているが、この機能とは動きが異なる。 + * 投稿フォームなどで絵文字を選択する時など、絵文字ピックアップ後でもダイアログが消えずに残り、 + * 一度表示したダイアログを連続で使用できることが望ましいシーンでの利用が想定される。 + */ +class EmojiPicker { + private src: Ref<HTMLElement | null> = ref(null); + private manualShowing = ref(false); + private onChosen?: (emoji: string) => void; + private onClosed?: () => void; + + constructor() { + // nop + } + + public async init() { + await popup(defineAsyncComponent(() => import('@/components/MkEmojiPickerDialog.vue')), { + src: this.src, + asReactionPicker: false, + manualShowing: this.manualShowing, + choseAndClose: false, + }, { + done: emoji => { + if (this.onChosen) this.onChosen(emoji); + }, + close: () => { + this.manualShowing.value = false; + }, + closed: () => { + this.src.value = null; + if (this.onClosed) this.onClosed(); + }, + }); + } + + public show( + src: HTMLElement, + onChosen: EmojiPicker['onChosen'], + onClosed: EmojiPicker['onClosed'], + ) { + this.src.value = src; + this.manualShowing.value = true; + this.onChosen = onChosen; + this.onClosed = onClosed; + } +} + +export const emojiPicker = new EmojiPicker(); |