Merge pull request #1430 from eikek/time-zones

Time zones
This commit is contained in:
mergify[bot]
2022-03-01 22:33:40 +00:00
committed by GitHub
73 changed files with 680 additions and 474 deletions

View File

@ -33,7 +33,7 @@ object EmptyTrashArgs {
val taskName = Ident.unsafe("empty-trash") val taskName = Ident.unsafe("empty-trash")
val defaultSchedule = CalEvent.unsafe("*-*-1/7 03:00:00") val defaultSchedule = CalEvent.unsafe("*-*-1/7 03:00:00 UTC")
def periodicTaskId(coll: Ident): Ident = def periodicTaskId(coll: Ident): Ident =
Ident.unsafe(s"docspell") / taskName / coll Ident.unsafe(s"docspell") / taskName / coll

View File

@ -6,10 +6,8 @@
package docspell.common package docspell.common
import java.time.LocalDateTime
import java.time.ZonedDateTime
import java.time.temporal.ChronoUnit import java.time.temporal.ChronoUnit
import java.time.{Instant, LocalDate, ZoneId} import java.time.{Duration => _, _}
import cats.effect.Sync import cats.effect.Sync
@ -57,7 +55,7 @@ case class Timestamp(value: Instant) {
} }
object Timestamp { object Timestamp {
val UTC = ZoneId.of("UTC") val UTC: ZoneId = ZoneOffset.UTC
val Epoch = Timestamp(Instant.EPOCH) val Epoch = Timestamp(Instant.EPOCH)

View File

@ -144,7 +144,7 @@ docspell.joex {
# When the house keeping tasks execute. Default is to run every # When the house keeping tasks execute. Default is to run every
# week. # week.
schedule = "Sun *-*-* 00:00:00" schedule = "Sun *-*-* 00:00:00 UTC"
# This task removes invitation keys that have been created but not # This task removes invitation keys that have been created but not
# used. The timespan here must be greater than the `invite-time' # used. The timespan here must be greater than the `invite-time'
@ -209,8 +209,9 @@ docspell.joex {
test-run = false test-run = false
# When the update check should execute. Default is to run every # When the update check should execute. Default is to run every
# week. # week. You can specify a time zone identifier, like
schedule = "Sun *-*-* 00:00:00" # 'Europe/Berlin' at the end.
schedule = "Sun *-*-* 00:00:00 UTC"
# An account id in form of `collective/user` (or just `user` if # An account id in form of `collective/user` (or just `user` if
# collective and user name are the same). This user account must # collective and user name are the same). This user account must

View File

@ -22,6 +22,7 @@
"elm/url": "1.0.0", "elm/url": "1.0.0",
"elm-explorations/markdown": "1.0.0", "elm-explorations/markdown": "1.0.0",
"justinmimbs/date": "3.1.2", "justinmimbs/date": "3.1.2",
"justinmimbs/timezone-data": "5.1.2",
"norpan/elm-html5-drag-drop": "3.1.4", "norpan/elm-html5-drag-drop": "3.1.4",
"pablohirafuji/elm-qrcode": "4.0.1", "pablohirafuji/elm-qrcode": "4.0.1",
"ryannhg/date-format": "2.3.0", "ryannhg/date-format": "2.3.0",

View File

@ -68,7 +68,7 @@ updateWithSub : Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
updateWithSub msg model = updateWithSub msg model =
let let
texts = texts =
Messages.get <| App.Data.getUiLanguage model Messages.get (App.Data.getUiLanguage model) model.uiSettings.timeZone
in in
case msg of case msg of
ToggleSidebar -> ToggleSidebar ->
@ -566,7 +566,7 @@ updateCollSettings texts lmsg model =
let let
( lm, lc, ls ) = ( lm, lc, ls ) =
Page.CollectiveSettings.Update.update texts.collectiveSettings Page.CollectiveSettings.Update.update texts.collectiveSettings
model.flags (modelEnv model)
lmsg lmsg
model.collSettingsModel model.collSettingsModel
in in
@ -648,7 +648,7 @@ initPage model_ page =
{ model_ | page = page } { model_ | page = page }
texts = texts =
Messages.get <| App.Data.getUiLanguage model Messages.get (App.Data.getUiLanguage model) model.uiSettings.timeZone
noop = noop =
( model, Cmd.none, Sub.none ) ( model, Cmd.none, Sub.none )

View File

@ -59,7 +59,7 @@ topNavUser : AuthResult -> Model -> Html Msg
topNavUser auth model = topNavUser auth model =
let let
texts = texts =
Messages.get <| App.Data.getUiLanguage model Messages.get (App.Data.getUiLanguage model) model.uiSettings.timeZone
in in
nav nav
[ id "top-nav" [ id "top-nav"
@ -161,7 +161,7 @@ mainContent : Model -> Html Msg
mainContent model = mainContent model =
let let
texts = texts =
Messages.get <| App.Data.getUiLanguage model Messages.get (App.Data.getUiLanguage model) model.uiSettings.timeZone
in in
div div
[ id "main" [ id "main"
@ -227,12 +227,12 @@ langMenu : Model -> Html Msg
langMenu model = langMenu model =
let let
texts = texts =
Messages.get <| App.Data.getUiLanguage model Messages.get (App.Data.getUiLanguage model) model.uiSettings.timeZone
langItem lang = langItem lang =
let let
langMsg = langMsg =
Messages.get lang Messages.get lang model.uiSettings.timeZone
in in
a a
[ classList [ classList

View File

@ -18,6 +18,7 @@ import Api.Model.CalEventCheck exposing (CalEventCheck)
import Api.Model.CalEventCheckResult exposing (CalEventCheckResult) import Api.Model.CalEventCheckResult exposing (CalEventCheckResult)
import Data.CalEvent exposing (CalEvent) import Data.CalEvent exposing (CalEvent)
import Data.Flags exposing (Flags) import Data.Flags exposing (Flags)
import Data.TimeZone exposing (TimeZone)
import Data.Validated exposing (Validated(..)) import Data.Validated exposing (Validated(..))
import Html exposing (..) import Html exposing (..)
import Html.Attributes exposing (..) import Html.Attributes exposing (..)
@ -109,8 +110,8 @@ isCheckError model =
False False
update : Flags -> Maybe CalEvent -> Msg -> Model -> ( Model, Cmd Msg, Maybe CalEvent ) update : Flags -> TimeZone -> Maybe CalEvent -> Msg -> Model -> ( Model, Cmd Msg, Maybe CalEvent )
update flags mev msg model = update flags tz mev msg model =
let let
ev = ev =
Maybe.withDefault model.inner mev Maybe.withDefault model.inner mev
@ -153,7 +154,7 @@ update flags mev msg model =
( m ( m
, Cmd.none , Cmd.none
, if res.success then , if res.success then
Just event Just { event | timeZone = tz }
else else
Nothing Nothing

View File

@ -26,6 +26,7 @@ import Data.DropdownStyle as DS
import Data.Flags exposing (Flags) import Data.Flags exposing (Flags)
import Data.ListType exposing (ListType) import Data.ListType exposing (ListType)
import Data.TagOrder import Data.TagOrder
import Data.TimeZone exposing (TimeZone)
import Data.UiSettings exposing (UiSettings) import Data.UiSettings exposing (UiSettings)
import Html exposing (..) import Html exposing (..)
import Html.Attributes exposing (..) import Html.Attributes exposing (..)
@ -111,8 +112,8 @@ getSettings model =
model.schedule model.schedule
update : Flags -> Msg -> Model -> ( Model, Cmd Msg ) update : Flags -> TimeZone -> Msg -> Model -> ( Model, Cmd Msg )
update flags msg model = update flags tz msg model =
case msg of case msg of
GetTagsResp (Ok tl) -> GetTagsResp (Ok tl) ->
let let
@ -123,7 +124,7 @@ update flags msg model =
lm = lm =
Comp.Dropdown.SetOptions categories Comp.Dropdown.SetOptions categories
in in
update flags (CategoryListMsg lm) model update flags tz (CategoryListMsg lm) model
GetTagsResp (Err _) -> GetTagsResp (Err _) ->
( model, Cmd.none ) ( model, Cmd.none )
@ -133,6 +134,7 @@ update flags msg model =
( cm, cc, ce ) = ( cm, cc, ce ) =
Comp.CalEventInput.update Comp.CalEventInput.update
flags flags
tz
model.schedule model.schedule
lmsg lmsg
model.scheduleModel model.scheduleModel

View File

@ -26,6 +26,7 @@ import Comp.StringListInput
import Data.DropdownStyle as DS import Data.DropdownStyle as DS
import Data.Flags exposing (Flags) import Data.Flags exposing (Flags)
import Data.Language exposing (Language) import Data.Language exposing (Language)
import Data.TimeZone exposing (TimeZone)
import Data.UiSettings exposing (UiSettings) import Data.UiSettings exposing (UiSettings)
import Html exposing (..) import Html exposing (..)
import Html.Attributes exposing (..) import Html.Attributes exposing (..)
@ -143,8 +144,8 @@ type Msg
| PasswordMsg Comp.StringListInput.Msg | PasswordMsg Comp.StringListInput.Msg
update : Flags -> Msg -> Model -> ( Model, Cmd Msg, Maybe CollectiveSettings ) update : Flags -> TimeZone -> Msg -> Model -> ( Model, Cmd Msg, Maybe CollectiveSettings )
update flags msg model = update flags tz msg model =
case msg of case msg of
LangDropdownMsg m -> LangDropdownMsg m ->
let let
@ -207,7 +208,7 @@ update flags msg model =
ClassifierSettingMsg lmsg -> ClassifierSettingMsg lmsg ->
let let
( cm, cc ) = ( cm, cc ) =
Comp.ClassifierSettingsForm.update flags lmsg model.classifierModel Comp.ClassifierSettingsForm.update flags tz lmsg model.classifierModel
in in
( { model ( { model
| classifierModel = cm | classifierModel = cm
@ -219,7 +220,7 @@ update flags msg model =
EmptyTrashMsg lmsg -> EmptyTrashMsg lmsg ->
let let
( cm, cc ) = ( cm, cc ) =
Comp.EmptyTrashForm.update flags lmsg model.emptyTrashModel Comp.EmptyTrashForm.update flags tz lmsg model.emptyTrashModel
in in
( { model ( { model
| emptyTrashModel = cm | emptyTrashModel = cm

View File

@ -29,6 +29,7 @@ import Data.CalEvent exposing (CalEvent)
import Data.DropdownStyle as DS import Data.DropdownStyle as DS
import Data.Flags exposing (Flags) import Data.Flags exposing (Flags)
import Data.TagOrder import Data.TagOrder
import Data.TimeZone exposing (TimeZone)
import Data.UiSettings exposing (UiSettings) import Data.UiSettings exposing (UiSettings)
import Data.Validated exposing (Validated(..)) import Data.Validated exposing (Validated(..))
import Html exposing (..) import Html exposing (..)
@ -237,8 +238,8 @@ withValidSettings mkcmd model =
) )
update : Flags -> Msg -> Model -> ( Model, Action, Cmd Msg ) update : Flags -> TimeZone -> Msg -> Model -> ( Model, Action, Cmd Msg )
update flags msg model = update flags tz msg model =
case msg of case msg of
ChannelMsg lm -> ChannelMsg lm ->
let let
@ -254,6 +255,7 @@ update flags msg model =
let let
( cm, cc, cs ) = ( cm, cc, cs ) =
Comp.CalEventInput.update flags Comp.CalEventInput.update flags
tz
model.schedule model.schedule
lmsg lmsg
model.scheduleModel model.scheduleModel

View File

@ -20,6 +20,7 @@ import Comp.DueItemsTaskForm
import Comp.DueItemsTaskList import Comp.DueItemsTaskList
import Comp.MenuBar as MB import Comp.MenuBar as MB
import Data.Flags exposing (Flags) import Data.Flags exposing (Flags)
import Data.TimeZone exposing (TimeZone)
import Data.UiSettings exposing (UiSettings) import Data.UiSettings exposing (UiSettings)
import Html exposing (..) import Html exposing (..)
import Html.Attributes exposing (..) import Html.Attributes exposing (..)
@ -81,8 +82,8 @@ init flags =
--- Update --- Update
update : Flags -> Msg -> Model -> ( Model, Cmd Msg ) update : Flags -> TimeZone -> Msg -> Model -> ( Model, Cmd Msg )
update flags msg model = update flags tz msg model =
case msg of case msg of
GetDataResp (Ok items) -> GetDataResp (Ok items) ->
( { model ( { model
@ -126,7 +127,7 @@ update flags msg model =
Just dm -> Just dm ->
let let
( mm, action, mc ) = ( mm, action, mc ) =
Comp.DueItemsTaskForm.update flags lm dm Comp.DueItemsTaskForm.update flags tz lm dm
( model_, cmd_ ) = ( model_, cmd_ ) =
case action of case action of

View File

@ -19,6 +19,7 @@ import Comp.CalEventInput
import Comp.IntField import Comp.IntField
import Data.CalEvent exposing (CalEvent) import Data.CalEvent exposing (CalEvent)
import Data.Flags exposing (Flags) import Data.Flags exposing (Flags)
import Data.TimeZone exposing (TimeZone)
import Data.UiSettings exposing (UiSettings) import Data.UiSettings exposing (UiSettings)
import Html exposing (..) import Html exposing (..)
import Html.Attributes exposing (..) import Html.Attributes exposing (..)
@ -81,14 +82,15 @@ getSettings model =
model.minAgeDays model.minAgeDays
update : Flags -> Msg -> Model -> ( Model, Cmd Msg ) update : Flags -> TimeZone -> Msg -> Model -> ( Model, Cmd Msg )
update flags msg model = update flags tz msg model =
case msg of case msg of
ScheduleMsg lmsg -> ScheduleMsg lmsg ->
let let
( cm, cc, ce ) = ( cm, cc, ce ) =
Comp.CalEventInput.update Comp.CalEventInput.update
flags flags
tz
model.schedule model.schedule
lmsg lmsg
model.scheduleModel model.scheduleModel

View File

@ -225,7 +225,7 @@ menuBar texts inav env model =
[ { icon = [ { icon =
foldSelected foldSelected
(i [ class "fa fa-check-square dark:text-lime-400 text-lime-600" ] []) (i [ class "fa fa-check-square dark:text-lime-400 text-lime-600" ] [])
(i [ class "fa fa-tasks" ] []) (i [ class "fa-regular fa-plus" ] [])
, label = foldSelected texts.deselectItem texts.selectItem , label = foldSelected texts.deselectItem texts.selectItem
, disabled = False , disabled = False
, attrs = , attrs =
@ -316,7 +316,7 @@ menuBar texts inav env model =
] ]
[ foldSelected [ foldSelected
(i [ class "fa fa-square-check" ] []) (i [ class "fa fa-square-check" ] [])
(i [ class "fa fa-list-check" ] []) (i [ class "fa fa-plus" ] [])
] ]
, MB.CustomElement <| , MB.CustomElement <|
a a

View File

@ -25,6 +25,7 @@ import Comp.MenuBar as MB
import Comp.PowerSearchInput import Comp.PowerSearchInput
import Data.CalEvent exposing (CalEvent) import Data.CalEvent exposing (CalEvent)
import Data.Flags exposing (Flags) import Data.Flags exposing (Flags)
import Data.TimeZone exposing (TimeZone)
import Data.UiSettings exposing (UiSettings) import Data.UiSettings exposing (UiSettings)
import Data.Validated exposing (Validated(..)) import Data.Validated exposing (Validated(..))
import Html exposing (..) import Html exposing (..)
@ -254,13 +255,14 @@ withValidSettings mkcmd model =
} }
update : Flags -> Msg -> Model -> UpdateResult update : Flags -> TimeZone -> Msg -> Model -> UpdateResult
update flags msg model = update flags tz msg model =
case msg of case msg of
CalEventMsg lmsg -> CalEventMsg lmsg ->
let let
( cm, cc, cs ) = ( cm, cc, cs ) =
Comp.CalEventInput.update flags Comp.CalEventInput.update flags
tz
model.schedule model.schedule
lmsg lmsg
model.scheduleModel model.scheduleModel

View File

@ -20,6 +20,7 @@ import Comp.MenuBar as MB
import Comp.PeriodicQueryTaskForm import Comp.PeriodicQueryTaskForm
import Comp.PeriodicQueryTaskList import Comp.PeriodicQueryTaskList
import Data.Flags exposing (Flags) import Data.Flags exposing (Flags)
import Data.TimeZone exposing (TimeZone)
import Data.UiSettings exposing (UiSettings) import Data.UiSettings exposing (UiSettings)
import Html exposing (..) import Html exposing (..)
import Html.Attributes exposing (..) import Html.Attributes exposing (..)
@ -81,8 +82,8 @@ init flags =
--- Update --- Update
update : Flags -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) update : Flags -> TimeZone -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
update flags msg model = update flags tz msg model =
case msg of case msg of
GetDataResp (Ok items) -> GetDataResp (Ok items) ->
( { model ( { model
@ -130,7 +131,7 @@ update flags msg model =
let let
--( mm, action, mc ) = --( mm, action, mc ) =
result = result =
Comp.PeriodicQueryTaskForm.update flags lm dm Comp.PeriodicQueryTaskForm.update flags tz lm dm
( model_, cmd_ ) = ( model_, cmd_ ) =
case result.action of case result.action of

View File

@ -40,6 +40,7 @@ import Data.Flags exposing (Flags)
import Data.FolderOrder import Data.FolderOrder
import Data.Language exposing (Language) import Data.Language exposing (Language)
import Data.TagOrder import Data.TagOrder
import Data.TimeZone exposing (TimeZone)
import Data.UiSettings exposing (UiSettings) import Data.UiSettings exposing (UiSettings)
import Data.Validated exposing (Validated(..)) import Data.Validated exposing (Validated(..))
import Html exposing (..) import Html exposing (..)
@ -183,7 +184,7 @@ initWith flags s =
|> Maybe.withDefault [] |> Maybe.withDefault []
( nm, _, nc ) = ( nm, _, nc ) =
update flags (ConnMsg (Comp.Dropdown.SetSelection imap)) im update flags Data.TimeZone.utc (ConnMsg (Comp.Dropdown.SetSelection imap)) im
newSchedule = newSchedule =
Data.CalEvent.fromEvent s.schedule Data.CalEvent.fromEvent s.schedule
@ -354,13 +355,14 @@ withValidSettings mkAction model =
) )
update : Flags -> Msg -> Model -> ( Model, Action, Cmd Msg ) update : Flags -> TimeZone -> Msg -> Model -> ( Model, Action, Cmd Msg )
update flags msg model = update flags tz msg model =
case msg of case msg of
CalEventMsg lmsg -> CalEventMsg lmsg ->
let let
( cm, cc, cs ) = ( cm, cc, cs ) =
Comp.CalEventInput.update flags Comp.CalEventInput.update flags
tz
model.schedule model.schedule
lmsg lmsg
model.scheduleModel model.scheduleModel
@ -585,8 +587,8 @@ update flags msg model =
( a, NoAction, b ) ( a, NoAction, b )
in in
Util.Update.andThen1 Util.Update.andThen1
[ update flags (FolderDropdownMsg opts) >> removeAction [ update flags tz (FolderDropdownMsg opts) >> removeAction
, update flags (FolderDropdownMsg (Comp.Dropdown.SetSelection sel)) >> removeAction , update flags tz (FolderDropdownMsg (Comp.Dropdown.SetSelection sel)) >> removeAction
] ]
model_ model_
|> addNoAction |> addNoAction

View File

@ -21,6 +21,7 @@ import Comp.MenuBar as MB
import Comp.ScanMailboxForm import Comp.ScanMailboxForm
import Comp.ScanMailboxList import Comp.ScanMailboxList
import Data.Flags exposing (Flags) import Data.Flags exposing (Flags)
import Data.TimeZone exposing (TimeZone)
import Data.UiSettings exposing (UiSettings) import Data.UiSettings exposing (UiSettings)
import Html exposing (..) import Html exposing (..)
import Html.Attributes exposing (..) import Html.Attributes exposing (..)
@ -82,8 +83,8 @@ init flags =
--- Update --- Update
update : Flags -> Msg -> Model -> ( Model, Cmd Msg ) update : Flags -> TimeZone -> Msg -> Model -> ( Model, Cmd Msg )
update flags msg model = update flags tz msg model =
case msg of case msg of
GetDataResp (Ok res) -> GetDataResp (Ok res) ->
( { model ( { model
@ -127,7 +128,7 @@ update flags msg model =
Just dm -> Just dm ->
let let
( mm, action, mc ) = ( mm, action, mc ) =
Comp.ScanMailboxForm.update flags lm dm Comp.ScanMailboxForm.update flags tz lm dm
( model_, cmd_ ) = ( model_, cmd_ ) =
case action of case action of

View File

@ -19,6 +19,7 @@ import Api
import Api.Model.TagList exposing (TagList) import Api.Model.TagList exposing (TagList)
import Comp.BasicSizeField import Comp.BasicSizeField
import Comp.ColorTagger import Comp.ColorTagger
import Comp.Dropdown
import Comp.FieldListSelect import Comp.FieldListSelect
import Comp.FixedDropdown import Comp.FixedDropdown
import Comp.IntField import Comp.IntField
@ -32,6 +33,7 @@ import Data.Flags exposing (Flags)
import Data.ItemTemplate as IT exposing (ItemTemplate) import Data.ItemTemplate as IT exposing (ItemTemplate)
import Data.Pdf exposing (PdfMode) import Data.Pdf exposing (PdfMode)
import Data.TagOrder import Data.TagOrder
import Data.TimeZone exposing (TimeZone)
import Data.UiSettings exposing (ItemPattern, StoredUiSettings, UiSettings) import Data.UiSettings exposing (ItemPattern, StoredUiSettings, UiSettings)
import Dict exposing (Dict) import Dict exposing (Dict)
import Html exposing (..) import Html exposing (..)
@ -74,6 +76,7 @@ type alias Model =
, powerSearchEnabled : Bool , powerSearchEnabled : Bool
, uiLangModel : Comp.FixedDropdown.Model UiLanguage , uiLangModel : Comp.FixedDropdown.Model UiLanguage
, uiLang : UiLanguage , uiLang : UiLanguage
, timezoneDropdown : Comp.Dropdown.Model String
, openTabs : Set String , openTabs : Set String
, defaults : UiSettings , defaults : UiSettings
} }
@ -169,6 +172,11 @@ initModel flags storedSettings defaults =
, uiLang = settings.uiLang , uiLang = settings.uiLang
, uiLangModel = , uiLangModel =
Comp.FixedDropdown.init Messages.UiLanguage.all Comp.FixedDropdown.init Messages.UiLanguage.all
, timezoneDropdown =
Comp.Dropdown.makeSingleList
{ options = Data.TimeZone.listAll
, selected = Just (Data.TimeZone.toName settings.timeZone)
}
, openTabs = Set.empty , openTabs = Set.empty
, defaults = defaults , defaults = defaults
} }
@ -208,6 +216,7 @@ type Msg
| TogglePowerSearch | TogglePowerSearch
| UiLangMsg (Comp.FixedDropdown.Msg UiLanguage) | UiLangMsg (Comp.FixedDropdown.Msg UiLanguage)
| PdfModeMsg (Comp.FixedDropdown.Msg PdfMode) | PdfModeMsg (Comp.FixedDropdown.Msg PdfMode)
| TimeZoneMsg (Comp.Dropdown.Msg String)
| ToggleAllTabs | ToggleAllTabs
| ResetTab AkkordionTab | ResetTab AkkordionTab
@ -598,6 +607,27 @@ update flags sett msg model =
in in
( { nm | openTabs = model.openTabs }, Just newSettings ) ( { nm | openTabs = model.openTabs }, Just newSettings )
TimeZoneMsg lm ->
let
( tm, tcmd ) =
Comp.Dropdown.update lm model.timezoneDropdown
tz =
if Comp.Dropdown.isDropdownChangeMsg lm then
Comp.Dropdown.getSelected tm |> List.head
else
sett.timeZone
newSett =
if sett.timeZone == tz then
Nothing
else
Just { sett | timeZone = tz }
in
( { model | timezoneDropdown = tm }, newSett )
--- View2 --- View2
@ -646,8 +676,8 @@ settingFormTabs : Texts -> Flags -> StoredUiSettings -> Model -> List (Comp.Tabs
settingFormTabs texts flags _ model = settingFormTabs texts flags _ model =
let let
langCfg = langCfg =
{ display = \lang -> Messages.get lang |> .label { display = \lang -> Messages.get lang Data.TimeZone.utc |> .label
, icon = \lang -> Just (Messages.get lang |> .flagIcon) , icon = \lang -> Just (Messages.get lang Data.TimeZone.utc |> .flagIcon)
, style = DS.mainStyle , style = DS.mainStyle
, selectPlaceholder = texts.basics.selectPlaceholder , selectPlaceholder = texts.basics.selectPlaceholder
} }
@ -669,6 +699,9 @@ settingFormTabs texts flags _ model =
[ i [ class "fa fa-eraser mr-1" ] [] [ i [ class "fa fa-eraser mr-1" ] []
, text texts.resetLabel , text texts.resetLabel
] ]
uiSettings =
Data.UiSettings.defaults
in in
[ { name = akkordionTabName GeneralTab [ { name = akkordionTabName GeneralTab
, title = texts.general , title = texts.general
@ -694,6 +727,22 @@ settingFormTabs texts flags _ model =
model.uiLangModel model.uiLangModel
) )
] ]
, div [ class "mb-4" ]
[ label [ class S.inputLabel ] [ text "Timezone" ]
, Html.map TimeZoneMsg
(Comp.Dropdown.view2
{ makeOption = \s -> { text = s, additional = "" }
, placeholder = ""
, labelColor = \_ -> \_ -> ""
, style = DS.mainStyle
}
uiSettings
model.timezoneDropdown
)
, span [ class "opacity-75 text-sm" ]
[ text "Used to format date-time values."
]
]
] ]
} }
, { name = akkordionTabName SearchTab , { name = akkordionTabName SearchTab

View File

@ -12,6 +12,7 @@ module Data.CalEvent exposing
, makeEvent , makeEvent
) )
import Data.TimeZone exposing (TimeZone)
import Util.Maybe import Util.Maybe
@ -22,12 +23,13 @@ type alias CalEvent =
, day : String , day : String
, hour : String , hour : String
, minute : String , minute : String
, timeZone : TimeZone
} }
everyMonth : CalEvent everyMonth : CalEvent
everyMonth = everyMonth =
CalEvent Nothing "*" "*" "01" "00" "00" CalEvent Nothing "*" "*" "01" "00" "00" Data.TimeZone.utc
makeEvent : CalEvent -> String makeEvent : CalEvent -> String
@ -43,6 +45,8 @@ makeEvent ev =
++ ev.hour ++ ev.hour
++ ":" ++ ":"
++ ev.minute ++ ev.minute
++ " "
++ Data.TimeZone.toName ev.timeZone
in in
case ev.weekday of case ev.weekday of
Just wd -> Just wd ->
@ -60,18 +64,40 @@ fromEvent str =
parts = parts =
String.split " " str String.split " " str
foldChanges : List (CalEvent -> Maybe CalEvent) -> Maybe CalEvent
foldChanges list =
List.foldl (\fmc -> \c -> Maybe.andThen fmc c) (Just init) list
in in
case parts of case parts of
wd :: date :: time :: [] -> wd :: date :: time :: tz :: [] ->
Maybe.andThen foldChanges
(fromDate date) [ fromWeekDays wd
(fromTime time init) , fromDate date
|> Maybe.map (withWeekday wd) , fromTime time
, fromTimeZone tz
]
a :: b :: c :: [] ->
if startsWithWeekday a then
foldChanges
[ fromWeekDays a
, fromDate b
, fromTime c
]
else
foldChanges
[ fromDate a
, fromTime b
, fromTimeZone c
]
date :: time :: [] -> date :: time :: [] ->
Maybe.andThen foldChanges
(fromDate date) [ fromDate date
(fromTime time init) , fromTime time
]
_ -> _ ->
Nothing Nothing
@ -109,6 +135,31 @@ fromTime time ev =
Nothing Nothing
fromTimeZone : String -> CalEvent -> Maybe CalEvent
fromTimeZone tzStr ev =
Data.TimeZone.get tzStr
|> Maybe.map (\tz -> { ev | timeZone = tz })
fromWeekDays : String -> CalEvent -> Maybe CalEvent
fromWeekDays str ce =
if startsWithWeekday str then
Just (withWeekday str ce)
else
Nothing
withWeekday : String -> CalEvent -> CalEvent withWeekday : String -> CalEvent -> CalEvent
withWeekday wd ev = withWeekday wd ev =
{ ev | weekday = Util.Maybe.fromString wd } { ev | weekday = Util.Maybe.fromString wd }
weekDays : List String
weekDays =
[ "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" ]
startsWithWeekday : String -> Bool
startsWithWeekday str =
List.any (\a -> String.startsWith a str) weekDays

View File

@ -0,0 +1,47 @@
{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Data.TimeZone exposing (TimeZone, get, listAll, toName, toZone, utc)
import Dict
import Time exposing (Zone)
import TimeZone as TZ
type TimeZone
= TimeZone ( String, Zone )
get : String -> Maybe TimeZone
get name =
case String.toLower name of
"utc" ->
Just utc
_ ->
Dict.get name TZ.zones
|> Maybe.map (\z -> TimeZone ( name, z () ))
toName : TimeZone -> String
toName (TimeZone ( name, _ )) =
name
toZone : TimeZone -> Zone
toZone (TimeZone ( _, zone )) =
zone
utc : TimeZone
utc =
TimeZone ( "UTC", Time.utc )
listAll : List String
listAll =
"UTC" :: Dict.keys TZ.zones

View File

@ -40,6 +40,7 @@ import Data.Flags exposing (Flags)
import Data.ItemArrange exposing (ItemArrange) import Data.ItemArrange exposing (ItemArrange)
import Data.ItemTemplate exposing (ItemTemplate) import Data.ItemTemplate exposing (ItemTemplate)
import Data.Pdf exposing (PdfMode) import Data.Pdf exposing (PdfMode)
import Data.TimeZone exposing (TimeZone)
import Data.UiTheme exposing (UiTheme) import Data.UiTheme exposing (UiTheme)
import Dict exposing (Dict) import Dict exposing (Dict)
import Html exposing (Attribute, Html, embed, iframe) import Html exposing (Attribute, Html, embed, iframe)
@ -80,6 +81,7 @@ type alias StoredUiSettings =
, uiLang : Maybe String , uiLang : Maybe String
, itemSearchShowGroups : Maybe Bool , itemSearchShowGroups : Maybe Bool
, itemSearchArrange : Maybe String , itemSearchArrange : Maybe String
, timeZone : Maybe String
} }
@ -105,6 +107,7 @@ emptyStoredSettings =
, uiLang = Nothing , uiLang = Nothing
, itemSearchShowGroups = Nothing , itemSearchShowGroups = Nothing
, itemSearchArrange = Nothing , itemSearchArrange = Nothing
, timeZone = Nothing
} }
@ -141,6 +144,7 @@ storedUiSettingsDecoder =
|> P.optional "uiLang" maybeString Nothing |> P.optional "uiLang" maybeString Nothing
|> P.optional "itemSearchShowGroups" maybeBool Nothing |> P.optional "itemSearchShowGroups" maybeBool Nothing
|> P.optional "itemSearchArrange" maybeString Nothing |> P.optional "itemSearchArrange" maybeString Nothing
|> P.optional "timeZone" maybeString Nothing
storedUiSettingsEncode : StoredUiSettings -> Encode.Value storedUiSettingsEncode : StoredUiSettings -> Encode.Value
@ -173,6 +177,7 @@ storedUiSettingsEncode value =
, maybeEnc "uiLang" Encode.string value.uiLang , maybeEnc "uiLang" Encode.string value.uiLang
, maybeEnc "itemSearchShowGroups" Encode.bool value.itemSearchShowGroups , maybeEnc "itemSearchShowGroups" Encode.bool value.itemSearchShowGroups
, maybeEnc "itemSearchArrange" Encode.string value.itemSearchArrange , maybeEnc "itemSearchArrange" Encode.string value.itemSearchArrange
, maybeEnc "timeZone" Encode.string value.timeZone
] ]
@ -205,6 +210,7 @@ type alias UiSettings =
, uiLang : UiLanguage , uiLang : UiLanguage
, itemSearchShowGroups : Bool , itemSearchShowGroups : Bool
, itemSearchArrange : ItemArrange , itemSearchArrange : ItemArrange
, timeZone : TimeZone
} }
@ -248,6 +254,7 @@ defaults =
, uiLang = Messages.UiLanguage.English , uiLang = Messages.UiLanguage.English
, itemSearchShowGroups = True , itemSearchShowGroups = True
, itemSearchArrange = Data.ItemArrange.Cards , itemSearchArrange = Data.ItemArrange.Cards
, timeZone = Data.TimeZone.utc
} }
@ -306,6 +313,9 @@ merge given fallback =
, itemSearchArrange = , itemSearchArrange =
Maybe.andThen Data.ItemArrange.fromString given.itemSearchArrange Maybe.andThen Data.ItemArrange.fromString given.itemSearchArrange
|> Maybe.withDefault fallback.itemSearchArrange |> Maybe.withDefault fallback.itemSearchArrange
, timeZone =
Maybe.andThen Data.TimeZone.get given.timeZone
|> Maybe.withDefault fallback.timeZone
} }
@ -344,6 +354,7 @@ convert settings =
, uiLang = Just <| Messages.toIso2 settings.uiLang , uiLang = Just <| Messages.toIso2 settings.uiLang
, itemSearchShowGroups = Just settings.itemSearchShowGroups , itemSearchShowGroups = Just settings.itemSearchShowGroups
, itemSearchArrange = Data.ItemArrange.asString settings.itemSearchArrange |> Just , itemSearchArrange = Data.ItemArrange.asString settings.itemSearchArrange |> Just
, timeZone = Data.TimeZone.toName settings.timeZone |> Just
} }

View File

@ -12,6 +12,7 @@ module Messages exposing
, toIso2 , toIso2
) )
import Data.TimeZone exposing (TimeZone)
import Messages.App import Messages.App
import Messages.Page.CollectiveSettings import Messages.Page.CollectiveSettings
import Messages.Page.Dashboard import Messages.Page.Dashboard
@ -33,6 +34,7 @@ import Messages.UiLanguage exposing (UiLanguage(..))
-} -}
type alias Messages = type alias Messages =
{ lang : UiLanguage { lang : UiLanguage
, timeZone : TimeZone
, iso2 : String , iso2 : String
, label : String , label : String
, flagIcon : String , flagIcon : String
@ -53,21 +55,21 @@ type alias Messages =
} }
get : UiLanguage -> Messages get : UiLanguage -> TimeZone -> Messages
get lang = get lang tz =
case lang of case lang of
English -> English ->
gb gb tz
German -> German ->
de de tz
{-| Get a ISO-3166-1 code of the given lanugage. {-| Get a ISO-3166-1 code of the given lanugage.
-} -}
toIso2 : UiLanguage -> String toIso2 : UiLanguage -> String
toIso2 lang = toIso2 lang =
get lang |> .iso2 get lang Data.TimeZone.utc |> .iso2
{-| Return the UiLanguage from given iso2 code. If the iso2 code is not {-| Return the UiLanguage from given iso2 code. If the iso2 code is not
@ -98,47 +100,49 @@ fromIso2 iso =
-- use two classes: flag-icon flag-icon-xx where xx is the two-letter country code -- use two classes: flag-icon flag-icon-xx where xx is the two-letter country code
gb : Messages gb : TimeZone -> Messages
gb = gb tz =
{ lang = English { lang = English
, timeZone = tz
, iso2 = "gb" , iso2 = "gb"
, label = "English" , label = "English"
, flagIcon = "flag-icon flag-icon-gb" , flagIcon = "flag-icon flag-icon-gb"
, app = Messages.App.gb , app = Messages.App.gb
, collectiveSettings = Messages.Page.CollectiveSettings.gb , collectiveSettings = Messages.Page.CollectiveSettings.gb tz
, login = Messages.Page.Login.gb , login = Messages.Page.Login.gb
, register = Messages.Page.Register.gb , register = Messages.Page.Register.gb
, newInvite = Messages.Page.NewInvite.gb , newInvite = Messages.Page.NewInvite.gb
, upload = Messages.Page.Upload.gb , upload = Messages.Page.Upload.gb
, itemDetail = Messages.Page.ItemDetail.gb , itemDetail = Messages.Page.ItemDetail.gb tz
, queue = Messages.Page.Queue.gb , queue = Messages.Page.Queue.gb tz
, userSettings = Messages.Page.UserSettings.gb , userSettings = Messages.Page.UserSettings.gb tz
, manageData = Messages.Page.ManageData.gb , manageData = Messages.Page.ManageData.gb tz
, search = Messages.Page.Search.gb , search = Messages.Page.Search.gb tz
, share = Messages.Page.Share.gb , share = Messages.Page.Share.gb tz
, shareDetail = Messages.Page.ShareDetail.gb , shareDetail = Messages.Page.ShareDetail.gb tz
, dashboard = Messages.Page.Dashboard.gb , dashboard = Messages.Page.Dashboard.gb tz
} }
de : Messages de : TimeZone -> Messages
de = de tz =
{ lang = German { lang = German
, timeZone = tz
, iso2 = "de" , iso2 = "de"
, label = "Deutsch" , label = "Deutsch"
, flagIcon = "flag-icon flag-icon-de" , flagIcon = "flag-icon flag-icon-de"
, app = Messages.App.de , app = Messages.App.de
, collectiveSettings = Messages.Page.CollectiveSettings.de , collectiveSettings = Messages.Page.CollectiveSettings.de tz
, login = Messages.Page.Login.de , login = Messages.Page.Login.de
, register = Messages.Page.Register.de , register = Messages.Page.Register.de
, newInvite = Messages.Page.NewInvite.de , newInvite = Messages.Page.NewInvite.de
, upload = Messages.Page.Upload.de , upload = Messages.Page.Upload.de
, itemDetail = Messages.Page.ItemDetail.de , itemDetail = Messages.Page.ItemDetail.de tz
, queue = Messages.Page.Queue.de , queue = Messages.Page.Queue.de tz
, userSettings = Messages.Page.UserSettings.de , userSettings = Messages.Page.UserSettings.de tz
, manageData = Messages.Page.ManageData.de , manageData = Messages.Page.ManageData.de tz
, search = Messages.Page.Search.de , search = Messages.Page.Search.de tz
, share = Messages.Page.Share.de , share = Messages.Page.Share.de tz
, shareDetail = Messages.Page.ShareDetail.de , shareDetail = Messages.Page.ShareDetail.de tz
, dashboard = Messages.Page.Dashboard.de , dashboard = Messages.Page.Dashboard.de tz
} }

View File

@ -11,6 +11,7 @@ module Messages.Comp.AttachmentMeta exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.HttpError import Messages.Comp.HttpError
@ -35,8 +36,8 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
, extractedMetadata = "Extracted Meta Data" , extractedMetadata = "Extracted Meta Data"
@ -49,12 +50,12 @@ gb =
, concerningEquipment = "Concerning Equipment" , concerningEquipment = "Concerning Equipment"
, itemDate = "Item Date" , itemDate = "Item Date"
, itemDueDate = "Item Due Date" , itemDueDate = "Item Due Date"
, formatDateShort = DF.formatDateShort Messages.UiLanguage.English , formatDateShort = DF.formatDateShort Messages.UiLanguage.English tz
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de
, extractedMetadata = "Extrahierte Metadaten" , extractedMetadata = "Extrahierte Metadaten"
@ -67,5 +68,5 @@ de =
, concerningEquipment = "Betreffende Ausstattung" , concerningEquipment = "Betreffende Ausstattung"
, itemDate = "Datum" , itemDate = "Datum"
, itemDueDate = "Fälligkeitsdatum" , itemDueDate = "Fälligkeitsdatum"
, formatDateShort = DF.formatDateShort Messages.UiLanguage.German , formatDateShort = DF.formatDateShort Messages.UiLanguage.German tz
} }

View File

@ -8,6 +8,7 @@
module Messages.Comp.BoxQueryView exposing (Texts, de, gb) module Messages.Comp.BoxQueryView exposing (Texts, de, gb)
import Data.ItemTemplate as IT import Data.ItemTemplate as IT
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.HttpError import Messages.Comp.HttpError
@ -27,30 +28,30 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ httpError = Messages.Comp.HttpError.gb { httpError = Messages.Comp.HttpError.gb
, errorOccurred = "Error retrieving data." , errorOccurred = "Error retrieving data."
, basics = Messages.Basics.gb , basics = Messages.Basics.gb
, noResults = "No items found." , noResults = "No items found."
, templateCtx = , templateCtx =
{ dateFormatLong = DF.formatDateLong Messages.UiLanguage.English { dateFormatLong = DF.formatDateLong Messages.UiLanguage.English tz
, dateFormatShort = DF.formatDateShort Messages.UiLanguage.English , dateFormatShort = DF.formatDateShort Messages.UiLanguage.English tz
, directionLabel = Messages.Data.Direction.gb , directionLabel = Messages.Data.Direction.gb
} }
, itemColumn = Messages.Data.ItemColumn.gb , itemColumn = Messages.Data.ItemColumn.gb
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ httpError = Messages.Comp.HttpError.de { httpError = Messages.Comp.HttpError.de
, errorOccurred = "Fehler beim Laden der Daten." , errorOccurred = "Fehler beim Laden der Daten."
, basics = Messages.Basics.de , basics = Messages.Basics.de
, noResults = "Keine Dokumente gefunden." , noResults = "Keine Dokumente gefunden."
, templateCtx = , templateCtx =
{ dateFormatLong = DF.formatDateLong Messages.UiLanguage.German { dateFormatLong = DF.formatDateLong Messages.UiLanguage.German tz
, dateFormatShort = DF.formatDateShort Messages.UiLanguage.German , dateFormatShort = DF.formatDateShort Messages.UiLanguage.German tz
, directionLabel = Messages.Data.Direction.de , directionLabel = Messages.Data.Direction.de
} }
, itemColumn = Messages.Data.ItemColumn.de , itemColumn = Messages.Data.ItemColumn.de

View File

@ -7,6 +7,7 @@
module Messages.Comp.BoxView exposing (Texts, de, gb) module Messages.Comp.BoxView exposing (Texts, de, gb)
import Data.TimeZone exposing (TimeZone)
import Messages.Comp.BoxQueryView import Messages.Comp.BoxQueryView
import Messages.Comp.BoxStatsView import Messages.Comp.BoxStatsView
import Messages.Comp.BoxUploadView import Messages.Comp.BoxUploadView
@ -19,17 +20,17 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ queryView = Messages.Comp.BoxQueryView.gb { queryView = Messages.Comp.BoxQueryView.gb tz
, statsView = Messages.Comp.BoxStatsView.gb , statsView = Messages.Comp.BoxStatsView.gb
, uploadView = Messages.Comp.BoxUploadView.gb , uploadView = Messages.Comp.BoxUploadView.gb
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ queryView = Messages.Comp.BoxQueryView.de { queryView = Messages.Comp.BoxQueryView.de tz
, statsView = Messages.Comp.BoxStatsView.de , statsView = Messages.Comp.BoxStatsView.de
, uploadView = Messages.Comp.BoxUploadView.de , uploadView = Messages.Comp.BoxUploadView.de
} }

View File

@ -11,6 +11,7 @@ module Messages.Comp.CalEventInput exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Comp.HttpError import Messages.Comp.HttpError
import Messages.DateFormat as DF import Messages.DateFormat as DF
@ -32,8 +33,8 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ weekday = "Weekday" { weekday = "Weekday"
, year = "Year" , year = "Year"
, month = "Month" , month = "Month"
@ -43,13 +44,13 @@ gb =
, error = "Error" , error = "Error"
, schedule = "Schedule" , schedule = "Schedule"
, next = "Next" , next = "Next"
, formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English tz
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ weekday = "Wochentag" { weekday = "Wochentag"
, year = "Jahr" , year = "Jahr"
, month = "Monat" , month = "Monat"
@ -59,6 +60,6 @@ de =
, error = "Fehler" , error = "Fehler"
, schedule = "Zeitplan" , schedule = "Zeitplan"
, next = "Nächste Zeiten" , next = "Nächste Zeiten"
, formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German tz
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de
} }

View File

@ -11,6 +11,7 @@ module Messages.Comp.ClassifierSettingsForm exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.Basics import Messages.Basics
import Messages.Comp.CalEventInput import Messages.Comp.CalEventInput
@ -28,10 +29,10 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, calEventInput = Messages.Comp.CalEventInput.gb , calEventInput = Messages.Comp.CalEventInput.gb tz
, autoTaggingText = , autoTaggingText =
""" """
@ -53,10 +54,10 @@ Use an empty whitelist to disable auto tagging.
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, calEventInput = Messages.Comp.CalEventInput.de , calEventInput = Messages.Comp.CalEventInput.de tz
, autoTaggingText = , autoTaggingText =
""" """

View File

@ -12,6 +12,7 @@ module Messages.Comp.CollectiveSettingsForm exposing
) )
import Data.Language exposing (Language) import Data.Language exposing (Language)
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.ClassifierSettingsForm import Messages.Comp.ClassifierSettingsForm
@ -49,11 +50,11 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, classifierSettingsForm = Messages.Comp.ClassifierSettingsForm.gb , classifierSettingsForm = Messages.Comp.ClassifierSettingsForm.gb tz
, emptyTrashForm = Messages.Comp.EmptyTrashForm.gb , emptyTrashForm = Messages.Comp.EmptyTrashForm.gb tz
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
, save = "Save" , save = "Save"
, saveSettings = "Save Settings" , saveSettings = "Save Settings"
@ -84,11 +85,11 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, classifierSettingsForm = Messages.Comp.ClassifierSettingsForm.de , classifierSettingsForm = Messages.Comp.ClassifierSettingsForm.de tz
, emptyTrashForm = Messages.Comp.EmptyTrashForm.de , emptyTrashForm = Messages.Comp.EmptyTrashForm.de tz
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de
, save = "Speichern" , save = "Speichern"
, saveSettings = "Einstellungen speichern" , saveSettings = "Einstellungen speichern"

View File

@ -11,6 +11,7 @@ module Messages.Comp.CustomFieldManage exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.Basics import Messages.Basics
import Messages.Comp.CustomFieldForm import Messages.Comp.CustomFieldForm
import Messages.Comp.CustomFieldTable import Messages.Comp.CustomFieldTable
@ -25,21 +26,21 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, fieldForm = Messages.Comp.CustomFieldForm.gb , fieldForm = Messages.Comp.CustomFieldForm.gb
, fieldTable = Messages.Comp.CustomFieldTable.gb , fieldTable = Messages.Comp.CustomFieldTable.gb tz
, addCustomField = "Add a new custom field" , addCustomField = "Add a new custom field"
, newCustomField = "New custom field" , newCustomField = "New custom field"
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, fieldForm = Messages.Comp.CustomFieldForm.de , fieldForm = Messages.Comp.CustomFieldForm.de
, fieldTable = Messages.Comp.CustomFieldTable.de , fieldTable = Messages.Comp.CustomFieldTable.de tz
, addCustomField = "Ein neues Benutzerfeld anlegen" , addCustomField = "Ein neues Benutzerfeld anlegen"
, newCustomField = "Neues Benutzerfeld" , newCustomField = "Neues Benutzerfeld"
} }

