summaryrefslogtreecommitdiff
path: root/packages/frontend/src/components/MkPostFormAttaches.vue
diff options
context:
space:
mode:
Diffstat (limited to 'packages/frontend/src/components/MkPostFormAttaches.vue')
-rw-r--r--packages/frontend/src/components/MkPostFormAttaches.vue35
1 files changed, 20 insertions, 15 deletions
diff --git a/packages/frontend/src/components/MkPostFormAttaches.vue b/packages/frontend/src/components/MkPostFormAttaches.vue
index f429db94df..58adb16954 100644
--- a/packages/frontend/src/components/MkPostFormAttaches.vue
+++ b/packages/frontend/src/components/MkPostFormAttaches.vue
@@ -5,23 +5,30 @@ SPDX-License-Identifier: AGPL-3.0-only
<template>
<div v-show="props.modelValue.length != 0" :class="$style.root">
- <Sortable :modelValue="props.modelValue" :class="$style.files" itemKey="id" :animation="150" :delay="100" :delayOnTouchOnly="true" @update:modelValue="v => emit('update:modelValue', v)">
- <template #item="{ element }">
+ <MkDraggable
+ :modelValue="props.modelValue"
+ :class="$style.files"
+ direction="horizontal"
+ withGaps
+ @update:modelValue="v => emit('update:modelValue', v)"
+ >
+ <template #default="{ item }">
<div
:class="$style.file"
role="button"
tabindex="0"
- @click="showFileMenu(element, $event)"
- @keydown.space.enter="showFileMenu(element, $event)"
- @contextmenu.prevent="showFileMenu(element, $event)"
+ @click="showFileMenu(item, $event)"
+ @keydown.space.enter="showFileMenu(item, $event)"
+ @contextmenu.prevent.stop="showFileMenu(item, $event)"
>
- <MkDriveFileThumbnail :data-id="element.id" :class="$style.thumbnail" :file="element" fit="cover"/>
- <div v-if="element.isSensitive" :class="$style.sensitive">
+ <!-- pointer-eventsをnoneにしておかないとiOSなどでドラッグしたときに画像の方に判定が持ってかれる -->
+ <MkDriveFileThumbnail style="pointer-events: none;" :data-id="item.id" :class="$style.thumbnail" :file="item" fit="cover"/>
+ <div v-if="item.isSensitive" :class="$style.sensitive" style="pointer-events: none;">
<i class="ti ti-eye-exclamation" style="margin: auto;"></i>
</div>
</div>
</template>
- </Sortable>
+ </MkDraggable>
<p
:class="[$style.remain, {
[$style.exceeded]: props.modelValue.length > 16,
@@ -33,11 +40,12 @@ SPDX-License-Identifier: AGPL-3.0-only
</template>
<script lang="ts" setup>
-import { defineAsyncComponent, inject } from 'vue';
+import { inject } from 'vue';
import * as Misskey from 'misskey-js';
import type { MenuItem } from '@/types/menu';
import { copyToClipboard } from '@/utility/copy-to-clipboard';
import MkDriveFileThumbnail from '@/components/MkDriveFileThumbnail.vue';
+import MkDraggable from '@/components/MkDraggable.vue';
import * as os from '@/os.js';
import { misskeyApi } from '@/utility/misskey-api.js';
import { i18n } from '@/i18n.js';
@@ -45,8 +53,6 @@ import { prefer } from '@/preferences.js';
import { DI } from '@/di.js';
import { globalEvents } from '@/events.js';
-const Sortable = defineAsyncComponent(() => import('vuedraggable').then(x => x.default));
-
const props = defineProps<{
modelValue: Misskey.entities.DriveFile[];
detachMediaFn?: (id: string) => void;
@@ -91,7 +97,7 @@ async function detachAndDeleteMedia(file: Misskey.entities.DriveFile) {
globalEvents.emit('driveFilesDeleted', [file]);
}
-function toggleSensitive(file) {
+function toggleSensitive(file: Misskey.entities.DriveFile) {
if (mock) {
emit('changeSensitive', file, !file.isSensitive);
return;
@@ -105,7 +111,7 @@ function toggleSensitive(file) {
});
}
-async function rename(file) {
+async function rename(file: Misskey.entities.DriveFile) {
if (mock) return;
const { canceled, result } = await os.inputText({
@@ -143,7 +149,7 @@ async function describe(file: Misskey.entities.DriveFile) {
});
}
-function showFileMenu(file: Misskey.entities.DriveFile, ev: MouseEvent | KeyboardEvent): void {
+function showFileMenu(file: Misskey.entities.DriveFile, ev: PointerEvent | KeyboardEvent): void {
if (menuShowing) return;
const isImage = file.type.startsWith('image/');
@@ -221,7 +227,6 @@ function showFileMenu(file: Misskey.entities.DriveFile, ev: MouseEvent | Keyboar
position: relative;
width: 64px;
height: 64px;
- margin-right: 4px;
border-radius: 4px;
overflow: hidden;
cursor: move;