From 4d862525bcb5f00f8160e3308a9c09b60bb2a746 Mon Sep 17 00:00:00 2001 From: George Shao Date: Sat, 8 Jun 2024 16:33:23 -0400 Subject: [PATCH] feat(web): allow ctrl-click / cmd-click on photos (#9954) * feat(web): allow ctrl-click / cmd-click on photos * fix: photo opening when deselected bug * fix: consistent naming * remove redundant code * fix: disabled picture is clickable in "add to album" grid * remove unnecessary code * cleanup * fix file permissions * fix: album selection bug * fix: stack slideshow bug & search gallery viewer bug * cleanup * fix dark mode stack slideshow bug * cleanup --------- Co-authored-by: Alex Tran --- .../asset-viewer/asset-viewer.svelte | 1 + .../assets/thumbnail/thumbnail.svelte | 37 ++++++++++++------- .../photos-page/asset-date-group.svelte | 1 + .../gallery-viewer/gallery-viewer.svelte | 1 + web/src/lib/utils/navigation.ts | 2 +- 5 files changed, 28 insertions(+), 14 deletions(-) diff --git a/web/src/lib/components/asset-viewer/asset-viewer.svelte b/web/src/lib/components/asset-viewer/asset-viewer.svelte index 3518528986..a7e4b87195 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer.svelte @@ -740,6 +740,7 @@ readonly thumbnailSize={stackedAsset.id == asset.id ? 65 : 60} showStackedIcon={false} + isStackSlideshow={true} /> {#if stackedAsset.id == asset.id} diff --git a/web/src/lib/components/assets/thumbnail/thumbnail.svelte b/web/src/lib/components/assets/thumbnail/thumbnail.svelte index bd2dbd6fff..5c86801160 100644 --- a/web/src/lib/components/assets/thumbnail/thumbnail.svelte +++ b/web/src/lib/components/assets/thumbnail/thumbnail.svelte @@ -23,6 +23,7 @@ import ImageThumbnail from './image-thumbnail.svelte'; import VideoThumbnail from './video-thumbnail.svelte'; import { shortcut } from '$lib/actions/shortcut'; + import { currentUrlReplaceAssetId } from '$lib/utils/navigation'; const dispatch = createEventDispatcher<{ select: { asset: AssetResponseDto }; @@ -36,6 +37,8 @@ export let thumbnailHeight: number | undefined = undefined; export let selected = false; export let selectionCandidate = false; + export let isMultiSelectState = false; + export let isStackSlideshow = false; export let disabled = false; export let readonly = false; export let showArchiveIcon = false; @@ -46,7 +49,6 @@ export { className as class }; let mouseOver = false; - $: clickable = !disabled && onClick; $: dispatch('mouse-event', { isMouseOver: mouseOver, selectedGroupIndex: groupIndex }); @@ -62,19 +64,30 @@ return [235, 235]; })(); - const thumbnailClickedHandler = () => { - if (clickable) { + const thumbnailClickedHandler = (e: Event) => { + e.stopPropagation(); + e.preventDefault(); + if (!disabled) { onClick?.(asset); } }; const onIconClickedHandler = (e: MouseEvent) => { e.stopPropagation(); + e.preventDefault(); if (!disabled) { dispatch('select', { asset }); } }; + const handleClick = (e: Event) => { + if (isMultiSelectState) { + onIconClickedHandler(e as MouseEvent); + } else if (isStackSlideshow) { + thumbnailClickedHandler(e); + } + }; + const onMouseEnter = () => { mouseOver = true; }; @@ -85,24 +98,22 @@ - -
{#if intersecting} -
+
{#if !readonly && (mouseOver || selected || selectionCandidate)}