Compare commits
7 commits
72c980dbc3
...
e498c51006
Author | SHA1 | Date | |
---|---|---|---|
|
e498c51006 | ||
|
5c6d29193e | ||
|
acbb53d6a4 | ||
|
f653ac4a62 | ||
|
a84424408d | ||
|
843f9ff519 | ||
|
caa2fd44ff |
9 changed files with 103 additions and 14 deletions
|
@ -402,6 +402,10 @@ nav {
|
||||||
color: var(--text);
|
color: var(--text);
|
||||||
font-size: 100%;
|
font-size: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.disabled {
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-item,
|
.menu-item,
|
||||||
|
|
|
@ -71,6 +71,7 @@
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog-modal-footer {
|
.dialog-modal-footer {
|
||||||
|
@ -114,7 +115,7 @@
|
||||||
|
|
||||||
button {
|
button {
|
||||||
grid-column: 1;
|
grid-column: 1;
|
||||||
height: 2em;
|
height: 3em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,15 @@ import StatusContent from 'src/components/status_content/status_content.vue'
|
||||||
import Gallery from 'src/components/gallery/gallery.vue'
|
import Gallery from 'src/components/gallery/gallery.vue'
|
||||||
import { cloneDeep } from 'lodash'
|
import { cloneDeep } from 'lodash'
|
||||||
|
|
||||||
|
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
|
import {
|
||||||
|
faPollH
|
||||||
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
|
|
||||||
|
library.add(
|
||||||
|
faPollH
|
||||||
|
)
|
||||||
|
|
||||||
const Draft = {
|
const Draft = {
|
||||||
components: {
|
components: {
|
||||||
PostStatusForm,
|
PostStatusForm,
|
||||||
|
|
|
@ -27,7 +27,15 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="status-preview">
|
<div class="status-preview">
|
||||||
<p>{{ draft.status }}</p>
|
<span class="status_content">
|
||||||
|
<p v-if="draft.spoilerText">
|
||||||
|
<i>
|
||||||
|
{{ draft.spoilerText }}:
|
||||||
|
</i>
|
||||||
|
</p>
|
||||||
|
<p v-if="draft.status">{{ draft.status }}</p>
|
||||||
|
<p v-else class="faint">{{ $t('drafts.empty') }}</p>
|
||||||
|
</span>
|
||||||
<gallery
|
<gallery
|
||||||
v-if="draft.files?.length !== 0"
|
v-if="draft.files?.length !== 0"
|
||||||
class="attachments media-body"
|
class="attachments media-body"
|
||||||
|
@ -39,6 +47,18 @@
|
||||||
@play="$emit('mediaplay', attachment.id)"
|
@play="$emit('mediaplay', attachment.id)"
|
||||||
@pause="$emit('mediapause', attachment.id)"
|
@pause="$emit('mediapause', attachment.id)"
|
||||||
/>
|
/>
|
||||||
|
<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>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="editing">
|
<div v-if="editing">
|
||||||
|
@ -88,12 +108,6 @@
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.Draft {
|
.Draft {
|
||||||
position: relative;
|
position: relative;
|
||||||
line-height: 1.1;
|
|
||||||
font-size: initial;
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
|
|
||||||
.status-content {
|
.status-content {
|
||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
|
@ -102,8 +116,11 @@
|
||||||
|
|
||||||
.status-preview {
|
.status-preview {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr 10em;
|
grid-template-columns: 1fr;
|
||||||
|
grid-auto-columns: 10em;
|
||||||
|
grid-auto-flow: column;
|
||||||
grid-gap: 0.5em;
|
grid-gap: 0.5em;
|
||||||
|
align-items: start;
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
|
|
||||||
p {
|
p {
|
||||||
|
@ -111,6 +128,32 @@
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.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%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.actions {
|
.actions {
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
<List
|
<List
|
||||||
v-else
|
v-else
|
||||||
:items="drafts"
|
:items="drafts"
|
||||||
|
:non-interactive="true"
|
||||||
>
|
>
|
||||||
<template #item="{ item: draft }">
|
<template #item="{ item: draft }">
|
||||||
<Draft
|
<Draft
|
||||||
|
|
|
@ -11,8 +11,9 @@ export default {
|
||||||
'Avatar'
|
'Avatar'
|
||||||
],
|
],
|
||||||
states: {
|
states: {
|
||||||
hover: ':hover',
|
hover: ':hover:not(.disabled)',
|
||||||
active: '.-active'
|
active: '.-active',
|
||||||
|
disabled: '.disabled'
|
||||||
},
|
},
|
||||||
defaultRules: [
|
defaultRules: [
|
||||||
{
|
{
|
||||||
|
@ -85,6 +86,28 @@ export default {
|
||||||
textColor: '--link',
|
textColor: '--link',
|
||||||
textAuto: 'no-preserve'
|
textAuto: 'no-preserve'
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
component: 'Text',
|
||||||
|
parent: {
|
||||||
|
component: 'MenuItem',
|
||||||
|
state: ['disabled']
|
||||||
|
},
|
||||||
|
directives: {
|
||||||
|
textOpacity: 0.25,
|
||||||
|
textOpacityMode: 'blend'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
component: 'Icon',
|
||||||
|
parent: {
|
||||||
|
component: 'MenuItem',
|
||||||
|
state: ['disabled']
|
||||||
|
},
|
||||||
|
directives: {
|
||||||
|
textOpacity: 0.25,
|
||||||
|
textOpacityMode: 'blend'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -352,6 +352,12 @@ const PostStatusForm = {
|
||||||
return this.$t('post_status.auto_save_nothing_new')
|
return this.$t('post_status.auto_save_nothing_new')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
safeToSaveDraft () {
|
||||||
|
return this.newStatus.status ||
|
||||||
|
this.newStatus.spoilerText ||
|
||||||
|
this.newStatus.files?.length ||
|
||||||
|
this.newStatus.hasPoll
|
||||||
|
},
|
||||||
...mapGetters(['mergedConfig']),
|
...mapGetters(['mergedConfig']),
|
||||||
...mapState({
|
...mapState({
|
||||||
mobileLayout: state => state.interface.mobileLayout
|
mobileLayout: state => state.interface.mobileLayout
|
||||||
|
@ -747,9 +753,7 @@ const PostStatusForm = {
|
||||||
saveDraft () {
|
saveDraft () {
|
||||||
if (!this.disableDraft &&
|
if (!this.disableDraft &&
|
||||||
!this.saveInhibited) {
|
!this.saveInhibited) {
|
||||||
if (this.newStatus.status ||
|
if (this.safeToSaveDraft) {
|
||||||
this.newStatus.files?.length ||
|
|
||||||
this.newStatus.hasPoll) {
|
|
||||||
return this.$store.dispatch('addOrSaveDraft', { draft: this.newStatus })
|
return this.$store.dispatch('addOrSaveDraft', { draft: this.newStatus })
|
||||||
.then(id => {
|
.then(id => {
|
||||||
if (this.newStatus.id !== id) {
|
if (this.newStatus.id !== id) {
|
||||||
|
|
|
@ -339,6 +339,8 @@
|
||||||
v-if="!disableDraft"
|
v-if="!disableDraft"
|
||||||
class="menu-item dropdown-item dropdown-item-icon"
|
class="menu-item dropdown-item dropdown-item-icon"
|
||||||
role="menu"
|
role="menu"
|
||||||
|
:disabled="!safeToSaveDraft"
|
||||||
|
:class="{ disabled: !safeToSaveDraft }"
|
||||||
@click.prevent="saveDraft"
|
@click.prevent="saveDraft"
|
||||||
@click="close"
|
@click="close"
|
||||||
>
|
>
|
||||||
|
|
|
@ -1514,6 +1514,8 @@
|
||||||
"drafts": {
|
"drafts": {
|
||||||
"drafts": "Drafts",
|
"drafts": "Drafts",
|
||||||
"no_drafts": "You have no drafts",
|
"no_drafts": "You have no drafts",
|
||||||
|
"empty": "(No content)",
|
||||||
|
"poll_tooltip": "Draft contains a poll",
|
||||||
"continue": "Continue composing",
|
"continue": "Continue composing",
|
||||||
"save": "Save without posting",
|
"save": "Save without posting",
|
||||||
"abandon": "Abandon draft",
|
"abandon": "Abandon draft",
|
||||||
|
|
Loading…
Add table
Reference in a new issue