wickes-css2 2.110.0 → 2.111.0-complete-your-project.1

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 (112) hide show
  1. package/build/css/category-main.css +1 -1
  2. package/build/css/homepage-main.css +1 -1
  3. package/build/css/kitchen-plp-main.css +1 -1
  4. package/build/css/main.css +1 -1
  5. package/build/css/my-account-main-v2.css +1 -1
  6. package/build/css/my-account-main.css +1 -1
  7. package/build/css/pages/page_personal-details.css +1 -1
  8. package/build/css/pages/page_product-details-v2.css +1 -1
  9. package/build/css/pdp-main-before-combine.css +1 -1
  10. package/build/css/pdp-main-critical.css +1 -1
  11. package/build/css/pdp-main-non-critical.css +1 -1
  12. package/build/css/pdp-main.css +1 -1
  13. package/build/css/plp-main.css +1 -1
  14. package/build/css/store-locator-main.css +1 -1
  15. package/build/js/account-hub.min.js +1 -1
  16. package/build/js/basket.min.js +1 -1
  17. package/build/js/bloomreach-widget.min.js +1 -0
  18. package/build/js/bundle.min.js +1 -1
  19. package/build/js/checkout.min.js +1 -1
  20. package/build/js/emulation.min.js +3025 -217
  21. package/build/js/general.bundle.min.js +1 -1
  22. package/build/js/merged-checkout.min.js +1 -1
  23. package/build/js/page/bloomreach-widget.js +1148 -0
  24. package/build/js/page/utils/create-count-stepper.js +30 -9
  25. package/build/js/page/utils/create-loading-button.js +37 -0
  26. package/build/js/page/utils/create-toast.js +79 -0
  27. package/build/js/page/utils/custom-dropdown.js +80 -0
  28. package/build/js/pdp-count-stepper.min.js +1 -1
  29. package/build/js/pdp.bundle.min.js +1 -1
  30. package/build/js/plp.bundle.min.js +1 -1
  31. package/build/js/project-list.min.js +1 -1
  32. package/build/js/saving-shopping-list.min.js +1 -1
  33. package/package.json +1 -1
  34. package/src/components/base/button.hbs +23 -5
  35. package/src/components/bloomreach/complete-card-dropdown.hbs +47 -0
  36. package/src/components/bloomreach/complete-card-skeleton.hbs +19 -0
  37. package/src/components/bloomreach/complete-card.hbs +138 -0
  38. package/src/components/bloomreach/complete-divider.hbs +3 -0
  39. package/src/components/bloomreach/complete-summary-skeleton.hbs +12 -0
  40. package/src/components/bloomreach/complete-summary.hbs +43 -0
  41. package/src/components/bloomreach/complete-wrapper.hbs +1 -0
  42. package/src/components/bloomreach/complete-your-project.hbs +21 -0
  43. package/src/components/gift-cards.hbs +1 -1
  44. package/src/elements/checkbox.hbs +8 -1
  45. package/src/js/components/general/cart-slider.js +19 -6
  46. package/src/js/emulation/bloomreach-widget-calculations.js +140 -0
  47. package/src/js/emulation/bloomreach-widget-loading.js +11 -0
  48. package/src/js/emulation/mock.js +3097 -1
  49. package/src/js/emulation/notify-me.js +1 -1
  50. package/src/js/page/bloomreach-widget.js +1148 -0
  51. package/src/js/page/utils/create-count-stepper.js +30 -9
  52. package/src/js/page/utils/create-loading-button.js +37 -0
  53. package/src/js/page/utils/create-toast.js +79 -0
  54. package/src/js/page/utils/custom-dropdown.js +80 -0
  55. package/src/page_product-details-banner.html +0 -1
  56. package/src/page_product-details-big-wins-disabled-delivery.html +0 -1
  57. package/src/page_product-details-big-wins-non-registered.html +0 -1
  58. package/src/page_product-details-big-wins-out-nearest.html +0 -1
  59. package/src/page_product-details-big-wins-unhappy.html +0 -1
  60. package/src/page_product-details-big-wins.html +0 -1
  61. package/src/page_product-details-billie.html +0 -1
  62. package/src/page_product-details-bloomreach.html +130 -0
  63. package/src/page_product-details-calculator.html +0 -1
  64. package/src/page_product-details-cashback-v2.html +0 -1
  65. package/src/page_product-details-clearpay.html +0 -1
  66. package/src/page_product-details-cnc-error-notification.html +0 -1
  67. package/src/page_product-details-cnc-success-notification-vat.html +0 -1
  68. package/src/page_product-details-cnc-success-notification.html +0 -1
  69. package/src/page_product-details-default-store.html +0 -1
  70. package/src/page_product-details-energy-efficiency.html +0 -1
  71. package/src/page_product-details-flooring-with-pr-placeholder.html +0 -1
  72. package/src/page_product-details-flooring.html +0 -1
  73. package/src/page_product-details-gallery-actual.html +0 -1
  74. package/src/page_product-details-mfe-calculator.html +0 -1
  75. package/src/page_product-details-minimum-v2.html +0 -1
  76. package/src/page_product-details-mtm-doors.html +0 -1
  77. package/src/page_product-details-only-clearpay.html +0 -1
  78. package/src/page_product-details-paint-mixing.html +0 -1
  79. package/src/page_product-details-saved-pl.html +0 -1
  80. package/src/page_product-details-tile-steps-klarna-widget-with-method-ids.html +0 -1
  81. package/src/page_product-details-tile-steps-logout.html +0 -1
  82. package/src/page_product-details-tile-steps-no-new-project-list.html +0 -1
  83. package/src/page_product-details-tile-steps-with-klarna.html +0 -1
  84. package/src/page_product-details-tile-steps.html +0 -1
  85. package/src/page_product-details-v2.html +0 -1
  86. package/src/page_product-details-vat.html +0 -1
  87. package/src/page_product-details-wisdom-mcfc-registered.html +0 -1
  88. package/src/page_product-details-wisdom-mcfc.html +0 -1
  89. package/src/page_product-details-wisdom-oos-registered.html +0 -1
  90. package/src/page_product-details-wisdom-oos.html +0 -1
  91. package/src/page_product-details-wisdom-registered.html +0 -1
  92. package/src/page_product-details-wisdom.html +0 -1
  93. package/src/page_product-details-with-favourite.html +0 -1
  94. package/src/page_product-details-with-global-search-v2.html +7 -1
  95. package/src/page_product-details_no-previous-default.html +0 -1
  96. package/src/page_track-my-order-result.html +1 -0
  97. package/src/partials/scripts.hbs +1 -0
  98. package/src/scss/common/_common.scss +1 -0
  99. package/src/scss/common/_elements.scss +13 -1
  100. package/src/scss/common/_loading-button.scss +49 -0
  101. package/src/scss/components/_notifications.scss +86 -5
  102. package/src/scss/components/bloomreach/_bloomreach.scss +3 -0
  103. package/src/scss/components/bloomreach/_complete-card-dropdown.scss +174 -0
  104. package/src/scss/components/bloomreach/_complete-card.scss +402 -0
  105. package/src/scss/components/bloomreach/_complete-your-project.scss +207 -0
  106. package/src/scss/helpers/_variables.scss +1 -0
  107. package/src/scss/pages/page_product-details-v2.scss +45 -2
  108. package/src/scss/pdp-main-critical.scss +0 -1
  109. package/src/scss/pdp-main.scss +1 -1
  110. package/src/sitemap.html +6 -0
  111. package/src/scss/components/_pdp-action-v2-critical.scss +0 -27
  112. package/src/scss/components/_pdp-action-v2.scss +0 -27
