From e70f59a22ceca8b686282fac3bf4f2fd63a4a693 Mon Sep 17 00:00:00 2001 From: Mike Letellier Date: Tue, 16 Dec 2025 13:29:56 -0400 Subject: [PATCH 1/3] Prepare for v6.26.1 --- classes/helpers/FrmStylesHelper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/helpers/FrmStylesHelper.php b/classes/helpers/FrmStylesHelper.php index 11f774a3b8..ad042e6f04 100644 --- a/classes/helpers/FrmStylesHelper.php +++ b/classes/helpers/FrmStylesHelper.php @@ -506,7 +506,7 @@ public static function output_vars( $settings, $defaults = array(), $vars = arra /** * None of these style settings are used as CSS variables, so we want to exclude them to keep the CSS output clean. * - * @since x.x + * @since 6.26.1 * * @return array */ From c617d571f5be8eee690ab866301f08dfe6aa08ca Mon Sep 17 00:00:00 2001 From: Mike Letellier Date: Tue, 16 Dec 2025 13:31:11 -0400 Subject: [PATCH 2/3] Update changelog --- changelog.txt | 7 +++++++ readme.txt | 9 ++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index 727da71dd0..b51c233b21 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,11 @@ == Changelog == += 6.26.1 = +* New: The cached data for license checks is now set to autoload to help reduce calls to the database, and an option check for a request lock has been moved so it only happens when the option data has expired. These changes should help with performance. +* New: SVG icon updates have been made to avoid use of the deprecated xlink:href attribute. +* Fix: Field step settings were changed to only accept numbers in last release, causing issues with "any" as a value. +* Fix: Bootstrap dropdowns would not properly initialize for fields loaded with AJAX in long forms, preventing access to the more options dropdown, hiding the option to delete a field. +* Breaking: Old logic that would trigger blur events for inputs with no value set with the onblur attribute has been removed. + = 6.26 = * New: Gutenberg blocks now use API version 3. As of WordPress 6.9, a deprecated message would appear for older block API versions. * New: Styles now include a Custom CSS setting in Quick Settings that can be exported and imported to other sites. The custom CSS is automatically prefixed with the style's class name to prevent conflicts. diff --git a/readme.txt b/readme.txt index c8a0f03173..c93fd459ac 100644 --- a/readme.txt +++ b/readme.txt @@ -5,7 +5,7 @@ Tags: forms, form builder, survey, payment form, custom form, contact form, form Requires at least: 6.3 Tested up to: 6.9 Requires PHP: 7.0 -Stable tag: 6.26 +Stable tag: 6.26.1 The most advanced WordPress forms plugin. Go beyond contact forms with our drag and drop form builder for surveys, quizzes, and more. @@ -372,6 +372,13 @@ Using our Zapier integration, you can easily connect your website with over 5,00 See all [Formidable Zapier Integrations](https://zapier.com/apps/formidable/integrations). == Changelog == += 6.26.1 = +* New: The cached data for license checks is now set to autoload to help reduce calls to the database, and an option check for a request lock has been moved so it only happens when the option data has expired. These changes should help with performance. +* New: SVG icon updates have been made to avoid use of the deprecated xlink:href attribute. +* Fix: Field step settings were changed to only accept numbers in last release, causing issues with "any" as a value. +* Fix: Bootstrap dropdowns would not properly initialize for fields loaded with AJAX in long forms, preventing access to the more options dropdown, hiding the option to delete a field. +* Breaking: Old logic that would trigger blur events for inputs with no value set with the onblur attribute has been removed. + = 6.26 = * New: Gutenberg blocks now use API version 3. As of WordPress 6.9, a deprecated message would appear for older block API versions. * New: Styles now include a Custom CSS setting in Quick Settings that can be exported and imported to other sites. The custom CSS is automatically prefixed with the style's class name to prevent conflicts. From 82ba23ff026976134531b9788419520d6a45236c Mon Sep 17 00:00:00 2001 From: Mike Letellier Date: Tue, 16 Dec 2025 13:32:03 -0400 Subject: [PATCH 3/3] Prepare for v6.26.1 --- classes/helpers/FrmAppHelper.php | 2 +- formidable.php | 2 +- js/formidable.min.js | 41 ++++++------- languages/formidable.pot | 102 +++++++++++++++---------------- 4 files changed, 73 insertions(+), 74 deletions(-) diff --git a/classes/helpers/FrmAppHelper.php b/classes/helpers/FrmAppHelper.php index 5303e3f2ed..d98e2c1c84 100644 --- a/classes/helpers/FrmAppHelper.php +++ b/classes/helpers/FrmAppHelper.php @@ -29,7 +29,7 @@ class FrmAppHelper { * * @var string */ - public static $plug_version = '6.26'; + public static $plug_version = '6.26.1'; /** * @var bool diff --git a/formidable.php b/formidable.php index e9f5bfe911..ee5f59a3db 100644 --- a/formidable.php +++ b/formidable.php @@ -2,7 +2,7 @@ /** * Plugin Name: Formidable Forms * Description: Quickly and easily create drag-and-drop forms - * Version: 6.26 + * Version: 6.26.1 * Plugin URI: https://formidableforms.com/ * Author URI: https://formidableforms.com/ * Author: Strategy11 Form Builder Team diff --git a/js/formidable.min.js b/js/formidable.min.js index 9e1d38c577..07b1526c4d 100644 --- a/js/formidable.min.js +++ b/js/formidable.min.js @@ -50,27 +50,26 @@ if(null!==textarea)textarea.focus()};else if(element.classList.contains("tmce-ac "frmMaybeDelayFocus",{input})}function documentOn(event,selector,handler,options){if("undefined"===typeof options)options=false;document.addEventListener(event,function(e){let target;for(target=e.target;target&&target!=this;target=target.parentNode)if(target&&target.matches&&target.matches(selector)){handler.call(target,e);break}},options)}function initFloatingLabels(){let checkFloatLabel,checkDropdownLabel,runOnLoad,selector,floatClass;selector=".frm-show-form .frm_inside_container input, .frm-show-form .frm_inside_container select, .frm-show-form .frm_inside_container textarea"; floatClass="frm_label_float_top";checkFloatLabel=function(input){let container,shouldFloatTop,firstOpt;container=input.closest(".frm_inside_container");if(!container)return;shouldFloatTop=input.value||document.activeElement===input;container.classList.toggle(floatClass,shouldFloatTop);if("SELECT"===input.tagName){firstOpt=input.querySelector("option:first-child");if(shouldFloatTop){if(firstOpt.hasAttribute("data-label")){firstOpt.textContent=firstOpt.getAttribute("data-label");firstOpt.removeAttribute("data-label")}}else if(firstOpt.textContent){firstOpt.setAttribute("data-label", firstOpt.textContent);firstOpt.textContent=""}}};checkDropdownLabel=function(){document.querySelectorAll(".frm-show-form .frm_inside_container:not(."+floatClass+") select").forEach(function(input){const firstOpt=input.querySelector("option:first-child");if(firstOpt.textContent){firstOpt.setAttribute("data-label",firstOpt.textContent);firstOpt.textContent=""}})};["focus","blur","change"].forEach(function(eventName){documentOn(eventName,selector,function(event){checkFloatLabel(event.target)},true)}); -jQuery(document).on("change",selector,function(event){checkFloatLabel(event.target)});runOnLoad=function(firstLoad){if(firstLoad&&document.activeElement&&-1!==["INPUT","SELECT","TEXTAREA"].indexOf(document.activeElement.tagName))checkFloatLabel(document.activeElement);else if(firstLoad)document.querySelectorAll(".frm_inside_container").forEach(function(container){const input=container.querySelector("input, select, textarea");if(input&&""!==input.value)checkFloatLabel(input)});checkDropdownLabel()}; -runOnLoad(true);jQuery(document).on("frmPageChanged",function(event){runOnLoad()});document.addEventListener("frm_after_start_over",function(event){runOnLoad()})}function shouldUpdateValidityMessage(target){if("INPUT"!==target.nodeName)return false;if(!target.dataset.invmsg)return false;if("text"!==target.getAttribute("type"))return false;if(target.classList.contains("frm_verify"))return false;return true}function maybeClearCustomValidityMessage(event,field){let key,isInvalid=false;if(!shouldUpdateValidityMessage(field))return; -for(key in field.validity){if("customError"===key)continue;if("valid"!==key&&field.validity[key]===true){isInvalid=true;break}}if(!isInvalid)field.setCustomValidity("")}function maybeShowNewTabFallbackMessage(){let messageEl;if(!window.frmShowNewTabFallback)return;messageEl=document.querySelector("#frm_form_"+frmShowNewTabFallback.formId+"_container .frm_message");if(!messageEl)return;messageEl.insertAdjacentHTML("beforeend"," "+frmShowNewTabFallback.message)}function setCustomValidityMessage(){let forms, -length,index;forms=document.getElementsByClassName("frm-show-form");length=forms.length;for(index=0;indexb.toString(16).padStart(2,"0")).join("");const timestamp=Date.now().toString(16);return uniqueKey+"-"+timestamp}function animateScroll(start,end,duration){if(!window.hasOwnProperty("performance")||!window.hasOwnProperty("requestAnimationFrame")){document.documentElement.scrollTop= -end;return}const startTime=performance.now();const step=currentTime=>{const progress=Math.min((currentTime-startTime)/duration,1);document.documentElement.scrollTop=start+(end-start)*progress;if(progress<1)requestAnimationFrame(step)};requestAnimationFrame(step)}function maybeFixCaptchaLabel(captcha){const form=captcha.closest("form");if(!form)return;const label=form.querySelector('label[for="g-recaptcha-response"], label[for="cf-turnstile-response"]');const captchaResponse=form.querySelector('[name="g-recaptcha-response"], [name="cf-turnstile-response"]'); -if(label&&captchaResponse)label.htmlFor=captchaResponse.id}return{init:function(){jQuery(document).off("submit.formidable",".frm-show-form");jQuery(document).on("submit.formidable",".frm-show-form",frmFrontForm.submitForm);document.querySelectorAll(".frm-show-form input[onblur], .frm-show-form textarea[onblur]").forEach(function(field){if(field.value==="")jQuery(field).trigger("blur")});jQuery(document).on("change",'.frm-show-form input[name^="item_meta"], .frm-show-form select[name^="item_meta"], .frm-show-form textarea[name^="item_meta"]', -frmFrontForm.fieldValueChanged);jQuery(document).on("change",".frm_verify[id^=field_]",onHoneypotFieldChange);jQuery(document).on("click","a[data-frmconfirm]",confirmClick);checkForErrorsAndMaybeSetFocus();changeFocusWhenClickComboFieldLabel();initFloatingLabels();maybeShowNewTabFallbackMessage();jQuery(document).on("frmAfterAddRow",setCustomValidityMessage);setCustomValidityMessage();jQuery(document).on("frmFieldChanged",maybeClearCustomValidityMessage);setSelectPlaceholderColor();jQuery(document).on("elementor/popup/show", -frmRecaptcha);enableSubmitButtonOnBackButtonPress();jQuery(document).on("frmPageChanged",destroyhCaptcha)},getFieldId,renderCaptcha:function(captcha,captchaSelector){const rendered=captcha.getAttribute("data-rid")!==null;if(rendered)return;const size=captcha.getAttribute("data-size");const params={sitekey:captcha.getAttribute("data-sitekey"),size:size,theme:captcha.getAttribute("data-theme")};if(size==="invisible"){const formID=captcha.closest("form")?.querySelector('input[name="form_id"]')?.value; -const captchaLabel=captcha.closest(".frm_form_field")?.querySelector(".frm_primary_label");if(captchaLabel)captchaLabel.style.display="none";params.callback=function(token){frmFrontForm.afterRecaptcha(token,formID)}}const activeCaptcha=getSelectedCaptcha(captchaSelector);const captchaContainer=typeof turnstile!=="undefined"&&turnstile===activeCaptcha?"#"+captcha.id:captcha.id;const captchaID=activeCaptcha.render(captchaContainer,params);captcha.setAttribute("data-rid",captchaID);maybeFixCaptchaLabel(captcha)}, -afterSingleRecaptcha:function(){const recaptcha=document.querySelector(".frm-show-form .g-recaptcha");const object=recaptcha?recaptcha.closest("form"):null;frmFrontForm.submitFormNow(object)},afterRecaptcha:function(_,formID){const object=document.querySelector("#frm_form_"+formID+"_container form");frmFrontForm.submitFormNow(object)},submitForm:function(e){frmFrontForm.submitFormManual(e,this)},submitFormManual:function(e,object){if(document.body.classList.contains("wp-admin")&&!object.closest(".frmapi-form"))return; -e.preventDefault();if(typeof frmProForm!=="undefined"&&typeof frmProForm.submitAllowed==="function"&&!frmProForm.submitAllowed(object))return;const errors=frmFrontForm.validateFormSubmit(object);if(Object.keys(errors).length!==0)return;const invisibleRecaptcha=hasInvisibleRecaptcha(object);if(invisibleRecaptcha){showLoadingIndicator(jQuery(object));executeInvisibleRecaptcha(invisibleRecaptcha)}else{showSubmitLoading(jQuery(object));frmFrontForm.submitFormNow(object)}},submitFormNow:function(object){let hasFileFields, -antispamInput,classList=object.className.trim().split(/\s+/gi);if(object.hasAttribute("data-token")&&null===object.querySelector('[name="antispam_token"]')){antispamInput=document.createElement("input");antispamInput.type="hidden";antispamInput.name="antispam_token";antispamInput.value=object.getAttribute("data-token");object.appendChild(antispamInput)}const uniqueIDInput=document.createElement("input");uniqueIDInput.type="hidden";uniqueIDInput.name="unique_id";uniqueIDInput.value=getUniqueKey(); -object.appendChild(uniqueIDInput);if(classList.indexOf("frm_ajax_submit")>-1){const fileInputs=object.querySelectorAll('input[type="file"]');hasFileFields=Array.from(fileInputs).filter(input=>!!input.value).length;if(hasFileFields<1){const actionInput=object.querySelector('input[name="frm_action"]');const action=actionInput?actionInput.value:"";frmFrontForm.checkFormErrors(object,action)}else object.submit()}else object.submit()},validateFormSubmit:function(object){const form=object instanceof jQuery? -object.get(0):object;if(typeof tinyMCE!=="undefined"&&form&&form.querySelector(".wp-editor-wrap"))tinyMCE.triggerSave();jsErrors=[];if(shouldJSValidate(object)){frmFrontForm.getAjaxFormErrors(object);if(Object.keys(jsErrors).length)frmFrontForm.addAjaxFormErrors(object)}return jsErrors},getAjaxFormErrors:function(object){let customErrors,key;const form=object instanceof jQuery?object.get(0):object;jsErrors=validateForm(object);if(typeof frmThemeOverride_jsErrors==="function"){const actionInput=form? -form.querySelector('input[name="frm_action"]'):null;const action=actionInput?actionInput.value:"";customErrors=frmThemeOverride_jsErrors(action,object);if(Object.keys(customErrors).length)for(key in customErrors)jsErrors[key]=customErrors[key]}triggerCustomEvent(document,"frm_get_ajax_form_errors",{formEl:object,errors:jsErrors});return jsErrors},addAjaxFormErrors:function(object){let key;const form=object instanceof jQuery?object.get(0):object;removeAllErrors();for(key in jsErrors){const fieldCont= -form?form.querySelector("#frm_field_"+key+"_container"):null;if(fieldCont)addFieldError(fieldCont,key,jsErrors);else delete jsErrors[key]}scrollToFirstField(object);checkForErrorsAndMaybeSetFocus()},checkFormErrors:getFormErrors,checkRequiredField,showSubmitLoading,removeSubmitLoading,scrollToID:function(id){const object=jQuery(document.getElementById(id));frmFrontForm.scrollMsg(object,false)},scrollMsg:function(id,object,animate){let newPos,m,b,screenTop,screenBottom,scrollObj="";if(typeof object=== -"undefined"){scrollObj=jQuery(document.getElementById("frm_form_"+id+"_container"));if(scrollObj.length<1)return}else if(typeof id==="string"){const formEl=object instanceof jQuery?object.get(0):object;const fieldEl=formEl?formEl.querySelector("#frm_field_"+id+"_container"):null;scrollObj=fieldEl?jQuery(fieldEl):jQuery()}else scrollObj=id;jQuery(scrollObj).trigger("focus");newPos=scrollObj.offset().top;if(!newPos||frm_js.offset==="-1")return;newPos=newPos-frm_js.offset;m=getComputedStyle(document.documentElement).marginTop; -b=getComputedStyle(document.body).marginTop;if(m||b)newPos=newPos-parseInt(m)-parseInt(b);if(newPos&&window.innerHeight){screenTop=document.documentElement.scrollTop||document.body.scrollTop;screenBottom=screenTop+window.innerHeight;if(newPos>screenBottom||newPos/g,">").replace(/"/g,""").replace(/'/g,"'")},triggerCustomEvent:triggerCustomEvent,documentOn}}window.frmFrontForm=frmFrontFormJS();jQuery(document).ready(function(){frmFrontForm.init()}); -function frmRecaptcha(){frmCaptcha(".frm-g-recaptcha")}function frmHcaptcha(){frmCaptcha(".h-captcha")}function frmTurnstile(){frmCaptcha(".frm-cf-turnstile")} +runOnLoad=function(firstLoad){if(firstLoad&&document.activeElement&&-1!==["INPUT","SELECT","TEXTAREA"].indexOf(document.activeElement.tagName))checkFloatLabel(document.activeElement);else if(firstLoad)document.querySelectorAll(".frm_inside_container").forEach(function(container){const input=container.querySelector("input, select, textarea");if(input&&""!==input.value)checkFloatLabel(input)});checkDropdownLabel()};runOnLoad(true);jQuery(document).on("frmPageChanged",function(event){runOnLoad()});document.addEventListener("frm_after_start_over", +function(event){runOnLoad()})}function shouldUpdateValidityMessage(target){if("INPUT"!==target.nodeName)return false;if(!target.dataset.invmsg)return false;if("text"!==target.getAttribute("type"))return false;if(target.classList.contains("frm_verify"))return false;return true}function maybeClearCustomValidityMessage(event,field){let key,isInvalid=false;if(!shouldUpdateValidityMessage(field))return;for(key in field.validity){if("customError"===key)continue;if("valid"!==key&&field.validity[key]===true){isInvalid= +true;break}}if(!isInvalid)field.setCustomValidity("")}function maybeShowNewTabFallbackMessage(){let messageEl;if(!window.frmShowNewTabFallback)return;messageEl=document.querySelector("#frm_form_"+frmShowNewTabFallback.formId+"_container .frm_message");if(!messageEl)return;messageEl.insertAdjacentHTML("beforeend"," "+frmShowNewTabFallback.message)}function setCustomValidityMessage(){let forms,length,index;forms=document.getElementsByClassName("frm-show-form");length=forms.length;for(index=0;index< +length;++index)forms[index].addEventListener("invalid",function(event){const target=event.target;if(shouldUpdateValidityMessage(target))target.setCustomValidity(target.dataset.invmsg)},true)}function enableSubmitButtonOnBackButtonPress(){window.addEventListener("pageshow",function(event){if(event.persisted){document.querySelectorAll(".frm_loading_form").forEach(function(form){enableSubmitButton(form)});removeSubmitLoading()}})}function destroyhCaptcha(){if(!window.hasOwnProperty("hcaptcha")||!document.querySelector(".frm-show-form .h-captcha"))return; +window.hcaptcha=null}function getUniqueKey(){const uniqueKey=Array.from(window.crypto.getRandomValues(new Uint8Array(8))).map(b=>b.toString(16).padStart(2,"0")).join("");const timestamp=Date.now().toString(16);return uniqueKey+"-"+timestamp}function animateScroll(start,end,duration){if(!window.hasOwnProperty("performance")||!window.hasOwnProperty("requestAnimationFrame")){document.documentElement.scrollTop=end;return}const startTime=performance.now();const step=currentTime=>{const progress=Math.min((currentTime- +startTime)/duration,1);document.documentElement.scrollTop=start+(end-start)*progress;if(progress<1)requestAnimationFrame(step)};requestAnimationFrame(step)}function maybeFixCaptchaLabel(captcha){const form=captcha.closest("form");if(!form)return;const label=form.querySelector('label[for="g-recaptcha-response"], label[for="cf-turnstile-response"]');const captchaResponse=form.querySelector('[name="g-recaptcha-response"], [name="cf-turnstile-response"]');if(label&&captchaResponse)label.htmlFor=captchaResponse.id} +return{init:function(){jQuery(document).off("submit.formidable",".frm-show-form");jQuery(document).on("submit.formidable",".frm-show-form",frmFrontForm.submitForm);jQuery(document).on("change",'.frm-show-form input[name^="item_meta"], .frm-show-form select[name^="item_meta"], .frm-show-form textarea[name^="item_meta"]',frmFrontForm.fieldValueChanged);jQuery(document).on("change",".frm_verify[id^=field_]",onHoneypotFieldChange);jQuery(document).on("click","a[data-frmconfirm]",confirmClick);checkForErrorsAndMaybeSetFocus(); +changeFocusWhenClickComboFieldLabel();initFloatingLabels();maybeShowNewTabFallbackMessage();jQuery(document).on("frmAfterAddRow",setCustomValidityMessage);setCustomValidityMessage();jQuery(document).on("frmFieldChanged",maybeClearCustomValidityMessage);setSelectPlaceholderColor();jQuery(document).on("elementor/popup/show",frmRecaptcha);enableSubmitButtonOnBackButtonPress();jQuery(document).on("frmPageChanged",destroyhCaptcha)},getFieldId,renderCaptcha:function(captcha,captchaSelector){const rendered= +captcha.getAttribute("data-rid")!==null;if(rendered)return;const size=captcha.getAttribute("data-size");const params={sitekey:captcha.getAttribute("data-sitekey"),size:size,theme:captcha.getAttribute("data-theme")};if(size==="invisible"){const formID=captcha.closest("form")?.querySelector('input[name="form_id"]')?.value;const captchaLabel=captcha.closest(".frm_form_field")?.querySelector(".frm_primary_label");if(captchaLabel)captchaLabel.style.display="none";params.callback=function(token){frmFrontForm.afterRecaptcha(token, +formID)}}const activeCaptcha=getSelectedCaptcha(captchaSelector);const captchaContainer=typeof turnstile!=="undefined"&&turnstile===activeCaptcha?"#"+captcha.id:captcha.id;const captchaID=activeCaptcha.render(captchaContainer,params);captcha.setAttribute("data-rid",captchaID);maybeFixCaptchaLabel(captcha)},afterSingleRecaptcha:function(){const recaptcha=document.querySelector(".frm-show-form .g-recaptcha");const object=recaptcha?recaptcha.closest("form"):null;frmFrontForm.submitFormNow(object)},afterRecaptcha:function(_, +formID){const object=document.querySelector("#frm_form_"+formID+"_container form");frmFrontForm.submitFormNow(object)},submitForm:function(e){frmFrontForm.submitFormManual(e,this)},submitFormManual:function(e,object){if(document.body.classList.contains("wp-admin")&&!object.closest(".frmapi-form"))return;e.preventDefault();if(typeof frmProForm!=="undefined"&&typeof frmProForm.submitAllowed==="function"&&!frmProForm.submitAllowed(object))return;const errors=frmFrontForm.validateFormSubmit(object);if(Object.keys(errors).length!== +0)return;const invisibleRecaptcha=hasInvisibleRecaptcha(object);if(invisibleRecaptcha){showLoadingIndicator(jQuery(object));executeInvisibleRecaptcha(invisibleRecaptcha)}else{showSubmitLoading(jQuery(object));frmFrontForm.submitFormNow(object)}},submitFormNow:function(object){let hasFileFields,antispamInput,classList=object.className.trim().split(/\s+/gi);if(object.hasAttribute("data-token")&&null===object.querySelector('[name="antispam_token"]')){antispamInput=document.createElement("input");antispamInput.type= +"hidden";antispamInput.name="antispam_token";antispamInput.value=object.getAttribute("data-token");object.appendChild(antispamInput)}const uniqueIDInput=document.createElement("input");uniqueIDInput.type="hidden";uniqueIDInput.name="unique_id";uniqueIDInput.value=getUniqueKey();object.appendChild(uniqueIDInput);if(classList.indexOf("frm_ajax_submit")>-1){const fileInputs=object.querySelectorAll('input[type="file"]');hasFileFields=Array.from(fileInputs).filter(input=>!!input.value).length;if(hasFileFields< +1){const actionInput=object.querySelector('input[name="frm_action"]');const action=actionInput?actionInput.value:"";frmFrontForm.checkFormErrors(object,action)}else object.submit()}else object.submit()},validateFormSubmit:function(object){const form=object instanceof jQuery?object.get(0):object;if(typeof tinyMCE!=="undefined"&&form&&form.querySelector(".wp-editor-wrap"))tinyMCE.triggerSave();jsErrors=[];if(shouldJSValidate(object)){frmFrontForm.getAjaxFormErrors(object);if(Object.keys(jsErrors).length)frmFrontForm.addAjaxFormErrors(object)}return jsErrors}, +getAjaxFormErrors:function(object){let customErrors,key;const form=object instanceof jQuery?object.get(0):object;jsErrors=validateForm(object);if(typeof frmThemeOverride_jsErrors==="function"){const actionInput=form?form.querySelector('input[name="frm_action"]'):null;const action=actionInput?actionInput.value:"";customErrors=frmThemeOverride_jsErrors(action,object);if(Object.keys(customErrors).length)for(key in customErrors)jsErrors[key]=customErrors[key]}triggerCustomEvent(document,"frm_get_ajax_form_errors", +{formEl:object,errors:jsErrors});return jsErrors},addAjaxFormErrors:function(object){let key;const form=object instanceof jQuery?object.get(0):object;removeAllErrors();for(key in jsErrors){const fieldCont=form?form.querySelector("#frm_field_"+key+"_container"):null;if(fieldCont)addFieldError(fieldCont,key,jsErrors);else delete jsErrors[key]}scrollToFirstField(object);checkForErrorsAndMaybeSetFocus()},checkFormErrors:getFormErrors,checkRequiredField,showSubmitLoading,removeSubmitLoading,scrollToID:function(id){const object= +jQuery(document.getElementById(id));frmFrontForm.scrollMsg(object,false)},scrollMsg:function(id,object,animate){let newPos,m,b,screenTop,screenBottom,scrollObj="";if(typeof object==="undefined"){scrollObj=jQuery(document.getElementById("frm_form_"+id+"_container"));if(scrollObj.length<1)return}else if(typeof id==="string"){const formEl=object instanceof jQuery?object.get(0):object;const fieldEl=formEl?formEl.querySelector("#frm_field_"+id+"_container"):null;scrollObj=fieldEl?jQuery(fieldEl):jQuery()}else scrollObj= +id;jQuery(scrollObj).trigger("focus");newPos=scrollObj.offset().top;if(!newPos||frm_js.offset==="-1")return;newPos=newPos-frm_js.offset;m=getComputedStyle(document.documentElement).marginTop;b=getComputedStyle(document.body).marginTop;if(m||b)newPos=newPos-parseInt(m)-parseInt(b);if(newPos&&window.innerHeight){screenTop=document.documentElement.scrollTop||document.body.scrollTop;screenBottom=screenTop+window.innerHeight;if(newPos>screenBottom||newPos/g, +">").replace(/"/g,""").replace(/'/g,"'")},triggerCustomEvent:triggerCustomEvent,documentOn}}window.frmFrontForm=frmFrontFormJS();jQuery(document).ready(function(){frmFrontForm.init()});function frmRecaptcha(){frmCaptcha(".frm-g-recaptcha")}function frmHcaptcha(){frmCaptcha(".h-captcha")}function frmTurnstile(){frmCaptcha(".frm-cf-turnstile")} function frmCaptcha(captchaSelector){if(".h-captcha"===captchaSelector){const captchaLabels=document.querySelectorAll('label[for="h-captcha-response"]');if(captchaLabels.length)captchaLabels.forEach(label=>{const captchaResponse=label.closest("form")?.querySelector('[name="h-captcha-response"]');if(captchaResponse)label.htmlFor=captchaResponse.id});return}let c;const captchas=document.querySelectorAll(captchaSelector);const cl=captchas.length;for(c=0;c\n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2025-12-09T15:22:29+00:00\n" +"POT-Creation-Date: 2025-12-16T17:31:34+00:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.11.0\n" "X-Domain: formidable\n" @@ -187,8 +187,8 @@ msgstr "" #: stripe/controllers/FrmTransLiteSubscriptionsController.php:73 #: js/admin/style.js:855 #: js/admin/style.js:979 -#: js/src/admin/admin.js:4475 -#: js/src/admin/admin.js:8497 +#: js/src/admin/admin.js:4482 +#: js/src/admin/admin.js:8515 #: js/formidable_admin.js:7254 #: js/formidable_admin.js:11276 msgid "Cancel" @@ -1265,7 +1265,7 @@ msgid "Field Colors" msgstr "" #: classes/controllers/FrmStylesController.php:1058 -#: js/src/admin/admin.js:2634 +#: js/src/admin/admin.js:2641 #: js/formidable_admin.js:5413 msgid "Field Settings" msgstr "" @@ -2557,7 +2557,7 @@ msgstr "" #: stripe/helpers/FrmTransLiteListHelper.php:404 #: stripe/views/payments/show.php:156 #: stripe/views/subscriptions/show.php:129 -#: js/src/admin/admin.js:2662 +#: js/src/admin/admin.js:2669 #: js/formidable_admin.js:5441 msgid "Delete" msgstr "" @@ -2577,7 +2577,7 @@ msgstr "" #. translators: %s: Field name #: classes/helpers/FrmFieldsHelper.php:308 #: classes/helpers/FrmFieldsHelper.php:470 -#: classes/helpers/FrmXMLHelper.php:1796 +#: classes/helpers/FrmXMLHelper.php:1782 msgid "%s is invalid" msgstr "" @@ -4063,7 +4063,7 @@ msgstr "" #: classes/helpers/FrmFormsHelper.php:2055 #: classes/views/form-templates/modals/name-your-form-modal.php:35 -#: js/src/admin/admin.js:4480 +#: js/src/admin/admin.js:4487 #: js/formidable_admin.js:7259 msgid "Save" msgstr "" @@ -4347,7 +4347,7 @@ msgstr "" msgid "Placeholder inside the field" msgstr "" -#: classes/helpers/FrmStylesHelper.php:941 +#: classes/helpers/FrmStylesHelper.php:969 #: classes/views/styles/_quick-settings.php:7 msgid "Quick Settings" msgstr "" @@ -4507,26 +4507,26 @@ msgstr "" msgid "Your server is missing the simplexml_import_dom function" msgstr "" -#: classes/helpers/FrmXMLHelper.php:1572 +#: classes/helpers/FrmXMLHelper.php:1558 msgctxt "import xml message" msgid "Error details:" msgstr "" -#: classes/helpers/FrmXMLHelper.php:1588 +#: classes/helpers/FrmXMLHelper.php:1574 #: classes/views/solutions/_import.php:53 msgid "Imported" msgstr "" -#: classes/helpers/FrmXMLHelper.php:1589 +#: classes/helpers/FrmXMLHelper.php:1575 msgid "Updated" msgstr "" -#: classes/helpers/FrmXMLHelper.php:1616 +#: classes/helpers/FrmXMLHelper.php:1602 msgid "Nothing was imported or updated" msgstr "" #. translators: %1$s: Number of items -#: classes/helpers/FrmXMLHelper.php:1643 +#: classes/helpers/FrmXMLHelper.php:1629 msgid "%1$s Form" msgid_plural "%1$s Forms" msgstr[0] "" @@ -4534,7 +4534,7 @@ msgstr[1] "" #. translators: %1$s: Number of items #. translators: %1$s - field type -#: classes/helpers/FrmXMLHelper.php:1645 +#: classes/helpers/FrmXMLHelper.php:1631 #: classes/models/FrmFormMigrator.php:737 msgid "%1$s Field" msgid_plural "%1$s Fields" @@ -4542,56 +4542,56 @@ msgstr[0] "" msgstr[1] "" #. translators: %1$s: Number of items -#: classes/helpers/FrmXMLHelper.php:1647 +#: classes/helpers/FrmXMLHelper.php:1633 msgid "%1$s Entry" msgid_plural "%1$s Entries" msgstr[0] "" msgstr[1] "" #. translators: %1$s: Number of items -#: classes/helpers/FrmXMLHelper.php:1649 +#: classes/helpers/FrmXMLHelper.php:1635 msgid "%1$s View" msgid_plural "%1$s Views" msgstr[0] "" msgstr[1] "" #. translators: %1$s: Number of items -#: classes/helpers/FrmXMLHelper.php:1651 +#: classes/helpers/FrmXMLHelper.php:1637 msgid "%1$s Page/Post" msgid_plural "%1$s Pages/Posts" msgstr[0] "" msgstr[1] "" #. translators: %1$s: Number of items -#: classes/helpers/FrmXMLHelper.php:1653 +#: classes/helpers/FrmXMLHelper.php:1639 msgid "%1$s Style" msgid_plural "%1$s Styles" msgstr[0] "" msgstr[1] "" #. translators: %1$s: Number of items -#: classes/helpers/FrmXMLHelper.php:1655 +#: classes/helpers/FrmXMLHelper.php:1641 msgid "%1$s Term" msgid_plural "%1$s Terms" msgstr[0] "" msgstr[1] "" #. translators: %1$s: Number of items -#: classes/helpers/FrmXMLHelper.php:1657 +#: classes/helpers/FrmXMLHelper.php:1643 msgid "%1$s Form Action" msgid_plural "%1$s Form Actions" msgstr[0] "" msgstr[1] "" -#: classes/helpers/FrmXMLHelper.php:1698 +#: classes/helpers/FrmXMLHelper.php:1684 msgid "Go to imported form" msgstr "" -#: classes/helpers/FrmXMLHelper.php:1989 +#: classes/helpers/FrmXMLHelper.php:1975 msgid "Create Posts" msgstr "" -#: classes/helpers/FrmXMLHelper.php:2129 +#: classes/helpers/FrmXMLHelper.php:2115 msgid "Email Notification" msgstr "" @@ -5114,31 +5114,31 @@ msgstr "" msgid "There are no options for this action." msgstr "" -#: classes/models/FrmFormAction.php:1024 +#: classes/models/FrmFormAction.php:994 msgid "Draft is saved" msgstr "" -#: classes/models/FrmFormAction.php:1025 +#: classes/models/FrmFormAction.php:995 msgid "Entry is created" msgstr "" -#: classes/models/FrmFormAction.php:1026 +#: classes/models/FrmFormAction.php:996 msgid "Entry is updated" msgstr "" -#: classes/models/FrmFormAction.php:1027 +#: classes/models/FrmFormAction.php:997 msgid "Entry is deleted" msgstr "" -#: classes/models/FrmFormAction.php:1028 +#: classes/models/FrmFormAction.php:998 msgid "Entry is imported" msgstr "" -#: classes/models/FrmFormAction.php:1041 +#: classes/models/FrmFormAction.php:1011 msgid "Use Conditional Logic" msgstr "" -#: classes/models/FrmFormAction.php:1051 +#: classes/models/FrmFormAction.php:1021 msgid "Conditional form actions" msgstr "" @@ -6098,7 +6098,7 @@ msgstr "" #: classes/views/frm-form-actions/form_action.php:32 #: js/admin/style.js:719 -#: js/src/admin/admin.js:2668 +#: js/src/admin/admin.js:2675 #: js/formidable_admin.js:5447 msgid "Duplicate" msgstr "" @@ -6278,7 +6278,7 @@ msgstr "" #: classes/views/frm-forms/add_field.php:44 #: js/src/admin/admin.js:1448 #: js/src/admin/admin.js:1454 -#: js/src/admin/admin.js:2593 +#: js/src/admin/admin.js:2600 #: js/formidable_admin.js:4227 #: js/formidable_admin.js:4233 #: js/formidable_admin.js:5372 @@ -8881,7 +8881,7 @@ msgstr "" #: js/formidable_admin.js:1 #: js/frm_testing_mode.js:2 #: js/src/admin/addon-state.js:175 -#: js/src/admin/admin.js:8488 +#: js/src/admin/admin.js:8506 #: js/formidable_admin.js:1687 #: js/formidable_admin.js:11267 #: js/frm_testing_mode.js:1689 @@ -8930,90 +8930,90 @@ msgid "Move Field Group" msgstr "" #. translators: %1$d: Maximum number of fields allowed in a field group. -#: js/src/admin/admin.js:2316 +#: js/src/admin/admin.js:2323 #: js/formidable_admin.js:5095 msgid "You can only have a maximum of %1$d fields in a field group. Delete or move out a field from the group and try again." msgstr "" -#: js/src/admin/admin.js:2662 +#: js/src/admin/admin.js:2669 #: js/formidable_admin.js:5441 msgid "Delete Group" msgstr "" -#: js/src/admin/admin.js:2668 +#: js/src/admin/admin.js:2675 #: js/formidable_admin.js:5447 msgid "Duplicate Group" msgstr "" #. translators: %1$s: Number of fields that are selected to be deleted. -#: js/src/admin/admin.js:3914 +#: js/src/admin/admin.js:3921 #: js/formidable_admin.js:6693 msgid "Are you sure you want to delete these %1$s selected field(s)?" msgstr "" -#: js/src/admin/admin.js:4154 +#: js/src/admin/admin.js:4161 #: js/formidable_admin.js:6933 msgid "Custom layout" msgstr "" -#: js/src/admin/admin.js:4177 +#: js/src/admin/admin.js:4184 #: js/formidable_admin.js:6956 msgid "Break into rows" msgstr "" -#: js/src/admin/admin.js:4187 +#: js/src/admin/admin.js:4194 #: js/formidable_admin.js:6966 msgid "Row Layout" msgstr "" -#: js/src/admin/admin.js:4460 +#: js/src/admin/admin.js:4467 #: js/formidable_admin.js:7239 msgid "Enter number of columns for each field" msgstr "" -#: js/src/admin/admin.js:4464 +#: js/src/admin/admin.js:4471 #: js/formidable_admin.js:7243 msgid "Layouts are based on a 12-column grid system" msgstr "" -#: js/src/admin/admin.js:4914 +#: js/src/admin/admin.js:4921 #: js/formidable_admin.js:7693 msgid "Merge into row" msgstr "" #. translators: %s: The detected option value. -#: js/src/admin/admin.js:6493 +#: js/src/admin/admin.js:6500 #: js/formidable_admin.js:9272 msgid "Duplicate option value \"%s\" detected" msgstr "" #. translators: %s: Form Setting section name (ie Form Permissions, Form Scheduling). -#: js/src/admin/admin.js:7203 +#: js/src/admin/admin.js:7210 #: js/formidable_admin.js:9982 msgid "%s are not installed" msgstr "" -#: js/src/admin/admin.js:8469 +#: js/src/admin/admin.js:8487 #: js/formidable_admin.js:11248 msgid "You are changing the field type. Not all field settings will appear as expected until you reload the page. Would you like to reload the page now?" msgstr "" -#: js/src/admin/admin.js:8474 +#: js/src/admin/admin.js:8492 #: js/formidable_admin.js:11253 msgid "Save and Reload?" msgstr "" -#: js/src/admin/admin.js:9380 +#: js/src/admin/admin.js:9393 #: js/formidable_admin.js:12159 msgid "Unable to install template" msgstr "" -#: js/src/admin/admin.js:9918 +#: js/src/admin/admin.js:9931 #: js/formidable_admin.js:12697 msgid "Only 10 columns can be selected at a time." msgstr "" -#: js/src/admin/admin.js:10093 +#: js/src/admin/admin.js:10106 #: js/formidable_admin.js:12872 msgid "Thank you for signing up!" msgstr ""