Major refactoring to make CSS classes not arrays anymore.

beta
Philippe Pittoli 2024-11-16 04:54:48 +01:00
parent 24770b75d6
commit a349c6463d
12 changed files with 309 additions and 302 deletions

View File

@ -291,7 +291,7 @@ render state
reconnection_bar = reconnection_bar =
if (state.are_we_connected_to_authd && state.are_we_connected_to_dnsmanagerd) if (state.are_we_connected_to_authd && state.are_we_connected_to_dnsmanagerd)
then HH.div_ [] then HH.div_ []
else Bulma.btn_ (C.is_large <> C.is_danger) "You have been disconnected. Click here to reconnect." Reconnection else Bulma.btn_ [C.is_large, C.is_danger] "You have been disconnected. Click here to reconnect." Reconnection
render_auth_WS :: forall monad. MonadAff monad => H.ComponentHTML Action ChildSlots monad render_auth_WS :: forall monad. MonadAff monad => H.ComponentHTML Action ChildSlots monad
render_auth_WS = HH.slot _ws_auth unit WS.component (Tuple "ws://127.0.0.1:8080" "authd") AuthenticationDaemonEvent render_auth_WS = HH.slot _ws_auth unit WS.component (Tuple "ws://127.0.0.1:8080" "authd") AuthenticationDaemonEvent
@ -326,7 +326,7 @@ render state
render_legal_notice :: forall monad. MonadAff monad => H.ComponentHTML Action ChildSlots monad render_legal_notice :: forall monad. MonadAff monad => H.ComponentHTML Action ChildSlots monad
render_legal_notice render_legal_notice
= Bulma.section_small [ Explanations.legal_notice = Bulma.section_small [ Explanations.legal_notice
, Bulma.btn_ (C.is_large <> C.margin_top 3 <> C.is_info) "Home page" (Routing Home) , Bulma.btn_ [C.is_large, C.margin_top 3, C.is_info] "Home page" (Routing Home)
] ]
render_nav :: forall monad. MonadAff monad => H.ComponentHTML Action ChildSlots monad render_nav :: forall monad. MonadAff monad => H.ComponentHTML Action ChildSlots monad
@ -334,10 +334,10 @@ render state
render_header :: forall monad. MonadAff monad => H.ComponentHTML Action ChildSlots monad render_header :: forall monad. MonadAff monad => H.ComponentHTML Action ChildSlots monad
render_header = render_header =
HH.section [ HP.classes (C.hero <> C.is_info <> C.is_small) ] HH.section [ HP.classes [C.hero, C.is_info, C.is_small] ]
[ HH.div [ HP.classes C.hero_body ] [ HH.div [ HP.classes [C.hero_body] ]
[ HH.div [ HP.classes $ C.container <> C.has_text_centered ] [ HH.div [ HP.classes [C.container, C.has_text_centered] ]
[ HH.p [ HP.classes C.subtitle ] [ HH.p [ HP.classes [C.subtitle] ]
[ HH.strong_ [ HH.u_ [ HH.text "net libre" ]] [ HH.strong_ [ HH.u_ [ HH.text "net libre" ]]
, HH.text ": providing free domains since 2015!" , HH.text ": providing free domains since 2015!"
] ]

View File

@ -133,13 +133,13 @@ render { addUserForm, searchUserForm, matching_users, current_tab, orphan_domain
, case current_tab of , case current_tab of
Home -> Bulma.h3 "Select an action" Home -> Bulma.h3 "Select an action"
Search -> Bulma.columns_ Search -> Bulma.columns_
[ Bulma.column (C.is 3) [Bulma.article (Bulma.p "Search users") render_searchuser_form] [ Bulma.column [C.is 3] [Bulma.article (Bulma.p "Search users") render_searchuser_form]
, Bulma.column_ [ Bulma.h3 "Result", show_found_users ] , Bulma.column_ [ Bulma.h3 "Result", show_found_users ]
] ]
Add -> Bulma.columns_ Add -> Bulma.columns_
[ Bulma.column (C.is 5) [Bulma.article (Bulma.p "Add a new user") render_adduser_form] ] [ Bulma.column [C.is 5] [Bulma.article (Bulma.p "Add a new user") render_adduser_form] ]
OrphanDomains -> HH.div_ OrphanDomains -> HH.div_
[ Bulma.btn_ (C.is_small) "Get orphan domains" ShowOrphanDomains [ Bulma.btn_ [C.is_small] "Get orphan domains" ShowOrphanDomains
, show_orphan_domains , show_orphan_domains
] ]
] ]
@ -155,11 +155,11 @@ render { addUserForm, searchUserForm, matching_users, current_tab, orphan_domain
show_found_users = Bulma.box [ HH.ul_ $ map user_card matching_users ] show_found_users = Bulma.box [ HH.ul_ $ map user_card matching_users ]
user_card user = HH.li_ [ Bulma.btn_delete (RemoveUser user.uid) user_card user = HH.li_ [ Bulma.btn_delete (RemoveUser user.uid)
, Bulma.btn_ (C.is_small) user.login (ShowUser user.uid) , Bulma.btn_ [C.is_small] user.login (ShowUser user.uid)
] ]
show_orphan_domains = Bulma.box [ HH.ul_ $ map domain_entry orphan_domains ] show_orphan_domains = Bulma.box [ HH.ul_ $ map domain_entry orphan_domains ]
domain_entry domain = HH.li_ [ Bulma.btn_delete (RemoveDomain domain) domain_entry domain = HH.li_ [ Bulma.btn_delete (RemoveDomain domain)
, Bulma.btn_ (C.is_small) domain (ShowDomain domain) , Bulma.btn_ [C.is_small] domain (ShowDomain domain)
] ]
up x = HandleAddUserInput <<< x up x = HandleAddUserInput <<< x

View File

@ -277,7 +277,7 @@ render { accepted_domains, my_domains, newDomainForm, askDomainTransferForm, del
, HH.td_ [ HH.text $ fromMaybe "" domain.share_key ] , HH.td_ [ HH.text $ fromMaybe "" domain.share_key ]
, if A.length domain.owners == 1 , if A.length domain.owners == 1
then HH.td_ [ Bulma.alert_btn_abbr "Unshare the domain by removing the \"share\" token." "Unshare" (UnShareDomain domain.name) ] then HH.td_ [ Bulma.alert_btn_abbr "Unshare the domain by removing the \"share\" token." "Unshare" (UnShareDomain domain.name) ]
else HH.td_ [ Bulma.btn_ro (C.is_warning) "Cannot unshare it" ] else HH.td_ [ Bulma.btn_ro [C.is_warning] "Cannot unshare it" ]
, HH.td_ [ Bulma.alert_btn_abbr "Delete the domain from your list of owned domains. In case you are the only owner, this will also remove all zone data and the domain won't be served anymore." "Delete" (DeleteDomainModal domain.name) ] , HH.td_ [ Bulma.alert_btn_abbr "Delete the domain from your list of owned domains. In case you are the only owner, this will also remove all zone data and the domain won't be served anymore." "Delete" (DeleteDomainModal domain.name) ]
] ]

View File

@ -1,7 +1,7 @@
-- | `App.HomeInterface` presents the website and its features. -- | `App.HomeInterface` presents the website and its features.
module App.Page.Home where module App.Page.Home where
import Prelude (Unit, pure, unit, ($), (<>)) import Prelude (Unit, pure, unit, ($))
-- import Data.Either (Either(..)) -- import Data.Either (Either(..))
-- import Data.Maybe (Maybe(..), maybe) -- import Data.Maybe (Maybe(..), maybe)
@ -51,8 +51,8 @@ render _ = HH.div_
Les comptes migrés sont conservés 6 mois, puis supprimés si aucune connexion n'est faite, Les comptes migrés sont conservés 6 mois, puis supprimés si aucune connexion n'est faite,
afin de purger un certain nombre de vieux comptes de robots. afin de purger un certain nombre de vieux comptes de robots.
""" """
, HH.p [ HP.classes (C.margin_top 3) ] , HH.p [ HP.classes [C.margin_top 3] ]
[ Bulma.outside_link (C.button <> C.is_info) url_linuxfr "Cliquez ici pour en savoir plus." ] [ Bulma.outside_link [C.button, C.is_info] url_linuxfr "Cliquez ici pour en savoir plus." ]
] ]
, Bulma.section_small , Bulma.section_small
[ Bulma.h1 "Welcome to netlib.re" [ Bulma.h1 "Welcome to netlib.re"

View File

@ -129,17 +129,17 @@ render { logged, active, admin, login } =
navbar_color = C.is_success navbar_color = C.is_success
main_nav = main_nav =
HH.nav [ HP.classes $ C.navbar <> navbar_color HH.nav [ HP.classes [C.navbar, navbar_color]
, ARIA.label "main navigation" , ARIA.label "main navigation"
, ARIA.role "navigation" , ARIA.role "navigation"
] ]
logo = HH.strong [HP.classes $ C.navbar_item <> (C.is_size 4)] [HH.text "🍉"] logo = HH.strong [HP.classes [C.navbar_item, (C.is_size 4)]] [HH.text "🍉"]
-- HH.a [HP.classes C.navbar_item, HP.href "/"] -- HH.a [HP.classes [C.navbar_item], HP.href "/"]
-- [HH.img [HP.src "/logo.jpeg", HP.width 112, HP.height 28]] -- [HH.img [HP.src "/logo.jpeg", HP.width 112, HP.height 28]]
burger_menu = burger_menu =
HH.a [ HP.classes $ C.navbar_burger <> if active then C.is_active else [] HH.a [ HP.classes $ [C.navbar_burger] <> if active then [C.is_active] else []
, ARIA.label "menu" , ARIA.label "menu"
, ARIA.expanded "false" , ARIA.expanded "false"
, Bulma.data_target "navbar-netlibre" , Bulma.data_target "navbar-netlibre"
@ -149,14 +149,14 @@ render { logged, active, admin, login } =
, HH.span [ARIA.hidden "true"] [] , HH.span [ARIA.hidden "true"] []
] ]
nav_brand = HH.div [HP.classes C.navbar_brand] nav_brand = HH.div [HP.classes [C.navbar_brand]]
nav_menu = HH.div nav_menu = HH.div
[ HP.id "navbar-netlibre" [ HP.id "navbar-netlibre"
, HP.classes $ C.navbar_menu <> C.is_spaced <> if active then C.is_active else [] , HP.classes $ [C.navbar_menu, C.is_spaced] <> if active then [C.is_active] else []
] ]
navbar_start = HH.div [HP.classes C.navbar_start] navbar_start = HH.div [HP.classes [C.navbar_start]]
navbar_end = HH.div [HP.classes C.navbar_end] navbar_end = HH.div [HP.classes [C.navbar_end]]
link_home = nav_link "Home" (Navigate Home) link_home = nav_link "Home" (Navigate Home)
link_domains = nav_link "Domains" (Navigate DomainList) link_domains = nav_link "Domains" (Navigate DomainList)
@ -168,38 +168,38 @@ render { logged, active, admin, login } =
render_login Nothing = [] render_login Nothing = []
render_login (Just l)= [nav_link ("logged as " <> l) (Navigate Setup)] render_login (Just l)= [nav_link ("logged as " <> l) (Navigate Setup)]
link_disconnection = link_disconnection =
nav_link_ (C.has_text_light <> C.has_background_danger) "Disconnection" UnLog nav_link_ [C.has_text_light, C.has_background_danger] "Disconnection" UnLog
dropdown title dropdown_elements dropdown title dropdown_elements
= HH.div [HP.classes $ C.navbar_item <> C.has_dropdown <> C.is_hoverable] = HH.div [HP.classes [C.navbar_item, C.has_dropdown, C.is_hoverable]]
[ dropdown_title title, HH.div [HP.classes C.navbar_dropdown] dropdown_elements ] [ dropdown_title title, HH.div [HP.classes [C.navbar_dropdown]] dropdown_elements ]
dropdown_title str = HH.a [HP.classes C.navbar_link] [HH.text str] dropdown_title str = HH.a [HP.classes [C.navbar_link]] [HH.text str]
dropdown_separator = HH.hr [HP.classes C.navbar_divider] dropdown_separator = HH.hr [HP.classes [C.navbar_divider]]
--nav_button_strong str action = btn C.is_primary action (HH.strong [] [ HH.text str ]) --nav_button_strong str action = btn [C.is_primary] action (HH.strong [] [ HH.text str ])
--nav_button classes str action = btn classes action (HH.text str) --nav_button classes str action = btn classes action (HH.text str)
nav_link_strong str action = nav_link_strong str action =
HH.a [ HP.classes (C.navbar_item <> C.is_danger <> C.has_background_success_dark) HH.a [ HP.classes [C.navbar_item, C.is_danger, C.has_background_success_dark]
, HE.onClick (\_ -> action) , HE.onClick (\_ -> action)
] [ (HH.strong [] [ HH.text str ]) ] ] [ (HH.strong [] [ HH.text str ]) ]
nav_link str action = nav_link_ navbar_color str action nav_link str action = nav_link_ [navbar_color] str action
nav_link_warn str action = nav_link_ (C.has_background_warning <> C.has_text_dark) str action nav_link_warn str action = nav_link_ [C.has_background_warning, C.has_text_dark] str action
nav_link_ classes str action = nav_link_ classes str action =
HH.a [ HP.classes (C.navbar_item <> classes) HH.a [ HP.classes ([C.navbar_item] <> classes)
, HE.onClick (\_ -> action) , HE.onClick (\_ -> action)
] [ (HH.text str) ] ] [ (HH.text str) ]
dropdown_element classes link str = Bulma.outside_link (C.navbar_item <> classes) link str dropdown_element classes link str = Bulma.outside_link ([C.navbar_item] <> classes) link str
dropdown_element_primary link str = dropdown_element C.has_background_info_light link str dropdown_element_primary link str = dropdown_element [C.has_background_info_light] link str
dropdown_element_secondary link str = dropdown_element C.has_background_warning_light link str dropdown_element_secondary link str = dropdown_element [C.has_background_warning_light] link str
dropdown_section_primary t dropdown_section_primary t
= HH.p [HP.classes $ C.has_background_info <> C.has_text_light <> C.navbar_item] [HH.text t] = HH.p [HP.classes [C.has_background_info, C.has_text_light, C.navbar_item]] [HH.text t]
dropdown_section_secondary t dropdown_section_secondary t
= HH.p [HP.classes $ C.has_background_warning <> C.navbar_item] [HH.text t] = HH.p [HP.classes [C.has_background_warning, C.navbar_item]] [HH.text t]
code_dropdown = code_dropdown =
dropdown "Source code" dropdown "Source code"
[ dropdown_section_primary "Main parts of this service" [ dropdown_section_primary "Main parts of this service"
@ -211,8 +211,3 @@ render { logged, active, admin, login } =
, dropdown_element_secondary "https://git.baguette.netlib.re/Baguette/libipc" "libIPC: communication library" , dropdown_element_secondary "https://git.baguette.netlib.re/Baguette/libipc" "libIPC: communication library"
, dropdown_element_secondary "https://git.baguette.netlib.re/Baguette/dodb.cr" "DoDB: document-oriented database" , dropdown_element_secondary "https://git.baguette.netlib.re/Baguette/dodb.cr" "DoDB: document-oriented database"
] ]
--btn c action str
-- = HH.a [ HP.classes (C.navbar_item <> C.button <> c)
-- , HE.onClick (\_ -> action)
-- ] [ str ]

View File

@ -146,9 +146,9 @@ render { registrationForm }
_, Right _ -> [] _, Right _ -> []
legal_mentions = [ Explanations.legal_notice legal_mentions = [ Explanations.legal_notice
, HH.div [HP.classes (C.margin_top 3 <> C.margin_bottom 3)] , HH.div [HP.classes [C.margin_top 3, C.margin_bottom 3]]
[ Bulma.checkbox [ Bulma.checkbox
[HH.span [HP.classes (C.margin_left 3)] [HH.text "I have read and accept the terms of service and privacy policy."]] [HH.span [HP.classes [C.margin_left 3]] [HH.text "I have read and accept the terms of service and privacy policy."]]
LegalCheckboxToggle LegalCheckboxToggle
] ]
] ]

View File

@ -112,11 +112,11 @@ render { modal, newPasswordForm, new_email_address, emails } =
render_emails (Tuple current pending) = HH.div [] $ render_current current <> render_pending pending render_emails (Tuple current pending) = HH.div [] $ render_current current <> render_pending pending
where where
render_current (Just (Email.Email e)) = [ Bulma.p $ "Current email address: " ] <> render_current (Just (Email.Email e)) = [ Bulma.p $ "Current email address: " ] <>
[ Bulma.btn_ro (C.is_small <> C.is_warning) e] [ Bulma.btn_ro [C.is_small, C.is_warning] e]
render_current Nothing = [ Bulma.p "You do not currently have a validated email address." ] render_current Nothing = [ Bulma.p "You do not currently have a validated email address." ]
render_pending (Just (Email.Email e)) = [ Bulma.p $ "Pending email address: " ] <> render_pending (Just (Email.Email e)) = [ Bulma.p $ "Pending email address: " ] <>
[ Bulma.btn_ro (C.is_small <> C.is_warning) e] [ Bulma.btn_ro [C.is_small, C.is_warning] e]
render_pending Nothing = [] render_pending Nothing = []
render_delete_account = Bulma.alert_btn "Delete my account" DeleteAccountPopup render_delete_account = Bulma.alert_btn "Delete my account" DeleteAccountPopup

View File

@ -357,7 +357,7 @@ render state
NewRRModal _ -> render_current_rr_modal NewRRModal _ -> render_current_rr_modal
UpdateRRModal -> render_current_rr_modal UpdateRRModal -> render_current_rr_modal
NoModal -> HH.div_ NoModal -> HH.div_
[ Bulma.level [ Bulma.btn_ (C.is_large <> C.is_info) "Back to the domain list" ReturnToDomainList [ Bulma.level [ Bulma.btn_ [C.is_large, C.is_info] "Back to the domain list" ReturnToDomainList
, Bulma.h1 state._domain , Bulma.h1 state._domain
] [] ] []
, Bulma.hr , Bulma.hr
@ -522,7 +522,7 @@ render state
-- Nothing -> Bulma.p "default value for the version (spf1)" -- Nothing -> Bulma.p "default value for the version (spf1)"
-- Just v -> Bulma.box_input "vSPF" "Version" "spf1" (updateForm Field_SPF_v) v -- Just v -> Bulma.box_input "vSPF" "Version" "spf1" (updateForm Field_SPF_v) v
, Bulma.hr , Bulma.hr
, Bulma.box_with_tag C.has_background_info_light tag_mechanisms , Bulma.box_with_tag [C.has_background_info_light] tag_mechanisms
[ Bulma.div_content [] [Bulma.explanation [Bulma.p "Mechanisms specify which mail servers are allowed to send mail for the domain and how to evaluate the sending mail servers IP address."] ] [ Bulma.div_content [] [Bulma.explanation [Bulma.p "Mechanisms specify which mail servers are allowed to send mail for the domain and how to evaluate the sending mail servers IP address."] ]
, maybe (Bulma.p "You don't have any mechanism.") display_mechanisms state._currentRR.mechanisms , maybe (Bulma.p "You don't have any mechanism.") display_mechanisms state._currentRR.mechanisms
, Bulma.hr , Bulma.hr
@ -535,7 +535,7 @@ render state
, Bulma.btn "Add a mechanism" SPF_Mechanism_Add , Bulma.btn "Add a mechanism" SPF_Mechanism_Add
] ]
, Bulma.hr , Bulma.hr
, Bulma.box_with_tag C.has_background_success_light tag_modifiers , Bulma.box_with_tag [C.has_background_success_light] tag_modifiers
[ Bulma.div_content [] [Bulma.explanation [Bulma.p "Modifiers provide additional instructions, such as explanations for SPF failures or redirecting SPF checks to another domain."] ] [ Bulma.div_content [] [Bulma.explanation [Bulma.p "Modifiers provide additional instructions, such as explanations for SPF failures or redirecting SPF checks to another domain."] ]
, maybe (Bulma.p "You don't have any modifier.") display_modifiers state._currentRR.modifiers , maybe (Bulma.p "You don't have any modifier.") display_modifiers state._currentRR.modifiers
, Bulma.hr , Bulma.hr
@ -626,12 +626,12 @@ render state
, Bulma.hr , Bulma.hr
, Bulma.div_content [] [Bulma.explanation Explanations.dmarc_contact] , Bulma.div_content [] [Bulma.explanation Explanations.dmarc_contact]
, Bulma.box_with_tag C.has_background_info_light tag_aggregated_reports , Bulma.box_with_tag [C.has_background_info_light] tag_aggregated_reports
[ maybe (Bulma.p "There is no address to send aggregated reports to.") [ maybe (Bulma.p "There is no address to send aggregated reports to.")
(display_dmarc_mail_addresses DMARC_remove_rua) (display_dmarc_mail_addresses DMARC_remove_rua)
state.dmarc.rua state.dmarc.rua
] ]
, Bulma.box_with_tag C.has_background_success_light tag_detailed_reports , Bulma.box_with_tag [C.has_background_success_light] tag_detailed_reports
[ maybe (Bulma.p "There is no address to send detailed reports to.") [ maybe (Bulma.p "There is no address to send detailed reports to.")
(display_dmarc_mail_addresses DMARC_remove_ruf) (display_dmarc_mail_addresses DMARC_remove_ruf)
state.dmarc.ruf state.dmarc.ruf
@ -641,8 +641,8 @@ render state
, render_dmarc_mail_errors , render_dmarc_mail_errors
, Bulma.box_input "idDMARCmail" "Address to contact" "admin@example.com" DMARC_mail state.dmarc_mail , Bulma.box_input "idDMARCmail" "Address to contact" "admin@example.com" DMARC_mail state.dmarc_mail
, Bulma.box_input "idDMARCmaillimit" "Report size limit (in KB)" "2000" DMARC_mail_limit (maybe "0" show state.dmarc_mail_limit) , Bulma.box_input "idDMARCmaillimit" "Report size limit (in KB)" "2000" DMARC_mail_limit (maybe "0" show state.dmarc_mail_limit)
, Bulma.level [ Bulma.btn_ C.has_background_info_light "New address for aggregated report" DMARC_rua_Add , Bulma.level [ Bulma.btn_ [C.has_background_info_light] "New address for aggregated report" DMARC_rua_Add
, Bulma.btn_ C.has_background_success_light "New address for specific report" DMARC_ruf_Add , Bulma.btn_ [C.has_background_success_light] "New address for specific report" DMARC_ruf_Add
] [] ] []
, Bulma.hr , Bulma.hr
@ -1041,31 +1041,31 @@ handleQuery = case _ of
add_RR state new_rr = state { _resources = (state._resources <> [ new_rr ]) } add_RR state new_rr = state { _resources = (state._resources <> [ new_rr ]) }
-- Rendering -- Rendering
bg_color_ro = C.has_background_warning_light :: Array HH.ClassName bg_color_ro = C.has_background_warning_light :: HH.ClassName
tag :: forall w i. String -> HH.HTML w i tag :: forall w i. String -> HH.HTML w i
tag str = HH.span [HP.classes (C.tag <> C.is_dark)] [HH.text str] tag str = HH.span [HP.classes [C.tag, C.is_dark]] [HH.text str]
tag_ro :: forall w i. String -> HH.HTML w i tag_ro :: forall w i. String -> HH.HTML w i
tag_ro str = HH.span [HP.classes (C.tag <> C.is_warning)] [HH.text str] tag_ro str = HH.span [HP.classes [C.tag, C.is_warning]] [HH.text str]
tags :: forall w i. Array (HH.HTML w i) -> HH.HTML w i tags :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
tags xs = HH.span [HP.classes (C.tags <> C.no_margin_bottom <> C.no_padding_bottom)] xs tags xs = HH.span [HP.classes [C.tags, C.no_margin_bottom, C.no_padding_bottom]] xs
-- | Render all Resource Records. -- | Render all Resource Records.
render_resources :: forall w. Array ResourceRecord -> HH.HTML w Action render_resources :: forall w. Array ResourceRecord -> HH.HTML w Action
render_resources [] = Bulma.box [Bulma.zone_rr_title "Resource records", Bulma.subtitle "No records for now"] render_resources [] = Bulma.box [Bulma.zone_rr_title "Resource records", Bulma.subtitle "No records for now"]
render_resources records render_resources records
= HH.div_ $ = HH.div_ $
(rr_box bg_color_ro tag_soa Bulma.soa_table_header table_content all_soa_rr) (rr_box [bg_color_ro] tag_soa Bulma.soa_table_header table_content all_soa_rr)
<> (rr_box [] tag_basic Bulma.simple_table_header table_content_w_seps all_basic_rr) <> (rr_box [] tag_basic Bulma.simple_table_header table_content_w_seps all_basic_rr)
<> (rr_box [] tag_mx Bulma.mx_table_header table_content all_mx_rr) <> (rr_box [] tag_mx Bulma.mx_table_header table_content all_mx_rr)
<> (rr_box [] tag_caa Bulma.caa_table_header table_content all_caa_rr) <> (rr_box [] tag_caa Bulma.caa_table_header table_content all_caa_rr)
<> (rr_box [] tag_srv Bulma.srv_table_header table_content all_srv_rr) <> (rr_box [] tag_srv Bulma.srv_table_header table_content all_srv_rr)
<> (rr_box [] tag_spf Bulma.spf_table_header table_content all_spf_rr) <> (rr_box [] tag_spf Bulma.spf_table_header table_content all_spf_rr)
<> (rr_box [] tag_dkim Bulma.dkim_table_header table_content all_dkim_rr) <> (rr_box [] tag_dkim Bulma.dkim_table_header table_content all_dkim_rr)
<> (rr_box [] tag_dmarc Bulma.dmarc_table_header table_content all_dmarc_rr) <> (rr_box [] tag_dmarc Bulma.dmarc_table_header table_content all_dmarc_rr)
<> (rr_box bg_color_ro tag_basic_ro Bulma.simple_table_header_ro table_content_w_seps all_basic_ro_rr) <> (rr_box [bg_color_ro] tag_basic_ro Bulma.simple_table_header_ro table_content_w_seps all_basic_ro_rr)
where where
all_basic_rr = A.filter (\rr -> A.elem rr.rrtype baseRecords && not rr.readonly) records all_basic_rr = A.filter (\rr -> A.elem rr.rrtype baseRecords && not rr.readonly) records
all_basic_ro_rr = A.filter (\rr -> A.elem rr.rrtype baseRecords && rr.readonly) records all_basic_ro_rr = A.filter (\rr -> A.elem rr.rrtype baseRecords && rr.readonly) records
@ -1096,7 +1096,7 @@ render_resources records
-> Array (HH.HTML w Action) -> Array (HH.HTML w Action)
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 [Bulma.table_ (C.margin_left 3) [] [header, dp rrs]] ] then [ Bulma.box_with_tag colors title [Bulma.table_ [C.margin_left 3] [] [header, dp rrs]] ]
else [] else []
--title_col_props = C.is 1 --title_col_props = C.is 1
@ -1111,7 +1111,7 @@ render_resources records
table_content records_ = HH.tbody_ $ map rows records_ table_content records_ = HH.tbody_ $ map rows records_
rows rr = if rr.readonly rows rr = if rr.readonly
then HH.tr [ HP.classes C.has_background_warning_light ] $ render_row rr then HH.tr [ HP.classes [C.has_background_warning_light] ] $ render_row rr
else HH.tr_ $ render_row rr else HH.tr_ $ render_row rr
render_row :: ResourceRecord -> Array (HH.HTML w Action) render_row :: ResourceRecord -> Array (HH.HTML w Action)
@ -1223,8 +1223,8 @@ render_resources records
show_token_or_btn rr = show_token_or_btn rr =
case rr.rrtype of case rr.rrtype of
"A" -> Bulma.btn_ (C.is_small) "🏁​ Ask for a token" (NewToken rr.rrid) "A" -> Bulma.btn_ [C.is_small] "🏁​ Ask for a token" (NewToken rr.rrid)
"AAAA" -> Bulma.btn_ (C.is_small) "🏁​ Ask for a token" (NewToken rr.rrid) "AAAA" -> Bulma.btn_ [C.is_small] "🏁​ Ask for a token" (NewToken rr.rrid)
_ -> HH.text "" _ -> HH.text ""
fancy_qualifier_display :: RR.Qualifier -> String fancy_qualifier_display :: RR.Qualifier -> String

View File

@ -355,7 +355,7 @@ dmarc_aspf =
In relaxed mode, they can be different, but in the same Organizational Domain. In relaxed mode, they can be different, but in the same Organizational Domain.
""" """
, HH.p_ [ HH.text "From RFC7489:" , HH.p_ [ HH.text "From RFC7489:"
, HH.div [HP.classes C.is_italic] , HH.div [HP.classes [C.is_italic]]
[ HH.text """For example, if a message passes an SPF check with an [ HH.text """For example, if a message passes an SPF check with an
RFC5321.MailFrom domain of "cbg.bounces.example.com", and the address RFC5321.MailFrom domain of "cbg.bounces.example.com", and the address
portion of the RFC5322.From field contains "payments@example.com", portion of the RFC5322.From field contains "payments@example.com",

View File

@ -166,7 +166,7 @@ render { wsInfo }
] ]
reconnection_btn = HH.button [ HP.type_ HP.ButtonButton reconnection_btn = HH.button [ HP.type_ HP.ButtonButton
, HE.onClick \_ -> ConnectWebSocket , HE.onClick \_ -> ConnectWebSocket
, HP.classes (C.has_background_danger_light <> C.is_large) , HP.classes [C.has_background_danger_light, C.is_large]
] ]
handleAction :: forall m. MonadAff m => Action -> H.HalogenM State Action () Output m Unit handleAction :: forall m. MonadAff m => Action -> H.HalogenM State Action () Output m Unit

View File

@ -19,7 +19,7 @@ import Halogen.HTML.Core (AttrName(..))
checkbox :: forall w i. Array (HH.HTML w i) -> i -> HH.HTML w i checkbox :: forall w i. Array (HH.HTML w i) -> i -> HH.HTML w i
checkbox content_ action checkbox content_ action
= HH.label = HH.label
[ HP.classes C.label ] $ [ HH.input [ HE.onValueInput \ _ -> action, MissingProperties.ty "checkbox" ] ] <> content_ [ HP.classes [C.label] ] $ [ HH.input [ HE.onValueInput \ _ -> action, MissingProperties.ty "checkbox" ] ] <> content_
-- <label class="checkbox"> -- <label class="checkbox">
-- <input type="checkbox" /> -- <input type="checkbox" />
-- I agree to the <a href="#">terms and conditions</a> -- I agree to the <a href="#">terms and conditions</a>
@ -30,34 +30,34 @@ outside_link classes url title = HH.a [ HP.classes classes, HP.target "_blank",
columns :: forall (w :: Type) (i :: Type). columns :: forall (w :: Type) (i :: Type).
Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
columns classes = HH.div [ HP.classes (C.columns <> classes) ] 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_ :: forall (w :: Type) (i :: Type). Array (HH.HTML w i) -> HH.HTML w i
columns_ = columns [] columns_ = columns []
column :: forall (w :: Type) (i :: Type). column :: forall (w :: Type) (i :: Type).
Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
column classes = HH.div [ HP.classes (C.column <> classes) ] 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_ :: forall (w :: Type) (i :: Type). Array (HH.HTML w i) -> HH.HTML w i
column_ = column [] column_ = column []
h1 :: forall (w :: Type) (a :: Type). String -> HH.HTML w a h1 :: forall (w :: Type) (a :: Type). String -> HH.HTML w a
h1 title = HH.h1 [ HP.classes (C.title) ] [ HH.text title ] h1 title = HH.h1 [ HP.classes [C.title] ] [ HH.text title ]
h3 :: forall (w :: Type) (a :: Type). String -> HH.HTML w a h3 :: forall (w :: Type) (a :: Type). String -> HH.HTML w a
h3 title = HH.h3 [ HP.classes (C.title <> C.is5) ] [ HH.text title ] h3 title = HH.h3 [ HP.classes [C.title, C.is5] ] [ HH.text title ]
h4 :: forall (w :: Type) (a :: Type). String -> HH.HTML w a h4 :: forall (w :: Type) (a :: Type). String -> HH.HTML w a
h4 title = HH.h4 [ HP.classes (C.title <> C.is5) ] [ HH.text title ] h4 title = HH.h4 [ HP.classes [C.title, C.is5] ] [ HH.text title ]
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.is5 <> C.has_text_light <> C.has_background_dark) ] = HH.h3 [ HP.classes [C.title, C.is5, C.has_text_light, C.has_background_dark] ]
[ HH.text title ] [ HH.text 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 :: forall (w :: Type) (a :: Type). Array (HH.HTML w a) -> HH.HTML w a
hdiv = HH.div [ HP.classes [HH.ClassName "mt-5"] ] hdiv = HH.div [ HP.classes [HH.ClassName "mt-5"] ]
@ -69,13 +69,13 @@ hdiv = HH.div [ HP.classes [HH.ClassName "mt-5"] ]
-- = column [ HH.ClassName ("is-offset-" <> (show offset) <> " is-" <> (show size)) ] -- = column [ HH.ClassName ("is-offset-" <> (show offset) <> " is-" <> (show size)) ]
input_classes :: Array HH.ClassName input_classes :: Array HH.ClassName
input_classes = C.input <> C.is_small <> C.is_info input_classes = [C.input, C.is_small, C.is_info]
table :: forall w i. HH.Node DHI.HTMLtable w i table :: forall w i. HH.Node DHI.HTMLtable w i
table prop xs = HH.table ([ HP.classes $ C.table ] <> prop) xs table prop xs = HH.table ([ HP.classes [C.table] ] <> prop) xs
table_ :: forall w i. Array HH.ClassName -> HH.Node DHI.HTMLtable w i table_ :: forall w i. Array HH.ClassName -> HH.Node DHI.HTMLtable w i
table_ classes prop xs = HH.table ([ HP.classes $ C.table <> classes] <> prop) xs table_ classes prop xs = HH.table ([ HP.classes $ [C.table] <> classes] <> prop) xs
table_header_owned_domains :: forall w i. HH.HTML w i table_header_owned_domains :: forall w i. HH.HTML w i
table_header_owned_domains table_header_owned_domains
@ -228,7 +228,7 @@ simple_table_header
simple_table_header_ro :: forall w i. HH.HTML w i simple_table_header_ro :: forall w i. HH.HTML w i
simple_table_header_ro simple_table_header_ro
= HH.thead_ [ HH.tr [ HP.classes C.has_background_warning_light ] = HH.thead_ [ HH.tr [ HP.classes [C.has_background_warning_light] ]
[ HH.th [ HP.style "width: 50px;" ] [ HH.text "Type" ] [ HH.th [ HP.style "width: 50px;" ] [ HH.text "Type" ]
, HH.th_ [ name_header ] , HH.th_ [ name_header ]
, HH.th_ [ ttl_header ] , HH.th_ [ ttl_header ]
@ -356,7 +356,7 @@ minttl_soa_header = HH.abbr
soa_table_header :: forall w i. HH.HTML w i soa_table_header :: forall w i. HH.HTML w i
soa_table_header soa_table_header
= HH.thead_ [ HH.tr [ HP.classes C.has_background_warning_light ] = HH.thead_ [ HH.tr [ HP.classes [C.has_background_warning_light] ]
[ HH.th_ [ name_soa_header ] [ HH.th_ [ name_soa_header ]
, HH.th_ [ ttl_header ] , HH.th_ [ ttl_header ]
, HH.th_ [ mname_soa_header ] , HH.th_ [ mname_soa_header ]
@ -382,7 +382,7 @@ textarea_ classes placeholder value action
[ HE.onValueInput action [ HE.onValueInput action
, HP.value value , HP.value value
, HP.placeholder placeholder , HP.placeholder placeholder
, HP.classes $ C.textarea <> classes , HP.classes $ [C.textarea] <> classes
] ]
textarea :: forall w i. String -> String -> (String -> i) -> HH.HTML w i textarea :: forall w i. String -> String -> (String -> i) -> HH.HTML w i
@ -398,63 +398,63 @@ btn_abbr_ :: forall w action.
btn_abbr_ btnclasses divclasses explanation_ title action btn_abbr_ btnclasses divclasses explanation_ title action
= HH.button = HH.button
[ HE.onClick \_ -> action [ HE.onClick \_ -> action
, HP.classes $ C.button <> btnclasses , HP.classes $ [C.button] <> btnclasses
] [ HH.abbr [ HP.title explanation_ ] [ HH.div [ HP.classes divclasses ] [ HH.text title ] ] ] ] [ HH.abbr [ HP.title explanation_ ] [ HH.div [ HP.classes divclasses ] [ HH.text title ] ] ]
btn_abbr :: forall w action. String -> String -> action -> HH.HTML w action btn_abbr :: forall w action. String -> String -> action -> HH.HTML w action
btn_abbr explanation_ title action = btn_abbr_ [] [] explanation_ title action btn_abbr explanation_ title action = btn_abbr_ [] [] explanation_ title action
alert_btn_abbr :: forall w action. String -> String -> action -> HH.HTML w action alert_btn_abbr :: forall w action. String -> String -> action -> HH.HTML w action
alert_btn_abbr explanation_ title action = btn_abbr_ C.is_danger [] explanation_ title action alert_btn_abbr explanation_ title action = btn_abbr_ [C.is_danger] [] explanation_ title action
btn_modify :: forall w i. i -> HH.HTML w i btn_modify :: forall w i. i -> HH.HTML w i
btn_modify action = btn_abbr_ (C.is_small <> C.is_info) (C.is_size 4) "Edit" "⚒" action btn_modify action = btn_abbr_ [C.is_small, C.is_info] [C.is_size 4] "Edit" "⚒" action
btn_save :: forall w i. i -> HH.HTML w i btn_save :: forall w i. i -> HH.HTML w i
btn_save action = btn_ C.is_info "Save" action btn_save action = btn_ [C.is_info] "Save" action
btn_add :: forall w i. i -> HH.HTML w i btn_add :: forall w i. i -> HH.HTML w i
btn_add action = btn_ C.is_info "Add" action btn_add action = btn_ [C.is_info] "Add" action
btn_delete :: forall w i. i -> HH.HTML w i btn_delete :: forall w i. i -> HH.HTML w i
btn_delete action = btn_abbr_ (C.is_small <> C.is_danger) (C.is_size 4) "Delete" "✖" action btn_delete action = btn_abbr_ [C.is_small, C.is_danger] [C.is_size 4] "Delete" "✖" action
btn_modify_ro :: forall w i. HH.HTML w i btn_modify_ro :: forall w i. HH.HTML w i
btn_modify_ro = btn_ro (C.is_small <> C.is_warning) "modify" btn_modify_ro = btn_ro [C.is_small, C.is_warning] "modify"
btn_readonly :: forall w i. HH.HTML w i btn_readonly :: forall w i. HH.HTML w i
btn_readonly = btn_ro (C.is_small <> C.is_warning) "read only" btn_readonly = btn_ro [C.is_small, C.is_warning] "read only"
btn_delete_ro :: forall w i. HH.HTML w i btn_delete_ro :: forall w i. HH.HTML w i
btn_delete_ro = btn_ro (C.is_small <> C.is_warning) "remove" btn_delete_ro = btn_ro [C.is_small, C.is_warning] "remove"
btn_ro :: forall w i. Array HH.ClassName -> String -> HH.HTML w i btn_ro :: forall w i. Array HH.ClassName -> String -> HH.HTML w i
btn_ro classes title btn_ro classes title
= HH.button = HH.button
[ HP.classes $ C.button <> classes [ HP.classes $ [C.button] <> classes
] [ HH.text title ] ] [ HH.text title ]
-- | 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
level left right = HH.nav [ HP.classes C.level ] level left right = HH.nav [ HP.classes [C.level] ]
[ HH.div [ HP.classes C.level_left ] $ itemize left [ HH.div [ HP.classes [C.level_left] ] $ itemize left
, HH.div [ HP.classes C.level_right ] $ itemize right , HH.div [ HP.classes [C.level_right] ] $ itemize right
] ]
where itemize = map (\v -> HH.div [ HP.classes C.level_item ] [v]) where itemize = map (\v -> HH.div [ HP.classes [C.level_item] ] [v])
btn_ :: forall w action. Array HH.ClassName -> String -> action -> HH.HTML w action btn_ :: forall w action. Array HH.ClassName -> String -> action -> HH.HTML w action
btn_ classes title action btn_ classes title action
= HH.button = HH.button
[ HE.onClick \_ -> action [ HE.onClick \_ -> action
, HP.classes $ C.button <> classes , HP.classes $ [C.button] <> classes
] [ HH.text title ] ] [ HH.text title ]
btn :: forall w action. String -> action -> HH.HTML w action btn :: forall w action. String -> action -> HH.HTML w action
btn title action = btn_ [] title action btn title action = btn_ [] title action
alert_btn :: forall w action. String -> action -> HH.HTML w action alert_btn :: forall w action. String -> action -> HH.HTML w action
alert_btn title action = btn_ C.is_danger title action alert_btn title action = btn_ [C.is_danger] title action
render_input :: forall w i. render_input :: forall w i.
Boolean -> String -> String -> (String -> i) -> String -> (HP.IProp DHI.HTMLinput i) -> HH.HTML w i Boolean -> String -> String -> (String -> i) -> String -> (HP.IProp DHI.HTMLinput i) -> HH.HTML w i
@ -473,18 +473,18 @@ render_input password id placeholder action value cond
-- | Bulma's `field`, which contains an array of `Halogen.HTML` entries. -- | Bulma's `field`, which contains an array of `Halogen.HTML` entries.
-- | Two entries are expected: a field label (`div_field_label`) and a field content (`div_field_content`). -- | Two entries are expected: a field label (`div_field_label`) and a field content (`div_field_content`).
div_field :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i div_field :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
div_field classes = HH.div [HP.classes (C.field <> C.is_horizontal <> classes)] div_field classes = HH.div [HP.classes ([C.field, C.is_horizontal] <> classes)]
-- | Field label (id and title) for a Bulma `field`. -- | Field label (id and title) for a Bulma `field`.
div_field_label :: forall w i. String -> String -> HH.HTML w i div_field_label :: forall w i. String -> String -> HH.HTML w i
div_field_label id title = HH.div [HP.classes (C.field_label <> C.normal)] div_field_label id title = HH.div [HP.classes [C.field_label, C.normal]]
[HH.label [ HP.classes C.label, HP.for id ] [ HH.text title ]] [HH.label [ HP.classes [C.label], HP.for id ] [ HH.text title ]]
-- | Any `Halogen.HTML` data in Bulma `field-body > field > control` divs. -- | Any `Halogen.HTML` data in Bulma `field-body > field > control` divs.
div_field_content :: forall w i. HH.HTML w i -> HH.HTML w i div_field_content :: forall w i. HH.HTML w i -> HH.HTML w i
div_field_content content div_field_content content
= HH.div [ HP.classes C.field_body ] = HH.div [ HP.classes [C.field_body] ]
[ HH.div [HP.classes C.field ] [ HH.div [HP.classes C.control ] [ content ] ] ] [ HH.div [HP.classes [C.field] ] [ HH.div [HP.classes [C.control] ] [ content ] ] ]
-- | Basic field entry with a title and a field content. -- | Basic field entry with a title and a field content.
-- | -- |
@ -507,7 +507,7 @@ field_entry id title entry
-- | Error field entry with a title and a field content. -- | Error field entry with a title and a field content.
error_field_entry :: forall w i. String -> String -> HH.HTML w i -> HH.HTML w i error_field_entry :: forall w i. String -> String -> HH.HTML w i -> HH.HTML w i
error_field_entry id title entry error_field_entry id title entry
= div_field C.has_background_danger_light = div_field [C.has_background_danger_light]
[ div_field_label id title [ div_field_label id title
, div_field_content entry , div_field_content entry
] ]
@ -521,13 +521,13 @@ field_inner ispassword cond id title placeholder action value
= field_entry id title $ render_input ispassword id placeholder action value cond = field_entry id title $ render_input ispassword id placeholder action value cond
div_field_ :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i div_field_ :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
div_field_ classes = HH.div [ HP.classes (C.field <> classes) ] div_field_ classes = HH.div [ HP.classes ([C.field] <> classes) ]
btn_labeled :: forall w i. String -> String -> String -> i -> HH.HTML w i btn_labeled :: forall w i. String -> String -> String -> i -> HH.HTML w i
btn_labeled id title button_text action btn_labeled id title button_text action
= field_entry id title $ HH.button = field_entry id title $ HH.button
[ HE.onClick \_ -> action [ HE.onClick \_ -> action
, HP.classes $ C.button <> C.is_small <> C.is_info , HP.classes [C.button, C.is_small, C.is_info]
, HP.id id , HP.id id
] [ HH.text button_text ] ] [ HH.text button_text ]
@ -546,27 +546,27 @@ box_password :: forall w i. String -> String -> String -> (String -> i) -> Strin
box_password = box_password_ (HP.enabled true) box_password = box_password_ (HP.enabled true)
section_small :: forall w i. Array (HH.HTML w i) -> HH.HTML w i section_small :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
section_small = HH.section [ HP.classes (C.section <> C.is_small) ] 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] ]
new_domain_field :: forall w i. new_domain_field :: forall w i.
(String -> i) -> String -> Array (HP.IProp DHI.HTMLselect i) -> Array String -> HH.HTML w i (String -> i) -> String -> Array (HP.IProp DHI.HTMLselect i) -> Array String -> HH.HTML w i
new_domain_field inputaction text_ selectaction accepted_domains new_domain_field inputaction text_ selectaction accepted_domains
= div_field_ C.has_addons = div_field_ [C.has_addons]
[ HH.p [ HH.p
[ HP.classes C.control ] [ HP.classes [C.control] ]
[ HH.input $ [ HH.input $
[ HE.onValueInput inputaction [ HE.onValueInput inputaction
, HP.placeholder "www" , HP.placeholder "www"
, HP.value text_ , HP.value text_
, HP.type_ HP.InputText , HP.type_ HP.InputText
, HP.classes (C.is_primary <> C.input) , HP.classes [C.is_primary, C.input]
] ]
] ]
, HH.p , HH.p
[ HP.classes C.control ] [ HP.classes [C.control] ]
[ select selectaction $ map option accepted_domains ] [ select selectaction $ map option accepted_domains ]
] ]
@ -583,35 +583,35 @@ p_ :: forall w i. Array HH.ClassName -> String -> HH.HTML w i
p_ classes str = HH.p [HP.classes classes] [ HH.text str ] p_ classes str = HH.p [HP.classes classes] [ HH.text str ]
box :: forall w i. Array (HH.HTML w i) -> HH.HTML w i box :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
box = HH.div [HP.classes C.box] box = HH.div [HP.classes [C.box]]
box_ :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i 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_ classes = HH.div [HP.classes $ [C.box] <> classes]
option :: forall w i. String -> HH.HTML w i option :: forall w i. String -> HH.HTML w i
option value = HH.option_ [HH.text value] option value = HH.option_ [HH.text value]
select :: forall w i. HH.Node DHI.HTMLselect w i select :: forall w i. HH.Node DHI.HTMLselect w i
select action options select action options
= HH.div [ HP.classes (C.select <> C.is_primary) ] = HH.div [ HP.classes [C.select, C.is_primary] ]
[ HH.select action options] [ HH.select action options]
hero :: forall w i. String -> String -> HH.HTML w i hero :: forall w i. String -> String -> HH.HTML w i
hero _title _subtitle hero _title _subtitle
= HH.section [ HP.classes (C.hero <> C.is_info <> C.is_small) ] = HH.section [ HP.classes [C.hero, C.is_info, C.is_small] ]
[ HH.div [ HP.classes C.hero_body ] [ HH.div [ HP.classes [C.hero_body] ]
[ HH.p [ HP.classes C.title ] [ HH.text _title ] [ HH.p [ HP.classes [C.title] ] [ HH.text _title ]
, HH.p [ HP.classes C.subtitle ] [ HH.text _subtitle ] , HH.p [ HP.classes [C.subtitle] ] [ HH.text _subtitle ]
] ]
] ]
small_hero :: forall w i. String -> String -> HH.HTML w i small_hero :: forall w i. String -> String -> HH.HTML w i
small_hero _title _subtitle = small_hero _title _subtitle =
HH.section [ HP.classes (C.hero <> C.is_info <> C.is_small) ] HH.section [ HP.classes [C.hero, C.is_info, C.is_small] ]
[ HH.div [ HP.classes C.hero_body ] [ HH.div [ HP.classes [C.hero_body] ]
[ HH.div [ HP.classes $ C.container <> C.has_text_centered ] [ HH.div [ HP.classes [C.container, C.has_text_centered] ]
[ HH.p [ HP.classes C.title ] [ HH.text _title ] [ HH.p [ HP.classes [C.title] ] [ HH.text _title ]
, HH.p [ HP.classes C.subtitle ] [ HH.text _subtitle ] , HH.p [ HP.classes [C.subtitle] ] [ HH.text _subtitle ]
] ]
] ]
] ]
@ -622,10 +622,10 @@ hero_danger_txt _title _subtitle
hero_danger :: forall w i. Array (HH.HTML w i) -> Array (HH.HTML w i) -> HH.HTML w i hero_danger :: forall w i. Array (HH.HTML w i) -> Array (HH.HTML w i) -> HH.HTML w i
hero_danger _title _subtitle hero_danger _title _subtitle
= HH.section [ HP.classes (C.hero <> C.is_danger <> C.is_small) ] = HH.section [ HP.classes [C.hero, C.is_danger, C.is_small] ]
[ HH.div [ HP.classes C.hero_body ] [ HH.div [ HP.classes [C.hero_body] ]
[ HH.p [ HP.classes C.title ] _title [ HH.p [ HP.classes [C.title] ] _title
, HH.p [ HP.classes C.subtitle ] _subtitle , HH.p [ HP.classes [C.subtitle] ] _subtitle
] ]
] ]
@ -633,29 +633,29 @@ header :: forall w i. String -> String -> HH.HTML w i
header = hero header = hero
container :: forall w i. Array (HH.HTML w i) -> HH.HTML w i container :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
container = HH.div [HP.classes (C.container <> C.is_info)] 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_ :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
modal_ = HH.div [HP.classes (C.modal <> C.is_active)] modal_ = HH.div [HP.classes [C.modal, C.is_active]]
modal_background :: forall w i. HH.HTML w i modal_background :: forall w i. HH.HTML w i
modal_background = HH.div [HP.classes C.modal_background] [] 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 :: 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_card_large = HH.div [HP.classes [C.modal_card, C.is_large]]
modal_header :: forall w i. String -> HH.HTML w i modal_header :: forall w i. String -> HH.HTML w i
modal_header title = HH.header [HP.classes C.modal_card_head] modal_header title = HH.header [HP.classes [C.modal_card_head]]
[ HH.p [HP.classes C.modal_card_title] [HH.text title] [ 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 :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
modal_body = HH.section [HP.classes C.modal_card_body] 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 :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
modal_foot = HH.div [HP.classes C.modal_card_foot] modal_foot = HH.div [HP.classes [C.modal_card_foot]]
cancel_button :: forall w i. i -> HH.HTML w i cancel_button :: forall w i. i -> HH.HTML w i
cancel_button action cancel_button action
= HH.button [ HP.classes C.button = HH.button [ HP.classes [C.button]
, HE.onClick \_ -> action , HE.onClick \_ -> action
] [HH.text "Cancel"] ] [HH.text "Cancel"]
@ -666,28 +666,28 @@ hr :: forall w i. HH.HTML w i
hr = HH.hr_ hr = HH.hr_
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)]
tile_ :: forall w i. Array (HH.HTML w i) -> HH.HTML w i tile_ :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
tile_ = tile [] tile_ = tile []
tile_danger :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i tile_danger :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
tile_danger classes = tile (C.is_danger <> C.notification <> classes) 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_ :: 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)] 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_header]] [head]
, HH.div [HP.classes C.message_body ] [body] , 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 :: forall w i. HH.HTML w i -> HH.HTML w i -> HH.HTML w i
article head body = article_ [] head body 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 :: 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 error_message head body = article_ [C.is_danger] head body
-- | Basic input field with a read-only side text. -- | Basic input field with a read-only side text.
@ -708,12 +708,12 @@ error_message head body = article_ C.is_danger head body
input_with_side_text :: forall w i. input_with_side_text :: forall w i.
String -> String -> String -> (String -> i) -> String -> String -> HH.HTML w i String -> String -> String -> (String -> i) -> String -> String -> HH.HTML w i
input_with_side_text id title placeholder action value sidetext input_with_side_text id title placeholder action value sidetext
= HH.div [HP.classes $ C.field <> C.is_horizontal] = HH.div [HP.classes [C.field, C.is_horizontal]]
[ HH.div [ HP.classes (C.field_label <> C.normal) ] [ HH.div [ HP.classes [C.field_label, C.normal] ]
[HH.label [ HP.classes C.label, HP.for id ] [ HH.text title ]] [HH.label [ HP.classes [C.label], HP.for id ] [ HH.text title ]]
, HH.div [ HP.classes C.field_body ] , HH.div [ HP.classes [C.field_body] ]
[ HH.div [ HP.classes $ C.has_addons <> C.field ] [ HH.div [ HP.classes [C.has_addons, C.field] ]
[ HH.p [HP.classes C.control] [ HH.p [HP.classes [C.control]]
[ HH.input $ [ HH.input $
[ HE.onValueInput action [ HE.onValueInput action
, HP.value value , HP.value value
@ -722,8 +722,8 @@ input_with_side_text id title placeholder action value sidetext
, HP.id id , HP.id id
] ]
] ]
, HH.p [HP.classes C.control] , HH.p [HP.classes [C.control]]
[ HH.a [HP.classes $ C.button <> C.is_small <> C.is_static] [ HH.a [HP.classes [C.button, C.is_small, C.is_static]]
[HH.text sidetext] ] [HH.text sidetext] ]
] ]
] ]
@ -744,7 +744,7 @@ modal title body foot =
-- selection: create a "select" input. -- selection: create a "select" input.
-- Get the changes with "onSelectedIndexChange" which provides an index. -- Get the changes with "onSelectedIndexChange" which provides an index.
selection :: forall w i. (Int -> i) -> Array String -> String -> HH.HTML w i selection :: forall w i. (Int -> i) -> Array String -> String -> HH.HTML w i
selection action values selected = HH.div [HP.classes $ C.select <> C.is_normal] selection action values selected = HH.div [HP.classes [C.select, C.is_normal]]
[ HH.select [ HE.onSelectedIndexChange action ] [ HH.select [ HE.onSelectedIndexChange action ]
$ map (\n -> HH.option [HP.value n, HP.selected (n == selected)] [HH.text n]) values $ map (\n -> HH.option [HP.value n, HP.selected (n == selected)] [HH.text n]) values
] ]
@ -768,19 +768,19 @@ selection_field'' id title action values default_value selected
-- | selection': as `selection` but takes an array of tuple as values. -- | selection': as `selection` but takes an array of tuple as values.
-- | First value in the tuple is what to display, the second one is what to match on. -- | First value in the tuple is what to display, the second one is what to match on.
selection' :: forall w i. (Int -> i) -> Array (Tuple String String) -> String -> HH.HTML w i selection' :: forall w i. (Int -> i) -> Array (Tuple String String) -> String -> HH.HTML w i
selection' action values selected = HH.div [HP.classes $ C.select <> C.is_normal] selection' action values selected = HH.div [HP.classes [C.select, C.is_normal]]
[ HH.select [ HE.onSelectedIndexChange action ] [ HH.select [ HE.onSelectedIndexChange action ]
$ map (\n -> HH.option [HP.value (snd n), HP.selected ((snd n) == selected)] [HH.text (fst n)]) values $ map (\n -> HH.option [HP.value (snd n), HP.selected ((snd n) == selected)] [HH.text (fst n)]) values
] ]
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 :: 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_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 :: 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 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 :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
explanation content = HH.blockquote [HP.classes [HH.ClassName "justified"]] content explanation content = HH.blockquote [HP.classes [HH.ClassName "justified"]] content
@ -792,64 +792,64 @@ simple_quote :: forall w i. String -> HH.HTML w i
simple_quote content = quote [ p content ] simple_quote content = quote [ p content ]
tabs :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i tabs :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
tabs classes tab_list = HH.div [HP.classes $ C.tabs <> classes] [HH.ul_ tab_list] tabs classes tab_list = HH.div [HP.classes $ [C.tabs] <> classes] [HH.ul_ tab_list]
fancy_tabs :: forall w i. Array (HH.HTML w i) -> HH.HTML w i fancy_tabs :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
fancy_tabs arr = tabs (C.is_medium <> C.is_boxed <> C.is_centered) arr fancy_tabs arr = tabs [C.is_medium, C.is_boxed, C.is_centered] arr
tab_entry :: forall w i. Boolean -> String -> i -> HH.HTML w i tab_entry :: forall w i. Boolean -> String -> i -> HH.HTML w i
tab_entry active name action = tab_entry active name action =
HH.li (if active then [HP.classes C.is_active] else []) HH.li (if active then [HP.classes [C.is_active]] else [])
[ HH.a [HE.onClick \_ -> action] [HH.text name] ] [ HH.a [HE.onClick \_ -> action] [HH.text name] ]
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]] []
notification :: forall w i. Array HH.ClassName -> String -> i -> HH.HTML w i notification :: forall w i. Array HH.ClassName -> String -> i -> HH.HTML w i
notification classes value deleteaction = notification classes value deleteaction =
HH.div [HP.classes (C.notification <> classes)] HH.div [HP.classes $ [C.notification] <> classes]
[ delete_btn deleteaction [ delete_btn deleteaction
, HH.text value , HH.text value
] ]
notification_primary :: forall w i. String -> i -> HH.HTML w i notification_primary :: forall w i. String -> i -> HH.HTML w i
notification_primary value action = notification C.is_primary value action notification_primary value action = notification [C.is_primary] value action
notification_success :: forall w i. String -> i -> HH.HTML w i notification_success :: forall w i. String -> i -> HH.HTML w i
notification_success value action = notification C.is_success value action notification_success value action = notification [C.is_success] value action
notification_warning :: forall w i. String -> i -> HH.HTML w i notification_warning :: forall w i. String -> i -> HH.HTML w i
notification_warning value action = notification C.is_warning value action notification_warning value action = notification [C.is_warning] value action
notification_danger :: forall w i. String -> i -> HH.HTML w i notification_danger :: forall w i. String -> i -> HH.HTML w i
notification_danger value action = notification C.is_danger value action notification_danger value action = notification [C.is_danger] value action
notification_block' :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i notification_block' :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
notification_block' classes content = notification_block' classes content =
HH.div [HP.classes (C.notification <> classes)] content HH.div [HP.classes ([C.notification] <> classes)] content
notification' :: forall w i. Array HH.ClassName -> String -> HH.HTML w i notification' :: forall w i. Array HH.ClassName -> String -> HH.HTML w i
notification' classes value = notification' classes value =
HH.div [HP.classes (C.notification <> classes)] HH.div [HP.classes ([C.notification] <> classes)]
[ HH.text value ] [ HH.text value ]
notification_primary' :: forall w i. String -> HH.HTML w i notification_primary' :: forall w i. String -> HH.HTML w i
notification_primary' value = notification' C.is_primary value notification_primary' value = notification' [C.is_primary] value
notification_warning' :: forall w i. String -> HH.HTML w i notification_warning' :: forall w i. String -> HH.HTML w i
notification_warning' value = notification' C.is_warning value notification_warning' value = notification' [C.is_warning] value
notification_danger' :: forall w i. String -> HH.HTML w i notification_danger' :: forall w i. String -> HH.HTML w i
notification_danger' value = notification' C.is_danger value notification_danger' value = notification' [C.is_danger] value
notification_danger_block' :: forall w i. Array (HH.HTML w i) -> HH.HTML w i notification_danger_block' :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
notification_danger_block' content = notification_block' C.is_danger content notification_danger_block' content = notification_block' [C.is_danger] content
btn_validation_ :: forall w i. String -> HH.HTML w i btn_validation_ :: forall w i. String -> HH.HTML w i
btn_validation_ str = HH.button btn_validation_ str = HH.button
-- [ HP.style "padding: 0.5rem 1.25rem;" -- [ HP.style "padding: 0.5rem 1.25rem;"
[ HP.type_ HP.ButtonSubmit [ HP.type_ HP.ButtonSubmit
, HP.classes $ C.button <> C.is_primary , HP.classes [C.button, C.is_primary]
] ]
[ HH.text str ] [ HH.text str ]
@ -858,7 +858,7 @@ btn_validation = btn_validation_ "Validate"
-- | Box with tags. -- | Box with tags.
-- |``` -- |```
-- |box_with_tag C.has_background_danger_light some_tag [Bulma.p "Hello"] -- |box_with_tag [C.has_background_danger_light] some_tag [Bulma.p "Hello"]
-- |``` -- |```
box_with_tag :: forall w action. box_with_tag :: forall w action.
Array HH.ClassName -- css classes (like the color) Array HH.ClassName -- css classes (like the color)
@ -867,5 +867,5 @@ box_with_tag :: forall w action.
-> HH.HTML w action -> HH.HTML w action
box_with_tag colors tag xs box_with_tag colors tag xs
= box_ = box_
(C.no_padding_left <> C.no_padding_top <> colors) ([C.no_padding_left, C.no_padding_top] <> colors)
[tag, HH.div [HP.classes $ C.restore_padding_left <> C.restore_padding_top] xs] [tag, HH.div [HP.classes [C.restore_padding_left, C.restore_padding_top]] xs]

View File

@ -4,130 +4,142 @@ import Prelude (show, ($), (<>))
import Halogen.HTML as HH import Halogen.HTML as HH
margin_top :: Int -> Array HH.ClassName margin_top :: Int -> HH.ClassName
margin_top size = [HH.ClassName $ "mt-" <> show size] margin_top size = HH.ClassName $ "mt-" <> show size
margin_left :: Int -> Array HH.ClassName margin_left :: Int -> HH.ClassName
margin_left size = [HH.ClassName $ "ml-" <> show size] margin_left size = HH.ClassName $ "ml-" <> show size
margin_bottom :: Int -> Array HH.ClassName margin_bottom :: Int -> HH.ClassName
margin_bottom size = [HH.ClassName $ "mb-" <> show size] margin_bottom size = HH.ClassName $ "mb-" <> show size
is :: Int -> Array HH.ClassName margin_right :: Int -> HH.ClassName
is size = [HH.ClassName $ "is-" <> show size] margin_right size = HH.ClassName $ "mr-" <> show size
is_size :: Int -> Array HH.ClassName is :: Int -> HH.ClassName
is_size size = [HH.ClassName $ "is-size-" <> show size] is size = HH.ClassName $ "is-" <> show size
padding_left :: Int -> Array HH.ClassName is_size :: Int -> HH.ClassName
padding_left size = [HH.ClassName $ "pl-" <> show size] is_size size = HH.ClassName $ "is-size-" <> show size
box = [HH.ClassName "box"] :: Array HH.ClassName padding_left :: Int -> HH.ClassName
breadcrumb = [HH.ClassName "breadcrumb"] :: Array HH.ClassName padding_left size = HH.ClassName $ "pl-" <> show size
button = [HH.ClassName "button"] :: Array HH.ClassName
buttons = [HH.ClassName "buttons"] :: Array HH.ClassName padding_right :: Int -> HH.ClassName
column = [HH.ClassName "column"] :: Array HH.ClassName padding_right size = HH.ClassName $ "pr-" <> show size
columns = [HH.ClassName "columns"] :: Array HH.ClassName
container = [HH.ClassName "container"] :: Array HH.ClassName padding_top :: Int -> HH.ClassName
content = [HH.ClassName "content"] :: Array HH.ClassName padding_top size = HH.ClassName $ "pt-" <> show size
control = [HH.ClassName "control"] :: Array HH.ClassName
delete = [HH.ClassName "delete"] :: Array HH.ClassName padding_bottom :: Int -> HH.ClassName
field_body = [HH.ClassName "field-body"] :: Array HH.ClassName padding_bottom size = HH.ClassName $ "pb-" <> show size
field = [HH.ClassName "field"] :: Array HH.ClassName
field_label = [HH.ClassName "field-label"] :: Array HH.ClassName box = HH.ClassName "box" :: HH.ClassName
has_addons = [HH.ClassName "has-addons"] :: Array HH.ClassName breadcrumb = HH.ClassName "breadcrumb" :: HH.ClassName
has_background_danger_dark = [HH.ClassName "has-background-danger-dark"] :: Array HH.ClassName button = HH.ClassName "button" :: HH.ClassName
has_background_danger = [HH.ClassName "has-background-danger"] :: Array HH.ClassName buttons = HH.ClassName "buttons" :: HH.ClassName
has_background_danger_light = [HH.ClassName "has-background-danger-light"] :: Array HH.ClassName column = HH.ClassName "column" :: HH.ClassName
has_background_dark = [HH.ClassName "has-background-dark"] :: Array HH.ClassName columns = HH.ClassName "columns" :: HH.ClassName
has_background_info_dark = [HH.ClassName "has-background-info-dark"] :: Array HH.ClassName container = HH.ClassName "container" :: HH.ClassName
has_background_info = [HH.ClassName "has-background-info"] :: Array HH.ClassName content = HH.ClassName "content" :: HH.ClassName
has_background_info_light = [HH.ClassName "has-background-info-light"] :: Array HH.ClassName control = HH.ClassName "control" :: HH.ClassName
has_background_link_dark = [HH.ClassName "has-background-link-dark"] :: Array HH.ClassName delete = HH.ClassName "delete" :: HH.ClassName
has_background_link_light = [HH.ClassName "has-background-link-light"] :: Array HH.ClassName field_body = HH.ClassName "field-body" :: HH.ClassName
has_background_primary_dark = [HH.ClassName "has-background-primary-dark"] :: Array HH.ClassName field = HH.ClassName "field" :: HH.ClassName
has_background_primary_light = [HH.ClassName "has-background-primary-light"] :: Array HH.ClassName field_label = HH.ClassName "field-label" :: HH.ClassName
has_background_success_dark = [HH.ClassName "has-background-success-dark"] :: Array HH.ClassName has_addons = HH.ClassName "has-addons" :: HH.ClassName
has_background_success_light = [HH.ClassName "has-background-success-light"] :: Array HH.ClassName has_background_danger_dark = HH.ClassName "has-background-danger-dark" :: HH.ClassName
has_background_warning_dark = [HH.ClassName "has-background-warning-dark"] :: Array HH.ClassName has_background_danger = HH.ClassName "has-background-danger" :: HH.ClassName
has_background_warning = [HH.ClassName "has-background-warning"] :: Array HH.ClassName has_background_danger_light = HH.ClassName "has-background-danger-light" :: HH.ClassName
has_background_warning_light = [HH.ClassName "has-background-warning-light"] :: Array HH.ClassName has_background_dark = HH.ClassName "has-background-dark" :: HH.ClassName
has_dropdown = [HH.ClassName "has-dropdown"] :: Array HH.ClassName has_background_info_dark = HH.ClassName "has-background-info-dark" :: HH.ClassName
has_succeeds_separator = [HH.ClassName "has-succeeds-separator"] :: Array HH.ClassName has_background_info = HH.ClassName "has-background-info" :: HH.ClassName
has_text_centered = [HH.ClassName "has-text-centered"] :: Array HH.ClassName has_background_info_light = HH.ClassName "has-background-info-light" :: HH.ClassName
has_text_dark = [HH.ClassName "has-text-dark"] :: Array HH.ClassName has_background_link_dark = HH.ClassName "has-background-link-dark" :: HH.ClassName
has_text_light = [HH.ClassName "has-text-light"] :: Array HH.ClassName has_background_link_light = HH.ClassName "has-background-link-light" :: HH.ClassName
help = [HH.ClassName "help"] :: Array HH.ClassName has_background_primary_dark = HH.ClassName "has-background-primary-dark" :: HH.ClassName
hero_body = [HH.ClassName "hero-body"] :: Array HH.ClassName has_background_primary_light = HH.ClassName "has-background-primary-light" :: HH.ClassName
hero = [HH.ClassName "hero"] :: Array HH.ClassName has_background_success_dark = HH.ClassName "has-background-success-dark" :: HH.ClassName
input = [HH.ClassName "input"] :: Array HH.ClassName has_background_success_light = HH.ClassName "has-background-success-light" :: HH.ClassName
is4 = [HH.ClassName "is-4"] :: Array HH.ClassName has_background_warning_dark = HH.ClassName "has-background-warning-dark" :: HH.ClassName
is5 = [HH.ClassName "is-5"] :: Array HH.ClassName has_background_warning = HH.ClassName "has-background-warning" :: HH.ClassName
is_active = [HH.ClassName "is-active"] :: Array HH.ClassName has_background_warning_light = HH.ClassName "has-background-warning-light" :: HH.ClassName
is_ancestor = [HH.ClassName "is-ancestor"] :: Array HH.ClassName has_dropdown = HH.ClassName "has-dropdown" :: HH.ClassName
is_boxed = [HH.ClassName "is-boxed"] :: Array HH.ClassName has_succeeds_separator = HH.ClassName "has-succeeds-separator" :: HH.ClassName
is_centered = [HH.ClassName "is-centered"] :: Array HH.ClassName has_text_centered = HH.ClassName "has-text-centered" :: HH.ClassName
is_child = [HH.ClassName "is-child"] :: Array HH.ClassName has_text_dark = HH.ClassName "has-text-dark" :: HH.ClassName
is_danger = [HH.ClassName "is-danger"] :: Array HH.ClassName has_text_light = HH.ClassName "has-text-light" :: HH.ClassName
is_dark = [HH.ClassName "is-dark"] :: Array HH.ClassName help = HH.ClassName "help" :: HH.ClassName
is_horizontal = [HH.ClassName "is-horizontal"] :: Array HH.ClassName hero_body = HH.ClassName "hero-body" :: HH.ClassName
is_hoverable = [HH.ClassName "is-hoverable"] :: Array HH.ClassName hero = HH.ClassName "hero" :: HH.ClassName
is_info = [HH.ClassName "is-info"] :: Array HH.ClassName input = HH.ClassName "input" :: HH.ClassName
is_italic = [HH.ClassName "is-italic"] :: Array HH.ClassName is4 = HH.ClassName "is-4" :: HH.ClassName
is_large = [HH.ClassName "is-large"] :: Array HH.ClassName is5 = HH.ClassName "is-5" :: HH.ClassName
is_light = [HH.ClassName "is-light"] :: Array HH.ClassName is_active = HH.ClassName "is-active" :: HH.ClassName
is_medium = [HH.ClassName "is-medium"] :: Array HH.ClassName is_ancestor = HH.ClassName "is-ancestor" :: HH.ClassName
is_normal = [HH.ClassName "is-normal"] :: Array HH.ClassName is_boxed = HH.ClassName "is-boxed" :: HH.ClassName
is_parent = [HH.ClassName "is-parent"] :: Array HH.ClassName is_centered = HH.ClassName "is-centered" :: HH.ClassName
is_primary = [HH.ClassName "is-primary"] :: Array HH.ClassName is_child = HH.ClassName "is-child" :: HH.ClassName
is_selected = [HH.ClassName "is-selected"] :: Array HH.ClassName is_danger = HH.ClassName "is-danger" :: HH.ClassName
is_small = [HH.ClassName "is-small"] :: Array HH.ClassName is_dark = HH.ClassName "is-dark" :: HH.ClassName
is_spaced = [HH.ClassName "is-spaced"] :: Array HH.ClassName is_horizontal = HH.ClassName "is-horizontal" :: HH.ClassName
is_static = [HH.ClassName "is-static"] :: Array HH.ClassName is_hoverable = HH.ClassName "is-hoverable" :: HH.ClassName
is_success = [HH.ClassName "is-success"] :: Array HH.ClassName is_info = HH.ClassName "is-info" :: HH.ClassName
is_vertical = [HH.ClassName "is-vertical"] :: Array HH.ClassName is_italic = HH.ClassName "is-italic" :: HH.ClassName
is_warning = [HH.ClassName "is-warning"] :: Array HH.ClassName is_large = HH.ClassName "is-large" :: HH.ClassName
label = [HH.ClassName "label"] :: Array HH.ClassName is_light = HH.ClassName "is-light" :: HH.ClassName
level = [HH.ClassName "level"] :: Array HH.ClassName is_medium = HH.ClassName "is-medium" :: HH.ClassName
level_item = [HH.ClassName "level-item"] :: Array HH.ClassName is_normal = HH.ClassName "is-normal" :: HH.ClassName
level_left = [HH.ClassName "level-left"] :: Array HH.ClassName is_parent = HH.ClassName "is-parent" :: HH.ClassName
level_right = [HH.ClassName "level-right"] :: Array HH.ClassName is_primary = HH.ClassName "is-primary" :: HH.ClassName
medium = [HH.ClassName "is-medium"] :: Array HH.ClassName is_selected = HH.ClassName "is-selected" :: HH.ClassName
message_body = [HH.ClassName "message-body"] :: Array HH.ClassName is_small = HH.ClassName "is-small" :: HH.ClassName
message_header = [HH.ClassName "message-header"] :: Array HH.ClassName is_spaced = HH.ClassName "is-spaced" :: HH.ClassName
message = [HH.ClassName "message"] :: Array HH.ClassName is_static = HH.ClassName "is-static" :: HH.ClassName
modal_background = [HH.ClassName "modal-background"] :: Array HH.ClassName is_success = HH.ClassName "is-success" :: HH.ClassName
modal_card_body = [HH.ClassName "modal-card-body"] :: Array HH.ClassName is_vertical = HH.ClassName "is-vertical" :: HH.ClassName
modal_card_foot = [HH.ClassName "modal-card-foot"] :: Array HH.ClassName is_warning = HH.ClassName "is-warning" :: HH.ClassName
modal_card_head = [HH.ClassName "modal-card-head"] :: Array HH.ClassName label = HH.ClassName "label" :: HH.ClassName
modal_card = [HH.ClassName "modal-card"] :: Array HH.ClassName level = HH.ClassName "level" :: HH.ClassName
modal_card_title = [HH.ClassName "modal-card-title"] :: Array HH.ClassName level_item = HH.ClassName "level-item" :: HH.ClassName
modal = [HH.ClassName "modal"] :: Array HH.ClassName level_left = HH.ClassName "level-left" :: HH.ClassName
navbar_brand = [HH.ClassName "navbar-brand"] :: Array HH.ClassName level_right = HH.ClassName "level-right" :: HH.ClassName
navbar_burger = [HH.ClassName "navbar-burger"] :: Array HH.ClassName medium = HH.ClassName "is-medium" :: HH.ClassName
navbar_divider = [HH.ClassName "navbar-divider"] :: Array HH.ClassName message_body = HH.ClassName "message-body" :: HH.ClassName
navbar_dropdown = [HH.ClassName "navbar-dropdown"] :: Array HH.ClassName message_header = HH.ClassName "message-header" :: HH.ClassName
navbar_end = [HH.ClassName "navbar-end"] :: Array HH.ClassName message = HH.ClassName "message" :: HH.ClassName
navbar = [HH.ClassName "navbar"] :: Array HH.ClassName modal_background = HH.ClassName "modal-background" :: HH.ClassName
navbar_item = [HH.ClassName "navbar-item"] :: Array HH.ClassName modal_card_body = HH.ClassName "modal-card-body" :: HH.ClassName
navbar_link = [HH.ClassName "navbar-link"] :: Array HH.ClassName modal_card_foot = HH.ClassName "modal-card-foot" :: HH.ClassName
navbar_menu = [HH.ClassName "navbar-menu"] :: Array HH.ClassName modal_card_head = HH.ClassName "modal-card-head" :: HH.ClassName
navbar_start = [HH.ClassName "navbar-start"] :: Array HH.ClassName modal_card = HH.ClassName "modal-card" :: HH.ClassName
no_margin_bottom = [HH.ClassName "mb-0"] :: Array HH.ClassName modal_card_title = HH.ClassName "modal-card-title" :: HH.ClassName
no_padding_bottom = [HH.ClassName "pb-0"] :: Array HH.ClassName modal = HH.ClassName "modal" :: HH.ClassName
no_padding_left = [HH.ClassName "pl-0"] :: Array HH.ClassName navbar_brand = HH.ClassName "navbar-brand" :: HH.ClassName
no_padding_top = [HH.ClassName "pt-0"] :: Array HH.ClassName navbar_burger = HH.ClassName "navbar-burger" :: HH.ClassName
normal = [HH.ClassName "is-normal"] :: Array HH.ClassName navbar_divider = HH.ClassName "navbar-divider" :: HH.ClassName
notification = [HH.ClassName "notification"] :: Array HH.ClassName navbar_dropdown = HH.ClassName "navbar-dropdown" :: HH.ClassName
restore_padding_left = [HH.ClassName "pl-4"] :: Array HH.ClassName navbar_end = HH.ClassName "navbar-end" :: HH.ClassName
restore_padding_top = [HH.ClassName "pt-4"] :: Array HH.ClassName navbar = HH.ClassName "navbar" :: HH.ClassName
section = [HH.ClassName "section"] :: Array HH.ClassName navbar_item = HH.ClassName "navbar-item" :: HH.ClassName
select = [HH.ClassName "select"] :: Array HH.ClassName navbar_link = HH.ClassName "navbar-link" :: HH.ClassName
subtitle = [HH.ClassName "subtitle"] :: Array HH.ClassName navbar_menu = HH.ClassName "navbar-menu" :: HH.ClassName
table = [HH.ClassName "table"] :: Array HH.ClassName navbar_start = HH.ClassName "navbar-start" :: HH.ClassName
tabs = [HH.ClassName "tabs"] :: Array HH.ClassName no_margin_bottom = HH.ClassName "mb-0" :: HH.ClassName
tag = [HH.ClassName "tag"] :: Array HH.ClassName no_padding_bottom = HH.ClassName "pb-0" :: HH.ClassName
tags = [HH.ClassName "tags"] :: Array HH.ClassName no_padding_left = HH.ClassName "pl-0" :: HH.ClassName
textarea = [HH.ClassName "textarea"] :: Array HH.ClassName no_padding_top = HH.ClassName "pt-0" :: HH.ClassName
tile = [HH.ClassName "tile"] :: Array HH.ClassName normal = HH.ClassName "is-normal" :: HH.ClassName
title = [HH.ClassName "title"] :: Array HH.ClassName notification = HH.ClassName "notification" :: HH.ClassName
restore_padding_left = HH.ClassName "pl-4" :: HH.ClassName
restore_padding_top = HH.ClassName "pt-4" :: HH.ClassName
section = HH.ClassName "section" :: HH.ClassName
select = HH.ClassName "select" :: HH.ClassName
subtitle = HH.ClassName "subtitle" :: HH.ClassName
table = HH.ClassName "table" :: HH.ClassName
tabs = HH.ClassName "tabs" :: HH.ClassName
tag = HH.ClassName "tag" :: HH.ClassName
tags = HH.ClassName "tags" :: HH.ClassName
textarea = HH.ClassName "textarea" :: HH.ClassName
tile = HH.ClassName "tile" :: HH.ClassName
title = HH.ClassName "title" :: HH.ClassName