wickes-css2 2.105.0-develop.7 → 2.105.0-develop.8

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 (211) hide show
  1. package/Readme.md +2 -2
  2. package/build/css/category-main.css +1 -1
  3. package/build/css/homepage-main.css +1 -1
  4. package/build/css/kitchen-plp-main.css +1 -1
  5. package/build/css/main.css +1 -1
  6. package/build/css/my-account-main-v2.css +1 -1
  7. package/build/css/my-account-main.css +1 -1
  8. package/build/css/pages/my-account-v2.css +1 -1
  9. package/build/css/pages/page_discount.css +1 -1
  10. package/build/css/pages/page_product_search.css +1 -1
  11. package/build/css/pages/page_products-list-combined.css +1 -1
  12. package/build/css/pages/page_products-list.css +1 -1
  13. package/build/css/pages/tradePro-rewards.css +1 -1
  14. package/build/css/pdp-main-before-combine.css +1 -1
  15. package/build/css/pdp-main-non-critical.css +1 -1
  16. package/build/css/pdp-main.css +1 -1
  17. package/build/css/plp-main.css +1 -1
  18. package/build/css/store-locator-main.css +1 -1
  19. package/build/js/basket.min.js +2 -2
  20. package/build/js/bundle.min.js +1 -1
  21. package/build/js/checkout.min.js +2 -2
  22. package/build/js/emulation.min.js +10255 -10784
  23. package/build/js/general.bundle.min.js +1 -1
  24. package/build/js/kitchen/kitchen-plp.min.js +9 -1
  25. package/build/js/merged-checkout.min.js +2 -2
  26. package/build/js/mini-basket-slider.min.js +1 -1
  27. package/build/js/my-account.min.js +1 -1
  28. package/build/js/page/accordion.js +35 -0
  29. package/build/js/page/basket/basket-update-cart-action.js +56 -59
  30. package/build/js/page/basket/basket-update-cart.js +27 -27
  31. package/build/js/page/basket/basket-utils.js +33 -40
  32. package/build/js/page/basket/mini-basket-total.js +66 -70
  33. package/build/js/page/basket/quantity-change-handler.js +55 -73
  34. package/build/js/page/basket/update-quantity-operation.js +30 -39
  35. package/build/js/page/basket/update-quantity.js +62 -62
  36. package/build/js/page/basket-v2.js +229 -362
  37. package/build/js/page/billie-business-type.js +27 -27
  38. package/build/js/page/checkout-payment-details.js +299 -301
  39. package/build/js/page/components/discounts.js +36 -39
  40. package/build/js/page/components/mini-basket-slider.js +545 -604
  41. package/build/js/page/kitchen/plp-filters-chips.js +90 -0
  42. package/build/js/page/kitchen/plp-filters-mobile.js +72 -0
  43. package/build/js/page/kitchen/plp-filters-panel.js +119 -0
  44. package/build/js/page/kitchen/plp-filters-utils.js +65 -0
  45. package/build/js/page/kitchen/plp-filters.js +205 -0
  46. package/build/js/page/kitchen/sort-by.js +157 -0
  47. package/build/js/page/klarna-modal-scroll-disable.js +4 -4
  48. package/build/js/page/my-account.js +14 -29
  49. package/build/js/page/online-exclusive.js +30 -28
  50. package/build/js/page/tradePro-rewards.js +39 -69
  51. package/build/js/page/utils/copy-to-clipboard.js +47 -79
  52. package/build/js/page/utils/helpers.js +9 -14
  53. package/build/js/pdp.bundle.min.js +1 -1
  54. package/build/js/plp.bundle.min.js +1 -1
  55. package/build/js/project-list.min.js +85 -143
  56. package/build/js/tradePro-rewards.min.js +1 -1
  57. package/package.json +3 -3
  58. package/src/components/.DS_Store +0 -0
  59. package/src/components/accordion.hbs +2 -2
  60. package/src/components/kitchen/dropdown.hbs +3 -6
  61. package/src/components/kitchen/filter-modal.hbs +13 -10
  62. package/src/components/kitchen/plp-filters.hbs +1 -3
  63. package/src/components/kitchen/sort-by.hbs +1 -1
  64. package/src/components/my-account/barcode.hbs +1 -3
  65. package/src/components/my-account/cards-swap.hbs +10 -0
  66. package/src/components/my-account/clipboard-code-card.hbs +3 -3
  67. package/src/components/my-account/discount.hbs +1 -1
  68. package/src/components/my-account/greetings.hbs +1 -1
  69. package/src/components/search-filter.hbs +112 -121
  70. package/src/data/data_plp_load-more.json +1 -1
  71. package/src/data/my-account/data_my-account.json +9 -0
  72. package/src/js/components/cards-swap.js +72 -0
  73. package/src/js/components/general/accordion.js +33 -44
  74. package/src/js/components/general/cart-slider.js +16 -19
  75. package/src/js/components/general/create-popup-slider.js +173 -168
  76. package/src/js/components/general/search-filter.js +21 -0
  77. package/src/js/components/share-project-list.js +53 -0
  78. package/src/js/emulation/big-wins.js +904 -1081
  79. package/src/js/emulation/billie-modal.js +19 -23
  80. package/src/js/emulation/checkout-payment-details.js +38 -47
  81. package/src/js/emulation/custom-slider-emulation.js +13 -17
  82. package/src/js/emulation/forms.js +323 -360
  83. package/src/js/emulation/mini-basket-data.js +923 -1051
  84. package/src/js/emulation/paymentLoader.js +17 -17
  85. package/src/js/emulation/pdf-file-loader.js +91 -89
  86. package/src/js/emulation/popover-mini-basket.js +239 -246
  87. package/src/js/emulation/project-list-pdp.js +316 -320
  88. package/src/js/emulation/repayment-toggle.js +24 -23
  89. package/src/js/emulation/selectable.js +18 -22
  90. package/src/js/emulation/wismo-details.js +31 -23
  91. package/src/js/page/accordion.js +35 -0
  92. package/src/js/page/basket/basket-update-cart-action.js +56 -59
  93. package/src/js/page/basket/basket-update-cart.js +27 -27
  94. package/src/js/page/basket/basket-utils.js +33 -40
  95. package/src/js/page/basket/mini-basket-total.js +66 -70
  96. package/src/js/page/basket/quantity-change-handler.js +55 -73
  97. package/src/js/page/basket/update-quantity-operation.js +30 -39
  98. package/src/js/page/basket/update-quantity.js +62 -62
  99. package/src/js/page/basket-v2.js +229 -362
  100. package/src/js/page/billie-business-type.js +27 -27
  101. package/src/js/page/checkout-payment-details.js +299 -301
  102. package/src/js/page/components/discounts.js +36 -39
  103. package/src/js/page/components/mini-basket-slider.js +545 -604
  104. package/src/js/page/kitchen/plp-filters-chips.js +90 -0
  105. package/src/js/page/kitchen/plp-filters-mobile.js +72 -0
  106. package/src/js/page/kitchen/plp-filters-panel.js +119 -0
  107. package/src/js/page/kitchen/plp-filters-utils.js +65 -0
  108. package/src/js/page/kitchen/plp-filters.js +205 -0
  109. package/src/js/page/kitchen/sort-by.js +157 -0
  110. package/src/js/page/klarna-modal-scroll-disable.js +4 -4
  111. package/src/js/page/my-account.js +14 -29
  112. package/src/js/page/online-exclusive.js +30 -28
  113. package/src/js/page/tradePro-rewards.js +39 -69
  114. package/src/js/page/utils/copy-to-clipboard.js +47 -79
  115. package/src/js/page/utils/helpers.js +9 -14
  116. package/src/page_empty-shared-project-list-bicester-hub.html +0 -4
  117. package/src/page_empty-shopping-list_guest.html +0 -1
  118. package/src/page_kitchen-plp.html +2 -2
  119. package/src/page_my-account-installer.html +1 -1
  120. package/src/page_my-account-trade-pro-carousel-double.html +127 -0
  121. package/src/page_my-account-trade-pro-carousel.html +134 -0
  122. package/src/page_my-account-trade-pro.html +1 -1
  123. package/src/page_my-shopping-list-add-notes.html +0 -1
  124. package/src/page_my-shopping-list-energy.html +0 -1
  125. package/src/page_my-shopping-list-hide-download.html +1 -2
  126. package/src/page_my-shopping-list-pdf.html +0 -2
  127. package/src/page_my-shopping-list-saved-ref.html +0 -1
  128. package/src/page_my-shopping-list-wisdom-oos-registered.html +0 -1
  129. package/src/page_my-shopping-list-wisdom-oos.html +0 -1
  130. package/src/page_my-shopping-list-wisdom-partial-registered.html +0 -1
  131. package/src/page_my-shopping-list-wisdom-registered.html +0 -1
  132. package/src/page_my-shopping-list-wisdom.html +0 -1
  133. package/src/page_my-shopping-list.html +0 -1
  134. package/src/page_my-shopping-list_not-register.html +0 -3
  135. package/src/page_plp-with-paint.html +7 -2
  136. package/src/page_plp.html +7 -2
  137. package/src/page_plp_v2-energy-efficiency.html +6 -1
  138. package/src/page_plp_v2-favourite-products.html +7 -6
  139. package/src/page_plp_v2-vat.html +7 -2
  140. package/src/page_plp_v2.html +9 -22
  141. package/src/page_product_search-vat.html +7 -2
  142. package/src/page_product_search.html +7 -2
  143. package/src/page_project-list-generate-project-list-ID.html +0 -3
  144. package/src/page_project-list-vat.html +0 -4
  145. package/src/page_project-list-with-new-share-popup-android.html +1 -3
  146. package/src/page_project-list-with-new-share-popup-ios.html +1 -3
  147. package/src/page_project-list-with-new-share-popup.html +1 -2
  148. package/src/page_search-results.html +7 -2
  149. package/src/page_shared-project-list-bicester-hub.html +1 -3
  150. package/src/page_tradepro-discount-app.html +1 -1
  151. package/src/page_tradepro-discount-double.html +109 -0
  152. package/src/page_tradepro-discount.html +36 -2
  153. package/src/scss/common/_common.scss +4 -5
  154. package/src/scss/components/_accordion.scss +3 -1
  155. package/src/scss/components/_custom-slider.scss +14 -15
  156. package/src/scss/components/_date-selection-add-new-styles.scss +7 -6
  157. package/src/scss/components/_date-selection.scss +1 -1
  158. package/src/scss/components/_popover-mini-basket.scss +3 -3
  159. package/src/scss/components/_search-filter.scss +15 -95
  160. package/src/scss/components/checkout-chip.scss +2 -2
  161. package/src/scss/components/checkout-payment-repayment-terms.scss +1 -1
  162. package/src/scss/components/{_filter-modal.scss → kitchen/_filter-modal.scss} +4 -55
  163. package/src/scss/components/{_plp-filters.scss → kitchen/_plp-filters.scss} +13 -31
  164. package/src/scss/components/my-account/_barcode.scss +8 -0
  165. package/src/scss/components/my-account/_cards-swap.scss +58 -0
  166. package/src/scss/components/my-account/_clipboard-code.scss +8 -0
  167. package/src/scss/components/my-account/_discount.scss +10 -0
  168. package/src/scss/globals/_global-components.scss +0 -3
  169. package/src/scss/helpers/_colors-semantic.scss +68 -68
  170. package/src/scss/helpers/_variables.scss +196 -242
  171. package/src/scss/kitchen-plp-main.scss +3 -0
  172. package/src/scss/main.scss +65 -65
  173. package/src/scss/pages/my-account-v2.scss +37 -0
  174. package/src/scss/pages/page_discount.scss +8 -4
  175. package/src/scss/pages/page_product-details-v2.scss +4 -1
  176. package/src/scss/pages/page_product_search.scss +1 -9
  177. package/src/scss/pages/page_products-list-combined.scss +24 -28
  178. package/src/scss/pages/page_products-list.scss +0 -8
  179. package/src/scss/pages/tradePro-rewards.scss +4 -3
  180. package/src/sitemap.html +3 -0
  181. package/build/js/page/filters/desktop-nav.js +0 -64
  182. package/build/js/page/filters/mobile-nav.js +0 -93
  183. package/build/js/page/filters/plp-filters-chips.js +0 -92
  184. package/build/js/page/filters/plp-filters-mobile.js +0 -150
  185. package/build/js/page/filters/plp-filters-panel.js +0 -123
  186. package/build/js/page/filters/plp-filters-utils.js +0 -66
  187. package/build/js/page/filters/plp-filters.js +0 -256
  188. package/build/js/page/filters/sort-by.js +0 -172
  189. package/build/js/page/search-filter.js +0 -62
  190. package/build/js/page/share-project-list.js +0 -57
  191. package/build/js/page/utils/show-more-less.js +0 -273
  192. package/build/js/plp-filters.min.js +0 -9
  193. package/build/js/search-filter.min.js +0 -1
  194. package/src/components/kitchen/filter-modal-content-kitchen.hbs +0 -10
  195. package/src/components/search-filter-modal-content.hbs +0 -102
  196. package/src/elements/btn.hbs +0 -7
  197. package/src/js/emulation/filters-emulation.js +0 -164
  198. package/src/js/emulation/product-counter.js +0 -50
  199. package/src/js/emulation/reset-filter-desktop.js +0 -5
  200. package/src/js/page/filters/desktop-nav.js +0 -64
  201. package/src/js/page/filters/mobile-nav.js +0 -93
  202. package/src/js/page/filters/plp-filters-chips.js +0 -92
  203. package/src/js/page/filters/plp-filters-mobile.js +0 -150
  204. package/src/js/page/filters/plp-filters-panel.js +0 -123
  205. package/src/js/page/filters/plp-filters-utils.js +0 -66
  206. package/src/js/page/filters/plp-filters.js +0 -256
  207. package/src/js/page/filters/sort-by.js +0 -172
  208. package/src/js/page/search-filter.js +0 -62
  209. package/src/js/page/share-project-list.js +0 -57
  210. package/src/js/page/utils/show-more-less.js +0 -273
  211. package/src/scss/components/_sort-by.scss +0 -190
