wickes-css2 2.109.0-develop.5 → 2.109.0-develop.7
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/Readme.md +0 -1
- package/build/css/components/card-product-banner.css +1 -1
- package/build/css/components/special-opening-schedule-v2.css +1 -1
- package/build/css/components/special-opening-schedule.css +1 -1
- package/build/css/emulation.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/checkout-new.css +1 -1
- package/build/css/pages/page_merged-basket.css +1 -1
- package/build/css/pages/page_store-locator-details.css +1 -1
- package/build/css/pages/page_store-locator.css +1 -1
- package/build/css/plp-main.css +1 -1
- package/build/css/store-locator-main.css +1 -1
- package/build/js/basket.min.js +1 -1
- package/build/js/bundle.min.js +1 -1
- package/build/js/checkout.min.js +1 -1
- package/build/js/emulation.min.js +340 -110
- package/build/js/general.bundle.min.js +1 -1
- package/build/js/merged-checkout.min.js +1 -1
- package/build/js/page/components/store-locator-cards.js +76 -0
- package/build/js/pdp.bundle.min.js +1 -1
- package/build/js/plp.bundle.min.js +1 -1
- package/build/js/project-list.min.js +1 -1
- package/build/js/store-locator-cards.min.js +1 -0
- package/package.json +1 -1
- package/src/components/card-store-locator.hbs +70 -33
- package/src/components/card_bloomreach_media_banner.hbs +10 -0
- package/src/components/card_sponsor_banner.hbs +1 -1
- package/src/data/data_locators.json +441 -135
- package/src/data/data_search-results_v2.json +11 -0
- package/src/js/components/general/accordion.js +25 -2
- package/src/js/emulation/banner-placement-manager.js +235 -34
- package/src/js/emulation/gift-cards.js +1 -1
- package/src/js/emulation/store-locator-load-more.js +69 -0
- package/src/js/page/components/store-locator-cards.js +76 -0
- package/src/page_plp_bloomreach.html +81 -0
- package/src/page_plp_v2.html +5 -0
- package/src/page_store-locator-list.html +18 -28
- package/src/scss/components/_card-store-locator.scss +139 -32
- package/src/scss/components/card-product-banner.scss +35 -35
- package/src/scss/components/special-opening-schedule-v2.scss +2 -6
- package/src/scss/components/special-opening-schedule.scss +17 -4
- package/src/scss/emulation.scss +0 -6
- package/src/scss/pages/page_store-locator.scss +48 -26
- package/src/scss/store-locator-main.scss +15 -1
- package/src/sitemap.html +1 -0
- package/src/js/emulation/store-locator-list.js +0 -19
|
@@ -1,53 +1,254 @@
|
|
|
1
1
|
// Simulate prompt for input
|
|
2
|
-
function getInputs() {
|
|
3
|
-
const productBannerPositions = prompt("Enter Product Banner Positions:", "2") || "";
|
|
4
|
-
const sponsorProductPositions = prompt("Enter Sponsor Product Positions (comma-separated):", "6,7,8") || "";
|
|
5
|
-
const sponsorBannerPositions = prompt("Enter Sponsor Banner Positions:", "10") || "";
|
|
6
2
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
function parseSlots(value) {
|
|
4
|
+
if (!value) {
|
|
5
|
+
return [];
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
return String(value)
|
|
9
|
+
.split(',')
|
|
10
|
+
.map((item) => parseInt(item.trim(), 10))
|
|
11
|
+
.filter((item) => Number.isInteger(item) && item >= 0);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function isBloomreachDisabled(slots) {
|
|
15
|
+
return !slots.length || slots.every((s) => s === 0);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function toggleHybrisProductBanners(inputs) {
|
|
19
|
+
const banners = document.querySelectorAll('.card-product-banner');
|
|
20
|
+
const disabled = isBloomreachDisabled(inputs.bloomreachSlots);
|
|
21
|
+
|
|
22
|
+
banners.forEach((banner) => {
|
|
23
|
+
if (disabled) {
|
|
24
|
+
banner.classList.remove('d-none');
|
|
25
|
+
banner.classList.remove('card-product-banner--inactive');
|
|
26
|
+
} else {
|
|
27
|
+
banner.classList.add('d-none');
|
|
28
|
+
banner.classList.add('card-product-banner--inactive');
|
|
29
|
+
}
|
|
30
|
+
});
|
|
12
31
|
}
|
|
13
32
|
|
|
14
33
|
function getPositionAttr() {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
? 'data-mobile-position'
|
|
18
|
-
|
|
34
|
+
const isMobile = Wick.BannerPlacementManager.isMobileResolution();
|
|
35
|
+
|
|
36
|
+
return isMobile ? 'data-mobile-position' : 'data-desktop-position';
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function setUnifiedPosition(el, slot) {
|
|
40
|
+
el.setAttribute('data-desktop-position', String(slot));
|
|
41
|
+
el.setAttribute('data-mobile-position', String(slot));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function hasLegacyBanners() {
|
|
45
|
+
return Boolean(
|
|
46
|
+
document.querySelector('.card-product-banner') ||
|
|
47
|
+
document.querySelector('.card-sponsor-product') ||
|
|
48
|
+
document.querySelector('.card-sponsor-banner')
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function getInputs() {
|
|
53
|
+
const hasLegacy = hasLegacyBanners();
|
|
54
|
+
|
|
55
|
+
const bloomreachSlots = parseSlots(
|
|
56
|
+
prompt('Enter Bloomreach Banner Slots (comma-separated):', '3') || ''
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
if (!hasLegacy) {
|
|
60
|
+
return {
|
|
61
|
+
bloomreachSlots,
|
|
62
|
+
sponsorProductPositions: [],
|
|
63
|
+
sponsorBannerPositions: [],
|
|
64
|
+
productBannerPositions: [],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const productBannerPositions =
|
|
69
|
+
prompt('Enter Product Banner Positions (comma-separated):', '2') || '';
|
|
70
|
+
|
|
71
|
+
const sponsorProductPositions =
|
|
72
|
+
prompt('Enter Sponsor Product Positions (comma-separated):', '6,7,8') || '';
|
|
73
|
+
|
|
74
|
+
const sponsorBannerPositions =
|
|
75
|
+
prompt('Enter Sponsor Banner Positions (comma-separated):', '10') || '';
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
productBannerPositions: parseSlots(productBannerPositions),
|
|
79
|
+
sponsorProductPositions: parseSlots(sponsorProductPositions),
|
|
80
|
+
sponsorBannerPositions: parseSlots(sponsorBannerPositions),
|
|
81
|
+
bloomreachSlots,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function updateBannerPositions(selector, positions) {
|
|
86
|
+
if (!positions?.length) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const positionAttr = getPositionAttr();
|
|
91
|
+
const elements = document.querySelectorAll(selector);
|
|
92
|
+
|
|
93
|
+
elements.forEach((el, index) => {
|
|
94
|
+
if (positions[index] !== undefined) {
|
|
95
|
+
el.setAttribute(positionAttr, String(positions[index]));
|
|
96
|
+
}
|
|
97
|
+
});
|
|
19
98
|
}
|
|
20
99
|
|
|
21
100
|
function updatePositions(inputs) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
101
|
+
updateBannerPositions('.card-product-banner', inputs.productBannerPositions);
|
|
102
|
+
updateBannerPositions('.card-sponsor-product', inputs.sponsorProductPositions);
|
|
103
|
+
updateBannerPositions('.card-sponsor-banner', inputs.sponsorBannerPositions);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function patchBannerPlacementManagerForBloomreachEmulation(inputs) {
|
|
107
|
+
const manager = window.Wick?.BannerPlacementManager;
|
|
108
|
+
|
|
109
|
+
if (!manager || manager.__bloomreachEmulationPatched) {
|
|
110
|
+
return;
|
|
26
111
|
}
|
|
27
|
-
});
|
|
28
112
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
113
|
+
const shouldDisableProductBanners = Boolean(inputs.bloomreachSlots?.length);
|
|
114
|
+
|
|
115
|
+
manager.el.bloomreachBanners = '.card-bloomreach-media-banner';
|
|
116
|
+
|
|
117
|
+
manager.el.allBanners = shouldDisableProductBanners
|
|
118
|
+
? '.card-bloomreach-media-banner, .card-sponsor-banner, .card-sponsor-product'
|
|
119
|
+
: '.card-product-banner, .card-bloomreach-media-banner, .card-sponsor-banner, .card-sponsor-product';
|
|
120
|
+
|
|
121
|
+
manager.el.allListSlots = shouldDisableProductBanners
|
|
122
|
+
? '.product-card, .card-bloomreach-media-banner, .card-sponsor-banner, .card-sponsor-product'
|
|
123
|
+
: '.product-card, .card-product-banner, .card-bloomreach-media-banner, .card-sponsor-banner, .card-sponsor-product';
|
|
124
|
+
|
|
125
|
+
manager.classes.bloomreachBanners = 'card-bloomreach-media-banner';
|
|
126
|
+
|
|
127
|
+
manager.getListSlots = function () {
|
|
128
|
+
return $(manager.el.productsWrap)
|
|
129
|
+
.children(manager.el.allListSlots)
|
|
130
|
+
.filter(function () {
|
|
131
|
+
if (
|
|
132
|
+
$(this).hasClass(manager.classes.productBanners) ||
|
|
133
|
+
$(this).hasClass(manager.classes.bloomreachBanners)
|
|
134
|
+
) {
|
|
135
|
+
const position = manager.getBannerPosition(this);
|
|
136
|
+
const productsCount = manager.getListLength();
|
|
137
|
+
|
|
138
|
+
return position <= productsCount;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return true;
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
manager.arrangeBannersInRightOrder = function () {
|
|
146
|
+
const $allBanners = $(manager.el.allBanners);
|
|
147
|
+
|
|
148
|
+
function getSameSlotInsertionOrder(el) {
|
|
149
|
+
if ($(el).hasClass(manager.classes.bloomreachBanners)) {
|
|
150
|
+
return 0;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if ($(el).hasClass(manager.classes.sponsorBanners)) {
|
|
154
|
+
return 1;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if ($(el).hasClass(manager.classes.sponsorProducts)) {
|
|
158
|
+
return 2;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if ($(el).hasClass(manager.classes.productBanners)) {
|
|
162
|
+
return 3;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return 4;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
$allBanners
|
|
169
|
+
.sort((a, b) => {
|
|
170
|
+
const positionA = manager.getBannerPosition(a);
|
|
171
|
+
const positionB = manager.getBannerPosition(b);
|
|
172
|
+
|
|
173
|
+
if (positionA !== positionB) {
|
|
174
|
+
return positionA - positionB;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return getSameSlotInsertionOrder(a) - getSameSlotInsertionOrder(b);
|
|
178
|
+
})
|
|
179
|
+
.appendTo(manager.el.productsWrap);
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
manager.__bloomreachEmulationPatched = true;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function rebuildBloomreachBannersForEmulation(inputs) {
|
|
186
|
+
const slots = inputs.bloomreachSlots || [];
|
|
187
|
+
const productsWrap = document.querySelector('.products-list.products-list-v2');
|
|
188
|
+
|
|
189
|
+
if (!productsWrap) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const existingBanners = document.querySelectorAll('.card-bloomreach-media-banner');
|
|
194
|
+
|
|
195
|
+
if (isBloomreachDisabled(slots)) {
|
|
196
|
+
existingBanners.forEach((banner) => banner.remove());
|
|
197
|
+
return;
|
|
33
198
|
}
|
|
34
|
-
});
|
|
35
199
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
if (inputs.sponsorBannerPositions[index] !== undefined) {
|
|
39
|
-
el.setAttribute(getPositionAttr(), inputs.sponsorBannerPositions[index]);
|
|
200
|
+
if (!existingBanners.length) {
|
|
201
|
+
return;
|
|
40
202
|
}
|
|
41
|
-
|
|
203
|
+
|
|
204
|
+
const template = existingBanners[0].cloneNode(true);
|
|
205
|
+
|
|
206
|
+
existingBanners.forEach((banner) => banner.remove());
|
|
207
|
+
|
|
208
|
+
const fragment = document.createDocumentFragment();
|
|
209
|
+
|
|
210
|
+
slots.forEach((slot) => {
|
|
211
|
+
if (slot === 0) return;
|
|
212
|
+
|
|
213
|
+
const node = template.cloneNode(true);
|
|
214
|
+
|
|
215
|
+
node.removeAttribute('data-slots');
|
|
216
|
+
setUnifiedPosition(node, slot);
|
|
217
|
+
|
|
218
|
+
fragment.appendChild(node);
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
productsWrap.appendChild(fragment);
|
|
42
222
|
}
|
|
43
223
|
|
|
44
|
-
function
|
|
45
|
-
|
|
46
|
-
|
|
224
|
+
function applyBloomreachEmulation() {
|
|
225
|
+
const inputs = getInputs();
|
|
226
|
+
|
|
227
|
+
updatePositions(inputs);
|
|
228
|
+
|
|
229
|
+
const isDisabled = isBloomreachDisabled(inputs.bloomreachSlots);
|
|
230
|
+
|
|
231
|
+
toggleHybrisProductBanners(inputs);
|
|
232
|
+
|
|
233
|
+
if (!isDisabled) {
|
|
234
|
+
patchBannerPlacementManagerForBloomreachEmulation(inputs);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
rebuildBloomreachBannersForEmulation(inputs);
|
|
238
|
+
|
|
239
|
+
if (
|
|
240
|
+
window.Wick &&
|
|
241
|
+
Wick.BannerPlacementManager &&
|
|
242
|
+
typeof Wick.BannerPlacementManager.checkProductsInColumn === 'function'
|
|
243
|
+
) {
|
|
244
|
+
Wick.BannerPlacementManager.checkProductsInColumn();
|
|
245
|
+
}
|
|
47
246
|
}
|
|
48
247
|
|
|
49
248
|
$(document).ready(function () {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
249
|
+
if ($('.products-list.products-list-v2').length) {
|
|
250
|
+
setTimeout(() => {
|
|
251
|
+
applyBloomreachEmulation();
|
|
252
|
+
}, 100);
|
|
253
|
+
}
|
|
53
254
|
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { appendLoader, showLoader, hideLoader } from '../page/utils/loader';
|
|
2
|
+
|
|
3
|
+
function initStoreLocatorLoadMore() {
|
|
4
|
+
const PAGE_SIZE = 8;
|
|
5
|
+
|
|
6
|
+
const SELECTORS = {
|
|
7
|
+
cards: '.cards-store-list',
|
|
8
|
+
btnMore: '.store-locator__load-button_more',
|
|
9
|
+
loader: '.store-locator-loader',
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const loaderPayload = {
|
|
13
|
+
wrapper: 'body',
|
|
14
|
+
hidden: true,
|
|
15
|
+
modifier: 'store-locator-loader',
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const $cards = $(SELECTORS.cards);
|
|
19
|
+
const $btnMore = $(SELECTORS.btnMore);
|
|
20
|
+
|
|
21
|
+
let visibleCount = PAGE_SIZE;
|
|
22
|
+
|
|
23
|
+
function updateVisibility() {
|
|
24
|
+
$cards.each(function (index) {
|
|
25
|
+
$(this).toggle(index < visibleCount);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
if (visibleCount >= $cards.length) {
|
|
29
|
+
$btnMore.hide();
|
|
30
|
+
} else {
|
|
31
|
+
$btnMore.show();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
Wick.StoreCardsAlign?.align();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function loadMore() {
|
|
38
|
+
showLoader(SELECTORS.loader);
|
|
39
|
+
$btnMore.prop('disabled', true);
|
|
40
|
+
|
|
41
|
+
setTimeout(() => {
|
|
42
|
+
visibleCount += PAGE_SIZE;
|
|
43
|
+
updateVisibility();
|
|
44
|
+
|
|
45
|
+
hideLoader(SELECTORS.loader);
|
|
46
|
+
$btnMore.prop('disabled', false).blur();
|
|
47
|
+
}, 1000);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function init() {
|
|
51
|
+
if (!$cards.length || !$btnMore.length) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (!$(SELECTORS.loader).length) {
|
|
56
|
+
appendLoader(loaderPayload);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
updateVisibility();
|
|
60
|
+
|
|
61
|
+
$btnMore.on('click', loadMore);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
init();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
$(document).ready(function () {
|
|
68
|
+
initStoreLocatorLoadMore();
|
|
69
|
+
});
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
var Wick = window.Wick || (window.Wick = {});
|
|
2
|
+
|
|
3
|
+
Wick.StoreCardsAlign = (function () {
|
|
4
|
+
const SELECTORS = {
|
|
5
|
+
card: '.card-store',
|
|
6
|
+
info: '.card-store__info',
|
|
7
|
+
accordionHeader: '.opening-times-accordion__header',
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
let resizeTimeout;
|
|
11
|
+
|
|
12
|
+
function alignCardInfoHeights() {
|
|
13
|
+
const rows = [];
|
|
14
|
+
|
|
15
|
+
$(SELECTORS.card).each(function () {
|
|
16
|
+
const $card = $(this);
|
|
17
|
+
const top = $card.offset().top;
|
|
18
|
+
|
|
19
|
+
let row = rows.find((r) => Math.abs(r.top - top) < 5);
|
|
20
|
+
|
|
21
|
+
if (!row) {
|
|
22
|
+
row = { top: top, items: [] };
|
|
23
|
+
rows.push(row);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
row.items.push($card);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
rows.forEach((row) => {
|
|
30
|
+
let maxHeight = 0;
|
|
31
|
+
|
|
32
|
+
// reset
|
|
33
|
+
row.items.forEach(($card) => {
|
|
34
|
+
$card.find(SELECTORS.info).css('min-height', '');
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// find max
|
|
38
|
+
row.items.forEach(($card) => {
|
|
39
|
+
const h = $card.find(SELECTORS.info).outerHeight();
|
|
40
|
+
if (h > maxHeight) maxHeight = h;
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// apply
|
|
44
|
+
row.items.forEach(($card) => {
|
|
45
|
+
$card.find(SELECTORS.info).css('min-height', maxHeight + 'px');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function bindEvents() {
|
|
51
|
+
// load
|
|
52
|
+
$(window).on('load', alignCardInfoHeights);
|
|
53
|
+
|
|
54
|
+
// resize
|
|
55
|
+
$(window).on('resize', () => {
|
|
56
|
+
clearTimeout(resizeTimeout);
|
|
57
|
+
resizeTimeout = setTimeout(alignCardInfoHeights, 100);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// accordion
|
|
61
|
+
$(document).on('click', SELECTORS.accordionHeader, () => {
|
|
62
|
+
setTimeout(alignCardInfoHeights, 0);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function init() {
|
|
67
|
+
bindEvents();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
init();
|
|
71
|
+
|
|
72
|
+
return {
|
|
73
|
+
init: init,
|
|
74
|
+
align: alignCardInfoHeights,
|
|
75
|
+
};
|
|
76
|
+
})();
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{{#extend "base" hybrisClass="hybris-class" pageClass="products-list-page retail-media category-seo-config" title="Products list" globalSearchV2="true" pagePlp=true}}
|
|
2
|
+
{{#content "head" mode="append" pagePlp=true}}
|
|
3
|
+
<link type="text/css" rel="stylesheet" href="./css/components/global-search.css">
|
|
4
|
+
{{/content}}
|
|
5
|
+
<style></style>
|
|
6
|
+
{{#content "body"}}
|
|
7
|
+
<main>
|
|
8
|
+
<div class="container">
|
|
9
|
+
<div class="page-header page-header_border-all">
|
|
10
|
+
<h1 class="page-header__title">
|
|
11
|
+
Fire Doors
|
|
12
|
+
</h1>
|
|
13
|
+
{{> srp-injected}}
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
{{> color-picker-plp }}
|
|
17
|
+
|
|
18
|
+
<div class="row">
|
|
19
|
+
<aside class="left-aside">
|
|
20
|
+
{{> search-filter collapsed="accordion_collapsed" hidden="hidden-state"}}
|
|
21
|
+
</aside>
|
|
22
|
+
|
|
23
|
+
<div class="content">
|
|
24
|
+
<div class="plp-filters" data-component="plp-filters" aria-label="Product filters">
|
|
25
|
+
<div class="plp-filters__bar plp-filters__bar-mobile" role="tablist" aria-label="Filters">
|
|
26
|
+
{{> kitchen/mobile-nav-item
|
|
27
|
+
icon="fas fa-filter"
|
|
28
|
+
title="Filter by"
|
|
29
|
+
info="1,818 results"
|
|
30
|
+
modalId="filterModal"
|
|
31
|
+
mod="filter-modal-cta"
|
|
32
|
+
}}
|
|
33
|
+
{{> kitchen/mobile-nav-item
|
|
34
|
+
icon="fas fa-sort-alt"
|
|
35
|
+
title="Sort by"
|
|
36
|
+
info="Relevance"
|
|
37
|
+
dropdown=true
|
|
38
|
+
}}
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
<div class="sort-products-list">
|
|
42
|
+
{{> kitchen/sort-by }}
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
<div class="products-list products-list-v2">
|
|
46
|
+
{{#each search-result_v2.products}}
|
|
47
|
+
{{>card_product_v2}}
|
|
48
|
+
{{/each}}
|
|
49
|
+
{{#if search-result_v2.bloomreach-media-banner}}
|
|
50
|
+
{{#each search-result_v2.bloomreach-media-banner}}
|
|
51
|
+
{{>card_bloomreach_media_banner}}
|
|
52
|
+
{{/each}}
|
|
53
|
+
{{/if}}
|
|
54
|
+
</div>
|
|
55
|
+
<div class="load-more-wrap">
|
|
56
|
+
<button class="btn btn-primary btn_full btn-load-more">
|
|
57
|
+
Load more
|
|
58
|
+
</button>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
<!-- ./content -->
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
{{> legal-info}}
|
|
65
|
+
|
|
66
|
+
{{> similar-products-v2 }}
|
|
67
|
+
|
|
68
|
+
{{> seo-widgets title="More products" }}
|
|
69
|
+
{{> seo-widgets title="Related category" }}
|
|
70
|
+
|
|
71
|
+
</main>
|
|
72
|
+
{{/content}}
|
|
73
|
+
{{#content "foot" mode="append"}}
|
|
74
|
+
{{> kitchen/filter-modal isKitchenMode=false modalTitle="Filter by" }}
|
|
75
|
+
<script defer src="./js/plp.bundle.min.js"></script>
|
|
76
|
+
|
|
77
|
+
<script defer src="./js/page/plp-cards-v2.js"></script>
|
|
78
|
+
<script defer src="./js/search-filter.min.js"></script>
|
|
79
|
+
<script defer src="./js/plp-filters.min.js"></script>
|
|
80
|
+
{{/content}}
|
|
81
|
+
{{/extend}}
|
package/src/page_plp_v2.html
CHANGED
|
@@ -52,6 +52,11 @@
|
|
|
52
52
|
{{>card_product_banner_v2}}
|
|
53
53
|
{{/each}}
|
|
54
54
|
{{/if}}
|
|
55
|
+
{{#if search-result_v2.bloomreach-media-banner}}
|
|
56
|
+
{{#each search-result_v2.bloomreach-media-banner}}
|
|
57
|
+
{{>card_bloomreach_media_banner}}
|
|
58
|
+
{{/each}}
|
|
59
|
+
{{/if}}
|
|
55
60
|
{{#if search-result_v2.sponsor-banner}}
|
|
56
61
|
{{#each search-result_v2.sponsor-banner}}
|
|
57
62
|
{{>card_sponsor_banner}}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{{#extend "base" pageClass="store-locator" title="Store locator list" pageStoreLocator=true}}
|
|
2
2
|
{{#content "head" mode="append" pageStoreLocator=true}}{{/content}}
|
|
3
|
+
|
|
3
4
|
{{#content "body"}}
|
|
4
5
|
<main class="container">
|
|
5
6
|
<h1>Store Locator</h1>
|
|
7
|
+
|
|
6
8
|
<button class="btn btn-primary btn_store-near-me">
|
|
7
9
|
<span class="btn__text">Find a store near me</span>
|
|
8
10
|
</button>
|
|
11
|
+
|
|
9
12
|
<div class="row-holder">
|
|
10
13
|
<div class="map-container">
|
|
11
14
|
<div class="map store-locator-popup__map">
|
|
@@ -13,43 +16,30 @@
|
|
|
13
16
|
</div>
|
|
14
17
|
</div>
|
|
15
18
|
</div>
|
|
16
|
-
|
|
19
|
+
|
|
20
|
+
{{> find-a-store data-action="scroll-to-list"}}
|
|
21
|
+
|
|
17
22
|
<div class="cards-store-holder">
|
|
18
23
|
<div class="cards-store-wrapper">
|
|
19
|
-
<div class="row">
|
|
20
|
-
|
|
21
|
-
<div class="cards-store-list">
|
|
22
|
-
{{> card-store-locator view-map="true" distance="true" opening-times="true" schedule-title="true" locator-list="true"}}
|
|
23
|
-
</div>
|
|
24
|
-
|
|
24
|
+
<div class="row" id="store-cards">
|
|
25
25
|
{{#each locators}}
|
|
26
26
|
<div class="cards-store-list">
|
|
27
|
-
{{> card-store-locator
|
|
27
|
+
{{> card-store-locator
|
|
28
|
+
opening-times=true
|
|
29
|
+
schedule-title=true
|
|
30
|
+
locator-list=true
|
|
31
|
+
}}
|
|
28
32
|
</div>
|
|
29
33
|
{{/each}}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
</span>
|
|
36
|
-
<span class="btn__text">
|
|
37
|
-
View more...
|
|
38
|
-
</span>
|
|
39
|
-
</button>
|
|
40
|
-
<button class="btn btn-secondary btn_full store-locator__load-button" style="display: none;">
|
|
41
|
-
<span class="icon icon__eye">
|
|
42
|
-
<i class="fas fa-eye"></i>
|
|
43
|
-
</span>
|
|
44
|
-
<span class="btn__text">View less</span>
|
|
45
|
-
</button>
|
|
46
|
-
</div>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="cards-store-list__actions">
|
|
36
|
+
<button class="btn btn-primary btn_full store-locator__load-button store-locator__load-button_more">
|
|
37
|
+
<span class="btn__text">Load more</span>
|
|
38
|
+
</button>
|
|
47
39
|
</div>
|
|
48
40
|
</div>
|
|
49
41
|
</div>
|
|
50
|
-
<div class="pagination-holder">
|
|
51
|
-
{{> pagination pagination1="true"}}
|
|
52
|
-
</div>
|
|
53
42
|
</main>
|
|
54
43
|
{{/content}}
|
|
55
44
|
{{/extend}}
|
|
45
|
+
<script defer src="./js/store-locator-cards.min.js"></script>
|