forked from AkkomaGang/akkoma-fe
Merge branch 'hide-statistics' into 'develop'
Add options for hiding post and user engagement statistics. See merge request pleroma/pleroma-fe!336
This commit is contained in:
commit
e64af481d2
12 changed files with 59 additions and 10 deletions
|
@ -2,6 +2,9 @@ const FavoriteButton = {
|
||||||
props: ['status', 'loggedIn'],
|
props: ['status', 'loggedIn'],
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
hidePostStatsLocal: typeof this.$store.state.config.hidePostStats === 'undefined'
|
||||||
|
? this.$store.state.instance.hidePostStats
|
||||||
|
: this.$store.state.config.hidePostStats,
|
||||||
animated: false
|
animated: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
<template>
|
<template>
|
||||||
<div v-if="loggedIn">
|
<div v-if="loggedIn">
|
||||||
<i :class='classes' class='favorite-button fav-active' @click.prevent='favorite()'/>
|
<i :class='classes' class='favorite-button fav-active' @click.prevent='favorite()'/>
|
||||||
<span v-if='status.fave_num > 0'>{{status.fave_num}}</span>
|
<span v-if='!hidePostStatsLocal && status.fave_num > 0'>{{status.fave_num}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<i :class='classes' class='favorite-button'/>
|
<i :class='classes' class='favorite-button'/>
|
||||||
<span v-if='status.fave_num > 0'>{{status.fave_num}}</span>
|
<span v-if='!hidePostStatsLocal && status.fave_num > 0'>{{status.fave_num}}</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,9 @@ const RetweetButton = {
|
||||||
props: ['status', 'loggedIn', 'visibility'],
|
props: ['status', 'loggedIn', 'visibility'],
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
hidePostStatsLocal: typeof this.$store.state.config.hidePostStats === 'undefined'
|
||||||
|
? this.$store.state.instance.hidePostStats
|
||||||
|
: this.$store.state.config.hidePostStats,
|
||||||
animated: false
|
animated: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<div v-if="loggedIn">
|
<div v-if="loggedIn">
|
||||||
<template v-if="visibility !== 'private' && visibility !== 'direct'">
|
<template v-if="visibility !== 'private' && visibility !== 'direct'">
|
||||||
<i :class='classes' class='icon-retweet rt-active' v-on:click.prevent='retweet()'></i>
|
<i :class='classes' class='icon-retweet rt-active' v-on:click.prevent='retweet()'></i>
|
||||||
<span v-if='status.repeat_num > 0'>{{status.repeat_num}}</span>
|
<span v-if='!hidePostStatsLocal && status.repeat_num > 0'>{{status.repeat_num}}</span>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<i :class='classes' class='icon-lock' :title="$t('timeline.no_retweet_hint')"></i>
|
<i :class='classes' class='icon-lock' :title="$t('timeline.no_retweet_hint')"></i>
|
||||||
|
@ -10,7 +10,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div v-else-if="!loggedIn">
|
<div v-else-if="!loggedIn">
|
||||||
<i :class='classes' class='icon-retweet'></i>
|
<i :class='classes' class='icon-retweet'></i>
|
||||||
<span v-if='status.repeat_num > 0'>{{status.repeat_num}}</span>
|
<span v-if='!hidePostStatsLocal && status.repeat_num > 0'>{{status.repeat_num}}</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,14 @@ const settings = {
|
||||||
hideAttachmentsLocal: user.hideAttachments,
|
hideAttachmentsLocal: user.hideAttachments,
|
||||||
hideAttachmentsInConvLocal: user.hideAttachmentsInConv,
|
hideAttachmentsInConvLocal: user.hideAttachmentsInConv,
|
||||||
hideNsfwLocal: user.hideNsfw,
|
hideNsfwLocal: user.hideNsfw,
|
||||||
|
hidePostStatsLocal: typeof user.hidePostStats === 'undefined'
|
||||||
|
? instance.hidePostStats
|
||||||
|
: user.hidePostStats,
|
||||||
|
hidePostStatsDefault: this.$t('settings.values.' + instance.hidePostStats),
|
||||||
|
hideUserStatsLocal: typeof user.hideUserStats === 'undefined'
|
||||||
|
? instance.hideUserStats
|
||||||
|
: user.hideUserStats,
|
||||||
|
hideUserStatsDefault: this.$t('settings.values.' + instance.hideUserStats),
|
||||||
notificationVisibilityLocal: user.notificationVisibility,
|
notificationVisibilityLocal: user.notificationVisibility,
|
||||||
replyVisibilityLocal: user.replyVisibility,
|
replyVisibilityLocal: user.replyVisibility,
|
||||||
loopVideoLocal: user.loopVideo,
|
loopVideoLocal: user.loopVideo,
|
||||||
|
@ -56,6 +64,12 @@ const settings = {
|
||||||
hideAttachmentsInConvLocal (value) {
|
hideAttachmentsInConvLocal (value) {
|
||||||
this.$store.dispatch('setOption', { name: 'hideAttachmentsInConv', value })
|
this.$store.dispatch('setOption', { name: 'hideAttachmentsInConv', value })
|
||||||
},
|
},
|
||||||
|
hidePostStatsLocal (value) {
|
||||||
|
this.$store.dispatch('setOption', { name: 'hidePostStats', value })
|
||||||
|
},
|
||||||
|
hideUserStatsLocal (value) {
|
||||||
|
this.$store.dispatch('setOption', { name: 'hideUserStats', value })
|
||||||
|
},
|
||||||
hideNsfwLocal (value) {
|
hideNsfwLocal (value) {
|
||||||
this.$store.dispatch('setOption', { name: 'hideNsfw', value })
|
this.$store.dispatch('setOption', { name: 'hideNsfw', value })
|
||||||
},
|
},
|
||||||
|
|
|
@ -138,6 +138,18 @@
|
||||||
<i class="icon-down-open"/>
|
<i class="icon-down-open"/>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
<input type="checkbox" id="hidePostStats" v-model="hidePostStatsLocal">
|
||||||
|
<label for="hidePostStats">
|
||||||
|
{{$t('settings.hide_post_stats')}} {{$t('settings.instance_default', { value: hidePostStatsDefault })}}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<input type="checkbox" id="hideUserStats" v-model="hideUserStatsLocal">
|
||||||
|
<label for="hideUserStats">
|
||||||
|
{{$t('settings.hide_user_stats')}} {{$t('settings.instance_default', { value: hideUserStatsDefault })}}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="setting-item">
|
<div class="setting-item">
|
||||||
<p>{{$t('settings.filtering_explanation')}}</p>
|
<p>{{$t('settings.filtering_explanation')}}</p>
|
||||||
|
|
|
@ -3,6 +3,13 @@ import { hex2rgb } from '../../services/color_convert/color_convert.js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: [ 'user', 'switcher', 'selected', 'hideBio' ],
|
props: [ 'user', 'switcher', 'selected', 'hideBio' ],
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
hideUserStatsLocal: typeof this.$store.state.config.hideUserStats === 'undefined'
|
||||||
|
? this.$store.state.instance.hideUserStats
|
||||||
|
: this.$store.state.config.hideUserStats
|
||||||
|
}
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
headingStyle () {
|
headingStyle () {
|
||||||
const color = this.$store.state.config.colors.bg
|
const color = this.$store.state.config.colors.bg
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
<div :title="user.name" class='user-name' v-else>{{user.name}}</div>
|
<div :title="user.name" class='user-name' v-else>{{user.name}}</div>
|
||||||
<router-link class='user-screen-name':to="{ name: 'user-profile', params: { id: user.id } }">
|
<router-link class='user-screen-name':to="{ name: 'user-profile', params: { id: user.id } }">
|
||||||
<span>@{{user.screen_name}}</span><span v-if="user.locked"><i class="icon icon-lock"></i></span>
|
<span>@{{user.screen_name}}</span><span v-if="user.locked"><i class="icon icon-lock"></i></span>
|
||||||
<span class="dailyAvg">{{dailyAvg}} {{ $t('user_card.per_day') }}</span>
|
<span v-if="!hideUserStatsLocal" class="dailyAvg">{{dailyAvg}} {{ $t('user_card.per_day') }}</span>
|
||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -91,18 +91,18 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body profile-panel-body">
|
<div class="panel-body profile-panel-body">
|
||||||
<div class="user-counts" :class="{clickable: switcher}">
|
<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 class="user-count" v-on:click.prevent="setProfileView('statuses')" :class="{selected: selected === 'statuses'}">
|
||||||
<h5>{{ $t('user_card.statuses') }}</h5>
|
<h5>{{ $t('user_card.statuses') }}</h5>
|
||||||
<span>{{user.statuses_count}} <br></span>
|
<span v-if="!hideUserStatsLocal">{{user.statuses_count}} <br></span>
|
||||||
</div>
|
</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')" :class="{selected: selected === 'friends'}">
|
||||||
<h5>{{ $t('user_card.followees') }}</h5>
|
<h5>{{ $t('user_card.followees') }}</h5>
|
||||||
<span>{{user.friends_count}}</span>
|
<span v-if="!hideUserStatsLocal">{{user.friends_count}}</span>
|
||||||
</div>
|
</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')" :class="{selected: selected === 'followers'}">
|
||||||
<h5>{{ $t('user_card.followers') }}</h5>
|
<h5>{{ $t('user_card.followers') }}</h5>
|
||||||
<span>{{user.followers_count}}</span>
|
<span v-if="!hideUserStatsLocal">{{user.followers_count}}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p v-if="!hideBio && user.description_html" class="profile-bio" v-html="user.description_html"></p>
|
<p v-if="!hideBio && user.description_html" class="profile-bio" v-html="user.description_html"></p>
|
||||||
|
|
|
@ -111,6 +111,8 @@
|
||||||
"general": "General",
|
"general": "General",
|
||||||
"hide_attachments_in_convo": "Hide attachments in conversations",
|
"hide_attachments_in_convo": "Hide attachments in conversations",
|
||||||
"hide_attachments_in_tl": "Hide attachments in timeline",
|
"hide_attachments_in_tl": "Hide attachments in timeline",
|
||||||
|
"hide_post_stats": "Hide post statistics (e.g. the number of favorites)",
|
||||||
|
"hide_user_stats": "Hide user statistics (e.g. the number of followers)",
|
||||||
"import_followers_from_a_csv_file": "Import follows from a csv file",
|
"import_followers_from_a_csv_file": "Import follows from a csv file",
|
||||||
"import_theme": "Load preset",
|
"import_theme": "Load preset",
|
||||||
"inputRadius": "Input fields",
|
"inputRadius": "Input fields",
|
||||||
|
|
|
@ -100,6 +100,8 @@ window.fetch('/api/statusnet/config.json')
|
||||||
|
|
||||||
var theme = (config.theme)
|
var theme = (config.theme)
|
||||||
var background = (config.background)
|
var background = (config.background)
|
||||||
|
var hidePostStats = (config.hidePostStats)
|
||||||
|
var hideUserStats = (config.hideUserStats)
|
||||||
var logo = (config.logo)
|
var logo = (config.logo)
|
||||||
var logoMask = (typeof config.logoMask === 'undefined' ? true : config.logoMask)
|
var logoMask = (typeof config.logoMask === 'undefined' ? true : config.logoMask)
|
||||||
var logoMargin = (typeof config.logoMargin === 'undefined' ? 0 : config.logoMargin)
|
var logoMargin = (typeof config.logoMargin === 'undefined' ? 0 : config.logoMargin)
|
||||||
|
@ -113,6 +115,8 @@ window.fetch('/api/statusnet/config.json')
|
||||||
|
|
||||||
store.dispatch('setInstanceOption', { name: 'theme', value: theme })
|
store.dispatch('setInstanceOption', { name: 'theme', value: theme })
|
||||||
store.dispatch('setInstanceOption', { name: 'background', value: background })
|
store.dispatch('setInstanceOption', { name: 'background', value: background })
|
||||||
|
store.dispatch('setInstanceOption', { name: 'hidePostStats', value: hidePostStats })
|
||||||
|
store.dispatch('setInstanceOption', { name: 'hideUserStats', value: hideUserStats })
|
||||||
store.dispatch('setInstanceOption', { name: 'logo', value: logo })
|
store.dispatch('setInstanceOption', { name: 'logo', value: logo })
|
||||||
store.dispatch('setInstanceOption', { name: 'logoMask', value: logoMask })
|
store.dispatch('setInstanceOption', { name: 'logoMask', value: logoMask })
|
||||||
store.dispatch('setInstanceOption', { name: 'logoMargin', value: logoMargin })
|
store.dispatch('setInstanceOption', { name: 'logoMargin', value: logoMargin })
|
||||||
|
|
|
@ -18,6 +18,8 @@ const defaultState = {
|
||||||
scopeOptionsEnabled: true,
|
scopeOptionsEnabled: true,
|
||||||
formattingOptionsEnabled: false,
|
formattingOptionsEnabled: false,
|
||||||
collapseMessageWithSubject: false,
|
collapseMessageWithSubject: false,
|
||||||
|
hidePostStats: false,
|
||||||
|
hideUserStats: false,
|
||||||
disableChat: false,
|
disableChat: false,
|
||||||
|
|
||||||
// Nasty stuff
|
// Nasty stuff
|
||||||
|
|
|
@ -10,5 +10,7 @@
|
||||||
"showInstanceSpecificPanel": false,
|
"showInstanceSpecificPanel": false,
|
||||||
"scopeOptionsEnabled": false,
|
"scopeOptionsEnabled": false,
|
||||||
"formattingOptionsEnabled": false,
|
"formattingOptionsEnabled": false,
|
||||||
"collapseMessageWithSubject": false
|
"collapseMessageWithSubject": false,
|
||||||
|
"hidePostStats": false,
|
||||||
|
"hideUserStats": false
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue