wickes-css2 2.112.0-develop.6 → 2.112.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.
Files changed (37) hide show
  1. package/Readme.md +1 -1
  2. package/build/css/pdp-main-before-combine.css +1 -1
  3. package/build/css/pdp-main-non-critical.css +1 -1
  4. package/build/css/pdp-main.css +1 -1
  5. package/build/js/bloomreach-widget.min.js +1 -1
  6. package/build/js/emulation.min.js +334 -8
  7. package/build/js/page/bloomreach-widget/bloomreach-widget.js +250 -0
  8. package/build/js/page/{bloomreach-widget.js → bloomreach-widget/complete-your-project-widget.js} +205 -359
  9. package/build/js/page/bloomreach-widget/why-not-add-widget.js +198 -0
  10. package/package.json +1 -5
  11. package/src/components/bloomreach/complete-card.hbs +4 -32
  12. package/src/components/bloomreach/why-not-add-card-skeleton.hbs +14 -0
  13. package/src/components/bloomreach/why-not-add-card.hbs +73 -0
  14. package/src/components/bloomreach/why-not-add-content.hbs +41 -0
  15. package/src/components/bloomreach/why-not-add-skeleton.hbs +9 -0
  16. package/src/components/bloomreach/why-not-add.hbs +6 -0
  17. package/src/components/pdp-price-actions.hbs +2 -2
  18. package/src/components/price-block-v2.hbs +2 -0
  19. package/src/components/reviews-rating.hbs +22 -0
  20. package/src/components/share-list-modal-without-social-icons.hbs +1 -1
  21. package/src/components/share-list-modal.hbs +1 -1
  22. package/src/js/emulation/bloomreach-widget-loading.js +2 -2
  23. package/src/js/emulation/mock.js +309 -0
  24. package/src/js/emulation/why-not-add-loading.js +11 -0
  25. package/src/js/emulation/why-not-add.js +28 -0
  26. package/src/js/page/bloomreach-widget/bloomreach-widget.js +250 -0
  27. package/src/js/page/{bloomreach-widget.js → bloomreach-widget/complete-your-project-widget.js} +205 -359
  28. package/src/js/page/bloomreach-widget/why-not-add-widget.js +198 -0
  29. package/src/page_product-details-bloomreach.html +1 -1
  30. package/src/page_product-details-with-global-search-v2.html +2 -1
  31. package/src/page_product-details-with-why-not-add-single.html +131 -0
  32. package/src/scss/components/bloomreach/_bloomreach.scss +3 -0
  33. package/src/scss/components/bloomreach/_complete-card.scss +0 -38
  34. package/src/scss/components/bloomreach/_reviews.scss +60 -0
  35. package/src/scss/components/bloomreach/_why-not-add-card.scss +223 -0
  36. package/src/scss/components/bloomreach/_why-not-add.scss +143 -0
  37. package/src/sitemap.html +10 -4
