PluginProbe
Age Gate / 3.7.3
Age Gate v3.7.3
3.7.3 trunk 1.0.0 1.0.1 1.1.0 1.2.0 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.4.0 1.4.1 1.4.10 1.4.11 1.4.12 1.4.13 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 All 113 releases
age-gate / src / Resources / assets / js / public / shortcode.js

shortcode.js in Age Gate 3.7.3, at src/Resources/assets/js/public/shortcode.js

107 lines 3.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import axios from 'axios';
2 import { Crawler } from 'es6-crawler-detect';
3 import Cookies from 'js-cookie';
4
5 const shortcodes = Array.from(document.querySelectorAll('.age-gate-shortcode-js'));
6
7 const replace = (element, content) => {
8 const markup = atob(content);
9 const parser = new DOMParser();
10 const doc = parser.parseFromString(markup, 'text/html');
11 element.parentNode.replaceChild(doc.body.firstChild, element);
12 // const slider = doc.body.querySelector('.selector__compare');
13 }
14
15 const submit = async (form, submitter) => {
16
17 const formData = new FormData(form);
18 formData.append('age_gate[confirm]', submitter.value);
19
20 const asString = new URLSearchParams(formData).toString();
21 const response = await axios.get(`/wp-json/age-gate/v3/check?${asString}`);
22
23 const { data } = response;
24 return data;
25 }
26
27 const form = (el, content, cookieName, cookieDomain) => {
28 const form = el.querySelector('script').textContent;
29
30 el.insertAdjacentHTML('beforeend', form);
31 el.querySelector('form').addEventListener('submit', async (e) => {
32 e.preventDefault();
33 const data = await submit(e.target, e.submitter);
34
35 const { status } = data;
36
37 if (status !== false) {
38 const { data: { user_age } } = data;
39 Cookies.set(cookieName, user_age, {
40 domain: cookieDomain,
41 path: '/',
42 secure: true,
43 sameSite: 'None',
44 });
45 replace(el, content);
46
47 const ev = new CustomEvent('age_gate_sc', { detail: { age: user_age }} );
48 window.dispatchEvent(ev);
49 } else {
50 const { errors } = data;
51
52 const messages = `<p class="age-gate__error">${errors[Object.keys(errors).pop()]}</p>`;
53
54 el.querySelector('.age-gate__errors, .age-gate-errors').innerHTML = messages;
55
56 // localStorage.setItem(`${cookieName}_failed`, 1);
57 Cookies.set(`${cookieName}_failed`, 1, cookieOptions);
58 }
59 });
60 }
61
62 window.addEventListener('age_gate_sc', ({ detail: { age } }) => {
63 // get them again as orginal const may not exists now
64 Array.from(document.querySelectorAll('.age-gate-shortcode-js')).forEach((gate) => {
65 const {
66 dataset: {
67 agegate: content,
68 data
69 }
70 } = gate;
71
72 const settings = JSON.parse(atob(data));
73 const { age: required } = settings;
74
75 if (age >= required) {
76 return replace(gate, content);
77 }
78 });
79 });
80
81 shortcodes.forEach((gate) => {
82
83 const c = new Crawler;
84 const {
85 dataset: {
86 agegate: content,
87 data
88 }
89 } = gate;
90
91 if (c.isCrawler(navigator.userAgent)) {
92 return replace(gate, content);
93 }
94
95 const settings = JSON.parse(atob(data));
96
97 const { age, cookieName, cookieDomain } = settings;
98
99 if (Cookies.get(cookieName) >= age) {
100
101 return replace(gate, content);
102 }
103
104
105 form(gate, content, cookieName, cookieDomain);
106 });
107