vendor: 2,407 bytes, lines 1-9
1/* creation date: Thu, 24 Sep 2026 07:02:13 GMT 2concat references: 3https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790222548547%2Fjs%2FloadAlertNotification.js 4https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790222548547%2Fjs%2FloadGtm.js 5https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790222548547%2Fjs%2Fmain.js 6https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790222548547%2Fjs%2Fcommon.js 7*/ 8/*! https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790222548547%2Fjs%2FloadAlertNotification.js */ 9!function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}__webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function(){return module.default}:function(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s="./cartridges/app_coremodel_storefront/cartridge/client/default/js/loadAlertNotification.js")}({
9"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = function (element, type, content) {\n if (element !== null) {\n const alertNotification = element;\n alertNotification.classList.remove('alert', 'information', 'success', 'warning', 'error');\n alertNotification.setAttribute('aria-hidden', false);\n content !== undefined ? alertNotification.querySelector('.inner-content').textContent = content : false;\n setTimeout(() => { \n alertNotification.classList.remove('d-none');\n alertNotification.classList.add('alert', type);\n }, 10);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js?")},
vendor: 2,261 bytes, lines 9-12
9"./cartridges/app_coremodel_storefront/cartridge/client/default/js/loadAlertNotification.js":function(module,exports,__webpack_require__){eval('window.displayNotification = __webpack_require__(/*! ./ds/displayNotification */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js");\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/loadAlertNotification.js?')}}); 10var __fstrzSep=""; 11/*! https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790222548547%2Fjs%2FloadGtm.js */ 12!function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}__webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function(){return module.default}:function(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s="./cartridges/app_coremodel_storefront/cartridge/client/default/js/loadGtm.js")}({
12"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js":function(module,exports,__webpack_require__){"use strict";eval("\n// set all GTM events here\nvar GTMHelper = __webpack_require__(/*! ./gtm/GTMHelper.js */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js\");\nvar processInclude = __webpack_require__(/*! ./util */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js\");\nprocessInclude(__webpack_require__(/*! ./gtm/pwa-analytics.js */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js\"));\n\nvar gtm = {};\nvar $cache = {};\n\nfunction initializeCache() {\n $cache.document = $(document);\n}\n\nfunction isDatalayerDefined() {\n return typeof dataLayer !== 'undefined';\n}\n\nfunction removeDataLayer (event, template) {\n if (!isDatalayerDefined()) {\n return;\n }\n if (event) {\n var index = null;\n for (var i = 0; i < dataLayer.length && index == null; i++) {\n if (template != null) {\n if (dataLayer[i].event === event && dataLayer[i].layer.template === template)\n index = i;\n } else {\n if (dataLayer[i].event === event)\n index = i;\n }\n }\n if (index != null)\n dataLayer.splice(index, 1);\n }\n}\n\nfunction findDataLayer (event, template) {\n if (!isDatalayerDefined()) {\n return;\n }\n if (event) {\n for (var i = 0; i < dataLayer.length; i++) {\n if (template != null) {\n if (dataLayer[i].event === event && dataLayer[i].layer.template === template)\n return (dataLayer[i]);\n } else {\n if (dataLayer[i].event === event)\n return (dataLayer[i]);\n }\n }\n }\n return null;\n}\n\nfunction fillDataLayer (data){\n\tif (!isDatalayerDefined()) {\n return;\n }\n\n if (data)\n dataLayer.push(data);\n // dataLayer.push({\n // \"event\": data.event,\n // \"page\": data.page,\n // \"eeAction\": data.eeAction,\n // \"currencyCode\": data.currency,\n // \"checkoutStep\": data.checkoutStep,\n // \"checkoutType\": data.checkoutType,\n // \"products\": data.products\n // });\n return;\n}\n\nfunction fillSecondaryDataLayer(data){\n\tif (!isDatalayerDefined()) {\n return;\n }\n\n\tdataLayer.push({\n\t\t\"event\": data.event2,\n\t\t\"checkoutStep\": data.prevcheckoutStep,\n\t\t\"checkoutOption\": data.checkoutOption\n\t});\n}\n\nfunction initializeEvents() {\n $cache.document.on('paymentStepGTM', function(event, data) {\n \tdata.event='virtualPageview';\n \tdata.page='/payment';\n\t\tdata.checkoutStep='3';\n\t\tdata.prevcheckoutStep='2';\n\n\t\tfillDataLayer(data);\n \tfillSecondaryDataLayer(data);\n\n return;\n });\n}\n\nfunction clicCrossSell_GTM($click) {\n var title = '';\n var $title = $click.closest('.product-carousel').siblings('.title');\n if ($title.length === 0)\n $title = $click.closest('#slot-pushproduct').find('.title-reco');\n if ($title.length === 0) {\n \n $title = $click.closest('.container-reco').find('.swipper-title');\n }\n if ($title.length != 0) {\n var calloutmsg = $title.data('calloutmsg');\n var recommender = $title.data('recommender');\n title = calloutmsg;\n if (recommender)\n title = title + '/' + recommender;\n }\n \n var url = $click.data('gtm-url');\n var pid = $click.data('pid');\n $.ajax({\n url: url,\n data: {\n pid: pid\n },\n async: false,\n method: 'GET',\n success: function (data) {\
12n let GTMclicCrossSell = __webpack_require__(/*! ./gtm/util/actions/clicCrossSell */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js\");\n GTMclicCrossSell.getDataLayerForAction({\n product: data.product,\n title: title\n });\n }\n });\n}\n\nmodule.exports = {\n fillDataLayer : fillDataLayer,\n removeDataLayer : removeDataLayer,\n findDataLayer: findDataLayer,\n init : function() {\n initializeCache();\n initializeEvents();\n $cache.document.trigger('GTMReady');\n\n $(document).on('click', '.slotReco .clickproduct', function(){\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.slotReco .product-tile .tile-body .pdp-link .link', function(){\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.slotReco .product-tile .tile-body .color-swatches', function(){\n clicCrossSell_GTM($(this));\n });\n $(document).on('click', '.container-reco .clickproduct', function(){\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.container-reco .product-tile .tile-body .pdp-link .link', function(){\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.container-reco .product-tile .tile-body .color-swatches', function(){\n clicCrossSell_GTM($(this));\n });\n \n // Reco dans le mini-panier\n $(document).on('click', '.js-minicart-body .clickproduct', function () {\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.js-minicart-body .product-tile .tile-body .pdp-link .link', function () {\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.js-minicart-body .product-tile .tile-body .color-swatches', function () {\n clicCrossSell_GTM($(this));\n });\n }\n}\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js?")},
12"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js":function(module,exports){eval('getProductJsonBase = function (Product, price, quantity, addToCartOrigin) {\n if (Product.price) {\n var discount = Product.price.list ? Product.price.list.value : price\n discount = discount - price;\n if (discount != 0)\n discount = Math.round(discount * 100) / 100;\n }\n var rc = null;\n var rct = null;\n var rct_sku = \'\';\n if (Product.productType == \'variationGroup\') {\n rc = Product.id.toLowerCase();\n rct_sku = \'\';\n //not for layer\n } else if (Product.productType == \'variant\') {\n rct = Product.id.toLowerCase();\n rct_sku = Product.rctSku ? Product.rctSku : \'\';\n if (Product.variationGroupID) {\n rc = Product.variationGroupID;\n }\n }\n \n let r = Product.masterID || Product.id;\n let name = Product.productName ? Product.productName.toLowerCase() : "";\n let category = Product.primaryCategory && Product.primaryCategory.category ? Product.primaryCategory.category.toLowerCase() : null;\n let subCategory = Product.primaryCategory && Product.primaryCategory.subCategory ? Product.primaryCategory.subCategory.toLowerCase() : null;\n let subsubCategory = Product.primaryCategory && Product.primaryCategory.subSubCategory ? Product.primaryCategory.subSubCategory.toLowerCase() : null;\n let subsubsubCategory = Product.primaryCategory && Product.primaryCategory.subSubSubCategory ? Product.primaryCategory.subSubSubCategory.toLowerCase() : null;\n let categoryName = Product.primaryCategory && Product.primaryCategory.categoryname ? Product.primaryCategory.categoryname.toLowerCase() : null;\n let subCategoryName = Product.primaryCategory && Product.primaryCategory.subCategoryname ? Product.primaryCategory.subCategoryname.toLowerCase() : null;\n let subsubCategoryName = Product.primaryCategory && Product.primaryCategory.subSubCategoryname ? Product.primaryCategory.subSubCategoryname.toLowerCase() : null;\n let subsubsubCategoryName = Product.primaryCategory && Product.primaryCategory.subSubSubCategoryname ? Product.primaryCategory.subSubSubCategoryname.toLowerCase() : null;\n let gender = Product.sexe ? Product.sexe.toLowerCase() : "";\n let season = Product.season ? Product.season.toLowerCase() : "";\n let price_flag = Product.flagsPromo && Product.flagsPromo.flagPromoName ? Product.flagsPromo.flagPromoName.toLowerCase() : "";\n let product_flag = [];\n let productset_id;\n let productset_products_number;\n\n \n if (Product.flagsPromo && Product.flagsPromo.tabOfFlags && Product.flagsPromo.tabOfFlags.length > 0) {\n for (var i = 0; i < Product.flagsPromo.tabOfFlags.length; i++) {\n product_flag.push(Product.flagsPromo.tabOfFlags[i].name.toLowerCase());\n }\n }\n\n var flagNewName;\n if (Product.flagsPromo && Product.flagsPromo.flagNewName) {\n flagNewName = Product.flagsPromo.flagNewName;\n }\n\n let brand = Product.brand ? Product.brand.toLowerCase() : "";\n let rating = Product.rating;\n\n let price_calcul = price;\n if (Product.productType !== \'set\') {\n if (Product.price.type != undefined && Product.price.type == "range") {\n price_calcul = Product.price.max.sales.values;\n } else {\n price_calcul = Product.price.sales.value;\n }\n }\n\n let unitpriceAti = price_calcul;\n let brandName = Product.brandName ? Product.brandName.toLowerCase() : "";\n let brandTitle = Product.brandTitle ? Product.brandTitle.toLowerCase() : "";\n\n let productJson = {\n "r": r,\n "rc": rc,\n "rct": rct,\n "rct_sku": rct_sku,\n "name": name,\n "category": category,\n "subCategory": subCategory,\n "subsubCategory": subsubCategory,\n "subsubsubCategory": subsubsubCategory,\n "category_label": categoryName,\n "subCategory_label": subCategoryName,\n "subsubCategory_label": subsubCategoryName,\n "subsubsubCategory_label": subsubsubCategoryName,\n "gender": gender,\n "season": season,\n "price_flag": price_flag,\n "product_flag": product_flag,\n "new_flag": flagNewName,\n "brand": brand,\n "brandName": brandName,\n "brandTitle": brandTitle,\n "rating": rating,\n "unitpriceAti": unitpriceAti,\n "discountAti": discount,\n "hasVideo": !!(Product.brightcoveVideos),\n "imageNumber": Product.images && Product.images.large ? Product.images.large.length : 0\n };\n\n if (Product.productType == \'set\') {\n productJson.productset_id = Product.id;\n productJson.productset_products_number = Product.individualProducts.length;\n }\n\n if (quantity) {\n productJson.quantity = quantity;\n }\n \n if(addToCartOrigin){\n productJson.addToCartOrigin = addToCartOrigin;\n }\n\n return productJson;\n},\n\n module.exports = {\n populateProduct: function (productLineItems, addQuantity, addToCartOrigin) {\n // Prepare default value\n addQuantity = addQuantity || false;\n for (let i in productLineItems) {\n let item = productLineItems[i].product;\n //let price = item.basePrice ? item.basePrice.getValue() : item.price.sales.decimalPrice.value;\n let price = null;\n\n if (item.price != null) {\n if (item.price.sales != null) {\n if (item.price.sales.type == "range") {\n price = item.price.max.sales.values;\n } else {\n price = item.price.sales.value;\n }\n }\n }\n\n let quantity = null;\n if (addQuantity) {\n quantity = item.quantity || parseInt(addQuantity);\n }\n return (getProductJsonBase(item, price, quantity, addToCartOrigin));\n }\n },\n }\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js?')},
12"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = {\n pwaInstalled: function() {\n window.addEventListener('appinstalled', function(evt) {\n let GTMPWAInstalled = __webpack_require__(/*! ./util/actions/pwaInstalled */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js\");\n GTMPWAInstalled.getDataLayerForAction();\n });\n },\n usePWA: function() {\n window.addEventListener('load', function () {\n\n let displayMode = 'browser tab';\n\n // Pour Safari sur IOs qui ne dispose pas de matchMedia\n if (navigator.standalone) {\n displayMode = 'standalone-ios';\n }\n \n if (window.matchMedia('(display-mode: standalone)').matches) {\n displayMode = 'standalone';\n }\n\n var hasPWA = displayMode.indexOf('standalone') != -1 ? 'yes' : 'no';\n let GTMhasPWA = __webpack_require__(/*! ./util/pages/pwa */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js\");\n GTMhasPWA.getDataLayerForPage({\n hasPWA : hasPWA\n });\n \n });\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js?")},
12"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\nvar GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\n\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "clic cross-sell",\n };\n\n params = params || {};\n\n data.e = [];\n\n var product = [];\n if (params.product){\n product = (GTMHelper.populateProduct([{product : params.product}], false));\n }\n data.e={\n category: \'cross-sell\',\n action: params.title.trim(),\n product: product\n };\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js?')},
12"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "pwa installed",\n };\n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js?')},
12"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js":function(module,exports,__webpack_require__){eval("var GTMHelper = __webpack_require__(/*! ../../GTMHelper */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js\");\nvar gtm = __webpack_require__(/*! ../../../gtm */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js\");\n\npopulateData = function (dataLayer, params) {\n if (dataLayer.env)\n dataLayer.env.hasPWA = params.hasPWA;\n}\n\nmodule.exports = {\n removeDataLayer : function()\n {\n gtm.removeDataLayer('pageview');\n },\n findDataLayer : function()\n {\n return gtm.findDataLayer('pageview');\n },\n getDataLayerForPage : function(params) {\n var dataLayer = this.findDataLayer();\n if (dataLayer)\n populateData(dataLayer, params);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js?")},
12"./cartridges/app_coremodel_storefront/cartridge/client/default/js/loadGtm.js":function(module,exports,__webpack_require__){eval('window.gtm = __webpack_require__(/*! ./gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/loadGtm.js?')},
vendor: 2,392 bytes, lines 12-15
12"./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = function (include) {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js?")}}); 13var __fstrzSep=""; 14/*! https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790222548547%2Fjs%2Fmain.js */ 15!function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}__webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function(){return module.default}:function(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s="./cartridges/app_coremodel_storefront/cartridge/client/default/js/main.js")}({
vendor: 431 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/_Symbol.js":function(module,exports,__webpack_require__){eval('var root = __webpack_require__(/*! ./_root */ "../storefront-reference-architecture/node_modules/lodash/_root.js");\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/_Symbol.js?')},
vendor: 1,326 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/_baseGetTag.js":function(module,exports,__webpack_require__){eval('var Symbol = __webpack_require__(/*! ./_Symbol */ "../storefront-reference-architecture/node_modules/lodash/_Symbol.js"),\n getRawTag = __webpack_require__(/*! ./_getRawTag */ "../storefront-reference-architecture/node_modules/lodash/_getRawTag.js"),\n objectToString = __webpack_require__(/*! ./_objectToString */ "../storefront-reference-architecture/node_modules/lodash/_objectToString.js");\n\n/** `Object#toString` result references. */\nvar nullTag = \'[object Null]\',\n undefinedTag = \'[object Undefined]\';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/_baseGetTag.js?')},
vendor: 645 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/_freeGlobal.js":function(module,exports,__webpack_require__){eval("/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../happychic-sfra-core-model/node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/_freeGlobal.js?")},
vendor: 1,500 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/_getRawTag.js":function(module,exports,__webpack_require__){eval('var Symbol = __webpack_require__(/*! ./_Symbol */ "../storefront-reference-architecture/node_modules/lodash/_Symbol.js");\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/_getRawTag.js?')},
vendor: 805 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/_objectToString.js":function(module,exports){eval("/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/_objectToString.js?")},
vendor: 620 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/_root.js":function(module,exports,__webpack_require__){eval("var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ \"../storefront-reference-architecture/node_modules/lodash/_freeGlobal.js\");\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/_root.js?")},
vendor: 6,780 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/debounce.js":function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(/*! ./isObject */ \"../storefront-reference-architecture/node_modules/lodash/isObject.js\"),\n now = __webpack_require__(/*! ./now */ \"../storefront-reference-architecture/node_modules/lodash/now.js\"),\n toNumber = __webpack_require__(/*! ./toNumber */ \"../storefront-reference-architecture/node_modules/lodash/toNumber.js\");\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/debounce.js?")},
vendor: 968 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/isObject.js":function(module,exports){eval("/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/isObject.js?")},
vendor: 857 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/isObjectLike.js":function(module,exports){eval("/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/isObjectLike.js?")},
vendor: 1,122 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/isSymbol.js":function(module,exports,__webpack_require__){eval("var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ \"../storefront-reference-architecture/node_modules/lodash/_baseGetTag.js\"),\n isObjectLike = __webpack_require__(/*! ./isObjectLike */ \"../storefront-reference-architecture/node_modules/lodash/isObjectLike.js\");\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/isSymbol.js?")},
vendor: 842 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/now.js":function(module,exports,__webpack_require__){eval('var root = __webpack_require__(/*! ./_root */ "../storefront-reference-architecture/node_modules/lodash/_root.js");\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/now.js?')},
vendor: 2,044 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/toNumber.js":function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(/*! ./isObject */ \"../storefront-reference-architecture/node_modules/lodash/isObject.js\"),\n isSymbol = __webpack_require__(/*! ./isSymbol */ \"../storefront-reference-architecture/node_modules/lodash/isSymbol.js\");\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/toNumber.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/adrenalead/cartEventsAdrenalead.js":function(module,exports){eval("module.exports = {\n\n //If we have a specific product (in case of addToCart) we use it or if we don't have a specific product we take one in the cart\n addedToCart: function(cartModel, product) {\n try{\n if(window['NADZ_TRIGGERS'] != 'undefined') {\n var actions = window['NADZ_TRIGGERS'].getNadzTriggerActions();\n actions.handleActions([\n ['setProduitsDansPanier', true]\n ]);\n }\n else {\n var _nAdzqTriggers = _nAdzqTriggers || [];\n _nAdzqTriggers.push(['handleActions', [\n ['setProduitsDansPanier', true]\n ]]);\n }\n }catch(error){\n console.log(error);\n }\n },\n\n confirmOrder: function(orderModel) {\n try{\n var order = orderModel;\n var orderTotal = $('.grand-total-sum').html().replace(' â¬','');\n var orderNo = $('#orderTotalText').html();\n var _nAdztr = _nAdztr || [];\n (function () {\n _nAdztr.push([\"setAdvertiserId\", \"2990\"]);\n _nAdztr.push([\"setTransactionId\", orderNo]);\n _nAdztr.push([\"setAmount\", orderTotal]);\n _nAdztr.push([\"setTr\"]);\n var u = \"https://notifpush.com/scripts/\";\n var s = document.createElement(\"script\");\n s.type = \"text/javascript\";\n s.defer = true;\n s.async = true;\n s.src = u + \"nadz-tr.js\";\n var p = document.getElementsByTagName(\"script\")[0];\n p.parentNode.insertBefore(s, p);\n })();\n if (window['NADZ_TRIGGERS'] != undefined) {\n var actions = window['NADZ_TRIGGERS'].getNadzTriggerActions();\n actions.handleActions([\n ['setProduitsDansPanier', false],\n ['setMontantConversion', orderTotal]\n ]);\n }\n else {\n var _nAdzqTriggers = _nAdzqTriggers || [];\n _nAdzqTriggers.push(['handleActions', [\n ['setProduitsDansPanier', false],\n ['setMontantConversion', orderTotal]\n ]]);\n }\n }catch(error){\n console.log(error);\n }\n }\n\n};\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/adrenalead/cartEventsAdrenalead.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/batch/cartEventsBatch.js":function(module,exports){eval('\nfunction getProductsEventInfos(Product) {\n\n let price = null;\n\n if (Product.price != null) {\n if (Product.price.sales != null) {\n if (Product.price.sales.type == "range") {\n price = Product.price.max.sales.values;\n } else {\n price = Product.price.sales.value;\n }\n }\n }\n\n if (Product.price && price) {\n var discount = Product.price.list ? Product.price.list.value : price\n discount = discount - price;\n if (discount != 0)\n discount = Math.round(discount * 100) / 100;\n }\n var rc = null;\n var rct = null;\n if (Product.productType == \'variationGroup\') {\n rc = Product.id.toLowerCase();\n //not for layer\n } else if (Product.productType == \'variant\') {\n rct = Product.id.toLowerCase();\n if (Product.variationGroupID) {\n rc = Product.variationGroupID;\n }\n }\n \n let r = Product.masterID || Product.id;\n let name = Product.productName ? Product.productName.toLowerCase() : "";\n let category = Product.primaryCategory && Product.primaryCategory.category ? Product.primaryCategory.category.toLowerCase() : null;\n let subCategory = Product.primaryCategory && Product.primaryCategory.subCategory ? Product.primaryCategory.subCategory.toLowerCase() : null;\n let subsubCategory = Product.primaryCategory && Product.primaryCategory.subSubCategory ? Product.primaryCategory.subSubCategory.toLowerCase() : null;\n let gender = Product.sexe ? Product.sexe.toLowerCase() : "";\n let season = Product.season ? Product.season.toLowerCase() : "";\n \n let price_calcul = price;\n if (Product.productType !== \'set\') {\n if (Product.price.type == "range") {\n price_calcul = Product.price.max.sales.values;\n } else {\n price_calcul = Product.price.sales.value;\n }\n }\n let unitpriceAti = price_calcul;\n\n var quantityProduct = null;\n if (Product.selectedQuantity) {\n quantityProduct = Product.selectedQuantity;\n } else if (Product.quantity) {\n quantityProduct = Product.quantity;\n }\n\n let eventObj = {\n "product_r": r,\n "product_rc": rc,\n "product_rct": rct,\n "product_name": name,\n "product_category": category,\n "product_subCategory": subCategory,\n "product_subsubCategory": subsubCategory,\n "product_gender": gender,\n "product_season": season,\n "product_unitpriceAti": unitpriceAti,\n "product_discountAti": discount,\n "product_quantity": quantityProduct\n };\n\n return eventObj;\n}\n\n\nmodule.exports = {\n\n //If we have a specific product (in case of addToCart) we use it or if we don\'t have a specific product we take one in the cart\n addedToCart: function(cartModel, product) {\n try{\n window.didomiOnReady = window.didomiOnReady || [];\n window.didomiOnReady.push(function (Didomi) { \n Didomi.getObservableOnUserConsentStatusForVendor(\'c:batch\')\n .filter(function (status) { return status !== undefined })\n .subscribe(function (consentStatus) {\n if (consentStatus === true) {\n\n batchSDK(function (api) {\n\n if (!product && cartModel.items && cartModel.items.length > 0) {\n product = cartModel.items[0];\n }\n \n var trackingObj = {};\n if (product) {\n trackingObj = getProductsEventInfos(product);\n }\n \n if (cartModel.customerCodeStl) {\n trackingObj["user_id_unencrypted"] = cartModel.customerCodeStl;\n }\n\n var productUrlBatch = null;\n if (product && product.productPageUrl) {\n productUrlBatch = {\n type: api.eventAttributeTypes.URL,\n value: product.productPageUrl,\n } \n }\n\n trackingObj["product_url"] = productUrlBatch;\n trackingObj["$label"] = trackingObj.product_category;\n \n api.trackEvent("add_to_cart", \n {\n //name: "ue.added_to_cart",\n attributes : trackingObj\n });\n\n });\n }\n });\n });\n } catch(error) {}\n }
15,\n\n cancelledCart: function() {\n try{\n window.didomiOnReady = window.didomiOnReady || [];\n window.didomiOnReady.push(function (Didomi) { \n Didomi.getObservableOnUserConsentStatusForVendor(\'c:batch\')\n .filter(function (status) { return status !== undefined })\n .subscribe(function (consentStatus) {\n if (consentStatus === true) {\n\n batchSDK(function (api) { \n api.trackEvent("cancelled_cart");\n });\n }\n });\n });\n } catch(error) {}\n },\n\n addedToWishList : function(customercode, product) {\n try {\n window.didomiOnReady = window.didomiOnReady || [];\n window.didomiOnReady.push(function (Didomi) { \n Didomi.getObservableOnUserConsentStatusForVendor(\'c:batch\')\n .filter(function (status) { return status !== undefined })\n .subscribe(function (consentStatus) {\n if (consentStatus === true) {\n\n batchSDK(function (api) {\n var trackingObj = {};\n\n product ? trackingObj = getProductsEventInfos(product) : null;\n customercode ? trackingObj["user_id_unencrypted"] = customercode : trackingObj["user_id_unencrypted"] = null;\n\n var productUrlBatch = null;\n if (product && product.productPageUrl) {\n productUrlBatch = {\n type: api.eventAttributeTypes.URL,\n value: product.productPageUrl,\n } \n }\n\n trackingObj["product_url"] = productUrlBatch;\n \n api.trackEvent("added_to_wishlist", {\n name: "ue.added_to_wishlist",\n user_id_unencrypted: customercode,\n label: trackingObj.product_category,\n attributes : trackingObj\n });\n });\n }\n });\n });\n } catch(error){ }\n }\n\n};\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/batch/cartEventsBatch.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/cart/approachingDiscounts.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n\nmodule.exports = {\n\n/**\n * re-renders the approaching discount messages\n * @param {Object} approachingDiscounts - updated approaching discounts for the cart\n */\n updateApproachingDiscounts: function(approachingDiscounts) {\n if (approachingDiscounts) {\n if (approachingDiscounts.subTotal < approachingDiscounts.threshold) {\n $('.single-approaching-discount').html(approachingDiscounts.approachingPromoMessage);\n $('#progress').removeClass('full');\n if (approachingDiscounts.subTotal >= approachingDiscounts.minimumForSlotDisplay) {\n $('#cart-recommendation-freeDelivery').removeClass('d-none');\n } else {\n $('#cart-recommendation-freeDelivery').addClass('d-none');\n }\n } else {\n $('.single-approaching-discount').html(approachingDiscounts.reachedPromoMessage);\n $('#progress').addClass('full');\n $('#cart-recommendation-freeDelivery').addClass('d-none');\n }\n $('#progress').val(approachingDiscounts.percentage);\n }\n }\n};\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/cart/approachingDiscounts.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/cart/cart.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar base = __webpack_require__(/*! ../product/base */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/base.js\");\nvar approachingDiscounts = __webpack_require__(/*! ../cart/approachingDiscounts */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/cart/approachingDiscounts.js\");\nvar detailJS = __webpack_require__(/*! ../product/detail */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/detail.js\");\nlet cartEventsBatch = __webpack_require__(/*! ../batch/cartEventsBatch */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/batch/cartEventsBatch.js\");\nlet cartEventsAdrenalead = __webpack_require__(/*! ../adrenalead/cartEventsAdrenalead */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/adrenalead/cartEventsAdrenalead.js\");\n\nif (document.querySelector('.promo-code-form input') !== null) {\n const inputCodePromo = document.querySelector('.promo-code-form input').closest('.ocs-input');\n if (inputCodePromo !== null) {\n inputCodePromo.addEventListener('click', function(e) {\n e.currentTarget.querySelector('input').focus();\n })\n }\n}\n\n/**\n * appends params to a url\n * @param {string} url - Original url\n * @param {Object} params - Parameters to append\n * @returns {string} result url with appended parameters\n */\nfunction appendToUrl(url, params) {\n var newUrl = url;\n newUrl += (newUrl.indexOf('?') !== -1 ? '&' : '?') + Object.keys(params).map(function (key) {\n return key + '=' + encodeURIComponent(params[key]);\n }).join('&');\n\n return newUrl;\n}\n\n\n/**\n * Add a product line item to the product list.\n * Originally made for gift wrap, can be extended to more\n * @param {Object} data - AJAX response from the server\n */\nfunction addProductlineItem(data) {\n $('#cartPage .product-info').first().before(data.productCardHtml);\n $('#miniCartModal .product-info').first().before(data.productCardHtmlLayer);\n}\n\n/**\n * Updates the availability of a product line item\n * @param {Object} data - AJAX response from the server\n * @param {string} uuid - The uuid of the product line item to update\n */\nfunction updateAvailability(data, uuid) {\n var lineItem;\n var messages = '';\n\n for (var i = 0; i < data.items.length; i++) {\n if (data.items[i].UUID === uuid) {\n lineItem = data.items[i];\n break;\n }\n }\n\n $('.availability-' + lineItem.UUID).empty();\n\n if (lineItem.availability) {\n if (lineItem.availability.messages) {\n lineItem.availability.messages.forEach(function (message) {\n messages += '<p class=\"line-item-attributes\">' + message + '</p>';\n });\n }\n\n if (lineItem.availability.inStockDate) {\n messages += '<p class=\"line-item-attributes line-item-instock-date\">'\n + lineItem.availability.inStockDate\n + '</p>';\n }\n }\n\n $('.availability-' + lineItem.UUID).html(messages);\n}\n\n/**\n * Finds an element in the array that matches search parameter\n * @param {array} array - array of items to search\n * @param {function} match - function that takes an element and returns a boolean indicating if the match is made\n * @returns {Object|null} - returns an element of the array that matched the query.\n */\nfunction findItem(array, match) {\n for (var i = 0, l = array.length; i < l; i++) {\n if (match.call(this, array[i])) {\n return array[i];\n }\n }\n return null;\n}\n\n/**\n * Updates details of a product line item\n * @param {Object} data - AJAX response from the server\n * @param {string} uuid - The uuid of the product line item to update\n */\nfunction updateProductDetails(data, uuid) {\n var lineItem = findItem(data.cartModel.items, function (item) {\n return item.UUID === uuid;\n });\n\n if (lineItem.variationAttributes) {\n var colorAttr = findItem(lineItem.variationAttributes, function (attr) {\n return attr.attributeId === 'color';\n });\n\n if (colorAttr) {\n var colorSelector = '.color-' + uuid;
15\n var newColor = colorAttr.displayValue;\n $(colorSelector).text(newColor);\n }\n\n var sizeAttr = findItem(lineItem.variationAttributes, function (attr) {\n return attr.attributeId === 'size';\n });\n\n if (sizeAttr) {\n var sizeSelector = '.size-' + uuid;\n var newSize = '\\xa0/ ' + sizeAttr.displayValue;\n $(sizeSelector).text(newSize);\n }\n \n var lengthAttr = findItem(lineItem.variationAttributes, function (attr) {\n return attr.attributeId === 'length';\n });\n \n if (lengthAttr) {\n var lengthSelector = '.length-' + uuid;\n var newLength = '\\xa0/ ' + lengthAttr.displayValue;\n $(lengthSelector).text(newLength);\n }\n\n var imageSelector = '.card.product-info.uuid-' + uuid + ' .item-image > img';\n $(imageSelector).attr('src', lineItem.images.small[0].url);\n $(imageSelector).attr('alt', lineItem.images.small[0].alt);\n $(imageSelector).attr('title', lineItem.images.small[0].title);\n }\n\n var qtySelector = '.quantity[data-uuid=\"' + uuid + '\"]';\n document.querySelector(qtySelector).closest('.ocs-select') !== null ? document.querySelector(qtySelector).closest('.ocs-select').querySelector('input').value = lineItem.quantity : $(qtySelector).val(lineItem.quantity);\n $(qtySelector).data('pid', data.newProductId);\n\n $('.remove-product[data-uuid=\"' + uuid + '\"]').data('pid', data.newProductId);\n var priceSelector = '.Price-' + uuid;\n $(priceSelector).replaceWith(lineItem.price.html);\n\n //ABtestEconomy segment : economyProductBasket\n var economySelector = '.js-lineitem-economy-' + uuid;\n if ($(economySelector).length > 0) {\n if (lineItem.economy) {\n $(economySelector).replaceWith(lineItem.economyHtml);\n } else {\n $(economySelector).empty();\n }\n }\n}\n\n/**\n * Generates the modal window on the first call.\n *\n */\nfunction getModalHtmlElement() {\n if ($('#editProductModal').length !== 0) {\n $('#editProductModal').remove();\n }\n var htmlString = '\x3c!-- Modal --\x3e'\n + '<div class=\"modal fade right\" id=\"editProductModal\" role=\"dialog\">'\n + '<div class=\"modal-dialog quick-view-dialog\">'\n + '\x3c!-- Modal content--\x3e'\n + '<div class=\"modal-content\">'\n + '<div class=\"modal-body\"></div>'\n + '</div>'\n + '</div>'\n + '</div>';\n $('body').append(htmlString);\n}\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nfunction parseHtml(html) {\n var $html = $('<div>').append($.parseHTML(html));\n\n var body = $html.find('.product-quickview');\n var footer = $html.find('.modal-footer').children();\n\n return { body: body, footer: footer };\n}\n/**\n * replaces the content in the modal window for product variation to be edited.\n * @param {string} editProductUrl - url to be used to retrieve a new product model\n */\nfunction fillModalElement(editProductUrl, addToCartOrigin) {\n \n $('.modal-body').spinner().start();\n var cartID = $('.cart-page').data('cartid');\n $.ajax({\n url: editProductUrl,\n method: 'GET',\n success: function (data) {\
15n \n let GTMquickViewCart = __webpack_require__(/*! ../gtm/util/layers/quickViewCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/quickViewCart.js\");\n var parsedHtml = parseHtml(data);\n \n GTMquickViewCart.getDataLayerForLayer({\n product: $(parsedHtml.body).find('#obj-product').data('product'),\n cartId: cartID,\n addedToCartOrigin: addToCartOrigin\n });\n /////////////////////////////////\n \n \n var $modalBody = $('#editProductModal .modal-body');\n\n $modalBody.empty();\n $modalBody.html(parsedHtml.body);\n $('#editProductModal #add-to-cart-eresa').empty();\n $('#editProductModal .modal-footer').html(parsedHtml.footer);\n $('#editProductModal').modal('show');\n $('.primary-images .carousel.slide.pointer-event .carousel-indicators li:first-child').click();\n $.spinner().stop();\n \n if ($modalBody.find('.size-length').length) {\n \t$modalBody.find('.size-length').show();\n }\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n/**\n * replace content of modal\n * @param {string} actionUrl - url to be used to remove product\n * @param {string} productID - pid\n * @param {string} productName - product name\n * @param {string} uuid - uuid\n */\nfunction confirmDelete(actionUrl, productID, productName, uuid, quantity) {\n var $deleteConfirmBtn = $('.cart-delete-confirmation-btn');\n var $productToRemoveSpan = $('.product-to-remove');\n\n $deleteConfirmBtn.data('pid', productID);\n $deleteConfirmBtn.data('action', actionUrl);\n $deleteConfirmBtn.data('uuid', uuid);\n $deleteConfirmBtn.data('quantity', quantity);\n\n $productToRemoveSpan.empty().append(productName);\n\n //for caast\n $('body').addClass('modal-opendelete');\n}\nfunction couponErrorNotication(couponsErrorMessages) {\n var error = '';\n couponsErrorMessages.forEach(function (errorMessage) {\n error = error + errorMessage + '<br/>'\n });\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', error);\n}\n\nfunction basketErrorNotification(basketErrorMessage) {\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', basketErrorMessage);\n}\n\nfunction paypalMessage(amount){\n if($('.pp-message').length){\n paypal.Messages({\n amount: amount,\n placement: 'cart',\n style: {\n layout: 'text',\n logo: {\n type: 'inline',\n },\n text: {\n size: 14\n }\n },\n onClick: () => {\n let GTMPaiementNfois = $('.cart').length ? __webpack_require__(/*! ../gtm/util/layers/paiementNFoisCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisCart.js\") : __webpack_require__(/*! ../gtm/util/layers/paiementNFoisPDP */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisPDP.js\");\n GTMPaiementNfois.getDataLayerForLayer();\n },\n })\n .render('.pp-message');\n }\n}\n\nfunction updatePaiement(){\n var seuilPaypal = parseInt($('.msg-paiement-paypal.msg-sup-seuil').data('seuilpaypal'));\n var seuilAlma = parseInt($('.msg-paiement-alma.msg-sup-seuil').data('seuilalma'));\n var subTotal = parseInt($('.sub-total').attr('data-subtotal'));\n\n if(subTotal < seuilPaypal){\n $('.msg-paiement-paypal.msg-sup-seuil').addClass('d-none');\n $('.msg-paiement-paypal.msg-inf-seuil').removeClass('d-none');\n }else{\n setTimeout(() => {\n $('.msg-paiement-paypal.msg-sup-seuil').removeClass('d-none');\n $('.msg-paiement-paypal.msg-inf-seuil').addClass('d-none'); \n }, 500);\n }\n\n\n if(subTotal < seuilAlma){\n $('.msg-paiement-alma.msg-sup-seuil').addClass('d-none');\n $('.msg-paiement-alma.msg-inf-seuil').removeClass('d-none');\n }
15else{\n setTimeout(() => {\n $('.msg-paiement-alma.msg-sup-seuil').removeClass('d-none');\n $('.msg-paiement-alma.msg-inf-seuil').addClass('d-none'); \n }, 500);\n }\n}\n\nmodule.exports = function () {\n $('#offers-conditions-modal').on('shown.bs.modal', function() {\n let GTMOffersInformations = __webpack_require__(/*! ../gtm/util/layers/offersInformations */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/offersInformations.js\");\n GTMOffersInformations.getDataLayerForLayer();\n });\n\n $('#offers-conditions-modal').on('hidden.bs.modal', function() {\n let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n GTMcloseLayer.getDataLayerForAction();\n })\n\n $('body').on('change','.shipping-method-list input[type=radio]',function(){ \n if($(window).width() <= 768){\n $('body').find('.toscrollTop').each(function(){\n $(this).removeClass('toscrollTop');\n });\n $(this).parent().addClass('toscrollTop');\n setTimeout(\n function(){\n var position = $('.toscrollTop').offset().top;\n var heightMenu = $('#headerNoMenu .header').height();\n var anchorPosition = position - heightMenu;\n $(\"html, body\").animate( { scrollTop: anchorPosition }, 100);\n }, 100\n );\n }\n });\n\n $('body').on('click', 'button.js-add-giftwrap-to-cart', function (e) {\n e.preventDefault();\n\n var addGiftWrapToCartUrl = $(this).data('action');\n\n if (addGiftWrapToCartUrl) {\n $.ajax({\n url: addGiftWrapToCartUrl,\n method: 'GET',\n success: function (data) {\
15n if (data.invalidCoupon) {\n couponErrorNotication(data.couponsErrorMessages);\n }\n if (data.invalidBasket) {\n basketErrorNotification(data.basketErrorMessage);\n }\n addProductlineItem(data);\n $('.coupons-and-promos').empty().append(data.cart.totals.discountsHtmlDS);\n $('.basketvalueDiscounts').children().length !== 0 ?($('.coupons-and-promos').addClass('d-block'),$('.coupons-and-promos').removeClass('d-none')) : ($('.coupons-and-promos').addClass('d-none'), $('.coupons-and-promos').removeClass('d-block'));\n\n //ABTestEconomy segment : economyProductBasket // economyBasket // Control\n //Tracking\n let GTMcartUpdate = __webpack_require__(/*! ../gtm/util/actions/cartUpdate */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js\");\n GTMcartUpdate.getDataLayerForAction({\n cart: data.cart,\n action: 'add giftwrap'\n });
15\n //////////////////////////////////////////////////////////\n\n if($(document).find('#batch').length > 0) {\n cartEventsBatch.addedToCart(data.cart);\n } else if($(document).find('#adrenalead').length > 0) {\n cartEventsAdrenalead.addedToCart(data.cart);\n }\n\n base.methods.updateCartTotals(data.cart);\n approachingDiscounts.updateApproachingDiscounts(data.cart.approachingDiscounts);\n $('body').trigger('setShippingMethodSelection', data.cart);\n base.methods.validateBasket(data.cart);\n $('body').trigger('cart:update');\n $('.addGiftContainer').addClass('d-none');\n $('.GiftWrapMessage').removeClass('d-none');\n $('.GiftWrapMessage textarea')[0].value = \"\";\n $('.GiftWrapMessage textarea').removeClass('has-value');\n $('.ocs-textarea').removeClass('error');\n if (data.regexMessage) {\n $('.js-gift-wrap-msg-input').attr('pattern', data.regexMessage);\n }\n if (data.maxLengthMessage) {\n $('.js-gift-wrap-msg-input').attr('maxlength', data.maxLengthMessage);\n }\n paypalMessage(data.cart.totals.subTotalSimple);\n updatePaiement();\n $.spinner().stop();\n },\n error: function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.responseJSON.errorMessage);\n $.spinner().stop();\n }\n }\n });\n }\n });\n\n $('body').on('click', 'button.js-add-loyaltycard-to-cart', function (e) {\n e.preventDefault();\n\n var addLoyaltyCardToCartUrl = $('.js-add-loyaltycard-to-cart-container').data('action');\n\n if (addLoyaltyCardToCartUrl) {\n $.spinner().start();\n $.ajax({\n url: addLoyaltyCardToCartUrl,\n method: 'GET',\n success: function (data) {\
15n if (data.invalidCoupon) {\n couponErrorNotication(data.couponsErrorMessages);\n }\n if (data.invalidBasket) {\n basketErrorNotification(data.basketErrorMessage);\n }\n addProductlineItem(data);\n $('.coupons-and-promos').empty().append(data.cart.totals.discountsHtmlDS);\n $('.basketvalueDiscounts').children().length !== 0 ?($('.coupons-and-promos').addClass('d-block'),$('.coupons-and-promos').removeClass('d-none')) : ($('.coupons-and-promos').addClass('d-none'), $('.coupons-and-promos').removeClass('d-block'));\n\n //ABTestEconomy segment : economyProductBasket // economyBasket // Control\n //Tracking\n let GTMcartUpdate = __webpack_require__(/*! ../gtm/util/actions/cartUpdate */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js\");\n GTMcartUpdate.getDataLayerForAction({\n cart: data.cart,\n action: 'add loyalty card'\n });
15\n //////////////////////////////////////////////////////////\n\n if($(document).find('#batch').length > 0) {\n cartEventsBatch.addedToCart(data.cart);\n } else if($(document).find('#adrenalead').length > 0) {\n cartEventsAdrenalead.addedToCart(data.cart);\n }\n\n base.methods.updateCartTotals(data.cart);\n approachingDiscounts.updateApproachingDiscounts(data.cart.approachingDiscounts);\n base.methods.updatePrice(data.basket.items);\n $('body').trigger('setShippingMethodSelection', data.cart);\n base.methods.validateBasket(data.cart);\n $('body').trigger('cart:update');\n $('.js-add-loyaltycard-to-cart-container').addClass('d-none');\n $.spinner().stop();\n },\n error: function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.responseJSON.errorMessage);\n $.spinner().stop();\n }\n }\n });\n }\n });\n\n\n $('body').on('click', '.remove-product', function (e) {\n e.preventDefault();\n\n var actionUrl = $(this).data('action');\n var productID = $(this).data('pid');\n var productName = $(this).data('name');\n var uuid = $(this).data('uuid');\n var quantity = $(this).data('quantity');\n confirmDelete(actionUrl, productID, productName, uuid, quantity);\n });\n\n $('body').on('afterRemoveFromCart', function (e, data) {\n e.preventDefault();\n confirmDelete(data.actionUrl, data.productID, data.productName, data.uuid, data.quantity);\n });\n\n $('.optional-promo').click(function (e) {\n e.preventDefault();\n $('.promo-code-form').toggle();\n });\n\n $('body').on('click', '.cart-delete-confirmation-btn', function (e) {\n e.preventDefault();\n\n var productID = $(this).data('pid');\n var url = $(this).data('action');\n var uuid = $(this).data('uuid');\n var quantity = $(this).data('quantity');\n var urlParams = {\n pid: productID,\n uuid: uuid\n };\n\n //If on productPage and the best shipping part is present\n if ($('#js-isproductpage-productid').length > 0) {\n urlParams.productPageProductId = $('#js-isproductpage-productid').val();\n }\n if ($('#js-isproductpage-productquantity').length > 0) {\n urlParams.productPageProductQuantity = $('#js-isproductpage-productquantity').val();\n }\n\n url = appendToUrl(url, urlParams);\n\n $.spinner().start();\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\
15n let GTMremoveProduct = __webpack_require__(/*! ../gtm/util/actions/removeProduct */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/removeProduct.js\");\n GTMremoveProduct.getDataLayerForAction({\n product: data.product,\n quantity: quantity\n });\n if (data.basket.items.length === 0) {\n if($(document).find('#batch').length > 0) {\n cartEventsBatch.cancelledCart();\n }\n window.location.reload();\n } else {\n if (data.toBeDeletedUUIDs && data.toBeDeletedUUIDs.length > 0) {\n for (var i = 0; i < data.toBeDeletedUUIDs.length; i++) {\n $('.uuid-' + data.toBeDeletedUUIDs[i]).remove();\n }\n }\n\n // Remove the deleted product from the UI\n $('.uuid-' + uuid).remove();\n\n if ( data.giftWrapDeletionState !== undefined ) {\n if ( data.giftWrapDeletionState.isGiftWrapDeleted == true ) {\n // Clean the gift wrap message field\n $('.js-gift-wrap-msg-input').val('');\n $('.js-gift-wrap-msg-input').attr('value','');\n\n /* Remove the gift wrap from the UI. This is used when gift wrap\n is deleted as aconsequence of an other item deletion */\n if (data.giftWrapDeletionState.giftWrapProductLineItemUUID ) {\n $('.uuid-' + data.giftWrapDeletionState.giftWrapProductLineItemUUID).remove();\n }\n }\n }\n\n if (!data.basket.hasBonusProduct) {\n $('.bonus-product').remove();\n }\n if (data.invalidCoupon) {\n couponErrorNotication(data.couponsErrorMessages);\n }\n if (data.invalidBasket) {\n basketErrorNotification(data.basketErrorMessage);\n }\n $('.coupons-and-promos').empty().append(data.basket.totals.discountsHtmlDS);\n $('.basketvalueDiscounts').children().length !== 0 ?($('.coupons-and-promos').addClass('d-block'),$('.coupons-and-promos').removeClass('d-none')) : ($('.coupons-and-promos').addClass('d-none'), $('.coupons-and-promos').removeClass('d-block'));\n\n //ABTestEconomy segment : economyProductBasket // economyBasket // Control\n //Tracking\n let GTMcartUpdate = __webpack_require__(/*! ../gtm/util/actions/cart
15Update */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js\");\n GTMcartUpdate.getDataLayerForAction({\n cart: data.basket,\n action: 'delete product'\n });\n //////////////////////////////////////////////////////////\n\n if($(document).find('#batch').length > 0) {\n cartEventsBatch.addedToCart(data.basket);\n } else if($(document).find('#adrenalead').length > 0) {\n cartEventsAdrenalead.addedToCart(data.basket);\n }\n\n base.methods.updateCartTotals(data.basket);\n approachingDiscounts.updateApproachingDiscounts(data.basket.approachingDiscounts);\n base.methods.updatePrice(data.basket.items);\n $('body').trigger('setShippingMethodSelection', data.basket);\n base.methods.validateBasket(data.basket);\n base.methods.validateExclusionProducts(data.validExclusionProducts, data.basket);\n detailJS.layerPaimentMethod();\n\n if (data && data.bestShippingMethodName){\n if ($('.js-best-shipping-name').length > 0) {\n $('.js-best-shipping-name').empty().html(data.bestShippingMethodName);\n }\n }\n\n if ( data.basketGiftWrapPurchaseState !== undefined ) {\n // Manage display of gift wrap add button and gift wrap message content\n\n // if ( data.basketGiftWrapPurchaseState.isGiftWrapPurchaseAllowed ) {\n const itemsinCart = data.basket.items;\n let giftIncart;\n itemsinCart.forEach(function(item) {\n item.isWrapGift || item.isGift || item.isGiftCardOrECard ? giftIncart = true : false;\n })\n if (giftIncart == true) {\n $(document).find('.addGiftContainer').removeClass('d-none');\n } else {\n $(document).find('.addGiftContainer').addClass('d-none');\n $(document).find('.GiftWrapMessage ').addClass('d-none');\n }\n }\n\n\n // Manage display of gift wrap add button and gift wrap message content\n if ( data.isLoyaltyCardPurchaseAllowed ) {\n $(document).find('.js-add-loyaltycard-to-cart-container').removeClass('d-none');\n } else {\n $(document).find('.js-add-loyaltycard-to-cart-container').addClass('d-none');\n }\n\n\n $('#miniCartModal').modal('show');\n }\n\n\n $('body').trigger('cart:update');\n paypalMessage(data.basket.totals.subTotalSimple);\n updatePaiement();\n base.methods.updateFidelityPoints(data);\n $.spinner().stop();\n },\n error: function (err) {\n let GTMremoveProduct = __webpack_require__(/*! ../gtm/util/actions/removeProduct */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/removeProduct.js\");\n GTMremoveProduct.getDataLayerForAction({\n product: err.responseJSON.product,\n });\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.responseJSON.errorMessage);\n $.spinner().stop();\n }\n }\n });\n });\n\n $('body').on('change', '.quantity-form .quantity', function () {\n var preSelectQty = $(this).data('pre-select-qty');\n var quantity = $(this).val();\n var productID = $(this).data('pid');\n var url = $(this).data('action');\n var uuid = $(this).data('uuid');\n\n $(this).children('option').each(function(){\n if ($(this).val() == quantity) { \n $(this).attr('selected','selected');\n }
15else{\n $(this).removeAttr('selected');\n }\n });\n\n var urlParams = {\n pid: productID,\n quantity: quantity,\n uuid: uuid\n };\n\n //If on productPage and the best shipping part is present\n if ($('#js-isproductpage-productid').length > 0) {\n urlParams.productPageProductId = $('#js-isproductpage-productid').val();\n }\n if ($('#js-isproductpage-productquantity').length > 0) {\n urlParams.productPageProductQuantity = $('#js-isproductpage-productquantity').val();\n }\n\n url = appendToUrl(url, urlParams);\n\n $(this).parents('.card').spinner().start();\n\n $.ajax({\n url: url,\n type: 'get',\n context: this,\n dataType: 'json',\n success: function (data) {\n $('.quantity[data-uuid=\"' + uuid + '\"]').val(quantity);\n var productQty;\n for (var item in data.items) {\n if(data.items[item].id == productID) {\n productQty = data.items[item].quantity;\n }\n }\n\n $('.remove-product[data-pid=\"' + productID + '\"]').attr(\"data-quantity\", productQty);\n $('.coupons-and-promos').empty().append(data.totals.discountsHtmlDS);\n $('.basketvalueDiscounts').children().length !== 0 ?($('.coupons-and-promos').addClass('d-block'),$('.coupons-and-promos').removeClass('d-none')) : ($('.coupons-and-promos').addClass('d-none'), $('.coupons-and-promos').removeClass('d-block'));\n\n\n if (data.invalidCoupon) {\n couponErrorNotication(data.couponsErrorMessages);\n }\n if (data.invalidBasket) {\n basketErrorNotification(data.basketErrorMessage);\n }\n\n if (data && data.bestShippingMethodName){\n if ($('.js-best-shipping-name').length > 0) {\n $('.js-best-shipping-name').empty().html(data.bestShippingMethodName);\n }\n }\n //ABTestEconomy segment : economyProductBasket // economyBasket // Control\n //Tracking\n let GTMcartUpdate = __webpack_require__(/*! ../gtm/util/actions/cart
15Update */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js\");\n GTMcartUpdate.getDataLayerForAction({\n cart: data,\n action: 'quantity change'\n });\n //////////////////////////////////////////////////////////\n\n if($(document).find('#batch').length > 0) {\n cartEventsBatch.addedToCart(data);\n } else if($(document).find('#adrenalead').length > 0) {\n cartEventsAdrenalead.addedToCart(data);\n }\n\n base.methods.updateCartTotals(data);\n approachingDiscounts.updateApproachingDiscounts(data.approachingDiscounts);\n updateAvailability(data, uuid);\n base.methods.updatePrice(data.items);\n base.methods.validateBasket(data);\n base.methods.validateExclusionProducts(data.validExclusionProducts, data);\n $(this).data('pre-select-qty', quantity);\n\n $('body').trigger('cart:update');\n\n paypalMessage(data.totals.subTotalSimple);\n updatePaiement();\n base.methods.updateFidelityPoints(data);\n $.spinner().stop();\n if ($(this).parents('.product-info').hasClass('bonus-product-line-item') && $('.cart-page').length) {\n location.reload();\n }\n },\n error: function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.responseJSON.errorMessage);\n $(this).val(parseInt(preSelectQty, 10));\n $.spinner().stop();\n }\n }\n });\n });\n\n $('.shippingMethods').change(function () {\n var url = $(this).attr('data-actionUrl');\n var urlParams = {\n methodID: $(this).find(':selected').attr('data-shipping-id')\n };\n // url = appendToUrl(url, urlParams);\n\n $('.totals').spinner().start();\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: urlParams,\n success: function (data) {\
15n if (data.error) {\n window.location.href = data.redirectUrl;\n } else {\n $('.coupons-and-promos').empty().append(data.totals.discountsHtmlDS);\n $('.basketvalueDiscounts').children().length !== 0 ?($('.coupons-and-promos').addClass('d-block'),$('.coupons-and-promos').removeClass('d-none')) : ($('.coupons-and-promos').addClass('d-none'), $('.coupons-and-promos').removeClass('d-block'));\n base.methods.updateCartTotals(data);\n approachingDiscounts.updateApproachingDiscounts(data.approachingDiscounts);\n base.methods.validateBasket(data);\n }\n $.spinner().stop();\n },\n error: function (err) {\n if (err.redirectUrl) {\n window.location.href = err.redirectUrl;\n } else {\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.responseJSON.errorMessage);\n $.spinner().stop();\n }\n }\n });\n });\n\n /* */\n var timer, delay = 500;\n $('.js-gift-wrap-msg-input').keyup( function(e) {\n $('#validcart').addClass('disabled');\n var addGiftWrapMsgToCartUrl = $(this).data('action');\n var data = {\n msg: $(this).val()\n };\n\n clearTimeout(timer);\n timer = setTimeout(function() {\n\n $.ajax({\n url: addGiftWrapMsgToCartUrl,\n type: 'GET',\n dataType: 'json',\n data: data,\n success: function (data) {\
15n if (data.error) {\n //gestion error\n var divGiftWrap = $(document).find('.js-gift-wrap-msg-area');\n \n if ($('.js-gift-wrap-msg-input').closest('.ocs-textarea').length > 0) {\n const ocsTextarea = $('.js-gift-wrap-msg-input').closest('.ocs-textarea')[0];\n ocsTextarea.classList.add('error');\n ocsTextarea.querySelector('.hint .error-message').innerText = data.errormsg;\n\n } else {\n divGiftWrap.addClass('is-invalid');\n $('.js-gift-wrap-msg-input').addClass('is-invalid').removeClass('valid');\n divGiftWrap.find('.invalid-feedback').addClass('d-block').removeClass('d-none');\n divGiftWrap.find('.invalid-feedback').text(data.errormsg);\n }\n\n } else {\n var divGiftWrap = $(document).find('.js-gift-wrap-msg-area');\n var msg = data.queryString.split(\"msg=\");\n \n $('.js-gift-wrap-msg-input').attr('value',msg[1]);\n \n $('#validcart').removeClass('disabled');\n if ($('.js-gift-wrap-msg-input').closest('.ocs-textarea').length > 0) {\n const ocsTextarea = $('.js-gift-wrap-msg-input').closest('.ocs-textarea')[0];\n ocsTextarea.classList.remove('error');\n } else {\n divGiftWrap.removeClass('is-invalid');\n $('.js-gift-wrap-msg-input').addClass('valid').removeClass('is-invalid');\n divGiftWrap.find('.invalid-feedback').addClass('d-none').removeClass('d-block');\n divGiftWrap.find('.invalid-feedback').text('');\n }\n }\n },\n error: function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.errorMessage);\n $.spinner().stop();\n }\n }\n });\n }, delay );\n });\n\n $('.promo-code-form').submit(function (e) {\n e.preventDefault();\n $.spinner().start();\n const ocsInput = $(\"label[for='couponCode']\").closest('.ocs-input')[0];\n ocsInput.querySelector('.hint').style.display = \"none\";\n ocsInput.querySelector('.hint .coupon-missing-error').style.display = \"none\";\n ocsInput.classList.remove('dirty', 'invalid');\n $('.coupon-error-message').empty();\n if (!$('.coupon-code-field').val()) {\n ocsInput.classList.add('dirty', 'invalid');\n ocsInput.querySelector('.hint').style.display = \"block\";\n ocsInput.querySelector('.hint .coupon-missing-error').style.display = \"block\";\n $.spinner().stop();\n return false;\n }\n var $form = $('.promo-code-form');\n ocsInput.classList.remove('dirty', 'invalid');\n ocsInput.querySelector('.hint').style.display = \"none\";\n ocsInput.querySelector('.hint .coupon-missing-error').style.display = \"none\";\n $('.coupon-error-message').empty();\n $('.coupon-code-field').val($('.coupon-code-field').val().trim());\n var code = $('.coupon-code-field').val();\n $.ajax({\n url: $form.attr('action'),\n type: 'GET',\n dataType: 'json',\n data: $form.serialize(),\n success: function (data) {\
15n if (data.error) {\n let GTMpromoCode = __webpack_require__(/*! ../gtm/util/actions/promoCode */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/promoCode.js\");\n GTMpromoCode.getDataLayerForAction({\n validity: 'invalid',\n label: code\n });\n ocsInput.classList.add('dirty', 'invalid');\n ocsInput.querySelector('.hint').style.display = \"block\";\n $('.coupon-error-message').empty().append(data.errorMessage);\n if (data.invalidCoupon) {\n couponErrorNotication(data.couponsErrorMessages);\n }\n if (data.invalidBasket) {\n basketErrorNotification(data.basketErrorMessage);\n }\n if (data.basketModel) {\n base.methods.updateCartTotals(data.basketModel);\n approachingDiscounts.updateApproachingDiscounts(data.basketModel.approachingDiscounts);\n base.methods.validateBasket(data.basketModel);\n }\n } else {\n let GTMpromoCode = __webpack_require__(/*! ../gtm/util/actions/promoCode */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/promoCode.js\");\n GTMpromoCode.getDataLayerForAction({\n validity: 'valid',\n label: code,\n totals: data.totals\n });\n if (data.invalidCoupon) {\n couponErrorNotication(data.couponsErrorMessages);\n }\n if (data.invalidBasket) {\n basketErrorNotification(data.basketErrorMessage);\n }\n $('.coupons-and-promos').empty().append(data.totals.discountsHtmlDS);\n $('.basketvalueDiscounts').children().length !== 0 ?($('.coupons-and-promos').addClass('d-block'),$('.coupons-and-promos').removeClass('d-none')) : ($('.coupons-and-promos').addClass('d-none'), $('.coupons-and-promos').removeClass('d-block'));\n\n //ABTestEconomy segment : economyProductBasket // economyBasket // Control\n //Tracking\n let GTMcartUpdate = __webpack_require__(/*! ../gtm/util/actions/cart
15Update */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js\");\n GTMcartUpdate.getDataLayerForAction({\n cart: data,\n action: 'coupon added'\n });\n //////////////////////////////////////////////////////////\n\n if($(document).find('#batch').length > 0) {\n cartEventsBatch.addedToCart(data);\n } else if($(document).find('#adrenalead').length > 0) {\n cartEventsAdrenalead.addedToCart(data);\n }\n base.methods.updateCartTotals(data);\n approachingDiscounts.updateApproachingDiscounts(data.approachingDiscounts);\n base.methods.validateBasket(data);\n \n base.methods.updateFidelityPoints(data);\n $('.coupon-code-field').val('');\n }\n $.spinner().stop();\n },\n error: function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.errorMessage);\n $.spinner().stop();\n }\n }\n });\n return false;\n });\n\n $('body').on('click', '.remove-coupon', function (e) {\n e.preventDefault();\n\n var couponCode = $(this).data('code');\n var uuid = $(this).data('uuid');\n var $deleteConfirmBtn = $('.delete-coupon-confirmation-btn');\n var $productToRemoveSpan = $('.coupon-to-remove');\n\n $deleteConfirmBtn.data('uuid', uuid);\n $deleteConfirmBtn.data('code', couponCode);\n\n $productToRemoveSpan.empty().append(couponCode);\n });\n\n $('body').on('click', '.delete-coupon-confirmation-btn', function (e) {\n e.preventDefault();\n\n var url = $(this).data('action');\n var uuid = $(this).data('uuid');\n var couponCode = $(this).data('code');\n var urlParams = {\n code: couponCode,\n uuid: uuid\n };\n\n url = appendToUrl(url, urlParams);\n\n $('body > .modal-backdrop').remove();\n\n $.spinner().start();\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\
15n $('.coupon-uuid-' + uuid).remove();\n //ABTestEconomy segment : economyProductBasket // economyBasket // Control\n //Tracking\n let GTMcartUpdate = __webpack_require__(/*! ../gtm/util/actions/cartUpdate */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js\");\n GTMcartUpdate.getDataLayerForAction({\n cart: data,\n action: 'delete coupon'\n });\n //////////////////////////////////////////////////////////\n\n if($(document).find('#batch').length > 0) {\n cartEventsBatch.addedToCart(data);\n } else if($(document).find('#adrenalead').length > 0) {\n cartEventsAdrenalead.addedToCart(data);\n }\n base.methods.updateCartTotals(data);\n approachingDiscounts.updateApproachingDiscounts(data.approachingDiscounts);\n base.methods.validateBasket(data);\n $.spinner().stop();\n },\n error: function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.responseJSON.errorMessage);\n $.spinner().stop();\n }\n }\n });\n });\n $('body').on('click', '.cart-page .bonus-product-button', function () {\n $.spinner().start();\n $.ajax({\n url: $(this).data('url'),\n method: 'GET',\n dataType: 'json',\n success: function (data) {\
15n base.methods.editBonusProducts(data);\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n\n $('body').on('hidden.bs.modal', '#editProductModal', function () {\n let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n GTMcloseLayer.getDataLayerForAction();\n });\n\n $('body').on('click', '.cart-page .product-edit .edit, .cart-page .bundle-edit .edit', function (e) {\n e.preventDefault();\n\n var editProductUrl = $(this).data('url');\n var addToCartOrigin = $(this).parents('.product-info').data('origin');\n getModalHtmlElement();\n fillModalElement(editProductUrl, addToCartOrigin);\n\n let GTMeditCart = __webpack_require__(/*! ../gtm/util/layers/editCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/editCart.js\");\n GTMeditCart.getDataLayerForLayer();\n });\n\n $('body').on('click', '.js-edit-product-title, .js-edit-product-img', function (e) {\n e.preventDefault();\n\n var addToCartOrigin = $(this).parents('.product-info').data('origin');\n var editProductUrl = $(this).data('url');\n getModalHtmlElement();\n fillModalElement(editProductUrl, addToCartOrigin);\n if (e.currentTarget.classList.contains('js-edit-product-title')) {\n let GTMeditCartProductTitle = __webpack_require__(/*! ../gtm/util/actions/clicProductCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicProductCart.js\");\n GTMeditCartProductTitle.getDataLayerForAction();\n }\n });\n ///////////////////////////////////////////////////////\n \n $('body').on('click', '.cart-product-title, .pdp-link .link, .product-tile .tile-body .pdp-brand-title, .product-tile .tile-body .color-swatches, .product-tile .image-container', function (e) {\n if ($('.Cart-Show').length > 0) {\n let GTMeditCartProductTitle = __webpack_require__(/*! ../gtm/util/actions/clicProductCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicProductCart.js\");\n GTMeditCartProductTitle.getDataLayerForAction();\n }\n });\n \n\n $('body').on('product:updateAddToCart', function (e, response) {\n $('.availability-msg').removeClass('error-select-size');\n // $('button.update-cart-product-global', response.$productContainer).attr('disabled',\n // (!response.product.readyToOrder || !response.product.available));\n });\n\n $('body').on('product:updateAvailability', function (e, response) {\n // bundle individual products\n $('.product-availability', response.$productContainer)\n .data('ready-to-order', response.product.readyToOrder)\n .data('available', response.product.available)\n .find('.availability-msg')\n .empty()\n .html(response.message);\n\n\n var dialog = $(response.$productContainer)\n .closest('.quick-view-dialog');\n\n if ($('.product-availability', dialog).length) {\n // bundle all products\n var allAvailable = $('.product-availability', dialog).toArray()\n .every(function (item) { return $(item).data('available'); });\n\n var allReady = $('.product-availability', dialog).toArray()\n .every(function (item) { return $(item).data('ready-to-order'); });\n\n $('.global-availability', dialog)\n .data('ready-to-order', allReady)\n .data('available', allAvailable);\n\n $('.global-availability .availability-msg', dialog).empty()\n .html(allReady ? response.message : response.resources.info_selectforstock);\n } else {\n // single product\n $('.global-availability', dialog)\n .data('ready-to-order', response.product.readyToOrder)\n .data('available', response.product.available)\n .find('.availability-msg')\n .empty()\n .html(response.message);\n }\n });\n\n $('body').on('product:afterAttributeSelect', function (e, response) {\n if ($('.modal.show .product-quickview .bundle-items').length) {\n $('.modal.show').find(response.container).data('pid', response.data.product.id);\n $('.modal.show').find(response.container).find('.product-id').text(response.data.product.id);\n } else {\n $('.modal.show .product-quickview').data('pid', response.data.product.id);\n }\n });\n\n $('body').on('change', '.quantity-select', function (e) {\n var selectedQuantity = $(this).val();\n $('.modal.show .update-cart-url').data('selected-quantity', selectedQuantity);\n $('.remove-product').data('quantity', selectedQuantity);\n e.currentTarget.closest('.ocs-select') !== null ? e.currentTarget.closest('.ocs-select').querySelector('input').value = selectedQuantity : false;\n });\n\n $('body').on('click', '.update-cart-product-global', function (e) {\n e.preventDefault();\n \n //remove the quickViewModal if exist on the cart. Else There are conflicts with base.getPidValue\n if ($('#quickViewModal').length !== 0) {\n $('#quickViewModal').remove();\n }\n var updateProductUrl = $(this).closest('.cart-and-ipay').find('.update-cart-url').val();\n var selectedQuantity = $(this).closest('.cart-and-ipay').find('.update-cart-url').data('selected-quantity');\n var uuid = $(this).closest('.cart-and-ipay').find('.update-cart-url').data('uuid');\n\n var form = {\n uuid: uuid,\n pid: base.getPidValue($(this)),\n quantity: selectedQuantity\n };\n\n if ($(this).parents('.card').length > 0)\n $(this).parents('.card').spinner().start();\n else\n $(this).parents('.product-detail').spinner().start();\n\n if (updateProductUrl) {\n $.ajax({\n url: updateProductUrl,\n type: 'post',\n context: this,\n data: form,\n dataType: 'json',\n success: function (data) {\
15n $('#editProductModal').remove();\n $('.modal-backdrop').remove();\n $('body').removeClass('modal-open');\n $('body').removeAttr(\"style\");\n let GTMeditProduct = __webpack_require__(/*! ../gtm/util/actions/editProduct */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/editProduct.js\");\n var productQty;\n // boucler sur data.product.quantities et selectionner celui \"selected\" et ajouter en param\n for (var item in data.cartModel.items) {\n if(data.cartModel.items[item].uuid == data.product.uuid) {\n productQty = data.cartModel.items[item].quantity;\n }\n }\n GTMeditProduct.getDataLayerForAction({\n product: data.product,\n quantity: productQty\n });\n if (data.invalidCoupon) {\n couponErrorNotication(data.couponsErrorMessages);\n }\n if (data.invalidBasket) {\n basketErrorNotification(data.basketErrorMessage);\n }\n $('.coupons-and-promos').empty().append(data.cartModel.totals.discountsHtmlDS);\n $('.basketvalueDiscounts').children().length !== 0 ?($('.coupons-and-promos').addClass('d-block'),$('.coupons-and-promos').removeClass('d-none')) : ($('.coupons-and-promos').addClass('d-none'), $('.coupons-and-promos').removeClass('d-block'));\n\n //ABTestEconomy segment : economyProductBasket // economyBasket // Control\n //Tracking\n let GTMcartUpdate = __webpack_require__(/*! ../gtm/util/actions/cart
15Update */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js\");\n GTMcartUpdate.getDataLayerForAction({\n cart: data.cartModel,\n action: 'product updated'\n });\n //////////////////////////////////////////////////////////\n\n if($(document).find('#batch').length > 0) {\n cartEventsBatch.addedToCart(data.cartModel);\n } else if($(document).find('#adrenalead').length > 0) {\n cartEventsAdrenalead.addedToCart(data.cartModel);\n }\n base.methods.updateCartTotals(data.cartModel);\n approachingDiscounts.updateApproachingDiscounts(data.cartModel.approachingDiscounts);\n updateAvailability(data.cartModel, uuid);\n updateProductDetails(data, uuid);\n\n if (data.uuidToBeDeleted) {\n $('.uuid-' + data.uuidToBeDeleted).remove();\n }\n\n base.methods.validateBasket(data.cartModel);\n\n $('body').trigger('cart:update');\n paypalMessage(data.cartModel.totals.subTotalSimple);\n updatePaiement();\n base.methods.updateFidelityPoints(data);\n $.spinner().stop();\n },\n error: function (err) {\n let GTMeditProduct = __webpack_require__(/*! ../gtm/util/actions/editProduct */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/editProduct.js\");\n GTMeditProduct.getDataLayerForAction({\n product: err.responseJSON.product,\n });\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.responseJSON.errorMessage);\n $.spinner().stop();\n }\n }\n });\n }\n });\n\n /*--- Start tracking Layer return Abtestblockreassurance---*/\n $('#sendReturnModal').on('shown.bs.modal', function() {\n let GTMreturn = __webpack_require__(/*! ../gtm/util/layers/return */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/return.js\");\n GTMreturn.getDataLayerForLayer();\n });\n\n $('#sendReturnModal').on('hidden.bs.modal', function() {\n // let GTMreturn = require('./gtm/util/layers/return');\n // GTMreturn.removeDataLayer();\n let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n GTMcloseLayer.getDataLayerForAction();\n });\n\n $('#modalAlmaPaypal').on('hidden.bs.modal', function(){\n let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n GTMcloseLayer.getDataLayerForAction();\n });\n $('#modalAlma').on('hidden.bs.modal', function(){\n let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n GTMcloseLayer.getDataLayerForAction();\n });\n $('#modalPaypal').on('hidden.bs.modal', function(){\n let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n GTMcloseLayer.getDataLayerForAction();\n });\n $('body').on('click','#trigger-closing',function(){\n let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n GTMcloseLayer.getDataLayerForAction();\n })\n\n /*--- End tracking Layer return Abtestblockreassurance---*/\n\n //$('.item-attributes .line-item-attributes:first-child').after('<div class=\"line-item-attributes mx-2\"> / </div>');\n paypalMessage($('.cart-totals-container .sub-total').data('subtotal'))\n detailJS.layerPaimentMethod();\n base.ratingAttribute();\n base.selectAttribute();\n base.colorAttribute();\n base.removeBonusProduct();\n base.selectBonusProduct();\n base.enableBonusProductSelection();\n base.showMoreBonusProducts();\n base.addBonusProductsToCart();\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/cart/cart.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/collapsibleItem.js":function(module,exports,__webpack_require__){"use strict";eval("\nmodule.exports = function () {\n var sizes = ['xs', 'sm', 'md', 'lg', 'xl'];\n\n sizes.forEach(function (size) {\n var selector = '.card-header';\n\n $(selector).on('show.bs.collapse', function(e) {\n $(this).addClass('active');\n $(this).attr('aria-expanded', true);\n });\n\n $(selector).on('hide.bs.collapse', function(e) {\n $(this).removeClass('active');\n $(this).attr('aria-expanded', false);\n });\n\n });\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/collapsibleItem.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/countrySelector.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar keyboardAccessibility = __webpack_require__(/*! ./keyboardAccessibility */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/keyboardAccessibility.js\");\n\n$('#localeSelectModal').on('shown.bs.modal', function () {\n let GTMlocaleSelector = __webpack_require__(/*! ../gtm/util/layers/localeSelector */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/localeSelector.js\");\n GTMlocaleSelector.getDataLayerForLayer();\n})\n\n$('#localeSelectModal').on('hidden.bs.modal', function () {\n // let GTMlocaleSelector = require('../gtm/util/layers/localeSelector');\n // GTMlocaleSelector.removeDataLayer();\n let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n GTMcloseLayer.getDataLayerForAction();\n})\n\nfunction setCookie(key, value, expiry) {\n var expires = new Date();\n expires.setTime(expires.getTime() + (expiry * 24 * 60 * 60 * 1000));\n document.cookie = key + '=' + value + ';expires=' + expires.toUTCString()+'; path=/';\n}\n\nmodule.exports = function () {\n $('.country-selector span').click(function (e) {\n e.preventDefault();\n var action = $('.page').data('action');\n var localeCode = $(this).data('locale');\n var localeCurrencyCode = $(this).data('currencycode');\n var siteID = $(this).data('siteid');\n var queryString = $('.page').data('querystring');\n var url;\n\n var countryCode = localeCode.split('_')['1'];\n\n var datalocale = localeCode.replace('_', '-').toLowerCase();\n var changeRedirect = false;\n $('link').each(function () {\n var hreflang = $(this).attr('hreflang');\n\n if (hreflang && hreflang == datalocale) {\n url = $(this)[0].href;\n changeRedirect = true;\n return;\n }\n });\n\n if (changeRedirect) {\n var countryCode = localeCode.split('_')['1'];\n setCookie('countryselectedsfcc',countryCode,365);\n window.location.href = url;\n } else {\n url = $('.country-selector').data('url');\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n data: {\n code: localeCode,\n queryString: queryString,\n siteID: siteID,\n CurrencyCode: localeCurrencyCode,\n action: action\n },\n success: function (response) {\n $.spinner().stop();\n if (response && response.redirectUrl) {\n window.location.href = response.redirectUrl;\n }\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n });\n\n keyboardAccessibility('.navbar-header .country-selector',\n {\n 40: function ($countryOptions) { // down\n if ($(this).is(':focus')) {\n $countryOptions.first().focus();\n } else {\n $(':focus').next().focus();\n }\n },\n 38: function ($countryOptions) { // up\n if ($countryOptions.first().is(':focus') || $(this).is(':focus')) {\n $(this).focus();\n $(this).removeClass('show');\n } else {\n $(':focus').prev().focus();\n }\n },\n 27: function () { // escape\n $(this).focus();\n $(this).removeClass('show').children('.dropdown-menu').removeClass('show');\n },\n 9: function () { // tab\n $(this).removeClass('show').children('.dropdown-menu').removeClass('show');\n }\n },\n function () {\n if (!($(this).hasClass('show'))) {\n $(this).addClass('show');\n }\n return $(this).find('.dropdown-country-selector').children('a');\n }\n );\n\n $('.navbar-header .country-selector').on('focusin', function () {\n $(this).addClass('show').children('.dropdown-menu').addClass('show');\n });\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/countrySelector.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/footer.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar scrollAnimate = __webpack_require__(/*! ./scrollAnimate */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/scrollAnimate.js\");\nvar displayNotification = __webpack_require__(/*! ../ds/displayNotification */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js\");\n\nmodule.exports = function () {\n $('.back-to-top').click(function () {\n scrollAnimate();\n });\n\n $('form#formNewsletter').submit(function (e) {\n e.preventDefault();\n \n $.spinner().start();\n \n var $form = $(this);\n \n var url = $form.attr('action');\n \n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: $form.serialize(),\n success: function (data) {\n if (data.redirect) {\n \twindow.location.href = data.redirect;\n }\n \t\n if (data.success === true) {\n let GTMnewsletter = __webpack_require__(/*! ../gtm/util/actions/newsletter */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/newsletter.js\");\n GTMnewsletter.getDataLayerForAction();\n }\n \n if (data.msg) {\n $.spinner().stop();\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', data.msg);\n }\n },\n error: function (err) {\n $.spinner().stop();\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.msg);\n }\n });\n });\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/footer.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/formValidation.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n/**\n * Remove all validation. Should be called every time before revalidating form\n * @param {element} form - Form to be cleared\n * @returns {void}\n */\nfunction clearFormErrors(form) {\n $(form).find('.form-control.is-invalid').removeClass('is-invalid');\n}\n\nmodule.exports = function (formElement, data) {\n // clear form validation first\n clearFormErrors(formElement);\n $('.alert', formElement).remove();\n\n if (typeof data === 'object' && data.fields) {\n Object.keys(data.fields).forEach(function (key) {\n if (data.fields[key]) {\n var feedbackElement = $(formElement).find('[name=\"' + key + '\"]');\n var reactOcs = feedbackElement.closest('.ocs-form').length !== 0 ? true : false;\n !reactOcs ? feedbackElement = feedbackElement.parent().children('.invalid-feedback') : feedbackElement = feedbackElement[0]; \n\n if (reactOcs) {\n const errorContainer = '<div class=\"hint\" role=\"alert\"><p class=\"invalid-text\"><i class=\"ocs-icon danger alert-negative-default medium\" aria-hidden=\"true\"></i>'+data.fields[key]+'</p></div>';\n const containerFeddback = feedbackElement.closest('.ocs-input');\n const hint = containerFeddback.querySelectorAll('.hint');\n if (hint !== null) {\n hint.forEach(function(ht) {\n ht.getAttribute('role') !== null ? ht.remove() : false;\n })\n }\n containerFeddback.classList.remove('valid');\n containerFeddback.classList.add('dirty', 'invalid');\n containerFeddback.insertAdjacentHTML(\"beforeend\", errorContainer);\n } else {\n if (feedbackElement.length > 0) {\n if (Array.isArray(data[key])) {\n feedbackElement.html(data.fields[key].join('<br/>'));\n } else {\n feedbackElement.html(data.fields[key]);\n }\n feedbackElement.siblings('.form-control').removeClass('valid');\n feedbackElement.siblings('.form-control').addClass('is-invalid');\n }\n }\n }\n });\n }\n if (data && data.error) {\n if (data.errorMessage) {\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', data.errorMessage);\n } else {\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', data.error);\n }\n }\n\n if (data && data.success && data.msg) {\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'success', data.msg);\n }\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/formValidation.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/keyboardAccessibility.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = function (selector, keyFunctions, preFunction) {\n $(selector).on('keydown', function (e) {\n var key = e.which;\n var supportedKeyCodes = [37, 38, 39, 40, 27];\n if (supportedKeyCodes.indexOf(key) >= 0) {\n e.preventDefault();\n }\n var returnedScope = preFunction.call(this);\n if (keyFunctions[key]) {\n keyFunctions[key].call(this, returnedScope);\n }\n });\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/keyboardAccessibility.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/menu.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n\nvar keyboardAccessibility = __webpack_require__(/*! ./keyboardAccessibility */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/keyboardAccessibility.js\");\n\nvar clearSelection = function (element) {\n $(element).parents('.nav-menu').siblings().addClass('d-none');\n $(element).closest('.dropdown').children('.dropdown-menu').children('.top-category')\n .detach();\n $(element).closest('.dropdown.show').children('.nav-link').attr('aria-expanded', 'false');\n $(element).closest('.dropdown.show').removeClass('show');\n $(element).closest('li').detach();\n};\n\nfunction handleDropDownOnShow() {\n var el = $('.nav-item.dropdown.show > .isMobileMenu > .dropdown-menu > .dropdown:not(.disabled) [data-toggle=\"dropdown\"]');\n el.on('click', function (e) {\n e.preventDefault();\n $(this).parents('.dropdown-item').siblings().addClass('d-none');\n $('.multilevel-dropdown .dropdown-item.show .dropdown-link').removeClass('d-none');\n });\n}\n\nfunction handleDropDownOnHide(el) {\n\n el.siblings().removeClass('d-none');\n $('.multilevel-dropdown .dropdown-item.show .dropdown-link').addClass('d-none');\n}\n\nmodule.exports = function () {\n var initWidth = $(window).width();\n var isDesktop = function (element) {\n return $(element).parents('.menu-toggleable-left').css('position') !== 'fixed';\n };\n\n var headerBannerStatus = window.sessionStorage.getItem('hide_header_banner');\n $('.header-banner .close').on('click', function () {\n $('.header-banner').addClass('d-none');\n window.sessionStorage.setItem('hide_header_banner', '1');\n });\n\n if (!headerBannerStatus || headerBannerStatus < 0) {\n $('.header-banner').removeClass('d-none');\n }\n\n $(window).on('resize', function () {\n if ($(window).outerWidth() >= 1280) {\n $('.modal-background').hide();\n $('.close-button').trigger('click');\n $('.show .nav-menu .back').trigger('click');\n $('.menu-responsive .nav-item').removeClass('d-none')\n $('.menu-responsive .nav-item').find('.dropdown-item').removeClass('d-none');\n }\n else {\n if (!$('.menu-responsive').find('.show').length) {\n $('.menu-responsive .nav-item').find('.dropdown-item').addClass('d-none');\n $('.menu-responsive').siblings().removeClass('d-none');\n $('.dropdown:not(.disabled) [data-toggle=\"dropdown\"]').bind('click');\n $('.multilevel-dropdown .dropdown-item .dropdown-link').removeClass('d-none');\n }\n }\n });\n\n\n keyboardAccessibility('.main-menu .nav-link, .main-menu .dropdown-link', {\n 40: function (menuItem) { // down\n if (menuItem.hasClass('nav-item')) { // top level\n $('.navbar-nav .show').removeClass('show')\n .children('.dropdown-menu')\n .removeClass('show');\n menuItem.addClass('show').children('.dropdown-menu').addClass('show');\n $(this).attr('aria-expanded', 'true');\n menuItem.find('ul > li > a')\n .first()\n .focus();\n } else {\n menuItem.removeClass('show').children('.dropdown-menu').removeClass('show');\n $(this).attr('aria-expanded', 'false');\n menuItem.next().children().first().focus();\n }\n },\n 39: function (menuItem) { // right\n if (menuItem.hasClass('nav-item')) { // top level\n menuItem.removeClass('show').children('.dropdown-menu').removeClass('show');\n $(this).attr('aria-expanded', 'false');\n menuItem.next().children().first().focus();\n } else if (menuItem.hasClass('dropdown')) {\n menuItem.addClass('show').children('.dropdown-menu').addClass('show');\n $(this).attr('aria-expanded', 'true');\n menuItem.find('ul > li > a')\n .first()\n .focus();\n }\n },\n 38: function (menuItem) { // up\n if (menuItem.hasClass('nav-item')) { // top level\n menuItem.removeClass('show').children('.dropdown-menu').removeClass('show');\n $(this).attr('aria-expanded', 'false');\n } else if (menuItem.prev().length === 0) {\n menuItem.parent().parent().removeClass('show')\n .children('.nav-link')\n .attr('aria-expanded', 'false');\n menuItem.parent().parent().children().first()\n .focus();\n } else {\n menuItem.prev().children().first().focus();\n }\n },\n 37: function (menuItem) { // left\n if (menuItem.hasClass('nav-item')) { // top level\n menuItem.removeClass('show').children('.dropdown-menu').removeClass('show');\n $(this).attr('aria-expanded', 'false');\n menuItem.prev().children().first().focus();\n } else {\n menuItem.closest('.show').removeClass('show')\n .closest('li.show').removeClass('show')\n .children()\n .first()\n .focus()\n .attr('aria-expanded', 'false');\n }\n },\n 27: function (menuItem) { // escape\n var parentMenu = menuItem.hasClass('show') ?\n menuItem :\n menuItem.closest('li.show');\n parentMenu.children('.show').removeClass('show');\n parentMenu.removeClass('show').children('.nav-link')\n .attr('aria-expanded', 'false');\n parentMenu.children().first().focus();\n }\n },\n function () {\n return $(this).parent();\n }\n );\n\n $(document).on(\"keyup\", \".dropdown:not(.disabled) .dropdown-link\" , function(e) {\n if (e.code == \"Escape\") {\n $('.dropdown:not(.disabled) [data-toggle=\"dropdown\"]').trigger('mouseleave');\n }\n })\n\n $('.dropdown:not(.disabled) [data-toggle=\"dropdown\"]')\n .on('click', function (e) {\n if (!isDesktop(this)) {\n $('.modal-background').show();\n // copy parent element into current UL \n var titre = $(this).clone().removeClass('dropdown-toggle').addClass('top-category')\n .removeAttr('data-toggle')\n .removeAttr('aria-expanded')\n .attr('aria-haspopup', 'false');\n var closeMenu = $('<li class=\"nav-menu\"></li>');\n closeMenu.append($('.close-menu').first().clone());\n closeMenu.prepend(titre);\n $(this).parent().children('.dropdown-menu')\n .prepend(closeMenu);\n $(this).siblings('.mobile-menu').children('.dropdown-menu').prepend(closeMenu);\n // copy navigation menu into view\n $(this).parent().addClass('show');\n $(this).parents('.menu-responsive').siblings().addClass('d-none').removeClass('d-xl-none');\n //$('.dropdown-item').removeClass('d-none');\n if ($(this).parent().find('.isMobileMenu').length) {\n $(this).parent().find('.isMobileMenu > .dropdown-menu > .dropdown-item').removeClass('d-none');\n }\n else {\n $(this).parent().find('> .dropdown-menu > .dropdown-item').removeClass('d-none');\n }\n\n $('.menu-responsive .nav-item').not('.show').addClass('d-none');\n\n $(this).attr('aria-expanded', 'true');\n e.preventDefault();\n var topCategory = $(this).parent().find('.top-category');\n $(this).parent().find('.navbar-brand').detach();\n $(this).parent().find('.back').after(topCategory);\n $(this).parent().find('.top-category > a').removeClass('nav-link').addClass('top-nav-link');\n handleDropDownOnShow();\n }\n })\n .on('mouseenter', function () {\n if (isDesktop(this)) {\n var eventElement = this;\n $('.navbar-nav > li').each(function () {\n if (!$.contains(this, eventElement)) {\n $(this).find('.show').each(function () {\n clearSelection(this);\n });\n if ($(this).hasClass('show')) {\n $(this).removeClass('show');\n $(this).children('ul.dropdown-menu').removeClass('show');\n $(this).children('.nav-link').attr('aria-expanded', 'false');\n }\n }\n });\n // need to close all the dropdowns that are not direct parent of current dropdown\n $(this).parent().addClass('show');\n $(this).siblings('.dropdown-menu').addClass('show');\n $(this).attr('aria-expanded', 'true');\n }\n })\n .parent()\n .on('mouseleave', function () {\n if (isDesktop(this)) {\n $(this).removeClass('show');\n $(this).children('.dropdown-menu').removeClass('show');\n $(this).children('.nav-link').attr('aria-expanded', 'false');\n }\n });\n\n $('.navbar>.close-menu>
15.close-button, .modal-background').on('click', function (e) {\n e.preventDefault();\n $('.menu-toggleable-left').removeClass('in');\n if ($('.refinement-bar').hasClass('hidden')) {\n $('.refinement-bar').hide();\n $('.refinement-bar').removeClass('hidden');\n }\n $('.modal-background').hide();\n $('body').removeClass('modal-open');\n $('.navbar-toggler').focus();\n //$('.main-menu').attr('aria-hidden', 'true');\n $('.main-menu').siblings().attr('aria-hidden', 'false');\n $('header').siblings().attr('aria-hidden', 'false');\n $('.menu-responsive').siblings().removeClass('d-none').addClass('d-xl-none');\n\n if (!$('.menu-responsive .nav-item.show').length) {\n $('.menu-responsive .nav-item').not('.show').removeClass('d-none');\n handleDropDownOnHide($('.menu-responsive .nav-item'));\n }\n else {\n handleDropDownOnHide($('.show .isMobileMenu > .dropdown-menu > li'));\n\n }\n });\n\n $('.navbar-nav').on('click', '.back', function (e) {\n e.preventDefault();\n clearSelection(this);\n $('.menu-responsive').siblings().removeClass('d-none').addClass('d-xl-none');\n if (!$('.menu-responsive .nav-item.show').length) {\n $('.menu-responsive .nav-item').not('.show').removeClass('d-none');\n handleDropDownOnHide($('.menu-responsive .nav-item'));\n }\n else {\n handleDropDownOnHide($('.show .isMobileMenu > .dropdown-menu > li'));\n }\n\n\n });\n\n $('.navbar-nav').on('click', '.close-button', function (e) {\n e.preventDefault();\n $('.navbar-nav').find('.top-category').detach();\n $('.navbar-nav').find('.nav-menu').detach();\n $('.navbar-nav').find('.show').removeClass('show');\n $('.menu-toggleable-left').removeClass('in');\n $('body').toggleClass('modal-open');\n $('.main-menu').siblings().attr('aria-hidden', 'false');\n $('header').siblings().attr('aria-hidden', 'false');\n $('.modal-background').hide();\n $('.menu-responsive').siblings().removeClass('d-none').addClass('d-xl-none');\n if (!$('.menu-responsive .nav-item.show').length) {\n $('.menu-responsive .nav-item').not('.show').removeClass('d-none');\n handleDropDownOnHide($('.menu-responsive .nav-item'));\n }\n else {\n handleDropDownOnHide($('.show .isMobileMenu > .dropdown-menu > li'));\n }\n });\n\n $('.navbar-toggler').click(function (e) {\n e.preventDefault();\n $('.main-menu').toggleClass('in');\n $('.modal-background').show();\n $('.main-menu').removeClass('d-none');\n $('.main-menu').attr('aria-hidden', 'false');\n $('.main-menu').siblings().attr('aria-hidden', 'true');\n $('header').siblings().attr('aria-hidden', 'true');\n $('.main-menu .nav.navbar-nav .nav-link').first().focus();\n $('body').toggleClass('modal-open');\n });\n\n\n keyboardAccessibility('.navbar-header .user', {\n 40: function ($popover) { // down\n if ($popover.children('a').first().is(':focus')) {\n $popover.children('a').first().next().focus();\n } else {\n $popover.children('a').first().focus();\n }\n },\n 38: function ($popover) { // up\n if ($popover.children('a').first().is(':focus')) {\n $(this).focus();\n $popover.removeClass('show');\n } else {\n $popover.children('a').first().focus();\n }\n },\n 27: function ($popover) { // escape\n $(this).focus();\n $popover.removeClass('show');\n },\n 9: function ($popover) { // tab\n $popover.removeClass('show');\n }\n },\n function () {\n var $popover = $('.user .popover');\n if (!($popover.hasClass('show'))) {\n $popover.addClass('show');\n }\n return $popover;\n }\n );\n\n $('.navbar-header .user').on('mouseenter focusin', function () {\n if ($('.navbar-header .user .popover').length > 0) {\n $('.navbar-header .user .popover').addClass('show');\n }\n });\n\n $('.navbar-header .user').on('mouseleave', function () {\n $('.navbar-header .user .popover').removeClass('show');\n });\n\n $(\".search-desktop .search-field\").on('click', function (e) {\n e.preventDefault();\n if ($(\".logobox\").length === 0) {\n $(\".search-desktop\").addClass(\"expand\");\n } else {\n $(\".search-desktop\").addClass(\"expand-large\");\n }\n $(\".search-desktop .fa-search\").hide();\n $(\".search-desktop .reset-button\").show();\n $('.search-background').addClass('active')\n $('.container-menu').hide();\n });\n \n function manageSearchInputValue () {\n var searchInput = document.querySelectorAll('input[name=\"q\"]');\n let itemValue = \"\";\n if (searchInput.length !== 0) {\n searchInput.forEach(function(item) {\n if (item.classList.contains('activeSearch')) {\n if (item.value !== \"\") {\n itemValue = item.value;\n searchInput.forEach((input) => input.value = itemValue)\n }\n }\n })\n }\n }\n\n $(document).mouseup(function (e) {\n var container = $(\".suggestions-wrapper, .form-control\");\n\n // If the target of the click isn't the container\n if (!container.is(e.target) && container.has(e.target).length === 0) {\n container.removeClass('show');\n $(\".search-desktop\").removeClass(\"expand expand-large\");\n $(\".search-desktop .fa-search\").show();\n $(\".search-desktop .reset-button\").hide();\n $('.container-menu').show();\n $('.search-background').removeClass('active');\n manageSearchInputValue();\n $('.reset-button').removeClass('d-sm-block')\n $('.suggestions').detach();\n }\n });\n\n var num = 40; //number of pixels before modifying styles\n var initialSrc = $('.navbar .navbar-brand img').attr('src');\n var scrollSrc = $('.navbar .navbar-brand img').data('imagesmall');\n var logoWidth = $('.navbar-brand img').data('imagewidth');\n var logoHeight = $('.navbar-brand img').data('imageheight');\n var logoSmallWidth = $('.navbar-brand img').data('imagesmallwidth');\n var logoSmallHeight = $('.navbar-brand img').data('imagesmallheight');\n\n $(window).bind('scroll', function () {\n manageSearchInputValue();\n if (($(window).width() + 17) >= 1280) {\n if ($(window).scrollTop() > num) {\n $('header .navbar, .search-background, .suggestions-wrapper').addClass('sticky');\n $('.navbar .navbar-brand img').attr('src', scrollSrc);\n $('.navbar .navbar-brand img').attr('width', logoSmallWidth);\n $('.navbar .navbar-brand img').attr('height', logoSmallHeight);\n $('.logoInHeader .navbar-brand img').removeClass('d-none');\n $('.main-menu').removeClass(\"d-none\");\n $('.main-menu').addClass(\"d-block\");\n $('.picto-scroll').addClass('d-flex');\n $('.site-search form .form-control').addClass('scrollForm');\n } else {\n $('header .navbar, .search-background, .suggestions-wrapper').removeClass('sticky');\n if ( $('.search-background').length !== 0 && $('.search-background')[0].classList.contains('active')) {\n $('.main-menu').addClass(\"d-none\");\n $('.main-menu').removeClass(\"d-block\");\n } else {\n $('.main-menu').removeClass(\"d-none\");\n $('.main-menu').addClass(\"d-block\");\n }\n $('.navbar .navbar-brand img').attr('src', initialSrc);\n $('.navbar .navbar-brand img').attr('width', logoWidth);\n $('.navbar .navbar-brand img').attr('height', logoHeight);\n $('.logoInHeader .navbar-brand img').addClass('d-none');\n $('.picto-scroll').removeClass('d-flex');\n $('.site-search form .form-control').removeClass('scrollForm');\n }\n };\n });\n\n if (!isDesktop(this)) {\n $('.dropdown-menu').addClass('col-12');\n }\n\n $('.navbar-nav .nav-item')\n .on('mouseover keyup', function (e) {\n if (e.type === 'mouseover' || e.type === 'keyup' && e.keyCode === 13 || e.type === 'keyup' && e.keyCode === 32) {\n if (($(window).width() + 17) >= 1280) {\n $(this).find('.mega-menu').addClass('show');\n \n if ($(this).hasClass('dropdown')) {\n $('.modal-background').show().addClass('in-top');\n }\n }\n }\n })\n .on('mouseout', function () {\n if (($(window).width() + 17) >= 1280) {\n $(this).find('.mega-menu').removeClass('show');\n $('.modal-background').hide().removeClass('in-top');\n }\n });\n\n $('.search-picto, .search-mobile .reset-button, .search-field').click(function (e) {\n $('.search-mobile').toggleClass('show');\n $('.search-mobile').hasClass('show') ? ($('.header').addClass('nav-down'), $('.header').removeClass('scrollUp')) : false ;
15\n document.querySelectorAll(\".search-field\").forEach((item) => item.classList.remove('activeSearch'))\n e.currentTarget.classList.add('activeSearch');\n window.innerWidth < 1280 ? $('.search-field').focus() : $('.search-field').focus({preventScroll: true});\n $('.search-background').toggle();\n $('body').toggleClass('no-scroll');\n });\n\n $('.search-background').on('click',function(){\n $('.search-mobile').toggleClass('show');\n $('.search-mobile').hasClass('show') ? ($('.header').addClass('nav-down'), $('.header').removeClass('scrollUp')) : false ;\n $('.search-field').blur();\n $('.search-background').removeClass('active');\n $('.search-background').css('display', 'none');\n $('body').toggleClass('no-scroll');\n })\n\n if ($('.user-message').hasClass('logged')) {\n $('.sticky-account').attr('data-bs-toggle', 'modal');\n $('.sticky-account').attr('data-bs-target', '#logoutModal');\n $('.mobile-account').attr('data-bs-toggle', 'modal');\n $('.mobile-account').attr('data-bs-target', '#logoutModal');\n };\n\n $('#recapcheckout').siblings('#headerNoMenu').find('.pull-left').detach();\n\n $(\"#menu_stores_link\").click(function () {\n window.location.href = $(this).attr(\"href\");\n });\n\n $('body').on('click','.mega-menu span.dropdown-link',function(e){\n var linkEncryptedAttr = $(this).data('href');\n var hrefDecrypted = atob(linkEncryptedAttr);\n window.open(hrefDecrypted,\"_self\");\n });\n\n $('body').on('click','.menu-responsive span.dropdown-link',function(e){\n var linkEncryptedAttr = $(this).data('href');\n var hrefDecrypted = atob(linkEncryptedAttr);\n window.open(hrefDecrypted,\"_self\");\n });\n\n $('body').on('click','.mega-menu span.nav-link',function(e){\n var linkEncryptedAttr = $(this).data('href');\n var hrefDecrypted = atob(linkEncryptedAttr);\n window.open(hrefDecrypted,\"_self\");\n });\n\n $('body').on('click','.menu-responsive span.nav-link',function(e){\n var linkEncryptedAttr = $(this).data('href');\n var hrefDecrypted = atob(linkEncryptedAttr);\n window.open(hrefDecrypted,\"_self\");\n });\n\n $(function() {\n if($('.nav-header .before-loading').length && $('.active-loader').length) \n $('.nav-header .before-loading').removeClass('before-loading');\n $('.nav-header .before-loading_menu').removeClass('before-loading_menu'); \n $('.nav-header .before-loading_subcat').remove();\n $('.before-loading_menu-burger').removeClass('before-loading_menu-burger');\n });\n\n $(window).resize();\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/menu.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/miniCart.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar cart = __webpack_require__(/*! ../cart/cart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/cart/cart.js\");\nvar displayNotification = __webpack_require__(/*! ../ds/displayNotification */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js\");\n\nvar updateMiniCart = true;\n\nfunction appendToUrl(url, params) {\n var newUrl = url;\n newUrl += (newUrl.indexOf('?') !== -1 ? '&' : '?') + Object.keys(params).map(function (key) {\n return key + '=' + encodeURIComponent(params[key]);\n }).join('&');\n\n return newUrl;\n}\n\nfunction changeReco(contentJsonReco,url,divreco){\n \n var contentJsonRecoNew = contentJsonReco.toString();\n contentJsonRecoNew = contentJsonRecoNew.replace(/\\\\n/g, \"\\\\n\") \n .replace(/\\\\'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\\\\\"')\n .replace(/\\\\&/g, \"\\\\&\")\n .replace(/\\\\r/g, \"\\\\r\")\n .replace(/\\\\t/g, \"\\\\t\")\n .replace(/\\\\b/g, \"\\\\b\")\n .replace(/\\\\f/g, \"\\\\f\")\n .replace(\"/\",\"\");\n // remove non-printable and other non-valid JSON chars\n contentJsonRecoNew = contentJsonRecoNew.replace(/[\\u0000-\\u0019]+/g,\"\"); \n var contentReco = JSON.stringify(contentJsonRecoNew);\n\n var urlParams = {\n contentReco: contentReco,\n divreco: divreco,\n template: 'layer'\n };\n\n var urlChangeReco = appendToUrl(url, urlParams);\n\n $.ajax({\n url: urlChangeReco,\n method: 'GET',\n dataType: 'html',\n success: function (html) {\n var $recoDiv = $('#'+divreco);\n $recoDiv.html(html);\n },\n error: function (err) {\n \n }\n });\n\n}\n\n/**\n * appends params to a url\n * @param {string} data - data returned from the server's ajax call\n */\nfunction displayMessageAndRemoveFromCart(data) {\n $.spinner().stop();\n var status = data.success ? 'success' : 'error';\n\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), status, data.msg);\n\n var $targetElement = $('a[data-pid=\"' + data.pid + '\"]').closest('.product-info').find('.remove-product');\n var itemToMove = {\n actionUrl: $targetElement.data('action'),\n productID: $targetElement.data('pid'),\n productName: $targetElement.data('name'),\n uuid: $targetElement.data('uuid')\n };\n $('body').trigger('afterRemoveFromCart', itemToMove);\n setTimeout(function () {\n $('.cart.cart-page #removeProductModal').modal('show');\n }, 2000);\n}\n/**\n * move items from Cart to wishlist\n * returns json object with success or error message\n */\nfunction moveToWishlist() {\n $('body').on('click', '.product-move .move', function (e) {\n e.preventDefault();\n var url = $(this).attr('href');\n var pid = $(this).data('pid');\n var optionId = $(this).closest('.product-info').find('.lineItem-options-values').data('option-id');\n var optionVal = $(this).closest('.product-info').find('.lineItem-options-values').data('value-id');\n optionId = optionId || null;\n optionVal = optionVal || null;\n if (!url || !pid) {\n return;\n }\n\n $.spinner().start();\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: {\n pid: pid,\n optionId: optionId,\n optionVal: optionVal\n }
15,\n success: function (data) {\n displayMessageAndRemoveFromCart(data);\n },\n error: function (err) {\n displayMessageAndRemoveFromCart(err);\n }\n });\n });\n}\n\nfunction updateEResaBasket(evt) {\n if (evt.data.event === 'updateReservedProduct') {\n $('body').addClass('overflow-hidden');\n var url = $('.minicart-eresa').data('action-url').toString();\n url = url.toString().replace(/(?:ShowEresaCart)/,'UpdateEresaCart');\n $.ajax({\n url: url+ '?quantity='+ evt.data.nbItems + '&products=' + JSON.stringify(evt.data.products),\n type: 'get',\n dataType: 'json',\n success: function (data) {\n if(data.quantity > 0) {\n $('.qty-bullet').html(data.quantity);\n } else {\n $('.minicart-eresa').addClass('d-none');\n $('.eresa-separator').addClass('d-none');\n }\n }\n });\n } else if (evt.data.event === 'close') {\n $('.onestock-modal').hide();\n $('body').removeClass('overflow-hidden');\n }\n}\n\nmodule.exports = {\n cart: function () {\n cart();\n\n $('.js-minicart').on('count:update', function (event, count) {\n if (count && $.isNumeric(count.quantityTotal)) {\n $('.minicart .minicart-quantity').text(count.quantityTotal);\n const miniCartHideNoLink = document.querySelector('.minicart-total.hide-no-link');\n const miniCartHideNoLinkAttr = miniCartHideNoLink.getAttribute('data-redirect-basket');\n let redirectBasket;\n window.innerWidth < 1280 && miniCartHideNoLink !== null && miniCartHideNoLinkAttr !== null && miniCartHideNoLinkAttr == 'true' ? redirectBasket = true : redirectBasket = false;\n if (count.quantityTotal > 0 && redirectBasket == false) {\n $('.minicart-total').attr('data-bs-toggle', 'modal');\n $('.minicart-total').attr('data-bs-target', '#miniCartModal');\n $('.minicart-link').removeAttr('href');\n }\n }\n });\n $('.js-minicart').on('keyup', function (e) {\n e.key === \"Enter\" ? $('.js-minicart').click() : false ;\n })\n $('.js-minicart').on('click', function () {\n let url = $(this).data('action-url');\n let count = parseInt($('.js-minicart .minicart-quantity').text(), 10);\n let miniCartModal = $('.js-minicart-body');\n if (count !== 0 && $('.minicart .popover.show').length === 0) {\n if (!updateMiniCart) {\n return;\n }\n miniCartModal.spinner().start();\n $.ajax({\n url: url,\n type: 'get',\n success: function (data) {\
15n if (data.error) {\n window.location.href = data.redirectUrl;\n } else {\n miniCartModal.empty();\n miniCartModal.append(data);\n updateMiniCart = false;\n }\n $.spinner().stop();\n },\n error: function (err) {\n $.spinner().stop();\n }\n });\n }\n });\n\n $('#miniCartModal').on('hidden.bs.modal', function () {\n $('#js-added-to-cart-msg').removeClass('show');\n // let GTMaddToCart = require('../gtm/util/layers/addToCart');\n // GTMaddToCart.removeDataLayer();\n let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n GTMcloseLayer.getDataLayerForAction();\n });\n\n $('.minicart-total').on('keyup', function (e) {\n e.key === \"Enter\" ? $('.minicart-total').click() : false ;\n })\n\n $('.minicart-total').on('click', function () {\n let GTMminiCart = __webpack_require__(/*! ../gtm/util/layers/miniCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/miniCart.js\");\n let urlProductCart = $(this).data('urlproductcart');\n $.ajax({\n url: urlProductCart,\n type: 'get',\n dataType: 'json',\n success: function (data) {\
15n GTMminiCart.getDataLayerForLayer({'products' : data.products});\n },\n error: function (err) {\n GTMminiCart.getDataLayerForLayer();\n }\n });\n });\n // $('.js-minicart').on('mouseenter focusin touchstart', function () {\n // var url = $('.js-minicart').data('action-url');\n // var count = parseInt($('.js-minicart .minicart-quantity').text(), 10);\n\n // if (count !== 0 && $('.minicart .popover.show').length === 0) {\n // if (!updateMiniCart) {\n // $('.minicart .popover').addClass('show');\n // return;\n // }\n\n // $('.minicart .popover').addClass('show');\n // $('.minicart .popover').spinner().start();\n // $.get(url, function (data) {\n // $('.minicart .popover').empty();\n // $('.minicart .popover').append(data);\n // updateMiniCart = false;\n // $.spinner().stop();\n // });\n // }\n // });\n // $('body').on('touchstart click', function (e) {\n // if ($('.minicart').has(e.target).length <= 0) {\n // $('.minicart .popover').removeClass('show');\n // $('.minicart .popover .addToCart').removeClass('show');\n // }\n // });\n // $('.js-minicart').on('mouseleave focusout', function (event) {\n // if ((event.type === 'focusout' && $('.minicart').has(event.target).length > 0)\n // || (event.type === 'mouseleave' && $(event.target).is('.minicart .quantity'))\n // || $('body').hasClass('modal-open')) {\
15n // event.stopPropagation();\n // return;\n // }\n // $('.minicart .popover').removeClass('show');\n // $('.minicart .popover .addToCart').removeClass('show');\n // });\n $('body').on('change', '.minicart .quantity', function () {\n if ($(this).parents('.bonus-product-line-item').length && $('.cart-page').length) {\n location.reload();\n }\n });\n $('body').on('product:afterAddToCart', function () {\n updateMiniCart = true;\n });\n $('body').on('cart:update', function () {\n updateMiniCart = true;\n });\n },\n showEresaCart: function () {\n $(document).on('click', '.minicart-eresa', function () {\n var url = $(this).data('action-url');\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n $('.onestock-modal').show();\n $('.onestock-frame').html(data.url);\n }\n });\n });\n },\n hideOneStockIframe: function() {\n $('body').on('click', '.onestock-content .icon-cross-black', function () {\n $('.onestock-modal').hide();\n });\n },\n eventIframe: function() {\n if (window.addEventListener) {\n window.addEventListener('message', updateEResaBasket,\n false);\n } else {\n window.attachEvent('onmessage', updateEResaBasket);\n }\n },\n moveToWishlist: moveToWishlist,\n caastRemoveProductModal:function() {\n $('#removeProductModal').on('hidden.bs.modal', function (e) {\n $('body').removeClass('modal-opendelete');\n });\n }\n\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/miniCart.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/reviews.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n\nfunction reviewsShowMoreLess() {\n $('.review-comment .comment').each(function () {\n var $el = $(this);\n var $elParent = $el.parent('.review-comment');\n\n var $c = $el\n .clone()\n .css('display', 'block')\n .removeClass('text-ellipsis--3')\n .appendTo($elParent)\n .hide();\n\n if( $c.height() === $el.height() ) {\n $el.siblings('.rmrl').css('display', 'none');\n }\n\n $c.remove();\n\n $el.siblings('.rmrl').click(function (e) {\n\n if($el.hasClass('text-ellipsis--3')) {\n $el.removeClass('text-ellipsis--3');\n $el.parents('.review-body').css('height', 'unset');\n }else{\n $el.addClass('text-ellipsis--3');\n $el.parents('.review-body').css('height', '228px');\n }\n $(this).find('span').toggleClass('d-none');\n \n });\n });\n}\n\nmodule.exports = {\n reviewsShowMoreLess : reviewsShowMoreLess,\n};\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/reviews.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/scrollAnimate.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = function (element) {\n var position = element && element.length ? element.offset().top : 0;\n $('html, body').animate({\n scrollTop: position\n }, 500);\n if (!element) {\n $('.logo-home').focus();\n }\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/scrollAnimate.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/search.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar debounce = __webpack_require__(/*! lodash/debounce */ \"../storefront-reference-architecture/node_modules/lodash/debounce.js\");\nvar endpoint = $('.suggestions-wrapper').data('url');\nvar minChars = 3;\nvar UP_KEY = 38;\nvar DOWN_KEY = 40;\nvar DIRECTION_DOWN = 1;\nvar DIRECTION_UP = -1;\n\n/**\n * Retrieves Suggestions element relative to scope\n *\n * @return {JQuery} - .suggestions-wrapper element\n */\nfunction getSuggestionsWrapper() {\n return $(document).find('.suggestions-wrapper')\n}\n\n/**\n * Determines whether DOM element is inside the .search-mobile class\n *\n * @param {Object} scope - DOM element, usually the input.search-field element\n * @return {boolean} - Whether DOM element is inside div.search-mobile\n */\nfunction isMobileSearch(scope) {\n return !!$(scope).closest('.search-mobile').length;\n}\n\n/**\n * Remove modal classes needed for mobile suggestions\n *\n */\nfunction clearModals() {\n $('body').removeClass('modal-open');\n $('header').siblings().attr('aria-hidden', 'false');\n $('.suggestions').removeClass('modal');\n}\n\n/**\n * Apply modal classes needed for mobile suggestions\n *\n * @param {Object} scope - Search input field DOM element\n */\nfunction applyModals(scope) {\n if (isMobileSearch(scope)) {\n $('body').addClass('modal-open');\n $('header').siblings().attr('aria-hidden', 'true');\n getSuggestionsWrapper().find('.suggestions').addClass('modal');\n }\n}\n\n/**\n * Tear down Suggestions panel\n */\nfunction tearDownSuggestions() {\n clearModals();\n $('.search-mobile .suggestions').unbind('scroll');\n getSuggestionsWrapper.empty();\n}\n\n/**\n * Toggle search field icon from search to close and vice-versa\n *\n * @param {string} action - Action to toggle to\n */\nfunction toggleSuggestionsIcon(action) {\n var mobileSearchIcon = '.search-mobile button.';\n var iconSearch = 'fa-search';\n var iconSearchClose = 'fa-close';\n\n if (action === 'close') {\n $(mobileSearchIcon + iconSearch).removeClass(iconSearch).addClass(iconSearchClose).attr('type', 'button');\n } else {\n $(mobileSearchIcon + iconSearchClose).removeClass(iconSearchClose).addClass(iconSearch).attr('type', 'submit');\n }\n}\n\n/**\n * Determines whether the \"More Content Below\" icon should be displayed\n *\n * @param {Object} scope - DOM element, usually the input.search-field element\n */\nfunction handleMoreContentBelowIcon(scope) {\n if (($(scope).scrollTop() + $(scope).innerHeight()) >= $(scope)[0].scrollHeight) {\n $('.more-below').fadeOut();\n } else {\n $('.more-below').fadeIn();\n }\n}\n\n/**\n * Positions Suggestions panel on page\n *\n * @param {Object} scope - DOM element, usually the input.search-field element\n */\nfunction positionSuggestions(scope) {\n var $suggestions;\n\n if (isMobileSearch(scope)) {\n handleMoreContentBelowIcon(scope);\n\n // Unfortunately, we have to bind this dynamically, as the live scroll event was not\n // properly detecting dynamic suggestions element's scroll event\n $suggestions = getSuggestionsWrapper().find('.suggestions');\n $suggestions.scroll(function () {\n handleMoreContentBelowIcon(this);\n });\n }\n}\n\n/**\n * Process Ajax response for SearchServices-GetSuggestions\n *\n * @param {Object|string} response - Empty object literal if null response or string with rendered\n * suggestions template contents\n */\nfunction processResponse(response) {\n var $suggestionsWrapper = getSuggestionsWrapper().empty();\n $.spinner().stop();\n\n if (!(typeof (response) === 'object')) {\n $suggestionsWrapper.append(response).show();\n $(this).siblings('.reset-button').addClass('d-sm-block');\n positionSuggestions(this);\n\n if (isMobileSearch(this)) {\n toggleSuggestionsIcon('close');\n applyModals(this);\n }\n\n // Trigger screen reader by setting aria-describedby with the new suggestion message.\n var suggestionsList = $('.suggestions .item');\n if ($(suggestionsList).length) {\n $('input.search-field').attr('aria-describedby', 'search-result-count');\n } else {\n $('input.search-field').removeAttr('aria-describedby');\n }\n } else {\n $suggestionsWrapper.hide();\n }\n}\n\n/**\n * Retrieve suggestions\n *\n * @param {Object}
15 scope - Search field DOM element\n */\nfunction getSuggestions(scope) {\n if ($('.search-desktop')[0].classList.contains(\"expand-large\") || $('.search-mobile')[0].classList.contains(\"show\")) {\n if ($(scope).val().length >= minChars) {\n $.spinner().start();\n\n //spinner offset to keep searchbar visible\n $('.underlay').css('top', $('.search-background').position().top);\n\n $.ajax({\n context: scope,\n url: endpoint + encodeURIComponent($(scope).val()),\n method: 'GET',\n success: processResponse,\n error: function () {\n $.spinner().stop();\n }\n });\n } else {\n toggleSuggestionsIcon('search');\n $(scope).siblings('.reset-button').removeClass('d-sm-block');\n clearModals();\n getSuggestionsWrapper().empty();\n }\n } else {\n toggleSuggestionsIcon('search');\n $(scope).siblings('.reset-button').removeClass('d-sm-block');\n clearModals();\n getSuggestionsWrapper().empty();\n }\n}\n\n/**\n * Handle Search Suggestion Keyboard Arrow Keys\n *\n * @param {Integer} direction takes positive or negative number constant, DIRECTION_UP (-1) or DIRECTION_DOWN (+1)\n */\nfunction handleArrow(direction) {\n // get all li elements in the suggestions list\n var suggestionsList = $('.suggestions .item');\n if (suggestionsList.filter('.selected').length === 0) {\n suggestionsList.first().addClass('selected');\n $('input.search-field').each(function () {\n $(this).attr('aria-activedescendant', suggestionsList.first()[0].id);\n });\n } else {\n suggestionsList.each(function (index) {\n var idx = index + direction;\n if ($(this).hasClass('selected')) {\n $(this).removeClass('selected');\n $(this).removeAttr('aria-selected');\n if (suggestionsList.eq(idx).length !== 0) {\n suggestionsList.eq(idx).addClass('selected');\n suggestionsList.eq(idx).attr('aria-selected', true);\n $(this).removeProp('aria-selected');\n $('input.search-field').each(function () {\n $(this).attr('aria-activedescendant', suggestionsList.eq(idx)[0].id);\n });\n } else {\n suggestionsList.first().addClass('selected');\n suggestionsList.first().attr('aria-selected', true);\n $('input.search-field').each(function () {\n $(this).attr('aria-activedescendant', suggestionsList.first()[0].id);\n });\n }\n return false;\n }\n return true;\n });\n }\n}\n\n\nmodule.exports = function () {\n $('form[name=\"simpleSearch\"]').submit(function (e) {\n var suggestionsList = $('.suggestions .item');\n if (suggestionsList.filter('.selected').length !== 0) {\n e.preventDefault();\n suggestionsList.filter('.selected').find('a')[0].click();\n }\n });\n\n $('input.search-field').each(function () {\n /**\n * Use debounce to avoid making an Ajax call on every single key press by waiting a few\n * hundred milliseconds before making the request. Without debounce, the user sees the\n * browser blink with every key press.\n */\n var debounceSuggestions = debounce(getSuggestions, 300);\n $(this).on('keyup focus', function (e) {\n // Capture Down/Up Arrow Key Events\n switch (e.which) {\n case DOWN_KEY:\n handleArrow(DIRECTION_DOWN);\n e.preventDefault(); // prevent moving the cursor\n break;\n case UP_KEY:\n handleArrow(DIRECTION_UP);\n e.preventDefault(); // prevent moving the cursor\n break;\n default:\n debounceSuggestions(this, e);\n }\n });\n });\n\n $('body').on('click', function (e) {\n if (!$('.suggestions').has(e.target).length && !$(e.target).hasClass('search-field')) {\n $('.suggestions').hide();\n }\n });\n\n $('body').on('click touchend', '.search-mobile button.fa-close', function (e) {\n e.preventDefault();\n $('.suggestions').hide();\n toggleSuggestionsIcon('search');\n tearDownSuggestions();\n });\n\n $('.site-search .reset-button').on('click', function () {\n $(this).removeClass('d-sm-block');\n document.querySelectorAll('input.search-field').length !== 0 ? document.querySelectorAll('input.search-field').forEach((item) => item.value = \"\") : false;\n $('.search-background').removeClass('active');\n $('body').removeClass('modal-open')\n });
15\n\n if(!$('.user-message').hasClass('logged') && $('#title-category').data('isvp')){\n $('#connexionModal').modal('show');\n }\n}\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/search.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/toolTip.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n\nmodule.exports = function () {\n $('.info-icon').on('mouseenter focusin', function () {\n $(this).find('.tooltip').removeClass('d-none');\n });\n\n $('.info-icon').on('mouseleave focusout', function () {\n $(this).find('.tooltip').addClass('d-none');\n });\n};\n\n$(function () {\n $('[data-bs-toggle=\"tooltip\"]').tooltip(\"hide\");\n });\n\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/toolTip.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = function (element, type, content) {\n if (element !== null) {\n const alertNotification = element;\n alertNotification.classList.remove('alert', 'information', 'success', 'warning', 'error');\n alertNotification.setAttribute('aria-hidden', false);\n content !== undefined ? alertNotification.querySelector('.inner-content').textContent = content : false;\n setTimeout(() => { \n alertNotification.classList.remove('d-none');\n alertNotification.classList.add('alert', type);\n }, 10);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/formvalidationbackend.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n/**\n * Remove all validation. Should be called every time before revalidating form\n * @param {element} form - Form to be cleared\n * @returns {void}\n */\nfunction clearFormErrors(form) {\n $(form).find('.hint[role=alert]').remove();\n $(form).find('.ocs-input').each(function() {\n $(this).removeClass('dirty invalid');\n });\n $(form).find('.ocs-core-input').each(function() {\n $(this).removeClass('dirty invalid');\n });\n $(form).find('input').each(function() {\n $(this).attr('aria-invalid', 'false');\n });\n}\n\nmodule.exports = function (formElement, data) {\n // clear form validation first\n clearFormErrors(formElement);\n $('.alert', formElement).remove();\n\n let firstErrorElement = null;\n\n if (typeof data === 'object' && data.fields) {\n Object.keys(data.fields).forEach(function (key) {\n if (data.fields[key]) {\n let $input = $(formElement).find('[name=\"' + key + '\"]');\n let $inputWrapper;\n if ($input.tagName !== 'TEXTAREA' && $input[0].tagName !== 'TEXTAREA') {\n $input.closest('.ocs-input').length !== 0 ? $inputWrapper = $input.closest('.ocs-input') : $inputWrapper = $input.closest('.ocs-core-input') ; \n } else {\n $input.closest('.ocs-textarea').length !== 0 ? $inputWrapper = $input.closest('.ocs-textarea') : $inputWrapper = $input.closest('.ocs-core-textarea');\n }\n $inputWrapper.addClass('dirty invalid');\n const ariaDescribedBy = \"err_\"+$input[0].id+\"\";\n $inputWrapper.append(`\n <div class=\"hint\" role=\"alert\" id=\"${ariaDescribedBy}\">\n <p class=\"invalid-text\">\n <i class=\"ocs-icon danger alert-negative-default medium\" aria-hidden=\"true\"></i>\n `+data.fields[key]+`\n </p>\n </div>\n `);\n\n if (!firstErrorElement) {\n firstErrorElement = $inputWrapper;\n }\n }\n });\n } else if (typeof data === 'object' && data.fieldErrors) {\n $.each(data.fieldErrors, function(x, y) {\n let keyValue;\n const keyName = Object.keys(y);\n keyName.forEach(function(key) {\n keyValue = y[key];\n })\n let $input = $(formElement).find('[name=\"' + keyName + '\"]'); \n let $inputWrapper;\n if ($input.tagName !== 'TEXTAREA') {\n $input.closest('.ocs-input').length !== 0 ? $inputWrapper = $input.closest('.ocs-input') : $inputWrapper = $input.closest('.ocs-core-input') ; \n } else {\n $input.closest('.ocs-textarea').length !== 0 ? $inputWrapper = $input.closest('.ocs-textarea') : $inputWrapper = $input.closest('.ocs-core-textarea');\n }\n $inputWrapper.addClass('dirty invalid');\n const ariaDescribedBy = \"err_\"+$input[0].id+\"\";\n $inputWrapper.append(`\n <div class=\"hint\" role=\"alert\" id=\"${ariaDescribedBy}\">\n <p class=\"invalid-text\">\n <i class=\"ocs-icon danger alert-negative-default medium\" aria-hidden=\"true\"></i>\n `+keyValue+`\n </p>\n </div>\n `);\n\n if (!firstErrorElement) {\n firstErrorElement = $inputWrapper;\n }\n });\n } else {\n if (data && typeof data === 'object') {\n for (let key in data) {\n if (data[key] && data[key].htmlName !== undefined && data[key].valid !== true) {\n const htmlName = data[key].htmlName;\n let $input = $(formElement).find('[name=\"' + htmlName + '\"]'); \n let $inputWrapper;\n if ($input.tagName !== 'TEXTAREA') {\n $input.closest('.ocs-input').length !== 0 ? $inputWrapper = $input.closest('.ocs-input') : $inputWrapper = $input.closest('.ocs-core-input') ; \n } else {\n $input.closest('.ocs-textarea').length !== 0 ? $inputWrapper = $input.closest('.ocs-textarea') : $inputWrapper = $input.closest('.ocs-core-textarea');\n }\n $inputWrapper.addClass('dirty invalid');\n const ariaDescribedBy = \"err_\"+$input[0].id+\"\";\n let errorMessage;\n if (data[key].error) {\n errorMessage = data[key].error;\n }
15 else {\n $input[0].validity.patternMismatch == true ? errorMessage = $input[0].getAttribute('data-pattern-mismatch') : false ;\n $input[0].validity.valueMissing == true ? errorMessage = $input[0].getAttribute('data-missing-error') : false ;\n $input[0].validity.tooLong == true || $input[0].validity.tooShort == true ? errorMessage = $input[0].getAttribute('data-range-error') : false ;\n }\n $inputWrapper.append(`\n <div class=\"hint\" role=\"alert\" id=\"${ariaDescribedBy}\">\n <p class=\"invalid-text\">\n <i class=\"ocs-icon danger alert-negative-default medium\" aria-hidden=\"true\"></i>\n `+errorMessage+`\n </p>\n </div>\n `);\n\n if (firstErrorElement == null) {\n firstErrorElement = $inputWrapper;\n }\n }\n };\n }\n }\n\n if (firstErrorElement) {\n $('html, body').animate({\n scrollTop: firstErrorElement.offset().top - 100\n }, 500);\n }\n};\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/formvalidationbackend.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/formvalidationfrontend.js":function(module,exports,__webpack_require__){"use strict";eval("\nmodule.exports = function (formElement) {\n event.preventDefault();\n if(formElement.hasClass('ocs-form') || formElement.hasClass('ocs-form-core')){\n \n let errorInput;\n let isValid = true;\n let firstErrorElement = null;\n formElement.find('.hint[role=\"alert\"]').remove();\n\n formElement.find('input, textarea').each(function() {\n let $input = $(this);\n let hint;\n\n // Ignorer les champs avec la classe .ignore\n if (!$input.hasClass('ignore')) {\n let $inputWrapper;\n if ($input[0].tagName !== 'TEXTAREA') {\n $input.closest('.ocs-input').length !== 0 ? $inputWrapper = $input.closest('.ocs-input') : $inputWrapper = $input.closest('.ocs-core-input') ; \n } else {\n $input.closest('.ocs-textarea').length !== 0 ? $inputWrapper = $input.closest('.ocs-textarea') : $inputWrapper = $input.closest('.ocs-core-textarea');\n }\n $inputWrapper.length !== 0 ? hint = $inputWrapper[0].querySelectorAll('.hint') : false ;\n let errorMessage = '';\n $inputWrapper.addClass('dirty');\n\n // For radio group\n if ($inputWrapper.length !== 0) {\n if ($inputWrapper[0].querySelector('.ocs-radio-button-group') !== null) {\n const inputRadio = $inputWrapper[0].querySelectorAll('.ocs-radio-button-group input[type=radio]');\n let inputRadioError = 0;\n inputRadio.forEach(function(input) {\n input.checked !== true ? inputRadioError++ : false ;\n })\n inputRadioError == inputRadio.length ? (errorMessage = $input.data('missing-error'), isValid = false) : false ;\n }\n }\n\n // Valider si le champ est requis et vide\n if ($input.attr('required') && $input.val().trim() === '' && $input[0].type !== 'hidden') {\n errorMessage = $input.data('missing-error');\n isValid = false;\n }\n \n // Valider le pattern si défini\n if ($input.val().trim() !== '' && $input[0].validity.patternMismatch && $input[0].getAttribute('data-pattern-mismatch') !== null) {\n errorMessage = $input[0].getAttribute('data-pattern-mismatch');\n isValid = false;\n }\n\n if ($input.val().trim() !== '' && ($input[0].validity.tooLong || $input[0].validity.tooShort || $input[0].validity.rangeUnderflow || $input[0].validity.rangeOverflow) && $input[0].getAttribute('data-range-error') !== null) {\n errorMessage = $input[0].getAttribute('data-range-error');\n isValid = false;\n }\n\n if($input.val().trim() === 'Choisissez une option' || $input.val().trim() === 'Kies een optie'){\n errorMessage = $input.data('missing-error');\n isValid = false;\n }\n \n if (errorMessage) {\n errorInput = $input;\n if (hint !== undefined) {\n hint.forEach(function(ht) {\n ht.getAttribute('role') !== null ? ht.remove() : false;\n })\n }\n let ariaDescribedBy = \"\";\n if ($inputWrapper.length !== 0) {\n if($inputWrapper[0].querySelector('input')){\n if ($inputWrapper[0].querySelector('input').getAttribute('aria-describedby') !== null && $inputWrapper[0].querySelector('.help-text') !== null) {\n ariaDescribedBy = $inputWrapper[0].querySelector('input').getAttribute('aria-describedby');\n }\n if ($inputWrapper[0].querySelector('input').getAttribute('aria-describedby') == null || ($inputWrapper[0].querySelector('input').getAttribute('aria-describedby') !== null && $inputWrapper[0].querySelector('input').getAttribute('aria-describedby').indexOf('err_'+$input[0].id+'') == -1)) {\n ariaDescribedBy += \" err_\"+$input[0].id+\"\";\n }\n }else if($inputWrapper[0].querySelector('textarea')){\n if ($inputWrapper[0].querySelector('textarea').getAttribute('aria-describedby') !== null && $inputWrapper[0].querySelector('.help-text') !== null) {\n ariaDescribedBy = $inputWrapper[0].querySelector('textarea').getAttribute('aria-describedby');\n }\n if ($inputWrapper[0].querySelector('textarea').getAttribute('aria-describedby') == null || ($inputWrapper[0].querySelector('textarea').getAttribute('aria-describedby') !== null && $inputWrapper[0].querySelector('textarea').getAttribute('aria-describedby').indexOf('err_'+$input[0].id+'') == -1)) {\n ariaDescribedBy += \" err_\"+$input[0].id+\"\";\n }\n }\n $input.attr('aria-describedby', ariaDescribedBy)\n }\n $inputWrapper.addClass('invalid');\n $inputWrapper.append(`\n <div class=\"hint\" role=\"alert\" id=\"${ariaDescribedBy}\">\n <p class=\"invalid-text\">\n <i class=\"ocs-icon danger alert-negative-default medium\" aria-hidden=\"true\"></i>\n ${errorMessage}\n </p>\n </div>\n `);\n $input.attr('aria-invalid', 'true');\n\n if (!firstErrorElement) {\n firstErrorElement = $inputWrapper;\n }\n } else {\n if ($inputWrapper.length !== 0) {\n if($inputWrapper[0].querySelector('input')){\n $inputWrapper[0].querySelector('input').getAttribute('aria-describedby') !== null && $inputWrapper[0].querySelector('input').getAttribute('aria-describedby').indexOf('err_'+$input[0].id+'') !== -1 ? $inputWrapper[0].querySelector('input').setAttribute('aria-describedby', $inputWrapper[0].querySelector('input').getAttribute('aria-describedby').replace('err_'+$input[0].id+'', '')) : false;\n }\n if (errorInput !== undefined && errorInput == $input) {\n $inputWrapper.removeClass('invalid');\n $input.attr('aria-invalid', 'false');\n $input.attr('aria-describedby', '')\n \n if (hint !== undefined) {\n hint.forEach(function(ht) {\n ht.getAttribute('role') !== null ? ht.remove() : false;\n })\n }\n }\n }\n }\n }\n });
15\n\n formElement.find('select').each(function() {\n let $input = $(this);\n let hint;\n\n // Ignorer les champs avec la classe .ignore\n if (!$input.hasClass('ignore')) {\n let $inputWrapper;\n $input.closest('.ocs-input').length !== 0 ? $inputWrapper = $input.closest('.ocs-input') : $inputWrapper = $input.closest('.ocs-core-input') ; \n \n $inputWrapper.length !== 0 ? hint = $inputWrapper[0].querySelectorAll('.hint') : false ;\n let errorMessage = '';\n $inputWrapper.addClass('dirty');\n\n // Valider si le champ est requis et vide\n if ($input.attr('required') && $input.val() === null && $input[0].type !== 'hidden') {\n errorMessage = $input.data('missing-error');\n isValid = false;\n }\n \n // Valider le pattern si défini\n if ($input.val() !== null && $input[0].validity.patternMismatch && $input[0].getAttribute('data-pattern-mismatch') !== null) {\n errorMessage = $input[0].getAttribute('data-pattern-mismatch');\n isValid = false;\n }\n\n if ($input.val() !== null && ($input[0].validity.tooLong || $input[0].validity.tooShort || $input[0].validity.rangeUnderflow || $input[0].validity.rangeOverflow) && $input[0].getAttribute('data-range-error') !== null) {\n errorMessage = $input[0].getAttribute('data-range-error');\n isValid = false;\n }\n\n if($input.val() === 'Choisissez une option' || $input.val() === 'Kies een optie'){\n errorMessage = $input.data('missing-error');\n isValid = false;\n }\n \n if (errorMessage) {\n errorInput = $input;\n if (hint !== undefined) {\n hint.forEach(function(ht) {\n ht.getAttribute('role') !== null ? ht.remove() : false;\n })\n }\n let ariaDescribedBy = \"\";\n if ($inputWrapper.length !== 0) {\n if($inputWrapper[0].querySelector('select')){\n if ($inputWrapper[0].querySelector('select').getAttribute('aria-describedby') !== null && $inputWrapper[0].querySelector('.help-text') !== null) {\n ariaDescribedBy = $inputWrapper[0].querySelector('select').getAttribute('aria-describedby');\n }\n if ($inputWrapper[0].querySelector('select').getAttribute('aria-describedby') == null || ($inputWrapper[0].querySelector('select').getAttribute('aria-describedby') !== null && $inputWrapper[0].querySelector('select').getAttribute('aria-describedby').indexOf('err_'+$input[0].id+'') == -1)) {\n ariaDescribedBy += \" err_\"+$input[0].id+\"\";\n }\n }\n $input.attr('aria-describedby', ariaDescribedBy)\n }\n $inputWrapper.addClass('invalid');\n $inputWrapper.append(`\n <div class=\"hint\" role=\"alert\" id=\"${ariaDescribedBy}\">\n <p class=\"invalid-text\">\n <i class=\"ocs-icon danger alert-negative-default medium\" aria-hidden=\"true\"></i>\n ${errorMessage}\n </p>\n </div>\n `);\n $input.attr('aria-invalid', 'true');\n\n if (!firstErrorElement) {\n firstErrorElement = $inputWrapper;\n }\n } else {\n if ($inputWrapper.length !== 0) {\n if($inputWrapper[0].querySelector('select')){\n $inputWrapper[0].querySelector('select').getAttribute('aria-describedby') !== null && $inputWrapper[0].querySelector('select').getAttribute('aria-describedby').indexOf('err_'+$input[0].id+'') !== -1 ? $inputWrapper[0].querySelector('select').setAttribute('aria-describedby', $inputWrapper[0].querySelector('select').getAttribute('aria-describedby').replace('err_'+$input[0].id+'', '')) : false;\n }\n if (errorInput !== undefined && errorInput == $input) {\n $inputWrapper.removeClass('invalid');\n $input.attr('aria-invalid', 'false');\n $input.attr('aria-describedby', '')\n \n if (hint !== undefined) {\n hint.forEach(function(ht) {\n ht.getAttribute('role') !== null ? ht.remove() : false;\n })\n }\n }\n }\n }\n }\n });\n\n if (isValid) {\n if(formElement.hasClass('noajax')){\n this.submit();\n } else {\n return true;\n }\n } else if (firstErrorElement) {\n $('html, body').animate({\n scrollTop: firstErrorElement.offset().top - 100\n }, 500);\n return false;\n }\n } else {\n return true;\n }\n};\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/formvalidationfrontend.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js":function(module,exports,__webpack_require__){"use strict";eval("\n// set all GTM events here\nvar GTMHelper = __webpack_require__(/*! ./gtm/GTMHelper.js */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js\");\nvar processInclude = __webpack_require__(/*! ./util */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js\");\nprocessInclude(__webpack_require__(/*! ./gtm/pwa-analytics.js */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js\"));\n\nvar gtm = {};\nvar $cache = {};\n\nfunction initializeCache() {\n $cache.document = $(document);\n}\n\nfunction isDatalayerDefined() {\n return typeof dataLayer !== 'undefined';\n}\n\nfunction removeDataLayer (event, template) {\n if (!isDatalayerDefined()) {\n return;\n }\n if (event) {\n var index = null;\n for (var i = 0; i < dataLayer.length && index == null; i++) {\n if (template != null) {\n if (dataLayer[i].event === event && dataLayer[i].layer.template === template)\n index = i;\n } else {\n if (dataLayer[i].event === event)\n index = i;\n }\n }\n if (index != null)\n dataLayer.splice(index, 1);\n }\n}\n\nfunction findDataLayer (event, template) {\n if (!isDatalayerDefined()) {\n return;\n }\n if (event) {\n for (var i = 0; i < dataLayer.length; i++) {\n if (template != null) {\n if (dataLayer[i].event === event && dataLayer[i].layer.template === template)\n return (dataLayer[i]);\n } else {\n if (dataLayer[i].event === event)\n return (dataLayer[i]);\n }\n }\n }\n return null;\n}\n\nfunction fillDataLayer (data){\n\tif (!isDatalayerDefined()) {\n return;\n }\n\n if (data)\n dataLayer.push(data);\n // dataLayer.push({\n // \"event\": data.event,\n // \"page\": data.page,\n // \"eeAction\": data.eeAction,\n // \"currencyCode\": data.currency,\n // \"checkoutStep\": data.checkoutStep,\n // \"checkoutType\": data.checkoutType,\n // \"products\": data.products\n // });\n return;\n}\n\nfunction fillSecondaryDataLayer(data){\n\tif (!isDatalayerDefined()) {\n return;\n }\n\n\tdataLayer.push({\n\t\t\"event\": data.event2,\n\t\t\"checkoutStep\": data.prevcheckoutStep,\n\t\t\"checkoutOption\": data.checkoutOption\n\t});\n}\n\nfunction initializeEvents() {\n $cache.document.on('paymentStepGTM', function(event, data) {\n \tdata.event='virtualPageview';\n \tdata.page='/payment';\n\t\tdata.checkoutStep='3';\n\t\tdata.prevcheckoutStep='2';\n\n\t\tfillDataLayer(data);\n \tfillSecondaryDataLayer(data);\n\n return;\n });\n}\n\nfunction clicCrossSell_GTM($click) {\n var title = '';\n var $title = $click.closest('.product-carousel').siblings('.title');\n if ($title.length === 0)\n $title = $click.closest('#slot-pushproduct').find('.title-reco');\n if ($title.length === 0) {\n \n $title = $click.closest('.container-reco').find('.swipper-title');\n }\n if ($title.length != 0) {\n var calloutmsg = $title.data('calloutmsg');\n var recommender = $title.data('recommender');\n title = calloutmsg;\n if (recommender)\n title = title + '/' + recommender;\n }\n \n var url = $click.data('gtm-url');\n var pid = $click.data('pid');\n $.ajax({\n url: url,\n data: {\n pid: pid\n },\n async: false,\n method: 'GET',\n success: function (data) {\
15n let GTMclicCrossSell = __webpack_require__(/*! ./gtm/util/actions/clicCrossSell */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js\");\n GTMclicCrossSell.getDataLayerForAction({\n product: data.product,\n title: title\n });\n }\n });\n}\n\nmodule.exports = {\n fillDataLayer : fillDataLayer,\n removeDataLayer : removeDataLayer,\n findDataLayer: findDataLayer,\n init : function() {\n initializeCache();\n initializeEvents();\n $cache.document.trigger('GTMReady');\n\n $(document).on('click', '.slotReco .clickproduct', function(){\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.slotReco .product-tile .tile-body .pdp-link .link', function(){\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.slotReco .product-tile .tile-body .color-swatches', function(){\n clicCrossSell_GTM($(this));\n });\n $(document).on('click', '.container-reco .clickproduct', function(){\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.container-reco .product-tile .tile-body .pdp-link .link', function(){\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.container-reco .product-tile .tile-body .color-swatches', function(){\n clicCrossSell_GTM($(this));\n });\n \n // Reco dans le mini-panier\n $(document).on('click', '.js-minicart-body .clickproduct', function () {\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.js-minicart-body .product-tile .tile-body .pdp-link .link', function () {\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.js-minicart-body .product-tile .tile-body .color-swatches', function () {\n clicCrossSell_GTM($(this));\n });\n }\n}\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js":function(module,exports){eval('getProductJsonBase = function (Product, price, quantity, addToCartOrigin) {\n if (Product.price) {\n var discount = Product.price.list ? Product.price.list.value : price\n discount = discount - price;\n if (discount != 0)\n discount = Math.round(discount * 100) / 100;\n }\n var rc = null;\n var rct = null;\n var rct_sku = \'\';\n if (Product.productType == \'variationGroup\') {\n rc = Product.id.toLowerCase();\n rct_sku = \'\';\n //not for layer\n } else if (Product.productType == \'variant\') {\n rct = Product.id.toLowerCase();\n rct_sku = Product.rctSku ? Product.rctSku : \'\';\n if (Product.variationGroupID) {\n rc = Product.variationGroupID;\n }\n }\n \n let r = Product.masterID || Product.id;\n let name = Product.productName ? Product.productName.toLowerCase() : "";\n let category = Product.primaryCategory && Product.primaryCategory.category ? Product.primaryCategory.category.toLowerCase() : null;\n let subCategory = Product.primaryCategory && Product.primaryCategory.subCategory ? Product.primaryCategory.subCategory.toLowerCase() : null;\n let subsubCategory = Product.primaryCategory && Product.primaryCategory.subSubCategory ? Product.primaryCategory.subSubCategory.toLowerCase() : null;\n let subsubsubCategory = Product.primaryCategory && Product.primaryCategory.subSubSubCategory ? Product.primaryCategory.subSubSubCategory.toLowerCase() : null;\n let categoryName = Product.primaryCategory && Product.primaryCategory.categoryname ? Product.primaryCategory.categoryname.toLowerCase() : null;\n let subCategoryName = Product.primaryCategory && Product.primaryCategory.subCategoryname ? Product.primaryCategory.subCategoryname.toLowerCase() : null;\n let subsubCategoryName = Product.primaryCategory && Product.primaryCategory.subSubCategoryname ? Product.primaryCategory.subSubCategoryname.toLowerCase() : null;\n let subsubsubCategoryName = Product.primaryCategory && Product.primaryCategory.subSubSubCategoryname ? Product.primaryCategory.subSubSubCategoryname.toLowerCase() : null;\n let gender = Product.sexe ? Product.sexe.toLowerCase() : "";\n let season = Product.season ? Product.season.toLowerCase() : "";\n let price_flag = Product.flagsPromo && Product.flagsPromo.flagPromoName ? Product.flagsPromo.flagPromoName.toLowerCase() : "";\n let product_flag = [];\n let productset_id;\n let productset_products_number;\n\n \n if (Product.flagsPromo && Product.flagsPromo.tabOfFlags && Product.flagsPromo.tabOfFlags.length > 0) {\n for (var i = 0; i < Product.flagsPromo.tabOfFlags.length; i++) {\n product_flag.push(Product.flagsPromo.tabOfFlags[i].name.toLowerCase());\n }\n }\n\n var flagNewName;\n if (Product.flagsPromo && Product.flagsPromo.flagNewName) {\n flagNewName = Product.flagsPromo.flagNewName;\n }\n\n let brand = Product.brand ? Product.brand.toLowerCase() : "";\n let rating = Product.rating;\n\n let price_calcul = price;\n if (Product.productType !== \'set\') {\n if (Product.price.type != undefined && Product.price.type == "range") {\n price_calcul = Product.price.max.sales.values;\n } else {\n price_calcul = Product.price.sales.value;\n }\n }\n\n let unitpriceAti = price_calcul;\n let brandName = Product.brandName ? Product.brandName.toLowerCase() : "";\n let brandTitle = Product.brandTitle ? Product.brandTitle.toLowerCase() : "";\n\n let productJson = {\n "r": r,\n "rc": rc,\n "rct": rct,\n "rct_sku": rct_sku,\n "name": name,\n "category": category,\n "subCategory": subCategory,\n "subsubCategory": subsubCategory,\n "subsubsubCategory": subsubsubCategory,\n "category_label": categoryName,\n "subCategory_label": subCategoryName,\n "subsubCategory_label": subsubCategoryName,\n "subsubsubCategory_label": subsubsubCategoryName,\n "gender": gender,\n "season": season,\n "price_flag": price_flag,\n "product_flag": product_flag,\n "new_flag": flagNewName,\n "brand": brand,\n "brandName": brandName,\n "brandTitle": brandTitle,\n "rating": rating,\n "unitpriceAti": unitpriceAti,\n "discountAti": discount,\n "hasVideo": !!(Product.brightcoveVideos),\n "imageNumber": Product.images && Product.images.large ? Product.images.large.length : 0\n };\n\n if (Product.productType == \'set\') {\n productJson.productset_id = Product.id;\n productJson.productset_products_number = Product.individualProducts.length;\n }\n\n if (quantity) {\n productJson.quantity = quantity;\n }\n \n if(addToCartOrigin){\n productJson.addToCartOrigin = addToCartOrigin;\n }\n\n return productJson;\n},\n\n module.exports = {\n populateProduct: function (productLineItems, addQuantity, addToCartOrigin) {\n // Prepare default value\n addQuantity = addQuantity || false;\n for (let i in productLineItems) {\n let item = productLineItems[i].product;\n //let price = item.basePrice ? item.basePrice.getValue() : item.price.sales.decimalPrice.value;\n let price = null;\n\n if (item.price != null) {\n if (item.price.sales != null) {\n if (item.price.sales.type == "range") {\n price = item.price.max.sales.values;\n } else {\n price = item.price.sales.value;\n }\n }\n }\n\n let quantity = null;\n if (addQuantity) {\n quantity = item.quantity || parseInt(addQuantity);\n }\n return (getProductJsonBase(item, price, quantity, addToCartOrigin));\n }\n },\n }\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = {\n pwaInstalled: function() {\n window.addEventListener('appinstalled', function(evt) {\n let GTMPWAInstalled = __webpack_require__(/*! ./util/actions/pwaInstalled */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js\");\n GTMPWAInstalled.getDataLayerForAction();\n });\n },\n usePWA: function() {\n window.addEventListener('load', function () {\n\n let displayMode = 'browser tab';\n\n // Pour Safari sur IOs qui ne dispose pas de matchMedia\n if (navigator.standalone) {\n displayMode = 'standalone-ios';\n }\n \n if (window.matchMedia('(display-mode: standalone)').matches) {\n displayMode = 'standalone';\n }\n\n var hasPWA = displayMode.indexOf('standalone') != -1 ? 'yes' : 'no';\n let GTMhasPWA = __webpack_require__(/*! ./util/pages/pwa */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js\");\n GTMhasPWA.getDataLayerForPage({\n hasPWA : hasPWA\n });\n \n });\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js":function(module,exports,__webpack_require__){eval("var gtm = __webpack_require__(/*! ../../../gtm */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js\");\n\nmodule.exports = {\n populateData : function (params) {\n var data = {\n \"event\": \"cart_update\",\n };\n\n data.e = {\n 'category' : 'cart',\n 'action' : 'update'\n }\n\n if (params.action) {\n data.e.label = params.action;\n }\n\n data.cart = {};\n\n var hasDiscountWithDetails = 'no';\n if (params.cart && params.cart.totals && params.cart.totals.hasDiscountWithDetails) {\n hasDiscountWithDetails = 'yes';\n }\n\n data.cart.hasOffers = hasDiscountWithDetails;\n\n if (params.cart && params.cart.hasSavings) {\n data.cart.hasSavings = params.cart.hasSavings;\n }\n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cart
15Update.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\nvar GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\n\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "clic cross-sell",\n };\n\n params = params || {};\n\n data.e = [];\n\n var product = [];\n if (params.product){\n product = (GTMHelper.populateProduct([{product : params.product}], false));\n }\n data.e={\n category: \'cross-sell\',\n action: params.title.trim(),\n product: product\n };\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicProductCart.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "clic product cart",\n };\n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicProductCart.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js":function(module,exports){eval('module.exports = {\n populateData : function (params) {\n var data = {\n "event": "closing layer",\n };\n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/colorChanged.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "analytics",\n };\n\n params = params || {};\n data.e = [];\n\n data.e={\n category: \'pdp\',\n action: \'color_changed\',\n product: {rc:params.idProductRC, rct: params.idProductRCT},\n label : params.label\n };\n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/colorChanged.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/editProduct.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\nvar GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\n\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "edit from cart",\n };\n\n params = params || {};\n\n var product = [];\n if (params.product){\n product = (GTMHelper.populateProduct([{product : params.product}], params.quantity, false));\n }\n\n data.e = [];\n data.e={\n category: "product action",\n action: "edit product",\n product: product\n };\n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/editProduct.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/identificationErrors.js":function(module,exports){eval('module.exports = {\n populateData : function (params) {\n var data = {\n "event": "analytics",\n };\n\n params = params || {};\n\n data.e = [];\n data.e={\n category: "account creation",\n action:"errors",\n label: params.reason\n };\n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/identificationErrors.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/loginReach5.js":function(module,exports){eval('module.exports = {\n populateData : function (params) {\n var data = {\n "event": "analytics",\n };\n\n params = params || {};\n\n data.e = [];\n data.e={\n category: "customer account",\n action: "external identification attempt",\n label: params.partner\n };\n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/loginReach5.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/newsletter.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "analytics",\n };\n\n params = params || {};\n\n data.e = [];\n data.e={\n category: "customer account",\n action:"newsletter",\n label: "newsletter subscription",\n };\n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/newsletter.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/promoCode.js":function(module,exports,__webpack_require__){eval("var gtm = __webpack_require__(/*! ../../../gtm */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js\");\n\nmodule.exports = {\n populateData : function (params) {\n var data = {\n \"event\": \"analytics\",\n };\n\n params = params || {};\n\n data.e = [];\n data.e.category = \"promocode\";\n\n if (params && params.validity && params.label) {\n data.e={\n category: \"promocode\",\n action: params.validity,\n label: params.label,\n };\n }\n \n var promoCode = [];\n if (params && params.totals && params.totals.discounts){\n for (var i = 0; i < params.totals.discounts.length ; i++) {\n var discount = params.totals.discounts[i];\n var discountData = {};\n\n discountData.label = discount.promotionID.split('-Valo')[0];\n discountData.value = discount.price ? parseFloat(discount.price.replace(',', '.')) : 0;\n /**\n * discountData.value need to be a positive float\n */\n discountData.value = Math.abs(discountData.value);\n \n discountData.state = 'activated';\n \n var type = 'amAuto';\n if (discount.isShippingDiscount) {\n type = 'freeShipping';\n } else if (discount.checkbox) {\n type = 'checkBox';\n }\n\n discountData.type = type;\n \n promoCode.push(discountData);\n \n }\n }\n \n if (params && params.totals && params.totals.uncheckedDiscounts) {\n for (var i = 0; i < params.totals.uncheckedDiscounts.length; i++) {\n var uncheckecDiscount = params.totals.uncheckedDiscounts[i];\n var discountData = {};\n discountData.label = uncheckecDiscount.promotionID ? uncheckecDiscount.promotionID.split('-Valo')[0]: '';\n discountData.state = 'available';\n discountData.type = 'checkBox';\n \n promoCode.push(discountData)\n \n }\n }\n \n\n data.order = {promoCode : promoCode}; \n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/promoCode.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "pwa installed",\n };\n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/ratingProduct.js":function(module,exports,__webpack_require__){eval('var GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\nvar gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n populateData : function (params) {\n var data = {\n event: "layer",\n };\n\n params = params || {};\n\n data.layer = [];\n data.layer={\n template: \'rating\',\n };\n\n if (params.product){\n var product = [];\n product = (GTMHelper.populateProduct([{product : params.product}], false));\n const {hasVideo, imageNumber, ... productDataUpdated} = product;\n data.layer.product = productDataUpdated;\n }\n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/ratingProduct.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/removeProduct.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\nvar GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\n\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "remove from cart",\n };\n\n params = params || {};\n\n var product = [];\n if (params.product){\n product = (GTMHelper.populateProduct([{product : params.product}], params.quantity,false));\n }\n\n data.e = [];\n data.e={\n category: "product action",\n action: "remove product",\n product: product\n };\n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/removeProduct.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/resetPassword.js":function(module,exports){eval('module.exports = {\n populateData : function (params) {\n var data = {\n "event": "analytics",\n };\n\n params = params || {};\n\n data.e = [];\n data.e={\n category: "customer account",\n action:"password reset request",\n label: params.result\n };\n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/resetPassword.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/sizeChanged.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "analytics",\n };\n\n params = params || {};\n data.e = [];\n\n data.e={\n category: \'pdp\',\n action: \'size_changed\',\n product: {rc:params.idProductRC, rct: params.idProductRCT},\n label : params.label\n };\n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/sizeChanged.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/storePdp.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\nvar GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\n\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "analytics",\n };\n\n params = params || {};\n var product = [];\n if (params.product){\n product = (GTMHelper.populateProduct([{product : params.product}], false));\n }\n\n data.e = [];\n data.e={\n category: "store_availability",\n action:"click",\n product: product,\n label: "layer",\n };\n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/storePdp.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/addToCart.js":function(module,exports,__webpack_require__){eval("var GTMHelper = __webpack_require__(/*! ../../GTMHelper */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js\");\nvar gtm = __webpack_require__(/*! ../../../gtm */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js\");\n\nvar template = 'add to cart';\nmodule.exports = {\n populateData : function (params) {\n var data = {\n \"event\": \"layer\",\n };\n\n params = params || {};\n\n if (params.product){\n if(params.product.productType == 'set') {\n data.product_array_bundle = [];\n data.layer={\n template: 'add_to_cart_productset',\n };\n var product = [];\n var pids = false;\n\n // check selected products in PS\n if(params.pidsObj) {\n var pids = JSON.parse(params.pidsObj);\n }\n\n for (let i in params.product.individualProducts) {\n var individualProduct = params.product.individualProducts[i];\n if(pids) {\n pids.forEach((pid) => {\n if(pid.pid == individualProduct.id) {\n var productToPopulate = GTMHelper.populateProduct([{product : individualProduct}], document.querySelector('#quantity-1') ? document.querySelector('#quantity-1 option:checked').value : false, params.pageOrigin);\n productToPopulate.productset_id = params.product.id;\n productToPopulate.rct = pid.pidOrigin;\n product.push(productToPopulate);\n }\n });\n } else {\n var productToPopulate = GTMHelper.populateProduct([{product : params.product}], document.querySelector('#quantity-1') ? document.querySelector('#quantity-1 option:checked').value : false, params.pageOrigin);\n productToPopulate.productset_id = params.product.id;\n productToPopulate.productset_products_number = params.product.individualProducts.length;\n product.push(productToPopulate);\n }\n }\n data.product_array_bundle = product;\n } else {\n data.layer = [];\n data.layer={\n template: template,\n };\n var product = [];\n product = (GTMHelper.populateProduct([{product : params.product}], document.querySelector('#quantity-1') ? document.querySelector('#quantity-1 option:checked').value : false, params.pageOrigin));\n data.layer.product = product;\n }\n if (params.product_array && params.product_array.length > 0) {\n data.product_array = params.product_array;\n }\n }\n\n if (params.currentBasketId) {\n data.cart = {\n id : params.currentBasketId,\n creation : params.isCartCreation\n }\n \n }\n\n return data;\n },\n removeDataLayer : function()\n {\n gtm.removeDataLayer('layer', template);\n },\n getDataLayerForLayer : function(params) {\n this.removeDataLayer();\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/addToCart.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/basketMerge.js":function(module,exports,__webpack_require__){eval('// gtm/util/layers/basketMerge.js\nvar gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n getDataLayerForLayer: function (params) {\n var data = {\n event: "basket_merge",\n \n cart: {\n id: params.newBasketId || null,\n old_id: params.oldBasketId || null\n }\n };\n\n gtm.fillDataLayer(data);\n }\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/basketMerge.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/editCart.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nvar template = \'cart modification\';\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "layer",\n };\n\n params = params || {};\n\n data.layer = [];\n data.layer={\n template: template,\n };\n\n return data;\n },\n removeDataLayer : function()\n {\n gtm.removeDataLayer(\'layer\', template);\n },\n getDataLayerForLayer : function(params) {\n this.removeDataLayer();\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/editCart.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/forgotPassword.js":function(module,exports){eval("var template = 'connexion';\nmodule.exports = {\n populateData : function (params) {\n var data = {\n \"event\": \"layer\",\n };\n\n params = params || {};\n \n\n data.layer = [];\n data.layer={\n template: template,\n name:'forgot password'\n };\n\n return data;\n },\n removeDataLayer : function()\n {\n gtm.removeDataLayer('layer', template);\n },\n getDataLayerForLayer : function(params) {\n this.removeDataLayer();\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/forgotPassword.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/localeSelector.js":function(module,exports){eval("var template = 'language';\nmodule.exports = {\n populateData : function (params) {\n var data = {\n \"event\": \"layer\",\n };\n\n params = params || {};\n\n data.layer = [];\n data.layer={\n template: template,\n };\n\n return data;\n },\n removeDataLayer : function()\n {\n gtm.removeDataLayer('layer', template);\n },\n getDataLayerForLayer : function(params) {\n this.removeDataLayer();\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/localeSelector.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/login.js":function(module,exports){eval("var template = 'connexion';\nmodule.exports = {\n populateData : function (params) {\n var data = {\n \"event\": \"layer\",\n };\n\n params = params || {};\n\n data.layer = [];\n data.layer={\n template: template,\n name: 'connexion'\n };\n\n if (params && params.abversion_kameleoon_r5) {\n data.layer.abversion_kameleoon_r5 = params.abversion_kameleoon_r5;\n }\n\n return data;\n },\n removeDataLayer : function()\n {\n gtm.removeDataLayer('layer', template);\n },\n getDataLayerForLayer : function(params) {\n this.removeDataLayer();\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/login.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/miniCart.js":function(module,exports,__webpack_require__){eval('var GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\n\nvar template = \'cart\';\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "layer",\n };\n\n params = params || {};\n\n data.layer = [];\n data.layer={\n template: template,\n };\n\n if (params.products){\n data.layer.product = params.products;\n }\n\n return data;\n },\n removeDataLayer : function()\n {\n gtm.removeDataLayer(\'layer\', template);\n },\n getDataLayerForLayer : function(params) {\n this.removeDataLayer();\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/miniCart.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/offersInformations.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nvar template = \'offers informations\';\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "layer",\n };\n\n params = params || {};\n\n data.layer = [];\n data.layer={\n template: template,\n };\n\n return data;\n },\n removeDataLayer : function()\n {\n gtm.removeDataLayer(\'layer\', template);\n },\n getDataLayerForLayer : function(params) {\n this.removeDataLayer();\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/offersInformations.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisCart.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nvar template = \'cart_payment_option\';\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "layer",\n };\n\n params = params || {};\n\n data.layer = [];\n data.layer={\n template: template,\n };\n\n return data;\n }, \n removeDataLayer : function()\n {\n gtm.removeDataLayer(\'layer\', template);\n },\n getDataLayerForLayer : function(params) {\n this.removeDataLayer();\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisCart.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisPDP.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nvar template = \'pdp_payment_option\';\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "layer",\n };\n\n params = params || {};\n\n data.layer = [];\n data.layer={\n template: template,\n };\n\n return data;\n }, \n removeDataLayer : function()\n {\n gtm.removeDataLayer(\'layer\', template);\n },\n getDataLayerForLayer : function(params) {\n this.removeDataLayer();\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisPDP.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/passwordToFillIn.js":function(module,exports){eval("var template = 'connexion';\nmodule.exports = {\n populateData : function (params) {\n var data = {\n \"event\": \"layer\",\n };\n\n params = params || {};\n \n\n data.layer = [];\n data.layer={\n template: template,\n name:'identification',\n option: 'password to fill in'\n };\n\n return data;\n },\n removeDataLayer : function()\n {\n gtm.removeDataLayer('layer', template);\n },\n getDataLayerForLayer : function(params) {\n this.removeDataLayer();\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/passwordToFillIn.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/quickViewCart.js":function(module,exports,__webpack_require__){eval('var GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\nvar gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nvar template = \'quickview cart\';\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "layer",\n };\n\n params = params || {};\n\n data.layer = [];\n data.layer={\n template: template,\n };\n if (params.product){\n var product = [];\n product = (GTMHelper.populateProduct([{product : params.product}], false, params.addedToCartOrigin));\n data.layer.product = product;\n }\n\n data.cart = [];\n data.cart={\n id:params.cartId,\n }\n \n return data;\n },\n removeDataLayer : function()\n {\n gtm.removeDataLayer(\'layer\', template);\n },\n getDataLayerForLayer : function(params) {\n this.removeDataLayer();\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/quickViewCart.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/return.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nvar template = \'return\';\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "layer",\n };\n\n params = params || {};\n\n data.layer = [];\n data.layer={\n template: template,\n };\n\n return data;\n },\n removeDataLayer : function()\n {\n gtm.removeDataLayer(\'layer\', template);\n },\n getDataLayerForLayer : function(params) {\n this.removeDataLayer();\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/return.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js":function(module,exports,__webpack_require__){eval("var GTMHelper = __webpack_require__(/*! ../../GTMHelper */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js\");\nvar gtm = __webpack_require__(/*! ../../../gtm */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js\");\n\npopulateData = function (dataLayer, params) {\n if (dataLayer.env)\n dataLayer.env.hasPWA = params.hasPWA;\n}\n\nmodule.exports = {\n removeDataLayer : function()\n {\n gtm.removeDataLayer('pageview');\n },\n findDataLayer : function()\n {\n return gtm.findDataLayer('pageview');\n },\n getDataLayerForPage : function(params) {\n var dataLayer = this.findDataLayer();\n if (dataLayer)\n populateData(dataLayer, params);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/helpers.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nfunction decode_base64(s) {\n var b = 0;\n var l = 0;\n var r = '';\n s = s.split('');\n var m = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n for (var i in s) {\n b = (b << 6) + m.indexOf(s[i]); l += 6;\n while (l >= 8) r += String.fromCharCode((b >>> (l -= 8)) & 0xff);\n }\n return r.trimRight();\n}\n\nfunction isElementInViewport (el) {\n if(el && el.offset()) {\n var elementTop = el.offset().top;\n var elementBottom = elementTop + el.outerHeight();\n \n var viewportTop = $(window).scrollTop();\n var viewportBottom = viewportTop + $(window).height();\n \n return elementBottom > viewportTop && elementTop < viewportBottom;\n }\n return;\n}\n\nfunction initLazyLoading() {\n var elements = document.querySelectorAll('.carousel-inner .carousel-item');\n elements.forEach(function(element) {\n if(!element.classList.contains('active')) {\n element.querySelector('img').setAttribute('loading', 'lazy');\n }\n });\n $('img').each(function() {\n if(isElementInViewport($(this))) {\n $(this).attr('loading', 'lazy');\n }\n });\n}\n\n\n$(function() {\n var lazyElts = document.querySelectorAll('.carousel-inner .carousel-item');\n\n lazyElts.forEach(function(elt) {\n if(!elt.classList.contains('active') && elt.querySelector('img')) {\n elt.querySelector('img').setAttribute('loading', 'lazy');\n }\n });\n\n $('img').each(function() {\n if($(this) && $(this).offset()) {\n var elementTop = $(this).offset().top;\n var elementBottom = elementTop + $(this).outerHeight();\n var viewportTop = $(window).scrollTop();\n var viewportBottom = viewportTop + $(window).height();\n\n if(!(elementBottom > viewportTop && elementTop < viewportBottom)) {\n $(this).attr('loading', 'lazy');\n }\n }\n });\n});\n\nmodule.exports = {\n decode_base64: decode_base64,\n initLazyLoading: initLazyLoading\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/helpers.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/login/loginlayer.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar formValidationFrontend = __webpack_require__(/*! ../ds/formvalidationfrontend */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/formvalidationfrontend.js\");\nvar formValidationBackend= __webpack_require__(/*! ../ds/formvalidationbackend */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/formvalidationbackend.js\");\nvar displayNotification = __webpack_require__(/*! ../ds/displayNotification */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js\");\nvar GTMlogin = __webpack_require__(/*! ../gtm/util/layers/login */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/login.js\");\nvar GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\nvar GTMloginReach5 = __webpack_require__(/*! ../gtm/util/actions/loginReach5 */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/loginReach5.js\");\nvar GTMbasket = __webpack_require__(/*! ../gtm/util/layers/basketMerge */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/basketMerge.js\");\n\n\n//on click to open connexion modal\n$(document).on('click keyup', '.user-message:not(.logged):not(.before-loading_myAccount), .sticky-account, .mobile-account', function(e) {\n e.preventDefault();\n if (e.type === 'click' || (e.type === 'keyup' && e.key === \"Enter\")) {\n if ($(this).data('bs-target') == undefined) {\n $(\"#connexionModal\").modal('show');\n }\n }\n});\n\n$('#connexionModal').on('shown.bs.modal', function(e) {\n e.preventDefault();\n var selectedValueUrl = $('#connexionModal').data('loginlayer-link');\n\n //We create only 1 time the modal connexion\n if ($('#connexionModal .modal-body').length == 0) {\n fillModalElement(selectedValueUrl);\n }\n \n GTMlogin.getDataLayerForLayer();\n});\n$('#logoutModal').on('shown.bs.modal', function() {\n GTMlogin.getDataLayerForLayer();\n})\n\n$(document).ready(function(){\n if(document.querySelector(\"#logoutModal\") !== null) {\n document.querySelector(\"#logoutModal\").addEventListener(\n \"click\",\n function(event) {\n if (\n event.target.matches(\".btn-close\") ||\n event.target.matches(\".modal\") || event.target.matches(\"#link-logout\")\n ) {\n GTMcloseLayer.getDataLayerForAction();\n }\n },\n false\n )\n }\n});\n\n\n$(document).ready(function(){\n if(document.querySelector(\"#connexionModal\") !== null) {\n document.querySelector(\"#connexionModal\").addEventListener(\"click\", function(event) {\n if (\n event.target.matches(\".btn-close\") ||\n event.target.matches(\".modal\")\n ) {\n GTMcloseLayer.getDataLayerForAction();\n }\n },\n false\n )\n }\n});\n\n$(document).ready(function(){\n if(document.querySelector(\"#layerModalC\") !== null) {\n document.querySelector(\"#layerModalC\").addEventListener(\n \"click\",\n function(event) {\n if (\n event.target.matches(\".btn-close\") ||\n event.target.matches(\".modal\")\n ) {\n GTMcloseLayer.getDataLayerForAction();\n }\n },\n false\n )\n }\n\n});\n\n//$('#layerModalC').on('shown.bs.modal', function() {\n// $(document).find(\"#layerModalC\").find('#login-form-password').focus();\n//})\n\n$('#requestPasswordResetModal').on('shown.bs.modal', function() {\n let GTMpassword = __webpack_require__(/*! ../gtm/util/layers/forgotPassword */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/forgotPassword.js\");\n GTMpassword.getDataLayerForLayer();\n\n var connexionModalA = $('body').find('.connexionModalA');\n if (connexionModalA.length) {\n $('.js-reset-password-body').removeClass('pb-4').addClass('m-auto pt-0').find('.title-separator').remove();\n }\n\n var recaptchaURL = $('body').find('#grecaptchaScriptURL');\n if (recaptchaURL.length) {\n recaptchaURL.remove();\n $('body').append(\n '<script type=\"text/javascript\" src=\"' + recaptchaURL.val() + '\"><\/script>'\n );\n }\n}
15)\n\n$(document).ready(function(){\n if(document.querySelector(\"#requestPasswordResetModal\") !== null) {\n document.querySelector(\"#requestPasswordResetModal\").addEventListener(\n \"click\",\n function(event) {\n if (\n event.target.matches(\".btn-close\") ||\n event.target.matches(\".modal\")\n ) {\n GTMcloseLayer.getDataLayerForAction();\n }\n },\n false\n )\n }\n});\n\n$(document).ready(function(){\n if(document.querySelector(\"#layerModalPasswordReceived\") !== null) {\n document.querySelector(\"#layerModalPasswordReceived\").addEventListener(\n \"click\",\n function(event) {\n if (\n event.target.matches(\".btn-close\") ||\n event.target.matches(\".modal\")\n ) {\n GTMcloseLayer.getDataLayerForAction();\n }\n },\n false\n )\n }\n});\n\n$(document).on('click', '#connexionModal .r5-btn-social-facebook', function() {\n GTMloginReach5.getDataLayerForAction({\n partner: 'facebook',\n });\n});\n\n$(document).on('click', '#connexionModal .r5-btn-social-paypal', function() {\n GTMloginReach5.getDataLayerForAction({\n partner: 'paypal',\n });\n});\n\n$(document).on('click', '#connexionModal .r5-btn-social-google', function() {\n GTMloginReach5.getDataLayerForAction({\n partner: 'google',\n });\n});\n\n$(document).on('click', '#connexionModal .r5-btn-social-apple', function() {\n GTMloginReach5.getDataLayerForAction({\n partner: 'apple',\n });\n});\n\n\n/**\n * replaces the content in the modal window on for the selected product variation.\n * @param {string} selectedValueUrl - url to be used to retrieve a new product model\n */\n function fillModalElement(selectedValueUrl) {\n $('#connexionModal .modal-content').spinner().start();\n\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n success: function (data) {\
15n\n $('#connexionModal .modal-content').empty();\n $('#connexionModal .modal-content').html(data);\n\n //Update R5 Dans le layer connexion\n var $reachFiveForm = $('#connexionModal .login-oauth');\n var url = $reachFiveForm.data('urlreachfive');\n \n $('#connexionModal .modal-content').spinner().stop();\n var $socialConnect = $('#connexionModal .login-oauth');\n $socialConnect.spinner().start();\n $.ajax({\n url: url,\n dataType: \"html\",\n success: function(data) {\n $reachFiveForm.append(data);\n $socialConnect.spinner().stop();\n },\n error: function () {\n $socialConnect.spinner().stop();\n }\n });\n\n \n },\n error: function () {\n $('#connexionModal .modal-content').spinner().stop();\n }\n });\n}\n\nmodule.exports = {\n linklogout: function() {\n\t\t$('body').on('click','#link-logout',function(){\n try{\n window.didomiOnReady = window.didomiOnReady || [];\n window.didomiOnReady.push(function (Didomi) { \n Didomi.getObservableOnUserConsentStatusForVendor('c:batch')\n .filter(function (status) { return status !== undefined })\n .subscribe(function (consentStatus) {\n if (consentStatus === true) {\n batchSDK(function (api) {\n api.profile().then(profile => {\n profile.identify({customId: null})\n });\n });\n }\n });\n });\n }catch(error){\n \n }\n location.href = $(this).data('href');\n });\n\t\t\n },\n loginlayer: function () {\n $(document).on('submit', 'form.loginlayer', function (e) {\n var form = $(this);\n e.preventDefault();\n if(formValidationFrontend(form)){\n var url = form.attr('action');\n form.spinner().start();\n $('form.login').trigger('login:submit', e);\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: form.serialize(),\n success: function (data) {\
15n form.spinner().stop();\n if (!data.success) {\n if (data.askForMailChanging && data.modalContent) {\n $('body').append(data.modalContent);\n $(\"#layerModalC\").modal('hide');\n $(\"#askForMailChangingModal\").modal('show');\n return;\n }\n formValidationBackend(form, data);\n data.error ? displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', data.error) : false ;\n if (data.isBasketMerge) {\n try {\n \n GTMbasket.getDataLayerForLayer({\n oldBasketId: data.oldBasketId,\n newBasketId: data.newBasketId\n });\n } catch (e) {\n console.error('GTM basketMerge error:', e);\n }\n }\n $('form.login').trigger('login:error', data);\n let GTMresetPassword = __webpack_require__(/*! ../gtm/util/actions/identificationErrors */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/identificationErrors.js\");\n GTMresetPassword.getDataLayerForAction({reason: data.gtmlabel,abversion: data.abversion});\n if(data.openPasswordForget){\n $(\"#connexionModal\").modal('hide');\n $(\"#requestPasswordResetModal\").modal('show');\n }\n } else {\n $('form.login').trigger('login:success', data);\n\n try{\n window.didomiOnReady = window.didomiOnReady || [];\n window.didomiOnReady.push(function (Didomi) { \n Didomi.getObservableOnUserConsentStatusForVendor('c:batch')\n .filter(function (status) { return status !== undefined })\n .subscribe(function (consentStatus) {\n if (consentStatus === true) {\n batchSDK(function (api) {\n api.profile().then(profile => {\n profile.identify({customId: data.storelandID})\n });\n });\n }\n });\n });\n }catch(error){\n \n }\n window.location.reload();\n }\n }
15,\n error: function (data) {\n if (data.responseJSON.redirectUrl) {\n window.location.href = data.responseJSON.redirectUrl;\n } else {\n $('form.login').trigger('login:error', data);\n form.spinner().stop();\n }\n }\n });\n return false;\n }\n });\n },\n \n loginlayerC: function () {\n $(document).on('submit', 'form.loginlayer-c',function (e) {\n var form = $(this);\n e.preventDefault();\n if(formValidationFrontend(form)){\n var url = form.attr('action');\n form.spinner().start();\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n data: form.serialize(),\n success: function (data) {\n form.spinner().stop();\n if (!data.exist && data.redirectUrl) {\n let GTMresetPassword = __webpack_require__(/*! ../gtm/util/actions/identificationErrors */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/identificationErrors.js\");\n GTMresetPassword.getDataLayerForAction({reason: 'email does not exist'});\n window.location.href = data.redirectUrl;\n } else {\n //Afficher le champ mdp\n $('#layerC-login-form-email').val(data.mail);\n $('#label-returnC').html(data.mail);\n $('#password-reset').data('email',data.mail);\n $(\"#connexionModal\").modal('hide');\n $(\"#layerModalC\").modal('show');\n $('#login-form-password').trigger('focus');\n let GTMpassword = __webpack_require__(/*! ../gtm/util/layers/passwordToFillIn */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/passwordToFillIn.js\");\n GTMpassword.getDataLayerForLayer();\n }\n }\n });\n return false;\n }\n });\n },\n\n returnLayerC: function () {\n $(document).on('click', '.returnLayerC', function() {\n $(\"#layerModalC\").modal('hide');\n $(\"#connexionModal\").modal('show');\n });\n },\n\n returnUrlLayerC: function () {\n $('#layerModalC #password-reset').on('click', function() {\n $('#requestPasswordResetModal').data(\"email\",$(this).data(\"email\"));\n $('#requestPasswordResetModal button.back').removeClass().addClass('back returnLayerC');\n $(\"#requestPasswordResetModal\").modal('show');\n })\n },\n\n initFunction: $(function() {\n if($('.active-loader').length) \n $('.user-message.before-loading_myAccount').removeClass('before-loading_myAccount');\n $('.user a').removeAttr('href')\n })\n\n\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/login/loginlayer.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/login/resetPassword.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar formValidation = __webpack_require__(/*! ../components/formValidation */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/formValidation.js\");\nvar formValidationFrontend = __webpack_require__(/*! ../ds/formvalidationfrontend */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/formvalidationfrontend.js\");\nvar formValidationBackend = __webpack_require__(/*! ../ds/formvalidationbackend */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/formvalidationbackend.js\");\n\nmodule.exports = {\n resetPasswordRequestSubmit: function () {\n $('body').on('submit', '#js-reset-password-form', function (e) {\n var form = $(this);\n e.preventDefault();\n var url = form.attr('action');\n form.spinner().start();\n\n if ($(document).find('#grecaptcharesponselogin').length && formValidationFrontend($(this))) {\n \tgrecaptcha.ready(function() {\n \t\t\tvar keyReCaptcha = form.attr('data-keyrecaptcha');\n \t\t\t\n \t\t\tgrecaptcha.execute(keyReCaptcha, {action: 'submit'}).then(function(token) {\n $(document).find('#grecaptcharesponselogin').val(token);\n \n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: form.serialize(),\n success: function (data) {\
15n form.spinner().stop();\n if (!data.success) {\n formValidationBackend(form, data);\n //formValidation(form, data);\n } else {\n if(data.emailExist){\n let GTMresetPassword = __webpack_require__(/*! ../gtm/util/actions/resetPassword */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/resetPassword.js\");\n GTMresetPassword.getDataLayerForAction({result: 'successfull'});\n $('#emailPasswordReceived').html(data.email);\n $(\"#requestPasswordResetModal\").modal('hide');\n $(\"#layerModalPasswordReceived\").modal('show');\n \n }
15else{\n let GTMresetPassword = __webpack_require__(/*! ../gtm/util/actions/resetPassword */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/resetPassword.js\");\n GTMresetPassword.getDataLayerForAction({result: 'ko'});\n $('#emailPasswordNotReceived').html(data.email);\n $(\"#requestPasswordResetModal\").modal('hide');\n $(\"#layerModalPasswordNotReceived\").modal('show');\n }\n \n }\n },\n error: function () {\n form.spinner().stop();\n }\n });\n return false;\n \t\t\t\n \t\t\t});\n \t});\n }\n\n\n \n });\n },\n\n resetPasswordModalFiller: function() {\n $('#requestPasswordResetModal').on('show.bs.modal', function() {\n \n let url = $(this).data('action-url');\n let resetPasswordModalBody = $('.js-reset-password-body');\n var emailAdd = $(this).data('email');\n resetPasswordModalBody.spinner().start();
15\n $.get(url, function (data) {\n resetPasswordModalBody.empty();\n resetPasswordModalBody.append(data);\n $('#reset-password-email').val(emailAdd);\n $.spinner().stop();\n });\n });\n },\n\n returnPasswordReset: function() {\n $('.returnPasswordReset').on('click', function() {\n $(\"#layerModalPasswordNotReceived\").modal('hide');\n $(\"#requestPasswordResetModal\").modal('show');\n \n });\n },\n returnPasswordResetBis: function() {\n $('.checkout-password-reset').on('click', function() {\n $('#requestPasswordResetModal').data(\"email\",$(this).data(\"email\"));\n $(\"#requestPasswordResetModal\").modal('show');\n });\n }\n\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/login/resetPassword.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/main.js":function(module,exports,__webpack_require__){eval('var processInclude = __webpack_require__(/*! ./util */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js");\n\n$(function() {\n \n processInclude(__webpack_require__(/*! ./components/menu */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/menu.js"));\n processInclude(__webpack_require__(/*! ./components/footer */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/footer.js"));\n processInclude(__webpack_require__(/*! ./components/miniCart */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/miniCart.js"));\n processInclude(__webpack_require__(/*! ./components/collapsibleItem */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/collapsibleItem.js"));\n processInclude(__webpack_require__(/*! ./components/search */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/search.js"));\n processInclude(__webpack_require__(/*! ./components/countrySelector */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/countrySelector.js"));\n processInclude(__webpack_require__(/*! ./login/loginlayer */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/login/loginlayer.js"));\n processInclude(__webpack_require__(/*! ./login/resetPassword */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/login/resetPassword.js"));\n processInclude(__webpack_require__(/*! ./product/clickproduct.js */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/clickproduct.js"));\n processInclude(__webpack_require__(/*! ./components/toolTip */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/toolTip.js"));\n});\n\n\n\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/main.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/addToCartSuccess.js":function(module,exports,__webpack_require__){"use strict";eval("\nvar approachingDiscounts = __webpack_require__(/*! ../cart/approachingDiscounts */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/cart/approachingDiscounts.js\");\nvar displayNotification = __webpack_require__(/*! ../ds/displayNotification */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js\");\n\n/**\n * Add a product line item to the product list.\n * Originally made for gift wrap, can be extended to more\n * @param {Object} data - AJAX response from the server\n */\nfunction updateProductsInCart(data) {\n $('#cart-products').empty().html(data.cartCardHtml);\n}\n\nfunction chooseBonusProducts(data) {\n $('.modal-body').spinner().start();\n\n if ($('#chooseBonusProductModal').length !== 0) {\n $('#chooseBonusProductModal').remove();\n }\n var bonusUrl;\n if (data.bonusChoiceRuleBased) {\n bonusUrl = data.showProductsUrlRuleBased;\n } else {\n bonusUrl = data.showProductsUrlListBased;\n }\n\n var htmlString = '\x3c!-- Modal --\x3e' +\n '<div class=\"modal fade\" id=\"chooseBonusProductModal\" role=\"dialog\">' +\n '<div class=\"modal-dialog choose-bonus-product-dialog\" ' +\n 'data-total-qty=\"' + data.maxBonusItems + '\"' +\n 'data-UUID=\"' + data.uuid + '\"' +\n 'data-pliUUID=\"' + data.pliUUID + '\"' +\n 'data-addToCartUrl=\"' + data.addToCartUrl + '\"' +\n 'data-pageStart=\"0\"' +\n 'data-pageSize=\"' + data.pageSize + '\"' +\n 'data-moreURL=\"' + data.showProductsUrlRuleBased + '\"' +\n 'data-bonusChoiceRuleBased=\"' + data.bonusChoiceRuleBased + '\">' +\n '\x3c!-- Modal content--\x3e' +\n '<div class=\"modal-content\">
15' +\n '<div class=\"modal-header\">' +\n ' <span class=\"\">' + data.labels.selectprods + '</span>' +\n ' <button type=\"button\" class=\"close pull-right\" data-dismiss=\"modal\">×</button>' +\n '</div>' +\n '<div class=\"modal-body\"></div>' +\n '<div class=\"modal-footer\"></div>' +\n '</div>' +\n '</div>' +\n '</div>';\n $('body').append(htmlString);\n $('.modal-body').spinner().start();\n\n $.ajax({\n url: bonusUrl,\n method: 'GET',\n dataType: 'html',\n success: function (html) {\n var parsedHtml = parseHtml(html);\n $('#chooseBonusProductModal .modal-body').empty();\n $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\n $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\n $('#chooseBonusProductModal').modal('show');\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\nfunction handlePostCartAdd(response) {\n $('.minicart').trigger('count:update', response);\n $('body').trigger('pwa:updateCard', response.cart);\n\n // show add to cart toast\n if (response.newBonusDiscountLineItem &&\n Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n chooseBonusProducts(response.newBonusDiscountLineItem);\n } else {\n let url = $('.js-minicart').data('action-url');\n let count = parseInt($('.js-minicart .minicart-quantity').text(), 10);\n\n if (count !== 0 && $('.minicart .popover.show').length === 0) {\n let miniCartModal = $('.js-minicart-body');\n $('#miniCartModal').modal('show');\n miniCartModal.spinner().start();
15\n $.get(url, function (data) {\n\n miniCartModal.empty();\n miniCartModal.append(data);\n\n if (typeof $('body #js-added-to-cart-msg') == \"undefined\") {\n $('body').prepend($('#js-added-to-cart-msg'));\n }\n // use for AB Test OCS-248 Variation 2\n $('#layerCart').addClass('test-hide');\n\n $('#js-added-to-cart-msg').addClass('show');\n\n\n\n var checkExist = setInterval(function () {\n var $reco = $(document).find('#slot-pushproduct');\n\n // use for AB Test OCS-248 Variation 1\n var useAnchor = $(document).find('.js-minicart-body').data('use-anchor');\n if(useAnchor === undefined) {\n useAnchor = true;\n }\n // END AB Test OCS-248 Variation 1\n \n if ($reco && $reco.length > 0) {\n var anchor = $reco.data('slot-anchor');\n if (anchor && useAnchor) {\n $reco.parents('.modal-content').animate({ scrollTop: $reco[0].offsetTop }, 'slow');\n\n }\n clearInterval(checkExist);\n }\n }, 200);\n miniCartModal.spinner().stop();\n });\n }\n }\n}\n\n/**\n * re-renders the order totals and the number of items in the cart\n * @param {Object} data - AJAX response from the server\n */\nfunction updateCartTotals(data) {\n $('body').trigger('pwa:updateCard', data);\n\n $('.number-of-items').empty().append(data.resources.numberOfItems);\n $('.shipping-cost-cart').empty().append(data.totals.totalShippingCost);\n $('.shipping-cost').empty().append(data.totals.totalShippingCost);\n $('.tax-total').empty().append(data.totals.totalTax);\n if ($('#checkout-main').length > 0) {\n $('.grand-total-sum').empty().append(data.totals.grandTotal);\n } else {\n $('.grand-total').empty().append(data.totals.grandTotal);\n }\n let deliveryCost = \"\";\n const deliveryMethod = data.shipments[0].bestShippingMethodDisplayName !== undefined ? data.shipments[0].bestShippingMethodDisplayName : data.shipments[0].selectedShippingMethodDisplayName;\n if (data.shipments[0].bestShippingMethodTotals !== undefined && data.shipments[0].bestShippingMethodTotals.totalShippingCost !== undefined ) {\n deliveryCost = data.shipments[0].bestShippingMethodTotals.totalShippingCost;\n } else {\n data.shipments[0].shippingMethods.forEach(function(deliveryMethodName) {\n if (deliveryMethodName.displayName == deliveryMethod) {\n if (deliveryMethodName.shippingCost == '0,00 â¬') {\n deliveryCost = $('.delivery-value').attr('data-free-delivery');\n } else {\n deliveryCost = deliveryMethodName.shippingCost;\n }\n }\n })\n }\n $('.delivery-text').empty().append(deliveryMethod);\n $('.delivery-value').empty().append(deliveryCost);\n $('.totalPrice').empty().append(data.totals.grandTotal);\n $('.sub-total').empty().append(data.totals.subTotal);\n $('.minicart-quantity').empty().append(data.numItems);\n $('.minicart-layer-quantity').empty().append('(' + data.numItems + ')');\n\n $('.bonus-product-line-item').remove();\n if (data.hasBonusProduct) {\n addProductlineItem(data);\n }\n\n if (data.totals.orderLevelDiscountTotal.value > 0) {\n $('.order-discount').removeClass('hide-order-discount');\n $('.order-discount-total').empty()\n .append('- ' + data.totals.orderLevelDiscountTotal.formatted);\n } else {\n $('.order-discount').addClass('hide-order-discount');\n }\n\n if (data.totals.shippingLevelDiscountTotal.value > 0) {\n $('.shipping-discount').removeClass('hide-shipping-discount');\n $('.shipping-discount-total').empty().append('- ' +\n data.totals.shippingLevelDiscountTotal.formatted);\n } else {\n $('.shipping-discount').addClass('hide-shipping-discount');\n }
15\n\n data.items.forEach(function (item) {\n $('.item-' + item.UUID).empty().append(item.renderedPromotions);\n $('.item-total-' + item.UUID).empty().append(item.priceTotal.renderedPrice);\n });\n\n //ABtestEconomy segment : economyProductBasket // economyBasket\n var $cartEconomySelector = $('.js-cart-economy');\n if ($cartEconomySelector.length > 0) {\n if (data.totals.cartEconomy) {\n $cartEconomySelector.replaceWith(data.totals.cartEconomyHtml);\n } else {\n $cartEconomySelector.empty();\n }\n }\n}\n\n/**\n * Checks whether the basket is valid. if invalid displays error message and disables\n * checkout button\n * @param {Object} data - AJAX response from the server\n */\nfunction validateBasket(data) {\n if (data.valid.error) {\n if (data.valid.message) {\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', data.valid.message);\n\n if (data.valid.invalidProducts.length > 0) {\n $('.product-cart-invalid').removeClass('d-flex').addClass('d-none');\n data.valid.invalidProducts.forEach(function(invalidProduct) {\n $('.product-cart-invalid[data-pid=\"' + invalidProduct + '\"]').removeClass('d-none').addClass('d-flex');\n });\n }\n } else {\n $('.cart').empty().append('<div class=\"row\"> ' +\n '<div class=\"col-12 text-center\"> ' +\n '<h1>' + data.resources.emptyCartMsg + '</h1> ' +\n '</div> ' +\n '</div>'\n );\n $('.number-of-items').empty().append(data.resources.numberOfItems);\n $('.minicart-quantity').empty().append(data.numItems);\n $('.minicart-layer-quantity').empty().append('(' + data.numItems + ')');\n $('.minicart .popover').empty();\n $('.minicart .popover').removeClass('show');\n }\n\n $('.checkout-btn').addClass('disabled');\n } else {\n $('.checkout-btn').removeClass('disabled');\n $('.product-cart-invalid').removeClass('d-flex').addClass('d-none');\n }\n}\n\nfunction validateExclusionProducts(validExclusionProducts, basket) {\n let productAvailable = true;\n const jsValidExluButton = document.querySelectorAll('.js-valid-exclusion'); /* Mobile and desktop buttons */\n if (validExclusionProducts && validExclusionProducts.valid) {\n $(document).find('.valid-exclusion-product-error').addClass('d-none');\n }\n else {\n $(document).find('.valid-exclusion-product-error').removeClass('d-none');\n }\n\n if (jsValidExluButton.length !== 0) {\n basket.items.forEach(function(product) {\n product.available !== true ? productAvailable = false : false ;\n })\n\n jsValidExluButton.forEach(function(button) { \n productAvailable == true ? (button.classList.remove('disabled'), button.setAttribute('aria-disabled', 'false')) : (button.classList.add('disabled'), button.setAttribute('aria-disabled', 'true')) ;\n })\n }\n}\n\n/**\n * Updates price of all product lines item\n * @param {Object} items - list of items from the server\n * Info : it's useful only when valopanier said to apply Pricebook when customer update quantity\n */\nfunction updatePrice(items) {\n for (var i = 0; i < items.length; i++) {\n var priceSelector = '.Price-' + items[i].UUID;\n $(priceSelector).replaceWith(items[i].price.html);\n\n //ABtestEconomy segment : economyProductBasket\n var economySelector = '.js-lineitem-economy-' + items[i].UUID;\n if ($(economySelector).length > 0) {\n if (items[i].economy) {\n $(economySelector).replaceWith(items[i].economyHtml);\n } else {\n $(economySelector).empty();\n }\n }\n }\n}\n\nfunction ajaxAddToCart(data, dataPageOrigin){\n \n let GTMaddToCart = __webpack_require__(/*! ../gtm/util/layers/addToCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/addToCart.js\");\n GTMaddToCart.getDataLayerForLayer({\n product: data.product,\n pageOrigin: dataPageOrigin,\n currentBasketId: data.currentBasketId,\n pidsObj: data.pidsObj,\n product_array: data.product_array,\n isCartCreation: data.isCartCreation \n });\n\n if($(document).find('#batch').length > 0) {\n let cartEventsBatch = __webpack_require__(/*! ../batch/cartEventsBatch */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/batch/cartEventsBatch.js\");\n cartEventsBatch.addedToCart(data.cart, data.product);\n } else if($(document).find('#adrenalead').length > 0) {\n let cartEventsAdrenalead = __webpack_require__(/*! ../adrenalead/cartEventsAdrenalead */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/adrenalead/cartEventsAdrenalead.js\");\n cartEventsAdrenalead.addedToCart(data.cart, data.product);\n }\n\n // update bestshippingMethodName\n if (data && data.bestShippingMethodName) {\n if ($('.js-best-shipping-name').length > 0) {\n $('.js-best-shipping-name').empty().html(data.bestShippingMethodName);\n }\n }\n if ($('.Cart-Show').length > 0 && data) {\n if (data.cartWasEmpty) {\n window.location.reload();\n } else {\n updateProductsInCart(data); //ok\n $('.coupons-and-promos').empty().append(data.cart.totals.discountsHtml); //ok\n //ABTestEconomy segment : economyProductBasket // economyBasket // Control\n //Tracking\n let GTMcartUpdate = __webpack_require__(/*! ../gtm/util/actions/cart
15Update */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js\");\n GTMcartUpdate.getDataLayerForAction({\n cart: data.cart,\n action: 'product added to cart'\n });\n //////////////////////////////////////////////////////////\n updateCartTotals(data.cart);\n approachingDiscounts.updateApproachingDiscounts(data.cart.approachingDiscounts); //ok\n $('body').trigger('setShippingMethodSelection', data.cart);\n validateBasket(data.cart);\n validateExclusionProducts(data.validExclusionProducts, data.cart);\n updatePrice(data.cart.items);\n $('body').trigger('cart:update');\n }\n }\n \n handlePostCartAdd(data);\n $('body').trigger('product:afterAddToCart', data);\n $.spinner().stop();\n}\n\nmodule.exports = {\n ajaxAddToCart : ajaxAddToCart\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/addToCartSuccess.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/base.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar sizeChartAlreadyLoaded = false;\nvar lastUrl = \"\";\nvar helpers = __webpack_require__(/*! ../helpers */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/helpers.js\");\nconst addToCartSuccess = __webpack_require__(/*! ./addToCartSuccess */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/addToCartSuccess.js\");\nconst addToCart = __webpack_require__(/*! ../gtm/util/layers/addToCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/addToCart.js\");\nvar displayNotification = __webpack_require__(/*! ../ds/displayNotification */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js\");\n\n/**\n * appends params to a url\n * @param {string} url - Original url\n * @param {Object} params - Parameters to append\n * @returns {string} result url with appended parameters\n */\nfunction appendToUrl(url, params) {\n var newUrl = url;\n newUrl += (newUrl.indexOf('?') !== -1 ? '&' : '?') + Object.keys(params).map(function (key) {\n return key + '=' + encodeURIComponent(params[key]);\n }).join('&');\n\n return newUrl;\n}\n/**\n * Retrieves the relevant pid value\n * @param {jquery} $el - DOM container for a given add to cart button\n * @return {string} - value to be used when adding product to cart\n */\nfunction getPidValue($el) {\n var pid;\n\n if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\n pid = $($el).closest('.modal-content').find('.product-quickview').data('pid');\n } else if ($('.product-set-detail').length || $('.product-set').length) {\n pid = $($el).closest('.product-detail').data('pid');\n } else if($('.container-adproduct').length){\n pid = $($el).closest('.container-adproduct').data('pid');\n }else {\n pid = $('.product-detail:not(\".bundle-item\")').data('pid');\n }\n\n return pid;\n}\n\n/**\n * Retrieve contextual quantity selector\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {jquery} - quantity selector DOM container\n */\nfunction getQuantitySelector($el) {\n return $el && $('.set-items').length ?\n $($el).closest('.product-detail').find('.quantity-select') :\n $('.quantity-select');\n}\n\n/**\n * Retrieves the value associated with the Quantity pull-down menu\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {string} - value found in the quantity input\n */\nfunction getQuantitySelected($el) {\n return getQuantitySelector($el).val();\n}\n\n/** Manage position of the active color **/\nfunction colorSelectedFirstPos() {\n const colors = document.querySelectorAll(\".product-detail .color-attribute\");\n if (colors) {\n colors.forEach(function(color) {\n color.classList.contains('selected') ? color.classList.remove('selected') : false ;\n if (color.querySelector('.color-value') != null && color.querySelector('.color-value').classList.contains('selected')) {\n colors[0].insertAdjacentElement('beforebegin', color)\n }\n })\n }\n}\n/**\n * Process the attribute values for an attribute that has image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction processSwatchValues(attr, $productC
15ontainer, msgs) {\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"' +\n attrValue.value + '\"]');\n var $swatchButton = $attrValue.parent();\n\n if ($attrValue.length !== 0) {\n if (attrValue.selected) {\n var $attrSelected = $(\"#js-color-name\")[0];\n $attrValue.addClass('selected');\n $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\n if ($attrValue.length > 0) {\n var $selectedColor = $attrValue[0].getAttribute(\"data-color\");\n // update attribute label\n var colorText = $('#js-color-name .attr-text')[0].innerText;\n $attrSelected.innerHTML = '<span class=\"attr-text\">'+colorText+'</span>'+ $selectedColor;\n $attrValue[0].closest(\"a.ocs-item-control-item\") !== null ? $attrValue[0].closest(\"a.ocs-item-control-item\").classList.add(\"selected\") : false;\n // update product label\n var $productName = $(\"h1.product-name\")[0];\n var productDataName = $productContainer.data('name');\n $productName.innerHTML = productDataName;\n var productDataDisplayColor = $productContainer.data('displaycolor');\n if (!productDataDisplayColor && $('.set-items').length === 0) {\n $productName.innerHTML += \" - \" + $selectedColor;\n }\n }\n } else {\n $attrValue.removeClass('selected');\n $attrValue[0].closest(\"a.ocs-item-control-item\") !== null ? $attrValue[0].closest(\"a.ocs-item-control-item\").classList.remove(\"selected\") : false;\n $attrValue.siblings('.selected-assistive-text').empty();\n }\n }\n\n /* --------------------- AB OCS-1136 --------------------- */\n if (attr.attributeId == \"color\" && document.querySelector('#colorSelect') !== null) {\n var colorOpt = document.querySelectorAll('#colorSelect option');\n colorOpt.forEach(function(opt) {\n opt.getAttribute('data-color') == attrValue.displayValue ? opt.setAttribute('data-url', attrValue.url) : false;\n })\n }\n /* --------------------- AB OCS-1136 --------------------- */\n \n if (attrValue.url) {\n $swatchButton.attr('data-url', attrValue.url);\n } else {\n $swatchButton.removeAttr('data-url');\n }\n });\n}\n\n/**\n * Process attribute values associated with an attribute that does not have image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction processNonSwatchValues(attr, $productContainer) {\n var $attr = '[data-attr=\"' + attr.id + '\"]';\n var $defaultOption = $productContainer.find($attr + ' .select-' + attr.id + ' option:first');\n $defaultOption.attr('value', attr.resetUrl);\n\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer\n .find($attr + ' [data-attr-value=\"' + attrValue.value + '\"]');\n $attrValue.attr('value', attrValue.url);\n $attrValue.removeAttr('disabled');\n\n var $attrButton = $attrValue.parent();\n\n // Check if the button and span shoud be disabled or not\n if (!attrValue.selectable) {\n /* --------------------- AB OCS-1136 --------------------- */\n if ($attrValue[0] !== null) {\n if ($attrValue[0].localName == \"option\") {\n $attrValue[0].setAttribute('disabled', true);\n if ($attrValue[0].closest(\".ocs-select\").querySelector('.ocs-input input[type=\"text\"]').value == attrValue.displayValue) { /*It means the option selected is now disabled */\n $attrValue[0].closest(\".ocs-select\").querySelector('.ocs-input').classList.remove('has-value');\n $attrValue[0].closest(\".ocs-select\").querySelector('.ocs-input input[type=\"text\"]').value = \"\";\n }\n /* --------------------- AB OCS-1136 --------------------- */\n } else {\n $attrValue[0].closest(\".ocs-item-control-item\").setAttribute('disabled', true);\n $attrValue[0].closest(\"button.ocs-button\").setAttribute('aria-disabled', true);\n $attrButton.prop('disabled', true).removeClass('selectable').addClass('unselectable');\n $attrValue.removeClass('selectable').addClass('unselectable');\n }\n }\n } else {\n /* --------------------- AB OCS-1136 --------------------- */\n if ($attrValue[0] !== null) {\n if ($attrValue[0].localName == \"option\") {\n $attrValue[0].removeAttribute('disabled');\n /* --------------------- AB OCS-1136 --------------------- */\n } else {\n $attrValue[0].closest(\".ocs-item-control-item\").removeAttribute(\"disabled\");\n $attrValue[0].closest(\"button.ocs-button\").setAttribute(\"aria-disabled\", false);\n $attrButton.removeAttr('disabled').removeClass('unselectable').addClass('selectable');\n $attrValue.removeClass('unselectable').addClass('selectable');\n }\n }\n }\n\n if ($attrValue[0] !== null && $attrValue[0].localName !== \"option\") { /* --------------------- AB OCS-1136 CONDITION --------------------- */\n // Set/Unset the select class fron the attribute\n if (!attrValue.selected) {\n $attrValue.removeClass('select');\n $attrValue[0].closest(\"button.ocs-button\").classList.remove(\"selected\");\n $attrValue[0].closest('.ocs-item-control-item').classList.remove(\"selected\");\n } else {\n $attrValue.addClass('select');\n $attrValue[0].closest(\"button.ocs-button\").classList.add(\"selected\");\n \n if ($('.set-items').length)\n var selectCheckbox = $productC
15ontainer.find(':checkbox');\n if (selectCheckbox && !selectCheckbox.is(':checked'))\n selectCheckbox.attr('checked', 'checked').addClass('checked').trigger('change');\n }\n }\n\n /* Override the standard only for length */\n if (attr.id === 'length') {\n if (attrValue.selected) {\n $attrValue.prop('selected', true);\n } else {\n $attrValue.prop('selected', false);\n }\n }\n });\n}\n\nfunction adProcessNonSwatchValues(attr, $productContainer) {\n var $attr = '[data-attr=\"' + attr.id + '\"]';\n var $defaultOption = $productContainer.find($attr + ' .select-' + attr.id + ' option:first');\n $defaultOption.attr('value', attr.resetUrl);\n\n\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer\n .find($attr + ' select.js-select-adproduct-' + attr.id + ' option[data-attr-value=\"' + attrValue.value + '\"]');\n $attrValue.attr('value', attrValue.url);\n $attrValue.attr('data-url', attrValue.url);\n $attrValue.removeAttr('disabled');\n \n\n // Check if the button and span shoud be disabled or not\n if (!attrValue.selectable) {\n $attrValue.prop('disabled', true)\n } else {\n $attrValue.removeAttr('disabled')\n }\n\n // Set/Unset the select class fron the attribute\n if (!attrValue.selected) {\n $attrValue.removeAttr('selected');\n } else {\n $attrValue.prop('selected',true);\n }\n\n /* Override the standard only for length */\n if (attr.id === 'length') {\n if (attrValue.selected) {\n $attrValue.prop('selected', true);\n } else {\n $attrValue.prop('selected', false);\n }\n }\n\n if (!attrValue.selectable && $attrValue[0] !== null && $attrValue[0].localName == \"option\") {\n $attrValue[0].setAttribute('disabled', true);\n if ($attrValue[0].closest(\".ocs-select\").querySelector('.ocs-input input[type=\"text\"]').value == attrValue.displayValue) { /*It means the option selected is now disabled */\n $attrValue[0].closest(\".ocs-select\").querySelector('.ocs-input').classList.remove('has-value');\n $attrValue[0].closest(\".ocs-select\").querySelector('.ocs-input input[type=\"text\"]').value = \"\";\n }\n }\n });\n}\n\n/**\n * Decide whether to display or not the length attribute field\n *\n * The length attribute field is displayed when:\n * - A size is selected, and at least one \"real\" size exists\n *\n * @param {Object} attrSize - The size attribute\n * @param {Object} attrLength - The length attribute\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction updateLengthVisibilty(attrSize, attrLength, $productContainer) {\n /* Default value for length display is false */\n var isLengthDisplayed = false;\n var sizeValueSelected = false;\n\n /* Search if a size is selected */\n attrSize.values.forEach(function (attrSizeValue) {\n if (attrSizeValue.selected) {\n sizeValueSelected = true;\n }\n });\n\n /* When a size is selected, decide if the length should be diplated */\n if (sizeValueSelected === true) {\n var countSelectableRealLengthValues = 0;\n\n /* Count the real number of selectable length. */\n attrLength.values.forEach(function (attrLengthValue) {\n /* The value \"099099\" is not a real value. It is used as a default value for items that doesn't have a size\n It will be removed from import data, but is still here for sometimes.\n */\n //TODO To be removed when no more \"099099\" are sent in HC import files\n if (attrLengthValue.selectable && attrLengthValue.id !== \"099099\") {\n countSelectableRealLengthValues++;\n }\n });\n\n if (countSelectableRealLengthValues > 0) {\n isLengthDisplayed = true;\n }\n }\n\n if (isLengthDisplayed === true) {\n selectLengthIfOnlyOne();\n } \n}\n\n\n/**\n * Routes the handling of attribute processing depending on whether the attribute has image\n * swatches or not\n *\n * @param {Object}
15 attrs - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {jQuery} $productContainer - DOM element for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction updateAttrs(attrs, $productContainer, msgs) {\n // Currently, the only attribute type that has image swatches is Color.\n var attrsWithSwatches = ['color'];\n\n var attrSize = null;\n var attrLength = null;\n\n attrs.forEach(function (attr) {\n if (attrsWithSwatches.indexOf(attr.id) > -1) {\n processSwatchValues(attr, $productContainer, msgs);\n } else {\n if($productContainer[0].closest('.container-adproduct') !== null){\n adProcessNonSwatchValues(attr, $productContainer);\n }else{ \n processNonSwatchValues(attr, $productContainer);\n }\n }\n\n if (attr.id === 'size') {\n attrSize = attr;\n }\n if (attr.id === 'length') {\n attrLength = attr;\n }\n });\n\n\n if (attrSize !== null && attrLength !== null) {\n updateLengthVisibilty(attrSize, attrLength, $productContainer);\n }\n}\n\n/**\n * Updates the availability status in the Product Detail Page\n *\n * @param {Object} response - Ajax response object after an\n * attribute value has been [de]selected\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction updateAvailability(response, $productContainer) {\n var availabilityValue = '';\n var availabilityMessages = response.product.availability.messages;\n if (!response.product.readyToOrder) {\n availabilityValue = '<li class=\"message-taille-longueur\"><div>' + response.resources.info_selectforstock + '</div></li>';\n } else {\n availabilityMessages.forEach(function (message) {\n availabilityValue += '<li><div>' + message + '</div></li>';\n });\n }\n\n $($productContainer).trigger('product:updateAvailability', {\n product: response.product,\n $productContainer: $productContainer,\n message: availabilityValue,\n resources: response.resources\n });\n}\n\nfunction updateStressMarketing(response, $productContainer) {\n $productContainer.find('.availability-msg');\n\n if ($productContainer.find('.js-stressmarketing') && $productContainer.find('.js-stressmarketing').length > 0) {\n $productContainer.find('.js-stressmarketing').closest('li').remove();\n }\n \n if (response.product && response.product.stressMarketingMessage && response.product.stressMarketingMessage != \"\") {\n $productContainer.find('.availability-msg').prepend('<li><div class=\"js-stressmarketing\">'+ response.product.stressMarketingMessage +'</div></li>');\n }\n}\n\n/**\n * Generates html for promotions section\n *\n * @param {array} promotions - list of promotions\n * @return {string} - Compiled HTML\n */\nfunction getPromotionsHtml(promotions) {\n if (!promotions) {\n return '';\n }\n\n var html = '';\n\n promotions.forEach(function (promotion) {\n if (promotion.displayCalloutMessagePDP) {\n html += '<div class=\"callout\" title=\"' + promotion.details + '\">' + promotion.calloutMsg +\n '</div>';\n }\n });\n\n return html;\n}\n\n/* Product Waro traceability update */\nfunction updateWaroData(product) {\n if(product.agec == true){\n if (document.querySelector('.waro-widget') !== null) {\n const waroButton = document.querySelector('.waro-widget');\n const waroButtonAttr = 'data-prop-sku';\n const allLinkAgec = document.querySelectorAll('.link_agec');\n product !== undefined ? waroButton.setAttribute(waroButtonAttr, product.variationGroupID ? product.variationGroupID : product.id) : false;\n allLinkAgec.forEach(function(item) {\n item.classList.contains('waro') ? (item.classList.add('d-block'), item.classList.remove('d-none')) : (item.classList.remove('d-block'), item.classList.add('d-none'));\n })\n }\n }\n}\n\n/* Product Chrystalchain and Winddle traceability update */\nfunction updateChrystalChainWinddle(product) { \n var traceability = null;\n if(product.agec == true){\n if(product.agecType == \"CrystalChain\"){\n traceability = \"chrystalchain\";\n }else if(product.agecType == \"Winddle\" && product.agecUUID !== undefined && product.agecUUID !== null && product.agecUUID !== \"\" && product.agecUUID !== \"null\"){\n traceability = \"winddle\";\n }\n }\n\n if(traceability){\n const allLinkAgec = document.querySelectorAll('.link_agec');
15\n allLinkAgec.forEach(function(item) {\n item.classList.contains(traceability) ? (item.classList.add('d-block'), item.classList.remove('d-none')) : (item.classList.remove('d-block'), item.classList.add('d-none'));\n })\n }\n}\n\n/**\n * Generates html for product attributes section\n *\n * @param {array} attributes - list of attributes\n * @return {string} - Compiled HTML\n */\nfunction getAttributesHtml(attributes) {\n if (!attributes) {\n return '';\n }\n\n var html = '';\n\n attributes.forEach(function (attributeGroup) {\n if (attributeGroup.ID === 'mainAttributes') {\n attributeGroup.attributes.forEach(function (attribute) {\n html += '<div class=\"attribute-values\">' + attribute.label + ': ' +\n attribute.value + '</div>';\n });\n }\n });\n\n return html;\n}\n\n/**\n * @typedef UpdatedOptionValue\n * @type Object\n * @property {string} id - Option value ID for look up\n * @property {string} url - Updated option value selection URL\n */\n\n/**\n * @typedef OptionSelectionResponse\n * @type Object\n * @property {string} priceHtml - Updated price HTML code\n * @property {Object} options - Updated Options\n * @property {string} options.id - Option ID\n * @property {UpdatedOptionValue[]} options.values - Option values\n */\n\n/**\n * Updates DOM using post-option selection Ajax response\n *\n * @param {OptionSelectionResponse} options - Ajax response options from selecting a product option\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction updateOptions(options, $productContainer) {\n options.forEach(function (option) {\n var $optionEl = $productContainer.find('.product-option[data-option-id*=\"' + option.id +\n '\"]');\n option.values.forEach(function (value) {\n var valueEl = $optionEl.find('option[data-value-id*=\"' + value.id + '\"]');\n valueEl.val(value.url);\n });\n });\n}\n\nfunction updateSoclozButton(product) {\n if (document.querySelector('button.socloz') !== null) {\n const soclozButton = document.querySelector('button.socloz');\n const soclozColorAttr = 'data-socloz-product-attributes-color';\n const soclozSizeAttr = 'data-socloz-product-attributes-clothes_size';\n product.colorDisplayValue !== undefined ? soclozButton.setAttribute(soclozColorAttr, product.colorDisplayValue) : false;\n product.sizeDisplayValue !== undefined ? soclozButton.setAttribute(soclozSizeAttr, product.sizeDisplayValue) : false;\n product.onStore !== undefined && product.onStore == true ? soclozButton.style.display = \"flex\" : soclozButton.style.display = \"none\";\n }\n}\n\n/**\n * Dynamically creates Bootstrap carousel from response containing images\n * @param {Object[]} imgs - Array of large product images,along with related information\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction createCarouselQuickview(imgs, secondaryImageUrls, $productContainer, flagsPromo) {\n var carousel = $productContainer.find('.carousel');\n var carouselId = $(carousel).attr('id');\n var carouselSmallImages = $('.carousel-outer', $productContainer).empty();\n for (var i = 0; i < secondaryImageUrls.length; i++) {\n if (i == 0) {\n carouselSmallImages.append('<a class=\"image-indicator active\" data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + i + '\">' + '<img src=\"' + secondaryImageUrls[i].url + '\" class=\"d-block img-fluid\" alt=\"' + secondaryImageUrls[i].alt + '\" itemprop=\"image\" />' + '</a>');\n } else {\n carouselSmallImages.append('<a class=\"image-indicator\" data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + i + '\">' + '<img src=\"' + secondaryImageUrls[i].url + '\" class=\"d-block img-fluid\" alt=\"' + secondaryImageUrls[i].alt + '\" itemprop=\"image\" />' + '</a>');\n }\n }\n\n var flagNew = flagsPromo.flagNew ? '<div class=\"newcollection\"><img src=\"' + flagsPromo.flagNew + '\" alt=\"\"/></div>' : '';\n var flagProduct = ''\n\n if (flagsPromo && flagsPromo.tabOfFlags && flagsPromo.tabOfFlags.length > 0) {\n for (var i = 0; i < flagsPromo.tabOfFlags.length;
15 i++) {\n flagProduct = flagProduct + '<div class=\"product\"><img src=\"' + flagsPromo.tabOfFlags[i].flagProduct + '\" alt=\"\"/></div>'\n }\n }\n $(carousel).carousel('dispose');\n $(carousel).empty().append('<ol class=\"carousel-indicators\"></ol><div class=\"carousel-inner\" data-toggle=\"modal\" data-bs-target=\"#myModal\" role=\"listbox\"><div class=\"flags\">' + flagNew + flagProduct + '</div></div><button class=\"carousel-control-prev ocs-button overflow-inverse has-icon medium\" aria-disabled=\"false\"><a role=\"button\" href=\"#' + carouselId + '\" data-bs-slide=\"prev\"><i class=\"ocs-icon arrow-left-large medium\" aria-hidden=\"true\"></i></a><span class=\"sr-only\">' + $(carousel).data('prev') + '</span></button><button class=\"carousel-control-next ocs-button overflow-inverse has-icon medium\" aria-disabled=\"false\"><a role=\"button\" href=\"#' + carouselId + '\" data-bs-slide=\"next\"><i class=\"ocs-icon arrow-right-large medium\" aria-hidden=\"true\"></i></a><span class=\"sr-only\">' + $(carousel).data('next') + '</span></button>');\n \n\n for (var i = 0; i < imgs.length; i++) {\n $('<div class=\"carousel-item\"><img src=\"' + imgs[i].url + '\" class=\"d-block img-fluid\" alt=\"' + imgs[i].alt + '\" title=\"' + imgs[i].title + '\" itemprop=\"image\" /></div>').appendTo($(carousel).find('.carousel-inner'));\n $('<li data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + i + '\" class=\"\"></li>').appendTo($(carousel).find('.carousel-indicators'));\n }\n\n $($(carousel).find('.carousel-item')).first().addClass('active');\n $($(carousel).find('.carousel-indicators > li')).first().addClass('active');\n\n if (imgs.length === 1) {\n $($(carousel).find('.carousel-indicators, a[class^=\"carousel-control-\"]')).detach();\n }\n $(carousel).carousel();\n $($(carousel).find('.carousel-indicators')).attr('aria-hidden', true);\n}\n\n/**\n * Dynamically creates Bootstrap carousel from response containing images\n * @param {Object[]} imgs - Array of large product images,along with related information\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction createCarousel(imgs, secondaryImageUrls, $productContainer, flagsPromo, brightcoveVideo,pdpCarouselPortraitImageUrls) {\n var $carousel = $productContainer.find('.carousel');\n var carouselId = $carousel.attr('id');\n var carouselSmallImages = $('.carousel-outer', $productContainer);\n var carouselDisImg;\n var adProduct = $productContainer.hasClass('container-adproduct') ? true : false;\n var carWithVideo = !adProduct;\n\n var desktopBurstMobileCurrent = $productContainer[0].classList.contains('desktopBurstMobileCurrent');\n var desktopDevice = window.outerWidth > 768 ? true : false;\n\n if($carousel[0] != null){\n carouselDisImg = $carousel[0].closest('.product-detail');\n $carousel[0].id && $carousel[0].id.indexOf('adsProductCarousel') !== -1 ? false : true;\n }\n\n if (carouselSmallImages.hasClass('slick-initialized')) {\n carouselSmallImages.slick('destroy');\n }\n\n carouselSmallImages.empty();\n var html = '';\n var imgUrl = '';\n var imgAdUrl = '';\n\n var globalIndex = 0;\n var nbOfVideosPositioned = 0;\n for (var i = 0; i < secondaryImageUrls.length; i++) {\n\n if (carouselDisImg) {\n if (carouselDisImg.dataset.disimages && carouselDisImg.dataset.disimages == 'false' ) {\n imgUrl = secondaryImageUrls[i].staticURL\n } else {\n imgUrl = secondaryImageUrls[i].url\n }\n } else {\n imgUrl = secondaryImageUrls[i].url\n }\n\n if (carWithVideo && brightcoveVideo && brightcoveVideo.position == (globalIndex + 1)) {\n\n if (globalIndex == 0) {\n html += '<a class=\"image-indicator active is-video-poster\" data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\">' + '<img src=\"' + brightcoveVideo.poster + '\" class=\"d-block img-fluid\" alt=\"' + brightcoveVideo.alt + '\" itemprop=\"image\" width=\"95\" height=\"140\" style=\"object-fit: cover; aspect-ratio: 1/1;\" />' + '</a>';\n } else {\n html += '<a class=\"image-indicator is-video-poster\" data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\">' + '<img src=\"' + brightcoveVideo.poster + '\" class=\"d-block img-fluid\" alt=\"' + brightcoveVideo.alt + '\" itemprop=\"image\" width=\"95\" height=\"140\" style=\"object-fit: cover; aspect-ratio: 1/1;\" />' + '</a>';\n }\n nbOfVideosPositioned = nbOfVideosPositioned + 1;\n globalIndex = globalIndex + 1;\n }\n\n if (globalIndex == 0) {\n html += '<a class=\"image-indicator active\" data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\">' + '<img src=\"' + imgUrl + '\" class=\"d-block img-fluid\" alt=\"' + secondaryImageUrls[i].alt + '\" itemprop=\"image\" width=\"95\" height=\"140\" style=\"object-fit: cover; aspect-ratio: 1/1.5\" />' + '</a>';\n } else {\n html += '<a class=\"image-indicator\" data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\">' + '<img src=\"' + imgUrl + '\" class=\"d-block img-fluid\" alt=\"' + secondaryImageUrls[i].alt + '\" itemprop=\"image\" width=\"95\" height=\"140\" style=\"object-fit: cover; aspect-ratio: 1/1.5\" />' + '</a>';\n }\n\n globalIndex = globalIndex + 1;\n }\n\n if (carWithVideo && brightcoveVideo && nbOfVideosPositioned == 0) {\n if (globalIndex == 0) {\n html += '<a class=\"image-indicator active is-video-poster\" data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\">' + '<img src=\"' + brightcoveVideo.poster + '\" class=\"d-block img-fluid\" alt=\"' + brightcoveVideo.alt + '\" itemprop=\"image\" width=\"95\" height=\"140\" style=\"object-fit: cover; aspect-ratio: 1/1;\" />' + '</a>';\n } else {\n html += '<a class=\"image-indicator is-video-poster\" data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\">' + '<img src=\"' + brightcoveVideo.poster + '\" class=\"d-block img-fluid\" alt=\"' + brightcoveVideo.alt + '\" itemprop=\"image\" width=\"95\" height=\"140\" style=\"object-fit: cover; aspect-ratio: 1/1;\" />' + '</a>';\n }\n }\n carouselSmallImages.append(html);\n \n carouselSmallImages.slick({\n vertical: true,\n slidesToShow: 5,\n slidesToScroll: 1,\n verticalSwiping: true,\n prevArrow: '<button class=\"ocs-button overflow-inverse has-icon medium prev\"><i class=\"ocs-icon arrow-up-large medium\" aria-hidden=\"true\"></i></button>',\n nextArrow: '<button class=\"ocs-button overflow-inverse has-icon medium next\"><i class=\"ocs-icon arrow-down-large medium\" aria-hidden=\"true\"></i></button>',\n infinite: false\n });\n if ($('.image-indicator').length >= 6) {\n $('.product-detail-container .carousel-outer')[0].insertAdjacentHTML(\"beforeend\", '<div class=\"nav-button\"><div class=\"nav-button-container\"></div></div>');\n $('.nav-button-container')[0].insertAdjacentElement(\"afterbegin\", $('.product-detail-container .carousel-outer .ocs-button.next')[0]);\n $('.nav-button-container')[0].insertAdjacentElement(\"afterbegin\", $('.product-detail-container .carousel-outer .ocs-button.prev')[0]);\n }\n\n var flagNew = flagsPromo.flagNew ? '<div class=\"newcollection\"><img src=\"' + flagsPromo.flagNew + '\" alt=\"\"/></div>' : '';\n var flagProduct = '';\n if (flagsPromo && flagsPromo.tabOfFlags && flagsPromo.tabOfFlags.length > 0) {\n for (var i = 0; i < flagsPromo.tabOfFlags.length;
15 i++) {\n flagProduct = flagProduct + '<div class=\"product\"><img src=\"' + flagsPromo.tabOfFlags[i].flagProduct + '\" alt=\"\"/></div>'\n }\n }\n \n \n var controls = $carousel.data('controls') ? '<button class=\"carousel-control-prev ocs-button secondary has-icon medium\" aria-disabled=\"false\"><a role=\"button\" href=\"#' + carouselId + '\" data-bs-slide=\"prev\"><i class=\"ocs-icon arrow-left-large medium\" aria-hidden=\"true\"></i></a><span class=\"sr-only\">' + $carousel.data('prev') + '</span></button><button class=\"carousel-control-next ocs-button secondary has-icon medium\" aria-disabled=\"false\"><a role=\"button\" href=\"#' + carouselId + '\" data-bs-slide=\"next\"><i class=\"ocs-icon arrow-right-large medium\" aria-hidden=\"true\"></i></a><span class=\"sr-only\">' + $carousel.data('next') + '</span></button>' : '';\n \n if (desktopBurstMobileCurrent== true && desktopDevice == true) { /* MIN HEIGHT FOR CLS */\n $('.product-detail .product-detail-container').css(\"min-height\", $('.product-detail-container').height()+\"px\")\n }\n $carousel.carousel('dispose');\n $carousel.empty().append('<ol class=\"carousel-indicators\"></ol><div class=\"carousel-inner\" role=\"listbox\" data-toggle=\"modal\" data-bs-target=\"#fullWidthModal\"><div class=\"flags\">' + flagNew + flagProduct + '</div></div>' + controls);\n \n var $carouselIndicators = $carousel.find('.carousel-indicators');\n\n globalIndex = 0;\n nbOfVideosPositioned = 0;\n\n for (var i = 0; i < imgs.length; i++) {\n if (carWithVideo && brightcoveVideo && brightcoveVideo.position == (globalIndex + 1)) {\n $('<div class=\"carousel-item js-isvideo\"><video-js id=\"brightcoveplayer\" data-account=\"'+ brightcoveVideo.accountId +'\" data-player=\"'+ brightcoveVideo.playerId +'\" data-embed=\"default\" controls=\"\" data-video-id=\"'+ brightcoveVideo.videoId +'\" data-playlist-id=\"\" data-application-id=\"\" class=\"vjs-fluid\" playinline ></video-js></div>').appendTo($carousel.find('.carousel-inner'));\n $('<li data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\" class=\"video-indicator\"></li>').appendTo($carouselIndicators);\n globalIndex = globalIndex + 1;\n nbOfVideosPositioned = nbOfVideosPositioned + 1;\n }\n\n // provoque bug OCS-563\n //carouselDisImg ? carouselDisImg.dataset.disimages ? carouselDisImg.dataset.disimages == 'false' ? imgUrl = imgs[i].staticURL : imgUrl = imgs[i].url : false : false;\n imgUrl = imgs[i].url;\n\n if(adProduct){\n imgAdUrl = pdpCarouselPortraitImageUrls[i].url;\n $('<div data-image-large=\"'+ imgUrl +'\" class=\"carousel-item\"><picture><source srcset=\"'+ imgUrl +'\" media=\"(min-width: 959px)\" width=\"1300\" height=\"1300\" /><source srcset=\"'+ imgAdUrl +'\" media=\"(max-width: 959px)\" width=\"400\" height=\"600\"/><img alt=\"' + imgs[i].alt + '\" src=\"'+ imgAdUrl +'\" width=\"400\" height=\"600\"/></picture></div>').appendTo($carousel.find('.carousel-inner'));\n }
15else{\n $('<div data-image-large=\"'+ imgUrl +'\" class=\"carousel-item\"><img src=\"' + imgUrl + '\" class=\"d-block img-fluid\" alt=\"' + imgs[i].alt + '\" title=\"' + imgs[i].title + '\" itemprop=\"image\" /></div>').appendTo($carousel.find('.carousel-inner'));\n }\n \n $('<li data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\" class=\"\"></li>').appendTo($carouselIndicators);\n\n globalIndex = globalIndex + 1;\n }\n \n if (carWithVideo && brightcoveVideo && nbOfVideosPositioned == 0) {\n $('<div class=\"carousel-item js-isvideo\"><video-js id=\"brightcoveplayer\" data-account=\"'+ brightcoveVideo.accountId +'\" data-player=\"'+ brightcoveVideo.playerId +'\" data-embed=\"default\" controls=\"\" data-video-id=\"'+ brightcoveVideo.videoId +'\" data-playlist-id=\"\" data-application-id=\"\" class=\"vjs-fluid\" playinline ></video-js></div>').appendTo($carousel.find('.carousel-inner'));\n $('<li data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\" class=\"video-indicator\"></li>').appendTo($carouselIndicators);\n }\n\n $carousel.find('.carousel-item').first().addClass('active');\n $carouselIndicators.find('li').first().addClass('active');\n $('<div class=\"overView\"><button class=\"ocs-button has-icon medium overflow-inverse\" data-bs-dismiss=\"modal\" aria-label=\"overView\" aria-disabled=\"false\"><i role=\"button\" class=\"ocs-icon full-screen-on medium\" aria-hidden=\"true\"></i></button></div>').appendTo($carousel.find('.carousel-inner'));\n if (imgs.length === 1) {\n $carouselIndicators.detach();\n $carousel.find('a[class^=\"carousel-control-\"]').detach();\n }\n\n $carousel.carousel();\n $carouselIndicators.attr('aria-hidden', true);\n $carousel.append('<div class=\"modal fade\" id=\"fullWidthModal\"><div class=\"modal-header\"><button type=\"button\" class=\"btn-close close\" data-dismiss=\"modal\"></button></div><div class=\"modal-dialog modal-dialog-centered\"><div class=\"modal-content\"><div class=\"modal-body\"><img src=\"\" class=\"img-fluid\"></div></div></div><div class=\"fullwidth-control fullwidth-prev\" role=\"button\" data-bs-slide=\"prev\"><span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span><span class=\"sr-only\">Previous</span></div><div class=\"fullwidth-control fullwidth-next\" role=\"button\" data-bs-slide=\"next\"><span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span><span class=\"sr-only\">Next</span></div></div>');\n \n if (carWithVideo && brightcoveVideo) {\n $carousel.append('<script src=\"'+ brightcoveVideo.scriptUrl +'\"><\/script>');\n }\n \n $(\".carousel-inner\").swipe({\n swipeLeft: function (event, direction, distance, duration, fingerCount, fingerData) {\n this.closest('.carousel').carousel('next');\n },\n swipeRight: function (event, direction, distance, duration, fingerCount, fingerData) {\n this.closest('.carousel').carousel('prev');\n },\n //Default is 75px, set to 0 for demo so any distance triggers swipe\n threshold: 50\n });\n\n //Add a mutationObserver to observe if element js-isvideo loose class active\n if (carWithVideo && brightcoveVideo && window.videojs != undefined && $('#brightcoveplayer') && $('#brightcoveplayer').length > 0) {\n var mut = new MutationObserver(function(mutations, mut){\n\n mutations.forEach(function(mutation) {\n if(mutation.attributeName == \"class\" && !mutation.target.classList.contains('active')){\n videojs.getPlayer('brightcoveplayer').pause();\n }\n });\n });\n \n mut.observe(document.querySelector(\".js-isvideo\"),{\n 'attributes': true\n });\n }\n}\n\n/**\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\n * @param {Object} response - response from Ajax call\n * @param {Object} response.product - Product object\n * @param {string} response.product.id - Product ID\n * @param {Object[]} response.product.variationAttributes - Product attributes\n * @param {Object[]} response.product.images - Product images\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\n * attributes have been selected. Used partially to\n * determine whether the Add to Cart button can be enabled\n * @param {jQuery}
15 $productContainer - DOM element for a given product.\n */\nfunction handleVariantResponse(response, $productContainer) {\n var isChoiceOfBonusProducts =\n $productContainer.parents('.choose-bonus-product-dialog').length > 0;\n var isVaraint;\n if (response.product.variationAttributes) {\n updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\n isVaraint = response.product.productType === 'variant';\n if (isChoiceOfBonusProducts && isVaraint) {\n $productContainer.parent('.bonus-product-item')\n .data('pid', response.product.id);\n\n $productContainer.parent('.bonus-product-item')\n .data('ready-to-order', response.product.readyToOrder);\n }\n }\n\n // Update primary images\n var primaryImageUrls = response.product.images.large;\n var secondaryImageUrls = response.product.images.small;\n var pdpCarouselPortraitImageUrls = response.product.images.pdpCarouselPortrait;\n $productContainer.parent('.product-quickview')\n let isQuickview =\n $productContainer.hasClass('product-quickview');\n\n if (isQuickview) {\n createCarouselQuickview(primaryImageUrls, secondaryImageUrls, $productContainer, response.product.flagsPromo);\n } else {\n createCarousel(primaryImageUrls, secondaryImageUrls, $productContainer, response.product.flagsPromo, response.product.brightcoveVideos,pdpCarouselPortraitImageUrls);\n\n }\n\n // update bestshippingMethodName\n if (response && response.bestShippingMethodName) {\n if ($('.js-best-shipping-name').length > 0) {\n $('.js-best-shipping-name').empty().html(response.bestShippingMethodName);\n }\n }\n\n // Update pricing\n if (!isChoiceOfBonusProducts) {\n var $priceSelector = $('.prices .price', $productContainer).length ?\n $('.prices .price', $productContainer) :\n $('.prices .price');\n $priceSelector.replaceWith(response.product.price.html);\n }\n\n // Update promotions\n $('.promotions').empty().html(getPromotionsHtml(response.product.promotions));\n\n updateAvailability(response, $productContainer);\n\n updateStressMarketing(response, $productContainer);\n\n if (isChoiceOfBonusProducts) {\n var $selectButton = $productContainer.find('.select-bonus-product');\n $selectButton.trigger('bonusproduct:updateSelectButton', {\n product: response.product,\n $productContainer: $productContainer\n });\n } else {\n // Enable \"Add to Cart\" button if all required attributes have been selected\n $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\n product: response.product,\n $productContainer: $productContainer\n }).trigger('product:statusUpdate', response.product);\n }\n\n\n // Update attributes\n $productContainer.find('.main-attributes').empty()\n .html(getAttributesHtml(response.product.attributes));\n}\nfunction adHandleVariantResponse(response, $productContainer) {\n \n var isVaraint;\n if (response.product.variationAttributes) {\n updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\n isVaraint = response.product.productType === 'variant';\n if (isVaraint) {\n $productContainer.parent('.bonus-product-item')\n .data('pid', response.product.id);\n\n $productContainer.parent('.bonus-product-item')\n .data('ready-to-order', response.product.readyToOrder);\n }\n }\n\n // Update primary images\n var primaryImageUrls = response.product.images.large;\n var secondaryImageUrls = response.product.images.small;\n var pdpCarouselPortraitImageUrls = response.product.images.pdpCarouselPortrait;\n\n $productContainer.parent('.product-quickview')\n let isQuickview =\n $productContainer.hasClass('product-quickview');\n if (isQuickview) {\n createCarouselQuickview(primaryImageUrls, secondaryImageUrls, $productC
15ontainer, response.product.flagsPromo);\n } else {\n createCarousel(primaryImageUrls, secondaryImageUrls, $productContainer, response.product.flagsPromo, response.product.brightcoveVideos,pdpCarouselPortraitImageUrls);\n }\n\n // Update pricing\n var $priceSelector = $('.prices .price', $productContainer).length ?\n $('.prices .price', $productContainer) :\n $('.prices .price');\n $priceSelector.replaceWith(response.product.price.html);\n \n // Update promotions\n $('.promotions').empty().html(getPromotionsHtml(response.product.promotions));\n\n updateAvailability(response, $productContainer);\n\n updateStressMarketing(response, $productContainer);\n\n $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\n product: response.product,\n $productContainer: $productContainer\n }).trigger('product:statusUpdate', response.product);\n\n}\n\n/**\n * @param {*} htmlPromo - html representant les promos\n */\nfunction updatePromo(htmlPromo) {\n if ($('.op-commercial') && !$('.op-commercial').find(\".soldes\").hasClass('product-set')) {\n $('.op-commercial').empty().html(htmlPromo);\n }\n}\n\n/**\n * @param {*} htmlPromo - html representant le bouton de reservation en boutique\n */\nfunction updateOnStoreStatus(htmlSocloz) {\n if ($('.js-eresa')) {\
15n $('.js-eresa').empty().html(htmlSocloz);\n }\n}\n\nfunction callAPIOneStock(url,product) {\n $.ajax({\n url: url + \"&rct=\" + product.id,\n method: 'get',\n success: function (data) {\n if ($('.js-eresa')) {\n $('.js-eresa').empty().html(data);\n }\n var selectedSizeBtn = $(\"[data-attr=size] .size-attribute .selectable.select\");\n var selectedSizeDropdown = $('.js-select-adproduct-size').val();\n var isOutOfStock = $('.js-eresa .eresa').hasClass('false');\n\n if ((selectedSizeBtn.length || selectedSizeDropdown) && isOutOfStock) {\n $('.js-eresa .eresa').addClass('not-instock');\n }\n\n }\n });\n}\n\nfunction updateStockMag(stockMagPdp){\n $('.ocs-content-layer #woosmapstore').value = \"\";\n if($('.size-attribute.selectable').hasClass('selected')){\n $(\".displayIf-isSizeSelected-false\").addClass('d-none');\n $(\".displayIf-isSizeSelected-true\").removeClass('d-none');\n }\n if(stockMagPdp){\n $('.displayIf-selectedStoreAvailable-true').removeClass('d-none');\n $('.displayIf-selectedStoreAvailable-false').addClass('d-none');\n }else{\n $('.displayIf-selectedStoreAvailable-false').removeClass('d-none');\n $('.displayIf-selectedStoreAvailable-true').addClass('d-none');\n }\n}\n\n/**\n * @param {*} htmlPromo - html representant le bouton de reservation en boutique\n */\nfunction updateProductSet(productID) {\n if ($('.js-pushSet').length > 0) {\n if (productID != null) {\n var urlParams = {\n productID: productID\n };\n var url = appendToUrl($('.js-pushSet').data('url'), urlParams);\n $.ajax({\n url: url,\n method: 'get',\n success: function (htmlProductSet) {\n if ($('.js-pushSet')) {\n $('.js-pushSet').empty().html(htmlProductSet);\n }\n }\n });\n } else {\n $('.js-pushSet').empty();\n }\n }\n}\n\n/**\n * @typespec UpdatedQuantity\n * @type Object\n * @property {boolean} selected - Whether the quantity has been selected\n * @property {string} value - The number of products to purchase\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options,\n * etc.\n */\n\n/**\n * Updates the quantity DOM elements post Ajax call\n * @param {UpdatedQuantity[]} quantities -\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction updateQuantities(quantities, $productContainer) {\n var quantitySelected = false;\n if (!($productContainer.parent('.bonus-product-item').length > 0)) {\n var optionsHtml = quantities.map(function (quantity) {\n var selected = '';\n if(quantity.selected){\n selected =' selected ';\n quantitySelected = quantity.value;\n }\n return '<option value=\"' + quantity.value + '\" data-url=\"' + quantity.url + '\"' +\n selected + '>' + quantity.value + '</option>';\n }).join('');\n var quantitySelector = getQuantitySelector($productContainer);\n quantitySelector.empty().html(optionsHtml);\n if(!quantitySelected){\n quantitySelector.closest('.ocs-select').find('input[type=\"text\"]').val(\"1\");\n }
15else{\n quantitySelector.closest('.ocs-select').find('input[type=\"text\"]').val(quantitySelected);\n }\n }\n}\n\n\n/**\n * updates the recommendations CArousel\n * @param {object} data - product requested\n */\nfunction updateRecommendations(data) {\n\n $('.push-product-reco').empty();\n if (!data.recommendations || data.recommendations.length === 0) {\n return;\n }\n\n $('.push-product-reco .ocs-swiper-recommendation').remove();\n var pids = data.recommendations;\n \n $.ajax({\n url: $('.product-detail').data('update-recommendations-url') + \"?pids=\" + pids,\n type: 'get',\n success: function (data) {\n if ($('.push-product-reco .ocs-swiper-recommendation').length == 0) {\n $('.push-product-reco').append(data);\n var swiper = new Swiper('.swiper', {\n observer: true,\n observeParents: true,\n slidesPerView: 2.3,\n spaceBetween: 8,\n breakpoints: {\n 769: {\n slidesPerView: 3.3,\n spaceBetween: 16\n },\n 1320: {\n slidesPerView: 4.3,\n }\n },\n loop: false,\n navigation: {\n nextEl: '.swiper-button-next',\n prevEl: '.swiper-button-prev',\n },\n /*\n a11y : {\n nextSlideMessage: $('.swiper-button-next')[0].getAttribute('aria-label'),\n prevSlideMessage: $('.swiper-button-prev')[0].getAttribute('aria-label'), \n },\n scrollbar: {\n el: '.swiper-scrollbar',\n },*/\n on: {\n init: function () {\n $(this.el).find('.swiper-wrapper .swiper-slide').css('opacity', '1');\n $(this.el).find('.before-loading').removeClass('before-loading');\n },\n },\n });\n }\n },\n error: function (error) {\n }\n });\n}\n\nfunction gtmRatingProduct(selectedValueUrl) {\n if (selectedValueUrl) {\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n success: function (data) {\
15n let GTMratingProduct = __webpack_require__(/*! ../gtm/util/actions/ratingProduct */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/ratingProduct.js\");\n GTMratingProduct.getDataLayerForAction({product: data.product});\n },\n error: function () {}\n });\n }\n}\n\n/**\n * updates the product view when a product attribute is selected or deselected or when\n * changing quantity\n * @param {string} selectedValueUrl - the Url for the selected variation value\n * @param {jQuery} $productContainer - DOM element for current product\n * @param {Boolean} canChangeUrl - specify if the script can change page url\n */\nfunction attributeSelect(selectedValueUrl, $productContainer, canChangeUrl) {\n if (selectedValueUrl) {\n $productContainer.spinner().start();\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n success: function (data) {\n const productType = data.product.productType;\n productType === \"variationGroup\" ? $productContainer.data('idvariationgroup', data.product.id) : false;\n\n //Only on product Page\n if (canChangeUrl && $('.Product-Show').length > 0 && data.variationGroupUrl) {\n history.replaceState(null, null, data.variationGroupUrl);\n }\n\n $productContainer.data('name', data.product.productName);\n\n if ($('#js-isproductpage-productquantity').length > 0) {\n $('#js-isproductpage-productquantity').val(data.product.selectedQuantity);\n }\n if ($('#js-isproductpage-productid').length > 0) {\n $('#js-isproductpage-productid').val(data.product.id);\n }\n\n handleVariantResponse(data, $productContainer);\n updateOptions(data.product.options, $productContainer);\n updateQuantities(data.product.quantities, $productContainer);\n updatePromo(data.product.price.htmlOp);\n data.product.enableWaro == true ? updateWaroData(data.product) : updateChrystalChainWinddle(data.product); /* Product traceability update */\n if(data.product.htmlSocloz) {\n updateOnStoreStatus(data.product.htmlSocloz);\n }else if(data.product.isOneStock) {\n callAPIOneStock(selectedValueUrl.replace('Product','OneStock').replace('Variation','CheckOneStock'), data.product);\n }\n\n if ($productContainer.closest('#quickViewModal').length == 0) { /* No update reco when quickview click comes from reco */\n updateRecommendations(data);\n }\n updateSoclozButton(data.product);\n updateStockMag(data.selectedStoreAvailable);\n // comment the updateProductSet because we don't need to get productSet for variants \n // updateProductSet(data.product.id);\n $('body').trigger('product:afterAttributeSelect', {\n data: data,\n container: $productContainer\n });\n\n if ($productContainer.prevObject[0] && $productContainer.prevObject[0].classList.contains('color-attribute') && ($('[data-attr=\"color\"] a:not(.more-colors):not(.color-attribute-mobile)').length > 1 || $('[data-attr=\"color\"] select option').length > 1)) { \n let GTMColorChanged = __webpack_require__(/*! ../gtm/util/actions/colorChanged */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/colorChanged.js\");\n let valueSizeColorChanged;\n const defaultValueSize = function addDefaultValueSize() {\n let defaultValueSize = '';\n data.product.variationAttributes.forEach( item => {\n if (item.attributeId == 'size') {\n item.values.forEac
15h( value => {\n defaultValueSize == '' && value.selectable ? defaultValueSize = value.url : false;\n })\n } else if (item.attributeId == 'length') {\n item.values.forEach( value => {\n value.selectable ? defaultValueSize += \"&dwvar_\"+data.product.id+\"_length=\"+value.id+\"\" : false;\n })\n } else {\n false\n }\n })\n $.ajax({\n url: defaultValueSize,\n success: function(data) {\n GTMColorChanged.getDataLayerForAction({\n idProductRC: data.product.variationGroupID ? data.product.variationGroupID : data.product.id,\n idProductRCT: data.product.id,\n label: data.product.colorDisplayValue\n });\n }\n })\n }\n data.product.sizeDisplayValue !== \"\" ? valueSizeColorChanged = data.product.id : valueSizeColorChanged = (defaultValueSize(), defaultValueSize);\n if (typeof(valueSizeColorChanged) !== 'function') {\n GTMColorChanged.getDataLayerForAction({\n idProductRC: data.product.variationGroupID ? data.product.variationGroupID : data.product.id,\n idProductRCT: valueSizeColorChanged,\n label: data.product.colorDisplayValue\n });\n }\n }\n \n if ($productContainer.prevObject[0] && ($productContainer.prevObject[0].classList.contains('size-choose') || $productContainer.prevObject[0].classList.contains('length-choose')) && $('button.size-attribute').length > 1) { \n let colorProductLabel = data.product.sizeDisplayValue;\n if ($('.length-choose').length !== 0 && productType !== \"variationGroup\") {\n colorProductLabel = data.product.sizeDisplayValue + \" \" + $('.select.length-choose')[0].innerText;\n }\n \n if (productType !== \"variationGroup\") { // release the event only when all sizes are chosen, ex. with width and height for jeans\n let GTMSizeChanged = __webpack_require__(/*! ../gtm/util/actions/sizeChanged */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/sizeChanged.js\");\n GTMSizeChanged.getDataLayerForAction({\n idProductRC: data.product.variationGroupID ? data.product.variationGroupID : data.product.id,\n idProductRCT: data.product.id,\n label: colorProductLabel\n });\n }\n }\n \n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n}\n\nfunction adAttributeSelect(selectedValueUrl, $productContainer, canChangeUrl) {\n if (selectedValueUrl) {\n $productContainer.spinner().start();\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n success: function (data) {\
15n data.product.productType === \"variationGroup\" ? $productContainer.data('idvariationgroup', data.product.id) : false;\n\n $productContainer.data('name', data.product.productName);\n\n adHandleVariantResponse(data, $productContainer);\n updateOptions(data.product.options, $productContainer);\n updatePromo(data.product.price.htmlOp);\n if (data.product.htmlSocloz) {\n updateOnStoreStatus(data.product.htmlSocloz);\n }\n updateSoclozButton(data.product);\n // comment the updateProductSet because we don't need to get productSet for variants \n //updateProductSet(data.product.id);\n $('body').trigger('product:afterAttributeSelect', {\n data: data,\n container: $productContainer\n });\n \n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n}\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @return {string} - The provided URL to use when adding a product to the cart\n */\nfunction getAddToCartUrl() {\n return $('.add-to-cart-url').val();\n}\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nfunction parseHtml(html) {\n var $html = $('<div>').append($.parseHTML(html));\n\n var body = $html.find('.choice-of-bonus-product');\n var footer = $html.find('.modal-footer').children();\n\n return {\n body: body,\n footer: footer\n };\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @param {Object} data - data object used to fill in dynamic portions of the html\n */\nfunction chooseBonusProducts(data) {\n $('.modal-body').spinner().start();\n\n if ($('#chooseBonusProductModal').length !== 0) {\n $('#chooseBonusProductModal').remove();\n }\n var bonusUrl;\n if (data.bonusChoiceRuleBased) {\n bonusUrl = data.showProductsUrlRuleBased;\n } else {\n bonusUrl = data.showProductsUrlListBased;\n }\n\n var htmlString = '\x3c!-- Modal --\x3e' +\n '<div class=\"modal fade\" id=\"chooseBonusProductModal\" role=\"dialog\">' +\n '<div class=\"modal-dialog choose-bonus-product-dialog\" ' +\n 'data-total-qty=\"' + data.maxBonusItems + '\"' +\n 'data-UUID=\"' + data.uuid + '\"' +\n 'data-pliUUID=\"' + data.pliUUID + '\"' +\n 'data-addToCartUrl=\"' + data.addToCartUrl + '\"' +\n 'data-pageStart=\"0\"' +\n 'data-pageSize=\"' + data.pageSize + '\"' +\n 'data-moreURL=\"' + data.showProductsUrlRuleBased + '\"' +\n 'data-bonusChoiceRuleBased=\"' + data.bonusChoiceRuleBased + '\">' +\n '\x3c!-- Modal content--\x3e' +\n '<div class=\"modal-content\">
15' +\n '<div class=\"modal-header\">' +\n ' <span class=\"\">' + data.labels.selectprods + '</span>' +\n ' <button type=\"button\" class=\"close pull-right\" data-dismiss=\"modal\">×</button>' +\n '</div>' +\n '<div class=\"modal-body\"></div>' +\n '<div class=\"modal-footer\"></div>' +\n '</div>' +\n '</div>' +\n '</div>';\n $('body').append(htmlString);\n $('.modal-body').spinner().start();\n\n $.ajax({\n url: bonusUrl,\n method: 'GET',\n dataType: 'html',\n success: function (html) {\n var parsedHtml = parseHtml(html);\n $('#chooseBonusProductModal .modal-body').empty();\n $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\n $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\n $('#chooseBonusProductModal').modal('show');\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\nfunction appendToUrl(url, params) {\n var newUrl = url;\n newUrl += (newUrl.indexOf('?') !== -1 ? '&' : '?') + Object.keys(params).map(function (key) {\n return key + '=' + encodeURIComponent(params[key]);\n }).join('&');\n\n return newUrl;\n}\n\nfunction changeReco(contentJsonReco,url,divreco){\n \n var contentJsonRecoNew = contentJsonReco.toString();\n contentJsonRecoNew = contentJsonRecoNew.replace(/\\\\n/g, \"\\\\n\") \n .replace(/\\\\'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\\\\\"')\n .replace(/\\\\&/g, \"\\\\&\")\n .replace(/\\\\r/g, \"\\\\r\")\n .replace(/\\\\t/g, \"\\\\t\")\n .replace(/\\\\b/g, \"\\\\b\")\n .replace(/\\\\f/g, \"\\\\f\")\n .replace(\"/\",\"\");\n // remove non-printable and other non-valid JSON chars\n contentJsonRecoNew = contentJsonRecoNew.replace(/[\\u0000-\\u0019]+/g,\"\"); \n var contentReco = JSON.stringify(contentJsonRecoNew);\n\n var urlParams = {\n contentReco: contentReco,\n divreco: divreco,\n template: 'layer'\n };\n\n var urlChangeReco = appendToUrl(url, urlParams);\n\n $.ajax({\n url: urlChangeReco,\n method: 'GET',\n dataType: 'html',\n success: function (html) {\n var $recoDiv = $('#'+divreco);\n $recoDiv.html(html);\n },\n error: function (err) {\n \n }\n });\n\n}\n\n/**\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\n * @param {string} response - ajax response from clicking the add to cart button\n */\n\n\n/**\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\n * items with their selected variants\n *\n * @return {string[]} - List of selected bundle product item ID's\n */\nfunction getChildProducts() {\n var childProducts = [];\n $('.bundle-item').each(function () {\n childProducts.push({\n pid: $(this).find('.product-id').text(),\n quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\n });\n });\n\n return childProducts.length ? JSON.stringify(childProducts) : [];\n}\n\n/**\n * Retrieve product options\n *\n * @param {jQuery} $productContainer - DOM element for current product\n * @return {string} - Product options and their selected values\n */\nfunction getOptions($productContainer) {\n var options = $productContainer\n .find('.product-option')\n .map(function () {\n var $elOption = $(this).find('.options-select');\n var urlValue = $elOption.val();\n var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]')\n .data('value-id');\n return {\n optionId: $(this).data('option-id'),\n selectedValueId: selectedValueId\n };\n }).toArray();\n\n return JSON.stringify(options);\n}
15\n\nfunction sizeGuideModal() {\n $('.sizeguide-trigger').on('click', function (e) {\n e.preventDefault();\n var sizeChartAsset = $(this).data('sizechartasset');\n var url = $(this).data('sizecharturl');\n\n if (!sizeChartAlreadyLoaded) {\n $.ajax({\n url: url,\n data: { sizeChartAsset: sizeChartAsset },\n success: function (data) {\n if (data && data.sizeChartAsset) {\n $('#sizeModal').find('.modal-body').append(data.sizeChartAsset);\n sizeChartAlreadyLoaded = true;\n }\n }\n });\n }\n $('#sizeModal').modal('show');\n });\n}\n\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n//all of these functions are use for cart.js and addToCart function\n\n\n\n\n /**\n * re-renders the order totals and the number of items in the cart\n * @param {Object} data - AJAX response from the server\n */\nfunction updateCartTotals(data) {\n $('body').trigger('pwa:updateCard', data);\n\n $('.number-of-items').empty().append(data.resources.numberOfItems);\n $('.shipping-cost-cart').empty().append(data.totals.totalShippingCost);\n $('.shipping-cost').empty().append(data.totals.totalShippingCost);\n $('.tax-total').empty().append(data.totals.totalTax);\n if ($('#checkout-main').length > 0) {\n $('.grand-total-sum').empty().append(data.totals.grandTotal);\n } else {\n $('.grand-total').empty().append(data.totals.grandTotal);\n }\n let deliveryCost = \"\";\n const deliveryMethod = data.shipments[0].bestShippingMethodDisplayName !== undefined ? data.shipments[0].bestShippingMethodDisplayName : data.shipments[0].selectedShippingMethodDisplayName;\n if (data.shipments[0].bestShippingMethodTotals !== undefined && data.shipments[0].bestShippingMethodTotals.totalShippingCost !== undefined ) {\n deliveryCost = data.shipments[0].bestShippingMethodTotals.totalShippingCost;\n } else {\n data.shipments[0].shippingMethods.forEach(function(deliveryMethodName) {\n if (deliveryMethodName.displayName == deliveryMethod) {\n if (deliveryMethodName.shippingCost == '0,00 â¬') {\n deliveryCost = $('.delivery-value').attr('data-free-delivery');\n } else {\n deliveryCost = deliveryMethodName.shippingCost;\n }\n }\n })\n }\n $('.delivery-text').empty().append(deliveryMethod);\n $('.delivery-value').empty().append(deliveryCost);\n $('.totalPrice').empty().append(data.totals.grandTotal);\n $('.sub-total').empty().append(data.totals.subTotal);\n $('.sub-total').attr('data-subtotal', data.totals.subTotalSimple);\n $('.minicart-quantity').empty().append(data.numItems);\n $('.minicart-layer-quantity').empty().append('(' + data.numItems + ')');\n\n $('.bonus-product-line-item').remove();\n if (data.hasBonusProduct) {\n addProductlineItem(data);\n }\n\n if (data.totals.orderLevelDiscountTotal.value > 0) {\n $('.order-discount').removeClass('hide-order-discount');\n $('.order-discount-total').empty()\n .append('- ' + data.totals.orderLevelDiscountTotal.formatted);\n } else {\n $('.order-discount').addClass('hide-order-discount');\n }\n\n if (data.totals.shippingLevelDiscountTotal.value > 0) {\n $('.shipping-discount').removeClass('hide-shipping-discount');\n $('.shipping-discount-total').empty().append('- ' +\n data.totals.shippingLevelDiscountTotal.formatted);\n } else {\n $('.shipping-discount').addClass('hide-shipping-discount');\n }\n\n data.items.forEach(function (item) {\n $('.item-' + item.UUID).empty().append(item.renderedPromotions);\n $('.item-total-' + item.UUID).empty().append(item.priceTotal.renderedPrice);\n });\n\n //ABtestEconomy segment : economyProductBasket // economyBasket\n var $cartEconomySelector = $('.js-cart-economy');\n if ($cartEconomySelector.length > 0) {\n if (data.totals.cartEconomy) {\n $cartEconomySelector.replaceWith(data.totals.cartEconomyHtml);\n } else {\n $cartEconomySelector.empty();\n }\n }\n}\n\n/**\n * Updates price of all product lines item\n * @param {Object} items - list of items from the server\n * Info : it's useful only when valopanier said to apply Pricebook when customer update quantity\n */\n function updatePrice(items) {\n for (var i = 0; i < items.length;
15 i++) {\n var priceSelector = '.Price-' + items[i].UUID;\n if (document.querySelector(priceSelector+'.price')) {\n $(priceSelector+' .price').html(items[i].price.sales.formatted);\n }\n else {\n $(priceSelector).replaceWith(items[i].price.html);\n }\n\n //ABtestEconomy segment : economyProductBasket\n var economySelector = '.js-lineitem-economy-' + items[i].UUID;\n if ($(economySelector).length > 0) {\n if (items[i].economy) {\n $(economySelector).replaceWith(items[i].economyHtml);\n } else {\n $(economySelector).empty();\n }\n }\n }\n}\n\n /**\n * Checks whether the basket is valid. if invalid displays error message and disables\n * checkout button\n * @param {Object} data - AJAX response from the server\n */\nfunction validateBasket(data) {\n if (data.valid.error) {\n if (data.valid.message) {\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', data.valid.message);\n\n if (data.valid.invalidProducts.length > 0) {\n $('.product-cart-invalid').removeClass('d-flex').addClass('d-none');\n data.valid.invalidProducts.forEach(function(invalidProduct) {\n $('.product-cart-invalid[data-pid=\"' + invalidProduct + '\"]').removeClass('d-none').addClass('d-flex');\n });\n }\n } else {\n $('.cart').empty().append('<div class=\"row\"> ' +\n '<div class=\"col-12 text-center\"> ' +\n '<h1>' + data.resources.emptyCartMsg + '</h1> ' +\n '</div> ' +\n '</div>'\n );\n $('.number-of-items').empty().append(data.resources.numberOfItems);\n $('.minicart-quantity').empty().append(data.numItems);\n $('.minicart-layer-quantity').empty().append('(' + data.numItems + ')');\n $('.minicart .popover').empty();\n $('.minicart .popover').removeClass('show');\n }\n\n $('.checkout-btn').addClass('disabled');\n } else {\n $('.checkout-btn').removeClass('disabled');\n $('.product-cart-invalid').removeClass('d-flex').addClass('d-none');\n }\n}\n\nfunction validateExclusionProducts(validExclusionProducts, basket) {\n let productAvailable = true;\n const jsValidExluButton = document.querySelectorAll('.js-valid-exclusion'); /* Mobile and desktop buttons */\n if (validExclusionProducts && validExclusionProducts.valid) {\n $(document).find('.valid-exclusion-product-error').addClass('d-none');\n }\n else {\n $(document).find('.valid-exclusion-product-error').removeClass('d-none');\n }\n\n if (jsValidExluButton.length !== 0) {\n basket.items.forEach(function(product) {\n product.available !== true ? productAvailable = false : false ;\n })\n\n jsValidExluButton.forEach(function(button) { \n productAvailable == true ? (button.classList.remove('disabled'), button.setAttribute('aria-disabled', 'false')) : (button.classList.add('disabled'), button.setAttribute('aria-disabled', 'true')) ;\n })\n }\n}\n///////////////////////////////////////////////////////////////////////////////////////////////////\n\nfunction selectVariantIfOnlyOne () {\n $('div').find(\"[data-attr=size]\").each(function(){\n var $sizeAttrs = $(this).find('.size-attribute');\n if ($sizeAttrs.length == 1 && $sizeAttrs.hasClass('selectable')){\n if (!$sizeAttrs.find('.selectable').hasClass('select')){\n $sizeAttrs.click();\n }\n }\n });\n}\n\nfunction selectLengthIfOnlyOne () {\n $('div').find(\"[data-attr=length]\").each(function(){\n var $sizeAttrs = $(this).find('.size-attribute');\n if ($sizeAttrs.length == 1 && $sizeAttrs.hasClass('selectable')){\n if (!$sizeAttrs.find('.selectable').hasClass('select')){\n $sizeAttrs.click();\n }\n }\n });\n}\n\n/* Update fidelity points in DOM */\nfunction updateFidelityPoints(data) {\
15n document.querySelector('.pointsEarned .points') !== null && data.basketPointNumber !== null ? document.querySelector('.pointsEarned .points').innerText = data.basketPointNumber : false;\n}\n\nmodule.exports = {\n attributeSelect: attributeSelect,\n methods: {\n editBonusProducts: function (data) {\n chooseBonusProducts(data);\n },\n updateCartTotals: function(data) {\n updateCartTotals(data);\n },\n validateBasket: function(data) {\n validateBasket(data);\n },\n validateExclusionProducts: function(validExclusionProducts, basket) {\n validateExclusionProducts(validExclusionProducts, basket);\n },\n updatePrice: function(items) {\n updatePrice(items);\n },\n selectVariantIfOnlyOne: function() {\n selectVariantIfOnlyOne();\n },\n selectLengthIfOnlyOne: function() {\n selectLengthIfOnlyOne();\n },\n colorSelectedFirstPos: function() {\n colorSelectedFirstPos();\n },\n updateFidelityPoints: function(data) {\n updateFidelityPoints(data);\n } \n },\n ratingAttribute: function () {\n $(document).on('click', '.bzv-global-rating, #js-zone-reviews button, #js-zone-qa button', function (e) {\n e.preventDefault();\n var gtmRatingProductUrl = lastUrl == \"\" ? $('[data-attr=\"size\"] .select').length !== 0 ? $('[data-attr=\"size\"] .select').attr('value') : atob($('[data-attr=\"color\"] .selected').closest('a').attr('data-url')) : lastUrl;\n\n if ($('.container-adproduct').length == 0){\n gtmRatingProduct(gtmRatingProductUrl, true);\n }\n })\n },\n colorAttribute: function () {\n $(document).on('click', '[data-attr=\"color\"] a:not(.more-colors):not(.color-attribute-mobile)', function (e) {\n e.preventDefault();\n if ($(this).attr('disabled')) {\n return;\n }\n var $productContainer = $(this).closest('.set-item');
15\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n \n var decodeUrl = atob($(this).attr('data-url'));\n lastUrl = decodeUrl;\n if($(this).closest('.container-adproduct').length !== 0){\n $productContainer = $(this).closest('.container-adproduct');\n adAttributeSelect(decodeUrl, $productContainer, true);\n }else{\n attributeSelect(decodeUrl, $productContainer, true);\n }\n });\n\n /* --------------------- AB OCS-1136 --------------------- */\n $(document).on('change', '[data-attr=\"color\"] select', function(e) {\n e.preventDefault();\n if ($(this).attr('disabled')) {\n return;\n }\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n \n var decodeUrl = atob($(this).children('option:selected').attr('data-url'));\n lastUrl = decodeUrl;\n if($(this).closest('.container-adproduct').length !== 0){\n false;\n }
15else{\n attributeSelect(decodeUrl, $productContainer, true);\n }\n })\n /* --------------------- AB OCS-1136 --------------------- */\n\n },\n selectAttribute: function () {\n /*\n ** Le on('click') n'est pas directement sur le span mais sur le bouton car non supporté par\n ** mozilla sur macOs\n */\n\n $(document).off('click', 'button.size-attribute.selectable').on('click', 'button.size-attribute.selectable', function (e) {\n e.preventDefault();\n var $span = $(this).find(\"span\");\n var $productContainer = $span.closest('.set-item');\n lastUrl = $span.attr('value');\n\n if (!$productContainer.length) {\n $productContainer = $span.closest('.product-detail');\n }\n\n attributeSelect($span.attr('value'), $productContainer);\n \n });\n\n /* --------------------- AB OCS-1136 --------------------- */\n $(document).on('change', '[data-attr=\"size\"] select, [data-attr=\"length\"] select', function() {\n var $productContainer = $(this).children('option:selected').closest('.set-item');
15\n if (!$productContainer.length) {\n $productContainer = $(this).children('option:selected').closest('.product-detail');\n }\n attributeSelect($(this).children('option:selected').attr('value'), $productContainer);\n });\n $(document).ready(function() {\n if (document.querySelector('[data-attr=size] select') !== null && document.querySelectorAll('[data-attr=size] select option:not(:disabled)').length == 1) {\n const changeEvent = new Event('change', { bubbles: true });\n document.querySelector('[data-attr=size] select').dispatchEvent(changeEvent);\n }\n if (document.querySelector('[data-attr=length] select') !== null && document.querySelectorAll('[data-attr=length] select option:not(:disabled)').length == 1) {\n const changeEvent = new Event('change', { bubbles: true });\n document.querySelector('[data-attr=length] select').dispatchEvent(changeEvent);\n }\n })\n /* --------------------- AB OCS-1136 --------------------- */\n\n /*---Google Shopping---*/\n if($('.container-adproduct').length){\n $(document).off('change', '.js-select-adproduct').on('change', '.js-select-adproduct', function (e) {\n e.preventDefault();\n var $option = $(this).find(':selected');\n var $productContainer = $option.closest('.container-adproduct');\n adAttributeSelect($option.attr('data-url'), $productContainer);\n });\n }\n\n },\n\n selectAttributeIndicator: function () {\n $(document).on('click', '.image-indicator', function (e) {\n e.preventDefault();\n\n $('.image-indicator').removeClass('active');\n\n $(this).addClass('active');\n });\n },\n\n selectAttributeSliderIndicator: function () {\n $(document).on('click', '.carousel-indicators li', function (e) {\n e.preventDefault();\n\n $('.image-indicator').removeClass('active');\n $('a[data-bs-slide-to=\"' + $(this).attr('data-bs-slide-to') + '\"]').addClass('active');\n });\n },\n\n productSetSelectProducts: function () {\n $(document).on('change', '.set-items :checkbox', function () {\n let totalPriceSet = 0;\n let totalBaseSet = 0\n let nbChecked = 0;\n let $priceProductSet = $('.product-set-detail .prices.total .ocs-price');\n let dataPriceAll = false;\n $('.set-item').each(function () {\n if ($(this).find(':checkbox').is(':checked')) {\n nbChecked++;\n let $price = $(this).find('.prices .ocs-price span')[0].innerText;\n totalPriceSet = totalPriceSet + parseFloat($price);\n if ($(this).find('.prices .ocs-price span')[1] !== undefined) {\n totalBaseSet = totalBaseSet + parseFloat($(this).find('.prices .ocs-price span')[1].innerText);\n } else {\n totalBaseSet = totalBaseSet + parseFloat($(this).find('.prices .ocs-price span')[0].innerText);\n }\n }\n });\n\n let totalPriceSetStr = totalPriceSet.toFixed(2) + \"â¬\";\n\n if ($($priceProductSet[0]).attr('data-priceall')) {\n dataPriceAll = true;\n if ($($priceProductSet[0]).data('priceall') == totalPriceSetStr) {\n $priceProductSet[0].children[0].innerText = $($priceProductSet[0]).data('priceset');\n } else {\n $priceProductSet[0].children[0].innerText = totalPriceSetStr;\n }\n } else {\n $priceProductSet[0].children[0].innerText = totalPriceSetStr;\n }\n\n if ($priceProductSet[0].children[1] !== undefined) {\n $priceProductSet[0].children[1].innerText = totalBaseSet.toFixed(2) + \"â¬\";\n \n if (totalBaseSet == 0 || totalBaseSet == totalPriceSet) {\n $priceProductSet[0].children[1].style.display = \"none\";\n $($priceProductSet[0].children[0]).removeClass('discount-price');\n $($priceProductSet[0].children[0]).addClass('price');\n } else {\n $($priceProductSet[0].children[0]).addClass('discount-price');\n $($priceProductSet[0].children[0]).removeClass('price');\n $priceProductSet[0].children[1].style.display = \"block\";\n }\n }\n\n if ($('.set-item').length == nbChecked && dataPriceAll == true) {\n $priceProductSet[0].children[0].innerText = $($priceProductSet[0]).data('priceset');\n $priceProductSet[0].children[1].innerText = $($priceProductSet[0]).data('priceall');\n $($priceProductSet[0].children[0]).addClass('discount-price');\n $($priceProductSet[0].children[0]).removeClass('price');\n $priceProductSet[0].children[1].style.display = \"block\";\n }\n \n if ($('.set-item').length == nbChecked) {\n $('.not-all-items-selected').addClass('d-none');\n $('.all-items-selected').removeClass('d-none');\n } else {\n $('.not-all-items-selected').removeClass('d-none');\n $('.all-items-selected').addClass('d-none');\n }\n });\n },\n\n availability: function () {\n $(document).on('change', '.quantity-select', function (e) {\n e.preventDefault();
15\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.modal-content').find('.product-quickview');\n }\n\n if ($('.bundle-items', $productContainer).length === 0) {\n attributeSelect($(e.currentTarget).find('option:selected').data('url'),\n $productContainer);\n }\n });\n },\n\n addToCart: function () {\n $(document).off('click', 'button.add-to-cart, button.add-to-cart-global').on('click', 'button.add-to-cart, button.add-to-cart-global', function () {\n var addToCartUrl;\n var pid;\n var pidsObj;\n var setPids;\n var pidVariant;\n var isOk = true;\n var setPidsVariant = [];\n var isProductSet = false;\n var $productErrors = [];\n\n pidVariant = $(this).closest('.product-detail').data('idvariationgroup');\n\n $('body').trigger('product:beforeAddToCart', this);\n\n if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\n setPids = [];\n isProductSet = true;\n $('.product-detail').each(function () {\n if (!$(this).hasClass('product-set-detail') && $(this).find(':checkbox').is(':checked')) {\n setPids.push({\n pid: $(this).data('pid').toString(),\n qty: $(this).find('.quantity-select').val(),\n options: getOptions($(this))\n });\n if ($(this).data('idvariationgroup') == $(this).data('pid')) {\n isOk = false;\n $productErrors.push($(this));\n }\n }\n });\n pidsObj = JSON.stringify(setPids);\n }\n\n pid = getPidValue($(this));\n\n var $productContainer = $(this).closest('.product-detail');
15\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n }\n\n addToCartUrl = getAddToCartUrl();\n\n var dataPageOrigin =$(this).parents('.js-data-page').data('page');\n\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: getChildProducts(),\n quantity: getQuantitySelected($(this)),\n addToCartOrigin: dataPageOrigin\n };\n \n if (!$('.bundle-item').length) {\n form.options = getOptions($productContainer);\n }\n\n if (!isProductSet) {\n if (pid == pidVariant) {\n isOk = false;\n $productErrors.push($(this).closest('.product-detail'));\n }\n } else {\n if (setPids.length == 0) {\n isOk = false;\n $productErrors.push($(this).closest('.product-detail'));\n }\n }\n \n $(this).trigger('updateAddToCartFormData', form);\n if (addToCartUrl && isOk) {\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: function (data) {\
15n addToCartSuccess.ajaxAddToCart(data,dataPageOrigin);\n updateFidelityPoints(data);\n $('.coupons-and-promos').empty().append(data.cart.totals.discountsHtmlDS);\n $('.basketvalueDiscounts').children().length !== 0 ?($('.coupons-and-promos').addClass('d-block'),$('.coupons-and-promos').removeClass('d-none')) : ($('.coupons-and-promos').addClass('d-none'), $('.coupons-and-promos').removeClass('d-block'));\n if(!($('.fitle-placeholder').is(':empty'))) {\n ftltag('event', 'cart', {\n product_id: data.product.variationGroupID,\n size: data.product.sizeDisplayValue\n });\n }\n },\n error: function () {\n if (isProductSet && $productErrors.length > 0) {\n $('html, body').scrollTop({ scrollTop: $productErrors[0].offset().top - 80 }, 'slow');\n }\n $.spinner().stop();\n }\n });\n } else {\n var msg;\n if (isProductSet && setPids.length == 0) {\n msg = $($('.error-select-none-msg')[0]).text();\n } else {\n msg = $($('.error-select-size-msg')[0]).text();\n }\n $('.availability-msg').text(\"\").removeClass(\"error-select-size\");\n $productErrors.forEach(function ($productError) {\n $productError.find('.availability-msg').text(msg).addClass(\"error-select-size\");\n })\n if ($productErrors.length > 0) {\n $('html, body').animate({ scrollTop: $($productErrors[0]).find('*[data-attr=\"size\"]').offset().top - 80 }, 'slow');\n }\n $.spinner().stop();\n }\n });\n\n $(document).off('click','button.js-add-to-cart-ads').on('click','button.js-add-to-cart-ads',function(){\n var addToCartUrl;\n var pid;\n var pidsObj;\n var pidVariant;\n var isOk = true;\n var isProductSet = false;\n var $productErrors = [];\n\n pidVariant = $(this).closest('.container-adproduct').data('idvariationgroup');\n\n $('body').trigger('product:beforeAddToCart', this);\n\n pid = getPidValue($(this));\n\n addToCartUrl = getAddToCartUrl();\n\n var dataPageOrigin =$(this).parents('.js-data-page').data('page');\n\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: getChildProducts(),\n quantity: 1,\n addToCartOrigin: dataPageOrigin\n };\n\n if (!isProductSet) {\n if (pid == pidVariant) {\n isOk = false;\n $productErrors.push($(this).closest('.container-adproduct'));\n\n }\n } \n \n $(this).trigger('updateAddToCartFormData', form);\n if (addToCartUrl && isOk) {\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: function (data) {\
15n addToCartSuccess.ajaxAddToCart(data,dataPageOrigin);\n },\n error: function () {\n $.spinner().stop();\n }\n });\n } else {\n var msg = $($('.error-select-size-msg')[0]).text();\n $('.availability-msg').text(\"\").removeClass(\"error-select-size\");\n $productErrors.forEach(function ($productError) {\n $productError.find('.availability-msg').text(msg).addClass(\"error-select-size\");\n })\n \n if ($productErrors.length > 0) {\n $('html, body').animate({ scrollTop: $($productErrors[0]).find('*[data-attr=\"size\"]').offset().top - 80 }, 'slow');\n }\n $.spinner().stop();\n }\n })\n },\n selectBonusProduct: function () {\n $(document).on('click', '.select-bonus-product', function () {\n var $choiceOfBonusProduct = $(this).parents('.choice-of-bonus-product');\n var pid = $(this).data('pid');\n var maxPids = $('.choose-bonus-product-dialog').data('total-qty');\n var submittedQty = parseInt($(this).parents('.choice-of-bonus-product').find('.bonus-quantity-select').val(), 10);\n var totalQty = 0;\n $.each($('#chooseBonusProductModal .selected-bonus-products .selected-pid'), function () {\n totalQty += $(this).data('qty');\n });\n totalQty += submittedQty;\n var optionID = $(this).parents('.choice-of-bonus-product').find('.product-option').data('option-id');\n var valueId = $(this).parents('.choice-of-bonus-product').find('.options-select option:selected').data('valueId');\n if (totalQty <= maxPids) {\n var selectedBonusProductHtml = '' +\n '<div class=\"selected-pid row\" ' +\n 'data-pid=\"' + pid + '\"' +\n 'data-qty=\"' + submittedQty + '\"' +\n 'data-optionID=\"' + (optionID || '') + '\"' +\n 'data-option-selected-value=\"' + (valueId || '') + '\"' +\n '>' +\n '<div class=\"col-sm-11 col-9 bonus-product-name\" >' +\n $choiceOfBonusProduct.find('.product-name').html() +\n '</div>' +\n '<div class=\"col-1\"><i class=\"fa fa-times\" aria-hidden=\"true\"></i></div>' +\n '</div>';\n $('#chooseBonusProductModal .selected-bonus-products').append(selectedBonusProductHtml);\n $('.pre-cart-products').html(totalQty);\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n } else {\n $('.selected-bonus-products .bonus-summary').addClass('alert-danger');\n }\n });\n },\n removeBonusProduct: function () {\n $(document).on('click', '.selected-pid', function () {\n $(this).remove();\n var $selected = $('#chooseBonusProductModal .selected-bonus-products .selected-pid');\n var count = 0;\n if ($selected.length) {\n $selected.each(function () {\n count += parseInt($(this).data('qty'), 10);\n });\n }\n\n $('.pre-cart-products').html(count);\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n });\n },\n enableBonusProductSelection: function () {\n $('body').on('bonusproduct:updateSelectButton', function (e, response) {\n $('button.select-bonus-product', response.$productContainer).attr('disabled',\n (!response.product.readyToOrder || !response.product.available));\n var pid = response.product.id;\n $('button.select-bonus-product').data('pid', pid);\n });\n },\n showMoreBonusProducts: function () {\n $(document).on('click', '.show-more-bonus-products', function () {\n var url = $(this).data('url');\n $('.modal-content').spinner().start();\n $.ajax({\n url: url,\n method: 'GET',\n success: function (html) {\n var parsedHtml = parseHtml(html);\n $('.modal-body').append(parsedHtml.body);\n $('.show-more-bonus-products:first').remove();\n $('.modal-content').spinner().stop();\n },\n error: function () {\n $('.modal-content').spinner().stop();\n }\n });\n });\n },\n\n addBonusProductsToCart: function () {\n $(document).on('click', '.add-bonus-products', function () {\n var $readyToOrderBonusProducts = $('.choose-bonus-product-dialog .selected-pid');\n var queryString = '?pids=';\n var url = $('.choose-bonus-product-dialog').data('addtocarturl');\n var pidsObject = {\n bonusProducts: []\n };\n\n $.each($readyToOrderBonusProducts, function () {\n var qtyOption =\n parseInt($(this)\n .data('qty'), 10);\n\n var option = null;\n if (qtyOption > 0) {\n if ($(this).data('optionid') && $(this).data('option-selected-value')) {\n option = {};\n option.optionId = $(this).data('optionid');\n option.productId = $(this).data('pid');\n option.selectedValueId = $(this).data('option-selected-value');\n }\n pidsObject.bonusProducts.push({\n pid: $(this).data('pid'),\n qty: qtyOption,\n options: [option]\n });\n pidsObject.totalQty = parseInt($('.pre-cart-products').html(), 10);\n }\n });\n queryString += JSON.stringify(pidsObject);\n queryString = queryString + '&uuid=' + $('.choose-bonus-product-dialog').data('uuid');\n queryString = queryString + '&pliuuid=' + $('.choose-bonus-product-dialog').data('pliuuid');\n $.spinner().start();\n $.ajax({\n url: url + queryString,\n method: 'POST',\n success: function (data) {\
15n $.spinner().stop();\n if (data.error) {\n $('.error-choice-of-bonus-products')\n .html(data.errorMessage);\n } else {\n $('.configure-bonus-product-attributes').html(data);\n $('.bonus-products-step2').removeClass('hidden-xxl-down');\n $('#chooseBonusProductModal').modal('hide');\n\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append(\n '<div class=\"add-to-cart-messages\"></div>'\n );\n }\n $('.minicart-quantity').html(data.totalQty);\n $('.minicart-layer-quantity').html(data.totalQty);\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'success', data.msgSuccess);\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n if ($('.cart-page').length) {\n location.reload();\n }\n }, 3000);\n }\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n },\n getPidValue: getPidValue,\n getQuantitySelected: getQuantitySelected,\n sizeGuideModal : sizeGuideModal,\n initFunction: $(function() {\n if($('.product-detail .before-loading').length && $('.active-loader').length){\n $('.product-detail .before-loading').removeClass('before-loading');\n $('.before-loading_icon').removeClass('before-loading_icon');\n $('.before-loading_fixHeight').removeClass('before-loading_fixHeight');\n } \n \n\n if($('.search-results .before-loading').length && $('.active-loader').length){\n $('.search-results .before-loading').removeClass('before-loading');\n $('.before-loading_icon').removeClass('before-loading_icon');\n $('.refinements-container').removeClass('d-none');\n }\n \n })\n};\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/base.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/clickproduct.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = {\n clickproduct: function (e) {\n $('body').on('click', '.product-tile .clickproduct', function (e) {\n //ExitRateBasket block link on cart\n if ($(this).closest('.exitRateBasket').length == 0 \n && !(e.target).classList.contains('ocs-icon') && !(e.target).closest('.carousel-indicators') == null) { /* means click is in a carousel control/indicator element*/\n var urlProduct = $(this).data('link');\n window.location.href = urlProduct;\n }\n });\n\n },\n clickProductMiddle: function () {\n $('body').on('mouseup', '.image-container .clickproduct', function (event) {\n if (!event.target.classList.contains('ocs-icon') && event.target.closest('.carousel-indicators') == null) { /* means click is in a carousel control/indicator element*/\n var urlProduct = $(this).data('link');\n //ExitRateBasket block link on cart\n if ($(this).closest('.exitRateBasket').length == 0) {\n \n if(event.button == 1) {\n window.open(\n urlProduct,\n '_blank'\n );\n \n } else if (event.button !== 2){ \n window.location.href = urlProduct;\n }\n }\n }\n \n });\n }\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/clickproduct.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/detail.js":function(module,exports,__webpack_require__){"use strict";eval("\nvar base = __webpack_require__(/*! ./base */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/base.js\");\nvar displayNotification = __webpack_require__(/*! ../ds/displayNotification */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js\")\nvar clientHelpers = __webpack_require__(/*! ../helpers */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/helpers.js\");\n\nvar reviews = __webpack_require__(/*! ../components/reviews */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/reviews.js\");\n\n//Stock mag PDP\n$(document).off('click', '.changeStore').on('click', '.changeStore', displayLayer);\n\nfunction displayLayer(e){\n var $productErrors = [];\n var pid = $(this).closest('.product-detail').data('pid');\n var pidVariant = $(this).closest('.product-detail').data('idvariationgroup');\n var msg = $($('.error-select-size-msg')[0]).text();\n var sticky = false\n \n if(e.currentTarget.classList.contains('isSizeSelected-false') && pid == pidVariant){\n $productErrors.push($(this).closest('.product-detail'));\n $('.availability-msg').text(\"\").removeClass(\"error-select-size\");\n $productErrors.forEach(function ($productError) {\n $productError.find('.availability-msg').text(msg).addClass(\"error-select-size\");\n })\n if ($productErrors.length > 0) {\n $('html, body').animate({ scrollTop: $($productErrors[0]).find('*[data-attr=\"size\"]').offset().top - 80 }, 'slow');\n }\n }else{\n document.querySelector('body').classList.add('no-scroll', 'overlay');\n const layer = $('.ocs-content-layer');\n //Si productDetail à une position sticky, stocker la valeur, la supprimer et la remettre au on close\n if($('.primary-details').attr('style')){\n sticky = $('.primary-details').attr('style');\n $('.primary-details').attr('style','position: initial;');\n }\n layer.show();\n layer.attr('aria-hidden', 'false');\n document.querySelector('body').style ='overflow: hidden';\n //Close layer si click sur la croix\n $(document).on('click','.close-layer', function(){\n $('.primary-details').attr('style', sticky);\n closeLayer();\n });\n //Close layer si click sur le bouton Annuler\n $(document).on('click', '.cancel', function(){\n $('.primary-details').attr('style', sticky);\n closeLayer();\n });\n //Close layer si click sur l'overlay\n $('body').on('click', function(e){\n if (e.target.classList.contains('overlay')) {\n $('.primary-details').attr('style', sticky);\n closeLayer();\n }\n });\n document.querySelector('#detect-location-store').click();\n document.querySelector('#ocsCheckout-content-store').focus();\n var gtmUrl = $('#sizeRecommander').data('gtm-url'); // ou un autre élément portant déjà cet attribut\n $.ajax({\n url: gtmUrl,\n data: { pid: pid },\n async: false,\n method: 'GET',\n success: function (data) {\
15n let GTMOpenLayer = __webpack_require__(/*! ./../gtm/util/actions/storePdp */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/storePdp.js\");\n GTMOpenLayer.getDataLayerForAction({\n product: data.product\n });\n }\n });\n\n }\n}\n\nfunction closeLayer(){\n const layer = $('.ocs-content-layer');\n document.querySelector('body').style ='overflow: auto';\n document.querySelector('body').classList.remove('no-scroll', 'overlay');\n layer.hide();\n layer.attr('aria-hidden', 'true');\n let GTMcloseLayer = __webpack_require__(/*! ./../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n GTMcloseLayer.getDataLayerForAction();\n}\n//Gestoin du toggle\n$(document).on('change', '.ocs-toggle', function(){\n const stores = document.querySelectorAll('.option-card-checkbox');\n if($(this).hasClass('checked')){\n stores.forEach(store => {\n if($('.store.' + store.value).find('.ocs-icon.radio-button-filled').hasClass('red')){\n $('.store.' + store.value).parents('.content-store').addClass('d-none');\n }\n });\n }else{\n $('.content-store').removeClass('d-none');\n }\n});\n//Gestion accessibilité, quand on tape du text dans l'input et que l'on souhaite aller vers le bas pour aller dans la prédiction\n$(document).on('keyup', '#woosmapstore', function(e){\n if(e.code === 'ArrowDown'){\n document.querySelector('.prediction-store').focus();\n }\n});\n$(document).on('keydown', '.prediction-store', function(e){\n e.preventDefault();\n if(e.key === 'ArrowDown' || e.code === 'Tab'){\n const next = e.currentTarget.nextElementSibling;\n if (next && next.classList.contains('prediction-store')) {\n next.focus();\n }\n }\n if (e.key === 'ArrowUp') {\n const prev = e.currentTarget.previousElementSibling;\n if (prev && prev.classList.contains('prediction-store')) {\n prev.focus();\n } else {\n $('#woosmapstore').focus();\n }\n }\n if(e.key === 'Enter'){\n e.currentTarget.click();\n }\n})\n//Gestion d'affichage des horraires dans la modale\n$(document).off('click', '.ocsCheckout-content-hours').on('click', '.ocsCheckout-content-hours', function(e){\n e.preventDefault();\n const hours = $(this).parent().find('.ocsCheckout-content-value');\n const ico = $(this).parent().find('.ocs-icon.chevron-down.add-large');\n if(hours.is(':visible')){\n hours.hide();\n ico.css('rotate','none');\n }else{\n hours.show();\n ico.css('rotate','180deg');\n }\n});\n//Choix magasin\n$(document).on('click', '.ocsCheckout-content-option-card button', function(e){\n e.preventDefault();\n if(e.target.classList.contains('ocsCheckout-trigger-hours')){\n return;\n }\n $('.ocsCheckout-option-card.active').find('.option-card-checkbox').removeAttr('checked');\n $('.ocsCheckout-option-card.active').removeClass('active');\n \n $(this).find('.ocsCheckout-option-card').addClass('active');\n $(this).find('.option-card-checkbox').attr('checked', 'checked');\n $('.ocs-button.large.has-content.fab.disabled').removeClass('disabled');\n});\n//submit\n$(document).off('submit', '#storeForm').on('submit', '#storeForm', function(e){\n e.preventDefault();\n const storeId = document.querySelector('.ocsCheckout-option-card.active').querySelector('#storeID').value;\n const isAvailable = document.querySelector('.ocsCheckout-option-card.active').querySelector('.radio-button-filled').classList.contains('green') ? true : false; \n const storeName = document.querySelector('.ocsCheckout-option-card.active').querySelector('#storeName').value;\n $.ajax({\n url: document.querySelector('#storeForm').getAttribute('action') + '?storeId=' + storeId + '&isAvailable=' + isAvailable + '&storeName=' + storeName,\n type: 'get',\n dataType: 'json',\n success: function (data) {\
15n if(data.success){\n $('#stock-in-store').html(data.renderTemplate);\n $('.displayIf-isSizeSelected-true').removeClass('d-none');\n $('.displayIf-isSizeSelected-false').addClass('d-none');\n $('#shippingCountrydefault').val(data.countryCode); \n if(data.selectedStoreAvailable){\n $('.displayIf-selectedStoreAvailable-true').removeClass('d-none');\n $('.displayIf-selectedStoreAvailable-false').addClass('d-none');\n }else{\n $('.displayIf-selectedStoreAvailable-false').removeClass('d-none');\n $('.displayIf-selectedStoreAvailable-true').addClass('d-none');\n }\n closeLayer();\n }else{\n closeLayer(); \n alertNotification.methods.displayAlert($('#disponibilityUnavailable')[0].textContent, 'danger');\n }\n },error: function (){\n closeLayer(); \n alertNotification.methods.displayAlert($('#disponibilityUnavailable')[0].textContent, 'danger');\n }\n });\n});\n\nfunction socialIcons() {\n $('.social-icons > button').on('click', function (e) {\n e.preventDefault();\n var encodedUrl = $(this).attr('data-href');\n window.open(clientHelpers.decode_base64(encodedUrl), '_blank');\n });\n}\n\nfunction paypalMessage(amount){\n if($('.pp-message').length){\n paypal.Messages({\n amount: amount,\n placement: 'product',\n style: {\n layout: 'text',\n logo: {\n type: 'inline',\n },\n text: {\n size: 14\n }\n },\n onClick: () => {\n let GTMPaiementNfois = $('.cart').length ? __webpack_require__(/*! ../gtm/util/layers/paiementNFoisCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisCart.js\") : __webpack_require__(/*! ../gtm/util/layers/paiementNFoisPDP */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisPDP.js\");\n GTMPaiementNfois.getDataLayerForLayer();\n },\n })\n .render('.pp-message');\n }\n}\n\nmodule.exports = {\n availability: base.availability,\n addToCart: base.addToCart,\n selectVariantIfOnlyOne: function () {\n $(document).ready(function(){\n base.methods.selectVariantIfOnlyOne();\n }); \n },\n \n productSetSelectProducts: base.productSetSelectProducts,\n socialIcons: socialIcons,\n anchorDescription: function () {\n $(document).on('click', '#anchor-description', function (e) {\n if (document.querySelector('.description-and-details') !== null) {\n const descrDetails = document.querySelectorAll('.description-and-details');\n let count = 0;\n Array.from(descrDetails).filter(function(tab) {\n if (window.getComputedStyle(tab).display !== 'none' && count == 0) {\n count +=1;\n let topX;\n window.innerWidth >
15 1279 ? document.querySelector('.navbar') !== null ? topX = document.querySelector('.navbar').clientHeight : topX = 100 : document.querySelector('.header.container') !== null ? topX = document.querySelector('.header.container').clientHeight : topX = 100;\n if (e.currentTarget.getAttribute('data-descid') !== null) {\n window.scrollBy({top: document.getElementById(e.currentTarget.getAttribute('data-descid')).getBoundingClientRect().top - topX, behavior: \"smooth\"});\n } else {\n window.scrollBy({top: tab.getBoundingClientRect().top - topX , behavior: \"smooth\"});\n }\n }\n })\n\n }\n })\n },\n\n sortBackground: function () {\n $(document).on('click', '.socialBtn', function (e) {\n $('.share-background').toggleClass('active');\n $('body').toggleClass('overflow-hidden');\n });\n },\n sortBackgroundClickOut: function () {\n $(document).click(function (e) {\n var container = $(\".socialBtn\");\n if (!container.is(e.target) &&\n container.has(e.target).length === 0) {\n $('.share-background').removeClass('active');\n $('body').removeClass('overflow-hidden');\n $('.socialBox').collapse('hide');\n }\n });\n },\n copylink: function () {\n $(document).on('click', '.socialBox .linkShare', function (e) {\n //var copyText = $('.socialBox .linkShare').data('link');\n var copyText = document.querySelector('#inputlinkshare');\n var messageSuccessShare = $(this).data('success');\n copyText.select();\n document.execCommand(\"copy\");\n displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'success', messageSuccessShare);\n });\n },\n\n selectAttributeIndicator: function () {\n $(document).on('click', '.image-indicator', function (e) {\n\n $('.image-indicator').removeClass('active');\n\n $(this).addClass('active');\n });\n },\n\n selectAttributeSliderIndicator: function () {\n $(document).on('click', '.carousel-indicators li', function (e) {\n\n $('.image-indicator').removeClass('active');\n $('a[data-bs-slide-to=\"' + $(this).attr('data-bs-slide-to') + '\"]').addClass('active');\n });\n },\n\n setCarouselMinHeight: function () {\n $(window).resize(function () {\n $('.carousel').css('minHeight', $('.carousel-item.active img').height());\n }).resize();\n },\n\n updateAttributesAndDetails: function () {\n $('body').on('product:statusUpdate', function (e, data) {\n var $productContainer = $('.product-detail[data-pid=\"' + data.id + '\"]');\n\n $productContainer.find('.description-and-detail .product-attributes')\n .empty()\n .html(data.attributesHtml);\n\n if (data.shortDescription) {\n $productContainer.find('.description-and-detail .description')\n .removeClass('hidden-xxl-down');\n $productContainer.find('.description-and-detail .description .content')\n .empty()\n .html(data.shortDescription);\n } else {\n $productContainer.find('.description-and-detail .description')\n .addClass('hidden-xxl-down');\n }\n\n if (data.longDescription) {\n $productContainer.find('.description-and-detail .details')\n .removeClass('hidden-xxl-down');\n $productContainer.find('.description-and-detail .details .content')\n .empty()\n .html(data.longDescription);\n } else {\n $productContainer.find('.description-and-detail .details')\n .addClass('hidden-xxl-down');\n }\n });\n },\n\n showSpinner: function () {\n $('body').on('product:beforeAddToCart', function () {\n $.spinner().start();\n });\n },\n updateAttribute: function () {\n $('body').on('product:afterAttributeSelect', function (e, response) {\n const description = document.querySelectorAll('.description-and-details');\n let activeDesc;\n description.forEach(function(desc) {\n window.getComputedStyle(desc).display !== 'none' ? activeDesc = desc : false;\n })\n if ($('.product-detail>.bundle-items').length) {\n response.container.data('pid', response.data.product.id);\n response.container.find('.product-id').text(response.data.product.id);\n response.container.find('.product-id').attr('data-productidforbv', response.data.productIdForBV);\n activeDesc !== undefined && activeDesc.classList.contains('slider') ? $(activeDesc).find('.product-description').html(response.data.product.longDescription) : $(activeDesc).find('.product-description .product-description').html(response.data.product.longDescription) ;\n activeDesc !== undefined && activeDesc.classList.contains('slider') ? $(activeDesc).find('.product-composition p').html(response.data.product.composition) : $(activeDesc).find('.product-composition .product-composition').html(response.data.product.composition);\n response.data.product.pdpInfoComplementaire ? response.container.find('.pdp-info-complementaire').html(response.data.product.pdpInfoComplementaire) : response.container.find('.pdp-info-complementaire').html('');\n if (response.container.find('.pdp-info-complementaire_2').length === 0) {\n response.container.find('.pdp-info-complementaire').after('<div class=\"pdp-info-complementaire_2\"></div>');\n }\n if (response.data.product.pdpInfoComplementaire2) {\n response.container.find('.pdp-info-complementaire_2').html(response.data.product.pdpInfoComplementaire2);\n } else {\n response.container.find('.pdp-info-complementaire_2').html('');\n }\n \n\n if(response.data.product.variationGroupID != undefined && response.data.product.variationGroupID.length > 0) {\n response.container.find('.js-agec-modal').attr('data-productid',response.data.product.variationGroupID);\n } else {\n response.container.find('.js-agec-modal').attr('data-productid',response.data.product.id);\n }\n if(response.data.product.agecUUID != undefined && response.data.product.agecUUID.length > 0) {\n response.container.find('.js-agec-modal').attr('data-productid',response.data.product.agecUUID);\n }\n } else if ($('.product-set-detail').eq(0).length > 0) {\n response.container.data('pid', response.data.product.id);\n response.container.find('.product-id').text(response.data.product.id);\n activeDesc !== undefined && activeDesc.classList.contains('slider') ? $(activeDesc).find('.product-description').html(response.data.product.longDescription) : $(activeDesc).find('.product-description .product-description').html(response.data.product.longDescription) ;\n activeDesc !== undefined && activeDesc.classList.contains('slider') ? $(activeDesc).find('.product-composition p').html(response.data.product.composition) : $(activeDesc).find('.product-composition .product-composition').html(response.data.product.composition);\n response.container.find('.product-id').attr('data-productidforbv', response.data.productIdForBV);\n response.data.product.pdpInfoComplementaire ? response.container.find('.pdp-info-complementaire').html(response.data.product.pdpInfoComplementaire) : response.container.find('.pdp-info-complementaire').html('');\n if (response.container.find('.pdp-info-complementaire_2').length === 0) {\n response.container.find('.pdp-info-complementaire').after('<div class=\"pdp-info-complementaire_2\"></div>');\n }\n if (response.data.product.pdpInfoComplementaire2) {\n response.container.find('.pdp-info-complementaire_2').html(response.data.product.pdpInfoComplementaire2);\n } else {\n response.container.find('.pdp-info-complementaire_2').html('');\n }\n \n if(response.data.product.variationGroupID != undefined && response.data.product.variationGroupID.length > 0) {\n response.container.find('.js-agec-modal').attr('data-productid',response.data.product.variationGroupID);\n } else {\n response.container.find('.js-agec-modal').attr('data-productid',response.data.product.id);\n }\n if(response.data.product.agecUUID != undefined && response.data.product.agecUUID.length > 0) {\n response.container.find('.js-agec-modal').attr('data-productid',response.data.product.agecUUID);\n }\n } else {\n $('.product-id').text(response.data.product.id);\n activeDesc !== undefined && activeDesc.classList.contains('slider') ? $(activeDesc).find('.product-description').html(response.data.product.longDescription) : $(activeDesc).find('.product-description .product-description').html(response.data.product.longDescription) ;\n activeDesc !== undefined && activeDesc.classList.contains('slider') ? $(activeDesc).find('.product-composition p').html(response.data.product.composition) : $(activeDesc).find('.product-composition .product-composition').html(response.data.product.composition);\n $('.product-detail:not(\".bundle-item\")').data('pid', response.data.product.id);\n $('.container-adproduct').data('pid', response.data.product.id);\n $('.product-id').attr('data-productidforbv', response.data.productIdForBV);\n response.data.product.pdpInfoComplementaire ? response.container.find('.pdp-info-complementaire').html(response.data.product.pdpInfoComplementaire) : response.container.find('.pdp-info-complementaire').html('');\n if (response.container.find('.pdp-info-complementaire_2').length === 0) {\n response.container.find('.pdp-info-complementaire').after('<div class=\"pdp-info-complementaire_2\"></div>');\n }\n if (response.data.product.pdpInfoComplementaire2) {\n response.container.find('.pdp-info-complementaire_2').html(response.data.product.pdpInfoComplementaire2);\n } else {\n response.container.find('.pdp-info-complementaire_2').html('');\n }\n \n \n if(response.data.product.variationGroupID != undefined && response.data.product.variationGroupID.length > 0) {\n $('.js-agec-modal').attr('data-productid',response.data.product.variationGroupID);\n } else {\n $('.js-agec-modal').attr('data-productid',response.data.product.id);\n }\n\n if(response.data.product.agecUUID != undefined && response.data.product.agecUUID.length > 0) {\n $('.js-agec-modal').attr('data-productid',response.data.product.agecUUID);\n }\n }\n });\n }
15,\n showOneStockIframe: function() {\n $(document).on('click', '.eresa', function () {\n if ($(this).hasClass('onestock')) {\n var url = $(this).data('onestock-action');\n var productID = $(this).data('onestock-product-id');\n var locale = $(this).data('onestock-locale');\n var rct = $(this).data('onestock-item-id');\n var quantity = $(this).data('onestock-quantity');\n\n var pidVariant;\n var pid;\n var $productErrors = [];\n var msg = $($('.error-select-size-msg')[0]).text();\n\n if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\n pid = $(this).closest('.modal-content').find('.product-quickview').data('pid');\n } else if ($('.product-set-detail').length || $('.product-set').length) {\n pid = $(this).closest('.product-detail').data('pid');\n } else if($('.container-adproduct').length){\n pid = $(this).closest('.container-adproduct').data('pid');\n }else {\n pid = $('.product-detail:not(\".bundle-item\")').data('pid');\n }\n \n pidVariant = $(this).closest('.product-detail').data('idvariationgroup');\n if(pid == pidVariant){\n $productErrors.push($(this).closest('.product-detail'));\n $('.availability-msg').text(\"\").removeClass(\"error-select-size\");\n $productErrors.forEach(function ($productError) {\n $productError.find('.availability-msg').text(msg).addClass(\"error-select-size\");\n })\n if ($productErrors.length > 0) {\n $('html, body').animate({ scrollTop: $($productErrors[0]).find('*[data-attr=\"size\"]').offset().top - 80 }, 'slow');\n }\n }
15else{\n $.ajax({\n url: url + '?rct=' + rct + '&quantity=' + quantity + '&locale=' + locale,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n $('.onestock-modal').show();\n $('.onestock-frame').html(data.url);\n if(data.qty > 0) {\n $('.qty-bullet').html(data.qty);\n $('.minicart-eresa').show().removeClass('d-none');\n $('.eresa-separator').show().removeClass('d-none');\n }\n }\n });\n }\n\n }\n });\n },\n hideOneStockIframe: function() {\n $('body').on('click', '.onestock-modal .icon-cross-black', function () {\n $('.onestock-modal').hide();\n });\n },\n updateAddToCart: function () {\n $('body').on('product:updateAddToCart', function (e, response) {\n $('.availability-msg').removeClass('error-select-size');\n // update local add to cart (for sets)\n // $('button.add-to-cart', response.$productContainer).attr('disabled',\n // (!response.product.readyToOrder || !response.product.available));\n\n // $('button.add-to-cart-global').attr('disabled', !enable);\n if (typeof $(document).find('#wishlist-icon') != 'undefined') {\n var $wishlistIcon = $(document).find('#wishlist-icon');\n $wishlistIcon.removeClass('full');\n $wishlistIcon.addClass('enable');\n $wishlistIcon.removeAttr('disabled');\n }\n });\n },\n updateAvailability: function () {\n $('body').on('product:updateAvailability', function (e, response) {\n $('div.availability', response.$productContainer)\n .data('ready-to-order', response.product.readyToOrder)\n .data('available', response.product.available);\n\n $('.availability-msg', response.$productContainer)\n .empty().html(response.message);\n\n if ($('.global-availability').length) {\n var allAvailable = $('.product-availability').toArray()\n .every(function (item) { return $(item).data('available'); });\n\n var allReady = $('.product-availability').toArray()\n .every(function (item) { return $(item).data('ready-to-order'); });\n\n $('.global-availability')\n .data('ready-to-order', allReady)\n .data('available', allAvailable);\n\n $('.global-availability .availability-msg').empty()\n .html(allReady ? response.message : response.resources.info_selectforstock);\n }\n });\n },\n sizeChart: function () {\n var $sizeChart = $('.size-chart-collapsible');\n $('.size-chart a').on('click', function (e) {\n e.preventDefault();\n var url = $(this).attr('href');\n if ($sizeChart.is(':empty')) {\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\
15n $sizeChart.append(data.content);\n }\n });\n }\n $sizeChart.toggleClass('active');\n });\n\n $('body').on('click touchstart', function (e) {\n if ($('.size-chart').has(e.target).length <= 0) {\n $sizeChart.removeClass('active');\n }\n });\n },\n\n sizeGuide: function () {\n $('.sizeGuide-text').click(function (e) {\n e.preventDefault();\n ('.menu-toggleable-right').append(\"<p>test</p>\");\n });\n },\n\n backNav: function () {\n $(document).on('click', '#btnbacknav, .continue-shopping-link-return', function (e) {\n e.preventDefault();\n \n let hostname = window.location.hostname;\n let referrer = document.referrer;\n\n if (referrer == \"\" || referrer.indexOf(hostname) == -1 || history.length <= 1) {\n let urlcategory = $('#btnbacknav').data('urlcategory');\n if (urlcategory == null || urlcategory == \"\") {\n let urlhome = $('#btnbacknav').data('home');\n location.href = urlhome;
15\n } else {\n location.href = urlcategory;\n }\n } else {\n history.back();\n }\n });\n },\n\n readMoreReadLess: function () {\n $('.product-description').each(function () {\n var $el = $(this);\n\n var $c = $el\n .clone()\n .css({'display': 'none','text-align': 'justify', 'font-size': '.875rem','padding-right' : '30px', 'padding-left' : '30px'})\n .appendTo('body');\n\n if( $c.height() == $el.height() ) {\n $el.siblings('.rmrl').css('display', 'none');\n }\n setTimeout(() => {\n $c.remove();\n }, 2500);\n\n if (this.nextElementSibling !== null) {\n this.nextElementSibling.addEventListener('click', function(e) {\n if($el.hasClass(\"webkit\")){\n $el.removeClass(\"webkit\");\n }else{\n $el.addClass(\"webkit\");\n }\n \n if (e.currentTarget.classList.contains(\"rmrl\")) {\n $(this).find('span').toggleClass('d-none');\n }\n })\n }\n })\n },\n agecLink: function(){\n $(document).on('click', '.description-and-details .js-agec-modal', function(e){\n e.stopPropagation();\n e.preventDefault();\n $('body').spinner().start();\n $('#agecModal').remove();\n var url = $(this).data('endpointagec') + $(this).attr('data-productid'); \n var htmlString = '<div class=\"modal fade right\" id=\"agecModal\" role=\"dialog\">'\n + '<div class=\"modal-dialog \">'\n + '\x3c!-- Modal content--\x3e'\n + '<div class=\"modal-content\">'\n + '<button type=\"button\" class=\"btn-close close\" data-bs-dismiss=\"modal\" aria-label='+$('.dataRessources').data('aria-close')+'></button>'\n + '<div class=\"modal-body\">'\n + '<iframe src=\"'+ url +'\" width=\"100%\" height=\"100%\"> </iframe>'\n + '</div>'\n + '</div>'\n + '</div>'\n + '</div>'\n + '</div>';\n $('body').append(htmlString);\n $('#agecModal').modal('show');\n $('body').spinner().stop();\n });\n },\n layerPaimentMethod: function(){\n if($('.pp-message').length){\n var amount = $('.pp-message').data('amount');\n paypalMessage(amount);\n }\n $('body').on('click','#modalAlmaPaypal .js-layer-paiement_btn',function(){\n var layerTitle = $(this).data('layer-title');\n var btnClick = $(this);\n $('#modalAlmaPaypal .js-layer-paiement_content').each(function(){\n var thisContent = $(this);\n if(!btnClick.hasClass('active-title') && thisContent.data('layer-content') === layerTitle){\n $('#modalAlmaPaypal .js-layer-paiement_content').removeClass('active-layer');\n $('#modalAlmaPaypal .js-layer-paiement_btn').removeClass('active-title');\n thisContent.addClass('active-layer');\n btnClick.addClass('active-title');\n }\n })\n });\n \n $('body').on('click','.display-alma',function () {\n $('.alma-payment-plans-container').trigger(\"click\");\n let GTMPaiementNfois = $('.cart').length ? __webpack_require__(/*! ../gtm/util/layers/paiementNFoisCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisCart.js\") : __webpack_require__(/*! ../gtm/util/layers/paiementNFoisPDP */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisPDP.js\");\n GTMPaiementNfois.getDataLayerForLayer();\n })\n $('body').on('click','.btn-more',function(){\n let GTMPaiementNfois
15= $('.cart').length ? __webpack_require__(/*! ../gtm/util/layers/paiementNFoisCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisCart.js\") : __webpack_require__(/*! ../gtm/util/layers/paiementNFoisPDP */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisPDP.js\");\n GTMPaiementNfois.getDataLayerForLayer();\n })\n },\n batchProductVisited: function(){\n if ($('#bazarvoice-product').length) {\n var jsonData = $('#bazarvoice-product').data('productinfo');\n var customerCode = $('#bazarvoice-product').data('customercode');\n if (typeof batchSDK !== 'undefined') {\n batchSDK(function (api) {\n api.trackEvent(\"visited_product\",{\n attributes: {\n \"product_rct\": jsonData.product.rct,\n \"product_subcategory\": jsonData.product.subCategory,\n \"user_id_uncrypted\": customerCode,\n \"product_rc\": jsonData.product.rc,\n \"product_category\": jsonData.product.category,\n \"product_discountati\": {\n type: api.eventAttributeTypes.FLOAT,\n value: jsonData.product.discountAti,\n },\n \"product_unitpriceati\": {\n type: api.eventAttributeTypes.FLOAT,\n value: jsonData.product.unitpriceAti,\n },\n \"product_r\": jsonData.product.r,\n \"product_quantity\":{\n type: api.eventAttributeTypes.INTEGER,\n value: \"1\",\n },\n \"product_gender\": jsonData.product.gender,\n \"product_url\": {\n type: api.eventAttributeTypes.URL,\n value: jsonData.page.name,\n },\n \"product_name\": jsonData.product.name,\n \"product_season\": jsonData.product.season,\n \"product_subsubcategory\": jsonData.product.subsubCategory,\n \"product_subsubsubcategory\": jsonData.product.subsubsubCategory,\n }\n });\n })\n }\n }\n },\n reviewsShowMoreLess: reviews.reviewsShowMoreLess,\n sizeGuideModal: base.sizeGuideModal,\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/detail.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = function (include) {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js?")},
vendor: 2,465 bytes, lines 15-18
15"./node_modules/webpack/buildin/global.js":function(module,exports){eval('var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function("return this")() || (1, eval)("this");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === "object") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it\'s\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n//# sourceURL=webpack:///(webpack)/buildin/global.js?')}}); 16var __fstrzSep=""; 17/*! https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790222548547%2Fjs%2Fcommon.js */ 18!function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}__webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function(){return module.default}:function(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s="./cartridges/app_coremodel_storefront/cartridge/client/default/js/common.js")}({
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/common.js":function(module,exports,__webpack_require__){eval('var processInclude = __webpack_require__(/*! ./util */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js");\n\n$(function() {\n processInclude(__webpack_require__(/*! ./components/clientSideValidation */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/clientSideValidation.js"));\n processInclude(__webpack_require__(/*! ./gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js"));\n});\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/common.js?')},
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/clientSideValidation.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n/**\n * Validate whole form. Requires `this` to be set to form object\n * @param {jQuery.event} event - Event to be canceled if form is invalid.\n * @returns {boolean} - Flag to indicate if form is valid\n */\nfunction validateForm(event) {\n var valid = true;\n if (this.checkValidity && !this.checkValidity()) {\n // safari\n valid = false;\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n $(this).find('input, select').each(function () {\n if (!this.validity.valid) {\n $(this).trigger('invalid', this.validity);\n }\n });\n radioButtonsGroupCheck();\n }\n return valid;\n}\n\n/**\n * Remove all validation. Should be called every time before revalidating form\n * @param {element} form - Form to be cleared\n * @returns {void}\n */\nfunction clearForm(form) {\n // KT => ocs-338 : create conflict with validation form\n //$(form).find('.form-control.is-invalid').removeClass('is-invalid');\n}\n\n/**\n * Radio button group validation\n */ \nfunction radioButtonsGroupCheck() {\n if ($('.form-check-radio.required').length !== 0) { /* form-check-radio is the container of the multiple inputs radio to check */\n let inputChecked = 0;\n const allInputs = $('.form-check-radio input[type=radio]');\n allInputs.each(function(index, input) {\n input.checked == true ? inputChecked++ : false ;\n if (allInputs.length == index + 1) { /* End of the loop */\n if (inputChecked == 0) { /* No one radio checked */\n allInputs.addClass('is-invalid');\n $(input).closest('.form-check-radio').find('.invalid-feedback').addClass('d-block');\n } else {\n allInputs.removeClass('is-invalid');\n $(input).closest('.form-check-radio').find('.invalid-feedback').removeClass('d-block');\n }\n }\n });\n }\n}\n\nmodule.exports = {\n invalid: function () {\n $('form input, form select,form textarea').on('invalid', function (e) {\n e.preventDefault();\n this.setCustomValidity('');\n if (!this.validity.valid) {\n var validationMessage = this.validationMessage;\n $(this).addClass('is-invalid');\n if (this.validity.badInput && $(this).data('bad-input')) {\n validationMessage = $(this).data('bad-input');\n } else if (this.validity.patternMismatch && $(this).data('pattern-mismatch')) {\n validationMessage = $(this).data('pattern-mismatch');\n } else if ((this.validity.rangeOverflow || this.validity.rangeUnderflow)\n && $(this).data('range-error')) {\n validationMessage = $(this).data('range-error');\n } else if ((this.validity.tooLong || this.validity.tooShort)\n && $(this).data('range-error')) {\n validationMessage = $(this).data('range-error');\n } else if (this.validity.valueMissing && this.form.getAttribute('data-missing-value')) {\n validationMessage = this.form.getAttribute('data-missing-value');\n } else if (this.validity.valueMissing && $(this).data('missing-error')) {\n validationMessage = $(this).data('missing-error');\n }\n $(this).parents('.form-group').find('.invalid-feedback').text(validationMessage);\n }\n });\n //celle du haut ne fonctionne pas dans tout les cas, celle ci non plus (les deux sont necessaire)\n \n $('body').on('invalid','form input, form select, form textarea', function (e) {\n e.preventDefault();\n this.setCustomValidity('');\n if (!this.validity.valid) {\n var val
18idationMessage = this.validationMessage;\n $(this).addClass('is-invalid');\n if (this.validity.badInput && $(this).data('bad-input')) {\n validationMessage = $(this).data('bad-input');\n } else if (this.validity.patternMismatch && $(this).data('pattern-mismatch')) {\n validationMessage = $(this).data('pattern-mismatch');\n $(this).addClass('is-invalid');\n } else if ((this.validity.rangeOverflow || this.validity.rangeUnderflow)\n && $(this).data('range-error')) {\n validationMessage = $(this).data('range-error');\n $(this).addClass('is-invalid');\n } else if ((this.validity.tooLong || this.validity.tooShort)\n && $(this).data('range-error')) {\n validationMessage = $(this).data('range-error');\n $(this).addClass('is-invalid');\n } else if (this.validity.valueMissing && this.form.getAttribute('data-missing-value')) {\n validationMessage = this.form.getAttribute('data-missing-value');\n } else if (this.validity.valueMissing && $(this).data('missing-error')) {\n validationMessage = $(this).data('missing-error');\n $(this).addClass('is-invalid');\n }\n $(this).parents('.form-group').find('.invalid-feedback').text(validationMessage);\n }\n });\n },\n\n submit: function () {\n $('body').on('submit', 'form', function (e) {\n if(!this.classList.contains('ocs-form')){\n return validateForm.call(this, e);\n }\n });\n },\n\n buttonClick: function () {\n $('body').on('click','form button[type=\"submit\"], form input[type=\"submit\"]', function () {\n // clear all errors when trying to submit the form\n if(!this.classList.contains('ocs-form')){\n clearForm($(this).parents('form'));\n radioButtonsGroupCheck();\n }\n });\n },\n\n functions: {\n validateForm: function (form, event) {\n if(!$(form).hasClass('ocs-form')){\n validateForm.call($(form), event || null);\n }\n },\n clearForm: clearForm,\n radioButtonsGroupCheck: radioButtonsGroupCheck\n }\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/clientSideValidation.js?")},
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js":function(module,exports,__webpack_require__){"use strict";eval("\n// set all GTM events here\nvar GTMHelper = __webpack_require__(/*! ./gtm/GTMHelper.js */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js\");\nvar processInclude = __webpack_require__(/*! ./util */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js\");\nprocessInclude(__webpack_require__(/*! ./gtm/pwa-analytics.js */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js\"));\n\nvar gtm = {};\nvar $cache = {};\n\nfunction initializeCache() {\n $cache.document = $(document);\n}\n\nfunction isDatalayerDefined() {\n return typeof dataLayer !== 'undefined';\n}\n\nfunction removeDataLayer (event, template) {\n if (!isDatalayerDefined()) {\n return;\n }\n if (event) {\n var index = null;\n for (var i = 0; i < dataLayer.length && index == null; i++) {\n if (template != null) {\n if (dataLayer[i].event === event && dataLayer[i].layer.template === template)\n index = i;\n } else {\n if (dataLayer[i].event === event)\n index = i;\n }\n }\n if (index != null)\n dataLayer.splice(index, 1);\n }\n}\n\nfunction findDataLayer (event, template) {\n if (!isDatalayerDefined()) {\n return;\n }\n if (event) {\n for (var i = 0; i < dataLayer.length; i++) {\n if (template != null) {\n if (dataLayer[i].event === event && dataLayer[i].layer.template === template)\n return (dataLayer[i]);\n } else {\n if (dataLayer[i].event === event)\n return (dataLayer[i]);\n }\n }\n }\n return null;\n}\n\nfunction fillDataLayer (data){\n\tif (!isDatalayerDefined()) {\n return;\n }\n\n if (data)\n dataLayer.push(data);\n // dataLayer.push({\n // \"event\": data.event,\n // \"page\": data.page,\n // \"eeAction\": data.eeAction,\n // \"currencyCode\": data.currency,\n // \"checkoutStep\": data.checkoutStep,\n // \"checkoutType\": data.checkoutType,\n // \"products\": data.products\n // });\n return;\n}\n\nfunction fillSecondaryDataLayer(data){\n\tif (!isDatalayerDefined()) {\n return;\n }\n\n\tdataLayer.push({\n\t\t\"event\": data.event2,\n\t\t\"checkoutStep\": data.prevcheckoutStep,\n\t\t\"checkoutOption\": data.checkoutOption\n\t});\n}\n\nfunction initializeEvents() {\n $cache.document.on('paymentStepGTM', function(event, data) {\n \tdata.event='virtualPageview';\n \tdata.page='/payment';\n\t\tdata.checkoutStep='3';\n\t\tdata.prevcheckoutStep='2';\n\n\t\tfillDataLayer(data);\n \tfillSecondaryDataLayer(data);\n\n return;\n });\n}\n\nfunction clicCrossSell_GTM($click) {\n var title = '';\n var $title = $click.closest('.product-carousel').siblings('.title');\n if ($title.length === 0)\n $title = $click.closest('#slot-pushproduct').find('.title-reco');\n if ($title.length === 0) {\n \n $title = $click.closest('.container-reco').find('.swipper-title');\n }\n if ($title.length != 0) {\n var calloutmsg = $title.data('calloutmsg');\n var recommender = $title.data('recommender');\n title = calloutmsg;\n if (recommender)\n title = title + '/' + recommender;\n }\n \n var url = $click.data('gtm-url');\n var pid = $click.data('pid');\n $.ajax({\n url: url,\n data: {\n pid: pid\n },\n async: false,\n method: 'GET',\n success: function (data) {\
18n let GTMclicCrossSell = __webpack_require__(/*! ./gtm/util/actions/clicCrossSell */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js\");\n GTMclicCrossSell.getDataLayerForAction({\n product: data.product,\n title: title\n });\n }\n });\n}\n\nmodule.exports = {\n fillDataLayer : fillDataLayer,\n removeDataLayer : removeDataLayer,\n findDataLayer: findDataLayer,\n init : function() {\n initializeCache();\n initializeEvents();\n $cache.document.trigger('GTMReady');\n\n $(document).on('click', '.slotReco .clickproduct', function(){\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.slotReco .product-tile .tile-body .pdp-link .link', function(){\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.slotReco .product-tile .tile-body .color-swatches', function(){\n clicCrossSell_GTM($(this));\n });\n $(document).on('click', '.container-reco .clickproduct', function(){\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.container-reco .product-tile .tile-body .pdp-link .link', function(){\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.container-reco .product-tile .tile-body .color-swatches', function(){\n clicCrossSell_GTM($(this));\n });\n \n // Reco dans le mini-panier\n $(document).on('click', '.js-minicart-body .clickproduct', function () {\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.js-minicart-body .product-tile .tile-body .pdp-link .link', function () {\n clicCrossSell_GTM($(this));\n });\n\n $(document).on('click', '.js-minicart-body .product-tile .tile-body .color-swatches', function () {\n clicCrossSell_GTM($(this));\n });\n }\n}\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js?")},
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js":function(module,exports){eval('getProductJsonBase = function (Product, price, quantity, addToCartOrigin) {\n if (Product.price) {\n var discount = Product.price.list ? Product.price.list.value : price\n discount = discount - price;\n if (discount != 0)\n discount = Math.round(discount * 100) / 100;\n }\n var rc = null;\n var rct = null;\n var rct_sku = \'\';\n if (Product.productType == \'variationGroup\') {\n rc = Product.id.toLowerCase();\n rct_sku = \'\';\n //not for layer\n } else if (Product.productType == \'variant\') {\n rct = Product.id.toLowerCase();\n rct_sku = Product.rctSku ? Product.rctSku : \'\';\n if (Product.variationGroupID) {\n rc = Product.variationGroupID;\n }\n }\n \n let r = Product.masterID || Product.id;\n let name = Product.productName ? Product.productName.toLowerCase() : "";\n let category = Product.primaryCategory && Product.primaryCategory.category ? Product.primaryCategory.category.toLowerCase() : null;\n let subCategory = Product.primaryCategory && Product.primaryCategory.subCategory ? Product.primaryCategory.subCategory.toLowerCase() : null;\n let subsubCategory = Product.primaryCategory && Product.primaryCategory.subSubCategory ? Product.primaryCategory.subSubCategory.toLowerCase() : null;\n let subsubsubCategory = Product.primaryCategory && Product.primaryCategory.subSubSubCategory ? Product.primaryCategory.subSubSubCategory.toLowerCase() : null;\n let categoryName = Product.primaryCategory && Product.primaryCategory.categoryname ? Product.primaryCategory.categoryname.toLowerCase() : null;\n let subCategoryName = Product.primaryCategory && Product.primaryCategory.subCategoryname ? Product.primaryCategory.subCategoryname.toLowerCase() : null;\n let subsubCategoryName = Product.primaryCategory && Product.primaryCategory.subSubCategoryname ? Product.primaryCategory.subSubCategoryname.toLowerCase() : null;\n let subsubsubCategoryName = Product.primaryCategory && Product.primaryCategory.subSubSubCategoryname ? Product.primaryCategory.subSubSubCategoryname.toLowerCase() : null;\n let gender = Product.sexe ? Product.sexe.toLowerCase() : "";\n let season = Product.season ? Product.season.toLowerCase() : "";\n let price_flag = Product.flagsPromo && Product.flagsPromo.flagPromoName ? Product.flagsPromo.flagPromoName.toLowerCase() : "";\n let product_flag = [];\n let productset_id;\n let productset_products_number;\n\n \n if (Product.flagsPromo && Product.flagsPromo.tabOfFlags && Product.flagsPromo.tabOfFlags.length > 0) {\n for (var i = 0; i < Product.flagsPromo.tabOfFlags.length; i++) {\n product_flag.push(Product.flagsPromo.tabOfFlags[i].name.toLowerCase());\n }\n }\n\n var flagNewName;\n if (Product.flagsPromo && Product.flagsPromo.flagNewName) {\n flagNewName = Product.flagsPromo.flagNewName;\n }\n\n let brand = Product.brand ? Product.brand.toLowerCase() : "";\n let rating = Product.rating;\n\n let price_calcul = price;\n if (Product.productType !== \'set\') {\n if (Product.price.type != undefined && Product.price.type == "range") {\n price_calcul = Product.price.max.sales.values;\n } else {\n price_calcul = Product.price.sales.value;\n }\n }\n\n let unitpriceAti = price_calcul;\n let brandName = Product.brandName ? Product.brandName.toLowerCase() : "";\n let brandTitle = Product.brandTitle ? Product.brandTitle.toLowerCase() : "";\n\n let productJson = {\n "r": r,\n "rc": rc,\n "rct": rct,\n "rct_sku": rct_sku,\n "name": name,\n "category": category,\n "subCategory": subCategory,\n "subsubCategory": subsubCategory,\n "subsubsubCategory": subsubsubCategory,\n "category_label": categoryName,\n "subCategory_label": subCategoryName,\n "subsubCategory_label": subsubCategoryName,\n "subsubsubCategory_label": subsubsubCategoryName,\n "gender": gender,\n "season": season,\n "price_flag": price_flag,\n "product_flag": product_flag,\n "new_flag": flagNewName,\n "brand": brand,\n "brandName": brandName,\n "brandTitle": brandTitle,\n "rating": rating,\n "unitpriceAti": unitpriceAti,\n "discountAti": discount,\n "hasVideo": !!(Product.brightcoveVideos),\n "imageNumber": Product.images && Product.images.large ? Product.images.large.length : 0\n };\n\n if (Product.productType == \'set\') {\n productJson.productset_id = Product.id;\n productJson.productset_products_number = Product.individualProducts.length;\n }\n\n if (quantity) {\n productJson.quantity = quantity;\n }\n \n if(addToCartOrigin){\n productJson.addToCartOrigin = addToCartOrigin;\n }\n\n return productJson;\n},\n\n module.exports = {\n populateProduct: function (productLineItems, addQuantity, addToCartOrigin) {\n // Prepare default value\n addQuantity = addQuantity || false;\n for (let i in productLineItems) {\n let item = productLineItems[i].product;\n //let price = item.basePrice ? item.basePrice.getValue() : item.price.sales.decimalPrice.value;\n let price = null;\n\n if (item.price != null) {\n if (item.price.sales != null) {\n if (item.price.sales.type == "range") {\n price = item.price.max.sales.values;\n } else {\n price = item.price.sales.value;\n }\n }\n }\n\n let quantity = null;\n if (addQuantity) {\n quantity = item.quantity || parseInt(addQuantity);\n }\n return (getProductJsonBase(item, price, quantity, addToCartOrigin));\n }\n },\n }\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js?')},
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = {\n pwaInstalled: function() {\n window.addEventListener('appinstalled', function(evt) {\n let GTMPWAInstalled = __webpack_require__(/*! ./util/actions/pwaInstalled */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js\");\n GTMPWAInstalled.getDataLayerForAction();\n });\n },\n usePWA: function() {\n window.addEventListener('load', function () {\n\n let displayMode = 'browser tab';\n\n // Pour Safari sur IOs qui ne dispose pas de matchMedia\n if (navigator.standalone) {\n displayMode = 'standalone-ios';\n }\n \n if (window.matchMedia('(display-mode: standalone)').matches) {\n displayMode = 'standalone';\n }\n\n var hasPWA = displayMode.indexOf('standalone') != -1 ? 'yes' : 'no';\n let GTMhasPWA = __webpack_require__(/*! ./util/pages/pwa */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js\");\n GTMhasPWA.getDataLayerForPage({\n hasPWA : hasPWA\n });\n \n });\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js?")},
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\nvar GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\n\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "clic cross-sell",\n };\n\n params = params || {};\n\n data.e = [];\n\n var product = [];\n if (params.product){\n product = (GTMHelper.populateProduct([{product : params.product}], false));\n }\n data.e={\n category: \'cross-sell\',\n action: params.title.trim(),\n product: product\n };\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js?')},
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n populateData : function (params) {\n var data = {\n "event": "pwa installed",\n };\n\n return data;\n },\n getDataLayerForAction : function(params) {\n var data = this.populateData(params);\n gtm.fillDataLayer(data);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js?')},
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js":function(module,exports,__webpack_require__){eval("var GTMHelper = __webpack_require__(/*! ../../GTMHelper */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js\");\nvar gtm = __webpack_require__(/*! ../../../gtm */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js\");\n\npopulateData = function (dataLayer, params) {\n if (dataLayer.env)\n dataLayer.env.hasPWA = params.hasPWA;\n}\n\nmodule.exports = {\n removeDataLayer : function()\n {\n gtm.removeDataLayer('pageview');\n },\n findDataLayer : function()\n {\n return gtm.findDataLayer('pageview');\n },\n getDataLayerForPage : function(params) {\n var dataLayer = this.findDataLayer();\n if (dataLayer)\n populateData(dataLayer, params);\n }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js?")},
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = function (include) {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js?")
vendor: 4 bytes, line 18
18}});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.