diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 848bf4bb4..1812a2660 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -265,6 +265,7 @@ watch: "ウォッチ" unwatch: "ウォッチ解除" accept: "許可" reject: "拒否" +normal: "正常" instanceName: "インスタンス名" instanceDescription: "インスタンスの紹介" maintainerName: "管理者の名前" @@ -319,6 +320,7 @@ notesAndReplies: "投稿と返信" withFiles: "ファイル付き" silence: "サイレンス" silenceConfirm: "サイレンスしますか?" +unsilence: "サイレンス解除" unsilenceConfirm: "サイレンス解除しますか?" popularUsers: "人気のユーザー" recentlyUpdatedUsers: "最近投稿したユーザー" @@ -483,6 +485,13 @@ scratchpadDescription: "スクラッチパッドは、AiScriptの実験環境を output: "出力" script: "スクリプト" disablePagesScript: "Pagesのスクリプトを無効にする" +updateRemoteUser: "リモートユーザー情報の更新" +deleteAllFiles: "すべてのファイルを削除" +deleteAllFilesConfirm: "すべてのファイルを削除しますか?" +removeAllFollowing: "フォローを全解除" +removeAllFollowingDescription: "{host}からのフォローをすべて解除します。そのインスタンスがもう存在しなくなった場合などに実行してください。" +userSuspended: "このユーザーは凍結されています。" +userSilenced: "このユーザーはサイレンスされています。" _theme: explore: "テーマを探す" diff --git a/src/client/components/note.vue b/src/client/components/note.vue index 07011ba50..18d5cc34b 100644 --- a/src/client/components/note.vue +++ b/src/client/components/note.vue @@ -561,13 +561,13 @@ export default Vue.extend({ }] : [] ), - ...(this.appearNote.userId == this.$store.state.i.id ? [ + ...(this.appearNote.userId == this.$store.state.i.id || this.$store.state.i.isModerator || this.$store.state.i.isAdmin ? [ null, - { + this.appearNote.userId == this.$store.state.i.id ? { icon: faEdit, text: this.$t('deleteAndEdit'), action: this.delEdit - }, + } : undefined, { icon: faTrashAlt, text: this.$t('delete'), diff --git a/src/client/components/user-menu.vue b/src/client/components/user-menu.vue index b0139380e..a2275197d 100644 --- a/src/client/components/user-menu.vue +++ b/src/client/components/user-menu.vue @@ -4,7 +4,7 @@ - - diff --git a/src/client/pages/instance/federation.instance.vue b/src/client/pages/instance/federation.instance.vue index b86f52809..08f4d1b4f 100644 --- a/src/client/pages/instance/federation.instance.vue +++ b/src/client/pages/instance/federation.instance.vue @@ -99,10 +99,19 @@ {{ $t('operations') }} {{ $t('stopActivityDelivery') }} {{ $t('blockThisInstance') }} +
+ {{ $t('deleteAllFiles') }} + {{ $t('deleteAllFiles') }} +
+
+ {{ $t('removeAllFollowing') }} + {{ $t('removeAllFollowing') }} + {{ $t('removeAllFollowingDescription', { host: instance.host }) }} +
{{ $t('metadata') }} -
{{ JSON.stringify(instance.metadata, null, 2) }}
+
{{ JSON.stringify(instance, null, 2) }}
@@ -112,11 +121,13 @@ import Vue from 'vue'; import Chart from 'chart.js'; import i18n from '../../i18n'; -import { faTimes, faCrosshairs, faCloudDownloadAlt, faCloudUploadAlt, faUsers, faPencilAlt, faFileImage, faDatabase, faTrafficLight, faLongArrowAltUp, faLongArrowAltDown } from '@fortawesome/free-solid-svg-icons'; +import { faTimes, faCrosshairs, faCloudDownloadAlt, faCloudUploadAlt, faUsers, faPencilAlt, faFileImage, faDatabase, faTrafficLight, faLongArrowAltUp, faLongArrowAltDown, faMinusCircle, faTrashAlt } from '@fortawesome/free-solid-svg-icons'; import XWindow from '../../components/window.vue'; import MkUsersDialog from '../../components/users-dialog.vue'; 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'; const chartLimit = 90; const sum = (...arr) => arr.reduce((r, a) => r.map((b, i) => a[i] + b)); @@ -135,7 +146,9 @@ export default Vue.extend({ components: { XWindow, MkSelect, + MkButton, MkSwitch, + MkInfo, }, props: { @@ -153,7 +166,7 @@ export default Vue.extend({ chartInstance: null, chartSrc: 'requests', chartSpan: 'hour', - faTimes, faCrosshairs, faCloudDownloadAlt, faCloudUploadAlt, faUsers, faPencilAlt, faFileImage, faDatabase, faTrafficLight, faLongArrowAltUp, faLongArrowAltDown + faTimes, faCrosshairs, faCloudDownloadAlt, faCloudUploadAlt, faUsers, faPencilAlt, faFileImage, faDatabase, faTrafficLight, faLongArrowAltUp, faLongArrowAltDown, faMinusCircle, faTrashAlt }; }, @@ -239,6 +252,28 @@ export default Vue.extend({ this.chartSrc = src; }, + removeAllFollowing() { + this.$root.api('admin/federation/remove-all-following', { + host: this.instance.host + }).then(() => { + this.$root.dialog({ + type: 'success', + iconOnly: true, autoClose: true + }); + }); + }, + + deleteAllFiles() { + this.$root.api('admin/federation/delete-all-files', { + host: this.instance.host + }).then(() => { + this.$root.dialog({ + type: 'success', + iconOnly: true, autoClose: true + }); + }); + }, + renderChart() { if (this.chartInstance) { this.chartInstance.destroy(); diff --git a/src/client/pages/instance/users.user.vue b/src/client/pages/instance/users.user.vue new file mode 100644 index 000000000..1fb064f7f --- /dev/null +++ b/src/client/pages/instance/users.user.vue @@ -0,0 +1,209 @@ + + + + + diff --git a/src/client/pages/instance/users.vue b/src/client/pages/instance/users.vue index db9e625e4..b209ab68c 100644 --- a/src/client/pages/instance/users.vue +++ b/src/client/pages/instance/users.vue @@ -12,19 +12,65 @@ {{ $t('lookup') }}
{{ $t('users') }}
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + {{ $t('username') }} + + + {{ $t('host') }} + +
+
@@ -38,12 +84,13 @@