]>
Commit | Line | Data |
---|---|---|
f32dd17f MT |
1 | {% extends "../base.html" %} |
2 | ||
3 | {% block title %}{{ _("Register") }}{% end block %} | |
4 | ||
5 | {% block content %} | |
6 | <div class="row justify-content-center my-5"> | |
7 | <div class="col col-md-6"> | |
6c805af7 | 8 | <h4 class="mb-4">{{ _("Register A New Account") }}</h4> |
f32dd17f MT |
9 | |
10 | <p class="lead"> | |
11 | {{ _("Become a part of our community by registering an account!") }} | |
12 | </p> | |
13 | ||
838a3e09 | 14 | <form id="form-register" action="" method="POST"> |
f32dd17f MT |
15 | {% raw xsrf_form_html() %} |
16 | ||
17 | <input type="hidden" name="next" value="{{ next or "" }}"> | |
18 | ||
19 | <div class="form-group"> | |
689effd0 MT |
20 | <div class="input-group"> |
21 | <div class="input-group-prepend"> | |
22 | <span class="input-group-text">@</span> | |
23 | </div> | |
24 | <input type="text" class="form-control form-control-lg" | |
25 | name="uid" placeholder="{{ _("Username") }}" required autofocus | |
48e3ea58 | 26 | pattern="[a-z_][a-z0-9_-]{3,31}"> |
1d4d4ce7 | 27 | </div> |
6a79a85e | 28 | <div id="uid-invalid" class="invalid-feedback invalid-feedback-uid"> |
3095c017 | 29 | {{ _("Please choose a username in UNIX format with at least four characters, starting with a lowercase letter, followed by only lowercase letters, digits, dash and underscore") }} |
1d4d4ce7 | 30 | </div> |
6a79a85e | 31 | <div id="uid-taken" class="invalid-feedback invalid-feedback-uid"> |
3095c017 | 32 | {{ _("This username is not available") }} |
689effd0 | 33 | </div> |
f32dd17f MT |
34 | </div> |
35 | ||
36 | <div class="form-row mb-3"> | |
37 | <div class="col"> | |
38 | <label>{{ _("First Name") }}</label> | |
6c805af7 | 39 | |
f32dd17f MT |
40 | <input type="text" class="form-control" name="first_name" |
41 | placeholder="{{ _("First Name") }}" required> | |
42 | </div> | |
6c805af7 | 43 | |
f32dd17f MT |
44 | <div class="col"> |
45 | <label>{{ _("Last Name") }}</label> | |
6c805af7 | 46 | |
f32dd17f MT |
47 | <input type="text" class="form-control" name="last_name" |
48 | placeholder="{{ _("Last Name") }}" required> | |
49 | </div> | |
50 | </div> | |
51 | ||
52 | <div class="form-group"> | |
53 | <input type="email" class="form-control" | |
54 | name="email" placeholder="{{ _("Email Address") }}" required> | |
6a79a85e | 55 | <div id="email-invalid" class="invalid-feedback invalid-feedback-email"> |
3095c017 MT |
56 | {{ _("This email address is invalid") }} |
57 | </div> | |
6a79a85e | 58 | <div id="email-blacklisted" class="invalid-feedback invalid-feedback-email"> |
3095c017 | 59 | {{ _("This email address cannot be used") }} |
66181c96 | 60 | </div> |
6a79a85e | 61 | <div id="email-taken" class="invalid-feedback invalid-feedback-email"> |
3095c017 | 62 | {{ _("This email address is already in use") }} |
66181c96 | 63 | </div> |
f32dd17f MT |
64 | </div> |
65 | ||
838a3e09 | 66 | <button type="submit" class="btn btn-primary btn-block" disabled> |
f32dd17f MT |
67 | {{ _("Register") }} |
68 | </button> | |
69 | </form> | |
70 | </div> | |
71 | </div> | |
72 | {% end block %} | |
689effd0 MT |
73 | |
74 | {% block javascript %} | |
75 | <script> | |
838a3e09 MT |
76 | var form = $("#form-register"); |
77 | var submit = form.find(":submit"); | |
78 | ||
79 | // Store the valid status | |
80 | var valid = { | |
81 | uid: false, | |
82 | email: false, | |
83 | }; | |
84 | ||
689effd0 | 85 | var check_uid; |
66181c96 | 86 | var check_email; |
689effd0 | 87 | |
838a3e09 | 88 | form.find("input[name=uid]").on("keyup", function(e) { |
689effd0 MT |
89 | if (check_uid) |
90 | clearTimeout(check_uid); | |
91 | ||
92 | var uid = $(this); | |
93 | ||
94 | check_uid = setTimeout(function() { | |
95 | $.get("/api/check/uid", { uid : uid.val() }, | |
96 | function(data) { | |
97 | // Reset all classes | |
98 | uid.removeClass("is-valid is-invalid"); | |
838a3e09 | 99 | valid.uid = false; |
689effd0 MT |
100 | |
101 | // Hide all feedback | |
6a79a85e | 102 | $(".invalid-feedback-uid").hide(); |
689effd0 MT |
103 | |
104 | switch (data.result) { | |
105 | case "ok": | |
106 | uid.addClass("is-valid"); | |
838a3e09 | 107 | valid.uid = true; |
689effd0 MT |
108 | break; |
109 | ||
110 | case "invalid": | |
111 | uid.addClass("is-invalid"); | |
112 | $("#uid-invalid").show(); | |
113 | break; | |
114 | ||
115 | case "taken": | |
116 | uid.addClass("is-invalid"); | |
117 | $("#uid-taken").show(); | |
118 | break; | |
119 | } | |
838a3e09 MT |
120 | |
121 | form.trigger("change"); | |
689effd0 MT |
122 | } |
123 | ); | |
124 | }, 250); | |
125 | }); | |
66181c96 | 126 | |
838a3e09 | 127 | form.find("input[name=email]").on("keyup", function(e) { |
66181c96 MT |
128 | if (check_email) |
129 | clearTimeout(check_email); | |
130 | ||
131 | var email = $(this); | |
132 | ||
133 | check_email = setTimeout(function() { | |
134 | $.get("/api/check/email", { email : email.val() }, | |
135 | function(data) { | |
136 | // Reset all classes | |
137 | email.removeClass("is-valid is-invalid"); | |
838a3e09 | 138 | valid.email = false; |
66181c96 MT |
139 | |
140 | // Hide all feedback | |
6a79a85e | 141 | $(".invalid-feedback-email").hide(); |
66181c96 MT |
142 | |
143 | switch (data.result) { | |
144 | case "ok": | |
145 | email.addClass("is-valid"); | |
838a3e09 | 146 | valid.email = true; |
66181c96 MT |
147 | break; |
148 | ||
149 | case "invalid": | |
150 | email.addClass("is-invalid"); | |
151 | $("#email-invalid").show(); | |
152 | break; | |
153 | ||
3095c017 MT |
154 | case "blacklisted": |
155 | email.addClass("is-invalid"); | |
156 | $("#email-blacklisted").show(); | |
157 | break; | |
158 | ||
66181c96 MT |
159 | case "taken": |
160 | email.addClass("is-invalid"); | |
161 | $("#email-taken").show(); | |
162 | break; | |
163 | } | |
838a3e09 MT |
164 | |
165 | form.trigger("change"); | |
66181c96 MT |
166 | } |
167 | ); | |
168 | }, 250); | |
169 | }); | |
838a3e09 MT |
170 | |
171 | form.on("change", function() { | |
172 | var disabled = false; | |
173 | ||
174 | $.each(valid, function(field, status) { | |
175 | if (!status) { | |
176 | disabled = true; | |
177 | return false; | |
178 | } | |
179 | }); | |
180 | ||
181 | submit.prop("disabled", disabled); | |
182 | }); | |
689effd0 MT |
183 | </script> |
184 | {% end block %} |