wickes-css2 2.105.0-develop.1 → 2.105.0-develop.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/Readme.md +5 -4
  2. package/build/css/category-main.css +1 -1
  3. package/build/css/components/checkout-payment-details-v2.css +1 -1
  4. package/build/css/homepage-main.css +1 -1
  5. package/build/css/kitchen-plp-main.css +1 -1
  6. package/build/css/main.css +1 -1
  7. package/build/css/my-account-main-v2.css +1 -1
  8. package/build/css/my-account-main.css +1 -1
  9. package/build/css/pages/checkout-new.css +1 -1
  10. package/build/css/pages/checkout.css +1 -1
  11. package/build/css/pages/my-account-v2.css +1 -1
  12. package/build/css/pages/page_checkout_delivery-new.css +1 -1
  13. package/build/css/pages/page_discount.css +1 -1
  14. package/build/css/pages/page_product_search.css +1 -1
  15. package/build/css/pages/page_products-list-combined.css +1 -1
  16. package/build/css/pages/page_products-list.css +1 -1
  17. package/build/css/pages/tradePro-rewards.css +1 -1
  18. package/build/css/pdp-main-before-combine.css +1 -1
  19. package/build/css/pdp-main-critical.css +1 -1
  20. package/build/css/pdp-main-non-critical.css +1 -1
  21. package/build/css/pdp-main.css +1 -1
  22. package/build/css/plp-main.css +1 -1
  23. package/build/css/store-locator-main.css +1 -1
  24. package/build/img/google-pay-mark.svg +11 -0
  25. package/build/img/quick-filters/bath1.svg +10 -0
  26. package/build/img/quick-filters/bath3.svg +3 -0
  27. package/build/img/quick-filters/bath4.svg +10 -0
  28. package/build/img/quick-filters/bath5.svg +10 -0
  29. package/build/img/quick-filters/image1.jpg +0 -0
  30. package/build/img/quick-filters/image2.jpg +0 -0
  31. package/build/img/quick-filters/image3.jpg +0 -0
  32. package/build/js/account-members.min.js +1 -1
  33. package/build/js/basket.min.js +2 -2
  34. package/build/js/bundle.min.js +1 -1
  35. package/build/js/checkout.min.js +2 -2
  36. package/build/js/emulation.min.js +12140 -11596
  37. package/build/js/general.bundle.min.js +1 -1
  38. package/build/js/kitchen/kitchen-plp.min.js +1 -9
  39. package/build/js/merged-checkout.min.js +2 -2
  40. package/build/js/mini-basket-slider.min.js +1 -1
  41. package/build/js/my-account.min.js +1 -1
  42. package/build/js/page/basket/basket-update-cart-action.js +59 -56
  43. package/build/js/page/basket/basket-update-cart.js +27 -27
  44. package/build/js/page/basket/basket-utils.js +40 -33
  45. package/build/js/page/basket/mini-basket-total.js +70 -66
  46. package/build/js/page/basket/quantity-change-handler.js +73 -55
  47. package/build/js/page/basket/update-quantity-operation.js +39 -30
  48. package/build/js/page/basket/update-quantity.js +62 -62
  49. package/build/js/page/basket-v2.js +360 -225
  50. package/build/js/page/billie-business-type.js +27 -27
  51. package/build/js/page/checkout-payment-details.js +301 -299
  52. package/build/js/page/components/billie-modal.js +31 -0
  53. package/build/js/page/components/discounts.js +39 -36
  54. package/build/js/page/components/mini-basket-slider.js +604 -545
  55. package/build/js/page/filters/desktop-nav.js +64 -0
  56. package/build/js/page/filters/mobile-nav.js +93 -0
  57. package/build/js/page/filters/plp-filters-chips.js +92 -0
  58. package/build/js/page/filters/plp-filters-mobile.js +150 -0
  59. package/build/js/page/filters/plp-filters-panel.js +123 -0
  60. package/build/js/page/filters/plp-filters-utils.js +66 -0
  61. package/build/js/page/filters/plp-filters.js +268 -0
  62. package/build/js/page/filters/sort-by.js +172 -0
  63. package/build/js/page/kitchen/colour-swatches.js +5 -2
  64. package/build/js/page/klarna-modal-scroll-disable.js +4 -4
  65. package/build/js/page/my-account.js +32 -47
  66. package/build/js/page/online-exclusive.js +28 -31
  67. package/build/js/page/quick-filter.js +108 -0
  68. package/build/js/page/search-filter.js +62 -0
  69. package/build/js/page/share-project-list.js +57 -0
  70. package/build/js/page/tradePro-rewards.js +69 -39
  71. package/build/js/page/utils/copy-to-clipboard.js +79 -47
  72. package/build/js/page/utils/helpers.js +14 -9
  73. package/build/js/page/utils/show-more-less.js +273 -0
  74. package/build/js/pdp.bundle.min.js +1 -1
  75. package/build/js/plp-filters.min.js +9 -0
  76. package/build/js/plp.bundle.min.js +1 -1
  77. package/build/js/project-list.min.js +143 -85
  78. package/build/js/search-filter.min.js +1 -0
  79. package/build/js/share-project-list.min.js +1 -0
  80. package/build/js/tradePro-rewards.min.js +1 -1
  81. package/package.json +4 -2
  82. package/src/components/.DS_Store +0 -0
  83. package/src/components/accordion.hbs +2 -2
  84. package/src/components/checkout-payment-details-v2.hbs +1 -1
  85. package/src/components/date-selection.hbs +25 -6
  86. package/src/components/generate-project-id.hbs +1 -1
  87. package/src/components/kitchen/dropdown.hbs +6 -3
  88. package/src/components/kitchen/filter-modal-content-kitchen.hbs +10 -0
  89. package/src/components/kitchen/filter-modal.hbs +10 -13
  90. package/src/components/kitchen/kitchen-card.hbs +1 -1
  91. package/src/components/kitchen/plp-filters.hbs +3 -1
  92. package/src/components/kitchen/sort-by.hbs +1 -1
  93. package/src/components/my-account/barcode.hbs +1 -3
  94. package/src/components/my-account/cards-swap.hbs +10 -0
  95. package/src/components/my-account/clipboard-code-card.hbs +3 -3
  96. package/src/components/my-account/discount.hbs +1 -1
  97. package/src/components/my-account/greetings.hbs +1 -1
  98. package/src/components/order-summary.hbs +1 -0
  99. package/src/components/price-block-v2.hbs +1 -0
  100. package/src/components/quick-filter.hbs +56 -0
  101. package/src/components/search-filter-modal-content.hbs +102 -0
  102. package/src/components/search-filter.hbs +121 -112
  103. package/src/components/shopping-list-with-share-list-v2.hbs +28 -10
  104. package/src/components/shopping-list.hbs +5 -5
  105. package/src/data/data_plp_load-more.json +1 -1
  106. package/src/data/data_quick-filter.json +508 -0
  107. package/src/data/my-account/data_my-account.json +9 -0
  108. package/src/elements/btn.hbs +7 -0
  109. package/src/img/google-pay-mark.svg +11 -0
  110. package/src/img/quick-filters/bath1.svg +10 -0
  111. package/src/img/quick-filters/bath3.svg +3 -0
  112. package/src/img/quick-filters/bath4.svg +10 -0
  113. package/src/img/quick-filters/bath5.svg +10 -0
  114. package/src/img/quick-filters/image1.jpg +0 -0
  115. package/src/img/quick-filters/image2.jpg +0 -0
  116. package/src/img/quick-filters/image3.jpg +0 -0
  117. package/src/js/components/cards-swap.js +74 -0
  118. package/src/js/components/general/accordion.js +44 -33
  119. package/src/js/components/general/cart-slider.js +19 -16
  120. package/src/js/components/general/create-popup-slider.js +168 -173
  121. package/src/js/components/pdp-billie-modal-scroll-reset.js +53 -0
  122. package/src/js/components/share-project-list.js +8 -5
  123. package/src/js/emulation/big-wins.js +1081 -904
  124. package/src/js/emulation/billie-modal.js +39 -18
  125. package/src/js/emulation/checkout-payment-details.js +47 -38
  126. package/src/js/emulation/custom-slider-emulation.js +17 -13
  127. package/src/js/emulation/filters-emulation.js +164 -0
  128. package/src/js/emulation/forms.js +360 -323
  129. package/src/js/emulation/mini-basket-data.js +1051 -923
  130. package/src/js/emulation/paymentLoader.js +17 -17
  131. package/src/js/emulation/pdf-file-loader.js +89 -91
  132. package/src/js/emulation/popover-mini-basket.js +246 -239
  133. package/src/js/emulation/product-counter.js +50 -0
  134. package/src/js/emulation/project-list-pdp.js +320 -316
  135. package/src/js/emulation/repayment-toggle.js +23 -24
  136. package/src/js/emulation/reset-filter-desktop.js +5 -0
  137. package/src/js/emulation/selectable.js +22 -18
  138. package/src/js/emulation/wismo-details.js +23 -31
  139. package/src/js/page/basket/basket-update-cart-action.js +59 -56
  140. package/src/js/page/basket/basket-update-cart.js +27 -27
  141. package/src/js/page/basket/basket-utils.js +40 -33
  142. package/src/js/page/basket/mini-basket-total.js +70 -66
  143. package/src/js/page/basket/quantity-change-handler.js +73 -55
  144. package/src/js/page/basket/update-quantity-operation.js +39 -30
  145. package/src/js/page/basket/update-quantity.js +62 -62
  146. package/src/js/page/basket-v2.js +360 -225
  147. package/src/js/page/billie-business-type.js +27 -27
  148. package/src/js/page/checkout-payment-details.js +301 -299
  149. package/src/js/page/components/billie-modal.js +31 -0
  150. package/src/js/page/components/discounts.js +39 -36
  151. package/src/js/page/components/mini-basket-slider.js +604 -545
  152. package/src/js/page/filters/desktop-nav.js +64 -0
  153. package/src/js/page/filters/mobile-nav.js +93 -0
  154. package/src/js/page/filters/plp-filters-chips.js +92 -0
  155. package/src/js/page/filters/plp-filters-mobile.js +150 -0
  156. package/src/js/page/filters/plp-filters-panel.js +123 -0
  157. package/src/js/page/filters/plp-filters-utils.js +66 -0
  158. package/src/js/page/filters/plp-filters.js +268 -0
  159. package/src/js/page/filters/sort-by.js +172 -0
  160. package/src/js/page/kitchen/colour-swatches.js +5 -2
  161. package/src/js/page/klarna-modal-scroll-disable.js +4 -4
  162. package/src/js/page/my-account.js +32 -47
  163. package/src/js/page/online-exclusive.js +28 -31
  164. package/src/js/page/quick-filter.js +108 -0
  165. package/src/js/page/search-filter.js +62 -0
  166. package/src/js/page/share-project-list.js +57 -0
  167. package/src/js/page/tradePro-rewards.js +69 -39
  168. package/src/js/page/utils/copy-to-clipboard.js +79 -47
  169. package/src/js/page/utils/helpers.js +14 -9
  170. package/src/js/page/utils/show-more-less.js +273 -0
  171. package/src/page_empty-shared-project-list-bicester-hub.html +4 -0
  172. package/src/page_empty-shopping-list_guest.html +1 -0
  173. package/src/page_kitchen-plp.html +2 -2
  174. package/src/page_my-account-installer.html +1 -1
  175. package/src/page_my-account-trade-pro-carousel-double.html +127 -0
  176. package/src/page_my-account-trade-pro-carousel.html +134 -0
  177. package/src/page_my-account-trade-pro.html +1 -1
  178. package/src/page_my-shopping-list-add-notes.html +1 -0
  179. package/src/page_my-shopping-list-energy.html +1 -0
  180. package/src/page_my-shopping-list-hide-download.html +3 -2
  181. package/src/page_my-shopping-list-pdf.html +2 -0
  182. package/src/page_my-shopping-list-saved-ref.html +1 -0
  183. package/src/page_my-shopping-list-wisdom-oos-registered.html +1 -0
  184. package/src/page_my-shopping-list-wisdom-oos.html +1 -0
  185. package/src/page_my-shopping-list-wisdom-partial-registered.html +1 -0
  186. package/src/page_my-shopping-list-wisdom-registered.html +1 -0
  187. package/src/page_my-shopping-list-wisdom.html +1 -0
  188. package/src/page_my-shopping-list.html +1 -0
  189. package/src/page_my-shopping-list_not-register.html +3 -0
  190. package/src/page_plp-with-paint.html +2 -7
  191. package/src/page_plp.html +2 -7
  192. package/src/page_plp_v2-energy-efficiency.html +1 -6
  193. package/src/page_plp_v2-favourite-products.html +6 -7
  194. package/src/page_plp_v2-quick-filter_colourSwatches_11.html +79 -0
  195. package/src/page_plp_v2-quick-filter_colourSwatches_5.html +79 -0
  196. package/src/page_plp_v2-quick-filter_iconAndText_5.html +79 -0
  197. package/src/page_plp_v2-quick-filter_iconAndText_9.html +79 -0
  198. package/src/page_plp_v2-quick-filter_iconOnly_11.html +79 -0
  199. package/src/page_plp_v2-quick-filter_iconOnly_5.html +79 -0
  200. package/src/page_plp_v2-quick-filter_imageAndText_5.html +79 -0
  201. package/src/page_plp_v2-quick-filter_imageAndText_9.html +79 -0
  202. package/src/page_plp_v2-quick-filter_textOnly_5.html +79 -0
  203. package/src/page_plp_v2-quick-filter_textOnly_9.html +79 -0
  204. package/src/page_plp_v2-vat.html +2 -7
  205. package/src/page_plp_v2.html +22 -9
  206. package/src/page_product-details-tile-steps-klarna-widget-with-method-ids.html +120 -0
  207. package/src/page_product_search-vat.html +2 -7
  208. package/src/page_product_search.html +2 -7
  209. package/src/page_project-list-generate-project-list-ID.html +3 -0
  210. package/src/page_project-list-vat.html +4 -0
  211. package/src/page_project-list-with-new-share-popup-android.html +16 -0
  212. package/src/page_project-list-with-new-share-popup-ios.html +16 -0
  213. package/src/page_project-list-with-new-share-popup.html +2 -1
  214. package/src/page_search-results.html +2 -7
  215. package/src/page_shared-project-list-bicester-hub.html +3 -1
  216. package/src/page_shopping-cart-v2-klarna-with-method-ids.html +50 -0
  217. package/src/page_tradepro-discount-app.html +1 -1
  218. package/src/page_tradepro-discount-double.html +109 -0
  219. package/src/page_tradepro-discount.html +36 -2
  220. package/src/partials/head.hbs +1 -0
  221. package/src/scss/common/_common.scss +10 -4
  222. package/src/scss/components/_accordion.scss +1 -3
  223. package/src/scss/components/_custom-slider.scss +17 -16
  224. package/src/scss/components/_date-selection-add-new-styles.scss +48 -7
  225. package/src/scss/components/_date-selection.scss +80 -1
  226. package/src/scss/components/{kitchen/_filter-modal.scss → _filter-modal.scss} +55 -4
  227. package/src/scss/components/{kitchen/_plp-filters.scss → _plp-filters.scss} +31 -13
  228. package/src/scss/components/_popover-mini-basket.scss +3 -3
  229. package/src/scss/components/_quick-filter.scss +288 -0
  230. package/src/scss/components/_search-filter.scss +95 -15
  231. package/src/scss/components/_shared-shopping-list.scss +22 -0
  232. package/src/scss/components/_shopping-list.scss +18 -8
  233. package/src/scss/components/_sort-by.scss +190 -0
  234. package/src/scss/components/checkout-chip.scss +2 -2
  235. package/src/scss/components/checkout-payment-details-v2.scss +10 -4
  236. package/src/scss/components/checkout-payment-repayment-terms.scss +1 -1
  237. package/src/scss/components/kitchen/_price-tooltip.scss +1 -1
  238. package/src/scss/components/kitchen/_price.scss +1 -1
  239. package/src/scss/components/my-account/_barcode.scss +9 -1
  240. package/src/scss/components/my-account/_cards-swap.scss +60 -0
  241. package/src/scss/components/my-account/_clipboard-code.scss +11 -3
  242. package/src/scss/components/my-account/_discount.scss +12 -2
  243. package/src/scss/globals/_global-components.scss +3 -0
  244. package/src/scss/helpers/_colors-semantic.scss +68 -68
  245. package/src/scss/helpers/_variables.scss +244 -196
  246. package/src/scss/kitchen-plp-main.scss +0 -4
  247. package/src/scss/main.scss +65 -65
  248. package/src/scss/pages/_checkout-confirmation-new.scss +49 -21
  249. package/src/scss/pages/my-account-v2.scss +42 -5
  250. package/src/scss/pages/page_discount.scss +8 -4
  251. package/src/scss/pages/page_product-details-v2.scss +1 -4
  252. package/src/scss/pages/page_product_search.scss +9 -1
  253. package/src/scss/pages/page_products-list-combined.scss +28 -24
  254. package/src/scss/pages/page_products-list.scss +8 -0
  255. package/src/scss/pages/tradePro-rewards.scss +3 -4
  256. package/src/scss/plp-main.scss +1 -0
  257. package/src/sitemap.html +40 -4
  258. package/build/img/google-pay-mark.png +0 -0
  259. package/build/js/page/accordion.js +0 -35
  260. package/build/js/page/kitchen/plp-filters-chips.js +0 -90
  261. package/build/js/page/kitchen/plp-filters-mobile.js +0 -72
  262. package/build/js/page/kitchen/plp-filters-panel.js +0 -119
  263. package/build/js/page/kitchen/plp-filters-utils.js +0 -65
  264. package/build/js/page/kitchen/plp-filters.js +0 -205
  265. package/build/js/page/kitchen/sort-by.js +0 -157
  266. package/src/img/google-pay-mark.png +0 -0
  267. package/src/js/components/general/search-filter.js +0 -21
  268. package/src/js/page/accordion.js +0 -35
  269. package/src/js/page/kitchen/plp-filters-chips.js +0 -90
  270. package/src/js/page/kitchen/plp-filters-mobile.js +0 -72
  271. package/src/js/page/kitchen/plp-filters-panel.js +0 -119
  272. package/src/js/page/kitchen/plp-filters-utils.js +0 -65
  273. package/src/js/page/kitchen/plp-filters.js +0 -205
  274. package/src/js/page/kitchen/sort-by.js +0 -157