@@ -18,7 +18,8 @@ function normalizeOptions(options) {
18
18
  }
19
19
 
20
20
  function toInt(value) {
21
- const n = parseInt(String(value || '').trim(), 10);
21
+ const n = parseInt(`${value || ''}`.trim(), 10);
22
+
22
23
  return Number.isFinite(n) ? n : NaN;
23
24
  }
24
25
 
@@ -28,6 +29,7 @@ function clampMin(n, min) {
28
29
 
29
30
  function ensureQty(value, fallback) {
30
31
  const n = toInt(value);
32
+
31
33
  return Number.isFinite(n) ? n : fallback;
32
34
  }
33
35
 
@@ -58,12 +60,15 @@ function updateButtons($input, opt) {
58
60
 
59
61
  const $minus = getMinusBtn($wrap);
60
62
 
61
- if ($minus.length) $minus.prop('disabled', qty <= opt.min);
63
+ if ($minus.length) {
64
+ $minus.prop('disabled', qty <= opt.min);
65
+ }
62
66
  }
63
67
 
64
68
  function setQty($input, opt, qty) {
65
69
  const next = clampMin(qty, opt.min);
66
- $input.val(String(next));
70
+
71
+ $input.val(`${next}`);
67
72
  updateButtons($input, opt);
68
73
 
69
74
  if (typeof opt.onChange === 'function') {
@@ -83,11 +88,13 @@ function ensureButtons($input, opt) {
83
88
  if (!hasMinus) {
84
89
  $input.before(buildBtn('minus', true));
85
90
  }
91
+
86
92
  if (!hasPlus) {
87
93
  $input.after(buildBtn('plus', false));
88
94
  }
89
95
 
90
96
  const initial = ensureQty($input.val(), opt.min);
97
+
91
98
  setQty($input, opt, initial);
92
99
  }
93
100
 
@@ -95,16 +102,24 @@ function getInputs($root, inputSel) {
95
102
  const $scope = $root && $root.length ? $root : $(document);
96
103
  const $self = $scope.is(inputSel) ? $scope : $();
97
104
  const $found = $scope.find(inputSel);
105
+
98
106
  return $self.add($found);
99
107
  }
100
108
 
109
+ function getNamespace(inputSel) {
110
+ return `.countStepper_${inputSel.replace(/[^a-zA-Z0-9_-]/g, '')}`;
111
+ }
112
+
101
113
  // ===== FACTORY =====
102
114
 
103
115
  export function createCountStepper(options = {}) {
104
116
  const OPT = normalizeOptions(options);
105
- if (!OPT.inputSel) throw new Error('[createCountStepper] Missing inputSel');
106
117
 
107
- const NS = `.cnt_${Math.random().toString(16).slice(2)}`;
118
+ if (!OPT.inputSel) {
119
+ throw new Error('[createCountStepper] Missing inputSel');
120
+ }
121
+
122
+ const NS = getNamespace(OPT.inputSel);
108
123
 
109
124
  function init($root) {
110
125
  getInputs($root, OPT.inputSel).each(function () {
@@ -112,7 +127,6 @@ export function createCountStepper(options = {}) {
112
127
  });
113
128
  }
114
129
 
115
- // +/- click
116
130
  $(document)
117
131
  .off(`click${NS}`, '[data-count-btn]')
118
132
  .on(`click${NS}`, '[data-count-btn]', function (e) {
@@ -120,15 +134,22 @@ export function createCountStepper(options = {}) {
120
134
  const $parent = $btn.parent();
121
135
  const $input = $parent.find(OPT.inputSel).first();
122
136
 
123
- if (!$input.length) return;
137
+ if (!$input.length) {
138
+ return;
139
+ }
124
140
 
125
141
  e.preventDefault();
126
142
 
127
143
  const type = ($btn.attr('data-count-type') || '').toLowerCase();
128
144
  const current = ensureQty($input.val(), OPT.min);
129
145
 
130
- if (type === 'plus') setQty($input, OPT, current + 1);
131
- if (type === 'minus') setQty($input, OPT, current - 1);
146
+ if (type === 'plus') {
147
+ setQty($input, OPT, current + 1);
148
+ }
149
+
150
+ if (type === 'minus') {
151
+ setQty($input, OPT, current - 1);
152
+ }
132
153
  });
133
154
 
134
155
  $(document)
@@ -0,0 +1,37 @@
1
+ export function createLoadingButton(config = {}) {
2
+ const settings = {
3
+ text: '.loading-button__text',
4
+ loader: '.loading-button__loader',
5
+ loadingClass: 'loading-button--loading',
6
+ ...config,
7
+ };
8
+
9
+ function setLoading($button, isLoading) {
10
+ if (!$button.length) {
11
+ return;
12
+ }
13
+
14
+ $button.toggleClass(settings.loadingClass, isLoading);
15
+ $button.find(settings.text).toggleClass('d-none', isLoading);
16
+ $button.find(settings.loader).toggleClass('d-none', !isLoading);
17
+ }
18
+
19
+ function start($button) {
20
+ setLoading($button, true);
21
+ }
22
+
23
+ function stop($button) {
24
+ setLoading($button, false);
25
+ }
26
+
27
+ function isLoading($button) {
28
+ return $button.hasClass(settings.loadingClass);
29
+ }
30
+
31
+ return {
32
+ setLoading,
33
+ start,
34
+ stop,
35
+ isLoading,
36
+ };
37
+ }
@@ -0,0 +1,79 @@
1
+ export function createToast(config = {}) {
2
+ const settings = {
3
+ containerClass: 'toast-container',
4
+ toastClass: 'toast',
5
+ closeSelector: '.notification__close',
6
+ backdropClass: 'modal-backdrop--toast',
7
+ duration: 3000,
8
+ template: null,
9
+ getData(type, text) {
10
+ return {
11
+ text,
12
+ classModifier: `${settings.toastClass} notification_${type}`,
13
+ success: type === 'success',
14
+ warning: type === 'warning',
15
+ error: type === 'error',
16
+ };
17
+ },
18
+ ...config,
19
+ };
20
+
21
+ let closeTimer = null;
22
+
23
+ function clearCloseTimer() {
24
+ if (closeTimer) {
25
+ window.clearTimeout(closeTimer);
26
+ closeTimer = null;
27
+ }
28
+ }
29
+
30
+ function hide() {
31
+ clearCloseTimer();
32
+
33
+ $(`.${settings.containerClass}`).remove();
34
+ $(`.${settings.backdropClass}`).removeClass(settings.backdropClass);
35
+
36
+ if (window.Wick && Wick.Backdrop) {
37
+ Wick.Backdrop.hide();
38
+ }
39
+
40
+ $(document).off('click.toast');
41
+ }
42
+
43
+ function show({ type = 'success', text = '' }) {
44
+ if (!settings.template) {
45
+ return;
46
+ }
47
+
48
+ hide();
49
+
50
+ const toastHtml = settings.template(settings.getData(type, text));
51
+
52
+ if (window.Wick && Wick.Backdrop) {
53
+ Wick.Backdrop.show();
54
+ $('.modal-backdrop').addClass(settings.backdropClass);
55
+ }
56
+
57
+ $('body').append(`<div class="${settings.containerClass}">${toastHtml}</div>`);
58
+
59
+ $(`.${settings.containerClass}`)
60
+ .off('click.toastClose', settings.closeSelector)
61
+ .on('click.toastClose', settings.closeSelector, function (event) {
62
+ event.preventDefault();
63
+ hide();
64
+ });
65
+
66
+ $(document)
67
+ .off('click.toast')
68
+ .on('click.toast', `.${settings.backdropClass}`, function () {
69
+ hide();
70
+ });
71
+
72
+ closeTimer = window.setTimeout(hide, settings.duration);
73
+ }
74
+
75
+ return {
76
+ show,
77
+ hide,
78
+ };
79
+ }
@@ -0,0 +1,80 @@
1
+ export function createDropdown(config) {
2
+ const settings = {
3
+ root: '[data-dropdown]',
4
+ toggle: '[data-dropdown-toggle]',
5
+ value: '[data-dropdown-value]',
6
+ option: '[data-dropdown-option]',
7
+ openClass: 'dropdown--open',
8
+ selectedClass: 'dropdown__option--selected',
9
+ selectedValueData: 'selected-value',
10
+ ariaExpandedAttr: 'aria-expanded',
11
+ ariaSelectedAttr: 'aria-selected',
12
+ namespace: 'customDropdown',
13
+ onSelect: function () {},
14
+ ...config,
15
+ };
16
+
17
+ function closeAll() {
18
+ $(settings.root).each(function () {
19
+ const $dropdown = $(this);
20
+ const $toggle = $dropdown.find(settings.toggle);
21
+
22
+ $dropdown.removeClass(settings.openClass);
23
+ $toggle.attr(settings.ariaExpandedAttr, 'false');
24
+ });
25
+ }
26
+
27
+ function selectOption($dropdown, $option) {
28
+ const $value = $dropdown.find(settings.value);
29
+ const $options = $dropdown.find(settings.option);
30
+ const selectedValue = $option.attr('data-value') || '';
31
+
32
+ $options.removeClass(settings.selectedClass).attr(settings.ariaSelectedAttr, 'false');
33
+ $option.addClass(settings.selectedClass).attr(settings.ariaSelectedAttr, 'true');
34
+
35
+ if ($value.length) {
36
+ $value.text($option.text().trim());
37
+ }
38
+
39
+ $dropdown.data(settings.selectedValueData, selectedValue);
40
+
41
+ settings.onSelect($dropdown, $option, selectedValue);
42
+ }
43
+
44
+ function bind() {
45
+ $(document).off(`click.${settings.namespace}`);
46
+ $(document).on(`click.${settings.namespace}`, function (event) {
47
+ const $target = $(event.target);
48
+ const $toggle = $target.closest(settings.toggle);
49
+ const $option = $target.closest(settings.option);
50
+ const $dropdown = $target.closest(settings.root);
51
+
52
+ if (!$dropdown.length) {
53
+ closeAll();
54
+ return;
55
+ }
56
+
57
+ if ($toggle.length) {
58
+ const isOpen = $dropdown.hasClass(settings.openClass);
59
+
60
+ closeAll();
61
+
62
+ $dropdown.toggleClass(settings.openClass, !isOpen);
63
+ $toggle.attr(settings.ariaExpandedAttr, String(!isOpen));
64
+
65
+ return;
66
+ }
67
+
68
+ if ($option.length) {
69
+ selectOption($dropdown, $option);
70
+ closeAll();
71
+ }
72
+ });
73
+ }
74
+
75
+ return {
76
+ bind,
77
+ closeAll,
78
+ selectOption,
79
+ };
80
+ }
@@ -63,7 +63,6 @@
63
63
  delivery=true
64
64
  nearest-purchase=true
65
65
  }}
66
- {{> fulfilment-accordions }}
67
66
  </div>
68
67
  <div class="pdp__description">
69
68
  {{> product-main-info-v2 isAdvice=true}}
@@ -63,7 +63,6 @@
63
63
  nearest-purchase=true
64
64
  more-stores-present=true
65
65
  }}
66
- {{> fulfilment-accordions }}
67
66
  </div>
68
67
  <div class="pdp__description">
69
68
  {{> product-main-info-v2 }}
@@ -63,7 +63,6 @@
63
63
  nearest-purchase=true
64
64
  more-stores-present=true
65
65
  }}
