feat: 絵文字のポップアップメニューに編集を追加 (#15004)
* Mod: 絵文字のポップアップメニューに編集を追加 * fix: code styleの修正 * fix: code styleの修正 * fix
This commit is contained in:
		@@ -25,17 +25,18 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
				
			|||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script lang="ts" setup>
 | 
					<script lang="ts" setup>
 | 
				
			||||||
import { computed, inject, ref } from 'vue';
 | 
					import { computed, defineAsyncComponent, inject, ref } from 'vue';
 | 
				
			||||||
 | 
					import type { MenuItem } from '@/types/menu.js';
 | 
				
			||||||
import { getProxiedImageUrl, getStaticImageUrl } from '@/scripts/media-proxy.js';
 | 
					import { getProxiedImageUrl, getStaticImageUrl } from '@/scripts/media-proxy.js';
 | 
				
			||||||
import { defaultStore } from '@/store.js';
 | 
					import { defaultStore } from '@/store.js';
 | 
				
			||||||
import { customEmojisMap } from '@/custom-emojis.js';
 | 
					import { customEmojisMap } from '@/custom-emojis.js';
 | 
				
			||||||
import * as os from '@/os.js';
 | 
					import * as os from '@/os.js';
 | 
				
			||||||
import { misskeyApiGet } from '@/scripts/misskey-api.js';
 | 
					import { misskeyApi, misskeyApiGet } from '@/scripts/misskey-api.js';
 | 
				
			||||||
import { copyToClipboard } from '@/scripts/copy-to-clipboard.js';
 | 
					import { copyToClipboard } from '@/scripts/copy-to-clipboard.js';
 | 
				
			||||||
import * as sound from '@/scripts/sound.js';
 | 
					import * as sound from '@/scripts/sound.js';
 | 
				
			||||||
import { i18n } from '@/i18n.js';
 | 
					import { i18n } from '@/i18n.js';
 | 
				
			||||||
import MkCustomEmojiDetailedDialog from '@/components/MkCustomEmojiDetailedDialog.vue';
 | 
					import MkCustomEmojiDetailedDialog from '@/components/MkCustomEmojiDetailedDialog.vue';
 | 
				
			||||||
import type { MenuItem } from '@/types/menu.js';
 | 
					import { $i } from '@/account.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const props = defineProps<{
 | 
					const props = defineProps<{
 | 
				
			||||||
	name: string;
 | 
						name: string;
 | 
				
			||||||
@@ -125,9 +126,31 @@ function onClick(ev: MouseEvent) {
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if ($i?.isModerator ?? $i?.isAdmin) {
 | 
				
			||||||
 | 
								menuItems.push({
 | 
				
			||||||
 | 
									text: i18n.ts.edit,
 | 
				
			||||||
 | 
									icon: 'ti ti-pencil',
 | 
				
			||||||
 | 
									action: async () => {
 | 
				
			||||||
 | 
										await edit(props.name);
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		os.popupMenu(menuItems, ev.currentTarget ?? ev.target);
 | 
							os.popupMenu(menuItems, ev.currentTarget ?? ev.target);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async function edit(name: string) {
 | 
				
			||||||
 | 
						const emoji = await misskeyApi('emoji', {
 | 
				
			||||||
 | 
							name: name,
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
						const { dispose } = os.popup(defineAsyncComponent(() => import('@/pages/emoji-edit-dialog.vue')), {
 | 
				
			||||||
 | 
							emoji: emoji,
 | 
				
			||||||
 | 
						}, {
 | 
				
			||||||
 | 
							closed: () => dispose(),
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<style lang="scss" module>
 | 
					<style lang="scss" module>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,18 +15,22 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
<script lang="ts" setup>
 | 
					<script lang="ts" setup>
 | 
				
			||||||
import * as Misskey from 'misskey-js';
 | 
					import * as Misskey from 'misskey-js';
 | 
				
			||||||
 | 
					import { defineAsyncComponent } from 'vue';
 | 
				
			||||||
 | 
					import type { MenuItem } from '@/types/menu.js';
 | 
				
			||||||
import * as os from '@/os.js';
 | 
					import * as os from '@/os.js';
 | 
				
			||||||
import { misskeyApiGet } from '@/scripts/misskey-api.js';
 | 
					import { misskeyApiGet } from '@/scripts/misskey-api.js';
 | 
				
			||||||
import { copyToClipboard } from '@/scripts/copy-to-clipboard.js';
 | 
					import { copyToClipboard } from '@/scripts/copy-to-clipboard.js';
 | 
				
			||||||
import { i18n } from '@/i18n.js';
 | 
					import { i18n } from '@/i18n.js';
 | 
				
			||||||
import MkCustomEmojiDetailedDialog from '@/components/MkCustomEmojiDetailedDialog.vue';
 | 
					import MkCustomEmojiDetailedDialog from '@/components/MkCustomEmojiDetailedDialog.vue';
 | 
				
			||||||
 | 
					import { $i } from '@/account.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const props = defineProps<{
 | 
					const props = defineProps<{
 | 
				
			||||||
  emoji: Misskey.entities.EmojiSimple;
 | 
					  emoji: Misskey.entities.EmojiSimple;
 | 
				
			||||||
}>();
 | 
					}>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function menu(ev) {
 | 
					function menu(ev) {
 | 
				
			||||||
	os.popupMenu([{
 | 
						const menuItems: MenuItem[] = [];
 | 
				
			||||||
 | 
						menuItems.push({
 | 
				
			||||||
		type: 'label',
 | 
							type: 'label',
 | 
				
			||||||
		text: ':' + props.emoji.name + ':',
 | 
							text: ':' + props.emoji.name + ':',
 | 
				
			||||||
	}, {
 | 
						}, {
 | 
				
			||||||
@@ -48,8 +52,28 @@ function menu(ev) {
 | 
				
			|||||||
				closed: () => dispose(),
 | 
									closed: () => dispose(),
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}], ev.currentTarget ?? ev.target);
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ($i?.isModerator ?? $i?.isAdmin) {
 | 
				
			||||||
 | 
							menuItems.push({
 | 
				
			||||||
 | 
								text: i18n.ts.edit,
 | 
				
			||||||
 | 
								icon: 'ti ti-pencil',
 | 
				
			||||||
 | 
								action: () => {
 | 
				
			||||||
 | 
									edit(props.emoji);
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						os.popupMenu(menuItems, ev.currentTarget ?? ev.target);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const edit = async (emoji) => {
 | 
				
			||||||
 | 
						const { dispose } = os.popup(defineAsyncComponent(() => import('@/pages/emoji-edit-dialog.vue')), {
 | 
				
			||||||
 | 
							emoji: emoji,
 | 
				
			||||||
 | 
						}, {
 | 
				
			||||||
 | 
							closed: () => dispose(),
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<style lang="scss" module>
 | 
					<style lang="scss" module>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user