{-# LANGUAGE OverloadedStrings #-}

-- | Common web page input elements, often with bootstrap scaffolding.
module Web.Rep.Html.Input
  ( Input (..),
    InputType (..),
    inputToHtml,
  )
where

import Data.Bool
import Data.ByteString (ByteString)
import Data.ByteString.Char8 qualified as C
import Data.Maybe
import GHC.Generics
import MarkupParse

-- | something that might exist on a web page and be a front-end input to computations.
data Input a = Input
  { -- | underlying value
    forall a. Input a -> a
inputVal :: a,
    -- | label suggestion
    forall a. Input a -> Maybe ByteString
inputLabel :: Maybe ByteString,
    -- | name//key//id of the Input
    forall a. Input a -> ByteString
inputId :: ByteString,
    -- | type of html input
    forall a. Input a -> InputType
inputType :: InputType
  }
  deriving (Input a -> Input a -> Bool
forall a. Eq a => Input a -> Input a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Input a -> Input a -> Bool
$c/= :: forall a. Eq a => Input a -> Input a -> Bool
== :: Input a -> Input a -> Bool
$c== :: forall a. Eq a => Input a -> Input a -> Bool
Eq, Int -> Input a -> ShowS
forall a. Show a => Int -> Input a -> ShowS
forall a. Show a => [Input a] -> ShowS
forall a. Show a => Input a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Input a] -> ShowS
$cshowList :: forall a. Show a => [Input a] -> ShowS
show :: Input a -> String
$cshow :: forall a. Show a => Input a -> String
showsPrec :: Int -> Input a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Input a -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Input a) x -> Input a
forall a x. Input a -> Rep (Input a) x
$cto :: forall a x. Rep (Input a) x -> Input a
$cfrom :: forall a x. Input a -> Rep (Input a) x
Generic)

-- | Various types of web page inputs, encapsulating practical bootstrap class functionality
data InputType
  = Slider [Attr]
  | SliderV [Attr]
  | TextBox
  | TextBox'
  | TextArea Int
  | ColorPicker
  | ChooseFile
  | Dropdown [ByteString]
  | DropdownMultiple [ByteString] Char
  | DropdownSum [ByteString]
  | Datalist [ByteString] ByteString
  | Checkbox Bool
  | Toggle Bool (Maybe ByteString)
  | Button
  deriving (InputType -> InputType -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: InputType -> InputType -> Bool
$c/= :: InputType -> InputType -> Bool
== :: InputType -> InputType -> Bool
$c== :: InputType -> InputType -> Bool
Eq, Int -> InputType -> ShowS
[InputType] -> ShowS
InputType -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [InputType] -> ShowS
$cshowList :: [InputType] -> ShowS
show :: InputType -> String
$cshow :: InputType -> String
showsPrec :: Int -> InputType -> ShowS
$cshowsPrec :: Int -> InputType -> ShowS
Show, forall x. Rep InputType x -> InputType
forall x. InputType -> Rep InputType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep InputType x -> InputType
$cfrom :: forall x. InputType -> Rep InputType x
Generic)

inputToHtml :: (Show a) => Input a -> Markup
inputToHtml :: forall a. Show a => Input a -> Markup
inputToHtml (Input a
v Maybe ByteString
l ByteString
i (Slider [Attr]
satts)) =
  ByteString -> [Attr] -> Markup -> Markup
element
    ByteString
