Merge pull request #1170 from eikek/small-ui-improvements

Small UI improvements
This commit is contained in:
mergify[bot] 2021-11-12 23:35:36 +00:00 committed by GitHub
commit b3c6933cfb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 71 additions and 12 deletions

View File

@ -58,6 +58,7 @@
var elmFlags = { var elmFlags = {
"account": account, "account": account,
"pdfSupported": pdfSupported, "pdfSupported": pdfSupported,
"innerWidth": window.innerWidth,
"config": {{{flagsJson}}} "config": {{{flagsJson}}}
}; };
</script> </script>

View File

@ -125,7 +125,7 @@ init key url flags_ settings =
, userMenuOpen = False , userMenuOpen = False
, subs = Sub.none , subs = Sub.none
, uiSettings = settings , uiSettings = settings
, sidebarVisible = settings.sideMenuVisible , sidebarVisible = flags.innerWidth > 768 && settings.sideMenuVisible
, anonymousTheme = Data.UiTheme.Light , anonymousTheme = Data.UiTheme.Light
, anonymousUiLang = Messages.UiLanguage.English , anonymousUiLang = Messages.UiLanguage.English
, langMenuOpen = False , langMenuOpen = False

View File

@ -14,7 +14,7 @@ import Api
import App.Data exposing (..) import App.Data exposing (..)
import Browser exposing (UrlRequest(..)) import Browser exposing (UrlRequest(..))
import Browser.Navigation as Nav import Browser.Navigation as Nav
import Data.Flags import Data.Flags exposing (Flags)
import Data.ServerEvent exposing (ServerEvent(..)) import Data.ServerEvent exposing (ServerEvent(..))
import Data.UiSettings exposing (UiSettings) import Data.UiSettings exposing (UiSettings)
import Data.UiTheme import Data.UiTheme
@ -349,10 +349,13 @@ applyClientSettings texts model settings =
let let
setTheme = setTheme =
Ports.setUiTheme settings.uiTheme Ports.setUiTheme settings.uiTheme
flags =
model.flags
in in
Util.Update.andThen2 Util.Update.andThen2
[ \m -> [ \m ->
( { m | sidebarVisible = settings.sideMenuVisible } ( { m | sidebarVisible = flags.innerWidth > 768 && settings.sideMenuVisible }
, setTheme , setTheme
, Sub.none , Sub.none
) )

View File

@ -21,7 +21,7 @@ import Data.DropdownStyle as DS
import Data.Flags exposing (Flags) import Data.Flags exposing (Flags)
import Html exposing (..) import Html exposing (..)
import Html.Attributes exposing (..) import Html.Attributes exposing (..)
import Html.Events exposing (onClick, onInput) import Html.Events exposing (onBlur, onClick, onInput)
import Http import Http
import Styles as S import Styles as S
import Util.Html exposing (onKeyUp) import Util.Html exposing (onKeyUp)
@ -34,6 +34,7 @@ type alias Model =
, menuOpen : Bool , menuOpen : Bool
, candidates : List String , candidates : List String
, active : Maybe String , active : Maybe String
, backspaceCount : Int
} }
@ -43,6 +44,7 @@ init =
, menuOpen = False , menuOpen = False
, candidates = [] , candidates = []
, active = Nothing , active = Nothing
, backspaceCount = 0
} }
@ -94,7 +96,14 @@ update flags current msg model =
email = email =
Maybe.withDefault model.input model.active Maybe.withDefault model.input model.active
in in
update flags current (AddEmail email) model if email == "" then
( model, Cmd.none, current )
else
update flags current (AddEmail email) model
removeLast =
( { model | backspaceCount = 0 }, Cmd.none, Util.List.dropRight 1 current )
in in
case Util.Html.intToKeyCode code of case Util.Html.intToKeyCode code of
Just Util.Html.Up -> Just Util.Html.Up ->
@ -128,6 +137,13 @@ update flags current msg model =
Just Util.Html.Space -> Just Util.Html.Space ->
addCurrent addCurrent
Just Util.Html.Backspace ->
if model.backspaceCount >= 1 then
removeLast
else
( { model | backspaceCount = model.backspaceCount + 1 }, Cmd.none, current )
_ -> _ ->
( model, Cmd.none, current ) ( model, Cmd.none, current )
@ -154,9 +170,12 @@ type alias ViewSettings =
view2 : ViewSettings -> List String -> Model -> Html Msg view2 : ViewSettings -> List String -> Model -> Html Msg
view2 cfg values model = view2 cfg values model =
div [ class "text-sm flex-row space-x-2 relative" ] div [ class "text-sm flex-row space-x-2 relative" ]
[ div [ class cfg.style.link ] [ div
[ class cfg.style.link
, class "flex-wrap"
]
[ div [ div
[ class "flex flex-row space-x-2 mr-2" [ class "flex flex-row space-x-2 mr-2 flex-wrap"
, classList [ ( "hidden", List.isEmpty values ) ] , classList [ ( "hidden", List.isEmpty values ) ]
] ]
(List.map renderValue2 values) (List.map renderValue2 values)
@ -166,6 +185,7 @@ view2 cfg values model =
, placeholder cfg.placeholder , placeholder cfg.placeholder
, onKeyUp KeyPress , onKeyUp KeyPress
, onInput SetInput , onInput SetInput
, onBlur (KeyPress 13)
, class "inline-flex w-24 border-0 px-0 focus:ring-0 h-6 text-sm" , class "inline-flex w-24 border-0 px-0 focus:ring-0 h-6 text-sm"
, class "placeholder-gray-400 dark:text-bluegray-200 dark:bg-bluegray-800 dark:border-bluegray-500" , class "placeholder-gray-400 dark:text-bluegray-200 dark:bg-bluegray-800 dark:border-bluegray-500"
] ]

View File

@ -788,6 +788,9 @@ view2 texts flags extraClasses settings model =
tabActive t = tabActive t =
( tabLook t, ToggleAkkordionTab t.name ) ( tabLook t, ToggleAkkordionTab t.name )
isNew =
model.settings.id == ""
in in
div div
[ class extraClasses [ class extraClasses
@ -797,19 +800,24 @@ view2 texts flags extraClasses settings model =
{ start = { start =
[ MB.PrimaryButton [ MB.PrimaryButton
{ tagger = Submit { tagger = Submit
, label = texts.basics.submit , label = texts.save
, title = texts.basics.submitThisForm , title =
if isNew then
texts.saveNewTitle
else
texts.updateTitle
, icon = Just "fa fa-save" , icon = Just "fa fa-save"
} }
, MB.SecondaryButton , MB.SecondaryButton
{ tagger = Cancel { tagger = Cancel
, label = texts.basics.cancel , label = texts.basics.back
, title = texts.basics.backToList , title = texts.basics.backToList
, icon = Just "fa fa-arrow-left" , icon = Just "fa fa-arrow-left"
} }
] ]
, end = , end =
if model.settings.id /= "" then if not isNew then
[ startOnceBtn [ startOnceBtn
, MB.DeleteButton , MB.DeleteButton
{ tagger = RequestDelete { tagger = RequestDelete

View File

@ -42,6 +42,7 @@ type alias Config =
type alias Flags = type alias Flags =
{ account : Maybe AuthResult { account : Maybe AuthResult
, pdfSupported : Bool , pdfSupported : Bool
, innerWidth : Int
, config : Config , config : Config
} }

View File

@ -72,6 +72,9 @@ type alias Texts =
, invalidCalEvent : String , invalidCalEvent : String
, attachmentsOnlyLabel : String , attachmentsOnlyLabel : String
, attachmentsOnlyInfo : String , attachmentsOnlyInfo : String
, save : String
, saveNewTitle : String
, updateTitle : String
} }
@ -153,6 +156,9 @@ gb =
, invalidCalEvent = "The calendar event is not valid." , invalidCalEvent = "The calendar event is not valid."
, attachmentsOnlyLabel = "Only import e-mail attachments" , attachmentsOnlyLabel = "Only import e-mail attachments"
, attachmentsOnlyInfo = "Discards the e-mail body and only imports the attachments." , attachmentsOnlyInfo = "Discards the e-mail body and only imports the attachments."
, save = "Save"
, saveNewTitle = "Save a new task"
, updateTitle = "Update the task"
} }
@ -229,4 +235,7 @@ kann hier ein Wert für alle festgelegt werden. Bei 'Automatisch' wird auf den S
, invalidCalEvent = "Das Kalenderereignis ist ungültig." , invalidCalEvent = "Das Kalenderereignis ist ungültig."
, attachmentsOnlyLabel = "Nur Anhänge importieren" , attachmentsOnlyLabel = "Nur Anhänge importieren"
, attachmentsOnlyInfo = "Verwirft den E-Mail Text und importiert nur die Anhänge." , attachmentsOnlyInfo = "Verwirft den E-Mail Text und importiert nur die Anhänge."
, save = "Speichern"
, saveNewTitle = "Einen neuen Auftrag speichern"
, updateTitle = "Den Auftrag aktualisieren"
} }

View File

@ -44,6 +44,8 @@ type KeyCode
| Right | Right
| Enter | Enter
| Space | Space
| Backspace
| Tab
| ESC | ESC
| Letter_C | Letter_C
| Letter_N | Letter_N
@ -91,6 +93,12 @@ intToKeyCode code =
32 -> 32 ->
Just Space Just Space
8 ->
Just Backspace
9 ->
Just Tab
27 -> 27 ->
Just ESC Just ESC

View File

@ -34,7 +34,10 @@ field shows completion proposals from all contacts in your address
book (from organizations and persons). Choose an address by pressing book (from organizations and persons). Choose an address by pressing
*Enter* or by clicking a proposal from the list. The proposal list can *Enter* or by clicking a proposal from the list. The proposal list can
be iterated by the *Up* and *Down* arrows. You can type in any be iterated by the *Up* and *Down* arrows. You can type in any
address, of course, it doesn't need to match a proposal. address, of course, it doesn't need to match a proposal. If you type
in an arbitrary address, hit *Enter* or *Space* in order to add the
current address. You can hit *Backspace* two times to remove the last
e-mail address.
If you have multiple mail settings defined, you can choose in the top If you have multiple mail settings defined, you can choose in the top
dropdown which account to use for sending. dropdown which account to use for sending.

View File

@ -113,6 +113,12 @@ to copy it.
{{ figure(file="share-03.png") }} {{ figure(file="share-03.png") }}
When typing in an e-mail address, there are completion proposals
provided from your address book. If you type in an arbitrary address
(not in the proposals), hit *Enter* or *Space* in order to add the
current address. You can hit *Backspace* two times to remove the last
e-mail address.
The new share can now be found in *Collective Profile -> Shares*. The new share can now be found in *Collective Profile -> Shares*.
Clicking *Done* brings you back to the search results. Clicking *Done* brings you back to the search results.