View File

@ -11,6 +11,7 @@ module Messages.Comp.CustomFieldTable exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.Basics import Messages.Basics
import Messages.DateFormat as DF import Messages.DateFormat as DF
import Messages.UiLanguage import Messages.UiLanguage
@ -25,21 +26,21 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, nameLabel = "Name/Label" , nameLabel = "Name/Label"
, format = "Format" , format = "Format"
, usageCount = "#Usage" , usageCount = "#Usage"
, formatDateShort = DF.formatDateShort Messages.UiLanguage.English , formatDateShort = DF.formatDateShort Messages.UiLanguage.English tz
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, nameLabel = "Name/Label" , nameLabel = "Name/Label"
, format = "Format" , format = "Format"
, usageCount = "#Nutzung" , usageCount = "#Nutzung"
, formatDateShort = DF.formatDateShort Messages.UiLanguage.German , formatDateShort = DF.formatDateShort Messages.UiLanguage.German tz
} }

View File

@ -7,6 +7,7 @@
module Messages.Comp.DashboardView exposing (Texts, de, gb) module Messages.Comp.DashboardView exposing (Texts, de, gb)
import Data.TimeZone exposing (TimeZone)
import Messages.Comp.BoxView import Messages.Comp.BoxView
@ -15,13 +16,13 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ boxView = Messages.Comp.BoxView.gb { boxView = Messages.Comp.BoxView.gb tz
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ boxView = Messages.Comp.BoxView.de { boxView = Messages.Comp.BoxView.de tz
} }

