From 45fe0217f2372e9da456590ec208a7de5077ea05 Mon Sep 17 00:00:00 2001 From: RainLoop Team Date: Wed, 28 Jun 2017 19:25:53 +0300 Subject: [PATCH] Add "Automatically save draft" option --- dev/Settings/User/OpenPgp.js | 18 +++++++++++++++++- dev/Stores/User/Settings.js | 2 ++ dev/View/Popup/Compose.js | 10 +++++----- .../v/0.0.0/app/libraries/RainLoop/Actions.php | 3 +++ .../libraries/RainLoop/Config/Application.php | 1 + .../app/localization/webmail/_source.en.yml | 1 + .../templates/Views/User/SettingsOpenPGP.html | 11 +++++++++++ 7 files changed, 40 insertions(+), 6 deletions(-) diff --git a/dev/Settings/User/OpenPgp.js b/dev/Settings/User/OpenPgp.js index d37164d33..e834c022a 100644 --- a/dev/Settings/User/OpenPgp.js +++ b/dev/Settings/User/OpenPgp.js @@ -2,10 +2,14 @@ import _ from '_'; import ko from 'ko'; -import {delegateRunOnDestroy} from 'Common/Utils'; +import {delegateRunOnDestroy, boolToAjax} from 'Common/Utils'; +import {Magics} from 'Common/Enums'; import {bIsHttps} from 'Common/Globals'; import PgpStore from 'Stores/User/Pgp'; +import SettingsStore from 'Stores/User/Settings'; + +import Remote from 'Remote/User/Ajax'; import {getApp} from 'Helper/Apps/User'; @@ -20,6 +24,8 @@ class OpenPgpUserSettings this.openPgpKeyForDeletion = ko.observable(null).deleteAccessHelper(); + this.allowDraftAutosave = SettingsStore.allowDraftAutosave; + this.isHttps = bIsHttps; } @@ -66,6 +72,16 @@ class OpenPgpUserSettings } } } + + onBuild() { + _.delay(() => { + + this.allowDraftAutosave.subscribe( + Remote.saveSettingsHelper('AllowDraftAutosave', boolToAjax) + ); + + }, Magics.Time50ms); + } } export {OpenPgpUserSettings, OpenPgpUserSettings as default}; diff --git a/dev/Stores/User/Settings.js b/dev/Stores/User/Settings.js index cd968610c..aa2e0a908 100644 --- a/dev/Stores/User/Settings.js +++ b/dev/Stores/User/Settings.js @@ -30,6 +30,7 @@ class SettingsUserStore this.showImages = ko.observable(false); this.useCheckboxesInList = ko.observable(true); + this.allowDraftAutosave = ko.observable(true); this.useThreads = ko.observable(false); this.replySameFolder = ko.observable(false); @@ -61,6 +62,7 @@ class SettingsUserStore this.showImages(!!Settings.settingsGet('ShowImages')); this.useCheckboxesInList(!!Settings.settingsGet('UseCheckboxesInList')); + this.allowDraftAutosave(!!Settings.settingsGet('AllowDraftAutosave')); this.useThreads(!!Settings.settingsGet('UseThreads')); this.replySameFolder(!!Settings.settingsGet('ReplySameFolder')); diff --git a/dev/View/Popup/Compose.js b/dev/View/Popup/Compose.js index ee8193fe2..632e5ceea 100644 --- a/dev/View/Popup/Compose.js +++ b/dev/View/Popup/Compose.js @@ -314,8 +314,8 @@ class ComposePopupView extends AbstractViewNext this.saveMessageResponse = _.bind(this.saveMessageResponse, this); Events.sub('interval.2m', () => { - if (this.modalVisibility() && !FolderStore.draftFolderNotEnabled() && !this.isEmptyForm(false) && - !this.saving() && !this.sending() && !this.savedError()) + if (this.modalVisibility() && !FolderStore.draftFolderNotEnabled() && SettingsStore.allowDraftAutosave() && + !this.isEmptyForm(false) && !this.saving() && !this.sending() && !this.savedError()) { this.saveCommand(); } @@ -519,7 +519,7 @@ class ComposePopupView extends AbstractViewNext this.bSkipNextHide = true; if (this.modalVisibility() && !this.saving() && !this.sending() && - !FolderStore.draftFolderNotEnabled()) + !FolderStore.draftFolderNotEnabled() && SettingsStore.allowDraftAutosave()) { this.saveCommand(); } @@ -563,8 +563,8 @@ class ComposePopupView extends AbstractViewNext } autosaveFunction() { - if (this.modalVisibility() && !FolderStore.draftFolderNotEnabled() && !this.isEmptyForm(false) && - !this.saving() && !this.sending() && !this.savedError()) + if (this.modalVisibility() && !FolderStore.draftFolderNotEnabled() && SettingsStore.allowDraftAutosave() && + !this.isEmptyForm(false) && !this.saving() && !this.sending() && !this.savedError()) { this.saveCommand(); } diff --git a/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php b/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php index 62b4ab89a..b6aaa4ffc 100644 --- a/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php +++ b/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php @@ -1834,6 +1834,7 @@ NewThemeLink IncludeCss LoadingDescriptionEsc TemplatesLink LangLink IncludeBack $aResult['UseCheckboxesInList'] = (bool) $oConfig->Get('defaults', 'view_use_checkboxes', true); $aResult['AutoLogout'] = (int) $oConfig->Get('defaults', 'autologout', 30); $aResult['UseThreads'] = (bool) $oConfig->Get('defaults', 'mail_use_threads', false); + $aResult['AllowDraftAutosave'] = (bool) $oConfig->Get('defaults', 'allow_draft_autosave', true); $aResult['ReplySameFolder'] = (bool) $oConfig->Get('defaults', 'mail_reply_same_folder', false); $aResult['ContactsAutosave'] = (bool) $oConfig->Get('defaults', 'contacts_autosave', true); $aResult['EnableTwoFactor'] = false; @@ -1876,6 +1877,7 @@ NewThemeLink IncludeCss LoadingDescriptionEsc TemplatesLink LangLink IncludeBack $aResult['SoundNotification'] = (bool) $oSettings->GetConf('SoundNotification', $aResult['SoundNotification']); $aResult['DesktopNotifications'] = (bool) $oSettings->GetConf('DesktopNotifications', $aResult['DesktopNotifications']); $aResult['UseCheckboxesInList'] = (bool) $oSettings->GetConf('UseCheckboxesInList', $aResult['UseCheckboxesInList']); + $aResult['AllowDraftAutosave'] = (bool) $oSettings->GetConf('AllowDraftAutosave', $aResult['AllowDraftAutosave']); $aResult['AutoLogout'] = (int) $oSettings->GetConf('AutoLogout', $aResult['AutoLogout']); $aResult['Layout'] = (int) $oSettings->GetConf('Layout', $aResult['Layout']); @@ -5016,6 +5018,7 @@ NewThemeLink IncludeCss LoadingDescriptionEsc TemplatesLink LangLink IncludeBack $this->setSettingsFromParams($oSettings, 'DesktopNotifications', 'bool'); $this->setSettingsFromParams($oSettings, 'SoundNotification', 'bool'); $this->setSettingsFromParams($oSettings, 'UseCheckboxesInList', 'bool'); + $this->setSettingsFromParams($oSettings, 'AllowDraftAutosave', 'bool'); $this->setSettingsFromParams($oSettings, 'AutoLogout', 'int'); $this->setSettingsFromParams($oSettings, 'EnableTwoFactor', 'bool'); diff --git a/rainloop/v/0.0.0/app/libraries/RainLoop/Config/Application.php b/rainloop/v/0.0.0/app/libraries/RainLoop/Config/Application.php index 5777a8270..736eec2f2 100644 --- a/rainloop/v/0.0.0/app/libraries/RainLoop/Config/Application.php +++ b/rainloop/v/0.0.0/app/libraries/RainLoop/Config/Application.php @@ -281,6 +281,7 @@ Values: 'show_images' => array(false), 'contacts_autosave' => array(true), 'mail_use_threads' => array(false), + 'allow_draft_autosave' => array(true), 'mail_reply_same_folder' => array(false) ), diff --git a/rainloop/v/0.0.0/app/localization/webmail/_source.en.yml b/rainloop/v/0.0.0/app/localization/webmail/_source.en.yml index ca827eaef..962ab8b24 100644 --- a/rainloop/v/0.0.0/app/localization/webmail/_source.en.yml +++ b/rainloop/v/0.0.0/app/localization/webmail/_source.en.yml @@ -581,6 +581,7 @@ en: TITLE_PUBLIC: "Public" DELETING_ASK: "Are you sure?" GENERATE_ONLY_HTTPS: "HTTPS only" + LABEL_ALLOW_DRAFT_AUTOSAVE: "Automatically save draft" SHORTCUTS_HELP: LEGEND_SHORTCUTS_HELP: "Keyboard shortcuts help" TAB_MAILBOX: "Mailbox" diff --git a/rainloop/v/0.0.0/app/templates/Views/User/SettingsOpenPGP.html b/rainloop/v/0.0.0/app/templates/Views/User/SettingsOpenPGP.html index 71a71b3b8..9d6fb1957 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/SettingsOpenPGP.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/SettingsOpenPGP.html @@ -19,6 +19,17 @@

+
+
+
+
+