Move utility functions into a Util file

This commit is contained in:
Eike Kettner
2020-05-24 15:58:09 +02:00
parent 324476c1a9
commit 6807ce4d2f
2 changed files with 53 additions and 23 deletions

View File

@ -18,6 +18,7 @@ import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (..)
import Json.Decode as D
import Util.Html exposing (onDragEnter, onDragLeave, onDragOver, onDropFiles)
type alias State =
@ -111,10 +112,10 @@ view : Model -> Html Msg
view model =
div
[ classList (model.settings.classList model.state)
, hijackOn "dragenter" (D.succeed DragEnter)
, hijackOn "dragover" (D.succeed DragEnter)
, hijackOn "dragleave" (D.succeed DragLeave)
, hijackOn "drop" dropDecoder
, onDragEnter DragEnter
, onDragOver DragEnter
, onDragLeave DragLeave
, onDropFiles GotFiles
]
[ div [ class "ui icon header" ]
[ i [ class "mouse pointer icon" ] []
@ -156,18 +157,3 @@ filterMime settings files =
else
List.filter pred files
dropDecoder : D.Decoder Msg
dropDecoder =
D.at [ "dataTransfer", "files" ] (D.oneOrMore GotFiles File.decoder)
hijackOn : String -> D.Decoder msg -> Attribute msg
hijackOn event decoder =
preventDefaultOn event (D.map hijack decoder)
hijack : msg -> ( msg, Bool )
hijack msg =
( msg, True )

View File

@ -4,13 +4,18 @@ module Util.Html exposing
, classActive
, intToKeyCode
, onClickk
, onDragEnter
, onDragLeave
, onDragOver
, onDropFiles
, onKeyUp
)
import File exposing (File)
import Html exposing (Attribute, Html, i)
import Html.Attributes exposing (class)
import Html.Events exposing (keyCode, on)
import Json.Decode as Decode
import Html.Events exposing (keyCode, on, preventDefaultOn)
import Json.Decode as D
checkboxChecked : Html msg
@ -68,12 +73,12 @@ intToKeyCode code =
onKeyUp : (Int -> msg) -> Attribute msg
onKeyUp tagger =
on "keyup" (Decode.map tagger keyCode)
on "keyup" (D.map tagger keyCode)
onClickk : msg -> Attribute msg
onClickk msg =
Html.Events.preventDefaultOn "click" (Decode.map alwaysPreventDefault (Decode.succeed msg))
Html.Events.preventDefaultOn "click" (D.map alwaysPreventDefault (D.succeed msg))
alwaysPreventDefault : msg -> ( msg, Bool )
@ -92,3 +97,42 @@ classActive active classes =
""
)
)
onDragEnter : msg -> Attribute msg
onDragEnter m =
hijackOn "dragenter" (D.succeed m)
onDragOver : msg -> Attribute msg
onDragOver m =
hijackOn "dragover" (D.succeed m)
onDragLeave : msg -> Attribute msg
onDragLeave m =
hijackOn "dragleave" (D.succeed m)
onDrop : msg -> Attribute msg
onDrop m =
hijackOn "drop" (D.succeed m)
onDropFiles : (File -> List File -> msg) -> Attribute msg
onDropFiles tagger =
let
dropFilesDecoder =
D.at [ "dataTransfer", "files" ] (D.oneOrMore tagger File.decoder)
in
hijackOn "drop" dropFilesDecoder
hijackOn : String -> D.Decoder msg -> Attribute msg
hijackOn event decoder =
preventDefaultOn event (D.map hijack decoder)
hijack : msg -> ( msg, Bool )
hijack msg =
( msg, True )