Let user change template for card title and subtitle

This commit is contained in:
Eike Kettner 2020-11-29 23:36:25 +01:00
parent 81a136d915
commit bdc49aae98
3 changed files with 180 additions and 5 deletions

View File

@ -321,10 +321,10 @@ mainContent cardAction cardColor isConfirmed settings _ item =
Data.UiSettings.fieldHidden settings f Data.UiSettings.fieldHidden settings f
titlePattern = titlePattern =
IT.name settings.cardTitleTemplate.template
subtitlePattern = subtitlePattern =
IT.dateLong settings.cardSubtitleTemplate.template
in in
a a
[ class "content" [ class "content"

View File

@ -16,12 +16,15 @@ 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)
import Data.UiSettings exposing (Pos(..), UiSettings) import Data.ItemTemplate as IT exposing (ItemTemplate)
import Data.UiSettings exposing (ItemPattern, Pos(..), UiSettings)
import Dict exposing (Dict) import Dict exposing (Dict)
import Html exposing (..) import Html exposing (..)
import Html.Attributes exposing (..) import Html.Attributes exposing (..)
import Html.Events exposing (onCheck) import Html.Events exposing (onCheck, onClick, onInput)
import Http import Http
import Markdown
import Util.Maybe
import Util.Tag import Util.Tag
@ -45,6 +48,44 @@ type alias Model =
, searchMenuVisible : Bool , searchMenuVisible : Bool
, editMenuVisible : Bool , editMenuVisible : Bool
, cardPreviewSize : BasicSize , cardPreviewSize : BasicSize
, cardTitlePattern : PatternModel
, cardSubtitlePattern : PatternModel
, showPatternHelp : Bool
}
type alias PatternModel =
{ pattern : Maybe String
, current : ItemTemplate
, result : Result String ItemTemplate
}
initPatternModel : ItemPattern -> PatternModel
initPatternModel ip =
{ pattern = Just ip.pattern
, current = ip.template
, result = Ok ip.template
}
updatePatternModel : PatternModel -> String -> PatternModel
updatePatternModel pm str =
let
result =
case IT.readTemplate str of
Just t ->
Ok t
Nothing ->
Err "Template invalid, check for unclosed variables."
p =
Util.Maybe.fromString str
in
{ pattern = p
, current = Result.withDefault pm.current result
, result = result
} }
@ -97,6 +138,9 @@ init flags settings =
, searchMenuVisible = settings.searchMenuVisible , searchMenuVisible = settings.searchMenuVisible
, editMenuVisible = settings.editMenuVisible , editMenuVisible = settings.editMenuVisible
, cardPreviewSize = settings.cardPreviewSize , cardPreviewSize = settings.cardPreviewSize
, cardTitlePattern = initPatternModel settings.cardTitleTemplate
, cardSubtitlePattern = initPatternModel settings.cardSubtitleTemplate
, showPatternHelp = False
} }
, Api.getTags flags "" GetTagsResp , Api.getTags flags "" GetTagsResp
) )
@ -117,6 +161,9 @@ type Msg
| ToggleSearchMenuVisible | ToggleSearchMenuVisible
| ToggleEditMenuVisible | ToggleEditMenuVisible
| CardPreviewSizeMsg Comp.BasicSizeField.Msg | CardPreviewSizeMsg Comp.BasicSizeField.Msg
| SetCardTitlePattern String
| SetCardSubtitlePattern String
| TogglePatternHelpMsg
@ -319,6 +366,55 @@ update sett msg model =
, newSettings , newSettings
) )
SetCardTitlePattern str ->
let
pm =
model.cardTitlePattern
pm_ =
updatePatternModel pm str
newSettings =
if pm_.pattern /= Just sett.cardTitleTemplate.pattern then
Just
{ sett
| cardTitleTemplate =
ItemPattern
(Maybe.withDefault "" pm_.pattern)
pm_.current
}
else
Nothing
in
( { model | cardTitlePattern = pm_ }, newSettings )
SetCardSubtitlePattern str ->
let
pm =
model.cardSubtitlePattern
pm_ =
updatePatternModel pm str
newSettings =
if pm_.pattern /= Just sett.cardSubtitleTemplate.pattern then
Just
{ sett
| cardSubtitleTemplate =
ItemPattern
(Maybe.withDefault "" pm_.pattern)
pm_.current
}
else
Nothing
in
( { model | cardSubtitlePattern = pm_ }, newSettings )
TogglePatternHelpMsg ->
( { model | showPatternHelp = not model.showPatternHelp }, Nothing )
--- View --- View
@ -369,6 +465,51 @@ view flags _ model =
"Size of item preview" "Size of item preview"
model.cardPreviewSize model.cardPreviewSize
) )
, div [ class "field" ]
[ label []
[ text "Card Title Pattern"
, a
[ class "right-float"
, title "Toggle pattern help text"
, href "#"
, onClick TogglePatternHelpMsg
]
[ i [ class "help link icon" ] []
]
]
, input
[ type_ "text"
, Maybe.withDefault "" model.cardTitlePattern.pattern |> value
, onInput SetCardTitlePattern
]
[]
]
, div [ class "field" ]
[ label []
[ text "Card Subtitle Pattern"
, a
[ class "right-float"
, title "Toggle pattern help text"
, href "#"
, onClick TogglePatternHelpMsg
]
[ i [ class "help link icon" ] []
]
]
, input
[ type_ "text"
, Maybe.withDefault "" model.cardSubtitlePattern.pattern |> value
, onInput SetCardSubtitlePattern
]
[]
]
, Markdown.toHtml
[ classList
[ ( "ui message", True )
, ( "hidden", not model.showPatternHelp )
]
]
IT.helpMessage
, div [ class "ui dividing header" ] , div [ class "ui dividing header" ]
[ text "Search Menu" ] [ text "Search Menu" ]
, div [ class "field" ] , div [ class "field" ]

