Changeset 3389352
- Timestamp:
- 11/04/2025 06:22:56 AM (6 weeks ago)
- Location:
- extensions-for-elementor-form
- Files:
-
- 12 edited
- 1 copied
-
tags/2.5.5 (copied) (copied from extensions-for-elementor-form/trunk)
-
tags/2.5.5/assets/addons/js/country-code-script.js (modified) (6 diffs)
-
tags/2.5.5/assets/addons/js/country-code-script.min.js (modified) (1 diff)
-
tags/2.5.5/assets/helloplus-addons/js/helloplus-country-code-script.js (modified) (2 diffs)
-
tags/2.5.5/assets/js/form-country-code-script.js (modified) (4 diffs)
-
tags/2.5.5/extensions-for-elementor-form.php (modified) (3 diffs)
-
tags/2.5.5/readme.txt (modified) (2 diffs)
-
trunk/assets/addons/js/country-code-script.js (modified) (6 diffs)
-
trunk/assets/addons/js/country-code-script.min.js (modified) (1 diff)
-
trunk/assets/helloplus-addons/js/helloplus-country-code-script.js (modified) (2 diffs)
-
trunk/assets/js/form-country-code-script.js (modified) (4 diffs)
-
trunk/extensions-for-elementor-form.php (modified) (3 diffs)
-
trunk/readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
extensions-for-elementor-form/tags/2.5.5/assets/addons/js/country-code-script.js
r3329586 r3389352 13 13 inputTelTextArea: 'textarea.ccfef_country_code_data_js', 14 14 intlInputSpan: '.ccfef-editor-intl-input', 15 submitButton: 'div.cool-form__submit-group button' 15 submitButton: 'div.cool-form__submit-group button', 16 form: '.cool-form', 17 16 18 }, 17 19 }; … … 28 30 $intlSpanElement: this.$element.find(selectors.intlInputSpan), 29 31 $submitButton: this.$element.find(selectors.submitButton), 32 $form: this.$element.find(selectors.form), 33 30 34 }; 31 35 } … … 215 219 } 216 220 217 this.updateCountryCodeHandler(e.currentTarget, currentCode, previousCode, this.dialCodeVisibility[key]); 218 previousCode = currentCode; 221 if(e.currentTarget.value.startsWith(currentCode.replace('+',''))){ 222 this.updateCountryCodeHandler(e.currentTarget, '+', previousCode, this.dialCodeVisibility[key]); 223 }else{ 224 this.updateCountryCodeHandler(e.currentTarget, currentCode, previousCode, this.dialCodeVisibility[key]); 225 previousCode = currentCode; 226 } 219 227 }; 220 228 … … 442 450 element.value = dialCodeVisibility === 'separate' || dialCodeVisibility === 'hide' ? value : currentCode + value; 443 451 } 452 453 else if (value.length > 12) { 454 const plainCode = currentCode.replace('+', ''); 455 const doublePrefix = `+${plainCode}${plainCode}`; 456 457 if (value.startsWith(doublePrefix)) { 458 element.value = `+${value.slice(currentCode.length)}`; 459 } 460 } 444 461 } 445 462 … … 542 559 } 543 560 561 // Helper: Validate all telephone fields 562 validateTelInputs(e, trigger = 'submit') { 563 564 const itiArr = this.iti; 565 566 if (Object.keys(itiArr).length > 0) { 567 Object.keys(itiArr).forEach(data => { 568 const iti = itiArr[data]; 569 570 const inputTelElement = iti.telInput; 571 572 let mainField = inputTelElement.closest('label') 573 let mdcField = mdc.textfield.MDCTextField.attachTo(mainField); 574 575 if('' !== inputTelElement.value){ 576 inputTelElement.value=inputTelElement.value.replace(/[^0-9+]/g, ''); 577 578 // Always ensure dial code is present in the value before validation 579 const currentCountryData = iti.getSelectedCountryData(); 580 const dialCode = `+${currentCountryData.dialCode}`; 581 582 // If using separate or hide mode, ensure dial code is in the value 583 if (this.dialCodeVisibility[data] === 'separate' || this.dialCodeVisibility[data] === 'hide') { 584 if (!inputTelElement.value.startsWith('+')) { 585 inputTelElement.value = dialCode + inputTelElement.value; 586 } 587 } 588 } 589 590 const parentWrp = inputTelElement.closest('.cool-form__field-group'); 591 const telContainer=parentWrp.querySelector('.cfefp-intl-container'); 592 593 if (telContainer && inputTelElement.offsetHeight) { 594 telContainer.style.setProperty('--cfefp-intl-tel-button-height', `${inputTelElement.offsetHeight}px`); 595 } 596 597 const errorContainer = jQuery(inputTelElement).parent(); 598 errorContainer.find('span.elementor-message').remove(); 599 600 const errorMap = CCFEFCustomData.errorMap; 601 let errorMsgHtml = '<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">'; 602 if('' === inputTelElement.value){ 603 return; 604 }; 605 606 if (iti.isValidNumber()) { 607 jQuery(inputTelElement).closest('.cfefp-intl-container').removeClass('elementor-error'); 608 609 mdcField.valid = true; 610 mdcField.trailingIcon.root.style.display = 'none'; 611 mdcField.helperText.foundation.adapter.setContent(''); 612 613 const $visibleFlexErrors = this.elements.$form.find('.mask-error').filter(function() { 614 return jQuery(this).css('display') === 'flex'; 615 }); 616 617 if($visibleFlexErrors.length === 0){ 618 619 this.elements.$form[0].classList.remove('elementor-form-waiting'); 620 } 621 } else { 622 const errorType = iti.getValidationError(); 623 if (errorType !== undefined && errorMap[errorType]) { 624 // Remove dial code from input field if validation fails 625 if (this.dialCodeVisibility[data] === 'separate' || this.dialCodeVisibility[data] === 'hide') { 626 const currentCountryData = iti.getSelectedCountryData(); 627 const dialCode = `+${currentCountryData.dialCode}`; 628 if (inputTelElement.value.startsWith(dialCode)) { 629 inputTelElement.value = inputTelElement.value.substring(dialCode.length); 630 } 631 } 632 errorMsgHtml += errorMap[errorType] + '</span>'; 633 jQuery(inputTelElement).closest('.cfefp-intl-container').addClass('elementor-error'); 634 635 mdcField.valid = false; 636 mdcField.trailingIcon.root.style.display = 'initial'; 637 mdcField.helperText.foundation.adapter.setContent(errorMap[errorType]); 638 639 // jQuery(inputTelElement).after(errorMsgHtml); 640 e.preventDefault(); 641 if(this.elements.$form.find('.is-field-type-recaptcha_v3').length > 0){ 642 e.stopImmediatePropagation() 643 } 644 if (trigger === 'submit') { 645 this.elements.$form[0].classList.add('elementor-form-waiting'); 646 } 647 } 648 } 649 }); 650 } 651 652 } 544 653 545 654 … … 549 658 */ 550 659 intlInputValidation() { 660 551 661 this.elements.$submitButton.on('click', (e) => { 552 const itiArr = this.iti; 553 554 if (Object.keys(itiArr).length > 0) { 555 Object.keys(itiArr).forEach(data => { 556 const iti = itiArr[data]; 557 558 const inputTelElement = iti.telInput; 559 560 let mainField = inputTelElement.closest('label') 561 let mdcField = mdc.textfield.MDCTextField.attachTo(mainField); 562 563 if('' !== inputTelElement.value){ 564 inputTelElement.value=inputTelElement.value.replace(/[^0-9+]/g, ''); 565 566 // Always ensure dial code is present in the value before validation 567 const currentCountryData = iti.getSelectedCountryData(); 568 const dialCode = `+${currentCountryData.dialCode}`; 569 570 // If using separate or hide mode, ensure dial code is in the value 571 if (this.dialCodeVisibility[data] === 'separate' || this.dialCodeVisibility[data] === 'hide') { 572 if (!inputTelElement.value.startsWith('+')) { 573 inputTelElement.value = dialCode + inputTelElement.value; 574 } 575 } 576 } 577 578 const parentWrp = inputTelElement.closest('.cool-form__field-group'); 579 const telContainer=parentWrp.querySelector('.cfefp-intl-container'); 580 581 if (telContainer && inputTelElement.offsetHeight) { 582 telContainer.style.setProperty('--cfefp-intl-tel-button-height', `${inputTelElement.offsetHeight}px`); 583 } 584 585 const errorContainer = jQuery(inputTelElement).parent(); 586 errorContainer.find('span.elementor-message').remove(); 587 588 const errorMap = CCFEFCustomData.errorMap; 589 let errorMsgHtml = '<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">'; 590 if('' === inputTelElement.value){ 591 return; 592 }; 593 594 if (iti.isValidNumber()) { 595 jQuery(inputTelElement).closest('.cfefp-intl-container').removeClass('elementor-error'); 596 597 mdcField.valid = true; 598 mdcField.trailingIcon.root.style.display = 'none'; 599 mdcField.helperText.foundation.adapter.setContent(''); 600 } else { 601 const errorType = iti.getValidationError(); 602 if (errorType !== undefined && errorMap[errorType]) { 603 // Remove dial code from input field if validation fails 604 if (this.dialCodeVisibility[data] === 'separate' || this.dialCodeVisibility[data] === 'hide') { 605 const currentCountryData = iti.getSelectedCountryData(); 606 const dialCode = `+${currentCountryData.dialCode}`; 607 if (inputTelElement.value.startsWith(dialCode)) { 608 inputTelElement.value = inputTelElement.value.substring(dialCode.length); 609 } 610 } 611 errorMsgHtml += errorMap[errorType] + '</span>'; 612 jQuery(inputTelElement).closest('.cfefp-intl-container').addClass('elementor-error'); 613 614 mdcField.valid = false; 615 mdcField.trailingIcon.root.style.display = 'initial'; 616 mdcField.helperText.foundation.adapter.setContent(errorMap[errorType]); 617 618 // jQuery(inputTelElement).after(errorMsgHtml); 619 e.preventDefault(); 620 } 621 } 622 }); 623 } 662 this.validateTelInputs(e, 'button'); 663 }); 664 665 this.elements.$form.on('submit', (e) => { 666 this.validateTelInputs(e, 'submit'); 624 667 }); 625 668 } -
extensions-for-elementor-form/tags/2.5.5/assets/addons/js/country-code-script.min.js
r3270292 r3389352 1 class C CFEF extends elementorModules.frontend.handlers.Base{getDefaultSettings(){return{selectors:{inputTelTextArea:"textarea.ccfef_country_code_data_js",intlInputSpan:".ccfef-editor-intl-input",submitButton:"div.elementor-field-type-submit button"}}}getDefaultElements(){const selectors=this.getSettings("selectors");return{$textArea:this.$element.find(selectors.inputTelTextArea),$intlSpanElement:this.$element.find(selectors.intlInputSpan),$submitButton:this.$element.find(selectors.submitButton)}}bindEvents(){this.telId=new Array,this.includeCountries={},this.excludeCountries={},this.defaultCountry={},this.commonCountries={},this.iti={},this.getIntlUserData(),this.appendCountryCodeHandler(),this.addCountryCodeInputHandler(),this.customFlags(),this.removeInputTelSpanEle(),this.intlInputValidation()}appendCountryCodeHandler(){this.telId.forEach(data=>{this.addCountryCodeIconHandler(data.formId,data.fieldId,data.customId)})}addCountryCodeInputHandler(){const itiArr=this.iti;Object.keys(itiArr).forEach(key=>{const iti=itiArr[key],inputElement=iti.telInput;let previousCountryData=iti.getSelectedCountryData(),previousCode=`+${previousCountryData.dialCode}`,keyUpEvent=!1;const resetKeyUpEventStatus=()=>{keyUpEvent=!1},handleCountryChange=e=>{this.customFlags();const currentCountryData=iti.getSelectedCountryData(),currentCode=`+${currentCountryData.dialCode}`;if("keydown"===e.type||"input"===e.type)keyUpEvent=!0,clearTimeout(resetKeyUpEventStatus),setTimeout(resetKeyUpEventStatus,400),previousCountryData.dialCode!==currentCountryData.dialCode?previousCountryData=currentCountryData:previousCountryData.dialCode===currentCountryData.dialCode&&previousCountryData.iso2!==currentCountryData.iso2&&iti.setCountry(previousCountryData.iso2);else if("countrychange"===e.type){if(keyUpEvent)return;previousCountryData=currentCountryData}this.updateCountryCodeHandler(e.currentTarget,currentCode,previousCode),previousCode=currentCode};inputElement.addEventListener("keydown",handleCountryChange),inputElement.addEventListener("input",handleCountryChange),inputElement.addEventListener("countrychange",handleCountryChange)})}addCountryCodeIconHandler(formId,widgetId,inputId){const utilsPath=CCFEFCustomData.pluginDir+"assets/intl-tel-input/js/utils.min.js",telFIeld=jQuery(`.elementor-widget.elementor-widget-form[data-id="${formId}"] .elementor-field-type-tel.elementor-field-group input[type="tel"]#${inputId}`)[0];if(void 0!==telFIeld){let includeCountries=[],excludeCountries=[],defaultCountry="in";const defaultCoutiresArr=["in","us","gb","ru","fr","de","br","cn","jp","it"],uniqueId=`${formId}${widgetId}`;if(this.includeCountries.hasOwnProperty(uniqueId)&&this.includeCountries[uniqueId].length>0&&(defaultCountry=this.includeCountries[uniqueId][0],includeCountries=[...this.includeCountries[uniqueId]]),this.excludeCountries.hasOwnProperty(uniqueId)&&this.excludeCountries[uniqueId].length>0){let uniqueValue;defaultCountry=defaultCoutiresArr.filter(value=>!this.excludeCountries[uniqueId].includes(value))[0],excludeCountries=[...this.excludeCountries[uniqueId]]}this.defaultCountry[uniqueId]&&""!==this.defaultCountry[uniqueId]&&(defaultCountry=this.defaultCountry[uniqueId]);const iti=window.intlTelInput(telFIeld,{initialCountry:defaultCountry,utilsScript:utilsPath,formatOnDisplay:!1,formatAsYouType:!0,autoFormat:!1,containerClass:"cfefp-intl-container",useFullscreenPopup:!1,onlyCountries:includeCountries,excludeCountries:excludeCountries,customPlaceholder:(selectedCountryPlaceholder,selectedCountryData)=>{if(this.commonCountries[uniqueId])return"No country found";if(!selectedCountryData||!selectedCountryPlaceholder||!selectedCountryData.dialCode)return"No country found";let placeHolder=selectedCountryPlaceholder;"in"===selectedCountryData.iso2&&(placeHolder=selectedCountryPlaceholder.replace(/^0+/,""));const placeholderText=`+${selectedCountryData.dialCode} ${placeHolder}`;return placeholderText.replace(/\s/g,"")}}),intlSpan=document.querySelector(`.elementor-widget.elementor-widget-form[data-id="${formId}"] .ccfef-editor-intl-input[data-field-id="${widgetId}"]`),commonAttr=intlSpan?intlSpan.getAttribute("data-common-countries"):"";if("same"===commonAttr&&this.commonCountries[uniqueId]&&""!==includeCountries&&""!==excludeCountries){const countryList=iti.countryList;countryList&&countryList.classList.contains("iti__country-list")&&(countryList.style.display="none")}else{const countryList=iti.countryList;if(countryList&&countryList.classList.contains("iti__country-list")){const countryItems=countryList.querySelectorAll(".iti__country");countryItems.forEach((function(item){const countryCode=item.getAttribute("data-country-code");excludeCountries.includes(countryCode)&&(item.style.display="none")}));const visibleCountries=Array.from(countryItems).filter(item=>"none"!==item.style.display),includedVisibleCountries=visibleCountries.filter(item=>{const countryCode=item.getAttribute("data-country-code");return includeCountries.includes(countryCode)});if(includedVisibleCountries.length>0){const selectedItem=includedVisibleCountries.find(item=>"true"===item.getAttribute("aria-selected"));if(!selectedItem){const firstItem=includedVisibleCountries[0];firstItem.setAttribute("aria-selected","true");const newCountryCode=firstItem.getAttribute("data-country-code");iti.setCountry(newCountryCode)}}}}telFIeld.removeAttribute("pattern"),this.iti[formId+widgetId]=iti}}updateCountryCodeHandler(element,currentCode,previousCode){let value=element.value;currentCode&&"+undefined"===currentCode||["","+"].includes(value)||(currentCode!==previousCode&&(value=value.replace(new RegExp(`^\\${previousCode}`),"")),value.startsWith(currentCode)||(value=value.replace(/\+/g,""),element.value=currentCode+value))}customFlags(){const selectedCountries=this.$element.find(".cfefp-intl-container .iti__country-container .iti__flag:not(.iti__globe)");selectedCountries.each((function(){const selectedCountry=this,classList=selectedCountry.className.split(" ");if(classList[1]){const selectedCountryFlag=classList[1].split("__")[1],svgFlagPath=CCFEFCustomData.pluginDir+`assets/flags/${selectedCountryFlag}.svg`;selectedCountry.style.backgroundImage=`url('${svgFlagPath}')`}}))}removeInputTelSpanEle(){this.$element.find("span.ccfef-editor-intl-input").remove()}getIntlUserData(){const intelInputElement=this.elements.$intlSpanElement,previousIds=[];intelInputElement.each((_,ele)=>{const element=jQuery(ele),includeCountries=element.data("include-countries"),excludeCountries=element.data("exclude-countries"),defaultCountry=element.data("defaultCountry"),commonAttr=element.data("common-countries"),inputId=element.data("id"),fieldId=element.data("field-id"),formId=element.closest(".elementor-element.elementor-widget-form").data("id"),currentId=`${formId}${fieldId}`;if("same"===commonAttr&&""===includeCountries&&""!==excludeCountries)this.commonCountries[currentId]=!0;else{if(""!==includeCountries&&isNaN(includeCountries)){const splitIncludeCountries=includeCountries.split(",");this.includeCountries[currentId]=splitIncludeCountries}if(""!==excludeCountries&&isNaN(excludeCountries)){const splitExcludeCountries=excludeCountries.split(",");this.excludeCountries[currentId]=splitExcludeCountries}if("same"!==commonAttr&&""!==includeCountries&&""!==excludeCountries&&isNaN(includeCountries)){const includeArray=includeCountries.split(",").map(item=>item.trim());if(isNaN(excludeCountries)){const excludeArray=excludeCountries.split(",").map(item=>item.trim()),allIncludedPresent=includeArray.every(country=>excludeArray.includes(country));allIncludedPresent&&(this.commonCountries[currentId]=!0)}}""!==defaultCountry&&(this.defaultCountry[currentId]=defaultCountry)}previousIds.includes(currentId)||(this.telId.push({formId:formId,fieldId:fieldId,customId:inputId}),previousIds.push(currentId))})}intlInputValidation(){this.elements.$submitButton.on("click",e=>{const itiArr=this.iti;Object.keys(itiArr).length>0&&Object.keys(itiArr).forEach(data=>{const iti=itiArr[data],inputTelElement=iti.telInput;""!==inputTelElement.value&&(inputTelElement.value=inputTelElement.value.replace(/[^0-9+]/g,""));const parentWrp=inputTelElement.closest(".elementor-field-group"),telContainer=parentWrp.querySelector(".cfefp-intl-container");telContainer&&inputTelElement.offsetHeight&&telContainer.style.setProperty("--cfefp-intl-tel-button-height",`${inputTelElement.offsetHeight}px`);const errorContainer=jQuery(inputTelElement).parent();errorContainer.find("span.elementor-message").remove();const errorMap=CCFEFCustomData.errorMap;let errorMsgHtml='<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">';if(""!==inputTelElement.value)if(iti.isValidNumber())jQuery(inputTelElement).closest(".cfefp-intl-container").removeClass("elementor-error");else{const errorType=iti.getValidationError();void 0!==errorType&&errorMap[errorType]&&(errorMsgHtml+=errorMap[errorType]+"</span>",jQuery(inputTelElement).closest(".cfefp-intl-container").addClass("elementor-error"),jQuery(inputTelElement).after(errorMsgHtml),e.preventDefault())}})})}}jQuery(window).on("elementor/frontend/init",()=>{const addHandler=$element=>{elementorFrontend.elementsHandler.addHandler(CCFEF,{$element:$element})};elementorFrontend.hooks.addAction("frontend/element_ready/form.default",addHandler)});1 class CoolFormCCFEF extends elementorModules.frontend.handlers.Base{getDefaultSettings(){return{selectors:{inputTelTextArea:"textarea.ccfef_country_code_data_js",intlInputSpan:".ccfef-editor-intl-input",submitButton:"div.cool-form__submit-group button",form:".cool-form"}}}getDefaultElements(){const t=this.getSettings("selectors");return{$textArea:this.$element.find(t.inputTelTextArea),$intlSpanElement:this.$element.find(t.intlInputSpan),$submitButton:this.$element.find(t.submitButton),$form:this.$element.find(t.form)}}bindEvents(){this.telId=new Array,this.includeCountries={},this.excludeCountries={},this.defaultCountry={},this.commonCountries={},this.dialCodeVisibility={},this.countryStrictMode={},this.iti={},this.getIntlUserData(),this.appendCountryCodeHandler(),this.addCountryCodeInputHandler(),this.customFlags(),this.removeInputTelSpanEle(),this.intlInputValidation()}handleTelWithMdcFields(t){function e(){const t=o.find(".iti__dropdown-content");o.nextAll(".cool-form__field-group").each(function(){t.hasClass("iti__hide")?this.style.zIndex="initial":this.style.zIndex="-1"})}const i=t.telInput,n=i.closest(".cool-form__field-group"),o=jQuery(n),s=o.find(".mdc-floating-label"),l=o.find("input"),r=o.find(".mdc-notched-outline__notch"),a=o.find(".mdc-notched-outline__leading");let d=l.eq(1).prev(".iti__country-container").find(".iti__selected-dial-code");if(d.css("visibility","hidden"),""!==l.eq(1).val()?d.css("visibility","visible"):d.css("visibility","hidden"),o.nextAll().length>0){const t=o.nextAll();if(t.length>0){const e=t[0],i=t[1],n=t=>t&&t.classList&&t.classList.contains("cool-form__submit-group"),s=o.hasClass("has-width-100")?n(e):n(e)||n(i);s&&(o.css({"margin-bottom":"25px"}),o.find(".iti__country-list").css({"max-height":"100px"}))}}s.css("left","57px"),l.eq(1).on("blur",()=>{""!==l.eq(1).val()?d.css("visibility","visible"):d.css("visibility","hidden")}),l.eq(1).on("focus",()=>{d.css("visibility","visible"),s.css({left:"57px","background-color":"white"});const t=getComputedStyle(r[0]).getPropertyValue("border-bottom");r.css({"border-top":t})}),o.on("click",t=>{e()}),l.eq(0).on("mouseover",()=>{const t=getComputedStyle(a[0]).getPropertyValue("border-bottom-width");r.css({"border-top-width":t,"border-top-color":"black"})}),o.on("mouseover",t=>{const i=getComputedStyle(a[0]).getPropertyValue("border-bottom-width");r.css({"border-top-width":i,"border-top-color":"black"}),e()}),o.on("mouseleave",t=>{const i=getComputedStyle(a[0]).getPropertyValue("border-bottom-width"),n=getComputedStyle(a[0]).getPropertyValue("border-right-color");r.css({"border-top-width":i,"border-top-color":n}),e()})}appendCountryCodeHandler(){this.telId.forEach(t=>{this.addCountryCodeIconHandler(t.formId,t.fieldId,t.customId)})}addCountryCodeInputHandler(){const t=this.iti;Object.keys(t).forEach(e=>{const i=t[e],n=i.telInput;this.handleTelWithMdcFields(i);let o=i.getSelectedCountryData(),s=`+${o.dialCode}`,l=!1;const r=()=>{l=!1},a=t=>{this.handleTelWithMdcFields(i),this.customFlags();const n=i.getSelectedCountryData(),a=`+${n.dialCode}`;if("keydown"===t.type||"input"===t.type)l=!0,clearTimeout(r),setTimeout(r,400),o.dialCode!==n.dialCode?o=n:o.dialCode===n.dialCode&&o.iso2!==n.iso2&&i.setCountry(o.iso2);else if("countrychange"===t.type){if(l)return;o=n}t.currentTarget.value.startsWith(a.replace("+",""))?this.updateCountryCodeHandler(t.currentTarget,"+",s,this.dialCodeVisibility[e]):(this.updateCountryCodeHandler(t.currentTarget,a,s,this.dialCodeVisibility[e]),s=a)};n.addEventListener("keydown",a),n.addEventListener("input",a),n.addEventListener("countrychange",a)})}addCountryCodeIconHandler(t,e,i){const n=CCFEFCustomData.pluginDir+"assets/addons/intl-tel-input/js/utils.min.js",o=jQuery(`.elementor-widget.elementor-widget-cool-form[data-id="${t}"] .is-field-type-tel.cool-form__field-group input[type="tel"]#${i}`)[0];if(void 0!==o){let i=[],s=[],l="in";const r=["in","us","gb","ru","fr","de","br","cn","jp","it"],a=`${t}${e}`;if(this.includeCountries.hasOwnProperty(a)&&this.includeCountries[a].length>0&&(l=this.includeCountries[a][0],i=[...this.includeCountries[a]]),this.excludeCountries.hasOwnProperty(a)&&this.excludeCountries[a].length>0){let t=r.filter(t=>!this.excludeCountries[a].includes(t));l=t[0],s=[...this.excludeCountries[a]]}this.defaultCountry[a]&&""!==this.defaultCountry[a]&&(l=this.defaultCountry[a]);const d=window.intlTelInput(o,{initialCountry:l,utilsScript:n,dialCodeVisibility:this.dialCodeVisibility[a],strictMode:"yes"===this.countryStrictMode[a],separateDialCode:"separate"===this.dialCodeVisibility[a],formatOnDisplay:!1,formatAsYouType:!0,autoFormat:!1,containerClass:"cfefp-intl-container",useFullscreenPopup:!1,onlyCountries:i,excludeCountries:s,customPlaceholder:(t,e)=>{if(this.commonCountries[a])return"No country found";if(!e||!t||!e.dialCode)return"No country found";let i=t;"in"===e.iso2&&(i=t.replace(/^0+/,""));const n="separate"===this.dialCodeVisibility[a]||"hide"===this.dialCodeVisibility[a]?`${i}`:`+${e.dialCode} ${i}`;return n}});if("separate"===this.dialCodeVisibility[a]){const t=document.createElement("style");t.textContent="\n .cfefp-intl-container .iti__selected-dial-code,\n .cfefp-intl-container .iti__selected-flag {\n color: var(--e-form-field-text-color, #7a7a7a) !important;\n }\n .cfefp-intl-container .iti__selected-dial-code {\n font-size: inherit !important;\n font-family: inherit !important;\n line-height: inherit !important;\n }\n ",document.head.appendChild(t)}const c=document.querySelector(`.elementor-widget.elementor-widget-form[data-id="${t}"] .ccfef-editor-intl-input[data-field-id="${e}"]`),u=c?c.getAttribute("data-common-countries"):"";if("same"===u&&this.commonCountries[a]&&""!==i&&""!==s){const t=d.countryList;t&&t.classList.contains("iti__country-list")&&(t.style.display="none")}else{const t=d.countryList;if(t&&t.classList.contains("iti__country-list")){const e=t.querySelectorAll(".iti__country");e.forEach(function(t){const e=t.getAttribute("data-country-code");s.includes(e)&&(t.style.display="none")});const n=Array.from(e).filter(t=>"none"!==t.style.display),o=n.filter(t=>{const e=t.getAttribute("data-country-code");return i.includes(e)});if(o.length>0){const t=o.find(t=>"true"===t.getAttribute("aria-selected"));if(!t){const t=o[0];t.setAttribute("aria-selected","true");const e=t.getAttribute("data-country-code");d.setCountry(e)}}}}o.removeAttribute("pattern"),this.iti[t+e]=d,this.setInitialCountry(d,s,a,o)}}setInitialCountry(t,e,i,n){const o=this.defaultCountry[i]||"",s=["in","us","gb","ru","fr","de","br","cn","jp","it"],l=t.countries.map(t=>t.iso2);t.telInput;jQuery(n).closest(".elementor-field-type-country").hasClass("elementor-field-required")&&jQuery(n).closest(".elementor-field-type-country").hasClass("cfef-hidden")&&(""===o?(t.setCountry("us"),jQuery(n).val("United States"),jQuery(n).focus(),jQuery(n).trigger("change")):(t.setCountry(o),jQuery(n).val(o),jQuery(n).focus(),jQuery(n).trigger("change")));const r=i=>{if(l.length<=0)return;const n=isNaN(i)&&i?i.toLowerCase():"";if(n&&l.includes(n))t.setCountry(n);else if(o&&l.includes(o))t.setCountry(o);else{const i=s.filter(t=>!e.includes(t)&&l.includes(t)),n=i.length>0?i[0]:l[0];t.setCountry(n)}const r=t.getSelectedCountryData();r.hasOwnProperty("iso2")};o&&r(o)}updateCountryCodeHandler(t,e,i,n){let o=t.value;if(!(e&&"+undefined"===e||["","+"].includes(o)))if(e!==i&&(o=o.replace(new RegExp(`^\\${i}`),"")),o.startsWith(e)){if(o.length>12){const i=e.replace("+",""),n=`+${i}${i}`;o.startsWith(n)&&(t.value=`+${o.slice(e.length)}`)}}else o=o.replace(/\+/g,""),t.value="separate"===n||"hide"===n?o:e+o}customFlags(){const t=this.$element.find(".cfefp-intl-container .iti__country-container .iti__flag:not(.iti__globe)");t.each(function(){const t=this,e=t.className.split(" ");if(e[1]){const i=e[1].split("__")[1],n=CCFEFCustomData.pluginDir+`assets/addons/flags/${i}.svg`;t.style.backgroundImage=`url('${n}')`}})}removeInputTelSpanEle(){this.$element.find("span.ccfef-editor-intl-input").remove()}getIntlUserData(){const t=this.elements.$intlSpanElement,e=[];t.each((t,i)=>{const n=jQuery(i),o=n.data("include-countries"),s=n.data("exclude-countries"),l=n.data("defaultCountry"),r=n.data("common-countries"),a=n.data("id"),d=n.data("field-id"),c=n.data("dial-code-visibility"),u=n.data("strict-mode"),f=n.closest(".elementor-element.elementor-widget-cool-form").data("id"),h=`${f}${d}`;if("same"===r&&""===o&&""!==s)this.commonCountries[h]=!0;else{if(""!==o&&isNaN(o)){const t=o.split(",");this.includeCountries[h]=t}if(""!==s&&isNaN(s)){const t=s.split(",");this.excludeCountries[h]=t}if("same"!==r&&""!==o&&""!==s&&isNaN(o)){const t=o.split(",").map(t=>t.trim());if(isNaN(s)){const e=s.split(",").map(t=>t.trim()),i=t.every(t=>e.includes(t));i&&(this.commonCountries[h]=!0)}}""!==c&&(this.dialCodeVisibility[h]=c),""!==u&&(this.countryStrictMode[h]=u),""!==l&&(this.defaultCountry[h]=l)}e.includes(h)||(this.telId.push({formId:f,fieldId:d,customId:a}),e.push(h))})}validateTelInputs(t,e="submit"){const i=this.iti;Object.keys(i).length>0&&Object.keys(i).forEach(n=>{const o=i[n],s=o.telInput;let l=s.closest("label"),r=mdc.textfield.MDCTextField.attachTo(l);if(""!==s.value){s.value=s.value.replace(/[^0-9+]/g,"");const t=o.getSelectedCountryData(),e=`+${t.dialCode}`;"separate"!==this.dialCodeVisibility[n]&&"hide"!==this.dialCodeVisibility[n]||s.value.startsWith("+")||(s.value=e+s.value)}const a=s.closest(".cool-form__field-group"),d=a.querySelector(".cfefp-intl-container");d&&s.offsetHeight&&d.style.setProperty("--cfefp-intl-tel-button-height",`${s.offsetHeight}px`);const c=jQuery(s).parent();c.find("span.elementor-message").remove();const u=CCFEFCustomData.errorMap;let f='<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">';if(""!==s.value)if(o.isValidNumber()){jQuery(s).closest(".cfefp-intl-container").removeClass("elementor-error"),r.valid=!0,r.trailingIcon.root.style.display="none",r.helperText.foundation.adapter.setContent("");const t=this.elements.$form.find(".mask-error").filter(function(){return"flex"===jQuery(this).css("display")});0===t.length&&this.elements.$form[0].classList.remove("elementor-form-waiting")}else{const i=o.getValidationError();if(void 0!==i&&u[i]){if("separate"===this.dialCodeVisibility[n]||"hide"===this.dialCodeVisibility[n]){const t=o.getSelectedCountryData(),e=`+${t.dialCode}`;s.value.startsWith(e)&&(s.value=s.value.substring(e.length))}f+=u[i]+"</span>",jQuery(s).closest(".cfefp-intl-container").addClass("elementor-error"),r.valid=!1,r.trailingIcon.root.style.display="initial",r.helperText.foundation.adapter.setContent(u[i]),t.preventDefault(),this.elements.$form.find(".is-field-type-recaptcha_v3").length>0&&t.stopImmediatePropagation(),"submit"===e&&this.elements.$form[0].classList.add("elementor-form-waiting")}}})}intlInputValidation(){this.elements.$submitButton.on("click",t=>{this.validateTelInputs(t,"button")}),this.elements.$form.on("submit",t=>{this.validateTelInputs(t,"submit")})}}jQuery(window).on("elementor/frontend/init",()=>{const t=t=>{elementorFrontend.elementsHandler.addHandler(CoolFormCCFEF,{$element:t})};elementorFrontend.hooks.addAction("frontend/element_ready/cool-form.default",t)}); -
extensions-for-elementor-form/tags/2.5.5/assets/helloplus-addons/js/helloplus-country-code-script.js
r3329586 r3389352 114 114 } 115 115 116 this.updateCountryCodeHandler(e.currentTarget, currentCode, previousCode, this.dialCodeVisibility[key]); 117 previousCode = currentCode; 116 if(e.currentTarget.value.startsWith(currentCode.replace('+',''))){ 117 this.updateCountryCodeHandler(e.currentTarget, '+', previousCode, this.dialCodeVisibility[key]); 118 }else{ 119 this.updateCountryCodeHandler(e.currentTarget, currentCode, previousCode, this.dialCodeVisibility[key]); 120 previousCode = currentCode; 121 } 118 122 }; 119 123 … … 340 344 value = value.replace(/\+/g, ''); 341 345 element.value = dialCodeVisibility === 'separate' || dialCodeVisibility === 'hide' ? value : currentCode + value; 346 } 347 348 else if (value.length > 12) { 349 const plainCode = currentCode.replace('+', ''); 350 const doublePrefix = `+${plainCode}${plainCode}`; 351 352 if (value.startsWith(doublePrefix)) { 353 element.value = `+${value.slice(currentCode.length)}`; 354 } 342 355 } 343 356 } -
extensions-for-elementor-form/tags/2.5.5/assets/js/form-country-code-script.js
r3378085 r3389352 116 116 } 117 117 118 this.updateCountryCodeHandler(e.currentTarget, currentCode, previousCode, this.dialCodeVisibility[key]); 119 previousCode = currentCode; 118 if(e.currentTarget.value.startsWith(currentCode.replace('+',''))){ 119 this.updateCountryCodeHandler(e.currentTarget, '+', previousCode, this.dialCodeVisibility[key]); 120 }else{ 121 this.updateCountryCodeHandler(e.currentTarget, currentCode, previousCode, this.dialCodeVisibility[key]); 122 previousCode = currentCode; 123 } 120 124 }; 121 125 … … 343 347 element.value = dialCodeVisibility === 'separate' || dialCodeVisibility === 'hide' ? value : currentCode + value; 344 348 } 349 350 else if (value.length > 12) { 351 const plainCode = currentCode.replace('+', ''); 352 const doublePrefix = `+${plainCode}${plainCode}`; 353 354 if (value.startsWith(doublePrefix)) { 355 element.value = `+${value.slice(currentCode.length)}`; 356 } 357 } 345 358 } 346 359 … … 444 457 445 458 459 // Helper: Validate all telephone fields 460 validateTelInputs(e, trigger = 'submit') { 461 462 const itiArr = this.iti; 463 464 if (Object.keys(itiArr).length > 0) { 465 Object.keys(itiArr).forEach(data => { 466 const iti = itiArr[data]; 467 468 const inputTelElement = iti.telInput; 469 470 if(jQuery(inputTelElement).closest('.elementor-field-type-tel').hasClass('cfef-hidden')){ 471 472 inputTelElement.value = '+1234567890'; 473 474 return; 475 } 476 477 if('' !== inputTelElement.value){ 478 inputTelElement.value=inputTelElement.value.replace(/[^0-9+]/g, ''); 479 480 // Always ensure dial code is present in the value before validation 481 const currentCountryData = iti.getSelectedCountryData(); 482 const dialCode = `+${currentCountryData.dialCode}`; 483 484 // If using separate or hide mode, ensure dial code is in the value 485 if (this.dialCodeVisibility[data] === 'separate' || this.dialCodeVisibility[data] === 'hide') { 486 if (!inputTelElement.value.startsWith('+')) { 487 inputTelElement.value = dialCode + inputTelElement.value; 488 } 489 } 490 } 491 492 const parentWrp = inputTelElement.closest('.elementor-field-group'); 493 const telContainer=parentWrp.querySelector('.cfefp-intl-container'); 494 495 if (telContainer && inputTelElement.offsetHeight) { 496 telContainer.style.setProperty('--cfefp-intl-tel-button-height', `${inputTelElement.offsetHeight}px`); 497 } 498 499 const errorContainer = jQuery(inputTelElement).parent(); 500 errorContainer.find('span.elementor-message').remove(); 501 502 const errorMap = CCFEFCustomData.errorMap; 503 let errorMsgHtml = '<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">'; 504 if('' === inputTelElement.value){ 505 return; 506 }; 507 if (iti.isValidNumber()) { 508 jQuery(inputTelElement).closest('.cfefp-intl-container').removeClass('elementor-error'); 509 this.elements.$submitButton.removeClass('cfkef-prevent-submit'); 510 const $visibleFlexErrors = this.elements.$form.find('.mask-error').filter(function() { 511 return jQuery(this).css('display') === 'flex'; 512 }); 513 514 if($visibleFlexErrors.length === 0){ 515 516 this.elements.$form[0].classList.remove('elementor-form-waiting'); 517 } 518 } else { 519 this.elements.$submitButton.addClass('cfkef-prevent-submit') 520 521 const errorType = iti.getValidationError(); 522 if (errorType !== undefined && errorMap[errorType]) { 523 // Remove dial code from input field if validation fails 524 if (this.dialCodeVisibility[data] === 'separate' || this.dialCodeVisibility[data] === 'hide') { 525 const currentCountryData = iti.getSelectedCountryData(); 526 const dialCode = `+${currentCountryData.dialCode}`; 527 if (inputTelElement.value.startsWith(dialCode)) { 528 inputTelElement.value = inputTelElement.value.substring(dialCode.length); 529 } 530 } 531 errorMsgHtml += errorMap[errorType] + '</span>'; 532 jQuery(inputTelElement).closest('.cfefp-intl-container').addClass('elementor-error'); 533 jQuery(inputTelElement).after(errorMsgHtml); 534 e.preventDefault(); 535 if (trigger === 'submit') { 536 this.elements.$form[0].classList.add('elementor-form-waiting'); 537 } 538 if(this.elements.$form.find('.elementor-field-type-recaptcha_v3').length > 0){ 539 e.stopImmediatePropagation() 540 } 541 } 542 } 543 }); 544 } 545 } 546 547 446 548 447 549 /** … … 450 552 */ 451 553 intlInputValidation() { 554 452 555 this.elements.$submitButton.on('click', (e) => { 453 const itiArr = this.iti; 454 455 if (Object.keys(itiArr).length > 0) { 456 Object.keys(itiArr).forEach(data => { 457 const iti = itiArr[data]; 458 459 const inputTelElement = iti.telInput; 460 461 if('' !== inputTelElement.value){ 462 inputTelElement.value=inputTelElement.value.replace(/[^0-9+]/g, ''); 463 464 // Always ensure dial code is present in the value before validation 465 const currentCountryData = iti.getSelectedCountryData(); 466 const dialCode = `+${currentCountryData.dialCode}`; 467 468 // If using separate or hide mode, ensure dial code is in the value 469 if (this.dialCodeVisibility[data] === 'separate' || this.dialCodeVisibility[data] === 'hide') { 470 if (!inputTelElement.value.startsWith('+')) { 471 inputTelElement.value = dialCode + inputTelElement.value; 472 } 473 } 474 } 475 476 const parentWrp = inputTelElement.closest('.elementor-field-group'); 477 const telContainer=parentWrp.querySelector('.cfefp-intl-container'); 478 479 if (telContainer && inputTelElement.offsetHeight) { 480 telContainer.style.setProperty('--cfefp-intl-tel-button-height', `${inputTelElement.offsetHeight}px`); 481 } 482 483 const errorContainer = jQuery(inputTelElement).parent(); 484 errorContainer.find('span.elementor-message').remove(); 485 486 const errorMap = CCFEFCustomData.errorMap; 487 let errorMsgHtml = '<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">'; 488 if('' === inputTelElement.value){ 489 return; 490 }; 491 if (iti.isValidNumber()) { 492 jQuery(inputTelElement).closest('.cfefp-intl-container').removeClass('elementor-error'); 493 this.elements.$submitButton.removeClass('cfkef-prevent-submit') 494 } else { 495 this.elements.$submitButton.addClass('cfkef-prevent-submit') 496 497 const errorType = iti.getValidationError(); 498 if (errorType !== undefined && errorMap[errorType]) { 499 // Remove dial code from input field if validation fails 500 if (this.dialCodeVisibility[data] === 'separate' || this.dialCodeVisibility[data] === 'hide') { 501 const currentCountryData = iti.getSelectedCountryData(); 502 const dialCode = `+${currentCountryData.dialCode}`; 503 if (inputTelElement.value.startsWith(dialCode)) { 504 inputTelElement.value = inputTelElement.value.substring(dialCode.length); 505 } 506 } 507 errorMsgHtml += errorMap[errorType] + '</span>'; 508 jQuery(inputTelElement).closest('.cfefp-intl-container').addClass('elementor-error'); 509 jQuery(inputTelElement).after(errorMsgHtml); 510 e.preventDefault(); 511 if(this.elements.$form.find('.elementor-field-type-recaptcha_v3').length > 0){ 512 e.stopImmediatePropagation() 513 } 514 } 515 } 516 }); 517 } 556 this.validateTelInputs(e, 'button'); 557 }); 558 559 this.elements.$form.on('submit', (e) => { 560 this.validateTelInputs(e, 'submit'); 518 561 }); 519 562 } -
extensions-for-elementor-form/tags/2.5.5/extensions-for-elementor-form.php
r3378085 r3389352 8 8 * Author URI: https://coolplugins.net/?utm_source=cfkl_plugin&utm_medium=inside&utm_campaign=author_page&utm_content=plugins_list 9 9 * Text Domain: extensions-for-elementor-form 10 * Version: 2.5. 410 * Version: 2.5.5 11 11 * Requires at least: 6.2 12 12 * Requires PHP: 6.2 … … 14 14 * License URI: http://www.gnu.org/licenses/gpl-2.0.txt 15 15 * Requires Plugins: elementor 16 * Elementor tested up to: 3.32. 416 * Elementor tested up to: 3.32.5 17 17 * Elementor Pro tested up to: 3.32.2 18 18 */ … … 32 32 } 33 33 34 define('CFL_VERSION','2.5. 4');34 define('CFL_VERSION','2.5.5'); 35 35 define('PHP_MINIMUM_VERSION','7.4'); 36 36 define('WP_MINIMUM_VERSION','5.5'); -
extensions-for-elementor-form/tags/2.5.5/readme.txt
r3378085 r3389352 5 5 Requires at least: 6.2 6 6 Tested up to: 6.8.2 7 Stable tag: 2.5. 47 Stable tag: 2.5.5 8 8 Requires PHP: 8.2 9 9 License: GPLv2 or later 10 10 License URI: http://www.gnu.org/licenses/gpl-2.0.html 11 Elementor tested up to: 3.32. 411 Elementor tested up to: 3.32.5 12 12 Elementor Pro tested up to: 3.32.2 13 13 … … 195 195 == Changelog == 196 196 197 = 2.5.5 - 2025-11-04 = 198 * Fixed: Double country code issue. 199 197 200 = 2.5.4 - 2025-10-14 = 198 201 * Fixed: Conditional navigation ensures hidden steps are skipped and users are routed correctly. -
extensions-for-elementor-form/trunk/assets/addons/js/country-code-script.js
r3329586 r3389352 13 13 inputTelTextArea: 'textarea.ccfef_country_code_data_js', 14 14 intlInputSpan: '.ccfef-editor-intl-input', 15 submitButton: 'div.cool-form__submit-group button' 15 submitButton: 'div.cool-form__submit-group button', 16 form: '.cool-form', 17 16 18 }, 17 19 }; … … 28 30 $intlSpanElement: this.$element.find(selectors.intlInputSpan), 29 31 $submitButton: this.$element.find(selectors.submitButton), 32 $form: this.$element.find(selectors.form), 33 30 34 }; 31 35 } … … 215 219 } 216 220 217 this.updateCountryCodeHandler(e.currentTarget, currentCode, previousCode, this.dialCodeVisibility[key]); 218 previousCode = currentCode; 221 if(e.currentTarget.value.startsWith(currentCode.replace('+',''))){ 222 this.updateCountryCodeHandler(e.currentTarget, '+', previousCode, this.dialCodeVisibility[key]); 223 }else{ 224 this.updateCountryCodeHandler(e.currentTarget, currentCode, previousCode, this.dialCodeVisibility[key]); 225 previousCode = currentCode; 226 } 219 227 }; 220 228 … … 442 450 element.value = dialCodeVisibility === 'separate' || dialCodeVisibility === 'hide' ? value : currentCode + value; 443 451 } 452 453 else if (value.length > 12) { 454 const plainCode = currentCode.replace('+', ''); 455 const doublePrefix = `+${plainCode}${plainCode}`; 456 457 if (value.startsWith(doublePrefix)) { 458 element.value = `+${value.slice(currentCode.length)}`; 459 } 460 } 444 461 } 445 462 … … 542 559 } 543 560 561 // Helper: Validate all telephone fields 562 validateTelInputs(e, trigger = 'submit') { 563 564 const itiArr = this.iti; 565 566 if (Object.keys(itiArr).length > 0) { 567 Object.keys(itiArr).forEach(data => { 568 const iti = itiArr[data]; 569 570 const inputTelElement = iti.telInput; 571 572 let mainField = inputTelElement.closest('label') 573 let mdcField = mdc.textfield.MDCTextField.attachTo(mainField); 574 575 if('' !== inputTelElement.value){ 576 inputTelElement.value=inputTelElement.value.replace(/[^0-9+]/g, ''); 577 578 // Always ensure dial code is present in the value before validation 579 const currentCountryData = iti.getSelectedCountryData(); 580 const dialCode = `+${currentCountryData.dialCode}`; 581 582 // If using separate or hide mode, ensure dial code is in the value 583 if (this.dialCodeVisibility[data] === 'separate' || this.dialCodeVisibility[data] === 'hide') { 584 if (!inputTelElement.value.startsWith('+')) { 585 inputTelElement.value = dialCode + inputTelElement.value; 586 } 587 } 588 } 589 590 const parentWrp = inputTelElement.closest('.cool-form__field-group'); 591 const telContainer=parentWrp.querySelector('.cfefp-intl-container'); 592 593 if (telContainer && inputTelElement.offsetHeight) { 594 telContainer.style.setProperty('--cfefp-intl-tel-button-height', `${inputTelElement.offsetHeight}px`); 595 } 596 597 const errorContainer = jQuery(inputTelElement).parent(); 598 errorContainer.find('span.elementor-message').remove(); 599 600 const errorMap = CCFEFCustomData.errorMap; 601 let errorMsgHtml = '<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">'; 602 if('' === inputTelElement.value){ 603 return; 604 }; 605 606 if (iti.isValidNumber()) { 607 jQuery(inputTelElement).closest('.cfefp-intl-container').removeClass('elementor-error'); 608 609 mdcField.valid = true; 610 mdcField.trailingIcon.root.style.display = 'none'; 611 mdcField.helperText.foundation.adapter.setContent(''); 612 613 const $visibleFlexErrors = this.elements.$form.find('.mask-error').filter(function() { 614 return jQuery(this).css('display') === 'flex'; 615 }); 616 617 if($visibleFlexErrors.length === 0){ 618 619 this.elements.$form[0].classList.remove('elementor-form-waiting'); 620 } 621 } else { 622 const errorType = iti.getValidationError(); 623 if (errorType !== undefined && errorMap[errorType]) { 624 // Remove dial code from input field if validation fails 625 if (this.dialCodeVisibility[data] === 'separate' || this.dialCodeVisibility[data] === 'hide') { 626 const currentCountryData = iti.getSelectedCountryData(); 627 const dialCode = `+${currentCountryData.dialCode}`; 628 if (inputTelElement.value.startsWith(dialCode)) { 629 inputTelElement.value = inputTelElement.value.substring(dialCode.length); 630 } 631 } 632 errorMsgHtml += errorMap[errorType] + '</span>'; 633 jQuery(inputTelElement).closest('.cfefp-intl-container').addClass('elementor-error'); 634 635 mdcField.valid = false; 636 mdcField.trailingIcon.root.style.display = 'initial'; 637 mdcField.helperText.foundation.adapter.setContent(errorMap[errorType]); 638 639 // jQuery(inputTelElement).after(errorMsgHtml); 640 e.preventDefault(); 641 if(this.elements.$form.find('.is-field-type-recaptcha_v3').length > 0){ 642 e.stopImmediatePropagation() 643 } 644 if (trigger === 'submit') { 645 this.elements.$form[0].classList.add('elementor-form-waiting'); 646 } 647 } 648 } 649 }); 650 } 651 652 } 544 653 545 654 … … 549 658 */ 550 659 intlInputValidation() { 660 551 661 this.elements.$submitButton.on('click', (e) => { 552 const itiArr = this.iti; 553 554 if (Object.keys(itiArr).length > 0) { 555 Object.keys(itiArr).forEach(data => { 556 const iti = itiArr[data]; 557 558 const inputTelElement = iti.telInput; 559 560 let mainField = inputTelElement.closest('label') 561 let mdcField = mdc.textfield.MDCTextField.attachTo(mainField); 562 563 if('' !== inputTelElement.value){ 564 inputTelElement.value=inputTelElement.value.replace(/[^0-9+]/g, ''); 565 566 // Always ensure dial code is present in the value before validation 567 const currentCountryData = iti.getSelectedCountryData(); 568 const dialCode = `+${currentCountryData.dialCode}`; 569 570 // If using separate or hide mode, ensure dial code is in the value 571 if (this.dialCodeVisibility[data] === 'separate' || this.dialCodeVisibility[data] === 'hide') { 572 if (!inputTelElement.value.startsWith('+')) { 573 inputTelElement.value = dialCode + inputTelElement.value; 574 } 575 } 576 } 577 578 const parentWrp = inputTelElement.closest('.cool-form__field-group'); 579 const telContainer=parentWrp.querySelector('.cfefp-intl-container'); 580 581 if (telContainer && inputTelElement.offsetHeight) { 582 telContainer.style.setProperty('--cfefp-intl-tel-button-height', `${inputTelElement.offsetHeight}px`); 583 } 584 585 const errorContainer = jQuery(inputTelElement).parent(); 586 errorContainer.find('span.elementor-message').remove(); 587 588 const errorMap = CCFEFCustomData.errorMap; 589 let errorMsgHtml = '<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">'; 590 if('' === inputTelElement.value){ 591 return; 592 }; 593 594 if (iti.isValidNumber()) { 595 jQuery(inputTelElement).closest('.cfefp-intl-container').removeClass('elementor-error'); 596 597 mdcField.valid = true; 598 mdcField.trailingIcon.root.style.display = 'none'; 599 mdcField.helperText.foundation.adapter.setContent(''); 600 } else { 601 const errorType = iti.getValidationError(); 602 if (errorType !== undefined && errorMap[errorType]) { 603 // Remove dial code from input field if validation fails 604 if (this.dialCodeVisibility[data] === 'separate' || this.dialCodeVisibility[data] === 'hide') { 605 const currentCountryData = iti.getSelectedCountryData(); 606 const dialCode = `+${currentCountryData.dialCode}`; 607 if (inputTelElement.value.startsWith(dialCode)) { 608 inputTelElement.value = inputTelElement.value.substring(dialCode.length); 609 } 610 } 611 errorMsgHtml += errorMap[errorType] + '</span>'; 612 jQuery(inputTelElement).closest('.cfefp-intl-container').addClass('elementor-error'); 613 614 mdcField.valid = false; 615 mdcField.trailingIcon.root.style.display = 'initial'; 616 mdcField.helperText.foundation.adapter.setContent(errorMap[errorType]); 617 618 // jQuery(inputTelElement).after(errorMsgHtml); 619 e.preventDefault(); 620 } 621 } 622 }); 623 } 662 this.validateTelInputs(e, 'button'); 663 }); 664 665 this.elements.$form.on('submit', (e) => { 666 this.validateTelInputs(e, 'submit'); 624 667 }); 625 668 } -
extensions-for-elementor-form/trunk/assets/addons/js/country-code-script.min.js
r3270292 r3389352 1 class C CFEF extends elementorModules.frontend.handlers.Base{getDefaultSettings(){return{selectors:{inputTelTextArea:"textarea.ccfef_country_code_data_js",intlInputSpan:".ccfef-editor-intl-input",submitButton:"div.elementor-field-type-submit button"}}}getDefaultElements(){const selectors=this.getSettings("selectors");return{$textArea:this.$element.find(selectors.inputTelTextArea),$intlSpanElement:this.$element.find(selectors.intlInputSpan),$submitButton:this.$element.find(selectors.submitButton)}}bindEvents(){this.telId=new Array,this.includeCountries={},this.excludeCountries={},this.defaultCountry={},this.commonCountries={},this.iti={},this.getIntlUserData(),this.appendCountryCodeHandler(),this.addCountryCodeInputHandler(),this.customFlags(),this.removeInputTelSpanEle(),this.intlInputValidation()}appendCountryCodeHandler(){this.telId.forEach(data=>{this.addCountryCodeIconHandler(data.formId,data.fieldId,data.customId)})}addCountryCodeInputHandler(){const itiArr=this.iti;Object.keys(itiArr).forEach(key=>{const iti=itiArr[key],inputElement=iti.telInput;let previousCountryData=iti.getSelectedCountryData(),previousCode=`+${previousCountryData.dialCode}`,keyUpEvent=!1;const resetKeyUpEventStatus=()=>{keyUpEvent=!1},handleCountryChange=e=>{this.customFlags();const currentCountryData=iti.getSelectedCountryData(),currentCode=`+${currentCountryData.dialCode}`;if("keydown"===e.type||"input"===e.type)keyUpEvent=!0,clearTimeout(resetKeyUpEventStatus),setTimeout(resetKeyUpEventStatus,400),previousCountryData.dialCode!==currentCountryData.dialCode?previousCountryData=currentCountryData:previousCountryData.dialCode===currentCountryData.dialCode&&previousCountryData.iso2!==currentCountryData.iso2&&iti.setCountry(previousCountryData.iso2);else if("countrychange"===e.type){if(keyUpEvent)return;previousCountryData=currentCountryData}this.updateCountryCodeHandler(e.currentTarget,currentCode,previousCode),previousCode=currentCode};inputElement.addEventListener("keydown",handleCountryChange),inputElement.addEventListener("input",handleCountryChange),inputElement.addEventListener("countrychange",handleCountryChange)})}addCountryCodeIconHandler(formId,widgetId,inputId){const utilsPath=CCFEFCustomData.pluginDir+"assets/intl-tel-input/js/utils.min.js",telFIeld=jQuery(`.elementor-widget.elementor-widget-form[data-id="${formId}"] .elementor-field-type-tel.elementor-field-group input[type="tel"]#${inputId}`)[0];if(void 0!==telFIeld){let includeCountries=[],excludeCountries=[],defaultCountry="in";const defaultCoutiresArr=["in","us","gb","ru","fr","de","br","cn","jp","it"],uniqueId=`${formId}${widgetId}`;if(this.includeCountries.hasOwnProperty(uniqueId)&&this.includeCountries[uniqueId].length>0&&(defaultCountry=this.includeCountries[uniqueId][0],includeCountries=[...this.includeCountries[uniqueId]]),this.excludeCountries.hasOwnProperty(uniqueId)&&this.excludeCountries[uniqueId].length>0){let uniqueValue;defaultCountry=defaultCoutiresArr.filter(value=>!this.excludeCountries[uniqueId].includes(value))[0],excludeCountries=[...this.excludeCountries[uniqueId]]}this.defaultCountry[uniqueId]&&""!==this.defaultCountry[uniqueId]&&(defaultCountry=this.defaultCountry[uniqueId]);const iti=window.intlTelInput(telFIeld,{initialCountry:defaultCountry,utilsScript:utilsPath,formatOnDisplay:!1,formatAsYouType:!0,autoFormat:!1,containerClass:"cfefp-intl-container",useFullscreenPopup:!1,onlyCountries:includeCountries,excludeCountries:excludeCountries,customPlaceholder:(selectedCountryPlaceholder,selectedCountryData)=>{if(this.commonCountries[uniqueId])return"No country found";if(!selectedCountryData||!selectedCountryPlaceholder||!selectedCountryData.dialCode)return"No country found";let placeHolder=selectedCountryPlaceholder;"in"===selectedCountryData.iso2&&(placeHolder=selectedCountryPlaceholder.replace(/^0+/,""));const placeholderText=`+${selectedCountryData.dialCode} ${placeHolder}`;return placeholderText.replace(/\s/g,"")}}),intlSpan=document.querySelector(`.elementor-widget.elementor-widget-form[data-id="${formId}"] .ccfef-editor-intl-input[data-field-id="${widgetId}"]`),commonAttr=intlSpan?intlSpan.getAttribute("data-common-countries"):"";if("same"===commonAttr&&this.commonCountries[uniqueId]&&""!==includeCountries&&""!==excludeCountries){const countryList=iti.countryList;countryList&&countryList.classList.contains("iti__country-list")&&(countryList.style.display="none")}else{const countryList=iti.countryList;if(countryList&&countryList.classList.contains("iti__country-list")){const countryItems=countryList.querySelectorAll(".iti__country");countryItems.forEach((function(item){const countryCode=item.getAttribute("data-country-code");excludeCountries.includes(countryCode)&&(item.style.display="none")}));const visibleCountries=Array.from(countryItems).filter(item=>"none"!==item.style.display),includedVisibleCountries=visibleCountries.filter(item=>{const countryCode=item.getAttribute("data-country-code");return includeCountries.includes(countryCode)});if(includedVisibleCountries.length>0){const selectedItem=includedVisibleCountries.find(item=>"true"===item.getAttribute("aria-selected"));if(!selectedItem){const firstItem=includedVisibleCountries[0];firstItem.setAttribute("aria-selected","true");const newCountryCode=firstItem.getAttribute("data-country-code");iti.setCountry(newCountryCode)}}}}telFIeld.removeAttribute("pattern"),this.iti[formId+widgetId]=iti}}updateCountryCodeHandler(element,currentCode,previousCode){let value=element.value;currentCode&&"+undefined"===currentCode||["","+"].includes(value)||(currentCode!==previousCode&&(value=value.replace(new RegExp(`^\\${previousCode}`),"")),value.startsWith(currentCode)||(value=value.replace(/\+/g,""),element.value=currentCode+value))}customFlags(){const selectedCountries=this.$element.find(".cfefp-intl-container .iti__country-container .iti__flag:not(.iti__globe)");selectedCountries.each((function(){const selectedCountry=this,classList=selectedCountry.className.split(" ");if(classList[1]){const selectedCountryFlag=classList[1].split("__")[1],svgFlagPath=CCFEFCustomData.pluginDir+`assets/flags/${selectedCountryFlag}.svg`;selectedCountry.style.backgroundImage=`url('${svgFlagPath}')`}}))}removeInputTelSpanEle(){this.$element.find("span.ccfef-editor-intl-input").remove()}getIntlUserData(){const intelInputElement=this.elements.$intlSpanElement,previousIds=[];intelInputElement.each((_,ele)=>{const element=jQuery(ele),includeCountries=element.data("include-countries"),excludeCountries=element.data("exclude-countries"),defaultCountry=element.data("defaultCountry"),commonAttr=element.data("common-countries"),inputId=element.data("id"),fieldId=element.data("field-id"),formId=element.closest(".elementor-element.elementor-widget-form").data("id"),currentId=`${formId}${fieldId}`;if("same"===commonAttr&&""===includeCountries&&""!==excludeCountries)this.commonCountries[currentId]=!0;else{if(""!==includeCountries&&isNaN(includeCountries)){const splitIncludeCountries=includeCountries.split(",");this.includeCountries[currentId]=splitIncludeCountries}if(""!==excludeCountries&&isNaN(excludeCountries)){const splitExcludeCountries=excludeCountries.split(",");this.excludeCountries[currentId]=splitExcludeCountries}if("same"!==commonAttr&&""!==includeCountries&&""!==excludeCountries&&isNaN(includeCountries)){const includeArray=includeCountries.split(",").map(item=>item.trim());if(isNaN(excludeCountries)){const excludeArray=excludeCountries.split(",").map(item=>item.trim()),allIncludedPresent=includeArray.every(country=>excludeArray.includes(country));allIncludedPresent&&(this.commonCountries[currentId]=!0)}}""!==defaultCountry&&(this.defaultCountry[currentId]=defaultCountry)}previousIds.includes(currentId)||(this.telId.push({formId:formId,fieldId:fieldId,customId:inputId}),previousIds.push(currentId))})}intlInputValidation(){this.elements.$submitButton.on("click",e=>{const itiArr=this.iti;Object.keys(itiArr).length>0&&Object.keys(itiArr).forEach(data=>{const iti=itiArr[data],inputTelElement=iti.telInput;""!==inputTelElement.value&&(inputTelElement.value=inputTelElement.value.replace(/[^0-9+]/g,""));const parentWrp=inputTelElement.closest(".elementor-field-group"),telContainer=parentWrp.querySelector(".cfefp-intl-container");telContainer&&inputTelElement.offsetHeight&&telContainer.style.setProperty("--cfefp-intl-tel-button-height",`${inputTelElement.offsetHeight}px`);const errorContainer=jQuery(inputTelElement).parent();errorContainer.find("span.elementor-message").remove();const errorMap=CCFEFCustomData.errorMap;let errorMsgHtml='<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">';if(""!==inputTelElement.value)if(iti.isValidNumber())jQuery(inputTelElement).closest(".cfefp-intl-container").removeClass("elementor-error");else{const errorType=iti.getValidationError();void 0!==errorType&&errorMap[errorType]&&(errorMsgHtml+=errorMap[errorType]+"</span>",jQuery(inputTelElement).closest(".cfefp-intl-container").addClass("elementor-error"),jQuery(inputTelElement).after(errorMsgHtml),e.preventDefault())}})})}}jQuery(window).on("elementor/frontend/init",()=>{const addHandler=$element=>{elementorFrontend.elementsHandler.addHandler(CCFEF,{$element:$element})};elementorFrontend.hooks.addAction("frontend/element_ready/form.default",addHandler)});1 class CoolFormCCFEF extends elementorModules.frontend.handlers.Base{getDefaultSettings(){return{selectors:{inputTelTextArea:"textarea.ccfef_country_code_data_js",intlInputSpan:".ccfef-editor-intl-input",submitButton:"div.cool-form__submit-group button",form:".cool-form"}}}getDefaultElements(){const t=this.getSettings("selectors");return{$textArea:this.$element.find(t.inputTelTextArea),$intlSpanElement:this.$element.find(t.intlInputSpan),$submitButton:this.$element.find(t.submitButton),$form:this.$element.find(t.form)}}bindEvents(){this.telId=new Array,this.includeCountries={},this.excludeCountries={},this.defaultCountry={},this.commonCountries={},this.dialCodeVisibility={},this.countryStrictMode={},this.iti={},this.getIntlUserData(),this.appendCountryCodeHandler(),this.addCountryCodeInputHandler(),this.customFlags(),this.removeInputTelSpanEle(),this.intlInputValidation()}handleTelWithMdcFields(t){function e(){const t=o.find(".iti__dropdown-content");o.nextAll(".cool-form__field-group").each(function(){t.hasClass("iti__hide")?this.style.zIndex="initial":this.style.zIndex="-1"})}const i=t.telInput,n=i.closest(".cool-form__field-group"),o=jQuery(n),s=o.find(".mdc-floating-label"),l=o.find("input"),r=o.find(".mdc-notched-outline__notch"),a=o.find(".mdc-notched-outline__leading");let d=l.eq(1).prev(".iti__country-container").find(".iti__selected-dial-code");if(d.css("visibility","hidden"),""!==l.eq(1).val()?d.css("visibility","visible"):d.css("visibility","hidden"),o.nextAll().length>0){const t=o.nextAll();if(t.length>0){const e=t[0],i=t[1],n=t=>t&&t.classList&&t.classList.contains("cool-form__submit-group"),s=o.hasClass("has-width-100")?n(e):n(e)||n(i);s&&(o.css({"margin-bottom":"25px"}),o.find(".iti__country-list").css({"max-height":"100px"}))}}s.css("left","57px"),l.eq(1).on("blur",()=>{""!==l.eq(1).val()?d.css("visibility","visible"):d.css("visibility","hidden")}),l.eq(1).on("focus",()=>{d.css("visibility","visible"),s.css({left:"57px","background-color":"white"});const t=getComputedStyle(r[0]).getPropertyValue("border-bottom");r.css({"border-top":t})}),o.on("click",t=>{e()}),l.eq(0).on("mouseover",()=>{const t=getComputedStyle(a[0]).getPropertyValue("border-bottom-width");r.css({"border-top-width":t,"border-top-color":"black"})}),o.on("mouseover",t=>{const i=getComputedStyle(a[0]).getPropertyValue("border-bottom-width");r.css({"border-top-width":i,"border-top-color":"black"}),e()}),o.on("mouseleave",t=>{const i=getComputedStyle(a[0]).getPropertyValue("border-bottom-width"),n=getComputedStyle(a[0]).getPropertyValue("border-right-color");r.css({"border-top-width":i,"border-top-color":n}),e()})}appendCountryCodeHandler(){this.telId.forEach(t=>{this.addCountryCodeIconHandler(t.formId,t.fieldId,t.customId)})}addCountryCodeInputHandler(){const t=this.iti;Object.keys(t).forEach(e=>{const i=t[e],n=i.telInput;this.handleTelWithMdcFields(i);let o=i.getSelectedCountryData(),s=`+${o.dialCode}`,l=!1;const r=()=>{l=!1},a=t=>{this.handleTelWithMdcFields(i),this.customFlags();const n=i.getSelectedCountryData(),a=`+${n.dialCode}`;if("keydown"===t.type||"input"===t.type)l=!0,clearTimeout(r),setTimeout(r,400),o.dialCode!==n.dialCode?o=n:o.dialCode===n.dialCode&&o.iso2!==n.iso2&&i.setCountry(o.iso2);else if("countrychange"===t.type){if(l)return;o=n}t.currentTarget.value.startsWith(a.replace("+",""))?this.updateCountryCodeHandler(t.currentTarget,"+",s,this.dialCodeVisibility[e]):(this.updateCountryCodeHandler(t.currentTarget,a,s,this.dialCodeVisibility[e]),s=a)};n.addEventListener("keydown",a),n.addEventListener("input",a),n.addEventListener("countrychange",a)})}addCountryCodeIconHandler(t,e,i){const n=CCFEFCustomData.pluginDir+"assets/addons/intl-tel-input/js/utils.min.js",o=jQuery(`.elementor-widget.elementor-widget-cool-form[data-id="${t}"] .is-field-type-tel.cool-form__field-group input[type="tel"]#${i}`)[0];if(void 0!==o){let i=[],s=[],l="in";const r=["in","us","gb","ru","fr","de","br","cn","jp","it"],a=`${t}${e}`;if(this.includeCountries.hasOwnProperty(a)&&this.includeCountries[a].length>0&&(l=this.includeCountries[a][0],i=[...this.includeCountries[a]]),this.excludeCountries.hasOwnProperty(a)&&this.excludeCountries[a].length>0){let t=r.filter(t=>!this.excludeCountries[a].includes(t));l=t[0],s=[...this.excludeCountries[a]]}this.defaultCountry[a]&&""!==this.defaultCountry[a]&&(l=this.defaultCountry[a]);const d=window.intlTelInput(o,{initialCountry:l,utilsScript:n,dialCodeVisibility:this.dialCodeVisibility[a],strictMode:"yes"===this.countryStrictMode[a],separateDialCode:"separate"===this.dialCodeVisibility[a],formatOnDisplay:!1,formatAsYouType:!0,autoFormat:!1,containerClass:"cfefp-intl-container",useFullscreenPopup:!1,onlyCountries:i,excludeCountries:s,customPlaceholder:(t,e)=>{if(this.commonCountries[a])return"No country found";if(!e||!t||!e.dialCode)return"No country found";let i=t;"in"===e.iso2&&(i=t.replace(/^0+/,""));const n="separate"===this.dialCodeVisibility[a]||"hide"===this.dialCodeVisibility[a]?`${i}`:`+${e.dialCode} ${i}`;return n}});if("separate"===this.dialCodeVisibility[a]){const t=document.createElement("style");t.textContent="\n .cfefp-intl-container .iti__selected-dial-code,\n .cfefp-intl-container .iti__selected-flag {\n color: var(--e-form-field-text-color, #7a7a7a) !important;\n }\n .cfefp-intl-container .iti__selected-dial-code {\n font-size: inherit !important;\n font-family: inherit !important;\n line-height: inherit !important;\n }\n ",document.head.appendChild(t)}const c=document.querySelector(`.elementor-widget.elementor-widget-form[data-id="${t}"] .ccfef-editor-intl-input[data-field-id="${e}"]`),u=c?c.getAttribute("data-common-countries"):"";if("same"===u&&this.commonCountries[a]&&""!==i&&""!==s){const t=d.countryList;t&&t.classList.contains("iti__country-list")&&(t.style.display="none")}else{const t=d.countryList;if(t&&t.classList.contains("iti__country-list")){const e=t.querySelectorAll(".iti__country");e.forEach(function(t){const e=t.getAttribute("data-country-code");s.includes(e)&&(t.style.display="none")});const n=Array.from(e).filter(t=>"none"!==t.style.display),o=n.filter(t=>{const e=t.getAttribute("data-country-code");return i.includes(e)});if(o.length>0){const t=o.find(t=>"true"===t.getAttribute("aria-selected"));if(!t){const t=o[0];t.setAttribute("aria-selected","true");const e=t.getAttribute("data-country-code");d.setCountry(e)}}}}o.removeAttribute("pattern"),this.iti[t+e]=d,this.setInitialCountry(d,s,a,o)}}setInitialCountry(t,e,i,n){const o=this.defaultCountry[i]||"",s=["in","us","gb","ru","fr","de","br","cn","jp","it"],l=t.countries.map(t=>t.iso2);t.telInput;jQuery(n).closest(".elementor-field-type-country").hasClass("elementor-field-required")&&jQuery(n).closest(".elementor-field-type-country").hasClass("cfef-hidden")&&(""===o?(t.setCountry("us"),jQuery(n).val("United States"),jQuery(n).focus(),jQuery(n).trigger("change")):(t.setCountry(o),jQuery(n).val(o),jQuery(n).focus(),jQuery(n).trigger("change")));const r=i=>{if(l.length<=0)return;const n=isNaN(i)&&i?i.toLowerCase():"";if(n&&l.includes(n))t.setCountry(n);else if(o&&l.includes(o))t.setCountry(o);else{const i=s.filter(t=>!e.includes(t)&&l.includes(t)),n=i.length>0?i[0]:l[0];t.setCountry(n)}const r=t.getSelectedCountryData();r.hasOwnProperty("iso2")};o&&r(o)}updateCountryCodeHandler(t,e,i,n){let o=t.value;if(!(e&&"+undefined"===e||["","+"].includes(o)))if(e!==i&&(o=o.replace(new RegExp(`^\\${i}`),"")),o.startsWith(e)){if(o.length>12){const i=e.replace("+",""),n=`+${i}${i}`;o.startsWith(n)&&(t.value=`+${o.slice(e.length)}`)}}else o=o.replace(/\+/g,""),t.value="separate"===n||"hide"===n?o:e+o}customFlags(){const t=this.$element.find(".cfefp-intl-container .iti__country-container .iti__flag:not(.iti__globe)");t.each(function(){const t=this,e=t.className.split(" ");if(e[1]){const i=e[1].split("__")[1],n=CCFEFCustomData.pluginDir+`assets/addons/flags/${i}.svg`;t.style.backgroundImage=`url('${n}')`}})}removeInputTelSpanEle(){this.$element.find("span.ccfef-editor-intl-input").remove()}getIntlUserData(){const t=this.elements.$intlSpanElement,e=[];t.each((t,i)=>{const n=jQuery(i),o=n.data("include-countries"),s=n.data("exclude-countries"),l=n.data("defaultCountry"),r=n.data("common-countries"),a=n.data("id"),d=n.data("field-id"),c=n.data("dial-code-visibility"),u=n.data("strict-mode"),f=n.closest(".elementor-element.elementor-widget-cool-form").data("id"),h=`${f}${d}`;if("same"===r&&""===o&&""!==s)this.commonCountries[h]=!0;else{if(""!==o&&isNaN(o)){const t=o.split(",");this.includeCountries[h]=t}if(""!==s&&isNaN(s)){const t=s.split(",");this.excludeCountries[h]=t}if("same"!==r&&""!==o&&""!==s&&isNaN(o)){const t=o.split(",").map(t=>t.trim());if(isNaN(s)){const e=s.split(",").map(t=>t.trim()),i=t.every(t=>e.includes(t));i&&(this.commonCountries[h]=!0)}}""!==c&&(this.dialCodeVisibility[h]=c),""!==u&&(this.countryStrictMode[h]=u),""!==l&&(this.defaultCountry[h]=l)}e.includes(h)||(this.telId.push({formId:f,fieldId:d,customId:a}),e.push(h))})}validateTelInputs(t,e="submit"){const i=this.iti;Object.keys(i).length>0&&Object.keys(i).forEach(n=>{const o=i[n],s=o.telInput;let l=s.closest("label"),r=mdc.textfield.MDCTextField.attachTo(l);if(""!==s.value){s.value=s.value.replace(/[^0-9+]/g,"");const t=o.getSelectedCountryData(),e=`+${t.dialCode}`;"separate"!==this.dialCodeVisibility[n]&&"hide"!==this.dialCodeVisibility[n]||s.value.startsWith("+")||(s.value=e+s.value)}const a=s.closest(".cool-form__field-group"),d=a.querySelector(".cfefp-intl-container");d&&s.offsetHeight&&d.style.setProperty("--cfefp-intl-tel-button-height",`${s.offsetHeight}px`);const c=jQuery(s).parent();c.find("span.elementor-message").remove();const u=CCFEFCustomData.errorMap;let f='<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">';if(""!==s.value)if(o.isValidNumber()){jQuery(s).closest(".cfefp-intl-container").removeClass("elementor-error"),r.valid=!0,r.trailingIcon.root.style.display="none",r.helperText.foundation.adapter.setContent("");const t=this.elements.$form.find(".mask-error").filter(function(){return"flex"===jQuery(this).css("display")});0===t.length&&this.elements.$form[0].classList.remove("elementor-form-waiting")}else{const i=o.getValidationError();if(void 0!==i&&u[i]){if("separate"===this.dialCodeVisibility[n]||"hide"===this.dialCodeVisibility[n]){const t=o.getSelectedCountryData(),e=`+${t.dialCode}`;s.value.startsWith(e)&&(s.value=s.value.substring(e.length))}f+=u[i]+"</span>",jQuery(s).closest(".cfefp-intl-container").addClass("elementor-error"),r.valid=!1,r.trailingIcon.root.style.display="initial",r.helperText.foundation.adapter.setContent(u[i]),t.preventDefault(),this.elements.$form.find(".is-field-type-recaptcha_v3").length>0&&t.stopImmediatePropagation(),"submit"===e&&this.elements.$form[0].classList.add("elementor-form-waiting")}}})}intlInputValidation(){this.elements.$submitButton.on("click",t=>{this.validateTelInputs(t,"button")}),this.elements.$form.on("submit",t=>{this.validateTelInputs(t,"submit")})}}jQuery(window).on("elementor/frontend/init",()=>{const t=t=>{elementorFrontend.elementsHandler.addHandler(CoolFormCCFEF,{$element:t})};elementorFrontend.hooks.addAction("frontend/element_ready/cool-form.default",t)}); -
extensions-for-elementor-form/trunk/assets/helloplus-addons/js/helloplus-country-code-script.js
r3329586 r3389352 114 114 } 115 115 116 this.updateCountryCodeHandler(e.currentTarget, currentCode, previousCode, this.dialCodeVisibility[key]); 117 previousCode = currentCode; 116 if(e.currentTarget.value.startsWith(currentCode.replace('+',''))){ 117 this.updateCountryCodeHandler(e.currentTarget, '+', previousCode, this.dialCodeVisibility[key]); 118 }else{ 119 this.updateCountryCodeHandler(e.currentTarget, currentCode, previousCode, this.dialCodeVisibility[key]); 120 previousCode = currentCode; 121 } 118 122 }; 119 123 … … 340 344 value = value.replace(/\+/g, ''); 341 345 element.value = dialCodeVisibility === 'separate' || dialCodeVisibility === 'hide' ? value : currentCode + value; 346 } 347 348 else if (value.length > 12) { 349 const plainCode = currentCode.replace('+', ''); 350 const doublePrefix = `+${plainCode}${plainCode}`; 351 352 if (value.startsWith(doublePrefix)) { 353 element.value = `+${value.slice(currentCode.length)}`; 354 } 342 355 } 343 356 } -
extensions-for-elementor-form/trunk/assets/js/form-country-code-script.js
r3378085 r3389352 116 116 } 117 117 118 this.updateCountryCodeHandler(e.currentTarget, currentCode, previousCode, this.dialCodeVisibility[key]); 119 previousCode = currentCode; 118 if(e.currentTarget.value.startsWith(currentCode.replace('+',''))){ 119 this.updateCountryCodeHandler(e.currentTarget, '+', previousCode, this.dialCodeVisibility[key]); 120 }else{ 121 this.updateCountryCodeHandler(e.currentTarget, currentCode, previousCode, this.dialCodeVisibility[key]); 122 previousCode = currentCode; 123 } 120 124 }; 121 125 … … 343 347 element.value = dialCodeVisibility === 'separate' || dialCodeVisibility === 'hide' ? value : currentCode + value; 344 348 } 349 350 else if (value.length > 12) { 351 const plainCode = currentCode.replace('+', ''); 352 const doublePrefix = `+${plainCode}${plainCode}`; 353 354 if (value.startsWith(doublePrefix)) { 355 element.value = `+${value.slice(currentCode.length)}`; 356 } 357 } 345 358 } 346 359 … … 444 457 445 458 459 // Helper: Validate all telephone fields 460 validateTelInputs(e, trigger = 'submit') { 461 462 const itiArr = this.iti; 463 464 if (Object.keys(itiArr).length > 0) { 465 Object.keys(itiArr).forEach(data => { 466 const iti = itiArr[data]; 467 468 const inputTelElement = iti.telInput; 469 470 if(jQuery(inputTelElement).closest('.elementor-field-type-tel').hasClass('cfef-hidden')){ 471 472 inputTelElement.value = '+1234567890'; 473 474 return; 475 } 476 477 if('' !== inputTelElement.value){ 478 inputTelElement.value=inputTelElement.value.replace(/[^0-9+]/g, ''); 479 480 // Always ensure dial code is present in the value before validation 481 const currentCountryData = iti.getSelectedCountryData(); 482 const dialCode = `+${currentCountryData.dialCode}`; 483 484 // If using separate or hide mode, ensure dial code is in the value 485 if (this.dialCodeVisibility[data] === 'separate' || this.dialCodeVisibility[data] === 'hide') { 486 if (!inputTelElement.value.startsWith('+')) { 487 inputTelElement.value = dialCode + inputTelElement.value; 488 } 489 } 490 } 491 492 const parentWrp = inputTelElement.closest('.elementor-field-group'); 493 const telContainer=parentWrp.querySelector('.cfefp-intl-container'); 494 495 if (telContainer && inputTelElement.offsetHeight) { 496 telContainer.style.setProperty('--cfefp-intl-tel-button-height', `${inputTelElement.offsetHeight}px`); 497 } 498 499 const errorContainer = jQuery(inputTelElement).parent(); 500 errorContainer.find('span.elementor-message').remove(); 501 502 const errorMap = CCFEFCustomData.errorMap; 503 let errorMsgHtml = '<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">'; 504 if('' === inputTelElement.value){ 505 return; 506 }; 507 if (iti.isValidNumber()) { 508 jQuery(inputTelElement).closest('.cfefp-intl-container').removeClass('elementor-error'); 509 this.elements.$submitButton.removeClass('cfkef-prevent-submit'); 510 const $visibleFlexErrors = this.elements.$form.find('.mask-error').filter(function() { 511 return jQuery(this).css('display') === 'flex'; 512 }); 513 514 if($visibleFlexErrors.length === 0){ 515 516 this.elements.$form[0].classList.remove('elementor-form-waiting'); 517 } 518 } else { 519 this.elements.$submitButton.addClass('cfkef-prevent-submit') 520 521 const errorType = iti.getValidationError(); 522 if (errorType !== undefined && errorMap[errorType]) { 523 // Remove dial code from input field if validation fails 524 if (this.dialCodeVisibility[data] === 'separate' || this.dialCodeVisibility[data] === 'hide') { 525 const currentCountryData = iti.getSelectedCountryData(); 526 const dialCode = `+${currentCountryData.dialCode}`; 527 if (inputTelElement.value.startsWith(dialCode)) { 528 inputTelElement.value = inputTelElement.value.substring(dialCode.length); 529 } 530 } 531 errorMsgHtml += errorMap[errorType] + '</span>'; 532 jQuery(inputTelElement).closest('.cfefp-intl-container').addClass('elementor-error'); 533 jQuery(inputTelElement).after(errorMsgHtml); 534 e.preventDefault(); 535 if (trigger === 'submit') { 536 this.elements.$form[0].classList.add('elementor-form-waiting'); 537 } 538 if(this.elements.$form.find('.elementor-field-type-recaptcha_v3').length > 0){ 539 e.stopImmediatePropagation() 540 } 541 } 542 } 543 }); 544 } 545 } 546 547 446 548 447 549 /** … … 450 552 */ 451 553 intlInputValidation() { 554 452 555 this.elements.$submitButton.on('click', (e) => { 453 const itiArr = this.iti; 454 455 if (Object.keys(itiArr).length > 0) { 456 Object.keys(itiArr).forEach(data => { 457 const iti = itiArr[data]; 458 459 const inputTelElement = iti.telInput; 460 461 if('' !== inputTelElement.value){ 462 inputTelElement.value=inputTelElement.value.replace(/[^0-9+]/g, ''); 463 464 // Always ensure dial code is present in the value before validation 465 const currentCountryData = iti.getSelectedCountryData(); 466 const dialCode = `+${currentCountryData.dialCode}`; 467 468 // If using separate or hide mode, ensure dial code is in the value 469 if (this.dialCodeVisibility[data] === 'separate' || this.dialCodeVisibility[data] === 'hide') { 470 if (!inputTelElement.value.startsWith('+')) { 471 inputTelElement.value = dialCode + inputTelElement.value; 472 } 473 } 474 } 475 476 const parentWrp = inputTelElement.closest('.elementor-field-group'); 477 const telContainer=parentWrp.querySelector('.cfefp-intl-container'); 478 479 if (telContainer && inputTelElement.offsetHeight) { 480 telContainer.style.setProperty('--cfefp-intl-tel-button-height', `${inputTelElement.offsetHeight}px`); 481 } 482 483 const errorContainer = jQuery(inputTelElement).parent(); 484 errorContainer.find('span.elementor-message').remove(); 485 486 const errorMap = CCFEFCustomData.errorMap; 487 let errorMsgHtml = '<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">'; 488 if('' === inputTelElement.value){ 489 return; 490 }; 491 if (iti.isValidNumber()) { 492 jQuery(inputTelElement).closest('.cfefp-intl-container').removeClass('elementor-error'); 493 this.elements.$submitButton.removeClass('cfkef-prevent-submit') 494 } else { 495 this.elements.$submitButton.addClass('cfkef-prevent-submit') 496 497 const errorType = iti.getValidationError(); 498 if (errorType !== undefined && errorMap[errorType]) { 499 // Remove dial code from input field if validation fails 500 if (this.dialCodeVisibility[data] === 'separate' || this.dialCodeVisibility[data] === 'hide') { 501 const currentCountryData = iti.getSelectedCountryData(); 502 const dialCode = `+${currentCountryData.dialCode}`; 503 if (inputTelElement.value.startsWith(dialCode)) { 504 inputTelElement.value = inputTelElement.value.substring(dialCode.length); 505 } 506 } 507 errorMsgHtml += errorMap[errorType] + '</span>'; 508 jQuery(inputTelElement).closest('.cfefp-intl-container').addClass('elementor-error'); 509 jQuery(inputTelElement).after(errorMsgHtml); 510 e.preventDefault(); 511 if(this.elements.$form.find('.elementor-field-type-recaptcha_v3').length > 0){ 512 e.stopImmediatePropagation() 513 } 514 } 515 } 516 }); 517 } 556 this.validateTelInputs(e, 'button'); 557 }); 558 559 this.elements.$form.on('submit', (e) => { 560 this.validateTelInputs(e, 'submit'); 518 561 }); 519 562 } -
extensions-for-elementor-form/trunk/extensions-for-elementor-form.php
r3378085 r3389352 8 8 * Author URI: https://coolplugins.net/?utm_source=cfkl_plugin&utm_medium=inside&utm_campaign=author_page&utm_content=plugins_list 9 9 * Text Domain: extensions-for-elementor-form 10 * Version: 2.5. 410 * Version: 2.5.5 11 11 * Requires at least: 6.2 12 12 * Requires PHP: 6.2 … … 14 14 * License URI: http://www.gnu.org/licenses/gpl-2.0.txt 15 15 * Requires Plugins: elementor 16 * Elementor tested up to: 3.32. 416 * Elementor tested up to: 3.32.5 17 17 * Elementor Pro tested up to: 3.32.2 18 18 */ … … 32 32 } 33 33 34 define('CFL_VERSION','2.5. 4');34 define('CFL_VERSION','2.5.5'); 35 35 define('PHP_MINIMUM_VERSION','7.4'); 36 36 define('WP_MINIMUM_VERSION','5.5'); -
extensions-for-elementor-form/trunk/readme.txt
r3378085 r3389352 5 5 Requires at least: 6.2 6 6 Tested up to: 6.8.2 7 Stable tag: 2.5. 47 Stable tag: 2.5.5 8 8 Requires PHP: 8.2 9 9 License: GPLv2 or later 10 10 License URI: http://www.gnu.org/licenses/gpl-2.0.html 11 Elementor tested up to: 3.32. 411 Elementor tested up to: 3.32.5 12 12 Elementor Pro tested up to: 3.32.2 13 13 … … 195 195 == Changelog == 196 196 197 = 2.5.5 - 2025-11-04 = 198 * Fixed: Double country code issue. 199 197 200 = 2.5.4 - 2025-10-14 = 198 201 * Fixed: Conditional navigation ensures hidden steps are skipped and users are routed correctly.
Note: See TracChangeset
for help on using the changeset viewer.