@@ -0,0 +1,198 @@
1
+ var Wick = window.Wick || {};
2
+
3
+ import { createLoadingButton } from '../utils/create-loading-button';
4
+
5
+ const Handlebars = require('hbsfy/runtime');
6
+
7
+ Handlebars.registerPartial('loader', require('../../../elements/loader.hbs'));
8
+ Handlebars.registerPartial('button', require('../../../components/base/button.hbs'));
9
+ Handlebars.registerPartial(
10
+ 'bloomreach/why-not-add',
11
+ require('../../../components/bloomreach/why-not-add.hbs')
12
+ );
13
+ Handlebars.registerPartial(
14
+ 'bloomreach/why-not-add-skeleton',
15
+ require('../../../components/bloomreach/why-not-add-skeleton.hbs')
16
+ );
17
+ Handlebars.registerPartial(
18
+ 'bloomreach/why-not-add-card-skeleton',
19
+ require('../../../components/bloomreach/why-not-add-card-skeleton.hbs')
20
+ );
21
+ Handlebars.registerPartial(
22
+ 'bloomreach/why-not-add-card',
23
+ require('../../../components/bloomreach/why-not-add-card.hbs')
24
+ );
25
+ Handlebars.registerPartial('reviews-rating', require('../../../components/reviews-rating.hbs'));
26
+
27
+ const whyNotAddTemplate = require('../../../components/bloomreach/why-not-add-content.hbs');
28
+
29
+ const WhyNotAddWidget = {
30
+ ADD_TO_CART_EVENT: 'addToCart',
31
+
32
+ products: [],
33
+ sliders: [],
34
+ loadingButton: null,
35
+
36
+ el: {
37
+ cta: '.why-not-add-card__cta',
38
+ next: '[data-why-not-add-next]',
39
+ pagination: '[data-why-not-add-pagination]',
40
+ prev: '[data-why-not-add-prev]',
41
+ root: '[data-why-not-add]',
42
+ slider: '[data-why-not-add-slider]',
43
+ widgetContainer: '[data-why-not-add-widget]',
44
+ },
45
+
46
+ normalizeProducts(payloadData) {
47
+ return Wick.BloomreachWidget.normalizePayload(payloadData)
48
+ .map(function (item) {
49
+ return item.baseProduct || item;
50
+ })
51
+ .slice(0, 5);
52
+ },
53
+
54
+ renderWidget($container, payloadData) {
55
+ const products = WhyNotAddWidget.normalizeProducts(payloadData);
56
+
57
+ if (!products.length) {
58
+ $container.empty().hide();
59
+ return;
60
+ }
61
+
62
+ WhyNotAddWidget.products = products;
63
+
64
+ $container
65
+ .html(
66
+ whyNotAddTemplate({
67
+ products: products.map(Wick.BloomreachWidget.getProductRenderData),
68
+ isSingleProduct: products.length === 1,
69
+ })
70
+ )
71
+ .show();
72
+ },
73
+
74
+ destroySliders() {
75
+ WhyNotAddWidget.sliders.forEach(function (slider) {
76
+ if (slider && slider.destroy) {
77
+ slider.destroy(true, true);
78
+ }
79
+ });
80
+
81
+ WhyNotAddWidget.sliders = [];
82
+ },
83
+
84
+ initSliders($root) {
85
+ WhyNotAddWidget.destroySliders();
86
+
87
+ $root.find(WhyNotAddWidget.el.slider).each(function () {
88
+ const $slider = $(this);
89
+ const $widget = $slider.closest(WhyNotAddWidget.el.root);
90
+ const slidesCount = $slider.find('.swiper-slide').length;
91
+
92
+ if (slidesCount <= 1) {
93
+ return;
94
+ }
95
+
96
+ const slider = new Swiper(this, {
97
+ roundLengths: true,
98
+ slidesPerView: 1,
99
+ spaceBetween: 12,
100
+ watchOverflow: true,
101
+ navigation: {
102
+ nextEl: $widget.find(WhyNotAddWidget.el.next)[0],
103
+ prevEl: $widget.find(WhyNotAddWidget.el.prev)[0],
104
+ disabledClass: 'why-not-add__arrow--disabled',
105
+ },
106
+ pagination: {
107
+ el: $widget.find(WhyNotAddWidget.el.pagination)[0],
108
+ clickable: true,
109
+ renderBullet(index, className) {
110
+ return `<button class="${className}" type="button" aria-label="Go to slide ${
111
+ index + 1
112
+ }"></button>`;
113
+ },
114
+ bulletClass: 'why-not-add__pagination-item',
115
+ bulletActiveClass: 'why-not-add__pagination-item--active',
116
+ },
117
+ });
118
+
119
+ WhyNotAddWidget.sliders.push(slider);
120
+ });
121
+ },
122
+ bindAddToCart($root) {
123
+ $root.off('click.whyNotAdd', WhyNotAddWidget.el.cta);
124
+ $root.on('click.whyNotAdd', WhyNotAddWidget.el.cta, function (event) {
125
+ event.preventDefault();
126
+
127
+ const $button = $(this);
128
+ const $card = $button.closest('.why-not-add-card');
129
+ const productCode = $card.attr('data-product-code');
130
+
131
+ if (!productCode || WhyNotAddWidget.loadingButton.isLoading($button)) {
132
+ return;
133
+ }
134
+
135
+ const payload = {
136
+ productCode,
137
+ };
138
+
139
+ WhyNotAddWidget.loadingButton.start($button);
140
+
141
+ Wick.BloomreachWidget.dispatchWidgetEvent(WhyNotAddWidget.ADD_TO_CART_EVENT, payload)
142
+ .then(function () {
143
+ WhyNotAddWidget.loadingButton.stop($button);
144
+ Wick.MiniBasketSliderFE.isMiniBasketLoaded = false;
145
+ })
146
+ .catch(function () {
147
+ WhyNotAddWidget.loadingButton.stop($button);
148
+ });
149
+ });
150
+ },
151
+
152
+ bindVatToggle() {
153
+ if (Wick.BloomreachWidget.bindVatToggle) {
154
+ Wick.BloomreachWidget.bindVatToggle('whyNotAddVatToggle');
155
+ }
156
+ },
157
+
158
+ initRenderedWidget($container) {
159
+ const $root = $container.find(WhyNotAddWidget.el.root);
160
+
161
+ if (!$root.length) {
162
+ return;
163
+ }
164
+
165
+ if (!WhyNotAddWidget.loadingButton) {
166
+ WhyNotAddWidget.loadingButton = createLoadingButton({
167
+ text: Wick.BloomreachWidget.el.loadingButtonText,
168
+ loader: Wick.BloomreachWidget.el.loadingButtonLoader,
169
+ });
170
+ }
171
+
172
+ Wick.BloomreachWidget.removeBlankTargets($root);
173
+
174
+ Wick.BloomreachWidget.drawRating($root);
175
+ WhyNotAddWidget.initSliders($root);
176
+ WhyNotAddWidget.bindAddToCart($root);
177
+ WhyNotAddWidget.bindVatToggle();
178
+ Wick.BloomreachWidget.reapplyVatDisplay();
179
+ },
180
+
181
+ init(payloadData) {
182
+ const $containers = $(WhyNotAddWidget.el.widgetContainer);
183
+
184
+ if (!payloadData) {
185
+ $containers.empty().hide();
186
+ return;
187
+ }
188
+
189
+ $containers.each(function () {
190
+ const $container = $(this);
191
+
192
+ WhyNotAddWidget.renderWidget($container, payloadData);
193
+ WhyNotAddWidget.initRenderedWidget($container);
194
+ });
195
+ },
196
+ };
197
+
198
+ export default WhyNotAddWidget;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wickes-css2",
3
- "version": "2.112.0-develop.6",
3
+ "version": "2.112.0-develop.8",
4
4
  "description": "CSS and JS and page templates in use by Wickes",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -123,10 +123,6 @@
