Major refactoring to make CSS classes not arrays anymore.

This commit is contained in:
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 =
if (state.are_we_connected_to_authd && state.are_we_connected_to_dnsmanagerd)
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 = 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
= 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
@ -334,10 +334,10 @@ render state
render_header :: forall monad. MonadAff monad => H.ComponentHTML Action ChildSlots monad
render_header =
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.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.subtitle] ]
[ HH.strong_ [ HH.u_ [ HH.text "net libre" ]]
, 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
Home -> Bulma.h3 "Select an action"
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 ]
]
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_
[ Bulma.btn_ (C.is_small) "Get orphan domains" ShowOrphanDomains
[ Bulma.btn_ [C.is_small] "Get orphan domains" ShowOrphanDomains
, 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 ]
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 ]
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

View File

@ -277,7 +277,7 @@ render { accepted_domains, my_domains, newDomainForm, askDomainTransferForm, del
, HH.td_ [ HH.text $ fromMaybe "" domain.share_key ]
, 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) ]
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) ]
]

View File

@ -1,7 +1,7 @@
-- | `App.HomeInterface` presents the website and its features.
module App.Page.Home where
import Prelude (Unit, pure, unit, ($), (<>))
import Prelude (Unit, pure, unit, ($))
-- import Data.Either (Either(..))
-- 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,
afin de purger un certain nombre de vieux comptes de robots.
"""
, HH.p [ HP.classes (C.margin_top 3) ]
[ Bulma.outside_link (C.button <> C.is_info) url_linuxfr "Cliquez ici pour en savoir plus." ]
, 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.section_small
[ Bulma.h1 "Welcome to netlib.re"

View File

@ -129,17 +129,17 @@ render { logged, active, admin, login } =
navbar_color = C.is_success
main_nav =
HH.nav [ HP.classes $ C.navbar <> navbar_color
HH.nav [ HP.classes [C.navbar, navbar_color]
, ARIA.label "main navigation"
, ARIA.role "navigation"
]
logo = HH.strong [HP.classes $ C.navbar_item <> (C.is_size 4)] [HH.text "🍉"]
-- HH.a [HP.classes C.navbar_item, HP.href "/"]
logo = HH.strong [HP.classes [C.navbar_item, (C.is_size 4)]] [HH.text "🍉"]
-- HH.a [HP.classes [C.navbar_item], HP.href "/"]
-- [HH.img [HP.src "/logo.jpeg", HP.width 112, HP.height 28]]
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.expanded "false"
, Bulma.data_target "navbar-netlibre"
@ -149,14 +149,14 @@ render { logged, active, admin, login } =
, 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
[ 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_end = HH.div [HP.classes C.navbar_end]
navbar_start = HH.div [HP.classes [C.navbar_start]]
navbar_end = HH.div [HP.classes [C.navbar_end]]
link_home = nav_link "Home" (Navigate Home)
link_domains = nav_link "Domains" (Navigate DomainList)
@ -168,38 +168,38 @@ render { logged, active, admin, login } =
render_login Nothing = []
render_login (Just l)= [nav_link ("logged as " <> l) (Navigate Setup)]
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
= 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 str = HH.a [HP.classes C.navbar_link] [HH.text str]
dropdown_separator = HH.hr [HP.classes C.navbar_divider]
= 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 str = HH.a [HP.classes [C.navbar_link]] [HH.text str]
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_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)
] [ (HH.strong [] [ HH.text str ]) ]
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 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_ classes str action =
HH.a [ HP.classes (C.navbar_item <> classes)
HH.a [ HP.classes ([C.navbar_item] <> classes)
, HE.onClick (\_ -> action)
] [ (HH.text 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_secondary link str = dropdown_element C.has_background_warning_light 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_secondary link str = dropdown_element [C.has_background_warning_light] link str
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
= 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 =
dropdown "Source code"
[ 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/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 _ -> []
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
[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
]
]

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
where
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_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_delete_account = Bulma.alert_btn "Delete my account" DeleteAccountPopup

View File

@ -357,7 +357,7 @@ render state
NewRRModal _ -> render_current_rr_modal
UpdateRRModal -> render_current_rr_modal
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.hr
@ -522,7 +522,7 @@ render state
-- Nothing -> Bulma.p "default value for the version (spf1)"
-- Just v -> Bulma.box_input "vSPF" "Version" "spf1" (updateForm Field_SPF_v) v
, 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."] ]
, maybe (Bulma.p "You don't have any mechanism.") display_mechanisms state._currentRR.mechanisms
, Bulma.hr
@ -535,7 +535,7 @@ render state
, Bulma.btn "Add a mechanism" SPF_Mechanism_Add
]
, 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."] ]
, maybe (Bulma.p "You don't have any modifier.") display_modifiers state._currentRR.modifiers
, Bulma.hr
@ -626,12 +626,12 @@ render state
, Bulma.hr
, 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.")
(display_dmarc_mail_addresses DMARC_remove_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.")
(display_dmarc_mail_addresses DMARC_remove_ruf)
state.dmarc.ruf
@ -641,8 +641,8 @@ render state
, render_dmarc_mail_errors
, 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.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.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.hr
@ -1041,31 +1041,31 @@ handleQuery = case _ of
add_RR state new_rr = state { _resources = (state._resources <> [ new_rr ]) }
-- 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 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 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 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_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 records
= HH.div_ $
(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_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_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_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 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_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_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_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_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 [bg_color_ro] tag_basic_ro Bulma.simple_table_header_ro table_content_w_seps all_basic_ro_rr)
where
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
@ -1096,7 +1096,7 @@ render_resources records
-> Array (HH.HTML w Action)
rr_box colors title header dp rrs =
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 []
--title_col_props = C.is 1
@ -1111,7 +1111,7 @@ render_resources records
table_content records_ = HH.tbody_ $ map rows records_
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
render_row :: ResourceRecord -> Array (HH.HTML w Action)
@ -1223,8 +1223,8 @@ render_resources records
show_token_or_btn rr =
case rr.rrtype of
"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)
"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)
_ -> HH.text ""
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.
"""
, 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
RFC5321.MailFrom domain of "cbg.bounces.example.com", and the address
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
, 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

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 content_ action
= 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">
-- <input type="checkbox" />
-- 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).
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_ = 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 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 []
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 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 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 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 ]
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"] ]
@ -69,13 +69,13 @@ hdiv = HH.div [ HP.classes [HH.ClassName "mt-5"] ]
-- = column [ HH.ClassName ("is-offset-" <> (show offset) <> " is-" <> (show size)) ]
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 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_ 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
@ -228,7 +228,7 @@ simple_table_header
simple_table_header_ro :: forall w i. HH.HTML w i
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_ [ name_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
= 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_ [ ttl_header ]
, HH.th_ [ mname_soa_header ]
@ -382,7 +382,7 @@ textarea_ classes placeholder value action
[ HE.onValueInput action
, HP.value value
, 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
@ -398,63 +398,63 @@ btn_abbr_ :: forall w action.
btn_abbr_ btnclasses divclasses explanation_ title action
= HH.button
[ 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 ] ] ]
btn_abbr :: forall w action. String -> String -> action -> HH.HTML w 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 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 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 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 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 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 = 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 = 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 = 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 classes title
= HH.button
[ HP.classes $ C.button <> classes
[ HP.classes $ [C.button] <> classes
] [ HH.text title ]
-- | 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.
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 ]
[ HH.div [ HP.classes C.level_left ] $ itemize left
, HH.div [ HP.classes C.level_right ] $ itemize right
level left right = HH.nav [ HP.classes [C.level] ]
[ HH.div [ HP.classes [C.level_left] ] $ itemize left
, 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_ classes title action
= HH.button
[ HE.onClick \_ -> action
, HP.classes $ C.button <> classes
, HP.classes $ [C.button] <> classes
] [ HH.text title ]
btn :: forall w action. String -> action -> HH.HTML w action
btn title action = btn_ [] title 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.
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.
-- | 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 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`.
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)]
[HH.label [ HP.classes C.label, HP.for id ] [ HH.text title ]]
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 ]]
-- | 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 content
= 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_body] ]
[ HH.div [HP.classes [C.field] ] [ HH.div [HP.classes [C.control] ] [ 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 :: forall w i. String -> String -> HH.HTML w i -> HH.HTML w i
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_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
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 id title button_text action
= field_entry id title $ HH.button
[ 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
] [ 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)
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 = HH.section [ HP.classes (C.section <> C.medium) ]
section_medium = HH.section [ HP.classes [C.section, C.medium] ]
new_domain_field :: forall 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
= div_field_ C.has_addons
= div_field_ [C.has_addons]
[ HH.p
[ HP.classes C.control ]
[ HP.classes [C.control] ]
[ HH.input $
[ HE.onValueInput inputaction
, HP.placeholder "www"
, HP.value text_
, HP.type_ HP.InputText
, HP.classes (C.is_primary <> C.input)
, HP.classes [C.is_primary, C.input]
]
]
, HH.p
[ HP.classes C.control ]
[ HP.classes [C.control] ]
[ 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 ]
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_ 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 value = HH.option_ [HH.text value]
select :: forall w i. HH.Node DHI.HTMLselect w i
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]
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 ]
= 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 ]
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 ]
]
]
]
@ -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 _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
= 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
]
]
@ -633,29 +633,29 @@ 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)]
container = HH.div [HP.classes [C.container, C.is_info]]
data_target :: forall r i. String -> HP.IProp r i
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_ = 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_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_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_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_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_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
= HH.button [ HP.classes [C.button]
, HE.onClick \_ -> action
] [HH.text "Cancel"]
@ -666,28 +666,28 @@ hr :: forall w i. HH.HTML w i
hr = HH.hr_
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_ = tile []
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 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_ 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
error_message head body = article_ [C.is_danger] head body
-- | 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.
String -> String -> String -> (String -> i) -> String -> String -> HH.HTML w i
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_label <> C.normal) ]
[HH.label [ HP.classes C.label, HP.for id ] [ HH.text title ]]
, HH.div [ HP.classes C.field_body ]
[ HH.div [ HP.classes $ C.has_addons <> C.field ]
[ HH.p [HP.classes C.control]
= HH.div [HP.classes [C.field, C.is_horizontal]]
[ HH.div [ HP.classes [C.field_label, C.normal] ]
[HH.label [ HP.classes [C.label], HP.for id ] [ HH.text title ]]
, HH.div [ HP.classes [C.field_body] ]
[ HH.div [ HP.classes [C.has_addons, C.field] ]
[ HH.p [HP.classes [C.control]]
[ HH.input $
[ HE.onValueInput action
, HP.value value
@ -722,8 +722,8 @@ input_with_side_text id title placeholder action value sidetext
, HP.id id
]
]
, HH.p [HP.classes C.control]
[ HH.a [HP.classes $ C.button <> C.is_small <> C.is_static]
, HH.p [HP.classes [C.control]]
[ HH.a [HP.classes [C.button, C.is_small, C.is_static]]
[HH.text sidetext] ]
]
]
@ -744,7 +744,7 @@ modal title body foot =
-- selection: create a "select" input.
-- Get the changes with "onSelectedIndexChange" which provides an index.
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 ]
$ 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.
-- | 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' 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 ]
$ 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 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_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
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
@ -792,64 +792,64 @@ simple_quote :: forall w i. String -> HH.HTML w i
simple_quote content = quote [ p content ]
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 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 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] ]
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 classes value deleteaction =
HH.div [HP.classes (C.notification <> classes)]
HH.div [HP.classes $ [C.notification] <> classes]
[ delete_btn deleteaction
, HH.text value
]
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 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 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 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' 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' classes value =
HH.div [HP.classes (C.notification <> classes)]
HH.div [HP.classes ([C.notification] <> classes)]
[ HH.text value ]
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' 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' 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' 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_ str = HH.button
-- [ HP.style "padding: 0.5rem 1.25rem;"
[ HP.type_ HP.ButtonSubmit
, HP.classes $ C.button <> C.is_primary
, HP.classes [C.button, C.is_primary]
]
[ HH.text str ]
@ -858,7 +858,7 @@ btn_validation = btn_validation_ "Validate"
-- | 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.
Array HH.ClassName -- css classes (like the color)
@ -867,5 +867,5 @@ box_with_tag :: forall w action.
-> 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]
([C.no_padding_left, C.no_padding_top] <> colors)
[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
margin_top :: Int -> Array HH.ClassName
margin_top size = [HH.ClassName $ "mt-" <> show size]
margin_top :: Int -> HH.ClassName
margin_top size = HH.ClassName $ "mt-" <> show size
margin_left :: Int -> Array HH.ClassName
margin_left size = [HH.ClassName $ "ml-" <> show size]
margin_left :: Int -> HH.ClassName
margin_left size = HH.ClassName $ "ml-" <> show size
margin_bottom :: Int -> Array HH.ClassName
margin_bottom size = [HH.ClassName $ "mb-" <> show size]
margin_bottom :: Int -> HH.ClassName
margin_bottom size = HH.ClassName $ "mb-" <> show size
is :: Int -> Array HH.ClassName
is size = [HH.ClassName $ "is-" <> show size]
margin_right :: Int -> HH.ClassName
margin_right size = HH.ClassName $ "mr-" <> show size
is_size :: Int -> Array HH.ClassName
is_size size = [HH.ClassName $ "is-size-" <> show size]
is :: Int -> HH.ClassName
is size = HH.ClassName $ "is-" <> show size
padding_left :: Int -> Array HH.ClassName
padding_left size = [HH.ClassName $ "pl-" <> show size]
is_size :: Int -> HH.ClassName
is_size size = HH.ClassName $ "is-size-" <> show size
box = [HH.ClassName "box"] :: Array HH.ClassName
breadcrumb = [HH.ClassName "breadcrumb"] :: Array HH.ClassName
button = [HH.ClassName "button"] :: Array HH.ClassName
buttons = [HH.ClassName "buttons"] :: Array HH.ClassName
column = [HH.ClassName "column"] :: Array HH.ClassName
columns = [HH.ClassName "columns"] :: Array HH.ClassName
container = [HH.ClassName "container"] :: Array HH.ClassName
content = [HH.ClassName "content"] :: Array HH.ClassName
control = [HH.ClassName "control"] :: Array HH.ClassName
delete = [HH.ClassName "delete"] :: Array HH.ClassName
field_body = [HH.ClassName "field-body"] :: Array HH.ClassName
field = [HH.ClassName "field"] :: Array HH.ClassName
field_label = [HH.ClassName "field-label"] :: Array HH.ClassName
has_addons = [HH.ClassName "has-addons"] :: Array HH.ClassName
has_background_danger_dark = [HH.ClassName "has-background-danger-dark"] :: Array HH.ClassName
has_background_danger = [HH.ClassName "has-background-danger"] :: Array HH.ClassName
has_background_danger_light = [HH.ClassName "has-background-danger-light"] :: Array HH.ClassName
has_background_dark = [HH.ClassName "has-background-dark"] :: Array HH.ClassName
has_background_info_dark = [HH.ClassName "has-background-info-dark"] :: Array HH.ClassName
has_background_info = [HH.ClassName "has-background-info"] :: Array HH.ClassName
has_background_info_light = [HH.ClassName "has-background-info-light"] :: Array HH.ClassName
has_background_link_dark = [HH.ClassName "has-background-link-dark"] :: Array HH.ClassName
has_background_link_light = [HH.ClassName "has-background-link-light"] :: Array HH.ClassName
has_background_primary_dark = [HH.ClassName "has-background-primary-dark"] :: Array HH.ClassName
has_background_primary_light = [HH.ClassName "has-background-primary-light"] :: Array HH.ClassName
has_background_success_dark = [HH.ClassName "has-background-success-dark"] :: Array HH.ClassName
has_background_success_light = [HH.ClassName "has-background-success-light"] :: Array HH.ClassName
has_background_warning_dark = [HH.ClassName "has-background-warning-dark"] :: Array HH.ClassName
has_background_warning = [HH.ClassName "has-background-warning"] :: Array HH.ClassName
has_background_warning_light = [HH.ClassName "has-background-warning-light"] :: Array HH.ClassName
has_dropdown = [HH.ClassName "has-dropdown"] :: Array HH.ClassName
has_succeeds_separator = [HH.ClassName "has-succeeds-separator"] :: Array HH.ClassName
has_text_centered = [HH.ClassName "has-text-centered"] :: Array HH.ClassName
has_text_dark = [HH.ClassName "has-text-dark"] :: Array HH.ClassName
has_text_light = [HH.ClassName "has-text-light"] :: Array HH.ClassName
help = [HH.ClassName "help"] :: Array HH.ClassName
hero_body = [HH.ClassName "hero-body"] :: Array HH.ClassName
hero = [HH.ClassName "hero"] :: Array HH.ClassName
input = [HH.ClassName "input"] :: Array HH.ClassName
is4 = [HH.ClassName "is-4"] :: Array HH.ClassName
is5 = [HH.ClassName "is-5"] :: Array HH.ClassName
is_active = [HH.ClassName "is-active"] :: Array HH.ClassName
is_ancestor = [HH.ClassName "is-ancestor"] :: Array HH.ClassName
is_boxed = [HH.ClassName "is-boxed"] :: Array HH.ClassName
is_centered = [HH.ClassName "is-centered"] :: Array HH.ClassName
is_child = [HH.ClassName "is-child"] :: Array HH.ClassName
is_danger = [HH.ClassName "is-danger"] :: Array HH.ClassName
is_dark = [HH.ClassName "is-dark"] :: Array HH.ClassName
is_horizontal = [HH.ClassName "is-horizontal"] :: Array HH.ClassName
is_hoverable = [HH.ClassName "is-hoverable"] :: Array HH.ClassName
is_info = [HH.ClassName "is-info"] :: Array HH.ClassName
is_italic = [HH.ClassName "is-italic"] :: Array HH.ClassName
is_large = [HH.ClassName "is-large"] :: Array HH.ClassName
is_light = [HH.ClassName "is-light"] :: Array HH.ClassName
is_medium = [HH.ClassName "is-medium"] :: Array HH.ClassName
is_normal = [HH.ClassName "is-normal"] :: Array HH.ClassName
is_parent = [HH.ClassName "is-parent"] :: Array HH.ClassName
is_primary = [HH.ClassName "is-primary"] :: Array HH.ClassName
is_selected = [HH.ClassName "is-selected"] :: Array HH.ClassName
is_small = [HH.ClassName "is-small"] :: Array HH.ClassName
is_spaced = [HH.ClassName "is-spaced"] :: Array HH.ClassName
is_static = [HH.ClassName "is-static"] :: Array HH.ClassName
is_success = [HH.ClassName "is-success"] :: Array HH.ClassName
is_vertical = [HH.ClassName "is-vertical"] :: Array HH.ClassName
is_warning = [HH.ClassName "is-warning"] :: Array HH.ClassName
label = [HH.ClassName "label"] :: Array HH.ClassName
level = [HH.ClassName "level"] :: Array HH.ClassName
level_item = [HH.ClassName "level-item"] :: Array HH.ClassName
level_left = [HH.ClassName "level-left"] :: Array HH.ClassName
level_right = [HH.ClassName "level-right"] :: Array HH.ClassName
medium = [HH.ClassName "is-medium"] :: Array HH.ClassName
message_body = [HH.ClassName "message-body"] :: Array HH.ClassName
message_header = [HH.ClassName "message-header"] :: Array HH.ClassName
message = [HH.ClassName "message"] :: Array HH.ClassName
modal_background = [HH.ClassName "modal-background"] :: Array HH.ClassName
modal_card_body = [HH.ClassName "modal-card-body"] :: Array HH.ClassName
modal_card_foot = [HH.ClassName "modal-card-foot"] :: Array HH.ClassName
modal_card_head = [HH.ClassName "modal-card-head"] :: Array HH.ClassName
modal_card = [HH.ClassName "modal-card"] :: Array HH.ClassName
modal_card_title = [HH.ClassName "modal-card-title"] :: Array HH.ClassName
modal = [HH.ClassName "modal"] :: Array HH.ClassName
navbar_brand = [HH.ClassName "navbar-brand"] :: Array HH.ClassName
navbar_burger = [HH.ClassName "navbar-burger"] :: Array HH.ClassName
navbar_divider = [HH.ClassName "navbar-divider"] :: Array HH.ClassName
navbar_dropdown = [HH.ClassName "navbar-dropdown"] :: Array HH.ClassName
navbar_end = [HH.ClassName "navbar-end"] :: Array HH.ClassName
navbar = [HH.ClassName "navbar"] :: Array HH.ClassName
navbar_item = [HH.ClassName "navbar-item"] :: Array HH.ClassName
navbar_link = [HH.ClassName "navbar-link"] :: Array HH.ClassName
navbar_menu = [HH.ClassName "navbar-menu"] :: Array HH.ClassName
navbar_start = [HH.ClassName "navbar-start"] :: Array HH.ClassName
no_margin_bottom = [HH.ClassName "mb-0"] :: Array HH.ClassName
no_padding_bottom = [HH.ClassName "pb-0"] :: Array HH.ClassName
no_padding_left = [HH.ClassName "pl-0"] :: Array HH.ClassName
no_padding_top = [HH.ClassName "pt-0"] :: Array HH.ClassName
normal = [HH.ClassName "is-normal"] :: Array HH.ClassName
notification = [HH.ClassName "notification"] :: Array HH.ClassName
restore_padding_left = [HH.ClassName "pl-4"] :: Array HH.ClassName
restore_padding_top = [HH.ClassName "pt-4"] :: Array HH.ClassName
section = [HH.ClassName "section"] :: Array HH.ClassName
select = [HH.ClassName "select"] :: Array HH.ClassName
subtitle = [HH.ClassName "subtitle"] :: Array HH.ClassName
table = [HH.ClassName "table"] :: Array HH.ClassName
tabs = [HH.ClassName "tabs"] :: Array HH.ClassName
tag = [HH.ClassName "tag"] :: Array HH.ClassName
tags = [HH.ClassName "tags"] :: Array HH.ClassName
textarea = [HH.ClassName "textarea"] :: Array HH.ClassName
tile = [HH.ClassName "tile"] :: Array HH.ClassName
title = [HH.ClassName "title"] :: Array HH.ClassName
padding_left :: Int -> HH.ClassName
padding_left size = HH.ClassName $ "pl-" <> show size
padding_right :: Int -> HH.ClassName
padding_right size = HH.ClassName $ "pr-" <> show size
padding_top :: Int -> HH.ClassName
padding_top size = HH.ClassName $ "pt-" <> show size
padding_bottom :: Int -> HH.ClassName
padding_bottom size = HH.ClassName $ "pb-" <> show size
box = HH.ClassName "box" :: HH.ClassName
breadcrumb = HH.ClassName "breadcrumb" :: HH.ClassName
button = HH.ClassName "button" :: HH.ClassName
buttons = HH.ClassName "buttons" :: HH.ClassName
column = HH.ClassName "column" :: HH.ClassName
columns = HH.ClassName "columns" :: HH.ClassName
container = HH.ClassName "container" :: HH.ClassName
content = HH.ClassName "content" :: HH.ClassName
control = HH.ClassName "control" :: HH.ClassName
delete = HH.ClassName "delete" :: HH.ClassName
field_body = HH.ClassName "field-body" :: HH.ClassName
field = HH.ClassName "field" :: HH.ClassName
field_label = HH.ClassName "field-label" :: HH.ClassName
has_addons = HH.ClassName "has-addons" :: HH.ClassName
has_background_danger_dark = HH.ClassName "has-background-danger-dark" :: HH.ClassName
has_background_danger = HH.ClassName "has-background-danger" :: HH.ClassName
has_background_danger_light = HH.ClassName "has-background-danger-light" :: HH.ClassName
has_background_dark = HH.ClassName "has-background-dark" :: HH.ClassName
has_background_info_dark = HH.ClassName "has-background-info-dark" :: HH.ClassName
has_background_info = HH.ClassName "has-background-info" :: HH.ClassName
has_background_info_light = HH.ClassName "has-background-info-light" :: HH.ClassName
has_background_link_dark = HH.ClassName "has-background-link-dark" :: HH.ClassName
has_background_link_light = HH.ClassName "has-background-link-light" :: HH.ClassName
has_background_primary_dark = HH.ClassName "has-background-primary-dark" :: HH.ClassName
has_background_primary_light = HH.ClassName "has-background-primary-light" :: HH.ClassName
has_background_success_dark = HH.ClassName "has-background-success-dark" :: HH.ClassName
has_background_success_light = HH.ClassName "has-background-success-light" :: HH.ClassName
has_background_warning_dark = HH.ClassName "has-background-warning-dark" :: HH.ClassName
has_background_warning = HH.ClassName "has-background-warning" :: HH.ClassName
has_background_warning_light = HH.ClassName "has-background-warning-light" :: HH.ClassName
has_dropdown = HH.ClassName "has-dropdown" :: HH.ClassName
has_succeeds_separator = HH.ClassName "has-succeeds-separator" :: HH.ClassName
has_text_centered = HH.ClassName "has-text-centered" :: HH.ClassName
has_text_dark = HH.ClassName "has-text-dark" :: HH.ClassName
has_text_light = HH.ClassName "has-text-light" :: HH.ClassName
help = HH.ClassName "help" :: HH.ClassName
hero_body = HH.ClassName "hero-body" :: HH.ClassName
hero = HH.ClassName "hero" :: HH.ClassName
input = HH.ClassName "input" :: HH.ClassName
is4 = HH.ClassName "is-4" :: HH.ClassName
is5 = HH.ClassName "is-5" :: HH.ClassName
is_active = HH.ClassName "is-active" :: HH.ClassName
is_ancestor = HH.ClassName "is-ancestor" :: HH.ClassName
is_boxed = HH.ClassName "is-boxed" :: HH.ClassName
is_centered = HH.ClassName "is-centered" :: HH.ClassName
is_child = HH.ClassName "is-child" :: HH.ClassName
is_danger = HH.ClassName "is-danger" :: HH.ClassName
is_dark = HH.ClassName "is-dark" :: HH.ClassName
is_horizontal = HH.ClassName "is-horizontal" :: HH.ClassName
is_hoverable = HH.ClassName "is-hoverable" :: HH.ClassName
is_info = HH.ClassName "is-info" :: HH.ClassName
is_italic = HH.ClassName "is-italic" :: HH.ClassName
is_large = HH.ClassName "is-large" :: HH.ClassName
is_light = HH.ClassName "is-light" :: HH.ClassName
is_medium = HH.ClassName "is-medium" :: HH.ClassName
is_normal = HH.ClassName "is-normal" :: HH.ClassName
is_parent = HH.ClassName "is-parent" :: HH.ClassName
is_primary = HH.ClassName "is-primary" :: HH.ClassName
is_selected = HH.ClassName "is-selected" :: HH.ClassName
is_small = HH.ClassName "is-small" :: HH.ClassName
is_spaced = HH.ClassName "is-spaced" :: HH.ClassName
is_static = HH.ClassName "is-static" :: HH.ClassName
is_success = HH.ClassName "is-success" :: HH.ClassName
is_vertical = HH.ClassName "is-vertical" :: HH.ClassName
is_warning = HH.ClassName "is-warning" :: HH.ClassName
label = HH.ClassName "label" :: HH.ClassName
level = HH.ClassName "level" :: HH.ClassName
level_item = HH.ClassName "level-item" :: HH.ClassName
level_left = HH.ClassName "level-left" :: HH.ClassName
level_right = HH.ClassName "level-right" :: HH.ClassName
medium = HH.ClassName "is-medium" :: HH.ClassName
message_body = HH.ClassName "message-body" :: HH.ClassName
message_header = HH.ClassName "message-header" :: HH.ClassName
message = HH.ClassName "message" :: HH.ClassName
modal_background = HH.ClassName "modal-background" :: HH.ClassName
modal_card_body = HH.ClassName "modal-card-body" :: HH.ClassName
modal_card_foot = HH.ClassName "modal-card-foot" :: HH.ClassName
modal_card_head = HH.ClassName "modal-card-head" :: HH.ClassName
modal_card = HH.ClassName "modal-card" :: HH.ClassName
modal_card_title = HH.ClassName "modal-card-title" :: HH.ClassName
modal = HH.ClassName "modal" :: HH.ClassName
navbar_brand = HH.ClassName "navbar-brand" :: HH.ClassName
navbar_burger = HH.ClassName "navbar-burger" :: HH.ClassName
navbar_divider = HH.ClassName "navbar-divider" :: HH.ClassName
navbar_dropdown = HH.ClassName "navbar-dropdown" :: HH.ClassName
navbar_end = HH.ClassName "navbar-end" :: HH.ClassName
navbar = HH.ClassName "navbar" :: HH.ClassName
navbar_item = HH.ClassName "navbar-item" :: HH.ClassName
navbar_link = HH.ClassName "navbar-link" :: HH.ClassName
navbar_menu = HH.ClassName "navbar-menu" :: HH.ClassName
navbar_start = HH.ClassName "navbar-start" :: HH.ClassName
no_margin_bottom = HH.ClassName "mb-0" :: HH.ClassName
no_padding_bottom = HH.ClassName "pb-0" :: HH.ClassName
no_padding_left = HH.ClassName "pl-0" :: HH.ClassName
no_padding_top = HH.ClassName "pt-0" :: HH.ClassName
normal = HH.ClassName "is-normal" :: 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