View File

@ -11,6 +11,7 @@ module Messages.Comp.DueItemsTaskForm exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.CalEventInput import Messages.Comp.CalEventInput
@ -57,10 +58,10 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, calEventInput = Messages.Comp.CalEventInput.gb , calEventInput = Messages.Comp.CalEventInput.gb tz
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
, channelForm = Messages.Comp.ChannelForm.gb , channelForm = Messages.Comp.ChannelForm.gb
, tagDropdown = Messages.Comp.TagDropdown.gb , tagDropdown = Messages.Comp.TagDropdown.gb
@ -98,10 +99,10 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, calEventInput = Messages.Comp.CalEventInput.de , calEventInput = Messages.Comp.CalEventInput.de tz
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de
, channelForm = Messages.Comp.ChannelForm.de , channelForm = Messages.Comp.ChannelForm.de
, tagDropdown = Messages.Comp.TagDropdown.de , tagDropdown = Messages.Comp.TagDropdown.de

View File

@ -11,6 +11,7 @@ module Messages.Comp.DueItemsTaskManage exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.DueItemsTaskForm import Messages.Comp.DueItemsTaskForm
@ -34,10 +35,10 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, notificationForm = Messages.Comp.DueItemsTaskForm.gb , notificationForm = Messages.Comp.DueItemsTaskForm.gb tz
, notificationTable = Messages.Comp.DueItemsTaskList.gb , notificationTable = Messages.Comp.DueItemsTaskList.gb
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
, channelType = Messages.Data.ChannelType.gb , channelType = Messages.Data.ChannelType.gb
@ -50,10 +51,10 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, notificationForm = Messages.Comp.DueItemsTaskForm.de , notificationForm = Messages.Comp.DueItemsTaskForm.de tz
, notificationTable = Messages.Comp.DueItemsTaskList.de , notificationTable = Messages.Comp.DueItemsTaskList.de
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de
, channelType = Messages.Data.ChannelType.de , channelType = Messages.Data.ChannelType.de

