logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe git clone https://anongit.hacktivis.me/git/pleroma-fe.git/
commit: 86f6fbeb46546e81954606c8e9eb6e6ca83bcd78
parent 8a58de5c9fd7b275df2c79eafa8260a9e1fb706e
Author: tusooa <tusooa@kazv.moe>
Date:   Thu,  6 Apr 2023 15:08:35 -0400

Give the option to auto save drafts

Diffstat:

Msrc/components/post_status_form/post_status_form.js29+++++++++++++++++++++++------
Msrc/components/post_status_form/post_status_form.vue16++++++++++++++++
Msrc/components/settings_modal/tabs/general_tab.vue7+++++++
Msrc/i18n/en.json7++++++-
Msrc/modules/config.js3++-
Msrc/modules/instance.js1+
6 files changed, 55 insertions(+), 8 deletions(-)

diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js @@ -324,12 +324,24 @@ const PostStatusForm = { return false }, - // debouncedSaveDraft () { - // return debounce(this.saveDraft, 3000) - // }, + debouncedMaybeAutoSaveDraft () { + return debounce(this.maybeAutoSaveDraft, 3000) + }, pollFormVisible () { return this.newStatus.hasPoll }, + shouldAutoSaveDraft () { + return this.$store.getters.mergedConfig.autoSaveDraft + }, + autoSaveState () { + if (this.savable) { + return this.$t('post_status.auto_save_saving') + } else if (this.newStatus.id) { + return this.$t('post_status.auto_save_saved') + } else { + return this.$t('post_status.auto_save_nothing_new') + } + }, ...mapGetters(['mergedConfig']), ...mapState({ mobileLayout: state => state.interface.mobileLayout @@ -344,13 +356,13 @@ const PostStatusForm = { } }, beforeUnmount () { - // this.saveDraft() + this.maybeAutoSaveDraft() }, methods: { statusChanged () { this.autoPreview() this.updateIdempotencyKey() - // this.debouncedSaveDraft() + this.debouncedMaybeAutoSaveDraft() this.savable = true this.saveInhibited = false }, @@ -722,12 +734,17 @@ const PostStatusForm = { .then(id => { if (this.newStatus.id !== id) { this.newStatus.id = id - this.savable = false } + this.savable = false }) } return Promise.resolve() }, + maybeAutoSaveDraft () { + if (this.shouldAutoSaveDraft) { + this.saveDraft() + } + }, abandonDraft () { return this.$store.dispatch('abandonDraft', { id: this.newStatus.id }) }, diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue @@ -297,6 +297,18 @@ <FAIcon icon="poll-h" /> </button> </div> + <span + v-if="shouldAutoSaveDraft" + class="auto-save-status" + > + {{ autoSaveState }} + </span> + <button + v-else + class="btn button-default" + > + {{ $t('post_status.save_to_drafts_button') }} + </button> <button v-if="posting" disabled @@ -612,5 +624,9 @@ border-radius: var(--roundness); border: 2px dashed var(--text); } + + .auto-save-status { + align-self: center; + } } </style> diff --git a/src/components/settings_modal/tabs/general_tab.vue b/src/components/settings_modal/tabs/general_tab.vue @@ -454,6 +454,13 @@ </BooleanSetting> </li> <li> + <BooleanSetting + path="autoSaveDraft" + > + {{ $t('settings.auto_save_draft') }} + </BooleanSetting> + </li> + <li> <ChoiceSetting id="unsavedPostAction" path="unsavedPostAction" diff --git a/src/i18n/en.json b/src/i18n/en.json @@ -313,7 +313,11 @@ "close_confirm": "What do you want to do with your current writing?", "close_confirm_save_button": "Save", "close_confirm_discard_button": "Discard", - "close_confirm_continue_composing_button": "Continue composing" + "close_confirm_continue_composing_button": "Continue composing", + "auto_save_nothing_new": "Nothing new to save.", + "auto_save_saved": "Saved.", + "auto_save_saving": "Saving...", + "save_to_drafts_button": "Save to drafts" }, "registration": { "bio_optional": "Bio (optional)", @@ -514,6 +518,7 @@ "unsaved_post_action_save": "Save it to drafts", "unsaved_post_action_discard": "Discard it", "unsaved_post_action_confirm": "Ask every time", + "auto_save_draft": "Save drafts as you compose", "emoji_reactions_on_timeline": "Show emoji reactions on timeline", "emoji_reactions_scale": "Reactions scale factor", "export_theme": "Save preset", diff --git a/src/modules/config.js b/src/modules/config.js @@ -182,7 +182,8 @@ export const defaultState = { closingDrawerMarksAsSeen: undefined, // instance default unseenAtTop: undefined, // instance default ignoreInactionableSeen: undefined, // instance default - unsavedPostAction: undefined // instance default + unsavedPostAction: undefined, // instance default + autoSaveDraft: undefined // instance default } // caching the instance default properties diff --git a/src/modules/instance.js b/src/modules/instance.js @@ -120,6 +120,7 @@ const defaultState = { unseenAtTop: false, ignoreInactionableSeen: false, unsavedPostAction: 'confirm', + autoSaveDraft: false, // Nasty stuff customEmoji: [],