(function ($, Drupal, drupalSettings, once) {
'use strict';
async function getUserCountryCode() {
try {
const response = await fetch("https://ipinfo.io/json");
if (!response.ok) {
throw new Error(`Request failed with status: ${response.status}`);
}
const data = await response.json();
return data.country || "ae";
} catch (e) {
console.error("Error fetching country data:", e);
return "ae";
}
}
Drupal.webform = Drupal.webform || {};
Drupal.webform.intlTelInput = Drupal.webform.intlTelInput || {};
Drupal.webform.intlTelInput.options = Drupal.webform.intlTelInput.options || {};
Drupal.behaviors.webformTelephoneInternational = {
attach: function (context) {
$(window).on('load', function () {
$('input.js-webform-telephone-international').removeAttr('readonly');
});
if (!$.fn.intlTelInput) {
return;
}
$(once('webform-telephone-international', 'input.js-webform-telephone-international:not(.enable-auto-country)', context)).each(function () {
var $telephone = $(this);
var full_number = "";
var $error = $('').hide();
$telephone.closest('.js-form-item').append($error);
var options = {
separateDialCode: true,
utilsScript: drupalSettings.webform.intlTelInput.utilsScript,
nationalMode: false
};
if ($telephone.attr('data-webform-telephone-international-initial-country')) {
options.initialCountry = $telephone.attr('data-webform-telephone-international-initial-country');
}
if ($telephone.attr('data-webform-telephone-international-preferred-countries')) {
options.preferredCountries = JSON.parse($telephone.attr('data-webform-telephone-international-preferred-countries'));
}
if (drupalSettings.path.currentLanguage === 'ar' && window.Intl && typeof Intl.DisplayNames === 'function') {
const displayNames = new Intl.DisplayNames(['ar'], { type: 'region' });
const countries = window.intlTelInputGlobals.getCountryData();
const localizedCountries = {};
countries.forEach(function (country) {
try {
const name = displayNames.of(country.iso2.toUpperCase());
if (name) {
localizedCountries[country.iso2] = name;
}
} catch (e) {
console.warn('Could not translate country: ', country.iso2);
}
});
options.localizedCountries = localizedCountries;
}
options = $.extend(options, Drupal.webform.intlTelInput.options);
$telephone.intlTelInput(options);
var reset = function () {
$telephone.removeClass('error');
$error.hide();
};
var validate = function (thisRef) {
reset();
if ($.trim($telephone.val())) {
if (!$telephone.intlTelInput('isValidNumber')) {
$telephone.addClass('error');
console.log("Phone number is invalid")
var placeholder = $telephone.attr('placeholder');
var message;
if (placeholder) {
message = Drupal.t('The phone number is not valid. (e.g. @example)', {'@example': placeholder});
$telephone.after($error)//For email subscription form. Append is not working here.
}
else {
message = Drupal.t('The phone number is not valid.');
}
$('.iti label:not(.form-item--error-message)').remove();
$error.html(message).show();
//alert('aa');
var emptyCtr = 0;
thisRef.closest('.webform-submission-form').find("input[required],select[required]").each(function(){
if($.trim($(this).val()) == ''){
emptyCtr++;
}
});
if(emptyCtr > 0){
thisRef.closest('.webform-submission-form').find('.webform-button--submit').removeAttr('disabled');
}
else{
thisRef.closest('.webform-submission-form').find('.webform-button--submit').attr('disabled','disabled');
}
return false;
}else{
console.log("Phone number is valid")
full_number = $telephone.intlTelInput('getNumber');
//full_number = $telephone.getNumber().replace('+'+$telephone.getSelectedCountryData().dialCode,'');
$telephone.val($.trim(full_number));
thisRef.closest('.webform-submission-form').find('.webform-button--submit').removeAttr('disabled');
}
}
else{
}
return true;
};
$('body').on('input', '.webform-submission-form input[required],.webform-submission-form select[required]', function () {
validate($(this));
});
$telephone.on('input', function () {
//reset();
//
});
//$telephone.on('keyup change', reset);
$(this).css('position','absolute');
$(this).css('visibility','hidden');
$(this).before("");
var cCode = $telephone.closest('.form-type-tel').find('.iti__selected-dial-code').text();
if ($telephone.closest('.webform-submission-form').find('input[name="country_code"]').length > 0) {
$telephone.closest('.webform-submission-form').find('input[name="country_code"]').val(cCode);
}
});
function initializeIntlTelephoneInputAutoCountry(userCountry) {
var default_ctry = userCountry || 'ae';
$(once('webform-telephone-international', 'input.js-webform-telephone-international.enable-auto-country', context)).each(function () {
var $telephone = $(this);
var full_number = "";
var $error = $('').hide();
$telephone.closest('.js-form-item').append($error);
var options = {
separateDialCode: true,
utilsScript: drupalSettings.webform.intlTelInput.utilsScript,
nationalMode: false
};
if ($telephone.attr('data-webform-telephone-international-initial-country')) {
options.initialCountry = $telephone.attr('data-webform-telephone-international-initial-country');
}
if ($telephone.attr('data-webform-telephone-international-preferred-countries')) {
options.preferredCountries = JSON.parse($telephone.attr('data-webform-telephone-international-preferred-countries'));
}
if (drupalSettings.path.currentLanguage === 'ar' && window.Intl && typeof Intl.DisplayNames === 'function') {
const displayNames = new Intl.DisplayNames(['ar'], { type: 'region' });
const countries = window.intlTelInputGlobals.getCountryData();
const localizedCountries = {};
countries.forEach(function (country) {
try {
const name = displayNames.of(country.iso2.toUpperCase());
if (name) {
localizedCountries[country.iso2] = name;
}
} catch (e) {
console.warn('Could not translate country: ', country.iso2);
}
});
options.localizedCountries = localizedCountries;
}
options = $.extend(options, Drupal.webform.intlTelInput.options);
$telephone.intlTelInput(options);
var reset = function () {
$telephone.removeClass('error');
$error.hide();
};
var validate = function (thisRef) {
reset();
if ($.trim($telephone.val())) {
if (!$telephone.intlTelInput('isValidNumber')) {
$telephone.addClass('error');
console.log("Phone number is invalid")
var placeholder = $telephone.attr('placeholder');
var message;
if (placeholder) {
message = Drupal.t('The phone number is not valid. (e.g. @example)', {'@example': placeholder});
$telephone.after($error)//For email subscription form. Append is not working here.
}
else {
message = Drupal.t('The phone number is not valid.');
}
$('.iti label:not(.form-item--error-message)').remove();
$error.html(message).show();
//alert('aa');
var emptyCtr = 0;
thisRef.closest('.webform-submission-form').find("input[required],select[required]").each(function(){
if($.trim($(this).val()) == ''){
emptyCtr++;
}
});
if(emptyCtr > 0){
thisRef.closest('.webform-submission-form').find('.webform-button--submit').removeAttr('disabled');
}
else{
thisRef.closest('.webform-submission-form').find('.webform-button--submit').attr('disabled','disabled');
}
return false;
}else{
console.log("Phone number is valid")
full_number = $telephone.intlTelInput('getNumber');
//full_number = $telephone.getNumber().replace('+'+$telephone.getSelectedCountryData().dialCode,'');
$telephone.val($.trim(full_number));
thisRef.closest('.webform-submission-form').find('.webform-button--submit').removeAttr('disabled');
}
}
else{
}
return true;
};
$('body').on('input', '.webform-submission-form input[required],.webform-submission-form select[required]', function () {
validate($(this));
});
$telephone.on('input', function () {
//reset();
//
});
//$telephone.on('keyup change', reset);
$(this).css('position','absolute');
$(this).css('visibility','hidden');
$(this).before("");
if (default_ctry != '') {
var parentForm = $($telephone).closest('form');
$telephone.intlTelInput("setCountry", default_ctry);
var countryDropdownVal = default_ctry.toUpperCase();
if ($(parentForm).find('select[name="country[country]"]').length > 0) {
$(parentForm).find('select[name="country[country]"]').val(countryDropdownVal);
}
}
var cCode = $telephone.closest('.form-type-tel').find('.iti__selected-dial-code').text();
if ($telephone.closest('.webform-submission-form').find('input[name="country_code"]').length > 0) {
$telephone.closest('.webform-submission-form').find('input[name="country_code"]').val(cCode);
}
});
}
var userCountry = "ae";
if ($('input.js-webform-telephone-international.enable-auto-country').length > 0) {
getUserCountryCode().then(countryCode => {
userCountry = countryCode || "ae";
initializeIntlTelephoneInputAutoCountry(userCountry);
}).catch(error => {
console.error("Error:", error);
initializeIntlTelephoneInputAutoCountry(userCountry);
});
}
$('body').on('input', '.tmp-tel', function () {
var tmpVal = $(this).val().replace(/^0/, '');
$(this).val(tmpVal);
$(this).closest('.form-item').find('.js-webform-telephone-international').val(tmpVal);
$(this).closest('.form-item').find('.js-webform-telephone-international').trigger('input');
});
$('body').on('click', '.webform-submission-form li.iti__country', function () {
var placeholdr = $(this).closest('.form-item').find('.js-webform-telephone-international').attr('placeholder');
placeholdr = placeholdr.replace(/\d/g, 'X');
$(this).closest('.form-item').find('.tmp-tel').attr('placeholder',placeholdr);
});
}
};
})(jQuery, Drupal, drupalSettings, once);