var esign = { setCookie: function (cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays * 1000)); var expires = "expires=" + d.toUTCString(); document.cookie = cname + "=" + cvalue + "; " + expires; }, getCookie: function (name) { var pattern = RegExp(name + "=.[^;]*") matched = document.cookie.match(pattern) if (matched) { var cookie = matched[0].split('=') return cookie[1] } return false }, unsetCookie: function (name) { var d = new Date(); d.setTime(d.getTime() - (5000 * 24 * 60 * 60 * 1000)); var expires = "expires=" + d.toUTCString(); document.cookie = name + "=" + +"; " + expires; }, is_slv_active: function () { if (typeof esig_slv === 'undefined') { return false; } else { return true; } }, is_valid_email: function (email) { var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; if (re.test(email)) { return true; } else { return false; } }, isValidNumber: function (number) { if (isNaN(number)) { return false; } return true; }, isCCNumber: function (name) { var ccName = name.split(" "); for (i = 0; i < ccName.length; i++) { if(this.isValidNumber(ccName[i])){ return true; } } }, isEmpty: function (str) { return (!str || /^\s*$/.test(str)); }, isFullName: function (value) { // check for double consecutive dots. // if (!/^(?!\.)(?!.*\.$)(?!.*?\.\.)/.test(value)) return false; // check for double spaces. if (/\s{2}/.test(value)) return false; // for japanese character checking const japanesRegex = /[\u3000-\u303F]|[\u3040-\u309F]|[\u30A0-\u30FF]|[\uFF00-\uFFEF]|[\u4E00-\u9FAF]|[\u2605-\u2606]|[\u2190-\u2195]|\u203B/g; if (japanesRegex.test(value)) { return true; } // Emoji validation const regexExpEmoji = /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/gi; if (regexExpEmoji.test(value)) return false; // Name validation: allow letters (incl. accented), hyphens, apostrophes, periods, // commas, and spaces. Single-word names with apostrophes (e.g. O'Brien) are valid. const regexp = new RegExp(/^[^_!¡?÷?¿\/\\+=@#$%ˆ&*{}|~<>;:[\]]([-'.,]?[^_!¡?÷?¿\/\\+=@#$%ˆ&*{}|~<>;:[\]]+)*( [^_!¡?÷?¿\/\\+=@#$%ˆ&*{}|~<>;:[\]]([-'.,]?[^_!¡?÷?¿\/\\+=@#$%ˆ&*{}|~<>;:[\]]+)*)*$/i); return regexp.test(value); }, isUrl: function (value) { return /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(value); }, tbResize: function () { var width = jQuery(window).width(); // jQuery("#TB_ajaxContent, #TB_iframeContent").css({width: 'auto'}); // jQuery("#TB_window").css({height: 500}); }, tbSize: function (height) { //jQuery("#TB_ajaxContent, #TB_iframeContent").css({width: 'auto'}); // jQuery("#TB_window").css({height: height}); }, addSlashes: function (string) { return string.replace(/\\/g, '\\\\'). replace(/\u0008/g, '\\b'). replace(/\t/g, '\\t'). replace(/\n/g, '\\n'). replace(/\f/g, '\\f'). replace(/\r/g, '\\r'). replace(/'/g, '\\\''). replace(/"/g, '\\"'); }, validate_signers: function (division, signer_email_name, signer_fname_name) { var view_email = jQuery(division + " input[name='" + signer_email_name + "\\[\\]']").map(function () { return jQuery(this).val(); }); var view_fname = jQuery(division + " input[name='" + signer_fname_name + "\\[\\]']").map(function () { return jQuery(this).val(); }); var sorted_email = view_email.sort(); // getting new array var exists = false; var blank = false; var blank_email = false; if (view_email.length === 0 || view_fname.length === 0) { jQuery(division + ' .esig-error-box').remove(); jQuery(division).append('*You must add at least one signer.'); return true; } // if blank signer name is input for (var i = 0; i < view_fname.length; i++) { if (view_fname[i] == undefined || view_fname[i] == '') { blank = true; } var re = /<(.*)>/; if (re.test(view_fname[i])) { blank = true; } if (!this.isFullName(view_fname[i])) { blank = true; } if (blank) { jQuery(division + ' .esig-error-box').remove(); jQuery(division).append('Add a valid signer name'); return true; } } // if blank email address is input for (var i = 0; i < view_email.length; i++) { if (view_email[i] == undefined || view_email[i] == '') { blank_email = true; } if (!this.is_valid_email(view_email[i])) { blank_email = true; } if (blank_email) { // remove previous error msg jQuery(division + ' .esig-error-box').remove(); // add new error msg jQuery(division).append('Add a valid email address'); return true; } } for (var i = 0; i < view_email.length - 1; i++) { if (sorted_email[i + 1].toLowerCase() == sorted_email[i].toLowerCase()) { exists = true; } } if (exists) { jQuery(division + ' .esig-error-box').remove(); jQuery(division).append('*You can not use duplicate email address.'); return true; } else { jQuery(division + ' .esig-error-box').remove(); return false; } }, isValidBase64Image: function (base64Image){ const regex = /^data:image\/(?:png)(?:;charset=utf-8)?;base64,(?:[A-Za-z0-9]|[+/])+={0,2}/; return base64Image && regex.test(base64Image); }, isIphone: function () { /* Detect mobile browser */ if (navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPhone/i)) { return true; } else { return false; } }, ccValidate: function (esigSelection, esigError) { var view_email = jQuery(esigSelection + " input[name='cc_recipient_emails\\[\\]']").map(function () { return jQuery(this).val(); }).get(); var view_fname = jQuery(esigSelection + " input[name='cc_recipient_fnames\\[\\]']").map(function () { return jQuery(this).val(); }).get(); var sorted_email = view_email.sort(); // getting new array var exists = false; var blank = false; var blank_email = false; // if blank signer name is input for (var i = 0; i < view_fname.length; i++) { if (view_fname[i] == undefined || view_fname[i] == '') { blank = true; } var re = /<(.*)>/ ; if (re.test(view_fname[i])) { blank = true; } // cc first name and last name number validation goes here if (this.isCCNumber(view_fname[i])) { blank = true; } // var regexp = new RegExp(/^[a-z]([-']?[a-z]+)*( [a-z]([-']?[a-z]+)*)+$/i); if (!this.isFullName(view_fname[i])) { blank = true; } if (blank) { jQuery('.esig-error-box').remove(); jQuery(esigError).append('Add a valid signer name').show(); return true; } } // if blank email address is input for (var i = 0; i < view_email.length; i++) { if (view_email[i] == undefined || view_email[i] == '') { blank_email = true; } if (!this.is_valid_email(view_email[i])) { blank_email = true; } if (blank_email) { // remove previous error msg jQuery('.esig-error-box').remove(); // add new error msg jQuery(esigError).append('Add a valid email address').show(); return true; } } for (var i = 0; i < view_email.length - 1; i++) { if (sorted_email[i + 1].toLowerCase() == sorted_email[i].toLowerCase()) { exists = true; } } if (exists) { jQuery('.esig-error-box').remove(); jQuery(esigError).append(' *You can not use CC duplicate email address.').show(); return true; } else { jQuery('.esig-error-box').remove(); return false; } } }; /** * This method will be used to make a server http request with ajax call. * * @param {string} url * @param {string} method * @param {CallableFunction} callBack * @param {object} postData */ function esigRemoteRequest(url, method, callBack, postData = false) { // variable xmlhttp object. let xmlhttp; if (window.XMLHttpRequest) { // code for modern browsers xmlhttp = new XMLHttpRequest(); } else { // code for old IE browsers xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } // concat wordpress ajax url with provided url let requestUrl = ajaxurl + "?action=" + url ; // convert method to uppercase letter. method = method.toUpperCase(); // Open xmlhttp request xmlhttp.open(method, requestUrl , true); //Make get/post form submission from array if ((postData instanceof FormData === false) && method === "POST" && typeof postData === 'object' && postData !== null) { // If method is post set content type xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); // Makeing url parameter with given object if that is not a FormData instance postData = Object.keys(postData).map(function (key) { return encodeURIComponent(key) + "=" + encodeURIComponent(postData[key]); }).join('&'); } // get server response when document is ready after request xmlhttp.onreadystatechange = function () { if (this.readyState === 4 && this.status === 200) { // Typical action to be performed when the document is ready: // return the response result to callback functions. callBack(xmlhttp); } }; // xmlhttp not ready return false if (xmlhttp.readyState === 4) return false; // send xml request to server . xmlhttp.send(postData); } /** * return a document selector dom object . * @param {string} query */ function esig(query) { return document.querySelector(query); } function esigHasWhiteSpace(string) { // check for white space return /\s/g.test(string); } function esigValidateInputs(fieldsList,msgObj) { var ret = false ; for (i = 0; i < fieldsList.length; i++) { if (!esig_validation.is_string(fieldsList[i].value)) { wpEsig("#" + fieldsList[i].id).insertAfterValidationMsg(msgObj[fieldsList[i].id], true); ret= true; } } return ret; } function esigAlertBox(message) { //Create the element using the createElement method. var myDiv = document.createElement("div"); //Set its unique ID. myDiv.id = 'esigAlertBox'; //Add your content to the DIV myDiv.innerHTML = '×' + message; //Finally, append the element to the HTML body document.body.appendChild(myDiv); } function esigAlertClose() { esig("#esig-alert-close").parentElement.remove(); } /** * @deprecated 1.8.1 */ /* function esigCheckJapaneseCharacters(inputValue) { var japanesRegex = /[\u3000-\u303F]|[\u3040-\u309F]|[\u30A0-\u30FF]|[\uFF00-\uFFEF]|[\u4E00-\u9FAF]|[\u2605-\u2606]|[\u2190-\u2195]|\u203B/g; if(japanesRegex.test(inputValue)) { return "found"; } else { return "Not found"; } } function esigCheckapostrophe(inputValue) { var apostropheRegex = /^[A-Z][a-z’]+(\s[A-Z][a-z’]+)*$/; if(apostropheRegex.test(inputValue)) { return "found"; } else { return "Not found"; } } */