View File

@ -11,6 +11,7 @@ module Messages.Comp.EmptyTrashForm exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.Basics import Messages.Basics
import Messages.Comp.CalEventInput import Messages.Comp.CalEventInput
@ -24,20 +25,20 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, calEventInput = Messages.Comp.CalEventInput.gb , calEventInput = Messages.Comp.CalEventInput.gb tz
, schedule = "Schedule" , schedule = "Schedule"
, minAge = "Minimum Age (Days)" , minAge = "Minimum Age (Days)"
, minAgeInfo = "The minimum age in days of an items to be removed. The last-update time is used." , minAgeInfo = "The minimum age in days of an items to be removed. The last-update time is used."
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, calEventInput = Messages.Comp.CalEventInput.de , calEventInput = Messages.Comp.CalEventInput.de tz
, schedule = "Zeitplan" , schedule = "Zeitplan"
, minAge = "Mindestalter (Tage)" , minAge = "Mindestalter (Tage)"
, minAgeInfo = "Das Mindestalter (in Tagen) der Dokumente, die gelöscht werden. Es wird das Datum der letzten Veränderung verwendet." , minAgeInfo = "Das Mindestalter (in Tagen) der Dokumente, die gelöscht werden. Es wird das Datum der letzten Veränderung verwendet."

View File

@ -11,6 +11,7 @@ module Messages.Comp.FolderManage exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.Basics import Messages.Basics
import Messages.Comp.FolderDetail import Messages.Comp.FolderDetail
import Messages.Comp.FolderTable import Messages.Comp.FolderTable
@ -26,22 +27,22 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, folderDetail = Messages.Comp.FolderDetail.gb , folderDetail = Messages.Comp.FolderDetail.gb
, folderTable = Messages.Comp.FolderTable.gb , folderTable = Messages.Comp.FolderTable.gb tz
, showOwningFoldersOnly = "Show owning folders only" , showOwningFoldersOnly = "Show owning folders only"
, createNewFolder = "Create a new folder" , createNewFolder = "Create a new folder"
, newFolder = "New Folder" , newFolder = "New Folder"
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, folderDetail = Messages.Comp.FolderDetail.de , folderDetail = Messages.Comp.FolderDetail.de
, folderTable = Messages.Comp.FolderTable.de , folderTable = Messages.Comp.FolderTable.de tz
, showOwningFoldersOnly = "Nur besitzende Ordner anzeigen" , showOwningFoldersOnly = "Nur besitzende Ordner anzeigen"
, createNewFolder = "Neuen Ordner anlegen" , createNewFolder = "Neuen Ordner anlegen"
, newFolder = "Neuer Ordner" , newFolder = "Neuer Ordner"

View File

@ -11,6 +11,7 @@ module Messages.Comp.FolderTable exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.Basics import Messages.Basics
import Messages.DateFormat as DF import Messages.DateFormat as DF
import Messages.UiLanguage import Messages.UiLanguage
@ -24,19 +25,19 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, memberCount = "#Member" , memberCount = "#Member"
, formatDateShort = DF.formatDateShort Messages.UiLanguage.English , formatDateShort = DF.formatDateShort Messages.UiLanguage.English tz
, owner = "Owner" , owner = "Owner"
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, memberCount = "#Mitglieder" , memberCount = "#Mitglieder"
, formatDateShort = DF.formatDateShort Messages.UiLanguage.German , formatDateShort = DF.formatDateShort Messages.UiLanguage.German tz
, owner = "Besitzer" , owner = "Besitzer"
} }

View File

@ -12,6 +12,7 @@ module Messages.Comp.ItemCard exposing
) )
import Data.Direction exposing (Direction) import Data.Direction exposing (Direction)
import Data.TimeZone exposing (TimeZone)
import Messages.Basics import Messages.Basics
import Messages.Data.Direction import Messages.Data.Direction
import Messages.DateFormat import Messages.DateFormat
@ -31,29 +32,29 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, dueOn = "Due on" , dueOn = "Due on"
, new = "New" , new = "New"
, openAttachmentFile = "Open attachment file" , openAttachmentFile = "Open attachment file"
, gotoDetail = "Go to detail view" , gotoDetail = "Go to detail view"
, cycleAttachments = "Cycle attachments" , cycleAttachments = "Cycle attachments"
, formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.English , formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.English tz
, formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.English , formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.English tz
, directionLabel = Messages.Data.Direction.gb , directionLabel = Messages.Data.Direction.gb
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, dueOn = "Fällig am" , dueOn = "Fällig am"
, new = "Neu" , new = "Neu"
, openAttachmentFile = "Anhang öffnen" , openAttachmentFile = "Anhang öffnen"
, gotoDetail = "Detailansicht" , gotoDetail = "Detailansicht"
, cycleAttachments = "Anhänge durchschalten" , cycleAttachments = "Anhänge durchschalten"
, formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.German , formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.German tz
, formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.German , formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.German tz
, directionLabel = Messages.Data.Direction.de , directionLabel = Messages.Data.Direction.de
} }

View File

@ -11,6 +11,7 @@ module Messages.Comp.ItemCardList exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.Comp.ItemCard import Messages.Comp.ItemCard
@ -19,13 +20,13 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ itemCard = Messages.Comp.ItemCard.gb { itemCard = Messages.Comp.ItemCard.gb tz
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ itemCard = Messages.Comp.ItemCard.de { itemCard = Messages.Comp.ItemCard.de tz
} }

View File

