mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-21 09:58:26 +00:00
Move utility functions into a Util file
This commit is contained in:
@ -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 )
|
||||
|
@ -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 )
|
||||
|
Reference in New Issue
Block a user