mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-04 07:24:13 +00:00 
			
		
		
		
	[Client] スマホ/タブレットからでも管理者ページを使えるように
This commit is contained in:
		
							parent
							
								
									675e573a8c
								
							
						
					
					
						commit
						1edfce8f73
					
				
					 7 changed files with 134 additions and 10 deletions
				
			
		| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
<div>
 | 
					<div class="cdeuzmsthagexbkpofbmatmugjuvogfb">
 | 
				
			||||||
	<ui-card>
 | 
						<ui-card>
 | 
				
			||||||
		<div slot="title">%fa:broadcast-tower% %i18n:@announcements%</div>
 | 
							<div slot="title">%fa:broadcast-tower% %i18n:@announcements%</div>
 | 
				
			||||||
		<section v-for="(announcement, i) in announcements" class="fit-top">
 | 
							<section v-for="(announcement, i) in announcements" class="fit-top">
 | 
				
			||||||
| 
						 | 
					@ -62,3 +62,10 @@ export default Vue.extend({
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="stylus" scoped>
 | 
				
			||||||
 | 
					.cdeuzmsthagexbkpofbmatmugjuvogfb
 | 
				
			||||||
 | 
						@media (min-width 500px)
 | 
				
			||||||
 | 
							padding 16px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -168,4 +168,13 @@ export default Vue.extend({
 | 
				
			||||||
		> div
 | 
							> div
 | 
				
			||||||
			margin-bottom -10px
 | 
								margin-bottom -10px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@media (max-width 1000px)
 | 
				
			||||||
 | 
							display block
 | 
				
			||||||
 | 
							margin-bottom 26px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							> div
 | 
				
			||||||
 | 
								&:first-child
 | 
				
			||||||
 | 
									margin-right 0
 | 
				
			||||||
 | 
									margin-bottom 26px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</style>
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -124,6 +124,11 @@ export default Vue.extend({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<style lang="stylus" scoped>
 | 
					<style lang="stylus" scoped>
 | 
				
			||||||
.obdskegsannmntldydackcpzezagxqfy
 | 
					.obdskegsannmntldydackcpzezagxqfy
 | 
				
			||||||
 | 
						padding 16px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@media (min-width 500px)
 | 
				
			||||||
 | 
							padding 32px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	> header
 | 
						> header
 | 
				
			||||||
		display flex
 | 
							display flex
 | 
				
			||||||
		margin-bottom 16px
 | 
							margin-bottom 16px
 | 
				
			||||||
| 
						 | 
					@ -132,6 +137,9 @@ export default Vue.extend({
 | 
				
			||||||
		color var(--adminDashboardHeaderFg)
 | 
							color var(--adminDashboardHeaderFg)
 | 
				
			||||||
		font-size 14px
 | 
							font-size 14px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@media (max-width 1000px)
 | 
				
			||||||
 | 
								display none
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		> p
 | 
							> p
 | 
				
			||||||
			display inline
 | 
								display inline
 | 
				
			||||||
			margin 0 32px 0 0
 | 
								margin 0 32px 0 0
 | 
				
			||||||
| 
						 | 
					@ -152,7 +160,6 @@ export default Vue.extend({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		> div
 | 
							> div
 | 
				
			||||||
			flex 1
 | 
								flex 1
 | 
				
			||||||
			max-width 300px
 | 
					 | 
				
			||||||
			margin-right 16px
 | 
								margin-right 16px
 | 
				
			||||||
			color var(--adminDashboardCardFg)
 | 
								color var(--adminDashboardCardFg)
 | 
				
			||||||
			box-shadow 0 2px 4px rgba(0, 0, 0, 0.1)
 | 
								box-shadow 0 2px 4px rgba(0, 0, 0, 0.1)
 | 
				
			||||||
| 
						 | 
					@ -202,6 +209,21 @@ export default Vue.extend({
 | 
				
			||||||
						margin-left auto
 | 
											margin-left auto
 | 
				
			||||||
						cursor pointer
 | 
											cursor pointer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@media (max-width 900px)
 | 
				
			||||||
 | 
								display grid
 | 
				
			||||||
 | 
								grid-template-columns 1fr 1fr
 | 
				
			||||||
 | 
								grid-template-rows 1fr 1fr
 | 
				
			||||||
 | 
								gap 16px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								> div
 | 
				
			||||||
 | 
									margin-right 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@media (max-width 500px)
 | 
				
			||||||
 | 
								display block
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								> div:not(:last-child)
 | 
				
			||||||
 | 
									margin-bottom 16px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	> .charts
 | 
						> .charts
 | 
				
			||||||
		margin-bottom 16px
 | 
							margin-bottom 16px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
<div>
 | 
					<div class="tumhkfkmgtvzljezfvmgkeurkfncshbe">
 | 
				
			||||||
	<ui-card>
 | 
						<ui-card>
 | 
				
			||||||
		<div slot="title">%fa:plus% %i18n:@add-emoji.title%</div>
 | 
							<div slot="title">%fa:plus% %i18n:@add-emoji.title%</div>
 | 
				
			||||||
		<section class="fit-top">
 | 
							<section class="fit-top">
 | 
				
			||||||
| 
						 | 
					@ -110,3 +110,10 @@ export default Vue.extend({
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="stylus" scoped>
 | 
				
			||||||
 | 
					.tumhkfkmgtvzljezfvmgkeurkfncshbe
 | 
				
			||||||
 | 
						@media (min-width 500px)
 | 
				
			||||||
 | 
							padding 16px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,15 @@
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
<div class="mk-admin">
 | 
					<div class="mk-admin" :class="{ isMobile }">
 | 
				
			||||||
	<nav>
 | 
						<header v-show="isMobile">
 | 
				
			||||||
 | 
							<button class="nav" @click="navOpend = true">%fa:bars%</button>
 | 
				
			||||||
 | 
							<span>MisskeyMyAdmin</span>
 | 
				
			||||||
 | 
						</header>
 | 
				
			||||||
 | 
						<div class="nav-backdrop"
 | 
				
			||||||
 | 
							v-if="navOpend && isMobile"
 | 
				
			||||||
 | 
							@click="navOpend = false"
 | 
				
			||||||
 | 
							@touchstart="navOpend = false"
 | 
				
			||||||
 | 
						></div>
 | 
				
			||||||
 | 
						<nav v-show="navOpend">
 | 
				
			||||||
		<div class="mi">
 | 
							<div class="mi">
 | 
				
			||||||
			<img svg-inline src="../assets/header-icon.svg"/>
 | 
								<img svg-inline src="../assets/header-icon.svg"/>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
| 
						 | 
					@ -49,6 +58,10 @@ import XAnnouncements from "./announcements.vue";
 | 
				
			||||||
import XHashtags from "./hashtags.vue";
 | 
					import XHashtags from "./hashtags.vue";
 | 
				
			||||||
import XUsers from "./users.vue";
 | 
					import XUsers from "./users.vue";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Detect the user agent
 | 
				
			||||||
 | 
					const ua = navigator.userAgent.toLowerCase();
 | 
				
			||||||
 | 
					const isMobile = /mobile|iphone|ipad|android/.test(ua);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default Vue.extend({
 | 
					export default Vue.extend({
 | 
				
			||||||
	components: {
 | 
						components: {
 | 
				
			||||||
		XDashboard,
 | 
							XDashboard,
 | 
				
			||||||
| 
						 | 
					@ -58,10 +71,15 @@ export default Vue.extend({
 | 
				
			||||||
		XHashtags,
 | 
							XHashtags,
 | 
				
			||||||
		XUsers
 | 
							XUsers
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
						provide: {
 | 
				
			||||||
 | 
							isMobile
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			page: 'dashboard',
 | 
								page: 'dashboard',
 | 
				
			||||||
			version
 | 
								version,
 | 
				
			||||||
 | 
								isMobile,
 | 
				
			||||||
 | 
								navOpend: !isMobile
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
| 
						 | 
					@ -74,12 +92,46 @@ export default Vue.extend({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<style lang="stylus">
 | 
					<style lang="stylus">
 | 
				
			||||||
.mk-admin
 | 
					.mk-admin
 | 
				
			||||||
 | 
						$headerHeight = 48px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	display flex
 | 
						display flex
 | 
				
			||||||
	height 100%
 | 
						height 100%
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						> header
 | 
				
			||||||
 | 
							position fixed
 | 
				
			||||||
 | 
							top 0
 | 
				
			||||||
 | 
							z-index 10000
 | 
				
			||||||
 | 
							width 100%
 | 
				
			||||||
 | 
							color var(--mobileHeaderFg)
 | 
				
			||||||
 | 
							background-color var(--mobileHeaderBg)
 | 
				
			||||||
 | 
							box-shadow 0 1px 0 rgba(#000, 0.075)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							&, *
 | 
				
			||||||
 | 
								user-select none
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							> span
 | 
				
			||||||
 | 
								display block
 | 
				
			||||||
 | 
								line-height $headerHeight
 | 
				
			||||||
 | 
								text-align center
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							> .nav
 | 
				
			||||||
 | 
								display block
 | 
				
			||||||
 | 
								position absolute
 | 
				
			||||||
 | 
								top 0
 | 
				
			||||||
 | 
								left 0
 | 
				
			||||||
 | 
								z-index 10001
 | 
				
			||||||
 | 
								padding 0
 | 
				
			||||||
 | 
								width $headerHeight
 | 
				
			||||||
 | 
								font-size 1.4em
 | 
				
			||||||
 | 
								line-height $headerHeight
 | 
				
			||||||
 | 
								border-right solid 1px rgba(#000, 0.1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								> [data-fa]
 | 
				
			||||||
 | 
									transition all 0.2s ease
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	> nav
 | 
						> nav
 | 
				
			||||||
		position fixed
 | 
							position fixed
 | 
				
			||||||
		z-index 10000
 | 
							z-index 20001
 | 
				
			||||||
		top 0
 | 
							top 0
 | 
				
			||||||
		left 0
 | 
							left 0
 | 
				
			||||||
		width 250px
 | 
							width 250px
 | 
				
			||||||
| 
						 | 
					@ -187,9 +239,22 @@ export default Vue.extend({
 | 
				
			||||||
						border-bottom solid 16px transparent
 | 
											border-bottom solid 16px transparent
 | 
				
			||||||
						border-left solid 16px transparent
 | 
											border-left solid 16px transparent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						> .nav-backdrop
 | 
				
			||||||
 | 
							position fixed
 | 
				
			||||||
 | 
							top 0
 | 
				
			||||||
 | 
							left 0
 | 
				
			||||||
 | 
							z-index 20000
 | 
				
			||||||
 | 
							width 100%
 | 
				
			||||||
 | 
							height 100%
 | 
				
			||||||
 | 
							background var(--mobileNavBackdrop)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	> main
 | 
						> main
 | 
				
			||||||
		width 100%
 | 
							width 100%
 | 
				
			||||||
		padding 32px 32px 32px calc(32px + 250px)
 | 
							padding 0 0 0 250px
 | 
				
			||||||
		max-width 1300px
 | 
							max-width 1300px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						&.isMobile
 | 
				
			||||||
 | 
							> main
 | 
				
			||||||
 | 
								padding $headerHeight 0 0 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</style>
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
<div>
 | 
					<div class="axbwjelsbymowqjyywpirzhdlszoncqs">
 | 
				
			||||||
	<ui-card>
 | 
						<ui-card>
 | 
				
			||||||
		<div slot="title">%i18n:@banner-url%</div>
 | 
							<div slot="title">%i18n:@banner-url%</div>
 | 
				
			||||||
		<section class="fit-top">
 | 
							<section class="fit-top">
 | 
				
			||||||
| 
						 | 
					@ -60,3 +60,10 @@ export default Vue.extend({
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="stylus" scoped>
 | 
				
			||||||
 | 
					.axbwjelsbymowqjyywpirzhdlszoncqs
 | 
				
			||||||
 | 
						@media (min-width 500px)
 | 
				
			||||||
 | 
							padding 16px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
<div>
 | 
					<div class="ucnffhbtogqgscfmqcymwmmupoknpfsw">
 | 
				
			||||||
	<ui-card>
 | 
						<ui-card>
 | 
				
			||||||
		<div slot="title">%i18n:@verify-user%</div>
 | 
							<div slot="title">%i18n:@verify-user%</div>
 | 
				
			||||||
		<section class="fit-top">
 | 
							<section class="fit-top">
 | 
				
			||||||
| 
						 | 
					@ -127,3 +127,10 @@ export default Vue.extend({
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="stylus" scoped>
 | 
				
			||||||
 | 
					.ucnffhbtogqgscfmqcymwmmupoknpfsw
 | 
				
			||||||
 | 
						@media (min-width 500px)
 | 
				
			||||||
 | 
							padding 16px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue