From c682a4b007cc55ce627e7c7331443905e473c4a7 Mon Sep 17 00:00:00 2001 From: shpuld <shp@cock.li> Date: Sun, 12 Nov 2017 23:15:47 +0200 Subject: [PATCH 1/2] Don't add notification on self mention, (and fix that pesky pleroma vs gs delete bug) --- src/modules/statuses.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/modules/statuses.js b/src/modules/statuses.js index 5f2f8152..403abd23 100644 --- a/src/modules/statuses.js +++ b/src/modules/statuses.js @@ -131,7 +131,7 @@ export const statusType = (status) => { return 'favorite' } - if (status.text.match(/deleted notice {{tag/)) { + if (status.text.match(/deleted notice {{tag/) || status.qvitter_delete_notice) { return 'deletion' } @@ -211,8 +211,10 @@ const addNewStatuses = (state, { statuses, showImmediately = false, timeline, us sortTimeline(mentions) } - - addNotification({ type: 'mention', status, action: status }) + // Don't add notification for self-mention + if (status.user.id !== user.id) { + addNotification({ type: 'mention', status, action: status }) + } } } From 46f23b7de7a5e27dd4f9f13f063d263fbb1ec85d Mon Sep 17 00:00:00 2001 From: shpuld <shp@cock.li> Date: Mon, 13 Nov 2017 01:06:48 +0200 Subject: [PATCH 2/2] Add an option to automatically show new posts when scrolled to the top, also add fade-in animation for posts. --- src/components/settings/settings.js | 4 ++++ src/components/settings/settings.vue | 4 ++++ src/components/status/status.vue | 16 +++++++++++++++- src/components/timeline/timeline.js | 24 ++++++++++++++++++++++++ src/i18n/messages.js | 2 ++ src/modules/config.js | 1 + 6 files changed, 50 insertions(+), 1 deletion(-) diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js index b3bb8290..b88937bb 100644 --- a/src/components/settings/settings.js +++ b/src/components/settings/settings.js @@ -9,6 +9,7 @@ const settings = { hideNsfwLocal: this.$store.state.config.hideNsfw, muteWordsString: this.$store.state.config.muteWords.join('\n'), autoLoadLocal: this.$store.state.config.autoLoad, + streamingLocal: this.$store.state.config.streaming, hoverPreviewLocal: this.$store.state.config.hoverPreview } }, @@ -33,6 +34,9 @@ const settings = { autoLoadLocal (value) { this.$store.dispatch('setOption', { name: 'autoLoad', value }) }, + streamingLocal (value) { + this.$store.dispatch('setOption', { name: 'streaming', value }) + }, hoverPreviewLocal (value) { this.$store.dispatch('setOption', { name: 'hoverPreview', value }) }, diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue index 5978e4ed..6a311d55 100644 --- a/src/components/settings/settings.vue +++ b/src/components/settings/settings.vue @@ -32,6 +32,10 @@ <input type="checkbox" id="autoLoad" v-model="autoLoadLocal"> <label for="autoLoad">{{$t('settings.autoload')}}</label> </li> + <li> + <input type="checkbox" id="streaming" v-model="streamingLocal"> + <label for="streaming">{{$t('settings.streaming')}}</label> + </li> <li> <input type="checkbox" id="hoverPreview" v-model="hoverPreviewLocal"> <label for="hoverPreview">{{$t('settings.reply_link_preview')}}</label> diff --git a/src/components/status/status.vue b/src/components/status/status.vue index cc315a90..33851b6c 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -14,7 +14,7 @@ </div> <post-status-form class="reply-body" :reply-to="status.id" :attentions="status.attentions" :repliedUser="status.user" v-on:posted="toggleReplying" v-if="replying"/> </div> - <div class="status-el base00-background base03-border" v-else-if="!status.deleted" v-bind:class="[{ 'base01-background': isFocused }, { 'status-conversation': inConversation }]" > + <div class="status-el base00-background base03-border status-fadein" v-else-if="!status.deleted" v-bind:class="[{ 'base01-background': isFocused }, { 'status-conversation': inConversation }]" > <template v-if="muted"> <div class="media status container muted"> <small><router-link :to="{ name: 'user-profile', params: { id: status.user.id } }">{{status.user.screen_name}}</router-link></small> @@ -226,6 +226,20 @@ } } + .status-fadein { + animation-duration: 0.5s; + animation-name: fadein; + } + + @keyframes fadein { + from { + opacity: 0; + } + to { + opacity: 1; + } + } + .greentext { color: green; } diff --git a/src/components/timeline/timeline.js b/src/components/timeline/timeline.js index 6968bc6f..613b8a34 100644 --- a/src/components/timeline/timeline.js +++ b/src/components/timeline/timeline.js @@ -11,6 +11,11 @@ const Timeline = { 'userId', 'tag' ], + data () { + return { + paused: false + } + }, computed: { timelineError () { return this.$store.state.statuses.error }, followers () { @@ -21,6 +26,9 @@ const Timeline = { }, viewing () { return this.timeline.viewing + }, + newStatusCount () { + return this.timeline.newStatusCount } }, components: { @@ -56,6 +64,7 @@ const Timeline = { methods: { showNewStatuses () { this.$store.commit('showNewStatuses', { timeline: this.timelineName }) + this.paused = false }, fetchOlderStatuses () { const store = this.$store @@ -90,6 +99,21 @@ const Timeline = { this.fetchOlderStatuses() } } + }, + watch: { + newStatusCount (count) { + if (!this.$store.state.config.streaming) { + return + } + if (count > 0) { + // only 'stream' them when you're scrolled to the top + if (window.pageYOffset < 15 && !this.paused) { + this.showNewStatuses() + } else { + this.paused = true + } + } + } } } diff --git a/src/i18n/messages.js b/src/i18n/messages.js index b9a4f756..cedb7fd7 100644 --- a/src/i18n/messages.js +++ b/src/i18n/messages.js @@ -103,6 +103,7 @@ const fi = { hide_attachments_in_convo: 'Piilota liitteet keskusteluissa', nsfw_clickthrough: 'Piilota NSFW liitteet klikkauksen taakse.', autoload: 'Lataa vanhempia viestejä automaattisesti ruudun pohjalla', + streaming: 'Näytä uudet viestit automaattisesti ollessasi ruudun huipulla', reply_link_preview: 'Keskusteluiden vastauslinkkien esikatselu' }, notifications: { @@ -186,6 +187,7 @@ const en = { hide_attachments_in_convo: 'Hide attachments in conversations', nsfw_clickthrough: 'Enable clickthrough NSFW attachment hiding', autoload: 'Enable automatic loading when scrolled to the bottom', + streaming: 'Enable automatic streaming of new posts when scrolled to the top', reply_link_preview: 'Enable reply-link preview on mouse hover' }, notifications: { diff --git a/src/modules/config.js b/src/modules/config.js index f7d6e9c8..ac17747e 100644 --- a/src/modules/config.js +++ b/src/modules/config.js @@ -8,6 +8,7 @@ const defaultState = { hideAttachmentsInConv: false, hideNsfw: true, autoLoad: true, + streaming: false, hoverPreview: true, muteWords: [] }