private var layout_user_options = new VerticalLayout(parent=layout)
- private var lbl_user_options_title = new Label(parent=layout_user_options,
+ private var user_options_header = new SectionHeader(parent=layout_user_options)
+ private var lbl_user_options_title = new SectionTitle(parent=user_options_header,
text="Account options".t)
- private var lbl_welcome = new Label(parent=layout_user_options)
+ var lbl_welcome = new DescLabel(parent=layout_user_options)
private var but_logout = new Button(parent=layout_user_options, text="Logout".t)
# Refesh displayed text
fun refresh
do
- lbl_user_options_title.size = 1.5
lbl_welcome.set_user_name
but_logout.enabled = app.user != null
end
- init
- do
- but_logout.observers.add self
- refresh
- end
+ init do refresh
redef fun on_event(event)
do
class SignupWindow
super Window
- # Main window layout
- var layout = new ListLayout(parent=self)
+ private var list = new ListLayout(parent=self)
+ private var lbl_feedback = new DescLabel(parent=list, text="Welcome")
+
+ private var layout_login = new VerticalLayout(parent=list)
- private var lbl_welcome = new Label(parent=layout, text="Welcome")
+ # ---
+ # First the login options
# Name
- private var name_line = new HorizontalLayout(parent=layout)
+ private var name_line = new HorizontalLayout(parent=layout_login)
private var lbl_name = new Label(parent=name_line, text="Username".t)
private var txt_name = new TextInput(parent=name_line, text=app.user)
- # Pass
- private var pass_line = new HorizontalLayout(parent=layout)
+ # Password
+ private var pass_line = new HorizontalLayout(parent=layout_login)
private var lbl_pass = new Label(parent=pass_line, text="Password".t)
private var txt_pass = new TextInput(parent=pass_line, is_password=true)
- private var lbl_pass_desc = new Label(parent=layout,
+ private var lbl_pass_desc = new DescLabel(parent=layout_login, size = 0.5,
text="Passwords must be composed of at least 6 characters.".t)
- private var but_login = new Button(parent=layout, text="Login".t)
+ private var but_login = new Button(parent=layout_login, text="Login".t)
- # Email
- private var email_line = new HorizontalLayout(parent=layout)
- private var lbl_email = new Label(parent=email_line, text="Email".t)
- private var txt_email = new TextInput(parent=email_line)
+ # ---
+ # Then, the signup options
- private var but_signup = new Button(parent=layout, text="Signup".t)
+ private var layout_register = new VerticalLayout(parent=list)
- private var lbl_feedback = new Label(parent=layout, text="")
+ private var lbl_signup_desc = new DescLabel(parent=layout_register, size = 0.5,
+ text="Fill the following fields to sign up.".t)
- init
- do
- lbl_pass_desc.size = 0.5
+ # Repeat password
+ private var pass_line2 = new HorizontalLayout(parent=layout_register)
+ private var lbl_pass2 = new Label(parent=pass_line2, text="Repeat password".t)
+ private var txt_pass2 = new TextInput(parent=pass_line2, is_password=true)
- for c in [but_login, but_signup] do
- c.observers.add self
- end
- end
+ # Email
+ private var email_line = new HorizontalLayout(parent=layout_register)
+ private var lbl_email = new Label(parent=email_line, text="Email".t)
+ private var txt_email = new TextInput(parent=email_line)
+
+ private var but_signup = new Button(parent=layout_register, text="Signup".t)
redef fun on_event(event)
do
var name = txt_name.text
if name == null or not name.name_is_ok then
- feedback "Invalid name".t
+ feedback "Invalid username.".t
return
end
var pass = txt_pass.text
if pass == null or not pass.pass_is_ok then
- feedback "Invalid password".t
+ feedback "Invalid password.".t
return
end
if sender == but_login then
- (new LoginOrSignupAction(self, "rest/login?name={name}&pass={pass.pass_hash}")).start
+ feedback "Logging in...".t
+ (new LoginOrSignupAction(self, "rest/login?name={name.to_percent_encoding}&pass={pass.pass_hash}")).start
else if sender == but_signup then
+ if pass != txt_pass2.text then
+ feedback "Passwords do not match.".t
+ return
+ end
+
var email = txt_email.text
if email == null or email.is_empty then
feedback "Invalid email".t
return
end
- (new LoginOrSignupAction(self, "rest/signup?name={name}&pass={pass.pass_hash}&email={email}")).start
+ feedback "Signing up...".t
+ (new LoginOrSignupAction(self, "rest/signup?name={name.to_percent_encoding}&pass={pass.pass_hash}&email={email.to_percent_encoding}")).start
end
end
end
init do affected_views.add_all([window.but_login, window.but_signup])
- redef fun on_load(res)
+ redef fun on_load(res, status)
do
if intercept_error(res) then return
app.on_log_in
end
-end
-
-# Async request for signing up
-class SignupAction
- super WindowHttpRequest
-
- redef type W: SignupWindow
-
- init do affected_views.add_all([window.but_signup])
-
- redef fun on_load(res)
- do
- if intercept_error(res) then return
- if not res isa LoginResult then
- on_fail new Error("Server sent unexpected data {res or else "null"}")
- return
- end
-
- app.token = res.token
- app.user = res.user.name
- app.on_log_in
- end
+ redef fun feedback(text) do window.feedback text
end