@ -11,6 +11,7 @@ module Messages.Comp.ItemDetail exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Comp.DetailEdit import Messages.Comp.DetailEdit
import Messages.Comp.HttpError import Messages.Comp.HttpError
@ -62,12 +63,12 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ addFilesForm = Messages.Comp.ItemDetail.AddFilesForm.gb { addFilesForm = Messages.Comp.ItemDetail.AddFilesForm.gb
, itemInfoHeader = Messages.Comp.ItemDetail.ItemInfoHeader.gb , itemInfoHeader = Messages.Comp.ItemDetail.ItemInfoHeader.gb tz
, singleAttachment = Messages.Comp.ItemDetail.SingleAttachment.gb , singleAttachment = Messages.Comp.ItemDetail.SingleAttachment.gb tz
, sentMails = Messages.Comp.SentMails.gb , sentMails = Messages.Comp.SentMails.gb tz
, notes = Messages.Comp.ItemDetail.Notes.gb , notes = Messages.Comp.ItemDetail.Notes.gb
, itemMail = Messages.Comp.ItemMail.gb , itemMail = Messages.Comp.ItemMail.gb
, detailEdit = Messages.Comp.DetailEdit.gb , detailEdit = Messages.Comp.DetailEdit.gb
@ -91,7 +92,7 @@ gb =
, createdOn = "Created on" , createdOn = "Created on"
, lastUpdateOn = "Last update on" , lastUpdateOn = "Last update on"
, sendingMailNow = "Sending e-mail" , sendingMailNow = "Sending e-mail"
, formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English tz
, mailSendSuccessful = "Mail sent." , mailSendSuccessful = "Mail sent."
, showQrCode = "Show URL as QR code" , showQrCode = "Show URL as QR code"
, close = "Close" , close = "Close"
@ -100,12 +101,12 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ addFilesForm = Messages.Comp.ItemDetail.AddFilesForm.de { addFilesForm = Messages.Comp.ItemDetail.AddFilesForm.de
, itemInfoHeader = Messages.Comp.ItemDetail.ItemInfoHeader.de , itemInfoHeader = Messages.Comp.ItemDetail.ItemInfoHeader.de tz
, singleAttachment = Messages.Comp.ItemDetail.SingleAttachment.de , singleAttachment = Messages.Comp.ItemDetail.SingleAttachment.de tz
, sentMails = Messages.Comp.SentMails.de , sentMails = Messages.Comp.SentMails.de tz
, notes = Messages.Comp.ItemDetail.Notes.de , notes = Messages.Comp.ItemDetail.Notes.de
, itemMail = Messages.Comp.ItemMail.de , itemMail = Messages.Comp.ItemMail.de
, detailEdit = Messages.Comp.DetailEdit.de , detailEdit = Messages.Comp.DetailEdit.de
@ -129,7 +130,7 @@ de =
, createdOn = "Erstellt am" , createdOn = "Erstellt am"
, lastUpdateOn = "Letzte Aktualisierung" , lastUpdateOn = "Letzte Aktualisierung"
, sendingMailNow = "E-Mail wird gesendet" , sendingMailNow = "E-Mail wird gesendet"
, formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German tz
, mailSendSuccessful = "E-Mail wurde versendet." , mailSendSuccessful = "E-Mail wurde versendet."
, showQrCode = "Link als QR code anzeigen" , showQrCode = "Link als QR code anzeigen"
, close = "Schließen" , close = "Schließen"

View File

@ -12,6 +12,7 @@ module Messages.Comp.ItemDetail.EditForm exposing
) )
import Data.Direction exposing (Direction) import Data.Direction exposing (Direction)
import Data.TimeZone exposing (TimeZone)
import Messages.Basics import Messages.Basics
import Messages.Comp.CustomFieldMultiInput import Messages.Comp.CustomFieldMultiInput
import Messages.Comp.TagDropdown import Messages.Comp.TagDropdown
@ -43,8 +44,8 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, customFieldInput = Messages.Comp.CustomFieldMultiInput.gb , customFieldInput = Messages.Comp.CustomFieldMultiInput.gb
, tagDropdown = Messages.Comp.TagDropdown.gb , tagDropdown = Messages.Comp.TagDropdown.gb
@ -62,13 +63,13 @@ gb =
, editEquipment = "Edit equipment" , editEquipment = "Edit equipment"
, suggestions = "Suggestions" , suggestions = "Suggestions"
, noSuggestions = "No suggestions" , noSuggestions = "No suggestions"
, formatDate = DF.formatDateLong Messages.UiLanguage.English , formatDate = DF.formatDateLong Messages.UiLanguage.English tz
, direction = Messages.Data.Direction.gb , direction = Messages.Data.Direction.gb
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, customFieldInput = Messages.Comp.CustomFieldMultiInput.de , customFieldInput = Messages.Comp.CustomFieldMultiInput.de
, tagDropdown = Messages.Comp.TagDropdown.de , tagDropdown = Messages.Comp.TagDropdown.de
@ -86,6 +87,6 @@ de =
, editEquipment = "Ausstattung ändern" , editEquipment = "Ausstattung ändern"
, suggestions = "Vorschläge" , suggestions = "Vorschläge"
, noSuggestions = "Keine Vorschläge" , noSuggestions = "Keine Vorschläge"
, formatDate = DF.formatDateLong Messages.UiLanguage.German , formatDate = DF.formatDateLong Messages.UiLanguage.German tz
, direction = Messages.Data.Direction.de , direction = Messages.Data.Direction.de
} }

View File

@ -11,6 +11,7 @@ module Messages.Comp.ItemDetail.ItemInfoHeader exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.Basics import Messages.Basics
import Messages.DateFormat as DF import Messages.DateFormat as DF
import Messages.UiLanguage import Messages.UiLanguage
@ -26,23 +27,23 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, itemDate = "Item Date" , itemDate = "Item Date"
, dueDate = "Due Date" , dueDate = "Due Date"
, source = "Source" , source = "Source"
, new = "New" , new = "New"
, formatDate = DF.formatDateLong Messages.UiLanguage.English , formatDate = DF.formatDateLong Messages.UiLanguage.English tz
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, itemDate = "Datum" , itemDate = "Datum"
, dueDate = "Fälligkeitsdatum" , dueDate = "Fälligkeitsdatum"
, source = "Quelle" , source = "Quelle"
, new = "Neu" , new = "Neu"
, formatDate = DF.formatDateLong Messages.UiLanguage.German , formatDate = DF.formatDateLong Messages.UiLanguage.German tz
} }

View File

