mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 02:18:26 +00:00
Allow the user to choose between 3 preview sizes
This commit is contained in:
40
modules/webapp/src/main/elm/Comp/BasicSizeField.elm
Normal file
40
modules/webapp/src/main/elm/Comp/BasicSizeField.elm
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
module Comp.BasicSizeField exposing (Msg, update, view)
|
||||||
|
|
||||||
|
import Data.BasicSize exposing (BasicSize)
|
||||||
|
import Html exposing (..)
|
||||||
|
import Html.Attributes exposing (..)
|
||||||
|
import Html.Events exposing (onCheck)
|
||||||
|
|
||||||
|
|
||||||
|
type Msg
|
||||||
|
= Toggle BasicSize
|
||||||
|
|
||||||
|
|
||||||
|
update : Msg -> Maybe BasicSize
|
||||||
|
update msg =
|
||||||
|
case msg of
|
||||||
|
Toggle bs ->
|
||||||
|
Just bs
|
||||||
|
|
||||||
|
|
||||||
|
view : String -> BasicSize -> Html Msg
|
||||||
|
view labelTxt current =
|
||||||
|
div [ class "grouped fields" ]
|
||||||
|
(label [] [ text labelTxt ]
|
||||||
|
:: List.map (makeField current) Data.BasicSize.all
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
makeField : BasicSize -> BasicSize -> Html Msg
|
||||||
|
makeField current element =
|
||||||
|
div [ class "field" ]
|
||||||
|
[ div [ class "ui radio checkbox" ]
|
||||||
|
[ input
|
||||||
|
[ type_ "radio"
|
||||||
|
, checked (current == element)
|
||||||
|
, onCheck (\_ -> Toggle element)
|
||||||
|
]
|
||||||
|
[]
|
||||||
|
, label [] [ text (Data.BasicSize.label element) ]
|
||||||
|
]
|
||||||
|
]
|
@ -239,6 +239,7 @@ viewItem cfg settings item =
|
|||||||
[ img
|
[ img
|
||||||
[ class "preview-image"
|
[ class "preview-image"
|
||||||
, src (Api.itemPreviewURL item.id)
|
, src (Api.itemPreviewURL item.id)
|
||||||
|
, Data.UiSettings.cardPreviewSize settings
|
||||||
]
|
]
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
|
@ -8,9 +8,11 @@ module Comp.UiSettingsForm exposing
|
|||||||
|
|
||||||
import Api
|
import Api
|
||||||
import Api.Model.TagList exposing (TagList)
|
import Api.Model.TagList exposing (TagList)
|
||||||
|
import Comp.BasicSizeField
|
||||||
import Comp.ColorTagger
|
import Comp.ColorTagger
|
||||||
import Comp.FieldListSelect
|
import Comp.FieldListSelect
|
||||||
import Comp.IntField
|
import Comp.IntField
|
||||||
|
import Data.BasicSize exposing (BasicSize)
|
||||||
import Data.Color exposing (Color)
|
import Data.Color exposing (Color)
|
||||||
import Data.Fields exposing (Field)
|
import Data.Fields exposing (Field)
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
@ -42,6 +44,7 @@ type alias Model =
|
|||||||
, itemDetailShortcuts : Bool
|
, itemDetailShortcuts : Bool
|
||||||
, searchMenuVisible : Bool
|
, searchMenuVisible : Bool
|
||||||
, editMenuVisible : Bool
|
, editMenuVisible : Bool
|
||||||
|
, cardPreviewSize : BasicSize
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -93,6 +96,7 @@ init flags settings =
|
|||||||
, itemDetailShortcuts = settings.itemDetailShortcuts
|
, itemDetailShortcuts = settings.itemDetailShortcuts
|
||||||
, searchMenuVisible = settings.searchMenuVisible
|
, searchMenuVisible = settings.searchMenuVisible
|
||||||
, editMenuVisible = settings.editMenuVisible
|
, editMenuVisible = settings.editMenuVisible
|
||||||
|
, cardPreviewSize = settings.cardPreviewSize
|
||||||
}
|
}
|
||||||
, Api.getTags flags "" GetTagsResp
|
, Api.getTags flags "" GetTagsResp
|
||||||
)
|
)
|
||||||
@ -112,6 +116,7 @@ type Msg
|
|||||||
| ToggleItemDetailShortcuts
|
| ToggleItemDetailShortcuts
|
||||||
| ToggleSearchMenuVisible
|
| ToggleSearchMenuVisible
|
||||||
| ToggleEditMenuVisible
|
| ToggleEditMenuVisible
|
||||||
|
| CardPreviewSizeMsg Comp.BasicSizeField.Msg
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -297,6 +302,23 @@ update sett msg model =
|
|||||||
, Just { sett | editMenuVisible = flag }
|
, Just { sett | editMenuVisible = flag }
|
||||||
)
|
)
|
||||||
|
|
||||||
|
CardPreviewSizeMsg lm ->
|
||||||
|
let
|
||||||
|
next =
|
||||||
|
Comp.BasicSizeField.update lm
|
||||||
|
|> Maybe.withDefault model.cardPreviewSize
|
||||||
|
|
||||||
|
newSettings =
|
||||||
|
if next /= model.cardPreviewSize then
|
||||||
|
Just { sett | cardPreviewSize = next }
|
||||||
|
|
||||||
|
else
|
||||||
|
Nothing
|
||||||
|
in
|
||||||
|
( { model | cardPreviewSize = next }
|
||||||
|
, newSettings
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- View
|
--- View
|
||||||
@ -329,6 +351,9 @@ view flags _ model =
|
|||||||
"field"
|
"field"
|
||||||
model.searchPageSizeModel
|
model.searchPageSizeModel
|
||||||
)
|
)
|
||||||
|
, div [ class "ui dividing header" ]
|
||||||
|
[ text "Item Cards"
|
||||||
|
]
|
||||||
, Html.map NoteLengthMsg
|
, Html.map NoteLengthMsg
|
||||||
(Comp.IntField.viewWithInfo
|
(Comp.IntField.viewWithInfo
|
||||||
("Maximum size of the item notes to display in card view. Between 0 - "
|
("Maximum size of the item notes to display in card view. Between 0 - "
|
||||||
@ -339,6 +364,11 @@ view flags _ model =
|
|||||||
"field"
|
"field"
|
||||||
model.searchNoteLengthModel
|
model.searchNoteLengthModel
|
||||||
)
|
)
|
||||||
|
, Html.map CardPreviewSizeMsg
|
||||||
|
(Comp.BasicSizeField.view
|
||||||
|
"Size of item preview"
|
||||||
|
model.cardPreviewSize
|
||||||
|
)
|
||||||
, div [ class "ui dividing header" ]
|
, div [ class "ui dividing header" ]
|
||||||
[ text "Search Menu" ]
|
[ text "Search Menu" ]
|
||||||
, div [ class "field" ]
|
, div [ class "field" ]
|
||||||
|
55
modules/webapp/src/main/elm/Data/BasicSize.elm
Normal file
55
modules/webapp/src/main/elm/Data/BasicSize.elm
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
module Data.BasicSize exposing
|
||||||
|
( BasicSize(..)
|
||||||
|
, all
|
||||||
|
, asString
|
||||||
|
, fromString
|
||||||
|
, label
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
type BasicSize
|
||||||
|
= Small
|
||||||
|
| Medium
|
||||||
|
| Large
|
||||||
|
|
||||||
|
|
||||||
|
all : List BasicSize
|
||||||
|
all =
|
||||||
|
[ Small
|
||||||
|
, Medium
|
||||||
|
, Large
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
fromString : String -> Maybe BasicSize
|
||||||
|
fromString str =
|
||||||
|
case String.toLower str of
|
||||||
|
"small" ->
|
||||||
|
Just Small
|
||||||
|
|
||||||
|
"medium" ->
|
||||||
|
Just Medium
|
||||||
|
|
||||||
|
"large" ->
|
||||||
|
Just Large
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
Nothing
|
||||||
|
|
||||||
|
|
||||||
|
asString : BasicSize -> String
|
||||||
|
asString size =
|
||||||
|
label size |> String.toLower
|
||||||
|
|
||||||
|
|
||||||
|
label : BasicSize -> String
|
||||||
|
label size =
|
||||||
|
case size of
|
||||||
|
Small ->
|
||||||
|
"Small"
|
||||||
|
|
||||||
|
Medium ->
|
||||||
|
"Medium"
|
||||||
|
|
||||||
|
Large ->
|
||||||
|
"Large"
|
@ -2,6 +2,7 @@ module Data.UiSettings exposing
|
|||||||
( Pos(..)
|
( Pos(..)
|
||||||
, StoredUiSettings
|
, StoredUiSettings
|
||||||
, UiSettings
|
, UiSettings
|
||||||
|
, cardPreviewSize
|
||||||
, catColor
|
, catColor
|
||||||
, catColorString
|
, catColorString
|
||||||
, defaults
|
, defaults
|
||||||
@ -17,9 +18,12 @@ module Data.UiSettings exposing
|
|||||||
)
|
)
|
||||||
|
|
||||||
import Api.Model.Tag exposing (Tag)
|
import Api.Model.Tag exposing (Tag)
|
||||||
|
import Data.BasicSize exposing (BasicSize)
|
||||||
import Data.Color exposing (Color)
|
import Data.Color exposing (Color)
|
||||||
import Data.Fields exposing (Field)
|
import Data.Fields exposing (Field)
|
||||||
import Dict exposing (Dict)
|
import Dict exposing (Dict)
|
||||||
|
import Html exposing (Attribute)
|
||||||
|
import Html.Attributes as HA
|
||||||
|
|
||||||
|
|
||||||
{-| Settings for the web ui. All fields should be optional, since it
|
{-| Settings for the web ui. All fields should be optional, since it
|
||||||
@ -43,6 +47,7 @@ type alias StoredUiSettings =
|
|||||||
, itemDetailShortcuts : Bool
|
, itemDetailShortcuts : Bool
|
||||||
, searchMenuVisible : Bool
|
, searchMenuVisible : Bool
|
||||||
, editMenuVisible : Bool
|
, editMenuVisible : Bool
|
||||||
|
, cardPreviewSize : Maybe String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -66,6 +71,7 @@ type alias UiSettings =
|
|||||||
, itemDetailShortcuts : Bool
|
, itemDetailShortcuts : Bool
|
||||||
, searchMenuVisible : Bool
|
, searchMenuVisible : Bool
|
||||||
, editMenuVisible : Bool
|
, editMenuVisible : Bool
|
||||||
|
, cardPreviewSize : BasicSize
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -111,6 +117,7 @@ defaults =
|
|||||||
, itemDetailShortcuts = False
|
, itemDetailShortcuts = False
|
||||||
, searchMenuVisible = False
|
, searchMenuVisible = False
|
||||||
, editMenuVisible = False
|
, editMenuVisible = False
|
||||||
|
, cardPreviewSize = Data.BasicSize.Medium
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -146,6 +153,10 @@ merge given fallback =
|
|||||||
, itemDetailShortcuts = given.itemDetailShortcuts
|
, itemDetailShortcuts = given.itemDetailShortcuts
|
||||||
, searchMenuVisible = given.searchMenuVisible
|
, searchMenuVisible = given.searchMenuVisible
|
||||||
, editMenuVisible = given.editMenuVisible
|
, editMenuVisible = given.editMenuVisible
|
||||||
|
, cardPreviewSize =
|
||||||
|
given.cardPreviewSize
|
||||||
|
|> Maybe.andThen Data.BasicSize.fromString
|
||||||
|
|> Maybe.withDefault fallback.cardPreviewSize
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -172,6 +183,10 @@ toStoredUiSettings settings =
|
|||||||
, itemDetailShortcuts = settings.itemDetailShortcuts
|
, itemDetailShortcuts = settings.itemDetailShortcuts
|
||||||
, searchMenuVisible = settings.searchMenuVisible
|
, searchMenuVisible = settings.searchMenuVisible
|
||||||
, editMenuVisible = settings.editMenuVisible
|
, editMenuVisible = settings.editMenuVisible
|
||||||
|
, cardPreviewSize =
|
||||||
|
settings.cardPreviewSize
|
||||||
|
|> Data.BasicSize.asString
|
||||||
|
|> Just
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -209,6 +224,19 @@ fieldHidden settings field =
|
|||||||
fieldVisible settings field |> not
|
fieldVisible settings field |> not
|
||||||
|
|
||||||
|
|
||||||
|
cardPreviewSize : UiSettings -> Attribute msg
|
||||||
|
cardPreviewSize settings =
|
||||||
|
case settings.cardPreviewSize of
|
||||||
|
Data.BasicSize.Small ->
|
||||||
|
HA.style "max-width" "80px"
|
||||||
|
|
||||||
|
Data.BasicSize.Medium ->
|
||||||
|
HA.style "max-width" "160px"
|
||||||
|
|
||||||
|
Data.BasicSize.Large ->
|
||||||
|
HA.style "max-width" "none"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- Helpers
|
--- Helpers
|
||||||
|
|
||||||
|
@ -94,7 +94,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.default-layout img.preview-image {
|
.default-layout img.preview-image {
|
||||||
max-width: 160px;
|
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user