Bulma module split: WIP.
This commit is contained in:
parent
bf20d79570
commit
ca708999fc
9 changed files with 275 additions and 227 deletions
|
@ -50,7 +50,7 @@ owned_domains domains_i_exclusively_own action_enter_domain action_transfer_doma
|
||||||
then Web.table [] [ owned_domains_table_header
|
then Web.table [] [ owned_domains_table_header
|
||||||
, HH.tbody_ $ map owned_domain_row domains_i_exclusively_own
|
, HH.tbody_ $ map owned_domain_row domains_i_exclusively_own
|
||||||
]
|
]
|
||||||
else Bulma.p "No domain yet."
|
else Web.p "No domain yet."
|
||||||
where
|
where
|
||||||
owned_domains_table_header :: HH.HTML w i
|
owned_domains_table_header :: HH.HTML w i
|
||||||
owned_domains_table_header
|
owned_domains_table_header
|
||||||
|
@ -63,7 +63,7 @@ owned_domains domains_i_exclusively_own action_enter_domain action_transfer_doma
|
||||||
owned_domain_row domain = HH.tr_
|
owned_domain_row domain = HH.tr_
|
||||||
[ HH.td_ [ Button.btn domain.name (action_enter_domain domain.name) ]
|
[ HH.td_ [ Button.btn domain.name (action_enter_domain domain.name) ]
|
||||||
, case domain.transfer_key of
|
, case domain.transfer_key of
|
||||||
Just key -> HH.td_ [ Bulma.p "Token key:", Bulma.p key ]
|
Just key -> HH.td_ [ Web.p "Token key:", Web.p key ]
|
||||||
Nothing -> HH.td_ [ Button.btn_abbr "Generate a token to transfer the ownership of a domain." "Transfer" (action_transfer_domain domain.name) ]
|
Nothing -> HH.td_ [ Button.btn_abbr "Generate a token to transfer the ownership of a domain." "Transfer" (action_transfer_domain domain.name) ]
|
||||||
, HH.td_ [ Button.btn_abbr "Generate a token to share the ownership of a domain." "Share" (action_share_domain domain.name) ]
|
, HH.td_ [ Button.btn_abbr "Generate a token to share the ownership of a domain." "Share" (action_share_domain domain.name) ]
|
||||||
, HH.td_ [ Button.alert_btn_abbr "Delete the domain. This will remove all zone data and the domain won't be served anymore." "Delete" (action_delete_domain domain.name) ]
|
, HH.td_ [ Button.alert_btn_abbr "Delete the domain. This will remove all zone data and the domain won't be served anymore." "Delete" (action_delete_domain domain.name) ]
|
||||||
|
@ -75,7 +75,7 @@ shared_domains domains_i_share action_enter_domain action_unshare_domain action_
|
||||||
then Web.table [] [ shared_domains_table_header
|
then Web.table [] [ shared_domains_table_header
|
||||||
, HH.tbody_ $ map shared_domain_row domains_i_share
|
, HH.tbody_ $ map shared_domain_row domains_i_share
|
||||||
]
|
]
|
||||||
else Bulma.p "No domain yet."
|
else Web.p "No domain yet."
|
||||||
where
|
where
|
||||||
shared_domains_table_header :: HH.HTML w i
|
shared_domains_table_header :: HH.HTML w i
|
||||||
shared_domains_table_header
|
shared_domains_table_header
|
||||||
|
@ -96,7 +96,7 @@ shared_domains domains_i_share action_enter_domain action_unshare_domain action_
|
||||||
|
|
||||||
-- | Render all Resource Records.
|
-- | Render all Resource Records.
|
||||||
resource_records :: forall w i. Array ResourceRecord -> (Int -> i) -> (Int -> i) -> (Int -> i) -> HH.HTML w i
|
resource_records :: forall w i. Array ResourceRecord -> (Int -> i) -> (Int -> i) -> (Int -> i) -> HH.HTML w i
|
||||||
resource_records [] _ _ _ = Bulma.box [Bulma.zone_rr_title "Resource records", Bulma.subtitle "No records for now"]
|
resource_records [] _ _ _ = Web.box [Bulma.zone_rr_title "Resource records", Bulma.subtitle "No records for now"]
|
||||||
resource_records records action_create_or_update_rr action_delete_rr action_new_token
|
resource_records records action_create_or_update_rr action_delete_rr action_new_token
|
||||||
= HH.div_ $
|
= HH.div_ $
|
||||||
(rr_box [bg_color_ro] tag_soa soa_table_header table_content all_soa_rr)
|
(rr_box [bg_color_ro] tag_soa soa_table_header table_content all_soa_rr)
|
||||||
|
@ -143,7 +143,7 @@ resource_records records action_create_or_update_rr action_delete_rr action_new_
|
||||||
-> Array (HH.HTML w i)
|
-> Array (HH.HTML w i)
|
||||||
rr_box colors title header dp rrs =
|
rr_box colors title header dp rrs =
|
||||||
if A.length rrs > 0
|
if A.length rrs > 0
|
||||||
then [ Bulma.box_with_tag colors title [Web.table_ [C.margin_left 3] [] [header, dp rrs]] ]
|
then [ Web.box_with_tag colors title [Web.table_ [C.margin_left 3] [] [header, dp rrs]] ]
|
||||||
else []
|
else []
|
||||||
--title_col_props = C.is 1
|
--title_col_props = C.is 1
|
||||||
|
|
||||||
|
@ -176,96 +176,96 @@ resource_records records action_create_or_update_rr action_delete_rr action_new_
|
||||||
, HH.td_ [ HH.text $ maybe "" show rr.minttl ]
|
, HH.td_ [ HH.text $ maybe "" show rr.minttl ]
|
||||||
]
|
]
|
||||||
"SRV" ->
|
"SRV" ->
|
||||||
[ HH.td_ [ Bulma.p rr.name ]
|
[ HH.td_ [ Web.p rr.name ]
|
||||||
, HH.td_ [ Bulma.p $ maybe "tcp" show rr.protocol ]
|
, HH.td_ [ Web.p $ maybe "tcp" show rr.protocol ]
|
||||||
, HH.td_ [ Bulma.p rr.target ]
|
, HH.td_ [ Web.p rr.target ]
|
||||||
, HH.td_ [ Bulma.p $ maybe "" show rr.port ]
|
, HH.td_ [ Web.p $ maybe "" show rr.port ]
|
||||||
, HH.td_ [ Bulma.p $ show rr.ttl ]
|
, HH.td_ [ Web.p $ show rr.ttl ]
|
||||||
, HH.td_ [ Bulma.p $ maybe "" show rr.priority ]
|
, HH.td_ [ Web.p $ maybe "" show rr.priority ]
|
||||||
, HH.td_ [ Bulma.p $ maybe "" show rr.weight ]
|
, HH.td_ [ Web.p $ maybe "" show rr.weight ]
|
||||||
, if rr.readonly
|
, if rr.readonly
|
||||||
then HH.td_ [ Button.btn_readonly ]
|
then HH.td_ [ Button.btn_readonly ]
|
||||||
else HH.td_ [ Button.btn_modify (action_create_or_update_rr rr.rrid), Button.btn_delete (action_delete_rr rr.rrid) ]
|
else HH.td_ [ Button.btn_modify (action_create_or_update_rr rr.rrid), Button.btn_delete (action_delete_rr rr.rrid) ]
|
||||||
]
|
]
|
||||||
"CAA" ->
|
"CAA" ->
|
||||||
[ HH.td_ [ Bulma.p rr.name ]
|
[ HH.td_ [ Web.p rr.name ]
|
||||||
, HH.td_ [ Bulma.p $ show rr.ttl ]
|
, HH.td_ [ Web.p $ show rr.ttl ]
|
||||||
] <> case rr.caa of
|
] <> case rr.caa of
|
||||||
Just caa ->
|
Just caa ->
|
||||||
[ HH.td_ [ Bulma.p $ show caa.flag ]
|
[ HH.td_ [ Web.p $ show caa.flag ]
|
||||||
, HH.td_ [ Bulma.p $ show caa.tag ]
|
, HH.td_ [ Web.p $ show caa.tag ]
|
||||||
, HH.td_ [ Bulma.p caa.value ]
|
, HH.td_ [ Web.p caa.value ]
|
||||||
, if rr.readonly
|
, if rr.readonly
|
||||||
then HH.td_ [ Button.btn_readonly ]
|
then HH.td_ [ Button.btn_readonly ]
|
||||||
else HH.td_ [ Button.btn_modify (action_create_or_update_rr rr.rrid), Button.btn_delete (action_delete_rr rr.rrid) ]
|
else HH.td_ [ Button.btn_modify (action_create_or_update_rr rr.rrid), Button.btn_delete (action_delete_rr rr.rrid) ]
|
||||||
]
|
]
|
||||||
Nothing -> [Bulma.p "Problem: there is no CAA data." ]
|
Nothing -> [Web.p "Problem: there is no CAA data." ]
|
||||||
"SPF" ->
|
"SPF" ->
|
||||||
[ HH.td_ [ Bulma.p rr.name ]
|
[ HH.td_ [ Web.p rr.name ]
|
||||||
, HH.td_ [ Bulma.p $ show rr.ttl ]
|
, HH.td_ [ Web.p $ show rr.ttl ]
|
||||||
-- , HH.td_ [ Bulma.p $ maybe "(default)" id rr.v ] -- For now, version isn't displayed.
|
-- , HH.td_ [ Web.p $ maybe "(default)" id rr.v ] -- For now, version isn't displayed.
|
||||||
, HH.td_ [ Bulma.p $ maybe "" (A.fold <<< A.intersperse " " <<< map show_mechanism) rr.mechanisms ]
|
, HH.td_ [ Web.p $ maybe "" (A.fold <<< A.intersperse " " <<< map show_mechanism) rr.mechanisms ]
|
||||||
, HH.td_ [ Bulma.p $ maybe "" (A.fold <<< A.intersperse " " <<< map show_modifier) rr.modifiers ]
|
, HH.td_ [ Web.p $ maybe "" (A.fold <<< A.intersperse " " <<< map show_modifier) rr.modifiers ]
|
||||||
, HH.td_ [ Bulma.p $ maybe "" fancy_qualifier_display rr.q ]
|
, HH.td_ [ Web.p $ maybe "" fancy_qualifier_display rr.q ]
|
||||||
, if rr.readonly
|
, if rr.readonly
|
||||||
then HH.td_ [ Button.btn_readonly ]
|
then HH.td_ [ Button.btn_readonly ]
|
||||||
else HH.td_ [ Button.btn_modify (action_create_or_update_rr rr.rrid), Button.btn_delete (action_delete_rr rr.rrid) ]
|
else HH.td_ [ Button.btn_modify (action_create_or_update_rr rr.rrid), Button.btn_delete (action_delete_rr rr.rrid) ]
|
||||||
]
|
]
|
||||||
"DKIM" ->
|
"DKIM" ->
|
||||||
[ HH.td_ [ Bulma.p rr.name ]
|
[ HH.td_ [ Web.p rr.name ]
|
||||||
, HH.td_ [ Bulma.p $ show rr.ttl ]
|
, HH.td_ [ Web.p $ show rr.ttl ]
|
||||||
] <> case rr.dkim of
|
] <> case rr.dkim of
|
||||||
Just dkim ->
|
Just dkim ->
|
||||||
[
|
[
|
||||||
-- , HH.td_ [ Bulma.p $ maybe "(default)" id rr.v ] -- For now, version isn't displayed. Assume DKIM1.
|
-- , HH.td_ [ Web.p $ maybe "(default)" id rr.v ] -- For now, version isn't displayed. Assume DKIM1.
|
||||||
HH.td_ [ Bulma.p $ maybe "" show dkim.h ]
|
HH.td_ [ Web.p $ maybe "" show dkim.h ]
|
||||||
, HH.td_ [ Bulma.p $ maybe "" show dkim.k ]
|
, HH.td_ [ Web.p $ maybe "" show dkim.k ]
|
||||||
, HH.td_ [ Bulma.p $ CP.take 20 dkim.p ]
|
, HH.td_ [ Web.p $ CP.take 20 dkim.p ]
|
||||||
, HH.td_ [ Bulma.p $ fromMaybe "" dkim.n ]
|
, HH.td_ [ Web.p $ fromMaybe "" dkim.n ]
|
||||||
, if rr.readonly
|
, if rr.readonly
|
||||||
then HH.td_ [ Button.btn_readonly ]
|
then HH.td_ [ Button.btn_readonly ]
|
||||||
else HH.td_ [ Button.btn_modify (action_create_or_update_rr rr.rrid), Button.btn_delete (action_delete_rr rr.rrid) ]
|
else HH.td_ [ Button.btn_modify (action_create_or_update_rr rr.rrid), Button.btn_delete (action_delete_rr rr.rrid) ]
|
||||||
]
|
]
|
||||||
Nothing -> [Bulma.p "Problem: there is no DKIM data." ]
|
Nothing -> [Web.p "Problem: there is no DKIM data." ]
|
||||||
"DMARC" ->
|
"DMARC" ->
|
||||||
[ HH.td_ [ Bulma.p rr.name ]
|
[ HH.td_ [ Web.p rr.name ]
|
||||||
, HH.td_ [ Bulma.p $ show rr.ttl ]
|
, HH.td_ [ Web.p $ show rr.ttl ]
|
||||||
] <> case rr.dmarc of
|
] <> case rr.dmarc of
|
||||||
Just dmarc ->
|
Just dmarc ->
|
||||||
[
|
[
|
||||||
-- , HH.td_ [ Bulma.p $ maybe "(default)" id rr.v ] -- For now, version isn't displayed. Assume DMARC1.
|
-- , HH.td_ [ Web.p $ maybe "(default)" id rr.v ] -- For now, version isn't displayed. Assume DMARC1.
|
||||||
HH.td_ [ Bulma.p $ show dmarc.p ]
|
HH.td_ [ Web.p $ show dmarc.p ]
|
||||||
, HH.td_ [ Bulma.p $ maybe "" show dmarc.sp ]
|
, HH.td_ [ Web.p $ maybe "" show dmarc.sp ]
|
||||||
, HH.td_ [ Bulma.p $ maybe "" show dmarc.adkim ]
|
, HH.td_ [ Web.p $ maybe "" show dmarc.adkim ]
|
||||||
, HH.td_ [ Bulma.p $ maybe "" show dmarc.aspf ]
|
, HH.td_ [ Web.p $ maybe "" show dmarc.aspf ]
|
||||||
, HH.td_ [ Bulma.p $ maybe "" show dmarc.pct ]
|
, HH.td_ [ Web.p $ maybe "" show dmarc.pct ]
|
||||||
, HH.td_ [ Bulma.p $ maybe "" show dmarc.fo ]
|
, HH.td_ [ Web.p $ maybe "" show dmarc.fo ]
|
||||||
, HH.td_ [ Bulma.p $ maybe "" show dmarc.ri ]
|
, HH.td_ [ Web.p $ maybe "" show dmarc.ri ]
|
||||||
-- TODO? rua & ruf
|
-- TODO? rua & ruf
|
||||||
-- , HH.td_ [ ] -- For now, assume AFRF.
|
-- , HH.td_ [ ] -- For now, assume AFRF.
|
||||||
, if rr.readonly
|
, if rr.readonly
|
||||||
then HH.td_ [ Button.btn_readonly ]
|
then HH.td_ [ Button.btn_readonly ]
|
||||||
else HH.td_ [ Button.btn_modify (action_create_or_update_rr rr.rrid), Button.btn_delete (action_delete_rr rr.rrid) ]
|
else HH.td_ [ Button.btn_modify (action_create_or_update_rr rr.rrid), Button.btn_delete (action_delete_rr rr.rrid) ]
|
||||||
]
|
]
|
||||||
Nothing -> [Bulma.p "Problem: there is no DMARC data." ]
|
Nothing -> [Web.p "Problem: there is no DMARC data." ]
|
||||||
"MX" ->
|
"MX" ->
|
||||||
[ HH.td_ [ Bulma.p rr.name ]
|
[ HH.td_ [ Web.p rr.name ]
|
||||||
, HH.td_ [ Bulma.p $ show rr.ttl ]
|
, HH.td_ [ Web.p $ show rr.ttl ]
|
||||||
, HH.td_ [ Bulma.p $ maybe "" show rr.priority ]
|
, HH.td_ [ Web.p $ maybe "" show rr.priority ]
|
||||||
, HH.td_ [ Bulma.p rr.target ]
|
, HH.td_ [ Web.p rr.target ]
|
||||||
, if rr.readonly
|
, if rr.readonly
|
||||||
then HH.td_ [ Button.btn_readonly ]
|
then HH.td_ [ Button.btn_readonly ]
|
||||||
else HH.td_ [ Button.btn_modify (action_create_or_update_rr rr.rrid), Button.btn_delete (action_delete_rr rr.rrid) ]
|
else HH.td_ [ Button.btn_modify (action_create_or_update_rr rr.rrid), Button.btn_delete (action_delete_rr rr.rrid) ]
|
||||||
]
|
]
|
||||||
_ ->
|
_ ->
|
||||||
[ txt_name rr.rrtype
|
[ txt_name rr.rrtype
|
||||||
, HH.td_ [ Bulma.p rr.name ]
|
, HH.td_ [ Web.p rr.name ]
|
||||||
, HH.td_ [ Bulma.p $ show rr.ttl ]
|
, HH.td_ [ Web.p $ show rr.ttl ]
|
||||||
, HH.td_ [ Bulma.p rr.target ]
|
, HH.td_ [ Web.p rr.target ]
|
||||||
] <> if rr.readonly
|
] <> if rr.readonly
|
||||||
then [ HH.td_ [ Button.btn_readonly ] ]
|
then [ HH.td_ [ Button.btn_readonly ] ]
|
||||||
else [ HH.td_ [ Button.btn_modify (action_create_or_update_rr rr.rrid), Button.btn_delete (action_delete_rr rr.rrid) ]
|
else [ HH.td_ [ Button.btn_modify (action_create_or_update_rr rr.rrid), Button.btn_delete (action_delete_rr rr.rrid) ]
|
||||||
, HH.td_ [ maybe (show_token_or_btn rr) Bulma.p rr.token ]
|
, HH.td_ [ maybe (show_token_or_btn rr) Web.p rr.token ]
|
||||||
]
|
]
|
||||||
|
|
||||||
show_token_or_btn rr =
|
show_token_or_btn rr =
|
||||||
|
|
174
src/Bulma.purs
174
src/Bulma.purs
|
@ -15,20 +15,6 @@ import Halogen.HTML.Core (AttrName(..))
|
||||||
outside_link :: forall w i. Array HH.ClassName -> String -> String -> HH.HTML w i
|
outside_link :: forall w i. Array HH.ClassName -> String -> String -> HH.HTML w i
|
||||||
outside_link classes url title = HH.a [ HP.classes classes, HP.target "_blank", HP.href url ] [ HH.text title ]
|
outside_link classes url title = HH.a [ HP.classes classes, HP.target "_blank", HP.href url ] [ HH.text title ]
|
||||||
|
|
||||||
columns :: forall (w :: Type) (i :: Type).
|
|
||||||
Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
columns classes = HH.div [ HP.classes ([C.columns] <> classes) ]
|
|
||||||
|
|
||||||
columns_ :: forall (w :: Type) (i :: Type). Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
columns_ = columns []
|
|
||||||
|
|
||||||
column :: forall (w :: Type) (i :: Type).
|
|
||||||
Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
column classes = HH.div [ HP.classes ([C.column] <> classes) ]
|
|
||||||
|
|
||||||
column_ :: forall (w :: Type) (i :: Type). Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
column_ = column []
|
|
||||||
|
|
||||||
zone_rr_title :: forall (w :: Type) (a :: Type). String -> HH.HTML w a
|
zone_rr_title :: forall (w :: Type) (a :: Type). String -> HH.HTML w a
|
||||||
zone_rr_title title
|
zone_rr_title title
|
||||||
= HH.h3 [ HP.classes [C.title, C.has_text_light, C.has_background_dark] ]
|
= HH.h3 [ HP.classes [C.title, C.has_text_light, C.has_background_dark] ]
|
||||||
|
@ -37,27 +23,6 @@ zone_rr_title title
|
||||||
subtitle :: forall (w :: Type) (a :: Type). String -> HH.HTML w a
|
subtitle :: forall (w :: Type) (a :: Type). String -> HH.HTML w a
|
||||||
subtitle title = HH.h2 [ HP.classes [C.subtitle, C.is4] ] [ HH.text title ]
|
subtitle title = HH.h2 [ HP.classes [C.subtitle, C.is4] ] [ HH.text title ]
|
||||||
|
|
||||||
hdiv :: forall (w :: Type) (a :: Type). Array (HH.HTML w a) -> HH.HTML w a
|
|
||||||
hdiv = HH.div [ HP.classes [HH.ClassName "mt-5"] ]
|
|
||||||
|
|
||||||
--offcolumn :: forall (w :: Type) (a :: Type).
|
|
||||||
-- Int -> Int -> Array (HH.HTML w a) -> HH.HTML w a
|
|
||||||
--offcolumn 0 size = HH.div [ HP.classes [HH.ClassName ("mt-"<>show size)] ]
|
|
||||||
--offcolumn offset size
|
|
||||||
-- = column [ HH.ClassName ("is-offset-" <> (show offset) <> " is-" <> (show size)) ]
|
|
||||||
|
|
||||||
textarea_ :: forall w i. Array HH.ClassName -> String -> String -> (String -> i) -> HH.HTML w i
|
|
||||||
textarea_ classes placeholder value action
|
|
||||||
= HH.textarea
|
|
||||||
[ HE.onValueInput action
|
|
||||||
, HP.value value
|
|
||||||
, HP.placeholder placeholder
|
|
||||||
, HP.classes $ [C.textarea] <> classes
|
|
||||||
]
|
|
||||||
|
|
||||||
textarea :: forall w i. String -> String -> (String -> i) -> HH.HTML w i
|
|
||||||
textarea placeholder value action = textarea_ [] placeholder value action
|
|
||||||
|
|
||||||
-- | Create a `level`, different components that should appear on the same horizontal line.
|
-- | Create a `level`, different components that should appear on the same horizontal line.
|
||||||
-- | First argument, elements that should appear on the left, second on the right.
|
-- | First argument, elements that should appear on the left, second on the right.
|
||||||
level :: forall w i. Array (HH.HTML w i) -> Array (HH.HTML w i) -> HH.HTML w i
|
level :: forall w i. Array (HH.HTML w i) -> Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
@ -73,75 +38,9 @@ section_small = HH.section [ HP.classes [C.section, C.is_small] ]
|
||||||
section_medium :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
section_medium :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
||||||
section_medium = HH.section [ HP.classes [C.section, C.medium] ]
|
section_medium = HH.section [ HP.classes [C.section, C.medium] ]
|
||||||
|
|
||||||
box :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
box = HH.div [HP.classes [C.box]]
|
|
||||||
|
|
||||||
box_ :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
box_ classes = HH.div [HP.classes $ [C.box] <> classes]
|
|
||||||
|
|
||||||
hero :: forall w i. String -> String -> HH.HTML w i
|
|
||||||
hero _title _subtitle
|
|
||||||
= HH.section [ HP.classes [C.hero, C.is_info, C.is_small] ]
|
|
||||||
[ HH.div [ HP.classes [C.hero_body] ]
|
|
||||||
[ HH.p [ HP.classes [C.title] ] [ HH.text _title ]
|
|
||||||
, HH.p [ HP.classes [C.subtitle] ] [ HH.text _subtitle ]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
|
|
||||||
small_hero :: forall w i. String -> String -> HH.HTML w i
|
|
||||||
small_hero _title _subtitle =
|
|
||||||
HH.section [ HP.classes [C.hero, C.is_info, C.is_small] ]
|
|
||||||
[ HH.div [ HP.classes [C.hero_body] ]
|
|
||||||
[ HH.div [ HP.classes [C.container, C.has_text_centered] ]
|
|
||||||
[ HH.p [ HP.classes [C.title] ] [ HH.text _title ]
|
|
||||||
, HH.p [ HP.classes [C.subtitle] ] [ HH.text _subtitle ]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
|
|
||||||
hero_danger_txt :: forall w i. String -> String -> HH.HTML w i
|
|
||||||
hero_danger_txt _title _subtitle
|
|
||||||
= hero_danger [ HH.text _title ] [ HH.text _subtitle ]
|
|
||||||
|
|
||||||
hero_danger :: forall w i. Array (HH.HTML w i) -> Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
hero_danger _title _subtitle
|
|
||||||
= HH.section [ HP.classes [C.hero, C.is_danger, C.is_small] ]
|
|
||||||
[ HH.div [ HP.classes [C.hero_body] ]
|
|
||||||
[ HH.p [ HP.classes [C.title] ] _title
|
|
||||||
, HH.p [ HP.classes [C.subtitle] ] _subtitle
|
|
||||||
]
|
|
||||||
]
|
|
||||||
|
|
||||||
header :: forall w i. String -> String -> HH.HTML w i
|
|
||||||
header = hero
|
|
||||||
|
|
||||||
container :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
container = HH.div [HP.classes [C.container, C.is_info]]
|
|
||||||
|
|
||||||
data_target :: forall r i. String -> HP.IProp r i
|
data_target :: forall r i. String -> HP.IProp r i
|
||||||
data_target = HP.attr (AttrName "data-target")
|
data_target = HP.attr (AttrName "data-target")
|
||||||
|
|
||||||
modal_ :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
modal_ = HH.div [HP.classes [C.modal, C.is_active]]
|
|
||||||
modal_background :: forall w i. HH.HTML w i
|
|
||||||
modal_background = HH.div [HP.classes [C.modal_background]] []
|
|
||||||
modal_card_large :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
modal_card_large = HH.div [HP.classes [C.modal_card, C.is_large]]
|
|
||||||
modal_header :: forall w i. String -> HH.HTML w i
|
|
||||||
modal_header title = HH.header [HP.classes [C.modal_card_head]]
|
|
||||||
[ HH.p [HP.classes [C.modal_card_title]] [HH.text title]
|
|
||||||
]
|
|
||||||
modal_body :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
modal_body = HH.section [HP.classes [C.modal_card_body]]
|
|
||||||
modal_foot :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
modal_foot = HH.div [HP.classes [C.modal_card_foot]]
|
|
||||||
|
|
||||||
cancel_button :: forall w i. i -> HH.HTML w i
|
|
||||||
cancel_button action
|
|
||||||
= HH.button [ HP.classes [C.button]
|
|
||||||
, HE.onClick \_ -> action
|
|
||||||
] [HH.text "Cancel"]
|
|
||||||
|
|
||||||
tile :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
|
tile :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
|
||||||
tile classes = HH.div [HP.classes ([C.tile] <> classes)]
|
tile classes = HH.div [HP.classes ([C.tile] <> classes)]
|
||||||
|
|
||||||
|
@ -154,78 +53,5 @@ tile_danger classes = tile $ [C.is_danger, C.notification] <> classes
|
||||||
tile_warning :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
|
tile_warning :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
|
||||||
tile_warning classes = tile $ [C.is_warning, C.notification] <> classes
|
tile_warning classes = tile $ [C.is_warning, C.notification] <> classes
|
||||||
|
|
||||||
article_ :: forall w i. Array HH.ClassName -> HH.HTML w i -> HH.HTML w i -> HH.HTML w i
|
|
||||||
article_ classes head body = HH.article [HP.classes $ [C.message] <> classes]
|
|
||||||
[ HH.div [HP.classes [C.message_header]] [head]
|
|
||||||
, HH.div [HP.classes [C.message_body] ] [body]
|
|
||||||
]
|
|
||||||
|
|
||||||
article :: forall w i. HH.HTML w i -> HH.HTML w i -> HH.HTML w i
|
|
||||||
article head body = article_ [] head body
|
|
||||||
|
|
||||||
error_message :: forall w i. HH.HTML w i -> HH.HTML w i -> HH.HTML w i
|
|
||||||
error_message head body = article_ [C.is_danger] head body
|
|
||||||
|
|
||||||
-- | `modal`: create a modal by providing a few things:
|
|
||||||
-- | - a title (a simple String)
|
|
||||||
-- | - a body (`HTML` content)
|
|
||||||
-- | - a footer (`HTML` content)
|
|
||||||
modal :: forall w i. String -> Array (HH.HTML w i) -> Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
modal title body foot =
|
|
||||||
modal_
|
|
||||||
[ modal_background
|
|
||||||
, modal_card_large [modal_header title, modal_body body]
|
|
||||||
, modal_foot foot
|
|
||||||
]
|
|
||||||
|
|
||||||
tag_light_info :: forall w i. String -> HH.HTML w i
|
tag_light_info :: forall w i. String -> HH.HTML w i
|
||||||
tag_light_info str = HH.span [HP.classes [C.tag, C.is_info, C.is_light]] [HH.text str]
|
tag_light_info str = HH.span [HP.classes [C.tag, C.is_info, C.is_light]] [HH.text str]
|
||||||
|
|
||||||
div_large_content :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
div_large_content content = HH.div [HP.classes [C.is_large, C.content]] content
|
|
||||||
|
|
||||||
div_content :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
div_content classes content = HH.div [HP.classes ([C.content] <> classes)] content
|
|
||||||
|
|
||||||
explanation :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
explanation content = HH.blockquote [HP.classes [HH.ClassName "justified"]] content
|
|
||||||
|
|
||||||
quote :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
quote content = div_content [] [ explanation content ]
|
|
||||||
|
|
||||||
simple_quote :: forall w i. String -> HH.HTML w i
|
|
||||||
simple_quote content = quote [ p content ]
|
|
||||||
|
|
||||||
-- | Box with tags.
|
|
||||||
-- |```
|
|
||||||
-- |box_with_tag [C.has_background_danger_light] some_tag [Bulma.p "Hello"]
|
|
||||||
-- |```
|
|
||||||
box_with_tag :: forall w action.
|
|
||||||
Array HH.ClassName -- css classes (like the color)
|
|
||||||
-> HH.HTML w action -- tag (title for the box)
|
|
||||||
-> Array (HH.HTML w action) -- box content
|
|
||||||
-> HH.HTML w action
|
|
||||||
box_with_tag colors tag xs
|
|
||||||
= box_
|
|
||||||
([C.no_padding_left, C.no_padding_top] <> colors)
|
|
||||||
[tag, HH.div [HP.classes [C.restore_padding_left, C.restore_padding_top]] xs]
|
|
||||||
|
|
||||||
-- GENERIC HTML API
|
|
||||||
|
|
||||||
code :: forall w i. String -> HH.HTML w i
|
|
||||||
code str = HH.code_ [ HH.text str ]
|
|
||||||
|
|
||||||
text :: forall w i. String -> HH.HTML w i
|
|
||||||
text = HH.text
|
|
||||||
|
|
||||||
p :: forall w i. String -> HH.HTML w i
|
|
||||||
p str = HH.p_ [ HH.text str ]
|
|
||||||
|
|
||||||
p_ :: forall w i. Array HH.ClassName -> String -> HH.HTML w i
|
|
||||||
p_ classes str = HH.p [HP.classes classes] [ HH.text str ]
|
|
||||||
|
|
||||||
strong :: forall w i. String -> HH.HTML w i
|
|
||||||
strong str = HH.strong_ [ HH.text str ]
|
|
||||||
|
|
||||||
hr :: forall w i. HH.HTML w i
|
|
||||||
hr = HH.hr_
|
|
||||||
|
|
14
src/Web.purs
14
src/Web.purs
|
@ -2,22 +2,32 @@
|
||||||
-- | to have a consistent style through all the website.
|
-- | to have a consistent style through all the website.
|
||||||
module Web
|
module Web
|
||||||
( module Bulma
|
( module Bulma
|
||||||
|
, module Web.Basics
|
||||||
|
, module Web.Box
|
||||||
, module Web.Button
|
, module Web.Button
|
||||||
, module Web.Checkbox
|
, module Web.Checkbox
|
||||||
|
, module Web.Column
|
||||||
, module Web.Field
|
, module Web.Field
|
||||||
, module Web.Header
|
, module Web.Header
|
||||||
|
, module Web.Hero
|
||||||
, module Web.Input
|
, module Web.Input
|
||||||
|
, module Web.Modal
|
||||||
, module Web.Notification
|
, module Web.Notification
|
||||||
, module Web.Table
|
|
||||||
, module Web.Tab
|
, module Web.Tab
|
||||||
|
, module Web.Table
|
||||||
, module Web.Tag
|
, module Web.Tag
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Web.Button (alert_btn, alert_btn_abbr, btn, btn_, btn_abbr, btn_abbr_, btn_add, btn_delete, btn_delete_ro, btn_modify, btn_modify_ro, btn_readonly, btn_ro, btn_save, btn_validation, btn_validation_, delete_btn)
|
import Web.Basics
|
||||||
|
import Web.Box
|
||||||
|
import Web.Button (alert_btn, alert_btn_abbr, btn, btn_, btn_abbr, btn_abbr_, btn_add, btn_delete, btn_delete_ro, btn_modify, btn_modify_ro, btn_readonly, btn_ro, btn_save, btn_validation, btn_validation_, cancel_button, delete_btn)
|
||||||
import Web.Checkbox (checkbox)
|
import Web.Checkbox (checkbox)
|
||||||
|
import Web.Column (column, column_, columns, columns_)
|
||||||
import Web.Field (btn_labeled, div_field, div_field_, div_field_content, div_field_label, error_field_entry, field_entry, new_domain_field, option, select, selection, selection', selection_field, selection_field', selection_field'', side_text_above_input)
|
import Web.Field (btn_labeled, div_field, div_field_, div_field_content, div_field_label, error_field_entry, field_entry, new_domain_field, option, select, selection, selection', selection_field, selection_field', selection_field'', side_text_above_input)
|
||||||
import Web.Header (h1, h3, h4)
|
import Web.Header (h1, h3, h4)
|
||||||
|
import Web.Hero (hero, hero_danger, hero_danger_txt, small_hero)
|
||||||
import Web.Input (box_input, box_input_, box_password, box_password_, email_input, field_inner, input_classes, input_with_side_text, password_input, password_input_confirmation, password_input_new, render_input, token_input, username_input)
|
import Web.Input (box_input, box_input_, box_password, box_password_, email_input, field_inner, input_classes, input_with_side_text, password_input, password_input_confirmation, password_input_new, render_input, token_input, username_input)
|
||||||
|
import Web.Modal (modal, modal_, modal_background, modal_body, modal_card_large, modal_foot, modal_header)
|
||||||
import Web.Notification (error_box, notification, notification', notification_block', notification_danger, notification_danger', notification_danger_block', notification_primary, notification_primary', notification_success, notification_warning, notification_warning')
|
import Web.Notification (error_box, notification, notification', notification_block', notification_danger, notification_danger', notification_danger_block', notification_primary, notification_primary', notification_success, notification_warning, notification_warning')
|
||||||
import Web.Table (table, table_)
|
import Web.Table (table, table_)
|
||||||
import Web.Tab (fancy_tabs, tab_entry, tabs)
|
import Web.Tab (fancy_tabs, tab_entry, tabs)
|
||||||
|
|
72
src/Web/Basics.purs
Normal file
72
src/Web/Basics.purs
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
module Web.Basics where
|
||||||
|
|
||||||
|
import Prelude (($), (<>))
|
||||||
|
|
||||||
|
import Halogen.HTML as HH
|
||||||
|
import Halogen.HTML.Events as HE
|
||||||
|
import Halogen.HTML.Properties as HP
|
||||||
|
|
||||||
|
import CSSClasses as C
|
||||||
|
|
||||||
|
code :: forall w i. String -> HH.HTML w i
|
||||||
|
code str = HH.code_ [ HH.text str ]
|
||||||
|
|
||||||
|
text :: forall w i. String -> HH.HTML w i
|
||||||
|
text = HH.text
|
||||||
|
|
||||||
|
p :: forall w i. String -> HH.HTML w i
|
||||||
|
p str = HH.p_ [ HH.text str ]
|
||||||
|
|
||||||
|
p_ :: forall w i. Array HH.ClassName -> String -> HH.HTML w i
|
||||||
|
p_ classes str = HH.p [HP.classes classes] [ HH.text str ]
|
||||||
|
|
||||||
|
strong :: forall w i. String -> HH.HTML w i
|
||||||
|
strong str = HH.strong_ [ HH.text str ]
|
||||||
|
|
||||||
|
hr :: forall w i. HH.HTML w i
|
||||||
|
hr = HH.hr_
|
||||||
|
|
||||||
|
div_large_content :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
div_large_content content = HH.div [HP.classes [C.is_large, C.content]] content
|
||||||
|
|
||||||
|
div_content :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
div_content classes content = HH.div [HP.classes ([C.content] <> classes)] content
|
||||||
|
|
||||||
|
explanation :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
explanation content = HH.blockquote [HP.classes [HH.ClassName "justified"]] content
|
||||||
|
|
||||||
|
quote :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
quote content = div_content [] [ explanation content ]
|
||||||
|
|
||||||
|
simple_quote :: forall w i. String -> HH.HTML w i
|
||||||
|
simple_quote content = quote [ p content ]
|
||||||
|
|
||||||
|
article_ :: forall w i. Array HH.ClassName -> HH.HTML w i -> HH.HTML w i -> HH.HTML w i
|
||||||
|
article_ classes head body = HH.article [HP.classes $ [C.message] <> classes]
|
||||||
|
[ HH.div [HP.classes [C.message_header]] [head]
|
||||||
|
, HH.div [HP.classes [C.message_body] ] [body]
|
||||||
|
]
|
||||||
|
|
||||||
|
article :: forall w i. HH.HTML w i -> HH.HTML w i -> HH.HTML w i
|
||||||
|
article head body = article_ [] head body
|
||||||
|
|
||||||
|
container :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
container = HH.div [HP.classes [C.container, C.is_info]]
|
||||||
|
|
||||||
|
hdiv :: forall (w :: Type) (a :: Type). Array (HH.HTML w a) -> HH.HTML w a
|
||||||
|
hdiv = HH.div [ HP.classes [HH.ClassName "mt-5"] ]
|
||||||
|
|
||||||
|
error_message :: forall w i. HH.HTML w i -> HH.HTML w i -> HH.HTML w i
|
||||||
|
error_message head body = article_ [C.is_danger] head body
|
||||||
|
|
||||||
|
textarea_ :: forall w i. Array HH.ClassName -> String -> String -> (String -> i) -> HH.HTML w i
|
||||||
|
textarea_ classes placeholder value action
|
||||||
|
= HH.textarea
|
||||||
|
[ HE.onValueInput action
|
||||||
|
, HP.value value
|
||||||
|
, HP.placeholder placeholder
|
||||||
|
, HP.classes $ [C.textarea] <> classes
|
||||||
|
]
|
||||||
|
|
||||||
|
textarea :: forall w i. String -> String -> (String -> i) -> HH.HTML w i
|
||||||
|
textarea placeholder value action = textarea_ [] placeholder value action
|
28
src/Web/Box.purs
Normal file
28
src/Web/Box.purs
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
module Web.Box where
|
||||||
|
|
||||||
|
import Prelude
|
||||||
|
|
||||||
|
import Halogen.HTML as HH
|
||||||
|
import Halogen.HTML.Properties as HP
|
||||||
|
|
||||||
|
import CSSClasses as C
|
||||||
|
|
||||||
|
box :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
box = HH.div [HP.classes [C.box]]
|
||||||
|
|
||||||
|
box_ :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
box_ classes = HH.div [HP.classes $ [C.box] <> classes]
|
||||||
|
|
||||||
|
-- | Box with tags.
|
||||||
|
-- |```
|
||||||
|
-- |box_with_tag [C.has_background_danger_light] some_tag [Bulma.p "Hello"]
|
||||||
|
-- |```
|
||||||
|
box_with_tag :: forall w action.
|
||||||
|
Array HH.ClassName -- css classes (like the color)
|
||||||
|
-> HH.HTML w action -- tag (title for the box)
|
||||||
|
-> Array (HH.HTML w action) -- box content
|
||||||
|
-> HH.HTML w action
|
||||||
|
box_with_tag colors tag xs
|
||||||
|
= box_
|
||||||
|
([C.no_padding_left, C.no_padding_top] <> colors)
|
||||||
|
[tag, HH.div [HP.classes [C.restore_padding_left, C.restore_padding_top]] xs]
|
|
@ -15,6 +15,7 @@ module Web.Button
|
||||||
, btn_save
|
, btn_save
|
||||||
, btn_validation
|
, btn_validation
|
||||||
, btn_validation_
|
, btn_validation_
|
||||||
|
, cancel_button
|
||||||
, delete_btn
|
, delete_btn
|
||||||
) where
|
) where
|
||||||
|
|
||||||
|
@ -97,3 +98,9 @@ alert_btn title action = btn_ [C.is_danger] title action
|
||||||
|
|
||||||
delete_btn :: forall w i. i -> HH.HTML w i
|
delete_btn :: forall w i. i -> HH.HTML w i
|
||||||
delete_btn action = HH.button [HE.onClick \_ -> action, HP.classes [C.delete]] []
|
delete_btn action = HH.button [HE.onClick \_ -> action, HP.classes [C.delete]] []
|
||||||
|
|
||||||
|
cancel_button :: forall w i. i -> HH.HTML w i
|
||||||
|
cancel_button action
|
||||||
|
= HH.button [ HP.classes [C.button]
|
||||||
|
, HE.onClick \_ -> action
|
||||||
|
] [HH.text "Cancel"]
|
||||||
|
|
28
src/Web/Column.purs
Normal file
28
src/Web/Column.purs
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
module Web.Column where
|
||||||
|
|
||||||
|
import Prelude ((<>))
|
||||||
|
|
||||||
|
import Halogen.HTML as HH
|
||||||
|
import Halogen.HTML.Properties as HP
|
||||||
|
|
||||||
|
import CSSClasses as C
|
||||||
|
|
||||||
|
columns :: forall (w :: Type) (i :: Type).
|
||||||
|
Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
columns classes = HH.div [ HP.classes ([C.columns] <> classes) ]
|
||||||
|
|
||||||
|
columns_ :: forall (w :: Type) (i :: Type). Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
columns_ = columns []
|
||||||
|
|
||||||
|
column :: forall (w :: Type) (i :: Type).
|
||||||
|
Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
column classes = HH.div [ HP.classes ([C.column] <> classes) ]
|
||||||
|
|
||||||
|
column_ :: forall (w :: Type) (i :: Type). Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
column_ = column []
|
||||||
|
|
||||||
|
--offcolumn :: forall (w :: Type) (a :: Type).
|
||||||
|
-- Int -> Int -> Array (HH.HTML w a) -> HH.HTML w a
|
||||||
|
--offcolumn 0 size = HH.div [ HP.classes [HH.ClassName ("mt-"<>show size)] ]
|
||||||
|
--offcolumn offset size
|
||||||
|
-- = column [ HH.ClassName ("is-offset-" <> (show offset) <> " is-" <> (show size)) ]
|
39
src/Web/Hero.purs
Normal file
39
src/Web/Hero.purs
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
module Web.Hero where
|
||||||
|
|
||||||
|
import Halogen.HTML as HH
|
||||||
|
import Halogen.HTML.Properties as HP
|
||||||
|
|
||||||
|
import CSSClasses as C
|
||||||
|
|
||||||
|
hero :: forall w i. String -> String -> HH.HTML w i
|
||||||
|
hero _title _subtitle
|
||||||
|
= HH.section [ HP.classes [C.hero, C.is_info, C.is_small] ]
|
||||||
|
[ HH.div [ HP.classes [C.hero_body] ]
|
||||||
|
[ HH.p [ HP.classes [C.title] ] [ HH.text _title ]
|
||||||
|
, HH.p [ HP.classes [C.subtitle] ] [ HH.text _subtitle ]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
small_hero :: forall w i. String -> String -> HH.HTML w i
|
||||||
|
small_hero _title _subtitle =
|
||||||
|
HH.section [ HP.classes [C.hero, C.is_info, C.is_small] ]
|
||||||
|
[ HH.div [ HP.classes [C.hero_body] ]
|
||||||
|
[ HH.div [ HP.classes [C.container, C.has_text_centered] ]
|
||||||
|
[ HH.p [ HP.classes [C.title] ] [ HH.text _title ]
|
||||||
|
, HH.p [ HP.classes [C.subtitle] ] [ HH.text _subtitle ]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
hero_danger_txt :: forall w i. String -> String -> HH.HTML w i
|
||||||
|
hero_danger_txt _title _subtitle
|
||||||
|
= hero_danger [ HH.text _title ] [ HH.text _subtitle ]
|
||||||
|
|
||||||
|
hero_danger :: forall w i. Array (HH.HTML w i) -> Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
hero_danger _title _subtitle
|
||||||
|
= HH.section [ HP.classes [C.hero, C.is_danger, C.is_small] ]
|
||||||
|
[ HH.div [ HP.classes [C.hero_body] ]
|
||||||
|
[ HH.p [ HP.classes [C.title] ] _title
|
||||||
|
, HH.p [ HP.classes [C.subtitle] ] _subtitle
|
||||||
|
]
|
||||||
|
]
|
38
src/Web/Modal.purs
Normal file
38
src/Web/Modal.purs
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
module Web.Modal where
|
||||||
|
|
||||||
|
import CSSClasses as C
|
||||||
|
|
||||||
|
import Halogen.HTML as HH
|
||||||
|
import Halogen.HTML.Properties as HP
|
||||||
|
|
||||||
|
modal_background :: forall w i. HH.HTML w i
|
||||||
|
modal_background = HH.div [HP.classes [C.modal_background]] []
|
||||||
|
|
||||||
|
modal_card_large :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
modal_card_large = HH.div [HP.classes [C.modal_card, C.is_large]]
|
||||||
|
|
||||||
|
modal_header :: forall w i. String -> HH.HTML w i
|
||||||
|
modal_header title = HH.header [HP.classes [C.modal_card_head]]
|
||||||
|
[ HH.p [HP.classes [C.modal_card_title]] [HH.text title]
|
||||||
|
]
|
||||||
|
|
||||||
|
modal_body :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
modal_body = HH.section [HP.classes [C.modal_card_body]]
|
||||||
|
|
||||||
|
modal_foot :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
modal_foot = HH.div [HP.classes [C.modal_card_foot]]
|
||||||
|
|
||||||
|
-- | `modal`: create a modal by providing a few things:
|
||||||
|
-- | - a title (a simple String)
|
||||||
|
-- | - a body (`HTML` content)
|
||||||
|
-- | - a footer (`HTML` content)
|
||||||
|
modal :: forall w i. String -> Array (HH.HTML w i) -> Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
modal title body foot =
|
||||||
|
modal_
|
||||||
|
[ modal_background
|
||||||
|
, modal_card_large [modal_header title, modal_body body]
|
||||||
|
, modal_foot foot
|
||||||
|
]
|
||||||
|
|
||||||
|
modal_ :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
||||||
|
modal_ = HH.div [HP.classes [C.modal, C.is_active]]
|
Loading…
Add table
Reference in a new issue