logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe
commit: 91272dc5558e1326dac872f927dc8da7f9109cd0
parent: f1a23f2b6edb0858890c82cf42c8b6d835102d56
Author: Henry <spam@hjkos.com>
Date:   Mon, 26 Nov 2018 01:50:54 +0000

Merge branch 'feature/scope_preferences' into 'develop'

Make visibility copying and subject copying configurable

Closes #135

See merge request pleroma/pleroma-fe!353

Diffstat:

Msrc/boot/after_store.js4++++
Msrc/components/post_status_form/post_status_form.js8++++++--
Msrc/components/settings/settings.js12++++++++++++
Msrc/components/settings/settings.vue35+++++++++++++++++++++++++++++++++++
Msrc/components/status/status.js10++++++++--
Msrc/components/status/status.vue2+-
Msrc/i18n/en.json7+++++++
Msrc/i18n/fr.json1+
Msrc/modules/config.js6++++--
Msrc/modules/instance.js2++
Mstatic/config.json2++
11 files changed, 82 insertions(+), 7 deletions(-)

diff --git a/src/boot/after_store.js b/src/boot/after_store.js @@ -56,6 +56,8 @@ const afterStoreSetup = ({store, i18n}) => { var formattingOptionsEnabled = (config.formattingOptionsEnabled) var collapseMessageWithSubject = (config.collapseMessageWithSubject) var loginMethod = (config.loginMethod) + var scopeCopy = (config.scopeCopy) + var subjectLineBehavior = (config.subjectLineBehavior) store.dispatch('setInstanceOption', { name: 'theme', value: theme }) store.dispatch('setInstanceOption', { name: 'background', value: background }) @@ -71,6 +73,8 @@ const afterStoreSetup = ({store, i18n}) => { store.dispatch('setInstanceOption', { name: 'formattingOptionsEnabled', value: formattingOptionsEnabled }) store.dispatch('setInstanceOption', { name: 'collapseMessageWithSubject', value: collapseMessageWithSubject }) store.dispatch('setInstanceOption', { name: 'loginMethod', value: loginMethod }) + store.dispatch('setInstanceOption', { name: 'scopeCopy', value: scopeCopy }) + store.dispatch('setInstanceOption', { name: 'subjectLineBehavior', value: subjectLineBehavior }) if (chatDisabled) { store.dispatch('disableChat') } diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js @@ -24,7 +24,7 @@ const PostStatusForm = { 'replyTo', 'repliedUser', 'attentions', - 'messageScope', + 'copyMessageScope', 'subject' ], components: { @@ -46,6 +46,10 @@ const PostStatusForm = { statusText = buildMentionsString({ user: this.repliedUser, attentions: this.attentions }, currentUser) } + const scope = (this.copyMessageScope && this.$store.state.config.copyScope || this.copyMessageScope === 'direct') + ? this.copyMessageScope + : this.$store.state.users.currentUser.default_scope + return { dropFiles: [], submitDisabled: false, @@ -58,7 +62,7 @@ const PostStatusForm = { contentType: 'text/plain', nsfw: false, files: [], - visibility: this.messageScope || this.$store.state.users.currentUser.default_scope + visibility: scope }, caret: 0 } diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js @@ -34,6 +34,12 @@ const settings = { ? instance.collapseMessageWithSubject : user.collapseMessageWithSubject, collapseMessageWithSubjectDefault: this.$t('settings.values.' + instance.collapseMessageWithSubject), + subjectLineBehaviorLocal: typeof user.subjectLineBehavior === 'undefined' + ? instance.subjectLineBehavior + : user.subjectLineBehavior, + subjectLineBehaviorDefault: instance.subjectLineBehavior, + scopeCopyLocal: user.scopeCopy, + scopeCopyDefault: this.$t('settings.values.' + instance.scopeCopy), stopGifs: user.stopGifs, loopSilentAvailable: // Firefox @@ -113,6 +119,12 @@ const settings = { collapseMessageWithSubjectLocal (value) { this.$store.dispatch('setOption', { name: 'collapseMessageWithSubject', value }) }, + scopeCopyLocal (value) { + this.$store.dispatch('setOption', { name: 'scopeCopy', value }) + }, + subjectLineBehaviorLocal (value) { + this.$store.dispatch('setOption', { name: 'subjectLineBehavior', value }) + }, stopGifs (value) { this.$store.dispatch('setOption', { name: 'stopGifs', value }) } diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue @@ -53,6 +53,41 @@ </li> </ul> </div> + + <div class="setting-item"> + <h2>{{$t('settings.composing')}}</h2> + <ul class="setting-list"> + <li> + <input type="checkbox" id="scopeCopy" v-model="scopeCopyLocal"> + <label for="scopeCopy"> + {{$t('settings.scope_copy')}} {{$t('settings.instance_default', { value: scopeCopyDefault })}} + </label> + </li> + <li> + <div> + {{$t('settings.subject_line_behavior')}} + <label for="subjectLineBehavior" class="select"> + <select id="subjectLineBehavior" v-model="subjectLineBehaviorLocal"> + <option value="email"> + {{$t('settings.subject_line_email')}} + {{subjectLineBehaviorDefault == 'email' ? $t('settings.instance_default_simple') : ''}} + </option> + <option value="masto"> + {{$t('settings.subject_line_mastodon')}} + {{subjectLineBehaviorDefault == 'mastodon' ? $t('settings.instance_default_simple') : ''}} + </option> + <option value="noop"> + {{$t('settings.subject_line_noop')}} + {{subjectLineBehaviorDefault == 'noop' ? $t('settings.instance_default_simple') : ''}} + </option> + </select> + <i class="icon-down-open"/> + </label> + </div> + </li> + </ul> + </div> + <div class="setting-item"> <h2>{{$t('settings.attachments')}}</h2> <ul class="setting-list"> diff --git a/src/components/status/status.js b/src/components/status/status.js @@ -181,10 +181,16 @@ const Status = { return true }, replySubject () { - if (this.status.summary && !this.status.summary.match(/^re[: ]/i)) { + if (!this.status.summary) return '' + const behavior = this.$store.state.config.subjectLineBehavior + const startsWithRe = this.status.summary.match(/^re[: ]/i) + if (behavior !== 'noop' && startsWithRe || behavior === 'masto') { + return this.status.summary + } else if (behavior === 'email') { return 're: '.concat(this.status.summary) + } else if (behavior === 'noop') { + return '' } - return this.status.summary }, attachmentSize () { if ((this.$store.state.config.hideAttachments && !this.inConversation) || diff --git a/src/components/status/status.vue b/src/components/status/status.vue @@ -106,7 +106,7 @@ </div> <div class="container" v-if="replying"> <div class="reply-left"/> - <post-status-form class="reply-body" :reply-to="status.id" :attentions="status.attentions" :repliedUser="status.user" :message-scope="status.visibility" :subject="replySubject" v-on:posted="toggleReplying"/> + <post-status-form class="reply-body" :reply-to="status.id" :attentions="status.attentions" :repliedUser="status.user" :copy-message-scope="status.visibility" :subject="replySubject" v-on:posted="toggleReplying"/> </div> </template> </div> diff --git a/src/i18n/en.json b/src/i18n/en.json @@ -91,6 +91,7 @@ "change_password_error": "There was an issue changing your password.", "changed_password": "Password changed successfully!", "collapse_subject": "Collapse posts with subjects", + "composing": "Composing", "confirm_new_password": "Confirm new password", "current_avatar": "Your current avatar", "current_password": "Current password", @@ -120,6 +121,7 @@ "import_theme": "Load preset", "inputRadius": "Input fields", "instance_default": "(default: {value})", + "instance_default_simple" : "(default)", "interfaceLanguage": "Interface language", "invalid_theme_imported": "The selected file is not a supported Pleroma theme. No changes to your theme were made.", "limited_availability": "Unavailable in your browser", @@ -152,10 +154,15 @@ "saving_err": "Error saving settings", "saving_ok": "Settings saved", "security_tab": "Security", + "scope_copy": "Copy scope when replying (DMs are always copied)", "set_new_avatar": "Set new avatar", "set_new_profile_background": "Set new profile background", "set_new_profile_banner": "Set new profile banner", "settings": "Settings", + "subject_line_behavior": "Copy subject when replying", + "subject_line_email": "Like email: \"re: subject\"", + "subject_line_mastodon": "Like mastodon: copy as is", + "subject_line_noop": "Do not copy", "stop_gifs": "Play-on-hover GIFs", "streaming": "Enable automatic streaming of new posts when scrolled to the top", "text": "Text", diff --git a/src/i18n/fr.json b/src/i18n/fr.json @@ -119,6 +119,7 @@ "import_theme": "Charger le thème", "inputRadius": "Champs de texte", "instance_default": "(default: {value})", + "instance_default_simple" : "(default)", "interfaceLanguage": "Langue de l'interface", "invalid_theme_imported": "Le fichier sélectionné n'est pas un thème Pleroma pris en charge. Aucun changement n'a été apporté à votre thème.", "limited_availability": "Non disponible dans votre navigateur", diff --git a/src/modules/config.js b/src/modules/config.js @@ -5,7 +5,7 @@ const browserLocale = (window.navigator.language || 'en').split('-')[0] const defaultState = { colors: {}, - collapseMessageWithSubject: undefined, + collapseMessageWithSubject: undefined, // instance default hideAttachments: false, hideAttachmentsInConv: false, hideNsfw: true, @@ -25,7 +25,9 @@ const defaultState = { }, muteWords: [], highlight: {}, - interfaceLanguage: browserLocale + interfaceLanguage: browserLocale, + scopeCopy: undefined, // instance default + subjectLineBehavior: undefined // instance default } const config = { diff --git a/src/modules/instance.js b/src/modules/instance.js @@ -21,6 +21,8 @@ const defaultState = { hidePostStats: false, hideUserStats: false, disableChat: false, + scopeCopy: true, + subjectLineBehavior: 'email', loginMethod: 'password', // Nasty stuff diff --git a/static/config.json b/static/config.json @@ -11,6 +11,8 @@ "scopeOptionsEnabled": false, "formattingOptionsEnabled": false, "collapseMessageWithSubject": false, + "scopeCopy": false, + "subjectLineBehavior": "email", "hidePostStats": false, "hideUserStats": false, "loginMethod": "password"