diff options
Diffstat (limited to 'elm/Lib/Html.elm')
-rw-r--r-- | elm/Lib/Html.elm | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/elm/Lib/Html.elm b/elm/Lib/Html.elm index 2d7d516c..7ec8dacc 100644 --- a/elm/Lib/Html.elm +++ b/elm/Lib/Html.elm @@ -7,6 +7,7 @@ import Json.Decode as JD import List import Lib.Api as Api import Lib.Util exposing (..) +import Lib.Ffi as Ffi import Gen.Types as T @@ -25,6 +26,8 @@ onInputValidation msg = custom "input" <| targetValue (JD.at ["target", "validity", "valid"] JD.bool) +onInvalid : msg -> Attribute msg +onInvalid msg = on "invalid" (JD.succeed msg) -- Multi-<br> (ugly but oh, so, convenient) br_ : Int -> Html m @@ -33,9 +36,9 @@ br_ n = if n == 1 then br [] [] else span [] <| List.repeat n <| br [] [] -- Quick short-hand way of creating a form that can be disabled. -- Usage: --- form_ Submit_msg (state == Disabled) [contents] -form_ : msg -> Bool -> List (Html msg) -> Html msg -form_ sub dis cont = Html.form [ onSubmit sub ] +-- form_ id Submit_msg (state == Disabled) [contents] +form_ : String -> msg -> Bool -> List (Html msg) -> Html msg +form_ s sub dis cont = Html.form [ id s, onSubmit sub ] [ fieldset [disabled dis] cont ] @@ -46,13 +49,13 @@ inputButton val onch attrs = -- Submit button with loading indicator and error message display submitButton : String -> Api.State -> Bool -> Html m -submitButton val state valid = div [] +submitButton val state valid = span [] [ input [ type_ "submit", class "submit", tabindex 10, value val, disabled (state == Api.Loading || not valid) ] [] , case state of - Api.Error r -> p [] [ b [class "standout" ] [ text <| Api.showResponse r ] ] + Api.Error r -> p [] [ b [] [ text <| Api.showResponse r ] ] _ -> if valid then text "" - else p [] [ b [class "standout" ] [ text "The form contains errors, please fix these before submitting. " ] ] + else p [] [ b [] [ text "The form contains errors, please fix these before submitting. " ] ] , if state == Api.Loading then div [ class "spinner" ] [] else text "" @@ -125,10 +128,11 @@ inputTextArea nam val onch attrs = textarea ( , onInput onch , rows 4 , cols 50 + , value val ] ++ attrs ++ (if nam == "" then [] else [ id nam, name nam ]) - ) [ text val ] + ) [] inputCheck : String -> Bool -> (Bool -> m) -> Html m @@ -154,14 +158,14 @@ inputRadio nam val onch = input ( -- Same as an inputText, but formats/parses an integer as Q### -inputWikidata : String -> Maybe Int -> (Maybe Int -> m) -> Html m -inputWikidata nam val onch = +inputWikidata : String -> Maybe Int -> (Maybe Int -> m) -> List (Attribute m) -> Html m +inputWikidata nam val onch attr = inputText nam (case val of Nothing -> "" Just v -> "Q" ++ String.fromInt v) (\v -> onch <| if v == "" then Nothing else String.toInt <| if String.startsWith "Q" v then String.dropLeft 1 v else v) - [ pattern "^Q?[1-9][0-9]{0,8}$" ] + (pattern "^Q?[1-9][0-9]{0,8}$" :: attr) -- Similar to inputCheck and inputRadio with a label, except this is just a link. @@ -187,7 +191,7 @@ formField lbl cont = else let (nlbl, eng) = if String.endsWith "#eng" lbl then (String.dropRight 4 lbl, True) else (lbl, False) - genlbl str = text str :: if eng then [ br [] [], b [ class "standout" ] [ text "English please!" ] ] else [] + genlbl str = text str :: if eng then [ br [] [], b [] [ text "English please!" ] ] else [] in td [ class "label" ] <| case String.split "::" nlbl of @@ -199,10 +203,19 @@ formField lbl cont = langIcon : String -> Html m -langIcon l = abbr [ class "icons lang", class l, title (Maybe.withDefault "" <| lookup l T.languages) ] [ text " " ] +langIcon l = abbr [ class ("icon-lang-"++l), title (Maybe.withDefault "" <| lookup l T.languages) ] [ text " " ] platformIcon : String -> Html m -platformIcon l = abbr [ class "icons", class l, title (Maybe.withDefault "" <| lookup l T.platforms) ] [ text " " ] +platformIcon l = abbr [ class ("icon-plat-"++l), title (Maybe.withDefault "" <| lookup l T.platforms) ] [ text " " ] releaseTypeIcon : String -> Html m -releaseTypeIcon t = abbr [ class ("icons rt"++t), title (Maybe.withDefault "" <| lookup t T.releaseTypes) ] [ text " " ] +releaseTypeIcon t = abbr [ class ("icon-rt"++t), title (Maybe.withDefault "" <| lookup t T.releaseTypes) ] [ text " " ] + +-- Special values: -1 = "add to list", not 1-6 = unknown +-- (Because why use the type system to encode special values?) +ulistIcon : Int -> String -> Html m +ulistIcon n lbl = + let fn = if n == -1 then "add" + else if n >= 1 && n <= 6 then "l" ++ String.fromInt n + else "unknown" + in abbr [ class ("icon-list-"++fn), title lbl ] [] |