View File

@ -1,5 +1,6 @@
module Data.UiSettings exposing module Data.UiSettings exposing
( Pos(..) ( ItemPattern
, Pos(..)
, StoredUiSettings , StoredUiSettings
, UiSettings , UiSettings
, cardPreviewSize , cardPreviewSize
@ -21,6 +22,7 @@ import Api.Model.Tag exposing (Tag)
import Data.BasicSize exposing (BasicSize) 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.ItemTemplate exposing (ItemTemplate)
import Dict exposing (Dict) import Dict exposing (Dict)
import Html exposing (Attribute) import Html exposing (Attribute)
import Html.Attributes as HA import Html.Attributes as HA
@ -48,6 +50,8 @@ type alias StoredUiSettings =
, searchMenuVisible : Bool , searchMenuVisible : Bool
, editMenuVisible : Bool , editMenuVisible : Bool
, cardPreviewSize : Maybe String , cardPreviewSize : Maybe String
, cardTitleTemplate : Maybe String
, cardSubtitleTemplate : Maybe String
} }
@ -72,9 +76,23 @@ type alias UiSettings =
, searchMenuVisible : Bool , searchMenuVisible : Bool
, editMenuVisible : Bool , editMenuVisible : Bool
, cardPreviewSize : BasicSize , cardPreviewSize : BasicSize
, cardTitleTemplate : ItemPattern
, cardSubtitleTemplate : ItemPattern
} }
type alias ItemPattern =
{ pattern : String
, template : ItemTemplate
}
readPattern : String -> Maybe ItemPattern
readPattern str =
Data.ItemTemplate.readTemplate str
|> Maybe.map (ItemPattern str)
type Pos type Pos
= Top = Top
| Bottom | Bottom
@ -118,6 +136,14 @@ defaults =
, searchMenuVisible = False , searchMenuVisible = False
, editMenuVisible = False , editMenuVisible = False
, cardPreviewSize = Data.BasicSize.Medium , cardPreviewSize = Data.BasicSize.Medium
, cardTitleTemplate =
{ template = Data.ItemTemplate.name
, pattern = "{{name}}"
}
, cardSubtitleTemplate =
{ template = Data.ItemTemplate.dateLong
, pattern = "{{dateLong}}"
}
} }
@ -157,6 +183,12 @@ merge given fallback =
given.cardPreviewSize given.cardPreviewSize
|> Maybe.andThen Data.BasicSize.fromString |> Maybe.andThen Data.BasicSize.fromString
|> Maybe.withDefault fallback.cardPreviewSize |> Maybe.withDefault fallback.cardPreviewSize
, cardTitleTemplate =
Maybe.andThen readPattern given.cardTitleTemplate
|> Maybe.withDefault fallback.cardTitleTemplate
, cardSubtitleTemplate =
Maybe.andThen readPattern given.cardSubtitleTemplate
|> Maybe.withDefault fallback.cardSubtitleTemplate
} }
@ -187,6 +219,8 @@ toStoredUiSettings settings =
settings.cardPreviewSize settings.cardPreviewSize
|> Data.BasicSize.asString |> Data.BasicSize.asString
|> Just |> Just
, cardTitleTemplate = settings.cardTitleTemplate.pattern |> Just
, cardSubtitleTemplate = settings.cardSubtitleTemplate.pattern |> Just
} }