spree_frontend 4.2.0.beta → 4.2.0.rc5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/images/info.svg +7 -0
- data/app/assets/javascripts/spree/frontend.js +1 -1
- data/app/assets/javascripts/spree/frontend/cart.js +23 -1
- data/app/assets/javascripts/spree/frontend/checkout/address.js +60 -43
- data/app/assets/javascripts/spree/frontend/checkout/payment.js +19 -17
- data/app/assets/javascripts/spree/frontend/checkout/shipment.js +15 -2
- data/app/assets/javascripts/spree/frontend/views/spree/product/related.js +2 -2
- data/app/assets/javascripts/spree/frontend/views/spree/products/cart_form.js +1 -1
- data/app/assets/stylesheets/spree/frontend.css +0 -1
- data/app/assets/stylesheets/spree/frontend/components-custom/inputs.scss +6 -0
- data/app/assets/stylesheets/spree/frontend/functions.scss +1 -0
- data/app/assets/stylesheets/spree/frontend/helpers/spree/frontend_helper.scss +7 -0
- data/app/assets/stylesheets/spree/frontend/variables/bootstrap-overrides.scss +1 -2
- data/app/assets/stylesheets/spree/frontend/views/spree/checkout/confirm.scss +27 -26
- data/app/assets/stylesheets/spree/frontend/views/spree/checkout/edit.scss +6 -4
- data/app/assets/stylesheets/spree/frontend/views/spree/orders/show.scss +3 -0
- data/app/assets/stylesheets/spree/frontend/views/spree/users/show.scss +0 -6
- data/app/controllers/concerns/spree/checkout/address_book.rb +9 -7
- data/app/controllers/spree/addresses_controller.rb +1 -0
- data/app/controllers/spree/currency_controller.rb +2 -2
- data/app/controllers/spree/home_controller.rb +5 -1
- data/app/controllers/spree/products_controller.rb +32 -15
- data/app/controllers/spree/store_controller.rb +0 -12
- data/app/controllers/spree/taxons_controller.rb +4 -3
- data/app/helpers/spree/addresses_helper.rb +10 -6
- data/app/helpers/spree/cache_helper.rb +7 -0
- data/app/helpers/spree/frontend_helper.rb +19 -7
- data/app/helpers/spree/navigation_helper.rb +1 -1
- data/app/models/spree/frontend_configuration.rb +2 -1
- data/app/views/kaminari/twitter-bootstrap-4/_first_page.html.erb +2 -2
- data/app/views/kaminari/twitter-bootstrap-4/_gap.html.erb +2 -2
- data/app/views/kaminari/twitter-bootstrap-4/_last_page.html.erb +2 -2
- data/app/views/kaminari/twitter-bootstrap-4/_next_page.html.erb +2 -2
- data/app/views/kaminari/twitter-bootstrap-4/_page.html.erb +2 -2
- data/app/views/kaminari/twitter-bootstrap-4/_paginator.html.erb +2 -2
- data/app/views/kaminari/twitter-bootstrap-4/_prev_page.html.erb +2 -2
- data/app/views/spree/address/_form.html.erb +15 -16
- data/app/views/spree/addresses/_form.html.erb +1 -1
- data/app/views/spree/addresses/edit.html.erb +13 -8
- data/app/views/spree/addresses/new.html.erb +7 -3
- data/app/views/spree/checkout/_address.html.erb +14 -13
- data/app/views/spree/checkout/_confirm.html.erb +1 -33
- data/app/views/spree/checkout/_credit_card.html.erb +2 -2
- data/app/views/spree/checkout/_delivery_informations.html.erb +43 -36
- data/app/views/spree/checkout/_payment.html.erb +1 -20
- data/app/views/spree/checkout/_payment_sources.html.erb +17 -0
- data/app/views/spree/checkout/_summary.html.erb +3 -5
- data/app/views/spree/checkout/payment/_gateway.html.erb +1 -1
- data/app/views/spree/home/index.html.erb +21 -22
- data/app/views/spree/orders/_coupon_code.html.erb +2 -3
- data/app/views/spree/orders/_line_item.html.erb +1 -1
- data/app/views/spree/orders/_line_item_data.html.erb +2 -2
- data/app/views/spree/orders/edit.html.erb +2 -3
- data/app/views/spree/orders/show.html.erb +1 -71
- data/app/views/spree/products/_cart_form.html.erb +4 -7
- data/app/views/spree/products/_color_option_type.html.erb +1 -2
- data/app/views/spree/products/_filters_desktop.html.erb +1 -2
- data/app/views/spree/products/_gallery.html.erb +4 -6
- data/app/views/spree/products/_gallery_modal.html.erb +3 -5
- data/app/views/spree/products/_option_type.html.erb +1 -2
- data/app/views/spree/products/_sort_mobile.html.erb +4 -4
- data/app/views/spree/products/related.html.erb +11 -5
- data/app/views/spree/products/show.html.erb +1 -5
- data/app/views/spree/shared/_carousel_4_products.html.erb +6 -12
- data/app/views/spree/shared/_change_store.html.erb +7 -7
- data/app/views/spree/shared/_checkout_header.html.erb +1 -1
- data/app/views/spree/shared/_color_select.html.erb +3 -3
- data/app/views/spree/shared/_delete_address_popup.html.erb +1 -2
- data/app/views/spree/shared/_error_messages.html.erb +2 -2
- data/app/views/spree/shared/_footer.html.erb +3 -3
- data/app/views/spree/shared/_head.html.erb +3 -2
- data/app/views/spree/shared/_header.html.erb +1 -1
- data/app/views/spree/shared/_main_nav_bar.html.erb +1 -1
- data/app/views/spree/shared/_mobile_change_store.html.erb +3 -3
- data/app/views/spree/shared/_mobile_navigation.html.erb +1 -1
- data/app/views/spree/shared/_nav_bar.html.erb +4 -4
- data/app/views/spree/shared/_no_product_available.html.erb +1 -1
- data/app/views/spree/shared/_option_values.html.erb +1 -1
- data/app/views/spree/shared/_order_details.html.erb +117 -174
- data/app/views/spree/shared/_payment.html.erb +2 -2
- data/app/views/spree/shared/_payment_sources.html.erb +2 -2
- data/app/views/spree/shared/_product_added_modal.html.erb +1 -1
- data/app/views/spree/shared/_search.html.erb +1 -2
- data/app/views/spree/shared/_translations.html.erb +6 -6
- data/app/views/spree/shared/carousel/_single.html.erb +6 -11
- data/app/views/spree/shared/carousel/_thumbnails.html.erb +5 -11
- data/app/views/spree/users/_address.html.erb +15 -19
- data/app/views/spree/users/_address_controls.html.erb +10 -0
- data/app/views/spree/users/show.html.erb +15 -13
- data/config/initializers/canonical_rails.rb +1 -1
- data/config/routes.rb +0 -1
- data/spree_frontend.gemspec +2 -2
- metadata +20 -20
- data/app/assets/stylesheets/spree/frontend/address_book.scss +0 -8
- data/app/views/spree/products/_vendor_info.html.erb +0 -13
- data/app/views/spree/shared/forbidden.html.erb +0 -0
- data/app/views/spree/shared/unauthorized.html.erb +0 -0
@@ -160,8 +160,11 @@
|
|
160
160
|
.nav-item {
|
161
161
|
color: theme-color('info');
|
162
162
|
font-weight: 600;
|
163
|
+
max-width: 70px;
|
164
|
+
text-align: center;
|
163
165
|
@include media-breakpoint-up(sm) {
|
164
166
|
font-weight: 500;
|
167
|
+
max-width: 100px;
|
165
168
|
}
|
166
169
|
a {
|
167
170
|
color: inherit;
|
@@ -494,9 +497,6 @@
|
|
494
497
|
font-size: font-px-to-rem(16px);
|
495
498
|
}
|
496
499
|
}
|
497
|
-
.delete-address-img {
|
498
|
-
color: $primary-color;
|
499
|
-
}
|
500
500
|
}
|
501
501
|
|
502
502
|
#checkout-summary {
|
@@ -508,7 +508,8 @@
|
|
508
508
|
height: 100%;
|
509
509
|
padding: 0;
|
510
510
|
max-width: 380px;
|
511
|
-
|
511
|
+
margin-right: 0;
|
512
|
+
margin-left: auto;
|
512
513
|
}
|
513
514
|
}
|
514
515
|
|
@@ -517,3 +518,4 @@
|
|
517
518
|
}
|
518
519
|
}
|
519
520
|
}
|
521
|
+
|
@@ -32,21 +32,23 @@ module Spree
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def normalize_addresses
|
35
|
-
return unless params[:state] == 'address' && @order.bill_address_id
|
35
|
+
return unless params[:state] == 'address' && @order.bill_address_id
|
36
36
|
|
37
|
-
|
38
|
-
|
37
|
+
if @order.checkout_steps.include?('delivery')
|
38
|
+
return unless @order.ship_address_id
|
39
|
+
end
|
39
40
|
|
40
41
|
bill_address = @order.bill_address
|
41
42
|
ship_address = @order.ship_address
|
43
|
+
|
44
|
+
if params[:save_user_address].present? && try_spree_current_user.present?
|
45
|
+
[bill_address, ship_address].each { |address| address&.update_attribute(:user_id, try_spree_current_user&.id) }
|
46
|
+
end
|
47
|
+
|
42
48
|
if @order.bill_address_id != @order.ship_address_id && bill_address == ship_address
|
43
49
|
@order.update_column(:bill_address_id, ship_address.id)
|
44
50
|
bill_address.destroy
|
45
|
-
elsif params[:save_user_address]
|
46
|
-
bill_address.update_attribute(:user_id, try_spree_current_user&.id)
|
47
51
|
end
|
48
|
-
|
49
|
-
ship_address.update_attribute(:user_id, try_spree_current_user&.id) if params[:save_user_address]
|
50
52
|
end
|
51
53
|
end
|
52
54
|
end
|
@@ -37,6 +37,7 @@ module Spree
|
|
37
37
|
else
|
38
38
|
new_address = @address.clone
|
39
39
|
new_address.attributes = address_params
|
40
|
+
new_address.user_id = @address.user_id
|
40
41
|
@address.update_attribute(:deleted_at, Time.current)
|
41
42
|
if new_address.save
|
42
43
|
flash[:notice] = Spree.t(:successfully_updated, scope: :address_book)
|
@@ -3,8 +3,8 @@ 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&.
|
7
|
-
session[:currency] = params[:currency] if Spree::Config[:
|
6
|
+
current_order&.update(currency: @currency.iso_code)
|
7
|
+
session[:currency] = params[:currency] if Spree::Config[:show_store_selector]
|
8
8
|
respond_to do |format|
|
9
9
|
format.json { render json: !@currency.nil? }
|
10
10
|
format.html do
|
@@ -1,9 +1,13 @@
|
|
1
1
|
module Spree
|
2
2
|
class HomeController < Spree::StoreController
|
3
|
+
include Spree::CacheHelper
|
4
|
+
|
3
5
|
respond_to :html
|
4
6
|
|
5
7
|
def index
|
6
|
-
|
8
|
+
if http_cache_enabled?
|
9
|
+
fresh_when etag: store_etag, last_modified: store_last_modified, public: true
|
10
|
+
end
|
7
11
|
end
|
8
12
|
end
|
9
13
|
end
|
@@ -2,6 +2,7 @@ module Spree
|
|
2
2
|
class ProductsController < Spree::StoreController
|
3
3
|
include Spree::ProductsHelper
|
4
4
|
include Spree::FrontendHelper
|
5
|
+
include Spree::CacheHelper
|
5
6
|
|
6
7
|
before_action :load_product, only: [:show, :related]
|
7
8
|
before_action :load_taxon, only: :index
|
@@ -12,16 +13,9 @@ module Spree
|
|
12
13
|
@searcher = build_searcher(params.merge(include_images: true, current_store_id: current_store.id))
|
13
14
|
@products = @searcher.retrieve_products
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
store_etag,
|
19
|
-
last_modified&.to_i,
|
20
|
-
available_option_types_cache_key,
|
21
|
-
filtering_params_cache_key
|
22
|
-
]
|
23
|
-
|
24
|
-
fresh_when etag: etag, last_modified: last_modified, public: true
|
16
|
+
if http_cache_enabled?
|
17
|
+
fresh_when etag: etag_index, last_modified: last_modified_index, public: true
|
18
|
+
end
|
25
19
|
end
|
26
20
|
|
27
21
|
def show
|
@@ -29,7 +23,7 @@ module Spree
|
|
29
23
|
|
30
24
|
@taxon = params[:taxon_id].present? ? Spree::Taxon.find(params[:taxon_id]) : @product.taxons.first
|
31
25
|
|
32
|
-
if stale?(etag:
|
26
|
+
if !http_cache_enabled? || stale?(etag: etag_show, last_modified: last_modified_show, public: true)
|
33
27
|
@product_summary = Spree::ProductSummaryPresenter.new(@product).call
|
34
28
|
@product_properties = @product.product_properties.includes(:property)
|
35
29
|
@product_price = @product.price_in(current_currency).amount
|
@@ -39,9 +33,7 @@ module Spree
|
|
39
33
|
end
|
40
34
|
|
41
35
|
def related
|
42
|
-
|
43
|
-
|
44
|
-
if @related_products.any?
|
36
|
+
if product_relation_types.any?
|
45
37
|
render template: 'spree/products/related', layout: false
|
46
38
|
else
|
47
39
|
head :no_content
|
@@ -96,7 +88,16 @@ module Spree
|
|
96
88
|
end
|
97
89
|
end
|
98
90
|
|
99
|
-
def
|
91
|
+
def etag_index
|
92
|
+
[
|
93
|
+
store_etag,
|
94
|
+
last_modified_index,
|
95
|
+
available_option_types_cache_key,
|
96
|
+
filtering_params_cache_key
|
97
|
+
]
|
98
|
+
end
|
99
|
+
|
100
|
+
def etag_show
|
100
101
|
[
|
101
102
|
store_etag,
|
102
103
|
@product,
|
@@ -105,5 +106,21 @@ module Spree
|
|
105
106
|
@product.possible_promotions.maximum(:updated_at),
|
106
107
|
]
|
107
108
|
end
|
109
|
+
|
110
|
+
alias product_etag etag_show
|
111
|
+
|
112
|
+
def last_modified_index
|
113
|
+
products_last_modified = @products.maximum(:updated_at)&.utc if @products.respond_to?(:maximum)
|
114
|
+
current_store_last_modified = current_store.updated_at.utc
|
115
|
+
|
116
|
+
[products_last_modified, current_store_last_modified].compact.max
|
117
|
+
end
|
118
|
+
|
119
|
+
def last_modified_show
|
120
|
+
product_last_modified = @product.updated_at.utc
|
121
|
+
current_store_last_modified = current_store.updated_at.utc
|
122
|
+
|
123
|
+
[product_last_modified, current_store_last_modified].compact.max
|
124
|
+
end
|
108
125
|
end
|
109
126
|
end
|
@@ -4,14 +4,6 @@ module Spree
|
|
4
4
|
|
5
5
|
skip_before_action :verify_authenticity_token, only: :ensure_cart, raise: false
|
6
6
|
|
7
|
-
def forbidden
|
8
|
-
render 'spree/shared/forbidden', layout: Spree::Config[:layout], status: 403
|
9
|
-
end
|
10
|
-
|
11
|
-
def unauthorized
|
12
|
-
render 'spree/shared/unauthorized', layout: Spree::Config[:layout], status: 401
|
13
|
-
end
|
14
|
-
|
15
7
|
def account_link
|
16
8
|
render partial: 'spree/shared/link_to_account'
|
17
9
|
fresh_when(try_spree_current_user)
|
@@ -39,10 +31,6 @@ module Spree
|
|
39
31
|
Spree::Frontend::Config[:locale]
|
40
32
|
end
|
41
33
|
|
42
|
-
def store_locale
|
43
|
-
current_store.default_locale
|
44
|
-
end
|
45
|
-
|
46
34
|
def store_etag
|
47
35
|
[
|
48
36
|
current_store,
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Spree
|
2
2
|
class TaxonsController < Spree::StoreController
|
3
3
|
include Spree::FrontendHelper
|
4
|
+
include Spree::CacheHelper
|
4
5
|
helper 'spree/products'
|
5
6
|
|
6
7
|
before_action :load_taxon
|
@@ -8,15 +9,15 @@ module Spree
|
|
8
9
|
respond_to :html
|
9
10
|
|
10
11
|
def show
|
11
|
-
if stale?(etag: etag, last_modified: last_modified, public: true)
|
12
|
+
if !http_cache_enabled? || stale?(etag: etag, last_modified: last_modified, public: true)
|
12
13
|
load_products
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
16
17
|
def product_carousel
|
17
|
-
if stale?(etag: carousel_etag, last_modified: last_modified, public: true)
|
18
|
+
if !http_cache_enabled? || stale?(etag: carousel_etag, last_modified: last_modified, public: true)
|
18
19
|
load_products
|
19
|
-
if @products.any?
|
20
|
+
if @products.reload.any?
|
20
21
|
render template: 'spree/taxons/product_carousel', layout: false
|
21
22
|
else
|
22
23
|
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
|
@@ -16,7 +16,7 @@ module Spree
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def stores
|
19
|
-
@stores ||= Spree::Store.includes(:default_country)
|
19
|
+
@stores ||= Spree::Store.includes(:default_country).order(:id)
|
20
20
|
end
|
21
21
|
|
22
22
|
def store_currency_symbol(store)
|
@@ -166,7 +166,13 @@ module Spree
|
|
166
166
|
|
167
167
|
def plp_and_carousel_image(product, image_class = '')
|
168
168
|
image = default_image_for_product_or_variant(product)
|
169
|
-
|
169
|
+
|
170
|
+
image_url = if image.present?
|
171
|
+
main_app.url_for(image.url('plp'))
|
172
|
+
else
|
173
|
+
asset_path('noimage/plp.png')
|
174
|
+
end
|
175
|
+
|
170
176
|
image_style = image&.style(:plp)
|
171
177
|
|
172
178
|
lazy_image(
|
@@ -242,7 +248,7 @@ module Spree
|
|
242
248
|
end
|
243
249
|
|
244
250
|
def price_filter_values
|
245
|
-
[
|
251
|
+
@price_filter_values ||= [
|
246
252
|
"#{I18n.t('activerecord.attributes.spree/product.less_than')} #{formatted_price(50)}",
|
247
253
|
"#{formatted_price(50)} - #{formatted_price(100)}",
|
248
254
|
"#{formatted_price(101)} - #{formatted_price(150)}",
|
@@ -268,12 +274,12 @@ module Spree
|
|
268
274
|
end
|
269
275
|
|
270
276
|
def available_option_types_cache_key
|
271
|
-
@available_option_types_cache_key ||= Spree::OptionType.maximum(:updated_at)&.utc&.to_i
|
277
|
+
@available_option_types_cache_key ||= Spree::OptionType.filterable.maximum(:updated_at)&.utc&.to_i
|
272
278
|
end
|
273
279
|
|
274
280
|
def available_option_types
|
275
281
|
@available_option_types ||= Rails.cache.fetch("available-option-types/#{available_option_types_cache_key}") do
|
276
|
-
Spree::OptionType.includes(:option_values).to_a
|
282
|
+
Spree::OptionType.includes(:option_values).filterable.to_a
|
277
283
|
end
|
278
284
|
@available_option_types
|
279
285
|
end
|
@@ -289,7 +295,11 @@ module Spree
|
|
289
295
|
end
|
290
296
|
|
291
297
|
def checkout_available_payment_methods
|
292
|
-
@order.available_payment_methods(current_store)
|
298
|
+
@checkout_available_payment_methods ||= @order.available_payment_methods(current_store)
|
299
|
+
end
|
300
|
+
|
301
|
+
def color_option_type_name
|
302
|
+
@color_option_type_name ||= Spree::OptionType.color&.name
|
293
303
|
end
|
294
304
|
|
295
305
|
private
|
@@ -308,7 +318,9 @@ module Spree
|
|
308
318
|
end
|
309
319
|
end
|
310
320
|
|
311
|
-
def checkout_edit_link(step = 'address')
|
321
|
+
def checkout_edit_link(step = 'address', order = @order)
|
322
|
+
return if order.complete?
|
323
|
+
|
312
324
|
classes = 'align-text-bottom checkout-confirm-delivery-informations-link'
|
313
325
|
|
314
326
|
link_to spree.checkout_state_path(step), class: classes, method: :get do
|
@@ -3,7 +3,7 @@ require 'digest'
|
|
3
3
|
module Spree
|
4
4
|
module NavigationHelper
|
5
5
|
def spree_navigation_data
|
6
|
-
SpreeStorefrontConfig.dig(current_store.code, :navigation) || SpreeStorefrontConfig.dig(:default, :navigation) || []
|
6
|
+
@spree_navigation_data ||= SpreeStorefrontConfig.dig(current_store.code, :navigation) || SpreeStorefrontConfig.dig(:default, :navigation) || []
|
7
7
|
# safeguard for older Spree installs that don't have spree_navigation initializer
|
8
8
|
# or spree.yml file present
|
9
9
|
rescue
|
@@ -1,7 +1,8 @@
|
|
1
1
|
module Spree
|
2
2
|
class FrontendConfiguration < Preferences::Configuration
|
3
3
|
preference :coupon_codes_enabled, :boolean, default: true # Determines if we show coupon code form at cart and checkout
|
4
|
-
preference :
|
4
|
+
preference :http_cache_enabled, :boolean, default: true
|
5
|
+
preference :locale, :string, default: nil
|
5
6
|
preference :products_filters, :array, default: %w(keywords price sort_by)
|
6
7
|
preference :additional_filters_partials, :array, default: %w()
|
7
8
|
preference :remember_me_enabled, :boolean, default: true
|
@@ -4,8 +4,8 @@
|
|
4
4
|
current_page: a page object for the currently displayed page
|
5
5
|
total_pages: total number of pages
|
6
6
|
per_page: number of items to fetch per page
|
7
|
-
remote: data-remote
|
8
|
-
|
7
|
+
remote: data-remote -%>
|
8
|
+
|
9
9
|
<% unless current_page.first? %>
|
10
10
|
<li class="first page-item">
|
11
11
|
<%= link_to_unless current_page.first?, inline_svg_tag('pagination-double-arrow-right.svg', size: '13px*16px', class: 'spree-icon-arrow-left'), url, remote: remote, class: 'page-link', 'aria-label': 'First page' %>
|
@@ -3,8 +3,8 @@
|
|
3
3
|
current_page: a page object for the currently displayed page
|
4
4
|
total_pages: total number of pages
|
5
5
|
per_page: number of items to fetch per page
|
6
|
-
remote: data-remote
|
7
|
-
|
6
|
+
remote: data-remote -%>
|
7
|
+
|
8
8
|
<li class="page gap disabled page-item d-none d-lg-flex">
|
9
9
|
<a href="#" onclick="return false;" class="page-link">
|
10
10
|
<%= raw(t 'views.pagination.truncate') %>
|