diff --git a/CHANGELOG.md b/CHANGELOG.md index d7cc6994..1a6e5e89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -61,6 +61,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Implemented user option to change sidebar position to the right side - Implemented user option to hide floating shout panel - Implemented "edit profile" button if viewing own profile which opens profile settings +- Added bookmark button to the status buttons (next to react, favorite, repeat buttons) ### Fixed - Fixed follow request count showing in the wrong location in mobile view diff --git a/src/components/bookmark_button/bookmark_button.js b/src/components/bookmark_button/bookmark_button.js new file mode 100644 index 00000000..dbd31ccb --- /dev/null +++ b/src/components/bookmark_button/bookmark_button.js @@ -0,0 +1,36 @@ +import { mapGetters } from 'vuex' +import { library } from '@fortawesome/fontawesome-svg-core' +import { faBookmark } from '@fortawesome/free-solid-svg-icons' + +import { + faBookmark as faBookmarkReg +} from '@fortawesome/free-regular-svg-icons' + +library.add(faBookmark, faBookmarkReg) + +const BookmarkButton = { + props: ['status', 'loggedIn'], + data () { + return { + animated: false + } + }, + methods: { + bookmarkStatus () { + if (!this.status.bookmarked) { + this.$store.dispatch('bookmark', { id: this.status.id }) + } else { + this.$store.dispatch('unbookmark', { id: this.status.id }) + } + this.animated = true + setTimeout(() => { + this.animated = false + }, 500) + } + }, + computed: { + ...mapGetters(['mergedConfig']) + } +} + +export default BookmarkButton diff --git a/src/components/bookmark_button/bookmark_button.vue b/src/components/bookmark_button/bookmark_button.vue new file mode 100644 index 00000000..918fb412 --- /dev/null +++ b/src/components/bookmark_button/bookmark_button.vue @@ -0,0 +1,57 @@ +<template> + <div class="BookmarkButton"> + <button + class="button-unstyled interactive" + :class="status.bookmarked && '-bookmarked'" + :title="[status.bookmarked ? $t('tool_tip.unbookmark') : $t('tool_tip.bookmark')]" + @click.prevent="bookmarkStatus()" + > + <FAIcon + class="fa-scale-110 fa-old-padding" + fixed-width + :icon="[status.bookmarked ? 'fas' : 'far', 'bookmark']" + :spin="animated" + /> + </button> + </div> +</template> + +<script src="./bookmark_button.js" ></script> + +<style lang="scss"> +@import '../../_variables.scss'; + +.BookmarkButton { + display: flex; + + > :first-child { + padding: 10px; + margin: -10px -8px -10px -10px; + } + + .action-counter { + pointer-events: none; + user-select: none; + } + + .interactive { + .svg-inline--fa { + animation-duration: 0.6s; + } + + &:hover .svg-inline--fa, + &.-bookmarked .svg-inline--fa { + color: $fallback--cGreen; + color: var(--cGreen, $fallback--cGreen); + } + } +} + +.notifications { + .BookmarkButton { + > :first-child { + margin: -10px -8px -10px -14px; + } + } +} +</style> diff --git a/src/components/extra_buttons/extra_buttons.js b/src/components/extra_buttons/extra_buttons.js index dd45b6b9..93dd8d0c 100644 --- a/src/components/extra_buttons/extra_buttons.js +++ b/src/components/extra_buttons/extra_buttons.js @@ -2,21 +2,17 @@ import Popover from '../popover/popover.vue' import { library } from '@fortawesome/fontawesome-svg-core' import { faEllipsisH, - faBookmark, faEyeSlash, faThumbtack, faShareAlt, faExternalLinkAlt } from '@fortawesome/free-solid-svg-icons' import { - faBookmark as faBookmarkReg, faFlag } from '@fortawesome/free-regular-svg-icons' library.add( faEllipsisH, - faBookmark, - faBookmarkReg, faEyeSlash, faThumbtack, faShareAlt, @@ -59,16 +55,6 @@ const ExtraButtons = { .then(() => this.$emit('onSuccess')) .catch(err => this.$emit('onError', err.error.error)) }, - bookmarkStatus () { - this.$store.dispatch('bookmark', { id: this.status.id }) - .then(() => this.$emit('onSuccess')) - .catch(err => this.$emit('onError', err.error.error)) - }, - unbookmarkStatus () { - this.$store.dispatch('unbookmark', { id: this.status.id }) - .then(() => this.$emit('onSuccess')) - .catch(err => this.$emit('onError', err.error.error)) - }, reportStatus () { this.$store.dispatch('openUserReportingModal', { userId: this.status.user.id, statusIds: [this.status.id] }) } diff --git a/src/components/extra_buttons/extra_buttons.vue b/src/components/extra_buttons/extra_buttons.vue index a3c3c767..9828f6aa 100644 --- a/src/components/extra_buttons/extra_buttons.vue +++ b/src/components/extra_buttons/extra_buttons.vue @@ -51,28 +51,6 @@ icon="thumbtack" /><span>{{ $t("status.unpin") }}</span> </button> - <button - v-if="!status.bookmarked" - class="button-default dropdown-item dropdown-item-icon" - @click.prevent="bookmarkStatus" - @click="close" - > - <FAIcon - fixed-width - :icon="['far', 'bookmark']" - /><span>{{ $t("status.bookmark") }}</span> - </button> - <button - v-if="status.bookmarked" - class="button-default dropdown-item dropdown-item-icon" - @click.prevent="unbookmarkStatus" - @click="close" - > - <FAIcon - fixed-width - icon="bookmark" - /><span>{{ $t("status.unbookmark") }}</span> - </button> <button v-if="canDelete" class="button-default dropdown-item dropdown-item-icon" diff --git a/src/components/status/status.js b/src/components/status/status.js index e54be241..9219e6f3 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -2,6 +2,7 @@ import ReplyButton from '../reply_button/reply_button.vue' import FavoriteButton from '../favorite_button/favorite_button.vue' import ReactButton from '../react_button/react_button.vue' import RetweetButton from '../retweet_button/retweet_button.vue' +import BookmarkButton from '../bookmark_button/bookmark_button.vue' import ExtraButtons from '../extra_buttons/extra_buttons.vue' import PostStatusForm from '../post_status_form/post_status_form.vue' import UserCard from '../user_card/user_card.vue' @@ -103,6 +104,7 @@ const Status = { FavoriteButton, ReactButton, RetweetButton, + BookmarkButton, ExtraButtons, PostStatusForm, UserCard, diff --git a/src/components/status/status.vue b/src/components/status/status.vue index 3de4c471..e26266ae 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -440,6 +440,10 @@ v-if="loggedIn" :status="status" /> + <BookmarkButton + v-if="loggedIn" + :status="status" + /> <extra-buttons :status="status" @onError="showError" diff --git a/src/i18n/en.json b/src/i18n/en.json index 76a871fb..ad397cfa 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -869,7 +869,8 @@ "user_settings": "User Settings", "accept_follow_request": "Accept follow request", "reject_follow_request": "Reject follow request", - "bookmark": "Bookmark" + "bookmark": "Bookmark", + "unbookmark": "Unbookmark" }, "upload": { "error": {