66
- {{> fulfilment-accordions }}
67
66
  </div>
68
67
  <div class="pdp__description">
69
68
  {{> product-main-info-v2 }}
@@ -62,7 +62,6 @@
62
62
  nearest-purchase=true
63
63
  more-stores-present=true
64
64
  }}
65
- {{> fulfilment-accordions }}
66
65
  </div>
67
66
  <div class="pdp__description">
68
67
  {{> product-main-info-v2 }}
@@ -64,7 +64,6 @@
64
64
  nearest-purchase=true
65
65
  more-stores-present=true
66
66
  }}
67
- {{> fulfilment-accordions }}
68
67
  </div>
69
68
  <div class="pdp__description">
70
69
  {{> product-main-info-v2 }}
@@ -63,7 +63,6 @@
63
63
  nearest-purchase=true
64
64
  more-stores-present=true
65
65
  }}
66
- {{> fulfilment-accordions }}
67
66
  </div>
68
67
  <div class="pdp__description">
69
68
  {{> product-main-info-v2 }}
@@ -67,7 +67,6 @@ pagePdp=true
67
67
  clearpay-placement=true
68
68
  billie-placement=true
69
69
  }}
70
- {{> fulfilment-accordions }}
71
70
  </div>
72
71
  <div class="pdp__description">
