From 9165cc1efcf7791f78b61b2c51a9de651b1b09aa Mon Sep 17 00:00:00 2001 From: Zero~Informatique Date: Fri, 2 Jul 2021 22:53:16 +0200 Subject: viewer: types normalization - gallery.d.ts GitHub: closes #301 --- viewer/src/services/indexsearch.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'viewer/src/services/indexsearch.ts') diff --git a/viewer/src/services/indexsearch.ts b/viewer/src/services/indexsearch.ts index 00f8cfc..eda1b27 100644 --- a/viewer/src/services/indexsearch.ts +++ b/viewer/src/services/indexsearch.ts @@ -17,11 +17,12 @@ -- along with this program. If not, see . */ +import { Item } from "@/@types/gallery"; import { Operation } from "@/@types/Operation"; export default class IndexSearch { // Results of the search (by tags) - public static search(searchTags: Tag.Search[]): Gallery.Item[] { + public static search(searchTags: Tag.Search[]): Item[] { const byOperation = this.extractTagsByOperation(searchTags); const intersection = this.extractIntersection(byOperation); const substraction = this.extractSubstraction(byOperation); @@ -36,8 +37,8 @@ export default class IndexSearch { return byOperation; } - private static extractIntersection(byOperation: Tag.SearchByOperation): Set { - const intersection = new Set(); + private static extractIntersection(byOperation: Tag.SearchByOperation): Set { + const intersection = new Set(); if (byOperation[Operation.INTERSECTION].length > 0) { byOperation[Operation.INTERSECTION] .map(tag => tag.items) @@ -48,8 +49,8 @@ export default class IndexSearch { return intersection; } - private static extractSubstraction(byOperation: Tag.SearchByOperation): Set { - const substraction = new Set(); + private static extractSubstraction(byOperation: Tag.SearchByOperation): Set { + const substraction = new Set(); if (byOperation[Operation.SUBSTRACTION].length > 0) { byOperation[Operation.SUBSTRACTION].flatMap(tag => tag.items).forEach(item => substraction.add(item)); } @@ -58,9 +59,9 @@ export default class IndexSearch { private static aggregateAll( byOperation: Tag.SearchByOperation, - intersection: Set, - substraction: Set - ): Gallery.Item[] { + intersection: Set, + substraction: Set + ): Item[] { byOperation[Operation.ADDITION].flatMap(tag => tag.items).forEach(item => intersection.add(item)); substraction.forEach(item => intersection.delete(item)); return [...intersection]; -- cgit v1.2.3 From 92cb34b719b481faf417760f307241e8f6d777a9 Mon Sep 17 00:00:00 2001 From: Zero~Informatique Date: Fri, 2 Jul 2021 22:59:56 +0200 Subject: viewer: types normalization - tag.d.ts GitHub: closes #301 --- viewer/src/services/indexsearch.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'viewer/src/services/indexsearch.ts') diff --git a/viewer/src/services/indexsearch.ts b/viewer/src/services/indexsearch.ts index eda1b27..57bd03c 100644 --- a/viewer/src/services/indexsearch.ts +++ b/viewer/src/services/indexsearch.ts @@ -19,25 +19,26 @@ import { Item } from "@/@types/gallery"; import { Operation } from "@/@types/Operation"; +import { TagSearch, TagSearchByOperation } from "@/@types/tag"; export default class IndexSearch { // Results of the search (by tags) - public static search(searchTags: Tag.Search[]): Item[] { + public static search(searchTags: TagSearch[]): Item[] { const byOperation = this.extractTagsByOperation(searchTags); const intersection = this.extractIntersection(byOperation); const substraction = this.extractSubstraction(byOperation); return this.aggregateAll(byOperation, intersection, substraction); } - private static extractTagsByOperation(searchTags: Tag.Search[]): Tag.SearchByOperation { - const byOperation: Tag.SearchByOperation = {}; + private static extractTagsByOperation(searchTags: TagSearch[]): TagSearchByOperation { + const byOperation: TagSearchByOperation = {}; Object.values(Operation).forEach( operation => (byOperation[operation] = searchTags.filter(tag => tag.operation === operation)) ); return byOperation; } - private static extractIntersection(byOperation: Tag.SearchByOperation): Set { + private static extractIntersection(byOperation: TagSearchByOperation): Set { const intersection = new Set(); if (byOperation[Operation.INTERSECTION].length > 0) { byOperation[Operation.INTERSECTION] @@ -49,7 +50,7 @@ export default class IndexSearch { return intersection; } - private static extractSubstraction(byOperation: Tag.SearchByOperation): Set { + private static extractSubstraction(byOperation: TagSearchByOperation): Set { const substraction = new Set(); if (byOperation[Operation.SUBSTRACTION].length > 0) { byOperation[Operation.SUBSTRACTION].flatMap(tag => tag.items).forEach(item => substraction.add(item)); @@ -58,7 +59,7 @@ export default class IndexSearch { } private static aggregateAll( - byOperation: Tag.SearchByOperation, + byOperation: TagSearchByOperation, intersection: Set, substraction: Set ): Item[] { -- cgit v1.2.3 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/services/indexsearch.ts | 70 -------------------------------------- 1 file changed, 70 deletions(-) delete mode 100644 viewer/src/services/indexsearch.ts (limited to 'viewer/src/services/indexsearch.ts') diff --git a/viewer/src/services/indexsearch.ts b/viewer/src/services/indexsearch.ts deleted file mode 100644 index 57bd03c..0000000 --- a/viewer/src/services/indexsearch.ts +++ /dev/null @@ -1,70 +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 { Item } from "@/@types/gallery"; -import { Operation } from "@/@types/Operation"; -import { TagSearch, TagSearchByOperation } from "@/@types/tag"; - -export default class IndexSearch { - // Results of the search (by tags) - public static search(searchTags: TagSearch[]): Item[] { - const byOperation = this.extractTagsByOperation(searchTags); - const intersection = this.extractIntersection(byOperation); - const substraction = this.extractSubstraction(byOperation); - return this.aggregateAll(byOperation, intersection, substraction); - } - - private static extractTagsByOperation(searchTags: TagSearch[]): TagSearchByOperation { - const byOperation: TagSearchByOperation = {}; - Object.values(Operation).forEach( - operation => (byOperation[operation] = searchTags.filter(tag => tag.operation === operation)) - ); - return byOperation; - } - - private static extractIntersection(byOperation: TagSearchByOperation): Set { - const intersection = new Set(); - if (byOperation[Operation.INTERSECTION].length > 0) { - byOperation[Operation.INTERSECTION] - .map(tag => tag.items) - .reduce((a, b) => a.filter(c => b.includes(c))) - .flatMap(items => items) - .forEach(item => intersection.add(item)); - } - return intersection; - } - - private static extractSubstraction(byOperation: TagSearchByOperation): Set { - const substraction = new Set(); - if (byOperation[Operation.SUBSTRACTION].length > 0) { - byOperation[Operation.SUBSTRACTION].flatMap(tag => tag.items).forEach(item => substraction.add(item)); - } - return substraction; - } - - private static aggregateAll( - byOperation: TagSearchByOperation, - intersection: Set, - substraction: Set - ): Item[] { - byOperation[Operation.ADDITION].flatMap(tag => tag.items).forEach(item => intersection.add(item)); - substraction.forEach(item => intersection.delete(item)); - return [...intersection]; - } -} -- cgit v1.2.3