From 6184c88ac70b33e66a87222142344f693406bd87 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Sun, 3 Mar 2019 15:15:41 +0200 Subject: Initial work on deprecating scopeModesEnabled in favor of minimalScopeMode --- .../post_status_form/post_status_form.js | 27 ++++++++++++---------- .../post_status_form/post_status_form.vue | 13 ++++++----- 2 files changed, 22 insertions(+), 18 deletions(-) (limited to 'src/components/post_status_form') diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js index c28c51bf..b0882f70 100644 --- a/src/components/post_status_form/post_status_form.js +++ b/src/components/post_status_form/post_status_form.js @@ -1,5 +1,6 @@ import statusPoster from '../../services/status_poster/status_poster.service.js' import MediaUpload from '../media_upload/media_upload.vue' +import ScopeSelector from '../scope_selector/scope_selector.vue' import fileTypeService from '../../services/file_type/file_type.service.js' import Completion from '../../services/completion/completion.js' import { take, filter, reject, map, uniqBy } from 'lodash' @@ -28,7 +29,8 @@ const PostStatusForm = { 'subject' ], components: { - MediaUpload + MediaUpload, + ScopeSelector }, mounted () { this.resize(this.$refs.textarea) @@ -78,14 +80,6 @@ const PostStatusForm = { } }, computed: { - vis () { - return { - public: { selected: this.newStatus.visibility === 'public' }, - unlisted: { selected: this.newStatus.visibility === 'unlisted' }, - private: { selected: this.newStatus.visibility === 'private' }, - direct: { selected: this.newStatus.visibility === 'direct' } - } - }, candidates () { const firstchar = this.textAtCaret.charAt(0) if (firstchar === '@') { @@ -133,6 +127,15 @@ const PostStatusForm = { users () { return this.$store.state.users.users }, + userDefaultScope () { + return this.$store.state.users.currentUser.default_scope + }, + showAllScopes () { + const minimalScopesMode = typeof this.$store.state.config.minimalScopesMode === 'undefined' + ? this.$store.state.instance.minimalScopesMode + : this.$store.state.config.minimalScopesMode + return !minimalScopesMode + }, emoji () { return this.$store.state.instance.emoji || [] }, @@ -157,8 +160,8 @@ const PostStatusForm = { isOverLengthLimit () { return this.hasStatusLengthLimit && (this.charactersLeft < 0) }, - scopeOptionsEnabled () { - return this.$store.state.instance.scopeOptionsEnabled + scopeOptionsMinimal () { + return this.$store.state.instance.scopeOptionsMinimal }, alwaysShowSubject () { if (typeof this.$store.state.config.alwaysShowSubjectInput !== 'undefined') { @@ -166,7 +169,7 @@ const PostStatusForm = { } else if (typeof this.$store.state.instance.alwaysShowSubjectInput !== 'undefined') { return this.$store.state.instance.alwaysShowSubjectInput } else { - return this.$store.state.instance.scopeOptionsEnabled + return true } }, formattingOptionsEnabled () { diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index 5085570b..b3d731cd 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -44,12 +44,13 @@ -
- - - - -
+
-- cgit v1.2.3-70-g09d2 From bf927122df94853593a000ae873e8c840674258f Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Sat, 30 Mar 2019 12:25:23 +0200 Subject: Review --- BREAKING_CHANGES.md | 6 ++++++ src/components/post_status_form/post_status_form.vue | 1 - src/components/scope_selector/scope_selector.js | 3 +-- 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 BREAKING_CHANGES.md (limited to 'src/components/post_status_form') diff --git a/BREAKING_CHANGES.md b/BREAKING_CHANGES.md new file mode 100644 index 00000000..915aa74c --- /dev/null +++ b/BREAKING_CHANGES.md @@ -0,0 +1,6 @@ +# v1.0 +## Removed features/radically changed behavior +* As of !633, `scopeOptions` is no longer available and instead is changed for `scopeOptionsMinimal` (default: `false`) +Reasoning is that scopeOptions option originally existed mostly as a backwards-compatibility with GNU Social which only had `public` scope available and using scope selector would''t work. Since at some point we dropped GNU Social support, this option was mostly a nuisance (being default `false`'), however some people think scopes are an annoyance to a certain degree and want as less of that feature as possible. +Solution - to only show minimal set among: *Direct*, *User default* and *Scope of post replying to*. This also makes it impossible to reply to a DM with a non-DM post from UI. +*This setting is admin-default, user-configurable. Admin can choose different default for their instance but user can override it.* diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index b3d731cd..8beb73a9 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -46,7 +46,6 @@ Date: Sat, 30 Mar 2019 12:41:42 +0200 Subject: aaaaggghh --- BREAKING_CHANGES.md | 4 ++-- src/components/features_panel/features_panel.js | 2 +- src/components/post_status_form/post_status_form.js | 4 ++-- src/components/user_settings/user_settings.js | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) (limited to 'src/components/post_status_form') diff --git a/BREAKING_CHANGES.md b/BREAKING_CHANGES.md index 45f7c74b..924c38da 100644 --- a/BREAKING_CHANGES.md +++ b/BREAKING_CHANGES.md @@ -1,7 +1,7 @@ # v1.0 ## Removed features/radically changed behavior -### scopeOptionsMinimal -As of !633, `scopeOptions` is no longer available and instead is changed for `scopeOptionsMinimal` (default: `false`) +### minimalScopesMode +As of !633, `scopeOptions` is no longer available and instead is changed for `minimalScopesMode` (default: `false`) Reasoning is that scopeOptions option originally existed mostly as a backwards-compatibility with GNU Social which only had `public` scope available and using scope selector would''t work. Since at some point we dropped GNU Social support, this option was mostly a nuisance (being default `false`'), however some people think scopes are an annoyance to a certain degree and want as less of that feature as possible. diff --git a/src/components/features_panel/features_panel.js b/src/components/features_panel/features_panel.js index 0a7234cc..5f0b7b25 100644 --- a/src/components/features_panel/features_panel.js +++ b/src/components/features_panel/features_panel.js @@ -6,7 +6,7 @@ const FeaturesPanel = { gopher: function () { return this.$store.state.instance.gopherAvailable }, whoToFollow: function () { return this.$store.state.instance.suggestionsEnabled }, mediaProxy: function () { return this.$store.state.instance.mediaProxyAvailable }, - scopeOptionsMinimal: function () { return this.$store.state.instance.scopeOptionsMinimal }, + minimalScopesMode: function () { return this.$store.state.instance.minimalScopesMode }, textlimit: function () { return this.$store.state.instance.textlimit } } } diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js index 499cbbfb..40e2610e 100644 --- a/src/components/post_status_form/post_status_form.js +++ b/src/components/post_status_form/post_status_form.js @@ -162,8 +162,8 @@ const PostStatusForm = { isOverLengthLimit () { return this.hasStatusLengthLimit && (this.charactersLeft < 0) }, - scopeOptionsMinimal () { - return this.$store.state.instance.scopeOptionsMinimal + minimalScopesMode () { + return this.$store.state.instance.minimalScopesMode }, alwaysShowSubject () { if (typeof this.$store.state.config.alwaysShowSubjectInput !== 'undefined') { diff --git a/src/components/user_settings/user_settings.js b/src/components/user_settings/user_settings.js index 4b277b6c..b6a0479d 100644 --- a/src/components/user_settings/user_settings.js +++ b/src/components/user_settings/user_settings.js @@ -82,8 +82,8 @@ const UserSettings = { pleromaBackend () { return this.$store.state.instance.pleromaBackend }, - scopeOptionsMinimal () { - return this.$store.state.instance.scopeOptionsMinimal + minimalScopesMode () { + return this.$store.state.instance.minimalScopesMode }, vis () { return { -- cgit v1.2.3-70-g09d2 From c9a9b3122db9c2c089e36930ed2a252f80de71cd Mon Sep 17 00:00:00 2001 From: dave Date: Tue, 2 Apr 2019 10:26:14 -0400 Subject: #469 - DM warning text should vary based on BE setting --- src/boot/after_store.js | 3 ++- src/components/post_status_form/post_status_form.js | 4 ++++ src/components/post_status_form/post_status_form.vue | 2 +- src/modules/instance.js | 1 + 4 files changed, 8 insertions(+), 2 deletions(-) (limited to 'src/components/post_status_form') diff --git a/src/boot/after_store.js b/src/boot/after_store.js index 862a534d..f2c1aa0f 100644 --- a/src/boot/after_store.js +++ b/src/boot/after_store.js @@ -9,12 +9,13 @@ const getStatusnetConfig = async ({ store }) => { const res = await window.fetch('/api/statusnet/config.json') if (res.ok) { const data = await res.json() - const { name, closed: registrationClosed, textlimit, uploadlimit, server, vapidPublicKey } = data.site + const { name, closed: registrationClosed, textlimit, uploadlimit, server, vapidPublicKey, safeDMMentionsEnabled } = data.site store.dispatch('setInstanceOption', { name: 'name', value: name }) store.dispatch('setInstanceOption', { name: 'registrationOpen', value: (registrationClosed === '0') }) store.dispatch('setInstanceOption', { name: 'textlimit', value: parseInt(textlimit) }) store.dispatch('setInstanceOption', { name: 'server', value: server }) + store.dispatch('setInstanceOption', { name: 'safeDM', value: safeDMMentionsEnabled !== '0' }) // TODO: default values for this stuff, added if to not make it break on // my dev config out of the box. diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js index 40e2610e..d52abeee 100644 --- a/src/components/post_status_form/post_status_form.js +++ b/src/components/post_status_form/post_status_form.js @@ -179,6 +179,10 @@ const PostStatusForm = { }, postFormats () { return this.$store.state.instance.postFormats || [] + }, + showDirectWarning () { + console.log(this.$store.state.instance) + return this.$store.state.instance.safeDM && this.newStatus.visibility === 'direct' } }, methods: { diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index 3d3a1082..2f70a2ad 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -9,7 +9,7 @@ class="visibility-notice"> {{ $t('post_status.account_not_locked_warning_link') }} -

{{ $t('post_status.direct_warning') }}

+

{{ $t('post_status.direct_warning') }}

Date: Tue, 2 Apr 2019 10:28:38 -0400 Subject: #469 - clean up --- src/components/post_status_form/post_status_form.js | 1 - 1 file changed, 1 deletion(-) (limited to 'src/components/post_status_form') diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js index d52abeee..e0bb191c 100644 --- a/src/components/post_status_form/post_status_form.js +++ b/src/components/post_status_form/post_status_form.js @@ -181,7 +181,6 @@ const PostStatusForm = { return this.$store.state.instance.postFormats || [] }, showDirectWarning () { - console.log(this.$store.state.instance) return this.$store.state.instance.safeDM && this.newStatus.visibility === 'direct' } }, -- cgit v1.2.3-70-g09d2 From 67258571c59c9e037d121b807f0a75c26e612c01 Mon Sep 17 00:00:00 2001 From: dave Date: Tue, 2 Apr 2019 11:19:45 -0400 Subject: #469 - update behavior of safe_dm --- src/components/post_status_form/post_status_form.js | 4 ++-- src/components/post_status_form/post_status_form.vue | 7 +++++-- src/i18n/en.json | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) (limited to 'src/components/post_status_form') diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js index e0bb191c..c65c27e2 100644 --- a/src/components/post_status_form/post_status_form.js +++ b/src/components/post_status_form/post_status_form.js @@ -180,8 +180,8 @@ const PostStatusForm = { postFormats () { return this.$store.state.instance.postFormats || [] }, - showDirectWarning () { - return this.$store.state.instance.safeDM && this.newStatus.visibility === 'direct' + safeDMEnabled () { + return this.$store.state.instance.safeDM } }, methods: { diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index 2f70a2ad..1ce2b647 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -3,13 +3,16 @@
{{ $t('post_status.account_not_locked_warning_link') }} -

{{ $t('post_status.direct_warning') }}

+

+ {{ $t('post_status.direct_warning_to_first_only') }} + {{ $t('post_status.direct_warning_to_all') }} +

Date: Mon, 22 Apr 2019 18:25:21 +0300 Subject: Display additional scope description above the status form for mobile users. --- src/components/mobile_post_status_modal/mobile_post_status_modal.js | 6 +++++- .../mobile_post_status_modal/mobile_post_status_modal.vue | 4 ++-- src/components/post_status_form/post_status_form.js | 1 + 3 files changed, 8 insertions(+), 3 deletions(-) (limited to 'src/components/post_status_form') diff --git a/src/components/mobile_post_status_modal/mobile_post_status_modal.js b/src/components/mobile_post_status_modal/mobile_post_status_modal.js index 2f24dd08..eb665b8d 100644 --- a/src/components/mobile_post_status_modal/mobile_post_status_modal.js +++ b/src/components/mobile_post_status_modal/mobile_post_status_modal.js @@ -12,7 +12,8 @@ const MobilePostStatusModal = { scrollingDown: false, inputActive: false, oldScrollPos: 0, - amountScrolled: 0 + amountScrolled: 0, + visibility: this.$store.state.users.currentUser.default_scope } }, created () { @@ -32,6 +33,9 @@ const MobilePostStatusModal = { } }, methods: { + onScopeChange (visibility) { + this.visibility = visibility + }, openPostForm () { this.postFormOpen = true this.hidden = true diff --git a/src/components/mobile_post_status_modal/mobile_post_status_modal.vue b/src/components/mobile_post_status_modal/mobile_post_status_modal.vue index 0a451c28..ca431c5f 100644 --- a/src/components/mobile_post_status_modal/mobile_post_status_modal.vue +++ b/src/components/mobile_post_status_modal/mobile_post_status_modal.vue @@ -6,8 +6,8 @@ @click="closePostForm" >
-
{{$t('post_status.new_status')}}
- +
{{$t('post_status.new_status') + ' (' + $t('post_status.scope.' + visibility) + ')'}}
+
diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js index d956ebe6..998794bf 100644 --- a/src/components/post_status_form/post_status_form.js +++ b/src/components/post_status_form/post_status_form.js @@ -182,6 +182,9 @@ const PostStatusForm = { }, safeDMEnabled () { return this.$store.state.instance.safeDM + }, + hideScopeNotice () { + return this.$store.state.config.hideScopeNotice } }, methods: { @@ -339,6 +342,9 @@ const PostStatusForm = { changeVis (visibility) { this.newStatus.visibility = visibility this.$emit('onScopeChange', visibility) + }, + dismissScopeNotice () { + this.$store.dispatch('setOption', { name: 'hideScopeNotice', value: true }) } } } diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index 1ce2b647..15a466ec 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -9,7 +9,25 @@ class="visibility-notice"> {{ $t('post_status.account_not_locked_warning_link') }} -

+

+ {{ $t('post_status.scope_notice.public') }} + + + +

+

+ {{ $t('post_status.scope_notice.unlisted') }} + + + +

+

+ {{ $t('post_status.scope_notice.private') }} + + + +

+

{{ $t('post_status.direct_warning_to_first_only') }} {{ $t('post_status.direct_warning_to_all') }}

diff --git a/src/i18n/en.json b/src/i18n/en.json index 2f48c389..f98fa034 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -94,6 +94,12 @@ "direct_warning_to_all": "This post will be visible to all the mentioned users.", "direct_warning_to_first_only": "This post will only be visible to the mentioned users at the beginning of the message.", "posting": "Posting", + "scope_notice": { + "public": "Post to public timelines", + "private": "Post to followers only", + "unlisted": "Do not post to public timelines", + "direct": "Post to mentioned users only" + }, "scope": { "direct": "Direct - Post to mentioned users only", "private": "Followers-only - Post to followers only", diff --git a/src/modules/config.js b/src/modules/config.js index 1666a2c5..88969a97 100644 --- a/src/modules/config.js +++ b/src/modules/config.js @@ -30,6 +30,7 @@ const defaultState = { muteWords: [], highlight: {}, interfaceLanguage: browserLocale, + hideScopeNotice: false, scopeCopy: undefined, // instance default subjectLineBehavior: undefined, // instance default alwaysShowSubjectInput: undefined, // instance default -- cgit v1.2.3-70-g09d2 From a89010843deb67f8c03e72ab8681b1de54b3259b Mon Sep 17 00:00:00 2001 From: eugenijm Date: Tue, 7 May 2019 22:32:47 +0300 Subject: Use more clear explanation in the scope notice, make sure the hide button doesn't overlap with text in notice. --- src/App.scss | 13 +++++++++++++ .../mobile_post_status_modal/mobile_post_status_modal.js | 6 +----- .../mobile_post_status_modal/mobile_post_status_modal.vue | 2 +- src/components/post_status_form/post_status_form.js | 1 - src/components/post_status_form/post_status_form.vue | 12 ++++++------ src/i18n/en.json | 7 +++---- src/i18n/ru.json | 7 ++++++- 7 files changed, 30 insertions(+), 18 deletions(-) (limited to 'src/components/post_status_form') diff --git a/src/App.scss b/src/App.scss index 921f2c3b..2729e0b0 100644 --- a/src/App.scss +++ b/src/App.scss @@ -648,6 +648,19 @@ nav { border-radius: var(--inputRadius, $fallback--inputRadius); } +.notice-dismissible { + padding-right: 4rem; + position: relative; + + .dismiss { + position: absolute; + top: 0; + right: 0; + padding: .5em; + color: inherit; + } +} + @keyframes modal-background-fadein { from { background-color: rgba(0, 0, 0, 0); diff --git a/src/components/mobile_post_status_modal/mobile_post_status_modal.js b/src/components/mobile_post_status_modal/mobile_post_status_modal.js index eb665b8d..2f24dd08 100644 --- a/src/components/mobile_post_status_modal/mobile_post_status_modal.js +++ b/src/components/mobile_post_status_modal/mobile_post_status_modal.js @@ -12,8 +12,7 @@ const MobilePostStatusModal = { scrollingDown: false, inputActive: false, oldScrollPos: 0, - amountScrolled: 0, - visibility: this.$store.state.users.currentUser.default_scope + amountScrolled: 0 } }, created () { @@ -33,9 +32,6 @@ const MobilePostStatusModal = { } }, methods: { - onScopeChange (visibility) { - this.visibility = visibility - }, openPostForm () { this.postFormOpen = true this.hidden = true diff --git a/src/components/mobile_post_status_modal/mobile_post_status_modal.vue b/src/components/mobile_post_status_modal/mobile_post_status_modal.vue index c3cc5155..c762705b 100644 --- a/src/components/mobile_post_status_modal/mobile_post_status_modal.vue +++ b/src/components/mobile_post_status_modal/mobile_post_status_modal.vue @@ -7,7 +7,7 @@ >
{{$t('post_status.new_status')}}
- +