spree_frontend 4.2.0.rc2 → 4.2.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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/spree/frontend/checkout/address.js +60 -43
- data/app/assets/javascripts/spree/frontend/views/spree/products/cart_form.js +1 -1
- data/app/assets/stylesheets/spree/frontend/functions.scss +1 -0
- data/app/assets/stylesheets/spree/frontend/variables/bootstrap-overrides.scss +1 -2
- data/app/controllers/spree/currency_controller.rb +1 -1
- data/app/controllers/spree/taxons_controller.rb +1 -1
- data/app/helpers/spree/addresses_helper.rb +10 -6
- data/app/views/spree/addresses/_form.html.erb +1 -1
- data/app/views/spree/products/_cart_form.html.erb +3 -5
- data/app/views/spree/shared/_change_store.html.erb +1 -1
- data/app/views/spree/shared/_footer.html.erb +2 -2
- data/app/views/spree/users/_address.html.erb +1 -1
- data/config/initializers/canonical_rails.rb +1 -1
- data/spree_frontend.gemspec +1 -1
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f81a05d74462180d47969190cd9b0ba32eeb896e776706f89f288b1e52167d0
|
4
|
+
data.tar.gz: f0d37b65f1b4a1bef39162049cc07f7201a9ba5b7417114867530c2f86a61c23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: caa243750a89dcb5ee49b389c30b1dda7594e2ce46cbb98d3c83c558c6af5af4e3dfc07f33b4fcca9f21bbb21af8dfef2a8a8b61264f1939a4ce262273045ae0
|
7
|
+
data.tar.gz: 5853f04c6518d154deaffa26eff36966fe4a8486076cbf1143c03974cabc3502a9134239a439d8537a5254bf9cb934743a5692ba4b8486fb19f900429d95a028
|
@@ -1,16 +1,24 @@
|
|
1
|
-
Spree.ready(function
|
2
|
-
Spree.onAddress = function
|
1
|
+
Spree.ready(function($) {
|
2
|
+
Spree.onAddress = function() {
|
3
3
|
if ($('#checkout_form_address').length) {
|
4
|
-
Spree.updateState = function
|
4
|
+
Spree.updateState = function(region) {
|
5
5
|
var countryId = getCountryId(region)
|
6
6
|
if (countryId != null) {
|
7
7
|
if (Spree.Checkout[countryId] == null) {
|
8
8
|
$.ajax({
|
9
|
-
async: false,
|
10
|
-
|
11
|
-
|
9
|
+
async: false,
|
10
|
+
method: 'GET',
|
11
|
+
url: Spree.pathFor('/api/v2/storefront/countries/' + countryId + '?include=checkout_zone_applicable_states'),
|
12
|
+
dataType: 'json'
|
13
|
+
}).done(function(data) {
|
14
|
+
var json = data.included;
|
15
|
+
var xStates = [];
|
12
16
|
for (var i = 0; i < json.length; i++) {
|
13
|
-
var obj = json[i];
|
17
|
+
var obj = json[i];
|
18
|
+
xStates.push({
|
19
|
+
id: obj.id,
|
20
|
+
name: obj.attributes.name
|
21
|
+
})
|
14
22
|
}
|
15
23
|
Spree.Checkout[countryId] = {
|
16
24
|
states: xStates,
|
@@ -27,7 +35,7 @@ Spree.ready(function ($) {
|
|
27
35
|
}
|
28
36
|
}
|
29
37
|
|
30
|
-
Spree.toggleZipcode = function
|
38
|
+
Spree.toggleZipcode = function(data, region) {
|
31
39
|
var requiredIndicator = $('span#required_marker').first().text()
|
32
40
|
var zipcodeRequired = data.zipcode_required
|
33
41
|
var zipcodePara = $('#' + region + 'zipcode')
|
@@ -49,7 +57,7 @@ Spree.ready(function ($) {
|
|
49
57
|
}
|
50
58
|
}
|
51
59
|
|
52
|
-
Spree.fillStates = function
|
60
|
+
Spree.fillStates = function(data, region) {
|
53
61
|
var selected
|
54
62
|
var statesRequired = data.states_required
|
55
63
|
var states = data.states
|
@@ -63,64 +71,72 @@ Spree.ready(function ($) {
|
|
63
71
|
if (states.length > 0) {
|
64
72
|
selected = parseInt(stateSelect.val())
|
65
73
|
stateSelect.html('')
|
66
|
-
$.each(states, function
|
74
|
+
$.each(states, function(idx, state) {
|
67
75
|
var opt = $(document.createElement('option')).attr('value', state.id).html(state.name)
|
68
76
|
if (selected.toString(10) === state.id.toString(10)) {
|
69
77
|
opt.prop('selected', true)
|
70
78
|
}
|
71
79
|
stateSelect.append(opt)
|
72
80
|
})
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
stateSpanRequired.hide()
|
79
|
-
stateSelect.removeClass('required')
|
81
|
+
// If States are listed for the Country selected kill the input field
|
82
|
+
stateInput.hide()
|
83
|
+
.prop('disabled', true)
|
84
|
+
.prop('required', false)
|
85
|
+
.val('')
|
80
86
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
87
|
+
// Activate the State select dropdown.
|
88
|
+
statePara.show()
|
89
|
+
stateSelect.prop('required', statesRequired)
|
90
|
+
.prop('disabled', false)
|
91
|
+
.show()
|
92
|
+
stateSelectImg.show()
|
93
|
+
stateLabel.addClass('state-select-label')
|
94
|
+
stateSpanRequired.toggle(statesRequired)
|
89
95
|
} else {
|
90
|
-
|
91
|
-
|
96
|
+
// If no States are listed in the database for the country selected
|
97
|
+
// and a State is not required => (United Kingdom).
|
98
|
+
// Kill the State selector and input field.
|
92
99
|
stateSelectImg.hide()
|
93
|
-
|
100
|
+
stateSelect.hide()
|
101
|
+
.prop('disabled', true)
|
102
|
+
.prop('required', false)
|
103
|
+
.find('option').remove()
|
104
|
+
|
105
|
+
stateInput.prop('disabled', true)
|
106
|
+
.prop('required', false)
|
107
|
+
.hide()
|
108
|
+
|
109
|
+
// Toggle visibility of States parent element based on State required.
|
110
|
+
statePara.toggle(statesRequired)
|
111
|
+
|
94
112
|
if (statesRequired) {
|
113
|
+
// If a State is required, but none are listed in the database
|
114
|
+
// for the country selected => (Hong Kong)
|
115
|
+
// Enable the State input field, set it to required.
|
116
|
+
stateInput.show()
|
117
|
+
.prop('disabled', false)
|
118
|
+
.prop('required', true)
|
95
119
|
stateSpanRequired.show()
|
96
|
-
stateLabel.removeClass('state-select-label')
|
97
|
-
stateInput.addClass('required form-control')
|
98
|
-
} else {
|
99
|
-
stateInput.val('')
|
100
|
-
stateSpanRequired.hide()
|
101
|
-
stateInput.removeClass('required')
|
120
|
+
stateLabel.removeClass('state-select-label') // required for floating label
|
102
121
|
}
|
103
|
-
statePara.toggle(!!statesRequired)
|
104
|
-
stateInput.prop('disabled', !statesRequired)
|
105
|
-
stateInput.removeClass('hidden')
|
106
|
-
stateSelect.removeClass('required')
|
107
122
|
}
|
108
123
|
}
|
109
|
-
$('#bcountry select').change(function
|
124
|
+
$('#bcountry select').change(function() {
|
110
125
|
Spree.updateState('b')
|
111
126
|
})
|
112
|
-
$('#scountry select').change(function
|
127
|
+
$('#scountry select').change(function() {
|
113
128
|
Spree.updateState('s')
|
114
129
|
})
|
115
130
|
Spree.updateState('b')
|
116
131
|
|
117
132
|
var orderUseBilling = $('input#order_use_billing')
|
118
|
-
orderUseBilling.change(function
|
133
|
+
orderUseBilling.change(function() {
|
119
134
|
updateShippingFormState(orderUseBilling)
|
120
135
|
})
|
121
136
|
updateShippingFormState(orderUseBilling)
|
122
137
|
}
|
123
|
-
|
138
|
+
|
139
|
+
function updateShippingFormState(orderUseBilling) {
|
124
140
|
if (orderUseBilling.is(':checked')) {
|
125
141
|
$('#shipping .inner').hide()
|
126
142
|
$('#shipping .inner input, #shipping .inner select').prop('disabled', true)
|
@@ -130,7 +146,8 @@ Spree.ready(function ($) {
|
|
130
146
|
Spree.updateState('s')
|
131
147
|
}
|
132
148
|
}
|
133
|
-
|
149
|
+
|
150
|
+
function getCountryId(region) {
|
134
151
|
return $('#' + region + 'country select').val()
|
135
152
|
}
|
136
153
|
}
|
@@ -255,7 +255,7 @@ function CartForm($, $cartForm) {
|
|
255
255
|
|
256
256
|
this.$price.html(variant.display_price)
|
257
257
|
|
258
|
-
var compareAtPriceContent = shouldDisplayCompareAtPrice ?
|
258
|
+
var compareAtPriceContent = shouldDisplayCompareAtPrice ? variant.display_compare_at_price : ''
|
259
259
|
this.$compareAtPrice.html(compareAtPriceContent)
|
260
260
|
}
|
261
261
|
|
@@ -3,7 +3,7 @@ module Spree
|
|
3
3
|
def set
|
4
4
|
@currency = supported_currencies.find { |currency| currency.iso_code == params[:currency] }
|
5
5
|
# Make sure that we update the current order, so the currency change is reflected.
|
6
|
-
current_order&.
|
6
|
+
current_order&.update(currency: @currency.iso_code)
|
7
7
|
session[:currency] = params[:currency] if Spree::Config[:show_store_currency_selector]
|
8
8
|
respond_to do |format|
|
9
9
|
format.json { render json: !@currency.nil? }
|
@@ -16,7 +16,7 @@ module Spree
|
|
16
16
|
def product_carousel
|
17
17
|
if stale?(etag: carousel_etag, last_modified: last_modified, public: true)
|
18
18
|
load_products
|
19
|
-
if @products.any?
|
19
|
+
if @products.reload.any?
|
20
20
|
render template: 'spree/taxons/product_carousel', layout: false
|
21
21
|
else
|
22
22
|
head :no_content
|
@@ -10,7 +10,7 @@ module Spree
|
|
10
10
|
method_name = I18n.t("activerecord.attributes.spree/address.#{method}")
|
11
11
|
required = Spree.t(:required)
|
12
12
|
form.text_field(method,
|
13
|
-
class: [
|
13
|
+
class: ['spree-flat-input'].compact,
|
14
14
|
required: is_required,
|
15
15
|
placeholder: is_required ? "#{method_name} #{required}" : method_name,
|
16
16
|
aria: { label: method_name }) +
|
@@ -27,7 +27,7 @@ module Spree
|
|
27
27
|
method_name = Spree.t(:zipcode)
|
28
28
|
required = Spree.t(:required)
|
29
29
|
form.text_field(:zipcode,
|
30
|
-
class: [
|
30
|
+
class: ['spree-flat-input'].compact,
|
31
31
|
required: is_required,
|
32
32
|
placeholder: is_required ? "#{method_name} #{required}" : method_name,
|
33
33
|
aria: { label: Spree.t(:zipcode) }) +
|
@@ -41,14 +41,14 @@ module Spree
|
|
41
41
|
country ||= Spree::Country.find(Spree::Config[:default_country_id])
|
42
42
|
have_states = country.states.any?
|
43
43
|
state_elements = [
|
44
|
-
form.collection_select(:state_id, country.
|
44
|
+
form.collection_select(:state_id, checkout_zone_applicable_states_for(country).sort_by(&:name),
|
45
45
|
:id, :name,
|
46
46
|
{ prompt: Spree.t(:state) },
|
47
|
-
class: [
|
47
|
+
class: ['spree-flat-select'].compact,
|
48
48
|
aria: { label: Spree.t(:state) },
|
49
49
|
disabled: !have_states) +
|
50
50
|
form.text_field(:state_name,
|
51
|
-
class: [
|
51
|
+
class: ['spree-flat-input'].compact,
|
52
52
|
aria: { label: Spree.t(:state) },
|
53
53
|
disabled: have_states,
|
54
54
|
placeholder: Spree.t(:state) + " #{Spree.t(:required)}") +
|
@@ -60,7 +60,7 @@ module Spree
|
|
60
60
|
class: [!have_states ? 'hidden' : nil, 'position-absolute spree-flat-select-arrow'].compact)
|
61
61
|
].join.tr('"', "'").delete("\n")
|
62
62
|
|
63
|
-
content_tag(:noscript, form.text_field(:state_name
|
63
|
+
content_tag(:noscript, form.text_field(:state_name)) +
|
64
64
|
javascript_tag("document.write(\"<span class='d-block position-relative'>#{state_elements.html_safe}</span>\");")
|
65
65
|
end
|
66
66
|
|
@@ -69,5 +69,9 @@ module Spree
|
|
69
69
|
|
70
70
|
try_spree_current_user.addresses.where(country: available_countries)
|
71
71
|
end
|
72
|
+
|
73
|
+
def checkout_zone_applicable_states_for(country)
|
74
|
+
current_store.states_available_for_checkout(country)
|
75
|
+
end
|
72
76
|
end
|
73
77
|
end
|
@@ -6,7 +6,7 @@
|
|
6
6
|
<div id="<%= "#{address_id}country-selection" %>" class="d-block position-relative has-float-label">
|
7
7
|
<%= address_form.collection_select :country_id, available_countries, :id, :name,
|
8
8
|
{ prompt: Spree.t(:country).upcase },
|
9
|
-
{ class: '
|
9
|
+
{ class: 'form-control spree-flat-select',
|
10
10
|
aria: { label: Spree.t(:country) } } %>
|
11
11
|
<%= image_tag 'arrow.svg', class: 'position-absolute spree-flat-select-arrow' %>
|
12
12
|
<%= address_form.label(Spree.t(:country), Spree.t(:country).upcase, class:'text-uppercase') %>
|
@@ -28,11 +28,9 @@
|
|
28
28
|
<div id="inside-product-cart-form" data-hook="inside_product_cart_form">
|
29
29
|
<% if is_product_available_in_currency %>
|
30
30
|
<div id="product-price" class="mb-2 text-center text-md-left add-to-cart-form-price" data-hook="product_price">
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
<% end %>
|
35
|
-
</span>
|
31
|
+
<% if should_display_compare_at_price %>
|
32
|
+
<span class="compare-at-price mr-3"><%= display_compare_at_price(default_variant) %></span>
|
33
|
+
<% end %>
|
36
34
|
<span class="price selling" content="<%= @product_price.to_d %>">
|
37
35
|
<%= display_price(default_variant) %>
|
38
36
|
</span>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<% if Spree::Config.show_store_currency_selector && stores.size > 1 %>
|
2
|
-
<li class="change-store">
|
2
|
+
<li class="d-none d-xl-block change-store">
|
3
3
|
<div class="dropdown navbar-right-dropdown">
|
4
4
|
<button id="stores-button" type="button" data-toggle="dropdown" class="navbar-right-dropdown-toggle" aria-label="<%= Spree.t('nav_bar.change_country')%>">
|
5
5
|
<%= icon(name: 'global',
|
@@ -41,8 +41,8 @@
|
|
41
41
|
<% if current_store.contact_phone&.present? %>
|
42
42
|
<div><%= Spree.t(:call_us_now) %><%= current_store.contact_phone %></div>
|
43
43
|
<% end %>
|
44
|
-
<% if current_store.
|
45
|
-
<div><%= Spree.t(:email) %>: <%= current_store.
|
44
|
+
<% if current_store.customer_support_email&.present? %>
|
45
|
+
<div><%= Spree.t(:email) %>: <%= current_store.customer_support_email %></div>
|
46
46
|
<% end %>
|
47
47
|
</div>
|
48
48
|
</div>
|
@@ -9,7 +9,7 @@
|
|
9
9
|
<%= "#{address.address1} #{address.address2}" %>,
|
10
10
|
</div>
|
11
11
|
<div>
|
12
|
-
<%= "#{address.city}, #{address.
|
12
|
+
<%= "#{address.city}, #{address.state_text} #{address.zipcode}" %>,
|
13
13
|
</div>
|
14
14
|
<div>
|
15
15
|
<%= address.country.name %>
|
@@ -10,5 +10,5 @@ CanonicalRails.setup do |config|
|
|
10
10
|
# Parameter spamming can cause index dilution by creating seemingly different URLs with identical or near-identical content.
|
11
11
|
# Unless whitelisted, these parameters will be omitted
|
12
12
|
|
13
|
-
config.
|
13
|
+
config.allowed_parameters = [:keywords, :page, :search, :taxon]
|
14
14
|
end
|
data/spree_frontend.gemspec
CHANGED
@@ -30,7 +30,7 @@ Gem::Specification.new do |s|
|
|
30
30
|
|
31
31
|
s.add_dependency 'bootstrap', '>= 4.3.1', '< 4.6.0'
|
32
32
|
s.add_dependency 'glyphicons', '~> 1.0.2'
|
33
|
-
s.add_dependency 'canonical-rails', '~> 0.2.
|
33
|
+
s.add_dependency 'canonical-rails', '~> 0.2.10'
|
34
34
|
s.add_dependency 'inline_svg', '~> 1.5'
|
35
35
|
s.add_dependency 'jquery-rails', '~> 4.3'
|
36
36
|
s.add_dependency 'turbolinks', '~> 5.2.0'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_frontend
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.2.0.
|
4
|
+
version: 4.2.0.rc3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Schofield
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-01-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: spree_api
|
@@ -17,28 +17,28 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - '='
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 4.2.0.
|
20
|
+
version: 4.2.0.rc3
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - '='
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 4.2.0.
|
27
|
+
version: 4.2.0.rc3
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: spree_core
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - '='
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 4.2.0.
|
34
|
+
version: 4.2.0.rc3
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - '='
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 4.2.0.
|
41
|
+
version: 4.2.0.rc3
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: bootstrap
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -79,14 +79,14 @@ dependencies:
|
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.2.
|
82
|
+
version: 0.2.10
|
83
83
|
type: :runtime
|
84
84
|
prerelease: false
|
85
85
|
version_requirements: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.2.
|
89
|
+
version: 0.2.10
|
90
90
|
- !ruby/object:Gem::Dependency
|
91
91
|
name: inline_svg
|
92
92
|
requirement: !ruby/object:Gem::Requirement
|
@@ -783,9 +783,9 @@ licenses:
|
|
783
783
|
- BSD-3-Clause
|
784
784
|
metadata:
|
785
785
|
bug_tracker_uri: https://github.com/spree/spree/issues
|
786
|
-
changelog_uri: https://github.com/spree/spree/releases/tag/v4.2.0.
|
786
|
+
changelog_uri: https://github.com/spree/spree/releases/tag/v4.2.0.rc3
|
787
787
|
documentation_uri: https://guides.spreecommerce.org/
|
788
|
-
source_code_uri: https://github.com/spree/spree/tree/v4.2.0.
|
788
|
+
source_code_uri: https://github.com/spree/spree/tree/v4.2.0.rc3
|
789
789
|
post_install_message:
|
790
790
|
rdoc_options: []
|
791
791
|
require_paths:
|
@@ -802,7 +802,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
802
802
|
version: 1.3.1
|
803
803
|
requirements:
|
804
804
|
- none
|
805
|
-
rubygems_version: 3.1.
|
805
|
+
rubygems_version: 3.1.4
|
806
806
|
signing_key:
|
807
807
|
specification_version: 4
|
808
808
|
summary: Frontend e-commerce functionality for the Spree project.
|