@ -11,6 +11,7 @@ module Messages.Comp.ItemDetail.SingleAttachment exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.Comp.AttachmentMeta import Messages.Comp.AttachmentMeta
import Messages.Comp.ItemDetail.ConfirmModal import Messages.Comp.ItemDetail.ConfirmModal
@ -35,9 +36,9 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ attachmentMeta = Messages.Comp.AttachmentMeta.gb { attachmentMeta = Messages.Comp.AttachmentMeta.gb tz
, confirmModal = Messages.Comp.ItemDetail.ConfirmModal.gb , confirmModal = Messages.Comp.ItemDetail.ConfirmModal.gb
, noName = "No name" , noName = "No name"
, openFileInNewTab = "Open file in new tab" , openFileInNewTab = "Open file in new tab"
@ -56,9 +57,9 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ attachmentMeta = Messages.Comp.AttachmentMeta.de { attachmentMeta = Messages.Comp.AttachmentMeta.de tz
, confirmModal = Messages.Comp.ItemDetail.ConfirmModal.de , confirmModal = Messages.Comp.ItemDetail.ConfirmModal.de
, noName = "Kein Name" , noName = "Kein Name"
, openFileInNewTab = "Anhang im neuen Tab öffnen" , openFileInNewTab = "Anhang im neuen Tab öffnen"

View File

@ -11,6 +11,7 @@ module Messages.Comp.ItemMerge exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.HttpError import Messages.Comp.HttpError
@ -35,15 +36,15 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
, title = "Merge Items" , title = "Merge Items"
, infoText = "When merging items the first item in the list acts as the target. Every other items metadata is copied into the target item. If the property is a single value (like correspondent), it is only set if not already present. Tags, custom fields and attachments are added. The items can be reordered using drag&drop." , infoText = "When merging items the first item in the list acts as the target. Every other items metadata is copied into the target item. If the property is a single value (like correspondent), it is only set if not already present. Tags, custom fields and attachments are added. The items can be reordered using drag&drop."
, deleteWarn = "Note that all items but the first one is deleted after a successful merge!" , deleteWarn = "Note that all items but the first one is deleted after a successful merge!"
, formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.English , formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.English tz
, formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.English , formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.English tz
, submitMerge = "Merge" , submitMerge = "Merge"
, submitMergeTitle = "Merge the documents now" , submitMergeTitle = "Merge the documents now"
, cancelMerge = "Cancel" , cancelMerge = "Cancel"
@ -53,15 +54,15 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de
, title = "Dokumente zusammenführen" , title = "Dokumente zusammenführen"
, infoText = "Beim Zusammenführen der Dokumente, wird das erste in der Liste als Zieldokument verwendet. Die Metadaten der anderen Dokumente werden der Reihe nach auf des Zieldokument geschrieben. Metadaten die nur einen Wert haben, werden nur gesetzt falls noch kein Wert existiert. Tags, Benutzerfelder und Anhänge werden zu dem Zieldokument hinzugefügt. Die Einträge können mit Drag&Drop umgeordnet werden." , infoText = "Beim Zusammenführen der Dokumente, wird das erste in der Liste als Zieldokument verwendet. Die Metadaten der anderen Dokumente werden der Reihe nach auf des Zieldokument geschrieben. Metadaten die nur einen Wert haben, werden nur gesetzt falls noch kein Wert existiert. Tags, Benutzerfelder und Anhänge werden zu dem Zieldokument hinzugefügt. Die Einträge können mit Drag&Drop umgeordnet werden."
, deleteWarn = "Bitte beachte, dass nach erfolgreicher Zusammenführung alle anderen Dokumente gelöscht werden!" , deleteWarn = "Bitte beachte, dass nach erfolgreicher Zusammenführung alle anderen Dokumente gelöscht werden!"
, formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.German , formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.German tz
, formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.German , formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.German tz
, submitMerge = "Zusammenführen" , submitMerge = "Zusammenführen"
, submitMergeTitle = "Dokumente jetzt zusammenführen" , submitMergeTitle = "Dokumente jetzt zusammenführen"
, cancelMerge = "Abbrechen" , cancelMerge = "Abbrechen"

View File

@ -11,6 +11,7 @@ module Messages.Comp.OtpSetup exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Comp.HttpError import Messages.Comp.HttpError
import Messages.DateFormat import Messages.DateFormat
@ -43,10 +44,10 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ httpError = Messages.Comp.HttpError.gb { httpError = Messages.Comp.HttpError.gb
, formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.English , formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.English tz
, errorTitle = "Error" , errorTitle = "Error"
, stateErrorInfoText = "There was a problem determining the current state of your two factor authentication scheme:" , stateErrorInfoText = "There was a problem determining the current state of your two factor authentication scheme:"
, errorGeneratingQR = "Error generating QR Code" , errorGeneratingQR = "Error generating QR Code"
@ -70,10 +71,10 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ httpError = Messages.Comp.HttpError.de { httpError = Messages.Comp.HttpError.de
, formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.German , formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.German tz
, errorTitle = "Fehler" , errorTitle = "Fehler"
, stateErrorInfoText = "Es gab ein Problem, den Status der Zwei-Faktor-Authentifizierung zu ermittlen:" , stateErrorInfoText = "Es gab ein Problem, den Status der Zwei-Faktor-Authentifizierung zu ermittlen:"
, errorGeneratingQR = "Fehler beim Generieren des QR-Code" , errorGeneratingQR = "Fehler beim Generieren des QR-Code"

View File

@ -11,6 +11,7 @@ module Messages.Comp.PeriodicQueryTaskForm exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.BookmarkDropdown import Messages.Comp.BookmarkDropdown
@ -49,10 +50,10 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, calEventInput = Messages.Comp.CalEventInput.gb , calEventInput = Messages.Comp.CalEventInput.gb tz
, channelForm = Messages.Comp.ChannelForm.gb , channelForm = Messages.Comp.ChannelForm.gb
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
, bookmarkDropdown = Messages.Comp.BookmarkDropdown.gb , bookmarkDropdown = Messages.Comp.BookmarkDropdown.gb
@ -83,10 +84,10 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, calEventInput = Messages.Comp.CalEventInput.de , calEventInput = Messages.Comp.CalEventInput.de tz
, channelForm = Messages.Comp.ChannelForm.de , channelForm = Messages.Comp.ChannelForm.de
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de
, bookmarkDropdown = Messages.Comp.BookmarkDropdown.de , bookmarkDropdown = Messages.Comp.BookmarkDropdown.de

View File

@ -11,6 +11,7 @@ module Messages.Comp.PeriodicQueryTaskManage exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.HttpError import Messages.Comp.HttpError
@ -38,10 +39,10 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, notificationForm = Messages.Comp.PeriodicQueryTaskForm.gb , notificationForm = Messages.Comp.PeriodicQueryTaskForm.gb tz
, notificationTable = Messages.Comp.PeriodicQueryTaskList.gb , notificationTable = Messages.Comp.PeriodicQueryTaskList.gb
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
, channelType = Messages.Data.ChannelType.gb , channelType = Messages.Data.ChannelType.gb
@ -58,10 +59,10 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, notificationForm = Messages.Comp.PeriodicQueryTaskForm.de , notificationForm = Messages.Comp.PeriodicQueryTaskForm.de tz
, notificationTable = Messages.Comp.PeriodicQueryTaskList.de , notificationTable = Messages.Comp.PeriodicQueryTaskList.de
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de
, channelType = Messages.Data.ChannelType.de , channelType = Messages.Data.ChannelType.de

View File

@ -11,6 +11,7 @@ module Messages.Comp.PublishItems exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.HttpError import Messages.Comp.HttpError
@ -43,17 +44,17 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
, shareForm = Messages.Comp.ShareForm.gb , shareForm = Messages.Comp.ShareForm.gb
, shareView = Messages.Comp.ShareView.gb , shareView = Messages.Comp.ShareView.gb tz
, shareMail = Messages.Comp.ShareMail.gb , shareMail = Messages.Comp.ShareMail.gb
, title = "Publish Items" , title = "Publish Items"
, infoText = "Publishing items creates a cryptic link, which can be used by everyone to see the selected documents. This link cannot be guessed, but is public! It exists for a certain amount of time and can be further protected using a password." , infoText = "Publishing items creates a cryptic link, which can be used by everyone to see the selected documents. This link cannot be guessed, but is public! It exists for a certain amount of time and can be further protected using a password."
, formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.English , formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.English tz
, formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.English , formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.English tz
, submitPublish = "Publish" , submitPublish = "Publish"
, submitPublishTitle = "Publish the documents now" , submitPublishTitle = "Publish the documents now"
, cancelPublish = "Cancel" , cancelPublish = "Cancel"
@ -66,17 +67,17 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de
, shareForm = Messages.Comp.ShareForm.de , shareForm = Messages.Comp.ShareForm.de
, shareView = Messages.Comp.ShareView.de , shareView = Messages.Comp.ShareView.de tz
, shareMail = Messages.Comp.ShareMail.de , shareMail = Messages.Comp.ShareMail.de
, title = "Dokumente publizieren" , title = "Dokumente publizieren"
, infoText = "Beim Publizieren der Dokumente wird ein kryptischer Link erzeugt, mit welchem jeder die dahinter publizierten Dokumente einsehen kann. Dieser Link kann nicht erraten werden, ist aber öffentlich. Er ist zeitlich begrenzt und kann zusätzlich mit einem Passwort geschützt werden." , infoText = "Beim Publizieren der Dokumente wird ein kryptischer Link erzeugt, mit welchem jeder die dahinter publizierten Dokumente einsehen kann. Dieser Link kann nicht erraten werden, ist aber öffentlich. Er ist zeitlich begrenzt und kann zusätzlich mit einem Passwort geschützt werden."
, formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.German , formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.German tz
, formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.German , formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.German tz
, submitPublish = "Publizieren" , submitPublish = "Publizieren"
, submitPublishTitle = "Dokumente jetzt publizieren" , submitPublishTitle = "Dokumente jetzt publizieren"
, cancelPublish = "Abbrechen" , cancelPublish = "Abbrechen"

View File

@ -11,6 +11,7 @@ module Messages.Comp.ScanMailboxForm exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.CalEventInput import Messages.Comp.CalEventInput
@ -80,10 +81,10 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, calEventInput = Messages.Comp.CalEventInput.gb , calEventInput = Messages.Comp.CalEventInput.gb tz
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
, tagDropdown = Messages.Comp.TagDropdown.gb , tagDropdown = Messages.Comp.TagDropdown.gb
, reallyDeleteTask = "Really delete this scan mailbox task?" , reallyDeleteTask = "Really delete this scan mailbox task?"
@ -165,10 +166,10 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, calEventInput = Messages.Comp.CalEventInput.de , calEventInput = Messages.Comp.CalEventInput.de tz
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de
, tagDropdown = Messages.Comp.TagDropdown.de , tagDropdown = Messages.Comp.TagDropdown.de
, reallyDeleteTask = "Den Auftrag wirklich löschen?" , reallyDeleteTask = "Den Auftrag wirklich löschen?"

View File

@ -11,6 +11,7 @@ module Messages.Comp.ScanMailboxManage exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.HttpError import Messages.Comp.HttpError
@ -32,10 +33,10 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tb =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, form = Messages.Comp.ScanMailboxForm.gb , form = Messages.Comp.ScanMailboxForm.gb tb
, table = Messages.Comp.ScanMailboxTable.gb , table = Messages.Comp.ScanMailboxTable.gb
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
, newTask = "New Task" , newTask = "New Task"
@ -47,10 +48,10 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, form = Messages.Comp.ScanMailboxForm.de , form = Messages.Comp.ScanMailboxForm.de tz
, table = Messages.Comp.ScanMailboxTable.de , table = Messages.Comp.ScanMailboxTable.de
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de
, newTask = "Neuer Auftrag" , newTask = "Neuer Auftrag"

View File

@ -11,6 +11,7 @@ module Messages.Comp.SentMails exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.DateFormat as DF import Messages.DateFormat as DF
import Messages.UiLanguage import Messages.UiLanguage
@ -26,25 +27,25 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ from = "From" { from = "From"
, date = "Date" , date = "Date"
, recipients = "Recipients" , recipients = "Recipients"
, subject = "Subject" , subject = "Subject"
, sent = "Sent" , sent = "Sent"
, sender = "Sender" , sender = "Sender"
, formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English tz
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ from = "Von" { from = "Von"
, date = "Datum" , date = "Datum"
, recipients = "Empfänger" , recipients = "Empfänger"
, subject = "Betreff" , subject = "Betreff"
, sent = "Gesendet" , sent = "Gesendet"
, sender = "Absender" , sender = "Absender"
, formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German tz
} }

View File

@ -11,6 +11,7 @@ module Messages.Comp.ShareManage exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.HttpError import Messages.Comp.HttpError
@ -44,13 +45,13 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
, shareTable = Messages.Comp.ShareTable.gb , shareTable = Messages.Comp.ShareTable.gb tz
, shareForm = Messages.Comp.ShareForm.gb , shareForm = Messages.Comp.ShareForm.gb
, shareView = Messages.Comp.ShareView.gb , shareView = Messages.Comp.ShareView.gb tz
, shareMail = Messages.Comp.ShareMail.gb , shareMail = Messages.Comp.ShareMail.gb
, newShare = "New share" , newShare = "New share"
, copyToClipboard = "Copy to clipboard" , copyToClipboard = "Copy to clipboard"
@ -69,12 +70,12 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, shareTable = Messages.Comp.ShareTable.de , shareTable = Messages.Comp.ShareTable.de tz
, shareForm = Messages.Comp.ShareForm.de , shareForm = Messages.Comp.ShareForm.de
, shareView = Messages.Comp.ShareView.de , shareView = Messages.Comp.ShareView.de tz
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de
, shareMail = Messages.Comp.ShareMail.de , shareMail = Messages.Comp.ShareMail.de
, newShare = "Neue Freigabe" , newShare = "Neue Freigabe"

View File

@ -11,6 +11,7 @@ module Messages.Comp.ShareTable exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.Basics import Messages.Basics
import Messages.DateFormat as DF import Messages.DateFormat as DF
import Messages.UiLanguage import Messages.UiLanguage
@ -25,20 +26,20 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English tz
, active = "Active" , active = "Active"
, publishUntil = "Publish Until" , publishUntil = "Publish Until"
, user = "User" , user = "User"
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German tz
, active = "Aktiv" , active = "Aktiv"
, publishUntil = "Publiziert bis" , publishUntil = "Publiziert bis"
, user = "Benutzer" , user = "Benutzer"

View File

@ -11,6 +11,7 @@ module Messages.Comp.ShareView exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.Basics import Messages.Basics
import Messages.DateFormat as DF import Messages.DateFormat as DF
import Messages.UiLanguage import Messages.UiLanguage
@ -32,10 +33,10 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, date = DF.formatDateLong Messages.UiLanguage.English , date = DF.formatDateLong Messages.UiLanguage.English tz
, qrCodeError = "Error generating QR Code." , qrCodeError = "Error generating QR Code."
, expiredInfo = "This share has expired." , expiredInfo = "This share has expired."
, disabledInfo = "This share is disabled." , disabledInfo = "This share is disabled."
@ -49,10 +50,10 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, date = DF.formatDateLong Messages.UiLanguage.German , date = DF.formatDateLong Messages.UiLanguage.German tz
, qrCodeError = "Fehler beim Erzeugen des QR-Codes." , qrCodeError = "Fehler beim Erzeugen des QR-Codes."
, expiredInfo = "Diese Freigabe ist abgelaufen." , expiredInfo = "Diese Freigabe ist abgelaufen."
, disabledInfo = "Diese Freigae ist nicht aktiv." , disabledInfo = "Diese Freigae ist nicht aktiv."

View File

@ -11,6 +11,7 @@ module Messages.Comp.UserManage exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.HttpError import Messages.Comp.HttpError
@ -38,9 +39,9 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ userTable = Messages.Comp.UserTable.gb { userTable = Messages.Comp.UserTable.gb tz
, userForm = Messages.Comp.UserForm.gb , userForm = Messages.Comp.UserForm.gb
, basics = Messages.Basics.gb , basics = Messages.Basics.gb
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
@ -59,9 +60,9 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ userTable = Messages.Comp.UserTable.de { userTable = Messages.Comp.UserTable.de tz
, userForm = Messages.Comp.UserForm.de , userForm = Messages.Comp.UserForm.de
, basics = Messages.Basics.de , basics = Messages.Basics.de
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de

View File

@ -11,6 +11,7 @@ module Messages.Comp.UserTable exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.Basics import Messages.Basics
import Messages.DateFormat as DF import Messages.DateFormat as DF
import Messages.UiLanguage import Messages.UiLanguage
@ -28,8 +29,8 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, login = "Login" , login = "Login"
, state = "State" , state = "State"
@ -37,12 +38,12 @@ gb =
, email = "E-Mail" , email = "E-Mail"
, logins = "Logins" , logins = "Logins"
, lastLogin = "Last Login" , lastLogin = "Last Login"
, formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English tz
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, login = "Benutzername" , login = "Benutzername"
, state = "Status" , state = "Status"
@ -50,5 +51,5 @@ de =
, email = "E-Mail" , email = "E-Mail"
, logins = "Anmeldungen" , logins = "Anmeldungen"
, lastLogin = "Letzte Anmeldung" , lastLogin = "Letzte Anmeldung"
, formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German tz
} }

View File

@ -11,8 +11,10 @@ module Messages.DateFormat exposing
, formatDateShort , formatDateShort
, formatDateTimeLong , formatDateTimeLong
, formatDateTimeShort , formatDateTimeShort
, formatIsoDateTimeUtc
) )
import Data.TimeZone exposing (TimeZone)
import DateFormat exposing (Token) import DateFormat exposing (Token)
import DateFormat.Language as DL import DateFormat.Language as DL
import Messages.UiLanguage exposing (UiLanguage(..)) import Messages.UiLanguage exposing (UiLanguage(..))
@ -20,6 +22,7 @@ import Time
exposing exposing
( Month(..) ( Month(..)
, Weekday(..) , Weekday(..)
, Zone
) )
@ -42,8 +45,8 @@ get lang =
de de
format : UiLanguage -> (DateTimeMsg -> List Token) -> Int -> String format : UiLanguage -> TimeZone -> (DateTimeMsg -> List Token) -> Int -> String
format lang pattern millis = format lang zone pattern millis =
let let
msg = msg =
get lang get lang
@ -51,27 +54,50 @@ format lang pattern millis =
fmt = fmt =
DateFormat.formatWithLanguage msg.lang (pattern msg) DateFormat.formatWithLanguage msg.lang (pattern msg)
in in
fmt Time.utc (Time.millisToPosix millis) fmt (Data.TimeZone.toZone zone) (Time.millisToPosix millis)
formatDateTimeLong : UiLanguage -> Int -> String formatDateTimeLong : UiLanguage -> TimeZone -> Int -> String
formatDateTimeLong lang millis = formatDateTimeLong lang zone millis =
format lang .dateTimeLong millis format lang zone .dateTimeLong millis
formatDateLong : UiLanguage -> Int -> String formatDateLong : UiLanguage -> TimeZone -> Int -> String
formatDateLong lang millis = formatDateLong lang zone millis =
format lang .dateLong millis format lang zone .dateLong millis
formatDateShort : UiLanguage -> Int -> String formatDateShort : UiLanguage -> TimeZone -> Int -> String
formatDateShort lang millis = formatDateShort lang zone millis =
format lang .dateShort millis format lang zone .dateShort millis
formatDateTimeShort : UiLanguage -> Int -> String formatDateTimeShort : UiLanguage -> TimeZone -> Int -> String
formatDateTimeShort lang millis = formatDateTimeShort lang zone millis =
format lang .dateTimeShort millis format lang zone .dateTimeShort millis
isoDateTimeFormatter : List Token
isoDateTimeFormatter =
[ DateFormat.yearNumber
, DateFormat.text "-"
, DateFormat.monthFixed
, DateFormat.text "-"
, DateFormat.dayOfMonthFixed
, DateFormat.text "T"
, DateFormat.hourMilitaryNumber
, DateFormat.text ":"
, DateFormat.minuteFixed
, DateFormat.text ":"
, DateFormat.secondFixed
, DateFormat.text "Z"
]
formatIsoDateTimeUtc : Int -> String
formatIsoDateTimeUtc millis =
Time.millisToPosix millis
|> DateFormat.format isoDateTimeFormatter Time.utc

View File

@ -11,6 +11,7 @@ module Messages.Page.CollectiveSettings exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.CollectiveSettingsForm import Messages.Comp.CollectiveSettingsForm
@ -39,13 +40,13 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, userManage = Messages.Comp.UserManage.gb , userManage = Messages.Comp.UserManage.gb tz
, collectiveSettingsForm = Messages.Comp.CollectiveSettingsForm.gb , collectiveSettingsForm = Messages.Comp.CollectiveSettingsForm.gb tz
, sourceManage = Messages.Comp.SourceManage.gb , sourceManage = Messages.Comp.SourceManage.gb
, shareManage = Messages.Comp.ShareManage.gb , shareManage = Messages.Comp.ShareManage.gb tz
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
, collectiveSettings = "Collective Settings" , collectiveSettings = "Collective Settings"
, insights = "Insights" , insights = "Insights"
@ -59,13 +60,13 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, userManage = Messages.Comp.UserManage.de , userManage = Messages.Comp.UserManage.de tz
, collectiveSettingsForm = Messages.Comp.CollectiveSettingsForm.de , collectiveSettingsForm = Messages.Comp.CollectiveSettingsForm.de tz
, sourceManage = Messages.Comp.SourceManage.de , sourceManage = Messages.Comp.SourceManage.de
, shareManage = Messages.Comp.ShareManage.de , shareManage = Messages.Comp.ShareManage.de tz
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de
, collectiveSettings = "Kollektiveinstellungen" , collectiveSettings = "Kollektiveinstellungen"
, insights = "Statistiken" , insights = "Statistiken"

View File

@ -7,6 +7,7 @@
module Messages.Page.Dashboard exposing (Texts, de, gb) module Messages.Page.Dashboard exposing (Texts, de, gb)
import Data.TimeZone exposing (TimeZone)
import Messages.Basics import Messages.Basics
import Messages.Comp.BookmarkChooser import Messages.Comp.BookmarkChooser
import Messages.Comp.DashboardManage import Messages.Comp.DashboardManage
@ -55,21 +56,21 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, bookmarkChooser = Messages.Comp.BookmarkChooser.gb , bookmarkChooser = Messages.Comp.BookmarkChooser.gb
, notificationHookManage = Messages.Comp.NotificationHookManage.gb , notificationHookManage = Messages.Comp.NotificationHookManage.gb
, periodicQueryManage = Messages.Comp.PeriodicQueryTaskManage.gb , periodicQueryManage = Messages.Comp.PeriodicQueryTaskManage.gb tz
, sourceManage = Messages.Comp.SourceManage.gb , sourceManage = Messages.Comp.SourceManage.gb
, shareManage = Messages.Comp.ShareManage.gb , shareManage = Messages.Comp.ShareManage.gb tz
, organizationManage = Messages.Comp.OrgManage.gb , organizationManage = Messages.Comp.OrgManage.gb
, personManage = Messages.Comp.PersonManage.gb , personManage = Messages.Comp.PersonManage.gb
, equipManage = Messages.Comp.EquipmentManage.gb , equipManage = Messages.Comp.EquipmentManage.gb
, tagManage = Messages.Comp.TagManage.gb , tagManage = Messages.Comp.TagManage.gb
, folderManage = Messages.Comp.FolderManage.gb , folderManage = Messages.Comp.FolderManage.gb tz
, uploadForm = Messages.Comp.UploadForm.gb , uploadForm = Messages.Comp.UploadForm.gb
, dashboard = Messages.Comp.DashboardView.gb , dashboard = Messages.Comp.DashboardView.gb tz
, dashboardManage = Messages.Comp.DashboardManage.gb , dashboardManage = Messages.Comp.DashboardManage.gb
, defaultDashboard = Messages.Page.DefaultDashboard.gb , defaultDashboard = Messages.Page.DefaultDashboard.gb
, accountScope = Messages.Data.AccountScope.gb , accountScope = Messages.Data.AccountScope.gb
@ -86,21 +87,21 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, bookmarkChooser = Messages.Comp.BookmarkChooser.de , bookmarkChooser = Messages.Comp.BookmarkChooser.de
, notificationHookManage = Messages.Comp.NotificationHookManage.de , notificationHookManage = Messages.Comp.NotificationHookManage.de
, periodicQueryManage = Messages.Comp.PeriodicQueryTaskManage.de , periodicQueryManage = Messages.Comp.PeriodicQueryTaskManage.de tz
, sourceManage = Messages.Comp.SourceManage.de , sourceManage = Messages.Comp.SourceManage.de
, shareManage = Messages.Comp.ShareManage.de , shareManage = Messages.Comp.ShareManage.de tz
, organizationManage = Messages.Comp.OrgManage.de , organizationManage = Messages.Comp.OrgManage.de
, personManage = Messages.Comp.PersonManage.de , personManage = Messages.Comp.PersonManage.de
, equipManage = Messages.Comp.EquipmentManage.de , equipManage = Messages.Comp.EquipmentManage.de
, tagManage = Messages.Comp.TagManage.de , tagManage = Messages.Comp.TagManage.de
, folderManage = Messages.Comp.FolderManage.de , folderManage = Messages.Comp.FolderManage.de tz
, uploadForm = Messages.Comp.UploadForm.de , uploadForm = Messages.Comp.UploadForm.de
, dashboard = Messages.Comp.DashboardView.de , dashboard = Messages.Comp.DashboardView.de tz
, dashboardManage = Messages.Comp.DashboardManage.de , dashboardManage = Messages.Comp.DashboardManage.de
, defaultDashboard = Messages.Page.DefaultDashboard.de , defaultDashboard = Messages.Page.DefaultDashboard.de
, accountScope = Messages.Data.AccountScope.de , accountScope = Messages.Data.AccountScope.de

View File

@ -11,6 +11,7 @@ module Messages.Page.ItemDetail exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.Comp.ItemDetail import Messages.Comp.ItemDetail
import Messages.Comp.ItemDetail.EditForm import Messages.Comp.ItemDetail.EditForm
@ -23,19 +24,19 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ itemDetail = Messages.Comp.ItemDetail.gb { itemDetail = Messages.Comp.ItemDetail.gb tz
, editForm = Messages.Comp.ItemDetail.EditForm.gb , editForm = Messages.Comp.ItemDetail.EditForm.gb tz
, editMetadata = "Edit Metadata" , editMetadata = "Edit Metadata"
, collapseExpand = "Collapse/Expand" , collapseExpand = "Collapse/Expand"
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ itemDetail = Messages.Comp.ItemDetail.de { itemDetail = Messages.Comp.ItemDetail.de tz
, editForm = Messages.Comp.ItemDetail.EditForm.de , editForm = Messages.Comp.ItemDetail.EditForm.de tz
, editMetadata = "Metadaten ändern" , editMetadata = "Metadaten ändern"
, collapseExpand = "Aus-/Einklappen" , collapseExpand = "Aus-/Einklappen"
} }

View File

@ -11,6 +11,7 @@ module Messages.Page.ManageData exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.Basics import Messages.Basics
import Messages.Comp.BookmarkManage import Messages.Comp.BookmarkManage
import Messages.Comp.CustomFieldManage import Messages.Comp.CustomFieldManage
@ -35,30 +36,30 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, tagManage = Messages.Comp.TagManage.gb , tagManage = Messages.Comp.TagManage.gb
, equipmentManage = Messages.Comp.EquipmentManage.gb , equipmentManage = Messages.Comp.EquipmentManage.gb
, orgManage = Messages.Comp.OrgManage.gb , orgManage = Messages.Comp.OrgManage.gb
, personManage = Messages.Comp.PersonManage.gb , personManage = Messages.Comp.PersonManage.gb
, folderManage = Messages.Comp.FolderManage.gb , folderManage = Messages.Comp.FolderManage.gb tz
, customFieldManage = Messages.Comp.CustomFieldManage.gb , customFieldManage = Messages.Comp.CustomFieldManage.gb tz
, bookmarkManage = Messages.Comp.BookmarkManage.gb , bookmarkManage = Messages.Comp.BookmarkManage.gb
, manageData = "Manage Data" , manageData = "Manage Data"
, bookmarks = "Bookmarks" , bookmarks = "Bookmarks"
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, tagManage = Messages.Comp.TagManage.de , tagManage = Messages.Comp.TagManage.de
, equipmentManage = Messages.Comp.EquipmentManage.de , equipmentManage = Messages.Comp.EquipmentManage.de
, orgManage = Messages.Comp.OrgManage.de , orgManage = Messages.Comp.OrgManage.de
, personManage = Messages.Comp.PersonManage.de , personManage = Messages.Comp.PersonManage.de
, folderManage = Messages.Comp.FolderManage.de , folderManage = Messages.Comp.FolderManage.de tz
, customFieldManage = Messages.Comp.CustomFieldManage.de , customFieldManage = Messages.Comp.CustomFieldManage.de tz
, bookmarkManage = Messages.Comp.BookmarkManage.de , bookmarkManage = Messages.Comp.BookmarkManage.de
, manageData = "Daten verwalten" , manageData = "Daten verwalten"
, bookmarks = "Bookmarks" , bookmarks = "Bookmarks"

View File

@ -11,6 +11,7 @@ module Messages.Page.Queue exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.HttpError import Messages.Comp.HttpError
@ -44,8 +45,8 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
, currentlyRunning = "Currently Running" , currentlyRunning = "Currently Running"
@ -66,13 +67,13 @@ gb =
, retries = "Retries" , retries = "Retries"
, changePriority = "Change priority of this job" , changePriority = "Change priority of this job"
, prio = "Prio" , prio = "Prio"
, formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English tz
, sidebarTitle = "Processing" , sidebarTitle = "Processing"
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de
, currentlyRunning = "Wird ausgeführt" , currentlyRunning = "Wird ausgeführt"
@ -93,6 +94,6 @@ de =
, retries = "Versuche" , retries = "Versuche"
, changePriority = "Priorität des Jobs ändern" , changePriority = "Priorität des Jobs ändern"
, prio = "Prio" , prio = "Prio"
, formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German tz
, sidebarTitle = "Verarbeitung" , sidebarTitle = "Verarbeitung"
} }