@@ -1,64 +0,0 @@
1
- function formatNumberInElement(selector) {
2
- const formatter = new Intl.NumberFormat('en-GB');
3
-
4
- document.querySelectorAll(selector).forEach((el) => {
5
- const rawText = el.textContent.trim();
6
-
7
- const number = Number(rawText.replace(/[^\d]/g, ''));
8
-
9
- if (!Number.isNaN(number)) {
10
- el.textContent = formatter.format(number);
11
- }
12
- });
13
- }
14
-
15
- (function () {
16
- const SELECTORS = {
17
- $sidebar: $('.filter-results_desktop'),
18
- $heading: $('.filter-results__heading'),
19
- $offerBanner: $('.offer-banner'),
20
- $offerBannerIndent: 40,
21
- offerBannerCloseIcon:
22
- '.icon.notification__close, .icon.notification__close_white, .notification__close',
23
- };
24
-
25
- function isDesktop() {
26
- return Wick.Responsive.getCurrentBreakpoint() !== 'down-sm';
27
- }
28
-
29
- function getOfferBannerHeight() {
30
- if (!SELECTORS.$offerBanner.length) return SELECTORS.$offerBannerIndent;
31
- return SELECTORS.$offerBanner.outerHeight(true) + SELECTORS.$offerBannerIndent || 0;
32
- }
33
-
34
- function applyTop() {
35
- if (!SELECTORS.$sidebar.length) return;
36
-
37
- if (!isDesktop()) {
38
- SELECTORS.$sidebar.css('top', '');
39
- SELECTORS.$heading.css('top', '');
40
- return;
41
- }
42
-
43
- const top = getOfferBannerHeight();
44
-
45
- SELECTORS.$sidebar.css('top', top + 'px');
46
-
47
- if (SELECTORS.$heading.length) {
48
- SELECTORS.$heading.css('top', top + 'px');
49
- }
50
- }
51
-
52
- function setupOfferBannerCloseHook() {
53
- $(document).on('click', SELECTORS.offerBannerCloseIcon, function () {
54
- setTimeout(applyTop, 0);
55
- });
56
- }
57
-
58
- $(document).ready(function () {
59
- formatNumberInElement('.product-count');
60
- applyTop();
61
- $(window).on('resize', _.debounce(applyTop, 100));
62
- setupOfferBannerCloseHook();
63
- });
64
- })();
@@ -1,93 +0,0 @@
1
- (function () {
2
- const SELECTORS = {
3
- $filters: $('.plp-filters'),
4
- $filterBar: $('.plp-filters__bar-mobile'),
5
- $filterModal: $('.filter-modal'),
6
-
7
- $offerBanner: $('.offer-banner'),
8
- offerBannerCloseIcon: '.icon.notification__close',
9
- };
10
-
11
- const CLASSES = {
12
- plpFiltersStuck: 'plp-filters__bar-stuck',
13
- };
14
-
15
- function isMobile() {
16
- return Wick.Responsive.getCurrentBreakpoint() === 'down-sm';
17
- }
18
-
19
- function getOfferBannerHeight() {
20
- if (!SELECTORS.$offerBanner.length) return 0;
21
- return SELECTORS.$offerBanner.outerHeight(true) || 0;
22
- }
23
-
24
- function applyOfferBannerTop() {
25
- if (!SELECTORS.$filters.length) return;
26
-
27
- if (!isMobile()) {
28
- SELECTORS.$filters.css('top', '');
29
- return;
30
- }
31
-
32
- const h = getOfferBannerHeight();
33
- SELECTORS.$filters.css('top', h > 0 ? h + 'px' : '');
34
- }
35
-
36
- function resetOfferBannerTopToZero() {
37
- if (!SELECTORS.$filters.length) return;
38
- SELECTORS.$filters.css('top', '0px');
39
- }
40
-
41
- function applyStuckState() {
42
- if (!isMobile()) {
43
- SELECTORS.$filterBar.removeClass(CLASSES.plpFiltersStuck);
44
- return;
45
- }
46
-
47
- if (!SELECTORS.$filters.length || !SELECTORS.$filterBar.length) return;
48
-
49
- const filtersEl = SELECTORS.$filters.get(0);
50
- if (!filtersEl) return;
51
-
52
- const rect = filtersEl.getBoundingClientRect();
53
- const bannerHeight = getOfferBannerHeight();
54
-
55
- const shouldStick = rect.top <= bannerHeight;
56
-
57
- if (shouldStick) {
58
- SELECTORS.$filterBar.addClass(CLASSES.plpFiltersStuck);
59
- } else {
60
- SELECTORS.$filterBar.removeClass(CLASSES.plpFiltersStuck);
61
- }
62
- }
63
-
64
- function hideModal() {
65
- if (Wick.Responsive.getCurrentBreakpoint() !== 'down-sm') {
66
- SELECTORS.$filterModal.modal('hide');
67
- }
68
- }
69
-
70
- function setupOfferBannerCloseHook() {
71
- $(document).on('click', SELECTORS.offerBannerCloseIcon, function () {
72
- resetOfferBannerTopToZero();
73
- });
74
- }
75
-
76
- $(document).ready(function () {
77
- applyOfferBannerTop();
78
- applyStuckState();
79
-
80
- $(window).on('scroll', _.debounce(applyStuckState, 50));
81
-
82
- $(window).on(
83
- 'resize',
84
- _.debounce(function () {
85
- hideModal();
86
- applyOfferBannerTop();
87
- applyStuckState();
88
- }, 100)
89
- );
90
-
91
- setupOfferBannerCloseHook();
92
- });
93
- })();
@@ -1,92 +0,0 @@
1
- var Wick = window.Wick || {};
2
-
3
- Wick.PLPChips = {
4
- GROUP: '.plp-filters__group',
5
- TOGGLE: '.plp-filters__toggle',
6
- INPUTS: '.filter-card__checkbox, .swatch__checkbox, .checkbox__input',
7
- CHIPS_WRAP_SEL: '.plp-selected',
8
- BADGE_CLASS: 'plp-filters__badge',
9
-
10
- renderGroupCounters(rootWrapper) {
11
- rootWrapper.find(Wick.PLPChips.GROUP).each((_, el) => {
12
- const group = $(el);
13
- const name = group.attr('data-filter') || '';
14
- const count = Wick.PLPFilters.appliedState[name]
15
- ? Wick.PLPFilters.appliedState[name].size
16
- : 0;
17
- const btn = group.find(Wick.PLPChips.TOGGLE);
18
- const badgeSpan = btn.find(`.${Wick.PLPChips.BADGE_CLASS} span`);
19
- if (count > 0) {
20
- badgeSpan.text(count).css('display', 'flex');
21
- } else {
22
- badgeSpan.text('').hide();
23
- }
24
- });
25
- },
26
-
27
- renderChips(rootWrapper) {
28
- const wrap = rootWrapper.find(Wick.PLPChips.CHIPS_WRAP_SEL);
29
- if (!wrap.length) {
30
- return;
31
- }
32
-
33
- const list = wrap.find('.plp-selected__list');
34
- let clearAllBtn = wrap.find('.plp-selected__clear-all');
35
-
36
- list.empty();
37
-
38
- const total = Wick.PLPFilters.totalApplied();
39
- wrap.find('.plp-selected__clear-all').prop('hidden', total === 0);
40
-
41
- if (total === 0) {
42
- wrap.hide();
43
- if (clearAllBtn.length) {
44
- clearAllBtn.remove();
45
- }
46
- return;
47
- }
48
-
49
- Object.keys(Wick.PLPFilters.appliedState).forEach((group) => {
50
- Wick.PLPFilters.appliedState[group].forEach((value) => {
51
- list.append(
52
- `<button type="button" class="pf-chip" data-group="${group}" data-value="${value}">
53
- <span class="pf-chip__text">${value}</span>
54
- <i class="fa fa-times pf-chip__close" aria-hidden="true"></i>
55
- <span class="sr-only">Remove ${value} from ${group}</span>
56
- </button>`
57
- );
58
- });
59
- });
60
-
61
- if (clearAllBtn.length) {
62
- clearAllBtn.prop('hidden', false);
63
- clearAllBtn.appendTo(list);
64
- } else {
65
- clearAllBtn = $(`
66
- <button type="button" class="plp-selected__clear-all btn btn-secondary">
67
- <i class="fa fa-times" aria-hidden="true"></i><span>Clear all</span>
68
- </button>
69
- `);
70
- list.append(clearAllBtn);
71
- }
72
- },
73
-
74
- bindChipActions(rootWrapper) {
75
- // remove one chip
76
- rootWrapper.on('click', '.pf-chip', (e) => {
77
- e.preventDefault();
78
- const chip = $(e.target).closest('.pf-chip');
79
- const groupDomName = chip.data('group');
80
- const valueOriginal = chip.data('value');
81
-
82
- Wick.PLPFilters.removeFromApplied(groupDomName, valueOriginal);
83
- Wick.PLPFilters.writeStateToURL(Wick.PLPFilters.appliedState, false);
84
- });
85
-
86
- // clear all
87
- rootWrapper.on('click', '.plp-selected__clear-all', (e) => {
88
- e.preventDefault();
89
- Wick.PLPFilters.writeStateToURL({}, false);
90
- });
91
- },
92
- };
@@ -1,150 +0,0 @@
1
- var Wick = window.Wick || {};
2
-
3
- Wick.PLPFiltersMobile = {
4
- ROOT_WRAPPER:
5
- '.page-KitchenPLPPage, .products-list-page:not(.page-responsiveThematicProductListPage)',
6
- PRODUCTS_LIST: '.products-list-page',
7
- INPUTS: '.filter-card__checkbox, .swatch__checkbox, .checkbox__input',
8
-
9
- MODAL_SEL: '#filterModal',
10
- MODAL_VIEW_BTN: '#filterModal .btn.btn-primary',
11
- MODAL_CLEAR_BTN: '#filterModal .btn.btn-secondary',
12
- $ACCORDION: '.accordion',
13
- $ACCORDION_CONTENT: '.accordion__content',
14
- ACCORDION_COLLAPSED: 'accordion_collapsed',
15
-
16
- getPlural(value, one, many) {
17
- return value === 1 ? one : many;
18
- },
19
-
20
- isProductPage() {
21
- return $(Wick.PLPFiltersMobile.PRODUCTS_LIST).length > 0;
22
- },
23
-
24
- getMobileCounts() {
25
- const isProducts = Wick.PLPFiltersMobile.isProductPage();
26
-
27
- if (isProducts) {
28
- const total = (Wick.ProductCounter && Wick.ProductCounter.count) || 0;
29
- return { mode: 'products', total };
30
- }
31
-
32
- const total = Wick.PLPFilters.totalApplied();
33
- return { mode: 'filters', total };
34
- },
35
-
36
- updateMobileFilterInfo() {
37
- const info = $('.mobile-nav__item[data-target="#filterModal"] .mobile-nav__info');
38
- if (!info.length) return;
39
-
40
- const { mode, total } = Wick.PLPFiltersMobile.getMobileCounts();
41
-
42
- if (mode === 'products') {
43
- return;
44
- }
45
-
46
- if (total > 0) {
47
- const label = Wick.PLPFiltersMobile.getPlural(total, 'filter', 'filters');
48
- info.text(`${total} ${label} applied`);
49
- } else {
50
- info.text('No filters applied');
51
- }
52
- },
53
-
54
- updateViewResultsButton() {
55
- const { mode } = Wick.PLPFiltersMobile.getMobileCounts();
56
-
57
- if (mode === 'products') {
58
- return;
59
- }
60
-
61
- const $btn = $(Wick.PLPFiltersMobile.MODAL_VIEW_BTN);
62
- if (!$btn.length) return;
63
-
64
- const { total } = Wick.PLPFiltersMobile.getMobileCounts();
65
- $btn.text(total > 0 ? `View results (${total})` : 'View results');
66
- },
67
-
68
- hideAccordions() {
69
- $(Wick.PLPFiltersMobile.$ACCORDION).addClass(Wick.PLPFiltersMobile.ACCORDION_COLLAPSED);
70
- $(Wick.PLPFiltersMobile.$ACCORDION_CONTENT).hide();
71
- },
72
-
73
- init() {
74
- // two-way binding for input between desktop and modal
75
- $(document)
76
- .off('change.plpFiltersMobile', Wick.PLPFiltersMobile.INPUTS)
77
- .on('change.plpFiltersMobile', Wick.PLPFiltersMobile.INPUTS, function () {
78
- const inp = $(this);
79
- const name = inp.attr('name');
80
- if (!name) return;
81
-
82
- Wick.PLPUtils.syncTwinInputsByName(name, inp.prop('checked'), inp);
83
- });
84
-
85
- // when the modal is opened — synchronize its checkboxes with state
86
- $(document)
87
- .off('shown.bs.modal.plpFiltersMobile', Wick.PLPFiltersMobile.MODAL_SEL)
88
- .on('shown.bs.modal.plpFiltersMobile', Wick.PLPFiltersMobile.MODAL_SEL, function () {
89
- Wick.PLPFilters.setDOMFromState($(this), Wick.PLPFilters.appliedState);
90
- });
91
-
92
- $(document)
93
- .off('hide.bs.modal.plpFiltersMobile', Wick.PLPFiltersMobile.MODAL_SEL)
94
- .on('hide.bs.modal.plpFiltersMobile', Wick.PLPFiltersMobile.MODAL_SEL, function () {
95
- Wick.PLPFiltersMobile.hideAccordions();
96
- });
97
-
98
- // mobile "View results" button in modal
99
- $(document)
100
- .off('click.plpFiltersMobile', Wick.PLPFiltersMobile.MODAL_VIEW_BTN)
101
- .on('click.plpFiltersMobile', Wick.PLPFiltersMobile.MODAL_VIEW_BTN, function (e) {
102
- if ($(this).data('is-plp-srp')) {
103
- e.stopImmediatePropagation();
104
- e.preventDefault();
105
- return;
106
- }
107
-
108
- e.preventDefault();
109
-
110
- const scope = $(Wick.PLPFiltersMobile.ROOT_WRAPPER).add(
111
- $(Wick.PLPFiltersMobile.MODAL_SEL)
112
- );
113
-
114
- Wick.PLPFilters.applyFromScopes(scope, true);
115
- });
116
-
117
- // mobile "Clear all" button in modal
118
- $(document)
119
- .off('click.plpFiltersMobile', Wick.PLPFiltersMobile.MODAL_CLEAR_BTN)
120
- .on('click.plpFiltersMobile', Wick.PLPFiltersMobile.MODAL_CLEAR_BTN, function (e) {
121
- if ($(this).data('is-plp-srp')) {
122
- e.stopImmediatePropagation();
123
- e.preventDefault();
124
- return;
125
- }
126
-
127
- e.preventDefault();
128
-
129
- Wick.PLPFilters.appliedState = {};
130
- Wick.PLPFilters.writeStateToURL(Wick.PLPFilters.appliedState, false);
131
-
132
- $(document)
133
- .find(Wick.PLPFiltersMobile.INPUTS + ':checked')
134
- .prop('checked', false);
135
-
136
- Wick.PLPFilters.updateSelectedUI($(Wick.PLPFiltersMobile.ROOT_WRAPPER));
137
- });
138
-
139
- // emulation watcher (stub backend)
140
- $(document)
141
- .off('productCounter:change.plpFiltersMobile')
142
- .on('productCounter:change.plpFiltersMobile', function () {
143
- Wick.PLPFiltersMobile.updateMobileFilterInfo();
144
- Wick.PLPFiltersMobile.updateViewResultsButton();
145
- });
146
-
147
- Wick.PLPFiltersMobile.updateMobileFilterInfo();
148
- Wick.PLPFiltersMobile.updateViewResultsButton();
149
- },
150
- };
@@ -1,123 +0,0 @@
1
- var Wick = window.Wick || {};
2
-
3
- Wick.PLPFiltersPanel = {
4
- ROOT: '.plp-filters',
5
- BAR: '.plp-filters__bar',
6
- GROUP: '.plp-filters__group',
7
- TOGGLE: '.plp-filters__toggle',
8
- PANEL: '.plp-filters__panel',
9
-
10
- init() {
11
- // toggle
12
- $(document).on('click', Wick.PLPFiltersPanel.TOGGLE, Wick.PLPFiltersPanel.togglePanel);
13
-
14
- // close outside filters / ESC
15
- $(document).on('click', (e) => {
16
- const root = $(Wick.PLPFiltersPanel.ROOT);
17
- if (!root.is(e.target) && root.has(e.target).length === 0) {
18
- Wick.PLPFiltersPanel.closeAll();
19
- }
20
- });
21
-
22
- $(document).on('keydown', (e) => {
23
- if (e.key === 'Escape') {
24
- Wick.PLPFiltersPanel.closeAll();
25
- }
26
- });
27
-
28
- // responsive (position of the opened panel)
29
- $(window).on(
30
- 'resize',
31
- _.debounce(() => {
32
- const open = $(Wick.PLPFiltersPanel.GROUP + '.is-open').first();
33
- if (open.length) {
34
- const btn = open.find(Wick.PLPFiltersPanel.TOGGLE).first();
35
- Wick.PLPFiltersPanel.layoutPanel(btn);
36
- }
37
- }, 120)
38
- );
39
- },
40
-
41
- togglePanel(e) {
42
- e.preventDefault();
43
- const btn = $(this);
44
- const group = btn.closest(Wick.PLPFiltersPanel.GROUP);
45
- const panel = group.children(Wick.PLPFiltersPanel.PANEL).first();
46
- const willOpen = !group.hasClass('is-open');
47
-
48
- Wick.PLPFiltersPanel.closeAll();
49
- if (willOpen) {
50
- group.addClass('is-open');
51
- btn.attr('aria-expanded', 'true');
52
- panel.attr('aria-hidden', 'false');
53
- requestAnimationFrame(() => Wick.PLPFiltersPanel.layoutPanel(btn));
54
- }
55
- },
56
-
57
- closeAll() {
58
- $(Wick.PLPFiltersPanel.GROUP).removeClass('is-open');
59
- $(Wick.PLPFiltersPanel.TOGGLE).attr('aria-expanded', 'false');
60
- $(Wick.PLPFiltersPanel.PANEL)
61
- .attr('aria-hidden', 'true')
62
- .removeClass('plp-filters__panel--wide plp-filters__panel--auto')
63
- .css({ left: '', right: '' });
64
- },
65
-
66
- layoutPanel(btn) {
67
- const root = $(Wick.PLPFiltersPanel.ROOT);
68
- const group = btn.closest(Wick.PLPFiltersPanel.GROUP);
69
- const panel = group.children(Wick.PLPFiltersPanel.PANEL).first();
70
-
71
- let bar = group.closest(Wick.PLPFiltersPanel.BAR);
72
- if (!bar.length) {
73
- bar =
74
- root.find('.plp-filters__bar-desktop:visible').first() ||
75
- root.find('.plp-filters__bar-desktop').first() ||
76
- root.find(Wick.PLPFiltersPanel.BAR).filter(':visible').first() ||
77
- root.find(Wick.PLPFiltersPanel.BAR).first();
78
- }
79
- if (!bar.length || !panel.length) {
80
- return;
81
- }
82
-
83
- panel
84
- .removeClass('plp-filters__panel--wide plp-filters__panel--auto')
85
- .css({ left: '', right: '', width: '' });
86
-
87
- const barOff = bar.offset();
88
- const groupOff = group.offset();
89
- const barW = Math.round(bar.outerWidth());
90
- const groupLeftWithinBar = Math.round(groupOff.left - barOff.left);
91
-
92
- const type = Wick.PLPUtils.getPanelType(panel);
93
- const items = Math.max(1, Wick.PLPUtils.countItems(panel));
94
-
95
- if (type === 'cards') {
96
- Wick.PLPUtils.setCardsColumns(panel, Math.min(items, 4));
97
- let leftWithinBar = groupLeftWithinBar;
98
- const panelW = panel.outerWidth();
99
- if (leftWithinBar + panelW > barW) {
100
- leftWithinBar = barW - panelW;
101
- }
102
- if (leftWithinBar < 0) {
103
- leftWithinBar = 0;
104
- }
105
- panel.css({ left: leftWithinBar - groupLeftWithinBar });
106
- return;
107
- }
108
- if (type === 'swatches') {
109
- const panelW = panel.outerWidth();
110
- let leftWithinBar = groupLeftWithinBar;
111
- if (leftWithinBar + panelW > barW) {
112
- leftWithinBar = barW - panelW;
113
- if (leftWithinBar < 0) {
114
- leftWithinBar = 0;
115
- }
116
- }
117
- panel.css({ left: leftWithinBar - groupLeftWithinBar });
118
- return;
119
- }
120
- // text → fix to the right edge
121
- panel.css({ right: 0 });
122
- },
123
- };
@@ -1,66 +0,0 @@
1
- var Wick = window.Wick || {};
2
-
3
- Wick.PLPUtils = (function () {
4
- function syncTwinInputsByName(name, checked, source) {
5
- const all = $('.filter-card__checkbox, .swatch__checkbox, .checkbox__input').filter(
6
- function () {
7
- return $(this).attr('name') === name;
8
- }
9
- );
10
- all.each(function () {
11
- if (source && this === source[0]) {
12
- return;
13
- }
14
- $(this).prop('checked', checked);
15
- });
16
- }
17
-
18
- function getPanelType(panel) {
19
- if (panel.find('.plp-filters__options--cards').length) {
20
- return 'cards';
21
- }
22
- if (panel.find('.swatch-list').length) {
23
- return 'swatches';
24
- }
25
- return 'text';
26
- }
27
-
28
- function countItems(panel) {
29
- const t = getPanelType(panel);
30
- if (t === 'cards') {
31
- return panel.find('.filter-card').length || 0;
32
- }
33
- if (t === 'swatches') {
34
- return panel.find('.swatch').length || 0;
35
- }
36
- return panel.find('.checkbox').length || 0;
37
- }
38
-
39
- function setCardsColumns(panel, cols) {
40
- const wrap = panel.find('.plp-filters__options--cards');
41
- if (wrap.length) {
42
- wrap.css('grid-template-columns', `repeat(${cols}, minmax(0,1fr))`);
43
- }
44
- }
45
-
46
- function getGroupsMeta(rootWrapper, selGroup) {
47
- const out = [];
48
- rootWrapper.find(selGroup).each((_, el) => {
49
- const group = $(el);
50
- const domName = group.attr('data-filter') || '';
51
- if (!domName) {
52
- return;
53
- }
54
- out.push({ domName, paramKey: domName, group });
55
- });
56
- return out;
57
- }
58
-
59
- return {
60
- syncTwinInputsByName,
61
- getPanelType,
62
- countItems,
63
- setCardsColumns,
64
- getGroupsMeta,
65
- };
66
- })();