elk/components/publish/PublishAttachment.vue

77 lines
2.4 KiB
Vue
Raw Permalink Normal View History

2022-11-23 17:17:54 +00:00
<script setup lang="ts">
2023-01-08 06:21:09 +00:00
import type { mastodon } from 'masto'
2022-11-23 17:17:54 +00:00
2022-12-14 23:30:54 +00:00
const props = withDefaults(defineProps<{
2023-01-08 06:21:09 +00:00
attachment: mastodon.v1.MediaAttachment
2022-11-23 17:17:54 +00:00
alt?: string
removable?: boolean
dialogLabelledBy?: string
2022-11-23 17:17:54 +00:00
}>(), {
removable: true,
})
const emit = defineEmits<{
2022-11-23 17:17:54 +00:00
(evt: 'remove'): void
2022-12-14 23:30:54 +00:00
(evt: 'setDescription', description: string): void
2022-11-23 17:17:54 +00:00
}>()
2022-12-14 23:30:54 +00:00
// from https://github.com/mastodon/mastodon/blob/dfa984/app/models/media_attachment.rb#L40
const maxDescriptionLength = 1500
2022-12-14 23:30:54 +00:00
const isEditDialogOpen = ref(false)
2022-12-14 23:40:39 +00:00
const description = ref(props.attachment.description ?? '')
function toggleApply() {
isEditDialogOpen.value = false
emit('setDescription', unref(description))
}
2022-11-23 17:17:54 +00:00
</script>
<template>
<div relative group>
2023-02-15 10:34:23 +00:00
<StatusAttachment :attachment="attachment" w-full is-preview />
2022-11-24 04:05:13 +00:00
<div absolute right-2 top-2>
<div
v-if="removable"
:aria-label="$t('attachment.remove_label')"
class="bg-black/75 hover:bg-red/75"
text-white px2 py2 rounded-full cursor-pointer
2022-11-24 04:05:13 +00:00
@click="$emit('remove')"
>
<div i-ri:close-line text-3 text-6 md:text-3 />
2022-11-24 04:05:13 +00:00
</div>
2022-11-23 17:17:54 +00:00
</div>
2022-12-14 23:30:54 +00:00
<div absolute right-2 bottom-2>
<button class="bg-black/75" text-white px2 py1 rounded-2 @click="isEditDialogOpen = true">
{{ $t('action.edit') }}
2022-12-14 23:30:54 +00:00
</button>
</div>
<ModalDialog
v-model="isEditDialogOpen"
:dialog-labelled-by="dialogLabelledBy"
py-6
px-6 max-w-300
>
<div flex flex-col-reverse gap-5 md:flex-row>
2022-12-14 23:30:54 +00:00
<div flex flex-col gap-2 justify-between>
<h1 id="edit-attachment" font-bold>
{{ $t('attachment.edit_title') }}
2022-12-14 23:30:54 +00:00
</h1>
<div flex flex-col gap-2>
<textarea v-model="description" p-3 h-50 bg-base rounded-2 border-strong border-1 md:w-100 />
<div flex flex-row-reverse>
<PublishCharacterCounter :length="description.length" :max="maxDescriptionLength" />
</div>
<button btn-outline :disabled="description.length > maxDescriptionLength" @click="toggleApply">
{{ $t('action.apply') }}
2022-12-14 23:30:54 +00:00
</button>
</div>
<button btn-outline @click="isEditDialogOpen = false">
{{ $t('action.close') }}
2022-12-14 23:30:54 +00:00
</button>
</div>
2023-02-15 10:34:23 +00:00
<StatusAttachment :attachment="attachment" w-full is-preview />
2022-12-14 23:30:54 +00:00
</div>
</ModalDialog>
2022-11-23 17:17:54 +00:00
</div>
</template>