{ "version": 3, "sources": [ "../../../../../Foundation/JavascriptCommon/code/scripts/common/formUtils.js", "../../../../../Foundation/JavascriptCommon/code/scripts/common/alertMessage.js", "ShoppingCartIcon/miniCart.js", "ShoppingCartIcon/main.js" ], "names": [], "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC7MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACvGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA", "file": "ShoppingCartIcon.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 function setFocus(selector, delay) {\r\n // sometimes focus has to be set with a delay, so that some other processes have time to finish before that (e.g. initializing floating labels)\r\n if (delay) setTimeout(() => { $(selector).focus(); }, delay);\r\n else $(selector).focus();\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 setFocus: setFocus,\r\n useToken: useToken\r\n };\r\n });\r\n\n", "define('common/alertMessage',[\r\n],\r\n function () {\r\n\r\n const alertSelector = \"#alertMessage\";\r\n const allButtonsSelector = alertSelector + \" .modal-footer button\";\r\n const positions = {\r\n center: \"modal-dialog-centered\",\r\n top: \"modal-dialog-top\"\r\n };\r\n const defaultOptions = {\r\n position: \"center\",\r\n customClass: \"\"\r\n };\r\n const buttonSelector = {\r\n ok: allButtonsSelector + \".ok\",\r\n yes: allButtonsSelector + \".yes\",\r\n no: allButtonsSelector + \".no\",\r\n button1: allButtonsSelector + \".button1\",\r\n button2: allButtonsSelector + \".button2\"\r\n };\r\n\r\n function show(messageText, okCallback, options) {\r\n setIcon();\r\n setButtons(\"ok\", okCallback);\r\n setOptions(options, \"alert-show\");\r\n displayAlert(messageText);\r\n }\r\n\r\n function info(messageText, okCallback, options) {\r\n setIcon(\"info\");\r\n setButtons(\"ok\", okCallback);\r\n setOptions(options, \"alert-info\");\r\n displayAlert(messageText);\r\n }\r\n\r\n function warning(messageText, okCallback, options) {\r\n setIcon(\"warning\");\r\n setButtons(\"ok\", okCallback);\r\n setOptions(options, \"alert-warning\");\r\n displayAlert(messageText);\r\n }\r\n \r\n function error(messageText, okCallback, displayDefaultMessage, options) {\r\n setIcon(\"error\");\r\n setButtons(\"ok\", okCallback); \r\n setOptions(options, \"alert-error\");\r\n if (typeof messageText === 'undefined' || messageText === null) messageText = \"\";\r\n if (typeof displayDefaultMessage === 'undefined') displayDefaultMessage = true;\r\n if (displayDefaultMessage || messageText === \"\") {\r\n messageText = Rifton.Messages[\"General/Default Error Message\"] + messageText;\r\n }\r\n displayAlert(messageText);\r\n }\r\n\r\n function yesNoQuestion(messageText, yesCallback, noCallback, options) {\r\n setIcon(\"question\");\r\n setButtons(\"yes-no\", yesCallback, noCallback);\r\n setOptions(options, \"alert-yes-no\");\r\n displayAlert(messageText);\r\n }\r\n\r\n function custom(messageText, iconName, callback1, buttonText1, callback2, buttontext2, options) {\r\n setIcon(iconName);\r\n setButtons(\"custom\", callback1, callback2, buttonText1, buttontext2);\r\n setOptions(options, \"alert-custom\");\r\n displayAlert(messageText);\r\n }\r\n\r\n function spinner(messageText, iconName, options) {\r\n setIcon(iconName);\r\n $(alertSelector + \" .spinner\").removeClass(\"d-none\");\r\n setButtons(\"none\");\r\n setOptions(options, \"alert-spinner\");\r\n displayAlert(messageText);\r\n }\r\n\r\n function setIcon(iconName) {\r\n $(alertSelector + \" .spinner\").addClass(\"d-none\");\r\n $(alertSelector + \" .icons\").addClass(\"d-none\");\r\n $(alertSelector + \" i\").addClass(\"d-none\");\r\n if (iconName) {\r\n $(alertSelector + \" .icons\").removeClass(\"d-none\");\r\n $(alertSelector + \" i.\" + iconName).removeClass(\"d-none\");\r\n }\r\n }\r\n\r\n function setButtons(buttons, callback1, callback2, buttonText1, buttonText2) {\r\n $(allButtonsSelector).addClass(\"d-none\");\r\n $(buttonSelector.ok).off(\"click\");\r\n $(buttonSelector.yes).off(\"click\");\r\n $(buttonSelector.no).off(\"click\");\r\n $(buttonSelector.button1).off(\"click\");\r\n $(buttonSelector.button2).off(\"click\");\r\n if (buttons === \"yes-no\") {\r\n $(buttonSelector.yes).removeClass(\"d-none\");\r\n $(buttonSelector.no).removeClass(\"d-none\");\r\n $(buttonSelector.yes).on(\"click\", function () { hideAndCallback(callback1); });\r\n $(buttonSelector.no).on(\"click\", function () { hideAndCallback(callback2); });\r\n }\r\n else if (buttons === \"custom\") {\r\n if (callback1) {\r\n $(buttonSelector.button1).removeClass(\"d-none\");\r\n $(buttonSelector.button1).text(buttonText1);\r\n $(buttonSelector.button1).on(\"click\", function () { hideAndCallback(callback1); });\r\n }\r\n if (callback2) {\r\n $(buttonSelector.button2).removeClass(\"d-none\");\r\n $(buttonSelector.button2).text(buttonText2);\r\n $(buttonSelector.button2).on(\"click\", function () { hideAndCallback(callback2); });\r\n }\r\n }\r\n else if (buttons === \"none\") {\r\n\r\n }\r\n else {\r\n $(buttonSelector.ok).removeClass(\"d-none\");\r\n $(buttonSelector.ok).on(\"click\", function () { hideAndCallback(callback1); });\r\n }\r\n }\r\n\r\n var previousClasses;\r\n\r\n function setOptions(options, alertClass) {\r\n // setting position class\r\n var pos = (options && options.position) || defaultOptions.position;\r\n $(alertSelector + \" .modal-dialog\")\r\n .removeClass(positions.center).removeClass(positions.top)\r\n .addClass(positions[pos]);\r\n // setting CSS classes\r\n var cl = (alertClass ? alertClass : \"\") + \" \" +\r\n ((options && options.customClass) ? options.customClass : defaultOptions.customClass);\r\n if (previousClasses) $(alertSelector + \" .modal-content\").removeClass(previousClasses);\r\n if (cl) $(alertSelector + \" .modal-content\").addClass(cl)\r\n previousClasses = cl;\r\n }\r\n\r\n var alertMessageModal = null;\r\n var alertMessageIsInTransition = false;\r\n\r\n function getAlertModal() {\r\n if (!alertMessageModal) {\r\n // initializing alertModal\r\n var alertElement = document.querySelector(alertSelector);\r\n if (alertElement) {\r\n alertMessageModal = new bootstrap.Modal(alertElement, { backdrop: \"static\", keyboard: false });\r\n if (alertMessageModal) {\r\n $(alertElement).on(\"show.bs.modal\", () => { alertMessageIsInTransition = true; });\r\n $(alertElement).on(\"shown.bs.modal\", () => { alertMessageIsInTransition = false; });\r\n $(alertElement).on(\"hide.bs.modal\", () => { alertMessageIsInTransition = true; });\r\n $(alertElement).on(\"hidden.bs.modal\", () => { alertMessageIsInTransition = false; });\r\n }\r\n else console.log(\"Alert modal not initialized for \" + alertSelector);\r\n }\r\n else console.log(\"There's no alert modal with selector \" + alertSelector);\r\n }\r\n return alertMessageModal;\r\n }\r\n\r\n function displayAlert(messageText) {\r\n if (alertMessageIsInTransition) {\r\n // Alert is currently transitioning (it's being displayed or hidden). Come back a bit later to display it with new message.\r\n setTimeout(() => { displayAlert(messageText) }, 500);\r\n }\r\n else {\r\n $(alertSelector + \" .alert-text\").empty().html(messageText);\r\n var alertModal = getAlertModal();\r\n if (alertModal) {\r\n alertModal.show();\r\n }\r\n }\r\n }\r\n\r\n\r\n function hideAndCallback(callback) {\r\n if (callback) $(alertSelector).one(\"hidden.bs.modal\", callback);\r\n hide();\r\n }\r\n\r\n function hide() {\r\n if (alertMessageIsInTransition) {\r\n // Alert is currently transitioning (it's being displayed or hidden). Come back a bit later to hide it.\r\n setTimeout(() => { hide() }, 500);\r\n }\r\n else {\r\n // hide the modal\r\n var alertModal = getAlertModal();\r\n if (alertModal) {\r\n alertModal.hide();\r\n }\r\n }\r\n }\r\n\r\n return {\r\n show: show,\r\n info: info,\r\n warning: warning,\r\n error: error,\r\n yesNoQuestion: yesNoQuestion,\r\n custom: custom,\r\n spinner: spinner,\r\n hide: hide\r\n };\r\n });\r\n\n", "define('ShoppingCartIcon/miniCart',[\r\n \"common/formUtils\",\r\n \"common/alertMessage\"\r\n],\r\nfunction (formUtils, alertMessage) {\r\n\r\n const miniCartSelector = \".mini-cart\";\r\n const cartIconSelector = \".shopping-cart-icon\";\r\n var autoHideTimeout = 0;\r\n\r\n function init() {\r\n $(cartIconSelector).webuiPopover({\r\n trigger: \"click\",\r\n placement: \"bottom-left\",\r\n width: 400,\r\n type: \"html\",\r\n url: \".mini-cart\",\r\n animation: \"fade\",\r\n multi: true,\r\n arrow: false,\r\n closeable: true,\r\n onShow: populateMiniCart\r\n });\r\n }\r\n\r\n function flash() {\r\n // I've tried this by using some of the WebuiPopover methods (https://github.com/sandywalker/webui-popover),\r\n // but none of them worked for changing the options on the fly, so I'm accessing the popover options\r\n // directly from the data object on the cart icon element.\r\n var options = $(cartIconSelector).data(\"plugin_webuiPopover\").options;\r\n\r\n // setting the options for flashing the popover\r\n var pageTop = $(window).scrollTop();\r\n var cartIconPosition = $(cartIconSelector).offset().top + $(cartIconSelector)[0].offsetHeight;\r\n if (pageTop > cartIconPosition) {\r\n // cart icon is out of the view, offset the popover so it's visible\r\n options.offsetTop = pageTop - cartIconPosition;\r\n }\r\n autoHideTimeout = 3000; // auto hide the popup 3 seconds after its content has loaded\r\n\r\n // showing the popover\r\n $(cartIconSelector).webuiPopover(\"show\");\r\n\r\n // resetting the options back to default values\r\n options.offsetTop = 0;\r\n }\r\n\r\n function populateMiniCart() {\r\n spinner(\"show\");\r\n var postData = {};\r\n formUtils.useToken(postData);\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/customapi/Cart/GetMiniCart\",\r\n dataType: \"json\",\r\n data: postData,\r\n success: function (data) {\r\n if (data.status === \"OK\") {\r\n $(miniCartSelector + \" .mini-cart-content\").empty().html(data.content);\r\n if (data.count > 0) {\r\n $(miniCartSelector + \" .mini-cart-button\").removeClass(\"d-none\");\r\n }\r\n if (autoHideTimeout > 0) {\r\n // hiding the minicart popup after a set timeout\r\n setTimeout(function () {\r\n $(cartIconSelector).webuiPopover(\"hide\");\r\n }, autoHideTimeout);\r\n autoHideTimeout = 0;\r\n }\r\n } else if (data.status === \"ERROR\") {\r\n alertMessage.error(data.message);\r\n }\r\n },\r\n error: function (jq, status, errorThrown) {\r\n alertMessage.error(status + \": \" + errorThrown);\r\n },\r\n complete: function () {\r\n spinner(\"hide\");\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n function spinner(what) {\r\n if (what === \"show\") {\r\n $(miniCartSelector + \" .mini-cart-content\").empty(); // remove previous content\r\n $(miniCartSelector + \" .mini-cart-button\").addClass(\"d-none\"); // hide button\r\n $(miniCartSelector + \" .spinner\").removeClass(\"d-none\"); // show spinner\r\n }\r\n else if (what === \"hide\") {\r\n $(miniCartSelector + \" .spinner\").addClass(\"d-none\");\r\n }\r\n\r\n }\r\n\r\n return {\r\n init: init,\r\n flash: flash\r\n };\r\n});\r\n\n", "require([\r\n \"ShoppingCartIcon/miniCart\"\r\n],\r\nfunction (miniCart) {\r\n miniCart.init();\r\n});\r\n\ndefine(\"ShoppingCartIcon/main\", function(){});\n\n" ] }