diff --git a/src/App.scss b/src/App.scss
index c155de730b..a97ad56de3 100644
--- a/src/App.scss
+++ b/src/App.scss
@@ -1,7 +1,4 @@
-$main-color: #f58d2c;
-$main-background: white;
-$darkened-background: whitesmoke;
-
+@import './_variables.scss';
#app {
background-color: $main-color;
background-size: cover;
@@ -225,9 +222,10 @@ status.ng-enter.ng-enter-active {
}
.fa {
- color: $main-color;
+ color: grey;
}
+
.status-actions {
width: 50%;
display: flex;
diff --git a/src/_variables.scss b/src/_variables.scss
new file mode 100644
index 0000000000..c317fd3240
--- /dev/null
+++ b/src/_variables.scss
@@ -0,0 +1,6 @@
+$main-color: #f58d2c;
+$main-background: white;
+$darkened-background: whitesmoke;
+$green: #0fa00f;
+$blue: #0095ff;
+
diff --git a/src/components/favorite_button/favorite_button.vue b/src/components/favorite_button/favorite_button.vue
index 0455c70603..6eaf0607b5 100644
--- a/src/components/favorite_button/favorite_button.vue
+++ b/src/components/favorite_button/favorite_button.vue
@@ -7,8 +7,15 @@
-
diff --git a/src/components/retweet_button/retweet_button.js b/src/components/retweet_button/retweet_button.js
new file mode 100644
index 0000000000..e7318dc5f7
--- /dev/null
+++ b/src/components/retweet_button/retweet_button.js
@@ -0,0 +1,19 @@
+const RetweetButton = {
+ props: [ 'status' ],
+ methods: {
+ retweet () {
+ if (!this.status.repeated) {
+ this.$store.dispatch('retweet', {id: this.status.id})
+ }
+ }
+ },
+ computed: {
+ classes () {
+ return {
+ 'retweeted': this.status.repeated
+ }
+ }
+ }
+}
+
+export default RetweetButton
diff --git a/src/components/retweet_button/retweet_button.vue b/src/components/retweet_button/retweet_button.vue
new file mode 100644
index 0000000000..9b2f5c7b36
--- /dev/null
+++ b/src/components/retweet_button/retweet_button.vue
@@ -0,0 +1,22 @@
+
+
+
+ {{status.repeat_num}}
+
+
+
+
+
+
diff --git a/src/components/status/status.js b/src/components/status/status.js
index 6253d334fe..0bf2ecdeee 100644
--- a/src/components/status/status.js
+++ b/src/components/status/status.js
@@ -1,5 +1,6 @@
import Attachment from '../attachment/attachment.vue'
import FavoriteButton from '../favorite_button/favorite_button.vue'
+import RetweetButton from '../retweet_button/retweet_button.vue'
import PostStatusForm from '../post_status_form/post_status_form.vue'
const Status = {
@@ -24,6 +25,7 @@ const Status = {
components: {
Attachment,
FavoriteButton,
+ RetweetButton,
PostStatusForm
},
methods: {
diff --git a/src/components/status/status.vue b/src/components/status/status.vue
index 48c910c097..d4bcc27978 100644
--- a/src/components/status/status.vue
+++ b/src/components/status/status.vue
@@ -37,9 +37,7 @@
-
-
-
+
@@ -53,7 +51,8 @@
diff --git a/src/modules/statuses.js b/src/modules/statuses.js
index cc5e296cba..8238644d41 100644
--- a/src/modules/statuses.js
+++ b/src/modules/statuses.js
@@ -146,6 +146,10 @@ export const mutations = {
const newStatus = find(state.allStatuses, status)
newStatus.favorited = value
},
+ setRetweeted (state, { status, value }) {
+ const newStatus = find(state.allStatuses, status)
+ newStatus.repeated = value
+ },
setLoading (state, { timeline, value }) {
state.timelines[timeline].loading = value
},
@@ -167,6 +171,11 @@ const statuses = {
// Optimistic favoriting...
commit('setFavorited', { status, value: false })
apiService.unfavorite({ id: status.id, credentials: rootState.users.currentUser.credentials })
+ },
+ retweet ({ rootState, commit }, status) {
+ // Optimistic retweeting...
+ commit('setRetweeted', { status, value: true })
+ apiService.retweet({ id: status.id, credentials: rootState.users.currentUser.credentials })
}
},
mutations
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index 06585ac711..d00bc0d0ea 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -5,6 +5,7 @@ const PUBLIC_TIMELINE_URL = '/api/statuses/public_timeline.json'
const PUBLIC_AND_EXTERNAL_TIMELINE_URL = '/api/statuses/public_and_external_timeline.json'
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 MEDIA_UPLOAD_URL = '/api/statusnet/media/upload'
// const CONVERSATION_URL = '/api/statusnet/conversation/';
@@ -63,6 +64,13 @@ const unfavorite = ({ id, credentials }) => {
})
}
+const retweet = ({ id, credentials }) => {
+ return fetch(`${RETWEET_URL}/${id}.json`, {
+ headers: authHeaders(credentials),
+ method: 'POST'
+ })
+}
+
const postStatus = ({credentials, status, mediaIds, inReplyToStatusId}) => {
const idsText = mediaIds.join(',')
const form = new FormData()
@@ -96,6 +104,7 @@ const apiService = {
fetchTimeline,
favorite,
unfavorite,
+ retweet,
postStatus,
uploadMedia
}