598 lines
17 KiB
JavaScript
598 lines
17 KiB
JavaScript
;(() => {
|
|
'use strict'
|
|
const e = (e) => Math.abs(parseInt(e, 10)),
|
|
t = (e, t, a) => {
|
|
const n = new CustomEvent(`wpcf7${t}`, { bubbles: !0, detail: a })
|
|
'string' == typeof e && (e = document.querySelector(e)),
|
|
e.dispatchEvent(n)
|
|
},
|
|
a = (e, a) => {
|
|
const n = new Map([
|
|
['init', 'init'],
|
|
['validation_failed', 'invalid'],
|
|
['acceptance_missing', 'unaccepted'],
|
|
['spam', 'spam'],
|
|
['aborted', 'aborted'],
|
|
['mail_sent', 'sent'],
|
|
['mail_failed', 'failed'],
|
|
['submitting', 'submitting'],
|
|
['resetting', 'resetting'],
|
|
['validating', 'validating'],
|
|
['payment_required', 'payment-required'],
|
|
])
|
|
n.has(a) && (a = n.get(a)),
|
|
Array.from(n.values()).includes(a) ||
|
|
(a = `custom-${(a = (a = a
|
|
.replace(/[^0-9a-z]+/i, ' ')
|
|
.trim()).replace(/\s+/, '-'))}`)
|
|
const r = e.getAttribute('data-status')
|
|
if (
|
|
((e.wpcf7.status = a),
|
|
e.setAttribute('data-status', a),
|
|
e.classList.add(a),
|
|
r && r !== a)
|
|
) {
|
|
e.classList.remove(r)
|
|
const a = {
|
|
contactFormId: e.wpcf7.id,
|
|
pluginVersion: e.wpcf7.pluginVersion,
|
|
contactFormLocale: e.wpcf7.locale,
|
|
unitTag: e.wpcf7.unitTag,
|
|
containerPostId: e.wpcf7.containerPost,
|
|
status: e.wpcf7.status,
|
|
prevStatus: r,
|
|
}
|
|
t(e, 'statuschanged', a)
|
|
}
|
|
return a
|
|
},
|
|
n = (e) => {
|
|
const { root: t, namespace: a = 'contact-form-7/v1' } = wpcf7.api
|
|
return r.reduceRight(
|
|
(e, t) => (a) => t(a, e),
|
|
(e) => {
|
|
let n,
|
|
r,
|
|
{
|
|
url: o,
|
|
path: c,
|
|
endpoint: s,
|
|
headers: i,
|
|
body: l,
|
|
data: p,
|
|
...d
|
|
} = e
|
|
'string' == typeof s &&
|
|
((n = a.replace(/^\/|\/$/g, '')),
|
|
(r = s.replace(/^\//, '')),
|
|
(c = r ? n + '/' + r : n)),
|
|
'string' == typeof c &&
|
|
(-1 !== t.indexOf('?') && (c = c.replace('?', '&')),
|
|
(c = c.replace(/^\//, '')),
|
|
(o = t + c)),
|
|
(i = { Accept: 'application/json, */*;q=0.1', ...i }),
|
|
delete i['X-WP-Nonce'],
|
|
p &&
|
|
((l = JSON.stringify(p)),
|
|
(i['Content-Type'] = 'application/json'))
|
|
const u = {
|
|
code: 'fetch_error',
|
|
message: 'You are probably offline.',
|
|
},
|
|
f = {
|
|
code: 'invalid_json',
|
|
message: 'The response is not a valid JSON response.',
|
|
}
|
|
return window
|
|
.fetch(o || c || window.location.href, {
|
|
...d,
|
|
headers: i,
|
|
body: l,
|
|
})
|
|
.then(
|
|
(e) =>
|
|
Promise.resolve(e)
|
|
.then((e) => {
|
|
if (e.status >= 200 && e.status < 300) return e
|
|
throw e
|
|
})
|
|
.then((e) => {
|
|
if (204 === e.status) return null
|
|
if (e && e.json)
|
|
return e.json().catch(() => {
|
|
throw f
|
|
})
|
|
throw f
|
|
}),
|
|
() => {
|
|
throw u
|
|
}
|
|
)
|
|
}
|
|
)(e)
|
|
},
|
|
r = []
|
|
function o(e, t = {}) {
|
|
const { target: n, scope: r = e, ...o } = t
|
|
if (void 0 === e.wpcf7?.schema) return
|
|
const l = { ...e.wpcf7.schema }
|
|
if (void 0 !== n) {
|
|
if (!e.contains(n)) return
|
|
if (!n.closest('.wpcf7-form-control-wrap[data-name]')) return
|
|
if (n.closest('.novalidate')) return
|
|
}
|
|
const p = r.querySelectorAll('.wpcf7-form-control-wrap'),
|
|
d = Array.from(p).reduce(
|
|
(e, t) => (
|
|
t.closest('.novalidate') ||
|
|
t
|
|
.querySelectorAll(':where( input, textarea, select ):enabled')
|
|
.forEach((t) => {
|
|
if (t.name)
|
|
switch (t.type) {
|
|
case 'button':
|
|
case 'image':
|
|
case 'reset':
|
|
case 'submit':
|
|
break
|
|
case 'checkbox':
|
|
case 'radio':
|
|
t.checked && e.append(t.name, t.value)
|
|
break
|
|
case 'select-multiple':
|
|
for (const a of t.selectedOptions)
|
|
e.append(t.name, a.value)
|
|
break
|
|
case 'file':
|
|
for (const a of t.files) e.append(t.name, a)
|
|
break
|
|
default:
|
|
e.append(t.name, t.value)
|
|
}
|
|
}),
|
|
e
|
|
),
|
|
new FormData()
|
|
),
|
|
u = e.getAttribute('data-status')
|
|
Promise.resolve(a(e, 'validating'))
|
|
.then((a) => {
|
|
if (void 0 !== swv) {
|
|
const a = swv.validate(l, d, t)
|
|
for (const t of p) {
|
|
if (void 0 === t.dataset.name) continue
|
|
const o = t.dataset.name
|
|
if (a.has(o)) {
|
|
const { error: t, validInputs: n } = a.get(o)
|
|
s(e, o),
|
|
void 0 !== t && c(e, o, t, { scope: r }),
|
|
i(e, o, null != n ? n : [])
|
|
}
|
|
if (t.contains(n)) break
|
|
}
|
|
}
|
|
})
|
|
.finally(() => {
|
|
a(e, u)
|
|
})
|
|
}
|
|
n.use = (e) => {
|
|
r.unshift(e)
|
|
}
|
|
const c = (e, t, a, n) => {
|
|
const { scope: r = e, ...o } = null != n ? n : {},
|
|
c = `${e.wpcf7?.unitTag}-ve-${t}`.replaceAll(/[^0-9a-z_-]+/gi, ''),
|
|
s = e.querySelector(
|
|
`.wpcf7-form-control-wrap[data-name="${t}"] .wpcf7-form-control`
|
|
)
|
|
;(() => {
|
|
const t = document.createElement('li')
|
|
t.setAttribute('id', c),
|
|
s && s.id
|
|
? t.insertAdjacentHTML('beforeend', `<a href="#${s.id}">${a}</a>`)
|
|
: t.insertAdjacentText('beforeend', a),
|
|
e.wpcf7.parent
|
|
.querySelector('.screen-reader-response ul')
|
|
.appendChild(t)
|
|
})(),
|
|
r
|
|
.querySelectorAll(`.wpcf7-form-control-wrap[data-name="${t}"]`)
|
|
.forEach((e) => {
|
|
const t = document.createElement('span')
|
|
t.classList.add('wpcf7-not-valid-tip'),
|
|
t.setAttribute('aria-hidden', 'true'),
|
|
t.insertAdjacentText('beforeend', a),
|
|
e.appendChild(t),
|
|
e.querySelectorAll('[aria-invalid]').forEach((e) => {
|
|
e.setAttribute('aria-invalid', 'true')
|
|
}),
|
|
e.querySelectorAll('.wpcf7-form-control').forEach((e) => {
|
|
e.classList.add('wpcf7-not-valid'),
|
|
e.setAttribute('aria-describedby', c),
|
|
'function' == typeof e.setCustomValidity &&
|
|
e.setCustomValidity(a),
|
|
e.closest('.use-floating-validation-tip') &&
|
|
(e.addEventListener('focus', (e) => {
|
|
t.setAttribute('style', 'display: none')
|
|
}),
|
|
t.addEventListener('click', (e) => {
|
|
t.setAttribute('style', 'display: none')
|
|
}))
|
|
})
|
|
})
|
|
},
|
|
s = (e, t) => {
|
|
const a = `${e.wpcf7?.unitTag}-ve-${t}`.replaceAll(/[^0-9a-z_-]+/gi, '')
|
|
e.wpcf7.parent
|
|
.querySelector(`.screen-reader-response ul li#${a}`)
|
|
?.remove(),
|
|
e
|
|
.querySelectorAll(`.wpcf7-form-control-wrap[data-name="${t}"]`)
|
|
.forEach((e) => {
|
|
e.querySelector('.wpcf7-not-valid-tip')?.remove(),
|
|
e.querySelectorAll('[aria-invalid]').forEach((e) => {
|
|
e.setAttribute('aria-invalid', 'false')
|
|
}),
|
|
e.querySelectorAll('.wpcf7-form-control').forEach((e) => {
|
|
e.removeAttribute('aria-describedby'),
|
|
e.classList.remove('wpcf7-not-valid'),
|
|
'function' == typeof e.setCustomValidity &&
|
|
e.setCustomValidity('')
|
|
})
|
|
})
|
|
},
|
|
i = (e, t, a) => {
|
|
e.querySelectorAll(`[data-reflection-of="${t}"]`).forEach((e) => {
|
|
if ('output' === e.tagName.toLowerCase()) {
|
|
const t = e
|
|
0 === a.length && a.push(t.dataset.default),
|
|
a.slice(0, 1).forEach((e) => {
|
|
e instanceof File && (e = e.name), (t.textContent = e)
|
|
})
|
|
} else
|
|
e.querySelectorAll('output').forEach((e) => {
|
|
e.hasAttribute('data-default')
|
|
? 0 === a.length
|
|
? e.removeAttribute('hidden')
|
|
: e.setAttribute('hidden', 'hidden')
|
|
: e.remove()
|
|
}),
|
|
a.forEach((a) => {
|
|
a instanceof File && (a = a.name)
|
|
const n = document.createElement('output')
|
|
n.setAttribute('name', t), (n.textContent = a), e.appendChild(n)
|
|
})
|
|
})
|
|
}
|
|
function l(e, r = {}) {
|
|
if (wpcf7.blocked) return p(e), void a(e, 'submitting')
|
|
const o = new FormData(e)
|
|
r.submitter &&
|
|
r.submitter.name &&
|
|
o.append(r.submitter.name, r.submitter.value)
|
|
const s = {
|
|
contactFormId: e.wpcf7.id,
|
|
pluginVersion: e.wpcf7.pluginVersion,
|
|
contactFormLocale: e.wpcf7.locale,
|
|
unitTag: e.wpcf7.unitTag,
|
|
containerPostId: e.wpcf7.containerPost,
|
|
status: e.wpcf7.status,
|
|
inputs: Array.from(o, (e) => {
|
|
const t = e[0],
|
|
a = e[1]
|
|
return !t.match(/^_/) && { name: t, value: a }
|
|
}).filter((e) => !1 !== e),
|
|
formData: o,
|
|
}
|
|
n({
|
|
endpoint: `contact-forms/${e.wpcf7.id}/feedback`,
|
|
method: 'POST',
|
|
body: o,
|
|
wpcf7: { endpoint: 'feedback', form: e, detail: s },
|
|
})
|
|
.then((n) => {
|
|
const r = a(e, n.status)
|
|
return (
|
|
(s.status = n.status),
|
|
(s.apiResponse = n),
|
|
['invalid', 'unaccepted', 'spam', 'aborted'].includes(r)
|
|
? t(e, r, s)
|
|
: ['sent', 'failed'].includes(r) && t(e, `mail${r}`, s),
|
|
t(e, 'submit', s),
|
|
n
|
|
)
|
|
})
|
|
.then((t) => {
|
|
t.posted_data_hash &&
|
|
(e.querySelector('input[name="_wpcf7_posted_data_hash"]').value =
|
|
t.posted_data_hash),
|
|
'mail_sent' === t.status &&
|
|
(e.reset(), (e.wpcf7.resetOnMailSent = !0)),
|
|
t.invalid_fields &&
|
|
t.invalid_fields.forEach((t) => {
|
|
c(e, t.field, t.message)
|
|
}),
|
|
e.wpcf7.parent
|
|
.querySelector('.screen-reader-response [role="status"]')
|
|
.insertAdjacentText('beforeend', t.message),
|
|
e.querySelectorAll('.wpcf7-response-output').forEach((e) => {
|
|
e.innerText = t.message
|
|
})
|
|
})
|
|
.catch((e) => console.error(e))
|
|
}
|
|
n.use((e, n) => {
|
|
if (e.wpcf7 && 'feedback' === e.wpcf7.endpoint) {
|
|
const { form: n, detail: r } = e.wpcf7
|
|
p(n), t(n, 'beforesubmit', r), a(n, 'submitting')
|
|
}
|
|
return n(e)
|
|
})
|
|
const p = (e) => {
|
|
e.querySelectorAll('.wpcf7-form-control-wrap').forEach((t) => {
|
|
t.dataset.name && s(e, t.dataset.name)
|
|
}),
|
|
(e.wpcf7.parent.querySelector(
|
|
'.screen-reader-response [role="status"]'
|
|
).innerText = ''),
|
|
e.querySelectorAll('.wpcf7-response-output').forEach((e) => {
|
|
e.innerText = ''
|
|
})
|
|
}
|
|
function d(e) {
|
|
const r = new FormData(e),
|
|
o = {
|
|
contactFormId: e.wpcf7.id,
|
|
pluginVersion: e.wpcf7.pluginVersion,
|
|
contactFormLocale: e.wpcf7.locale,
|
|
unitTag: e.wpcf7.unitTag,
|
|
containerPostId: e.wpcf7.containerPost,
|
|
status: e.wpcf7.status,
|
|
inputs: Array.from(r, (e) => {
|
|
const t = e[0],
|
|
a = e[1]
|
|
return !t.match(/^_/) && { name: t, value: a }
|
|
}).filter((e) => !1 !== e),
|
|
formData: r,
|
|
}
|
|
n({
|
|
endpoint: `contact-forms/${e.wpcf7.id}/refill`,
|
|
method: 'GET',
|
|
wpcf7: { endpoint: 'refill', form: e, detail: o },
|
|
})
|
|
.then((n) => {
|
|
e.wpcf7.resetOnMailSent
|
|
? (delete e.wpcf7.resetOnMailSent, a(e, 'mail_sent'))
|
|
: a(e, 'init'),
|
|
(o.apiResponse = n),
|
|
t(e, 'reset', o)
|
|
})
|
|
.catch((e) => console.error(e))
|
|
}
|
|
n.use((e, t) => {
|
|
if (e.wpcf7 && 'refill' === e.wpcf7.endpoint) {
|
|
const { form: t, detail: n } = e.wpcf7
|
|
p(t), a(t, 'resetting')
|
|
}
|
|
return t(e)
|
|
})
|
|
const u = (e, t) => {
|
|
for (const a in t) {
|
|
const n = t[a]
|
|
e.querySelectorAll(`input[name="${a}"]`).forEach((e) => {
|
|
e.value = ''
|
|
}),
|
|
e
|
|
.querySelectorAll(`img.wpcf7-captcha-${a.replaceAll(':', '')}`)
|
|
.forEach((e) => {
|
|
e.setAttribute('src', n)
|
|
})
|
|
const r = /([0-9]+)\.(png|gif|jpeg)$/.exec(n)
|
|
r &&
|
|
e
|
|
.querySelectorAll(`input[name="_wpcf7_captcha_challenge_${a}"]`)
|
|
.forEach((e) => {
|
|
e.value = r[1]
|
|
})
|
|
}
|
|
},
|
|
f = (e, t) => {
|
|
for (const a in t) {
|
|
const n = t[a][0],
|
|
r = t[a][1]
|
|
e.querySelectorAll(
|
|
`.wpcf7-form-control-wrap[data-name="${a}"]`
|
|
).forEach((e) => {
|
|
;(e.querySelector(`input[name="${a}"]`).value = ''),
|
|
(e.querySelector('.wpcf7-quiz-label').textContent = n),
|
|
(e.querySelector(`input[name="_wpcf7_quiz_answer_${a}"]`).value = r)
|
|
})
|
|
}
|
|
}
|
|
function m(t) {
|
|
const a = new FormData(t)
|
|
;(t.wpcf7 = {
|
|
id: e(a.get('_wpcf7')),
|
|
status: t.getAttribute('data-status'),
|
|
pluginVersion: a.get('_wpcf7_version'),
|
|
locale: a.get('_wpcf7_locale'),
|
|
unitTag: a.get('_wpcf7_unit_tag'),
|
|
containerPost: e(a.get('_wpcf7_container_post')),
|
|
parent: t.closest('.wpcf7'),
|
|
get schema() {
|
|
return wpcf7.schemas.get(this.id)
|
|
},
|
|
}),
|
|
wpcf7.schemas.set(t.wpcf7.id, void 0),
|
|
t.querySelectorAll('.has-spinner').forEach((e) => {
|
|
e.insertAdjacentHTML('afterend', '<span class="wpcf7-spinner"></span>')
|
|
}),
|
|
((e) => {
|
|
e.querySelectorAll('.wpcf7-exclusive-checkbox').forEach((t) => {
|
|
t.addEventListener('change', (t) => {
|
|
const a = t.target.getAttribute('name')
|
|
e.querySelectorAll(`input[type="checkbox"][name="${a}"]`).forEach(
|
|
(e) => {
|
|
e !== t.target && (e.checked = !1)
|
|
}
|
|
)
|
|
})
|
|
})
|
|
})(t),
|
|
((e) => {
|
|
e.querySelectorAll('.has-free-text').forEach((t) => {
|
|
const a = t.querySelector('input.wpcf7-free-text'),
|
|
n = t.querySelector('input[type="checkbox"], input[type="radio"]')
|
|
;(a.disabled = !n.checked),
|
|
e.addEventListener('change', (e) => {
|
|
;(a.disabled = !n.checked),
|
|
e.target === n && n.checked && a.focus()
|
|
})
|
|
})
|
|
})(t),
|
|
((e) => {
|
|
e.querySelectorAll('.wpcf7-validates-as-url').forEach((e) => {
|
|
e.addEventListener('change', (t) => {
|
|
let a = e.value.trim()
|
|
a &&
|
|
!a.match(/^[a-z][a-z0-9.+-]*:/i) &&
|
|
-1 !== a.indexOf('.') &&
|
|
((a = a.replace(/^\/+/, '')), (a = 'http://' + a)),
|
|
(e.value = a)
|
|
})
|
|
})
|
|
})(t),
|
|
((e) => {
|
|
if (
|
|
!e.querySelector('.wpcf7-acceptance') ||
|
|
e.classList.contains('wpcf7-acceptance-as-validation')
|
|
)
|
|
return
|
|
const t = () => {
|
|
let t = !0
|
|
e.querySelectorAll('.wpcf7-acceptance').forEach((e) => {
|
|
if (!t || e.classList.contains('optional')) return
|
|
const a = e.querySelector('input[type="checkbox"]')
|
|
;((e.classList.contains('invert') && a.checked) ||
|
|
(!e.classList.contains('invert') && !a.checked)) &&
|
|
(t = !1)
|
|
}),
|
|
e.querySelectorAll('.wpcf7-submit').forEach((e) => {
|
|
e.disabled = !t
|
|
})
|
|
}
|
|
t(),
|
|
e.addEventListener('change', (e) => {
|
|
t()
|
|
}),
|
|
e.addEventListener('wpcf7reset', (e) => {
|
|
t()
|
|
})
|
|
})(t),
|
|
((t) => {
|
|
const a = (t, a) => {
|
|
const n = e(t.getAttribute('data-starting-value')),
|
|
r = e(t.getAttribute('data-maximum-value')),
|
|
o = e(t.getAttribute('data-minimum-value')),
|
|
c = t.classList.contains('down')
|
|
? n - a.value.length
|
|
: a.value.length
|
|
t.setAttribute('data-current-value', c),
|
|
(t.innerText = c),
|
|
r && r < a.value.length
|
|
? t.classList.add('too-long')
|
|
: t.classList.remove('too-long'),
|
|
o && a.value.length < o
|
|
? t.classList.add('too-short')
|
|
: t.classList.remove('too-short')
|
|
},
|
|
n = (e) => {
|
|
;(e = { init: !1, ...e }),
|
|
t.querySelectorAll('.wpcf7-character-count').forEach((n) => {
|
|
const r = n.getAttribute('data-target-name'),
|
|
o = t.querySelector(`[name="${r}"]`)
|
|
o &&
|
|
((o.value = o.defaultValue),
|
|
a(n, o),
|
|
e.init &&
|
|
o.addEventListener('keyup', (e) => {
|
|
a(n, o)
|
|
}))
|
|
})
|
|
}
|
|
n({ init: !0 }),
|
|
t.addEventListener('wpcf7reset', (e) => {
|
|
n()
|
|
})
|
|
})(t),
|
|
window.addEventListener('load', (e) => {
|
|
wpcf7.cached && t.reset()
|
|
}),
|
|
t.addEventListener('reset', (e) => {
|
|
wpcf7.reset(t)
|
|
}),
|
|
t.addEventListener('submit', (e) => {
|
|
wpcf7.submit(t, { submitter: e.submitter }), e.preventDefault()
|
|
}),
|
|
t.addEventListener('wpcf7submit', (e) => {
|
|
e.detail.apiResponse.captcha && u(t, e.detail.apiResponse.captcha),
|
|
e.detail.apiResponse.quiz && f(t, e.detail.apiResponse.quiz)
|
|
}),
|
|
t.addEventListener('wpcf7reset', (e) => {
|
|
e.detail.apiResponse.captcha && u(t, e.detail.apiResponse.captcha),
|
|
e.detail.apiResponse.quiz && f(t, e.detail.apiResponse.quiz)
|
|
}),
|
|
// t.addEventListener('change', (e) => {
|
|
// e.target.closest('.wpcf7-form-control') &&
|
|
// wpcf7.validate(t, { target: e.target })
|
|
// }),
|
|
t.addEventListener('wpcf7statuschanged', (e) => {
|
|
const a = e.detail.status
|
|
t.querySelectorAll('.active-on-any').forEach((e) => {
|
|
e.removeAttribute('inert'), e.classList.remove('active-on-any')
|
|
}),
|
|
t.querySelectorAll(`.inert-on-${a}`).forEach((e) => {
|
|
e.setAttribute('inert', 'inert'), e.classList.add('active-on-any')
|
|
})
|
|
})
|
|
}
|
|
document.addEventListener('DOMContentLoaded', (e) => {
|
|
var t
|
|
if ('undefined' != typeof wpcf7)
|
|
if (void 0 !== wpcf7.api)
|
|
if ('function' == typeof window.fetch)
|
|
if ('function' == typeof window.FormData)
|
|
if ('function' == typeof NodeList.prototype.forEach)
|
|
if ('function' == typeof String.prototype.replaceAll) {
|
|
;(wpcf7 = {
|
|
init: m,
|
|
submit: l,
|
|
reset: d,
|
|
validate: o,
|
|
schemas: new Map(),
|
|
...(null !== (t = wpcf7) && void 0 !== t ? t : {}),
|
|
}),
|
|
document.querySelectorAll('.wpcf7 > form').forEach((e) => {
|
|
wpcf7.init(e),
|
|
e.closest('.wpcf7').classList.replace('no-js', 'js')
|
|
})
|
|
for (const e of wpcf7.schemas.keys())
|
|
n({
|
|
endpoint: `contact-forms/${e}/feedback/schema`,
|
|
method: 'GET',
|
|
}).then((t) => {
|
|
wpcf7.schemas.set(e, t)
|
|
})
|
|
} else
|
|
console.error(
|
|
'Your browser does not support String.replaceAll().'
|
|
)
|
|
else
|
|
console.error('Your browser does not support NodeList.forEach().')
|
|
else console.error('Your browser does not support window.FormData().')
|
|
else console.error('Your browser does not support window.fetch().')
|
|
else console.error('wpcf7.api is not defined.')
|
|
else console.error('wpcf7 is not defined.')
|
|
})
|
|
})()
|