From e4a6eae40ee366833c61ed3789d2ff607271ae78 Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Wed, 6 Jun 2018 00:42:15 +0900
Subject: [PATCH] refs #363 Open account profile when click account name in
toot
---
.../TimelineSpace/Contents/Cards/Toot.vue | 19 ++++++++++++++++-
.../TimelineSpace/Contents/SideBar.vue | 15 ++++++++++++-
.../SideBar/AccountProfile/Followers.vue | 2 +-
.../SideBar/AccountProfile/Follows.vue | 2 +-
src/renderer/components/utils/link.js | 13 ++++++++++++
.../Contents/SideBar/AccountProfile.js | 21 +++++++++++++++++++
6 files changed, 68 insertions(+), 4 deletions(-)
diff --git a/src/renderer/components/TimelineSpace/Contents/Cards/Toot.vue b/src/renderer/components/TimelineSpace/Contents/Cards/Toot.vue
index d338f5ed..160cb1eb 100644
--- a/src/renderer/components/TimelineSpace/Contents/Cards/Toot.vue
+++ b/src/renderer/components/TimelineSpace/Contents/Cards/Toot.vue
@@ -100,7 +100,7 @@
import moment from 'moment'
import { shell, clipboard } from 'electron'
import { mapState } from 'vuex'
-import { findLink, isTag } from '../../../utils/link'
+import { findAccount, findLink, isTag } from '../../../utils/link'
export default {
name: 'toot',
@@ -161,6 +161,23 @@ export default {
this.$router.push({ path: tag })
return tag
}
+ const accountURL = findAccount(e.target)
+ if (accountURL !== null) {
+ this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
+ this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/searchAccount', accountURL)
+ .then((account) => {
+ this.$store.dispatch('TimelineSpace/Contents/SideBar/openAccountComponent')
+ this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/changeAccount', account)
+ })
+ .catch(() => {
+ this.$message({
+ message: 'Account not found',
+ type: 'error'
+ })
+ this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', false)
+ })
+ return accountURL
+ }
const link = findLink(e.target)
if (link !== null) {
return shell.openExternal(link)
diff --git a/src/renderer/components/TimelineSpace/Contents/SideBar.vue b/src/renderer/components/TimelineSpace/Contents/SideBar.vue
index b1d62a15..da037607 100644
--- a/src/renderer/components/TimelineSpace/Contents/SideBar.vue
+++ b/src/renderer/components/TimelineSpace/Contents/SideBar.vue
@@ -8,6 +8,14 @@
@@ -32,7 +40,8 @@ export default {
computed: {
...mapState({
openSideBar: state => state.TimelineSpace.Contents.SideBar.openSideBar,
- component: state => state.TimelineSpace.Contents.SideBar.component
+ component: state => state.TimelineSpace.Contents.SideBar.component,
+ backgroundColor: state => state.App.theme.background_color
})
},
beforeDestroy () {
@@ -76,6 +85,10 @@ export default {
overflow: auto;
height: calc(100% - 30px);
}
+
+ .loading {
+ height: 100%;
+ }
}
.slide-detail-enter-active, .slide-detail-leave-active {
diff --git a/src/renderer/components/TimelineSpace/Contents/SideBar/AccountProfile/Followers.vue b/src/renderer/components/TimelineSpace/Contents/SideBar/AccountProfile/Followers.vue
index f668a712..51b13b97 100644
--- a/src/renderer/components/TimelineSpace/Contents/SideBar/AccountProfile/Followers.vue
+++ b/src/renderer/components/TimelineSpace/Contents/SideBar/AccountProfile/Followers.vue
@@ -31,7 +31,7 @@ export default {
load () {
this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/Followers/fetchFollowers', this.account)
.catch(() => {
- this.message({
+ this.$message({
message: 'Could not get followers',
type: 'error'
})
diff --git a/src/renderer/components/TimelineSpace/Contents/SideBar/AccountProfile/Follows.vue b/src/renderer/components/TimelineSpace/Contents/SideBar/AccountProfile/Follows.vue
index c777f007..a6ef5343 100644
--- a/src/renderer/components/TimelineSpace/Contents/SideBar/AccountProfile/Follows.vue
+++ b/src/renderer/components/TimelineSpace/Contents/SideBar/AccountProfile/Follows.vue
@@ -31,7 +31,7 @@ export default {
load () {
this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/Follows/fetchFollows', this.account)
.catch(() => {
- this.message({
+ this.$message({
message: 'Could not get follows',
type: 'error'
})
diff --git a/src/renderer/components/utils/link.js b/src/renderer/components/utils/link.js
index ef4737cf..6eb0cf10 100644
--- a/src/renderer/components/utils/link.js
+++ b/src/renderer/components/utils/link.js
@@ -23,3 +23,16 @@ export function isTag (target) {
}
return isTag(target.parentNode)
}
+
+export function findAccount (target) {
+ if (target.getAttribute('class') && target.getAttribute('class').includes('u-url')) {
+ return target.href
+ }
+ if (target.parentNode === undefined || target.parentNode === null) {
+ return null
+ }
+ if (target.parentNode.getAttribute('class') === 'toot') {
+ return null
+ }
+ return findAccount(target.parentNode)
+}
diff --git a/src/renderer/store/TimelineSpace/Contents/SideBar/AccountProfile.js b/src/renderer/store/TimelineSpace/Contents/SideBar/AccountProfile.js
index 8b0ecb84..85b0bbf6 100644
--- a/src/renderer/store/TimelineSpace/Contents/SideBar/AccountProfile.js
+++ b/src/renderer/store/TimelineSpace/Contents/SideBar/AccountProfile.js
@@ -27,6 +27,21 @@ const AccountProfile = {
}
},
actions: {
+ searchAccount ({ commit, rootState }, accountURL) {
+ return new Promise((resolve, reject) => {
+ const client = new Mastodon(
+ {
+ access_token: rootState.TimelineSpace.account.accessToken,
+ api_url: rootState.TimelineSpace.account.baseURL + '/api/v1'
+ }
+ )
+ client.get('/search', { q: accountURL }, (err, data, res) => {
+ if (err) return reject(err)
+ if (data.accounts.length <= 0) return reject(new AccountNotFound('not found'))
+ resolve(data.accounts[0])
+ })
+ })
+ },
changeAccount ({ commit, dispatch }, account) {
dispatch('fetchRelationship', account)
commit('changeAccount', account)
@@ -84,4 +99,10 @@ const AccountProfile = {
}
}
+class AccountNotFound {
+ constructor (msg) {
+ this.msg = msg
+ }
+}
+
export default AccountProfile