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/components/LdLink.vue | 75 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 75 insertions(+)
 create mode 100644 viewer/src/components/LdLink.vue

(limited to 'viewer/src/components/LdLink.vue')

diff --git a/viewer/src/components/LdLink.vue b/viewer/src/components/LdLink.vue
new file mode 100644
index 0000000..a5fd4d5
--- /dev/null
+++ b/viewer/src/components/LdLink.vue
@@ -0,0 +1,75 @@
+<!-- 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 <https://www.gnu.org/licenses/>.
+-->
+
+<template>
+  <router-link
+    v-if="props.to"
+    :to="props.to"
+    :class="$style.link"
+    v-bind="attrs"
+    @keypress.space="pushTo"
+  >
+    <slot />
+  </router-link>
+  <a
+    v-else
+    :class="$style.link"
+    v-bind="attrs"
+    @click="click"
+    @keypress.space.enter="click"
+  >
+    <slot />
+  </a>
+</template>
+
+<script setup lang="ts">
+import { PropType, useAttrs } from 'vue';
+import { RouteLocationRaw, useRouter } from 'vue-router';
+
+const props = defineProps({
+  to: { type: [String, Object] as PropType<RouteLocationRaw>, default: null },
+});
+const emit = defineEmits(['click']);
+const attrs = useAttrs();
+const router = useRouter();
+
+function click() {
+  emit('click');
+}
+function pushTo() {
+  router.push(props.to);
+}
+</script>
+
+<style lang="scss" module>
+@import "~@/assets/scss/theme";
+
+a, .link {
+  color: $link;
+  text-decoration: none;
+  cursor: pointer;
+  &:hover {
+    color: $link-hover;
+  }
+  &:focus {
+    color: $link-hover;
+    outline: 1px solid  $button-active-color;
+  }
+}
+</style>
-- 
cgit v1.2.3

