2 let breadcrumbs = await _require('/_lib/breadcrumbs.jst')
3 let fa_envelope = await env.site.get_min_svg('/_svg/fa_envelope.svg')
4 let get_placeholder = await _require('/_lib/get_placeholder.jst')
5 let get_session = await _require('/_lib/get_session.jst')
6 let icon_cross = await env.site.get_min_svg('/_svg/icon_cross.svg')
7 let icon_tick = await env.site.get_min_svg('/_svg/icon_tick.svg')
8 let navbar = await _require('/_lib/navbar.jst')
10 // preload placeholder
11 let transaction = await env.site.database.Transaction()
14 let root = await transaction.get()
15 let session = await get_session(env, root)
16 placeholder = await get_placeholder(env, session)
17 await transaction.commit()
20 transaction.rollback()
24 // preload URL details if any
26 Object.prototype.hasOwnProperty.call(
30 decodeURIComponent(env.parsed_url.query.email) :
39 await breadcrumbs(env, _out)
41 p/*.mt-3*/ {'Your email is not yet verified. Check your email for next steps, or re-send the verification email below.'}
44 div.row.align-items-center {
46 label.form-label.mb-3(for="email") {'Email'}
50 input.form-control#email(type="email" value=email placeholder=placeholder.email required="required" maxlength=256) {}
51 div.invalid-feedback {'Please enter your account\'s email address.'}
56 button.btn.btn-success.mb-3#send-verification-email(type="button") {
57 div.icon24-outer.mr-2#icon {
58 div.icon24-inner {_out.push(fa_envelope)}
60 div.icon24-outer.mr-2#tick(hidden) {
61 div.icon24-inner {_out.push(icon_tick)}
63 div.icon24-outer.mr-2#cross(hidden) {
64 div.icon24-inner {_out.push(icon_cross)}
66 div.icon24-outer.mr-2#spinner(hidden) {
68 div.spinner-border.spinner-border-sm(role="status") {}
71 'Send verification email'
74 button.btn.btn-success#send-verification-email(type="button" disabled) {
75 div.icon24-outer.mr-2#icon {
76 div.icon24-inner {_out.push(fa_envelope)}
78 div.icon24-outer.mr-2#tick(hidden) {
79 div.icon24-inner {_out.push(icon_tick)}
81 div.icon24-outer.mr-2#cross(hidden) {
82 div.icon24-inner {_out.push(icon_cross)}
84 div.icon24-outer.mr-2#spinner(hidden) {
86 div.spinner-border.spinner-border-sm(role="status") {}
89 'Send verification email'
95 div.alert#alert(hidden) {}
99 //script(src="/js/utils.js") {}
102 document.addEventListener(
105 let id_alert = document.getElementById('alert')
106 let id_cross = document.getElementById('cross')
107 let id_email = document.getElementById('email')
108 let id_form = document.getElementById('form')
109 let id_icon = document.getElementById('icon')
110 let id_send_verification_email = document.getElementById('send-verification-email')
111 let id_spinner = document.getElementById('spinner')
112 let id_tick = document.getElementById('tick')
115 id_send_verification_email.disabled =
116 id_email.value.length === 0
117 id_icon.hidden = false
118 id_tick.hidden = true
119 id_cross.hidden = true
120 id_spinner.hidden = true
121 id_alert.hidden = true
124 id_email.addEventListener('input', edited)
126 id_send_verification_email.addEventListener(
129 id_icon.hidden = false
130 id_tick.hidden = true
131 id_cross.hidden = true
132 id_spinner.hidden = true
133 // the below causes an ugly flicker, so just keep the alert
134 //id_alert.hidden = true
136 if (!id_form.checkValidity()) {
137 id_form.classList.add('was-validated');
139 id_icon.hidden = true
140 id_cross.hidden = false
143 id_form.classList.remove('was-validated');
145 let email = id_email.value.slice(0, 256).toLowerCase()
147 id_icon.hidden = true
148 id_spinner.hidden = false
151 '/api/account/send_email_verification_link.json',
156 let problem = Problem.from(error)
158 id_cross.hidden = false
159 id_spinner.hidden = true
161 id_alert.textContent = problem.detail
162 id_alert.classList.remove('alert-success')
163 id_alert.classList.add('alert-danger')
164 id_alert.hidden = false
167 id_tick.hidden = false
168 id_spinner.hidden = true
169 id_alert.textContent = `Email verification link has been sent to "${email}". Please check your email for next steps.`
170 id_alert.classList.add('alert-success')
171 id_alert.classList.remove('alert-danger')
172 id_alert.hidden = false