spree_frontend 4.1.0.rc2 → 4.1.0.rc3

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree/frontend/cart.js +12 -0
  3. data/app/assets/javascripts/spree/frontend/checkout/address.js +2 -3
  4. data/app/assets/javascripts/spree/frontend/checkout/shipment.js +16 -4
  5. data/app/assets/javascripts/spree/frontend/views/spree/layouts/spree_application.js +30 -0
  6. data/app/assets/javascripts/spree/frontend/views/spree/products/modal_carousel.js +31 -12
  7. data/app/assets/javascripts/spree/frontend/views/spree/shared/carousel/thumbnails.js +77 -37
  8. data/app/assets/javascripts/spree/frontend/views/spree/shared/nav_bar.js +16 -7
  9. data/app/assets/javascripts/spree/frontend/views/spree/shared/product_added_modal.js +1 -1
  10. data/app/assets/stylesheets/spree/frontend/application.scss +1 -0
  11. data/app/assets/stylesheets/spree/frontend/components-bootstrap/modal.scss +4 -0
  12. data/app/assets/stylesheets/spree/frontend/components-custom/inputs.scss +14 -13
  13. data/app/assets/stylesheets/spree/frontend/views/spree/checkout/confirm.scss +5 -0
  14. data/app/assets/stylesheets/spree/frontend/views/spree/checkout/edit.scss +7 -0
  15. data/app/assets/stylesheets/spree/frontend/views/spree/checkout/registration.scss +0 -1
  16. data/app/assets/stylesheets/spree/frontend/views/spree/orders/edit.scss +9 -0
  17. data/app/assets/stylesheets/spree/frontend/views/spree/products/cart_form.scss +17 -15
  18. data/app/assets/stylesheets/spree/frontend/views/spree/products/show.scss +7 -0
  19. data/app/assets/stylesheets/spree/frontend/views/spree/shared/carousel/thumbnails.scss +3 -12
  20. data/app/assets/stylesheets/spree/frontend/views/spree/shared/delete_address_popup.scss +3 -26
  21. data/app/assets/stylesheets/spree/frontend/views/spree/shared/dropdown.scss +3 -0
  22. data/app/assets/stylesheets/spree/frontend/views/spree/shared/main_nav_bar.scss +2 -1
  23. data/app/assets/stylesheets/spree/frontend/views/spree/shared/quantity_select.scss +3 -1
  24. data/app/controllers/spree/products_controller.rb +13 -0
  25. data/app/controllers/spree/taxons_controller.rb +32 -7
  26. data/app/helpers/spree/addresses_helper.rb +3 -1
  27. data/app/helpers/spree/frontend_helper.rb +15 -6
  28. data/app/views/spree/checkout/_delivery.html.erb +2 -1
  29. data/app/views/spree/checkout/_summary.html.erb +29 -2
  30. data/app/views/spree/checkout/edit.html.erb +7 -5
  31. data/app/views/spree/checkout/registration.html.erb +1 -1
  32. data/app/views/spree/products/_cart_form.html.erb +2 -2
  33. data/app/views/spree/products/_filters_desktop.html.erb +3 -3
  34. data/app/views/spree/products/_filters_mobile.html.erb +7 -7
  35. data/app/views/spree/products/_gallery_modal.html.erb +2 -2
  36. data/app/views/spree/products/_sort_desktop.html.erb +2 -2
  37. data/app/views/spree/products/_sort_mobile.html.erb +2 -2
  38. data/app/views/spree/shared/_cart.html.erb +0 -2
  39. data/app/views/spree/shared/_checkout_header.html.erb +1 -1
  40. data/app/views/spree/shared/_copyright.html.erb +1 -1
  41. data/app/views/spree/shared/_header.html.erb +1 -1
  42. data/app/views/spree/shared/_link_to_cart.html.erb +5 -2
  43. data/app/views/spree/shared/_main_nav_bar.html.erb +3 -3
  44. data/app/views/spree/shared/_nav_bar.html.erb +1 -1
  45. data/app/views/spree/shared/_option_values.html.erb +1 -1
  46. data/app/views/spree/shared/_registration.html.erb +1 -1
  47. data/app/views/spree/shared/carousel/_thumbnails.html.erb +1 -1
  48. data/app/views/spree/taxons/_subcategories.html.erb +2 -3
  49. metadata +7 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 262122d44be5ba437437f0152a0fcb82223769278216335f195ed5453da9268a
