From c93ddb09008c45942544b13bbb03319c367f9cd8 Mon Sep 17 00:00:00 2001 From: Zephyrrus Date: Sun, 19 Jul 2020 22:27:11 +0300 Subject: feat: Start working on a new album/tags/image info modal --- src/site/components/image-modal/ImageInfo.vue | 179 ++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 src/site/components/image-modal/ImageInfo.vue (limited to 'src/site/components/image-modal') diff --git a/src/site/components/image-modal/ImageInfo.vue b/src/site/components/image-modal/ImageInfo.vue new file mode 100644 index 0000000..c9dba1a --- /dev/null +++ b/src/site/components/image-modal/ImageInfo.vue @@ -0,0 +1,179 @@ + + + + + -- cgit v1.2.3 From 18bb451f793677a5bbfdc2c14128bae33c66dfde Mon Sep 17 00:00:00 2001 From: Zephyrrus Date: Mon, 20 Jul 2020 23:01:45 +0300 Subject: feat: implement all-in-one file detail viewer, tag editor and album selection modal --- src/site/components/image-modal/AlbumInfo.vue | 73 ++++++++++++++++++ src/site/components/image-modal/ImageInfo.vue | 61 ++++++++++----- src/site/components/image-modal/TagInfo.vue | 103 ++++++++++++++++++++++++++ 3 files changed, 219 insertions(+), 18 deletions(-) create mode 100644 src/site/components/image-modal/AlbumInfo.vue create mode 100644 src/site/components/image-modal/TagInfo.vue (limited to 'src/site/components/image-modal') diff --git a/src/site/components/image-modal/AlbumInfo.vue b/src/site/components/image-modal/AlbumInfo.vue new file mode 100644 index 0000000..9d57e55 --- /dev/null +++ b/src/site/components/image-modal/AlbumInfo.vue @@ -0,0 +1,73 @@ + + + diff --git a/src/site/components/image-modal/ImageInfo.vue b/src/site/components/image-modal/ImageInfo.vue index c9dba1a..c3f0041 100644 --- a/src/site/components/image-modal/ImageInfo.vue +++ b/src/site/components/image-modal/ImageInfo.vue @@ -1,10 +1,13 @@ @@ -37,18 +37,37 @@ export default { type: Array, default: () => [], }, + albums: { + type: Array, + default: () => [], + }, }, data() { return { - selectedOptions: this.imageAlbums.map((e) => e.id), + selectedOptions: [], + orderedAlbums: [], }; }, - computed: { - ...mapState({ - albums: (state) => state.albums.tinyDetails, - }), + created() { + this.orderedAlbums = this.getOrderedAlbums(); + // we're sorting here instead of computed because we want sort on creation + // then the array's values should be frozen + this.selectedOptions = this.imageAlbums.map((e) => e.id); }, methods: { + getOrderedAlbums() { + return [...this.albums].sort( + (a, b) => { + const selectedA = this.imageAlbums.findIndex(({ name }) => name === a.name) !== -1; + const selectedB = this.imageAlbums.findIndex(({ name }) => name === b.name) !== -1; + + if (selectedA !== selectedB) { + return selectedA ? -1 : 1; + } + return a.name.localeCompare(b.name); + }, + ); + }, isAlbumSelected(id) { if (!this.showingModalForFile) return false; const found = this.showingModalForFile.albums.find((el) => el.id === id); diff --git a/src/site/components/image-modal/ImageInfo.vue b/src/site/components/image-modal/ImageInfo.vue index 485a8aa..0562e1f 100644 --- a/src/site/components/image-modal/ImageInfo.vue +++ b/src/site/components/image-modal/ImageInfo.vue @@ -102,7 +102,7 @@
Albums
- + @@ -134,7 +134,10 @@ export default { default: () => ([]), }, }, - computed: mapState(['images']), + computed: mapState({ + images: (state) => state.images, + tinyDetails: (state) => state.albums.tinyDetails, + }), methods: { formatBytes(bytes, decimals = 2) { if (bytes === 0) return '0 Bytes'; diff --git a/src/site/components/image-modal/TagInfo.vue b/src/site/components/image-modal/TagInfo.vue index 2054e6a..a337148 100644 --- a/src/site/components/image-modal/TagInfo.vue +++ b/src/site/components/image-modal/TagInfo.vue @@ -88,16 +88,8 @@ export default { .taginp { ::v-deep .dropdown-content { - background-color: hsl(0, 0%, 100%); - - .dropdown-item { - color: hsl(0, 0%, 29%); - - &:hover { - color: hsl(0, 0%, 4%); - background-color: hsl(0, 0%, 90%); - } - } + background-color: #323846; + box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); } } -- cgit v1.2.3 From 90001c2df56d58e69fd199a518ae7f3e4ed327fc Mon Sep 17 00:00:00 2001 From: Zephyrrus Date: Thu, 24 Dec 2020 10:40:50 +0200 Subject: chore: remove trailing commas --- src/site/components/image-modal/AlbumInfo.vue | 20 ++++++++++---------- src/site/components/image-modal/ImageInfo.vue | 16 ++++++++-------- src/site/components/image-modal/TagInfo.vue | 16 ++++++++-------- 3 files changed, 26 insertions(+), 26 deletions(-) (limited to 'src/site/components/image-modal') diff --git a/src/site/components/image-modal/AlbumInfo.vue b/src/site/components/image-modal/AlbumInfo.vue index 8974a11..17c375a 100644 --- a/src/site/components/image-modal/AlbumInfo.vue +++ b/src/site/components/image-modal/AlbumInfo.vue @@ -31,21 +31,21 @@ export default { props: { imageId: { type: Number, - default: 0, + default: 0 }, imageAlbums: { type: Array, - default: () => [], + default: () => [] }, albums: { type: Array, - default: () => [], - }, + default: () => [] + } }, data() { return { selectedOptions: [], - orderedAlbums: [], + orderedAlbums: [] }; }, created() { @@ -65,7 +65,7 @@ export default { return selectedA ? -1 : 1; } return a.name.localeCompare(b.name); - }, + } ); }, isAlbumSelected(id) { @@ -78,15 +78,15 @@ export default { if (this.selectedOptions.indexOf(id) > -1) { this.$handler.executeAction('images/addToAlbum', { albumId: id, - fileId: this.imageId, + fileId: this.imageId }); } else { this.$handler.executeAction('images/removeFromAlbum', { albumId: id, - fileId: this.imageId, + fileId: this.imageId }); } - }, - }, + } + } }; diff --git a/src/site/components/image-modal/ImageInfo.vue b/src/site/components/image-modal/ImageInfo.vue index 0562e1f..73b6339 100644 --- a/src/site/components/image-modal/ImageInfo.vue +++ b/src/site/components/image-modal/ImageInfo.vue @@ -118,25 +118,25 @@ import Taginfo from './TagInfo.vue'; export default { components: { Taginfo, - Albuminfo, + Albuminfo }, props: { file: { type: Object, - default: () => ({}), + default: () => ({}) }, albums: { type: Array, - default: () => ([]), + default: () => ([]) }, tags: { type: Array, - default: () => ([]), - }, + default: () => ([]) + } }, computed: mapState({ images: (state) => state.images, - tinyDetails: (state) => state.albums.tinyDetails, + tinyDetails: (state) => state.albums.tinyDetails }), methods: { formatBytes(bytes, decimals = 2) { @@ -152,8 +152,8 @@ export default { }, isVideo(type) { return type.startsWith('video'); - }, - }, + } + } }; diff --git a/src/site/components/image-modal/TagInfo.vue b/src/site/components/image-modal/TagInfo.vue index a337148..59d01f5 100644 --- a/src/site/components/image-modal/TagInfo.vue +++ b/src/site/components/image-modal/TagInfo.vue @@ -23,24 +23,24 @@ export default { props: { imageId: { type: Number, - default: 0, + default: 0 }, imageTags: { type: Array, - default: () => [], - }, + default: () => [] + } }, data() { return { - filteredTags: [], + filteredTags: [] }; }, computed: { ...mapState({ - tags: (state) => state.tags.tagsList, + tags: (state) => state.tags.tagsList }), selectedTags() { return this.imageTags.map((e) => e.name); }, - lowercaseTags() { return this.imageTags.map((e) => e.name.toLowerCase()); }, + lowercaseTags() { return this.imageTags.map((e) => e.name.toLowerCase()); } }, methods: { getFilteredTags(str) { @@ -78,8 +78,8 @@ export default { }, tagRemoved(tag) { this.$handler.executeAction('images/removeTag', { fileId: this.imageId, tagName: tag }); - }, - }, + } + } }; -- cgit v1.2.3