"div"
    [ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-group-sm"]
    (forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (ByteString -> [Attr] -> ByteString -> Markup
elementc ByteString
"label" [ByteString -> ByteString -> Attr
Attr ByteString
"for" ByteString
i, ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"mb-0"]) Maybe ByteString
l)
    forall a. Semigroup a => a -> a -> a
<> ByteString -> [Attr] -> Markup
element_
      ByteString
"input"
      ( [ ByteString -> ByteString -> Attr
Attr ByteString
"type" ByteString
"range",
          ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
" form-control-range form-control-sm custom-range jsbClassEventChange",
          ByteString -> ByteString -> Attr
Attr ByteString
"id" ByteString
i,
          ByteString -> ByteString -> Attr
Attr ByteString
"value" (String -> ByteString
strToUtf8 forall a b. (a -> b) -> a -> b
$ forall a. Show a => a -> String
show a
v)
        ]
          forall a. Semigroup a => a -> a -> a
<> [Attr]
satts
      )
inputToHtml (Input a
v Maybe ByteString
l ByteString
i (SliderV [Attr]
satts)) =
  ByteString -> [Attr] -> Markup -> Markup
element
    ByteString
"div"
    [ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-group-sm"]
    ( forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (ByteString -> [Attr] -> ByteString -> Markup
elementc ByteString
"label" [ByteString -> ByteString -> Attr
Attr ByteString
"for" ByteString
i, ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"mb-0"]) Maybe ByteString
l
        forall a. Semigroup a => a -> a -> a
<> ByteString -> [Attr] -> Markup
element_
          ByteString
"input"
          ( [ ByteString -> ByteString -> Attr
Attr ByteString
"type" ByteString
"range",
              ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
" form-control-range form-control-sm custom-range jsbClassEventChange",
              ByteString -> ByteString -> Attr
Attr ByteString
"id" ByteString
i,
              ByteString -> ByteString -> Attr
Attr ByteString
"value" (String -> ByteString
strToUtf8 forall a b. (a -> b) -> a -> b
$ forall a. Show a => a -> String
show a
v),
              ByteString -> ByteString -> Attr
Attr ByteString
"oninput" (ByteString
"$('#sliderv" forall a. Semigroup a => a -> a -> a
<> ByteString
i forall a. Semigroup a => a -> a -> a
<> ByteString
"').html($(this).val())")
            ]
              forall a. Semigroup a => a -> a -> a
<> [Attr]
satts
          )
    )
    forall a. Semigroup a => a -> a -> a
<> ByteString -> [Attr] -> ByteString -> Markup
elementc ByteString
"span" [ByteString -> ByteString -> Attr
Attr ByteString
"id" (ByteString
"sliderv" forall a. Semigroup a => a -> a -> a
<> ByteString
i)] (String -> ByteString
strToUtf8 forall a b. (a -> b) -> a -> b
$ forall a. Show a => a -> String
show a
v)
inputToHtml (Input a
v Maybe ByteString
l ByteString
i InputType
TextBox) =
  ByteString -> [Attr] -> Markup -> Markup
element
    ByteString
"div"
    [ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-group-sm"]
    ( forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (ByteString -> [Attr] -> ByteString -> Markup
elementc ByteString
"label" [ByteString -> ByteString -> Attr
Attr ByteString
"for" ByteString
i, ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"mb-0"]) Maybe ByteString
l
        forall a. Semigroup a => a -> a -> a
<> ByteString -> [Attr] -> Markup
element_
          ByteString
"input"
          [ ByteString -> ByteString -> Attr
Attr ByteString
"type" ByteString
"text",
            ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-control form-control-sm jsbClassEventInput",
            ByteString -> ByteString -> Attr
Attr ByteString
"id" ByteString
i,
            ByteString -> ByteString -> Attr
Attr ByteString
"value" (String -> ByteString
strToUtf8 forall a b. (a -> b) -> a -> b
$ forall a. Show a => a -> String
show a
v)
          ]
    )
inputToHtml (Input a
v Maybe ByteString
l ByteString
i InputType
TextBox') =
  ByteString -> [Attr] -> Markup -> Markup
element
    ByteString
"div"
    [ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-group-sm"]
    ( forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (ByteString -> [Attr] -> ByteString -> Markup
elementc ByteString
"label" [ByteString -> ByteString -> Attr
Attr ByteString
"for" ByteString
i, ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"mb-0"]) Maybe ByteString
l
        forall a. Semigroup a => a -> a -> a
<> ByteString -> [Attr] -> Markup
element_
          ByteString
"input"
          [ ByteString -> ByteString -> Attr
Attr ByteString
"type" ByteString
"text",
            ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-control form-control-sm jsbClassEventFocusout",
            ByteString -> ByteString -> Attr
Attr ByteString
"id" ByteString
i,
            ByteString -> ByteString -> Attr
Attr ByteString
"value" (String -> ByteString
strToUtf8 forall a b. (a -> b) -> a -> b
$ forall a. Show a => a -> String
show a
v)
          ]
    )
inputToHtml (Input a
v Maybe ByteString
l ByteString
i (TextArea Int
rows)) =
  ByteString -> [Attr] -> Markup -> Markup
element
    ByteString
"div"
    [ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-group-sm"]
    ( forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (ByteString -> [Attr] -> ByteString -> Markup
elementc ByteString
"label" [ByteString -> ByteString -> Attr
Attr ByteString
"for" ByteString
i, ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"mb-0"]) Maybe ByteString
l
        forall a. Semigroup a => a -> a -> a
<> ByteString -> [Attr] -> ByteString -> Markup
elementc
          ByteString
"textarea"
          [ ByteString -> ByteString -> Attr
Attr ByteString
"rows" (String -> ByteString
strToUtf8 forall a b. (a -> b) -> a -> b
$ forall a. Show a => a -> String
show Int
rows),
            ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-control form-control-sm jsbClassEventInput",
            ByteString -> ByteString -> Attr
Attr ByteString
"id" ByteString
i
          ]
          (String -> ByteString
strToUtf8 forall a b. (a -> b) -> a -> b
$ forall a. Show a => a -> String
show a
v)
    )
inputToHtml (Input a
v Maybe ByteString
l ByteString
i InputType
ColorPicker) =
  ByteString -> [Attr] -> Markup -> Markup
element
    ByteString
"div"
    [ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-group-sm"]
    ( forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (ByteString -> [Attr] -> ByteString -> Markup
elementc ByteString
"label" [ByteString -> ByteString -> Attr
Attr ByteString
"for" ByteString
i, ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"mb-0"]) Maybe ByteString
l
        forall a. Semigroup a => a -> a -> a
<> ByteString -> [Attr] -> Markup
element_
          ByteString
"input"
          [ ByteString -> ByteString -> Attr
Attr ByteString
"type" ByteString
"color",
            ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-control form-control-sm jsbClassEventInput",
            ByteString -> ByteString -> Attr
Attr ByteString
"id" ByteString
i,
            ByteString -> ByteString -> Attr
Attr ByteString
"value" (String -> ByteString
strToUtf8 forall a b. (a -> b) -> a -> b
$ forall a. Show a => a -> String
show a
v)
          ]
    )
inputToHtml (Input a
_ Maybe ByteString
l ByteString
i InputType
ChooseFile) =
  ByteString -> [Attr] -> Markup -> Markup
element
    ByteString
"div"
    [ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-group-sm"]
    ( forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (ByteString -> [Attr] -> ByteString -> Markup
elementc ByteString
"label" [ByteString -> ByteString -> Attr
Attr ByteString
"for" ByteString
i, ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"mb-0"]) Maybe ByteString
l
        forall a. Semigroup a => a -> a -> a
<> ByteString -> [Attr] -> Markup
element_
          ByteString
"input"
          [ ByteString -> ByteString -> Attr
Attr ByteString
"type" ByteString
"file",
            ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-control-file form-control-sm jsbClassEventChooseFile",
            ByteString -> ByteString -> Attr
Attr ByteString
"id" ByteString
i
          ]
    )
inputToHtml (Input a
v Maybe ByteString
l ByteString
i (Dropdown [ByteString]
opts)) =
  ByteString -> [Attr] -> Markup -> Markup
element
    ByteString
"div"
    [ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-group-sm"]
    ( forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (ByteString -> [Attr] -> ByteString -> Markup
elementc ByteString
"label" [ByteString -> ByteString -> Attr
Attr ByteString
"for" ByteString
i, ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"mb-0"]) Maybe ByteString
l
        forall a. Semigroup a => a -> a -> a
<> ByteString -> [Attr] -> Markup -> Markup
element
          ByteString
"select"
          [ ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-control form-control-sm jsbClassEventInput",
            ByteString -> ByteString -> Attr
Attr ByteString
"id" ByteString
i
          ]
          (forall a. Monoid a => [a] -> a
mconcat [Markup]
opts')
    )
  where
    opts' :: [Markup]
opts' =
      ( \ByteString
o ->
          ByteString -> [Attr] -> ByteString -> Markup
elementc
            ByteString
"option"
            ( forall a. a -> a -> Bool -> a
bool
                []
                [ByteString -> ByteString -> Attr
Attr ByteString
"selected" ByteString
"selected"]
                (ByteString
o forall a. Eq a => a -> a -> Bool
== String -> ByteString
strToUtf8 (forall a. Show a => a -> String
show a
v))
            )
            ByteString
o
      )
        forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [ByteString]
opts
inputToHtml (Input a
vs Maybe ByteString
l ByteString
i (DropdownMultiple [ByteString]
opts Char
sep)) =
  ByteString -> [Attr] -> Markup -> Markup
element
    ByteString
"div"
    [ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-group-sm"]
    ( forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (ByteString -> [Attr] -> ByteString -> Markup
elementc ByteString
"label" [ByteString -> ByteString -> Attr
Attr ByteString
"for" ByteString
i, ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"mb-0"]) Maybe ByteString
l
        forall a. Semigroup a => a -> a -> a
<> ByteString -> [Attr] -> Markup -> Markup
element
          ByteString
"select"
          [ ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-control form-control-sm jsbClassEventChangeMultiple",
            ByteString -> ByteString -> Attr
Attr ByteString
"multiple" ByteString
"multiple",
            ByteString -> ByteString -> Attr
Attr ByteString
"id" ByteString
i
          ]
          (forall a. Monoid a => [a] -> a
mconcat [Markup]
opts')
    )
  where
    opts' :: [Markup]
opts' =
      ( \ByteString
o ->
          ByteString -> [Attr] -> ByteString -> Markup
elementc
            ByteString
"option"
            ( forall a. a -> a -> Bool -> a
bool
                []
                [ByteString -> ByteString -> Attr
Attr ByteString
"selected" ByteString
"selected"]
                (forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (\ByteString
v -> ByteString
o forall a. Eq a => a -> a -> Bool
== String -> ByteString
strToUtf8 (forall a. Show a => a -> String
show ByteString
v)) (Char -> ByteString -> [ByteString]
C.split Char
sep (String -> ByteString
strToUtf8 forall a b. (a -> b) -> a -> b
$ forall a. Show a => a -> String
show a
vs)))
            )
            ByteString
o
      )
        forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [ByteString]
opts
inputToHtml (Input a
v Maybe ByteString
l ByteString
i (DropdownSum [ByteString]
opts)) =
  ByteString -> [Attr] -> Markup -> Markup
element
    ByteString
"div"
    [ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-group-sm sumtype-group"]
    ( forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (ByteString -> [Attr] -> ByteString -> Markup
elementc ByteString
"label" [ByteString -> ByteString -> Attr
Attr ByteString
"for" ByteString
i, ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"mb-0"]) Maybe ByteString
l
        forall a. Semigroup a => a -> a -> a
<> ByteString -> [Attr] -> Markup -> Markup
element
          ByteString
"select"
          [ ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-control form-control-sm jsbClassEventInput jsbClassEventShowSum",
            ByteString -> ByteString -> Attr
Attr ByteString
"id" ByteString
i
          ]
          (forall a. Monoid a => [a] -> a
mconcat [Markup]
opts')
    )
  where
    opts' :: [Markup]
opts' =
      ( \ByteString
o ->
          ByteString -> [Attr] -> ByteString -> Markup
elementc
            ByteString
"option"
            (forall a. a -> a -> Bool -> a
bool [] [ByteString -> ByteString -> Attr
Attr ByteString
"selected" ByteString
"selected"] (ByteString
o forall a. Eq a => a -> a -> Bool
== String -> ByteString
strToUtf8 (forall a. Show a => a -> String
show a
v)))
            ByteString
o
      )
        forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [ByteString]
opts
inputToHtml (Input a
v Maybe ByteString
l ByteString
i (Datalist [ByteString]
opts ByteString
listId)) =
  ByteString -> [Attr] -> Markup -> Markup
element
    ByteString
"div"
    [ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-group-sm"]
    ( forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (ByteString -> [Attr] -> ByteString -> Markup
elementc ByteString
"label" [ByteString -> ByteString -> Attr
Attr ByteString
"for" ByteString
i, ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"mb-0"]) Maybe ByteString
l
        forall a. Semigroup a => a -> a -> a
<> ByteString -> [Attr] -> Markup
element_
          ByteString
"input"
          [ ByteString -> ByteString -> Attr
Attr ByteString
"type" ByteString
"text",
            ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-control form-control-sm jsbClassEventInput",
            ByteString -> ByteString -> Attr
Attr ByteString
"id" ByteString
i,
            ByteString -> ByteString -> Attr
Attr ByteString
"list" ByteString
listId
            -- the datalist concept in html assumes initial state is a null
            -- and doesn't present the list if it has a value alreadyx
            -- , value_ (show $ toHtml v)
          ]
        forall a. Semigroup a => a -> a -> a
<> ByteString -> [Attr] -> Markup -> Markup
element
          ByteString
"datalist"
          [ByteString -> ByteString -> Attr
Attr ByteString
"id" ByteString
listId]
          ( forall a. Monoid a => [a] -> a
mconcat
              ( ( \ByteString
o ->
                    ByteString -> [Attr] -> ByteString -> Markup
elementc
                      ByteString
"option"
                      ( forall a. a -> a -> Bool -> a
bool
                          []
                          [ByteString -> ByteString -> Attr
Attr ByteString
"selected" ByteString
"selected"]
                          (ByteString
o forall a. Eq a => a -> a -> Bool
== String -> ByteString
strToUtf8 (forall a. Show a => a -> String
show a
v))
                      )
                      ByteString
o
                )
                  forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [ByteString]
opts
              )
          )
    )
inputToHtml (Input a
_ Maybe ByteString
l ByteString
i (Checkbox Bool
checked)) =
  ByteString -> [Attr] -> Markup -> Markup
element
    ByteString
"div"
    [ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-check form-check-sm"]
    ( ByteString -> [Attr] -> Markup -> Markup
element
        ByteString
"input"
        ( [ ByteString -> ByteString -> Attr
Attr ByteString
"type" ByteString
"checkbox",
            ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-check-input jsbClassEventCheckbox",
            ByteString -> ByteString -> Attr
Attr ByteString
"id" ByteString
i
          ]
            forall a. Semigroup a => a -> a -> a
<> forall a. a -> a -> Bool -> a
bool [] [ByteString -> ByteString -> Attr
Attr ByteString
"checked" ByteString
""] Bool
checked
        )
        ( forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (ByteString -> [Attr] -> ByteString -> Markup
elementc ByteString
"label" [ByteString -> ByteString -> Attr
Attr ByteString
"for" ByteString
i, ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-label-check mb-0"]) Maybe ByteString
l
        )
    )
inputToHtml (Input a
_ Maybe ByteString
l ByteString
i (Toggle Bool
pushed Maybe ByteString
lab)) =
  ByteString -> [Attr] -> Markup -> Markup
element
    ByteString
"div"
    [ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-group-sm"]
    ( forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (ByteString -> [Attr] -> ByteString -> Markup
elementc ByteString
"label" [ByteString -> ByteString -> Attr
Attr ByteString
"for" ByteString
i, ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"mb-0"]) Maybe ByteString
l
        forall a. Semigroup a => a -> a -> a
<> ByteString -> [Attr] -> Markup
element_
          ByteString
"input"
          ( [ ByteString -> ByteString -> Attr
Attr ByteString
"type" ByteString
"button",
              ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"btn btn-primary btn-sm jsbClassEventToggle",
              ByteString -> ByteString -> Attr
Attr ByteString
"data-bs-toggle" ByteString
"button",
              ByteString -> ByteString -> Attr
Attr ByteString
"id" ByteString
i,
              ByteString -> ByteString -> Attr
Attr ByteString
"aria-pressed" (forall a. a -> a -> Bool -> a
bool ByteString
"false" ByteString
"true" Bool
pushed)
            ]
              forall a. Semigroup a => a -> a -> a
<> forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] (\ByteString
l' -> [ByteString -> ByteString -> Attr
Attr ByteString
"value" ByteString
l']) Maybe ByteString
lab
              forall a. Semigroup a => a -> a -> a
<> forall a. a -> a -> Bool -> a
bool [] [ByteString -> ByteString -> Attr
Attr ByteString
"checked" ByteString
""] Bool
pushed
          )
    )
inputToHtml (Input a
_ Maybe ByteString
l ByteString
i InputType
Button) =
  ByteString -> [Attr] -> Markup -> Markup
element
    ByteString
"div"
    [ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"form-group-sm"]
    ( ByteString -> [Attr] -> Markup
element_
        ByteString
"input"
        [ ByteString -> ByteString -> Attr
Attr ByteString
"type" ByteString
"button",
          ByteString -> ByteString -> Attr
Attr ByteString
"id" ByteString
i,
          ByteString -> ByteString -> Attr
Attr ByteString
"class" ByteString
"btn btn-primary btn-sm jsbClassEventButton",
          ByteString -> ByteString -> Attr
Attr ByteString
"value" (forall a. a -> Maybe a -> a
fromMaybe ByteString
"button" Maybe ByteString
l)
        ]
    )