wickes-css2 2.113.0-develop.10 → 2.113.0-develop.12
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.
- package/build/css/category-main.css +1 -1
- package/build/css/components/price-block-v2-critical.css +1 -1
- package/build/css/components/price-block-v2.css +1 -1
- package/build/css/main.css +1 -1
- package/build/css/my-account-main-v2.css +1 -1
- package/build/css/my-account-main.css +1 -1
- package/build/css/pages/page_products-list-combined.css +1 -1
- package/build/css/pages/page_products-list_v2.css +1 -1
- package/build/css/pdp-main-before-combine.css +1 -1
- package/build/css/pdp-main-critical.css +1 -1
- package/build/css/pdp-main-non-critical.css +1 -1
- package/build/css/pdp-main.css +1 -1
- package/build/css/plp-main.css +1 -1
- package/build/js/page/ripple/thumb-gallery.js +102 -34
- package/package.json +1 -1
- package/src/components/suite-product-card.hbs +2 -2
- package/src/js/page/ripple/thumb-gallery.js +102 -34
- package/src/page_bathroom-plp-vat.html +1 -1
- package/src/page_bathroom-plp-without-load-more.html +1 -1
- package/src/page_bathroom-plp.html +1 -1
- package/src/page_product-details-ripple-gallery-1-image.html +120 -0
- package/src/page_product-details-ripple-gallery-missing-image.html +121 -0
- package/src/page_product-details-ripple-gallery.html +1 -1
- package/src/page_product-details-suite-includes-banners.html +1 -1
- package/src/page_product-details-suite-includes-billie.html +1 -1
- package/src/page_product-details-suite-includes-klarna.html +1 -1
- package/src/page_product-details-suite-includes-vat.html +1 -1
- package/src/page_product-details-suite-includes.html +1 -1
- package/src/scss/common/_loading-button.scss +3 -1
- package/src/scss/components/_thumb-gallery-critical.scss +5 -4
- package/src/scss/components/_thumb-gallery.scss +9 -1
- package/src/scss/components/price-block-v2-critical.scss +4 -0
- package/src/scss/components/price-block-v2.scss +4 -0
- package/src/scss/pages/page_products-list-combined.scss +8 -6
- package/src/scss/pages/page_products-list_v2.scss +8 -6
- package/src/sitemap.html +2 -0
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
var Wick = window.Wick || {};
|
|
2
2
|
|
|
3
3
|
Wick.ThumbGallery = (function () {
|
|
4
|
-
const BASE_URL = 'https://media.wickes.co.uk/image/upload/';
|
|
5
|
-
const productName = window.pdpProduct && window.pdpProduct.name ? window.pdpProduct.name : '';
|
|
6
|
-
|
|
7
4
|
const IMG_BREAKPOINTS = [
|
|
8
5
|
{ media: '(max-width: 576px)', w: 576, h: 324 },
|
|
9
6
|
{ media: '(max-width: 768px)', w: 510, h: 287 },
|
|
@@ -13,40 +10,75 @@ Wick.ThumbGallery = (function () {
|
|
|
13
10
|
const MAIN_DEFAULT = { w: 710, h: 399 };
|
|
14
11
|
const THUMB = { w: 100, h: 56 };
|
|
15
12
|
|
|
16
|
-
function
|
|
13
|
+
function getMediaDomain() {
|
|
14
|
+
return (typeof window !== 'undefined' && window.mediaDomain) || 'media.wickes.co.uk';
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function getProductName() {
|
|
18
|
+
return (typeof window !== 'undefined' && window.pdpProduct && window.pdpProduct.name) || '';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function getBaseUrl(customDomain) {
|
|
22
|
+
const domain = customDomain || getMediaDomain();
|
|
23
|
+
const cleanDomain = domain.replace(/^https?:\/\//, '').replace(/\/$/, '');
|
|
24
|
+
return `https://${cleanDomain}/image/upload/`;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function buildCloudinaryUrl(publicId, w, h, baseUrl) {
|
|
28
|
+
const base = baseUrl || getBaseUrl();
|
|
29
|
+
const cleanId = String(publicId).replace(/^\/+/, '');
|
|
17
30
|
const transforms = `b_rgb:FFFFFF,c_pad,dpr_1.0,f_jpg,h_${h},q_auto:good,w_${w}`;
|
|
18
|
-
return `${
|
|
31
|
+
return `${base}${transforms}/c_pad,h_${h},w_${w}/v1/${cleanId}`;
|
|
19
32
|
}
|
|
20
33
|
|
|
21
34
|
function parseIdentifiers(hybrisString) {
|
|
22
|
-
|
|
23
|
-
.
|
|
24
|
-
|
|
35
|
+
if (Array.isArray(hybrisString)) {
|
|
36
|
+
return hybrisString.filter(Boolean);
|
|
37
|
+
}
|
|
38
|
+
if (!hybrisString || typeof hybrisString !== 'string') {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
const trimmed = hybrisString.trim();
|
|
42
|
+
const content = trimmed.startsWith('[') && trimmed.endsWith(']')
|
|
43
|
+
? trimmed.slice(1, -1)
|
|
44
|
+
: trimmed;
|
|
45
|
+
|
|
46
|
+
return content
|
|
25
47
|
.split(',')
|
|
26
48
|
.map((s) => s.trim())
|
|
27
49
|
.filter(Boolean);
|
|
28
50
|
}
|
|
29
51
|
|
|
30
|
-
function
|
|
31
|
-
const
|
|
32
|
-
(bp) =>
|
|
33
|
-
`<source srcset="${buildCloudinaryUrl(publicId, bp.w, bp.h)}" media="${bp.media}">`
|
|
34
|
-
).join('\n ');
|
|
35
|
-
|
|
52
|
+
function renderMainSlide(src, sourcesHtml = '') {
|
|
53
|
+
const productName = getProductName();
|
|
36
54
|
return `<div class="thumb-gallery__slide-wrapper swiper-slide">
|
|
37
55
|
<picture>
|
|
38
|
-
${
|
|
39
|
-
<img class="swiper-slide-main" src="${
|
|
56
|
+
${sourcesHtml}
|
|
57
|
+
<img class="swiper-slide-main" src="${src}" alt="${productName}">
|
|
40
58
|
</picture>
|
|
41
59
|
</div>`;
|
|
42
60
|
}
|
|
43
61
|
|
|
44
|
-
function
|
|
62
|
+
function renderThumbSlide(src) {
|
|
63
|
+
const productName = getProductName();
|
|
45
64
|
return `<div class="thumb-gallery__slide-wrapper swiper-slide">
|
|
46
|
-
<img class="swiper-slide-thumbs" src="${
|
|
65
|
+
<img class="swiper-slide-thumbs" src="${src}" alt="${productName}">
|
|
47
66
|
</div>`;
|
|
48
67
|
}
|
|
49
68
|
|
|
69
|
+
function generateCloudinaryMainSlide(publicId, baseUrl) {
|
|
70
|
+
const sourcesHtml = IMG_BREAKPOINTS.map(
|
|
71
|
+
(bp) => `<source srcset="${buildCloudinaryUrl(publicId, bp.w, bp.h, baseUrl)}" media="${bp.media}">`
|
|
72
|
+
).join('\n ');
|
|
73
|
+
const fallbackSrc = buildCloudinaryUrl(publicId, MAIN_DEFAULT.w, MAIN_DEFAULT.h, baseUrl);
|
|
74
|
+
return renderMainSlide(fallbackSrc, sourcesHtml);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function generateCloudinaryThumbSlide(publicId, baseUrl) {
|
|
78
|
+
const src = buildCloudinaryUrl(publicId, THUMB.w, THUMB.h, baseUrl);
|
|
79
|
+
return renderThumbSlide(src);
|
|
80
|
+
}
|
|
81
|
+
|
|
50
82
|
const SELECTORS = {
|
|
51
83
|
galleryCarousel: '.thumb-gallery',
|
|
52
84
|
swiperContainerMain: '.swiper-container-main',
|
|
@@ -89,7 +121,11 @@ Wick.ThumbGallery = (function () {
|
|
|
89
121
|
function handleThumbClick(swiper) {
|
|
90
122
|
return function () {
|
|
91
123
|
const clickedIndex = $(this).index();
|
|
92
|
-
swiper.
|
|
124
|
+
if (swiper.params && swiper.params.loop) {
|
|
125
|
+
swiper.slideToLoop(clickedIndex);
|
|
126
|
+
} else {
|
|
127
|
+
swiper.slideTo(clickedIndex);
|
|
128
|
+
}
|
|
93
129
|
};
|
|
94
130
|
}
|
|
95
131
|
|
|
@@ -110,9 +146,11 @@ Wick.ThumbGallery = (function () {
|
|
|
110
146
|
};
|
|
111
147
|
}
|
|
112
148
|
|
|
113
|
-
function getMainSwiperConfig($nextBtn, $prevBtn, thumbsSwiper, onSlideChange) {
|
|
149
|
+
function getMainSwiperConfig($nextBtn, $prevBtn, thumbsSwiper, onSlideChange, count) {
|
|
114
150
|
return {
|
|
115
151
|
...MAIN_SWIPER_CONFIG,
|
|
152
|
+
loop: count > 1,
|
|
153
|
+
simulateTouch: count > 1,
|
|
116
154
|
navigation: {
|
|
117
155
|
nextEl: $nextBtn[0],
|
|
118
156
|
prevEl: $prevBtn[0],
|
|
@@ -122,17 +160,44 @@ Wick.ThumbGallery = (function () {
|
|
|
122
160
|
};
|
|
123
161
|
}
|
|
124
162
|
|
|
125
|
-
function initializeCarousel($slider, ids) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
163
|
+
function initializeCarousel($slider, ids, baseUrl, missingImage) {
|
|
164
|
+
const isMissing = ids.length === 0 && Boolean(missingImage);
|
|
165
|
+
if (ids.length === 0 && !missingImage) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
130
168
|
|
|
131
169
|
const $container = $slider.find(SELECTORS.swiperContainerMain);
|
|
170
|
+
const $thumbContainer = $slider.find(SELECTORS.swiperContainerThumbs);
|
|
171
|
+
if (!$container.length || !$thumbContainer.length) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if ($container[0].swiper) {
|
|
176
|
+
$container[0].swiper.destroy(true, true);
|
|
177
|
+
}
|
|
178
|
+
if ($thumbContainer[0].swiper) {
|
|
179
|
+
$thumbContainer[0].swiper.destroy(true, true);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const total = isMissing ? 1 : ids.length;
|
|
183
|
+
$slider.attr('data-length', total);
|
|
184
|
+
|
|
185
|
+
if (isMissing) {
|
|
186
|
+
$slider.addClass('thumb-gallery--missing-image');
|
|
187
|
+
$slider.find(SELECTORS.swiperMainWrapper).html(renderMainSlide(missingImage));
|
|
188
|
+
$slider.find(SELECTORS.swiperThumbsWrapper).html(renderThumbSlide(missingImage));
|
|
189
|
+
} else {
|
|
190
|
+
$slider.removeClass('thumb-gallery--missing-image');
|
|
191
|
+
$slider
|
|
192
|
+
.find(SELECTORS.swiperMainWrapper)
|
|
193
|
+
.html(ids.map((id) => generateCloudinaryMainSlide(id, baseUrl)).join('\n'));
|
|
194
|
+
$slider
|
|
195
|
+
.find(SELECTORS.swiperThumbsWrapper)
|
|
196
|
+
.html(ids.map((id) => generateCloudinaryThumbSlide(id, baseUrl)).join('\n'));
|
|
197
|
+
}
|
|
198
|
+
|
|
132
199
|
const $nextBtn = $slider.find(SELECTORS.nextBtn);
|
|
133
200
|
const $prevBtn = $slider.find(SELECTORS.prevBtn);
|
|
134
|
-
|
|
135
|
-
const $thumbContainer = $slider.find(SELECTORS.swiperContainerThumbs);
|
|
136
201
|
const $thumbNextBtn = $slider.find(SELECTORS.thumbNextBtn);
|
|
137
202
|
const $thumbPrevBtn = $slider.find(SELECTORS.thumbPrevBtn);
|
|
138
203
|
|
|
@@ -145,22 +210,25 @@ Wick.ThumbGallery = (function () {
|
|
|
145
210
|
$container[0],
|
|
146
211
|
getMainSwiperConfig($nextBtn, $prevBtn, thumbsSwiper, () => {
|
|
147
212
|
updateActiveThumbnail(swiper, thumbsSwiper);
|
|
148
|
-
})
|
|
213
|
+
}, total)
|
|
149
214
|
);
|
|
150
215
|
|
|
151
|
-
$thumbContainer
|
|
216
|
+
$thumbContainer
|
|
217
|
+
.off('click', SELECTORS.swiperSlide)
|
|
218
|
+
.on('click', SELECTORS.swiperSlide, handleThumbClick(swiper));
|
|
219
|
+
|
|
152
220
|
updateActiveThumbnail(swiper, thumbsSwiper);
|
|
153
221
|
}
|
|
154
222
|
|
|
155
|
-
function init(hybrisString) {
|
|
223
|
+
function init(hybrisString, options = {}) {
|
|
156
224
|
const ids = parseIdentifiers(hybrisString);
|
|
157
225
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
226
|
+
const opts = typeof options === 'string' ? { mediaDomain: options } : (options || {});
|
|
227
|
+
const baseUrl = getBaseUrl(opts.mediaDomain);
|
|
228
|
+
const missingImage = opts.missingImage || '';
|
|
161
229
|
|
|
162
230
|
$(SELECTORS.galleryCarousel).each(function (_, slider) {
|
|
163
|
-
initializeCarousel($(slider), ids);
|
|
231
|
+
initializeCarousel($(slider), ids, baseUrl, missingImage);
|
|
164
232
|
});
|
|
165
233
|
}
|
|
166
234
|
|
package/package.json
CHANGED
|
@@ -16,12 +16,12 @@
|
|
|
16
16
|
<div class="suite-product-card__price-qty">
|
|
17
17
|
<div class="suite-product-card__vat including-vat">
|
|
18
18
|
<span class="suite-product-card__price{{#if was_price}} suite-product-card__price--red{{/if}}">£{{price-vat}}</span>
|
|
19
|
-
<span class="suite-product-card__vat-text">Inc.
|
|
19
|
+
<span class="suite-product-card__vat-text">Inc.VAT</span>
|
|
20
20
|
</div>
|
|
21
21
|
|
|
22
22
|
<div class="suite-product-card__vat excluding-vat d-none">
|
|
23
23
|
<span class="suite-product-card__price{{#if was_price}} suite-product-card__price--red{{/if}}">£{{price}}</span>
|
|
24
|
-
<span class="suite-product-card__vat-text">Exc.
|
|
24
|
+
<span class="suite-product-card__vat-text">Exc.VAT</span>
|
|
25
25
|
</div>
|
|
26
26
|
|
|
27
27
|
<span class="suite-product-card__quantity">
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
var Wick = window.Wick || {};
|
|
2
2
|
|
|
3
3
|
Wick.ThumbGallery = (function () {
|
|
4
|
-
const BASE_URL = 'https://media.wickes.co.uk/image/upload/';
|
|
5
|
-
const productName = window.pdpProduct && window.pdpProduct.name ? window.pdpProduct.name : '';
|
|
6
|
-
|
|
7
4
|
const IMG_BREAKPOINTS = [
|
|
8
5
|
{ media: '(max-width: 576px)', w: 576, h: 324 },
|
|
9
6
|
{ media: '(max-width: 768px)', w: 510, h: 287 },
|
|
@@ -13,40 +10,75 @@ Wick.ThumbGallery = (function () {
|
|
|
13
10
|
const MAIN_DEFAULT = { w: 710, h: 399 };
|
|
14
11
|
const THUMB = { w: 100, h: 56 };
|
|
15
12
|
|
|
16
|
-
function
|
|
13
|
+
function getMediaDomain() {
|
|
14
|
+
return (typeof window !== 'undefined' && window.mediaDomain) || 'media.wickes.co.uk';
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function getProductName() {
|
|
18
|
+
return (typeof window !== 'undefined' && window.pdpProduct && window.pdpProduct.name) || '';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function getBaseUrl(customDomain) {
|
|
22
|
+
const domain = customDomain || getMediaDomain();
|
|
23
|
+
const cleanDomain = domain.replace(/^https?:\/\//, '').replace(/\/$/, '');
|
|
24
|
+
return `https://${cleanDomain}/image/upload/`;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function buildCloudinaryUrl(publicId, w, h, baseUrl) {
|
|
28
|
+
const base = baseUrl || getBaseUrl();
|
|
29
|
+
const cleanId = String(publicId).replace(/^\/+/, '');
|
|
17
30
|
const transforms = `b_rgb:FFFFFF,c_pad,dpr_1.0,f_jpg,h_${h},q_auto:good,w_${w}`;
|
|
18
|
-
return `${
|
|
31
|
+
return `${base}${transforms}/c_pad,h_${h},w_${w}/v1/${cleanId}`;
|
|
19
32
|
}
|
|
20
33
|
|
|
21
34
|
function parseIdentifiers(hybrisString) {
|
|
22
|
-
|
|
23
|
-
.
|
|
24
|
-
|
|
35
|
+
if (Array.isArray(hybrisString)) {
|
|
36
|
+
return hybrisString.filter(Boolean);
|
|
37
|
+
}
|
|
38
|
+
if (!hybrisString || typeof hybrisString !== 'string') {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
const trimmed = hybrisString.trim();
|
|
42
|
+
const content = trimmed.startsWith('[') && trimmed.endsWith(']')
|
|
43
|
+
? trimmed.slice(1, -1)
|
|
44
|
+
: trimmed;
|
|
45
|
+
|
|
46
|
+
return content
|
|
25
47
|
.split(',')
|
|
26
48
|
.map((s) => s.trim())
|
|
27
49
|
.filter(Boolean);
|
|
28
50
|
}
|
|
29
51
|
|
|
30
|
-
function
|
|
31
|
-
const
|
|
32
|
-
(bp) =>
|
|
33
|
-
`<source srcset="${buildCloudinaryUrl(publicId, bp.w, bp.h)}" media="${bp.media}">`
|
|
34
|
-
).join('\n ');
|
|
35
|
-
|
|
52
|
+
function renderMainSlide(src, sourcesHtml = '') {
|
|
53
|
+
const productName = getProductName();
|
|
36
54
|
return `<div class="thumb-gallery__slide-wrapper swiper-slide">
|
|
37
55
|
<picture>
|
|
38
|
-
${
|
|
39
|
-
<img class="swiper-slide-main" src="${
|
|
56
|
+
${sourcesHtml}
|
|
57
|
+
<img class="swiper-slide-main" src="${src}" alt="${productName}">
|
|
40
58
|
</picture>
|
|
41
59
|
</div>`;
|
|
42
60
|
}
|
|
43
61
|
|
|
44
|
-
function
|
|
62
|
+
function renderThumbSlide(src) {
|
|
63
|
+
const productName = getProductName();
|
|
45
64
|
return `<div class="thumb-gallery__slide-wrapper swiper-slide">
|
|
46
|
-
<img class="swiper-slide-thumbs" src="${
|
|
65
|
+
<img class="swiper-slide-thumbs" src="${src}" alt="${productName}">
|
|
47
66
|
</div>`;
|
|
48
67
|
}
|
|
49
68
|
|
|
69
|
+
function generateCloudinaryMainSlide(publicId, baseUrl) {
|
|
70
|
+
const sourcesHtml = IMG_BREAKPOINTS.map(
|
|
71
|
+
(bp) => `<source srcset="${buildCloudinaryUrl(publicId, bp.w, bp.h, baseUrl)}" media="${bp.media}">`
|
|
72
|
+
).join('\n ');
|
|
73
|
+
const fallbackSrc = buildCloudinaryUrl(publicId, MAIN_DEFAULT.w, MAIN_DEFAULT.h, baseUrl);
|
|
74
|
+
return renderMainSlide(fallbackSrc, sourcesHtml);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function generateCloudinaryThumbSlide(publicId, baseUrl) {
|
|
78
|
+
const src = buildCloudinaryUrl(publicId, THUMB.w, THUMB.h, baseUrl);
|
|
79
|
+
return renderThumbSlide(src);
|
|
80
|
+
}
|
|
81
|
+
|
|
50
82
|
const SELECTORS = {
|
|
51
83
|
galleryCarousel: '.thumb-gallery',
|
|
52
84
|
swiperContainerMain: '.swiper-container-main',
|
|
@@ -89,7 +121,11 @@ Wick.ThumbGallery = (function () {
|
|
|
89
121
|
function handleThumbClick(swiper) {
|
|
90
122
|
return function () {
|
|
91
123
|
const clickedIndex = $(this).index();
|
|
92
|
-
swiper.
|
|
124
|
+
if (swiper.params && swiper.params.loop) {
|
|
125
|
+
swiper.slideToLoop(clickedIndex);
|
|
126
|
+
} else {
|
|
127
|
+
swiper.slideTo(clickedIndex);
|
|
128
|
+
}
|
|
93
129
|
};
|
|
94
130
|
}
|
|
95
131
|
|
|
@@ -110,9 +146,11 @@ Wick.ThumbGallery = (function () {
|
|
|
110
146
|
};
|
|
111
147
|
}
|
|
112
148
|
|
|
113
|
-
function getMainSwiperConfig($nextBtn, $prevBtn, thumbsSwiper, onSlideChange) {
|
|
149
|
+
function getMainSwiperConfig($nextBtn, $prevBtn, thumbsSwiper, onSlideChange, count) {
|
|
114
150
|
return {
|
|
115
151
|
...MAIN_SWIPER_CONFIG,
|
|
152
|
+
loop: count > 1,
|
|
153
|
+
simulateTouch: count > 1,
|
|
116
154
|
navigation: {
|
|
117
155
|
nextEl: $nextBtn[0],
|
|
118
156
|
prevEl: $prevBtn[0],
|
|
@@ -122,17 +160,44 @@ Wick.ThumbGallery = (function () {
|
|
|
122
160
|
};
|
|
123
161
|
}
|
|
124
162
|
|
|
125
|
-
function initializeCarousel($slider, ids) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
163
|
+
function initializeCarousel($slider, ids, baseUrl, missingImage) {
|
|
164
|
+
const isMissing = ids.length === 0 && Boolean(missingImage);
|
|
165
|
+
if (ids.length === 0 && !missingImage) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
130
168
|
|
|
131
169
|
const $container = $slider.find(SELECTORS.swiperContainerMain);
|
|
170
|
+
const $thumbContainer = $slider.find(SELECTORS.swiperContainerThumbs);
|
|
171
|
+
if (!$container.length || !$thumbContainer.length) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if ($container[0].swiper) {
|
|
176
|
+
$container[0].swiper.destroy(true, true);
|
|
177
|
+
}
|
|
178
|
+
if ($thumbContainer[0].swiper) {
|
|
179
|
+
$thumbContainer[0].swiper.destroy(true, true);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const total = isMissing ? 1 : ids.length;
|
|
183
|
+
$slider.attr('data-length', total);
|
|
184
|
+
|
|
185
|
+
if (isMissing) {
|
|
186
|
+
$slider.addClass('thumb-gallery--missing-image');
|
|
187
|
+
$slider.find(SELECTORS.swiperMainWrapper).html(renderMainSlide(missingImage));
|
|
188
|
+
$slider.find(SELECTORS.swiperThumbsWrapper).html(renderThumbSlide(missingImage));
|
|
189
|
+
} else {
|
|
190
|
+
$slider.removeClass('thumb-gallery--missing-image');
|
|
191
|
+
$slider
|
|
192
|
+
.find(SELECTORS.swiperMainWrapper)
|
|
193
|
+
.html(ids.map((id) => generateCloudinaryMainSlide(id, baseUrl)).join('\n'));
|
|
194
|
+
$slider
|
|
195
|
+
.find(SELECTORS.swiperThumbsWrapper)
|
|
196
|
+
.html(ids.map((id) => generateCloudinaryThumbSlide(id, baseUrl)).join('\n'));
|
|
197
|
+
}
|
|
198
|
+
|
|
132
199
|
const $nextBtn = $slider.find(SELECTORS.nextBtn);
|
|
133
200
|
const $prevBtn = $slider.find(SELECTORS.prevBtn);
|
|
134
|
-
|
|
135
|
-
const $thumbContainer = $slider.find(SELECTORS.swiperContainerThumbs);
|
|
136
201
|
const $thumbNextBtn = $slider.find(SELECTORS.thumbNextBtn);
|
|
137
202
|
const $thumbPrevBtn = $slider.find(SELECTORS.thumbPrevBtn);
|
|
138
203
|
|
|
@@ -145,22 +210,25 @@ Wick.ThumbGallery = (function () {
|
|
|
145
210
|
$container[0],
|
|
146
211
|
getMainSwiperConfig($nextBtn, $prevBtn, thumbsSwiper, () => {
|
|
147
212
|
updateActiveThumbnail(swiper, thumbsSwiper);
|
|
148
|
-
})
|
|
213
|
+
}, total)
|
|
149
214
|
);
|
|
150
215
|
|
|
151
|
-
$thumbContainer
|
|
216
|
+
$thumbContainer
|
|
217
|
+
.off('click', SELECTORS.swiperSlide)
|
|
218
|
+
.on('click', SELECTORS.swiperSlide, handleThumbClick(swiper));
|
|
219
|
+
|
|
152
220
|
updateActiveThumbnail(swiper, thumbsSwiper);
|
|
153
221
|
}
|
|
154
222
|
|
|
155
|
-
function init(hybrisString) {
|
|
223
|
+
function init(hybrisString, options = {}) {
|
|
156
224
|
const ids = parseIdentifiers(hybrisString);
|
|
157
225
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
226
|
+
const opts = typeof options === 'string' ? { mediaDomain: options } : (options || {});
|
|
227
|
+
const baseUrl = getBaseUrl(opts.mediaDomain);
|
|
228
|
+
const missingImage = opts.missingImage || '';
|
|
161
229
|
|
|
162
230
|
$(SELECTORS.galleryCarousel).each(function (_, slider) {
|
|
163
|
-
initializeCarousel($(slider), ids);
|
|
231
|
+
initializeCarousel($(slider), ids, baseUrl, missingImage);
|
|
164
232
|
});
|
|
165
233
|
}
|
|
166
234
|
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
{{> search-filter collapsed="accordion_collapsed" hidden="hidden-state"}}
|
|
20
20
|
</aside>
|
|
21
21
|
|
|
22
|
-
<div class="package-plp__content">
|
|
22
|
+
<div class="package-plp__content products-list-v2">
|
|
23
23
|
<div class="plp-filters" data-component="plp-filters" aria-label="Product filters">
|
|
24
24
|
<div class="plp-filters__bar plp-filters__bar-mobile" role="tablist" aria-label="Filters">
|
|
25
25
|
{{> kitchen/mobile-nav-item
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
{{> search-filter collapsed="accordion_collapsed" hidden="hidden-state"}}
|
|
27
27
|
</aside>
|
|
28
28
|
|
|
29
|
-
<div class="package-plp__content">
|
|
29
|
+
<div class="package-plp__content products-list-v2">
|
|
30
30
|
<div class="plp-filters" data-component="plp-filters" aria-label="Product filters">
|
|
31
31
|
<div class="plp-filters__bar plp-filters__bar-mobile" role="tablist" aria-label="Filters">
|
|
32
32
|
{{> kitchen/mobile-nav-item
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
{{> search-filter collapsed="accordion_collapsed" hidden="hidden-state"}}
|
|
27
27
|
</aside>
|
|
28
28
|
|
|
29
|
-
<div class="package-plp__content">
|
|
29
|
+
<div class="package-plp__content products-list-v2">
|
|
30
30
|
<div class="plp-filters" data-component="plp-filters" aria-label="Product filters">
|
|
31
31
|
<div class="plp-filters__bar plp-filters__bar-mobile" role="tablist" aria-label="Filters">
|
|
32
32
|
{{> kitchen/mobile-nav-item
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
{{#extend "base" pageClass="page-product-details" title="PDP - Gallery with 1 image"
|
|
2
|
+
isDiscount=false
|
|
3
|
+
isExcludingDelivery=true
|
|
4
|
+
isCashback=false
|
|
5
|
+
isQuantity=true
|
|
6
|
+
isSize=false
|
|
7
|
+
klarna-placement=true
|
|
8
|
+
clearpay-placement=true
|
|
9
|
+
hourly-delivery=true
|
|
10
|
+
step3=true
|
|
11
|
+
currentlyInStock=true
|
|
12
|
+
pagePdp=true
|
|
13
|
+
package=true
|
|
14
|
+
postcodeChecker=true
|
|
15
|
+
}}
|
|
16
|
+
{{#content "head" mode="append" pagePdp=true}}
|
|
17
|
+
{{/content}}
|
|
18
|
+
{{#content "body"}}
|
|
19
|
+
<main class="pdp__main">
|
|
20
|
+
<div class="container">
|
|
21
|
+
<div class="pdp pdp--ripple">
|
|
22
|
+
<div class="pdp__title">
|
|
23
|
+
<h1 class="pdp__heading">Bosch PSB 1800 LI-2 18V Li-Ion Cordless Combi Drill Example with long
|
|
24
|
+
title in two raws
|
|
25
|
+
</h1>
|
|
26
|
+
<div class="pdp__reviews_small">
|
|
27
|
+
<span class="product-code product-code-v2">Product code: <strong id="product-code-val">236334</strong></span>
|
|
28
|
+
<div class="product-card__reviews review-star">
|
|
29
|
+
<div class="product-rating product-rating-v2">
|
|
30
|
+
<div class="rating-bg">
|
|
31
|
+
<i class="fa fa-star" aria-hidden="true"></i>
|
|
32
|
+
<i class="fa fa-star" aria-hidden="true"></i>
|
|
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
|
+
<div class="rating-overlay"
|
|
37
|
+
data-rating="{{#if review-rating}}{{review-rating}}{{else}}0{{/if}}">
|
|
38
|
+
<i class="fa fa-star" aria-hidden="true"></i>
|
|
39
|
+
<i class="fa fa-star ml-1" aria-hidden="true"></i>
|
|
40
|
+
<i class="fa fa-star ml-1" aria-hidden="true"></i>
|
|
41
|
+
<i class="fa fa-star ml-1" aria-hidden="true"></i>
|
|
42
|
+
<i class="fa fa-star ml-1" aria-hidden="true"></i>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
<span class="review-star-average review-star-average-v2">(4.6)</span>
|
|
47
|
+
</div>
|
|
48
|
+
<span class="pdp__reviews-link-wrap"><a href="#" data-link="#pdp-reviews" id="open-review">82 reviews</a></span>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<div class="pdp__full-gallery">
|
|
53
|
+
{{> thumb-gallery }}
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<div class="pdp__aside">
|
|
57
|
+
{{> price-block-v2 isProductSaved=false isUserLogedOut=false price=ripple-pdp.price}}
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<div class="pdp__full-description">
|
|
61
|
+
{{> product-main-info-v2 currentlyInStock=false hideShareButton=true}}
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
<div class="pdp__suite-includes">
|
|
66
|
+
{{> suite-includes products=ripple-pdp.suite-products price=ripple-pdp.price price-vat=ripple-pdp.price-vat }}
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
{{> fulfilment-accordions}}
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
<div class="container container-info">
|
|
73
|
+
<div class="pdp pdp--ripple">
|
|
74
|
+
<div class="pdp__info">
|
|
75
|
+
{{> pdp-info-v2 floor=true }}
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
<div class="pdp--ripple">
|
|
80
|
+
{{> seo-widgets title="Related category" }}
|
|
81
|
+
</div>
|
|
82
|
+
</main>
|
|
83
|
+
{{/content}}
|
|
84
|
+
{{#content "foot" mode="append"}}
|
|
85
|
+
<script type="text/html" id="mini-basket-popup">
|
|
86
|
+
{{> popover-mini-basket mod="popover-mini-basket_just-added" products=mini-basket.just-added just-added=true}}
|
|
87
|
+
</script>
|
|
88
|
+
<script defer src="./js/page/pdp.js"></script>
|
|
89
|
+
{{> click-and-collect-modal}}
|
|
90
|
+
{{> thank-you-modal}}
|
|
91
|
+
{{/content}}
|
|
92
|
+
{{/extend}}
|
|
93
|
+
<!--<script defer src="./js/page/ti.js"></script>-->
|
|
94
|
+
<script type="module" defer src="./js/page/installation/fi.js"></script>
|
|
95
|
+
<script defer src="./js/page/ripple/thumb-gallery.js" onload="Wick.ThumbGallery.init('[products/wickes/GPID_5000143102_00]', { mediaDomain: 'media.wickes.co.uk' })"></script>
|
|
96
|
+
<script defer src="./js/postcode-checker.min.js"></script>
|
|
97
|
+
<script>
|
|
98
|
+
if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) {
|
|
99
|
+
$(document).ready(function () {
|
|
100
|
+
$('.modal').on('scroll', function () {
|
|
101
|
+
$(':focus').blur();
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
$(document).ready(function () {
|
|
107
|
+
|
|
108
|
+
$('#info-details').toggleClass('accordion_collapsed');
|
|
109
|
+
$('#details-content').css('display', 'block');
|
|
110
|
+
|
|
111
|
+
$('#open-review').on('click', function () {
|
|
112
|
+
$('#info-review').toggleClass('accordion_collapsed');
|
|
113
|
+
$('#review-content').css('display', 'block');
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
$('.ti__next ti__next3 .btn').on('click', function () {
|
|
117
|
+
alert('Click');
|
|
118
|
+
});
|
|
119
|
+
})
|
|
120
|
+
</script>
|