Allow the user to choose between 3 preview sizes

This commit is contained in:
Eike Kettner
2020-11-09 09:40:21 +01:00
parent 8c8788bc69
commit 5906c705c9
6 changed files with 154 additions and 1 deletions

View 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) ]
]
]

View File

@ -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
] ]
[] []
] ]

View File

@ -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" ]

View 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"

View File

@ -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

View File

@ -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;
} }