🎨
This commit is contained in:
		| @@ -116,7 +116,8 @@ export default defineComponent({ | |||||||
| 		return { | 		return { | ||||||
| 			[symbols.PAGE_INFO]: { | 			[symbols.PAGE_INFO]: { | ||||||
| 				title: this.$ts.federation, | 				title: this.$ts.federation, | ||||||
| 				icon: 'fas fa-globe' | 				icon: 'fas fa-globe', | ||||||
|  | 				bg: 'var(--bg)', | ||||||
| 			}, | 			}, | ||||||
| 			host: '', | 			host: '', | ||||||
| 			state: 'federating', | 			state: 'federating', | ||||||
|   | |||||||
| @@ -86,7 +86,8 @@ export default defineComponent({ | |||||||
| 		return { | 		return { | ||||||
| 			[symbols.PAGE_INFO]: { | 			[symbols.PAGE_INFO]: { | ||||||
| 				title: this.$ts.abuseReports, | 				title: this.$ts.abuseReports, | ||||||
| 				icon: 'fas fa-exclamation-circle' | 				icon: 'fas fa-exclamation-circle', | ||||||
|  | 				bg: 'var(--bg)', | ||||||
| 			}, | 			}, | ||||||
| 			searchUsername: '', | 			searchUsername: '', | ||||||
| 			searchHost: '', | 			searchHost: '', | ||||||
|   | |||||||
| @@ -64,7 +64,8 @@ export default defineComponent({ | |||||||
| 		return { | 		return { | ||||||
| 			[symbols.PAGE_INFO]: { | 			[symbols.PAGE_INFO]: { | ||||||
| 				title: this.$ts.ads, | 				title: this.$ts.ads, | ||||||
| 				icon: 'fas fa-audio-description' | 				icon: 'fas fa-audio-description', | ||||||
|  | 				bg: 'var(--bg)', | ||||||
| 			}, | 			}, | ||||||
| 			ads: [], | 			ads: [], | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -43,7 +43,8 @@ export default defineComponent({ | |||||||
| 		return { | 		return { | ||||||
| 			[symbols.PAGE_INFO]: { | 			[symbols.PAGE_INFO]: { | ||||||
| 				title: this.$ts.announcements, | 				title: this.$ts.announcements, | ||||||
| 				icon: 'fas fa-broadcast-tower' | 				icon: 'fas fa-broadcast-tower', | ||||||
|  | 				bg: 'var(--bg)', | ||||||
| 			}, | 			}, | ||||||
| 			announcements: [], | 			announcements: [], | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -78,6 +78,7 @@ export default defineComponent({ | |||||||
| 			[symbols.PAGE_INFO]: { | 			[symbols.PAGE_INFO]: { | ||||||
| 				title: this.$ts.customEmojis, | 				title: this.$ts.customEmojis, | ||||||
| 				icon: 'fas fa-laugh', | 				icon: 'fas fa-laugh', | ||||||
|  | 				bg: 'var(--bg)', | ||||||
| 				action: { | 				action: { | ||||||
| 					icon: 'fas fa-plus', | 					icon: 'fas fa-plus', | ||||||
| 					handler: this.add | 					handler: this.add | ||||||
|   | |||||||
| @@ -1,20 +1,14 @@ | |||||||
| <template> | <template> | ||||||
| <div class="xrmjdkdw"> | <div class="xrmjdkdw"> | ||||||
| 	<div class="_section"> | 	<MkContainer :foldable="true" class="lookup"> | ||||||
| 		<div class="_content"> | 		<template #header><i class="fas fa-search"></i> {{ $ts.lookup }}</template> | ||||||
| 			<MkButton primary @click="clear()"><i class="fas fa-trash-alt"></i> {{ $ts.clearCachedFiles }}</MkButton> | 		<div class="xrmjdkdw-lookup"> | ||||||
| 		</div> | 			<MkInput class="item" v-model="q" type="text" @enter="find()"> | ||||||
| 	</div> |  | ||||||
|  |  | ||||||
| 	<div class="_section lookup"> |  | ||||||
| 		<div class="_title"><i class="fas fa-search"></i> {{ $ts.lookup }}</div> |  | ||||||
| 		<div class="_content"> |  | ||||||
| 			<MkInput class="target" v-model="q" type="text" @enter="find()"> |  | ||||||
| 				<template #label>{{ $ts.fileIdOrUrl }}</template> | 				<template #label>{{ $ts.fileIdOrUrl }}</template> | ||||||
| 			</MkInput> | 			</MkInput> | ||||||
| 			<MkButton @click="find()" primary><i class="fas fa-search"></i> {{ $ts.lookup }}</MkButton> | 			<MkButton @click="find()" primary><i class="fas fa-search"></i> {{ $ts.lookup }}</MkButton> | ||||||
| 		</div> | 		</div> | ||||||
| 	</div> | 	</MkContainer> | ||||||
|  |  | ||||||
| 	<div class="_section"> | 	<div class="_section"> | ||||||
| 		<div class="_content"> | 		<div class="_content"> | ||||||
| @@ -31,7 +25,7 @@ | |||||||
| 			</div> | 			</div> | ||||||
| 			<div class="inputs" style="display: flex; padding-top: 1.2em;"> | 			<div class="inputs" style="display: flex; padding-top: 1.2em;"> | ||||||
| 				<MkInput v-model="type" :debounce="true" type="search" style="margin: 0; flex: 1;"> | 				<MkInput v-model="type" :debounce="true" type="search" style="margin: 0; flex: 1;"> | ||||||
| 					<template #label>{{ $ts.type }}</template> | 					<template #label>MIME type</template> | ||||||
| 				</MkInput> | 				</MkInput> | ||||||
| 			</div> | 			</div> | ||||||
| 			<MkPagination :pagination="pagination" #default="{items}" class="urempief" ref="files"> | 			<MkPagination :pagination="pagination" #default="{items}" class="urempief" ref="files"> | ||||||
| @@ -66,6 +60,7 @@ import MkButton from '@client/components/ui/button.vue'; | |||||||
| import MkInput from '@client/components/form/input.vue'; | import MkInput from '@client/components/form/input.vue'; | ||||||
| import MkSelect from '@client/components/form/select.vue'; | import MkSelect from '@client/components/form/select.vue'; | ||||||
| import MkPagination from '@client/components/ui/pagination.vue'; | import MkPagination from '@client/components/ui/pagination.vue'; | ||||||
|  | import MkContainer from '@client/components/ui/container.vue'; | ||||||
| import MkDriveFileThumbnail from '@client/components/drive-file-thumbnail.vue'; | import MkDriveFileThumbnail from '@client/components/drive-file-thumbnail.vue'; | ||||||
| import bytes from '@client/filters/bytes'; | import bytes from '@client/filters/bytes'; | ||||||
| import * as os from '@client/os'; | import * as os from '@client/os'; | ||||||
| @@ -77,6 +72,7 @@ export default defineComponent({ | |||||||
| 		MkInput, | 		MkInput, | ||||||
| 		MkSelect, | 		MkSelect, | ||||||
| 		MkPagination, | 		MkPagination, | ||||||
|  | 		MkContainer, | ||||||
| 		MkDriveFileThumbnail, | 		MkDriveFileThumbnail, | ||||||
| 	}, | 	}, | ||||||
|  |  | ||||||
| @@ -86,7 +82,13 @@ export default defineComponent({ | |||||||
| 		return { | 		return { | ||||||
| 			[symbols.PAGE_INFO]: { | 			[symbols.PAGE_INFO]: { | ||||||
| 				title: this.$ts.files, | 				title: this.$ts.files, | ||||||
| 				icon: 'fas fa-cloud' | 				icon: 'fas fa-cloud', | ||||||
|  | 				bg: 'var(--bg)', | ||||||
|  | 				actions: [{ | ||||||
|  | 					text: this.$ts.clearCachedFiles, | ||||||
|  | 					icon: 'fas fa-trash-alt', | ||||||
|  | 					handler: this.clear | ||||||
|  | 				}] | ||||||
| 			}, | 			}, | ||||||
| 			q: null, | 			q: null, | ||||||
| 			origin: 'local', | 			origin: 'local', | ||||||
| @@ -161,6 +163,10 @@ export default defineComponent({ | |||||||
| .xrmjdkdw { | .xrmjdkdw { | ||||||
| 	margin: var(--margin); | 	margin: var(--margin); | ||||||
|  |  | ||||||
|  | 	> .lookup { | ||||||
|  | 		margin-bottom: 16px; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	.urempief { | 	.urempief { | ||||||
| 		margin-top: var(--margin); | 		margin-top: var(--margin); | ||||||
|  |  | ||||||
| @@ -192,4 +198,12 @@ export default defineComponent({ | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .xrmjdkdw-lookup { | ||||||
|  | 	padding: 16px; | ||||||
|  |  | ||||||
|  | 	> .item { | ||||||
|  | 		margin-bottom: 16px; | ||||||
|  | 	} | ||||||
|  | } | ||||||
| </style> | </style> | ||||||
|   | |||||||
							
								
								
									
										97
									
								
								src/client/pages/instance/index.link.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								src/client/pages/instance/index.link.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,97 @@ | |||||||
|  | <template> | ||||||
|  | <div class="qmfkfnzh"> | ||||||
|  | 	<a class="main _button" :href="to" target="_blank" v-if="external"> | ||||||
|  | 		<span class="icon"><slot name="icon"></slot></span> | ||||||
|  | 		<span class="text"><slot></slot></span> | ||||||
|  | 	</a> | ||||||
|  | 	<MkA class="main _button" :class="{ active }" :to="to" :behavior="behavior" v-else> | ||||||
|  | 		<span class="icon"><slot name="icon"></slot></span> | ||||||
|  | 		<span class="text"><slot></slot></span> | ||||||
|  | 	</MkA> | ||||||
|  | </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script lang="ts"> | ||||||
|  | import { defineComponent } from 'vue'; | ||||||
|  |  | ||||||
|  | export default defineComponent({ | ||||||
|  | 	props: { | ||||||
|  | 		to: { | ||||||
|  | 			type: String, | ||||||
|  | 			required: true | ||||||
|  | 		}, | ||||||
|  | 		active: { | ||||||
|  | 			type: Boolean, | ||||||
|  | 			required: false | ||||||
|  | 		}, | ||||||
|  | 		external: { | ||||||
|  | 			type: Boolean, | ||||||
|  | 			required: false | ||||||
|  | 		}, | ||||||
|  | 		behavior: { | ||||||
|  | 			type: String, | ||||||
|  | 			required: false, | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss" scoped> | ||||||
|  | .qmfkfnzh { | ||||||
|  | 	> .main { | ||||||
|  | 		display: flex; | ||||||
|  | 		align-items: center; | ||||||
|  | 		width: 100%; | ||||||
|  | 		box-sizing: border-box; | ||||||
|  | 		padding: 10px 16px 10px 14px; | ||||||
|  | 		border-radius: 999px; | ||||||
|  | 		font-size: 0.9em; | ||||||
|  |  | ||||||
|  | 		&:hover { | ||||||
|  | 			text-decoration: none; | ||||||
|  | 			background: var(--panelHighlight); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		&.active { | ||||||
|  | 			color: var(--accent); | ||||||
|  | 			background: var(--accentedBg); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		> .icon { | ||||||
|  | 			width: 32px; | ||||||
|  | 			margin-right: 2px; | ||||||
|  | 			flex-shrink: 0; | ||||||
|  | 			text-align: center; | ||||||
|  | 			opacity: 0.8; | ||||||
|  |  | ||||||
|  | 			&:empty { | ||||||
|  | 				display: none; | ||||||
|  |  | ||||||
|  | 				& + .text { | ||||||
|  | 					padding-left: 4px; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		> .text { | ||||||
|  | 			white-space: nowrap; | ||||||
|  | 			text-overflow: ellipsis; | ||||||
|  | 			overflow: hidden; | ||||||
|  | 			padding-right: 12px; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		> .right { | ||||||
|  | 			margin-left: auto; | ||||||
|  | 			opacity: 0.7; | ||||||
|  |  | ||||||
|  | 			> .text:not(:empty) { | ||||||
|  | 				margin-right: 0.75em; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @@ -1,51 +1,49 @@ | |||||||
| <template> | <template> | ||||||
| <div class="hiyeyicy" :class="{ wide: !narrow }" ref="el"> | <div class="hiyeyicy" :class="{ wide: !narrow }" ref="el"> | ||||||
| 	<div class="nav" v-if="!narrow || page == null"> | 	<div class="nav" v-if="!narrow || page == null"> | ||||||
| 		<FormBase> | 		<div class="group"> | ||||||
| 			<FormGroup> | 			<div class="_debobigegoItem"> | ||||||
| 				<div class="_debobigegoItem"> | 				<div class="_debobigegoPanel lxpfedzu"> | ||||||
| 					<div class="_debobigegoPanel lxpfedzu"> | 					<img :src="$instance.iconUrl || '/favicon.ico'" alt="" class="icon"/> | ||||||
| 						<img :src="$instance.iconUrl || '/favicon.ico'" alt="" class="icon"/> |  | ||||||
| 					</div> |  | ||||||
| 				</div> | 				</div> | ||||||
| 				<FormLink :active="page === 'overview'" replace to="/instance/overview"><template #icon><i class="fas fa-tachometer-alt"></i></template>{{ $ts.overview }}</FormLink> | 			</div> | ||||||
| 			</FormGroup> | 			<XLink :active="page === 'overview'" replace to="/instance/overview"><template #icon><i class="fas fa-tachometer-alt"></i></template>{{ $ts.overview }}</XLink> | ||||||
| 			<FormGroup> | 		</div> | ||||||
| 				<template #label>{{ $ts.quickAction }}</template> | 		<div class="group"> | ||||||
| 				<FormButton @click="lookup"><i class="fas fa-search"></i> {{ $ts.lookup }}</FormButton> | 			<div class="label">{{ $ts.quickAction }}</div> | ||||||
| 				<FormButton v-if="$instance.disableRegistration" @click="invite"><i class="fas fa-user"></i> {{ $ts.invite }}</FormButton> | 			<FormButton @click="lookup"><i class="fas fa-search"></i> {{ $ts.lookup }}</FormButton> | ||||||
| 			</FormGroup> | 			<FormButton v-if="$instance.disableRegistration" @click="invite"><i class="fas fa-user"></i> {{ $ts.invite }}</FormButton> | ||||||
| 			<FormGroup> | 		</div> | ||||||
| 				<template #label>{{ $ts.administration }}</template> | 		<div class="group"> | ||||||
| 				<FormLink :active="page === 'users'" replace to="/instance/users"><template #icon><i class="fas fa-users"></i></template>{{ $ts.users }}</FormLink> | 			<div class="label">{{ $ts.administration }}</div> | ||||||
| 				<FormLink :active="page === 'emojis'" replace to="/instance/emojis"><template #icon><i class="fas fa-laugh"></i></template>{{ $ts.customEmojis }}</FormLink> | 			<XLink :active="page === 'users'" replace to="/instance/users"><template #icon><i class="fas fa-users"></i></template>{{ $ts.users }}</XLink> | ||||||
| 				<FormLink :active="page === 'federation'" replace to="/instance/federation"><template #icon><i class="fas fa-globe"></i></template>{{ $ts.federation }}</FormLink> | 			<XLink :active="page === 'emojis'" replace to="/instance/emojis"><template #icon><i class="fas fa-laugh"></i></template>{{ $ts.customEmojis }}</XLink> | ||||||
| 				<FormLink :active="page === 'queue'" replace to="/instance/queue"><template #icon><i class="fas fa-clipboard-list"></i></template>{{ $ts.jobQueue }}</FormLink> | 			<XLink :active="page === 'federation'" replace to="/instance/federation"><template #icon><i class="fas fa-globe"></i></template>{{ $ts.federation }}</XLink> | ||||||
| 				<FormLink :active="page === 'files'" replace to="/instance/files"><template #icon><i class="fas fa-cloud"></i></template>{{ $ts.files }}</FormLink> | 			<XLink :active="page === 'queue'" replace to="/instance/queue"><template #icon><i class="fas fa-clipboard-list"></i></template>{{ $ts.jobQueue }}</XLink> | ||||||
| 				<FormLink :active="page === 'announcements'" replace to="/instance/announcements"><template #icon><i class="fas fa-broadcast-tower"></i></template>{{ $ts.announcements }}</FormLink> | 			<XLink :active="page === 'files'" replace to="/instance/files"><template #icon><i class="fas fa-cloud"></i></template>{{ $ts.files }}</XLink> | ||||||
| 				<FormLink :active="page === 'ads'" replace to="/instance/ads"><template #icon><i class="fas fa-audio-description"></i></template>{{ $ts.ads }}</FormLink> | 			<XLink :active="page === 'announcements'" replace to="/instance/announcements"><template #icon><i class="fas fa-broadcast-tower"></i></template>{{ $ts.announcements }}</XLink> | ||||||
| 				<FormLink :active="page === 'abuses'" replace to="/instance/abuses"><template #icon><i class="fas fa-exclamation-circle"></i></template>{{ $ts.abuseReports }}</FormLink> | 			<XLink :active="page === 'ads'" replace to="/instance/ads"><template #icon><i class="fas fa-audio-description"></i></template>{{ $ts.ads }}</XLink> | ||||||
| 			</FormGroup> | 			<XLink :active="page === 'abuses'" replace to="/instance/abuses"><template #icon><i class="fas fa-exclamation-circle"></i></template>{{ $ts.abuseReports }}</XLink> | ||||||
| 			<FormGroup> | 		</div> | ||||||
| 				<template #label>{{ $ts.settings }}</template> | 		<div class="group"> | ||||||
| 				<FormLink :active="page === 'settings'" replace to="/instance/settings"><template #icon><i class="fas fa-cog"></i></template>{{ $ts.general }}</FormLink> | 			<div class="label">{{ $ts.settings }}</div> | ||||||
| 				<FormLink :active="page === 'files-settings'" replace to="/instance/files-settings"><template #icon><i class="fas fa-cloud"></i></template>{{ $ts.files }}</FormLink> | 			<XLink :active="page === 'settings'" replace to="/instance/settings"><template #icon><i class="fas fa-cog"></i></template>{{ $ts.general }}</XLink> | ||||||
| 				<FormLink :active="page === 'email-settings'" replace to="/instance/email-settings"><template #icon><i class="fas fa-envelope"></i></template>{{ $ts.emailServer }}</FormLink> | 			<XLink :active="page === 'files-settings'" replace to="/instance/files-settings"><template #icon><i class="fas fa-cloud"></i></template>{{ $ts.files }}</XLink> | ||||||
| 				<FormLink :active="page === 'object-storage'" replace to="/instance/object-storage"><template #icon><i class="fas fa-cloud"></i></template>{{ $ts.objectStorage }}</FormLink> | 			<XLink :active="page === 'email-settings'" replace to="/instance/email-settings"><template #icon><i class="fas fa-envelope"></i></template>{{ $ts.emailServer }}</XLink> | ||||||
| 				<FormLink :active="page === 'security'" replace to="/instance/security"><template #icon><i class="fas fa-lock"></i></template>{{ $ts.security }}</FormLink> | 			<XLink :active="page === 'object-storage'" replace to="/instance/object-storage"><template #icon><i class="fas fa-cloud"></i></template>{{ $ts.objectStorage }}</XLink> | ||||||
| 				<FormLink :active="page === 'service-worker'" replace to="/instance/service-worker"><template #icon><i class="fas fa-bolt"></i></template>ServiceWorker</FormLink> | 			<XLink :active="page === 'security'" replace to="/instance/security"><template #icon><i class="fas fa-lock"></i></template>{{ $ts.security }}</XLink> | ||||||
| 				<FormLink :active="page === 'relays'" replace to="/instance/relays"><template #icon><i class="fas fa-globe"></i></template>{{ $ts.relays }}</FormLink> | 			<XLink :active="page === 'service-worker'" replace to="/instance/service-worker"><template #icon><i class="fas fa-bolt"></i></template>ServiceWorker</XLink> | ||||||
| 				<FormLink :active="page === 'integrations'" replace to="/instance/integrations"><template #icon><i class="fas fa-share-alt"></i></template>{{ $ts.integration }}</FormLink> | 			<XLink :active="page === 'relays'" replace to="/instance/relays"><template #icon><i class="fas fa-globe"></i></template>{{ $ts.relays }}</XLink> | ||||||
| 				<FormLink :active="page === 'instance-block'" replace to="/instance/instance-block"><template #icon><i class="fas fa-ban"></i></template>{{ $ts.instanceBlocking }}</FormLink> | 			<XLink :active="page === 'integrations'" replace to="/instance/integrations"><template #icon><i class="fas fa-share-alt"></i></template>{{ $ts.integration }}</XLink> | ||||||
| 				<FormLink :active="page === 'proxy-account'" replace to="/instance/proxy-account"><template #icon><i class="fas fa-ghost"></i></template>{{ $ts.proxyAccount }}</FormLink> | 			<XLink :active="page === 'instance-block'" replace to="/instance/instance-block"><template #icon><i class="fas fa-ban"></i></template>{{ $ts.instanceBlocking }}</XLink> | ||||||
| 				<FormLink :active="page === 'other-settings'" replace to="/instance/other-settings"><template #icon><i class="fas fa-cogs"></i></template>{{ $ts.other }}</FormLink> | 			<XLink :active="page === 'proxy-account'" replace to="/instance/proxy-account"><template #icon><i class="fas fa-ghost"></i></template>{{ $ts.proxyAccount }}</XLink> | ||||||
| 			</FormGroup> | 			<XLink :active="page === 'other-settings'" replace to="/instance/other-settings"><template #icon><i class="fas fa-cogs"></i></template>{{ $ts.other }}</XLink> | ||||||
| 			<FormGroup> | 		</div> | ||||||
| 				<template #label>{{ $ts.info }}</template> | 		<div class="group"> | ||||||
| 				<FormLink :active="page === 'database'" replace to="/instance/database"><template #icon><i class="fas fa-database"></i></template>{{ $ts.database }}</FormLink> | 			<div class="label">{{ $ts.info }}</div> | ||||||
| 				<FormLink :active="page === 'logs'" replace to="/instance/logs"><template #icon><i class="fas fa-stream"></i></template>{{ $ts.logs }}</FormLink> | 			<XLink :active="page === 'database'" replace to="/instance/database"><template #icon><i class="fas fa-database"></i></template>{{ $ts.database }}</XLink> | ||||||
| 			</FormGroup> | 			<XLink :active="page === 'logs'" replace to="/instance/logs"><template #icon><i class="fas fa-stream"></i></template>{{ $ts.logs }}</XLink> | ||||||
| 		</FormBase> | 		</div> | ||||||
| 	</div> | 	</div> | ||||||
| 	<div class="main"> | 	<div class="main"> | ||||||
| 		<component :is="component" :key="page" @info="onInfo" v-bind="pageProps"/> | 		<component :is="component" :key="page" @info="onInfo" v-bind="pageProps"/> | ||||||
| @@ -56,7 +54,7 @@ | |||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| import { computed, defineAsyncComponent, defineComponent, nextTick, onMounted, reactive, ref, watch } from 'vue'; | import { computed, defineAsyncComponent, defineComponent, nextTick, onMounted, reactive, ref, watch } from 'vue'; | ||||||
| import { i18n } from '@client/i18n'; | import { i18n } from '@client/i18n'; | ||||||
| import FormLink from '@client/components/debobigego/link.vue'; | import XLink from './index.link.vue'; | ||||||
| import FormGroup from '@client/components/debobigego/group.vue'; | import FormGroup from '@client/components/debobigego/group.vue'; | ||||||
| import FormBase from '@client/components/debobigego/base.vue'; | import FormBase from '@client/components/debobigego/base.vue'; | ||||||
| import FormButton from '@client/components/debobigego/button.vue'; | import FormButton from '@client/components/debobigego/button.vue'; | ||||||
| @@ -68,7 +66,7 @@ import { lookupUser } from '@client/scripts/lookup-user'; | |||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| 	components: { | 	components: { | ||||||
| 		FormBase, | 		FormBase, | ||||||
| 		FormLink, | 		XLink, | ||||||
| 		FormGroup, | 		FormGroup, | ||||||
| 		FormButton, | 		FormButton, | ||||||
| 	}, | 	}, | ||||||
| @@ -214,15 +212,25 @@ export default defineComponent({ | |||||||
| .hiyeyicy { | .hiyeyicy { | ||||||
| 	&.wide { | 	&.wide { | ||||||
| 		display: flex; | 		display: flex; | ||||||
| 		max-width: 1100px; |  | ||||||
| 		margin: 0 auto; | 		margin: 0 auto; | ||||||
| 		height: 100%; | 		height: 100%; | ||||||
|  |  | ||||||
| 		> .nav { | 		> .nav { | ||||||
| 			width: 32%; | 			width: 32%; | ||||||
|  | 			max-width: 320px; | ||||||
| 			box-sizing: border-box; | 			box-sizing: border-box; | ||||||
| 			border-right: solid 0.5px var(--divider); | 			border-right: solid 0.5px var(--divider); | ||||||
| 			overflow: auto; | 			overflow: auto; | ||||||
|  |  | ||||||
|  | 			> .group { | ||||||
|  | 				padding: 16px; | ||||||
|  |  | ||||||
|  | 				> .label { | ||||||
|  | 					font-size: 0.9em; | ||||||
|  | 					opacity: 0.7; | ||||||
|  | 					margin: 0 0 8px 12px; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		> .main { | 		> .main { | ||||||
|   | |||||||
| @@ -86,7 +86,8 @@ export default defineComponent({ | |||||||
| 		return { | 		return { | ||||||
| 			[symbols.PAGE_INFO]: { | 			[symbols.PAGE_INFO]: { | ||||||
| 				title: this.$ts.overview, | 				title: this.$ts.overview, | ||||||
| 				icon: 'fas fa-tachometer-alt' | 				icon: 'fas fa-tachometer-alt', | ||||||
|  | 				bg: 'var(--bg)', | ||||||
| 			}, | 			}, | ||||||
| 			page: 'index', | 			page: 'index', | ||||||
| 			version, | 			version, | ||||||
|   | |||||||
| @@ -6,15 +6,15 @@ | |||||||
| 	</div> | 	</div> | ||||||
|  |  | ||||||
| 	<div class="users"> | 	<div class="users"> | ||||||
| 		<div class="inputs" style="display: flex;"> | 		<div class="inputs"> | ||||||
| 			<MkSelect v-model="sort" style="margin: 0; flex: 1;"> | 			<MkSelect v-model="sort" style="flex: 1;"> | ||||||
| 				<template #label>{{ $ts.sort }}</template> | 				<template #label>{{ $ts.sort }}</template> | ||||||
| 				<option value="-createdAt">{{ $ts.registeredDate }} ({{ $ts.ascendingOrder }})</option> | 				<option value="-createdAt">{{ $ts.registeredDate }} ({{ $ts.ascendingOrder }})</option> | ||||||
| 				<option value="+createdAt">{{ $ts.registeredDate }} ({{ $ts.descendingOrder }})</option> | 				<option value="+createdAt">{{ $ts.registeredDate }} ({{ $ts.descendingOrder }})</option> | ||||||
| 				<option value="-updatedAt">{{ $ts.lastUsed }} ({{ $ts.ascendingOrder }})</option> | 				<option value="-updatedAt">{{ $ts.lastUsed }} ({{ $ts.ascendingOrder }})</option> | ||||||
| 				<option value="+updatedAt">{{ $ts.lastUsed }} ({{ $ts.descendingOrder }})</option> | 				<option value="+updatedAt">{{ $ts.lastUsed }} ({{ $ts.descendingOrder }})</option> | ||||||
| 			</MkSelect> | 			</MkSelect> | ||||||
| 			<MkSelect v-model="state" style="margin: 0; flex: 1;"> | 			<MkSelect v-model="state" style="flex: 1;"> | ||||||
| 				<template #label>{{ $ts.state }}</template> | 				<template #label>{{ $ts.state }}</template> | ||||||
| 				<option value="all">{{ $ts.all }}</option> | 				<option value="all">{{ $ts.all }}</option> | ||||||
| 				<option value="available">{{ $ts.normal }}</option> | 				<option value="available">{{ $ts.normal }}</option> | ||||||
| @@ -23,18 +23,18 @@ | |||||||
| 				<option value="silenced">{{ $ts.silence }}</option> | 				<option value="silenced">{{ $ts.silence }}</option> | ||||||
| 				<option value="suspended">{{ $ts.suspend }}</option> | 				<option value="suspended">{{ $ts.suspend }}</option> | ||||||
| 			</MkSelect> | 			</MkSelect> | ||||||
| 			<MkSelect v-model="origin" style="margin: 0; flex: 1;"> | 			<MkSelect v-model="origin" style="flex: 1;"> | ||||||
| 				<template #label>{{ $ts.instance }}</template> | 				<template #label>{{ $ts.instance }}</template> | ||||||
| 				<option value="combined">{{ $ts.all }}</option> | 				<option value="combined">{{ $ts.all }}</option> | ||||||
| 				<option value="local">{{ $ts.local }}</option> | 				<option value="local">{{ $ts.local }}</option> | ||||||
| 				<option value="remote">{{ $ts.remote }}</option> | 				<option value="remote">{{ $ts.remote }}</option> | ||||||
| 			</MkSelect> | 			</MkSelect> | ||||||
| 		</div> | 		</div> | ||||||
| 		<div class="inputs" style="display: flex; padding-top: 1.2em;"> | 		<div class="inputs"> | ||||||
| 			<MkInput v-model="searchUsername" style="margin: 0; flex: 1;" type="text" spellcheck="false" @update:modelValue="$refs.users.reload()"> | 			<MkInput v-model="searchUsername" style="flex: 1;" type="text" spellcheck="false" @update:modelValue="$refs.users.reload()"> | ||||||
| 				<template #label>{{ $ts.username }}</template> | 				<template #label>{{ $ts.username }}</template> | ||||||
| 			</MkInput> | 			</MkInput> | ||||||
| 			<MkInput v-model="searchHost" style="margin: 0; flex: 1;" type="text" spellcheck="false" @update:modelValue="$refs.users.reload()" :disabled="pagination.params().origin === 'local'"> | 			<MkInput v-model="searchHost" style="flex: 1;" type="text" spellcheck="false" @update:modelValue="$refs.users.reload()" :disabled="pagination.params().origin === 'local'"> | ||||||
| 				<template #label>{{ $ts.host }}</template> | 				<template #label>{{ $ts.host }}</template> | ||||||
| 			</MkInput> | 			</MkInput> | ||||||
| 		</div> | 		</div> | ||||||
| @@ -90,6 +90,7 @@ export default defineComponent({ | |||||||
| 			[symbols.PAGE_INFO]: { | 			[symbols.PAGE_INFO]: { | ||||||
| 				title: this.$ts.users, | 				title: this.$ts.users, | ||||||
| 				icon: 'fas fa-users', | 				icon: 'fas fa-users', | ||||||
|  | 				bg: 'var(--bg)', | ||||||
| 				action: { | 				action: { | ||||||
| 					icon: 'fas fa-search', | 					icon: 'fas fa-search', | ||||||
| 					handler: this.searchUser | 					handler: this.searchUser | ||||||
| @@ -178,6 +179,19 @@ export default defineComponent({ | |||||||
|  |  | ||||||
| 	> .users { | 	> .users { | ||||||
| 		margin: var(--margin); | 		margin: var(--margin); | ||||||
|  |  | ||||||
|  | 		> .inputs { | ||||||
|  | 			display: flex; | ||||||
|  | 			margin-bottom: 16px; | ||||||
|  |  | ||||||
|  | 			> * { | ||||||
|  | 				margin-right: 16px; | ||||||
|  |  | ||||||
|  | 				&:last-child { | ||||||
|  | 					margin-right: 0; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
| 	 | 	 | ||||||
| 		> .users { | 		> .users { | ||||||
| 			margin-top: var(--margin); | 			margin-top: var(--margin); | ||||||
|   | |||||||
| @@ -1,11 +1,11 @@ | |||||||
| <template> | <template> | ||||||
| <div class="vvcocwet" :class="{ wide: !narrow }" ref="el"> | <div class="vvcocwet" :class="{ wide: !narrow }" ref="el"> | ||||||
| 	<div class="nav" v-if="!narrow || page == null"> | 	<div class="nav" v-if="!narrow || page == null"> | ||||||
| 		<div class="group"> | 		<div class="group accounts"> | ||||||
| 			<MkAvatar :user="$i" class="avatar"/> | 			<MkAvatar :user="$i" class="avatar"/> | ||||||
| 			<XLink :active="page === 'accounts'" replace to="/settings/accounts"><template #icon><i class="fas fa-users"></i></template>{{ $ts.accounts }}</XLink> | 			<XLink :active="page === 'accounts'" replace to="/settings/accounts"><template #icon><i class="fas fa-users"></i></template>{{ $ts.accounts }}</XLink> | ||||||
| 		</div> | 		</div> | ||||||
| 		<MkInfo v-if="emailNotConfigured || true" warn>{{ $ts.emailNotConfiguredWarning }} <MkA to="/settings/email" class="_link">{{ $ts.configure }}</MkA></MkInfo> | 		<MkInfo v-if="emailNotConfigured || true" warn class="info">{{ $ts.emailNotConfiguredWarning }} <MkA to="/settings/email" class="_link">{{ $ts.configure }}</MkA></MkInfo> | ||||||
| 		<div class="group"> | 		<div class="group"> | ||||||
| 			<div class="label">{{ $ts.basicSettings }}</div> | 			<div class="label">{{ $ts.basicSettings }}</div> | ||||||
| 			<XLink :active="page === 'profile'" replace to="/settings/profile"><template #icon><i class="fas fa-user"></i></template>{{ $ts.profile }}</XLink> | 			<XLink :active="page === 'profile'" replace to="/settings/profile"><template #icon><i class="fas fa-user"></i></template>{{ $ts.profile }}</XLink> | ||||||
| @@ -207,7 +207,20 @@ export default defineComponent({ | |||||||
| 			> .label { | 			> .label { | ||||||
| 				font-size: 0.9em; | 				font-size: 0.9em; | ||||||
| 				opacity: 0.7; | 				opacity: 0.7; | ||||||
| 				margin: 0 0 8px 8px; | 				margin: 0 0 8px 12px; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		> .info { | ||||||
|  | 			margin: 0 16px; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		> .accounts { | ||||||
|  | 			> .avatar { | ||||||
|  | 				display: block; | ||||||
|  | 				width: 50px; | ||||||
|  | 				height: 50px; | ||||||
|  | 				margin: 0 auto 8px auto; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 syuilo
					syuilo