View File

@ -11,6 +11,7 @@ module Messages.Page.Search exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.Basics import Messages.Basics
import Messages.Comp.BookmarkQueryManage import Messages.Comp.BookmarkQueryManage
import Messages.Comp.ItemCardList import Messages.Comp.ItemCardList
@ -61,14 +62,14 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, itemCardList = Messages.Comp.ItemCardList.gb , itemCardList = Messages.Comp.ItemCardList.gb tz
, searchStatsView = Messages.Comp.SearchStatsView.gb , searchStatsView = Messages.Comp.SearchStatsView.gb
, sideMenu = Messages.Page.SearchSideMenu.gb , sideMenu = Messages.Page.SearchSideMenu.gb
, itemMerge = Messages.Comp.ItemMerge.gb , itemMerge = Messages.Comp.ItemMerge.gb tz
, publishItems = Messages.Comp.PublishItems.gb , publishItems = Messages.Comp.PublishItems.gb tz
, bookmarkManage = Messages.Comp.BookmarkQueryManage.gb , bookmarkManage = Messages.Comp.BookmarkQueryManage.gb
, contentSearch = "Content search" , contentSearch = "Content search"
, searchInNames = "Search in names" , searchInNames = "Search in names"
@ -103,14 +104,14 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, itemCardList = Messages.Comp.ItemCardList.de , itemCardList = Messages.Comp.ItemCardList.de tz
, searchStatsView = Messages.Comp.SearchStatsView.de , searchStatsView = Messages.Comp.SearchStatsView.de
, sideMenu = Messages.Page.SearchSideMenu.de , sideMenu = Messages.Page.SearchSideMenu.de
, itemMerge = Messages.Comp.ItemMerge.de , itemMerge = Messages.Comp.ItemMerge.de tz
, publishItems = Messages.Comp.PublishItems.de , publishItems = Messages.Comp.PublishItems.de tz
, bookmarkManage = Messages.Comp.BookmarkQueryManage.de , bookmarkManage = Messages.Comp.BookmarkQueryManage.de
, contentSearch = "Volltextsuche" , contentSearch = "Volltextsuche"
, searchInNames = "Suche in Namen" , searchInNames = "Suche in Namen"

View File

