diff --git a/src/App.scss b/src/App.scss index fd5e6c16..ced2d069 100644 --- a/src/App.scss +++ b/src/App.scss @@ -63,7 +63,7 @@ nav { } -sidebar { +.sidebar { flex: 1; flex-basis: 300px; } @@ -255,3 +255,8 @@ nav { .fade-enter, .fade-leave-active { opacity: 0 } + +.main { + flex: 2; + flex-basis: 500px; +} diff --git a/src/App.vue b/src/App.vue index e46419e0..2cd6d079 100644 --- a/src/App.vue +++ b/src/App.vue @@ -6,14 +6,16 @@
- + +
+ + + +
diff --git a/src/_variables.scss b/src/_variables.scss index c317fd32..d2b7065d 100644 --- a/src/_variables.scss +++ b/src/_variables.scss @@ -3,4 +3,5 @@ $main-background: white; $darkened-background: whitesmoke; $green: #0fa00f; $blue: #0095ff; +$red: #ff0000; diff --git a/src/assets/nsfw.jpg b/src/assets/nsfw.jpg deleted file mode 100644 index 6ae4ffe9..00000000 Binary files a/src/assets/nsfw.jpg and /dev/null differ diff --git a/src/assets/nsfw.png b/src/assets/nsfw.png new file mode 100644 index 00000000..bb6556b4 Binary files /dev/null and b/src/assets/nsfw.png differ diff --git a/src/components/attachment/attachment.js b/src/components/attachment/attachment.js index 9f751863..c88497a2 100644 --- a/src/components/attachment/attachment.js +++ b/src/components/attachment/attachment.js @@ -1,4 +1,4 @@ -import nsfwImage from '../../assets/nsfw.jpg' +import nsfwImage from '../../assets/nsfw.png' import fileTypeService from '../../services/file_type/file_type.service.js' const Attachment = { @@ -7,17 +7,23 @@ const Attachment = { 'nsfw', 'statusId' ], - data: () => ({ nsfwImage }), + data: () => ({ + nsfwImage, + showHidden: false + }), computed: { type () { return fileTypeService.fileType(this.attachment.mimetype) + }, + hidden () { + return this.nsfw && !this.showHidden } }, methods: { - showNsfw () { - this.$store.commit('setNsfw', { id: this.statusId, nsfw: false }) + toggleHidden () { + this.showHidden = !this.showHidden } } } -export default Attachment \ No newline at end of file +export default Attachment diff --git a/src/components/attachment/attachment.vue b/src/components/attachment/attachment.vue index 1e49cbeb..6bc0356a 100644 --- a/src/components/attachment/attachment.vue +++ b/src/components/attachment/attachment.vue @@ -1,15 +1,18 @@ - - diff --git a/src/modules/statuses.js b/src/modules/statuses.js index f4bffebf..aab198d8 100644 --- a/src/modules/statuses.js +++ b/src/modules/statuses.js @@ -54,6 +54,9 @@ export const prepareStatus = (status) => { status.nsfw = !!status.text.match(nsfwRegex) } + // Set deleted flag + status.deleted = false + // To make the array reactive status.attachments = status.attachments || [] @@ -261,6 +264,10 @@ export const mutations = { const newStatus = find(state.allStatuses, status) newStatus.repeated = value }, + setDeleted (state, { status }) { + const newStatus = find(state.allStatuses, status) + newStatus.deleted = true + }, setLoading (state, { timeline, value }) { state.timelines[timeline].loading = value }, @@ -276,6 +283,10 @@ const statuses = { addNewStatuses ({ rootState, commit }, { statuses, showImmediately = false, timeline = false, noIdUpdate = false }) { commit('addNewStatuses', { statuses, showImmediately, timeline, noIdUpdate, user: rootState.users.currentUser }) }, + deleteStatus ({ rootState, commit }, status) { + commit('setDeleted', { status }) + apiService.deleteStatus({ id: status.id, credentials: rootState.users.currentUser.credentials }) + }, favorite ({ rootState, commit }, status) { // Optimistic favoriting... commit('setFavorited', { status, value: true }) diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index 47895d3b..a78ab5c9 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -7,6 +7,7 @@ const FAVORITE_URL = '/api/favorites/create' const UNFAVORITE_URL = '/api/favorites/destroy' const RETWEET_URL = '/api/statuses/retweet' const STATUS_UPDATE_URL = '/api/statuses/update.json' +const STATUS_DELETE_URL = '/api/statuses/destroy' const STATUS_URL = '/api/statuses/show' const MEDIA_UPLOAD_URL = '/api/statusnet/media/upload' const CONVERSATION_URL = '/api/statusnet/conversation' @@ -118,6 +119,13 @@ const postStatus = ({credentials, status, mediaIds, inReplyToStatusId}) => { }) } +const deleteStatus = ({ id, credentials }) => { + return fetch(`${STATUS_DELETE_URL}/${id}.json`, { + headers: authHeaders(credentials), + method: 'POST' + }) +} + const uploadMedia = ({formData, credentials}) => { return fetch(MEDIA_UPLOAD_URL, { body: formData, @@ -139,6 +147,7 @@ const apiService = { unfavorite, retweet, postStatus, + deleteStatus, uploadMedia } diff --git a/test/unit/specs/modules/statuses.spec.js b/test/unit/specs/modules/statuses.spec.js index deeeb477..6c048372 100644 --- a/test/unit/specs/modules/statuses.spec.js +++ b/test/unit/specs/modules/statuses.spec.js @@ -44,6 +44,11 @@ describe('Statuses.prepareStatus', () => { expect(prepareStatus(nsfw).nsfw).to.eq(false) }) + + it('sets deleted flag to false', () => { + const aStatus = makeMockStatus({id: 1, text: 'Hello oniichan'}) + expect(prepareStatus(aStatus).deleted).to.eq(false) + }) }) describe('Statuses.findMaxId', () => {