pleroma-fe/src/components/draft/draft.vue

164 lines
3.9 KiB
Vue
Raw Normal View History

2023-03-10 12:10:39 -05:00
<template>
<article class="Draft">
<div
2023-03-10 12:39:08 -05:00
v-if="!editing"
class="status-content"
2023-03-10 12:39:08 -05:00
>
<div>
<i18n-t
v-if="draft.type === 'reply' || draft.type === 'edit'"
tag="span"
:keypath="draft.type === 'reply' ? 'drafts.replying' : 'drafts.editing'"
>
<template #statusLink>
<router-link
class="faint-link"
:to="{ name: 'conversation', params: { id: draft.refId } }"
>
{{ refStatus ? refStatus.external_url : $t('drafts.unavailable') }}
</router-link>
</template>
</i18n-t>
<StatusContent
v-if="draft.refId && refStatus"
class="status-content"
:status="refStatus"
:compact="true"
/>
</div>
2024-12-30 02:07:49 +02:00
<div class="status-preview">
2024-12-31 12:52:29 +02:00
<p v-if="draft.status">{{ draft.status }}</p>
<p v-else class="faint">{{ $t('drafts.empty') }}</p>
2024-12-30 02:07:49 +02:00
<gallery
v-if="draft.files?.length !== 0"
class="attachments media-body"
:compact="true"
:nsfw="nsfwClickthrough"
:attachments="draft.files"
:limit="1"
size="small"
@play="$emit('mediaplay', attachment.id)"
@pause="$emit('mediapause', attachment.id)"
/>
2024-12-31 12:52:29 +02:00
<div
v-if="draft.poll.options"
class="poll-indicator-container"
:title="$t('drafts.poll_tooltip')"
>
<div class="poll-indicator">
<FAIcon
icon="poll-h"
size="3x"
/>
</div>
</div>
2024-12-30 02:07:49 +02:00
</div>
</div>
2023-03-10 12:10:39 -05:00
<div v-if="editing">
2023-03-10 12:39:08 -05:00
<PostStatusForm
2023-03-10 19:24:01 -05:00
v-if="draft.type !== 'edit'"
:disable-draft="true"
2023-03-10 12:39:08 -05:00
v-bind="postStatusFormProps"
/>
2023-03-10 19:24:01 -05:00
<EditStatusForm
v-else
:disable-draft="true"
2023-03-10 19:24:01 -05:00
:params="postStatusFormProps"
/>
2023-03-10 12:10:39 -05:00
</div>
2023-03-10 12:39:08 -05:00
<teleport to="#modal">
<confirm-modal
v-if="showingConfirmDialog"
:title="$t('drafts.abandon_confirm_title')"
:confirm-text="$t('drafts.abandon_confirm_accept_button')"
:cancel-text="$t('drafts.abandon_confirm_cancel_button')"
@accepted="doAbandon"
@cancelled="hideConfirmDialog"
>
{{ $t('drafts.abandon_confirm') }}
</confirm-modal>
</teleport>
2024-12-27 17:10:17 +02:00
<div class="actions">
<button
class="btn button-default"
:aria-expanded="editing"
@click.prevent.stop="toggleEditing"
>
{{ editing ? $t('drafts.save') : $t('drafts.continue') }}
2024-12-27 17:10:17 +02:00
</button>
<button
class="btn button-default"
@click.prevent.stop="abandon"
>
{{ $t('drafts.abandon') }}
</button>
</div>
2023-03-10 12:10:39 -05:00
</article>
</template>
<script src="./draft.js"></script>
<style lang="scss">
.Draft {
2024-12-30 02:07:49 +02:00
position: relative;
.status-content {
padding: 0.5em;
margin: 0.5em 0;
}
2024-12-30 02:07:49 +02:00
.status-preview {
display: grid;
2024-12-31 12:52:29 +02:00
grid-template-columns: 1fr;
grid-auto-columns: 10em;
grid-auto-flow: column;
2024-12-30 02:07:49 +02:00
grid-gap: 0.5em;
2024-12-31 12:52:29 +02:00
align-items: start;
2024-12-30 02:07:49 +02:00
max-width: 100%;
p {
word-wrap: break-word;
white-space: normal;
overflow-x: hidden;
}
2024-12-31 12:52:29 +02:00
.poll-indicator-container {
border-radius: var(--roundness);
display: grid;
justify-items: center;
align-items: center;
align-self: start;
height: 0;
padding-bottom: 62.5%;
position: relative;
}
.poll-indicator {
box-sizing: border-box;
border: 1px solid var(--border);
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
display: grid;
justify-items: center;
align-items: center;
width: 100%;
height: 100%;
}
2024-12-30 02:07:49 +02:00
}
2023-03-10 12:39:08 -05:00
.actions {
display: flex;
flex-direction: row;
justify-content: space-evenly;
.btn {
flex: 1;
margin-left: 1em;
margin-right: 1em;
}
}
2023-03-10 12:10:39 -05:00
}
</style>