@ -7,6 +7,7 @@
module Messages.Page.Share exposing (..) module Messages.Page.Share exposing (..)
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.HttpError import Messages.Comp.HttpError
@ -32,11 +33,11 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ searchMenu = Messages.Comp.SearchMenu.gb { searchMenu = Messages.Comp.SearchMenu.gb
, basics = Messages.Basics.gb , basics = Messages.Basics.gb
, itemCardList = Messages.Comp.ItemCardList.gb , itemCardList = Messages.Comp.ItemCardList.gb tz
, passwordForm = Messages.Comp.SharePasswordForm.gb , passwordForm = Messages.Comp.SharePasswordForm.gb
, authFailed = "This share does not exist." , authFailed = "This share does not exist."
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
@ -50,11 +51,11 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ searchMenu = Messages.Comp.SearchMenu.de { searchMenu = Messages.Comp.SearchMenu.de
, basics = Messages.Basics.de , basics = Messages.Basics.de
, itemCardList = Messages.Comp.ItemCardList.de , itemCardList = Messages.Comp.ItemCardList.de tz
, passwordForm = Messages.Comp.SharePasswordForm.de , passwordForm = Messages.Comp.SharePasswordForm.de
, authFailed = "Diese Freigabe existiert nicht." , authFailed = "Diese Freigabe existiert nicht."
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de

View File

@ -8,6 +8,7 @@
module Messages.Page.ShareDetail exposing (..) module Messages.Page.ShareDetail exposing (..)
import Data.Fields exposing (Field) import Data.Fields exposing (Field)
import Data.TimeZone exposing (TimeZone)
import Http import Http
import Messages.Basics import Messages.Basics
import Messages.Comp.HttpError import Messages.Comp.HttpError
@ -31,13 +32,13 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ passwordForm = Messages.Comp.SharePasswordForm.gb { passwordForm = Messages.Comp.SharePasswordForm.gb
, basics = Messages.Basics.gb , basics = Messages.Basics.gb
, field = Messages.Data.Fields.gb , field = Messages.Data.Fields.gb
, formatDateLong = Messages.DateFormat.formatDateLong English , formatDateLong = Messages.DateFormat.formatDateLong English tz
, formatDateShort = Messages.DateFormat.formatDateShort English , formatDateShort = Messages.DateFormat.formatDateShort English tz
, authFailed = "This share does not exist." , authFailed = "This share does not exist."
, httpError = Messages.Comp.HttpError.gb , httpError = Messages.Comp.HttpError.gb
, tagsAndFields = "Tags & Fields" , tagsAndFields = "Tags & Fields"
@ -46,13 +47,13 @@ gb =
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ passwordForm = Messages.Comp.SharePasswordForm.de { passwordForm = Messages.Comp.SharePasswordForm.de
, basics = Messages.Basics.de , basics = Messages.Basics.de
, field = Messages.Data.Fields.de , field = Messages.Data.Fields.de
, formatDateLong = Messages.DateFormat.formatDateLong German , formatDateLong = Messages.DateFormat.formatDateLong German tz
, formatDateShort = Messages.DateFormat.formatDateShort German , formatDateShort = Messages.DateFormat.formatDateShort German tz
, authFailed = "Diese Freigabe existiert nicht." , authFailed = "Diese Freigabe existiert nicht."
, httpError = Messages.Comp.HttpError.de , httpError = Messages.Comp.HttpError.de
, tagsAndFields = "Tags & Felder" , tagsAndFields = "Tags & Felder"

View File

@ -11,6 +11,7 @@ module Messages.Page.UserSettings exposing
, gb , gb
) )
import Data.TimeZone exposing (TimeZone)
import Messages.Basics import Messages.Basics
import Messages.Comp.ChangePasswordForm import Messages.Comp.ChangePasswordForm
import Messages.Comp.DueItemsTaskManage import Messages.Comp.DueItemsTaskManage
@ -58,19 +59,19 @@ type alias Texts =
} }
gb : Texts gb : TimeZone -> Texts
gb = gb tz =
{ basics = Messages.Basics.gb { basics = Messages.Basics.gb
, changePasswordForm = Messages.Comp.ChangePasswordForm.gb , changePasswordForm = Messages.Comp.ChangePasswordForm.gb
, uiSettingsManage = Messages.Comp.UiSettingsManage.gb , uiSettingsManage = Messages.Comp.UiSettingsManage.gb
, emailSettingsManage = Messages.Comp.EmailSettingsManage.gb , emailSettingsManage = Messages.Comp.EmailSettingsManage.gb
, imapSettingsManage = Messages.Comp.ImapSettingsManage.gb , imapSettingsManage = Messages.Comp.ImapSettingsManage.gb
, notificationManage = Messages.Comp.DueItemsTaskManage.gb , notificationManage = Messages.Comp.DueItemsTaskManage.gb tz
, scanMailboxManage = Messages.Comp.ScanMailboxManage.gb , scanMailboxManage = Messages.Comp.ScanMailboxManage.gb tz
, notificationHookManage = Messages.Comp.NotificationHookManage.gb , notificationHookManage = Messages.Comp.NotificationHookManage.gb
, periodicQueryTask = Messages.Comp.PeriodicQueryTaskManage.gb , periodicQueryTask = Messages.Comp.PeriodicQueryTaskManage.gb tz
, channelManage = Messages.Comp.NotificationChannelManage.gb , channelManage = Messages.Comp.NotificationChannelManage.gb
, otpSetup = Messages.Comp.OtpSetup.gb , otpSetup = Messages.Comp.OtpSetup.gb tz
, userSettings = "User Settings" , userSettings = "User Settings"
, uiSettings = "UI Settings" , uiSettings = "UI Settings"
, notifications = "Notifications" , notifications = "Notifications"
@ -121,19 +122,19 @@ must be created before.
} }
de : Texts de : TimeZone -> Texts
de = de tz =
{ basics = Messages.Basics.de { basics = Messages.Basics.de
, changePasswordForm = Messages.Comp.ChangePasswordForm.de , changePasswordForm = Messages.Comp.ChangePasswordForm.de
, uiSettingsManage = Messages.Comp.UiSettingsManage.de , uiSettingsManage = Messages.Comp.UiSettingsManage.de
, emailSettingsManage = Messages.Comp.EmailSettingsManage.de , emailSettingsManage = Messages.Comp.EmailSettingsManage.de
, imapSettingsManage = Messages.Comp.ImapSettingsManage.de , imapSettingsManage = Messages.Comp.ImapSettingsManage.de
, notificationManage = Messages.Comp.DueItemsTaskManage.de , notificationManage = Messages.Comp.DueItemsTaskManage.de tz
, scanMailboxManage = Messages.Comp.ScanMailboxManage.de , scanMailboxManage = Messages.Comp.ScanMailboxManage.de tz
, notificationHookManage = Messages.Comp.NotificationHookManage.de , notificationHookManage = Messages.Comp.NotificationHookManage.de
, periodicQueryTask = Messages.Comp.PeriodicQueryTaskManage.de , periodicQueryTask = Messages.Comp.PeriodicQueryTaskManage.de tz
, channelManage = Messages.Comp.NotificationChannelManage.de , channelManage = Messages.Comp.NotificationChannelManage.de
, otpSetup = Messages.Comp.OtpSetup.de , otpSetup = Messages.Comp.OtpSetup.de tz
, userSettings = "Benutzereinstellung" , userSettings = "Benutzereinstellung"
, uiSettings = "Oberfläche" , uiSettings = "Oberfläche"
, notifications = "Benachrichtigungen" , notifications = "Benachrichtigungen"

View File

@ -12,13 +12,14 @@ import Comp.CollectiveSettingsForm
import Comp.ShareManage import Comp.ShareManage
import Comp.SourceManage import Comp.SourceManage
import Comp.UserManage import Comp.UserManage
import Data.Flags exposing (Flags) import Data.Environment as Env
import Data.Flags
import Messages.Page.CollectiveSettings exposing (Texts) import Messages.Page.CollectiveSettings exposing (Texts)
import Page.CollectiveSettings.Data exposing (..) import Page.CollectiveSettings.Data exposing (..)
update : Texts -> Flags -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) update : Texts -> Env.Update -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
update texts flags msg model = update texts env msg model =
case msg of case msg of
SetTab t -> SetTab t ->
let let
@ -27,45 +28,45 @@ update texts flags msg model =
in in
case t of case t of
SourceTab -> SourceTab ->
update texts flags (SourceMsg Comp.SourceManage.LoadSources) m update texts env (SourceMsg Comp.SourceManage.LoadSources) m
UserTab -> UserTab ->
update texts flags (UserMsg Comp.UserManage.LoadUsers) m update texts env (UserMsg Comp.UserManage.LoadUsers) m
InsightsTab -> InsightsTab ->
update texts flags Init m update texts env Init m
SettingsTab -> SettingsTab ->
update texts flags Init m update texts env Init m
ShareTab -> ShareTab ->
update texts flags (ShareMsg Comp.ShareManage.loadShares) m update texts env (ShareMsg Comp.ShareManage.loadShares) m
SourceMsg m -> SourceMsg m ->
let let
( m2, c2 ) = ( m2, c2 ) =
Comp.SourceManage.update flags m model.sourceModel Comp.SourceManage.update env.flags m model.sourceModel
in in
( { model | sourceModel = m2 }, Cmd.map SourceMsg c2, Sub.none ) ( { model | sourceModel = m2 }, Cmd.map SourceMsg c2, Sub.none )
ShareMsg lm -> ShareMsg lm ->
let let
( sm, sc, ss ) = ( sm, sc, ss ) =
Comp.ShareManage.update texts.shareManage flags lm model.shareModel Comp.ShareManage.update texts.shareManage env.flags lm model.shareModel
in in
( { model | shareModel = sm }, Cmd.map ShareMsg sc, Sub.map ShareMsg ss ) ( { model | shareModel = sm }, Cmd.map ShareMsg sc, Sub.map ShareMsg ss )
UserMsg m -> UserMsg m ->
let let
( m2, c2 ) = ( m2, c2 ) =
Comp.UserManage.update flags m model.userModel Comp.UserManage.update env.flags m model.userModel
in in
( { model | userModel = m2 }, Cmd.map UserMsg c2, Sub.none ) ( { model | userModel = m2 }, Cmd.map UserMsg c2, Sub.none )
SettingsFormMsg m -> SettingsFormMsg m ->
let let
( m2, c2, msett ) = ( m2, c2, msett ) =
Comp.CollectiveSettingsForm.update flags m model.settingsModel Comp.CollectiveSettingsForm.update env.flags env.settings.timeZone m model.settingsModel
cmd = cmd =
case msett of case msett of
@ -73,7 +74,7 @@ update texts flags msg model =
Cmd.none Cmd.none
Just sett -> Just sett ->
Api.setCollectiveSettings flags sett SubmitResp Api.setCollectiveSettings env.flags sett SubmitResp
in in
( { model | settingsModel = m2, formState = InitialState } ( { model | settingsModel = m2, formState = InitialState }
, Cmd.batch [ cmd, Cmd.map SettingsFormMsg c2 ] , Cmd.batch [ cmd, Cmd.map SettingsFormMsg c2 ]
@ -83,8 +84,8 @@ update texts flags msg model =
Init -> Init ->
( { model | formState = InitialState } ( { model | formState = InitialState }
, Cmd.batch , Cmd.batch
[ Api.getInsights flags GetInsightsResp [ Api.getInsights env.flags GetInsightsResp
, Api.getCollectiveSettings flags CollectiveSettingsResp , Api.getCollectiveSettings env.flags CollectiveSettingsResp
] ]
, Sub.none , Sub.none
) )
@ -98,7 +99,7 @@ update texts flags msg model =
CollectiveSettingsResp (Ok data) -> CollectiveSettingsResp (Ok data) ->
let let
( cm, cc ) = ( cm, cc ) =
Comp.CollectiveSettingsForm.init flags data Comp.CollectiveSettingsForm.init env.flags data
in in
( { model | settingsModel = cm } ( { model | settingsModel = cm }
, Cmd.map SettingsFormMsg cc , Cmd.map SettingsFormMsg cc

View File

@ -41,7 +41,7 @@ getDefaultDashboard flags settings =
Data.UiSettings.getUiLanguage flags settings Messages.UiLanguage.English Data.UiSettings.getUiLanguage flags settings Messages.UiLanguage.English
texts = texts =
Messages.get lang Messages.get lang settings.timeZone
in in
value texts.dashboard.defaultDashboard value texts.dashboard.defaultDashboard

View File

@ -270,7 +270,7 @@ update texts settings navKey flags msg model =
PeriodicQuery pqm -> PeriodicQuery pqm ->
let let
( pqm_, pqc, pqs ) = ( pqm_, pqc, pqs ) =
Comp.PeriodicQueryTaskManage.update flags lm pqm Comp.PeriodicQueryTaskManage.update flags settings.timeZone lm pqm
in in
( { model | content = PeriodicQuery pqm_ } ( { model | content = PeriodicQuery pqm_ }
, Cmd.map PeriodicQueryMsg pqc , Cmd.map PeriodicQueryMsg pqc

View File

@ -20,7 +20,6 @@ import Html.Events exposing (onClick)
import Messages.Page.Queue exposing (Texts) import Messages.Page.Queue exposing (Texts)
import Page.Queue.Data exposing (..) import Page.Queue.Data exposing (..)
import Styles as S import Styles as S
import Util.Time exposing (formatIsoDateTime)
viewSidebar : Texts -> Bool -> Flags -> UiSettings -> Model -> Html Msg viewSidebar : Texts -> Bool -> Flags -> UiSettings -> Model -> Html Msg
@ -91,7 +90,7 @@ viewSidebar texts visible _ _ model =
viewContent : Texts -> Flags -> UiSettings -> Model -> Html Msg viewContent : Texts -> Flags -> UiSettings -> Model -> Html Msg
viewContent texts _ _ model = viewContent texts _ settings model =
let let
gridStyle = gridStyle =
"grid gap-4 grid-cols-1 md:grid-cols-2" "grid gap-4 grid-cols-1 md:grid-cols-2"
@ -109,7 +108,7 @@ viewContent texts _ _ model =
] ]
[ case model.showLog of [ case model.showLog of
Just job -> Just job ->
renderJobLog job renderJobLog texts settings job
Nothing -> Nothing ->
span [ class "hidden" ] [] span [ class "hidden" ] []
@ -120,7 +119,7 @@ viewContent texts _ _ model =
else else
div [ class "flex flex-col space-y-2" ] div [ class "flex flex-col space-y-2" ]
(List.map (renderProgressCard texts model) model.state.progress) (List.map (renderProgressCard texts settings model) model.state.progress)
QueueAll -> QueueAll ->
if List.isEmpty model.state.completed && List.isEmpty model.state.completed then if List.isEmpty model.state.completed && List.isEmpty model.state.completed then
@ -187,8 +186,8 @@ filterJobDetails list state =
List.filter isState list List.filter isState list
renderJobLog : JobDetail -> Html Msg renderJobLog : Texts -> UiSettings -> JobDetail -> Html Msg
renderJobLog job = renderJobLog texts settings job =
div div
[ class " absolute top-12 left-0 w-full h-full-12 z-40 flex flex-col items-center px-4 py-2 " [ class " absolute top-12 left-0 w-full h-full-12 z-40 flex flex-col items-center px-4 py-2 "
, class "bg-white bg-opacity-80 dark:bg-black dark:bg-slate-900 dark:bg-opacity-90" , class "bg-white bg-opacity-80 dark:bg-black dark:bg-slate-900 dark:bg-opacity-90"
@ -209,13 +208,13 @@ renderJobLog job =
] ]
] ]
, div [ class styleJobLog ] , div [ class styleJobLog ]
(List.map renderLogLine job.logs) (List.map (renderLogLine texts settings) job.logs)
] ]
] ]
renderProgressCard : Texts -> Model -> JobDetail -> Html Msg renderProgressCard : Texts -> UiSettings -> Model -> JobDetail -> Html Msg
renderProgressCard texts model job = renderProgressCard texts settings model job =
div [ class (S.box ++ "px-2 flex flex-col") ] div [ class (S.box ++ "px-2 flex flex-col") ]
[ Comp.Progress.topAttachedIndicating job.progress [ Comp.Progress.topAttachedIndicating job.progress
, Html.map (DimmerMsg job) , Html.map (DimmerMsg job)
@ -248,7 +247,7 @@ renderProgressCard texts model job =
] ]
, div [ class "py-2", id "joblog" ] , div [ class "py-2", id "joblog" ]
[ div [ class styleJobLog ] [ div [ class styleJobLog ]
(List.map renderLogLine job.logs) (List.map (renderLogLine texts settings) job.logs)
] ]
, div [ class "py-2 flex flex-row justify-end" ] , div [ class "py-2 flex flex-row justify-end" ]
[ button [ class S.secondaryButton, onClick (RequestCancelJob job) ] [ button [ class S.secondaryButton, onClick (RequestCancelJob job) ]
@ -263,8 +262,8 @@ styleJobLog =
"bg-gray-900 text-xs leading-5 px-2 py-1 font-mono text-gray-100 overflow-auto max-h-96 rounded" "bg-gray-900 text-xs leading-5 px-2 py-1 font-mono text-gray-100 overflow-auto max-h-96 rounded"
renderLogLine : JobLogEvent -> Html Msg renderLogLine : Texts -> UiSettings -> JobLogEvent -> Html Msg
renderLogLine log = renderLogLine texts settings log =
let let
lineStyle = lineStyle =
case String.toLower log.level of case String.toLower log.level of
@ -284,7 +283,7 @@ renderLogLine log =
"" ""
in in
span [ class lineStyle ] span [ class lineStyle ]
[ formatIsoDateTime log.time |> text [ texts.formatDateTime log.time |> text
, text ": " , text ": "
, text log.message , text log.message
, br [] [] , br [] []

View File

@ -161,7 +161,7 @@ update flags settings msg model =
NotificationMsg lm -> NotificationMsg lm ->
let let
( m2, c2 ) = ( m2, c2 ) =
Comp.DueItemsTaskManage.update flags lm model.notificationModel Comp.DueItemsTaskManage.update flags settings.timeZone lm model.notificationModel
in in
{ model = { model | notificationModel = m2 } { model = { model | notificationModel = m2 }
, cmd = Cmd.map NotificationMsg c2 , cmd = Cmd.map NotificationMsg c2
@ -172,7 +172,7 @@ update flags settings msg model =
ScanMailboxMsg lm -> ScanMailboxMsg lm ->
let let
( m2, c2 ) = ( m2, c2 ) =
Comp.ScanMailboxManage.update flags lm model.scanMailboxModel Comp.ScanMailboxManage.update flags settings.timeZone lm model.scanMailboxModel
in in
{ model = { model | scanMailboxModel = m2 } { model = { model | scanMailboxModel = m2 }
, cmd = Cmd.map ScanMailboxMsg c2 , cmd = Cmd.map ScanMailboxMsg c2
@ -227,7 +227,7 @@ update flags settings msg model =
PeriodicQueryMsg lm -> PeriodicQueryMsg lm ->
let let
( pqm, pqc, pqs ) = ( pqm, pqc, pqs ) =
Comp.PeriodicQueryTaskManage.update flags lm model.periodicQueryModel Comp.PeriodicQueryTaskManage.update flags settings.timeZone lm model.periodicQueryModel
in in
{ model = { model | periodicQueryModel = pqm } { model = { model | periodicQueryModel = pqm }
, cmd = Cmd.map PeriodicQueryMsg pqc , cmd = Cmd.map PeriodicQueryMsg pqc

View File

@ -1,39 +0,0 @@
{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Util.Time exposing (formatIsoDateTime)
import DateFormat
import Time exposing (Posix, Zone, utc)
isoDateTimeFormatter : Zone -> Posix -> String
isoDateTimeFormatter =
DateFormat.format
[ DateFormat.yearNumber
, DateFormat.text "-"
, DateFormat.monthFixed
, DateFormat.text "-"
, DateFormat.dayOfMonthFixed
, DateFormat.text "T"
, DateFormat.hourMilitaryNumber
, DateFormat.text ":"
, DateFormat.minuteFixed
, DateFormat.text ":"
, DateFormat.secondFixed
]
timeZone : Zone
timeZone =
utc
formatIsoDateTime : Int -> String
formatIsoDateTime millis =
Time.millisToPosix millis
|> isoDateTimeFormatter timeZone

View File

@ -48,7 +48,7 @@ let
wakeup-period = "10 minutes"; wakeup-period = "10 minutes";
}; };
house-keeping = { house-keeping = {
schedule = "Sun *-*-* 00:00:00"; schedule = "Sun *-*-* 00:00:00 UTC";
cleanup-invites = { cleanup-invites = {
enabled = true; enabled = true;
older-than = "30 days"; older-than = "30 days";
@ -70,7 +70,7 @@ let
update-check = { update-check = {
enabled = false; enabled = false;
test-run = false; test-run = false;
schedule = "Sun *-*-* 00:00:00"; schedule = "Sun *-*-* 00:00:00 UTC";
sender-account = ""; sender-account = "";
smtp-id = ""; smtp-id = "";
recipients = []; recipients = [];

View File

@ -114,7 +114,7 @@ docspell.joex {
retry-delay = "10 seconds" retry-delay = "10 seconds"
} }
house-keeping { house-keeping {
schedule = "*-*-* 01:00:00" schedule = "*-*-* 01:00:00 UTC"
cleanup-invites = { cleanup-invites = {
older-than = "10 days" older-than = "10 days"
} }