mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-07 15:45:59 +00:00
Let user change template for card title and subtitle
This commit is contained in:
parent
81a136d915
commit
bdc49aae98
@ -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"
|
||||||
|
@ -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" ]
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user