mirror of
https://github.com/NoRedInk/noredink-ui.git
synced 2024-11-24 17:02:51 +03:00
e2907d9ba2
* Use elm-css 16.0.0 * 💀 Ui.Checkbox V1 and V2 * s/Css.Foreign/Css.Global/g * 💀 Nri.Ui.Styles.V1 * 💀 BannerAlert.V1 * 💀 Modal.V1 * 💀 Dropdown.V1 * 💀 Select.V1 and V2 * 💀 Alert.V1 * 💀 Button.V1 and V2 * 💀 Divider.V1 * 💀 Icon.V1 and V2 * 💀 Outline.V1 * 💀 SegmentedControl.V1-V5 * 💀 TextArea.V1 and V2 * 💀 TextInput.V1 * delete the rest of the modules * actually more deletions * InputStyles v1 is unused * move to src-0.18 * do the 0.19 upgrade * select options are addressable by index * elm-css 16 * update scripts * elm-format * Update V2.elm * put the nbsp back * elm-format validation for both versions
78 lines
2.5 KiB
Elm
78 lines
2.5 KiB
Elm
module EventExtras.Styled exposing (onClickForLinkWithHref, onClickPreventDefaultForLinkWithHref)
|
|
|
|
import Html.Styled as Html
|
|
import Html.Styled.Events exposing (..)
|
|
import Json.Decode
|
|
|
|
|
|
{-| This is necessary to use in single-page apps (SPA) when intercepting the
|
|
`onClick` of `<a>` tags that trigger navigation within the app,
|
|
as a normal `onClickPreventDefault` will prevent the user from opening the link
|
|
in a new tab/window.
|
|
|
|
(From <https://github.com/elm-lang/html/issues/110>)
|
|
|
|
-}
|
|
onClickPreventDefaultForLinkWithHref : msg -> Html.Attribute msg
|
|
onClickPreventDefaultForLinkWithHref msg =
|
|
let
|
|
isSpecialClick : Json.Decode.Decoder Bool
|
|
isSpecialClick =
|
|
Json.Decode.map2
|
|
(\isCtrl isMeta -> isCtrl || isMeta)
|
|
(Json.Decode.field "ctrlKey" Json.Decode.bool)
|
|
(Json.Decode.field "metaKey" Json.Decode.bool)
|
|
|
|
succeedIfFalse : a -> Bool -> Json.Decode.Decoder a
|
|
succeedIfFalse msg preventDefault =
|
|
case preventDefault of
|
|
False ->
|
|
Json.Decode.succeed msg
|
|
|
|
True ->
|
|
Json.Decode.fail "succeedIfFalse: condition was True"
|
|
in
|
|
onWithOptions "click"
|
|
{ stopPropagation = False
|
|
, preventDefault = True
|
|
}
|
|
(isSpecialClick
|
|
|> Json.Decode.andThen (succeedIfFalse msg)
|
|
)
|
|
|
|
|
|
{-| This is necessary to use when intercepting the
|
|
`onClick` of `<a>` tags that trigger navigation within the app,
|
|
as a normal `onClick` will prevent the user from opening the link
|
|
in a new tab/window.
|
|
|
|
(From <https://github.com/elm-lang/html/issues/110>)
|
|
|
|
-}
|
|
onClickForLinkWithHref : msg -> Html.Attribute msg
|
|
onClickForLinkWithHref msg =
|
|
let
|
|
isSpecialClick : Json.Decode.Decoder Bool
|
|
isSpecialClick =
|
|
Json.Decode.map2
|
|
(\isCtrl isMeta -> isCtrl || isMeta)
|
|
(Json.Decode.field "ctrlKey" Json.Decode.bool)
|
|
(Json.Decode.field "metaKey" Json.Decode.bool)
|
|
|
|
succeedIfFalse : a -> Bool -> Json.Decode.Decoder a
|
|
succeedIfFalse msg preventDefault =
|
|
case preventDefault of
|
|
False ->
|
|
Json.Decode.succeed msg
|
|
|
|
True ->
|
|
Json.Decode.fail "succeedIfFalse: condition was True"
|
|
in
|
|
onWithOptions "click"
|
|
{ stopPropagation = False
|
|
, preventDefault = False
|
|
}
|
|
(isSpecialClick
|
|
|> Json.Decode.andThen (succeedIfFalse msg)
|
|
)
|