From 00510820a2794efcadbc83f7f8b54318fe198ecb Mon Sep 17 00:00:00 2001 From: Zéro~Informatique Date: Tue, 26 Jul 2022 08:44:34 +0200 Subject: viewer: migrate to vue 3, general refactoring and cleanup Non-exhaustive list of fixes and improvements done at the same time: - html default background to grey (avoids white flash during init) - unified links behavior - added more theme variables - removed the flex-expand transition (it wasn't working) and replaced it with a slide - fixed LdLoading not centered on the content - title on removable tags - fixed an issue with encoded URI from vue-router - unified Item resource URLs - removed the iframe for PlainTextViewer (it wasn't working properly) and replaced it with a pre - fixed clear and search buttons tabindex - fixed the information panel bumping up during the fade animation of tag's dropdown - fixed some focus outlines not appearing correctly - moved CSS variables to the :root context - Code cleaning GitHub: closes #217 GitHub: closes #300 GitHub: closes #297 GitHub: closes #105 GitHub: closes #267 GitHub: closes #275 GitHub: closes #228 GitHub: closes #215 GitHub: closes #112 --- viewer/src/plugins/asyncLib.ts | 3 ++ viewer/src/plugins/buefy.ts | 48 ----------------------------- viewer/src/plugins/devServer.js | 53 +++++++++++++++++++++++++++++++++ viewer/src/plugins/dragscroll.ts | 23 -------------- viewer/src/plugins/fontawesome-icons.ts | 45 ---------------------------- viewer/src/plugins/fontawesome.ts | 31 ------------------- viewer/src/plugins/i18n.ts | 19 +++++------- viewer/src/plugins/index.ts | 8 ----- viewer/src/plugins/lazyimage.ts | 23 -------------- viewer/src/plugins/router.ts | 22 ++++++-------- 10 files changed, 73 insertions(+), 202 deletions(-) create mode 100644 viewer/src/plugins/asyncLib.ts delete mode 100644 viewer/src/plugins/buefy.ts create mode 100644 viewer/src/plugins/devServer.js delete mode 100644 viewer/src/plugins/dragscroll.ts delete mode 100644 viewer/src/plugins/fontawesome-icons.ts delete mode 100644 viewer/src/plugins/fontawesome.ts delete mode 100644 viewer/src/plugins/index.ts delete mode 100644 viewer/src/plugins/lazyimage.ts (limited to 'viewer/src/plugins') diff --git a/viewer/src/plugins/asyncLib.ts b/viewer/src/plugins/asyncLib.ts new file mode 100644 index 0000000..de4f7ee --- /dev/null +++ b/viewer/src/plugins/asyncLib.ts @@ -0,0 +1,3 @@ + +export const importFaIcon = async() => (await import(/* webpackChunkName: "icons" */ '@fortawesome/vue-fontawesome')).FontAwesomeIcon; +export const importHammer = async() => import(/* webpackChunkName: "hammer" */'hammerjs'); diff --git a/viewer/src/plugins/buefy.ts b/viewer/src/plugins/buefy.ts deleted file mode 100644 index 4794ad9..0000000 --- a/viewer/src/plugins/buefy.ts +++ /dev/null @@ -1,48 +0,0 @@ -/* ldgallery - A static generator which turns a collection of tagged --- pictures into a searchable web gallery. --- --- Copyright (C) 2019-2020 Guillaume FOUET --- --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU Affero General Public License as --- published by the Free Software Foundation, either version 3 of the --- License, or (at your option) any later version. --- --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU Affero General Public License for more details. --- --- You should have received a copy of the GNU Affero General Public License --- along with this program. If not, see . -*/ - -import Vue from "vue"; - -// @ts-ignore -import Taginput from "buefy/src/components/taginput"; -// @ts-ignore -import Loading from "buefy/src/components/loading"; -// @ts-ignore -import Button from "buefy/src/components/button"; -// @ts-ignore -import SnackBar from "buefy/src/components/snackbar"; -// @ts-ignore -import Tag from "buefy/src/components/tag"; -// @ts-ignore -import DropDown from "buefy/src/components/dropdown"; - -import "@/assets/scss/buefy.scss"; - -Vue.use(Taginput); -Vue.use(Loading); -Vue.use(Button); -Vue.use(SnackBar); -Vue.use(Tag); -Vue.use(DropDown); - -declare module "vue/types/vue" { - interface Vue { - $buefy: any; - } -} diff --git a/viewer/src/plugins/devServer.js b/viewer/src/plugins/devServer.js new file mode 100644 index 0000000..2cccbbb --- /dev/null +++ b/viewer/src/plugins/devServer.js @@ -0,0 +1,53 @@ +/* ldgallery - A static generator which turns a collection of tagged +-- pictures into a searchable web gallery. +-- +-- Copyright (C) 2019-2022 Guillaume FOUET +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU Affero General Public License as +-- published by the Free Software Foundation, either version 3 of the +-- License, or (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU Affero General Public License for more details. +-- +-- You should have received a copy of the GNU Affero General Public License +-- along with this program. If not, see . +*/ + +/* +-- Create a file .env.development.local in the project to customize your DevServer +-- VUE_APP_DEVSERVER_CONFIG_PATH= will use the dev_proxyconfig +-- VUE_APP_DEVSERVER_CONFIG_PATH= will use the dev_fsconfig +*/ + +const devReady = Boolean(process.env.VUE_APP_DEVSERVER_CONFIG_PATH); +const devIsProxy = devReady && Boolean(process.env.VUE_APP_DEVSERVER_CONFIG_PATH?.match(/^https?:\/\//i)); +const devLocalpath = `^/${process.env.VUE_APP_DATA_URL}`; +const devProxyconfig = { + [devLocalpath]: { + target: process.env.VUE_APP_DEVSERVER_CONFIG_PATH, + pathRewrite: { [devLocalpath]: '' }, + }, +}; + +function devFsConfig(middlewares, devServer) { + devServer.app.get(`${devLocalpath}*`, (req, res) => { + const fs = require('fs'); + const url = req.url.slice(process.env.VUE_APP_DATA_URL?.length); + const paramIdx = url.indexOf('?'); + const filepath = paramIdx < 0 ? url : url.substring(0, paramIdx); + const fullpath = `${process.env.VUE_APP_DEVSERVER_CONFIG_PATH}${decodeURIComponent(filepath)}`; + const file = fs.readFileSync(fullpath); + res.end(file); + }); + return middlewares; +} + +module.exports = { + port: process.env.VUE_APP_DEVSERVER_PORT, + proxy: devReady && devIsProxy ? devProxyconfig : undefined, + setupMiddlewares: devReady && !devIsProxy ? devFsConfig : undefined, +}; diff --git a/viewer/src/plugins/dragscroll.ts b/viewer/src/plugins/dragscroll.ts deleted file mode 100644 index a10b0fd..0000000 --- a/viewer/src/plugins/dragscroll.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* ldgallery - A static generator which turns a collection of tagged --- pictures into a searchable web gallery. --- --- Copyright (C) 2019-2020 Guillaume FOUET --- --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU Affero General Public License as --- published by the Free Software Foundation, either version 3 of the --- License, or (at your option) any later version. --- --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU Affero General Public License for more details. --- --- You should have received a copy of the GNU Affero General Public License --- along with this program. If not, see . -*/ - -import Vue from "vue"; -import VueDragscroll from "vue-dragscroll"; - -Vue.use(VueDragscroll); diff --git a/viewer/src/plugins/fontawesome-icons.ts b/viewer/src/plugins/fontawesome-icons.ts deleted file mode 100644 index 4b50641..0000000 --- a/viewer/src/plugins/fontawesome-icons.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* ldgallery - A static generator which turns a collection of tagged --- pictures into a searchable web gallery. --- --- Copyright (C) 2019-2020 Guillaume FOUET --- --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU Affero General Public License as --- published by the Free Software Foundation, either version 3 of the --- License, or (at your option) any later version. --- --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU Affero General Public License for more details. --- --- You should have received a copy of the GNU Affero General Public License --- along with this program. If not, see . -*/ - -export { - faFolder, - faFolderOpen, - faEraser, - faSearch, - faPlus, - faMinus, - faImage, - faHome, - faArrowLeft, - faLevelUpAlt, - faAngleRight, - faAngleDoubleLeft, - faFile, - faFileAlt, - faFilePdf, - faFileVideo, - faFileAudio, - faFileDownload, - faCaretUp, - faCaretDown, - faAngleDoubleDown, - faSortAmountDown, -} from "@fortawesome/free-solid-svg-icons"; - -export { faCircle, faDotCircle } from "@fortawesome/free-regular-svg-icons"; diff --git a/viewer/src/plugins/fontawesome.ts b/viewer/src/plugins/fontawesome.ts deleted file mode 100644 index 25ddd99..0000000 --- a/viewer/src/plugins/fontawesome.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* ldgallery - A static generator which turns a collection of tagged --- pictures into a searchable web gallery. --- --- Copyright (C) 2019-2020 Guillaume FOUET --- --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU Affero General Public License as --- published by the Free Software Foundation, either version 3 of the --- License, or (at your option) any later version. --- --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU Affero General Public License for more details. --- --- You should have received a copy of the GNU Affero General Public License --- along with this program. If not, see . -*/ - -import Vue from "vue"; - -import { library, config } from "@fortawesome/fontawesome-svg-core"; -import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome"; -import * as faIcons from "./fontawesome-icons"; - -library.add(faIcons); - -config.autoAddCss = false; -import "@fortawesome/fontawesome-svg-core/styles.css"; - -Vue.component("fa-icon", FontAwesomeIcon); diff --git a/viewer/src/plugins/i18n.ts b/viewer/src/plugins/i18n.ts index bc3dde5..c377250 100644 --- a/viewer/src/plugins/i18n.ts +++ b/viewer/src/plugins/i18n.ts @@ -1,7 +1,7 @@ /* ldgallery - A static generator which turns a collection of tagged -- pictures into a searchable web gallery. -- --- Copyright (C) 2019-2020 Guillaume FOUET +-- Copyright (C) 2019-2022 Guillaume FOUET -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU Affero General Public License as @@ -17,14 +17,11 @@ -- along with this program. If not, see . */ -import Vue from "vue"; -import VueI18n, { LocaleMessages } from "vue-i18n"; +import { createI18n, LocaleMessages, VueMessageType } from 'vue-i18n'; -Vue.use(VueI18n); - -function loadLocaleMessages(): LocaleMessages { - const locales = require.context("@/locales", true, /[A-Za-z0-9-_,\s]+\.json$/i); - const messages: LocaleMessages = {}; +function loadLocaleMessages(): LocaleMessages { + const locales = require.context('../locales', false, /[A-Za-z0-9-_,\s]+\.yml$/i); + const messages: LocaleMessages = {}; locales.keys().forEach(key => { const matched = key.match(/([A-Za-z0-9-_]+)\./i); if (matched && matched.length > 1) { @@ -35,8 +32,8 @@ function loadLocaleMessages(): LocaleMessages { return messages; } -export default new VueI18n({ - locale: process.env.VUE_APP_I18N_LOCALE || "en", - fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || "en", +export default createI18n({ + locale: process.env.VUE_APP_I18N_LOCALE || 'en', + fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || 'en', messages: loadLocaleMessages(), }); diff --git a/viewer/src/plugins/index.ts b/viewer/src/plugins/index.ts deleted file mode 100644 index 1555882..0000000 --- a/viewer/src/plugins/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -export const MainLayout = () => - Promise.all([ - import(/* webpackChunkName: "ui" */ "@/plugins/buefy"), - import(/* webpackChunkName: "ui" */ "@/components"), - import(/* webpackChunkName: "ui" */ "@/plugins/lazyimage"), - import(/* webpackChunkName: "ui" */ "@/plugins/dragscroll"), - import(/* webpackChunkName: "ui" */ "@/plugins/fontawesome"), - ]).then(() => import(/* webpackChunkName: "ui" */ "@/views/MainLayout.vue")); diff --git a/viewer/src/plugins/lazyimage.ts b/viewer/src/plugins/lazyimage.ts deleted file mode 100644 index 276c7e2..0000000 --- a/viewer/src/plugins/lazyimage.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* ldgallery - A static generator which turns a collection of tagged --- pictures into a searchable web gallery. --- --- Copyright (C) 2019-2020 Guillaume FOUET --- --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU Affero General Public License as --- published by the Free Software Foundation, either version 3 of the --- License, or (at your option) any later version. --- --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU Affero General Public License for more details. --- --- You should have received a copy of the GNU Affero General Public License --- along with this program. If not, see . -*/ - -import Vue from "vue"; -import { VLazyImagePlugin } from "v-lazy-image"; - -Vue.use(VLazyImagePlugin); diff --git a/viewer/src/plugins/router.ts b/viewer/src/plugins/router.ts index 03ca021..8568173 100644 --- a/viewer/src/plugins/router.ts +++ b/viewer/src/plugins/router.ts @@ -1,7 +1,7 @@ /* ldgallery - A static generator which turns a collection of tagged -- pictures into a searchable web gallery. -- --- Copyright (C) 2019-2020 Guillaume FOUET +-- Copyright (C) 2019-2022 Guillaume FOUET -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU Affero General Public License as @@ -17,26 +17,22 @@ -- along with this program. If not, see . */ -import Vue from "vue"; -import VueRouter, { RouteConfig } from "vue-router"; -import GalleryNavigation from "@/views/GalleryNavigation.vue"; +import GalleryNavigation from '@/views/GalleryNavigation.vue'; +import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'; -Vue.use(VueRouter); - -const routes: RouteConfig[] = [ +const routes: Array = [ { - path: "*", - name: "GalleryNavigation", + path: '/:catchAll(.*)', + name: 'GalleryNavigation', component: GalleryNavigation, props: route => ({ - path: route.params.pathMatch, + path: decodeURIComponent(route.path), query: Object.keys(route.query), }), }, ]; -const router = new VueRouter({ +export default createRouter({ + history: createWebHashHistory(), routes, }); - -export default router; -- cgit v1.2.3