73
72
  {{> product-main-info-v2 isAdvice=true}}
@@ -0,0 +1,130 @@
1
+ {{#extend "base" pageClass="page-product-details" title="Product details page new"
2
+ isDiscount=true
3
+ isSQM=true
4
+ isDescription=true
5
+ isCashback=false
6
+ isSize=true
7
+ isGuide=true
8
+ hourly-delivery=true
9
+ badge-text='15% off'
10
+ badge-color='yellow'
11
+ badge-text-color='gray'
12
+ currentlyInStock=true
13
+ pagePdp=true
14
+ globalSearchV2="true"
15
+ switch-vat=true
16
+ }}
17
+ {{#content "head" mode="append" pagePdp=true}}
18
+ <link type="text/css" rel="stylesheet" href="./css/components/global-search.css">
19
+ {{/content}}
20
+ {{#content "body"}}
21
+ <main class="pdp__main">
22
+ <div class="container">
23
+ <div class="pdp">
24
+ <div class="pdp__title">
25
+ <h1 class="pdp__heading">Bosch PSB 1800 LI-2 18V Li-Ion Cordless Combi Drill Example with long
26
+ title in two raws
27
+ </h1>
28
+ <div class="pdp__reviews_small">
29
+ <span class="product-code product-code-v2">Product code: <strong id="product-code-val">236334</strong></span>
30
+ <div class="product-card__reviews review-star">
31
+ <div class="product-rating product-rating-v2">
32
+ <div class="rating-bg">
33
+ <i class="fa fa-star" aria-hidden="true"></i>
34
+ <i class="fa fa-star" aria-hidden="true"></i>
35
+ <i class="fa fa-star" aria-hidden="true"></i>
36
+ <i class="fa fa-star" aria-hidden="true"></i>
37
+ <i class="fa fa-star" aria-hidden="true"></i>
38
+ <div class="rating-overlay"
39
+ data-rating="{{#if review-rating}}{{review-rating}}{{else}}0{{/if}}">
40
+ <i class="fa fa-star" aria-hidden="true"></i>
41
+ <i class="fa fa-star" aria-hidden="true"></i>
42
+ <i class="fa fa-star" aria-hidden="true"></i>
43
+ <i class="fa fa-star" aria-hidden="true"></i>
44
+ <i class="fa fa-star" aria-hidden="true"></i>
45
+ </div>
46
+ </div>
47
+ </div>
48
+ <span class="review-star-average review-star-average-v2">(4.6)</span>
49
+ </div>
50
+ <span class="pdp__reviews-link-wrap"><a href="#" data-link="#pdp-reviews" id="open-review">82 reviews</a></span>
51
+ </div>
52
+ </div>
53
+
54
+ <div class="pdp__gallery">
55
+ {{> gallery-pdp-v2 }}
56
+ </div>
57
+ <div class="pdp__aside">
58
+ {{> price-block-v2
59
+ isProductSaved=false
60
+ isUserLogedOut=true
61
+ install=true
62
+ sample=true
63
+ cc=true
64
+ delivery=true
65
+ }}
66
+ </div>
67
+ <div class="pdp__description">
68
+ {{> product-main-info-v2 isProductSaved=true}}
69
+ </div>
70
+ <div
71
+ class="pdp__widget"
72
+ data-complete-widget
73
+ data-context-key="completeYourProject2Recomendations"
74
+ >
75
+ {{> bloomreach/complete-your-project title="Complete your project"}}
76
+ </div>
77
+ {{> fulfilment-accordions }}
78
+ </div>
79
+ </div>
80
+ <div class="container container-info">
81
+ <div class="pdp">
82
+ <div class="pdp__info">
83
+ {{> pdp-info-v2 }}
84
+ </div>
85
+ </div>
86
+ </div>
87
+ {{> recently-viewed }}
88
+
89
+ {{> similar-products-v2 }}
90
+
91
+ {{> seo-widgets title="More products" }}
92
+ {{> seo-widgets title="Related category" }}
93
+ </main>
94
+ {{/content}}
95
+ {{#content "foot" mode="append"}}
96
+ <script type="text/html" id="mini-basket-popup">
97
+ {{> popover-mini-basket mod="popover-mini-basket_just-added" products=mini-basket.just-added just-added=true}}
98
+ </script>
99
+ <script defer src="./js/page/pdp.js"></script>
100
+ <script defer src="./js/global-search.min.js"></script>
101
+ {{#extend "modal" id="modal-pdp-feedback" title="Feedback Form" fullWidth=true}}
102
+ {{#content "body"}}
103
+ <iframe class="cboxIframe" name="cbox1538824723052"
104
+ src="https://docs.google.com/forms/d/1jHV5b8AazYbPmoTXJBxmyns4AcRhtKnnIC4_K_MFOPU/viewform?entry.1452922942=Wickes+Blue+Slate+Chippings+-+Major+Bag&amp;entry.1885983523=Decorative+Uk+sourced+blue+slate+chippings+are+ideal+for+gardens+and+borders.+This+beautiful+stone+changes+colour+when+wet.&amp;entry.935962220=112777&amp;entry.474385230=1000626184"></iframe>
105
+ {{/content}}
106
+ {{/extend}}
107
+ {{> click-and-collect-modal}}
108
+ {{/content}}
109
+ {{/extend}}
110
+ <!--<script defer src="./js/components/badge-cashback.js"></script>-->
111
+ <script>
112
+ if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) {
113
+ $(document).ready(function () {
114
+ $('.modal').on('scroll', function () {
115
+ $(':focus').blur();
116
+ });
117
+ });
118
+ }
119
+
120
+ $(document).ready(function () {
121
+
122
+ $('#info-details').toggleClass('accordion_collapsed');
123
+ $('#details-content').css('display', 'block');
124
+
125
+ $('#open-review').on('click', function () {
126
+ $('#info-review').toggleClass('accordion_collapsed');
127
+ $('#review-content').css('display', 'block');
128
+ })
129
+ })
130
+ </script>
@@ -60,7 +60,6 @@
60
60
  cc=true
61
61
  delivery=true
62
62
  }}
63
- {{> fulfilment-accordions }}
64
63
  </div>
65
64
  <div class="pdp__description">
66
65
  {{> product-main-info-v2 isAdvice=true}}
@@ -59,7 +59,6 @@
59
59
  cc=true
60
60
  delivery=true
61
61
  }}
62
- {{> fulfilment-accordions }}
63
62
  </div>
64
63
  <div class="pdp__description">
65
64
  {{> product-main-info-v2 isAdvice=true}}
@@ -67,7 +67,6 @@ pagePdp=true
67
67
  klarna-placement=true
68
68
  clearpay-placement=true
69
69
  }}
70
- {{> fulfilment-accordions }}
71
70
  </div>
72
71
  <div class="pdp__description">
73
72
  {{> product-main-info-v2 isAdvice=true}}
@@ -65,7 +65,6 @@
65
65
  nearest-purchase=true
66
66
  more-stores-present=true
67
67
  }}
68
- {{> fulfilment-accordions }}
69
68
  </div>
70
69
  <div class="pdp__description">
71
70
  {{> product-main-info-v2 }}
@@ -67,7 +67,6 @@
67
67
  nearest-purchase=true
68
68
  more-stores-present=true
69
69
  }}