@@ -1,6 +1,5 @@
1
1
  var Wick = Wick || {};
2
2
  Wick.onlineExclusive = (function () {
3
-
4
3
  let rangesToggler = $('.ranges-toggle'),
5
4
  rangesList = $('.ranges'),
6
5
  otherRanges = $('.other-ranges'),
@@ -27,8 +26,10 @@ Wick.onlineExclusive = (function () {
27
26
  otherRangesHeating = $('.other-ranges__item_heating');
28
27
 
29
28
  rangesToggler.on('click', function () {
30
- rangesToggler.toggleClass('border-bottom-rounded_false')
31
- .find('.icon').toggleClass('icon-rotated');
29
+ rangesToggler
30
+ .toggleClass('border-bottom-rounded_false')
31
+ .find('.icon')
32
+ .toggleClass('icon-rotated');
32
33
  if (window.innerWidth > 768) {
33
34
  rangesList.toggleClass('d-block border-bottom-rounded');
34
35
  } else if (window.innerWidth < 768) {
@@ -38,18 +39,17 @@ Wick.onlineExclusive = (function () {
38
39
  });
39
40
 
40
41
  if (window.innerWidth < 768) {
41
- rangesList.on( 'click', 'a', function(e) {
42
+ rangesList.on('click', 'a', function (e) {
42
43
  e.preventDefault();
43
44
  otherRanges.show();
44
45
 
45
- $(document).mouseup(function(e) {
46
- if (!rangesList.is(e.target) && rangesList.has(e.target).length === 0)
47
- {
46
+ $(document).mouseup(function (e) {
47
+ if (!rangesList.is(e.target) && rangesList.has(e.target).length === 0) {
48
48
  rangesList.hide();
49
49
  }
50
50
  });
51
51
 
52
- switch ($(this).parent().attr("data-value")) {
52
+ switch ($(this).parent().attr('data-value')) {
53
53
  case 'gardens-btn':
54
54
  rangesComponent.hide();
55
55
  gardensComponent.show();
@@ -96,15 +96,13 @@ Wick.onlineExclusive = (function () {
96
96
  otherRanges.hide();
97
97
  break;
98
98
  }
99
-
100
99
  });
101
- }
102
- else if (window.innerWidth >= 768) {
103
- rangesList.on( 'click', 'a', function(e) {
100
+ } else if (window.innerWidth >= 768) {
101
+ rangesList.on('click', 'a', function (e) {
104
102
  e.preventDefault();
105
103
  otherRanges.show();
106
104
 
107
- switch ($(this).parent().attr("data-value")) {
105
+ switch ($(this).parent().attr('data-value')) {
108
106
  case 'gardens-btn':
109
107
  rangesEl.removeClass('range-btn');
110
108
  $(this).addClass('range-btn');
@@ -171,10 +169,10 @@ Wick.onlineExclusive = (function () {
171
169
  break;
172
170
  }
173
171
  });
174
- otherRangesList.on( 'click', 'a', function(e) {
172
+ otherRangesList.on('click', 'a', function (e) {
175
173
  e.preventDefault();
176
174
 
177
- switch ($(this).parent().parent().attr("data-value")) {
175
+ switch ($(this).parent().parent().attr('data-value')) {
178
176
  case 'gardens-btn':
179
177
  rangesEl.removeClass('range-btn');
180
178
  $('#gardens-btn').addClass('range-btn');
@@ -243,33 +241,33 @@ Wick.onlineExclusive = (function () {
243
241
  });
244
242
  }
245
243
 
246
- viewBtn.on('click', function(e) {
244
+ viewBtn.on('click', function (e) {
247
245
  e.preventDefault();
248
246
  rangesComponent.show();
249
247
  otherRanges.hide();
250
248
  rangesEl.removeClass('range-btn');
251
249
  });
252
250
 
253
- $(function(){
254
- $('a.online-exclusive__banner').on('click', function(event) {
251
+ $(function () {
252
+ $('a.online-exclusive__banner').on('click', function (event) {
255
253
  event.preventDefault();
256
- let sc = $(this).attr("href"),
254
+ let sc = $(this).attr('href'),
257
255
  dn = $(sc).offset().top - 10;
258
- $('html, body').animate({scrollTop: dn}, 1000);
256
+ $('html, body').animate({ scrollTop: dn }, 1000);
259
257
  });
260
258
  });
261
259
 
262
- $(function(){
263
- $('a.view-link').on('click', function(event) {
260
+ $(function () {
261
+ $('a.view-link').on('click', function (event) {
264
262
  event.preventDefault();
265
- let sc = $(this).attr("href"),
263
+ let sc = $(this).attr('href'),
266
264
  dn = $(sc).offset().top - 10;
267
- $('html, body').animate({scrollTop: dn}, 1000);
265
+ $('html, body').animate({ scrollTop: dn }, 1000);
268
266
  });
269
267
  });
270
268
 
271
- $(function(){
272
- $('a.ranges-el').on('click', function(event) {
269
+ $(function () {
270
+ $('a.ranges-el').on('click', function (event) {
273
271
  event.preventDefault();
274
272
  let dn;
275
273
 
@@ -281,12 +279,12 @@ Wick.onlineExclusive = (function () {
281
279
  dn = 990;
282
280
  }
283
281
 
284
- $('html, body').animate({scrollTop: dn}, 1000);
282
+ $('html, body').animate({ scrollTop: dn }, 1000);
285
283
  });
286
284
  });
287
285
 
288
- $(function(){
289
- $('.other-ranges__item').on('click', function(event) {
286
+ $(function () {
287
+ $('.other-ranges__item').on('click', function (event) {
290
288
  event.preventDefault();
291
289
  let dn;
292
290
 
@@ -298,8 +296,7 @@ Wick.onlineExclusive = (function () {
298
296
  dn = 810;
299
297
  }
300
298
 
301
- $('html, body').animate({scrollTop: dn}, 1000);
299
+ $('html, body').animate({ scrollTop: dn }, 1000);
302
300
  });
303
301
  });
304
-
305
302
  })();
@@ -0,0 +1,108 @@
1
+ $(document).ready(function () {
2
+ const SELECTORS = {
3
+ quickFilter: '.quick-filter',
4
+ swiperContainer: '.swiper-container',
5
+ pagination: '.swiper-pagination',
6
+ nextButton: '.quick-filter__next-btn',
7
+ prevButton: '.quick-filter__prev-btn',
8
+ };
9
+
10
+ const CSS_CLASSES = {
11
+ locked: 'quick-filter--locked',
12
+ colourSwatch: 'quick-filter--colour',
13
+ textOnly: 'quick-filter--text',
14
+ bulletClass: 'swiper-pagination-bullet',
15
+ bulletActiveClass: 'swiper-pagination-bullet-active'
16
+ };
17
+
18
+ const CONFIG = {
19
+ speed: 400,
20
+ defaultSpaceBetween: 16,
21
+ textOnlySpaceBetween: 8,
22
+ resizeDebounceTime: 250,
23
+ breakpoints: {
24
+ mobile: 767,
25
+ mobileSpaceBetween: 8,
26
+ },
27
+ };
28
+
29
+ function shouldSkipSlider($slider) {
30
+ return $slider.hasClass(CSS_CLASSES.colourSwatch);
31
+ }
32
+
33
+ function getSpaceBetween($slider) {
34
+ const isTextOnly = $slider.hasClass(CSS_CLASSES.textOnly);
35
+ return isTextOnly ? CONFIG.textOnlySpaceBetween : CONFIG.defaultSpaceBetween;
36
+ }
37
+
38
+ function getSwiperConfig($pagination, $nextBtn, $prevBtn, spaceBetween) {
39
+ return {
40
+ speed: CONFIG.speed,
41
+ spaceBetween: spaceBetween,
42
+ slidesPerView: 'auto',
43
+ watchOverflow: true,
44
+ pagination: {
45
+ el: $pagination[0],
46
+ type: 'bullets',
47
+ clickable: true,
48
+ bulletClass: CSS_CLASSES.bulletClass,
49
+ bulletActiveClass: CSS_CLASSES.bulletActiveClass,
50
+ },
51
+ navigation: {
52
+ nextEl: $nextBtn[0],
53
+ prevEl: $prevBtn[0],
54
+ },
55
+ breakpoints: {
56
+ [CONFIG.breakpoints.mobile]: {
57
+ spaceBetween: CONFIG.breakpoints.mobileSpaceBetween,
58
+ },
59
+ },
60
+ on: {
61
+ lock: handleLock,
62
+ unlock: handleUnlock,
63
+ },
64
+ };
65
+ }
66
+
67
+ function handleLock() {
68
+ this.el.parentElement.classList.add(CSS_CLASSES.locked);
69
+ }
70
+
71
+ function handleUnlock() {
72
+ this.el.parentElement.classList.remove(CSS_CLASSES.locked);
73
+ }
74
+
75
+ function initializeSwiper($slider) {
76
+ const $container = $slider.find(SELECTORS.swiperContainer);
77
+ const $pagination = $slider.find(SELECTORS.pagination);
78
+ const $nextBtn = $slider.find(SELECTORS.nextButton);
79
+ const $prevBtn = $slider.find(SELECTORS.prevButton);
80
+
81
+ const spaceBetween = getSpaceBetween($slider);
82
+ const config = getSwiperConfig($pagination, $nextBtn, $prevBtn, spaceBetween);
83
+
84
+ const swiper = new Swiper($container[0], config);
85
+
86
+ bindResizeHandler(swiper);
87
+ }
88
+
89
+ function bindResizeHandler(swiper) {
90
+ $(window).on('resize', _.debounce(function () {
91
+ swiper.update();
92
+ }, CONFIG.resizeDebounceTime));
93
+ }
94
+
95
+ function init() {
96
+ $(SELECTORS.quickFilter).each(function (index, slider) {
97
+ const $slider = $(slider);
98
+
99
+ if (shouldSkipSlider($slider)) {
100
+ return;
101
+ }
102
+
103
+ initializeSwiper($slider);
104
+ });
105
+ }
106
+
107
+ init();
108
+ });
@@ -0,0 +1,62 @@
1
+ // import { createShowMoreLess } from './utils/show-more-less';
2
+
3
+ var Wick = Wick || {};
4
+
5
+ Wick.Overlay = (function () {
6
+ var filterMobile = $('.filter-results_mobile');
7
+ $('#open-overlay').click(function (event) {
8
+ event.preventDefault();
9
+ $('body').addClass('is-filters-visible');
10
+ filterMobile.toggleClass('show');
11
+ });
12
+
13
+ $('#close-overlay, .filter-results__btn-close').click(function (event) {
14
+ event.preventDefault();
15
+ if (filterMobile.hasClass('show')) {
16
+ $('body').removeClass('is-filters-visible');
17
+ filterMobile.removeClass('show');
18
+ }
19
+ });
20
+
21
+ $('.filter-results_desktop .filter__item input[type="checkbox"]').click(function () {
22
+ $(this).closest('form').submit();
23
+ });
24
+ })();
25
+
26
+ Wick.SearchFilter = (function () {
27
+ const SEL = {
28
+ CATEGORY: '.category-filter',
29
+ FILTER_MOBILE: '.filter-results_mobile',
30
+ OPEN: '.filter-modal-cta',
31
+ CLOSE: '.close',
32
+ FILTER_RESULT: '.filter-results_desktop',
33
+ DESKTOP_CHECKBOX: '.filter-results_desktop .filter__item input[type="checkbox"]',
34
+ BODY_ACTIVE: 'is-filters-visible',
35
+ };
36
+
37
+ // removed show more/show less logic from frontend (will be implemented on backend)
38
+ // const SRPShowMoreLess = createShowMoreLess({
39
+ // excludeGroup: ($group) => $group.hasClass(SEL.CATEGORY),
40
+ // });
41
+
42
+ // const $fm = $(SEL.FILTER_MOBILE);
43
+ // SRPShowMoreLess.init($(SEL.FILTER_RESULT));
44
+ // SRPShowMoreLess.init($fm);
45
+
46
+ $(SEL.OPEN).on('click', function (event) {
47
+ event.preventDefault();
48
+ // removed show more/show less logic from frontend (will be implemented on backend)
49
+ // SRPShowMoreLess.init($fm);
50
+ // SRPShowMoreLess.resetAll($fm);
51
+ });
52
+
53
+ $(document).on('click', SEL.CLOSE, function (event) {
54
+ event.preventDefault();
55
+ // removed show more/show less logic from frontend (will be implemented on backend)
56
+ // SRPShowMoreLess.resetAll($fm);
57
+ });
58
+
59
+ $(document).on('click', SEL.DESKTOP_CHECKBOX, function () {
60
+ $(this).closest('form').submit();
61
+ });
62
+ })();
@@ -0,0 +1,57 @@
1
+ import { copyToClipboard } from './utils/copy-to-clipboard';
2
+
3
+ var Wick = Wick || {};
4
+ Wick.ShareProjectList = (function () {
5
+ function init() {
6
+ var $input = $('#share-list-modal #shopping-list-link');
7
+ var linkContainer = $('#copy-link');
8
+ var $actualLink = linkContainer.find('a');
9
+ var copyClass = 'copy-link_hovered';
10
+
11
+ $actualLink.on('click', function (e) {
12
+ e.preventDefault();
13
+ });
14
+
15
+ function focusAndSelectInput() {
16
+ if (!$input.length) return;
17
+
18
+ var el = $input.get(0);
19
+
20
+ $input.removeAttr('disabled');
21
+
22
+ el.focus();
23
+
24
+ var len = (el.value || '').length;
25
+ if (typeof el.setSelectionRange === 'function') {
26
+ el.setSelectionRange(0, len);
27
+ } else if (typeof el.select === 'function') {
28
+ el.select();
29
+ }
30
+ }
31
+
32
+ linkContainer.on('click', function (e) {
33
+ e.preventDefault();
34
+
35
+ focusAndSelectInput();
36
+
37
+ var value = ($input.val() || '').trim();
38
+ if (!value) return;
39
+
40
+ copyToClipboard(value, linkContainer[0], { noUpperCase: true })
41
+ .then(function () {
42
+ $actualLink.addClass(copyClass);
43
+ })
44
+ .catch(function (e) {
45
+ console.error(e);
46
+ });
47
+ });
48
+
49
+ $input.on('click', function (e) {
50
+ e.preventDefault();
51
+ focusAndSelectInput();
52
+ $actualLink.removeClass(copyClass);
53
+ });
54
+ }
55
+
56
+ init();
57
+ })();
@@ -1,46 +1,76 @@
1
- import {copyToClipboard} from "./utils/copy-to-clipboard";
1
+ import { copyToClipboard } from './utils/copy-to-clipboard';
2
2
 
3
3
  var Wick = window.Wick || {};
4
4
 
5
5
  Wick.TradeProRewards = {
6
- el: {
7
- $tradeProRewards: $('.page_tradePro-rewards'),
8
- buttonSelector: '.copy-tradePro-barcode',
9
- },
10
- message: 'Code copied to clipboard',
11
- copyToClipboardInit() {
12
- Wick.SnackBar.init();
13
- $(Wick.TradeProRewards.el.buttonSelector).on('click', function (e) {
14
- e.preventDefault();
15
- e.stopPropagation();
16
- var discountCode = $(this).parent().find('input');
17
- var discountCodeValue = discountCode.val().trim();
18
- discountCode.removeAttr('disabled').attr('readonly', 'readonly');
19
-
20
- copyToClipboard(discountCodeValue, e.currentTarget, { noUpperCase: true });
21
-
22
- discountCode.attr('disabled', 'disabled').removeAttr('readonly');
23
- window.getSelection().removeAllRanges();
24
-
25
- Wick.SnackBar.show(
26
- {
27
- text: Wick.TradeProRewards.message,
28
- type: Wick.SnackBar.types.SUCCESS,
29
- withCloseButton: false,
30
- autoClose: true,
31
- delayBeforeClose: 3000
32
- }
33
- );
34
- return false;
35
- });
36
- },
37
- init() {
38
- Wick.TradeProRewards.copyToClipboardInit();
39
- }
40
- }
6
+ el: {
7
+ $tradeProRewards: $('.page_tradePro-rewards'),
8
+ buttonSelector: '.copy-tradePro-barcode',
9
+ },
10
+
11
+ message: 'Code copied to clipboard',
12
+ errorMessage: 'Unable to copy. Please copy manually',
13
+
14
+ copyToClipboardInit() {
15
+ Wick.SnackBar.init();
16
+
17
+ $(document).on('click', Wick.TradeProRewards.el.buttonSelector, async function (e) {
18
+ e.preventDefault();
19
+ e.stopPropagation();
20
+
21
+ const $btn = $(this);
22
+ const $input = $btn.parent().find('input');
23
+
24
+ if (!$input.length) return false;
25
+
26
+ const discountCodeValue = ($input.val() || '').trim();
27
+ if (!discountCodeValue) return false;
28
+
29
+ $input.removeAttr('disabled').attr('readonly', 'readonly');
30
+
31
+ try {
32
+ await copyToClipboard(discountCodeValue, e.currentTarget, { noUpperCase: true });
33
+
34
+ Wick.SnackBar.show({
35
+ text: Wick.TradeProRewards.message,
36
+ type: Wick.SnackBar.types.SUCCESS,
37
+ withCloseButton: false,
38
+ autoClose: true,
39
+ delayBeforeClose: 3000,
40
+ });
41
+ } catch (err) {
42
+ try {
43
+ const el = $input.get(0);
44
+ el.focus();
45
+ el.select();
46
+ el.setSelectionRange(0, 999999);
47
+ } catch (e) {
48
+ console.error(e);
49
+ }
50
+
51
+ Wick.SnackBar.show({
52
+ text: Wick.TradeProRewards.errorMessage,
53
+ type: Wick.SnackBar.types.ERROR,
54
+ withCloseButton: false,
55
+ autoClose: true,
56
+ delayBeforeClose: 4000,
57
+ });
58
+ }
59
+
60
+ $input.attr('disabled', 'disabled').removeAttr('readonly');
61
+ window.getSelection()?.removeAllRanges?.();
62
+
63
+ return false;
64
+ });
65
+ },
66
+
67
+ init() {
68
+ Wick.TradeProRewards.copyToClipboardInit();
69
+ },
70
+ };
41
71
 
42
72
  $(document).ready(function () {
43
- if (Wick.TradeProRewards.el.$tradeProRewards.length) {
44
- Wick.TradeProRewards.init();
45
- }
73
+ if (Wick.TradeProRewards.el.$tradeProRewards.length) {
74
+ Wick.TradeProRewards.init();
75
+ }
46
76
  });
@@ -1,56 +1,88 @@
1
1
  export function copyToClipboard(copyValue, currentSelector, options = {}) {
2
- const $temp = $('<textarea>').css({
3
- position: 'absolute',
4
- top: 0,
5
- left: 0,
6
- opacity: 0
7
- });
8
-
9
- $(currentSelector).parent().append($temp);
10
-
11
- let str;
12
- if (options.noUpperCase) {
13
- str = copyValue;
14
- } else {
15
- str = copyValue.replace(/(^\w|\s\w)/g, function (m) {
16
- return m.toUpperCase()
17
- });
18
- }
2
+ const textTrimmed = normalizeCopyText(copyValue, options);
19
3
 
20
- const textFiltered = str.split(' ').filter(function (value) {
21
- return value !== ''
22
- });
4
+ if (!textTrimmed) return Promise.reject(new Error('Empty text'));
23
5
 
24
- const textTrimmed = textFiltered.join(' ');
6
+ // 1) iOS app bridge (WKWebView)
7
+ if (window.webkit?.messageHandlers?.copy) {
8
+ try {
9
+ window.webkit.messageHandlers.copy.postMessage(textTrimmed);
10
+ return Promise.resolve(true);
11
+ } catch (e) {
12
+ console.error(e);
13
+ }
14
+ }
25
15
 
26
- $temp.val(textTrimmed);
16
+ // 2) Android app bridge
17
+ if (window.Android?.copyToClipboard && typeof window.Android.copyToClipboard === 'function') {
18
+ try {
19
+ window.Android.copyToClipboard(textTrimmed);
20
+ return Promise.resolve(true);
21
+ } catch (e) {
22
+ console.error(e);
23
+ }
24
+ }
27
25
 
28
- if (navigator.userAgent.match(/TradeProMobile_iOS|DIYMobile_iOS/i)) {
29
- iosCopyToClipboard($temp);
30
- } else if (navigator.userAgent.match(/ipad|ipod|iphone/i)) {
31
- $temp.select();
32
- $temp[0].setSelectionRange(0, 999999);
33
- } else {
34
- $temp.select();
35
- }
26
+ if (navigator.clipboard?.writeText) {
27
+ return navigator.clipboard.writeText(textTrimmed).then(() => true);
28
+ }
36
29
 
37
- document.execCommand("copy");
38
- $temp.remove();
30
+ return legacyExecCommandCopy(textTrimmed, currentSelector);
39
31
  }
40
32
 
41
- function iosCopyToClipboard($input) {
42
- const el = $input.get(0);
43
- const editable = el.contentEditable;
44
- const readOnly = el.readOnly;
45
- const range = document.createRange();
46
- const sel = window.getSelection();
47
-
48
- el.contentEditable = true;
49
- el.readOnly = false;
50
- range.selectNodeContents(el);
51
- sel.removeAllRanges();
52
- sel.addRange(range);
53
- el.setSelectionRange(0, 999999);
54
- el.contentEditable = editable;
55
- el.readOnly = readOnly;
33
+ function normalizeCopyText(copyValue, options) {
34
+ let raw = copyValue == null ? '' : copyValue + '';
35
+
36
+ const str = options.noUpperCase ? raw : raw.replace(/(^\w|\s\w)/g, (m) => m.toUpperCase());
37
+
38
+ return str
39
+ .split(' ')
40
+ .filter((v) => v !== '')
41
+ .join(' ')
42
+ .trim();
43
+ }
44
+
45
+ function legacyExecCommandCopy(text, currentSelector) {
46
+ return new Promise(function (resolve, reject) {
47
+ try {
48
+ let $parent = $(currentSelector).parent();
49
+
50
+ let $temp = $('<textarea>').val(text).attr('readonly', 'readonly').css({
51
+ position: 'fixed',
52
+ top: 0,
53
+ left: '-9999px',
54
+ opacity: 0,
55
+ width: '1px',
56
+ height: '1px',
57
+ padding: 0,
58
+ border: 0,
59
+ margin: 0,
60
+ });
61
+
62
+ $parent.append($temp);
63
+
64
+ let el = $temp.get(0);
65
+
66
+ el.focus();
67
+ let len = (el.value || '').length;
68
+ if (typeof el.setSelectionRange === 'function') {
69
+ el.setSelectionRange(0, len);
70
+ } else {
71
+ $temp.select();
72
+ }
73
+
74
+ let ok = document.execCommand('copy');
75
+
76
+ $temp.remove();
77
+
78
+ if (window.getSelection) {
79
+ let sel = window.getSelection();
80
+ if (sel && sel.removeAllRanges) sel.removeAllRanges();
81
+ }
82
+
83
+ ok ? resolve(true) : reject(new Error('execCommand failed'));
84
+ } catch (e) {
85
+ reject(e);
86
+ }
87
+ });
56
88
  }
@@ -3,7 +3,7 @@ export function highlightCharacter(str, char, charClass) {
3
3
  return str;
4
4
  }
5
5
 
6
- const pattern = new RegExp(`\\${char}+`, "g");
6
+ const pattern = new RegExp(`\\${char}+`, 'g');
7
7
  const replacement = `<span class="${charClass}">$&</span>`;
8
8
 
9
9
  return str.replace(pattern, replacement);
@@ -12,7 +12,7 @@ export function highlightCharacter(str, char, charClass) {
12
12
  export function createImageElements(images, alt) {
13
13
  return images.map((link) => {
14
14
  return $('<img>').attr('src', link).attr('alt', alt);
15
- })
15
+ });
16
16
  }
17
17
 
18
18
  export function countLetters(str) {
@@ -35,15 +35,17 @@ export function isKeyboardOpen() {
35
35
  return screenHeight !== screenHeightWithoutKeyboard;
36
36
  }
37
37
 
38
- export function isTouchDevice () {
38
+ export function isTouchDevice() {
39
39
  return 'ontouchstart' in window;
40
40
  }
41
41
 
42
- export function isApp () {
43
- return navigator.userAgent.match(/TradeProMobile_iOS|TradeProMobile_Android|DIYMobile_iOS|DIYMobile_Android|DIYApp_Guest_Mobile_iOS|DIYApp_Guest_Mobile_Android|AGENT_PLACEHOLDER/i);
42
+ export function isApp() {
43
+ return navigator.userAgent.match(
44
+ /TradeProMobile_iOS|TradeProMobile_Android|DIYMobile_iOS|DIYMobile_Android|DIYApp_Guest_Mobile_iOS|DIYApp_Guest_Mobile_Android|AGENT_PLACEHOLDER/i
45
+ );
44
46
  }
45
47
 
46
- export function trimFields () {
48
+ export function trimFields() {
47
49
  const fields = Wick.AddressBook.getFieldsConfigurations();
48
50
  fields.forEach((field) => {
49
51
  const trimmedValue = field.input.val().trim();
@@ -55,8 +57,11 @@ export function scrollToElement(element, offset = 20) {
55
57
  const targetElement = $(element);
56
58
 
57
59
  if (targetElement.length > 0) {
58
- $('html, body').animate({
59
- scrollTop: targetElement.offset().top - offset
60
- }, 300);
60
+ $('html, body').animate(
61
+ {
62
+ scrollTop: targetElement.offset().top - offset,
63
+ },
64
+ 300
65
+ );
61
66
  }
62
67
  }