{"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/product.js","webpack:///../codebase/tecnifibre/cartridges/app_storefront_tcf/cartridge/client/default/js/product/quickView.js","webpack:///../codebase/tecnifibre/cartridges/app_storefront_tcf/cartridge/client/default/js/search.js","webpack:///../codebase/tecnifibre/cartridges/app_storefront_tcf/cartridge/client/default/js/search/search.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;;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;AACb,WAAW,mBAAO,CAAC,gHAAQ;AAC3B,kBAAkB,mBAAO,CAAC,2JAAuB;AACjD,OAAO,cAAc,GAAG,mBAAO,CAAC,sHAAW;;AAE3C;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;AACA,SAAS,E;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,K;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,OAAO;AACP,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,kBAAkB,E;AACxC;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C,8BAA8B,4BAA4B;AAC1D,+BAA+B,kCAAkC;AACjE,kCAAkC,qCAAqC;AACvE,+BAA+B,sBAAsB;AACrD,iCAAiC,oCAAoC;AACrE,kCAAkC,qBAAqB;AACvD,iBAAiB;AACjB;AACA;AACA,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,yCAAyC;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,OAAO;AACpB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,cAAc;AAC1B;AACA;AACA;;AAEA;AACA;;AAEA,YAAY;AACZ;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,0EAA0E,UAAU;AACpF;AACA;AACA,0EAA0E,WAAW;AACrF,2DAA2D,cAAc;AACzE,2DAA2D,cAAc;AACzE,2DAA2D,UAAU;AACrE,sCAAsC;AACtC;AACA;;AAEA;AACA;AACA,iBAAiB;;AAEjB;AACA;;AAEA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA,a;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C,kCAAkC,EAAE;;AAEhF;AACA,4CAA4C,uCAAuC,EAAE;;AAErF;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;;;;;;;;;;;ACtea;;AAEb,qBAAqB,mBAAO,CAAC,mIAAW;;AAExC;AACA,mBAAmB,mBAAO,CAAC,0HAAiB;AAC5C,mBAAmB,mBAAO,CAAC,kIAAqB;AAChD,mBAAmB,mBAAO,CAAC,8HAAmB;AAC9C,CAAC;;;;;;;;;;;;;ACRY;;AAEb;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,qBAAqB;AACrB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6CAA6C;AAC7C;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;AACD;AACA;;AAEA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA,KAAK;AACL;;;AAGA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA","file":"default/js/search.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/search.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\";\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';\nvar base = require('./base');\nvar focusHelper = require('base/components/focus');\nconst { productInfo } = require('./product');\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-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 .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 }\n\n if ($(\".size-field.selectable\").length == 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 if ($('.add-to-cart-global').parents('.attributes').find('.variation-container').hasClass('no-size')) {\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 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-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\nSizeSelected();\n\nvar sizeSelector = document.querySelector(\".custom-select.select-TEC_size\"),\nquantitySelector = document.querySelector(\".quantity-select\"),\naddToCartButton = document.querySelector(\".add-to-cart-global\"),\nerrorMessage = document.querySelector(\".size-error-message\");\n\nfunction Quantity() {\n if (errorMessage && sizeSelector) {\n $(sizeSelector).on(\"change\", function () {\n if ($('.size-field').length > 0) { \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 \n $(quantitySelector).on(\"click\", checkSizeSelection);\n $(addToCartButton).on(\"click\", checkSizeSelection);\n } \n\n $(\".quantity-btn\").on(\"click\", function (event) {\n var quantitySelector = $(\".quantity-select\");\n var errorMessage = $(\".size-error-message\");\n\n if ($(\".size-field.selected\").length === 0 && $('.size-field').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 $(\".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 }).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\nQuantity();\n\n/**\n * Validate size selection in the modal\n */\nfunction checkSizeSelection(event) {\n var sizeSelector = $('#quickViewModal .custom-select.form-control.select-TEC_size');\n if (sizeSelector) {\n if ($('.size-field').length > 0) { \n if ($(\".size-field.selected\").length === 0) {\n event.preventDefault();\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}\n\n$('.tec-product').on('click',function(){\n var product = $(this).data('ga');\n var product_posi = $(this).closest(\".tec-search\").data('position');\n dataLayerPushOld({ ecommerce: null }); \n dataLayerPushOld({\n 'event': 'productClick',\n 'ecommerce': {\n 'click': {\n 'products': [{\n 'id': \"{\" + product.id + \"}\",\n 'name': \"{\" + product.productName + \"}\",\n 'price': \"{\" + product.price.sales.value + \"}\",\n 'category': \"{\" + product.productData.category + \"}\",\n 'brand': \"{\" + product.brand + \"}\",\n 'variant': \"{\" + product.productData.variant + \"}\",\n 'position': \"{\" + product_posi + \"}\"\n }]\n }\n }\n });\n});\n/**\n * Generates the modal window on the first call.\n *\n */\nfunction getModalHtmlElement() {\n if ($('#quickViewModal').length !== 0) {\n $('#quickViewModal').remove();\n }\n if (navigator.platform.toUpperCase().indexOf('WIN') >= 0) {\n var customLineHeight = \"customLineHeight\";\n }\n var htmlString = ''\n + '
        '\n + ''\n + `
        `\n + ''\n + '
        '\n + '
        '\n + ' '\n + '
        '\n + '
        '\n + '
        '\n + '
        '\n + '
        ';\n $('body').append(htmlString);\n}\n\n/**\n * @typedef {Object} QuickViewHtml\n * @property {string} body - Main Quick View body\n * @property {string} footer - Quick View footer content\n */\n\n/**\n * Parse HTML code in Ajax response\n *\n * @param {string} html - Rendered HTML from quickview template\n * @return {QuickViewHtml} - QuickView content components\n */\nfunction parseHtml(html) {\n var $html = $('
        ').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/**\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 */\nfunction fillModalElement(selectedValueUrl) {\n $('.modal-body').spinner().start();\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n dataType: 'json',\n success: function (data) {\n var parsedHtml = parseHtml(data.renderedTemplate);\n\n $('.modal-body').empty();\n $('.modal-body').html(parsedHtml.body);\n $('.modal-footer').html(parsedHtml.footer);\n $('#quickViewModal .full-pdp-link').attr('href', data.productUrl);\n $('#quickViewModal .size-chart').attr('href', data.productUrl);\n $('#quickViewModal .modal-header .close .sr-only').text(data.closeButtonText);\n $('#quickViewModal .enter-message').text(data.enterDialogMessage);\n $('#quickViewModal').modal('show');\n $('body').trigger('quickview:ready');\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 $(document).on(\"click\", \".size-field\", function(event) {\n event.preventDefault();\n event.stopPropagation();\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 SizeSelected();\n });\n \n SizeSelected();\n Quantity();\n checkSizeSelection(event);\n productInfo();\n $('.tec-badge span').each(function() {\n if ($(this).text().trim() !== '') {\n $(this).closest('.tec-badge').addClass('badge-exist');\n }\n });\n $('.quantity-select').select2({\n minimumResultsForSearch: -1,\n }).on('select2:open', () => {\n $(\".select2-container--default\").addClass('select2-b2b-quantity');\n });\n if ($('.size-field.selected').length === 0 && $('.size-field').length > 0) {\n $(\"select.quantity-select\").html('');\n $('.label-select-size').parents('.add-to-cart-global').removeClass('btn-primary').addClass('btn-blue disabled-btn');\n }\n\n var $select = $('.custom-select.select-size');\n var $selectAllSizeContainer = $('.select-all-size');\n \n if ($select.find('option').length > 0) {\n $selectAllSizeContainer.empty();\n \n $select.find('option').each(function () {\n var $option = $(this);\n var sizeValue = $option.text().trim();\n var dataAttrValue = $option.attr('value');\n var dataProductId = new URL(dataAttrValue).searchParams.get('pid');\n var isDisabled = $option.is(':disabled') ? 'size-unselectable' : 'selectable';\n \n if ($selectAllSizeContainer.find(`[data-size-value=\"${sizeValue}\"]`).length === 0) {\n var sizeBlock = `\n
        \n \n ${sizeValue}\n \n
        `;\n \n $selectAllSizeContainer.append(sizeBlock);\n }\n });\n \n $selectAllSizeContainer.show();\n }\n\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n\n\n/**\n * Initialize event listeners for quick view modal\n */\nmodule.exports = {\n showQuickview: function () {\n $('body').on('click', '.quickview', function (e) {\n e.preventDefault();\n var selectedValueUrl = $(this).closest('a.quickview').attr('href');\n $(e.target).trigger('quickview:show');\n getModalHtmlElement();\n fillModalElement(selectedValueUrl);\n });\n },\n focusQuickview: function () {\n $('body').on('shown.bs.modal', '#quickViewModal', function () {\n var errorMessage = $('#quickViewModal .size-error-message')[0];\n if(errorMessage) {\n $('#quickViewModal .custom-select.form-control').on('change', function() {\n if ($(\".size-field.selected\").length > 0) {\n $('#quickViewModal .size-error-message').hide();\n }\n });\n\n $('#quickViewModal .quantity-select, #quickViewModal .add-to-cart-global').on('click', checkSizeSelection);\n }\n $('#quickViewModal .close').focus();\n });\n },\n trapQuickviewFocus: function () {\n $('body').on('keydown', '#quickViewModal', function (e) {\n var focusParams = {\n event: e,\n containerSelector: '#quickViewModal',\n firstElementSelector: '.full-pdp-link',\n lastElementSelector: '.add-to-cart-global',\n nextToLastElementSelector: '.modal-footer .quantity-select'\n };\n focusHelper.setTabNextFocus(focusParams);\n });\n },\n availability: base.availability,\n addToCart: base.addToCart,\n showSpinner: function () {\n $('body').on('product:beforeAddToCart', function (e, data) {\n $(data).closest('.modal-content').spinner().start();\n });\n },\n hideDialog: function () {\n $('body').on('product:afterAddToCart', function () {\n $('#quickViewModal').modal('hide');\n });\n },\n beforeUpdateAttribute: function () {\n $('body').on('product:beforeAttributeSelect', function () {\n $('.modal.show .modal-content').spinner().start();\n });\n },\n updateAttribute: function () {\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)\n .find('.product-id').text(response.data.product.id);\n } else if ($('.set-items').length) {\n response.container.find('.product-id').text(response.data.product.id);\n } else {\n $('.modal.show .product-quickview').data('pid', response.data.product.id);\n $('.modal.show .full-pdp-link')\n .attr('href', response.data.product.selectedProductUrl);\n }\n if ($('.size-field.selected').length === 0 && $('.size-field').length > 0 && $('.size-field.selectable').length > 0 ) {\n $('.label-select-size').parents('.add-to-cart-global').removeClass('btn-primary').addClass('btn-blue disabled-btn');\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 } else {\n $('.add-to-cart-global').find('.label-select-size').removeClass('d-block').addClass('d-none');\n $('.add-to-cart-global').find('.label-add-to-cart').removeClass('d-none').addClass('d-block');\n }\n if ($('.size-field').length > 0 && $('.size-field.selectable').length < 1 ) {\n $('.label-select-size').parents('.add-to-cart-global').removeClass('btn-blue').addClass('btn-primary disabled-btn');\n }\n });\n },\n updateAddToCart: function () {\n $('body').on('product:updateAddToCart', function (e, response) {\n // update local add to cart (for sets)\n $('button.add-to-cart-global', response.$productContainer)\n .toggleClass('disabled-btn', (!response.product.readyToOrder || !response.product.available));\n\n // update global add to cart (single products, bundles)\n var dialog = $(response.$productContainer)\n .closest('.quick-view-dialog');\n\n $('.add-to-cart-global', dialog).attr('disabled',\n !$('.global-availability', dialog).data('ready-to-order')\n || !$('.global-availability', dialog).data('available')\n );\n var $productContainer = $(this).closest('.product-detail');\n var errorMessage = $productContainer.find('.size-error-message');\n var sizeSelector = $productContainer.find('.custom-select.form-control.select-TEC_size');\n \n if (sizeSelector.length && errorMessage.length) {\n if ($('.size-field.selected').length === 0) {\n errorMessage.css('display', 'block');\n event.preventDefault();\n return;\n } else {\n errorMessage.css('display', 'none');\n }\n }\n \n if ($(this).hasClass('disabled-btn')) {\n return;\n } \n });\n },\n updateAvailability: function () {\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};\n","'use strict';\n\nvar processInclude = require('base/util');\n\n$(document).ready(function () {\n processInclude(require('./search/search'));\n processInclude(require('./product/quickView'));\n processInclude(require('./product/product'));\n});\n","'use strict';\n\n/**\n * Update DOM elements with Ajax results\n *\n * @param {Object} $results - jQuery DOM element\n * @param {string} selector - DOM element to look up in the $results\n * @return {undefined}\n */\nfunction updateDom($results, selector) {\n var $updates = $results.find(selector);\n $(selector).empty().html($updates.html());\n}\n\n/**\n * Keep refinement panes expanded/collapsed after Ajax refresh\n *\n * @param {Object} $results - jQuery DOM element\n * @return {undefined}\n */\nfunction handleRefinements($results) {\n $('.refinement.active').each(function () {\n $(this).removeClass('active');\n var activeDiv = $results.find('.' + $(this)[0].className.replace(/ /g, '.'));\n activeDiv.addClass('active');\n activeDiv.find('button.title').attr('aria-expanded', 'true');\n });\n\n updateDom($results, '.refinements');\n}\n\n/**\n * Parse Ajax results and updated select DOM elements\n *\n * @param {string} response - Ajax response HTML code\n * @return {undefined}\n */\nfunction parseResults(response) {\n var $results = $(response);\n var specialHandlers = {\n '.refinements': handleRefinements\n };\n\n // Update DOM elements that do not require special handling\n [\n '.grid-header',\n '.header-bar',\n '.header.page-title',\n '.product-grid',\n '.show-more',\n '.filter-bar'\n ].forEach(function (selector) {\n updateDom($results, selector);\n });\n\n Object.keys(specialHandlers).forEach(function (selector) {\n specialHandlers[selector]($results);\n });\n}\n\nfunction parseResultsMobile(response) {\n var $results = $(response);\n\n // Update DOM elements that do not require special handling\n [\n '.grid-header',\n '.header-bar',\n '.header.page-title',\n '.product-grid',\n '.show-more',\n ].forEach(function (selector) {\n updateDom($results, selector);\n });\n\n}\n\n/**\n * This function retrieves another page of content to display in the content search grid\n * @param {JQuery} $element - the jquery element that has the click event attached\n * @param {JQuery} $target - the jquery element that will receive the response\n * @return {undefined}\n */\nfunction getContent($element, $target) {\n var showMoreUrl = $element.data('url');\n $.spinner().start();\n $.ajax({\n url: showMoreUrl,\n method: 'GET',\n success: function (response) {\n $target.append(response);\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n/**\n * Update sort option URLs from Ajax response\n *\n * @param {string} response - Ajax response HTML code\n * @return {undefined}\n */\nfunction updateSortOptions(response) {\n var $tempDom = $('
        ').append($(response));\n var sortOptions = $tempDom.find('.grid-footer').data('sort-options').options;\n sortOptions.forEach(function (option) {\n $('option.' + option.id).val(option.url);\n });\n}\n\nmodule.exports = {\n filter: function () {\n // Display refinements bar when Menu icon clicked\n $('.container').on('click', 'button.filter-results', function () {\n $('.refinement-bar, .modal-background').show();\n $('.refinement-bar').siblings().attr('aria-hidden', true);\n $('.refinement-bar').closest('.row').siblings().attr('aria-hidden', true);\n $('.refinement-bar').closest('.tab-pane.active').siblings().attr('aria-hidden', true);\n $('.refinement-bar').closest('.container.search-results').siblings().attr('aria-hidden', true);\n $('.refinement-bar .close').focus();\n $('body').css('overflow-y','hidden');\n });\n },\n\n closeRefinements: function () {\n // Refinements close button\n $('.container').on('click', '.refinement-bar button.validate, .modal-background,.refinement-bar button.close-refinement-popin', function () {\n $('.refinement-bar, .modal-background').hide();\n $('.refinement-bar').siblings().attr('aria-hidden', false);\n $('.refinement-bar').closest('.row').siblings().attr('aria-hidden', false);\n $('.refinement-bar').closest('.tab-pane.active').siblings().attr('aria-hidden', false);\n $('.refinement-bar').closest('.container.search-results').siblings().attr('aria-hidden', false);\n $('.btn.filter-results').focus();\n $('body').css('overflow-y','auto');\n });\n },\n order: function () {\n // Display refinements bar when Menu icon clicked\n $('.container').on('click', 'button.order-results', function () {\n $('.refinement-bar-order, .modal-background').show();\n $('.refinement-bar-order').siblings().attr('aria-hidden', true);\n $('.refinement-bar-order').closest('.row').siblings().attr('aria-hidden', true);\n $('.refinement-bar-order').closest('.tab-pane.active').siblings().attr('aria-hidden', true);\n $('.refinement-bar-order').closest('.container.search-results').siblings().attr('aria-hidden', true);\n $('.refinement-bar-order .close').focus();\n });\n },\n\n closeorder: function () {\n // Refinements close button\n $('.container').on('click', '.refinement-bar-order button.validate, .modal-background,.refinement-bar-order button.btn-close-trie', function () {\n $('.refinement-bar-order, .modal-background').hide();\n $('.refinement-bar-order').siblings().attr('aria-hidden', false);\n $('.refinement-bar-order').closest('.row').siblings().attr('aria-hidden', false);\n $('.refinement-bar-order').closest('.tab-pane.active').siblings().attr('aria-hidden', false);\n $('.refinement-bar-order').closest('.container.search-results').siblings().attr('aria-hidden', false);\n $('.btn.filter-results').focus();\n });\n $('.container').on('click', '.refinement-bar-order .close-refinement', function (e) {\n e.preventDefault();\n var parentRefinement = $(this).parents('.refinement-bar-order');\n parentRefinement.find('.refinements-order .check-square').removeClass('checked');\n });\n },\n\n resize: function () {\n // Close refinement bar and hide modal background if user resizes browser\n $(window).resize(function () {\n $('.refinement-bar, .modal-background').hide();\n $('.refinement-bar').siblings().attr('aria-hidden', false);\n $('.refinement-bar').closest('.row').siblings().attr('aria-hidden', false);\n $('.refinement-bar').closest('.tab-pane.active').siblings().attr('aria-hidden', false);\n $('.refinement-bar').closest('.container.search-results').siblings().attr('aria-hidden', false);\n });\n },\n\n sort: function () {\n // Handle sort order menu selection\n $('.container').on('click', '.refinements-order:not(.refinements-order-mobile) .values button', function (e) {\n e.preventDefault();\n $.spinner().start();\n var $clickedButton = $(this);\n var url = $(this).data('href');\n $(this).trigger('search:sort', url);\n \n $.ajax({\n url: url,\n method: 'GET',\n success: function (response) {\n $('.product-grid').empty().html(response);\n\n var selectedText = $clickedButton.find('span[aria-hidden=\"true\"]').text().trim();\n $('.refinement-trie .accordion-title h3 .title-trie-text').text(selectedText);\n $('.filter-trie-block .order-selected').empty().text(selectedText);\n applyScrolling();\n paginationPlp();\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n \n $(this).closest('.values').find('button').each(function () {\n $(this).find('.check-square').removeClass('checked');\n $(this).find('span').removeClass('selected');\n });\n $(this).find('.check-square').addClass('checked');\n $(this).find('span').addClass('selected');\n });\n },\n sortMobile: function () {\n // Handle sort order menu selection\n $('.container').on('click', '.refinements-order.refinements-order-mobile .values button', function (e) {\n $(this).closest('.values').find('button').each(function () {\n $(this).find('.check-square').removeClass('checked');\n $(this).find('span').removeClass('selected');\n });\n $(this).find('.check-square').addClass('checked');\n $(this).find('span').addClass('selected');\n });\n\n $('.container').on('click','.refinement-bar-order .filter-footer .btn-primary', function () {\n var $selectedOption = $('.refinements-order-mobile .values button .check-square.checked');\n var $selectedButton = $selectedOption.parents('button');\n\n if ($selectedButton.length > 0) {\n var url = $selectedButton.data('href');\n $.spinner().start();\n \n $.ajax({\n url: url,\n method: 'GET',\n success: function (response) {\n $('.product-grid').empty().html(response);\n var selectedText = $selectedButton.find('span[aria-hidden=\"true\"]').text().trim();\n $('.refinement-trie .accordion-title h3 .title-trie-text').text(selectedText);\n $('.filter-trie-block .order-selected').empty().text(selectedText);\n \n applyScrolling();\n fixedRefinementBarMobile();\n paginationPlp();\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n });\n },\n\n showMore: function () {\n // Show more products\n $('.container').on('click', '.show-more button', function (e) {\n e.stopPropagation();\n var showMoreUrl = $(this).data('url');\n var pageNumber = $('#next-page-href').data('page-number');\n e.preventDefault();\n\n $.spinner().start();\n $(this).trigger('search:showMore', e);\n $.ajax({\n url: showMoreUrl,\n data: { \n selectedUrl: showMoreUrl,\n pageNumber: pageNumber\n },\n method: 'GET',\n success: function (response) {\n $('.grid-footer').replaceWith(response);\n updateSortOptions(response);\n $.spinner().stop();\n var tecCountProduct = $('.tec-product-tile').length;\n $(\".tec-number-product .tec-load-more-p\").text(function (i, txt) {\n return txt.replace(/\\d+/, tecCountProduct);\n });\n applyScrolling();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n },\n\n generatePrevisousPlpLink: function() {\n $(document).on('click', '.tec-remember', function(event) {\n // Check if the clicked element is the parent or a child (the button)\n if (!$(event.target).is('.quickview') || !$(event.target).closest('.quickview').length > 0) {\n const pid = $(this).data('pid');\n var filterUrl = $('.grid-footer .permalink').val();\n var scrollPosition = $(document).scrollTop();\n sessionStorage.setItem('scrollPosition_PLP', scrollPosition.toString());\n window.history.replaceState(null, \"\", decodeURI(filterUrl));\n }\n });\n },\n applyFilter: function () {\n // Handle refinement value selection and reset click\n $('.container').on(\n 'click',\n '.filtre-desktop .refinements li button,.refinement-bar button.reset,.filtre-desktop .filter-value button,.filtre-desktop .swatch-filter button',\n function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n var $target = $(e.target);\n\n $.spinner().start();\n $(this).trigger('search:filter', e);\n $.ajax({\n url: $(this).data('href'),\n data: {\n page: $('.grid-footer').data('page-number'),\n selectedUrl: $(this).data('href')\n },\n method: 'GET',\n success: function (response) {\n parseResults(response);\n paginationPlp();\n $.spinner().stop();\n $(\".filtres .accordion-title\").click(function(e) {\n var accordionItem = $(this).attr(\"data-tab\");\n $(this).toggleClass(\"tec-arrow\");\n $(this).siblings(\".accordion-content[data-tab='\" + accordionItem + \"']\").slideToggle();\n });\n\n if ($target.is('.refinement-bar button.reset')) {\n $('.filtre-desktop .secondary-bar .reset').removeClass('d-block').addClass('d-none');\n } else {\n $('.filtre-desktop .secondary-bar .reset').removeClass('d-none').addClass('d-block');\n }\n\n if ($(window).width() < 840) {\n var countChecked = $('.refinement-bar-block-desktop .check-square.checked').length;\n if (countChecked > 0) {\n $('.count-filter').append('(' + countChecked + ')');\n }\n var $clickedButton = $('.refinements-order-mobile .values button');\n var selectedText = $clickedButton.find('span[aria-hidden=\"true\"].selected').text().trim();\n $('.refinement-trie .accordion-title h3 .title-trie-text').text(selectedText);\n $('.filter-trie-block .order-selected').empty().text(selectedText);\n }\n var tecCountProduct = $('.grid-footer').data('page-count');\n $(\".results-count h2\").text(function (i, txt) {\n return txt.replace(/\\d+/, tecCountProduct);\n });\n applyScrolling();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n },\n applyFilterMobile: function () {\n var selectedFilters = {};\n \n // Capture les paramètres initiaux au chargement\n var initialParams = {};\n const urlParams = new URLSearchParams(window.location.search);\n for (const [key, value] of urlParams.entries()) {\n if (!initialParams[key]) {\n initialParams[key] = [];\n }\n initialParams[key].push(value);\n }\n \n $('.container').on(\n 'click',\n '.filtre-mobile .refinements li button ,.filtre-mobile .filter-value button,.filtre-mobile .swatch-filter button',\n function (e) {\n e.preventDefault();\n e.stopPropagation();\n \n var $button = $(this);\n $button.find('.check-square').toggleClass('checked');\n\n var parentRefinement = $('.filtre-mobile .check-square').parents('.refinement-bar');\n\n if ($('.filtre-mobile .check-square.checked').length > 0) {\n parentRefinement.find('.result-count button').removeClass('disbaled-button');\n } else {\n parentRefinement.find('.result-count button').addClass('disbaled-button');\n }\n \n var filterUrl = $button.data('href');\n \n if (filterUrl) {\n var urlParams = new URLSearchParams(filterUrl.split('?')[1]);\n \n for (const [key, value] of urlParams.entries()) {\n if (!selectedFilters[key]) {\n selectedFilters[key] = [];\n }\n \n // Ajouter ou retirer les valeurs dynamiques\n if ($button.find('.check-square').hasClass('checked')) {\n if (!selectedFilters[key].includes(value)) {\n selectedFilters[key].push(value);\n }\n } else {\n const index = selectedFilters[key].indexOf(value);\n if (index > -1) {\n selectedFilters[key].splice(index, 1);\n }\n }\n }\n \n if (!selectedFilters.baseUrl) {\n selectedFilters.baseUrl = filterUrl.split('?')[0];\n }\n }\n }\n );\n \n $('.container').on('click', '.refinemnt-footer .result-count button', function (e) {\n e.preventDefault();\n \n if (Object.keys(selectedFilters).length > 1) {\n $.spinner().start();\n \n var combinedParams = new URLSearchParams();\n \n // Ajouter les filtres dynamiques restants\n for (const key in selectedFilters) {\n if (key !== 'baseUrl') {\n selectedFilters[key].forEach(function (value) {\n combinedParams.append(key, value);\n });\n }\n }\n \n var finalUrl = (selectedFilters.baseUrl || window.location.href.split('?')[0]) + '?' + combinedParams.toString();\n\n $.ajax({\n url: finalUrl,\n method: 'GET',\n success: function (response) {\n parseResultsMobile(response);\n fixedRefinementBarMobile();\n paginationPlp();\n $.spinner().stop();\n \n selectedFilters = {}; // Réinitialise uniquement les filtres dynamiques\n $('.reset-mobile.reset').removeClass('d-none').addClass('d-block');\n $('.reset-mobile-header.reset').on('click', function () {\n $('.reset-mobile.reset').removeClass('d-block').addClass('d-none');\n });\n $('.reset-mobile.reset').on('click', function () {\n $(this).removeClass('d-block').addClass('d-none');\n });\n \n if ($(window).width() < 840) {\n var countChecked = $('.filtre-mobile .check-square.checked').length;\n if (countChecked > 0) {\n $('.count-filter').append('(' + countChecked + ')');\n }\n var $selectedOption = $('.refinements-order-mobile .values button .check-square.checked');\n var $selectedButton = $selectedOption.parents('button');\n var selectedText = $selectedButton.find('span[aria-hidden=\"true\"]').text().trim();\n if ($selectedButton.length > 0) {\n $('.refinement-trie .accordion-title h3 .title-trie-text').text(selectedText);\n $('.filter-trie-block .order-selected').empty().text(selectedText);\n }\n }\n \n var tecCountProduct = $('.tec-product-tile').length;\n $(\".results-count h2\").text(function (i, txt) {\n return txt.replace(/\\d+/, tecCountProduct);\n });\n \n applyScrolling();\n $('.secondary-bar .reset').removeClass('d-none').addClass('d-block');\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n });\n\n $('.container').on('click', '.refinement-bar .close-refinement', function (e) {\n e.preventDefault();\n var parentRefinement = $(this).parents('.refinement-bar');\n parentRefinement.find('.accordion-item .check-square').removeClass('checked');\n });\n },\n\n showContentTab: function () {\n // Display content results from the search\n $('.container').on('click', '.content-search', function () {\n if ($('#content-search-results').html() === '') {\n getContent($(this), $('#content-search-results'));\n }\n });\n\n // Display the next page of content results from the search\n $('.container').on('click', '.show-more-content button', function () {\n getContent($(this), $('#content-search-results'));\n $('.show-more-content').remove();\n });\n }\n};\n\n$('.product-comparison').addClass('tec-search');\n\n$(\".tileVariationAttributes .size-plp\").each(function () {\n var $block = $(this);\n var $items = $block.find(\"a\");\n\n if ($items.length > 3) {\n $items.slice(0, 3).show();\n\n $items.slice(3).hide();\n\n var remainingCount = $items.length - 3;\n\n var $remainingSpan = $('+' + remainingCount + '');\n\n $block.append($remainingSpan);\n }\n});\n\n$('.tec-badge span').each(function() {\n if ($(this).text().trim() !== '') {\n $(this).closest('.tec-badge').addClass('badge-exist');\n }\n});\n\n$(document).on('click', '.click-more-filtre', function() {\n $('.custom-scroll').mCustomScrollbar('scrollTo', 'bottom', {\n scrollInertia: 500 \n });\n $(this).hide();\n});\n\nvar maxVisibleItems = 5;\n\n$('.refinements .accordion-item').each(function () {\n var $list = $(this).find('.values.content');\n var $listItems = $list.find('li');\n var $seeMoreBtn = $listItems.siblings('.see-more-btn');\n\n if ($listItems.length > maxVisibleItems) {\n $listItems.slice(maxVisibleItems).hide();\n $seeMoreBtn.removeClass('d-none').addClass('d-block');\n }\n\n $seeMoreBtn.on('click', function () {\n $listItems.show();\n $(this).removeClass('d-block').addClass('d-none');\n });\n});\n\nfunction applyScrolling () {\n var viewSize = $(window).width();\n\n if(viewSize > 769) {\n var heightOfHeader = $('header').outerHeight();\n var heightbreadCrumb = $('.breadcrumb').outerHeight();\n var $firstChildBlock = $('.first-part-scrolling');\n \n $firstChildBlock.css('top',(heightOfHeader + heightbreadCrumb) + 'px');\n \n var $childBlock = $('.second-part-scrolling');\n var childHeight = $childBlock.outerHeight(true);\n }\n}\n\nvar parentRefinement = $('.filtre-mobile .check-square').parents('.refinement-bar');\n\nif ($('.filtre-mobile .check-square.checked').length > 0) {\n parentRefinement.find('.result-count button').removeClass('disbaled-button');\n} else {\n parentRefinement.find('.result-count button').addClass('disbaled-button');\n}\n\napplyScrolling();\n\n\nfunction fixedRefinementBarMobile() {\n const $header = $('.mobile-grid-header');\n const $tiles = $('.col-md-3.tec-search.tec-product-tile .product');\n const headerInitialOffset = $header.offset().top;\n \n let lastScrollTop = 0;\n \n function areAllTilesAboveViewport() {\n const windowTop = $(window).scrollTop();\n \n return $tiles.length > 0 && $tiles.toArray().every(tile => {\n const tileBottom = $(tile).offset().top + $(tile).outerHeight();\n return tileBottom <= windowTop;\n });\n }\n \n $(window).on('scroll', function () {\n const scrollTop = $(window).scrollTop();\n \n if (scrollTop > lastScrollTop) {\n // Scroll vers le bas\n if (areAllTilesAboveViewport()) {\n $header.addClass('hidden-header');\n } else if (scrollTop >= headerInitialOffset) {\n $header.addClass('fixed-header').removeClass('hidden-header');\n }\n } else {\n // Scroll vers le haut\n if (scrollTop <= headerInitialOffset) {\n $header.removeClass('fixed-header');\n } else {\n $header.addClass('fixed-header').removeClass('hidden-header');\n }\n }\n \n lastScrollTop = scrollTop <= 0 ? 0 : scrollTop;\n });\n }\n \n\nfixedRefinementBarMobile();\n\nfunction paginationPlp() {\n const maxVisiblePages = 10;\n const $paginationItems = $('.pagination .page-item').not('.prev-page, .next-page');\n \n let currentPageIndex = $paginationItems.filter('.disabled').index() - 1;\n \n function updatePaginationDisplay() {\n $paginationItems.hide();\n \n let startPage = Math.max(0, currentPageIndex - Math.floor(maxVisiblePages / 2));\n let endPage = Math.min(startPage + maxVisiblePages, $paginationItems.length);\n \n if (endPage - startPage < maxVisiblePages) {\n startPage = Math.max(0, endPage - maxVisiblePages);\n }\n \n $paginationItems.slice(startPage, endPage).show();\n \n $paginationItems.removeClass('disabled');\n \n if (currentPageIndex >= 0 && currentPageIndex < $paginationItems.length) {\n $paginationItems.eq(currentPageIndex).addClass('disabled');\n }\n \n localStorage.setItem('currentPageIndex', currentPageIndex);\n }\n \n function handlePageChange(direction) {\n if (direction === 'next' && currentPageIndex + 1 < $paginationItems.length) {\n currentPageIndex++;\n } else if (direction === 'prev' && currentPageIndex > 0) {\n currentPageIndex--;\n }\n updatePaginationDisplay();\n }\n \n $('.pagination .prev-page a').on('click', function (e) {\n handlePageChange('prev');\n });\n \n $('.pagination .next-page a').on('click', function (e) {\n handlePageChange('next');\n });\n \n updatePaginationDisplay();\n}\n\npaginationPlp();\n\nvar $selectedOption = $('.order-desktop .refinements-order:not(.refinements-order-mobile) .values button .check-square.checked');\nvar $selectedButton = $selectedOption.parents('button');\n\nif ($selectedButton.length > 0) {\n var selectedText = $selectedButton.find('span[aria-hidden=\"true\"]').text().trim();\n $('.refinement-trie .accordion-title h3 .title-trie-text').empty().text(selectedText);\n $('.filter-trie-block .order-selected').empty().text(selectedText);\n\n function syncCheckedState() {\n\n $('.refinements-order:not(.refinements-order-mobile) .values button').each(function() {\n var selectedText = $(this).find('span[aria-hidden=\"true\"]').text().trim();\n var isChecked = $(this).find('i').hasClass('checked');\n\n $('.refinements-order-mobile .values button').each(function() {\n var buttonTextSelected = $(this).find('span[aria-hidden=\"true\"]');\n var buttonText = $(this).find('span[aria-hidden=\"true\"]').text().trim();\n if (buttonText === selectedText) {\n if (isChecked) {\n $(this).find('i').addClass('checked');\n buttonTextSelected.addClass('selected');\n } else {\n $(this).find('i').removeClass('checked');\n buttonTextSelected.removeClass('selected');\n }\n }\n });\n });\n }\n\n syncCheckedState();\n}\n\n\n\n\n"],"sourceRoot":""}