From e8c3edfd23141f616121fcbf3b4a8147cb424959 Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Mon, 8 Jun 2020 01:13:26 +0200 Subject: [PATCH] Add pdf-preview checkbox to ui settings --- .../webapp/src/main/elm/Comp/ItemDetail.elm | 36 +++++++++++-------- .../src/main/elm/Comp/UiSettingsForm.elm | 29 +++++++++++++++ .../webapp/src/main/elm/Data/UiSettings.elm | 5 +++ 3 files changed, 56 insertions(+), 14 deletions(-) diff --git a/modules/webapp/src/main/elm/Comp/ItemDetail.elm b/modules/webapp/src/main/elm/Comp/ItemDetail.elm index 312e08a0..d5b20791 100644 --- a/modules/webapp/src/main/elm/Comp/ItemDetail.elm +++ b/modules/webapp/src/main/elm/Comp/ItemDetail.elm @@ -84,7 +84,7 @@ type alias Model = , sentMailsOpen : Bool , attachMeta : Dict String Comp.AttachmentMeta.Model , attachMetaOpen : Bool - , pdfNativeView : Bool + , pdfNativeView : Maybe Bool , deleteAttachConfirm : Comp.YesNoDimmer.Model , addFilesOpen : Bool , addFilesModel : Comp.Dropzone.Model @@ -170,7 +170,7 @@ emptyModel = , sentMailsOpen = False , attachMeta = Dict.empty , attachMetaOpen = False - , pdfNativeView = False + , pdfNativeView = Nothing , deleteAttachConfirm = Comp.YesNoDimmer.emptyModel , addFilesOpen = False , addFilesModel = Comp.Dropzone.init Comp.Dropzone.defaultSettings @@ -231,7 +231,7 @@ type Msg | SentMailsResp (Result Http.Error SentMails) | AttachMetaClick String | AttachMetaMsg String Comp.AttachmentMeta.Msg - | TogglePdfNativeView + | TogglePdfNativeView Bool | RequestDeleteAttachment String | DeleteAttachConfirm String Comp.YesNoDimmer.Msg | DeleteAttachResp (Result Http.Error BasicResult) @@ -1027,9 +1027,17 @@ update key flags next msg model = Nothing -> noSub ( model, Cmd.none ) - TogglePdfNativeView -> + TogglePdfNativeView default -> noSub - ( { model | pdfNativeView = not model.pdfNativeView } + ( { model + | pdfNativeView = + case model.pdfNativeView of + Just flag -> + Just (not flag) + + Nothing -> + Just (not default) + } , Cmd.none ) @@ -1328,7 +1336,7 @@ view inav settings model = List.concat [ [ renderAttachmentsTabMenu model ] - , renderAttachmentsTabBody model + , renderAttachmentsTabBody settings model , renderIdInfo model ] ] @@ -1481,8 +1489,8 @@ renderAttachmentsTabMenu model = ) -renderAttachmentView : Model -> Int -> Attachment -> Html Msg -renderAttachmentView model pos attach = +renderAttachmentView : UiSettings -> Model -> Int -> Attachment -> Html Msg +renderAttachmentView settings model pos attach = let fileUrl = "/api/v1/sec/attachment/" ++ attach.id @@ -1513,8 +1521,8 @@ renderAttachmentView model pos attach = [ div [ class "ui slider checkbox" ] [ input [ type_ "checkbox" - , onCheck (\_ -> TogglePdfNativeView) - , checked model.pdfNativeView + , onCheck (\_ -> TogglePdfNativeView settings.nativePdfPreview) + , checked (Maybe.withDefault settings.nativePdfPreview model.pdfNativeView) ] [] , label [] [ text "Native view" ] @@ -1593,7 +1601,7 @@ renderAttachmentView model pos attach = ] ] [ iframe - [ if model.pdfNativeView then + [ if Maybe.withDefault settings.nativePdfPreview model.pdfNativeView then src fileUrl else @@ -1623,8 +1631,8 @@ isAttachMetaOpen model id = model.attachMetaOpen && (Dict.get id model.attachMeta /= Nothing) -renderAttachmentsTabBody : Model -> List (Html Msg) -renderAttachmentsTabBody model = +renderAttachmentsTabBody : UiSettings -> Model -> List (Html Msg) +renderAttachmentsTabBody settings model = let mailTab = if Comp.SentMails.isEmpty model.sentMails then @@ -1644,7 +1652,7 @@ renderAttachmentsTabBody model = ] ] in - List.indexedMap (renderAttachmentView model) model.item.attachments + List.indexedMap (renderAttachmentView settings model) model.item.attachments ++ mailTab diff --git a/modules/webapp/src/main/elm/Comp/UiSettingsForm.elm b/modules/webapp/src/main/elm/Comp/UiSettingsForm.elm index dd166aaa..79dc6915 100644 --- a/modules/webapp/src/main/elm/Comp/UiSettingsForm.elm +++ b/modules/webapp/src/main/elm/Comp/UiSettingsForm.elm @@ -16,6 +16,7 @@ import Data.UiSettings exposing (StoredUiSettings, UiSettings) import Dict exposing (Dict) import Html exposing (..) import Html.Attributes exposing (..) +import Html.Events exposing (onCheck) import Http import Util.List @@ -25,6 +26,7 @@ type alias Model = , searchPageSizeModel : Comp.IntField.Model , tagColors : Dict String String , tagColorModel : Comp.MappingForm.Model + , nativePdfPreview : Bool } @@ -42,6 +44,7 @@ init flags settings = Comp.MappingForm.init [] Data.Color.allString + , nativePdfPreview = settings.nativePdfPreview } , Api.getTags flags "" GetTagsResp ) @@ -51,6 +54,7 @@ type Msg = SearchPageSizeMsg Comp.IntField.Msg | TagColorMsg Comp.MappingForm.Msg | GetTagsResp (Result Http.Error TagList) + | TogglePdfPreview @@ -92,6 +96,15 @@ update sett msg model = in ( model_, nextSettings ) + TogglePdfPreview -> + let + flag = + not model.nativePdfPreview + in + ( { model | nativePdfPreview = flag } + , Just { sett | nativePdfPreview = flag } + ) + GetTagsResp (Ok tl) -> let categories = @@ -139,6 +152,22 @@ view settings model = "field" model.searchPageSizeModel ) + , div [ class "ui dividing header" ] + [ text "Item Detail" + ] + , div [ class "field" ] + [ div [ class "ui checkbox" ] + [ input + [ type_ "checkbox" + , onCheck (\_ -> TogglePdfPreview) + , checked model.nativePdfPreview + ] + [] + , label [] + [ text "Browser-native PDF preview" + ] + ] + ] , div [ class "ui dividing header" ] [ text "Tag Category Colors" ] diff --git a/modules/webapp/src/main/elm/Data/UiSettings.elm b/modules/webapp/src/main/elm/Data/UiSettings.elm index 59b905bd..1628d65b 100644 --- a/modules/webapp/src/main/elm/Data/UiSettings.elm +++ b/modules/webapp/src/main/elm/Data/UiSettings.elm @@ -25,6 +25,7 @@ force default settings. type alias StoredUiSettings = { itemSearchPageSize : Maybe Int , tagCategoryColors : List ( String, String ) + , nativePdfPreview : Bool } @@ -38,6 +39,7 @@ default value, converting the StoredUiSettings into a UiSettings. type alias UiSettings = { itemSearchPageSize : Int , tagCategoryColors : Dict String String + , nativePdfPreview : Bool } @@ -45,6 +47,7 @@ defaults : UiSettings defaults = { itemSearchPageSize = 60 , tagCategoryColors = Dict.empty + , nativePdfPreview = False } @@ -55,6 +58,7 @@ merge given fallback = , tagCategoryColors = Dict.union (Dict.fromList given.tagCategoryColors) fallback.tagCategoryColors + , nativePdfPreview = given.nativePdfPreview } @@ -67,6 +71,7 @@ toStoredUiSettings : UiSettings -> StoredUiSettings toStoredUiSettings settings = { itemSearchPageSize = Just settings.itemSearchPageSize , tagCategoryColors = Dict.toList settings.tagCategoryColors + , nativePdfPreview = settings.nativePdfPreview }