Checkbox + legal terms.
This commit is contained in:
parent
b49856d170
commit
79f8530450
5 changed files with 81 additions and 6 deletions
|
@ -719,7 +719,12 @@ handleAction = case _ of
|
||||||
Disconnection -> do
|
Disconnection -> do
|
||||||
handleAction $ Routing Home
|
handleAction $ Routing Home
|
||||||
|
|
||||||
|
-- Preserve the state of the connection (authd and dnsmanagerd).
|
||||||
|
old_state <- H.get
|
||||||
H.put $ initialState unit
|
H.put $ initialState unit
|
||||||
|
H.modify_ _ { are_we_connected_to_authd = old_state.are_we_connected_to_authd
|
||||||
|
, are_we_connected_to_dnsmanagerd = old_state.are_we_connected_to_dnsmanagerd
|
||||||
|
}
|
||||||
|
|
||||||
handleAction $ ToggleAuthenticated Nothing
|
handleAction $ ToggleAuthenticated Nothing
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
-- | Registration requires a login, an email address and a password.
|
-- | Registration requires a login, an email address and a password.
|
||||||
module App.Page.Registration where
|
module App.Page.Registration where
|
||||||
|
|
||||||
import Prelude (Unit, bind, discard, ($), (<<<), (<>), map, between)
|
import Prelude (Unit, bind, discard, ($), (<<<), (<>), map, between, not)
|
||||||
|
|
||||||
import Data.Array as A
|
import Data.Array as A
|
||||||
import Data.ArrayBuffer.Types (ArrayBuffer)
|
import Data.ArrayBuffer.Types (ArrayBuffer)
|
||||||
|
@ -15,6 +15,8 @@ import Halogen.HTML.Events as HE
|
||||||
import Web.Event.Event as Event
|
import Web.Event.Event as Event
|
||||||
import Web.Event.Event (Event)
|
import Web.Event.Event (Event)
|
||||||
|
|
||||||
|
import App.Text.Explanations as Explanations
|
||||||
|
|
||||||
import Bulma as Bulma
|
import Bulma as Bulma
|
||||||
|
|
||||||
import Data.String as S
|
import Data.String as S
|
||||||
|
@ -53,6 +55,9 @@ data Action
|
||||||
-- | This action is automatically called from `ValidateInputs`.
|
-- | This action is automatically called from `ValidateInputs`.
|
||||||
| SendRegistrationRequest
|
| SendRegistrationRequest
|
||||||
|
|
||||||
|
-- | The user clicked on the checkbox.
|
||||||
|
| LegalCheckboxToggle
|
||||||
|
|
||||||
-- | The possible errors come from either the login, email or password input.
|
-- | The possible errors come from either the login, email or password input.
|
||||||
data Error
|
data Error
|
||||||
= Login (Array L.Error)
|
= Login (Array L.Error)
|
||||||
|
@ -60,7 +65,7 @@ data Error
|
||||||
| Password (Array P.Error)
|
| Password (Array P.Error)
|
||||||
|
|
||||||
-- | The whole registration form is composed of three strings: login, email and password.
|
-- | The whole registration form is composed of three strings: login, email and password.
|
||||||
type StateRegistrationForm = { login :: String, email :: String, pass :: String }
|
type StateRegistrationForm = { login :: String, email :: String, pass :: String, checked :: Boolean }
|
||||||
|
|
||||||
-- | State is composed of the registration form, the errors and an indication whether
|
-- | State is composed of the registration form, the errors and an indication whether
|
||||||
-- | the websocket connection with `authd` is up or not.
|
-- | the websocket connection with `authd` is up or not.
|
||||||
|
@ -71,7 +76,7 @@ type State =
|
||||||
|
|
||||||
initialState :: Input -> State
|
initialState :: Input -> State
|
||||||
initialState _ =
|
initialState _ =
|
||||||
{ registrationForm: { login: "", email: "", pass: "" }
|
{ registrationForm: { login: "", email: "", pass: "", checked: false }
|
||||||
, errors: []
|
, errors: []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,7 +103,7 @@ render { registrationForm }
|
||||||
(login_input <> login_error <>
|
(login_input <> login_error <>
|
||||||
email_input <> email_error <>
|
email_input <> email_error <>
|
||||||
password_input <> password_error <>
|
password_input <> password_error <>
|
||||||
validation_btn)
|
legal_mentions <> validation_btn)
|
||||||
|
|
||||||
login_input
|
login_input
|
||||||
= [ Bulma.box_input "loginREGISTER" "Login" "login" -- title, placeholder
|
= [ Bulma.box_input "loginREGISTER" "Login" "login" -- title, placeholder
|
||||||
|
@ -136,6 +141,12 @@ render { registrationForm }
|
||||||
_, Left errors -> [ Bulma.error_box "passwordREGISTER" "Password error" (show_error $ Password errors) ]
|
_, Left errors -> [ Bulma.error_box "passwordREGISTER" "Password error" (show_error $ Password errors) ]
|
||||||
_, Right _ -> []
|
_, Right _ -> []
|
||||||
|
|
||||||
|
legal_mentions = [ Explanations.legal_mentions
|
||||||
|
, Bulma.checkbox
|
||||||
|
[HH.text "I have read and accept the terms of service and privacy policy."]
|
||||||
|
LegalCheckboxToggle
|
||||||
|
]
|
||||||
|
|
||||||
validation_btn = [ Bulma.btn_validation ]
|
validation_btn = [ Bulma.btn_validation ]
|
||||||
|
|
||||||
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
|
||||||
|
@ -146,6 +157,14 @@ handleAction = case _ of
|
||||||
REG_INP_email v -> H.modify_ _ { registrationForm { email = v } }
|
REG_INP_email v -> H.modify_ _ { registrationForm { email = v } }
|
||||||
REG_INP_pass v -> H.modify_ _ { registrationForm { pass = v } }
|
REG_INP_pass v -> H.modify_ _ { registrationForm { pass = v } }
|
||||||
|
|
||||||
|
LegalCheckboxToggle -> do
|
||||||
|
{ registrationForm } <- H.get
|
||||||
|
H.modify_ _ { registrationForm { checked = not registrationForm.checked } }
|
||||||
|
state <- H.get
|
||||||
|
if state.registrationForm.checked
|
||||||
|
then H.raise $ Log $ SystemLog "HE DID THE THING."
|
||||||
|
else H.raise $ Log $ SystemLog "Oh noes, you have to accept this stuff! :("
|
||||||
|
|
||||||
-- Validate inputs (login, email, password) then send the request
|
-- Validate inputs (login, email, password) then send the request
|
||||||
-- (via SendRegistrationRequest) or log errors.
|
-- (via SendRegistrationRequest) or log errors.
|
||||||
ValidateInputs ev -> do
|
ValidateInputs ev -> do
|
||||||
|
|
|
@ -481,3 +481,39 @@ srv_introduction =
|
||||||
, HH.text " could be specified."
|
, HH.text " could be specified."
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
legal_mentions :: forall w i. HH.HTML w i
|
||||||
|
legal_mentions = HH.div_
|
||||||
|
[ Bulma.h3 "Legal mentions"
|
||||||
|
, expl' """
|
||||||
|
The website editor: Philippe PITTOLI
|
||||||
|
Address: Remilly-les-Marais, FRANCE
|
||||||
|
Contact: netlibre AT karchnu.fr
|
||||||
|
|
||||||
|
This website is hosted by Alsace Réseau Neutre.
|
||||||
|
Website: https://arn-fai.net
|
||||||
|
Address: Strasbourg, FRANCE
|
||||||
|
Contact: contact AT arn-fai.net
|
||||||
|
|
||||||
|
This website only collects data that are essential to the provided service.
|
||||||
|
This includes a login (arbitrary set of characters), an email to contact the owner of the domain,
|
||||||
|
|
||||||
|
None of the collected data will be shared to third parties.
|
||||||
|
|
||||||
|
The personal data collected on this website will be retained for as
|
||||||
|
long as necessary to fulfill the purposes for which it was collected,
|
||||||
|
including the management of user accounts. However, please note that
|
||||||
|
even after the deletion of your account, your data may be retained
|
||||||
|
for up to 6 months due to technical constraints, such as backups made
|
||||||
|
for disaster recovery purposes in the event of a hardware failure. This
|
||||||
|
retention period is necessary to ensure the security and integrity of our
|
||||||
|
system and to allow for the restoration of data in case of any unforeseen
|
||||||
|
issues. After this period, all data will be securely deleted.
|
||||||
|
|
||||||
|
You have the right to access, correct and delete your personal
|
||||||
|
data at any time via this website or by contacting us at the
|
||||||
|
following email address: netlibre AT karchnu.fr
|
||||||
|
|
||||||
|
This website doesn't use any cookie.
|
||||||
|
"""
|
||||||
|
]
|
||||||
|
|
|
@ -8,7 +8,7 @@ import Halogen.HTML as HH
|
||||||
import DOM.HTML.Indexed as DHI
|
import DOM.HTML.Indexed as DHI
|
||||||
import Halogen.HTML.Properties as HP
|
import Halogen.HTML.Properties as HP
|
||||||
import Halogen.HTML.Events as HE
|
import Halogen.HTML.Events as HE
|
||||||
-- import MissingHTMLProperties as MissingProperties
|
import MissingHTMLProperties as MissingProperties
|
||||||
|
|
||||||
import CSSClasses as C
|
import CSSClasses as C
|
||||||
|
|
||||||
|
@ -16,7 +16,16 @@ import Halogen.HTML.Core (AttrName(..))
|
||||||
-- import Web.Event.Event (type_, Event, EventType(..))
|
-- import Web.Event.Event (type_, Event, EventType(..))
|
||||||
-- import Web.UIEvent.MouseEvent (MouseEvent) -- package web-uievents
|
-- import Web.UIEvent.MouseEvent (MouseEvent) -- package web-uievents
|
||||||
|
|
||||||
outside_link :: forall w i. Array HH.ClassName -> String -> String -> HH.HTML w i
|
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_
|
||||||
|
-- <label class="checkbox">
|
||||||
|
-- <input type="checkbox" />
|
||||||
|
-- I agree to the <a href="#">terms and conditions</a>
|
||||||
|
-- </label>
|
||||||
|
|
||||||
|
outside_link :: forall w i. Array HH.ClassName -> String -> String -> HH.HTML w i
|
||||||
outside_link classes url title = HH.a [ HP.classes classes, HP.target "_blank", HP.href url ] [ HH.text title ]
|
outside_link classes url title = HH.a [ HP.classes classes, HP.target "_blank", HP.href url ] [ HH.text title ]
|
||||||
|
|
||||||
columns :: forall (w :: Type) (i :: Type).
|
columns :: forall (w :: Type) (i :: Type).
|
||||||
|
|
|
@ -10,3 +10,9 @@ aria_current = HP.attr (AttrName "aria-current")
|
||||||
|
|
||||||
size :: forall r i. Int -> HP.IProp (size :: Int | r) i
|
size :: forall r i. Int -> HP.IProp (size :: Int | r) i
|
||||||
size = HP.prop (PropName "size")
|
size = HP.prop (PropName "size")
|
||||||
|
|
||||||
|
-- ty :: forall r i. Int -> HP.IProp (ty :: String | r) i
|
||||||
|
-- ty = HP.prop (PropName "type")
|
||||||
|
|
||||||
|
ty :: forall r i. String -> HP.IProp r i
|
||||||
|
ty = HP.attr (AttrName "type")
|
||||||
|
|
Loading…
Add table
Reference in a new issue