diff --git a/components/admin/Federation.vue b/components/admin/Federation.vue
index 9a05ec1d..b6754c9e 100644
--- a/components/admin/Federation.vue
+++ b/components/admin/Federation.vue
@@ -21,140 +21,15 @@
span(slot='reference')
el-input.w-25(v-model='instance_name' placeholder='Instance name')
p Follow this instance from @{{instance_name}}@{{settings.baseurl|url2host}}
- el-row(v-if='enable_federation')
- el-col(:span='12')
- el-divider {{$t('common.instances')}}
- el-input(v-model='instancesFilter' :placeholder="$t('admin.filter_instances')")
- el-table(:data='paginatedInstances' small @row-click='instanceSelected')
- el-table-column(label='Domain' width='180')
- template(slot-scope='data')
- span(slot='reference') {{data.row.domain}}
- el-table-column(label='Name' width='100')
- template(slot-scope='data')
- span(slot='reference') {{data.row.name}}
- el-table-column(label='Users' width='60')
- template(slot-scope='data')
- span(slot='reference') {{data.row.users}}
- el-table-column(:label="$t('common.actions')" width='120')
- template(slot-scope='data')
- el-button-group
- el-button(size='mini'
- :type='data.row.blocked?"danger":"warning"'
- @click='toggleBlock(data.row)') {{data.row.blocked?$t('admin.unblock'):$t('admin.block')}}
- client-only
- el-pagination(v-if='enable_federation && instances.length>perPage' :page-size='perPage' :currentPage.sync='instancePage' :total='instances.length')
-
- el-col.float-right(:span='11' align='right')
- el-divider {{$t('common.users')}}
- el-input(v-model='usersFilter' :placeholder="$t('admin.filter_users')")
- client-only
- el-pagination(v-if='enable_federation && users.length>perPage' :page-size='perPage' :currentPage.sync='instancePage' :total='users.length')
- el-table(:data='paginatedSelectedUsers' small)
- el-table-column(label='User' width='150')
- template(slot-scope='data')
- span(slot='reference')
- a(:href='data.row.object.id' target='_blank') {{data.row.object.name}}
- small ({{data.row.object.preferredUsername}})
- el-table-column(:label="$t('common.resources')" width='90')
- template(slot-scope='data')
- span {{data.row.resources.length}}
- el-table-column(:label="$t('common.actions')" width='200')
- template(slot-scope='data')
- el-button-group
- el-button(size='mini'
- :type='data.row.blocked?"danger":"warning"'
- @click='toggleUserBlock(data.row)') {{data.row.blocked?$t('admin.unblock'):$t('admin.block')}}
-
- div(v-show='enable_federation')
- el-divider {{$t('common.resources')}}
- el-table(:data='paginatedResources' small :row-style='resourceStyle')
- el-table-column(:label="$t('common.event')")
- template(slot-scope='data')
- span {{data.row.event}}
- el-table-column(:label="$t('common.resources')")
- template(slot-scope='data')
- span(:class='{disabled: data.row.hidden}' v-html='data.row.data.content')
- el-table-column(:label="$t('common.actions')" width="150")
- template(slot-scope='data')
- el-dropdown
- el-button(type="primary" icon="el-icon-arrow-down" size='mini') {{$t('common.moderation')}}
- el-dropdown-menu(slot='dropdown')
- el-dropdown-item(v-if='!data.row.hidden' icon='el-icon-remove' @click.native='toggleHideResource(data.row)') {{$t('admin.hide_resource')}}
- el-dropdown-item(v-else icon='el-icon-success' @click.native='toggleHideResource(data.row)') {{$t('admin.show_resource')}}
- el-dropdown-item(icon='el-icon-delete' @click.native='deleteResource(data.row)') {{$t('admin.delete_resource')}}
- el-dropdown-item(icon='el-icon-lock' @click.native='blockUser(data.row)') {{$t('admin.block_user')}}
-
diff --git a/components/admin/Moderation.vue b/components/admin/Moderation.vue
new file mode 100644
index 00000000..d55adc2e
--- /dev/null
+++ b/components/admin/Moderation.vue
@@ -0,0 +1,164 @@
+
+ div
+ el-row
+ el-col(:span='12')
+ el-divider {{$t('common.instances')}}
+ el-input(v-model='instancesFilter' :placeholder="$t('admin.filter_instances')")
+ el-table(:data='paginatedInstances' small @row-click='instanceSelected')
+ el-table-column(label='Domain' width='180')
+ template(slot-scope='data')
+ span(slot='reference') {{data.row.domain}}
+ el-table-column(label='Name' width='100')
+ template(slot-scope='data')
+ span(slot='reference') {{data.row.name}}
+ el-table-column(label='Users' width='60')
+ template(slot-scope='data')
+ span(slot='reference') {{data.row.users}}
+ el-table-column(:label="$t('common.actions')" width='120')
+ template(slot-scope='data')
+ el-button-group
+ el-button(size='mini'
+ :type='data.row.blocked?"danger":"warning"'
+ @click='toggleBlock(data.row)') {{data.row.blocked?$t('admin.unblock'):$t('admin.block')}}
+ client-only
+ el-pagination(v-if='instances.length>perPage' :page-size='perPage' :currentPage.sync='instancePage' :total='instances.length')
+
+ el-col.float-right(:span='11' align='right')
+ el-divider {{$t('common.users')}}
+ el-input(v-model='usersFilter' :placeholder="$t('admin.filter_users')")
+ client-only
+ el-pagination(v-if='users.length>perPage' :page-size='perPage' :currentPage.sync='instancePage' :total='users.length')
+ el-table(:data='paginatedSelectedUsers' small)
+ el-table-column(label='User' width='150')
+ template(slot-scope='data')
+ span(slot='reference')
+ a(:href='data.row.object.id' target='_blank') {{data.row.object.name}}
+ small ({{data.row.object.preferredUsername}})
+ el-table-column(:label="$t('common.resources')" width='90')
+ template(slot-scope='data')
+ span {{data.row.resources.length}}
+ el-table-column(:label="$t('common.actions')" width='200')
+ template(slot-scope='data')
+ el-button-group
+ el-button(size='mini'
+ :type='data.row.blocked?"danger":"warning"'
+ @click='toggleUserBlock(data.row)') {{data.row.blocked?$t('admin.unblock'):$t('admin.block')}}
+
+ div
+ el-divider {{$t('common.resources')}}
+ el-table(:data='paginatedResources' small :row-style='resourceStyle')
+ el-table-column(:label="$t('common.event')")
+ template(slot-scope='data')
+ span {{data.row.event}}
+ el-table-column(:label="$t('common.resources')")
+ template(slot-scope='data')
+ span(:class='{disabled: data.row.hidden}' v-html='data.row.data.content')
+ el-table-column(:label="$t('common.user')" width='200')
+ template(slot-scope='data')
+ span(:class='{disabled: data.row.hidden}' v-html='data.row.data.actor')
+ el-table-column(:label="$t('common.actions')" width="150")
+ template(slot-scope='data')
+ el-dropdown
+ el-button(type="primary" icon="el-icon-arrow-down" size='mini') {{$t('common.moderation')}}
+ el-dropdown-menu(slot='dropdown')
+ el-dropdown-item(v-if='!data.row.hidden' icon='el-icon-remove' @click.native='hideResource(data.row, true)') {{$t('admin.hide_resource')}}
+ el-dropdown-item(v-else icon='el-icon-success' @click.native='hideResource(data.row, false)') {{$t('admin.show_resource')}}
+ el-dropdown-item(icon='el-icon-delete' @click.native='deleteResource(data.row)') {{$t('admin.delete_resource')}}
+ el-dropdown-item(icon='el-icon-lock' @click.native='blockUser(data.row)') {{$t('admin.block_user')}}
+
+
+