diff options
Diffstat (limited to 'src/components')
| -rw-r--r-- | src/components/delete_button/delete_button.vue | 2 | ||||
| -rw-r--r-- | src/components/favorite_button/favorite_button.vue | 4 | ||||
| -rw-r--r-- | src/components/post_status_form/post_status_form.vue | 4 | ||||
| -rw-r--r-- | src/components/retweet_button/retweet_button.vue | 6 | ||||
| -rw-r--r-- | src/components/side_drawer/side_drawer.js | 14 | ||||
| -rw-r--r-- | src/components/side_drawer/side_drawer.vue | 64 | ||||
| -rw-r--r-- | src/components/status/status.vue | 14 | ||||
| -rw-r--r-- | src/components/style_switcher/preview.vue | 8 | ||||
| -rw-r--r-- | src/components/tab_switcher/tab_switcher.scss | 1 | ||||
| -rw-r--r-- | src/components/timeline/timeline.js | 36 | ||||
| -rw-r--r-- | src/components/timeline/timeline.vue | 33 | ||||
| -rw-r--r-- | src/components/user_card/user_card.js | 4 | ||||
| -rw-r--r-- | src/components/user_card/user_card.vue | 10 | ||||
| -rw-r--r-- | src/components/user_card_content/user_card_content.vue | 30 | ||||
| -rw-r--r-- | src/components/user_finder/user_finder.vue | 5 | ||||
| -rw-r--r-- | src/components/user_profile/user_profile.js | 18 | ||||
| -rw-r--r-- | src/components/user_profile/user_profile.vue | 66 | ||||
| -rw-r--r-- | src/components/user_settings/user_settings.vue | 6 |
18 files changed, 189 insertions, 136 deletions
diff --git a/src/components/delete_button/delete_button.vue b/src/components/delete_button/delete_button.vue index b458b0dc..f4c91cfd 100644 --- a/src/components/delete_button/delete_button.vue +++ b/src/components/delete_button/delete_button.vue @@ -1,7 +1,7 @@ <template> <div v-if="canDelete"> <a href="#" v-on:click.prevent="deleteStatus()"> - <i class='icon-cancel delete-status'></i> + <i class='button-icon icon-cancel delete-status'></i> </a> </div> </template> diff --git a/src/components/favorite_button/favorite_button.vue b/src/components/favorite_button/favorite_button.vue index 1decd070..05ce6bd0 100644 --- a/src/components/favorite_button/favorite_button.vue +++ b/src/components/favorite_button/favorite_button.vue @@ -1,10 +1,10 @@ <template> <div v-if="loggedIn"> - <i :class='classes' class='favorite-button fav-active' @click.prevent='favorite()' :title="$t('tool_tip.favorite')"/> + <i :class='classes' class='button-icon favorite-button fav-active' @click.prevent='favorite()' :title="$t('tool_tip.favorite')"/> <span v-if='!hidePostStatsLocal && status.fave_num > 0'>{{status.fave_num}}</span> </div> <div v-else> - <i :class='classes' class='favorite-button' :title="$t('tool_tip.favorite')"/> + <i :class='classes' class='button-icon favorite-button' :title="$t('tool_tip.favorite')"/> <span v-if='!hidePostStatsLocal && status.fave_num > 0'>{{status.fave_num}}</span> </div> </template> diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index b448faec..398f1871 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -75,11 +75,11 @@ </div> <div class='alert error' v-if="error"> Error: {{ error }} - <i class="icon-cancel" @click="clearError"></i> + <i class="button-icon icon-cancel" @click="clearError"></i> </div> <div class="attachments"> <div class="media-upload-wrapper" v-for="file in newStatus.files"> - <i class="fa icon-cancel" @click="removeMediaFile(file)"></i> + <i class="fa button-icon icon-cancel" @click="removeMediaFile(file)"></i> <div class="media-upload-container attachment"> <img class="thumbnail media-upload" :src="file.image" v-if="type(file) === 'image'"></img> <video v-if="type(file) === 'video'" :src="file.image" controls></video> diff --git a/src/components/retweet_button/retweet_button.vue b/src/components/retweet_button/retweet_button.vue index c957fb77..6370f9dc 100644 --- a/src/components/retweet_button/retweet_button.vue +++ b/src/components/retweet_button/retweet_button.vue @@ -1,15 +1,15 @@ <template> <div v-if="loggedIn"> <template v-if="visibility !== 'private' && visibility !== 'direct'"> - <i :class='classes' class='retweet-button icon-retweet rt-active' v-on:click.prevent='retweet()' :title="$t('tool_tip.repeat')"></i> + <i :class='classes' class='button-icon retweet-button icon-retweet rt-active' v-on:click.prevent='retweet()' :title="$t('tool_tip.repeat')"></i> <span v-if='!hidePostStatsLocal && status.repeat_num > 0'>{{status.repeat_num}}</span> </template> <template v-else> - <i :class='classes' class='icon-lock' :title="$t('timeline.no_retweet_hint')"></i> + <i :class='classes' class='button-icon icon-lock' :title="$t('timeline.no_retweet_hint')"></i> </template> </div> <div v-else-if="!loggedIn"> - <i :class='classes' class='icon-retweet' :title="$t('tool_tip.repeat')"></i> + <i :class='classes' class='button-icon icon-retweet' :title="$t('tool_tip.repeat')"></i> <span v-if='!hidePostStatsLocal && status.repeat_num > 0'>{{status.repeat_num}}</span> </div> </template> diff --git a/src/components/side_drawer/side_drawer.js b/src/components/side_drawer/side_drawer.js index bf9df753..b1b7701c 100644 --- a/src/components/side_drawer/side_drawer.js +++ b/src/components/side_drawer/side_drawer.js @@ -1,11 +1,19 @@ const SideDrawer = { - props: [ 'activatePanel', 'closed' ], + props: [ 'activatePanel', 'closed', 'clickoutside' ], computed: { currentUser () { return this.$store.state.users.currentUser + } + }, + methods: { + gotoPanel (panel) { + this.activatePanel(panel) + this.clickoutside && this.clickoutside() }, - chat () { - return this.$store.state.chat.channel + clickedOutside () { + if (typeof this.clickoutside === 'function') { + this.clickoutside() + } } } } diff --git a/src/components/side_drawer/side_drawer.vue b/src/components/side_drawer/side_drawer.vue index 8e2629b8..b5f399b5 100644 --- a/src/components/side_drawer/side_drawer.vue +++ b/src/components/side_drawer/side_drawer.vue @@ -1,39 +1,46 @@ <template> - <div> + <div class="side-drawer-container" :class="{'side-drawer-container-closed': closed, 'side-drawer-container-open': !closed}"> <div class="panel panel-default side-drawer" :class="{'side-drawer-closed': closed}"> <ul> <li v-if='currentUser'> - <router-link @click.native="activatePanel('timeline')" to='/main/friends'> + <a href="#" @click="gotoPanel('poststatus')">poststatus</a> + </li> + <li v-if='currentUser'> + <a href="#" @click="gotoPanel('notifications')">notifications</a> + </li> + <li v-if='currentUser'> + <router-link @click.native="gotoPanel('timeline')" to='/main/friends'> {{ $t("nav.timeline") }} </router-link> </li> <li v-if='currentUser'> - <router-link @click.native="activatePanel('timeline')" :to="{ name: 'mentions', params: { username: currentUser.screen_name } }"> + <router-link @click.native="gotoPanel('timeline')" :to="{ name: 'mentions', params: { username: currentUser.screen_name } }"> {{ $t("nav.mentions") }} </router-link> </li> <li v-if='currentUser'> - <router-link @click.native="activatePanel('timeline')" :to="{ name: 'dms', params: { username: currentUser.screen_name } }"> + <router-link @click.native="gotoPanel('timeline')" :to="{ name: 'dms', params: { username: currentUser.screen_name } }"> {{ $t("nav.dms") }} </router-link> </li> <li v-if='currentUser && currentUser.locked'> - <router-link @click.native="activatePanel('timeline')" to='/friend-requests'> + <router-link @click.native="gotoPanel('timeline')" to='/friend-requests'> {{ $t("nav.friend_requests") }} </router-link> </li> <li> - <router-link @click.native="activatePanel('timeline')" to='/main/public'> + <router-link @click.native="gotoPanel('timeline')" to='/main/public'> {{ $t("nav.public_tl") }} </router-link> </li> <li> - <router-link @click.native="activatePanel('timeline')" to='/main/all'> + <router-link @click.native="gotoPanel('timeline')" to='/main/all'> {{ $t("nav.twkn") }} </router-link> </li> </ul> </div> + <div class="side-drawer-click-outside" @click.stop.prevent="clickedOutside" :class="{'side-drawer-click-outside-closed': closed}"></div> </div> </template> @@ -42,21 +49,48 @@ <style lang="scss"> @import '../../_variables.scss'; +.side-drawer-container { + position: fixed; + z-index: 1000; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + align-items: stretch; +} + +.side-drawer-container-open { + transition-delay: 0.0s; + transition-property: left; +} + +.side-drawer-container-closed { + left: -100%; + transition-delay: 0.5s; + transition-property: left; +} + +.side-drawer-click-outside { + flex: 1 1 100%; +} + .side-drawer { - height: 100%; /* 100% Full-height */ - position: fixed; /* Stay in place */ - z-index: 1000; /* Stay on top */ - top: 0; /* Stay at the top */ - left: -200px; overflow-x: hidden; /* Disable horizontal scroll */ transition: 0.5s; /* 0.5 second transition effect to slide in the sidenav */ transition-timing-function: cubic-bezier(0, 1, 0.5, 1); - margin: 0; - padding-left: 200px; + margin: 0 0 0 -100px; + padding: 0 0 0 100px; + width: 75%; + flex: 0 0 75%; +} + +.side-drawer-click-outside-closed { + flex: 0 0 0; } .side-drawer-closed { - left: calc(-100% - 200px); + margin: 0 0 0 calc(-100% - 100px); } .side-drawer .panel { diff --git a/src/components/status/status.vue b/src/components/status/status.vue index 3283de45..1b102d93 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -8,7 +8,7 @@ </router-link> </small> <small class="muteWords">{{muteWordHits.join(', ')}}</small> - <a href="#" class="unmute" @click.prevent="toggleMute"><i class="icon-eye-off"></i></a> + <a href="#" class="unmute" @click.prevent="toggleMute"><i class="button-icon icon-eye-off"></i></a> </div> </template> <template v-else> @@ -48,7 +48,7 @@ </router-link> </span> <a v-if="isReply && !noReplyLinks" href="#" @click.prevent="gotoOriginal(status.in_reply_to_status_id)" :title="$t('tool_tip.reply')"> - <i class="icon-reply" @mouseenter="replyEnter(status.in_reply_to_status_id, $event)" @mouseout="replyLeave()"></i> + <i class="button-icon icon-reply" @mouseenter="replyEnter(status.in_reply_to_status_id, $event)" @mouseout="replyLeave()"></i> </a> </span> </div> @@ -63,18 +63,18 @@ <router-link class="timeago" @click.native="activatePanel('timeline')" :to="{ name: 'conversation', params: { id: status.id } }"> <timeago :since="status.created_at" :auto-update="60"></timeago> </router-link> - <div class="visibility-icon" v-if="status.visibility"> + <div class="button-icon visibility-icon" v-if="status.visibility"> <i :class="visibilityIcon(status.visibility)" :title="status.visibility | capitalize"></i> </div> <a :href="status.external_url" target="_blank" v-if="!status.is_local" class="source_url" title="Source"> - <i class="icon-link-ext-alt"></i> + <i class="button-icon icon-link-ext-alt"></i> </a> <template v-if="expandable"> <a href="#" @click.prevent="toggleExpanded" title="Expand"> - <i class="icon-plus-squared"></i> + <i class="button-icon icon-plus-squared"></i> </a> </template> - <a href="#" @click.prevent="toggleMute" v-if="unmuted"><i class="icon-eye-off"></i></a> + <a href="#" @click.prevent="toggleMute" v-if="unmuted"><i class="button-icon icon-eye-off"></i></a> </div> </div> @@ -101,7 +101,7 @@ <div v-if="!noHeading && !noReplyLinks" class='status-actions media-body'> <div v-if="loggedIn"> <a href="#" v-on:click.prevent="toggleReplying" :title="$t('tool_tip.reply')"> - <i class="icon-reply" :class="{'icon-reply-active': replying}"></i> + <i class="button-icon icon-reply" :class="{'icon-reply-active': replying}"></i> </a> </div> <retweet-button :visibility='status.visibility' :loggedIn='loggedIn' :status='status'></retweet-button> diff --git a/src/components/style_switcher/preview.vue b/src/components/style_switcher/preview.vue index 09a136e9..634f5b35 100644 --- a/src/components/style_switcher/preview.vue +++ b/src/components/style_switcher/preview.vue @@ -37,10 +37,10 @@ </i18n> <div class="icons"> - <i style="color: var(--cBlue)" class="icon-reply"/> - <i style="color: var(--cGreen)" class="icon-retweet"/> - <i style="color: var(--cOrange)" class="icon-star"/> - <i style="color: var(--cRed)" class="icon-cancel"/> + <i style="color: var(--cBlue)" class="button-icon icon-reply"/> + <i style="color: var(--cGreen)" class="button-icon icon-retweet"/> + <i style="color: var(--cOrange)" class="button-icon icon-star"/> + <i style="color: var(--cRed)" class="button-icon icon-cancel"/> </div> </div> </div> diff --git a/src/components/tab_switcher/tab_switcher.scss b/src/components/tab_switcher/tab_switcher.scss index 428335c0..f7449439 100644 --- a/src/components/tab_switcher/tab_switcher.scss +++ b/src/components/tab_switcher/tab_switcher.scss @@ -26,7 +26,6 @@ .tab-wrapper { height: 28px; - overflow: hidden; position: relative; display: flex; flex: 0 0 auto; diff --git a/src/components/timeline/timeline.js b/src/components/timeline/timeline.js index f28b85bd..98da8660 100644 --- a/src/components/timeline/timeline.js +++ b/src/components/timeline/timeline.js @@ -10,7 +10,8 @@ const Timeline = { 'timelineName', 'title', 'userId', - 'tag' + 'tag', + 'embedded' ], data () { return { @@ -20,15 +21,6 @@ const Timeline = { }, computed: { timelineError () { return this.$store.state.statuses.error }, - followers () { - return this.timeline.followers - }, - friends () { - return this.timeline.friends - }, - viewing () { - return this.timeline.viewing - }, newStatusCount () { return this.timeline.newStatusCount }, @@ -38,6 +30,14 @@ const Timeline = { } else { return ` (${this.newStatusCount})` } + }, + classes () { + return { + root: ['timeline'].concat(!this.embedded ? ['panel', 'panel-default'] : []), + header: ['timeline-heading'].concat(!this.embedded ? ['panel-heading'] : []), + body: ['timeline-body'].concat(!this.embedded ? ['panel-body'] : []), + footer: ['timeline-footer'].concat(!this.embedded ? ['panel-footer'] : []) + } } }, components: { @@ -60,12 +60,6 @@ const Timeline = { userId: this.userId, tag: this.tag }) - - // don't fetch followers for public, friend, twkn - if (this.timelineName === 'user') { - this.fetchFriends() - this.fetchFollowers() - } }, mounted () { if (typeof document.hidden !== 'undefined') { @@ -103,16 +97,6 @@ const Timeline = { tag: this.tag }).then(() => store.commit('setLoading', { timeline: this.timelineName, value: false })) }, 1000, this), - fetchFollowers () { - const id = this.userId - this.$store.state.api.backendInteractor.fetchFollowers({ id }) - .then((followers) => this.$store.dispatch('addFollowers', { followers })) - }, - fetchFriends () { - const id = this.userId - this.$store.state.api.backendInteractor.fetchFriends({ id }) - .then((friends) => this.$store.dispatch('addFriends', { friends })) - }, scrollLoad (e) { const bodyBRect = document.body.getBoundingClientRect() const height = Math.max(bodyBRect.height, -(bodyBRect.y)) diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue index bc7f74c2..6ba598c5 100644 --- a/src/components/timeline/timeline.vue +++ b/src/components/timeline/timeline.vue @@ -1,6 +1,6 @@ <template> - <div class="timeline panel panel-default" v-if="viewing == 'statuses'"> - <div class="panel-heading timeline-heading"> + <div :class="classes.root"> + <div :class="classes.header"> <div class="title"> {{title}} </div> @@ -14,43 +14,20 @@ {{$t('timeline.up_to_date')}} </div> </div> - <div class="panel-body"> + <div :class="classes.body"> <div class="timeline"> <status-or-conversation v-for="status in timeline.visibleStatuses" :key="status.id" v-bind:statusoid="status" class="status-fadein"></status-or-conversation> </div> </div> - <div class="panel-footer"> + <div :class="classes.footer"> <a href="#" v-on:click.prevent='fetchOlderStatuses()' v-if="!timeline.loading"> <div class="new-status-notification text-center panel-footer">{{$t('timeline.load_older')}}</div> </a> <div class="new-status-notification text-center panel-footer" v-else>...</div> </div> </div> - <div class="timeline panel panel-default" v-else-if="viewing == 'followers'"> - <div class="panel-heading timeline-heading"> - <div class="title"> - {{$t('user_card.followers')}} - </div> - </div> - <div class="panel-body"> - <div class="timeline"> - <user-card v-for="follower in followers" :key="follower.id" :user="follower" :showFollows="false"></user-card> - </div> - </div> - </div> - <div class="timeline panel panel-default" v-else-if="viewing == 'friends'"> - <div class="panel-heading timeline-heading"> - <div class="title"> - {{$t('user_card.followees')}} - </div> - </div> - <div class="panel-body"> - <div class="timeline"> - <user-card v-for="friend in friends" :key="friend.id" :user="friend" :showFollows="true"></user-card> - </div> - </div> - </div> </template> + <script src="./timeline.js"></script> <style lang="scss"> diff --git a/src/components/user_card/user_card.js b/src/components/user_card/user_card.js index ea893567..f0fff335 100644 --- a/src/components/user_card/user_card.js +++ b/src/components/user_card/user_card.js @@ -1,4 +1,5 @@ import UserCardContent from '../user_card_content/user_card_content.vue' +import StillImage from '../still-image/still-image.vue' import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator' const UserCard = { @@ -13,7 +14,8 @@ const UserCard = { } }, components: { - UserCardContent + UserCardContent, + StillImage }, computed: { currentUser () { return this.$store.state.users.currentUser } diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue index 0f163e36..cf69606d 100644 --- a/src/components/user_card/user_card.vue +++ b/src/components/user_card/user_card.vue @@ -1,7 +1,7 @@ <template> <div class="card"> <a href="#"> - <img @click.prevent="toggleUserExpanded" class="avatar" :src="user.profile_image_url"> + <StillImage @click.prevent="toggleUserExpanded" class="avatar" :src="user.profile_image_url"/> </a> <div class="usercard" v-if="userExpanded"> <user-card-content :user="user" :switcher="false"></user-card-content> @@ -41,6 +41,14 @@ margin-top:0.0em; text-align: left; width: 100%; + .user-name { + img { + object-fit: contain; + height: 16px; + width: 16px; + vertical-align: middle; + } + } } .follows-you { diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue index ed8bba43..c5222519 100644 --- a/src/components/user_card_content/user_card_content.vue +++ b/src/components/user_card_content/user_card_content.vue @@ -3,7 +3,7 @@ <div class="panel-heading text-center"> <div class='user-info'> <router-link @click.native="activatePanel && activatePanel('timeline')" :to="{ name: 'user-settings' }" style="float: right; margin-top:16px;" v-if="!isOtherUser"> - <i class="icon-cog usersettings" :title="$t('tool_tip.user_settings')"></i> + <i class="button-icon icon-cog usersettings" :title="$t('tool_tip.user_settings')"></i> </router-link> <a :href="user.statusnet_profile_url" target="_blank" class="floater" v-if="isOtherUser"> <i class="icon-link-ext usersettings"></i> @@ -104,16 +104,16 @@ </div> </div> <div class="panel-body profile-panel-body" v-if="!hideBio"> - <div v-if="!hideUserStatsLocal || switcher" class="user-counts" :class="{clickable: switcher}"> - <div class="user-count" v-on:click.prevent="setProfileView('statuses')" :class="{selected: selected === 'statuses'}"> + <div v-if="!hideUserStatsLocal || switcher" class="user-counts"> + <div class="user-count" v-on:click.prevent="setProfileView('statuses')"> <h5>{{ $t('user_card.statuses') }}</h5> <span v-if="!hideUserStatsLocal">{{user.statuses_count}} <br></span> </div> - <div class="user-count" v-on:click.prevent="setProfileView('friends')" :class="{selected: selected === 'friends'}"> + <div class="user-count" v-on:click.prevent="setProfileView('friends')"> <h5>{{ $t('user_card.followees') }}</h5> <span v-if="!hideUserStatsLocal">{{user.friends_count}}</span> </div> - <div class="user-count" v-on:click.prevent="setProfileView('followers')" :class="{selected: selected === 'followers'}"> + <div class="user-count" v-on:click.prevent="setProfileView('followers')"> <h5>{{ $t('user_card.followers') }}</h5> <span v-if="!hideUserStatsLocal">{{user.followers_count}}</span> </div> @@ -304,18 +304,6 @@ justify-content: space-between; color: $fallback--lightText; color: var(--lightText, $fallback--lightText); - - &.clickable { - .user-count { - cursor: pointer; - - &:hover:not(.selected) { - transition: border-bottom 100ms; - border-bottom: 3px solid $fallback--link; - border-bottom: 3px solid var(--link, $fallback--link); - } - } - } } .user-count { @@ -323,14 +311,6 @@ padding: .5em 0 .5em 0; margin: 0 .5em; - &.selected { - transition: none; - border-bottom: 5px solid $fallback--link; - border-bottom: 5px solid var(--link, $fallback--link); - border-radius: $fallback--btnRadius; - border-radius: var(--btnRadius, $fallback--btnRadius); - } - h5 { font-size:1em; font-weight: bolder; diff --git a/src/components/user_finder/user_finder.vue b/src/components/user_finder/user_finder.vue index 9efdfab7..eeb76c35 100644 --- a/src/components/user_finder/user_finder.vue +++ b/src/components/user_finder/user_finder.vue @@ -7,7 +7,7 @@ <button class="btn search-button" @click="findUser(username)"> <i class="icon-search"/> </button> - <i class="icon-cancel user-finder-icon" @click.prevent.stop="toggleHidden"/> + <i class="button-icon icon-cancel user-finder-icon" @click.prevent.stop="toggleHidden"/> </template> </div> </template> @@ -29,7 +29,8 @@ height: 29px; } .user-finder-input { - max-width: 80%; + // TODO: do this properly without a rough guesstimate of 2 icons + paddings + max-width: calc(100% - 30px - 30px - 20px); } .search-button { diff --git a/src/components/user_profile/user_profile.js b/src/components/user_profile/user_profile.js index 95d797a2..deee77dd 100644 --- a/src/components/user_profile/user_profile.js +++ b/src/components/user_profile/user_profile.js @@ -1,4 +1,5 @@ import UserCardContent from '../user_card_content/user_card_content.vue' +import UserCard from '../user_card/user_card.vue' import Timeline from '../timeline/timeline.vue' const UserProfile = { @@ -39,6 +40,16 @@ const UserProfile = { return this.$route.name === 'external-user-profile' } }, + methods: { + fetchFollowers () { + const id = this.userId + this.$store.dispatch('addFollowers', { id }) + }, + fetchFriends () { + const id = this.userId + this.$store.dispatch('addFriends', { id }) + } + }, watch: { userName () { if (this.isExternal) { @@ -55,10 +66,17 @@ const UserProfile = { this.$store.dispatch('stopFetching', 'user') this.$store.commit('clearTimeline', { timeline: 'user' }) this.$store.dispatch('startFetching', ['user', this.userId]) + }, + user () { + if (!this.user.followers) { + this.fetchFollowers() + this.fetchFriends() + } } }, components: { UserCardContent, + UserCard, Timeline } } diff --git a/src/components/user_profile/user_profile.vue b/src/components/user_profile/user_profile.vue index 4d2853a6..5c823b3d 100644 --- a/src/components/user_profile/user_profile.vue +++ b/src/components/user_profile/user_profile.vue @@ -1,20 +1,38 @@ <template> - <div> - <div v-if="user" class="user-profile panel panel-default"> - <user-card-content :user="user" :switcher="true" :selected="timeline.viewing"></user-card-content> - </div> - <div v-else class="panel user-profile-placeholder"> - <div class="panel-heading"> - <div class="title"> - {{ $t('settings.profile_tab') }} +<div> + <div v-if="user" class="user-profile panel panel-default"> + <user-card-content :user="user" :switcher="true" :selected="timeline.viewing"></user-card-content> + <tab-switcher> + <Timeline :label="$t('user_card.statuses')" :embedded="true" :title="$t('user_profile.timeline_title')" :timeline="timeline" :timeline-name="'user'" :user-id="userId"/> + <div :label="$t('user_card.followees')"> + <div v-if="friends"> + <user-card v-for="friend in friends" :key="friend.id" :user="friend" :showFollows="true"></user-card> + </div> + <div class="userlist-placeholder" v-else> + <i class="icon-spin3 animate-spin"></i> + </div> + </div> + <div :label="$t('user_card.followers')"> + <div v-if="followers"> + <user-card v-for="follower in followers" :key="follower.id" :user="follower" :showFollows="false"></user-card> + </div> + <div class="userlist-placeholder" v-else> + <i class="icon-spin3 animate-spin"></i> </div> </div> - <div class="panel-body"> - <i class="icon-spin3 animate-spin"></i> + </tab-switcher> + </div> + <div v-else class="panel user-profile-placeholder"> + <div class="panel-heading"> + <div class="title"> + {{ $t('settings.profile_tab') }} </div> </div> - <Timeline :title="$t('user_profile.timeline_title')" :timeline="timeline" :timeline-name="'user'" :user-id="userId"/> + <div class="panel-body"> + <i class="icon-spin3 animate-spin"></i> + </div> </div> +</div> </template> <script src="./user_profile.js"></script> @@ -24,12 +42,36 @@ .user-profile { flex: 2; flex-basis: 500px; - padding-bottom: 10px; + .panel-heading { background: transparent; flex-direction: column; align-items: stretch; } + .userlist-placeholder { + display: flex; + justify-content: center; + align-items: middle; + padding: 2em; + } + + .timeline-heading { + display: flex; + justify-content: center; + + .loadmore-button, .alert { + flex: 1; + } + + .loadmore-button { + height: 28px; + margin: 10px .6em; + } + + .title, .loadmore-text { + display: none + } + } } .user-profile-placeholder { .panel-body { diff --git a/src/components/user_settings/user_settings.vue b/src/components/user_settings/user_settings.vue index b238571d..4bc2eeec 100644 --- a/src/components/user_settings/user_settings.vue +++ b/src/components/user_settings/user_settings.vue @@ -49,7 +49,7 @@ <button class="btn btn-default" v-else-if="avatarPreview" @click="submitAvatar">{{$t('general.submit')}}</button> <div class='alert error' v-if="avatarUploadError"> Error: {{ avatarUploadError }} - <i class="icon-cancel" @click="clearUploadError('avatar')"></i> + <i class="button-icon icon-cancel" @click="clearUploadError('avatar')"></i> </div> </div> <div class="setting-item"> @@ -66,7 +66,7 @@ <button class="btn btn-default" v-else-if="bannerPreview" @click="submitBanner">{{$t('general.submit')}}</button> <div class='alert error' v-if="bannerUploadError"> Error: {{ bannerUploadError }} - <i class="icon-cancel" @click="clearUploadError('banner')"></i> + <i class="button-icon icon-cancel" @click="clearUploadError('banner')"></i> </div> </div> <div class="setting-item"> @@ -81,7 +81,7 @@ <button class="btn btn-default" v-else-if="backgroundPreview" @click="submitBg">{{$t('general.submit')}}</button> <div class='alert error' v-if="backgroundUploadError"> Error: {{ backgroundUploadError }} - <i class="icon-cancel" @click="clearUploadError('background')"></i> + <i class="button-icon icon-cancel" @click="clearUploadError('background')"></i> </div> </div> </div> |
