2 let breadcrumbs = await _require('/_lib/breadcrumbs.jst')
3 let icon_cross = await env.site.get_min_svg('/_svg/icon_cross.svg')
4 let icon_tick = await env.site.get_min_svg('/_svg/icon_tick.svg')
5 let navbar = await _require('/_lib/navbar.jst')
6 let get_session = await _require('/_lib/get_session.jst')
8 // preload draft details if any
10 if (Object.prototype.hasOwnProperty.call(env.parsed_url.query, 'email'))
11 details.email = decodeURIComponent(env.parsed_url.query.email)
13 Object.prototype.hasOwnProperty.call(
19 decodeURIComponent(env.parsed_url.query.link_code)
20 console.log('details', JSON.stringify(details))
28 await breadcrumbs(env, _out)
30 p {'You will need to verify your new password via an emailed link before you can use it to sign in to your account.'}
32 div.accordion#accordion.mb-5(role="tablist" aria-multiselectable="true") {
34 div.card-header#step-1-heading(role="tab") {
35 span#step-1-tick(style="display: none;") {
36 span.icon-color.pr-3 {_out.push(icon_tick)}
38 span#step-1-cross(style="display: none;") {
39 span.icon-color.pr-3 {_out.push(icon_cross)}
41 //span#step-1-spinner(style="display: none;") {
42 // span.icon-color.pr-3 {
43 // div.spinner-border(role="status") {
44 // span.sr-only {'Loading...'}
48 a.h5(data-toggle="collapse" data-parent="#accordion" href="#step-1-collapse" aria-expanded="true" aria-controls="step-1-collapse") {
52 div#step-1-collapse.collapse.show(role="tabpanel" aria-labelledby="step-1-heading" data-parent="#accordion") {
57 label.form-label(for="email") {'Email *'}
58 input.form-control#email(type="email" value=details.email || '' placeholder="Account email address" required="required" maxlength=256) {}
63 label.form-label(for="link-code") {'Link code *'}
64 input.form-control#link-code(type="text" value=details.link_code || '' placeholder="Type the code from the email link" required="required" minlength=32 maxlength=32) {}
69 button.btn.btn-success#step-1-continue(type="button") {'Continue'}
70 p.'mt-3'.mb-0 {'* These fields are required.'}
75 div.card-header#step-2-heading(role="tab") {
76 span#step-2-tick(style="display: none;") {
77 span.icon-color.pr-3 {_out.push(icon_tick)}
79 span#step-2-cross(style="display: none;") {
80 span.icon-color.pr-3 {_out.push(icon_cross)}
82 span#step-2-spinner(style="display: none;") {
83 span.icon-color.pr-3 {
84 div.spinner-border(role="status") {
85 span.sr-only {'Loading...'}
89 a.h5.collapsed(data-toggle="collapse" data-parent="#accordion" href="#step-2-collapse" aria-expanded="false" aria-controls="step-2-collapse") {
93 div#step-2-collapse.collapse(role="tabpanel" aria-labelledby="step-2-heading" data-parent="#accordion") {
95 p#step-2-message {'Please enter link details first.'}
97 button.btn.btn-outline-secondary#step-2-back(type="button") {'Back'}
98 button.btn.btn-outline-secondary.ml-2#step-2-sign-in(type="button") {'Sign in'}
106 //script(src="/js/api_call.js") {}
109 let api_account_verify_password = async (...args) => api_call(
110 '/api/account/verify_password.json',
114 let step_1 = async () => {
116 !document.getElementById('email').reportValidity() ||
117 !document.getElementById('link-code').reportValidity()
119 $('#step-1-tick').hide()
120 $('#step-1-cross').show()
121 //$('#step-1-spinner').hide()
124 $('#step-1-tick').show()
125 $('#step-1-cross').hide()
126 //$('#step-1-spinner').hide()
130 let step_2 = async () => {
131 $('#step-2-tick').hide()
132 $('#step-2-cross').hide()
133 $('#step-2-spinner').show()
134 document.getElementById('step-1').scrollIntoView()
138 email = document.getElementById('email').value.slice(0, 256).toLowerCase()
139 await api_account_verify_password(
143 document.getElementById('link-code').value.slice(0, 32).toLowerCase()
148 error instanceof Problem ?
154 (error.stack || error.message).toString()
159 $('#step-2-tick').hide()
160 $('#step-2-cross').show()
161 $('#step-2-spinner').hide()
163 document.getElementById('step-2-message').textContent = problem.detail
164 $('#step-2-collapse').collapse('show')
167 $('#step-2-tick').show()
168 $('#step-2-cross').hide()
169 $('#step-2-spinner').hide()
171 document.getElementById('step-2-message').textContent = `New password for "${email}" has been verified. You can now sign in.`
175 document.addEventListener(
178 document.getElementById('step-1-continue').addEventListener(
181 if (await step_1() && await step_2())
182 $('#step-2-collapse').collapse('show')
186 document.getElementById('step-2-back').addEventListener(
188 () => {$('#step-1-collapse').collapse('show')}
191 document.getElementById('step-2-sign-in').addEventListener(
193 () => {document.getElementById('sign-in').click()}