70
- {{> fulfilment-accordions }}
71
70
  </div>
72
71
  <div class="pdp__description">
73
72
  {{> product-main-info-v2 }}
@@ -65,7 +65,6 @@
65
65
  nearest-purchase=true
66
66
  more-stores-present=true
67
67
  }}
68
- {{> fulfilment-accordions }}
69
68
  </div>
70
69
  <div class="pdp__description">
71
70
  {{> product-main-info-v2 }}
@@ -67,7 +67,6 @@
67
67
  toBeDefaultName="Borehamwood"
68
68
  nearestName="Borehamwood"
69
69
  }}
70
- {{> fulfilment-accordions }}
71
70
  </div>
72
71
  <div class="pdp__description">
73
72
  {{> product-main-info-v2 }}
@@ -81,7 +81,6 @@ pagePdp=true
81
81
  more-stores-present=true
82
82
  isExcludingDelivery=true
83
83
  }}
84
- {{> fulfilment-accordions }}
85
84
  </div>
86
85
  <div class="pdp__description">
87
86
  {{> product-main-info-v2
@@ -87,7 +87,6 @@
87
87
  </div>
88
88
  <div class="pdp__aside">
89
89
  {{> price-block-v2 isProductSaved=false isUserLogedOut=false }}
90
- {{> fulfilment-accordions }}
91
90
  </div>
92
91
  <div class="pdp__description">
93
92
  {{> product-main-info-v2 isAdvice=true}}
@@ -53,7 +53,6 @@
53
53
  </div>
54
54
  <div class="pdp__aside">
55
55
  {{> price-block-v2 isProductSaved=false isUserLogedOut=false }}
56
- {{> fulfilment-accordions }}
57
56
  </div>
58
57
  <div class="pdp__description">
59
58
  {{> product-main-info-v2 isAdvice=true}}
@@ -306,7 +306,6 @@
306
306
  delivery=true
307
307
  nearest-purchase=true
308
308
  }}
