logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe
commit: f7e9f17e4c895d4a5f8aa15db674fd714396b334
parent: d0e91abe5a9f3e5e776fe29d892aa51a1c7a4773
Author: Roger Braun <roger@rogerbraun.net>
Date:   Mon,  5 Dec 2016 19:09:11 +0100

Merge branch 'develop' of ssh.gitgud.io:lambadalambda/pleroma-fe into develop

Diffstat:

Msrc/components/attachment/attachment.vue2+-
Msrc/components/mentions/mentions.js21++++++++++-----------
Msrc/components/mentions/mentions.vue4+---
Msrc/modules/statuses.js32+++++++++++++++++++++++++++++---
Mtest/unit/specs/modules/statuses.spec.js16++++++++++++++++
5 files changed, 57 insertions(+), 18 deletions(-)

diff --git a/src/components/attachment/attachment.vue b/src/components/attachment/attachment.vue @@ -9,7 +9,7 @@ <a class="image-attachment" v-if="type === 'image' && !hidden" :href="attachment.url" target="_blank"> - <img :src="attachment.url"></img> + <img referrerpolicy="no-referrer" :src="attachment.url"></img> </a> <video v-if="type === 'video' && !hidden" :src="attachment.url" controls></video> diff --git a/src/components/mentions/mentions.js b/src/components/mentions/mentions.js @@ -1,26 +1,25 @@ -import Status from '../status/status.vue' -// Temporary -import { prepareStatus } from '../../modules/statuses.js' -import { map } from 'lodash' +import Timeline from '../timeline/timeline.vue' const Mentions = { - data () { - return { - mentions: [] - } - }, computed: { username () { return this.$route.params.username + }, + timeline () { + return this.$store.state.statuses.timelines.mentions } }, components: { - Status + Timeline }, created () { this.$store.state.api.backendInteractor.fetchMentions({username: this.username}) .then((mentions) => { - this.mentions = map(mentions, prepareStatus) + this.$store.dispatch('addNewStatuses', { + statuses: mentions, + timeline: 'mentions', + showImmediately: true + }) }) } } diff --git a/src/components/mentions/mentions.vue b/src/components/mentions/mentions.vue @@ -2,9 +2,7 @@ <div class="timeline panel panel-default"> <div class="panel-heading">Mentions</div> <div class="panel-body"> - <div class="timeline"> - <status v-for="status in mentions" :key="status.id" v-bind:statusoid="status"></status> - </div> + <Timeline v-bind:timeline="timeline" v-bind:timeline-name="'mentions'"/> </div> </div> </template> diff --git a/src/modules/statuses.js b/src/modules/statuses.js @@ -8,6 +8,15 @@ export const defaultState = { notifications: [], favorites: new Set(), timelines: { + mentions: { + statuses: [], + faves: [], + visibleStatuses: [], + newStatusCount: 0, + maxId: 0, + minVisibleId: 0, + loading: false + }, public: { statuses: [], faves: [], @@ -94,6 +103,14 @@ const mergeOrAdd = (arr, item) => { } } +const sortTimeline = (timeline) => { + timeline.visibleStatuses = sortBy(timeline.visibleStatuses, ({id}) => -id) + timeline.statuses = sortBy(timeline.statuses, ({id}) => -id) + timeline.minVisibleId = (last(timeline.statuses) || {}).id + + return timeline +} + const addNewStatuses = (state, { statuses, showImmediately = false, timeline, user = {}, noIdUpdate = false }) => { // Sanity check if (!isArray(statuses)) { @@ -120,7 +137,18 @@ const addNewStatuses = (state, { statuses, showImmediately = false, timeline, us addNotification({ type: 'repeat', status: status.retweeted_status, action: status }) } + // We are mentioned in a post if (statusType(status) === 'status' && find(status.attentions, { id: user.id })) { + const mentions = state.timelines.mentions + + // Add the mention to the mentions timeline + if (timelineObject !== mentions) { + mergeOrAdd(mentions.statuses, status) + mentions.newStatusCount += 1 + + sortTimeline(mentions) + } + addNotification({ type: 'mention', status, action: status }) } } @@ -216,9 +244,7 @@ const addNewStatuses = (state, { statuses, showImmediately = false, timeline, us // Keep the visible statuses sorted if (timeline) { - timelineObject.visibleStatuses = sortBy(timelineObject.visibleStatuses, ({id}) => -id) - timelineObject.statuses = sortBy(timelineObject.statuses, ({id}) => -id) - timelineObject.minVisibleId = (last(timelineObject.statuses) || {}).id + sortTimeline(timelineObject) } } diff --git a/test/unit/specs/modules/statuses.spec.js b/test/unit/specs/modules/statuses.spec.js @@ -297,6 +297,22 @@ describe('The Statuses module', () => { expect(state.notifications[0].type).to.eql('mention') }) + it('adds the message to mentions when you are mentioned', () => { + const user = { id: 1 } + const state = cloneDeep(defaultState) + const status = makeMockStatus({id: 1}) + const mentionedStatus = makeMockStatus({id: 2}) + mentionedStatus.attentions = [user] + + mutations.addNewStatuses(state, { statuses: [status], user }) + + expect(state.timelines.mentions.statuses).to.have.length(0) + + mutations.addNewStatuses(state, { statuses: [mentionedStatus], user }) + expect(state.timelines.mentions.statuses).to.have.length(1) + expect(state.timelines.mentions.statuses).to.eql([mentionedStatus]) + }) + it('adds a notfication when one of the user\'s status is favorited', () => { const state = cloneDeep(defaultState) const status = makeMockStatus({id: 1})