spree_frontend 4.3.0 → 4.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +192 -0
- data/.codeclimate.yml +36 -0
- data/.deepsource.toml +19 -0
- data/.editorconfig +22 -0
- data/.eslintignore +7 -0
- data/.eslintrc +36 -0
- data/.gem_release.yml +7 -0
- data/.github/CONTRIBUTING.md +1 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +47 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- data/.github/ISSUE_TEMPLATE.md +39 -0
- data/.github/dependabot.yml +32 -0
- data/.gitignore +58 -0
- data/.rubocop.yml +197 -0
- data/.solargraph.yml +20 -0
- data/.stylelintignore +4 -0
- data/.stylelintrc +6 -0
- data/CODE_OF_CONDUCT.md +22 -0
- data/Gemfile +58 -3
- data/LICENSE +1 -1
- data/README.md +88 -0
- data/SECURITY.md +1 -0
- 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 +4 -4
- data/app/controllers/spree/checkout_controller.rb +2 -2
- data/app/controllers/spree/locale_controller.rb +3 -2
- data/app/controllers/spree/orders_controller.rb +1 -1
- data/app/controllers/spree/store_controller.rb +42 -1
- data/app/helpers/spree/frontend_helper.rb +32 -8
- data/app/helpers/spree/navigation_helper.rb +2 -2
- data/app/helpers/spree/products_filters_helper.rb +1 -1
- data/app/helpers/spree/store_helper.rb +1 -1
- data/app/services/spree/build_localized_redirect_url.rb +101 -0
- data/app/views/spree/checkout/_delivery.html.erb +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/_description.html.erb +1 -1
- 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 +3 -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/_paths.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/config/routes.rb +4 -4
- 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 -7
- data/lib/spree/frontend/version.rb +9 -0
- data/lib/spree/frontend.rb +2 -1
- data/license.md +13 -0
- data/spree_frontend.gemspec +5 -4
- metadata +58 -22
- data/app/models/spree/frontend_configuration.rb +0 -10
- data/app/views/spree/shared/_taxonomies.html.erb +0 -16
@@ -5,9 +5,10 @@
|
|
5
5
|
<%== meta_robots %>
|
6
6
|
<%= canonical_tag(current_store.url) %>
|
7
7
|
<%= favicon_link_tag(spree_favicon_path) %>
|
8
|
-
<%= stylesheet_link_tag 'spree/frontend/all', media: 'screen',
|
8
|
+
<%= stylesheet_link_tag 'spree/frontend/all', media: 'screen', data: { turbo_track: 'reload' } %>
|
9
9
|
<%= csrf_meta_tags %>
|
10
10
|
<%= render 'spree/shared/paths' %>
|
11
11
|
<%= render 'spree/shared/locale_and_currency' %>
|
12
|
-
<%= javascript_include_tag
|
12
|
+
<%= javascript_include_tag "application", defer: true, data: { turbo_track: 'reload' } %>
|
13
|
+
<%= javascript_include_tag 'spree/frontend/all', defer: true, data: { turbo_track: 'reload' } %>
|
13
14
|
<%= yield :head %>
|
@@ -8,7 +8,7 @@
|
|
8
8
|
<% line_item.variant.option_values.sort { |ov| ov.option_type.position }.each do |ov| %>
|
9
9
|
<li>
|
10
10
|
<% # TODO: rework option values so options_text method can be used here %>
|
11
|
-
<%= "#{ov.option_type.presentation}: #{ov.
|
11
|
+
<%= "#{ov.option_type.presentation}: #{ov.presentation}" %>
|
12
12
|
</li>
|
13
13
|
<% end %>
|
14
14
|
</ul>
|
@@ -1,6 +1,8 @@
|
|
1
1
|
<% if try_spree_current_user %>
|
2
2
|
<%= link_to Spree.t(:my_account).upcase, spree.account_path, class: 'dropdown-item' if spree.respond_to?(:account_path) %>
|
3
|
-
|
3
|
+
<% if spree.respond_to?(:admin_orders_path) %>
|
4
|
+
<%= link_to Spree.t('nav_bar.admin_panel'), spree.admin_orders_path(locale: nil), class: 'dropdown-item text-uppercase' if try_spree_current_user.has_spree_role?(:admin) %>
|
5
|
+
<% end %>
|
4
6
|
<%= link_to Spree.t(:logout).upcase, spree_logout_path, class: 'dropdown-item', method: :get if defined?(spree_logout_path) %>
|
5
7
|
<% else %>
|
6
8
|
<%= link_to Spree.t(:login).upcase, spree_login_path, class: 'dropdown-item' if defined?(spree_login_path) %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<div class="col-lg-11 mx-auto">
|
2
2
|
<h3 class="spree-mb-large spree-mt-large spree-header"><%= Spree.t(:log_in_to_continue) %></h3>
|
3
|
-
<%= form_for Spree.user_class.new, as: :spree_user, url: spree_login_path do |f| %>
|
3
|
+
<%= form_for Spree.user_class.new, as: :spree_user, url: spree_login_path, data: { turbo: false } do |f| %>
|
4
4
|
<div id="password-credentials" class="mb-4">
|
5
5
|
<div class="form-group mb-4">
|
6
6
|
<p class="form-group checkout-content-inner-field">
|
@@ -44,7 +44,7 @@
|
|
44
44
|
<%= spree_nav_link_tag(promo_banner, { class: "dropdown-item" }) do %>
|
45
45
|
<div class="category-image text-center my-4 mx-3">
|
46
46
|
<% if promo_banner.icon.present? %>
|
47
|
-
<%= image_tag main_app.
|
47
|
+
<%= image_tag main_app.cdn_image_url(promo_banner.icon.attachment), alt: promo_banner.icon.alt ,title: promo_banner.subtitle %>
|
48
48
|
<% end %>
|
49
49
|
<div class="category-box">
|
50
50
|
<div class="category-box-small-text">
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<ul id="nav-bar" class="nav align-items-center d-flex flex-nowrap justify-content-end navbar-right" data-turbo-permanent data-
|
1
|
+
<ul id="nav-bar" class="nav align-items-center d-flex flex-nowrap justify-content-end navbar-right" data-turbo-permanent data-turbo-permanent>
|
2
2
|
<li>
|
3
3
|
<div class="navbar-right-search-menu">
|
4
4
|
<button type="button" class="navbar-right-dropdown-toggle search-icons" aria-label="<%= Spree.t('nav_bar.show_search') %>">
|
@@ -86,7 +86,7 @@
|
|
86
86
|
<% item.variant.option_values.sort { |ov| ov.option_type.position }.each do |ov| %>
|
87
87
|
<li>
|
88
88
|
<% # TODO: rework option values so options_text method can be used here %>
|
89
|
-
<%= "#{ov.option_type.presentation}: #{ov.
|
89
|
+
<%= "#{ov.option_type.presentation}: #{ov.presentation}" %>
|
90
90
|
</li>
|
91
91
|
<% end %>
|
92
92
|
</ul>
|
@@ -2,7 +2,7 @@
|
|
2
2
|
SpreePaths = <%==
|
3
3
|
{
|
4
4
|
mounted_at: Rails.application.routes.url_helpers.spree_path(trailing_slash: true),
|
5
|
-
admin: Spree.admin_path.gsub(/\A(\/)?(.*[^\/])(\/)?\z/, '\\2/')
|
5
|
+
admin: Spree.respond_to?(:admin_path) ? Spree.admin_path.gsub(/\A(\/)?(.*[^\/])(\/)?\z/, '\\2/') : '/admin'
|
6
6
|
}.to_json
|
7
7
|
%>
|
8
8
|
</script>
|
@@ -47,7 +47,7 @@
|
|
47
47
|
data-variant-id="<%= image.viewable_id %>">
|
48
48
|
<div class="product-carousel-item-squared <%= 'product-carousel-item-squared-only' if images.length == 1 %>">
|
49
49
|
<% image_attrs = {
|
50
|
-
src: main_app.
|
50
|
+
src: main_app.cdn_image_url(image.url(zoomed ? :zoomed : :large)),
|
51
51
|
alt: image.alt || @product.name,
|
52
52
|
class: "d-block w-100",
|
53
53
|
width: zoomed ? 650 : 475,
|
@@ -66,7 +66,7 @@
|
|
66
66
|
data-slide-to="<%= imageIndex %>"
|
67
67
|
class="product-carousel-indicators-indicator product-carousel-indicators-indicator--visible<%= ' active' if imageIndex == 0 %>">
|
68
68
|
<%= lazy_image(
|
69
|
-
src: main_app.
|
69
|
+
src: main_app.cdn_image_url(image.url(:pdp_thumbnail)),
|
70
70
|
class: 'd-block w-100',
|
71
71
|
alt: image.alt || @product.name,
|
72
72
|
width: image.style(:pdp_thumbnail)[:width],
|
@@ -20,7 +20,7 @@
|
|
20
20
|
data-variant-is-master="<%= image.viewable_id == @product.master.id %>"
|
21
21
|
data-variant-id="<%= image.viewable_id %>">
|
22
22
|
<%= lazy_image(
|
23
|
-
src: main_app.
|
23
|
+
src: main_app.cdn_image_url(image.url(:pdp_thumbnail)),
|
24
24
|
class: 'd-block w-100',
|
25
25
|
alt: image.alt || @product.name,
|
26
26
|
width: 57,
|
@@ -10,30 +10,30 @@
|
|
10
10
|
<div class="col-12 homepage-hero-image position-relative p-0 <%= section_padding %>">
|
11
11
|
|
12
12
|
<div class="bg-light" style="--aspect-ratio:12/5;">
|
13
|
-
<% if section.image_one
|
13
|
+
<% if section.image_one&.attachment&.attached? %>
|
14
14
|
|
15
15
|
<!-- SM to MD -->
|
16
16
|
<img class="d-block d-md-none lazyload"
|
17
|
-
data-src="<%= main_app.
|
18
|
-
data-srcset="<%= main_app.
|
17
|
+
data-src="<%= main_app.cdn_image_url(section.img_one_sm) %>"
|
18
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_one_sm) %>"
|
19
19
|
alt="<%= section&.title %>">
|
20
20
|
|
21
21
|
<!-- MD to LG -->
|
22
22
|
<img class="d-none d-md-block d-lg-none lazyload"
|
23
|
-
data-src="<%= main_app.
|
24
|
-
data-srcset="<%= main_app.
|
23
|
+
data-src="<%= main_app.cdn_image_url(section.img_one_md) %>"
|
24
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_one_md) %>"
|
25
25
|
alt="<%= section&.title %>">
|
26
26
|
|
27
27
|
<!-- LG to XL -->
|
28
28
|
<img class="d-none d-lg-block d-xl-none lazyload"
|
29
|
-
data-src="<%= main_app.
|
30
|
-
data-srcset="<%= main_app.
|
29
|
+
data-src="<%= main_app.cdn_image_url(section.img_one_lg) %>"
|
30
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_one_lg) %>"
|
31
31
|
alt="<%= section&.title %>">
|
32
32
|
|
33
33
|
<!-- XL UP -->
|
34
34
|
<img class="d-none d-xl-block lazyload"
|
35
|
-
data-src="<%= main_app.
|
36
|
-
data-srcset="<%= main_app.
|
35
|
+
data-src="<%= main_app.cdn_image_url(section.img_one_xl) %>"
|
36
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_one_xl) %>"
|
37
37
|
alt="<%= section&.title %>">
|
38
38
|
|
39
39
|
<% else %>
|
@@ -64,24 +64,24 @@
|
|
64
64
|
<div class="col-12">
|
65
65
|
|
66
66
|
<%= link_to link_one, class: link_one_classes, style: '--aspect-ratio:18/13;' do %>
|
67
|
-
<% if section.image_one
|
67
|
+
<% if section.image_one&.attachment&.attached? && section.image_one&.attachment&.variable? %>
|
68
68
|
|
69
69
|
<!-- XS to MD -->
|
70
70
|
<img class="d-md-none lazyload"
|
71
|
-
data-src="<%= main_app.
|
72
|
-
data-srcset="<%= main_app.
|
71
|
+
data-src="<%= main_app.cdn_image_url(section.img_one_md) %>"
|
72
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_one_md) %>"
|
73
73
|
alt="<%= section&.title_one %>">
|
74
74
|
|
75
75
|
<!-- MD to XL -->
|
76
76
|
<img class="d-none d-md-block d-xl-none lazyload"
|
77
|
-
data-src="<%= main_app.
|
78
|
-
data-srcset="<%= main_app.
|
77
|
+
data-src="<%= main_app.cdn_image_url(section.img_one_lg) %>"
|
78
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_one_lg) %>"
|
79
79
|
alt="<%= section&.title_one %>">
|
80
80
|
|
81
81
|
<!-- XL UP -->
|
82
82
|
<img class="d-none d-xl-block lazyload"
|
83
|
-
data-src="<%= main_app.
|
84
|
-
data-srcset="<%= main_app.
|
83
|
+
data-src="<%= main_app.cdn_image_url(section.img_one_xl) %>"
|
84
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_one_xl) %>"
|
85
85
|
alt="<%= section&.title_one %>">
|
86
86
|
<% else %>
|
87
87
|
<%= icon( name: 'card-image',
|
@@ -102,24 +102,24 @@
|
|
102
102
|
<div class="col-12">
|
103
103
|
|
104
104
|
<%= link_to link_three, class: link_three_classes, style: '--aspect-ratio:18/13;' do %>
|
105
|
-
<% if section.image_three
|
105
|
+
<% if section.image_three&.attachment&.attached? && section.image_three&.attachment&.variable? %>
|
106
106
|
|
107
107
|
<!-- XS to MD -->
|
108
108
|
<img class="d-md-none lazyload"
|
109
|
-
data-src="<%= main_app.
|
110
|
-
data-srcset="<%= main_app.
|
109
|
+
data-src="<%= main_app.cdn_image_url(section.img_three_md) %>"
|
110
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_three_md) %>"
|
111
111
|
alt="<%= section&.title_three %>">
|
112
112
|
|
113
113
|
<!-- MD to XL -->
|
114
114
|
<img class="d-none d-md-block d-xl-none lazyload"
|
115
|
-
data-src="<%= main_app.
|
116
|
-
data-srcset="<%= main_app.
|
115
|
+
data-src="<%= main_app.cdn_image_url(section.img_three_lg) %>"
|
116
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_three_lg) %>"
|
117
117
|
alt="<%= section&.title_three %>">
|
118
118
|
|
119
119
|
<!-- XL UP -->
|
120
120
|
<img class="d-none d-xl-block lazyload"
|
121
|
-
data-src="<%= main_app.
|
122
|
-
data-srcset="<%= main_app.
|
121
|
+
data-src="<%= main_app.cdn_image_url(section.img_three_xl) %>"
|
122
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_three_xl) %>"
|
123
123
|
alt="<%= section&.title_three %>">
|
124
124
|
<% else %>
|
125
125
|
<%= icon( name: 'card-image',
|
@@ -139,24 +139,24 @@
|
|
139
139
|
<!-- Right Block TALL -->
|
140
140
|
<div class="col-6 <%= section_two_padding %>">
|
141
141
|
<%= link_to link_two, class: link_two_classes, style: '--aspect-ratio:27/40;' do %>
|
142
|
-
<% if section.image_two
|
142
|
+
<% if section.image_two&.attachment&.attached? && section.image_two&.attachment&.variable? %>
|
143
143
|
|
144
144
|
<!-- XS to MD -->
|
145
145
|
<img class="d-md-none lazyload"
|
146
|
-
data-src="<%= main_app.
|
147
|
-
data-srcset="<%= main_app.
|
146
|
+
data-src="<%= main_app.cdn_image_url(section.img_two_md) %>"
|
147
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_two_md) %>"
|
148
148
|
alt="<%= section&.title_two %>">
|
149
149
|
|
150
150
|
<!-- MD to XL -->
|
151
151
|
<img class="d-none d-md-block d-xl-none lazyload"
|
152
|
-
data-src="<%= main_app.
|
153
|
-
data-srcset="<%= main_app.
|
152
|
+
data-src="<%= main_app.cdn_image_url(section.img_two_lg) %>"
|
153
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_two_lg) %>"
|
154
154
|
alt="<%= section&.title_two %>">
|
155
155
|
|
156
156
|
<!-- XL UP -->
|
157
157
|
<img class="d-none d-xl-block lazyload"
|
158
|
-
data-src="<%= main_app.
|
159
|
-
data-srcset="<%= main_app.
|
158
|
+
data-src="<%= main_app.cdn_image_url(section.img_two_xl) %>"
|
159
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_two_xl) %>"
|
160
160
|
alt="<%= section&.title_two %>">
|
161
161
|
<% else %>
|
162
162
|
<%= icon( name: 'file-image',
|
@@ -36,23 +36,23 @@
|
|
36
36
|
class: "d-flex align-items-end justify-content-center bg-light text-center overflow-hidden homepage-bottom-box #{'pointer-events-none cursor-default' unless link_one}",
|
37
37
|
style: '--aspect-ratio:54/35;' do %>
|
38
38
|
|
39
|
-
<% if section.image_one
|
39
|
+
<% if section.image_one&.attachment&.attached? %>
|
40
40
|
<!-- XS to MD -->
|
41
41
|
<img class="d-md-none lazyload"
|
42
|
-
data-src="<%= main_app.
|
43
|
-
data-srcset="<%= main_app.
|
42
|
+
data-src="<%= main_app.cdn_image_url(section.img_one_md) %>"
|
43
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_one_md) %>"
|
44
44
|
alt="<%= section&.title_one %>">
|
45
45
|
|
46
46
|
<!-- MD to XL -->
|
47
47
|
<img class="d-none d-md-block d-xl-none lazyload"
|
48
|
-
data-src="<%= main_app.
|
49
|
-
data-srcset="<%= main_app.
|
48
|
+
data-src="<%= main_app.cdn_image_url(section.img_one_lg) %>"
|
49
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_one_lg) %>"
|
50
50
|
alt="<%= section&.title_one %>">
|
51
51
|
|
52
52
|
<!-- XL UP -->
|
53
53
|
<img class="d-none d-xl-block lazyload"
|
54
|
-
data-src="<%= main_app.
|
55
|
-
data-srcset="<%= main_app.
|
54
|
+
data-src="<%= main_app.cdn_image_url(section.img_one_xl) %>"
|
55
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_one_xl) %>"
|
56
56
|
alt="<%= section&.title_one %>">
|
57
57
|
<% else %>
|
58
58
|
<%= icon( name: 'card-image',
|
@@ -79,23 +79,23 @@
|
|
79
79
|
class: "d-flex align-items-end justify-content-center bg-light text-center overflow-hidden homepage-bottom-box #{'pointer-events-none cursor-default' unless link_two}",
|
80
80
|
style: '--aspect-ratio:54/35;' do %>
|
81
81
|
|
82
|
-
<% if section.image_two
|
82
|
+
<% if section.image_two&.attachment&.attached? %>
|
83
83
|
<!-- XS to MD -->
|
84
84
|
<img class="d-md-none lazyload"
|
85
|
-
data-src="<%= main_app.
|
86
|
-
data-srcset="<%= main_app.
|
85
|
+
data-src="<%= main_app.cdn_image_url(section.img_two_md) %>"
|
86
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_two_md) %>"
|
87
87
|
alt="<%= section&.title_two %>">
|
88
88
|
|
89
89
|
<!-- MD to XL -->
|
90
90
|
<img class="d-none d-md-block d-xl-none lazyload"
|
91
|
-
data-src="<%= main_app.
|
92
|
-
data-srcset="<%= main_app.
|
91
|
+
data-src="<%= main_app.cdn_image_url(section.img_two_lg) %>"
|
92
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_two_lg) %>"
|
93
93
|
alt="<%= section&.title_two %>">
|
94
94
|
|
95
95
|
<!-- XL UP -->
|
96
96
|
<img class="d-none d-xl-block lazyload"
|
97
|
-
data-src="<%= main_app.
|
98
|
-
data-srcset="<%= main_app.
|
97
|
+
data-src="<%= main_app.cdn_image_url(section.img_two_xl) %>"
|
98
|
+
data-srcset="<%= main_app.cdn_image_url(section.img_two_xl) %>"
|
99
99
|
alt="<%= section&.title_two %>">
|
100
100
|
<% else %>
|
101
101
|
<%= icon( name: 'card-image',
|
@@ -13,7 +13,7 @@
|
|
13
13
|
<% if @taxon.icon&.attachment %>
|
14
14
|
<div class="d-none d-md-block pt-4 taxon-icon">
|
15
15
|
<%= lazy_image(
|
16
|
-
src: main_app.
|
16
|
+
src: main_app.cdn_image_url(@taxon.icon.attachment),
|
17
17
|
alt: @taxon.description || Spree.t('taxon_missing_alt'),
|
18
18
|
width: 1110,
|
19
19
|
height: 300,
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<%= inline_svg_tag('edit.svg', width: 24, height: 24) %>
|
3
3
|
<% end %>
|
4
4
|
|
5
|
-
<%= link_to '#', class: 'js-delete-address-link ml-3', data: {
|
5
|
+
<%= link_to '#', class: 'js-delete-address-link ml-3', data: { turbo: false, hook: 'remove_address', address: spree.address_path(address) }, aria: { label: Spree.t('address_book.remove_address') } do %>
|
6
6
|
<%= icon(name: 'garbage_2',
|
7
7
|
classes: '',
|
8
8
|
width: 24,
|
data/config/routes.rb
CHANGED
@@ -2,11 +2,11 @@ Spree::Core::Engine.add_routes do
|
|
2
2
|
scope '(:locale)', locale: /#{Spree.available_locales.join('|')}/, defaults: { locale: nil } do
|
3
3
|
root to: 'home#index'
|
4
4
|
|
5
|
-
resources :products, only: [:index, :show], path:
|
5
|
+
resources :products, only: [:index, :show], path: '/products'
|
6
6
|
|
7
|
-
get
|
7
|
+
get '/products/:id/related', to: 'products#related'
|
8
8
|
# route globbing for pretty nested taxon and product paths
|
9
|
-
get
|
9
|
+
get '/t/*id', to: 'taxons#show', as: :nested_taxons
|
10
10
|
get '/product_carousel/:id', to: 'taxons#product_carousel'
|
11
11
|
|
12
12
|
# non-restful checkout stuff
|
@@ -34,7 +34,7 @@ Spree::Core::Engine.add_routes do
|
|
34
34
|
get '/api_tokens', to: 'store#api_tokens'
|
35
35
|
post '/ensure_cart', to: 'store#ensure_cart'
|
36
36
|
|
37
|
-
get
|
37
|
+
get '/pages/:slug', to: 'cms_pages#show', as: :page
|
38
38
|
|
39
39
|
get '/forbidden', to: 'errors#forbidden', as: :forbidden
|
40
40
|
get '/unauthorized', to: 'errors#unauthorized', as: :unauthorized
|
@@ -24,7 +24,7 @@ module Spree
|
|
24
24
|
# SCSS theming
|
25
25
|
template 'variables.scss', './app/assets/stylesheets/spree/frontend/variables/variables.scss'
|
26
26
|
# Sprockets 4 manifest
|
27
|
-
template 'app/assets/config/manifest.js'
|
27
|
+
template 'app/assets/config/manifest.js', force: Rails.env.test?
|
28
28
|
# home page template
|
29
29
|
directory 'home', './app/views/spree/home'
|
30
30
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Spree
|
2
|
+
module Frontend
|
3
|
+
class Configuration < Preferences::Configuration
|
4
|
+
preference :additional_filters_partials, :array, default: %w()
|
5
|
+
preference :always_put_site_name_in_title, :boolean, default: true
|
6
|
+
preference :coupon_codes_enabled, :boolean, default: true # Determines if we show coupon code form at cart and checkout
|
7
|
+
preference :http_cache_enabled, :boolean, default: true
|
8
|
+
preference :layout, :string, default: 'spree/layouts/spree_application'
|
9
|
+
preference :locale, :string, default: nil
|
10
|
+
preference :products_filters, :array, default: %w(keywords price sort_by)
|
11
|
+
preference :remember_me_enabled, :boolean, default: true
|
12
|
+
preference :shipping_instructions, :boolean, default: false # Request instructions/info for shipping
|
13
|
+
preference :show_raw_product_description, :boolean, default: false
|
14
|
+
preference :show_store_selector, :boolean, default: false
|
15
|
+
preference :title_site_name_separator, :string, default: '-' # When always_put_site_name_in_title is true, insert a separator character before the site name in the title
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require_relative 'configuration'
|
2
|
+
|
1
3
|
module Spree
|
2
4
|
module Frontend
|
3
5
|
class Engine < ::Rails::Engine
|
@@ -15,13 +17,7 @@ module Spree
|
|
15
17
|
end
|
16
18
|
|
17
19
|
initializer 'spree.frontend.environment', before: :load_config_initializers do |_app|
|
18
|
-
Spree::Frontend::Config = Spree::
|
19
|
-
end
|
20
|
-
|
21
|
-
initializer 'spree.frontend.checking_deprecated_preferences' do
|
22
|
-
Spree::Frontend::Config.deprecated_preferences.each do |pref|
|
23
|
-
warn "[DEPRECATION] Spree::Frontend::Config[:#{pref[:name]}] is deprecated. #{pref[:message]}"
|
24
|
-
end
|
20
|
+
Spree::Frontend::Config = Spree::Frontend::Configuration.new
|
25
21
|
end
|
26
22
|
end
|
27
23
|
end
|
data/lib/spree/frontend.rb
CHANGED
data/license.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Spree License
|
2
|
+
=============
|
3
|
+
|
4
|
+
Copyright © 2007-2022, Spree Commerce Inc., Spark Solutions Sp. z o.o. and other contributors.
|
5
|
+
All rights reserved.
|
6
|
+
|
7
|
+
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
8
|
+
|
9
|
+
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
10
|
+
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
11
|
+
* Neither the name of Spree Commerce Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
12
|
+
|
13
|
+
_This software is provided by the copyright holders and contributors "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage._
|
data/spree_frontend.gemspec
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
-
require_relative '
|
2
|
+
require_relative 'lib/spree/frontend/version'
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.platform = Gem::Platform::RUBY
|
6
6
|
s.name = 'spree_frontend'
|
7
|
-
s.version = Spree.version
|
7
|
+
s.version = Spree::Frontend.version
|
8
8
|
s.authors = ['Sean Schofield', 'Spark Solutions']
|
9
9
|
s.email = 'hello@spreecommerce.org'
|
10
|
-
s.summary = 'The default Storefront built with Rails and
|
10
|
+
s.summary = 'The default Storefront built with Rails and Turbo/Hotwire for Spree eCommerce platform'
|
11
11
|
s.description = s.summary
|
12
12
|
s.homepage = 'https://spreecommerce.org'
|
13
13
|
s.license = 'BSD-3-Clause'
|
@@ -33,9 +33,10 @@ Gem::Specification.new do |s|
|
|
33
33
|
s.add_dependency 'glyphicons', '~> 1.0'
|
34
34
|
s.add_dependency 'canonical-rails', '~> 0.2', '>= 0.2.10'
|
35
35
|
s.add_dependency 'inline_svg', '~> 1.5'
|
36
|
+
s.add_dependency 'jsbundling-rails'
|
36
37
|
s.add_dependency 'jquery-rails', '~> 4.3'
|
37
38
|
s.add_dependency 'sass-rails', '>= 5'
|
38
|
-
s.add_dependency '
|
39
|
+
s.add_dependency 'turbo-rails'
|
39
40
|
s.add_dependency 'responders'
|
40
41
|
s.add_dependency 'sprockets', '~> 4.0'
|
41
42
|
|