diff --git a/src/webapp/setup/package.json b/src/webapp/setup/package.json index 266e329..f8fb01c 100644 --- a/src/webapp/setup/package.json +++ b/src/webapp/setup/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "scripts": { - "dev": "vite", + "serve": "vite", "build": "vite build", "preview": "vite preview", "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore" diff --git a/src/webapp/setup/src/App.vue b/src/webapp/setup/src/App.vue index e864195..a089940 100644 --- a/src/webapp/setup/src/App.vue +++ b/src/webapp/setup/src/App.vue @@ -1,85 +1,154 @@ - - - + + \ No newline at end of file diff --git a/src/webapp/setup/src/assets/base.css b/src/webapp/setup/src/assets/base.css deleted file mode 100644 index d3de42e..0000000 --- a/src/webapp/setup/src/assets/base.css +++ /dev/null @@ -1,73 +0,0 @@ -/* color palette from */ -:root { - --vt-c-white: #ffffff; - --vt-c-white-soft: #f8f8f8; - --vt-c-white-mute: #f2f2f2; - - --vt-c-black: #181818; - --vt-c-black-soft: #222222; - --vt-c-black-mute: #282828; - - --vt-c-indigo: #2c3e50; - - --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); - --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); - --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); - --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); - - --vt-c-text-light-1: var(--vt-c-indigo); - --vt-c-text-light-2: rgba(60, 60, 60, 0.66); - --vt-c-text-dark-1: var(--vt-c-white); - --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); -} - -/* semantic color variables for this project */ -:root { - --color-background: var(--vt-c-white); - --color-background-soft: var(--vt-c-white-soft); - --color-background-mute: var(--vt-c-white-mute); - - --color-border: var(--vt-c-divider-light-2); - --color-border-hover: var(--vt-c-divider-light-1); - - --color-heading: var(--vt-c-text-light-1); - --color-text: var(--vt-c-text-light-1); - - --section-gap: 160px; -} - -@media (prefers-color-scheme: dark) { - :root { - --color-background: var(--vt-c-black); - --color-background-soft: var(--vt-c-black-soft); - --color-background-mute: var(--vt-c-black-mute); - - --color-border: var(--vt-c-divider-dark-2); - --color-border-hover: var(--vt-c-divider-dark-1); - - --color-heading: var(--vt-c-text-dark-1); - --color-text: var(--vt-c-text-dark-2); - } -} - -*, -*::before, -*::after { - box-sizing: border-box; - margin: 0; - font-weight: normal; -} - -body { - min-height: 100vh; - color: var(--color-text); - background: var(--color-background); - transition: color 0.5s, background-color 0.5s; - line-height: 1.6; - font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, - Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; - font-size: 15px; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} diff --git a/src/webapp/setup/src/assets/logo.png b/src/webapp/setup/src/assets/logo.png new file mode 100644 index 0000000..baddb05 Binary files /dev/null and b/src/webapp/setup/src/assets/logo.png differ diff --git a/src/webapp/setup/src/assets/logo.svg b/src/webapp/setup/src/assets/logo.svg deleted file mode 100644 index 7565660..0000000 --- a/src/webapp/setup/src/assets/logo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/webapp/setup/src/assets/main.css b/src/webapp/setup/src/assets/main.css deleted file mode 100644 index e8667cd..0000000 --- a/src/webapp/setup/src/assets/main.css +++ /dev/null @@ -1,35 +0,0 @@ -@import './base.css'; - -#app { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - - font-weight: normal; -} - -a, -.green { - text-decoration: none; - color: hsla(160, 100%, 37%, 1); - transition: 0.4s; -} - -@media (hover: hover) { - a:hover { - background-color: hsla(160, 100%, 37%, 0.2); - } -} - -@media (min-width: 1024px) { - body { - display: flex; - place-items: center; - } - - #app { - display: grid; - grid-template-columns: 1fr 1fr; - padding: 0 2rem; - } -} diff --git a/src/webapp/setup/src/main.js b/src/webapp/setup/src/main.js index 5dcad83..2b3a72b 100644 --- a/src/webapp/setup/src/main.js +++ b/src/webapp/setup/src/main.js @@ -1,14 +1,12 @@ -import './assets/main.css' +import { createApp } from 'vue'; +import { createPinia } from 'pinia'; -import { createApp } from 'vue' -import { createPinia } from 'pinia' +import App from './App.vue'; +import router from './router'; -import App from './App.vue' -import router from './router' +const app = createApp( App ); -const app = createApp(App) +app.use( createPinia() ); +app.use( router ); -app.use(createPinia()) -app.use(router) - -app.mount('#app') +app.mount('#app'); diff --git a/src/webapp/setup/src/router/index.js b/src/webapp/setup/src/router/index.js index a49ae50..30a455b 100644 --- a/src/webapp/setup/src/router/index.js +++ b/src/webapp/setup/src/router/index.js @@ -1,23 +1,36 @@ -import { createRouter, createWebHistory } from 'vue-router' -import HomeView from '../views/HomeView.vue' +import { createRouter, createWebHistory } from 'vue-router'; +import { useBackendStore } from '@/stores/backendStore'; +import HomeView from '../views/HomeView.vue'; +import setupRoutes from './setupRoutes'; + +let routes = [ + { + path: '/', + name: 'home', + component: HomeView, + meta: { + title: 'Welcome to libreevent!' + } + }, +] + +routes.push( setupRoutes ); const router = createRouter({ - history: createWebHistory(import.meta.env.BASE_URL), - routes: [ - { - path: '/', - name: 'home', - component: HomeView - }, - { - path: '/about', - name: 'about', - // route level code-splitting - // this generates a separate chunk (About.[hash].js) for this route - // which is lazy-loaded when the route is visited. - component: () => import('../views/AboutView.vue') + history: createWebHistory(import.meta.env.BASE_URL), + routes: routes +} ) + +router.beforeEach( ( to ) => { + let backendStore = useBackendStore(); + backendStore.loadVisitedSetupPages(); + if ( to.name.substring( 0, 5 ) === 'setup' && !backendStore.getVisitedSetupPages[ to.name.substring( 5 ).toLowerCase() ] && to.name.substring( 5 ).toLowerCase() !== 'start' && to.name.substring( 5 ).toLowerCase() !== 'root' ) { + return { name: 'setupStart' }; } - ] -}) +} ); + +router.afterEach( ( to ) => { + document.title = to.meta.title ? to.meta.title : 'libreevent'; +} ); export default router diff --git a/src/webapp/setup/src/router/setupRoutes.js b/src/webapp/setup/src/router/setupRoutes.js index 032e203..98a83dc 100644 --- a/src/webapp/setup/src/router/setupRoutes.js +++ b/src/webapp/setup/src/router/setupRoutes.js @@ -10,16 +10,16 @@ export default { path: '/setup', name: 'setup', - component: () => import( '../views/setup/SetupView.vue' ), + component: () => import( '../views/SetupView.vue' ), meta: { - title: 'Login :: Admin - libreevent', + title: 'Setup :: Admin - libreevent', setupAuthRequired: true, }, children: [ { path: '', name: 'setupStart', - component: () => import( '../views/setup/SetupStartView.vue' ), + component: () => import( '../views/SetupStartView.vue' ), meta: { title: 'Start :: Setup - libreevent', setupAuthRequired: true, @@ -28,7 +28,7 @@ export default { { path: 'root', name: 'setupRoot', - component: () => import( '../views/setup/SetupRootView.vue' ), + component: () => import( '../views/SetupRootView.vue' ), meta: { title: 'Root account :: Setup - libreevent', setupAuthRequired: true, @@ -37,7 +37,7 @@ export default { { path: 'page', name: 'setupPage', - component: () => import( '../views/setup/SetupPageView.vue' ), + component: () => import( '../views/SetupPageView.vue' ), meta: { title: 'Landing page :: Setup - libreevent', setupAuthRequired: true, @@ -46,7 +46,7 @@ export default { { path: 'payments', name: 'setupPayments', - component: () => import( '../views/setup/SetupPaymentsView.vue' ), + component: () => import( '../views/SetupPaymentsView.vue' ), meta: { title: 'Payments :: Setup - libreevent', setupAuthRequired: true, @@ -55,7 +55,7 @@ export default { { path: 'events', name: 'setupEvents', - component: () => import( '../views/setup/SetupEventsView.vue' ), + component: () => import( '../views/SetupEventsView.vue' ), meta: { title: 'Events :: Setup - libreevent', setupAuthRequired: true, @@ -64,7 +64,7 @@ export default { { path: 'tos', name: 'setupTOS', - component: () => import( '../views/setup/SetupTOSView.vue' ), + component: () => import( '../views/SetupTOSView.vue' ), meta: { title: 'TOS (Optional) :: Setup - libreevent', setupAuthRequired: true, @@ -73,7 +73,7 @@ export default { { path: 'complete', name: 'setupComplete', - component: () => import( '../views/setup/SetupCompleteView.vue' ), + component: () => import( '../views/SetupCompleteView.vue' ), meta: { title: 'Setup complete :: Setup - libreevent', setupAuthRequired: true, diff --git a/src/webapp/setup/src/stores/backendStore.js b/src/webapp/setup/src/stores/backendStore.js new file mode 100644 index 0000000..07b43aa --- /dev/null +++ b/src/webapp/setup/src/stores/backendStore.js @@ -0,0 +1,26 @@ +/* +* libreevent - backendStore.js +* +* Created by Janis Hutz 05/14/2023, Licensed under the GPL V3 License +* https://janishutz.com, development@janishutz.com +* +* +*/ + +import { defineStore } from "pinia"; + +export const useBackendStore = defineStore ( 'backend', { + state: () => ( { 'visitedSetupPages': {} } ), + getters: { + getVisitedSetupPages: ( state ) => state.visitedSetupPages, + }, + actions: { + addVisitedSetupPages ( page, data ) { + this.visitedSetupPages[ page ] = data; + sessionStorage.setItem( 'visitedSetupPages', JSON.stringify( this.visitedSetupPages ) ); + }, + loadVisitedSetupPages () { + this.visitedSetupPages = sessionStorage.getItem( 'visitedSetupPages' ) ? JSON.parse( sessionStorage.getItem( 'visitedSetupPages' ) ) : {}; + } + } +} ); \ No newline at end of file diff --git a/src/webapp/setup/src/stores/counter.js b/src/webapp/setup/src/stores/counter.js deleted file mode 100644 index b6757ba..0000000 --- a/src/webapp/setup/src/stores/counter.js +++ /dev/null @@ -1,12 +0,0 @@ -import { ref, computed } from 'vue' -import { defineStore } from 'pinia' - -export const useCounterStore = defineStore('counter', () => { - const count = ref(0) - const doubleCount = computed(() => count.value * 2) - function increment() { - count.value++ - } - - return { count, doubleCount, increment } -}) diff --git a/src/webapp/setup/src/views/HomeView.vue b/src/webapp/setup/src/views/HomeView.vue new file mode 100644 index 0000000..95979aa --- /dev/null +++ b/src/webapp/setup/src/views/HomeView.vue @@ -0,0 +1,51 @@ + + + + + + + \ No newline at end of file diff --git a/src/webapp/setup/src/views/SetupCompleteView.vue b/src/webapp/setup/src/views/SetupCompleteView.vue index af659e7..631acc6 100644 --- a/src/webapp/setup/src/views/SetupCompleteView.vue +++ b/src/webapp/setup/src/views/SetupCompleteView.vue @@ -12,7 +12,16 @@ libreevent logo

Setup complete!

Congratulations on finishing the setup of libreǝvent!

-

It is now time to head to the admin panel to add more accounts and to familiarise yourself with the admin portal

- To the admin panel +

Please restart the node.js application to have it load the actual user interface for libreevent. You may then log in at {{ windowURL }}

+ + diff --git a/src/webapp/setup/src/views/SetupEventsView.vue b/src/webapp/setup/src/views/SetupEventsView.vue index 8cd7c6c..01e5ec5 100644 --- a/src/webapp/setup/src/views/SetupEventsView.vue +++ b/src/webapp/setup/src/views/SetupEventsView.vue @@ -17,7 +17,7 @@ - - \ No newline at end of file diff --git a/src/webapp/src/views/HomeView.vue b/src/webapp/src/views/HomeView.vue index b7af175..8549861 100644 --- a/src/webapp/src/views/HomeView.vue +++ b/src/webapp/src/views/HomeView.vue @@ -8,12 +8,12 @@ -->