mirror of
				https://github.com/TheAnachronism/docspell.git
				synced 2025-10-31 17:50:11 +00:00 
			
		
		
		
	Let user change template for card title and subtitle
This commit is contained in:
		| @@ -321,10 +321,10 @@ mainContent cardAction cardColor isConfirmed settings _ item = | ||||
|             Data.UiSettings.fieldHidden settings f | ||||
|  | ||||
|         titlePattern = | ||||
|             IT.name | ||||
|             settings.cardTitleTemplate.template | ||||
|  | ||||
|         subtitlePattern = | ||||
|             IT.dateLong | ||||
|             settings.cardSubtitleTemplate.template | ||||
|     in | ||||
|     a | ||||
|         [ class "content" | ||||
|   | ||||
| @@ -16,12 +16,15 @@ import Data.BasicSize exposing (BasicSize) | ||||
| import Data.Color exposing (Color) | ||||
| import Data.Fields exposing (Field) | ||||
| 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 Html exposing (..) | ||||
| import Html.Attributes exposing (..) | ||||
| import Html.Events exposing (onCheck) | ||||
| import Html.Events exposing (onCheck, onClick, onInput) | ||||
| import Http | ||||
| import Markdown | ||||
| import Util.Maybe | ||||
| import Util.Tag | ||||
|  | ||||
|  | ||||
| @@ -45,6 +48,44 @@ type alias Model = | ||||
|     , searchMenuVisible : Bool | ||||
|     , editMenuVisible : Bool | ||||
|     , 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 | ||||
|       , editMenuVisible = settings.editMenuVisible | ||||
|       , cardPreviewSize = settings.cardPreviewSize | ||||
|       , cardTitlePattern = initPatternModel settings.cardTitleTemplate | ||||
|       , cardSubtitlePattern = initPatternModel settings.cardSubtitleTemplate | ||||
|       , showPatternHelp = False | ||||
|       } | ||||
|     , Api.getTags flags "" GetTagsResp | ||||
|     ) | ||||
| @@ -117,6 +161,9 @@ type Msg | ||||
|     | ToggleSearchMenuVisible | ||||
|     | ToggleEditMenuVisible | ||||
|     | CardPreviewSizeMsg Comp.BasicSizeField.Msg | ||||
|     | SetCardTitlePattern String | ||||
|     | SetCardSubtitlePattern String | ||||
|     | TogglePatternHelpMsg | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -319,6 +366,55 @@ update sett msg model = | ||||
|             , 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 | ||||
| @@ -369,6 +465,51 @@ view flags _ model = | ||||
|                 "Size of item preview" | ||||
|                 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" ] | ||||
|             [ text "Search Menu" ] | ||||
|         , div [ class "field" ] | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| module Data.UiSettings exposing | ||||
|     ( Pos(..) | ||||
|     ( ItemPattern | ||||
|     , Pos(..) | ||||
|     , StoredUiSettings | ||||
|     , UiSettings | ||||
|     , cardPreviewSize | ||||
| @@ -21,6 +22,7 @@ import Api.Model.Tag exposing (Tag) | ||||
| import Data.BasicSize exposing (BasicSize) | ||||
| import Data.Color exposing (Color) | ||||
| import Data.Fields exposing (Field) | ||||
| import Data.ItemTemplate exposing (ItemTemplate) | ||||
| import Dict exposing (Dict) | ||||
| import Html exposing (Attribute) | ||||
| import Html.Attributes as HA | ||||
| @@ -48,6 +50,8 @@ type alias StoredUiSettings = | ||||
|     , searchMenuVisible : Bool | ||||
|     , editMenuVisible : Bool | ||||
|     , cardPreviewSize : Maybe String | ||||
|     , cardTitleTemplate : Maybe String | ||||
|     , cardSubtitleTemplate : Maybe String | ||||
|     } | ||||
|  | ||||
|  | ||||
| @@ -72,9 +76,23 @@ type alias UiSettings = | ||||
|     , searchMenuVisible : Bool | ||||
|     , editMenuVisible : Bool | ||||
|     , 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 | ||||
|     = Top | ||||
|     | Bottom | ||||
| @@ -118,6 +136,14 @@ defaults = | ||||
|     , searchMenuVisible = False | ||||
|     , editMenuVisible = False | ||||
|     , 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 | ||||
|             |> Maybe.andThen Data.BasicSize.fromString | ||||
|             |> 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 | ||||
|             |> Data.BasicSize.asString | ||||
|             |> Just | ||||
|     , cardTitleTemplate = settings.cardTitleTemplate.pattern |> Just | ||||
|     , cardSubtitleTemplate = settings.cardSubtitleTemplate.pattern |> Just | ||||
|     } | ||||
|  | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user