diff --git a/modules/webapp/src/main/elm/Comp/ItemCard.elm b/modules/webapp/src/main/elm/Comp/ItemCard.elm index a1e00fbd..b449bcb7 100644 --- a/modules/webapp/src/main/elm/Comp/ItemCard.elm +++ b/modules/webapp/src/main/elm/Comp/ItemCard.elm @@ -122,10 +122,7 @@ view cfg settings model item = item.state /= "created" cardColor = - if isSelected cfg item.id then - "purple" - - else if not isConfirmed then + if not isConfirmed then "blue" else @@ -141,6 +138,25 @@ view cfg settings model item = Data.ItemSelection.Active ids -> onClick (ToggleSelectItem ids item.id) + + selectedDimmer = + div + [ classList + [ ( "ui light dimmer", True ) + , ( "active", isSelected cfg item.id ) + ] + ] + [ div [ class "content" ] + [ a + [ cardAction + ] + [ i [ class "huge icons purple" ] + [ i [ class "big circle outline icon" ] [] + , i [ class "check icon" ] [] + ] + ] + ] + ] in div ([ classList @@ -152,16 +168,21 @@ view cfg settings model item = ] ++ DD.draggable ItemDDMsg item.id ) - [ if fieldHidden Data.Fields.PreviewImage then - span [ class "invisible" ] [] + ((if fieldHidden Data.Fields.PreviewImage then + [] else - previewImage settings model item - , mainContent cardAction cardColor isConfirmed settings cfg item - , notesContent settings item - , metaDataContent settings item - , fulltextResultsContent item - ] + [ selectedDimmer + , previewMenu model item (currentAttachment model item) + , previewImage settings cardAction model item + ] + ) + ++ [ mainContent cardAction cardColor isConfirmed settings cfg item + , notesContent settings item + , metaDataContent settings item + , fulltextResultsContent item + ] + ) fulltextResultsContent : ItemLight -> Html Msg @@ -306,35 +327,25 @@ mainContent cardAction cardColor isConfirmed settings cfg item = Data.UiSettings.fieldHidden settings f in a - [ class "link content" + [ class "content" , href "#" , cardAction ] - [ case cfg.selection of - Data.ItemSelection.Active ids -> - div [ class "header" ] - [ Util.Html.checkbox (Set.member item.id ids) - , dirIcon - , Util.String.underscoreToSpace item.name - |> text - ] + [ if fieldHidden Data.Fields.Direction then + div [ class "header" ] + [ Util.String.underscoreToSpace item.name |> text + ] - Data.ItemSelection.Inactive -> - if fieldHidden Data.Fields.Direction then - div [ class "header" ] - [ Util.String.underscoreToSpace item.name |> text - ] - - else - div - [ class "header" - , Data.Direction.labelFromMaybe item.direction - |> title - ] - [ dirIcon - , Util.String.underscoreToSpace item.name - |> text - ] + else + div + [ class "header" + , Data.Direction.labelFromMaybe item.direction + |> title + ] + [ dirIcon + , Util.String.underscoreToSpace item.name + |> text + ] , div [ classList [ ( "ui right corner label", True ) @@ -376,20 +387,21 @@ mainContent cardAction cardColor isConfirmed settings cfg item = ] -previewImage : UiSettings -> Model -> ItemLight -> Html Msg -previewImage settings model item = +previewImage : UiSettings -> Attribute Msg -> Model -> ItemLight -> Html Msg +previewImage settings cardAction model item = let + mainAttach = + currentAttachment model item + previewUrl = Maybe.map .id mainAttach |> Maybe.map Api.attachmentPreviewURL |> Maybe.withDefault (Api.itemBasePreviewURL item.id) - - mainAttach = - currentAttachment model item in - div + a [ class "image ds-card-image" , Data.UiSettings.cardPreviewSize settings + , cardAction ] [ img [ class "preview-image" @@ -397,52 +409,73 @@ previewImage settings model item = , Data.UiSettings.cardPreviewSize settings ] [] - , pageCountLabel model item mainAttach ] -pageCountLabel : Model -> ItemLight -> Maybe AttachmentLight -> Html Msg -pageCountLabel model item mainAttach = +previewMenu : Model -> ItemLight -> Maybe AttachmentLight -> Html Msg +previewMenu model item mainAttach = let pageCount = Maybe.andThen .pageCount mainAttach |> Maybe.withDefault 0 - in - div - [ classList - [ ( "card-attachment-nav top", True ) - , ( "invisible", pageCount == 0 || (item.fileCount == 1 && pageCount == 1) ) - ] - ] - [ if item.fileCount == 1 then - div - [ class "ui secondary basic mini label" - , title "Number of pages" - ] - [ text "p." - , text (String.fromInt pageCount) - ] - else - div [ class "ui left labeled mini button" ] - [ div [ class "ui basic right pointing mini label" ] - [ currentPosition model item - |> String.fromInt - |> text - , text "/" - , text (String.fromInt item.fileCount) - , text " p." - , text (String.fromInt pageCount) + attachUrl = + Maybe.map .id mainAttach + |> Maybe.map ((++) "/api/v1/sec/attachment/") + |> Maybe.withDefault "/api/v1/sec/attachment/none" + + gotoFileBtn = + a + [ class "ui compact basic icon button" + , href attachUrl + , target "_self" + ] + [ i [ class "eye icon" ] [] + ] + in + if pageCount == 0 || (item.fileCount == 1 && pageCount == 1) then + div [ class "card-attachment-nav" ] + [ gotoFileBtn + ] + + else if item.fileCount == 1 then + div [ class "card-attachment-nav" ] + [ div [ class "ui small top attached basic icon buttons" ] + [ gotoFileBtn + ] + , div [ class "ui attached basic fitted center aligned blue segment" ] + [ span + [ title "Number of pages" ] + [ text (String.fromInt pageCount) + , text "p." + ] + ] + ] + + else + div [ class "card-attachment-nav" ] + [ div [ class "ui small top attached basic icon buttons" ] + [ gotoFileBtn , a - [ class "ui mini icon secondary button" + [ class "ui compact icon button" , href "#" , onClick (CyclePreview item) ] [ i [ class "arrow right icon" ] [] ] ] - ] + , div [ class "ui attached basic blue fitted center aligned segment" ] + [ currentPosition model item + |> String.fromInt + |> text + , text "/" + , text (String.fromInt item.fileCount) + , text ", " + , text (String.fromInt pageCount) + , text "p." + ] + ] renderHighlightEntry : HighlightEntry -> Html Msg diff --git a/modules/webapp/src/main/webjar/docspell.css b/modules/webapp/src/main/webjar/docspell.css index 1fbaa215..ddc5ab3d 100644 --- a/modules/webapp/src/main/webjar/docspell.css +++ b/modules/webapp/src/main/webjar/docspell.css @@ -96,16 +96,11 @@ .default-layout .ui.card .link.content:hover { box-shadow: 0 0 0 1px #d4d4d5,0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15); } -.default-layout .image .card-attachment-nav { +.default-layout .card .card-attachment-nav { position: absolute; - right: 2px; - z-index: 10; -} -.default-layout .image .card-attachment-nav.bottom { - bottom: 2px; -} -.default-layout .image .card-attachment-nav.top { - top: 2px; + left: 4px; + top: 4px; + z-index: 8; } .default-layout .image.ds-card-image { overflow: auto; @@ -123,13 +118,13 @@ margin-left: auto; margin-right: auto; } -.default-layout img.preview-image.small { +.default-layout .image.ds-card-image img.preview-image.small { max-width: 80px; } -.default-layout img.preview-image.medium { +.default-layout .image.ds-card-image img.preview-image.medium { max-width: 160px; } -.default-layout img.preview-image.large { +.default-layout .image.ds-card-image img.preview-image.large { max-width: none; }