make admin panel mobile-compatible

This commit is contained in:
2023-06-21 19:23:46 +02:00
parent 30c1b0fa2e
commit 8fe3a9a003
3 changed files with 135 additions and 30 deletions

View File

@@ -12,17 +12,20 @@
<div class="top-bar"> <div class="top-bar">
<h1>Admin panel</h1> <h1>Admin panel</h1>
</div> </div>
<button class="hideNav">&#9776</button> <button class="hideNav navHidden" @click="navMenu( 'toggle' );">&#9776</button>
<nav class="side-nav"> <nav class="side-nav">
<div class="side-nav-wrapper">
<img src="@/assets/logo.png" alt="libreevent logo" style="width: 80%; margin-left: 10%; margin-bottom: 5%;"> <img src="@/assets/logo.png" alt="libreevent logo" style="width: 80%; margin-left: 10%; margin-bottom: 5%;">
<router-link to="/admin" class="admin-menu">Home</router-link> <router-link to="/admin" class="admin-menu" @click="navMenu( 'hide' )">Home</router-link>
<router-link to="/admin/pages" class="admin-menu">Pages</router-link> <router-link to="/admin/pages" class="admin-menu" @click="navMenu( 'hide' )">Pages</router-link>
<router-link to="/admin/events" class="admin-menu">Events</router-link> <router-link to="/admin/events" class="admin-menu" @click="navMenu( 'hide' )">Events</router-link>
<router-link to="/admin/locations" class="admin-menu">Locations</router-link> <router-link to="/admin/locations" class="admin-menu" @click="navMenu( 'hide' )">Locations</router-link>
<router-link to="/admin/plugins" class="admin-menu">Plugins</router-link> <router-link to="/admin/plugins" class="admin-menu" @click="navMenu( 'hide' )">Plugins</router-link>
<router-link to="/admin/settings" class="admin-menu">Settings</router-link> <router-link to="/admin/settings" class="admin-menu" @click="navMenu( 'hide' )">Settings</router-link>
<button to="/admin/login" class="admin-menu" @click="logout()">Logout</button> <button to="/admin/login" class="admin-menu" @click="logout()">Logout</button>
</div>
</nav> </nav>
<div class="backdrop" @click="navMenu( 'hide' )"></div>
<div class="main-view"> <div class="main-view">
<router-view v-slot="{ Component, route }"> <router-view v-slot="{ Component, route }">
<transition :name="route.meta.transition || 'fade'" mode="out-in"> <transition :name="route.meta.transition || 'fade'" mode="out-in">
@@ -34,6 +37,102 @@
</template> </template>
<style scoped> <style scoped>
.admin-wrapper {
display: block;
height: 100%;
}
.top-bar {
display: flex;
justify-content: center;
align-items: center;
height: 10vh;
}
.main-view {
grid-area: main;
height: 90vh;
width: 100vw;
min-height: 80vh;
overflow: scroll;
}
.backdrop {
width: 100vw;
height: 100vh;
z-index: 1;
display: none;
position: fixed;
top: 0;
left: 0;
background-color: rgba( 0, 0, 0, 0.7 );
}
.side-nav {
position: fixed;
display: none;
height: 100vh;
top: 0;
width: 30vw;
padding: 0;
margin: 0;
background-color: var( --accent-background );
z-index: 3;
}
.side-nav-wrapper {
display: flex;
flex-direction: column;
justify-content: center;
overflow: scroll;
height: 100%;
}
.admin-menu {
padding: 4% 0%;
width: 100%;
background-color: rgba( 0, 0, 0, 0 );
color: var( --secondary-color );
cursor: pointer;
font-family: Avenir, Helvetica, Arial, sans-serif;
font-weight: bold;
text-decoration: none;
transition: 1s;
font-size: 100%;
border-style: none;
}
nav a.router-link-exact-active {
background-color: var( --accent-background-hover );
}
.admin-menu:hover {
background-color: var( --accent-background-hover );
transition: 0.4s;
}
.hideNav {
border: none;
font-size: 300%;
color: var( --secondary-color );
width: fit-content;
background-color: rgba( 0, 0, 0, 0 );
position: fixed;
cursor: pointer;
top: 1vw;
left: 2vw;
z-index: 5;
}
.navHidden {
color: var( --primary-color );
}
@media only screen and (min-width: 1299px) {
.hideNav, .backdrop {
display: none;
}
.admin-wrapper { .admin-wrapper {
display: grid; display: grid;
grid-template-areas: grid-template-areas:
@@ -66,6 +165,7 @@
} }
.side-nav { .side-nav {
position: initial;
grid-area: sidebar; grid-area: sidebar;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -100,20 +200,6 @@
background-color: var( --accent-background-hover ); background-color: var( --accent-background-hover );
transition: 0.4s; transition: 0.4s;
} }
.hideNav {
border: none;
font-size: 300%;
color: var( --secondary-color );
width: fit-content;
background-color: rgba( 0, 0, 0, 0 );
position: fixed;
}
@media only screen and (min-width: 1299px) {
.hideNav {
display: none;
}
} }
</style> </style>
@@ -144,6 +230,23 @@
this.$router.push( '/admin/login' ); this.$router.push( '/admin/login' );
} ); } );
} }
},
navMenu ( action ) {
if ( screen.width < 1300 ) {
if ( action === 'toggle' ) {
$( '.side-nav' ).toggle( 300 );
$( '.hideNav' ).toggleClass( 'navHidden' );
$( '.backdrop' ).toggle( 300 );
} else if ( action === 'show' ) {
$( '.backdrop' ).show( 300 );
$( '.side-nav' ).show( 300 );
$( '.hideNav' ).removeClass( 'navHidden' );
} else {
$( '.side-nav' ).hide( 300 );
$( '.backdrop' ).hide( 300 );
$( '.hideNav' ).addClass( 'navHidden' );
}
}
} }
} }
}; };

View File

@@ -16,6 +16,7 @@
<option value="TestLocation">TestLocation</option> <option value="TestLocation">TestLocation</option>
</select><br> </select><br>
<input v-model="event.date" class="small-text" type="date"><br> <input v-model="event.date" class="small-text" type="date"><br>
<router-link to="/admin/ticketEditor">Edit ticket layout</router-link>
</div> </div>
<div class="ticket-settings"> <div class="ticket-settings">
<h3>Ticket Settings</h3> <h3>Ticket Settings</h3>

View File

@@ -1,6 +1,7 @@
<template> <template>
<div id="ticketEditor"> <div id="ticketEditor">
<h1>Ticket Editor</h1> <h1>Ticket Editor</h1>
<router-link to="/admin/events/view">Back to event settings</router-link>
<div id="editor">Loading editor...</div> <div id="editor">Loading editor...</div>
</div> </div>
</template> </template>