{"version":3,"sources":["../../../../../Foundation/JavascriptCommon/code/scripts/common/formUtils.js","ProductAccessories/main.js"],"names":["define","clearInvalidFeedback","formId","startsWith","$","removeClass","empty","displayInvalidFeedback","invalidFields","forEach","fieldMessage","field","FieldName","addClass","siblings","append","MessageText","collectFormData","disabledFields","find","prop","serializedData","serializeArray","formData","data","name","value","each","index","element","populateFormWithData","type","undefined","val","toString","disableFields","enableFields","initializeFloatingLabels","useToken","token","__RequestVerificationToken","require","formUtils","postData","ajax","url","dataType","success","status","html","content","window","Coria","reInitProductOptions","reInitQuantitySelectors","reInitAddToWishlistPopup","console","error","message","jq","errorThrown","complete"],"mappings":"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","file":"ProductAccessories.js","sourcesContent":["define('common/formUtils',[\r\n],\r\n function () {\r\n\r\n // Clears and deactivates all invalid feedback text on form fields\r\n function clearInvalidFeedback(formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n $(formId + \" .is-invalid\").removeClass(\"is-invalid\");\r\n $(formId + \" .invalid-feedback\").empty();\r\n }\r\n\r\n // Fills in and activates invalid feedback text on form fields\r\n function displayInvalidFeedback(invalidFields, formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n if (invalidFields) {\r\n invalidFields.forEach(function (fieldMessage) {\r\n var field = $(formId + \" [name='\" + fieldMessage.FieldName + \"']\");\r\n field.addClass(\"is-invalid\");\r\n field.siblings(\".invalid-feedback\").append(fieldMessage.MessageText);\r\n });\r\n }\r\n }\r\n\r\n // Collects the data from all form fields and returns them as object,\r\n // using \"name\" attribute values from form fields as object property names.\r\n function collectFormData(formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n // the serializeArray() jQuery method doesn't take the values from disabled fields, so first I'll\r\n // temporarily enable all disabled fields, and then disable them again\r\n var disabledFields = $(formId).find(\":input:disabled\").prop(\"disabled\", false);\r\n var serializedData = $(formId).serializeArray();\r\n disabledFields.prop(\"disabled\", true);\r\n var formData = {};\r\n serializedData.forEach(function (data) {\r\n formData[data.name] = data.value;\r\n });\r\n // serializeArray does not return anything for unchecked checkboxes, so we'll add them now with value false\r\n $(formId + \" input[type='checkbox']:not(:checked)\").each(function (index, element) {\r\n formData[element.name] = false;\r\n });\r\n // serializeArray returns \"on\" for checked checkboxes, so we'll set them to true now\r\n $(formId + \" input[type='checkbox']:checked\").each(function (index, element) {\r\n formData[element.name] = true;\r\n });\r\n return formData;\r\n }\r\n\r\n // Goes through all input elements on the form and fills them with data from the\r\n // given object, matching \"name\" attribute of the input element with object property name.\r\n function populateFormWithData(formId, data) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n $(formId + \" :input\").each(function (index, element) { \r\n if (element.type === \"radio\" ||\r\n element.type === \"checkbox\")\r\n {\r\n if (data[element.name] !== undefined)\r\n $(element).prop(\"checked\", $(element).val().toString() === data[element.name].toString());\r\n }\r\n else if (element.type === \"text\" ||\r\n element.type === \"email\" ||\r\n element.type === \"tel\" ||\r\n element.type === \"password\" ||\r\n element.type === \"textarea\" ||\r\n element.type === \"select-one\")\r\n {\r\n if (data[element.name] !== undefined)\r\n $(element).val(data[element.name]);\r\n else\r\n $(element).val(null);\r\n }\r\n });\r\n }\r\n\r\n function disableFields(formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n $(formId + \" :input\").prop(\"disabled\", true);\r\n }\r\n\r\n function enableFields(formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n $(formId + \" :input\").prop(\"disabled\", false);\r\n }\r\n\r\n function initializeFloatingLabels(formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n $(formId + \" .floating-label-container\").each(function (index, element) {\r\n var inputElement = $(element).find(\":input\")[0];\r\n if (inputElement.value) $(element).addClass(\"active\");\r\n else $(element).removeClass(\"active\");\r\n });\r\n }\r\n\r\n //adds the form token to the object for use with [ValidateAntiforgeryToken] attribute\r\n function useToken(data) { \r\n var token = $('input[name=\"__RequestVerificationToken\"]').val();\r\n data.__RequestVerificationToken = token;\r\n }\r\n\r\n return {\r\n clearInvalidFeedback: clearInvalidFeedback,\r\n displayInvalidFeedback: displayInvalidFeedback,\r\n collectFormData: collectFormData,\r\n populateFormWithData: populateFormWithData,\r\n disableFields: disableFields,\r\n enableFields: enableFields,\r\n initializeFloatingLabels: initializeFloatingLabels,\r\n useToken: useToken\r\n };\r\n });\r\n\n","require([\r\n \"common/formUtils\"\r\n],\r\nfunction (formUtils) {\r\n\r\n // execute Ajax request to fetch the product accessories content\r\n const productAccessoriesSelector = \".product-accessories\"\r\n\r\n var postData = $(productAccessoriesSelector).data();\r\n formUtils.useToken(postData);\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/customapi/Product/ProductAccessoriesContent\",\r\n dataType: \"json\",\r\n data: postData,\r\n success: function (data) {\r\n if (data.status === \"OK\") {\r\n // put content on the page\r\n $(productAccessoriesSelector).html(data.content);\r\n // initialize accessories display based on currently selected variant\r\n window.Coria.reInitProductOptions();\r\n window.Coria.reInitQuantitySelectors();\r\n window.Coria.reInitAddToWishlistPopup();\r\n } else if (data.status === \"ERROR\") {\r\n console.error(data.message);\r\n }\r\n },\r\n error: function (jq, status, errorThrown) {\r\n console.error(status + \": \" + errorThrown);\r\n },\r\n complete: function () {\r\n \r\n }\r\n\r\n });\r\n\r\n});\r\n\ndefine(\"ProductAccessories/main\", function(){});\n\n"]}