1 let querystring = require('querystring')
2 let stream_buffers = require('stream-buffers')
3 let XDate = require('xdate')
6 let breadcrumbs = await _require('/breadcrumbs.jst')
7 let globals = await env.site.get_json('/_config/globals.json')
8 let navbar = await _require('/navbar.jst')
14 await breadcrumbs(env, _out)
16 if (env.request.method == 'POST') {
17 let write_stream = new stream_buffers.WritableStreamBuffer()
18 let data = new Promise(
19 (resolve, reject) => {
21 on('finish', () => {resolve(write_stream.getContents())}).
22 on('error', () => {reject()})
25 env.request.pipe(write_stream)
26 let query = querystring.parse((await data).toString())
27 console.log('received contact form:', query.email)
29 // save the form contents in a dated logfile, so that we can
30 // recover manually if the email doesn't send for some reason
32 query.date = date.toUTCString()
34 await env.site.ensure_dir('/_logs')
36 `/_logs/contact_${date.toUTCString('yyyyMMdd')}.json`,
38 async result => {result.value.push(query)}
41 // send email (asynchronously)
42 let emailjs_contact = await env.site.get_emailjs(
43 '/_config/email_contact.json'
47 from: globals.contact_from,
49 `${query.first_name} ${query.last_name} <${query.email}>`,
50 to: globals.contact_to,
52 Object.prototype.hasOwnProperty.call(query, 'company') ?
53 'Enquiry: ' + query.company :
59 console.error(err.stack || err.message)
61 console.log('sent contact email:', query.email)
63 ) // ignore returned promise
65 p {'Thanks! We\'ll be in touch as soon as we can.'}
68 p {'Do you require more information or consulting assistance with integrating the projects on this site? We\'d love to hear from you.'}
70 form#contact-form(method="post" action="index.html" role="form") {
74 label(for="contact_form_first_name") {'First name *'}
75 input.form-control#contact_form_first_name(type="text" name="first_name" placeholder="Please enter your first name" required="required" data-error="First name is required.") {}
76 div.help-block.with-errors {}
81 label(for="contact_form_last_name") {'Last name *'}
82 input.form-control#contact_form_last_name(type="text" name="last_name" placeholder="Please enter your last name" required="required" data-error="Last name is required.") {}
83 div.help-block.with-errors {}
90 label(for="contact_form_company") {'Company'}
91 input.form-control#contact_form_company(type="text" name="company" placeholder="Please enter your company") {}
92 div.help-block.with-errors {}
97 label(for="contact_form_email") {'Email *'}
98 input.form-control#contact_form_email(type="email" name="email" placeholder="Please enter your email" required="required" data-error="Valid email is required.") {}
99 div.help-block.with-errors {}
106 label(for="contact_form_message") {'Message *'}
107 textarea.form-control#contact_form_message(name="message" placeholder="Please explain your application" rows="4" required="required" data-error="Please, leave us a message.") {}
108 div.help-block.with-errors {}
112 p {} // fix this later
115 input.btn.btn-success.btn-send(type="submit" value="Send message") {}
118 p {} // fix this later
123 'These fields are required.'
124 //'Contact form template by '
125 //a(href="https://bootstrapious.com/p/how-to-build-a-working-bootstrap-contact-form" target="_blank") {'Bootstrapious'}