mirror of
https://github.com/misskey-dev/misskey.git
synced 2026-06-07 19:44:17 +02:00
vue3: filterの移行 (#6590)
* bytes * notePage * number * acct, userName, userPage * Move methods property * fix * Delete unnecessary file
This commit is contained in:
@@ -59,6 +59,7 @@ import { faChartLine, faPlus, faHashtag, faRocket } from '@fortawesome/free-soli
|
||||
import { faBookmark, faCommentAlt } from '@fortawesome/free-regular-svg-icons';
|
||||
import XUserList from '../components/user-list.vue';
|
||||
import MkContainer from '../components/ui/container.vue';
|
||||
import number from '../filters/number';
|
||||
|
||||
export default defineComponent({
|
||||
metaInfo() {
|
||||
@@ -112,7 +113,7 @@ export default defineComponent({
|
||||
tagsLocal: [],
|
||||
tagsRemote: [],
|
||||
stats: null,
|
||||
num: Vue.filter('number'),
|
||||
num: number,
|
||||
faBookmark, faChartLine, faCommentAlt, faPlus, faHashtag, faRocket
|
||||
};
|
||||
},
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
<mk-avatar class="avatar" :user="req.follower"/>
|
||||
<div class="body">
|
||||
<div class="name">
|
||||
<router-link class="name" :to="req.follower | userPage" v-user-preview="req.follower.id"><mk-user-name :user="req.follower"/></router-link>
|
||||
<p class="acct">@{{ req.follower | acct }}</p>
|
||||
<router-link class="name" :to="userPage(req.follower)" v-user-preview="req.follower.id"><mk-user-name :user="req.follower"/></router-link>
|
||||
<p class="acct">@{{ acct(req.follower) }}</p>
|
||||
</div>
|
||||
<div class="description" v-if="req.follower.description" :title="req.follower.description">
|
||||
<mfm :text="req.follower.description" :is-note="false" :author="req.follower" :i="$store.state.i" :custom-emojis="req.follower.emojis" :plain="true" :nowrap="true"/>
|
||||
@@ -36,6 +36,7 @@
|
||||
import { defineComponent } from 'vue';
|
||||
import { faUserClock, faCheck, faTimes } from '@fortawesome/free-solid-svg-icons';
|
||||
import MkPagination from '../components/ui/pagination.vue';
|
||||
import { userPage, acct } from '../filters/user';
|
||||
|
||||
export default defineComponent({
|
||||
metaInfo() {
|
||||
@@ -68,7 +69,9 @@ export default defineComponent({
|
||||
this.$root.api('following/requests/reject', { userId: user.id }).then(() => {
|
||||
this.$refs.list.reload();
|
||||
});
|
||||
}
|
||||
},
|
||||
userPage,
|
||||
acct
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -24,31 +24,31 @@
|
||||
<div class="row">
|
||||
<div class="cell">
|
||||
<div class="label"><fa :icon="faCloudDownloadAlt" fixed-width class="icon"/>{{ $t('following') }}</div>
|
||||
<div class="data clickable" @click="showFollowing()">{{ instance.followingCount | number }}</div>
|
||||
<div class="data clickable" @click="showFollowing()">{{ number(instance.followingCount) }}</div>
|
||||
</div>
|
||||
<div class="cell">
|
||||
<div class="label"><fa :icon="faCloudUploadAlt" fixed-width class="icon"/>{{ $t('followers') }}</div>
|
||||
<div class="data clickable" @click="showFollowers()">{{ instance.followersCount | number }}</div>
|
||||
<div class="data clickable" @click="showFollowers()">{{ number(instance.followersCount) }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="cell">
|
||||
<div class="label"><fa :icon="faUsers" fixed-width class="icon"/>{{ $t('users') }}</div>
|
||||
<div class="data clickable" @click="showUsers()">{{ instance.usersCount | number }}</div>
|
||||
<div class="data clickable" @click="showUsers()">{{ number(instance.usersCount) }}</div>
|
||||
</div>
|
||||
<div class="cell">
|
||||
<div class="label"><fa :icon="faPencilAlt" fixed-width class="icon"/>{{ $t('notes') }}</div>
|
||||
<div class="data">{{ instance.notesCount | number }}</div>
|
||||
<div class="data">{{ number(instance.notesCount) }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="cell">
|
||||
<div class="label"><fa :icon="faFileImage" fixed-width class="icon"/>{{ $t('files') }}</div>
|
||||
<div class="data">{{ instance.driveFiles | number }}</div>
|
||||
<div class="data">{{ number(instance.driveFiles) }}</div>
|
||||
</div>
|
||||
<div class="cell">
|
||||
<div class="label"><fa :icon="faDatabase" fixed-width class="icon"/>{{ $t('storageUsage') }}</div>
|
||||
<div class="data">{{ instance.driveUsage | bytes }}</div>
|
||||
<div class="data">{{ bytes(instance.driveUsage) }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
@@ -127,6 +127,8 @@ import MkSelect from '../../components/ui/select.vue';
|
||||
import MkButton from '../../components/ui/button.vue';
|
||||
import MkSwitch from '../../components/ui/switch.vue';
|
||||
import MkInfo from '../../components/ui/info.vue';
|
||||
import bytes from '../../filters/bytes';
|
||||
import number from '../../filters/number';
|
||||
|
||||
const chartLimit = 90;
|
||||
const sum = (...arr) => arr.reduce((r, a) => r.map((b, i) => a[i] + b));
|
||||
@@ -220,7 +222,7 @@ export default defineComponent({
|
||||
}
|
||||
},
|
||||
|
||||
async created() {
|
||||
async created() {
|
||||
this.now = new Date();
|
||||
|
||||
const [perHour, perDay] = await Promise.all([
|
||||
@@ -474,7 +476,11 @@ export default defineComponent({
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
bytes,
|
||||
|
||||
number
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -48,9 +48,9 @@
|
||||
<div class="cell"><div class="label">CPU</div>{{ serverInfo.cpu.model }}</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="cell"><div class="label">MEM total</div>{{ serverInfo.mem.total | bytes }}</div>
|
||||
<div class="cell"><div class="label">MEM used</div>{{ memUsage | bytes }} ({{ (memUsage / serverInfo.mem.total * 100).toFixed(0) }}%)</div>
|
||||
<div class="cell"><div class="label">MEM free</div>{{ serverInfo.mem.total - memUsage | bytes }} ({{ ((serverInfo.mem.total - memUsage) / serverInfo.mem.total * 100).toFixed(0) }}%)</div>
|
||||
<div class="cell"><div class="label">MEM total</div>{{ bytes(serverInfo.mem.total) }}</div>
|
||||
<div class="cell"><div class="label">MEM used</div>{{ bytes(memUsage) }} ({{ (memUsage / serverInfo.mem.total * 100).toFixed(0) }}%)</div>
|
||||
<div class="cell"><div class="label">MEM free</div>{{ bytes(serverInfo.mem.total - memUsage) }} ({{ ((serverInfo.mem.total - memUsage) / serverInfo.mem.total * 100).toFixed(0) }}%)</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -63,9 +63,9 @@
|
||||
<div class="_content" v-if="serverInfo">
|
||||
<div class="table">
|
||||
<div class="row">
|
||||
<div class="cell"><div class="label">Disk total</div>{{ serverInfo.fs.total | bytes }}</div>
|
||||
<div class="cell"><div class="label">Disk used</div>{{ serverInfo.fs.used | bytes }} ({{ (serverInfo.fs.used / serverInfo.fs.total * 100).toFixed(0) }}%)</div>
|
||||
<div class="cell"><div class="label">Disk free</div>{{ serverInfo.fs.total - serverInfo.fs.used | bytes }} ({{ ((serverInfo.fs.total - serverInfo.fs.used) / serverInfo.fs.total * 100).toFixed(0) }}%)</div>
|
||||
<div class="cell"><div class="label">Disk total</div>{{ bytes(serverInfo.fs.total) }}</div>
|
||||
<div class="cell"><div class="label">Disk used</div>{{ bytes(serverInfo.fs.used) }} ({{ (serverInfo.fs.used / serverInfo.fs.total * 100).toFixed(0) }}%)</div>
|
||||
<div class="cell"><div class="label">Disk free</div>{{ bytes(serverInfo.fs.total - serverInfo.fs.used) }} ({{ ((serverInfo.fs.total - serverInfo.fs.used) / serverInfo.fs.total * 100).toFixed(0) }}%)</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -107,6 +107,7 @@ import MkButton from '../../components/ui/button.vue';
|
||||
import MkSelect from '../../components/ui/select.vue';
|
||||
import MkInput from '../../components/ui/input.vue';
|
||||
import { version, url } from '../../config';
|
||||
import bytes from '../../filters/bytes';
|
||||
|
||||
const alpha = (hex, a) => {
|
||||
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)!;
|
||||
@@ -167,7 +168,7 @@ export default defineComponent({
|
||||
|
||||
mounted() {
|
||||
this.fetchLogs();
|
||||
|
||||
|
||||
Chart.defaults.global.defaultFontColor = getComputedStyle(document.documentElement).getPropertyValue('--fg');
|
||||
|
||||
this.chartCpuMem = new Chart(this.$refs.cpumem, {
|
||||
@@ -439,7 +440,9 @@ export default defineComponent({
|
||||
for (const stats of statsLog.reverse()) {
|
||||
this.onStats(stats);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
bytes
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
<section class="_card mk-queue-queue">
|
||||
<div class="_title"><slot name="title"></slot></div>
|
||||
<div class="_content status">
|
||||
<div class="cell"><div class="label">Process</div>{{ activeSincePrevTick | number }}</div>
|
||||
<div class="cell"><div class="label">Active</div>{{ active | number }}</div>
|
||||
<div class="cell"><div class="label">Waiting</div>{{ waiting | number }}</div>
|
||||
<div class="cell"><div class="label">Delayed</div>{{ delayed | number }}</div>
|
||||
<div class="cell"><div class="label">Process</div>{{ number(activeSincePrevTick) }}</div>
|
||||
<div class="cell"><div class="label">Active</div>{{ number(active) }}</div>
|
||||
<div class="cell"><div class="label">Waiting</div>{{ number(waiting) }}</div>
|
||||
<div class="cell"><div class="label">Delayed</div>{{ number(delayed) }}</div>
|
||||
</div>
|
||||
<div class="_content" style="margin-bottom: -8px;">
|
||||
<canvas ref="chart"></canvas>
|
||||
@@ -14,7 +14,7 @@
|
||||
<div v-if="jobs.length > 0">
|
||||
<div v-for="job in jobs" :key="job[0]">
|
||||
<span>{{ job[0] }}</span>
|
||||
<span style="margin-left: 8px; opacity: 0.7;">({{ job[1] | number }} jobs)</span>
|
||||
<span style="margin-left: 8px; opacity: 0.7;">({{ number(job[1]) }} jobs)</span>
|
||||
</div>
|
||||
</div>
|
||||
<span v-else style="opacity: 0.5;">{{ $t('noJobs') }}</span>
|
||||
@@ -25,6 +25,7 @@
|
||||
<script lang="ts">
|
||||
import { defineComponent } from 'vue';
|
||||
import Chart from 'chart.js';
|
||||
import number from '../../filters/number';
|
||||
|
||||
const alpha = (hex, a) => {
|
||||
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)!;
|
||||
@@ -179,6 +180,8 @@ export default defineComponent({
|
||||
this.jobs = jobs;
|
||||
});
|
||||
},
|
||||
|
||||
number
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="_title">
|
||||
<mk-avatar class="avatar" :user="user"/>
|
||||
<mk-user-name class="name" :user="user"/>
|
||||
<span class="acct">@{{ user | acct }}</span>
|
||||
<span class="acct">@{{ acct(user) }}</span>
|
||||
<span class="staff" v-if="user.isAdmin"><fa :icon="faBookmark"/></span>
|
||||
<span class="staff" v-if="user.isModerator"><fa :icon="farBookmark"/></span>
|
||||
<span class="punished" v-if="user.isSilenced"><fa :icon="faMicrophoneSlash"/></span>
|
||||
@@ -40,6 +40,7 @@ import { faSnowflake, faTrashAlt, faBookmark as farBookmark } from '@fortawesom
|
||||
import MkButton from '../../components/ui/button.vue';
|
||||
import MkSwitch from '../../components/ui/switch.vue';
|
||||
import Progress from '../../scripts/loading';
|
||||
import { acct, userPage } from '../../filters/user';
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
@@ -84,7 +85,7 @@ export default defineComponent({
|
||||
},
|
||||
|
||||
openProfile() {
|
||||
window.open(Vue.filter('userPage')(this.user, null, true), '_blank');
|
||||
window.open(userPage(this.user, null, true), '_blank');
|
||||
},
|
||||
|
||||
async updateRemoteUser() {
|
||||
@@ -175,6 +176,8 @@ export default defineComponent({
|
||||
});
|
||||
await this.refreshUser();
|
||||
},
|
||||
|
||||
acct
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
<div class="body">
|
||||
<header>
|
||||
<mk-user-name class="name" :user="user"/>
|
||||
<span class="acct">@{{ user | acct }}</span>
|
||||
<span class="acct">@{{ acct(user) }}</span>
|
||||
<span class="staff" v-if="user.isAdmin"><fa :icon="faBookmark"/></span>
|
||||
<span class="staff" v-if="user.isModerator"><fa :icon="farBookmark"/></span>
|
||||
<span class="punished" v-if="user.isSilenced"><fa :icon="faMicrophoneSlash"/></span>
|
||||
@@ -92,6 +92,7 @@ import MkInput from '../../components/ui/input.vue';
|
||||
import MkSelect from '../../components/ui/select.vue';
|
||||
import MkPagination from '../../components/ui/pagination.vue';
|
||||
import MkUserSelect from '../../components/user-select.vue';
|
||||
import { acct } from '../../filters/user';
|
||||
|
||||
export default defineComponent({
|
||||
metaInfo() {
|
||||
@@ -223,7 +224,9 @@ export default defineComponent({
|
||||
|
||||
async show(user) {
|
||||
this.$router.push('./users/' + user.id);
|
||||
}
|
||||
},
|
||||
|
||||
acct
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@@ -234,7 +237,7 @@ export default defineComponent({
|
||||
> ._content {
|
||||
max-height: 300px;
|
||||
overflow: auto;
|
||||
|
||||
|
||||
> .users {
|
||||
> .user {
|
||||
display: flex;
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
</header>
|
||||
<header v-else>
|
||||
<span class="name"><mk-user-name :user="isMe(message) ? message.recipient : message.user"/></span>
|
||||
<span class="username">@{{ isMe(message) ? message.recipient : message.user | acct }}</span>
|
||||
<span class="username">@{{ acct(isMe(message) ? message.recipient : message.user) }}</span>
|
||||
<mk-time :time="message.createdAt"/>
|
||||
</header>
|
||||
<div class="body">
|
||||
@@ -45,6 +45,7 @@ import { faUser, faUsers, faComments, faPlus } from '@fortawesome/free-solid-svg
|
||||
import getAcct from '../../../misc/acct/render';
|
||||
import MkButton from '../../components/ui/button.vue';
|
||||
import MkUserSelect from '../../components/user-select.vue';
|
||||
import { acct } from '../../filters/user';
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
@@ -159,7 +160,9 @@ export default defineComponent({
|
||||
});
|
||||
if (canceled) return;
|
||||
this.$router.push(`/my/messaging/group/${group.id}`);
|
||||
}
|
||||
},
|
||||
|
||||
acct
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<template #empty><span>{{ $t('noUsers') }}</span></template>
|
||||
<template #default="{items}">
|
||||
<div class="user" v-for="(mute, i) in items" :key="mute.id">
|
||||
<router-link class="name" :to="mute.mutee | userPage">
|
||||
<router-link class="name" :to="userPage(mute.mutee)">
|
||||
<mk-acct :user="mute.mutee"/>
|
||||
</router-link>
|
||||
</div>
|
||||
@@ -20,7 +20,7 @@
|
||||
<template #empty><span>{{ $t('noUsers') }}</span></template>
|
||||
<template #default="{items}">
|
||||
<div class="user" v-for="(block, i) in items" :key="block.id">
|
||||
<router-link class="name" :to="block.blockee | userPage">
|
||||
<router-link class="name" :to="userPage(block.blockee)">
|
||||
<mk-acct :user="block.blockee"/>
|
||||
</router-link>
|
||||
</div>
|
||||
@@ -34,6 +34,7 @@
|
||||
import { defineComponent } from 'vue';
|
||||
import { faBan } from '@fortawesome/free-solid-svg-icons';
|
||||
import MkPagination from '../../components/ui/pagination.vue';
|
||||
import { userPage } from '../../filters/user';
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
@@ -53,6 +54,10 @@ export default defineComponent({
|
||||
faBan
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
userPage
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
<mk-avatar class="avatar" :user="user"/>
|
||||
<div class="body">
|
||||
<div class="name">
|
||||
<router-link class="name" :to="user | userPage" v-user-preview="user.id"><mk-user-name :user="user"/></router-link>
|
||||
<p class="acct">@{{ user | acct }}</p>
|
||||
<router-link class="name" :to="userPage(user)" v-user-preview="user.id"><mk-user-name :user="user"/></router-link>
|
||||
<p class="acct">@{{ acct(user) }}</p>
|
||||
</div>
|
||||
<div class="description" v-if="user.description" :title="user.description">
|
||||
<mfm :text="user.description" :is-note="false" :author="user" :i="$store.state.i" :custom-emojis="user.emojis" :plain="true" :nowrap="true"/>
|
||||
@@ -21,6 +21,7 @@ import { defineComponent } from 'vue';
|
||||
import parseAcct from '../../../misc/acct/parse';
|
||||
import MkFollowButton from '../../components/follow-button.vue';
|
||||
import MkPagination from '../../components/ui/pagination.vue';
|
||||
import { userPage, acct } from '../../filters/user';
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
@@ -55,6 +56,12 @@ export default defineComponent({
|
||||
'$route'() {
|
||||
this.$refs.list.reload();
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
userPage,
|
||||
|
||||
acct
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<router-link v-for="(image, i) in images" :key="i"
|
||||
class="img"
|
||||
:style="`background-image: url(${thumbnail(image.file)})`"
|
||||
:to="image.note | notePage"
|
||||
:to="notePage(image.note)"
|
||||
></router-link>
|
||||
</div>
|
||||
<p class="empty" v-if="!fetching && images.length == 0">{{ $t('nothing') }}</p>
|
||||
@@ -15,6 +15,7 @@
|
||||
<script lang="ts">
|
||||
import { defineComponent } from 'vue';
|
||||
import { getStaticImageUrl } from '../../scripts/get-static-image-url';
|
||||
import notePage from '../../filters/note';
|
||||
|
||||
export default defineComponent({
|
||||
props: ['user'],
|
||||
@@ -57,6 +58,7 @@ export default defineComponent({
|
||||
? getStaticImageUrl(image.thumbnailUrl)
|
||||
: image.thumbnailUrl;
|
||||
},
|
||||
notePage
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -66,16 +66,16 @@
|
||||
</dl>
|
||||
</div>
|
||||
<div class="status">
|
||||
<router-link :to="user | userPage()" :class="{ active: $route.name === 'user' }">
|
||||
<b>{{ user.notesCount | number }}</b>
|
||||
<router-link :to="userPage(user)" :class="{ active: $route.name === 'user' }">
|
||||
<b>{{ number(user.notesCount) }}</b>
|
||||
<span>{{ $t('notes') }}</span>
|
||||
</router-link>
|
||||
<router-link :to="user | userPage('following')" :class="{ active: $route.name === 'userFollowing' }">
|
||||
<b>{{ user.followingCount | number }}</b>
|
||||
<router-link :to="userPage(user, 'following')" :class="{ active: $route.name === 'userFollowing' }">
|
||||
<b>{{ number(user.followingCount) }}</b>
|
||||
<span>{{ $t('following') }}</span>
|
||||
</router-link>
|
||||
<router-link :to="user | userPage('followers')" :class="{ active: $route.name === 'userFollowers' }">
|
||||
<b>{{ user.followersCount | number }}</b>
|
||||
<router-link :to="userPage(user, 'followers')" :class="{ active: $route.name === 'userFollowers' }">
|
||||
<b>{{ number(user.followersCount) }}</b>
|
||||
<span>{{ $t('followers') }}</span>
|
||||
</router-link>
|
||||
</div>
|
||||
@@ -119,6 +119,8 @@ import MkRemoteCaution from '../../components/remote-caution.vue';
|
||||
import Progress from '../../scripts/loading';
|
||||
import parseAcct from '../../../misc/acct/parse';
|
||||
import { getScrollPosition } from '../../scripts/scroll';
|
||||
import number from '../../filters/number';
|
||||
import { userPage, acct } from '../../filters/user';
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
@@ -133,7 +135,7 @@ export default defineComponent({
|
||||
|
||||
metaInfo() {
|
||||
return {
|
||||
title: (this.user ? '@' + Vue.filter('acct')(this.user).replace('@', ' | ') : null) as string
|
||||
title: (this.user ? '@' + acct(this.user).replace('@', ' | ') : null) as string
|
||||
};
|
||||
},
|
||||
|
||||
@@ -210,6 +212,10 @@ export default defineComponent({
|
||||
const pos = -(top / z);
|
||||
banner.style.backgroundPosition = `center calc(50% - ${pos}px)`;
|
||||
},
|
||||
|
||||
number,
|
||||
|
||||
userPage
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@@ -271,7 +277,7 @@ export default defineComponent({
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
padding: 8px;
|
||||
border-radius: 24px;
|
||||
|
||||
|
||||
> .menu {
|
||||
vertical-align: bottom;
|
||||
height: 31px;
|
||||
|
||||
Reference in New Issue
Block a user