wickes-css2 2.109.0-develop.6 → 2.109.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.
- 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 +367 -111
- package/build/js/general.bundle.min.js +1 -1
- package/build/js/gift-cards.min.js +1 -1
- package/build/js/merged-checkout.min.js +1 -1
- package/build/js/page/checkout-payment-details.js +95 -11
- package/build/js/page/components/gift-cards.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/build/js/toggle-password-visibility.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/components/checkout-payment-details-v2.hbs +4 -4
- package/src/components/checkout-payment-info-block.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/checkout-payment-details.js +34 -1
- package/src/js/emulation/gift-cards.js +1 -1
- package/src/js/emulation/store-locator-load-more.js +69 -0
- package/src/js/page/checkout-payment-details.js +95 -11
- package/src/js/page/components/gift-cards.js +1 -1
- 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
|
});
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
window.Wick = window.Wick || {};
|
|
2
|
+
window.Wick.BillieData = window.Wick.BillieData || {};
|
|
3
|
+
window.Wick.BillieData.billiePaymentTerms = ['30', '60', '90'];
|
|
4
|
+
window.INIT_KLARNA_PAYMENT = window.INIT_KLARNA_PAYMENT || 'INIT_KLARNA_PAYMENT';
|
|
5
|
+
window.INIT_BILLIE_PAYMENT = window.INIT_BILLIE_PAYMENT || 'INIT_BILLIE_PAYMENT';
|
|
2
6
|
|
|
3
7
|
Wick.PaymentDetails = (function () {
|
|
4
8
|
var $btnEnterDetails = $('.btn-enter-details'),
|
|
5
9
|
isGuestPage = $('.page_checkout-payment-details_guest').length;
|
|
6
10
|
|
|
11
|
+
const $billieInfo = $('.checkout-payment-details__billie .billie-info');
|
|
12
|
+
const $klarnaInfo = $('.checkout-payment-details__klarna .klarna-info');
|
|
13
|
+
|
|
7
14
|
function bindEvents() {
|
|
8
15
|
$btnEnterDetails.on('click', function (e) {
|
|
9
16
|
e.preventDefault();
|
|
@@ -49,6 +56,32 @@ Wick.PaymentDetails = (function () {
|
|
|
49
56
|
Wick.Forms.showValidationErrors(this);
|
|
50
57
|
return false;
|
|
51
58
|
});
|
|
59
|
+
|
|
60
|
+
$(window).on(window.INIT_BILLIE_PAYMENT, function (e) {
|
|
61
|
+
const detail = e.detail || (e.originalEvent && e.originalEvent.detail) || {};
|
|
62
|
+
|
|
63
|
+
if (detail && detail.resolve) {
|
|
64
|
+
$billieInfo.show();
|
|
65
|
+
detail.resolve();
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
$(window).on(window.INIT_KLARNA_PAYMENT, function (e) {
|
|
70
|
+
const detail = e.detail || (e.originalEvent && e.originalEvent.detail) || {};
|
|
71
|
+
|
|
72
|
+
if (detail && detail.resolve) {
|
|
73
|
+
$klarnaInfo.show();
|
|
74
|
+
detail.resolve();
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
$(document).on('change', 'input[name="repaymentTerms"]', function () {
|
|
79
|
+
const hasSelection = $('input[name="repaymentTerms"]:checked').length > 0;
|
|
80
|
+
|
|
81
|
+
if (hasSelection) {
|
|
82
|
+
$billieInfo.show();
|
|
83
|
+
}
|
|
84
|
+
});
|
|
52
85
|
}
|
|
53
86
|
|
|
54
87
|
bindEvents();
|
|
@@ -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
|
+
});
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
var Wick = Wick || {};
|
|
2
|
+
window.INIT_KLARNA_PAYMENT = window.INIT_KLARNA_PAYMENT || 'INIT_KLARNA_PAYMENT';
|
|
3
|
+
window.INIT_BILLIE_PAYMENT = window.INIT_BILLIE_PAYMENT || 'INIT_BILLIE_PAYMENT';
|
|
2
4
|
Wick.CheckoutPaymentDetails = (function () {
|
|
3
5
|
const $modal = $('#modal-terms-and-conditions');
|
|
4
6
|
|
|
@@ -10,10 +12,11 @@ Wick.CheckoutPaymentDetails = (function () {
|
|
|
10
12
|
buttonName: 'btn-enter-details',
|
|
11
13
|
};
|
|
12
14
|
|
|
15
|
+
const toggleBillieRepaymentTermsClass = 'js-billie-repayment-terms--has-selection';
|
|
16
|
+
|
|
13
17
|
const elements = {
|
|
14
18
|
$billieRepaymentTerms: $('.js-billie-repayment-terms'),
|
|
15
|
-
$
|
|
16
|
-
$billieInfo: $('.checkout-payment-details__billie .billie-info'),
|
|
19
|
+
$billieWidget: $('.checkout-payment-details__billie[data-billie]'),
|
|
17
20
|
$wrapperPaymentInput: $('.checkout-payment-details__row'),
|
|
18
21
|
paymentInputName: '[name=payment-method]',
|
|
19
22
|
$cardDetails: $('.checkout-payment-details__card-details'),
|
|
@@ -27,6 +30,52 @@ Wick.CheckoutPaymentDetails = (function () {
|
|
|
27
30
|
hiddenClass: 'd-none',
|
|
28
31
|
};
|
|
29
32
|
|
|
33
|
+
let klarnaInited = false;
|
|
34
|
+
let billieInited = false;
|
|
35
|
+
|
|
36
|
+
function initKlarnaPayment() {
|
|
37
|
+
if (klarnaInited) return Promise.resolve({ ok: true, cached: true });
|
|
38
|
+
|
|
39
|
+
return new Promise((resolve, reject) => {
|
|
40
|
+
const payload = {};
|
|
41
|
+
const detail = {
|
|
42
|
+
resolve: (data) => {
|
|
43
|
+
klarnaInited = true;
|
|
44
|
+
resolve(data);
|
|
45
|
+
},
|
|
46
|
+
reject,
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const evt = createEvent(window.INIT_KLARNA_PAYMENT, payload, detail);
|
|
50
|
+
window.dispatchEvent(evt);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function initBilliePayment() {
|
|
55
|
+
if (billieInited) return Promise.resolve({ ok: true, cached: true });
|
|
56
|
+
|
|
57
|
+
return new Promise((resolve, reject) => {
|
|
58
|
+
const payload = {};
|
|
59
|
+
const detail = {
|
|
60
|
+
resolve: (data) => {
|
|
61
|
+
billieInited = true;
|
|
62
|
+
resolve(data);
|
|
63
|
+
},
|
|
64
|
+
reject,
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const evt = createEvent(window.INIT_BILLIE_PAYMENT, payload, detail);
|
|
68
|
+
window.dispatchEvent(evt);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function getBillieRepaymentTermsLength() {
|
|
73
|
+
const billieRepaymentTerms =
|
|
74
|
+
(window.Wick && window.Wick?.BillieData?.billiePaymentTerms) || [];
|
|
75
|
+
|
|
76
|
+
return Array.isArray(billieRepaymentTerms) ? billieRepaymentTerms.length : 0;
|
|
77
|
+
}
|
|
78
|
+
|
|
30
79
|
function preparePage() {
|
|
31
80
|
var modalOpened = $('.modal.show').length;
|
|
32
81
|
if (!modalOpened) return;
|
|
@@ -55,10 +104,14 @@ Wick.CheckoutPaymentDetails = (function () {
|
|
|
55
104
|
|
|
56
105
|
function togglePaymentBlocks(paymentMethods, checkedMethod) {
|
|
57
106
|
paymentMethods.forEach((method) => {
|
|
58
|
-
$(`[data-${method}]`).
|
|
107
|
+
$(`[data-${method}]`).hide();
|
|
59
108
|
});
|
|
60
|
-
}
|
|
61
109
|
|
|
110
|
+
const $selected = $(`[data-${checkedMethod}]`);
|
|
111
|
+
if ($selected.length) {
|
|
112
|
+
$selected.show();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
62
115
|
function resetAllCheckoutForms(keepPaymentMethod) {
|
|
63
116
|
const $container = elements.$wrapperPaymentInput.closest('.checkout-payment-details');
|
|
64
117
|
if (!$container.length) return;
|
|
@@ -102,9 +155,18 @@ Wick.CheckoutPaymentDetails = (function () {
|
|
|
102
155
|
$row.find(':input').prop('disabled', !isVisible);
|
|
103
156
|
}
|
|
104
157
|
|
|
158
|
+
function _syncBillieUI(isReady) {
|
|
159
|
+
elements.$billieWidget.toggle(isReady);
|
|
160
|
+
elements.$billieRepaymentTerms.toggleClass(toggleBillieRepaymentTermsClass, isReady);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function resetBillieUi() {
|
|
164
|
+
_syncBillieUI(false);
|
|
165
|
+
}
|
|
166
|
+
|
|
105
167
|
function setBillieStepVisibility(isReady) {
|
|
168
|
+
_syncBillieUI(isReady);
|
|
106
169
|
setBillingDetailsRowVisibility(isReady);
|
|
107
|
-
elements.$billieInfo.toggleClass(elements.hiddenClass, !isReady);
|
|
108
170
|
}
|
|
109
171
|
|
|
110
172
|
function resetBillieRepaymentSelection() {
|
|
@@ -130,13 +192,34 @@ Wick.CheckoutPaymentDetails = (function () {
|
|
|
130
192
|
const isUnregistered = type === 'unregistered';
|
|
131
193
|
const isRegistered = type === 'registered';
|
|
132
194
|
|
|
133
|
-
elements.$unregisteredFields
|
|
134
|
-
|
|
195
|
+
elements.$unregisteredFields
|
|
196
|
+
.toggleClass(elements.hiddenClass, !isUnregistered)
|
|
197
|
+
.removeAttr('style');
|
|
198
|
+
elements.$registeredFields
|
|
199
|
+
.toggleClass(elements.hiddenClass, !isRegistered)
|
|
200
|
+
.removeAttr('style');
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
function showBillingAddressDataCardFields() {
|
|
204
|
+
const dataCardFields = elements.$billingAddress.find('[data-card]');
|
|
205
|
+
if (dataCardFields) {
|
|
206
|
+
dataCardFields.show();
|
|
207
|
+
}
|
|
135
208
|
}
|
|
136
209
|
|
|
137
210
|
function changeDetailsBlock(checkedMethod) {
|
|
138
211
|
if (checkedMethod !== 'billie') {
|
|
212
|
+
resetBillieUi();
|
|
139
213
|
setBillingDetailsRowVisibility(true);
|
|
214
|
+
hideBillieBusiness();
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if (checkedMethod === 'klarna') {
|
|
218
|
+
initKlarnaPayment().catch(() => {});
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
if (checkedMethod === 'billie' && getBillieRepaymentTermsLength() === 1) {
|
|
222
|
+
initBilliePayment().catch(() => {});
|
|
140
223
|
}
|
|
141
224
|
|
|
142
225
|
switch (checkedMethod) {
|
|
@@ -158,7 +241,7 @@ Wick.CheckoutPaymentDetails = (function () {
|
|
|
158
241
|
};
|
|
159
242
|
changeLabelText(detailsLabel);
|
|
160
243
|
|
|
161
|
-
setBillieStepVisibility(
|
|
244
|
+
setBillieStepVisibility(getBillieRepaymentTermsLength() === 1);
|
|
162
245
|
resetBillieRepaymentSelection();
|
|
163
246
|
showBillieBusiness();
|
|
164
247
|
break;
|
|
@@ -172,15 +255,16 @@ Wick.CheckoutPaymentDetails = (function () {
|
|
|
172
255
|
prevClearableMethod === 'card' && clearInputFields();
|
|
173
256
|
changeLabelText(detailsLabel);
|
|
174
257
|
prevClearableMethod = checkedMethod;
|
|
258
|
+
showBillingAddressDataCardFields();
|
|
175
259
|
break;
|
|
176
260
|
|
|
177
|
-
case 'apple':
|
|
261
|
+
case 'apple-pay':
|
|
178
262
|
hideCardDetails();
|
|
179
263
|
hidePlaceOrder();
|
|
180
264
|
hideBillingAddres();
|
|
181
265
|
break;
|
|
182
266
|
|
|
183
|
-
case 'google':
|
|
267
|
+
case 'google-pay':
|
|
184
268
|
hideCardDetails();
|
|
185
269
|
hidePlaceOrder();
|
|
186
270
|
hideBillingAddres();
|
|
@@ -256,7 +340,7 @@ Wick.CheckoutPaymentDetails = (function () {
|
|
|
256
340
|
if (currentMethod !== 'billie') return;
|
|
257
341
|
|
|
258
342
|
requestAnimationFrame(() => {
|
|
259
|
-
forceReflow(elements.$
|
|
343
|
+
forceReflow(elements.$billieWidget);
|
|
260
344
|
});
|
|
261
345
|
|
|
262
346
|
const hasSelection = $('input[name="repaymentTerms"]:checked').length > 0;
|
|
@@ -111,7 +111,7 @@ Wick.GiftCard = {
|
|
|
111
111
|
klarnaInfo: '.checkout-payment-details__klarna',
|
|
112
112
|
billingAddress: '.billing-address',
|
|
113
113
|
altPaymentRowsAttr:
|
|
114
|
-
'[data-apple],[data-google],[data-paypal],[data-klarna],[data-billie],[data-clearpay],[data-existing-card]',
|
|
114
|
+
'[data-apple-pay],[data-google-pay],[data-paypal],[data-klarna],[data-billie],[data-clearpay],[data-existing-card]',
|
|
115
115
|
hiddenCard: 'checkout-payment-details__card-details_hidden',
|
|
116
116
|
cardDetails: '.checkout-payment-details__card-details',
|
|
117
117
|
},
|
|
@@ -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
|
+
})();
|