Externalize strings in other of components

This commit is contained in:
Eike Kettner
2021-04-09 22:39:44 +02:00
parent 2f678aca17
commit fa2c5750dd
53 changed files with 490 additions and 223 deletions

View File

@ -15,6 +15,7 @@ import Data.Flags exposing (Flags)
import Html exposing (..)
import Html.Attributes exposing (..)
import Http
import Messages.AttachmentMetaComp exposing (Texts)
import Styles as S
import Util.Http
import Util.Time
@ -64,15 +65,18 @@ update msg model =
--- View2
view2 : List (Attribute Msg) -> Model -> Html Msg
view2 attrs model =
view2 : Texts -> List (Attribute Msg) -> Model -> Html Msg
view2 texts attrs model =
div attrs
[ h3 [ class S.header3 ]
[ text "Extracted Meta Data"
[ text texts.extractedMetadata
]
, case model.meta of
NotAvailable ->
B.loadingDimmer True
B.loadingDimmer
{ active = True
, label = texts.basics.loading
}
Failure msg ->
div [ class S.errorMessage ]
@ -80,33 +84,33 @@ view2 attrs model =
]
Success data ->
viewData2 data
viewData2 texts data
]
viewData2 : AttachmentMeta -> Html Msg
viewData2 meta =
viewData2 : Texts -> AttachmentMeta -> Html Msg
viewData2 texts meta =
div [ class "flex flex-col" ]
[ div [ class "text-lg font-bold" ]
[ text "Content"
[ text texts.content
]
, div [ class "px-2 py-2 text-sm bg-yellow-50 dark:bg-warmgray-800 break-words whitespace-pre max-h-80 overflow-auto" ]
[ text meta.content
]
, div [ class "text-lg font-bold mt-2" ]
[ text "Labels"
[ text texts.labels
]
, div [ class "flex fex-row flex-wrap" ]
(List.map renderLabelItem2 meta.labels)
, div [ class "text-lg font-bold mt-2" ]
[ text "Proposals"
[ text texts.proposals
]
, viewProposals2 meta.proposals
, viewProposals2 texts meta.proposals
]
viewProposals2 : ItemProposals -> Html Msg
viewProposals2 props =
viewProposals2 : Texts -> ItemProposals -> Html Msg
viewProposals2 texts props =
let
mkItem n lbl =
div
@ -130,32 +134,32 @@ viewProposals2 props =
in
div [ class "flex flex-col" ]
[ div [ class "font-bold mb-2" ]
[ text "Correspondent Organization"
[ text texts.correspondentOrg
]
, div [ class "flex flex-row flex-wrap space-x-2" ]
(List.indexedMap mkItem props.corrOrg)
, div [ class "font-bold mt-3 mb-2" ]
[ text "Correspondent Person"
[ text texts.correspondentPerson
]
, div [ class "flex flex-row flex-wrap space-x-2" ]
(List.indexedMap mkItem props.corrPerson)
, div [ class "font-bold mt-3 mb-2" ]
[ text "Concerning Person"
[ text texts.concerningPerson
]
, div [ class "flex flex-row flex-wrap space-x-2" ]
(List.indexedMap mkItem props.concPerson)
, div [ class "font-bold mt-3 mb-2" ]
[ text "Concerning Equipment"
[ text texts.concerningEquipment
]
, div [ class "flex flex-row flex-wrap space-x-2" ]
(List.indexedMap mkItem props.concEquipment)
, div [ class "font-bold mb-2 mt-3" ]
[ text "Item Date"
[ text texts.itemDate
]
, div [ class "flex flex-row flex-wrap space-x-2" ]
(List.map mkTimeItem props.itemDate)
, div [ class "font-bold mt-3 mb-2" ]
[ text "Item Due Date"
[ text texts.itemDueDate
]
, div [ class "flex flex-row flex-wrap space-x-2 mb-2" ]
(List.map mkTimeItem props.dueDate)

View File

@ -12,7 +12,6 @@ module Comp.Basic exposing
, secondaryBasicButton
, secondaryButton
, stats
, tooltipRight
)
import Html exposing (..)
@ -176,18 +175,18 @@ linkLabel model =
genericLink model.icon model.label attrs
loadingDimmer : Bool -> Html msg
loadingDimmer active =
loadingDimmer : { label : String, active : Bool } -> Html msg
loadingDimmer cfg =
div
[ classList
[ ( "hidden", not active )
[ ( "hidden", not cfg.active )
]
, class S.dimmer
]
[ div [ class "text-gray-200" ]
[ i [ class "fa fa-circle-notch animate-spin" ] []
, span [ class "ml-2" ]
[ text "Loading"
[ text cfg.label
]
]
]
@ -279,17 +278,6 @@ inputRequired =
]
tooltipRight : Bool -> String -> Html msg
tooltipRight show msg =
div
[ class "absolute bottom-0 right-5 px-2 py-2 rounded-lg z-50 w-40"
, class "bg-white border"
, class "text-sm font-thin"
]
[ text msg
]
--- Helpers

View File

@ -17,6 +17,7 @@ import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onInput)
import Http
import Messages.CalEventInputComp exposing (Texts)
import Styles as S
import Util.Http
import Util.Maybe
@ -129,8 +130,8 @@ update flags ev msg model =
--- View2
view2 : String -> CalEvent -> Model -> Html Msg
view2 extraClasses ev model =
view2 : Texts -> String -> CalEvent -> Model -> Html Msg
view2 texts extraClasses ev model =
let
yearLen =
Basics.max 4 (String.length ev.year)
@ -155,7 +156,7 @@ view2 extraClasses ev model =
[ label
[ class S.inputLabel
]
[ text "Weekday" ]
[ text texts.weekday ]
, input
[ type_ "text"
, class S.textInput
@ -172,7 +173,7 @@ view2 extraClasses ev model =
]
, div [ class "flex flex-col space-y-2 mr-2" ]
[ label [ class S.inputLabel ]
[ text "Year" ]
[ text texts.year ]
, input
[ type_ "text"
, class S.textInput
@ -188,7 +189,7 @@ view2 extraClasses ev model =
]
, div [ class "flex flex-col space-y-2 mr-2" ]
[ label [ class S.inputLabel ]
[ text "Month" ]
[ text texts.month ]
, input
[ type_ "text"
, class styleInput
@ -204,7 +205,7 @@ view2 extraClasses ev model =
]
, div [ class "flex flex-col space-y-2 mr-4 mr-2" ]
[ label [ class S.inputLabel ]
[ text "Day"
[ text texts.day
]
, input
[ type_ "text"
@ -218,7 +219,8 @@ view2 extraClasses ev model =
]
, div [ class "flex flex-col space-y-2 mr-2" ]
[ label [ class S.inputLabel ]
[ text "Hour" ]
[ text texts.hour
]
, input
[ type_ "text"
, class styleInput
@ -234,7 +236,7 @@ view2 extraClasses ev model =
]
, div [ class "flex flex-col space-y-2" ]
[ label [ class S.inputLabel ]
[ text "Minute"
[ text texts.minute
]
, input
[ type_ "text"
@ -253,7 +255,7 @@ view2 extraClasses ev model =
]
, class S.errorMessage
]
[ text "Error: "
[ text (texts.error ++ ": ")
, Maybe.map .message model.checkResult
|> Maybe.withDefault ""
|> text
@ -269,7 +271,7 @@ view2 extraClasses ev model =
]
[ div []
[ div [ class S.inputLabel ]
[ text "Schedule: "
[ text (texts.schedule ++ ": ")
]
, div [ class "px-12 font-mono " ]
[ Maybe.andThen .event model.checkResult
@ -277,7 +279,7 @@ view2 extraClasses ev model =
|> text
]
, div [ class S.inputLabel ]
[ text "Next: "
[ text (texts.next ++ ": ")
]
, ul [ class "list-decimal list-inside text-sm" ]
(Maybe.map .next model.checkResult

View File

@ -267,5 +267,8 @@ view2 texts model =
[ text "Submit"
]
]
, B.loadingDimmer model.loading
, B.loadingDimmer
{ active = model.loading
, label = texts.basics.loading
}
]

View File

@ -60,7 +60,7 @@ init flags sett =
in
( { scheduleModel = cem
, schedule = Data.Validated.Unknown newSchedule
, itemCountModel = Comp.IntField.init (Just 0) Nothing True ""
, itemCountModel = Comp.IntField.init (Just 0) Nothing True
, itemCount = Just sett.itemCount
, categoryListModel =
let
@ -237,6 +237,7 @@ view2 texts settings model =
[ text texts.schedule ]
, Html.map ScheduleMsg
(Comp.CalEventInput.view2
texts.calEventInput
""
(Data.Validated.value model.schedule)
model.scheduleModel

View File

@ -201,7 +201,9 @@ view2 : Texts -> ViewSettings -> Model -> List (Html Msg)
view2 texts viewSettings model =
let
dimmerSettings =
Comp.YesNoDimmer.defaultSettings2 texts.reallyDeleteField
Comp.YesNoDimmer.defaultSettings texts.reallyDeleteField
texts.basics.yes
texts.basics.no
ftypeCfg =
{ display = texts.fieldTypeLabel

View File

@ -16,12 +16,13 @@ import Comp.DatePicker
import Comp.MenuBar as MB
import Data.CustomFieldType exposing (CustomFieldType)
import Data.Icons as Icons
import Data.Money
import Data.Money exposing (MoneyParseError(..))
import Date exposing (Date)
import DatePicker exposing (DatePicker)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onCheck, onClick, onInput)
import Html.Events exposing (onClick, onInput)
import Messages.CustomFieldInputComp exposing (Texts)
import Styles as S
import Util.Maybe
@ -32,9 +33,15 @@ type alias Model =
}
type FieldError
= NoValue
| NotANumber String
| NotMoney MoneyParseError
type alias FloatModel =
{ input : String
, result : Result String Float
, result : Result FieldError Float
}
@ -61,27 +68,47 @@ fieldType field =
|> Maybe.withDefault Data.CustomFieldType.Text
errorMsg : Model -> Maybe String
errorMsg model =
errorMsg : Texts -> Model -> Maybe String
errorMsg texts model =
let
getMsg res =
case res of
Ok _ ->
Nothing
parseMsg isMoneyField perr =
case perr of
NoValue ->
if isMoneyField then
Just <| texts.errorNoAmount
Err m ->
Just m
else
Just <| texts.errorNoNumber
NotANumber str ->
Just <| texts.errorNotANumber str
NotMoney (RequireTwoDigitsAfterDot _) ->
Just "Two digits required after the dot."
NotMoney (NoOrTooManyPoints _) ->
Just "One single dot + digits required for money."
in
case model.fieldModel of
NumberField fm ->
getMsg fm.result
case fm.result of
Ok _ ->
Nothing
Err parseError ->
parseMsg False parseError
MoneyField fm ->
getMsg fm.result
case fm.result of
Ok _ ->
Nothing
Err parseError ->
parseMsg True parseError
TextField mt ->
if mt == Nothing then
Just "Please fill in some value"
Just texts.errorNoValue
else
Nothing
@ -103,10 +130,10 @@ init field =
TextField Nothing
Data.CustomFieldType.Numeric ->
NumberField (FloatModel "" (Err "No number given"))
NumberField (FloatModel "" (Err NoValue))
Data.CustomFieldType.Money ->
MoneyField (FloatModel "" (Err "No amount given"))
MoneyField (FloatModel "" (Err NoValue))
Data.CustomFieldType.Boolean ->
BoolField False
@ -150,7 +177,7 @@ initWith value =
updateFloatModel
False
value.value
Data.Money.fromString
(Data.Money.fromString >> Result.mapError NotMoney)
Data.Money.normalizeInput
in
MoneyField fm
@ -230,7 +257,7 @@ update1 forSearch msg model =
updateFloatModel
forSearch
str
Data.Money.fromString
(Data.Money.fromString >> Result.mapError NotMoney)
Data.Money.normalizeInput
model_ =
@ -294,7 +321,7 @@ update1 forSearch msg model =
updateFloatModel :
Bool
-> String
-> (String -> Result String Float)
-> (String -> Result FieldError Float)
-> (String -> String)
-> ( FloatModel, FieldResult )
updateFloatModel forSearch msg parse normalize =
@ -331,11 +358,11 @@ hasWildCards msg =
--- View2
view2 : String -> Maybe String -> Model -> Html Msg
view2 classes icon model =
view2 : Texts -> String -> Maybe String -> Model -> Html Msg
view2 texts classes icon model =
let
error =
errorMsg model
errorMsg texts model
in
div
[ class classes
@ -473,11 +500,11 @@ mkLabel model =
Maybe.withDefault model.field.name model.field.label
string2Float : String -> Result String Float
string2Float : String -> Result FieldError Float
string2Float str =
case String.toFloat str of
Just n ->
Ok n
Nothing ->
Err ("Not a number: " ++ str)
Err (NotANumber str)

View File

@ -203,5 +203,8 @@ viewTable2 texts model =
model.tableModel
model.fields
)
, B.loadingDimmer model.loading
, B.loadingDimmer
{ active = model.loading
, label = texts.basics.loading
}
]

View File

@ -29,6 +29,7 @@ import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onClick)
import Http
import Messages.CustomFieldMultiInputComp exposing (Texts)
import Styles as S
import Util.CustomField
import Util.Maybe
@ -318,11 +319,11 @@ type alias ViewSettings =
}
view2 : ViewSettings -> Model -> Html Msg
view2 viewSettings model =
view2 : Texts -> ViewSettings -> Model -> Html Msg
view2 texts viewSettings model =
div [ class viewSettings.classes ]
(viewMenuBar2 viewSettings model
:: List.map (viewCustomField2 viewSettings model) (visibleFields model)
:: List.map (viewCustomField2 texts viewSettings model) (visibleFields model)
)
@ -364,8 +365,8 @@ viewMenuBar2 viewSettings model =
)
viewCustomField2 : ViewSettings -> Model -> CustomField -> Html Msg
viewCustomField2 viewSettings model field =
viewCustomField2 : Texts -> ViewSettings -> Model -> CustomField -> Html Msg
viewCustomField2 texts viewSettings model field =
let
visibleField =
Dict.get field.name model.visibleFields
@ -373,7 +374,8 @@ viewCustomField2 viewSettings model field =
case visibleField of
Just vf ->
Html.map (CustomFieldInputMsg field)
(Comp.CustomFieldInput.view2 "mt-2"
(Comp.CustomFieldInput.view2 texts.customFieldInput
"mt-2"
(viewSettings.fieldIcon vf.field)
vf.inputModel
)

View File

@ -47,7 +47,7 @@ emptyModel =
{ settings = Api.Model.EmailSettings.empty
, name = ""
, host = ""
, portField = Comp.IntField.init (Just 0) Nothing True "SMTP Port"
, portField = Comp.IntField.init (Just 0) Nothing True
, portNum = Nothing
, user = Nothing
, passField = Comp.PasswordInput.init
@ -68,7 +68,7 @@ init ems =
{ settings = ems
, name = ems.name
, host = ems.smtpHost
, portField = Comp.IntField.init (Just 0) Nothing True "SMTP Port"
, portField = Comp.IntField.init (Just 0) Nothing True
, portNum = ems.smtpPort
, user = ems.smtpUser
, passField = Comp.PasswordInput.init
@ -225,9 +225,12 @@ view2 texts settings model =
[]
]
, Html.map PortMsg
(Comp.IntField.viewWithInfo2 ""
model.portNum
""
(Comp.IntField.view
{ label = texts.smtpPort
, info = ""
, number = model.portNum
, classes = ""
}
model.portField
)
, div [ class "col-span-4 sm:col-span-2" ]

View File

@ -250,7 +250,9 @@ viewForm2 : Texts -> UiSettings -> Model -> Html Msg
viewForm2 texts settings model =
let
dimmerSettings =
Comp.YesNoDimmer.defaultSettings2 texts.reallyDeleteConnection
Comp.YesNoDimmer.defaultSettings texts.reallyDeleteConnection
texts.basics.yes
texts.basics.no
in
div [ class "flex flex-col md:relative" ]
[ MB.view
@ -302,5 +304,8 @@ viewForm2 texts settings model =
dimmerSettings
model.deleteConfirm
)
, B.loadingDimmer model.loading
, B.loadingDimmer
{ active = model.loading
, label = texts.basics.loading
}
]

View File

@ -258,7 +258,9 @@ viewForm2 texts model =
model.formModel.equipment.id == ""
dimmerSettings2 =
Comp.YesNoDimmer.defaultSettings2 texts.reallyDeleteEquipment
Comp.YesNoDimmer.defaultSettings texts.reallyDeleteEquipment
texts.basics.yes
texts.basics.no
in
Html.form
[ class "relative flex flex-col"
@ -322,5 +324,8 @@ viewForm2 texts model =
[ Maybe.withDefault "" model.formError |> text
]
, Html.map FormMsg (Comp.EquipmentForm.view2 texts.equipmentForm model.formModel)
, B.loadingDimmer model.loading
, B.loadingDimmer
{ active = model.loading
, label = texts.basics.loading
}
]

View File

@ -286,7 +286,9 @@ view2 texts flags model =
dimmerSettings : Comp.YesNoDimmer.Settings
dimmerSettings =
Comp.YesNoDimmer.defaultSettings2 texts.reallyDeleteThisFolder
Comp.YesNoDimmer.defaultSettings texts.reallyDeleteThisFolder
texts.basics.yes
texts.basics.no
in
div [ class "flex flex-col md:relative" ]
(viewButtons2 texts model

View File

@ -156,25 +156,20 @@ viewDrop2 dropModel constr model =
highlightDrop =
DD.getDropId dropModel == Just DD.FolderRemove
in
div [ class "ui list" ]
[ div [ class "item" ]
[ i [ class "folder open icon" ] []
, div [ class "content" ]
[ div
(classList
[ ( "hidden", True )
, ( "current-drop-target", highlightDrop )
]
:: DD.droppable FolderDDMsg DD.FolderRemove
-- note: re-enable this when adding a "no-folder selection"
-- this enables a drop target that removes a folder
)
[ text "Folders"
]
, div [ class "flex flex-col space-y-2 md:space-y-1" ]
(renderItems2 dropModel constr model)
div []
[ div
(classList
[ ( "hidden", True )
, ( "current-drop-target", highlightDrop )
]
:: DD.droppable FolderDDMsg DD.FolderRemove
-- note: re-enable this when adding a "no-folder selection"
-- this enables a drop target that removes a folder
)
[ text "Folders"
]
, div [ class "flex flex-col space-y-2 md:space-y-1" ]
(renderItems2 dropModel constr model)
]

View File

@ -46,7 +46,7 @@ emptyModel =
{ settings = Api.Model.ImapSettings.empty
, name = ""
, host = ""
, portField = Comp.IntField.init (Just 0) Nothing True "IMAP Port"
, portField = Comp.IntField.init (Just 0) Nothing True
, portNum = Nothing
, user = Nothing
, passField = Comp.PasswordInput.init
@ -66,7 +66,7 @@ init ems =
{ settings = ems
, name = ems.name
, host = ems.imapHost
, portField = Comp.IntField.init (Just 0) Nothing True "IMAP Port"
, portField = Comp.IntField.init (Just 0) Nothing True
, portNum = ems.imapPort
, user = ems.imapUser
, passField = Comp.PasswordInput.init
@ -216,9 +216,12 @@ view2 texts settings model =
[]
]
, Html.map PortMsg
(Comp.IntField.viewWithInfo2 ""
model.portNum
""
(Comp.IntField.view
{ label = texts.imapPort
, info = ""
, number = model.portNum
, classes = ""
}
model.portField
)
, div [ class "col-span-4 sm:col-span-2" ]

View File

@ -251,7 +251,9 @@ viewForm2 : Texts -> UiSettings -> Model -> Html Msg
viewForm2 texts settings model =
let
dimmerSettings =
Comp.YesNoDimmer.defaultSettings2 texts.reallyDeleteSettings
Comp.YesNoDimmer.defaultSettings texts.reallyDeleteSettings
texts.basics.yes
texts.basics.no
in
div [ class "flex flex-col md:relative" ]
[ MB.view
@ -304,5 +306,8 @@ viewForm2 texts settings model =
dimmerSettings
model.deleteConfirm
)
, B.loadingDimmer model.loading
, B.loadingDimmer
{ active = model.loading
, label = texts.basics.loading
}
]

View File

@ -5,11 +5,8 @@ module Comp.IntField exposing
, init
, update
, view
, viewWithInfo2
)
--- L10N TODO
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onInput)
@ -20,7 +17,6 @@ import Styles as S
type alias Model =
{ min : Maybe Int
, max : Maybe Int
, label : String
, error : Maybe String
, lastInput : String
, optional : Bool
@ -31,11 +27,10 @@ type Msg
= SetValue String
init : Maybe Int -> Maybe Int -> Bool -> String -> Model
init min max opt label =
init : Maybe Int -> Maybe Int -> Bool -> Model
init min max opt =
{ min = min
, max = max
, label = label
, error = Nothing
, lastInput = ""
, optional = opt
@ -149,11 +144,11 @@ view cfg model =
]
viewWithInfo2 : String -> Maybe Int -> String -> Model -> Html Msg
viewWithInfo2 info nval classes model =
viewWithInfo2 : String -> String -> Maybe Int -> String -> Model -> Html Msg
viewWithInfo2 label info nval classes model =
let
cfg =
{ label = model.label
{ label = label
, info = info
, number = nval
, classes = classes

View File

@ -52,7 +52,7 @@ view2 texts flags settings model =
formTabs texts flags settings model
allTabNames =
List.map .title tabs
List.map .name tabs
|> Set.fromList
in
div (class "flex flex-col relative" :: keyAttr)
@ -127,7 +127,7 @@ formTabs texts flags settings model =
folderCfg =
{ makeOption = Util.Folder.mkFolderOption flags model.allFolders
, placeholder = ""
, placeholder = texts.selectPlaceholder
, labelColor = \_ -> \_ -> ""
, style = dds
}
@ -254,6 +254,7 @@ formTabs texts flags settings model =
[ div [ class "mb-4" ]
[ Html.map CustomFieldMsg
(Comp.CustomFieldMultiInput.view2
texts.customFieldInput
customFieldSettings
model.customFieldsModel
)

View File

@ -39,7 +39,7 @@ import Html.Attributes exposing (..)
import Html.Events exposing (onClick, onInput)
import Http
import Markdown
import Messages.MultiEditComp exposing (Texts)
import Messages.MultiEditMenuComp exposing (Texts)
import Page exposing (Page(..))
import Set exposing (Set)
import Styles as S
@ -775,6 +775,7 @@ renderEditForm2 texts flags cfg settings model =
, body =
[ Html.map CustomFieldMsg
(Comp.CustomFieldMultiInput.view2
texts.customFieldMultiInput
customFieldSettings
model.customFieldModel
)

View File

@ -52,6 +52,7 @@ view texts settings model pos attach =
Just am ->
Html.map (AttachMetaMsg attach.id)
(Comp.AttachmentMeta.view2
texts.attachmentMeta
[ class "border-r border-l border-b dark:border-bluegray-600 px-2" ]
am
)

View File

@ -250,7 +250,10 @@ sendMailForm texts settings model =
[ div [ class "text-lg font-bold" ]
[ text texts.sendThisItemViaEmail
]
, B.loadingDimmer model.mailSending
, B.loadingDimmer
{ active = model.mailSending
, label = texts.sendingMailNow
}
, Html.map ItemMailMsg (Comp.ItemMail.view2 texts.itemMail settings model.itemMail)
, div
[ classList

View File

@ -152,7 +152,7 @@ init flags =
, recipients = []
, recipientsModel = Comp.EmailInput.init
, remindDays = Just 1
, remindDaysModel = Comp.IntField.init (Just 1) Nothing True "Remind Days"
, remindDaysModel = Comp.IntField.init (Just 1) Nothing True
, enabled = False
, capOverdue = False
, schedule = initialSchedule
@ -480,7 +480,9 @@ view2 : Texts -> String -> UiSettings -> Model -> Html Msg
view2 texts extraClasses settings model =
let
dimmerSettings =
Comp.YesNoDimmer.defaultSettings2 texts.reallyDeleteTask
Comp.YesNoDimmer.defaultSettings texts.reallyDeleteTask
texts.basics.yes
texts.basics.no
startOnceBtn =
MB.SecondaryButton
@ -506,7 +508,10 @@ view2 texts extraClasses settings model =
dimmerSettings
model.yesNoDelete
)
, B.loadingDimmer (model.loading > 0)
, B.loadingDimmer
{ active = model.loading > 0
, label = texts.basics.loading
}
, MB.view
{ start =
[ MB.PrimaryButton
@ -634,10 +639,12 @@ view2 texts extraClasses settings model =
]
]
, Html.map RemindDaysMsg
(Comp.IntField.viewWithInfo2
texts.remindDaysInfo
model.remindDays
"mb-4"
(Comp.IntField.view
{ label = texts.remindDaysLabel
, info = texts.remindDaysInfo
, number = model.remindDays
, classes = "mb-4"
}
model.remindDaysModel
)
, div [ class "mb-4" ]
@ -668,7 +675,9 @@ view2 texts extraClasses settings model =
]
]
, Html.map CalEventMsg
(Comp.CalEventInput.view2 ""
(Comp.CalEventInput.view2
texts.calEventInput
""
(Data.Validated.value model.schedule)
model.scheduleModel
)

View File

@ -238,7 +238,10 @@ viewTable2 texts model =
, rootClasses = "mb-4"
}
, Html.map TableMsg (Comp.OrgTable.view2 texts.orgTable model.tableModel)
, B.loadingDimmer model.loading
, B.loadingDimmer
{ active = model.loading
, label = texts.basics.loading
}
]
@ -249,7 +252,9 @@ viewForm2 texts settings model =
model.formModel.org.id == ""
dimmerSettings2 =
Comp.YesNoDimmer.defaultSettings2 texts.reallyDeleteOrg
Comp.YesNoDimmer.defaultSettings texts.reallyDeleteOrg
texts.basics.yes
texts.basics.no
in
Html.form
[ class "md:relative flex flex-col"
@ -319,5 +324,8 @@ viewForm2 texts settings model =
settings
model.formModel
)
, B.loadingDimmer model.loading
, B.loadingDimmer
{ active = model.loading
, label = texts.basics.loading
}
]

View File

@ -275,7 +275,10 @@ viewTable2 texts model =
, rootClasses = "mb-4"
}
, Html.map TableMsg (Comp.PersonTable.view2 texts.personTable model.tableModel)
, B.loadingDimmer (isLoading model)
, B.loadingDimmer
{ active = isLoading model
, label = texts.basics.loading
}
]
@ -286,7 +289,9 @@ viewForm2 texts settings model =
model.formModel.person.id == ""
dimmerSettings2 =
Comp.YesNoDimmer.defaultSettings2 texts.reallyDeletePerson
Comp.YesNoDimmer.defaultSettings texts.reallyDeletePerson
texts.basics.yes
texts.basics.no
in
Html.form
[ class "md:relative flex flex-col"
@ -355,5 +360,8 @@ viewForm2 texts settings model =
settings
model.formModel
)
, B.loadingDimmer (isLoading model)
, B.loadingDimmer
{ active = isLoading model
, label = texts.basics.loading
}
]

View File

@ -221,7 +221,7 @@ init flags =
, enabled = False
, deleteMail = False
, receivedHours = Nothing
, receivedHoursModel = Comp.IntField.init (Just 1) Nothing True "Received Since Hours"
, receivedHoursModel = Comp.IntField.init (Just 1) Nothing True
, foldersModel = Comp.StringListInput.init
, folders = []
, targetFolder = Nothing
@ -740,7 +740,7 @@ view2 : Texts -> Flags -> String -> UiSettings -> Model -> Html Msg
view2 texts flags extraClasses settings model =
let
dimmerSettings =
Comp.YesNoDimmer.defaultSettings2 texts.reallyDeleteTask
Comp.YesNoDimmer.defaultSettings texts.reallyDeleteTask texts.basics.yes texts.basics.no
startOnceBtn =
MB.SecondaryButton
@ -813,7 +813,10 @@ view2 texts flags extraClasses settings model =
dimmerSettings
model.yesNoDelete
)
, B.loadingDimmer (model.loading > 0)
, B.loadingDimmer
{ active = model.loading > 0
, label = texts.basics.loading
}
]
@ -926,10 +929,12 @@ viewProcessing2 texts model =
]
]
, Html.map ReceivedHoursMsg
(Comp.IntField.viewWithInfo2
texts.receivedHoursInfo
model.receivedHours
"mb-4"
(Comp.IntField.view
{ label = texts.receivedHoursLabel
, info = texts.receivedHoursInfo
, number = model.receivedHours
, classes = "mb-4"
}
model.receivedHoursModel
)
]
@ -1163,7 +1168,9 @@ viewSchedule2 texts model =
]
]
, Html.map CalEventMsg
(Comp.CalEventInput.view2 ""
(Comp.CalEventInput.view2
texts.calEventInput
""
(Data.Validated.value model.schedule)
model.scheduleModel
)

View File

@ -1202,6 +1202,7 @@ searchTabs texts ddd flags settings model =
, body =
List.map (Html.map TagSelectMsg)
(Comp.TagSelect.viewTagsDrop2
texts.tagSelect
ddd.model
tagSelectWM
settings
@ -1303,6 +1304,7 @@ searchTabs texts ddd flags settings model =
, body =
[ Html.map CustomFieldMsg
(Comp.CustomFieldMultiInput.view2
texts.customFieldMultiInput
{ showAddButton = False
, classes = ""
, fieldIcon = \_ -> Nothing

View File

@ -249,7 +249,10 @@ viewTable2 texts model =
, rootClasses = "mb-4"
}
, Html.map TableMsg (Comp.SourceTable.view2 texts.sourceTable model.sources)
, B.loadingDimmer model.loading
, B.loadingDimmer
{ active = model.loading
, label = texts.basics.loading
}
]
@ -386,7 +389,9 @@ viewForm2 texts flags settings model =
model.formModel.source.source.id == ""
dimmerSettings =
Comp.YesNoDimmer.defaultSettings2 texts.reallyDeleteSource
Comp.YesNoDimmer.defaultSettings texts.reallyDeleteSource
texts.basics.yes
texts.basics.no
in
[ if newSource then
h3 [ class S.header2 ]
@ -449,6 +454,9 @@ viewForm2 texts flags settings model =
dimmerSettings
model.deleteConfirm
)
, B.loadingDimmer model.loading
, B.loadingDimmer
{ active = model.loading
, label = texts.basics.loading
}
]
]

View File

@ -264,7 +264,9 @@ viewForm2 texts model =
model.tagFormModel.tag.id == ""
dimmerSettings2 =
Comp.YesNoDimmer.defaultSettings2 texts.reallyDeleteTag
Comp.YesNoDimmer.defaultSettings texts.reallyDeleteTag
texts.basics.yes
texts.basics.no
in
Html.form
[ class "relative flex flex-col"
@ -328,5 +330,8 @@ viewForm2 texts model =
[ Maybe.withDefault "" model.formError |> text
]
, Html.map FormMsg (Comp.TagForm.view2 texts.tagForm model.tagFormModel)
, B.loadingDimmer model.loading
, B.loadingDimmer
{ active = model.loading
, label = texts.basics.loading
}
]

View File

@ -26,6 +26,7 @@ import Dict exposing (Dict)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onClick, onInput)
import Messages.TagSelectComp exposing (Texts)
import Set
import Simple.Fuzzy
import String as S
@ -422,17 +423,17 @@ catState model name =
--- View2
viewAll2 : DD.Model -> UiSettings -> Selection -> Model -> List (Html Msg)
viewAll2 ddm settings sel model =
viewAll2 : Texts -> DD.Model -> UiSettings -> Selection -> Model -> List (Html Msg)
viewAll2 texts ddm settings sel model =
let
wm =
makeWorkModel sel model
in
viewTagsDrop2 ddm wm settings model ++ [ viewCats2 settings wm model ]
viewTagsDrop2 texts ddm wm settings model ++ [ viewCats2 settings wm model ]
viewTagsDrop2 : DD.Model -> WorkModel -> UiSettings -> Model -> List (Html Msg)
viewTagsDrop2 ddm wm settings model =
viewTagsDrop2 : Texts -> DD.Model -> WorkModel -> UiSettings -> Model -> List (Html Msg)
viewTagsDrop2 texts ddm wm settings model =
[ div [ class "flex flex-col" ]
[ div [ class "flex flex-row h-6 items-center text-xs mb-2" ]
[ a
@ -442,16 +443,16 @@ viewTagsDrop2 ddm wm settings model =
, onClick ToggleShowEmpty
]
[ if model.showEmpty then
text " Hide empty"
text (" " ++ texts.hideEmpty)
else
text " Show empty"
text (" " ++ texts.showEmpty)
]
, div [ class "flex-grow" ] []
, div [ class " relative h-6" ]
[ input
[ type_ "text"
, placeholder "Filter "
, placeholder texts.filterPlaceholder
, onInput Search
, class "bg-blue-50 w-30 h-6 px-0 py-0 text-xs"
, class "border-0 border-b border-gray-200 focus:ring-0 focus:border-black"

View File

@ -109,7 +109,6 @@ init flags settings =
(Just 10)
(Just flags.config.maxPageSize)
False
"Page size"
, tagColors = settings.tagCategoryColors
, tagColorModel =
Comp.ColorTagger.init
@ -122,28 +121,24 @@ init flags settings =
(Just 0)
(Just flags.config.maxNoteLength)
False
"Max. Note Length"
, searchMenuFolderCount = Just settings.searchMenuFolderCount
, searchMenuFolderCountModel =
Comp.IntField.init
(Just 0)
(Just 2000)
False
"Number of folders in search menu"
, searchMenuTagCount = Just settings.searchMenuTagCount
, searchMenuTagCountModel =
Comp.IntField.init
(Just 0)
(Just 2000)
False
"Number of tags in search menu"
, searchMenuTagCatCount = Just settings.searchMenuTagCatCount
, searchMenuTagCatCountModel =
Comp.IntField.init
(Just 0)
(Just 2000)
False
"Number of categories in search menu"
, formFields = settings.formFields
, itemDetailShortcuts = settings.itemDetailShortcuts
, cardPreviewSize = settings.cardPreviewSize
@ -535,10 +530,12 @@ settingFormTabs texts flags _ model =
, info = Nothing
, body =
[ Html.map SearchPageSizeMsg
(Comp.IntField.viewWithInfo2
(texts.maxResultsPerPageInfo flags.config.maxPageSize)
model.itemSearchPageSize
"mb-4"
(Comp.IntField.view
{ label = texts.maxResultsPerPage
, info = texts.maxResultsPerPageInfo flags.config.maxPageSize
, number = model.itemSearchPageSize
, classes = "mb-4"
}
model.searchPageSizeModel
)
, div [ class "mb-4" ]
@ -567,10 +564,12 @@ settingFormTabs texts flags _ model =
, info = Nothing
, body =
[ Html.map NoteLengthMsg
(Comp.IntField.viewWithInfo2
(texts.maxNoteSizeInfo flags.config.maxNoteLength)
model.itemSearchNoteLength
"mb-4"
(Comp.IntField.view
{ label = texts.maxNoteSize
, info = texts.maxNoteSizeInfo flags.config.maxNoteLength
, number = model.itemSearchNoteLength
, classes = "mb-4"
}
model.searchNoteLengthModel
)
, Html.map CardPreviewSizeMsg
@ -636,24 +635,30 @@ settingFormTabs texts flags _ model =
, info = Nothing
, body =
[ Html.map SearchMenuTagMsg
(Comp.IntField.viewWithInfo2
texts.searchMenuTagCountInfo
model.searchMenuTagCount
"mb-4"
(Comp.IntField.view
{ label = texts.searchMenuTagCount
, info = texts.searchMenuTagCountInfo
, number = model.searchMenuTagCount
, classes = "mb-4"
}
model.searchMenuTagCountModel
)
, Html.map SearchMenuTagCatMsg
(Comp.IntField.viewWithInfo2
texts.searchMenuCatCountInfo
model.searchMenuTagCatCount
"mb-4"
(Comp.IntField.view
{ label = texts.searchMenuCatCount
, info = texts.searchMenuCatCountInfo
, number = model.searchMenuTagCatCount
, classes = "mb-4"
}
model.searchMenuTagCatCountModel
)
, Html.map SearchMenuFolderMsg
(Comp.IntField.viewWithInfo2
texts.searchMenuFolderCountInfo
model.searchMenuFolderCount
"mb-4"
(Comp.IntField.view
{ label = texts.searchMenuFolderCount
, info = texts.searchMenuFolderCountInfo
, number = model.searchMenuFolderCount
, classes = "mb-4"
}
model.searchMenuFolderCountModel
)
]

View File

@ -239,7 +239,10 @@ viewTable2 texts model =
, rootClasses = "mb-4"
}
, Html.map TableMsg (Comp.UserTable.view2 texts.userTable model.tableModel)
, B.loadingDimmer model.loading
, B.loadingDimmer
{ active = model.loading
, label = texts.basics.loading
}
]
@ -251,7 +254,9 @@ viewForm2 texts settings model =
dimmerSettings : Comp.YesNoDimmer.Settings
dimmerSettings =
Comp.YesNoDimmer.defaultSettings2 texts.reallyDeleteUser
Comp.YesNoDimmer.defaultSettings texts.reallyDeleteUser
texts.basics.yes
texts.basics.no
in
Html.form
[ class "flex flex-col md:relative"
@ -317,5 +322,8 @@ viewForm2 texts settings model =
FormErrorInvalid ->
text texts.pleaseCorrectErrors
]
, B.loadingDimmer model.loading
, B.loadingDimmer
{ active = model.loading
, label = texts.basics.loading
}
]

View File

@ -4,7 +4,6 @@ module Comp.YesNoDimmer exposing
, Settings
, activate
, defaultSettings
, defaultSettings2
, disable
, emptyModel
, initActive
@ -58,24 +57,13 @@ type alias Settings =
}
defaultSettings : Settings
defaultSettings =
{ message = "Delete this item permanently?"
, headerIcon = "exclamation icon"
, headerClass = "ui inverted icon header"
, confirmButton = "Yes, do it!"
, cancelButton = "No"
, extraClass = ""
}
defaultSettings2 : String -> Settings
defaultSettings2 msg =
defaultSettings : String -> String -> String -> Settings
defaultSettings msg yesLabel noLabel =
{ message = msg
, headerIcon = "fa fa-exclamation-circle mr-3"
, headerClass = "text-2xl font-bold text-center w-full"
, confirmButton = "Yes, do it!"
, cancelButton = "No"
, confirmButton = yesLabel
, cancelButton = noLabel
, extraClass = ""
}