function Wiz(query) { return wizForms.getFieldByFieldID(query); } const wizForms = { getFieldByFieldID(fieldid) { var fieldIDs = []; var jQueryObjects = wizForms.getFieldsjQueryObjectsByFieldID(fieldid); $.each(jQueryObjects, function (i, currentObject) { fieldIDs.push(wizForms.jQueryObjectToWizObject(currentObject, fieldid)); }); if (fieldIDs.length > 1) return fieldIDs; else return fieldIDs[0]; }, jQueryObjectToWizObject(jQueryObject, fieldid) { var fieldType = wizForms.getFieldIDTypeByjQueryObject($(jQueryObject)); return { jQueryFieldObject: $(jQueryObject), fieldID: fieldid, type: fieldType, setValue(value) { wizForms.setFieldValueByType(this, value); }, getValue() { return wizForms.getFieldValueByType(this); }, getTextValue() { return wizForms.getFieldTextValueByType(this); }, hide() { if (fieldType == "multiFileUpload") { $(jQueryObject).parent().parent().css("display", "none"); } else if ($(jQueryObject).hasClass("checkBoxtitle")) { $(jQueryObject).css("display", "none"); } else { $(jQueryObject).parent().css("display", "none"); } }, show() { if (fieldType == "multiFileUpload") { $(jQueryObject).parent().parent().css("display", "inline-block"); } else if ($(jQueryObject).hasClass("checkBoxtitle")) { $(jQueryObject).css("display", "inline-block"); } else { $(jQueryObject).parent().css("display", "inline-block"); } }, setErrorMessage(errMsg) { $(jQueryObject).parent().find(".validError").text(errMsg); }, on(onType, onFunction) { switch (fieldType) { case "select": $(jQueryObject).find("select").on(onType, onFunction); break; case "textBox": $(jQueryObject).find("input").on(onType, onFunction); break; case "radio": $(jQueryObject).find("input").on(onType, onFunction); break; case "datePicker": $(jQueryObject).find("input").on(onType, onFunction); break; case "checkBox": $(jQueryObject).find("input").on(onType, onFunction); break; } }, getDateObject() { return wizForms.StringHebrewDateConvertToDateObject(wizForms.getFieldValueByType(this)); }, getFiles() { return wizForms.getFiles(fieldid); }, getOptions() { // Add casing for diff field types return wizForms.getOptions(this) }, showSpecificValues(values) { // Add casing for diff field types return wizForms.showDropDownValues(values, fieldid) }, showAllValues() { return wizForms.showAllDropDownValues(fieldid) }, disable() { return wizForms.disable(fieldid) }, enable() { return wizForms.enable(fieldid) } } }, getOptions(wizObject) { let type = wizObject.type let optionsArr = []; switch (type) { case "select": let options = wizObject.jQueryFieldObject.find("select option"); $(options).each(function () { optionsArr.push($(this).text()) }) break; } return optionsArr; }, getFiles(fieldid) { let files = []; let currentFilesArray; wizForms.getFieldsjQueryObjectsByFieldID(fieldid).parent().find(".mu_wrap_upload input").each(function () { currentFilesArray = $(this)[0].files; for (let i = 0; i < currentFilesArray.length; i++) { files.push(currentFilesArray[i]); } }) return files; }, addTopLogos(...logosLinks) { $(".formLogo").append(); }, setFieldValueByType(wizObject, value) { switch (wizObject.type) { case "textBox": wizObject.jQueryFieldObject.find("input").val(value); case "select": wizObject.jQueryFieldObject.find("select").val(value).change(); break; case "textArea": wizObject.jQueryFieldObject.find("textArea").val(value); break; case "checkBox": $(wizObject.jQueryFieldObject.find(`input[value='${value}']`)).prop("checked", true); break; case "radio": $(wizObject.jQueryFieldObject.find(`input[value='${value}']`)).prop("checked", true); break; case "datePicker": wizObject.jQueryFieldObject.find("input").val(value); break; } }, nestedFields: { setNestedFields(nestedFields) { if ("fatherValueToShow" in nestedFields != true) { hideNestedFields(nestedFields); } }, hideNestedFields(field) { for (const child of field.children) { if (child.children.length > 0) hideNestedFields(child) hideElems(child.fieldid) } } }, getFieldValueByType(wizObject) { switch (wizObject.type) { case "textBox": return wizObject.jQueryFieldObject.find("input").val(); case "select": return wizObject.jQueryFieldObject.find("select :selected").val(); case "textArea": return wizObject.jQueryFieldObject.find("textArea").val(); case "checkBox": var selectOptions = []; var options = $(wizObject.jQueryFieldObject.find(`input:checked`)); $.each(options, function (i, currentOption) { selectOptions.push(currentOption.value); }) return selectOptions; case "radio": return $(wizObject.jQueryFieldObject).find(`input:checked`).val(); case "datePicker": return wizObject.jQueryFieldObject.find("input").val(); } }, getFieldTextValueByType(wizObject) { switch (wizObject.type) { case "textBox": return wizObject.jQueryFieldObject.find("input").text(); case "select": return wizObject.jQueryFieldObject.find("select :selected").text(); case "textArea": return wizObject.jQueryFieldObject.find("textArea").text(); } }, getFieldIDTypeByjQueryObject(jQueryObject) { // jQueryObject=$(jQueryObject); if (jQueryObject.hasClass("textBox")) { return "textBox"; } if (jQueryObject.hasClass("textDate")) { return "datePicker"; } if (jQueryObject.hasClass("textRadio")) { return "radio"; } if (jQueryObject.children().hasClass("checkBoxtitle")) { return "checkBox"; } if (jQueryObject.hasClass("textSelect")) { return "select"; } if (jQueryObject.hasClass("textArea")) { return "textArea"; } if (jQueryObject.hasClass("headlineTitle")) { return "title"; } if (jQueryObject.parent().find(".mu_wrap_upload").length > 0) { return "multiFileUpload"; } }, getFieldsjQueryObjectsByFieldID(fieldid) { var currentFields; currentFields = $(`[fieldid='${fieldid}'] > .textBox`); if (currentFields.length >= 1) return currentFields; currentFields = $(`[fieldid='${fieldid}'] > .textDate`); if (currentFields.length >= 1) return currentFields; currentFields = $(`[fieldid='${fieldid}'] > .textRadio`); if (currentFields.length >= 1) return currentFields; currentFields = $(`[fieldid='${fieldid}'] > .textTitle`); if (currentFields.length >= 1) return currentFields; currentFields = $(`[fieldid='${fieldid}'] > .textSelect`); if (currentFields.length >= 1) return currentFields; currentFields = $(`[fieldid='${fieldid}'] > .textArea`); if (currentFields.length >= 1) return currentFields; currentFields = $(`[fieldid='${fieldid}'] > .headlineTitle`); if (currentFields.length >= 1) return currentFields; currentFields = $(`[fieldid='${fieldid}']`); if (currentFields.length >= 1) return currentFields; else return null; }, //#region MandatoryFields loadMandatoryFieldCheckup() { wizForms.addStarToMandatoryFields(); wizForms.changeNextBTNToDiv(); wizForms.changeNextBTNOnClickToCheckMandatoryFields(); }, addStarToMandatoryFields() { let currentField; $(`.mandatory`).each(function () { if ($(this).attr("fieldid") != undefined) { currentField = Wiz($(this).attr("fieldid")); } else { currentField = Wiz($($(this).children()[0]).attr("fieldid")); } if (currentField.type != "multiFileUpload") { $(this).find("[class*='Title']:not('[for]')").prepend(`*`); } else { $(this).find(".textTitle").prepend(`*`); } }); }, changeNextBTNOnClickToCheckMandatoryFields() { let currentOnClick = ""; $(".nextBTN").each(function () { currentOnClick = $(this).attr("onclick").replace(";return false;", ""); if (currentOnClick.includes('checkMandatoryFields()') != true) { $(this).attr("onclick", `wizForms.checkMandatoryFields( "${currentOnClick}" )`); } }); }, changeNextBTNToDiv() { $(".nextBTN").each(function () { wizForms.changeElementType("nextBTN", "div") }); }, checkMandatoryFields(onSuccessFunction) { let currentFieldID = ""; let currentField; let allMandatoryFieldsFilled = true; //mandatory for normal fields $(`[id='page${currentPage}'] .mandatory`).not("[style*='display: none;']").each(function () { if ($(this).attr("fieldid") != undefined) { currentFieldID = $(this).attr("fieldid"); currentField = Wiz(currentFieldID); if (currentField.type != "multiFileUpload") { if (currentField.getValue() == undefined || currentField.getValue().length <= 0) { currentField.setErrorMessage("זהו שדה חובה"); allMandatoryFieldsFilled = false; } } } }); //mandatory for multiUploadFiles fields $(`[id='page${currentPage}'] .mandatory`).not("[style*='display: none;']").find("[fieldid]").find(".mu_wrap_upload").each(function () { currentFieldID = $(this).parent().attr("fieldid"); currentField = Wiz(currentFieldID); if (currentField.type == "multiFileUpload") { if (currentField.getFiles().length <= 0) { currentField.setErrorMessage("זהו שדה חובה"); allMandatoryFieldsFilled = false; } } //else if (currentField.getValue() == undefined || currentField.getValue().length <= 0) { // currentField.setErrorMessage("זהו שדה חובה"); //allMandatoryFieldsFilled = false; // } }); if (allMandatoryFieldsFilled == true) { eval(onSuccessFunction); } }, changeElementType(classTo, transformTo) { var attrs = {}; $.each($(`.${classTo}`)[0].attributes, function (idx, attr) { attrs[attr.nodeName] = attr.nodeValue; }); $(`.${classTo}`).replaceWith(function () { return $(`<${transformTo}/>`, attrs).append($(this).contents()); }); }, //#endregion //#region LimitFileUploads, limitFileUploads() { wizForms.checkFilesOnUpload(); wizForms.checkFilesOnRemove(); wizForms.displayUploadStats(); }, limitUploadSettings: { "allowedFileTypes": ["jpeg", "jpg", "png", "docx", "tif", "tiff", "bmp", "pdf", "pptx"], "maxMBAllowed": 10, "maxFilesAllowed": 10, uploadInfomration: { "currentFilesAmount": 0, "currentMBUploaded": 0 }, "reachedMaxFilesMessage": "שים לב! גודל הקבצים המצורפים עולה מגבלת הכמות של 10 קבצים ולכן לא ניתן לשלוח את הטופס", "reachedMaxMBMessage": "שים לב! גודל הקבצים המצורפים עולה על 10MB לכן לא ניתן לשלוח את הטופס", "bannedFileTypeMBMessage": "ניתן לצרף רק קבצים בפורמטים הבאים: .jpg .jpeg .pdf .doc .docx .png .tiff .bmp" }, checkFilesOnUpload() { var uploadFields = $("[fieldid*='upload']"); var currentSize = 0; var totalSize = 0; $(uploadFields).each(function () { $(this).find("input").attr("onChange", ""); $(this).on("change", function () { var validFileType = false; var file = $(this)[0].files; if (file.length > 0 && file != undefined) { var fileName = file[0].name; var fileExtension = fileName.split(".").pop().toLowerCase(); let fileSizeInMB = (file[0].size) / (1024 * 1024); totalSize = 0; currentSize = 0; if ((fileSizeInMB + wizForms.limitUploadSettings.uploadInfomration.currentMBUploaded) > wizForms.limitUploadSettings.maxMBAllowed) { alert(wizForms.limitUploadSettings.reachedMaxMBMessage); $(this).val("") return; } for (let i = 0; i < wizForms.limitUploadSettings.allowedFileTypes.length; i++) { if (fileExtension == wizForms.limitUploadSettings.allowedFileTypes[i]) { validFileType = true; } } if (validFileType == true) { addMultiFile(this); for (var i = 0; i < this.files.length; i++) { currentSize = this.files[i].size; currentSize /= 1024 * 1024; totalSize += currentSize; wizForms.limitUploadSettings.uploadInfomration.currentFilesAmount++; } wizForms.limitUploadSettings.uploadInfomration.currentMBUploaded += totalSize; wizForms.checkFilesOnRemove(); wizForms.checkLimits(); wizForms.displayUploadStats(); } else { alert(wizForms.limitUploadSettings.bannedFileTypeMBMessage); $(this).val("") } } }); }); }, checkFilesOnRemove() { var uploadedFiles = $("[id^='upload_prev']"); var currentSize = 0; $(uploadedFiles).each(function () { $(this).children().each(function () { var currnetButton = $(this).find("input"); $(currnetButton).attr("onclick", ""); $(currnetButton).unbind(); $(currnetButton).on("click", function () { var currentInputId = $(this).parent().attr("name"); currentSize = $("#" + currentInputId)[0].files[0].size; currentSize /= 1024 * 1024; wizForms.limitUploadSettings.uploadInfomration.currentFilesAmount--; wizForms.limitUploadSettings.uploadInfomration.currentMBUploaded -= currentSize; wizForms.checkLimits(); removeFile(this) wizForms.displayUploadStats(); }); }) }); }, checkLimits() { var disableUpload = false; console.log(wizForms.limitUploadSettings.uploadInfomration); if (wizForms.limitUploadSettings.uploadInfomration.currentFilesAmount >= wizForms.limitUploadSettings.maxFilesAllowed || wizForms.limitUploadSettings.uploadInfomration.currentMBUploaded >= wizForms.limitUploadSettings.maxMBAllowed) { setTimeout(function () { $("[id^='fileToUpload']").attr("disabled", "true"); if (currentPage >= $("[id^='page']").length) { $("#finishForm").hide(); } }, 100); if (wizForms.limitUploadSettings.uploadInfomration.currentMBUploaded >= wizForms.limitUploadSettings.maxMBAllowed) { alert(wizForms.limitUploadSettings.reachedMaxMBMessage); } } else { setTimeout(function () { $("[id^='fileToUpload']").removeAttr("disabled"); if (currentPage >= $("[id^='page']").length) { $("#finishForm").show(); } }, 100); } }, displayUploadStats() { $("[fieldid='upSummary']").html(`
| ${table[0][i]} | ` } htmlTable += `|
|---|---|
| ${table[j][z]} | `; } else { htmlTable += ``; idsToAppendFields.push({ fieldID: table[j][z], ID: `#${textFieldid}_${j}_${z}` }) } } htmlTable += ` |
`
formHeader.empty()
formHeader.html(header)
},
loadNumericFields() {
/*
Dynamically adds a comma after every 3 digits in the input field. Must have class numeric for the function to work
*/
const numericFields = $('.numeric .textBox input');
numericFields.each(function () {
$(this).on('input', setNumeric);
});
function setNumeric() {
/*
Adds a comma after every 3 digits
*/
var inputValue = $(this).val();
// Remove any existing commas and non-digit characters
var numericValue = inputValue.replace(/[^0-9]/g, '');
// Add commas after every 3 digits
var formattedValue = numericValue.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
$(this).val(formattedValue);
}
},
loadPhoneNumberFields() {
/*
Adds a dash after the first 3 and first 6 digits of a phone number. Must have class 'phone' for the function to work
*/
const phoneFields = $('.phone .textBox input');
phoneFields.each(function () {
$(this).on('input', setPhoneNumber);
});
function setPhoneNumber() {
var inputValue = $(this).val();
var numericValue = inputValue.replace(/[^0-9]/g, '');
var formattedValue = formatAsPhoneNumber(numericValue);
$(this).val(formattedValue);
}
function formatAsPhoneNumber(value) {
if (value.length > 6) {
return value.replace(/(\d{3})(\d{3})(\d{1,4})/, '$1-$2-$3');
} else if (value.length > 3) {
return value.replace(/(\d{3})(\d{1,3})/, '$1-$2');
} else {
return value;
}
}
},
loadNativeDateFields() {
const dateFields = $('.date .textDate input')
const dateTimeFields = $('.datetime .textDate input')
dateFields.each(function () {
replaceDate($(this), 'date');
});
dateTimeFields.each(function () {
replaceDate($(this), 'datetime-local');
});
function replaceDate(elem, type) {
// Create a new input element with updated properties
var newInput = $('', {
'tabindex': elem.attr('tabindex'),
'type': type,
'use': elem.attr('use'),
'id': elem.attr('id'),
'mandatory': elem.attr('mandatory'),
'pdf': elem.attr('pdf'),
'validtype': elem.attr('validtype'),
'validationdata': elem.attr('validationdata'),
'aria-describedby': elem.attr('aria-describedby'),
'fieldid': elem.attr('fieldid'),
'mandatoryoriginalvalue': elem.attr('mandatoryoriginalvalue'),
// Add any other attributes you need to copy
});
// Replace the original input element with the new one
elem.replaceWith(newInput);
}
},
setFieldClass() {
/*
Gives each wiz fields outter div a class and stops on fields with class spacing
Example (Before calling the function):