enhance(client): tweak ui
This commit is contained in:
		
							parent
							
								
									d7222dd56a
								
							
						
					
					
						commit
						8f3ca867d2
					
				
					 8 changed files with 50 additions and 43 deletions
				
			
		|  | @ -890,6 +890,7 @@ activeEmailValidationDescription: "ユーザーのメールアドレスのバリ | ||||||
| navbar: "ナビゲーションバー" | navbar: "ナビゲーションバー" | ||||||
| shuffle: "シャッフル" | shuffle: "シャッフル" | ||||||
| account: "アカウント" | account: "アカウント" | ||||||
|  | move: "移動" | ||||||
| 
 | 
 | ||||||
| _sensitiveMediaDetection: | _sensitiveMediaDetection: | ||||||
|   description: "機械学習を使って自動でセンシティブなメディアを検出し、モデレーションに役立てることができます。サーバーの負荷が少し増えます。" |   description: "機械学習を使って自動でセンシティブなメディアを検出し、モデレーションに役立てることができます。サーバーの負荷が少し増えます。" | ||||||
|  |  | ||||||
|  | @ -206,17 +206,16 @@ export async function openAccountMenu(opts: { | ||||||
| 			to: `/@${ $i.username }`, | 			to: `/@${ $i.username }`, | ||||||
| 			avatar: $i, | 			avatar: $i, | ||||||
| 		}, null, ...(opts.includeCurrentAccount ? [createItem($i)] : []), ...accountItemPromises, { | 		}, null, ...(opts.includeCurrentAccount ? [createItem($i)] : []), ...accountItemPromises, { | ||||||
|  | 			type: 'parent', | ||||||
| 			icon: 'fas fa-plus', | 			icon: 'fas fa-plus', | ||||||
| 			text: i18n.ts.addAccount, | 			text: i18n.ts.addAccount, | ||||||
| 			action: () => { | 			children: [{ | ||||||
| 				popupMenu([{ |  | ||||||
| 				text: i18n.ts.existingAccount, | 				text: i18n.ts.existingAccount, | ||||||
| 				action: () => { showSigninDialog(); }, | 				action: () => { showSigninDialog(); }, | ||||||
| 			}, { | 			}, { | ||||||
| 				text: i18n.ts.createAccount, | 				text: i18n.ts.createAccount, | ||||||
| 				action: () => { createAccount(); }, | 				action: () => { createAccount(); }, | ||||||
| 				}], ev.currentTarget ?? ev.target); | 			}], | ||||||
| 			}, |  | ||||||
| 		}, { | 		}, { | ||||||
| 			type: 'link', | 			type: 'link', | ||||||
| 			icon: 'fas fa-users', | 			icon: 'fas fa-users', | ||||||
|  |  | ||||||
|  | @ -46,7 +46,7 @@ export default defineComponent({ | ||||||
| 		rounded: { | 		rounded: { | ||||||
| 			type: Boolean, | 			type: Boolean, | ||||||
| 			required: false, | 			required: false, | ||||||
| 			default: false, | 			default: true, | ||||||
| 		}, | 		}, | ||||||
| 		inline: { | 		inline: { | ||||||
| 			type: Boolean, | 			type: Boolean, | ||||||
|  |  | ||||||
|  | @ -1,16 +1,16 @@ | ||||||
| <template> | <template> | ||||||
| <transition :name="$store.state.animation ? 'fade' : ''" appear> | <transition :name="$store.state.animation ? 'fade' : ''" appear> | ||||||
| 	<div ref="rootEl" class="nvlagfpb" :style="{ zIndex }" @contextmenu.prevent.stop="() => {}"> | 	<div ref="rootEl" class="nvlagfpb" :style="{ zIndex }" @contextmenu.prevent.stop="() => {}"> | ||||||
| 		<MkMenu :items="items" class="_popup _shadow" :align="'left'" @close="$emit('closed')"/> | 		<MkMenu :items="items" :align="'left'" @close="$emit('closed')"/> | ||||||
| 	</div> | 	</div> | ||||||
| </transition> | </transition> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { onMounted, onBeforeUnmount } from 'vue'; | import { onMounted, onBeforeUnmount } from 'vue'; | ||||||
| import contains from '@/scripts/contains'; |  | ||||||
| import MkMenu from './menu.vue'; | import MkMenu from './menu.vue'; | ||||||
| import { MenuItem } from './types/menu.vue'; | import { MenuItem } from './types/menu.vue'; | ||||||
|  | import contains from '@/scripts/contains'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| 
 | 
 | ||||||
| const props = defineProps<{ | const props = defineProps<{ | ||||||
|  |  | ||||||
|  | @ -14,6 +14,7 @@ import * as os from '@/os'; | ||||||
| const props = defineProps<{ | const props = defineProps<{ | ||||||
| 	items: MenuItem[]; | 	items: MenuItem[]; | ||||||
| 	targetElement: HTMLElement; | 	targetElement: HTMLElement; | ||||||
|  | 	rootElement: HTMLElement; | ||||||
| 	width?: number; | 	width?: number; | ||||||
| 	viaKeyboard?: boolean; | 	viaKeyboard?: boolean; | ||||||
| }>(); | }>(); | ||||||
|  | @ -27,9 +28,10 @@ const el = ref<HTMLElement>(); | ||||||
| const align = 'left'; | const align = 'left'; | ||||||
| 
 | 
 | ||||||
| function setPosition() { | function setPosition() { | ||||||
|  | 	const rootRect = props.rootElement.getBoundingClientRect(); | ||||||
| 	const rect = props.targetElement.getBoundingClientRect(); | 	const rect = props.targetElement.getBoundingClientRect(); | ||||||
| 	const left = rect.left + props.targetElement.offsetWidth; | 	const left = props.targetElement.offsetWidth; | ||||||
| 	const top = rect.top - 8; | 	const top = (rect.top - rootRect.top) - 8; | ||||||
| 	el.value.style.left = left + 'px'; | 	el.value.style.left = left + 'px'; | ||||||
| 	el.value.style.top = top + 'px'; | 	el.value.style.top = top + 'px'; | ||||||
| } | } | ||||||
|  | @ -58,6 +60,6 @@ defineExpose({ | ||||||
| 
 | 
 | ||||||
| <style lang="scss" scoped> | <style lang="scss" scoped> | ||||||
| .sfhdhdhr { | .sfhdhdhr { | ||||||
| 	position: fixed; | 	position: absolute; | ||||||
| } | } | ||||||
| </style> | </style> | ||||||
|  | @ -50,7 +50,7 @@ | ||||||
| 		</span> | 		</span> | ||||||
| 	</div> | 	</div> | ||||||
| 	<div v-if="childMenu" class="child"> | 	<div v-if="childMenu" class="child"> | ||||||
| 		<XChild ref="child" :items="childMenu" :target-element="childTarget" showing @actioned="childActioned"/> | 		<XChild ref="child" :items="childMenu" :target-element="childTarget" :root-element="itemsEl" showing @actioned="childActioned"/> | ||||||
| 	</div> | 	</div> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
|  | @ -61,7 +61,7 @@ import { focusPrev, focusNext } from '@/scripts/focus'; | ||||||
| import FormSwitch from '@/components/form/switch.vue'; | import FormSwitch from '@/components/form/switch.vue'; | ||||||
| import { MenuItem, InnerMenuItem, MenuPending, MenuAction } from '@/types/menu'; | import { MenuItem, InnerMenuItem, MenuPending, MenuAction } from '@/types/menu'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| const XChild = defineAsyncComponent(() => import('./child-menu.vue')); | const XChild = defineAsyncComponent(() => import('./menu.child.vue')); | ||||||
| 
 | 
 | ||||||
| const props = defineProps<{ | const props = defineProps<{ | ||||||
| 	items: MenuItem[]; | 	items: MenuItem[]; | ||||||
|  |  | ||||||
|  | @ -3,9 +3,9 @@ | ||||||
| 	<div class="llvierxe" :style="{ backgroundImage: $i.bannerUrl ? `url(${ $i.bannerUrl })` : null }"> | 	<div class="llvierxe" :style="{ backgroundImage: $i.bannerUrl ? `url(${ $i.bannerUrl })` : null }"> | ||||||
| 		<div class="avatar _acrylic"> | 		<div class="avatar _acrylic"> | ||||||
| 			<MkAvatar class="avatar" :user="$i" :disable-link="true" @click="changeAvatar"/> | 			<MkAvatar class="avatar" :user="$i" :disable-link="true" @click="changeAvatar"/> | ||||||
| 			<MkButton primary class="avatarEdit" @click="changeAvatar">{{ i18n.ts._profile.changeAvatar }}</MkButton> | 			<MkButton primary rounded class="avatarEdit" @click="changeAvatar">{{ i18n.ts._profile.changeAvatar }}</MkButton> | ||||||
| 		</div> | 		</div> | ||||||
| 		<MkButton primary class="bannerEdit" @click="changeBanner">{{ i18n.ts._profile.changeBanner }}</MkButton> | 		<MkButton primary rounded class="bannerEdit" @click="changeBanner">{{ i18n.ts._profile.changeBanner }}</MkButton> | ||||||
| 	</div> | 	</div> | ||||||
| 
 | 
 | ||||||
| 	<FormInput v-model="profile.name" :max="30" manual-save class="_formBlock"> | 	<FormInput v-model="profile.name" :max="30" manual-save class="_formBlock"> | ||||||
|  |  | ||||||
|  | @ -128,7 +128,11 @@ function getMenu() { | ||||||
| 			if (canceled) return; | 			if (canceled) return; | ||||||
| 			updateColumn(props.column.id, result); | 			updateColumn(props.column.id, result); | ||||||
| 		}, | 		}, | ||||||
| 	}, null, { | 	}, { | ||||||
|  | 		type: 'parent', | ||||||
|  | 		text: i18n.ts.move + '...', | ||||||
|  | 		icon: 'fas fa-arrows-up-down-left-right', | ||||||
|  | 		children: [{ | ||||||
| 			icon: 'fas fa-arrow-left', | 			icon: 'fas fa-arrow-left', | ||||||
| 			text: i18n.ts._deck.swapLeft, | 			text: i18n.ts._deck.swapLeft, | ||||||
| 			action: () => { | 			action: () => { | ||||||
|  | @ -152,7 +156,8 @@ function getMenu() { | ||||||
| 			action: () => { | 			action: () => { | ||||||
| 				swapDownColumn(props.column.id); | 				swapDownColumn(props.column.id); | ||||||
| 			}, | 			}, | ||||||
| 	} : undefined, null, { | 		} : undefined], | ||||||
|  | 	}, { | ||||||
| 		icon: 'fas fa-window-restore', | 		icon: 'fas fa-window-restore', | ||||||
| 		text: i18n.ts._deck.stackLeft, | 		text: i18n.ts._deck.stackLeft, | ||||||
| 		action: () => { | 		action: () => { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue