PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 5.4
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v5.4
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
formidable / js / ac.js

ac.js in Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More 5.4, at js/ac.js

222 lines 8.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 window.cfields = [];
2 window._show_thank_you = function(id, message, trackcmp_url, email) {
3 console.log('_show_thank_you');
4 var form = document.getElementById('_form_' + id + '_'), thank_you = form.querySelector('._form-thank-you');
5 form.querySelector('._form-content').style.display = 'none';
6 thank_you.innerHTML = message;
7 thank_you.style.display = 'block';
8 const vgoAlias = typeof visitorGlobalObjectAlias === 'undefined' ? 'vgo' : visitorGlobalObjectAlias;
9 var visitorObject = window[vgoAlias];
10 if (email && typeof visitorObject !== 'undefined') {
11 visitorObject('setEmail', email);
12 visitorObject('update');
13 } else if (typeof(trackcmp_url) != 'undefined' && trackcmp_url) {
14 // Site tracking URL to use after inline form submission.
15 _load_script(trackcmp_url);
16 }
17 if (typeof window._form_callback !== 'undefined') window._form_callback(id);
18 };
19 window._show_error = function(id, message, html) {
20 var form = document.getElementById('_form_' + id + '_'), err = document.createElement('div'), button = form.querySelector('button'), old_error = form.querySelector('._form_error');
21 if (old_error) old_error.parentNode.removeChild(old_error);
22 err.innerHTML = message;
23 err.className = '_error-inner _form_error _no_arrow';
24 var wrapper = document.createElement('div');
25 wrapper.className = '_form-inner';
26 wrapper.appendChild(err);
27 button.parentNode.insertBefore(wrapper, button);
28 document.querySelector('[id^="_form"][id$="_submit"]').disabled = false;
29 if (html) {
30 var div = document.createElement('div');
31 div.className = '_error-html';
32 div.innerHTML = html;
33 err.appendChild(div);
34 }
35 };
36 window._load_script = function(url, callback) {
37 var head = document.querySelector('head'), script = document.createElement('script'), r = false;
38 script.type = 'text/javascript';
39 script.charset = 'utf-8';
40 script.src = url;
41 if (callback) {
42 script.onload = script.onreadystatechange = function() {
43 if (!r && (!this.readyState || this.readyState == 'complete')) {r = true;callback();}
44 };
45 }
46 head.appendChild(script);
47 };
48 (function() {
49 if (window.location.search.search("excludeform") !== -1) return false;
50 var getCookie = function(name) {
51 var match = document.cookie.match(new RegExp('(^|; )' + name + '=([^;]+)'));
52 return match ? match[2] : null;
53 }
54 var setCookie = function(name, value) {
55 var now = new Date();
56 var time = now.getTime();
57 var expireTime = time + 1000 * 60 * 60 * 24 * 365;
58 now.setTime(expireTime);
59 document.cookie = name + '=' + value + '; expires=' + now + ';path=/';
60 }
61 var addEvent = function(element, event, func) {
62 if (element.addEventListener) {
63 element.addEventListener(event, func);
64 } else {
65 var oldFunc = element['on' + event];
66 element['on' + event] = function() {oldFunc.apply(this, arguments);func.apply(this, arguments);};
67 }
68 }
69 var _removed = false;
70 var form_to_submit = document.getElementById('_form_3_');
71 var allInputs = form_to_submit.querySelectorAll('input, select, textarea'), tooltips = [], submitted = false;
72
73 var getUrlParam = function(name) {
74 var regexStr = '[\?&]' + name + '=([^&#]*)';
75 var results = new RegExp(regexStr, 'i').exec(window.location.href);
76 return results != undefined ? decodeURIComponent(results[1]) : false;
77 };
78
79 for (var i = 0; i < allInputs.length; i++) {
80 var regexStr = "field\\[(\\d+)\\]";
81 var results = new RegExp(regexStr).exec(allInputs[i].name);
82 if (results != undefined) {
83 allInputs[i].dataset.name = window.cfields[results[1]];
84 } else {
85 allInputs[i].dataset.name = allInputs[i].name;
86 }
87 var fieldVal = getUrlParam(allInputs[i].dataset.name);
88 if (fieldVal) {
89 if (allInputs[i].dataset.autofill === "false") {continue;}
90 if (allInputs[i].type == "radio" || allInputs[i].type == "checkbox") {
91 if (allInputs[i].value == fieldVal) {
92 allInputs[i].checked = true;
93 }
94 } else {
95 allInputs[i].value = fieldVal;
96 }
97 }
98 }
99 var remove_tooltips = function() {
100 for (var i = 0; i < tooltips.length; i++) {tooltips[i].tip.parentNode.removeChild(tooltips[i].tip);}
101 tooltips = [];
102 };
103 var remove_tooltip = function(elem) {
104 for (var i = 0; i < tooltips.length; i++) {
105 if (tooltips[i].elem === elem) {tooltips[i].tip.parentNode.removeChild(tooltips[i].tip);tooltips.splice(i, 1);return;}
106 }
107 };
108 var create_tooltip = function(elem, text) {
109 var tooltip = document.createElement('div'), arrow = document.createElement('div'), inner = document.createElement('div'), new_tooltip = {};
110 if (elem.type != 'radio' && elem.type != 'checkbox') {
111 tooltip.className = '_error';
112 arrow.className = '_error-arrow';
113 inner.className = '_error-inner';
114 inner.innerHTML = text;
115 tooltip.appendChild(arrow);
116 tooltip.appendChild(inner);
117 elem.parentNode.appendChild(tooltip);
118 } else {
119 tooltip.className = '_error-inner _no_arrow';
120 tooltip.innerHTML = text;
121 elem.parentNode.insertBefore(tooltip, elem);
122 new_tooltip.no_arrow = true;
123 }
124 new_tooltip.tip = tooltip;
125 new_tooltip.elem = elem;
126 tooltips.push(new_tooltip);
127 return new_tooltip;
128 };
129 var resize_tooltip = function(tooltip) {
130 var rect = tooltip.elem.getBoundingClientRect();
131 var doc = document.documentElement, scrollPosition = rect.top - ((window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0));
132 if (scrollPosition < 40) {
133 tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, '') + ' _below';
134 } else {
135 tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, '') + ' _above';
136 }
137 };
138 var resize_tooltips = function() {
139 if (_removed) return;
140 for (var i = 0; i < tooltips.length; i++) {if (!tooltips[i].no_arrow) resize_tooltip(tooltips[i]);}
141 };
142 var validate_field = function(elem, remove) {
143 var tooltip = null, value = elem.value, no_error = true;
144 remove ? remove_tooltip(elem) : false;
145 elem.className = elem.className.replace(/ ?_has_error ?/g, '');
146 if (elem.getAttribute('required') !== null) {
147 if (value === undefined || value === null || value === '') {
148 elem.className = elem.className + ' _has_error';
149 no_error = false;
150 tooltip = create_tooltip(elem, "This field is required.");
151 }
152 }
153 if (no_error && elem.name == 'email') {
154 if (!value.match(/^[\+_a-z0-9-'&=]+(\.[\+_a-z0-9-']+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i)) {
155 elem.className = elem.className + ' _has_error';
156 no_error = false;
157 tooltip = create_tooltip(elem, "Enter a valid email address.");
158 }
159 }
160 tooltip ? resize_tooltip(tooltip) : false;
161 return no_error;
162 };
163 var needs_validate = function(el) {
164 if(el.getAttribute('required') !== null){
165 return true
166 }
167 if(el.name === 'email' && el.value !== ""){
168 return true
169 }
170 return false
171 };
172 var validate_form = function(e) {
173 var err = form_to_submit.querySelector('._form_error'), no_error = true;
174 if (!submitted) {
175 submitted = true;
176 for (var i = 0, len = allInputs.length; i < len; i++) {
177 var input = allInputs[i];
178 if (needs_validate(input)) {
179 if (input.type == 'text') {
180 addEvent(input, 'blur', function() {this.value = this.value.trim();validate_field(this, true);});
181 addEvent(input, 'input', function() {validate_field(this, true);});
182 }
183 }
184 }
185 }
186 remove_tooltips();
187 for (var i = 0, len = allInputs.length; i < len; i++) {
188 var elem = allInputs[i];
189 if (needs_validate(elem)) {
190 if (elem.tagName.toLowerCase() !== "select") {
191 elem.value = elem.value.trim();
192 }
193 validate_field(elem) ? true : no_error = false;
194 }
195 }
196 if (!no_error && e) {e.preventDefault();}
197 resize_tooltips();
198 return no_error;
199 };
200 addEvent(window, 'resize', resize_tooltips);
201 addEvent(window, 'scroll', resize_tooltips);
202 window._old_serialize = null;
203 if (typeof serialize !== 'undefined') window._old_serialize = window.serialize;
204 _load_script("//d3rxaij56vjege.cloudfront.net/form-serialize/0.3/serialize.min.js", function() {
205 window._form_serialize = window.serialize;
206 if (window._old_serialize) window.serialize = window._old_serialize;
207 });
208 var form_submit = function(e) {
209 e.preventDefault();
210 if (validate_form()) {
211 // use this trick to get the submit button & disable it using plain javascript
212 document.querySelector('#_form_3_submit').disabled = true;
213 var serialized = _form_serialize(document.getElementById('_form_3_'));
214 var err = form_to_submit.querySelector('._form_error');
215 err ? err.parentNode.removeChild(err) : false;
216 _load_script('https://strategy1137274.activehosted.com/proc.php?' + serialized + '&jsonp=true');
217 }
218 return false;
219 };
220 addEvent(form_to_submit, 'submit', form_submit);
221 })();
222