309
- {{> fulfilment-accordions }}
310
309
  </div>
311
310
  <div class="pdp__description">
312
311
  {{> product-main-info-v2 isAdvice=true}}
@@ -87,7 +87,6 @@ pagePdp=true
87
87
  klarna-placement=true
88
88
  clearpay-placement=true
89
89
  }}
90
- {{> fulfilment-accordions }}
91
90
  </div>
92
91
  <div class="pdp__description">
93
92
  {{> product-main-info-v2
@@ -55,7 +55,6 @@
55
55
  cc=true
56
56
  delivery=true
57
57
  }}
58
- {{> fulfilment-accordions }}
59
58
  </div>
60
59
  <div class="pdp__description">
61
60
  {{> product-main-info-v2 isAdvice=true Video=true}}
@@ -51,7 +51,6 @@
51
51
  </div>
52
52
  <div class="pdp__aside">
53
53
  {{> price-block-order }}
54
- {{> fulfilment-accordions }}
55
54
  </div>
56
55
  <div class="pdp__description">
57
56
  {{> product-main-info-v2 isAdvice=true}}
@@ -66,7 +66,6 @@ pagePdp=true
66
66
  nearest-purchase=true
67
67
  clearpay-placement=true
68
68
  }}
69
- {{> fulfilment-accordions }}
70
69
  </div>
71
70
  <div class="pdp__description">
72
71
  {{> product-main-info-v2 isAdvice=true}}
@@ -58,7 +58,6 @@ pagePdp=true
58
58
  paint-mix=true
59
59
  default-store=true
60
60
  }}
61
- {{> fulfilment-accordions }}
62
61
  </div>
63
62
  <div class="pdp__description">
64
63
  {{> product-main-info-v2 }}
@@ -62,7 +62,6 @@
62
62
  cc=true
63
63
  delivery=true
64
64
  }}
65
- {{> fulfilment-accordions }}
66
65
  </div>
67
66
  <div class="pdp__description">
68
67
  {{> product-main-info-v2 isProductSaved=true}}
@@ -65,7 +65,6 @@
65
65
  klarna-placement=true
66
66
  klarna-method-ids="BathroomsFinance"
67
67
  }}
68
- {{> fulfilment-accordions }}
69
68
  </div>
70
69
  <div class="pdp__description">
71
70
  {{> product-main-info-v2 isAdvice=true}}