1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
use crate::prelude::*;
pub(crate) fn render(model: &crate::model::Model) -> Vec<Node<crate::Msg>> {
let plain = model.allowed_login_method(crate::protocol::AuthType::Plain);
let recurse_center_url = if model
.allowed_login_method(crate::protocol::AuthType::RecurseCenter)
{
model.oauth_login_url(crate::protocol::AuthType::RecurseCenter)
} else {
None
};
let mut view = vec![];
if plain {
view.extend(render_plain());
}
if plain && recurse_center_url.is_some() {
view.push(seed::p!["or"])
}
if let Some(url) = recurse_center_url {
view.extend(render_recurse_center(&url));
}
view
}
fn render_plain() -> Vec<Node<crate::Msg>> {
vec![seed::form![
seed::label![seed::attrs! { At::For => "username" }, "username"],
seed::input![seed::attrs! {
At::Id => "username",
At::Type => "text",
At::AutoFocus => true.as_at_value(),
}],
seed::input![
seed::attrs! { At::Type => "submit", At::Value => "login" }
],
raw_ev(Ev::Submit, |event| {
event.prevent_default();
let username = seed::to_input(
&seed::document().get_element_by_id("username").unwrap(),
)
.value();
crate::Msg::Login(username)
}),
]]
}
fn render_recurse_center(url: &str) -> Vec<Node<crate::Msg>> {
vec![seed::a![
seed::attrs! {
At::Href => url,
},
"login via oauth"
]]
}
|