4
- data.tar.gz: db27b441b75b3dd5e12dd30044de2f2f2659700c494fe10494169d0f249ebc01
3
+ metadata.gz: 6300d485b7d4f5e1ceab8dc942affa9be2a7fcb0cca1e233837428e230d45742
4
+ data.tar.gz: b5c81d760faa402320a3f2298f9c4e22eef9ec08c63e938bae635b35c989e529
5
5
  SHA512:
6
- metadata.gz: 2072e4e7335566c6a158cbb38a8e85b01821d80d4f07da17fc75325e5ae417de59c0dff4cee41ff3ecdc580515e9176feb2541bc7d28573d4ed1d4526717d5e0
7
- data.tar.gz: aa9493dc137d0e17b7758aa055e979d62e71a2f1df64e6a0276e3600aa28151703342afaf178e30af92c8670106f7bdb8cc67f8bd192fac695c7429054a36e34
6
+ metadata.gz: dbdb68dfcc5c7a71b48e2e3777428e40bbbc7f86307d3fcf55fb8d5e15070414445ea372f647b3b60819f68adc0dc37bdf6de3fc3db4c45c5e424b5f6b6edb27
7
+ data.tar.gz: 748be2c488b297951807df6038a97f99f48efbe2b188d19117276eeee8f260ece52dfcf2bfd38dc9bc0b6e14ecbb755c63fa3e4a721563f1fe5230070ded6585
@@ -4,8 +4,17 @@ Spree.ready(function ($) {
4
4
  var formUpdateCart = $('form#update-cart')
5
5
 
6
6
  if (formUpdateCart.length) {
7
+ var clearInvalidCouponField = function() {
8
+ var couponCodeField = $('#order_coupon_code');
9
+ var couponStatus = $('#coupon_status');
10
+ if (!!couponCodeField.val() && couponStatus.hasClass('alert-error')) {
11
+ couponCodeField.val('')
12
+ }
13
+ }
14
+
7
15
  $('form#update-cart a.delete').show().one('click', function () {
8
16
  $(this).parents('.shopping-cart-item').first().find('input.shopping-cart-item-quantity-input').val(0)
17
+ clearInvalidCouponField()
9
18
  $(this).parents('form').first().submit()
10
19
  return false
11
20
  })
@@ -17,6 +26,7 @@ Spree.ready(function ($) {
17
26
  $(targetInputs).val(newValue)
18
27
  })
19
28
  $('form#update-cart input.shopping-cart-item-quantity-input').on('change', function(e) {
29
+ clearInvalidCouponField()
20
30
  formUpdateCart.submit()
21
31
  })
22
32
  $('form#update-cart button.shopping-cart-item-quantity-decrease-btn').off('click').on('click', function() {
@@ -26,6 +36,7 @@ Spree.ready(function ($) {
26
36
 
27
37
  if (inputValue > 1) {
28
38
  $(input).val(inputValue - 1)
39
+ clearInvalidCouponField()
29
40
  formUpdateCart.submit()
30
41
  }
31
42
  })
@@ -35,6 +46,7 @@ Spree.ready(function ($) {
35
46
  var inputValue = parseInt($(input).val(), 10)
36
47
 
37
48
  $(input).val(inputValue + 1)
49
+ clearInvalidCouponField()
38
50
  formUpdateCart.submit()
39
51
  })
40
52
  $('form#update-cart button#shopping-cart-coupon-code-button').off('click').on('click', function(event) {
@@ -48,7 +48,7 @@ Spree.ready(function ($) {
48
48
  }
49
49
 
50
50
  Spree.fillStates = function (data, region) {
51
- var selected, statesWithBlank
51
+ var selected
52
52
  var statesRequired = data.states_required
53
53
  var states = data.states
54
54
  var statePara = $('#' + region + 'state')
@@ -59,8 +59,7 @@ Spree.ready(function ($) {
59
59
  if (states.length > 0) {
60
60
  selected = parseInt(stateSelect.val())
61
61
  stateSelect.html('')
62
- statesWithBlank = [{name: '', id: ''}].concat(states)
63
- $.each(statesWithBlank, function (idx, state) {
62
+ $.each(states, function (idx, state) {
64
63
  var opt = $(document.createElement('option')).attr('value', state.id).html(state.name)
65
64
  if (selected.toString(10) === state.id.toString(10)) {
66
65
  opt.prop('selected', true)
@@ -3,6 +3,8 @@ function ShippingTotalManager (input1) {
3
3
  this.input = input1
4
4
  this.shippingMethods = this.input.shippingMethods
5
5
  this.shipmentTotal = this.input.shipmentTotal
6
+ this.taxTotal = this.input.taxTotal
7
+ this.nonShipmentTax = $(this.taxTotal).data('non-shipment-tax')
6
8
  this.orderTotal = this.input.orderTotal
7
9
  this.formatOptions = {
8
10
  symbol: this.shipmentTotal.data('currency'),
@@ -15,20 +17,29 @@ function ShippingTotalManager (input1) {
15
17
  ShippingTotalManager.prototype.calculateShipmentTotal = function () {
16
18
  var checked = $(this.shippingMethods).filter(':checked')
17
19
  this.sum = 0
20
+ this.tax = this.parseCurrencyToFloat(this.nonShipmentTax)
18
21
  $.each(checked, function (idx, shippingMethod) {
19
22
  this.sum += this.parseCurrencyToFloat($(shippingMethod).data('cost'))
23
+ this.tax += this.parseCurrencyToFloat($(shippingMethod).data('tax'))
20
24
  }.bind(this))
21
- return this.readjustSummarySection(this.parseCurrencyToFloat(this.orderTotal.html()), this.sum, this.parseCurrencyToFloat(this.shipmentTotal.html()))
25
+ return this.readjustSummarySection(
26
+ this.parseCurrencyToFloat(this.orderTotal.html()),
27
+ this.sum,
28
+ this.parseCurrencyToFloat(this.shipmentTotal.html()),
29
+ this.tax,
30
+ this.parseCurrencyToFloat(this.taxTotal.html())
31
+ )
22
32
  }
23
33
 
24
34
  ShippingTotalManager.prototype.parseCurrencyToFloat = function (input) {
25
35
  return accounting.unformat(input, this.formatOptions.decimal)
26
36
  }
27
37
 
28
- ShippingTotalManager.prototype.readjustSummarySection = function (orderTotal, newShipmentTotal, oldShipmentTotal) {
29
- var newOrderTotal = orderTotal + (newShipmentTotal - oldShipmentTotal)
38
+ ShippingTotalManager.prototype.readjustSummarySection = function (orderTotal, newShipmentTotal, oldShipmentTotal, newTaxTotal, oldTaxTotal) {
39
+ var newOrderTotal = orderTotal + (newShipmentTotal - oldShipmentTotal) + (newTaxTotal - oldTaxTotal)
40
+ this.taxTotal.html(accounting.formatMoney(newTaxTotal, this.formatOptions))
30
41
  this.shipmentTotal.html(accounting.formatMoney(newShipmentTotal, this.formatOptions))
31
- return this.orderTotal.html(accounting.formatMoney(newOrderTotal, this.formatOptions))
42
+ return this.orderTotal.html(accounting.formatMoney(accounting.toFixed(newOrderTotal, 10), this.formatOptions))
32
43
  }
33
44
 
34
45
  ShippingTotalManager.prototype.bindEvent = function () {
@@ -40,6 +51,7 @@ ShippingTotalManager.prototype.bindEvent = function () {
40
51
  Spree.ready(function ($) {
41
52
  var input = {
42
53
  orderTotal: $('#summary-order-total'),
54
+ taxTotal: $('[data-hook="tax-total"]'),
43
55
  shipmentTotal: $('[data-hook="shipping-total"]'),
44
56
  shippingMethods: $('input[data-behavior="shipping-method-selector"]')
45
57
  }
@@ -32,4 +32,34 @@ Spree.ready(function ($) {
32
32
  }
33
33
  }
34
34
  };
35
+
36
+ var searchDropdown = document.getElementById('search-dropdown')
37
+ var navBarCategoryLinks = document.getElementsByClassName('main-nav-bar-category-links')
38
+ var navBarCategoryButtons = document.getElementsByClassName('main-nav-bar-category-button')
39
+ var navBarCategoryImages = document.getElementsByClassName('category-image')
40
+ var navBarAccountIcon = [document.getElementById('account-button')]
41
+ var navBarCartIcon = [document.getElementById('link-to-cart')]
42
+ var spreeLogoImage = document.getElementsByClassName('header-spree-fluid-logo')
43
+ var spreeMobileNavs = document.getElementsByClassName('mobile-navigation-list-item')
44
+ var navbarLinks = [
45
+ navBarCategoryLinks,
46
+ navBarCategoryButtons,
47
+ navBarCategoryImages,
48
+ navBarAccountIcon,
49
+ navBarCartIcon,
50
+ spreeLogoImage,
51
+ spreeMobileNavs
52
+ ]
53
+
54
+ if (searchDropdown !== null) {
55
+ $.each(navbarLinks, function(index, navbarElements) {
56
+ $.each(navbarElements, function(index, navBarCategoryLink) {
57
+ navBarCategoryLink.addEventListener('click', function () {
58
+ document.getElementById('overlay').classList.remove('shown');
59
+ searchDropdown.classList.remove('shown');
60
+ document.querySelector('.header-spree').classList.remove('above-overlay')
61
+ });
62
+ });
63
+ });
64
+ };
35
65
  });
@@ -1,26 +1,44 @@
1
1
  Spree.ready(function($) {
2
- var $modalCarousel = $('#productModalThumbnailsCarousel')
3
- if ($modalCarousel.length) {
4
- ThumbnailsCarousel($, $modalCarousel)
2
+ var modalCarousel = $('#productModalThumbnailsCarousel')
3
+ if (modalCarousel.length) {
4
+ ThumbnailsCarousel($, modalCarousel)
5
5
  }
6
6
 
7
7
  var activeSingleImageIndex = function(sourceWrappingClass) {
8
- var $activeSingleImage = $('.' + sourceWrappingClass + ' .product-details-single [data-variant-id].active')
9
- return $activeSingleImage.index()
8
+ var activeSingleImage = $('.' + sourceWrappingClass + ' .product-details-single [data-variant-id].active')
9
+ return activeSingleImage.index()
10
10
  }
11
11
 
12
- var selectModalThumbnail = function(imgIndex) {
13
- var $modalThumbnails = $('#productModalThumbnailsCarousel > div > div.carousel-item.product-thumbnails-carousel-item.active > div > div')
14
- var $modalThumbnailsChildren = $modalThumbnails.children('[data-variant-id]')
15
- if ($modalThumbnailsChildren.length > 0) {
16
- $($modalThumbnailsChildren.get(imgIndex).getElementsByTagName('img')[0]).addClass('selected')
12
+ var selectThumbnail = function(imgIndex, carousel) {
13
+ var carouselPerPage = carousel.data('product-carousel-per-page')
14
+ var carouselItems = carousel.find('> div > div.carousel-item.product-thumbnails-carousel-item')
15
+ var carouselItem = carouselItems[Math.floor(imgIndex / carouselPerPage)]
16
+
17
+ carouselItems.removeClass('active')
18
+ $(carouselItems).find('img').removeClass('selected')
19
+ $(carouselItem).addClass('active')
20
+
21
+ var thumbnailsChildren = $(carouselItem).find('> div > div')
22
+ .children('.product-thumbnails-carousel-item-single--visible[data-variant-id]')
23
+ if (thumbnailsChildren.length > 0) {
24
+ $(thumbnailsChildren.get(imgIndex % carouselPerPage).getElementsByTagName('img')[0]).addClass('selected')
17
25
  }
18
26
  }
19
27
 
28
+ var selectModalThumbnail = function(imgIndex) {
29
+ selectThumbnail(imgIndex, modalCarousel)
30
+ }
31
+
32
+ var selectProductCarouselThumbnail = function() {
33
+ var imgIndex = activeSingleImageIndex('modal') - 1
34
+ var productCarousel = $('#productThumbnailsCarousel')
35
+ selectThumbnail(imgIndex, productCarousel)
36
+ }
37
+
20
38
  var activateModalSingleImg = function(imgIndex, targetWrappingClass) {
21
39
  $('.' + targetWrappingClass + ' .product-details-single [data-variant-id].active').removeClass('active')
22
- var $modalActiveSingleImage = $($('.' + targetWrappingClass + ' .product-details-single [data-variant-id]').parent().children().get(imgIndex))
23
- $modalActiveSingleImage.addClass('active')
40
+ var modalActiveSingleImage = $($('.' + targetWrappingClass + ' .product-details-single [data-variant-id]').parent().children().get(imgIndex))
41
+ modalActiveSingleImage.addClass('active')
24
42
  }
25
43
 
26
44
  $('#picturesModal').on('show.bs.modal', function() {
@@ -31,5 +49,6 @@ Spree.ready(function($) {
31
49
 
32
50
  $('#picturesModal').on('hide.bs.modal', function() {
33
51
  activateModalSingleImg(activeSingleImageIndex('modal'), 'row')
52
+ selectProductCarouselThumbnail()
34
53
  })
35
54
  })
@@ -1,43 +1,83 @@
1
- function ThumbnailsCarousel($, $carousel) {
1
+ function ThumbnailsCarousel($, carousel) {
2
2
  var VISIBLE_IMAGE_SELECTOR = '.product-thumbnails-carousel-item-single--visible img'
3
3
  var SELECTED_IMAGE_CLASS = 'selected'
4
4
  var self = this
5
+ var modalCarouselId = 'productModalThumbnailsCarousel'
6
+ var modalCarousel = $('#' + modalCarouselId)
7
+ var zoomClickObject = $('.product-carousel-overlay-modal-opener')
5
8
 
6
9
  this.constructor = function() {
7
10
  this.bindEventHandlers()
8
11
  }
9
12
 
10
13
  this.bindEventHandlers = function() {
11
- $carousel.on('click', 'img', this.handleImageClick)
12
- $carousel.on('thumbnails:ready', this.handleThumbnailsReady)
14
+ zoomClickObject.on('click', this.handleZoomClick)
15
+ carousel.on('click', 'img', this.handleImageClick)
16
+ carousel.on('thumbnails:ready', this.handleThumbnailsReady)
13
17
 
14
18
  $('body').on('single_carousel:slide', this.handleSingleCarouselSlide)
15
19
  }
16
20
 
17
21
  this.handleImageClick = function(event) {
18
- self.selectImage($(event.target))
22
+ self.selectImage(event, $(event.target))
19
23
  }
20
24
 
21
- this.handleThumbnailsReady = function(_event) {
22
- var $image = $carousel.find(VISIBLE_IMAGE_SELECTOR).eq(0)
25
+ this.handleThumbnailsReady = function(event) {
26
+ var image = carousel.find(VISIBLE_IMAGE_SELECTOR).eq(0)
23
27
 
24
- self.selectImage($image)
28
+ self.selectImage(event, image)
25
29
  }
26
30
 
27
- this.handleSingleCarouselSlide = function(_event, imageIndex) {
28
- var $image = $carousel.find('[data-product-carousel-to-slide=' + imageIndex + '] img')
31
+ this.handleSingleCarouselSlide = function(event, imageIndex) {
32
+ var image;
33
+ if (event.target.id === 'productModalCarousel') {
34
+ image = modalCarousel.find('[data-product-carousel-to-slide=' + imageIndex + '] img')
35
+ self.unselectModalImages()
36
+ } else {
37
+ image = carousel.find('[data-product-carousel-to-slide=' + imageIndex + '] img')
38
+ self.unselectThumbanilsImages()
39
+ }
40
+
41
+ image.addClass(SELECTED_IMAGE_CLASS)
42
+ }
43
+
44
+ this.selectImage = function(event, image) {
45
+ var clickedElement = event.target
46
+ var productModalThumbnailClicked = $(clickedElement).closest('.product-thumbnails-carousel').is('#' + modalCarouselId)
47
+
48
+ if (clickedElement.id === modalCarouselId || productModalThumbnailClicked) {
49
+ this.unselectModalImages()
50
+ } else {
51
+ this.unselectThumbanilsImages()
52
+ }
29
53
 
30
- self.selectImage($image)
54
+ image.addClass(SELECTED_IMAGE_CLASS)
31
55
  }
32
56
 
33
- this.selectImage = function($image) {
34
- this.unselectImages()
57
+ this.unselectThumbanilsImages = function() {
58
+ carousel.find('img').removeClass(SELECTED_IMAGE_CLASS)
59
+ }
60
+
61
+ this.unselectModalImages = function() {
62
+ modalCarousel.find('img').removeClass(SELECTED_IMAGE_CLASS)
63
+ }
35
64
 
36
- $image.addClass(SELECTED_IMAGE_CLASS)
65
+ this.handleZoomClick = function(event) {
66
+ var selectedImageId = self.getSelectedImageId()
67
+ var image = modalCarousel.find(VISIBLE_IMAGE_SELECTOR).eq(selectedImageId)
68
+ self.unselectModalImages()
69
+
70
+ image.addClass(SELECTED_IMAGE_CLASS)
37
71
  }
38
72
 
39
- this.unselectImages = function() {
40
- $carousel.find('img').removeClass(SELECTED_IMAGE_CLASS)
73
+ this.getSelectedImageId = function() {
74
+ var selectedImages = $('#productThumbnailsCarousel').find('img.d-block.w-100.lazyloaded.selected')
75
+
76
+ if (selectedImages.length > 1) {
77
+ return $(selectedImages[1]).parent()[0].dataset.productCarouselToSlide
78
+ } else {
79
+ return '0'
80
+ }
41
81
  }
42
82
 
43
83
  this.constructor()
@@ -61,7 +101,7 @@ Spree.ready(function($) {
61
101
  )
62
102
  }
63
103
 
64
- Spree.showThumbnailsCarouselVariantImages = function($carousel, variantId) {
104
+ Spree.showThumbnailsCarouselVariantImages = function(carousel, variantId) {
65
105
  var carouselSlideSelector = '.product-thumbnails-carousel-item'
66
106
  var carouselSlideContainerSelector =
67
107
  '.product-thumbnails-carousel-item-content'
@@ -71,52 +111,52 @@ Spree.ready(function($) {
71
111
  var carouselPerPageAttributeName = 'data-product-carousel-per-page'
72
112
  var carouselEmptyClass = 'product-thumbnails-carousel--empty'
73
113
 
74
- $carousel.carouselBootstrap4('dispose')
114
+ carousel.carouselBootstrap4('dispose')
75
115
  var qualifiedSlides = 0
76
- var perPage = parseInt($carousel.attr(carouselPerPageAttributeName)) || 1
77
- var $slides = $carousel.find(carouselSlideSelector)
116
+ var perPage = parseInt(carousel.attr(carouselPerPageAttributeName)) || 1
117
+ var slides = carousel.find(carouselSlideSelector)
78
118
 
79
- $carousel
119
+ carousel
80
120
  .find(carouselItemSelector)
81
121
  .each(function(_itemIndex, slideElement) {
82
122
  // Switch item visibility in the carousel based on picked variant.
83
123
 
84
124
  var targetSlideIndex
85
- var $slide = $(slideElement)
125
+ var slide = $(slideElement)
86
126
  var qualifies =
87
- $slide.attr(variantIdAttributeName) === variantId ||
88
- $slide.attr(isMasterVariantAttributeName) === 'true'
127
+ slide.attr(variantIdAttributeName) === variantId ||
128
+ slide.attr(isMasterVariantAttributeName) === 'true'
89
129
 
90
130
  if (qualifies) {
91
131
  qualifiedSlides += 1
92
- $slide.attr(carouselToSlideAttributeName, qualifiedSlides - 1)
132
+ slide.attr(carouselToSlideAttributeName, qualifiedSlides - 1)
93
133
  }
94
134
 
95
135
  targetSlideIndex = Math.max(0, Math.ceil(qualifiedSlides / perPage) - 1)
96
- $slide.detach()
97
- $slides
136
+ slide.detach()
137
+ slides
98
138
  .eq(targetSlideIndex)
99
139
  .find(carouselSlideContainerSelector)
100
- .append($slide)
101
- $slide.toggleClass(enabledCarouselSingleClass, qualifies)
140
+ .append(slide)
141
+ slide.toggleClass(enabledCarouselSingleClass, qualifies)
102
142
  })
103
143
  var enabledSlidesCount = Math.ceil(qualifiedSlides / perPage)
104
- $carousel
144
+ carousel
105
145
  .find(carouselSlideSelector)
106
146
  .each(function(slideIndex, slideElement) {
107
- var $slide = $(slideElement)
108
- $slide.toggleClass(
147
+ var slide = $(slideElement)
148
+ slide.toggleClass(
109
149
  enabledCarouselItemClass,
110
150
  slideIndex < enabledSlidesCount
111
151
  )
112
- $slide.toggleClass(activeCarouselItemClass, slideIndex === 0)
152
+ slide.toggleClass(activeCarouselItemClass, slideIndex === 0)
113
153
  })
114
154
 
115
155
  // If there are no images to show after picking a variant, disable the carousel.
116
- $carousel.toggleClass(carouselEmptyClass, enabledSlidesCount === 0)
156
+ carousel.toggleClass(carouselEmptyClass, enabledSlidesCount === 0)
117
157
 
118
- $carousel.carouselBootstrap4()
119
- $carousel.trigger('thumbnails:ready')
158
+ carousel.carouselBootstrap4()
159
+ carousel.trigger('thumbnails:ready')
120
160
  }
121
161
 
122
162
  $('#product-details').on('variant_id_change', function(options) {
@@ -130,8 +170,8 @@ Spree.ready(function($) {
130
170
  })
131
171
  })
132
172
 
133
- var $carousel = $('#productThumbnailsCarousel')
173
+ var carousel = $('#productThumbnailsCarousel')
134
174
 
135
- ThumbnailsCarousel($, $carousel)
175
+ ThumbnailsCarousel($, carousel)
136
176
  }
137
177
  })
@@ -1,16 +1,25 @@
1
- Spree.ready(function() {
1
+ $(document).ready(function() {
2
2
  var searchIcons = document.querySelectorAll('#nav-bar .search-icons')[0]
3
+ var searchDropdown = document.getElementById('search-dropdown')
3
4
 
4
5
  if (searchIcons !== undefined) {
5
6
  searchIcons.addEventListener(
6
7
  'click',
7
- function() {
8
- document.querySelector('.header-spree').classList.add('above-overlay')
9
- document.getElementById('overlay').classList.add('shown')
10
- document.getElementById('search-dropdown').classList.add('shown')
11
- document.querySelector('#search-dropdown input').focus()
12
- },
8
+ toggleSearchBar,
13
9
  false
14
10
  )
15
11
  }
12
+
13
+ function toggleSearchBar() {
14
+ if (searchDropdown.classList.contains('shown')) {
15
+ document.querySelector('.header-spree').classList.remove('above-overlay')
16
+ document.getElementById('overlay').classList.remove('shown')
17
+ searchDropdown.classList.remove('shown')
18
+ } else {
19
+ document.querySelector('.header-spree').classList.add('above-overlay')
20
+ document.getElementById('overlay').classList.add('shown')
21
+ searchDropdown.classList.add('shown')
22
+ document.querySelector('#search-dropdown input').focus()
23
+ }
24
+ }
16
25
  })
@@ -12,7 +12,7 @@ Spree.showProductAddedModal = function(product, variant) {
12
12
  var $modal = $(modalSelector)
13
13
 
14
14
  $modal.find(nameSelector).text(name)
15
- $modal.find(priceSelector).text(price)
15
+ $modal.find(priceSelector).html(price)
16
16
 
17
17
  if (leadImage !== null) {
18
18
  $modal