]> git.ipfire.org Git - ipfire.org.git/blame - src/templates/auth/register.html
register: Fix hiding invalid feedback
[ipfire.org.git] / src / templates / auth / register.html
CommitLineData
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 %}