aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/components/moderation_tools/moderation_tools.vue235
-rw-r--r--src/components/progress_button/progress_button.vue5
-rw-r--r--src/components/user_card/user_card.vue376
3 files changed, 424 insertions, 192 deletions
diff --git a/src/components/moderation_tools/moderation_tools.vue b/src/components/moderation_tools/moderation_tools.vue
index 80f6858e..f1ab67a6 100644
--- a/src/components/moderation_tools/moderation_tools.vue
+++ b/src/components/moderation_tools/moderation_tools.vue
@@ -1,85 +1,166 @@
<template>
-<div>
- <Popper
- trigger="click"
- @hide='showDropDown = false'
- append-to-body
- :options="{
- placement: 'bottom-end',
- modifiers: {
- arrow: { enabled: true },
- offset: { offset: '0, 5px' },
- }
- }">
- <div class="popper-wrapper">
- <div class="dropdown-menu">
- <span v-if='user.is_local'>
- <button class="dropdown-item" @click='toggleRight("admin")'>
- {{ $t(!!user.rights.admin ? 'user_card.admin_menu.revoke_admin' : 'user_card.admin_menu.grant_admin') }}
+ <div>
+ <Popper
+ trigger="click"
+ append-to-body
+ :options="{
+ placement: 'bottom-end',
+ modifiers: {
+ arrow: { enabled: true },
+ offset: { offset: '0, 5px' },
+ }
+ }"
+ @hide="showDropDown = false"
+ >
+ <div class="popper-wrapper">
+ <div class="dropdown-menu">
+ <span v-if="user.is_local">
+ <button
+ class="dropdown-item"
+ @click="toggleRight(&quot;admin&quot;)"
+ >
+ {{ $t(!!user.rights.admin ? 'user_card.admin_menu.revoke_admin' : 'user_card.admin_menu.grant_admin') }}
+ </button>
+ <button
+ class="dropdown-item"
+ @click="toggleRight(&quot;moderator&quot;)"
+ >
+ {{ $t(!!user.rights.moderator ? 'user_card.admin_menu.revoke_moderator' : 'user_card.admin_menu.grant_moderator') }}
+ </button>
+ <div
+ role="separator"
+ class="dropdown-divider"
+ />
+ </span>
+ <button
+ class="dropdown-item"
+ @click="toggleActivationStatus()"
+ >
+ {{ $t(!!user.deactivated ? 'user_card.admin_menu.activate_account' : 'user_card.admin_menu.deactivate_account') }}
</button>
- <button class="dropdown-item" @click='toggleRight("moderator")'>
- {{ $t(!!user.rights.moderator ? 'user_card.admin_menu.revoke_moderator' : 'user_card.admin_menu.grant_moderator') }}
+ <button
+ class="dropdown-item"
+ @click="deleteUserDialog(true)"
+ >
+ {{ $t('user_card.admin_menu.delete_account') }}
</button>
- <div role="separator" class="dropdown-divider"></div>
- </span>
- <button class="dropdown-item" @click='toggleActivationStatus()'>
- {{ $t(!!user.deactivated ? 'user_card.admin_menu.activate_account' : 'user_card.admin_menu.deactivate_account') }}
- </button>
- <button class="dropdown-item" @click='deleteUserDialog(true)'>
- {{ $t('user_card.admin_menu.delete_account') }}
- </button>
- <div role="separator" class="dropdown-divider" v-if='hasTagPolicy'></div>
- <span v-if='hasTagPolicy'>
- <button class="dropdown-item" @click='toggleTag(tags.FORCE_NSFW)'>
- {{ $t('user_card.admin_menu.force_nsfw') }}
- <span class="menu-checkbox" v-bind:class="{ 'menu-checkbox-checked': hasTag(tags.FORCE_NSFW) }"></span>
- </button>
- <button class="dropdown-item" @click='toggleTag(tags.STRIP_MEDIA)'>
- {{ $t('user_card.admin_menu.strip_media') }}
- <span class="menu-checkbox" v-bind:class="{ 'menu-checkbox-checked': hasTag(tags.STRIP_MEDIA) }"></span>
- </button>
- <button class="dropdown-item" @click='toggleTag(tags.FORCE_UNLISTED)'>
- {{ $t('user_card.admin_menu.force_unlisted') }}
- <span class="menu-checkbox" v-bind:class="{ 'menu-checkbox-checked': hasTag(tags.FORCE_UNLISTED) }"></span>
- </button>
- <button class="dropdown-item" @click='toggleTag(tags.SANDBOX)'>
- {{ $t('user_card.admin_menu.sandbox') }}
- <span class="menu-checkbox" v-bind:class="{ 'menu-checkbox-checked': hasTag(tags.SANDBOX) }"></span>
- </button>
- <button class="dropdown-item" v-if='user.is_local' @click='toggleTag(tags.DISABLE_REMOTE_SUBSCRIPTION)'>
- {{ $t('user_card.admin_menu.disable_remote_subscription') }}
- <span class="menu-checkbox" v-bind:class="{ 'menu-checkbox-checked': hasTag(tags.DISABLE_REMOTE_SUBSCRIPTION) }"></span>
- </button>
- <button class="dropdown-item" v-if='user.is_local' @click='toggleTag(tags.DISABLE_ANY_SUBSCRIPTION)'>
- {{ $t('user_card.admin_menu.disable_any_subscription') }}
- <span class="menu-checkbox" v-bind:class="{ 'menu-checkbox-checked': hasTag(tags.DISABLE_ANY_SUBSCRIPTION) }"></span>
- </button>
- <button class="dropdown-item" v-if='user.is_local' @click='toggleTag(tags.QUARANTINE)'>
- {{ $t('user_card.admin_menu.quarantine') }}
- <span class="menu-checkbox" v-bind:class="{ 'menu-checkbox-checked': hasTag(tags.QUARANTINE) }"></span>
- </button>
- </span>
+ <div
+ v-if="hasTagPolicy"
+ role="separator"
+ class="dropdown-divider"
+ />
+ <span v-if="hasTagPolicy">
+ <button
+ class="dropdown-item"
+ @click="toggleTag(tags.FORCE_NSFW)"
+ >
+ {{ $t('user_card.admin_menu.force_nsfw') }}
+ <span
+ class="menu-checkbox"
+ :class="{ 'menu-checkbox-checked': hasTag(tags.FORCE_NSFW) }"
+ />
+ </button>
+ <button
+ class="dropdown-item"
+ @click="toggleTag(tags.STRIP_MEDIA)"
+ >
+ {{ $t('user_card.admin_menu.strip_media') }}
+ <span
+ class="menu-checkbox"
+ :class="{ 'menu-checkbox-checked': hasTag(tags.STRIP_MEDIA) }"
+ />
+ </button>
+ <button
+ class="dropdown-item"
+ @click="toggleTag(tags.FORCE_UNLISTED)"
+ >
+ {{ $t('user_card.admin_menu.force_unlisted') }}
+ <span
+ class="menu-checkbox"
+ :class="{ 'menu-checkbox-checked': hasTag(tags.FORCE_UNLISTED) }"
+ />
+ </button>
+ <button
+ class="dropdown-item"
+ @click="toggleTag(tags.SANDBOX)"
+ >
+ {{ $t('user_card.admin_menu.sandbox') }}
+ <span
+ class="menu-checkbox"
+ :class="{ 'menu-checkbox-checked': hasTag(tags.SANDBOX) }"
+ />
+ </button>
+ <button
+ v-if="user.is_local"
+ class="dropdown-item"
+ @click="toggleTag(tags.DISABLE_REMOTE_SUBSCRIPTION)"
+ >
+ {{ $t('user_card.admin_menu.disable_remote_subscription') }}
+ <span
+ class="menu-checkbox"
+ :class="{ 'menu-checkbox-checked': hasTag(tags.DISABLE_REMOTE_SUBSCRIPTION) }"
+ />
+ </button>
+ <button
+ v-if="user.is_local"
+ class="dropdown-item"
+ @click="toggleTag(tags.DISABLE_ANY_SUBSCRIPTION)"
+ >
+ {{ $t('user_card.admin_menu.disable_any_subscription') }}
+ <span
+ class="menu-checkbox"
+ :class="{ 'menu-checkbox-checked': hasTag(tags.DISABLE_ANY_SUBSCRIPTION) }"
+ />
+ </button>
+ <button
+ v-if="user.is_local"
+ class="dropdown-item"
+ @click="toggleTag(tags.QUARANTINE)"
+ >
+ {{ $t('user_card.admin_menu.quarantine') }}
+ <span
+ class="menu-checkbox"
+ :class="{ 'menu-checkbox-checked': hasTag(tags.QUARANTINE) }"
+ />
+ </button>
+ </span>
+ </div>
</div>
- </div>
- <button slot="reference" class="btn btn-default btn-block" v-bind:class="{ pressed: showDropDown }" @click='toggleMenu'>
- {{ $t('user_card.admin_menu.moderation') }}
- </button>
- </Popper>
- <portal to="modal">
- <DialogModal v-if="showDeleteUserDialog" :onCancel='deleteUserDialog.bind(this, false)'>
- <template slot="header">{{ $t('user_card.admin_menu.delete_user') }}</template>
- <p>{{ $t('user_card.admin_menu.delete_user_confirmation') }}</p>
- <template slot="footer">
- <button class="btn btn-default" @click='deleteUserDialog(false)'>
- {{ $t('general.cancel') }}
- </button>
- <button class="btn btn-default danger" @click='deleteUser()'>
+ <button
+ slot="reference"
+ class="btn btn-default btn-block"
+ :class="{ pressed: showDropDown }"
+ @click="toggleMenu"
+ >
+ {{ $t('user_card.admin_menu.moderation') }}
+ </button>
+ </Popper>
+ <portal to="modal">
+ <DialogModal
+ v-if="showDeleteUserDialog"
+ :on-cancel="deleteUserDialog.bind(this, false)"
+ >
+ <template slot="header">
{{ $t('user_card.admin_menu.delete_user') }}
- </button>
- </template>
- </DialogModal>
- </portal>
-</div>
+ </template>
+ <p>{{ $t('user_card.admin_menu.delete_user_confirmation') }}</p>
+ <template slot="footer">
+ <button
+ class="btn btn-default"
+ @click="deleteUserDialog(false)"
+ >
+ {{ $t('general.cancel') }}
+ </button>
+ <button
+ class="btn btn-default danger"
+ @click="deleteUser()"
+ >
+ {{ $t('user_card.admin_menu.delete_user') }}
+ </button>
+ </template>
+ </DialogModal>
+ </portal>
+ </div>
</template>
<script src="./moderation_tools.js"></script>
diff --git a/src/components/progress_button/progress_button.vue b/src/components/progress_button/progress_button.vue
index 53481b0d..283a51af 100644
--- a/src/components/progress_button/progress_button.vue
+++ b/src/components/progress_button/progress_button.vue
@@ -1,5 +1,8 @@
<template>
- <button :disabled="progress || disabled" @click="onClick">
+ <button
+ :disabled="progress || disabled"
+ @click="onClick"
+ >
<template v-if="progress && $slots.progress">
<slot name="progress" />
</template>
diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue
index 70d5a30d..f0ee6cae 100644
--- a/src/components/user_card/user_card.vue
+++ b/src/components/user_card/user_card.vue
@@ -1,131 +1,279 @@
<template>
-<div class="user-card" :class="classes" :style="style">
- <div class="panel-heading">
- <div class='user-info'>
- <div class='container'>
- <router-link :to="userProfileLink(user)">
- <UserAvatar :betterShadow="betterShadow" :user="user"/>
- </router-link>
- <div class="user-summary">
- <div class="top-line">
- <div :title="user.name" class='user-name' v-if="user.name_html" v-html="user.name_html"></div>
- <div :title="user.name" class='user-name' v-else>{{user.name}}</div>
- <router-link :to="{ name: 'user-settings' }" v-if="!isOtherUser">
- <i class="button-icon icon-wrench usersettings" :title="$t('tool_tip.user_settings')"></i>
- </router-link>
- <a :href="user.statusnet_profile_url" target="_blank" v-if="isOtherUser && !user.is_local">
- <i class="icon-link-ext usersettings"></i>
- </a>
+ <div
+ class="user-card"
+ :class="classes"
+ :style="style"
+ >
+ <div class="panel-heading">
+ <div class="user-info">
+ <div class="container">
+ <router-link :to="userProfileLink(user)">
+ <UserAvatar
+ :better-shadow="betterShadow"
+ :user="user"
+ />
+ </router-link>
+ <div class="user-summary">
+ <div class="top-line">
+ <!-- eslint-disable vue/no-v-html -->
+ <div
+ v-if="user.name_html"
+ :title="user.name"
+ class="user-name"
+ v-html="user.name_html"
+ />
+ <!-- eslint-enabled vue/no-v-html -->
+ <div
+ v-else
+ :title="user.name"
+ class="user-name"
+ >
+ {{ user.name }}
+ </div>
+ <router-link
+ v-if="!isOtherUser"
+ :to="{ name: 'user-settings' }"
+ >
+ <i
+ class="button-icon icon-wrench usersettings"
+ :title="$t('tool_tip.user_settings')"
+ />
+ </router-link>
+ <a
+ v-if="isOtherUser && !user.is_local"
+ :href="user.statusnet_profile_url"
+ target="_blank"
+ >
+ <i class="icon-link-ext usersettings" />
+ </a>
+ </div>
+
+ <div class="bottom-line">
+ <router-link
+ class="user-screen-name"
+ :to="userProfileLink(user)"
+ >
+ @{{ user.screen_name }}
+ </router-link>
+ <span
+ v-if="!hideBio && !!visibleRole"
+ class="alert staff"
+ >{{ visibleRole }}</span>
+ <span v-if="user.locked"><i class="icon icon-lock" /></span>
+ <span
+ v-if="!hideUserStatsLocal && !hideBio"
+ class="dailyAvg"
+ >{{ dailyAvg }} {{ $t('user_card.per_day') }}</span>
+ </div>
</div>
-
- <div class="bottom-line">
- <router-link class="user-screen-name" :to="userProfileLink(user)">@{{user.screen_name}}</router-link>
- <span class="alert staff" v-if="!hideBio && !!visibleRole">{{visibleRole}}</span>
- <span v-if="user.locked"><i class="icon icon-lock"></i></span>
- <span v-if="!hideUserStatsLocal && !hideBio" class="dailyAvg">{{dailyAvg}} {{ $t('user_card.per_day') }}</span>
- </div>
- </div>
- </div>
- <div class="user-meta">
- <div v-if="user.follows_you && loggedIn && isOtherUser" class="following">
- {{ $t('user_card.follows_you') }}
</div>
- <div class="highlighter" v-if="isOtherUser && (loggedIn || !switcher)">
- <!-- id's need to be unique, otherwise vue confuses which user-card checkbox belongs to -->
- <input class="userHighlightText" type="text" :id="'userHighlightColorTx'+user.id" v-if="userHighlightType !== 'disabled'" v-model="userHighlightColor"/>
- <input class="userHighlightCl" type="color" :id="'userHighlightColor'+user.id" v-if="userHighlightType !== 'disabled'" v-model="userHighlightColor"/>
- <label for="style-switcher" class='userHighlightSel select'>
- <select class="userHighlightSel" :id="'userHighlightSel'+user.id" v-model="userHighlightType">
- <option value="disabled">No highlight</option>
- <option value="solid">Solid bg</option>
- <option value="striped">Striped bg</option>
- <option value="side">Side stripe</option>
- </select>
- <i class="icon-down-open"/>
- </label>
+ <div class="user-meta">
+ <div
+ v-if="user.follows_you && loggedIn && isOtherUser"
+ class="following"
+ >
+ {{ $t('user_card.follows_you') }}
+ </div>
+ <div
+ v-if="isOtherUser && (loggedIn || !switcher)"
+ class="highlighter"
+ >
+ <!-- id's need to be unique, otherwise vue confuses which user-card checkbox belongs to -->
+ <input
+ v-if="userHighlightType !== 'disabled'"
+ :id="'userHighlightColorTx'+user.id"
+ v-model="userHighlightColor"
+ class="userHighlightText"
+ type="text"
+ >
+ <input
+ v-if="userHighlightType !== 'disabled'"
+ :id="'userHighlightColor'+user.id"
+ v-model="userHighlightColor"
+ class="userHighlightCl"
+ type="color"
+ >
+ <label
+ for="style-switcher"
+ class="userHighlightSel select"
+ >
+ <select
+ :id="'userHighlightSel'+user.id"
+ v-model="userHighlightType"
+ class="userHighlightSel"
+ >
+ <option value="disabled">No highlight</option>
+ <option value="solid">Solid bg</option>
+ <option value="striped">Striped bg</option>
+ <option value="side">Side stripe</option>
+ </select>
+ <i class="icon-down-open" />
+ </label>
+ </div>
</div>
- </div>
- <div v-if="loggedIn && isOtherUser" class="user-interactions">
- <div v-if="!user.following">
- <button @click="followUser" class="btn btn-default btn-block" :disabled="followRequestInProgress" :title="followRequestSent ? $t('user_card.follow_again') : ''">
- <template v-if="followRequestInProgress">
+ <div
+ v-if="loggedIn && isOtherUser"
+ class="user-interactions"
+ >
+ <div v-if="!user.following">
+ <button
+ class="btn btn-default btn-block"
+ :disabled="followRequestInProgress"
+ :title="followRequestSent ? $t('user_card.follow_again') : ''"
+ @click="followUser"
+ >
+ <template v-if="followRequestInProgress">
+ {{ $t('user_card.follow_progress') }}
+ </template>
+ <template v-else-if="followRequestSent">
+ {{ $t('user_card.follow_sent') }}
+ </template>
+ <template v-else>
+ {{ $t('user_card.follow') }}
+ </template>
+ </button>
+ </div>
+ <div v-else-if="followRequestInProgress">
+ <button
+ class="btn btn-default btn-block pressed"
+ disabled
+ :title="$t('user_card.follow_unfollow')"
+ @click="unfollowUser"
+ >
{{ $t('user_card.follow_progress') }}
- </template>
- <template v-else-if="followRequestSent">
- {{ $t('user_card.follow_sent') }}
- </template>
- <template v-else>
- {{ $t('user_card.follow') }}
- </template>
- </button>
- </div>
- <div v-else-if="followRequestInProgress">
- <button @click="unfollowUser" class="btn btn-default btn-block pressed" disabled :title="$t('user_card.follow_unfollow')">
- {{ $t('user_card.follow_progress') }}
- </button>
- </div>
- <div class="btn-group" v-else>
- <button @click="unfollowUser" class="btn btn-default pressed" :title="$t('user_card.follow_unfollow')">
- {{ $t('user_card.following') }}
- </button>
- <ProgressButton class="btn btn-default" :click="subscribeUser" :title="$t('user_card.subscribe')" v-if="!user.subscribed">
- <i class="icon-bell-alt" />
- </ProgressButton>
- <ProgressButton class="btn btn-default pressed" :click="unsubscribeUser" :title="$t('user_card.unsubscribe')" v-else>
- <i class="icon-bell-alt" />
- </ProgressButton>
- </div>
+ </button>
+ </div>
+ <div
+ v-else
+ class="btn-group"
+ >
+ <button
+ class="btn btn-default pressed"
+ :title="$t('user_card.follow_unfollow')"
+ @click="unfollowUser"
+ >
+ {{ $t('user_card.following') }}
+ </button>
+ <ProgressButton
+ v-if="!user.subscribed"
+ class="btn btn-default"
+ :click="subscribeUser"
+ :title="$t('user_card.subscribe')"
+ >
+ <i class="icon-bell-alt" />
+ </ProgressButton>
+ <ProgressButton
+ v-else
+ class="btn btn-default pressed"
+ :click="unsubscribeUser"
+ :title="$t('user_card.unsubscribe')"
+ >
+ <i class="icon-bell-alt" />
+ </ProgressButton>
+ </div>
- <div>
- <button @click="unmuteUser" class="btn btn-default btn-block pressed" v-if="user.muted">
- {{ $t('user_card.muted') }}
- </button>
- <button @click="muteUser" class="btn btn-default btn-block" v-else>
- {{ $t('user_card.mute') }}
- </button>
- </div>
+ <div>
+ <button
+ v-if="user.muted"
+ class="btn btn-default btn-block pressed"
+ @click="unmuteUser"
+ >
+ {{ $t('user_card.muted') }}
+ </button>
+ <button
+ v-else
+ class="btn btn-default btn-block"
+ @click="muteUser"
+ >
+ {{ $t('user_card.mute') }}
+ </button>
+ </div>
- <div>
- <button @click="unblockUser" class="btn btn-default btn-block pressed" v-if="user.statusnet_blocking">
- {{ $t('user_card.blocked') }}
- </button>
- <button @click="blockUser" class="btn btn-default btn-block" v-else>
- {{ $t('user_card.block') }}
- </button>
- </div>
+ <div>
+ <button
+ v-if="user.statusnet_blocking"
+ class="btn btn-default btn-block pressed"
+ @click="unblockUser"
+ >
+ {{ $t('user_card.blocked') }}
+ </button>
+ <button
+ v-else
+ class="btn btn-default btn-block"
+ @click="blockUser"
+ >
+ {{ $t('user_card.block') }}
+ </button>
+ </div>
- <div>
- <button @click="reportUser" class="btn btn-default btn-block">
- {{ $t('user_card.report') }}
- </button>
- </div>
+ <div>
+ <button
+ class="btn btn-default btn-block"
+ @click="reportUser"
+ >
+ {{ $t('user_card.report') }}
+ </button>
+ </div>
- <ModerationTools :user='user' v-if='loggedIn.role === "admin"' />
- </div>
- <div class="user-interactions" v-if="!loggedIn && user.is_local">
- <RemoteFollow :user="user" />
+ <ModerationTools
+ v-if="loggedIn.role === &quot;admin&quot;"
+ :user="user"
+ />
+ </div>
+ <div
+ v-if="!loggedIn && user.is_local"
+ class="user-interactions"
+ >
+ <RemoteFollow :user="user" />
+ </div>
</div>
</div>
- </div>
- <div class="panel-body" v-if="!hideBio">
- <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>{{user.statuses_count}} <br></span>
- </div>
- <div class="user-count" v-on:click.prevent="setProfileView('friends')">
- <h5>{{ $t('user_card.followees') }}</h5>
- <span>{{user.friends_count}}</span>
- </div>
- <div class="user-count" v-on:click.prevent="setProfileView('followers')">
- <h5>{{ $t('user_card.followers') }}</h5>
- <span>{{user.followers_count}}</span>
+ <div
+ v-if="!hideBio"
+ class="panel-body"
+ >
+ <div
+ v-if="!hideUserStatsLocal && switcher"
+ class="user-counts"
+ >
+ <div
+ class="user-count"
+ @click.prevent="setProfileView('statuses')"
+ >
+ <h5>{{ $t('user_card.statuses') }}</h5>
+ <span>{{ user.statuses_count }} <br></span>
+ </div>
+ <div
+ class="user-count"
+ @click.prevent="setProfileView('friends')"
+ >
+ <h5>{{ $t('user_card.followees') }}</h5>
+ <span>{{ user.friends_count }}</span>
+ </div>
+ <div
+ class="user-count"
+ @click.prevent="setProfileView('followers')"
+ >
+ <h5>{{ $t('user_card.followers') }}</h5>
+ <span>{{ user.followers_count }}</span>
+ </div>
</div>
+ <!-- eslint-disable vue/no-v-html -->
+ <p
+ v-if="!hideBio && user.description_html"
+ class="user-card-bio"
+ @click.prevent="linkClicked"
+ v-html="user.description_html"
+ />
+ <!-- eslint-enabled vue/no-v-html -->
+ <p
+ v-else-if="!hideBio"
+ class="user-card-bio"
+ >
+ {{ user.description }}
+ </p>
</div>
- <p @click.prevent="linkClicked" v-if="!hideBio && user.description_html" class="user-card-bio" v-html="user.description_html"></p>
- <p v-else-if="!hideBio" class="user-card-bio">{{ user.description }}</p>
</div>
-</div>
</template>
<script src="./user_card.js"></script>