aboutsummaryrefslogtreecommitdiff
path: root/viewer/src/views/PanelTop.vue
diff options
context:
space:
mode:
Diffstat (limited to 'viewer/src/views/PanelTop.vue')
-rw-r--r--viewer/src/views/PanelTop.vue86
1 files changed, 86 insertions, 0 deletions
diff --git a/viewer/src/views/PanelTop.vue b/viewer/src/views/PanelTop.vue
new file mode 100644
index 0000000..0efc9b6
--- /dev/null
+++ b/viewer/src/views/PanelTop.vue
@@ -0,0 +1,86 @@
1<!-- ldgallery - A static generator which turns a collection of tagged
2-- pictures into a searchable web gallery.
3--
4-- Copyright (C) 2019-2020 Guillaume FOUET
5--
6-- This program is free software: you can redistribute it and/or modify
7-- it under the terms of the GNU Affero General Public License as
8-- published by the Free Software Foundation, either version 3 of the
9-- License, or (at your option) any later version.
10--
11-- This program is distributed in the hope that it will be useful,
12-- but WITHOUT ANY WARRANTY; without even the implied warranty of
13-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14-- GNU Affero General Public License for more details.
15--
16-- You should have received a copy of the GNU Affero General Public License
17-- along with this program. If not, see <https://www.gnu.org/licenses/>.
18-->
19
20<template>
21 <div v-if="isReady">
22 <b-steps
23 v-model="activeStep"
24 class="pathBreadcrumb"
25 type="is-info"
26 :has-navigation="false"
27 :animated="false"
28 @input="onStepClick"
29 >
30 <b-step-item
31 v-for="item in $galleryStore.currentItemPath"
32 :key="item.path"
33 :label="item.title"
34 :icon="getIcon(item)"
35 :to="item.path"
36 />
37 </b-steps>
38 </div>
39</template>
40
41<script lang="ts">
42import { Component, Vue, Prop, Watch } from "vue-property-decorator";
43import Gallery from "./Gallery.vue";
44
45@Component
46export default class PanelTop extends Vue {
47 activeStep: number = -1;
48
49 mounted() {
50 this.currentItemPathChanged();
51 }
52
53 get isReady() {
54 return this.activeStep >= 0;
55 }
56
57 @Watch("$galleryStore.currentItemPath")
58 currentItemPathChanged() {
59 this.activeStep = -1;
60 this.$nextTick(() => (this.activeStep = this.$galleryStore.currentItemPath.length - 1));
61 }
62
63 getIcon(item: Gallery.Item) {
64 switch (item.properties.type) {
65 case "picture":
66 return "image";
67 case "directory":
68 return "folder";
69 }
70 }
71
72 onStepClick(index: number) {
73 const item = this.$galleryStore.currentItemPath[index];
74 if (item) this.$router.push(item.path);
75 }
76}
77</script>
78
79<style lang="scss">
80.pathBreadcrumb {
81 margin: 3px;
82}
83.step-title {
84 color: white;
85}
86</style>