spree_frontend 4.4.0 → 4.5.0
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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +18 -17
- data/.eslintrc +1 -1
- data/Gemfile +4 -8
- data/README.md +55 -2
- data/app/assets/config/spree_frontend_manifest.js +1 -0
- data/app/assets/javascripts/spree/{api → frontend/api}/main.js +4 -4
- data/app/assets/javascripts/spree/{api → frontend/api}/storefront/cart.js +1 -1
- data/app/assets/javascripts/spree/frontend/checkout/address.js +3 -3
- data/app/assets/javascripts/spree/frontend/currency.js +6 -7
- data/app/assets/javascripts/spree/frontend/locale.es6 +1 -2
- data/app/assets/javascripts/{spree.js → spree/frontend/main.js} +5 -5
- data/app/assets/javascripts/spree/frontend/{turbolinks_scroll_fix.js → turbo_scroll_fix.js} +3 -3
- data/app/assets/javascripts/spree/frontend/views/spree/home/product_carousels.js +1 -1
- data/app/assets/javascripts/spree/frontend/views/spree/product/related.js +1 -1
- data/app/assets/javascripts/spree/frontend/views/spree/products/cart_form.js +8 -8
- data/app/assets/javascripts/spree/frontend/views/spree/products/description.js +1 -1
- data/app/assets/javascripts/spree/frontend/views/spree/products/index.js +1 -1
- data/app/assets/javascripts/spree/frontend/views/spree/shared/mobile_navigation.js +4 -4
- data/app/assets/javascripts/spree/frontend/views/spree/shared/variant_select.js +3 -3
- data/app/assets/javascripts/spree/frontend.js +10 -17
- data/app/controllers/spree/addresses_controller.rb +2 -2
- data/app/controllers/spree/checkout_controller.rb +2 -2
- data/app/controllers/spree/locale_controller.rb +2 -1
- data/app/controllers/spree/orders_controller.rb +1 -1
- data/app/helpers/spree/frontend_helper.rb +14 -8
- data/app/helpers/spree/navigation_helper.rb +1 -1
- data/app/helpers/spree/products_filters_helper.rb +1 -1
- data/app/views/spree/checkout/edit.html.erb +1 -1
- data/app/views/spree/checkout/registration.html.erb +1 -1
- data/app/views/spree/orders/_line_item.html.erb +1 -1
- data/app/views/spree/orders/_line_item_data.html.erb +1 -1
- data/app/views/spree/products/_color_option_type.html.erb +2 -2
- data/app/views/spree/products/_filters_desktop.html.erb +3 -3
- data/app/views/spree/products/_filters_mobile.html.erb +2 -2
- data/app/views/spree/products/_thumbnails.html.erb +2 -2
- data/app/views/spree/shared/_head.html.erb +3 -2
- data/app/views/spree/shared/_line_item.html.erb +1 -1
- data/app/views/spree/shared/_link_to_account.html.erb +1 -1
- data/app/views/spree/shared/_login.html.erb +1 -1
- data/app/views/spree/shared/_main_nav_bar.html.erb +1 -1
- data/app/views/spree/shared/_nav_bar.html.erb +1 -1
- data/app/views/spree/shared/_order_details.html.erb +1 -1
- data/app/views/spree/shared/_translations.html.erb +1 -1
- data/app/views/spree/shared/carousel/_single.html.erb +2 -2
- data/app/views/spree/shared/carousel/_thumbnails.html.erb +1 -1
- data/app/views/spree/shared/cms/sections/_hero_image.html.erb +9 -9
- data/app/views/spree/shared/cms/sections/_image_gallery.html.erb +21 -21
- data/app/views/spree/shared/cms/sections/_side_by_side_images.html.erb +14 -14
- data/app/views/spree/taxons/_header.html.erb +1 -1
- data/app/views/spree/users/_address_controls.html.erb +1 -1
- data/lib/generators/spree/frontend/install/install_generator.rb +1 -1
- data/lib/spree/frontend/configuration.rb +18 -0
- data/lib/spree/frontend/engine.rb +3 -8
- data/lib/spree/frontend/version.rb +1 -1
- data/lib/spree/frontend.rb +2 -1
- data/spree_frontend.gemspec +3 -2
- metadata +35 -21
- data/app/models/spree/frontend_configuration.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1402fb31c7f3b252aa0143299ea5a3d7fbacda30d8d28fb535c26fef9e06bbf4
|
4
|
+
data.tar.gz: 6ae0c987bc34ff834db6b02c2133277412175aba67f5586f9d938813677a3150
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 899e115454881c1e7c759cfb95ed0e9990d7bbe519c0b114dbf506426864f296f557b5ecebe3196c42b6f59ce0d33a66038f8eea8bf6e37013b35fac2c2871fc
|
7
|
+
data.tar.gz: a51ca9229e1f1130ab4c6d951f9c415410f5c9980d65937a417131eb99164b09dde80045bd5b8c086efa02842572318c60aaaff2ffd244d23234f4b0f99758fd
|
data/.circleci/config.yml
CHANGED
@@ -7,9 +7,10 @@ defaults: &defaults
|
|
7
7
|
BUNDLE_JOBS: 4
|
8
8
|
BUNDLE_RETRY: 3
|
9
9
|
BUNDLE_PATH: ~/spree/vendor/bundle
|
10
|
+
RAILS_VERSION: '~> 7.0'
|
10
11
|
working_directory: ~/spree
|
11
12
|
docker:
|
12
|
-
- image: &
|
13
|
+
- image: &ruby_2_7_image circleci/ruby:2.7-node-browsers
|
13
14
|
- image: &redis_image circleci/redis:6.2-alpine
|
14
15
|
|
15
16
|
defaults_3_0: &defaults_3_0
|
@@ -18,7 +19,7 @@ defaults_3_0: &defaults_3_0
|
|
18
19
|
- image: &ruby_3_0_image circleci/ruby:3.0-node-browsers
|
19
20
|
- image: *redis_image
|
20
21
|
|
21
|
-
|
22
|
+
run_tests_2_7: &run_tests_2_7
|
22
23
|
<<: *defaults
|
23
24
|
parallelism: 8
|
24
25
|
steps:
|
@@ -91,7 +92,7 @@ run_tests_3_0: &run_tests_3_0
|
|
91
92
|
path: tmp/capybara
|
92
93
|
|
93
94
|
jobs:
|
94
|
-
|
95
|
+
bundle_ruby_2_7:
|
95
96
|
<<: *defaults
|
96
97
|
steps:
|
97
98
|
- checkout
|
@@ -137,21 +138,21 @@ jobs:
|
|
137
138
|
- vendor/bundle
|
138
139
|
key: spree-storefront-old-bundle-v10-ruby-3-0-{{ checksum "Gemfile.lock" }}
|
139
140
|
|
140
|
-
|
141
|
-
<<: *
|
141
|
+
tests_ruby_2_7_rails_7_0_postgres:
|
142
|
+
<<: *run_tests_2_7
|
142
143
|
environment: &postgres_environment
|
143
144
|
<<: *environment
|
144
145
|
DB: postgres
|
145
146
|
DB_HOST: localhost
|
146
147
|
DB_USERNAME: postgres
|
147
148
|
docker:
|
148
|
-
- image: *
|
149
|
+
- image: *ruby_2_7_image
|
149
150
|
- image: *redis_image
|
150
151
|
- image: &postgres_image circleci/postgres:12-alpine
|
151
152
|
environment:
|
152
153
|
POSTGRES_USER: postgres
|
153
154
|
|
154
|
-
|
155
|
+
tests_ruby_3_0_rails_7_0_postgres:
|
155
156
|
<<: *run_tests_3_0
|
156
157
|
environment:
|
157
158
|
<<: *postgres_environment
|
@@ -160,8 +161,8 @@ jobs:
|
|
160
161
|
- image: *postgres_image
|
161
162
|
- image: *redis_image
|
162
163
|
|
163
|
-
|
164
|
-
<<: *
|
164
|
+
tests_ruby_2_7_rails_7_0_mysql:
|
165
|
+
<<: *run_tests_2_7
|
165
166
|
environment: &mysql_environment
|
166
167
|
<<: *environment
|
167
168
|
DB: mysql
|
@@ -170,7 +171,7 @@ jobs:
|
|
170
171
|
COVERAGE: true
|
171
172
|
COVERAGE_DIR: /tmp/workspace/simplecov
|
172
173
|
docker:
|
173
|
-
- image: *
|
174
|
+
- image: *ruby_2_7_image
|
174
175
|
- image: *redis_image
|
175
176
|
- image: &mysql_image circleci/mysql:8-ram
|
176
177
|
|
@@ -178,14 +179,14 @@ workflows:
|
|
178
179
|
version: 2
|
179
180
|
main:
|
180
181
|
jobs:
|
181
|
-
-
|
182
|
+
- bundle_ruby_2_7
|
182
183
|
- bundle_ruby_3_0
|
183
|
-
-
|
184
|
-
requires:
|
185
|
-
- bundle
|
186
|
-
- tests_postgres_ruby_3_0:
|
184
|
+
- tests_ruby_3_0_rails_7_0_postgres:
|
187
185
|
requires:
|
188
186
|
- bundle_ruby_3_0
|
189
|
-
-
|
187
|
+
- tests_ruby_2_7_rails_7_0_postgres:
|
188
|
+
requires:
|
189
|
+
- bundle_ruby_2_7
|
190
|
+
- tests_ruby_2_7_rails_7_0_mysql:
|
190
191
|
requires:
|
191
|
-
-
|
192
|
+
- bundle_ruby_2_7
|
data/.eslintrc
CHANGED
data/Gemfile
CHANGED
@@ -6,7 +6,7 @@ gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw]
|
|
6
6
|
actionmailer actionpack actionview activejob activemodel activerecord
|
7
7
|
activestorage activesupport railties
|
8
8
|
].each do |rails_gem|
|
9
|
-
gem rails_gem, ENV.fetch('RAILS_VERSION', '~>
|
9
|
+
gem rails_gem, ENV.fetch('RAILS_VERSION', '~> 7.0.0'), require: false
|
10
10
|
end
|
11
11
|
|
12
12
|
platforms :jruby do
|
@@ -49,16 +49,12 @@ group :test, :development do
|
|
49
49
|
gem 'rubocop-rspec', require: false
|
50
50
|
gem 'pry-byebug'
|
51
51
|
gem 'webdrivers', '~> 4.1'
|
52
|
-
|
52
|
+
# Puma 6.0 causes issues in specs due to conflict with capybara version
|
53
|
+
gem 'puma', '< 6.0'
|
53
54
|
gem 'ffaker'
|
54
55
|
end
|
55
56
|
|
56
|
-
|
57
|
-
gem 'github_fast_changelog'
|
58
|
-
gem 'solargraph'
|
59
|
-
end
|
60
|
-
|
61
|
-
spree_opts = { github: 'spree/spree', branch: ENV.fetch('SPREE_BRANCH', '4-4-stable') }
|
57
|
+
spree_opts = { github: 'spree/spree', branch: ENV.fetch('SPREE_BRANCH', 'main') }
|
62
58
|
gem 'spree_core', spree_opts
|
63
59
|
gem 'spree_api', spree_opts
|
64
60
|
|
data/README.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
# Spree (Legacy) Frontend
|
2
2
|
|
3
|
-
This is the old Spree Storefront extracted from Spree < 4.3.
|
3
|
+
This is the old Spree Storefront extracted from Spree < 4.3 which was upgraded to Turbo/Hotwire.
|
4
|
+
|
5
|
+
## Developed by
|
6
|
+
|
7
|
+
[](https://getvendo.com?utm_source=spree_frontend_github)
|
8
|
+
|
9
|
+
> All-in-one platform for all your Marketplace and B2B eCommerce needs. [Start your 30-day free trial](https://e98esoirr8c.typeform.com/contactvendo?typeform-source=spree_sdk_github)
|
4
10
|
|
5
11
|
## Installation
|
6
12
|
|
@@ -10,13 +16,60 @@ Add
|
|
10
16
|
gem 'spree_frontend'
|
11
17
|
```
|
12
18
|
|
13
|
-
to your `Gemfile`.
|
19
|
+
to your `Gemfile`, making sure that the `spree_frontend` gem is before `spree_auth_devise`.
|
20
|
+
|
21
|
+
Make sure both `gem 'jsbundling-rails'` and `gem 'turbo-rails'` are added as well.
|
14
22
|
|
15
23
|
Run:
|
16
24
|
|
17
25
|
```bash
|
18
26
|
bundle install
|
27
|
+
bin/rails javascript:install:esbuild
|
28
|
+
bin/rails turbo:install
|
19
29
|
bin/rails g spree:frontend:install
|
30
|
+
yarn build
|
31
|
+
```
|
32
|
+
|
33
|
+
### Troubleshooting
|
34
|
+
|
35
|
+
#### Disabled 'Add to Cart' Button Issue
|
36
|
+
|
37
|
+
If you notice that the 'Add to Cart' button is disabled on product pages, try the following:
|
38
|
+
* run `yarn build` again in your main repo
|
39
|
+
* if that doesn't fix the issue, try running the following setup commands again:
|
40
|
+
```
|
41
|
+
bin/rails javascript:install:esbuild
|
42
|
+
bin/rails turbo:install
|
43
|
+
bin/rails g spree:frontend:install
|
44
|
+
yarn build
|
45
|
+
```
|
46
|
+
|
47
|
+
This issue may come up if you switch the source of your `spree_frontend` in your Gemfile, e.g. from github to a local path, etc.
|
48
|
+
|
49
|
+
#### Checkout without logging in results in 500 error
|
50
|
+
|
51
|
+
When you navigate to checkout without logging in first, you may get a a 500 error notifying you that "yourdomain.com redirected you too many times."
|
52
|
+
|
53
|
+
This error results from the routes defined in `spree_frontend` and `spree_auth_devise` not being built in the correct order. Make sure the `spree_frontend` gem is listed before `spree_auth_devise` in your main project's gemfile, then try again.
|
54
|
+
|
55
|
+
## Running Tests
|
56
|
+
|
57
|
+
In order to generate the dummy app required for running tests, you’ll need to have the following installed on your machine:
|
58
|
+
* node v16.13.1 (npm v8.1.2)
|
59
|
+
* yarn ≥ v1.22.15
|
60
|
+
* ruby v3.0.3
|
61
|
+
|
62
|
+
To run tests locally, first run `bundle exec rake test_app`, then `bundle exec rspec`.
|
63
|
+
|
64
|
+
### Troubleshooting
|
65
|
+
If you are running on a Mac with an M1 processor, you may run into the following error when running tests:
|
66
|
+
```
|
67
|
+
Webdrivers::NetworkError:
|
68
|
+
Net::HTTPServerException: 404 "Not Found"
|
69
|
+
```
|
70
|
+
If so, update your gemfile locally to get version 5.0 or higher for the web drivers gem:
|
71
|
+
```
|
72
|
+
gem 'webdrivers', '~> 5.0'
|
20
73
|
```
|
21
74
|
|
22
75
|
## Maintanence policy
|
@@ -1,4 +1,4 @@
|
|
1
|
-
//= require spree
|
1
|
+
//= require spree/frontend/main
|
2
2
|
|
3
3
|
var SpreeAPI = {
|
4
4
|
oauthToken: null, // user Bearer token to authorize operations for the given user
|
@@ -9,9 +9,9 @@ SpreeAPI.Storefront = {}
|
|
9
9
|
SpreeAPI.Platform = {}
|
10
10
|
|
11
11
|
// API routes
|
12
|
-
Spree.routes.api_v2_storefront_cart_create = Spree.
|
13
|
-
Spree.routes.api_v2_storefront_cart_add_item = Spree.
|
14
|
-
Spree.routes.api_v2_storefront_cart_apply_coupon_code = Spree.
|
12
|
+
Spree.routes.api_v2_storefront_cart_create = Spree.localizedPathFor('api/v2/storefront/cart')
|
13
|
+
Spree.routes.api_v2_storefront_cart_add_item = Spree.localizedPathFor('api/v2/storefront/cart/add_item')
|
14
|
+
Spree.routes.api_v2_storefront_cart_apply_coupon_code = Spree.localizedPathFor('api/v2/storefront/cart/apply_coupon_code')
|
15
15
|
|
16
16
|
// helpers
|
17
17
|
SpreeAPI.handle500error = function () {
|
@@ -69,11 +69,11 @@ Spree.ready(function($) {
|
|
69
69
|
var stateSpanRequired = statePara.find('abbr')
|
70
70
|
|
71
71
|
if (states.length > 0) {
|
72
|
-
selected =
|
72
|
+
selected = stateSelect.val()
|
73
73
|
stateSelect.html('')
|
74
74
|
$.each(states, function(idx, state) {
|
75
|
-
var opt = $(document.createElement('option')).attr('value', state.id).html(state.name)
|
76
|
-
if (selected.toString(
|
75
|
+
var opt = $(document.createElement('option')).attr('value', state.id.toString()).html(state.name)
|
76
|
+
if (selected && selected.toString() === state.id.toString()) {
|
77
77
|
opt.prop('selected', true)
|
78
78
|
}
|
79
79
|
stateSelect.append(opt)
|
@@ -1,12 +1,11 @@
|
|
1
|
-
document.addEventListener('
|
2
|
-
// this condition checks if this is the first initial load of
|
3
|
-
if (!event.
|
1
|
+
document.addEventListener('turbo:load', function(event) {
|
2
|
+
// this condition checks if this is the first initial load of turbo application
|
3
|
+
if (!event.detail.timing.visitStart) {
|
4
4
|
var currencySelect = document.querySelectorAll('select[name=switch_to_currency]')
|
5
5
|
|
6
6
|
if (currencySelect.length) {
|
7
7
|
currencySelect.forEach(function (element) {
|
8
8
|
element.addEventListener('change', function () {
|
9
|
-
Spree.showProgressBar()
|
10
9
|
var newCurrency = this.value
|
11
10
|
|
12
11
|
// we need to make AJAX call here to the backend to set currency in session
|
@@ -28,16 +27,16 @@ document.addEventListener('turbolinks:load', function(event) {
|
|
28
27
|
|
29
28
|
// fix back button issue with different currency set
|
30
29
|
// invalidate page if cached page has different currency then the current one
|
31
|
-
document.addEventListener('
|
30
|
+
document.addEventListener('turbo:load', function(event) {
|
32
31
|
if (typeof (SPREE_DEFAULT_CURRENCY) !== 'undefined' && typeof (SPREE_CURRENCY) !== 'undefined') {
|
33
32
|
if (SPREE_CURRENCY === SPREE_DEFAULT_CURRENCY) {
|
34
33
|
var regexAnyCurrency = new RegExp('currency=')
|
35
|
-
if (event.
|
34
|
+
if (event.detail.url.match(regexAnyCurrency) && !event.detail.url.match(SPREE_CURRENCY)) {
|
36
35
|
Spree.setCurrency(SPREE_CURRENCY)
|
37
36
|
}
|
38
37
|
} else {
|
39
38
|
var regex = new RegExp('currency=' + SPREE_CURRENCY)
|
40
|
-
if (!event.
|
39
|
+
if (!event.detail.url.match(regex)) {
|
41
40
|
Spree.setCurrency(SPREE_CURRENCY)
|
42
41
|
}
|
43
42
|
}
|
@@ -1,11 +1,10 @@
|
|
1
|
-
document.addEventListener('
|
1
|
+
document.addEventListener('turbo:load', () => {
|
2
2
|
const localeSelect = document.querySelectorAll('select[name=switch_to_locale]')
|
3
3
|
|
4
4
|
if (localeSelect.length) {
|
5
5
|
localeSelect.forEach((element) => {
|
6
6
|
element.addEventListener('change', () => {
|
7
7
|
Spree.clearCache()
|
8
|
-
Spree.showProgressBar()
|
9
8
|
element.form.submit()
|
10
9
|
})
|
11
10
|
})
|
@@ -2,7 +2,7 @@
|
|
2
2
|
function Spree () {}
|
3
3
|
|
4
4
|
Spree.ready = function (callback) {
|
5
|
-
return jQuery(document).on('page:load
|
5
|
+
return jQuery(document).on('page:load turbo:load', function () {
|
6
6
|
return callback(jQuery)
|
7
7
|
})
|
8
8
|
}
|
@@ -32,7 +32,7 @@ Spree.localizedPathFor = function(path) {
|
|
32
32
|
if (pathName.match(/api\/v/)) {
|
33
33
|
params.set('locale', SPREE_LOCALE)
|
34
34
|
} else {
|
35
|
-
pathName = (this.mountedAt()) + SPREE_LOCALE + '/' +
|
35
|
+
pathName = (this.mountedAt()) + SPREE_LOCALE + '/' + pathName
|
36
36
|
}
|
37
37
|
return fullUrl.origin + pathName + '?' + params.toString()
|
38
38
|
}
|
@@ -68,11 +68,11 @@ Spree.ajax = function (urlOrSettings, settings) {
|
|
68
68
|
}
|
69
69
|
|
70
70
|
Spree.routes = {
|
71
|
-
states_search: Spree.
|
71
|
+
states_search: Spree.localizedPathFor('api/v1/states'),
|
72
72
|
apply_coupon_code: function (orderId) {
|
73
|
-
return Spree.
|
73
|
+
return Spree.localizedPathFor('api/v1/orders/' + orderId + '/apply_coupon_code')
|
74
74
|
},
|
75
|
-
cart: Spree.
|
75
|
+
cart: Spree.localizedPathFor('cart')
|
76
76
|
}
|
77
77
|
|
78
78
|
Spree.url_params = {}
|
@@ -15,8 +15,8 @@
|
|
15
15
|
|
16
16
|
// Invalidate the page when the next page is different from the current page
|
17
17
|
// Persist scroll information across pages
|
18
|
-
document.addEventListener('
|
19
|
-
if (event.
|
18
|
+
document.addEventListener('turbo:before-visit', function (event) {
|
19
|
+
if (event.detail.url !== location.href) {
|
20
20
|
sessionStorage.setItem(PAGE_INVALIDATED, 'true')
|
21
21
|
}
|
22
22
|
sessionStorage.setItem(SCROLL_POSITION, JSON.stringify(scrollData()))
|
@@ -28,7 +28,7 @@
|
|
28
28
|
// invalidation,
|
29
29
|
// 3. scroll to the persisted position if there, or to the top otherwise
|
30
30
|
// 4. Remove the persisted information
|
31
|
-
addEventListener('
|
31
|
+
addEventListener('turbo:load', function (event) {
|
32
32
|
var scrollPosition = JSON.parse(sessionStorage.getItem(SCROLL_POSITION))
|
33
33
|
|
34
34
|
if (shouldScroll(scrollPosition)) {
|
@@ -26,7 +26,7 @@ Spree.loadsCarouselElements = function () {
|
|
26
26
|
$('div[data-product-carousel-taxon-id]').each(function (_index, element) { Spree.loadCarousel(element, this) })
|
27
27
|
}
|
28
28
|
|
29
|
-
document.addEventListener('
|
29
|
+
document.addEventListener('turbo:load', function () {
|
30
30
|
var carouselPresent = $('div[data-product-carousel-taxon-id]')
|
31
31
|
|
32
32
|
if (carouselPresent.length) {
|
@@ -9,7 +9,7 @@ Spree.fetchRelatedProducts = function (id, htmlContainer) {
|
|
9
9
|
})
|
10
10
|
}
|
11
11
|
|
12
|
-
document.addEventListener('
|
12
|
+
document.addEventListener('turbo:load', function () {
|
13
13
|
var productDetailsPage = $('body#product-details')
|
14
14
|
|
15
15
|
if (productDetailsPage.length) {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
//= require spree/api/storefront/cart
|
1
|
+
//= require spree/frontend/api/storefront/cart
|
2
2
|
//= require ../shared/product_added_modal
|
3
3
|
//= require ../shared/variant_select
|
4
4
|
|
@@ -89,7 +89,7 @@ function CartForm($, $cartForm) {
|
|
89
89
|
this.selectedOptionValueIds.splice(
|
90
90
|
optionTypeIndex,
|
91
91
|
this.selectedOptionValueIds.length,
|
92
|
-
|
92
|
+
$optionValue.val().toString()
|
93
93
|
)
|
94
94
|
}
|
95
95
|
|
@@ -104,7 +104,7 @@ function CartForm($, $cartForm) {
|
|
104
104
|
.find(OPTION_VALUE_SELECTOR)
|
105
105
|
.each(function(_index, ov) {
|
106
106
|
var $ov = $(ov)
|
107
|
-
var id =
|
107
|
+
var id = $ov.val().toString()
|
108
108
|
|
109
109
|
$ov.prop('checked', false)
|
110
110
|
$ov.prop('disabled', !availableOptionValueIds.includes(id))
|
@@ -121,7 +121,7 @@ function CartForm($, $cartForm) {
|
|
121
121
|
|
122
122
|
return this.variants.reduce(function(acc, variant) {
|
123
123
|
var optionValues = variant.option_values.map(function(ov) {
|
124
|
-
return ov.id
|
124
|
+
return ov.id.toString()
|
125
125
|
})
|
126
126
|
|
127
127
|
var isPossibleVariantFound = selectedOptionValueIds.every(function(ov) {
|
@@ -180,7 +180,7 @@ function CartForm($, $cartForm) {
|
|
180
180
|
|
181
181
|
if (!this.withOptionValues) {
|
182
182
|
return this.variants.find(function(variant) {
|
183
|
-
return variant.id ===
|
183
|
+
return variant.id && self.$variantIdInput.val() && variant.id.toString() === self.$variantIdInput.val().toString()
|
184
184
|
})
|
185
185
|
}
|
186
186
|
|
@@ -190,7 +190,7 @@ function CartForm($, $cartForm) {
|
|
190
190
|
|
191
191
|
return this.variants.find(function(variant) {
|
192
192
|
var optionValueIds = variant.option_values.map(function(ov) {
|
193
|
-
return ov.id
|
193
|
+
return ov.id.toString()
|
194
194
|
})
|
195
195
|
|
196
196
|
return self.areArraysEqual(optionValueIds, self.selectedOptionValueIds)
|
@@ -298,7 +298,7 @@ Spree.ready(function($) {
|
|
298
298
|
quantity,
|
299
299
|
options, // options hash - you can pass additional parameters here, your backend
|
300
300
|
// needs to be aware of those, see API docs:
|
301
|
-
// https://github.com/spree/spree/blob/
|
301
|
+
// https://github.com/spree/spree/blob/d894358e49b8c3a7f6944e838de7cd92510e31d0/api/docs/v2/storefront/index.yaml#L442
|
302
302
|
function(response) {
|
303
303
|
$addToCart.prop('disabled', false)
|
304
304
|
Spree.fetchCart()
|
@@ -331,7 +331,7 @@ Spree.ready(function($) {
|
|
331
331
|
CartForm($, $cartForm)
|
332
332
|
})
|
333
333
|
|
334
|
-
document.addEventListener('
|
334
|
+
document.addEventListener('turbo:request-start', function () {
|
335
335
|
Spree.hideProductAddedModal()
|
336
336
|
})
|
337
337
|
})
|
@@ -1,4 +1,4 @@
|
|
1
|
-
document.addEventListener('
|
1
|
+
document.addEventListener('turbo:load', function () {
|
2
2
|
$('#product-description-arrow').click(function () {
|
3
3
|
document.getElementById('product-description-long').classList.remove('d-none')
|
4
4
|
document.getElementById('product-description-short').classList.add('d-none')
|
@@ -21,7 +21,7 @@ Spree.ready(function($) {
|
|
21
21
|
this.closeAllCategories = this.closeAllCategories.bind(this);
|
22
22
|
|
23
23
|
window.addEventListener('resize', this.onResize);
|
24
|
-
window.addEventListener('
|
24
|
+
window.addEventListener('turbo:request-start', this.onCloseClick);
|
25
25
|
|
26
26
|
this.burgerButton.addEventListener('click', this.onBurgerClick, false);
|
27
27
|
this.closeButton.addEventListener('click', this.onCloseClick, false);
|
@@ -77,7 +77,7 @@ Spree.ready(function($) {
|
|
77
77
|
|
78
78
|
MobileNavigationManager.prototype.openCategory = function(category) {
|
79
79
|
this.openedCategories.push(category);
|
80
|
-
var subList = document.querySelector('ul[data-category=' + category + ']');
|
80
|
+
var subList = document.querySelector('ul[data-category="' + category + '"]');
|
81
81
|
if (subList) {
|
82
82
|
this.mobileNavigationList.classList.add('mobile-navigation-list-subcategory-shown');
|
83
83
|
this.mobileNavigationList.scrollTop = 0
|
@@ -89,7 +89,7 @@ Spree.ready(function($) {
|
|
89
89
|
|
90
90
|
MobileNavigationManager.prototype.closeCurrentCategory = function() {
|
91
91
|
var category = this.openedCategories.pop();
|
92
|
-
var subList = document.querySelector('ul[data-category=' + category + ']');
|
92
|
+
var subList = document.querySelector('ul[data-category="' + category + '"]');
|
93
93
|
if (subList) {
|
94
94
|
subList.classList.remove('shown');
|
95
95
|
}
|
@@ -101,7 +101,7 @@ Spree.ready(function($) {
|
|
101
101
|
}
|
102
102
|
|
103
103
|
MobileNavigationManager.prototype.closeCategory = function(category) {
|
104
|
-
var subList = document.querySelector('ul[data-category=' + category + ']');
|
104
|
+
var subList = document.querySelector('ul[data-category="' + category + '"]');
|
105
105
|
subList.style.transition = 'none';
|
106
106
|
subList.classList.remove('shown');
|
107
107
|
setTimeout(function(){ subList.style.transition = ''; }, 500);
|
@@ -8,7 +8,7 @@ this.initializeQueryParamsCheck = function () {
|
|
8
8
|
|
9
9
|
function verifyVariantIdMatch() {
|
10
10
|
this.variants.forEach(function(variant) {
|
11
|
-
if (
|
11
|
+
if (variant.id.toString() === variantIdFromUrl.toString()) this.urlQueryMatchFound = true
|
12
12
|
})
|
13
13
|
}
|
14
14
|
|
@@ -23,7 +23,7 @@ this.setSelectedVariantFromUrl = function () {
|
|
23
23
|
|
24
24
|
this.getVariantOptionsById = function(variantIdFromUrl) {
|
25
25
|
this.variants.forEach(function(variant) {
|
26
|
-
if (
|
26
|
+
if (variant.id.toString() === variantIdFromUrl.toString()) this.sortOptionValues(variant.option_values)
|
27
27
|
})
|
28
28
|
}
|
29
29
|
|
@@ -36,7 +36,7 @@ function buildArray(item) {
|
|
36
36
|
var target = container.querySelectorAll('.product-variants-variant-values-radio')
|
37
37
|
|
38
38
|
target.forEach(function(inputTag) {
|
39
|
-
if (
|
39
|
+
if (inputTag.value.toString() === item.id.toString() && inputTag.dataset.presentation === item.presentation) {
|
40
40
|
this.selectedOptions.push(inputTag)
|
41
41
|
}
|
42
42
|
})
|
@@ -4,14 +4,13 @@
|
|
4
4
|
//= require bootstrap
|
5
5
|
//= require jquery.payment
|
6
6
|
//= require cleave
|
7
|
-
//= require spree
|
7
|
+
//= require spree/frontend/main
|
8
8
|
//= require polyfill.min
|
9
9
|
//= require fetch.umd
|
10
|
-
//= require spree/api/main
|
10
|
+
//= require spree/frontend/api/main
|
11
11
|
//= require ./lazysizes.config
|
12
12
|
//= require lazysizes.min
|
13
13
|
//= require accounting.min
|
14
|
-
//= require turbolinks
|
15
14
|
//= require spree/frontend/account
|
16
15
|
//= require spree/frontend/api_tokens
|
17
16
|
//= require spree/frontend/carousel-noconflict
|
@@ -40,31 +39,25 @@
|
|
40
39
|
//= require spree/frontend/views/spree/shared/nav_bar
|
41
40
|
//= require spree/frontend/views/spree/shared/product_added_modal
|
42
41
|
//= require spree/frontend/views/spree/shared/quantity_select
|
43
|
-
//= require spree/frontend/
|
42
|
+
//= require spree/frontend/turbo_scroll_fix
|
44
43
|
//= require spree/frontend/main_nav_bar
|
45
44
|
//= require spree/frontend/login
|
46
45
|
|
47
|
-
Spree.routes.api_tokens = Spree.
|
48
|
-
Spree.routes.ensure_cart = Spree.
|
46
|
+
Spree.routes.api_tokens = Spree.localizedPathFor('api_tokens')
|
47
|
+
Spree.routes.ensure_cart = Spree.localizedPathFor('ensure_cart')
|
49
48
|
Spree.routes.api_v2_storefront_cart_apply_coupon_code = Spree.localizedPathFor('api/v2/storefront/cart/apply_coupon_code')
|
50
49
|
Spree.routes.api_v2_storefront_cart_remove_coupon_code = function(couponCode) { return Spree.localizedPathFor('api/v2/storefront/cart/remove_coupon_code/' + couponCode) }
|
51
50
|
Spree.routes.api_v2_storefront_destroy_credit_card = function(id) { return Spree.localizedPathFor('api/v2/storefront/account/credit_cards/' + id) }
|
52
51
|
Spree.routes.product = function(id) { return Spree.localizedPathFor('products/' + id) }
|
53
52
|
Spree.routes.product_related = function(id) { return Spree.localizedPathFor('products/' + id + '/related') }
|
54
53
|
Spree.routes.product_carousel = function (taxonId) { return Spree.localizedPathFor('product_carousel/' + taxonId) }
|
55
|
-
Spree.routes.set_locale = function(locale) { return Spree.
|
56
|
-
Spree.routes.set_currency = function(currency) { return Spree.
|
57
|
-
|
58
|
-
Spree.showProgressBar = function () {
|
59
|
-
if (!Turbolinks.supported) { return }
|
60
|
-
Turbolinks.controller.adapter.progressBar.setValue(0)
|
61
|
-
Turbolinks.controller.adapter.progressBar.show()
|
62
|
-
}
|
54
|
+
Spree.routes.set_locale = function(locale) { return Spree.localizedPathFor('locale/set?switch_to_locale=' + locale) }
|
55
|
+
Spree.routes.set_currency = function(currency) { return Spree.localizedPathFor('currency/set?switch_to_currency=' + currency) }
|
63
56
|
|
64
57
|
Spree.clearCache = function () {
|
65
|
-
if (!
|
58
|
+
if (!window.Turbo) { return }
|
66
59
|
|
67
|
-
|
60
|
+
Turbo.clearCache()
|
68
61
|
}
|
69
62
|
|
70
63
|
Spree.setCurrency = function (currency) {
|
@@ -81,5 +74,5 @@ Spree.setCurrency = function (currency) {
|
|
81
74
|
|
82
75
|
SPREE_CURRENCY = currency
|
83
76
|
|
84
|
-
|
77
|
+
Turbo.visit(window.location.pathname + queryString, { action: 'replace' })
|
85
78
|
}
|
@@ -10,7 +10,7 @@ module Spree
|
|
10
10
|
flash[:notice] = I18n.t(:successfully_created, scope: :address_book)
|
11
11
|
redirect_to spree.account_path
|
12
12
|
else
|
13
|
-
render action: 'new'
|
13
|
+
render action: 'new', status: :unprocessable_entity
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -27,7 +27,7 @@ module Spree
|
|
27
27
|
flash[:notice] = Spree.t(:successfully_updated, scope: :address_book)
|
28
28
|
redirect_back_or_default(addresses_path)
|
29
29
|
else
|
30
|
-
render :edit
|
30
|
+
render :edit, status: :unprocessable_entity
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -46,7 +46,7 @@ module Spree
|
|
46
46
|
redirect_to spree.checkout_state_path(@order.state)
|
47
47
|
end
|
48
48
|
else
|
49
|
-
render :edit
|
49
|
+
render :edit, status: :unprocessable_entity
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -190,7 +190,7 @@ module Spree
|
|
190
190
|
def rescue_from_spree_gateway_error(exception)
|
191
191
|
flash.now[:error] = Spree.t(:spree_gateway_error_flash_for_checkout)
|
192
192
|
@order.errors.add(:base, exception.message)
|
193
|
-
render :edit
|
193
|
+
render :edit, status: :unprocessable_entity
|
194
194
|
end
|
195
195
|
|
196
196
|
def check_authorization
|