123
123
  {
124
124
  "name": "develop",
125
125
  "prerelease": true
126
- },
127
- {
128
- "name": "custom-tag/*",
129
- "prerelease": "${name.replace(/^custom-tag\\//g, '')}"
130
126
  }
131
127
  ],
132
128
  "plugins": [
@@ -25,38 +25,10 @@
25
25
  {{name}}
26
26
  </a>
27
27
 
28
- <div class="complete-card__reviews">
29
- <div class="rating-bg">
30
- <i class="fa fa-star star-in" aria-hidden="true"></i>
31
- <i class="fa fa-star star-in" aria-hidden="true"></i>
32
- <i class="fa fa-star star-in" aria-hidden="true"></i>
33
- <i class="fa fa-star star-in" aria-hidden="true"></i>
34
- <i class="fa fa-star star-in" aria-hidden="true"></i>
35
-
36
- <div class="rating-overlay"
37
- data-rating="{{#if externalAverageRating}}{{externalAverageRating}}{{else}}0{{/if}}">
38
- <span class="star-overlay">
39
- <i class="fa fa-star" aria-hidden="true"></i>
40
- </span>
41
- <span class="star-overlay">
42
- <i class="fa fa-star" aria-hidden="true"></i>
43
- </span>
44
- <span class="star-overlay">
45
- <i class="fa fa-star" aria-hidden="true"></i>
46
- </span>
47
- <span class="star-overlay">
48
- <i class="fa fa-star" aria-hidden="true"></i>
49
- </span>
50
- <span class="star-overlay">
51
- <i class="fa fa-star" aria-hidden="true"></i>
52
- </span>
53
- </div>
54
-
55
- <span class="complete-card__reviews-count">
56
- (<span class="complete-card__reviews-count-value">{{externalReviewCount}}</span>)
57
- </span>
58
- </div>
59
- </div>
28
+ {{> reviews-rating
29
+ externalAverageRating=externalAverageRating
30
+ externalReviewCount=externalReviewCount
31
+ }}
60
32
  </div>
61
33
  <div class="complete-card__options">
62
34
  {{#if dropdownOptions.length}}
@@ -0,0 +1,14 @@
1
+ <div class="why-not-add-card why-not-add-card--skeleton ssc">
2
+ <div class="ssc-square why-not-add-card__image"></div>
3
+
4
+ <div class="ssc-line why-not-add-card__skeleton-title"></div>
5
+ <div class="ssc-line why-not-add-card__skeleton-title-short"></div>
6
+
7
+ <div class="ssc-line why-not-add-card__skeleton-reviews"></div>
8
+
9
+ <div class="ssc-line why-not-add-card__skeleton-price"></div>
10
+
11
+ <div class="ssc-line why-not-add-card__skeleton-delivery"></div>
12
+
13
+ <div class="ssc-square why-not-add-card__skeleton-cta"></div>
14
+ </div>
@@ -0,0 +1,73 @@
1
+ <div class="why-not-add-card" data-product-code="{{code}}">
2
+ {{#if image.url}}
3
+ <img
4
+ class="why-not-add-card__image"
5
+ src="{{image.url}}"
6
+ alt="{{image.altText}}"
7
+ >
8
+ {{/if}}
9
+
10
+ <div class="why-not-add-card__content">
11
+ <a href="{{url}}" target="_blank" class="why-not-add-card__title">
12
+ {{name}}
13
+ </a>
14
+
15
+ {{> reviews-rating
16
+ externalAverageRating=externalAverageRating
17
+ externalReviewCount=externalReviewCount
18
+ }}
19
+
20
+ <div class="why-not-add-card__bottom">
21
+ <div class="why-not-add-card__price-wrap">
22
+ <div class="why-not-add-card__price {{#if wasPriceFormatted}}why-not-add-card__price--sale{{/if}}">
23
+ {{#if wasPriceFormatted}}
24
+ <span class="why-not-add-card__was-price">
25
+ {{#if switch-vat}}
26
+ <span class="including-vat-inherit">{{incVatWasPriceFormatted}}</span>
27
+ <span class="excluding-vat-inherit">{{excVatWasPriceFormatted}}</span>
28
+ {{else}}
29
+ {{wasPriceFormatted}}
30
+ {{/if}}
31
+ </span>
32
+
33
+ <span class="why-not-add-card__sale-price">
34
+ {{#if switch-vat}}
35
+ <span class="including-vat-inherit">{{incVatFormattedValue}}</span>
36
+ <span class="excluding-vat-inherit">{{excVatFormattedValue}}</span>
37
+ {{else}}
38
+ {{price.formattedValue}}
39
+ {{/if}}
40
+ </span>
41
+ {{else}}
42
+ <span class="why-not-add-card__regular-price">
43
+ {{#if switch-vat}}
44
+ <span class="including-vat-inherit">{{incVatFormattedValue}}</span>
45
+ <span class="excluding-vat-inherit">{{excVatFormattedValue}}</span>
46
+ {{else}}
47
+ {{price.formattedValue}}
48
+ {{/if}}
49
+ </span>
50
+ {{/if}}
51
+ </div>
52
+
53
+ {{#if switch-vat}}
54
+ <div class="why-not-add-card__vat-label">
55
+ <span class="including-vat-inherit">Inc.VAT</span>
56
+ <span class="excluding-vat-inherit">Exc.VAT</span>
57
+ </div>
58
+ {{/if}}
59
+
60
+ <div class="why-not-add-card__delivery">Excluding delivery</div>
61
+ </div>
62
+
63
+ {{> button
64
+ type="button"
65
+ action=true
66
+ icon="fas fa-shopping-basket"
67
+ showLoader=true
68
+ loaderModifier="why-not-add-card__loader"
69
+ modification="why-not-add-card__cta"
70
+ }}
71
+ </div>
72
+ </div>
73
+ </div>
@@ -0,0 +1,41 @@
1
+ <div class="why-not-add {{#if isSingleProduct}}why-not-add--single{{/if}}" data-why-not-add>
2
+ <div class="why-not-add__header">
3
+ <h3 class="why-not-add__title">Why not add</h3>
4
+
5
+ {{#unless isSingleProduct}}
6
+ <div class="why-not-add__arrows">
7
+ <button
8
+ class="why-not-add__arrow why-not-add__arrow-prev"
9
+ type="button"
10
+ aria-label="Previous slide"
11
+ data-why-not-add-prev
12
+ >
13
+ <i class="fas fa-chevron-left"></i>
14
+ </button>
15
+
16
+ <button
17
+ class="why-not-add__arrow why-not-add__arrow-next"
18
+ type="button"
19
+ aria-label="Next slide"
20
+ data-why-not-add-next
21
+ >
22
+ <i class="fas fa-chevron-right"></i>
23
+ </button>
24
+ </div>
25
+ {{/unless}}
26
+ </div>
27
+
28
+ <div class="swiper-container why-not-add__slider" data-why-not-add-slider>
29
+ <div class="swiper-wrapper">
30
+ {{#each products}}
31
+ <div class="swiper-slide why-not-add__slide">
32
+ {{> bloomreach/why-not-add-card this}}
33
+ </div>
34
+ {{/each}}
35
+ </div>
36
+ </div>
37
+
38
+ {{#unless isSingleProduct}}
39
+ <div class="why-not-add__pagination" data-why-not-add-pagination></div>
40
+ {{/unless}}
41
+ </div>
@@ -0,0 +1,9 @@
1
+ <div class="why-not-add why-not-add--skeleton ssc">
2
+ <div class="why-not-add__header">
3
+ <div class="ssc-line why-not-add__skeleton-title"></div>
4
+ </div>
5
+
6
+ <div class="why-not-add__skeleton-cards">
7
+ {{> bloomreach/why-not-add-card-skeleton}}
8
+ </div>
9
+ </div>
@@ -0,0 +1,6 @@
1
+ <div
2
+ data-why-not-add-widget
3
+ data-mock-key="{{context}}"
4
+ >
5
+ {{> bloomreach/why-not-add-skeleton}}
6
+ </div>
@@ -1,7 +1,7 @@
1
1
  {{#if c-and-c}}
2
2
  <div class="{{#if tile-measurement}}ti__total{{else}}pdp-price{{/if}}__control-holder">
3
- <button class="btn btn-primary btn_full" data-toggle="modal" data-target="#modal-click-and-collect">
4
- <span class="btn__text">FREE Click & Collect within 30 minutes</span>
3
+ <button class="btn btn-action btn_full" data-toggle="modal" data-target="#modal-click-and-collect">
4
+ <span class="btn__text">Click & Collect</span>
5
5
  </button>
6
6
  </div>
7
7
  {{/if}}
@@ -187,6 +187,8 @@
187
187
  </div>
188
188
  {{/if}}
189
189
 
190
+ {{> bloomreach/why-not-add context=mockDataKey}}
191
+
190
192
  {{#if mfeProductCalculator}}
191
193
  <div class="pdp-price__quantity-calculator">MFE Calculator Placeholder</div>
192
194
  {{/if}}
@@ -0,0 +1,22 @@
1
+ <div class="reviews">
2
+ <div class="rating-bg">
3
+ <i class="fa fa-star star-in" aria-hidden="true"></i>
4
+ <i class="fa fa-star star-in" aria-hidden="true"></i>
5
+ <i class="fa fa-star star-in" aria-hidden="true"></i>
6
+ <i class="fa fa-star star-in" aria-hidden="true"></i>
7
+ <i class="fa fa-star star-in" aria-hidden="true"></i>
8
+
9
+ <div
10
+ class="rating-overlay"
11
+ data-rating="{{#if externalAverageRating}}{{externalAverageRating}}{{else}}0{{/if}}"
12
+ >
13
+ <span class="star-overlay"><i class="fa fa-star" aria-hidden="true"></i></span>
14
+ <span class="star-overlay"><i class="fa fa-star" aria-hidden="true"></i></span>
15
+ <span class="star-overlay"><i class="fa fa-star" aria-hidden="true"></i></span>
16
+ <span class="star-overlay"><i class="fa fa-star" aria-hidden="true"></i></span>
17
+ <span class="star-overlay"><i class="fa fa-star" aria-hidden="true"></i></span>
18
+ </div>
19
+
20
+ <span class="{{#if countClass}}{{countClass}}{{else}}reviews-count{{/if}}">(<span class="{{#if countValueClass}}{{countValueClass}}{{else}}reviews-count-value{{/if}}">{{#if externalReviewCount}}{{externalReviewCount}}{{else}}0{{/if}}</span>)</span>
21
+ </div>
22
+ </div>
@@ -18,7 +18,7 @@
18
18
 
19
19
  <form class="share-list__form" action="#" id="share-list-form">
20
20
 
21
- {{> form-row type="text" id="share-via-email" label="Share via email" info="Enter email addresses separated by space:"}}
21
+ {{> form-row type="text" id="share-via-email" label="Share via email"}}
22
22
 
23
23
  <div class="share-via-email-box">
24
24
  {{> form-row type="text"}}
@@ -18,7 +18,7 @@
18
18
 
19
19
  <form class="share-list__form" action="#" id="share-list-form">
20
20
 
21
- {{> form-row type="text" id="share-via-email" label="Share via email" info="Enter email addresses separated by space:"}}
21
+ {{> form-row type="text" id="share-via-email" label="Share via email"}}
22
22
 
23
23
  <div class="share-via-email-box">
24
24
  {{> form-row type="text"}}
@@ -3,9 +3,9 @@ var Wick = window.Wick || {};
3
3
  $(document).ready(function () {
4
4
  window.setTimeout(function () {
5
5
  const $container = $('[data-complete-widget]');
6
- const contextKey = $container.data('context-key');
6
+ const contextKey = $container.data('mock-key');
7
7
  const payloadData = Wick.FEMock.dataBloomreach[contextKey];
8
8
 
9
- Wick.BloomreachWidget.init(payloadData);
9
+ Wick.BloomreachWidget.init('completeYourProject', payloadData);
10
10
  }, 3000);
11
11
  });