{"version":3,"sources":["cart.js"],"names":["Cart","$","currentXhr","updateTimerId","api","init","$body","touchedTriggered","updateTableVisibility","on","e","STATE","hasItem","showCart","swal","wwdh","t","hideCart","code","keyCode","which","elem","target","parents","length","hasClass","event","productId","data","params","buildProductParamsByEventTarget","updateQuantityFields","quantity","updateCart","IS_WHOLESALE","handleAdd","onCheckout","handleAddOnCheckout","handleRemove","handleAddCoupon","handleClearCoupon","handleQuantityChange","handleAddQuantityChange","handleMinusEvent","handlePlusEvent","handleMinusAddEvent","handlePlusAddEvent","isModifiedSince","date","lastmod","Date","parseInt","window","localStorage","getItem","STORAGE_LASTMOD","isNaN","getTime","MIN_QUANTITY","MAX_QUANTITY","CHANGE_THROTTLE","removeClass","setTimeout","find","css","overflow","animated","addClass","location","this","val","show","$target","$removableRows","$parentRow","prevAll","each","i","row","add","fadeOut","remove","removeProductRow","parseQuantity","preventDefault","updateQuantity","updateQuantityAdd","offset","$quantityFields","clearTimeout","buildProductParams","updateQuantityFieldsAdd","quantityField","subProductIds","map","value","get","tagName","toLowerCase","join","cartProductId","action","parameters","callback","readyState","abort","setItem","ajax","url","cartParameters","extend","method","beforeSend","html","success","response","elements","k","v","setPrevQuantities","errorMessages","displayMessages","languageItems","error","buttonText","redirectUrl","warningMessages","warning","warning_button_text","successMessages","cart_updated","htmlElements","id","$updatedElement","RegExp","test","replaceWith","isWholesale","products","product","property","updateProducts","discountAlert","trigger","statusText","title","text","type","confirmButtonText","reload","hide","messages","console","log","href","jQuery"],"mappings":"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","file":"cart.min.js","sourcesContent":["/**\n * Cart műveletekhez a következő selectorok használhatók:\n *\n * - .js-cart-add: click-re hozzáadja a terméket a kosárhoz. További opciók:\n * - data-cart-subproduct-id-selector: Ha csomagot adunk a kosárhoz, akkor a hozzátartozó productId-ket tároló\n * inputmezők selectorja. Ez alapján lesz elküldve, hogy az adott csomaghoz, milyen termékeket választott be.\n * - .js-cart-change: quantity input-ra helyezhető, change eventre módosítja a kosárban levő termék mennyiségét.\n * - .js-cart-minus / .js-cart-plus: click-re növeli a kapcsolódó quantity mező értékét\n * (Ennek class-a: js-cart-product-quantity-{productId}). Ha a quantity input rendelkezik a js-cart-change classzal, akkor\n * módosítja a kosárban levő termék mennyiséget is.\n * - .js-cart-remove: törli a terméket, és az elem parentjét (.js-cart-row-{productId}), ami tartalmazza a terméket.\n * - .js-cart-add-coupon: click-re hozzáadja a data-cart-coupon-field-selector attribútumban definiált inputban\n * levő kupont a cart-hoz.\n *\n *\n * A fenti selectorokat tartalmazó elemek data attribútumai:\n * - data-cart-product-id: A kapcsolódó product ID. Kötelező megadni!\n * - data-cart-quantity-field-selector: opcionális, a mennyiséget tartalmazó input mező selectorja.\n * - data-cart-quantity: opcionális, a termék mennyisége (nincs figyelembe véve, ha van selector megadva).\n */\nvar Cart = (function ($) {\n 'use strict';\n\n var api = {\n init: function () {\n updateTableVisibility();\n initCartToggle();\n bindEvenHandlers();\n },\n /**\n * @param {Date} date\n *\n * @returns {Boolean}\n */\n isModifiedSince: function (date) {\n var lastmod = new Date(parseInt(window.localStorage.getItem(STORAGE_LASTMOD), 10));\n\n if (!lastmod || isNaN(lastmod.getTime())) {\n return false;\n }\n\n return lastmod.getTime() > date.getTime();\n }\n },\n /**\n * @var {XMLHttpRequest}\n */\n currentXhr,\n updateTimerId,\n MIN_QUANTITY = 1,\n MAX_QUANTITY = 100000,\n CHANGE_THROTTLE = 200,\n STORAGE_LASTMOD = 'cart_lastmod',\n IS_WHOLESALE = false,\n STATE = 'closed';\n\n function bindEvenHandlers() {\n var $body = $('body');\n var touchedTriggered = false;\n // $body.on('touchstart', '.js-cart-add', function (event) {\n // touchedTriggered = true;\n // handleAdd(event);\n // });\n // $body.on('touchstart', '.js-cart-add-on-checkout', function (event) {\n // touchedTriggered = true;\n // handleAddOnCheckout(event);\n // });\n $body.on('click', '.js-cart-add', function (event) {\n if (!touchedTriggered) {\n handleAdd(event);\n } else {\n touchedTriggered = false;\n }\n });\n\n $body.on('click', '.js-cart-add-on-checkout', function (event) {\n if (!touchedTriggered) {\n handleAddOnCheckout(event);\n } else {\n touchedTriggered = false;\n }\n });\n\n\n $body.on('click', '.js-cart-remove', handleRemove);\n $body.on('click', '.js-cart-add-coupon', handleAddCoupon);\n $body.on('click', '.js-cart-clear-coupon', handleClearCoupon);\n\n $body.on('change', '.js-cart-change', handleQuantityChange);\n $body.on('change', '.js-cart-add-input', handleAddQuantityChange);\n\n $body.on('click', '.js-cart-minus', handleMinusEvent);\n $body.on('click', '.js-cart-plus', handlePlusEvent);\n\n $body.on('click', '.js-cart-minus-add', handleMinusAddEvent);\n $body.on('click', '.js-cart-plus-add', handlePlusAddEvent);\n\n\n }\n\n function hideCart() {\n $('#cart-sidebar .cart-list').removeClass('active');\n setTimeout(function () {\n $('#cart-sidebar').removeClass('active');\n $('#cart-sidebar').find('.cart-btn a.button').removeClass('hovered');\n $('body').css({'overflow': 'initial'});\n }, 300);\n STATE = 'closed';\n }\n function showCart(animated) {\n animated = animated || false;\n $('body').css({'overflow': 'hidden'});\n $('#cart-sidebar').addClass('active');\n if (animated) {\n $('#cart-sidebar .cart-list').addClass('animated');\n } else {\n $('#cart-sidebar .cart-list').removeClass('animated');\n }\n $('#cart-sidebar .cart-list').addClass('active');\n $('#cart-sidebar').find('.cart-btn a.button').addClass('hovered');\n STATE = 'opened';\n }\n\n function initCartToggle() {\n $(\"body\").on('click', '#cart', function (e) {\n if (STATE === 'closed') {\n if (hasItem()){\n showCart(true);\n } else {\n swal(wwdh.t('A kosara üres!'), null, 'info');\n }\n } else {\n hideCart();\n }\n });\n $(\"body\").on('keyup', function(e){\n var code = e.keyCode || e.which;\n if (code === 27 && STATE === 'opened'){\n hideCart();\n }\n });\n $(\"body\").on('click', '#cart-sidebar', function(e) {\n var elem = $(e.target);\n if (elem.parents('.cart-list').length === 0 || elem.parents('.cart-hide').length > 0 || elem.hasClass('cart-hide')){\n hideCart();\n }\n });\n }\n\n function hasItem()\n {\n return $('#cart-sidebar .cart-item-product').length > 0;\n }\n\n function handleAdd(event) {\n\n var productId = $(event.target).data('cart-product-id'),\n params = buildProductParamsByEventTarget($(event.target));\n\n //alert(productId);\n updateQuantityFields(productId, params.quantity);\n updateCart('add', params, function () {\n if (!IS_WHOLESALE) {\n showCart(true);\n }\n });\n }\n\n function handleAddOnCheckout(event) {\n var productId = $(event.target).data('cart-product-id'),\n params = buildProductParamsByEventTarget($(event.target));\n updateQuantityFields(productId, params.quantity);\n params.onCheckout = 1;\n updateCart('add', params, function () {\n //displayMessages('success', [wwdh.t('A termék sikeresen hozzáadva a kosárhoz!')],[wwdh.t('Extra kedvezmény')]);\n });\n }\n\n\n function handleAddCoupon() {\n window.location = '/cart/default/index?coupon-redeem=' + $($(this).data('cart-coupon-field-selector')).val();\n // updateCart('addCoupon', {\n // couponCode: $($(this).data('cart-coupon-field-selector')).val()\n // }, function (result) {\n // if (result) {\n // $('#coupon-code-form').hide();\n // }\n // });\n }\n\n function handleClearCoupon() {\n updateCart('clearCoupon', {}, function () {\n $('#coupon-code-form').show();\n });\n }\n\n function handleRemove() {\n var $target = $(this);\n\n updateCart('remove', buildProductParamsByEventTarget($target), function () {\n removeProductRow($target);\n });\n }\n\n function removeProductRow($target) {\n var $removableRows,\n $parentRow;\n\n if ($target.parents('.stacktable').length && !$target.parents('.js-cart-row').length) {\n $parentRow = $target.parents('tr:eq(0)');\n $removableRows = $parentRow;\n\n $parentRow.prevAll().each(function (i, row) {\n $removableRows = $removableRows.add(row);\n\n // Az első spacer után megállunk, megvan minden sor az adott termékhez.\n if ($(row).hasClass('st-space')) {\n return false;\n }\n });\n } else {\n $removableRows = $('.js-cart-row-' + $target.data('cart-product-id'));\n }\n\n $removableRows.fadeOut(function () {\n $(this).remove();\n\n updateTableVisibility();\n });\n }\n\n function handleQuantityChange() {\n var productId = $(this).data('cart-product-id');\n updateQuantityFields(productId, $(this).val());\n updateCart('change', buildProductParamsByEventTarget($(this)));\n }\n\n function handleAddQuantityChange() {\n $(this).val(parseQuantity($(this).val()));\n }\n\n function handlePlusEvent(e) {\n e.preventDefault();\n updateQuantity($(this).data('cart-product-id'), 1);\n }\n\n function handleMinusEvent(e) {\n e.preventDefault();\n updateQuantity($(this).data('cart-product-id'), -1);\n }\n\n function handlePlusAddEvent(e) {\n e.preventDefault();\n updateQuantityAdd($(this).data('cart-product-id'), 1);\n }\n\n function handleMinusAddEvent(e) {\n e.preventDefault();\n updateQuantityAdd($(this).data('cart-product-id'), -1);\n }\n\n function updateQuantity(productId, offset) {\n var $quantityFields = $('.js-cart-product-quantity-' + productId),\n quantity = parseQuantity(parseInt($quantityFields.val(), 10) + offset);\n\n updateQuantityFields(productId, quantity);\n\n if ($quantityFields.hasClass('js-cart-change')) {\n clearTimeout(updateTimerId);\n\n updateTimerId = setTimeout(function () {\n updateCart('change', buildProductParams(productId, quantity));\n }, CHANGE_THROTTLE);\n }\n }\n\n function updateQuantityAdd(productId, offset) {\n var $quantityFields = $('.js-cart-product-quantity-add-' + productId),\n quantity = parseQuantity(parseInt($quantityFields.val(), 10) + offset);\n updateQuantityFieldsAdd(productId, quantity);\n }\n\n /**\n * Frissíti a termékhez tartozó összes quantity mezőt (mivel a stackable() többet hoz létre).\n *\n * @param {Number} productId\n * @param {Number} quantity\n */\n function updateQuantityFields(productId, quantity) {\n $('.js-cart-product-quantity-' + productId).val(parseQuantity(quantity));\n }\n\n /**\n * Frissíti a termékhez tartozó összes quantity mezőt (mivel a stackable() többet hoz létre).\n *\n * @param {Number} productId\n * @param {Number} quantity\n */\n function updateQuantityFieldsAdd(productId, quantity) {\n $('.js-cart-product-quantity-add-' + productId).val(parseQuantity(quantity));\n }\n\n /**\n * @param {mixed} quantity\n *\n * @return {Number}\n */\n function parseQuantity(quantity) {\n quantity = parseInt(quantity, 10);\n\n if (isNaN(quantity)) {\n return 1;\n }\n\n if (quantity < MIN_QUANTITY) {\n return MIN_QUANTITY;\n } else if (quantity > MAX_QUANTITY) {\n return MAX_QUANTITY;\n }\n\n return quantity;\n }\n\n function buildProductParamsByEventTarget($target) {\n var quantityField = $target.data('cart-quantity-field-selector'),\n subProductIds = $($target.data('cart-subproduct-id-selector')).map(function () {\n return this.value;\n }).get(),\n quantity;\n\n if (quantityField) {\n quantity = $(quantityField).val();\n } else if ($target[0].tagName.toLowerCase() === 'input') {\n quantity = $target.val();\n } else {\n quantity = $target.data('cart-quantity');\n }\n\n return buildProductParams($target.data('cart-product-id'), quantity, subProductIds);\n }\n\n /**\n *\n * @param {String} productId\n * @param {Number} quantity\n * @param {Array} subProductIds [optional]\n */\n function buildProductParams(productId, quantity, subProductIds) {\n if (subProductIds && subProductIds.length) {\n productId += '-' + subProductIds.join('-');\n }\n\n return {\n cartProductId: productId,\n quantity: parseQuantity(quantity)\n };\n }\n\n /**\n * @param {String} action\n * @param {Object} parameters\n * @param {Function} callback [optional]\n */\n function updateCart(action, parameters, callback) {\n //alert('updateCart');\n if (currentXhr && currentXhr.readyState !== 4) {\n currentXhr.abort();\n }\n\n window.localStorage.setItem(STORAGE_LASTMOD, '' + new Date().getTime());\n //alert('setStorage');\n currentXhr = $.ajax({\n url: '/cart/default/update',\n data: {\n cartParameters: $.extend(parameters, {\n action: action\n })\n },\n method: 'POST',\n beforeSend: function () {\n $('#cart').addClass('updating');\n $('#cart-add-result').html('');\n },\n success: function (response) {\n //alert('ajaxSuccess');\n if (!response.success) {\n if (response.errorMessages.length) {\n displayMessages('error', response.errorMessages, response.languageItems.error,response.buttonText, response.redirectUrl);\n } else if (response.warningMessages.length) {\n displayMessages('warning', response.warningMessages, response.languageItems.warning, response.languageItems.warning_button_text, '');\n }\n resetQuantitiesToPrev(parameters.cartProductId);\n } else {\n // glamiTracking(parameters, response, action);\n setPrevQuantities(parameters.cartProductId);\n }\n\n displayMessages('success', response.successMessages, response.languageItems.cart_updated,'','');\n updateHtmlElements(response.htmlElements);\n IS_WHOLESALE = response.isWholesale;\n updateProducts(response.products);\n updateTableVisibility();\n if (response.discountAlert) {\n $('body').trigger('choose-discount-type');\n }\n\n if (callback) {\n callback();\n }\n },\n error: function (response) {\n if (response.statusText !== 'abort') {\n swal({\n title: wwdh.t('Sajnáljuk, valami hiba történt!'),\n text: wwdh.t('Kérjük, frissítsd az oldalt, és próbáld újra!'),\n type: \"error\",\n confirmButtonText: wwdh.t('Frissítés')\n },function(){\n location.reload();\n });\n }\n }\n });\n }\n\n function resetQuantitiesToPrev(cartProductId) {\n $('[data-cart-product-id=\"' + cartProductId + '\"][data-prev-quantity]').each(function (k, v) {\n $(v).val($(v).data('prev-quantity'));\n })\n }\n\n function getPrevQuantities(cartProductId) {\n return $('[data-cart-product-id=\"' + cartProductId + '\"][data-prev-quantity]').data('prev-quantity');\n }\n function setPrevQuantities(cartProductId) {\n $('[data-cart-product-id=\"' + cartProductId + '\"][data-prev-quantity]').each(function (k, v) {\n $(v).data('prev-quantity', $(v).val());\n })\n }\n\n /**\n * @param {Object} elements\n */\n function updateHtmlElements(elements) {\n $.each(elements, function (id, value) {\n var $updatedElement = $('#' + id);\n\n if (new RegExp('id\\s*=\\s*[\\'\"]' + id + '[\\'\"]', 'i').test(value)) {\n $updatedElement.replaceWith(value);\n if (id === 'cart-sidebar' && STATE === 'opened') {\n if (hasItem()){\n showCart(false);\n } else {\n hideCart();\n }\n }\n } else if ($updatedElement.length && $updatedElement[0].tagName.toLowerCase() === 'input') {\n } else {\n $updatedElement.html(value);\n }\n });\n }\n\n /**\n *\n * @param {Array} products\n */\n function updateProducts(products) {\n var i,\n product;\n\n for (i = 0; i < products.length; ++i) {\n product = products[i];\n\n $.each(product, function (property, value) {\n var $updatedElement = $('.js-cart-product-' + property + '-' + product.id);\n\n if ($updatedElement.length && $updatedElement[0].tagName.toLowerCase() === 'input') {\n } else {\n $updatedElement.html(value);\n }\n });\n }\n }\n\n function updateTableVisibility() {\n if ($('#cart').data('item-count')) {\n $('.js-cart-notempty').show();\n $('.js-cart-empty').hide();\n } else {\n $('.js-cart-notempty').hide();\n $('.js-cart-empty').show();\n }\n }\n\n\n /**\n * @param {String} type\n * @param {Array} messages\n * @param {String} title\n * @param {String} confirmButtonText\n */\n function displayMessages(type, messages, title, confirmButtonText, redirectUrl) {\n if (!messages.length) {\n return;\n }\n if (!confirmButtonText) {\n confirmButtonText = 'OK';\n }\n\n swal({\n html: true,\n title: title,\n text: messages.join('
'),\n type: type,\n confirmButtonText: confirmButtonText,\n },function(){\n if (redirectUrl != ''){\n console.log(redirectUrl);\n location.href = redirectUrl;\n }\n });\n }\n\n function glamiTracking(params, response, action)\n {\n var recentQuantity = params.quantity;\n var prevQuantity = getPrevQuantities(params.cartProductId);\n if(recentQuantity > prevQuantity || action === 'add') {\n var glamiParams = response.glami;\n glami(\n 'track',\n 'AddToCart',\n {\n consent: 1, // The user's consent to the storage analytical cookies on their devices. [0 = no; 1 = yes]\n item_ids: [glamiParams.id], // product ID currently added to a cart. Use the same ID as you use in the feed (ITEM_ID).\n value: glamiParams.price, // product price\n currency: glamiParams.currency // product price currency\n }\n );\n }\n }\n\n return api;\n})(jQuery);\n\njQuery(function () {\n Cart.init();\n});"]}