{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../codebase/storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js","webpack:///../codebase/storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/util.js","webpack:///../codebase/tecnifibre/cartridges/app_storefront_tcf/cartridge/client/default/js/product/base.js","webpack:///../codebase/tecnifibre/cartridges/app_storefront_tcf/cartridge/client/default/js/product/detail.js","webpack:///../codebase/tecnifibre/cartridges/app_storefront_tcf/cartridge/client/default/js/product/informationsProduct.js","webpack:///../codebase/tecnifibre/cartridges/app_storefront_tcf/cartridge/client/default/js/product/product.js","webpack:///../codebase/tecnifibre/cartridges/app_storefront_tcf/cartridge/client/default/js/productDetail.js"],"names":[],"mappings":";QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;AClFa;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClCa;;AAEb;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;;;;;;;;;;;ACZa;AACb,kBAAkB,mBAAO,CAAC,2JAAuB;AACjD;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,qBAAqB;AACnC;;AAEA;AACA;AACA;AACA,WAAW,wBAAwB;AACnC,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB;AACA;AACA;AACA,oC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,8DAA8D,WAAW;AACzE;AACA;AACA,8DAA8D,WAAW;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,qEAAqE,WAAW;AAChF;AACA;AACA,qEAAqE,WAAW;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,W;AACA;;AAEA;;AAEA;AACA,uBAAuB,iBAAiB;AACxC;AACA,oCAAoC,WAAW,mBAAmB,EAAE;AACpE,gCAAgC,YAAY,mCAAmC,YAAY,gBAAgB,4BAA4B;AACvI;AACA;;AAEA;AACA;AACA,gCAAgC,YAAY,qEAAqE;AACjH;AACA;AACA;AACA;AACA,gCAAgC,YAAY,qEAAqE;AACjH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;AACP,K;AACA;;;;;AAKA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,0BAA0B;AACvJ;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,OAAO;AAClB;AACA;AACA,sE;AACA,mD;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,2CAA2C;AAC9D;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,GAAG,0DAA0D,qBAAqB,cAAc,iBAAiB,uBAAuB,oBAAoB,4BAA4B;AAC7M,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,qCAAqC,0DAA0D;AAC/F,6DAA6D,oBAAoB,uBAAuB,WAAW,cAAc;AACjI,0BAA0B;AAC1B;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;AAEA;AACA,mBAAmB,2CAA2C;AAC9D;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,sFAAsF,aAAa,GAAG,gBAAgB;AACtH,mDAAmD,6BAA6B;AAChF,qDAAqD,6BAA6B;AAClF,oDAAoD,uEAAuE,qBAAqB,4BAA4B;AAC5K,+DAA+D,uBAAuB;AACtF,0FAA0F,aAAa,GAAG,gBAAgB,gBAAgB,+BAA+B;AACzK,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL,G;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,uBAAuB,eAAe;AACtC;AACA,oEAAoE,cAAc;;AAElF,yCAAyC,EAAE,IAAI,QAAQ,GAAG,WAAW,GAAG,EAAE;AAC1E;AACA;;AAEA;AACA;AACA,0CAA0C,YAAY;AACtD;;AAEA;AACA;AACA,0CAA0C,WAAW;AACrD;;AAEA;AACA,UAAU;AACV;AACA,cAAc,uHAAuH;AACrI,+BAA+B,gBAAgB;AAC/C,kCAAkC,OAAO,GAAG,gBAAgB;AAC5D,cAAc;AACd,+BAA+B,gBAAgB;AAC/C,4BAA4B,OAAO;AACnC;AACA,cAAc;AACd;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA,wC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS,E;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,sDAAsD;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wBAAwB;AACnE,6CAA6C,iCAAiC;AAC9E,8CAA8C,uCAAuC;AACrF,iDAAiD,0CAA0C;AAC3F,8CAA8C,2BAA2B;AACzE,gDAAgD,yCAAyC;AACzF,gCAAgC;AAChC;AACA;AACA,oBAAoB;AACpB;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA,YAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;;AAEA,YAAY;AACZ;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4D;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,kBAAkB;AAC5D;AACA;AACA;AACA;AACA,oC;AACA,4C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,yBAAyB;;AAEzB;;AAEA,qBAAqB;AACrB;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;;;;;;;;;;;;;ACl0Ca;AACb,WAAW,mBAAO,CAAC,gHAAQ;AAC3B,qBAAqB,mBAAO,CAAC,mIAAW;AACxC,eAAe,mBAAO,CAAC,8IAAuB;;;;AAI9C;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,0C;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA,wC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA,SAAS,E;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,4CAA4C,kCAAkC,EAAE;;AAEhF;AACA,4CAA4C,uCAAuC,EAAE;;AAErF;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA,a;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,S;;AAEA;AACA;AACA;AACA,8C;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA,CAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sEAAsE,UAAU;AAChF,4BAA4B,SAAS;AACrC;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,sEAAsE,UAAU;AAChF,4BAA4B,SAAS;AACrC;AACA;AACA;AACA,SAAS;AACT;AACA,CAAC;;AAED;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,C;;;;;;;;;;;;ACjnBa;;;AAGb;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;;;AAGD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,0DAA0D,QAAQ;;AAElE;;AAEA,oEAAoE,WAAW,oEAAoE,UAAU,iBAAiB,iBAAiB,WAAW,oBAAoB;;AAE9N;AACA,KAAK;AACL,CAAC;;AAED;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,0DAA0D,QAAQ;;AAElE;;AAEA,oEAAoE,WAAW,oEAAoE,UAAU,iBAAiB,iBAAiB,WAAW,oBAAoB;;AAE9N;AACA,KAAK;AACL,CAAC;;;;;;;;;;;;;AC3IY;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,yDAAyD;;AAEzD;AACA;AACA,6BAA6B;;AAE7B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA,SAAS;AACT,wDAAwD;AACxD;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;ACxIa;;AAEb,qBAAqB,mBAAO,CAAC,mIAAW;;AAExC;AACA;AACA,uBAAuB,mBAAO,CAAC,4HAAkB;AACjD,uBAAuB,mBAAO,CAAC,8HAAmB;AAClD,KAAK;AACL,CAAC","file":"default/js/productDetail.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"../codebase/tecnifibre/cartridges/app_storefront_tcf/cartridge/client/default/js/productDetail.js\");\n","'use strict';\n\nmodule.exports = {\n setTabNextFocus: function (focusParams) {\n var KEYCODE_TAB = 9;\n var isTabPressed = (focusParams.event.key === 'Tab' || focusParams.event.keyCode === KEYCODE_TAB);\n\n if (!isTabPressed) {\n return;\n }\n\n var firstFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.firstElementSelector);\n var lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector);\n\n if ($(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).is(':disabled')) {\n lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.nextToLastElementSelector);\n if ($('.product-quickview.product-set').length > 0) {\n var linkElements = $(focusParams.containerSelector + ' a#fa-link.share-icons');\n lastFocusableEl = linkElements[linkElements.length - 1];\n }\n }\n\n if (focusParams.event.shiftKey) /* shift + tab */ {\n if ($(':focus').is(firstFocusableEl)) {\n lastFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n } else /* tab */ {\n if ($(':focus').is(lastFocusableEl)) { // eslint-disable-line\n firstFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n }\n }\n};\n","'use strict';\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","'use strict';\nvar focusHelper = require('base/components/focus');\nwindow.cart = {};\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').find('.product-id').text();\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 // console.log(\"Get Quantity Selected on element \" + $el);\n var quantitySelected;\n var _quantitySelector = '.quantity-select';\n if ($el && $('.set-items').length) {\n quantitySelected = $($el).closest('.product-detail').find('.quantity-select');\n } else if ($el && $('.product-bundle').length) {\n if ($('.js-b2b-quantity-select').length > 0) {\n _quantitySelector = '.js-b2b-quantity-select';\n }\n var quantitySelectedModal = $($el).closest('.modal-footer').find(_quantitySelector);\n var quantitySelectedPDP = $($el).closest('.bundle-footer').find(_quantitySelector);\n if (quantitySelectedModal.val() === undefined) {\n quantitySelected = quantitySelectedPDP;\n } else {\n quantitySelected = quantitySelectedModal;\n }\n } else {\n if ($('.js-b2b-quantity-select').length > 0) {\n _quantitySelector = '.js-b2b-quantity-select';\n }\n quantitySelected = $(_quantitySelector);\n }\n return quantitySelected;\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 var _quantitiesSelected = getQuantitySelector($el);\n var _variantQuantities;\n var _productVariants = $el.data('variants');\n if (window.customer.isB2B === true && _productVariants) {\n _variantQuantities = [];\n _quantitiesSelected.each(function(idx, _select) {\n var _attrValue = $(_select).attr('data-attr-value');\n var _attrID = $(_select).attr('data-attr-id');\n var productOption = $(_select).find('option:eq(0)');\n if (productOption.length > 0){\n var productOptionUrl = $(_select).find('option:eq(0)').attr('data-url');\n if (productOptionUrl){\n var productID = productOptionUrl.substring(\n productOptionUrl.indexOf(\"pid=\") + 4, \n productOptionUrl.lastIndexOf(\"&quantity\")\n );\n if (productID) {\n var _value = productID + '|' + _attrID + '|' + _attrValue + '|' + $(_select).val();\n _variantQuantities.push(_value);\n }\n }\n }\n });\n } else {\n _variantQuantities = _quantitiesSelected.val();\n }\n\n return _variantQuantities;\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, $productContainer, 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.selected) {\n $attrValue.addClass('selected');\n $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\n } else {\n $attrValue.removeClass('selected');\n $attrValue.siblings('.selected-assistive-text').empty();\n }\n\n if (attrValue.url) {\n $swatchButton.attr('data-url', attrValue.url);\n } else {\n $swatchButton.removeAttr('data-url');\n }\n\n // Disable if not selectable\n $attrValue.removeClass('selectable unselectable');\n\n $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\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 .removeAttr('disabled');\n\n if (!attrValue.selectable) {\n $attrValue.attr('disabled', true);\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} 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 attrs.forEach(function (attr) {\n if (attrsWithSwatches.indexOf(attr.id) > -1) {\n processSwatchValues(attr, $productContainer, msgs);\n } else {\n processNonSwatchValues(attr, $productContainer);\n }\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 = '
  • ' + response.resources.info_selectforstock + '
  • ';\n } else {\n availabilityMessages.forEach(function (message) {\n availabilityValue += '
  • ' + message + '
  • ';\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\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 += '
    ' + attribute.label + ': '\n + attribute.value + '
    ';\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} optionsHtml - Ajax response optionsHtml from selecting a product option\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction updateOptions(optionsHtml, $productContainer) {\n\t// Update options\n $productContainer.find('.product-options').empty().html(optionsHtml);\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, $productContainer) {\n var carousel = $productContainer.find('.carousel');\n $(carousel).carousel('dispose'); \n var carouselId = $(carousel).attr('id');\n\n if ($(window).width() > 840) {\n $(carousel).empty().append(`\n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n
    \n
    \n
      \n
      \n `);\n } else {\n $(carousel).empty().append(`\n
      \n
      \n
        \n
        \n \n \n \n \n \n \n \n \n \n
        \n
        \n `); \n }\n\n var li = \"\", itemZoom = \"\",itemZoomLarge = \"\";\n\n if (imgs.length > 0) {\n for (var i = 0; i < imgs.length; i++) {\n li += `\n
      1. \n \"${imgs[i].alt}\n
      2. \n `;\n\n itemZoom += `\n
        \n \n
        \n `;\n itemZoomLarge += `\n
        \n \n
        \n `;\n }\n }\n\n $(carousel).find('.carousel-indicators').append(li);\n $(carousel).find('.carousel-inner').append(itemZoom);\n $('.js-carousel-inner').empty().append(itemZoomLarge);\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-\"]').remove();\n }\n\n $(carousel).carousel();\n $(carousel).find('.carousel-indicators').attr('aria-hidden', true);\n\n if ($(window).width() > 992) {\n $('.zoom').zoom();\n }\n\n if ($(window).width() > 992) {\n function toggleCarouselArrows() {\n var $carousel = $(\".product-view-carousel\");\n var itemCarousel = $carousel.find(\".carousel-item\");\n var $indicators = $carousel.find(\".carousel-indicators li\");\n var $prevArrow = $carousel.find(\".carousel-control-prev\");\n var $nextArrow = $carousel.find(\".carousel-control-next\");\n\n if (itemCarousel.length == 1) {\n $prevArrow.removeClass(\"d-flex\").addClass(\"arrow-disabled\");\n $nextArrow.removeClass(\"d-flex\").addClass(\"arrow-disabled\");\n } else {\n $prevArrow.removeClass(\"arrow-disabled\").addClass(\"d-flex\");\n $nextArrow.removeClass(\"arrow-disabled\").addClass(\"d-flex\");\n\n if ($indicators.first().hasClass(\"active\")) {\n $prevArrow.removeClass(\"d-flex\").addClass(\"arrow-disabled\");\n } else {\n $prevArrow.removeClass(\"arrow-disabled\").addClass(\"d-flex\");\n }\n\n if ($indicators.last().hasClass(\"active\")) {\n $nextArrow.removeClass(\"d-flex\").addClass(\"arrow-disabled\");\n } else {\n $nextArrow.removeClass(\"arrow-disabled\").addClass(\"d-flex\");\n }\n }\n }\n\n toggleCarouselArrows();\n $(\".carousel-product-arrows-zoom a\").on(\"click\", function () {\n setTimeout(toggleCarouselArrows, 500);\n });\n\n $(\".carousel-indicators li\").on(\"click\", function () {\n setTimeout(toggleCarouselArrows, 500);\n });\n } \n}\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} $productContainer - DOM element for a given product.\n */\nfunction handleVariantResponse(response, $productContainer) {\n // console.log(\"product container :: \" + $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 createCarousel(primaryImageUrls, $productContainer);\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 if (response.product.discount>0) {\n $('.prices.tec-bar-price .price-with-discount').append(`-${response.product.discount}%`);\n }\n\n // Update promotions\n $productContainer.find('.promotions').empty().html(response.product.promotionsHtml);\n\n updateAvailability(response, $productContainer);\n\n if (isChoiceOfBonusProducts) {\n var $selectButton = $productContainer.find('.select-bonus-product');\n $selectButton.trigger('bonusproduct:updateSelectButton', {\n product: response.product, $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, $productContainer: $productContainer\n }).trigger('product:statusUpdate', response.product);\n }\n\n // Update attributes\n $productContainer.find('.main-attributes').empty()\n .html(getAttributesHtml(response.product.attributes));\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, attrObject) {\n if ($productContainer.parent('.bonus-product-item').length <= 0) { \n if ($('.size-field.selected').length > 0) { \n var optionsHtml = quantities.map(function (quantity) {\n var selected = quantity.selected ? ' selected ' : '';\n return '';\n }).join('');\n if (window.customer.isB2B === false) {\n // console.log(\"Pass trough B2C quantity update\");\n getQuantitySelector($productContainer).empty().html(optionsHtml);\n } else {\n // console.log(\"Pass trough B2B quantity update\");\n var selectSelector = \"select_quantity_\" + attrObject.id + \"_\" + attrObject.value;\n \n var quantityContainer = $('#' + selectSelector).parent('div');\n $('#' + selectSelector).empty().html(optionsHtml);\n\n }\n }\n }\n}\n\nfunction renderSizesView(sizeValues) {\n for (let i = 0; i < sizeValues.variationAttributes.length; i++) {\n const Attribute = sizeValues.variationAttributes[i];\n \n if (Attribute.attributeId === \"TEC_size\") {\n $(\".select-all-size\").empty();\n let htmlButton = \"\";\n let htmlOption = \"\";\n\n $.each(Attribute.values, function (index, attrValue) {\n htmlButton += `\n
        \n \n ${attrValue.displayValue}\n \n
        \n `;\n htmlOption += `\n \n `;\n });\n \n $(\".select-all-size\").html(htmlButton);\n $(\"select.select-size\").html(htmlOption);\n break;\n }\n }\n var errorMessage = $('.size-error-message');\n errorMessage.css('display', 'none');\n } \n\n function renderQuantity(sizeValues) {\n for (let i = 0; i < sizeValues.variationAttributes.length; i++) {\n const Attribute = sizeValues.variationAttributes[i];\n \n if (Attribute.attributeId === \"TEC_size\") {\n $(\".selectAllSizeB2B\").empty();\n let B2bHtmlButton = \"\";\n\n $.each(Attribute.values, function (index, attrValue) {\n B2bHtmlButton += `\n
        \n
        \n
        \n ${attrValue.displayValue}
        \n \n ${attrValue.quantitInStock.msg}\n \n
        \n
        \n
        \n
        \n ${generateStockOptions(attrValue.quantitInStock.stock,attrValue)}\n
        \n
        \n
        \n `;\n });\n $(\".selectAllSizeB2B\").html(B2bHtmlButton);\n }\n }\n var errorMessage = $('.size-error-message');\n errorMessage.css('display', 'none');\n\n $('.size-selector-container').each(function () {\n const $select = $(this).find('select');\n $select.on('focusin', function(e) {\n e.preventDefault();\n $(this).addClass('focused');\n })\n .on('focusout', function(e) {\n e.preventDefault();\n $(this).removeClass('focused');\n });\n\n $(this).find('.plus-btn').on('click', function () {\n if ($select.prop('selectedIndex') < $select.find('option').length - 1) {\n $select.prop('selectedIndex', $select.prop('selectedIndex') + 1).trigger('change');\n }\n });\n\n $(this).find('.minus-btn').on('click', function () {\n if ($select.prop('selectedIndex') > 0) {\n $select.prop('selectedIndex', $select.prop('selectedIndex') - 1).trigger('change');\n }\n });\n });\n } \n\n function generateStockOptions(stock, attrValue, productType) {\n let options = '';\n var attrId = $('.tec-qunt-b2b').data('attr-id');\n if (!attrValue.selectable || !attrValue.listequanti || attrValue.listequanti.length === 0) {\n options += ``;\n } else {\n const maxStock = Math.min(stock, 50);\n\n for (let i = 0; i <= maxStock; i++) {\n const isSelected = attrValue.listequanti.includes(i) && attrValue.selectedQuantity === i ? 'selected' : '';\n const urlData = productType !== 'bundle' ? `data-url=\"${attrValue.url}\"` : '';\n\n options += ``;\n }\n }\n \n const minusButton = $('.info-product').length > 0 ? `\n ` : '';\n\n const plusButton = $('.info-product').length > 0 ? `\n ` : '';\n\n return `\n ${minusButton}\n \n ${plusButton}\n `;\n}\n\nfunction quickViewRender() {\n if (window.customer.isB2B) {\n var quantitySelector = $('.b2b-customer:not(.b2c-customer) .quantity-select');\n if ($(\".js-b2b-quantity-select:not(.disabled-select)\").length > 0 && $('.js-b2b-quantity-select').val() == \"0\") {\n $('.add-to-cart-global .label-select-size').removeClass('d-none').addClass('d-block');\n $('.add-to-cart-global .label-add-to-cart').removeClass('d-block').addClass('d-none');\n $('.label-select-size').parents('.add-to-cart-global').removeClass('btn-primary').addClass('btn-blue disabled-btn');\n } else {\n $('.add-to-cart-global .label-add-to-cart').removeClass('d-none').addClass('d-block');\n $('.add-to-cart-global .label-select-size').removeClass('d-block').addClass('d-none');\n $('.label-add-to-cart').parents('.add-to-cart-global').removeClass('btn-blue disabled-btn').addClass('btn-primary');\n }\n $('.js-b2b-quantity-select:not(.disabled-select)').on('change', function () {\n var selectedValue = $(this).val();\n \n if (selectedValue !== \"0\") { \n $('.add-to-cart-global .label-add-to-cart').removeClass('d-none').addClass('d-block');\n $('.add-to-cart-global .label-select-size').removeClass('d-block').addClass('d-none');\n $('.label-add-to-cart').parents('.add-to-cart-global').removeClass('btn-blue disabled-btn').addClass('btn-primary');\n } else {\n $('.add-to-cart-global').find('.label-select-size').removeClass('d-none').addClass('d-block');\n $('.add-to-cart-global').find('.label-add-to-cart').removeClass('d-block').addClass('d-none');\n $('.add-to-cart-global').removeClass('btn-primary').addClass('btn-blue disabled-btn');\n }\n }); \n\n $('.js-b2b-quantity-select:not(.disabled-select)').each(function () {\n if ($(this).val() !== \"0\") {\n $('.add-to-cart-global .label-add-to-cart').removeClass('d-none').addClass('d-block');\n $('.add-to-cart-global .label-select-size').removeClass('d-block').addClass('d-none');\n $('.label-add-to-cart').parents('.add-to-cart-global').removeClass('btn-blue disabled-btn').addClass('btn-primary');\n }\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 */\nfunction attributeSelect(selectedValueUrl, $productContainer, $target) {\n if($productContainer.prevObject.attr('name')=='sort-order'){\n return;\n }\n\n if (selectedValueUrl) {\n $('body').trigger('product:beforeAttributeSelect',\n { url: selectedValueUrl, container: $productContainer });\n\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n success: function (data) {\n // dataLayerPushOld({\n // 'event': 'productClick',\n // 'ecommerce': {\n // 'click': {\n // 'products': [{\n // 'id': \"{\" + data.product.id + \"}\",\n // 'name': \"{\" + data.product.productName + \"}\",\n // 'price': \"{\" + data.product.price.sales.value + \"}\",\n // 'category': \"{\" + data.product.productData.category + \"}\",\n // 'brand': \"{\" + data.product.brand + \"}\",\n // 'variant': \"{\" + data.product.productData.variant + \"}\"\n // }]\n // }\n // }\n // });\n if (data.product.variationAttributes) {\n var selectedSize = $('.size-field.selected').data('size-id');\n renderSizesView(data.product); // Passer la couleur sélectionnée\n var NewSelectedSize = $('.size-field.selected').data('size-id');\n if (!window.customer.isB2B) {\n if ($target === 'color') {\n if ($('.size-field.selected').length > 0) {\n if (selectedSize != NewSelectedSize) {\n $('.size-field.selected').removeClass('selected');\n $(\"select.quantity-select\").html('');\n }\n } else {\n if (selectedSize != NewSelectedSize) {\n $(\"select.quantity-select\").html('');\n }\n }\n }\n }\n }\n handleVariantResponse(data, $productContainer);\n updateOptions(data.product.optionsHtml, $productContainer);\n // if B2B pass attr ID & value as extra param to update product ID input field corresponding to selected variant value \n if (window.customer.isB2B && $target != 'color') {\n updateQuantities(data.product.quantities, $productContainer, {\n id: $target.attr('data-attr-id'),\n value: $target.attr('data-attr-value')\n });\n $('body').trigger('product:afterAttributeSelect', {\n data: data,\n container: $productContainer,\n attribute: {\n id: $target.attr('data-attr-id'),\n value: $target.attr('data-attr-value')\n }\n });\n } else {\n updateQuantities(data.product.quantities, $productContainer);\n $('body').trigger('product:afterAttributeSelect', {\n data: data,\n container: $productContainer\n });\n }\n if (window.customer.isB2B && $target === 'color') {\n renderQuantity(data.product);\n $('.quantity-select').select2({\n minimumResultsForSearch: -1,\n }).on('select2:open', () => {\n $(\".select2-container--default\").addClass('select2-b2b-quantity');\n });\n quickViewRender();\n }\n if ($('.size-unselectable.size-field').length > 0 ) {\n $('.show-back-in-stock').addClass('d-lg-block').removeClass('d-none');\n } else {\n $('.show-back-in-stock').addClass('d-none').removeClass('d-lg-block');\n }\n if ($('.size-field.selected').length === 0 && $('.size-field').length > 0) {\n $(\"select.quantity-select\").html('');\n }\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\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 = $('
        ').append($.parseHTML(html));\n\n var body = $html.find('.choice-of-bonus-product');\n var footer = $html.find('.modal-footer').children();\n\n return { body: body, footer: footer };\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 = ''\n + '
        '\n + ''\n + '
        '\n + ''\n + '
        '\n + '
        '\n + ' ' + data.labels.selectprods + ''\n + ' '\n + '
        '\n + '
        '\n + '
        '\n + '
        '\n + '
        '\n + '
        ';\n $('body').append(htmlString);\n $('.modal-body').spinner().start();\n\n $.ajax({\n url: bonusUrl,\n method: 'GET',\n dataType: 'json',\n success: function (response) {\n var parsedHtml = parseHtml(response.renderedTemplate);\n $('#chooseBonusProductModal .modal-body').empty();\n $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\n $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\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\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 */\nfunction handlePostCartAdd(response) {\n $('.minicart').trigger('count:update', response);\n var messageType = response.error ? 'alert-danger' : 'alert-success';\n // show add to cart toast\n if (response.newBonusDiscountLineItem\n && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n chooseBonusProducts(response.newBonusDiscountLineItem);\n } else if (response.stockError && response.unavailableProducts) {\n unavailableProducts.forEach(function(idx, product){\n var quantityInputID = \"quantities_\" + product.attribute.id + '_' + product.attribute.value;\n $('input#' + quantityInputID).val(product.variant.id);\n var _availableTxt = $('.js-availability-message-container-' + product.attribute.id + '-' + product.attribute.value ).attr('data-text-available');\n var _unavailableTxt = $('.js-availability-message-container-' + product.attribute.id + '-' + product.attribute.value ).attr('data-text-unavailable');\n var $txtContainer = $('.js-availability-message-' + product.attribute.id + '-' + product.attribute.value) ;\n var $quantitySelect = $('#select_quantity_' + product.attribute.id + '_' + product.attribute.value);\n if (product.variant.available === true && product.variant.readyToOrder) {\n $txtContainer.empty().text(_availableTxt);\n $quantitySelect.data('available', true);\n } else {\n $txtContainer.empty().text(_unavailableTxt);\n $quantitySelect.data('available', false);\n }\n updateQuantities(data.product.quantities, $productContainer, {\n id: product.attribute.id,\n value: product.attribute.value\n });\n });\n } else {\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append(\n '
        '\n );\n }\n \n $('html, body').animate({\n scrollTop: $('html').offset().top\n }, 300);\n\n setTimeout(function () {\n $('.minicart').trigger('focusin');\n },500);\n\n setTimeout(function () {\n $('.minicart .popover').removeClass('show');\n },3500)\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}\n\n/**\n * Makes a call to the server to report the event of adding an item to the cart\n *\n * @param {string | boolean} url - a string representing the end point to hit so that the event can be recorded, or false\n */\nfunction miniCartReportingUrl(url) {\n if (url) {\n $.ajax({\n url: url,\n method: 'GET',\n success: function () {\n // reporting urls hit on the server\n },\n error: function () {\n // no reporting urls hit on the server\n }\n });\n }\n}\n\nmodule.exports = {\n attributeSelect: attributeSelect,\n methods: {\n editBonusProducts: function (data) {\n chooseBonusProducts(data);\n }\n },\n\n focusChooseBonusProductModal: function () {\n $('body').on('shown.bs.modal', '#chooseBonusProductModal', function () {\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'true');\n $('#chooseBonusProductModal .close').focus();\n });\n },\n\n onClosingChooseBonusProductModal: function () {\n $('body').on('hidden.bs.modal', '#chooseBonusProductModal', function () {\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'false');\n });\n },\n\n trapChooseBonusProductModalFocus: function () {\n $('body').on('keydown', '#chooseBonusProductModal', function (e) {\n var focusParams = {\n event: e,\n containerSelector: '#chooseBonusProductModal',\n firstElementSelector: '.close',\n lastElementSelector: '.add-bonus-products'\n };\n focusHelper.setTabNextFocus(focusParams);\n });\n },\n\n colorAttribute: function () {\n $(document).on('click', '[data-attr=\"color\"] button', function (e) {\n e.preventDefault();\n\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 attributeSelect($(this).attr('data-url'), $productContainer, 'color');\n });\n },\n\n selectAttribute: function () {\n $(document).on('change', 'select[class*=\"select-\"], .options-select', function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n attributeSelect(e.currentTarget.value, $productContainer);\n });\n },\n\n availability: function () {\n $(document).on('change', '.quantity-select', function (e) {\n // TEC-61 : do not control stock when selecting quantity for a variant (B2B case)\n /* if ($(this).hasClass('js-b2b-quantity-select')) {\n return false;\n } */\n e.preventDefault();\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\n attributeSelect($(e.currentTarget).find('option:selected').data('url'),\n $productContainer, $(e.currentTarget));\n }\n });\n },\n\n addToCart: function () {\n $(document).on('click', 'button.add-to-cart, button.add-to-cart-global', function (event) {\n \n var addToCartUrl;\n var pid;\n var pidsObj;\n var setPids;\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n }\n var errorMessage = $productContainer.find('.size-error-message')[0],\n sizeSelector = $productContainer.find('.custom-select.form-control.select-TEC_size')[0];\n if(sizeSelector && errorMessage) {\n\n var $variationContainer = $('.product-desc');\n if ($(\".size-field.selected\").length == 0) {\n if (window.innerWidth < 544) {\n $('html, body').animate({\n scrollTop: $variationContainer.offset().top\n }, 500);\n }\n errorMessage.style.display = 'block';\n event.preventDefault();\n return;\n } else {\n errorMessage.style.display = 'none';\n }\n }\n if ($(this).hasClass('disabled-btn')) {\n return\n }\n $('body').trigger('product:beforeAddToCart', this);\n\n if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\n setPids = [];\n\n $('.product-detail').each(function () {\n if (!$(this).hasClass('product-set-detail')) {\n setPids.push({\n pid: $(this).find('.product-id').text(),\n qty: $(this).find('.quantity-select').val(),\n options: getOptions($(this))\n });\n }\n });\n pidsObj = JSON.stringify(setPids);\n }\n\n pid = getPidValue($(this));\n window.cart.pid = pid;\n\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n }\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n }\n\n addToCartUrl = getAddToCartUrl();\n // TEC-90\n var _quantitySelected = getQuantitySelected($(this));\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: getChildProducts(),\n };\n var _productVariants =$(this).data('variants');\n // TEC-90\n if (window.customer.isB2B && _productVariants) { \n form.quantities = _quantitySelected.join(',');\n } else {\n form.quantity = _quantitySelected;\n }\n\n if (!$('.bundle-item').length) {\n form.options = getOptions($productContainer);\n }\n\n $(this).trigger('updateAddToCartFormData', form);\n\n if (addToCartUrl) {\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: function (data) {\n handlePostCartAdd(data);\n $('body').trigger('product:afterAddToCart', data);\n $.spinner().stop();\n miniCartReportingUrl(data.reportingURL);\n var productDataLayer = JSON.parse(data.productDataLayer);\n dataLayerPushOld({ ecommerce: null });\n dataLayerPushOld({\n 'event': 'addToCart',\n 'ecommerce': {\n 'currencyCode': productDataLayer.currency,\n 'add': { \n 'products': [{ \n 'name': productDataLayer.name,\n 'id': productDataLayer.id,\n 'price': productDataLayer.price,\n 'brand': productDataLayer.brand,\n 'category': productDataLayer.category,\n 'variant': productDataLayer.variant,\n 'quantity': productDataLayer.quantity\n }]\n }\n }\n });\n\n dataLayerPush(data.gaDatalayer.addToCartEvent)\n\n },\n error: function () {\n $.spinner().stop();\n }\n });\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($choiceOfBonusProduct.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 = $choiceOfBonusProduct.find('.product-option').data('option-id');\n var valueId = $choiceOfBonusProduct.find('.options-select option:selected').data('valueId');\n if (totalQty <= maxPids) {\n var selectedBonusProductHtml = ''\n + '
        '\n + '
        '\n + $choiceOfBonusProduct.find('.product-name').html()\n + '
        '\n + '
        '\n + '
        '\n ;\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', response.$productContainer).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 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) {\n $.spinner().stop();\n if (data.error) {\n $('#chooseBonusProductModal').modal('hide');\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append('
        ');\n }\n $('.add-to-cart-messages').append(\n '
        '\n + data.errorMessage + '
        '\n );\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n }, 3000);\n } else {\n $('.configure-bonus-product-attributes').html(data);\n $('.bonus-products-step2').removeClass('hidden-xl-down');\n $('#chooseBonusProductModal').modal('hide');\n\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append('
        ');\n }\n $('.minicart-quantity').html(data.totalQty);\n $('.add-to-cart-messages').append(\n '
        '\n + data.msgSuccess + '
        '\n );\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n if ($('.cart-page').length) {\n location.reload();\n }\n }, 1500);\n }\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n },\n\n getPidValue: getPidValue,\n getQuantitySelected: getQuantitySelected,\n miniCartReportingUrl: miniCartReportingUrl\n};\n","'use strict';\nvar base = require('./base');\nvar processInclude = require('base/util');\nprocessInclude(require('./informationsProduct'));\n\n\n\n/**\n * Enable/disable UI elements\n * @param {boolean} enableOrDisable - true or false\n */\nfunction updateAddToCartEnableDisableOtherElements(enableOrDisable) {\n $('button.add-to-cart-global').attr('disabled', enableOrDisable);\n}\n\n\nfunction SizeSelected() {\n if (!window.customer.isB2B) {\n var quantitySelector = $('.b2b-customer.b2c-customer .quantity-select');\n if ($(\".size-field.selected\").length > 0) {\n $('.add-to-cart .label-add-to-cart').removeClass('d-none').addClass('d-block');\n $('.add-to-cart .label-select-size').removeClass('d-block').addClass('d-none');\n $('.label-add-to-cart').parents('.add-to-cart').removeClass('btn-blue disabled-btn').addClass('btn-primary');\n } else {\n $('.add-to-cart .label-select-size').removeClass('d-none').addClass('d-block');\n $('.add-to-cart .label-add-to-cart').removeClass('d-block').addClass('d-none');\n $('.label-select-size').parents('.add-to-cart').removeClass('btn-primary').addClass('btn-blue disabled-btn');\n }\n\n if ($(\".size-field.selectable\").length == 0) {\n $('.add-to-cart .label-add-to-cart').removeClass('d-none').addClass('d-block');\n $('.add-to-cart .label-select-size').removeClass('d-block').addClass('d-none');\n $('.label-add-to-cart').parents('.add-to-cart').removeClass('btn-blue disabled-btn').addClass('btn-primary disabled-btn');\n }\n\n if ($('.add-to-cart').parents('.attributes').find('.variation-container').hasClass('no-size')) {\n $('.add-to-cart .label-add-to-cart').removeClass('d-none').addClass('d-block');\n $('.add-to-cart .label-select-size').removeClass('d-block').addClass('d-none');\n $('.label-add-to-cart').parents('.add-to-cart').removeClass('btn-blue disabled-btn').addClass('btn-primary');\n }\n\n if ($('.size-field').length > 0) { \n if ($('.size-field.selected').length === 0) {\n quantitySelector.prop('disabled', true).addClass('btn-qt-disabled');\n $('.quantity-btn').addClass('btn-qt-disabled');\n } else {\n quantitySelector.prop('disabled', false).removeClass('btn-qt-disabled');\n $('.quantity-btn').removeClass('btn-qt-disabled');\n }\n }\n \n } else {\n var quantitySelector = $('.b2b-customer:not(.b2c-customer) .quantity-select');\n if ($(\".js-b2b-quantity-select:not(.disabled-select)\").length > 0 && $('.js-b2b-quantity-select').val() == \"0\") {\n $('.add-to-cart .label-select-size').removeClass('d-none').addClass('d-block');\n $('.add-to-cart .label-add-to-cart').removeClass('d-block').addClass('d-none');\n $('.label-select-size').parents('.add-to-cart').removeClass('btn-primary').addClass('btn-blue disabled-btn');\n } else {\n $('.add-to-cart .label-add-to-cart').removeClass('d-none').addClass('d-block');\n $('.add-to-cart .label-select-size').removeClass('d-block').addClass('d-none');\n $('.label-add-to-cart').parents('.add-to-cart').removeClass('btn-blue disabled-btn').addClass('btn-primary');\n }\n $('.js-b2b-quantity-select:not(.disabled-select)').on('change', function () {\n var selectedValue = $(this).val();\n \n if (selectedValue !== \"0\") { \n $('.add-to-cart .label-add-to-cart').removeClass('d-none').addClass('d-block');\n $('.add-to-cart .label-select-size').removeClass('d-block').addClass('d-none');\n $('.label-add-to-cart').parents('.add-to-cart').removeClass('btn-blue disabled-btn').addClass('btn-primary');\n } else {\n $(this).closest('.add-to-cart').find('.label-select-size').removeClass('d-none').addClass('d-block');\n $(this).closest('.add-to-cart').find('.label-add-to-cart').removeClass('d-block').addClass('d-none');\n $(this).closest('.add-to-cart').removeClass('btn-primary').addClass('btn-blue disabled-btn');\n }\n \n var allZero = $('.js-b2b-quantity-select:not(.disabled-select)').toArray().every(function (select) {\n return $(select).val() === \"0\";\n });\n \n if (allZero) {\n $('.add-to-cart .label-select-size').removeClass('d-none').addClass('d-block');\n $('.add-to-cart .label-add-to-cart').removeClass('d-block').addClass('d-none');\n $('.label-select-size').parents('.add-to-cart').removeClass('btn-primary').addClass('btn-blue disabled-btn');\n }\n }); \n\n $('.js-b2b-quantity-select:not(.disabled-select)').each(function () {\n if ($(this).val() !== \"0\") {\n $('.add-to-cart .label-add-to-cart').removeClass('d-none').addClass('d-block');\n $('.add-to-cart .label-select-size').removeClass('d-block').addClass('d-none');\n $('.label-add-to-cart').parents('.add-to-cart').removeClass('btn-blue disabled-btn').addClass('btn-primary');\n }\n });\n }\n}\nSizeSelected();\n\nmodule.exports = {\n methods: {\n updateAddToCartEnableDisableOtherElements: updateAddToCartEnableDisableOtherElements\n },\n\n availability: base.availability,\n\n addToCart: base.addToCart,\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-xl-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-xl-down');\n }\n\n if (data.longDescription) {\n $productContainer.find('.description-and-detail .details')\n .removeClass('hidden-xl-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-xl-down');\n }\n });\n },\n\n showSpinner: function () {\n $('body').on('product:beforeAddToCart product:beforeAttributeSelect', function () {\n $.spinner().start();\n });\n },\n updateAttribute: function () {\n $('body').on('product:afterAttributeSelect', function (e, response) {\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 } else if ($('.product-set-detail').eq(0)) {\n if (!window.customer.isB2B || !response.attribute) {\n response.container.data('pid', response.data.product.id);\n response.container.find('.product-id').text(response.data.product.id);\n } else {\n var quantityInputID = \"quantities_\" + response.attribute.id + '_' + response.attribute.value;\n $('input#' + quantityInputID).val(response.data.product.id);\n var _availableTxt = $('.js-availability-message-container-' + response.attribute.id + '-' + response.attribute.value).attr('data-text-available');\n var _unavailableTxt = $('.js-availability-message-container-' + response.attribute.id + '-' + response.attribute.value).attr('data-text-unavailable');\n var $txtContainer = $('.js-availability-message-' + response.attribute.id + '-' + response.attribute.value) ;\n var $quantitySelect = $('#select_quantity_' + response.attribute.id + '_' + response.attribute.value);\n if (response.data.product.available === true && response.data.product.readyToOrder) {\n $txtContainer.empty().text(_availableTxt);\n $quantitySelect.data('available', true);\n } else {\n $txtContainer.empty().text(_unavailableTxt);\n $quantitySelect.data('available', false);\n }\n }\n } else {\n $('.product-id').text(response.data.product.id);\n $('.product-detail:not(\".bundle-item\")').data('pid', response.data.product.id);\n }\n SizeSelected();\n });\n $(document).on(\"click\",\".size-field\", function(event) {\n var $productContainer = $(this).closest('.product-detail');\n var errorMessage = $productContainer.find('.size-error-message');\n $(this).parents('.sizes-container-block').find('.select-size').val($(this).data(\"attr-value\")).trigger('change');\n $(\".size-field\").removeClass(\"selected\");\n $(this).addClass(\"selected\");\n $('.quantity-select').removeClass('btn-qt-disabled');\n $('.quantity-btn').removeClass('btn-qt-disabled');\n $('.quantity-select').removeAttr('disabled');\n errorMessage.css('display', 'none');\n });\n },\n updateAddToCart: function () {\n $('body').on('product:updateAddToCart', function (e, response) {\n\n if (!window.customer.isB2B) {\n // update local add to cart (for sets)\n $('button.add-to-cart', response.$productContainer)\n .toggleClass('disabled-btn', (!response.product.readyToOrder || !response.product.available));\n var enable = $('.product-availability').toArray().every(function (item) {\n return $(item).data('available') && $(item).data('ready-to-order');\n });\n } else {\n // update local add to cart (for sets)\n $('button.add-to-cart', response.$productContainer)\n .toggleClass('disabled-btn', (!response.product.readyToOrder || !response.product.available));\n var enable = $('.js-b2b-quantity-select').toArray().every(function (item) {\n return $(item).data('available');\n\n });\n }\n module.exports.methods.updateAddToCartEnableDisableOtherElements(!enable);\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 $('.size-chart a').on('click', function (e) {\n e.preventDefault();\n var url = $(this).attr('href');\n var $prodSizeChart = $(this).closest('.size-chart').find('.size-chart-collapsible');\n if ($prodSizeChart.is(':empty')) {\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n $prodSizeChart.append(data.content);\n }\n });\n }\n $prodSizeChart.toggleClass('active');\n });\n\n var $sizeChart = $('.size-chart-collapsible');\n $('body').on('click touchstart', function (e) {\n if ($('.size-chart').has(e.target).length <= 0) {\n $sizeChart.removeClass('active');\n }\n });\n },\n copyProductLink: function () {\n $('body').on('click', '#fa-link', function () {\n event.preventDefault();\n var $temp = $('');\n $('body').append($temp);\n $temp.val($('#shareUrl').val()).select();\n document.execCommand('copy');\n $temp.remove();\n $('.copy-link-message').attr('role', 'alert');\n $('.copy-link-message').removeClass('d-none');\n setTimeout(function () {\n $('.copy-link-message').addClass('d-none');\n }, 3000);\n });\n },\n\n DOMContentLoaded: function() {\n var sizeSelector = $('.custom-select.select-TEC_size');\n var quantitySelector = $('.quantity-select');\n var addToCartButton = $('.add-to-cart');\n var errorMessage = $('.size-error-message');\n if (!window.customer.isB2B) {\n if (errorMessage.length && sizeSelector.length) {\n function checkSizeSelection(event) {\n if ($('.size-field.selected').length === 0) {\n event.preventDefault();\n errorMessage.css('display', 'block');\n quantitySelector.prop('disabled', true).addClass('btn-qt-disabled');\n $('.quantity-btn').addClass('btn-qt-disabled');\n } else {\n errorMessage.css('display', 'none');\n quantitySelector.prop('disabled', false).removeClass('btn-qt-disabled');\n $('.quantity-btn').removeClass('btn-qt-disabled');\n }\n }\n \n sizeSelector.on('change', function () {\n if ($('.size-field.selected').length === 0) {\n errorMessage.css('display', 'none');\n quantitySelector.prop('disabled', false).removeClass('btn-qt-disabled');\n $('.quantity-btn').removeClass('btn-qt-disabled');\n }\n });\n \n quantitySelector.on('click', checkSizeSelection);\n addToCartButton.on('click', checkSizeSelection);\n } \n } else {\n function checkSizeSelectionb2b(event) {\n var allZero = true;\n event.preventDefault();\n if ($('.js-b2b-quantity-select:not(:disabled)').length > 0) {\n $('.js-b2b-quantity-select:not(:disabled)').each(function () {\n if ($(this).val() !== '0') {\n allZero = false;\n return false;\n }\n });\n \n var errorMessage = $('.size-error-message');\n if (allZero) {\n errorMessage.css('display', 'block');\n } else {\n errorMessage.css('display', 'none');\n }\n }\n }\n addToCartButton.on('click', checkSizeSelectionb2b);\n } \n\n $('.quantity-btn').on('click', function (event) {\n var quantitySelector = $('.quantity-select');\n var errorMessage = $('.size-error-message');\n if ($('.size-field').length > 0) { \n if ($('.size-field.selected').length === 0) {\n event.preventDefault();\n errorMessage.css('display', 'block');\n quantitySelector.addClass('btn-qt-disabled');\n $('.quantity-btn').addClass('btn-qt-disabled');\n } else {\n errorMessage.css('display', 'none');\n quantitySelector.removeClass('btn-qt-disabled');\n $('.quantity-btn').removeClass('btn-qt-disabled');\n }\n }\n });\n \n\n $('.size-selector-container').each(function () {\n const $select = $(this).find('select');\n $select.on('focusin', function(e) {\n e.preventDefault();\n $(this).addClass('focused');\n })\n .on('focusout', function(e) {\n e.preventDefault();\n $(this).removeClass('focused');\n });\n\n $(this).find('.plus-btn').on('click', function () {\n if ($select.prop('selectedIndex') < $select.find('option').length - 1) {\n $select.prop('selectedIndex', $select.prop('selectedIndex') + 1).trigger('change');\n }\n });\n\n $(this).find('.minus-btn').on('click', function () {\n if ($select.prop('selectedIndex') > 0) {\n $select.prop('selectedIndex', $select.prop('selectedIndex') - 1).trigger('change');\n }\n });\n });\n },\n\n focusChooseBonusProductModal: base.focusChooseBonusProductModal()\n};\n\n$('.lien-complet').on('click', function(e) {\n e.preventDefault();\n\n var $header = $('header');\n var $target = $('.informations-Product');\n\n if ($target.length) {\n\n var headerHeight = $header.outerHeight() || 0;\n\n if ($(window).width() > 992) {\n $('html, body').animate({\n scrollTop: $target.offset().top - headerHeight\n }, 800);\n } else {\n $('html, body').animate({\n scrollTop: $target.offset().top\n }, 800);\n }\n }\n});\n\nvar $ctaButton = $('.add-to-cart-scroll');\nvar $stickyBar = $('.sticky-bar-product');\nvar $header = $('header');\n\nfunction isPartiallyVisible($el) {\n var winTop = $(window).scrollTop();\n var elTop = $el.offset().top;\n var headerHeight = $header.outerHeight();\n return !(elTop >= winTop + headerHeight);\n}\n\nfunction toggleStickyBar() {\n if ($(window).width() > 1024) {\n if (isPartiallyVisible($ctaButton)) {\n $stickyBar.fadeIn();\n } else {\n $stickyBar.fadeOut();\n }\n } else {\n $stickyBar.hide();\n }\n}\n\n$(window).on('scroll', toggleStickyBar);\n$(window).on('resize', toggleStickyBar);\n\n$(document).on('click', '.sticky-bar-product .add-to-cart', function (event) {\n var $productContainer = $(this).closest('.product-detail');\n var $errorMessage = $productContainer.find('.size-error-message');\n var $variationContainer = $('.info-product');\n\n if ($('.size-field.selected').length === 0) {\n if (window.innerWidth > 544) {\n $('html, body').animate({\n scrollTop: $variationContainer.offset().top\n }, 500);\n }\n $errorMessage.css('display', 'block');\n event.preventDefault();\n return;\n } else {\n $errorMessage.css('display', 'none');\n }\n});\n\n$(document).on('click', '.zoom-icon-js', function (event) {\n event.preventDefault();\n let currentIndexPosition = parseInt($('.carousel-indicators li.active').attr('data-slide-to')) || 0;\n openModal(currentIndexPosition);\n})\n\nfunction openModal(currentIndex) {\n const $imagesPrimary = $('#imageGalleryModal .carousel-item');\n const $imagesModal = $('#imageGalleryModal .js-carousel-item');\n const $currentImageElement = $('#currentImage');\n const $totalImagesElement = $('#totalImages');\n const $prevButton = $('#prevImage');\n const $nextButton = $('#nextImage');\n const totalImages = $imagesModal.length;\n\n $totalImagesElement.text(totalImages);\n\n const updateGallery = () => {\n $imagesPrimary.removeClass('active').eq(currentIndex).addClass('active');\n $('.carousel-indicators li').removeClass('active').eq(currentIndex).addClass('active');\n $('.pdpCarousel .carousel-inner').removeClass('active').eq(currentIndex).addClass('active');\n $('.js-pdp-carousel').find('.carousel-item').removeClass('active').eq(currentIndex).addClass('active');\n $imagesModal.removeClass('active').eq(currentIndex).addClass('active');\n $currentImageElement.text(currentIndex + 1);\n $prevButton.toggleClass('d-none', currentIndex === 0);\n $nextButton.toggleClass('d-none', currentIndex === totalImages - 1);\n };\n\n $prevButton.on('click', () => {\n if (currentIndex > 0) {\n currentIndex--;\n updateGallery();\n }\n });\n\n $nextButton.on('click', () => {\n if (currentIndex < totalImages - 1) {\n currentIndex++;\n updateGallery();\n }\n });\n\n $imagesPrimary.on('click', function () {\n currentIndex = $imagesPrimary.index(this);\n updateGallery();\n });\n \n updateGallery();\n $('#imageGalleryModal').modal('show');\n}\n\nfunction resetForm() {\n $('.tec-backinstock-size input[name=\"variantIds\"]').prop('checked', false);\n $('.error-email-message').addClass('d-none');\n $('.alert-send-email-bis').addClass(\"d-none\");\n $('#email').val('');\n}\n\n$('.add-to-back-in-stock').on('click', function (e) {\n e.preventDefault();\n\n $('.error-email-message').addClass('d-none');\n $('.control-form-email').removeClass('error');\n $('.alert-send-email-bis').addClass(\"d-none\");\n\n let isValid = true;\n\n const sizeSelected = $('.tec-backinstock-size input[name=\"variantIds\"]:checked').length > 0;\n if (!sizeSelected) {\n $('.tec-backinstock-container .error-email-message').removeClass('d-none');\n isValid = false;\n\n if ($('.tec-backinstock-size input[name=\"variantIds\"]').length === 0) {\n isValid = true;\n }\n }\n\n const emailInput = $('#email').val().trim();\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailInput || !emailRegex.test(emailInput)) {\n $('.tec-mail-alerte + .error-email-message').removeClass('d-none');\n $('.control-form-email').addClass('error');\n isValid = false;\n }\n\n if (isValid) {\n const formData = $('.back-in-stock-form').serialize();\n const actionUrl = $('.back-in-stock-form').attr('action');\n\n $.ajax({\n url: actionUrl,\n type: 'POST',\n data: formData,\n success: function (response) {\n if(response.success) {\n $('.alert-send-email-bis').alert();\n $('.alert-send-email-bis').removeClass(\"d-none\");\n }\n },\n error: function () {\n alert('Une erreur s\\'est produite. Veuillez réessayer.');\n }\n });\n }\n});\n\n\n$(document).on('click', '.subscribe-back-in-stock', function (event) {\n if (!window.customer.isB2B) {\n $('.tec-backinstock-size').empty();\n\n $('.select-all-size .size-unselectable').each(function() {\n var dataValue = $(this).data('product-id');\n var sizeText = $(this).text().trim();\n var newLabel = `\n \n `;\n $('.tec-backinstock-size').append(newLabel);\n });\n } else {\n $('.tec-backinstock-size').empty();\n\n $('.b2b-customer .b2b-size-unselectable').each(function() {\n var dataValue = $(this).data('product-id');\n var sizeText = $(this).find('.b2b-label-size').text().trim();\n var newLabel = `\n \n `;\n $('.tec-backinstock-size').append(newLabel);\n });\n }\n});\n\nfunction toggleSubscribeBackInStockB2b() {\n if ($('.b2b-size-unselectable').length > 0 ) {\n $('.show-back-in-stock-b2b').addClass('d-lg-block').removeClass('d-none');\n } else {\n $('.show-back-in-stock-b2b').addClass('d-none').removeClass('d-lg-block');\n }\n}\n\ntoggleSubscribeBackInStockB2b();\n\n$('.size-field').on('click', function() {\n toggleSubscribeBackInStockB2b();\n});\n\nfunction toggleSubscribeBackInStock() {\n if ($('.size-unselectable.size-field').length > 0 ) {\n $('.show-back-in-stock').addClass('d-lg-block').removeClass('d-none');\n } else {\n $('.show-back-in-stock').addClass('d-none').removeClass('d-lg-block');\n }\n}\n\ntoggleSubscribeBackInStock();\n\n$('.size-field').on('click', function() {\n toggleSubscribeBackInStock();\n});\n\n$(document).on('click', '#cartIconBtn', function (event) {\n $('#backInStockAlert').modal('hide');\n resetForm();\n});\n\n\n$('.js-close-success-message').on('click', function () {\n $('#backinstock-success-message').modal('hide');\n});\n\n$('.tec-badge span').each(function() {\n if ($(this).text().trim() !== '') {\n $(this).closest('.tec-badge').addClass('badge-exist');\n }\n});\n\nif ($('.size-field.selected').length === 0 && $('.size-field').length > 0) {\n $(\"select.quantity-select\").html('');\n}","'use strict';\n\n\n$(document).ready(function () {\n const $tabs = $('.tab');\n const $contents = $('.content-onglet');\n const $containerInfo = $('.tabs').parents('.product-info');\n\n var tabCount = $('.product-info .tab').length;\n\n if ($(window).width() > 840) {\n\n if (tabCount === 1) {\n $('.product-info .tab').css('width', '100%');\n } else if (tabCount === 2) {\n $('.product-info .tab').css('width', '50%');\n } else if (tabCount === 3) {\n $('.product-info .tab:first-child').css('width', '33%');\n $('.product-info .tab:nth-child(2)').css('width', '34%');\n $('.product-info .tab:last-child').css('width', '33%');\n } else if (tabCount === 4) {\n $('.product-info .tab').css('width', '25%');\n }\n }\n\n // Vérifier le nombre d'onglets visibles\n if ($tabs.length <= 1) {\n // Si un seul onglet ou moins, masquer la barre d'onglets\n $tabs.parents('.tabs-wrapper').removeClass('d-flex').addClass('d-none');\n } else {\n // Initialiser le premier onglet actif\n $('.tabs .tab').first().addClass('show-first');\n $('.tab-content .content-onglet').first().addClass('first-content-show');\n $('.show-first').addClass('active');\n $('.first-content-show').addClass('active fade in').show();\n $tabs.parents('.tabs-wrapper').removeClass('d-none').addClass('d-flex');\n\n // Gérer le clic sur les onglets\n $tabs.on('click', function () {\n const $tab = $(this);\n const targetId = $tab.data('tab');\n\n if ($tab.hasClass('active')) return;\n\n $tabs.removeClass('active');\n $tab.addClass('active');\n\n $contents.filter('.active').removeClass('active').fadeOut(50, function () {\n $('#' + targetId)\n .addClass('active')\n .fadeIn(100);\n });\n $contents.filter('.active').removeClass('fade in').fadeOut(100, function () {\n $('#' + targetId)\n .addClass('fade in')\n .fadeIn(100);\n });\n if ($(window).width() < 840) {\n setTimeout(function () {\n $(\".informations-Product .videos\").slick({\n slidesToShow: 2,\n slidesToScroll: 1,\n infinite: true,\n dots: true,\n arrows: false,\n responsive: [\n {\n breakpoint: 840,\n settings: {\n slidesToShow: 1,\n infinite: true\n }\n }\n ]\n });\n }, 200);\n }\n });\n }\n\n var $buttonShowMore = $containerInfo.data('show-more');\n var $buttonShowLess = $containerInfo.data('show-less');\n\n $('.text-block .slide-read-more').expander({\n slicePoint: 500,\n expandText: $buttonShowMore,\n userCollapseText: $buttonShowLess,\n expandEffect: 'slideDown',\n collapseEffect: 'slideUp',\n expandSpeed: 0,\n collapseSpeed: 0\n });\n});\n\n\n$(\".videos .info-videos a\").each(function () {\n $(this).on(\"click\", function (e) {\n e.preventDefault();\n\n var titleVideo = $(this).find(\".title-video\").text();\n var linkVideo = $(this).attr(\"href\");\n\n var videoId = linkVideo.split(\"v=\")[1];\n var ampersandPosition = videoId.indexOf(\"&\");\n if (ampersandPosition !== -1) {\n videoId = videoId.substring(0, ampersandPosition);\n }\n\n var iframeLink = `https://www.youtube.com/embed/${videoId}`;\n\n $(\".show-video-info .modal-body .title-video\").html(titleVideo);\n\n var contentVideo = ``;\n\n $(\".show-video-info .modal-body .iframe-video\").empty().html(contentVideo);\n });\n});\n\n$('.videos').on('init reInit afterChange', function () {\n $(\".videos .info-videos a\").off(\"click\").on(\"click\", function (e) {\n e.preventDefault();\n\n var titleVideo = $(this).find(\".title-video\").text();\n var linkVideo = $(this).attr(\"href\");\n\n var videoId = linkVideo.split(\"v=\")[1];\n var ampersandPosition = videoId.indexOf(\"&\");\n if (ampersandPosition !== -1) {\n videoId = videoId.substring(0, ampersandPosition);\n }\n\n var iframeLink = `https://www.youtube.com/embed/${videoId}`;\n\n $(\".show-video-info .modal-body .title-video\").html(titleVideo);\n\n var contentVideo = ``;\n\n $(\".show-video-info .modal-body .iframe-video\").empty().html(contentVideo);\n });\n});\n","\"use strict\";\n\nmodule.exports = {\n productInfo: function () {\n if ($(window).width() > 840) {\n var $sizesContainer = $(\".select-all-size .sizes-container\");\n var $toggleButton = $(\"#toggle-sizes\");\n\n // Vérifier le nombre d'éléments\n if ($sizesContainer.length <= 8) {\n $toggleButton.addClass(\"d-none\");\n } else {\n $toggleButton.removeClass(\"d-none\").addClass(\"d-block\");\n }\n\n // Créer un conteneur pour les éléments restants\n var $extraContainer = $('
        ');\n $sizesContainer.slice(8).appendTo($extraContainer); // Déplacer les éléments dans la nouvelle div\n\n // Insérer le conteneur avant le bouton\n $extraContainer.insertBefore($toggleButton);\n $extraContainer.hide(); // Masquer par défaut\n\n var isExpanded = false;\n\n // Obtenir les textes des boutons\n var $buttonShowMore = $toggleButton.data(\"show-more\");\n var $buttonShowLess = $toggleButton.data(\"show-less\");\n\n // Gérer le clic sur le bouton\n $toggleButton.on(\"click\", function () {\n if (!isExpanded) {\n $extraContainer.stop(true, true).slideDown(300); // Afficher tous les éléments restants\n $(this).text($buttonShowLess);\n } else {\n $extraContainer.stop(true, true).slideUp(300); // Cacher tous les éléments restants\n $(this).text($buttonShowMore);\n }\n isExpanded = !isExpanded;\n });\n\n var heightProduct = $(\n \".product-view-carousel .carousel-inner\"\n ).outerHeight();\n $(\".product-view-carousel .carousel-indicators\").css({\n \"max-height\": heightProduct,\n \"overflow-y\": \"scroll\",\n });\n\n $(\".product-view-carousel .carousel-indicators\").css({\n \"-ms-overflow-style\": \"none\",\n \"scrollbar-width\": \"none\",\n });\n\n $(\".product-view-carousel .carousel-indicators::-webkit-scrollbar\").css({\n display: \"none\",\n });\n }\n\n function toggleCarouselArrows() {\n var $carousel = $(\".product-view-carousel\");\n var itemCarousel = $carousel.find(\".carousel-item\");\n var $indicators = $carousel.find(\".carousel-indicators li\");\n var $prevArrow = $carousel.find(\".carousel-control-prev\");\n var $nextArrow = $carousel.find(\".carousel-control-next\");\n\n if (itemCarousel.length == 1) {\n $prevArrow.removeClass(\"d-flex\").addClass(\"arrow-disabled\");\n $nextArrow.removeClass(\"d-flex\").addClass(\"arrow-disabled\");\n } else {\n $prevArrow.removeClass(\"arrow-disabled\").addClass(\"d-flex\");\n $nextArrow.removeClass(\"arrow-disabled\").addClass(\"d-flex\");\n\n if ($indicators.first().hasClass(\"active\")) {\n $prevArrow.removeClass(\"d-flex\").addClass(\"arrow-disabled\");\n } else {\n $prevArrow.removeClass(\"arrow-disabled\").addClass(\"d-flex\");\n }\n\n if ($indicators.last().hasClass(\"active\")) {\n $nextArrow.removeClass(\"d-flex\").addClass(\"arrow-disabled\");\n } else {\n $nextArrow.removeClass(\"arrow-disabled\").addClass(\"d-flex\");\n }\n }\n }\n\n toggleCarouselArrows();\n\n $(\".carousel-product-arrows-zoom a\").on(\"click\", function () {\n setTimeout(toggleCarouselArrows, 500);\n });\n\n $(\".carousel-indicators li\").on(\"click\", function () {\n setTimeout(toggleCarouselArrows, 500);\n });\n\n var selectedColor = $(\".color-attribute.selected\").data(\"color-selected\");\n $(\".label-size .color-selected\").empty().text(selectedColor);\n $(\".label-size .selected-label\").removeClass(\"d-none\");\n\n $(document).on(\"click\", \".color-attribute\", function () {\n var selectedColor = $(this).data(\"color-selected\");\n\n $(\".label-size .color-selected\").empty().text(selectedColor);\n\n $(\".label-size .selected-label\").removeClass(\"d-none\");\n\n $(\".color-attribute\").removeClass(\"selected\").prop(\"disabled\", false);\n $(this).addClass(\"selected\").prop(\"disabled\", true);\n });\n\n $(\".color-attribute\").prop(\"disabled\", false);\n $(\".color-attribute.selected\").prop(\"disabled\", true);\n\n var viewSize = $(window).width();\n if(viewSize > 769) {\n var heightOfHeader = $('header').outerHeight();\n var heightbreadCrumb = $('.breadcrumb').outerHeight();\n var $firstChildBlock = $('.tec-detail .first-part-scrolling-pdp');\n \n $firstChildBlock.css('top',(heightOfHeader + heightbreadCrumb) + 'px');\n \n var $childBlock = $('.tec-detail .second-part-scrolling-pdp');\n var childHeight = $childBlock.outerHeight(true);\n }\n\n if ($('.size-unselectable.size-field').length > 0 ) {\n $('.show-back-in-stock').addClass('d-lg-block').removeClass('d-none');\n } else {\n $('.show-back-in-stock').addClass('d-none').removeClass('d-lg-block');\n }\n }\n};\n\n// Appeler la fonction directement\nmodule.exports.productInfo();\n","'use strict';\n\nvar processInclude = require('base/util');\n\n(function ($) {\n $(document).ready(function () {\n processInclude(require('./product/detail'));\n processInclude(require('./product/product'));\n });\n})(jQuery);\n\n"],"sourceRoot":""}