wickes-css2 2.117.0-develop.1 → 2.117.0-develop.3
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/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/checkout.css +1 -1
- package/build/css/pages/page_in-store-checkout.css +1 -1
- package/build/css/pages/page_product_search.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/pages/page_ti.css +1 -1
- package/build/css/pdp-main-before-combine.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/css/store-locator-main.css +1 -1
- package/build/js/basket.min.js +1 -1
- package/build/js/bloomreach-widget.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 +254 -212
- package/build/js/merged-checkout.min.js +1 -1
- package/build/js/page/bloomreach-widget/why-not-add-widget.js +1 -1
- package/build/js/page/components/store-locator.js +165 -0
- package/build/js/project-list.min.js +1 -1
- package/build/js/store-locator.min.js +1 -0
- package/package.json +1 -1
- package/src/components/bloomreach/complete-your-project-skeleton.hbs +1 -1
- package/src/components/find-a-store.hbs +48 -32
- package/src/js/emulation/bloomreach-widget-loading.js +1 -1
- package/src/js/emulation/complete-your-project-loading.js +1 -1
- package/src/js/emulation/forms.js +81 -28
- package/src/js/emulation/gift-cards.js +1 -0
- package/src/js/emulation/store-locator-geo-emulation.js +185 -0
- package/src/js/emulation/store-locator-load-more.js +9 -1
- package/src/js/page/bloomreach-widget/why-not-add-widget.js +1 -1
- package/src/js/page/components/store-locator.js +165 -0
- package/src/page_checkout_confirmation.html +0 -53
- package/src/page_checkout_confirmation_paypal.html +0 -53
- package/src/page_checkout_delivery-address-ASM.html +0 -81
- package/src/page_checkout_delivery-details-v2-asm.html +1 -1
- package/src/page_checkout_delivery-details-v2-calendar-message.html +1 -1
- package/src/page_checkout_delivery-details-v2-oos.html +1 -1
- package/src/page_checkout_delivery-details-v2-wisdom-not-available.html +1 -1
- package/src/page_checkout_delivery-details-v2-wisdom.html +1 -1
- package/src/page_checkout_delivery-details-with-loader-v2.html +1 -1
- package/src/page_checkout_delivery-details_guest-new.html +1 -1
- package/src/page_checkout_payment-details-ASM.html +0 -7
- package/src/page_checkout_payment-details-v2-asm.html +3 -3
- package/src/page_checkout_payment-details_guest-BPS.html +1 -4
- package/src/page_checkout_payment-details_guest-click-collect-icon.html +0 -3
- package/src/page_checkout_payment-details_guest.html +0 -6
- package/src/page_checkout_payment-details_with-loader.html +0 -7
- package/src/page_in-store_MVP_order-summary-submitted.html +0 -16
- package/src/page_instore_progress_bar-three-steps.html +0 -3
- package/src/page_new-checkout-form-secure.html +10 -11
- package/src/page_product-details-bloomreach.html +1 -1
- package/src/page_product-details-with-why-not-add-single.html +1 -1
- package/src/page_store-locator-list.html +13 -13
- package/src/page_store-locator.html +12 -9
- package/src/scss/components/_account-heading.scss +1 -1
- package/src/scss/components/_find-a-store.scss +253 -49
- package/src/scss/components/_map.scss +30 -3
- package/src/scss/components/_shop-colour.scss +1 -1
- package/src/scss/main.scss +0 -1
- package/src/scss/pages/checkout-new.scss +1 -4
- package/src/scss/pages/checkout.scss +0 -1
- package/src/scss/pages/page_in-store-checkout.scss +0 -56
- package/src/scss/pages/page_product_search.scss +11 -1
- package/src/scss/pages/page_store-locator-details.scss +1 -1
- package/src/scss/pages/page_store-locator.scss +249 -10
- package/src/scss/pages/page_ti.scss +1 -1
- package/src/scss/pdp-main.scss +0 -1
- package/src/scss/store-locator-main.scss +0 -5
- package/src/sitemap.html +33 -82
- package/build/css/pages/page_in-store_MVP_order-summary-submitted.css +0 -1
- package/build/css/pages/page_in-store_MVP_order-summary.css +0 -1
- package/build/css/pages/page_new-checkout-forgot.css +0 -1
- package/build/js/page/checkout-confirmation.js +0 -8
- package/build/js/page/checkout-delivery-address.js +0 -41
- package/build/js/page/checkout-sign-in.js +0 -17
- package/build/js/page/instore-checkout.js +0 -11
- package/src/components/checkout-deleted-payment-details.hbs +0 -77
- package/src/components/checkout-deleted-payment-method-card.hbs +0 -58
- package/src/components/checkout-edit-billing-address-modal.hbs +0 -30
- package/src/components/checkout-in-store-customer-details.hbs +0 -18
- package/src/components/checkout_delivery.hbs +0 -11
- package/src/components/checkout_your-details.hbs +0 -36
- package/src/components/in-store-terms-and-conditions-modal.hbs +0 -308
- package/src/components/steps.hbs +0 -32
- package/src/js/components/checkout_your-details.js +0 -78
- package/src/js/emulation/checkout-sign-in-emulation.js +0 -43
- package/src/js/emulation/checkout_your-details.js +0 -90
- package/src/js/page/checkout-confirmation.js +0 -8
- package/src/js/page/checkout-delivery-address.js +0 -41
- package/src/js/page/checkout-sign-in.js +0 -17
- package/src/js/page/instore-checkout.js +0 -11
- package/src/page_checkout_confirmation_guest.html +0 -140
- package/src/page_checkout_delivery-address-customer-journey.html +0 -66
- package/src/page_checkout_delivery-address-v2.html +0 -48
- package/src/page_checkout_delivery-address_guest.html +0 -35
- package/src/page_checkout_delivery_address-asm-new.html +0 -54
- package/src/page_checkout_half-sign-in.html +0 -53
- package/src/page_checkout_payment-details-confirm-delete.html +0 -27
- package/src/page_checkout_payment-details.html +0 -27
- package/src/page_checkout_sign-in-password-popup.html +0 -98
- package/src/page_checkout_sign-in-popup.html +0 -99
- package/src/page_checkout_sign-in.html +0 -53
- package/src/page_in-store_MVP_order-summary.html +0 -19
- package/src/page_in-store_payment-checkout.html +0 -35
- package/src/page_in-store_sign-in.html +0 -30
- package/src/page_instore_progress_bar.html +0 -30
- package/src/page_new-checkout-forgot-password.html +0 -45
- package/src/page_new-checkout-form-login-guest.html +0 -105
- package/src/page_new-checkout-form-login-wickes.html +0 -48
- package/src/scss/components/_steps.scss +0 -207
- package/src/scss/pages/_checkout_your-details.scss +0 -48
- package/src/scss/pages/page_in-store_MVP_order-summary-submitted.scss +0 -14
- package/src/scss/pages/page_in-store_MVP_order-summary.scss +0 -150
- package/src/scss/pages/page_new-checkout-forgot.scss +0 -49
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function t(a,c,s){function n(r,o){if(!c[r]){if(!a[r]){var e="function"==typeof require&&require;if(!o&&e)return e(r,!0);if(i)return i(r,!0);throw(o=new Error("Cannot find module '"+r+"'")).code="MODULE_NOT_FOUND",o}e=c[r]={exports:{}},a[r][0].call(e.exports,function(o){return n(a[r][1][o]||o)},e,e.exports,t,a,c,s)}return c[r].exports}for(var i="function"==typeof require&&require,o=0;o<s.length;o++)n(s[o]);return n}({1:[function(o,r,e){"use strict";var t=window.Wick||(window.Wick={});t.StoreLocator={el:{wrapper:".store-locator-wrapper",openSearch:".locator__open-search",formRow:".form-row",formRowError:".form-row__error",pageContainer:"body.store-locator main.container",postcode:"#postcode-town",store:"#store-id"},classes:{collapsed:"store-locator_search-collapsed",notification:"store-locator__notification",rowError:"form-row_validation-error"},messages:{postcode:"Check that you entered a valid postcode or place name.",geolocation:"To search for the stores nearest you, please enable geolocation services on your device.",store:"Please choose a store."},isDesktopLayout:function(){return"up-lg"===t.Responsive.getCurrentBreakpoint()},collapseSearch:function(){t.StoreLocator.isDesktopLayout()&&$(t.StoreLocator.el.wrapper).addClass(t.StoreLocator.classes.collapsed)},openSearch:function(){$(t.StoreLocator.el.wrapper).removeClass(t.StoreLocator.classes.collapsed)},removeTopMessage:function(){$(t.StoreLocator.el.pageContainer).children("."+t.StoreLocator.classes.notification).remove()},removeFieldError:function(o){o=$(o);o.length&&(t.Validation&&t.Validation.removeValidationError?t.Validation.removeValidationError(o):o.closest(t.StoreLocator.el.formRow).removeClass(t.StoreLocator.classes.rowError).find(t.StoreLocator.el.formRowError).remove())},showFieldError:function(o,r){var e=$(o);e.length&&(t.StoreLocator.removeFieldError(o),t.Validation&&t.Validation.displayValidationError?t.Validation.displayValidationError(e,r):e.closest(t.StoreLocator.el.formRow).addClass(t.StoreLocator.classes.rowError).append($("<div/>",{class:"form-row__error",text:r})))},showTopMessage:function(o,r,e){t.StoreLocator.removeTopMessage(),t.Notification&&t.Notification.show&&(o=t.Notification.show({container:t.StoreLocator.el.pageContainer,type:o,text:r,closeBtn:e}))&&o.$self&&o.$self.addClass(t.StoreLocator.classes.notification)},clearFeedback:function(){t.StoreLocator.removeTopMessage(),t.StoreLocator.removeFieldError(t.StoreLocator.el.postcode),t.StoreLocator.removeFieldError(t.StoreLocator.el.store)},showPostcodeError:function(){t.StoreLocator.openSearch(),t.StoreLocator.clearFeedback(),t.StoreLocator.showTopMessage("error",t.StoreLocator.messages.postcode,!1),t.StoreLocator.showFieldError(t.StoreLocator.el.postcode,t.StoreLocator.messages.postcode)},showGeolocationWarning:function(){t.StoreLocator.openSearch(),t.StoreLocator.clearFeedback(),t.StoreLocator.showTopMessage("warning",t.StoreLocator.messages.geolocation,!0)},showStoreSelectionError:function(){t.StoreLocator.openSearch(),t.StoreLocator.clearFeedback(),t.StoreLocator.showTopMessage("error",t.StoreLocator.messages.store,!1),t.StoreLocator.showFieldError(t.StoreLocator.el.store,t.StoreLocator.messages.store)},showResults:function(){t.StoreLocator.clearFeedback(),t.StoreLocator.collapseSearch()},bindEvents:function(){$(document).on("click",t.StoreLocator.el.openSearch,t.StoreLocator.openSearch)},init:function(){t.StoreLocator.bindEvents(),"true"===new URLSearchParams(window.location.search).get("searched")&&t.StoreLocator.collapseSearch()}},t.StoreLocator.init()},{}]},{},[1]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div class="complete-widget">
|
|
2
2
|
<h3 class="complete-widget__title text-center">
|
|
3
|
-
{{#if
|
|
3
|
+
{{#if titleWidget}}{{titleWidget}}{{else}}Customers also bought{{/if}}
|
|
4
4
|
</h3>
|
|
5
5
|
|
|
6
6
|
<div class="complete-widget__content" data-complete-widget-content>
|
|
@@ -1,42 +1,58 @@
|
|
|
1
1
|
<div class="locator">
|
|
2
|
-
<div class="locator__header-wrapper">
|
|
3
|
-
{{#if another-store}}
|
|
4
|
-
<h2>Choose another store</h2>
|
|
5
|
-
{{else}}
|
|
6
|
-
<h2>Find a store</h2>
|
|
7
|
-
{{/if}}
|
|
8
|
-
<p>There are now more than 230 Wickes stores throughout the UK.</p>
|
|
9
|
-
</div>
|
|
10
2
|
<div class="form-locator-wrapper">
|
|
11
3
|
<div class="form-bg forms-locator">
|
|
12
|
-
<
|
|
13
|
-
{{
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
4
|
+
<div class="locator__header-wrapper">
|
|
5
|
+
{{#if another-store}}
|
|
6
|
+
<h2>Choose another store</h2>
|
|
7
|
+
{{else}}
|
|
8
|
+
<h2>Find a store</h2>
|
|
9
|
+
{{/if}}
|
|
10
|
+
<p>There are now more than 230 Wickes stores throughout the UK.</p>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<div class="locator__form-wrapper">
|
|
14
|
+
<form action="#" class="form-locator-list" data-action="{{data-action}}">
|
|
15
|
+
<div class="form-row" data-row-required data-message="Check that you entered a valid postcode or place name.">
|
|
16
|
+
<label class="form-row__label" for="postcode-town">Postcode/Town</label>
|
|
17
|
+
<div class="form-row__field">
|
|
18
|
+
<input class="tbx form-locator__search-inp" value="" id="postcode-town" name="postcode-town" type="text">
|
|
19
|
+
<button class="header-search__submit" type="submit">
|
|
20
|
+
<span class="header-search__submit-icon">
|
|
21
|
+
<span class="fas fa-search"></span>
|
|
22
|
+
</span>
|
|
23
|
+
<span class="header-search__submit-label">
|
|
24
|
+
<span class="btn__text">Search</span>
|
|
25
|
+
</span>
|
|
19
26
|
</button>
|
|
20
27
|
</div>
|
|
21
28
|
</div>
|
|
22
|
-
</
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
</form>
|
|
30
|
+
|
|
31
|
+
<button class="locator__near-me" type="button">
|
|
32
|
+
<span class="locator__near-me-icon">
|
|
33
|
+
<span class="fas fa-map-pin"></span>
|
|
34
|
+
</span>
|
|
35
|
+
<span class="locator__near-me-text">Find a store near me</span>
|
|
36
|
+
</button>
|
|
37
|
+
|
|
38
|
+
<div class="locator__divider"></div>
|
|
39
|
+
|
|
40
|
+
<form action="#" class="form-locator">
|
|
41
|
+
<div class="locator__select-store">
|
|
42
|
+
{{> form-row dropdown="true" id="store-id" label="Select a store" placeholder="Please select" required="true" row-mod="locator__select-row"}}
|
|
43
|
+
<button class="btn btn-primary locator__details-button" type="submit">
|
|
44
|
+
<span class="btn__text">Display store details</span>
|
|
36
45
|
</button>
|
|
37
46
|
</div>
|
|
38
|
-
</
|
|
39
|
-
</
|
|
47
|
+
</form>
|
|
48
|
+
</div>
|
|
40
49
|
</div>
|
|
41
50
|
</div>
|
|
42
|
-
|
|
51
|
+
|
|
52
|
+
<button class="locator__open-search" type="button">
|
|
53
|
+
<span class="locator__open-search-icon">
|
|
54
|
+
<span class="fas fa-search"></span>
|
|
55
|
+
</span>
|
|
56
|
+
<span class="locator__open-search-text">Open search</span>
|
|
57
|
+
</button>
|
|
58
|
+
</div>
|
|
@@ -6,6 +6,6 @@ $(document).ready(function () {
|
|
|
6
6
|
const contextKey = $container.data('mock-key');
|
|
7
7
|
const payloadData = Wick.FEMock.dataBloomreach[contextKey];
|
|
8
8
|
|
|
9
|
-
Wick.BloomreachWidget
|
|
9
|
+
Wick.BloomreachWidget?.init('completeYourProject', payloadData);
|
|
10
10
|
}, 3000);
|
|
11
11
|
});
|
|
@@ -11,6 +11,6 @@ $(document).ready(function () {
|
|
|
11
11
|
const mockDataKey = $container.data('mock-key');
|
|
12
12
|
const payloadData = Wick.FEMock.dataBloomreach[mockDataKey];
|
|
13
13
|
|
|
14
|
-
Wick.BloomreachWidget
|
|
14
|
+
Wick.BloomreachWidget?.init('completeYourProject', payloadData);
|
|
15
15
|
}, 3000);
|
|
16
16
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var Wick = Wick || {};
|
|
1
|
+
var Wick = window.Wick || (window.Wick = {});
|
|
2
2
|
Wick.Forms = (function () {
|
|
3
3
|
var fieldRow = '.form-row[data-row-required]',
|
|
4
4
|
field = '.form-row__field',
|
|
@@ -73,27 +73,39 @@ Wick.Forms = (function () {
|
|
|
73
73
|
var showValidationErrors = function (form, errorMsg) {
|
|
74
74
|
$form = $(form);
|
|
75
75
|
var $rows = $form.find(fieldRow).not('[data-no-global-validation]');
|
|
76
|
+
|
|
76
77
|
if (!$rows.length) return;
|
|
77
|
-
|
|
78
|
+
|
|
79
|
+
$rows.find(fieldError).remove();
|
|
78
80
|
|
|
79
81
|
if (!$form.hasClass(formInvalid)) {
|
|
80
|
-
$form.find(
|
|
82
|
+
$form.find(fieldError).remove();
|
|
83
|
+
|
|
81
84
|
$rows = $form.find(fieldRow).filter(function () {
|
|
82
85
|
return $(this).is(':visible');
|
|
83
86
|
});
|
|
84
87
|
|
|
85
|
-
$
|
|
88
|
+
if ($form.is('.form-locator, .form-locator-list')) {
|
|
89
|
+
$rows.each(function () {
|
|
90
|
+
var $row = $(this);
|
|
91
|
+
var message = errorMsg || $row.data('message') || 'Error message here';
|
|
92
|
+
|
|
93
|
+
$row.addClass(rowValidationError).append(validationError(message));
|
|
94
|
+
});
|
|
95
|
+
} else {
|
|
96
|
+
$rows.append(validationError(errorMsg)).addClass(rowValidationError);
|
|
97
|
+
}
|
|
98
|
+
|
|
86
99
|
$form.addClass(formInvalid);
|
|
87
100
|
}
|
|
88
101
|
|
|
89
|
-
$rows.append(validationError(errorMsg)).addClass(rowValidationError);
|
|
90
|
-
|
|
91
102
|
var $firstMsg = $form
|
|
92
103
|
.find(fieldRow)
|
|
93
104
|
.filter(function () {
|
|
94
105
|
return $(this).is(':visible');
|
|
95
106
|
})
|
|
96
107
|
.first();
|
|
108
|
+
|
|
97
109
|
if ($firstMsg.length && !isElementInViewport($firstMsg)) {
|
|
98
110
|
var inModal = $firstMsg.closest('.modal').length,
|
|
99
111
|
$scrollableEl = inModal ? $firstMsg.closest('.modal') : $('html, body'),
|
|
@@ -229,19 +241,76 @@ Wick.Forms = (function () {
|
|
|
229
241
|
window.location.href = './page_store-locator-details.html';
|
|
230
242
|
return false;
|
|
231
243
|
}
|
|
244
|
+
|
|
245
|
+
clearValidationErrors(this);
|
|
246
|
+
|
|
247
|
+
if (Wick.StoreLocator && Wick.StoreLocator.showStoreSelectionError) {
|
|
248
|
+
Wick.StoreLocator.showStoreSelectionError();
|
|
249
|
+
} else {
|
|
250
|
+
showValidationErrors(this, 'Please choose a store.');
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
return false;
|
|
232
254
|
}
|
|
233
255
|
|
|
234
256
|
if ($(form).is('.form-locator-list')) {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
257
|
+
var searchValue = $.trim($(form).find('#postcode-town').val()),
|
|
258
|
+
actionAfterSubmit;
|
|
259
|
+
|
|
260
|
+
clearValidationErrors(this);
|
|
261
|
+
|
|
262
|
+
if (!searchValue.length) {
|
|
263
|
+
if (
|
|
264
|
+
Wick.StoreLocatorGeoEmulation &&
|
|
265
|
+
Wick.StoreLocatorGeoEmulation.handleEmptySearch
|
|
266
|
+
) {
|
|
267
|
+
Wick.StoreLocatorGeoEmulation.handleEmptySearch();
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if (
|
|
274
|
+
Wick.StoreLocatorGeoEmulation &&
|
|
275
|
+
Wick.StoreLocatorGeoEmulation.isValidSearch &&
|
|
276
|
+
!Wick.StoreLocatorGeoEmulation.isValidSearch(searchValue)
|
|
277
|
+
) {
|
|
278
|
+
if (Wick.StoreLocator && Wick.StoreLocator.showPostcodeError) {
|
|
279
|
+
Wick.StoreLocator.showPostcodeError();
|
|
240
280
|
} else {
|
|
241
|
-
|
|
281
|
+
showValidationErrors(
|
|
282
|
+
this,
|
|
283
|
+
'Check that you entered a valid postcode or place name.'
|
|
284
|
+
);
|
|
242
285
|
}
|
|
286
|
+
|
|
243
287
|
return false;
|
|
244
288
|
}
|
|
289
|
+
|
|
290
|
+
actionAfterSubmit = $(form).attr('data-action');
|
|
291
|
+
|
|
292
|
+
if (actionAfterSubmit === 'scroll-to-list') {
|
|
293
|
+
if (
|
|
294
|
+
Wick.StoreLocatorGeoEmulation &&
|
|
295
|
+
Wick.StoreLocatorGeoEmulation.showResults
|
|
296
|
+
) {
|
|
297
|
+
Wick.StoreLocatorGeoEmulation.showResults();
|
|
298
|
+
} else {
|
|
299
|
+
if (Wick.StoreLocator && Wick.StoreLocator.showResults) {
|
|
300
|
+
Wick.StoreLocator.showResults();
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
handleSmoothScroll();
|
|
304
|
+
}
|
|
305
|
+
} else {
|
|
306
|
+
window.location.href =
|
|
307
|
+
Wick.StoreLocatorGeoEmulation &&
|
|
308
|
+
Wick.StoreLocatorGeoEmulation.withGeoState
|
|
309
|
+
? Wick.StoreLocatorGeoEmulation.withGeoState(actionAfterSubmit)
|
|
310
|
+
: actionAfterSubmit;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
return false;
|
|
245
314
|
}
|
|
246
315
|
|
|
247
316
|
if ($(form).is('#form-mini-basket')) {
|
|
@@ -277,22 +346,6 @@ Wick.Forms = (function () {
|
|
|
277
346
|
}
|
|
278
347
|
|
|
279
348
|
let requiredFields;
|
|
280
|
-
if ($(form).is('#form-checkout-your-details')) {
|
|
281
|
-
requiredFields = $(form).find('[data-row-required]:visible :input');
|
|
282
|
-
if (_.every(requiredFields, isNotEmpty)) {
|
|
283
|
-
window.location.href = $(form).attr('data-action');
|
|
284
|
-
return false;
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
if ($(form).is('#checkout-your-details-modal')) {
|
|
289
|
-
requiredFields = $(form).find('[data-row-required]:visible :input');
|
|
290
|
-
if (_.every(requiredFields, isNotEmpty)) {
|
|
291
|
-
$('#modalDeliveryEdit').modal('hide');
|
|
292
|
-
return false;
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
|
|
296
349
|
if ($(form).is('#edit-delivery-address')) {
|
|
297
350
|
requiredFields = $(form).find('[data-row-required]:visible :input');
|
|
298
351
|
if (_.every(requiredFields, isNotEmpty)) {
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
var Wick = window.Wick || (window.Wick = {});
|
|
2
|
+
|
|
3
|
+
Wick.StoreLocatorGeoEmulation = (function () {
|
|
4
|
+
var GEO_ON_CLASS = 'store-locator_geo-on',
|
|
5
|
+
GEO_OFF_CLASS = 'store-locator_geo-off',
|
|
6
|
+
SELECTORS = {
|
|
7
|
+
page: 'body.store-locator',
|
|
8
|
+
nearMe: '.locator__near-me',
|
|
9
|
+
cardsHolder: '.cards-store-holder',
|
|
10
|
+
cards: '.cards-store-list',
|
|
11
|
+
storeSelect: '#store-id',
|
|
12
|
+
storeCard: '.card-store',
|
|
13
|
+
},
|
|
14
|
+
UK_POSTCODE_PATTERN = /^(GIR\s?0AA|[A-Z]{1,2}\d[A-Z\d]?\s?\d[A-Z]{2})$/i;
|
|
15
|
+
|
|
16
|
+
function normalize(value) {
|
|
17
|
+
return $.trim(value || '').toLowerCase();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function isGeoOn() {
|
|
21
|
+
return $(SELECTORS.page).hasClass(GEO_ON_CLASS);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function isKnownLocation(value) {
|
|
25
|
+
var normalizedValue = normalize(value),
|
|
26
|
+
isMatch = false;
|
|
27
|
+
|
|
28
|
+
if (!normalizedValue) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
$(SELECTORS.storeSelect)
|
|
33
|
+
.find('option')
|
|
34
|
+
.each(function () {
|
|
35
|
+
var optionText = normalize($(this).text());
|
|
36
|
+
|
|
37
|
+
if (
|
|
38
|
+
optionText &&
|
|
39
|
+
optionText !== 'please select' &&
|
|
40
|
+
optionText.indexOf(normalizedValue) !== -1
|
|
41
|
+
) {
|
|
42
|
+
isMatch = true;
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
if (isMatch) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
$(SELECTORS.storeCard).each(function () {
|
|
52
|
+
if (normalize($(this).text()).indexOf(normalizedValue) !== -1) {
|
|
53
|
+
isMatch = true;
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
return isMatch;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function isValidSearch(value) {
|
|
62
|
+
var normalizedValue = $.trim(value || '');
|
|
63
|
+
|
|
64
|
+
return (
|
|
65
|
+
!!normalizedValue &&
|
|
66
|
+
(UK_POSTCODE_PATTERN.test(normalizedValue) || isKnownLocation(normalizedValue))
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function hideResults() {
|
|
71
|
+
$(SELECTORS.cardsHolder).hide();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function scrollToResults() {
|
|
75
|
+
var $firstCard = $(SELECTORS.cards).first();
|
|
76
|
+
|
|
77
|
+
if (!$firstCard.length) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
$('html, body').animate(
|
|
82
|
+
{
|
|
83
|
+
scrollTop: $firstCard.offset().top - 60,
|
|
84
|
+
},
|
|
85
|
+
300
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function withGeoState(url) {
|
|
90
|
+
var parts = url.split('#'),
|
|
91
|
+
base = parts[0],
|
|
92
|
+
hash = parts[1] ? '#' + parts[1] : '',
|
|
93
|
+
separator;
|
|
94
|
+
|
|
95
|
+
base = base.replace(/([?&])geo=[^&#]*&?/g, function (match, prefix) {
|
|
96
|
+
return prefix === '?' ? '?' : '';
|
|
97
|
+
});
|
|
98
|
+
base = base.replace(/[?&]$/, '');
|
|
99
|
+
separator = base.indexOf('?') === -1 ? '?' : '&';
|
|
100
|
+
|
|
101
|
+
return base + separator + 'geo=' + (isGeoOn() ? 'on' : 'off') + hash;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function showResults() {
|
|
105
|
+
var $holder = $(SELECTORS.cardsHolder);
|
|
106
|
+
|
|
107
|
+
if (!$holder.length) {
|
|
108
|
+
window.location.href = withGeoState(
|
|
109
|
+
'./page_store-locator-list.html?searched=true#stores-list'
|
|
110
|
+
);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
$holder.show();
|
|
115
|
+
|
|
116
|
+
if (Wick.StoreLocatorLoadMore && Wick.StoreLocatorLoadMore.reset) {
|
|
117
|
+
Wick.StoreLocatorLoadMore.reset();
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (Wick.StoreLocator && Wick.StoreLocator.showResults) {
|
|
121
|
+
Wick.StoreLocator.showResults();
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
scrollToResults();
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function handleEmptySearch() {
|
|
128
|
+
if (isGeoOn()) {
|
|
129
|
+
showResults();
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (Wick.StoreLocator && Wick.StoreLocator.showGeolocationWarning) {
|
|
134
|
+
Wick.StoreLocator.showGeolocationWarning();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function handleNearMeClick(event) {
|
|
139
|
+
event.preventDefault();
|
|
140
|
+
|
|
141
|
+
if (!isGeoOn()) {
|
|
142
|
+
hideResults();
|
|
143
|
+
|
|
144
|
+
if (Wick.StoreLocator && Wick.StoreLocator.showGeolocationWarning) {
|
|
145
|
+
Wick.StoreLocator.showGeolocationWarning();
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
showResults();
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function bindEvents() {
|
|
155
|
+
$(document)
|
|
156
|
+
.off('click.storeLocatorGeoEmulation', SELECTORS.nearMe)
|
|
157
|
+
.on('click.storeLocatorGeoEmulation', SELECTORS.nearMe, handleNearMeClick);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function init() {
|
|
161
|
+
var $page = $(SELECTORS.page);
|
|
162
|
+
|
|
163
|
+
if (!$page.length) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
var geo = new URLSearchParams(window.location.search).get('geo'),
|
|
168
|
+
isGeoEnabled = geo !== 'off';
|
|
169
|
+
|
|
170
|
+
$page.toggleClass(GEO_ON_CLASS, isGeoEnabled);
|
|
171
|
+
$page.toggleClass(GEO_OFF_CLASS, !isGeoEnabled);
|
|
172
|
+
|
|
173
|
+
bindEvents();
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
init();
|
|
177
|
+
|
|
178
|
+
return {
|
|
179
|
+
init: init,
|
|
180
|
+
isValidSearch: isValidSearch,
|
|
181
|
+
handleEmptySearch: handleEmptySearch,
|
|
182
|
+
showResults: showResults,
|
|
183
|
+
withGeoState: withGeoState,
|
|
184
|
+
};
|
|
185
|
+
})();
|
|
@@ -58,9 +58,17 @@ function initStoreLocatorLoadMore() {
|
|
|
58
58
|
|
|
59
59
|
updateVisibility();
|
|
60
60
|
|
|
61
|
-
$btnMore.on('click', loadMore);
|
|
61
|
+
$btnMore.off('click.storeLocatorLoadMore').on('click.storeLocatorLoadMore', loadMore);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
window.Wick = window.Wick || {};
|
|
65
|
+
Wick.StoreLocatorLoadMore = {
|
|
66
|
+
reset: function () {
|
|
67
|
+
visibleCount = PAGE_SIZE;
|
|
68
|
+
updateVisibility();
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
|
|
64
72
|
init();
|
|
65
73
|
}
|
|
66
74
|
|
|
@@ -2,7 +2,7 @@ import { createBloomreachRecommendationCarouselWidget } from './bloomreach-recom
|
|
|
2
2
|
|
|
3
3
|
const WhyNotAddWidget = createBloomreachRecommendationCarouselWidget({
|
|
4
4
|
namespace: 'whyNotAdd',
|
|
5
|
-
title: '
|
|
5
|
+
title: 'You might also like',
|
|
6
6
|
widgetContainer: '[data-why-not-add-widget]',
|
|
7
7
|
disableAfterSuccess: false,
|
|
8
8
|
disableAfterFailure: false,
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
var Wick = window.Wick || (window.Wick = {});
|
|
2
|
+
|
|
3
|
+
Wick.StoreLocator = {
|
|
4
|
+
el: {
|
|
5
|
+
wrapper: '.store-locator-wrapper',
|
|
6
|
+
openSearch: '.locator__open-search',
|
|
7
|
+
formRow: '.form-row',
|
|
8
|
+
formRowError: '.form-row__error',
|
|
9
|
+
pageContainer: 'body.store-locator main.container',
|
|
10
|
+
postcode: '#postcode-town',
|
|
11
|
+
store: '#store-id',
|
|
12
|
+
},
|
|
13
|
+
|
|
14
|
+
classes: {
|
|
15
|
+
collapsed: 'store-locator_search-collapsed',
|
|
16
|
+
notification: 'store-locator__notification',
|
|
17
|
+
rowError: 'form-row_validation-error',
|
|
18
|
+
},
|
|
19
|
+
|
|
20
|
+
messages: {
|
|
21
|
+
postcode: 'Check that you entered a valid postcode or place name.',
|
|
22
|
+
geolocation:
|
|
23
|
+
'To search for the stores nearest you, please enable geolocation services on your device.',
|
|
24
|
+
store: 'Please choose a store.',
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
isDesktopLayout() {
|
|
28
|
+
return Wick.Responsive.getCurrentBreakpoint() === 'up-lg';
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
collapseSearch() {
|
|
32
|
+
if (!Wick.StoreLocator.isDesktopLayout()) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
$(Wick.StoreLocator.el.wrapper).addClass(Wick.StoreLocator.classes.collapsed);
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
openSearch() {
|
|
40
|
+
$(Wick.StoreLocator.el.wrapper).removeClass(Wick.StoreLocator.classes.collapsed);
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
removeTopMessage() {
|
|
44
|
+
$(Wick.StoreLocator.el.pageContainer)
|
|
45
|
+
.children('.' + Wick.StoreLocator.classes.notification)
|
|
46
|
+
.remove();
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
removeFieldError(selector) {
|
|
50
|
+
const $field = $(selector);
|
|
51
|
+
|
|
52
|
+
if (!$field.length) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (Wick.Validation && Wick.Validation.removeValidationError) {
|
|
57
|
+
Wick.Validation.removeValidationError($field);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
$field
|
|
62
|
+
.closest(Wick.StoreLocator.el.formRow)
|
|
63
|
+
.removeClass(Wick.StoreLocator.classes.rowError)
|
|
64
|
+
.find(Wick.StoreLocator.el.formRowError)
|
|
65
|
+
.remove();
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
showFieldError(selector, message) {
|
|
69
|
+
let $field = $(selector),
|
|
70
|
+
$row;
|
|
71
|
+
|
|
72
|
+
if (!$field.length) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
Wick.StoreLocator.removeFieldError(selector);
|
|
77
|
+
|
|
78
|
+
if (Wick.Validation && Wick.Validation.displayValidationError) {
|
|
79
|
+
Wick.Validation.displayValidationError($field, message);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
$row = $field.closest(Wick.StoreLocator.el.formRow);
|
|
84
|
+
$row.addClass(Wick.StoreLocator.classes.rowError).append(
|
|
85
|
+
$('<div/>', {
|
|
86
|
+
class: 'form-row__error',
|
|
87
|
+
text: message,
|
|
88
|
+
})
|
|
89
|
+
);
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
showTopMessage(type, message, closeBtn) {
|
|
93
|
+
let notification;
|
|
94
|
+
|
|
95
|
+
Wick.StoreLocator.removeTopMessage();
|
|
96
|
+
|
|
97
|
+
if (!Wick.Notification || !Wick.Notification.show) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
notification = Wick.Notification.show({
|
|
102
|
+
container: Wick.StoreLocator.el.pageContainer,
|
|
103
|
+
type: type,
|
|
104
|
+
text: message,
|
|
105
|
+
closeBtn: closeBtn,
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
if (notification && notification.$self) {
|
|
109
|
+
notification.$self.addClass(Wick.StoreLocator.classes.notification);
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
|
|
113
|
+
clearFeedback() {
|
|
114
|
+
Wick.StoreLocator.removeTopMessage();
|
|
115
|
+
Wick.StoreLocator.removeFieldError(Wick.StoreLocator.el.postcode);
|
|
116
|
+
Wick.StoreLocator.removeFieldError(Wick.StoreLocator.el.store);
|
|
117
|
+
},
|
|
118
|
+
|
|
119
|
+
showPostcodeError() {
|
|
120
|
+
Wick.StoreLocator.openSearch();
|
|
121
|
+
Wick.StoreLocator.clearFeedback();
|
|
122
|
+
Wick.StoreLocator.showTopMessage('error', Wick.StoreLocator.messages.postcode, false);
|
|
123
|
+
Wick.StoreLocator.showFieldError(
|
|
124
|
+
Wick.StoreLocator.el.postcode,
|
|
125
|
+
Wick.StoreLocator.messages.postcode
|
|
126
|
+
);
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
showGeolocationWarning() {
|
|
130
|
+
Wick.StoreLocator.openSearch();
|
|
131
|
+
Wick.StoreLocator.clearFeedback();
|
|
132
|
+
Wick.StoreLocator.showTopMessage('warning', Wick.StoreLocator.messages.geolocation, true);
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
showStoreSelectionError() {
|
|
136
|
+
Wick.StoreLocator.openSearch();
|
|
137
|
+
Wick.StoreLocator.clearFeedback();
|
|
138
|
+
Wick.StoreLocator.showTopMessage('error', Wick.StoreLocator.messages.store, false);
|
|
139
|
+
Wick.StoreLocator.showFieldError(
|
|
140
|
+
Wick.StoreLocator.el.store,
|
|
141
|
+
Wick.StoreLocator.messages.store
|
|
142
|
+
);
|
|
143
|
+
},
|
|
144
|
+
|
|
145
|
+
showResults() {
|
|
146
|
+
Wick.StoreLocator.clearFeedback();
|
|
147
|
+
Wick.StoreLocator.collapseSearch();
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
bindEvents() {
|
|
151
|
+
$(document).on('click', Wick.StoreLocator.el.openSearch, Wick.StoreLocator.openSearch);
|
|
152
|
+
},
|
|
153
|
+
|
|
154
|
+
init() {
|
|
155
|
+
Wick.StoreLocator.bindEvents();
|
|
156
|
+
|
|
157
|
+
var searched = new URLSearchParams(window.location.search).get('searched');
|
|
158
|
+
|
|
159
|
+
if (searched === 'true') {
|
|
160
|
+
Wick.StoreLocator.collapseSearch();
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
Wick.StoreLocator.init();
|