spree_frontend 4.6.0 → 4.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +35 -124
  3. data/.codeclimate.yml +2 -2
  4. data/.gem_release.yml +1 -1
  5. data/.github/CONTRIBUTING.md +1 -1
  6. data/.github/dependabot.yml +9 -30
  7. data/.rubocop.yml +11 -184
  8. data/.ruby-version +1 -0
  9. data/Gemfile +12 -13
  10. data/LICENSE +1 -1
  11. data/README.md +31 -38
  12. data/SECURITY.md +1 -1
  13. data/app/assets/config/spree_frontend_manifest.js +2 -1
  14. data/app/assets/images/favicon.ico +0 -0
  15. data/app/assets/images/logo/spree_50.png +0 -0
  16. data/app/assets/images/noimage/large.png +0 -0
  17. data/app/assets/images/noimage/mini.png +0 -0
  18. data/app/assets/images/noimage/product.png +0 -0
  19. data/app/assets/images/noimage/small.png +0 -0
  20. data/app/assets/javascripts/spree/frontend/{account.js → account.es6} +2 -5
  21. data/app/assets/javascripts/spree/frontend/{api_tokens.js → api_tokens.es6} +2 -5
  22. data/app/assets/javascripts/spree/frontend/cart.js +1 -1
  23. data/app/assets/javascripts/spree/frontend/checkout/address.js +1 -1
  24. data/app/assets/javascripts/spree/frontend/checkout/address_book.js +1 -1
  25. data/app/assets/javascripts/spree/frontend/checkout/payment.js +1 -1
  26. data/app/assets/javascripts/spree/frontend/checkout/shipment.js +1 -1
  27. data/app/assets/javascripts/spree/frontend/checkout.js +1 -1
  28. data/app/assets/javascripts/spree/frontend/login.js +1 -1
  29. data/app/assets/javascripts/spree/frontend/main_nav_bar.js +1 -1
  30. data/app/assets/javascripts/spree/frontend/views/spree/layouts/spree_application.js +1 -1
  31. data/app/assets/javascripts/spree/frontend/views/spree/products/cart_form.js +9 -2
  32. data/app/assets/javascripts/spree/frontend/views/spree/products/index.js +1 -1
  33. data/app/assets/javascripts/spree/frontend/views/spree/products/modal_carousel.js +1 -1
  34. data/app/assets/javascripts/spree/frontend/views/spree/products/price_filters.es6 +1 -1
  35. data/app/assets/javascripts/spree/frontend/views/spree/shared/carousel/single.js +1 -1
  36. data/app/assets/javascripts/spree/frontend/views/spree/shared/carousel/swipes.js +1 -1
  37. data/app/assets/javascripts/spree/frontend/views/spree/shared/carousel/thumbnails.js +1 -1
  38. data/app/assets/javascripts/spree/frontend/views/spree/shared/carousel.js +1 -1
  39. data/app/assets/javascripts/spree/frontend/views/spree/shared/delete_address_popup.js +1 -1
  40. data/app/assets/javascripts/spree/frontend/views/spree/shared/mobile_navigation.js +1 -1
  41. data/app/assets/javascripts/spree/frontend/views/spree/shared/quantity_select.js +1 -1
  42. data/app/assets/javascripts/spree/lazysizes.config.js +1 -1
  43. data/app/assets/stylesheets/spree/frontend/components-custom/headers.scss +0 -2
  44. data/app/assets/stylesheets/spree/frontend/components-custom/inputs.scss +4 -146
  45. data/app/assets/stylesheets/spree/frontend/fonts.scss +0 -136
  46. data/app/assets/stylesheets/spree/frontend/variables/variables.scss +21 -7
  47. data/app/assets/stylesheets/spree/frontend/views/spree/checkout/edit.scss +0 -3
  48. data/app/assets/stylesheets/spree/frontend/views/spree/layouts/spree_application.scss +1 -1
  49. data/app/assets/stylesheets/spree/frontend/views/spree/orders/edit.scss +0 -20
  50. data/app/assets/stylesheets/spree/frontend/views/spree/products/index.scss +2 -2
  51. data/app/assets/stylesheets/spree/frontend/views/spree/products/show.scss +0 -20
  52. data/app/assets/stylesheets/spree/frontend/views/spree/shared/cart.scss +0 -14
  53. data/app/assets/stylesheets/spree/frontend/views/spree/shared/header.scss +0 -25
  54. data/app/assets/stylesheets/spree/frontend/views/spree/shared/login.scss +0 -16
  55. data/app/assets/stylesheets/spree/frontend/views/spree/shared/main_nav_bar.scss +1 -8
  56. data/app/assets/stylesheets/spree/frontend/views/spree/shared/nav_bar.scss +1 -14
  57. data/app/assets/stylesheets/spree/frontend/views/spree/shared/no_product_available.scss +1 -1
  58. data/app/assets/stylesheets/spree/frontend/views/spree/shared/order_details.scss +0 -1
  59. data/app/assets/stylesheets/spree/frontend/views/spree/taxons/show.scss +1 -1
  60. data/app/assets/stylesheets/spree/frontend/views/spree/users/show.scss +0 -28
  61. data/app/helpers/spree/addresses_helper.rb +6 -10
  62. data/app/helpers/spree/frontend_helper.rb +3 -3
  63. data/app/helpers/spree/navigation_helper.rb +3 -3
  64. data/app/helpers/spree/products_filters_helper.rb +3 -3
  65. data/app/helpers/spree/taxons_helper.rb +1 -1
  66. data/app/javascript/spree/frontend/application.js +2 -0
  67. data/app/services/spree/build_localized_redirect_url.rb +2 -2
  68. data/app/views/spree/addresses/_form.html.erb +4 -5
  69. data/app/views/spree/addresses/edit.html.erb +1 -1
  70. data/app/views/spree/addresses/new.html.erb +1 -1
  71. data/app/views/spree/checkout/_address.html.erb +1 -1
  72. data/app/views/spree/checkout/_delivery.html.erb +1 -1
  73. data/app/views/spree/checkout/_summary.html.erb +1 -1
  74. data/app/views/spree/checkout/edit.html.erb +1 -1
  75. data/app/views/spree/checkout/payment/_gateway.html.erb +4 -4
  76. data/app/views/spree/checkout/payment/_storecredit.html.erb +1 -1
  77. data/app/views/spree/checkout/registration.html.erb +1 -1
  78. data/app/views/spree/layouts/spree_application.html.erb +4 -1
  79. data/app/views/spree/orders/_line_item_data.html.erb +1 -1
  80. data/app/views/spree/orders/show.html.erb +1 -1
  81. data/app/views/spree/products/_cart_form.html.erb +2 -2
  82. data/app/views/spree/products/_color_option_type.html.erb +1 -1
  83. data/app/views/spree/products/_description.html.erb +1 -1
  84. data/app/views/spree/products/_filters_desktop.html.erb +1 -1
  85. data/app/views/spree/products/_filters_mobile.html.erb +3 -3
  86. data/app/views/spree/products/_option_type.html.erb +1 -1
  87. data/app/views/spree/products/_promotions.html.erb +1 -1
  88. data/app/views/spree/products/_properties.html.erb +1 -1
  89. data/app/views/spree/products/_sort_desktop.html.erb +9 -24
  90. data/app/views/spree/products/index.html.erb +1 -1
  91. data/app/views/spree/products/related.html.erb +1 -1
  92. data/app/views/spree/shared/_checkout_header.html.erb +1 -1
  93. data/app/views/spree/shared/_currency_dropdown.html.erb +1 -1
  94. data/app/views/spree/shared/_delete_address_popup.html.erb +2 -2
  95. data/app/views/spree/shared/_footer.html.erb +3 -3
  96. data/app/views/spree/shared/_head.html.erb +2 -1
  97. data/app/views/spree/shared/_internationalization_options.html.erb +3 -3
  98. data/app/views/spree/shared/_line_item.html.erb +1 -1
  99. data/app/views/spree/shared/_locale_dropdown.html.erb +1 -1
  100. data/app/views/spree/shared/_login.html.erb +2 -2
  101. data/app/views/spree/shared/_main_nav_bar.html.erb +2 -2
  102. data/app/views/spree/shared/_mobile_internationalization_options.html.erb +1 -1
  103. data/app/views/spree/shared/_mobile_navigation.html.erb +1 -1
  104. data/app/views/spree/shared/_nav_bar.html.erb +5 -5
  105. data/app/views/spree/shared/_no_product_available.html.erb +1 -1
  106. data/app/views/spree/shared/_order_details.html.erb +3 -3
  107. data/app/views/spree/shared/_product_added_modal.html.erb +2 -2
  108. data/app/views/spree/shared/_user_form.html.erb +3 -3
  109. data/app/views/spree/taxons/_header.html.erb +1 -1
  110. data/app/views/spree/taxons/_subcategories.html.erb +1 -1
  111. data/app/views/spree/taxons/product_carousel.html.erb +1 -1
  112. data/app/views/spree/users/edit.html.erb +1 -1
  113. data/app/views/spree/users/show.html.erb +1 -1
  114. data/config/importmap.rb +2 -0
  115. data/config/initializers/admin_actions.rb +18 -0
  116. data/config/locales/en.yml +37 -0
  117. data/lib/generators/spree/frontend/install/install_generator.rb +0 -2
  118. data/lib/spree/frontend/configuration.rb +1 -1
  119. data/lib/spree/frontend/engine.rb +9 -5
  120. data/lib/spree/frontend/version.rb +3 -3
  121. data/lib/spree/frontend.rb +3 -1
  122. data/spree_frontend.gemspec +13 -11
  123. metadata +67 -51
  124. data/.deepsource.toml +0 -19
  125. data/.eslintignore +0 -7
  126. data/.eslintrc +0 -36
  127. data/.solargraph.yml +0 -20
  128. data/.stylelintignore +0 -4
  129. data/.stylelintrc +0 -6
  130. data/app/assets/images/logo-spree.png +0 -0
  131. data/app/assets/images/logo.png +0 -0
  132. data/app/assets/images/logo.svg +0 -10
  133. data/app/assets/images/logo@2x.png +0 -0
  134. data/app/assets/images/logo@3x.png +0 -0
  135. data/app/assets/images/noimage/plp.png +0 -0
  136. data/app/assets/images/noimage/plp.svg +0 -16
  137. data/app/views/spree/shared/_get_started.html.erb +0 -32
  138. data/lib/generators/spree/frontend/install/templates/app/assets/config/manifest.js +0 -2
  139. data/license.md +0 -13
@@ -5,10 +5,13 @@
5
5
  <!--[if IE 9 ]> <html class="ie ie9" lang="<%= I18n.locale %>"> <![endif]-->
6
6
  <!--[if gt IE 9]><!--><html lang="<%= I18n.locale %>"><!--<![endif]-->
7
7
  <head data-hook="inside_head">
8
+ <link rel="preconnect" href="https://fonts.googleapis.com">
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap" rel="stylesheet">
11
+
8
12
  <%= render partial: 'spree/shared/head' %>
9
13
  </head>
10
14
  <body class="<%= body_class %>" id="<%= @body_id || 'default' %>" data-hook="body">
11
- <%= render partial: 'spree/shared/get_started' %>
12
15
  <%= render partial: 'spree/shared/header' %>
13
16
  <div id="overlay" class="overlay hide-on-esc"></div>
14
17
 
@@ -10,7 +10,7 @@
10
10
  <div class="shopping-cart-item-quantity <%= additional_classes %>" data-hook="cart_item_quantity">
11
11
  <div class="d-flex align-items-center">
12
12
  <%= button_tag '-', type: 'button', class: "border-right-0 shopping-cart-item-quantity-decrease-btn", data: { id: dom_id(line_item) } %>
13
- <%= item_form.number_field :quantity, min: 0, class: "form-control text-center border-left-0 border-right-0 shopping-cart-item-quantity-input", size: 5, data: { id: dom_id(line_item) }, aria: { label: Spree.t('cart_page.change_quantity') } %>
13
+ <%= item_form.number_field :quantity, min: 0, class: "form-control text-center border-left-0 border-right-0 rounded-0 shopping-cart-item-quantity-input", size: 5, data: { id: dom_id(line_item) }, aria: { label: Spree.t('cart_page.change_quantity') } %>
14
14
  <%= button_tag '+', type: 'button', class: "border-left-0 shopping-cart-item-quantity-increase-btn", data: { id: dom_id(line_item) } %>
15
15
  </div>
16
16
  </div>
@@ -12,7 +12,7 @@
12
12
  <p class="order-show-explain w-100 text-center"><%= Spree.t(:order_success_explain) %></p>
13
13
  <% end %>
14
14
 
15
- <p class="order-show-number text-uppercase w-100 text-center">
15
+ <p class="order-show-number w-100 text-center">
16
16
  <%= accurate_title %> / <%= pretty_date(@order.completed_at) %>
17
17
  </p>
18
18
  <%= render partial: 'spree/shared/order_details', locals: { order: @order } %>
@@ -37,7 +37,7 @@
37
37
  </div>
38
38
  <% end %>
39
39
 
40
- <div class="text-center text-md-left add-to-cart-form-general-availability text-uppercase">
40
+ <div class="text-center text-md-left add-to-cart-form-general-availability">
41
41
  <%= Spree.t(:availability) %>:
42
42
  <% if !is_product_available_in_currency %>
43
43
  <%= render 'cart_form_availability_templates', type: 'not-available-in-currency' %>
@@ -74,7 +74,7 @@
74
74
  <%= render 'spree/shared/quantity_select', input_name: :quantity %>
75
75
  </div>
76
76
 
77
- <%= button_tag class: 'btn btn-primary w-100 text-uppercase font-weight-bold add-to-cart-button', id: 'add-to-cart-button', type: :submit, disabled: true do %>
77
+ <%= button_tag class: 'btn btn-primary w-100 font-weight-bold add-to-cart-button', id: 'add-to-cart-button', type: :submit, disabled: true do %>
78
78
  <%= Spree.t(:add_to_cart) %>
79
79
  <% end %>
80
80
  </div>
@@ -1,5 +1,5 @@
1
1
  <div class="product-variants-variant product-variants-variant--color" data-option-type-id="<%= option_type[:id] %>">
2
- <span class="d-block mb-2 text-center text-md-left text-uppercase product-variants-variant-title">
2
+ <span class="d-block mb-2 text-center text-md-left product-variants-variant-title">
3
3
  <%= option_type[:presentation] %>
4
4
  </span>
5
5
 
@@ -1,4 +1,4 @@
1
- <h3 class="pt-4 font-weight-bold text-uppercase product-details-subtitle"><%= Spree.t(:description) %></h3>
1
+ <h3 class="pt-4 font-weight-bold product-details-subtitle"><%= Spree.t(:description) %></h3>
2
2
 
3
3
  <% if Spree::Frontend::Config[:show_raw_product_description] || product_wysiwyg_editor_enabled? %>
4
4
  <div id="product-description-long" class="m-0 text-break product-description" data-hook="description">
@@ -85,7 +85,7 @@
85
85
  <%= max_price_filter_input class: 'w-50 p-2' %>
86
86
  </div>
87
87
 
88
- <%= link_to Spree.t('plp.done'), permitted_params, class: 'btn btn-primary spree-btn w-100', data: { params: permitted_params } %>
88
+ <%= link_to Spree.t('plp.done'), permitted_params, class: 'btn btn-sm btn-primary spree-btn w-100', data: { params: permitted_params } %>
89
89
  </div>
90
90
  </div>
91
91
  </div>
@@ -15,7 +15,7 @@
15
15
  <% ot_downcase_name = option_type_name.downcase %>
16
16
 
17
17
  <div class="card plp-overlay-card">
18
- <div class="card-header text-uppercase <%= 'collapsed' if params[ot_downcase_name].blank? %> plp-overlay-card-header" data-toggle="collapse" id="filtersMobile<%= option_type_name %>" data-target="#collapseFilterMobile<%= option_type_name %>" aria-expanded="true" aria-controls="collapseFilterMobile<%= option_type_name %>" role="heading" aria-level="3">
18
+ <div class="card-header <%= 'collapsed' if params[ot_downcase_name].blank? %> plp-overlay-card-header" data-toggle="collapse" id="filtersMobile<%= option_type_name %>" data-target="#collapseFilterMobile<%= option_type_name %>" aria-expanded="true" aria-controls="collapseFilterMobile<%= option_type_name %>" role="heading" aria-level="3">
19
19
  <%= option_type.presentation %>
20
20
  <%= icon(name: 'arrow-right',
21
21
  classes: 'spree-icon-arrow spree-icon-arrow-right mt-1 float-right arrow plp-overlay-card-header-arrow',
@@ -35,7 +35,7 @@
35
35
  <% property_name = property.name %>
36
36
  <% collapsed = params.dig(:properties, property.filter_param).blank? %>
37
37
  <div class="card plp-overlay-card">
38
- <div class="card-header text-uppercase <%= 'collapsed' if collapsed %> plp-overlay-card-header" data-toggle="collapse" id="filtersMobile<%= property_name %>" data-target="#collapseFilterMobile<%= property_name %>" aria-expanded="true" aria-controls="collapseFilterMobile<%= property_name %>" role="heading" aria-level="3">
38
+ <div class="card-header <%= 'collapsed' if collapsed %> plp-overlay-card-header" data-toggle="collapse" id="filtersMobile<%= property_name %>" data-target="#collapseFilterMobile<%= property_name %>" aria-expanded="true" aria-controls="collapseFilterMobile<%= property_name %>" role="heading" aria-level="3">
39
39
  <%= property.presentation %>
40
40
  <%= icon(name: 'arrow-right',
41
41
  classes: 'spree-icon-arrow spree-icon-arrow-right mt-1 float-right arrow plp-overlay-card-header-arrow',
@@ -57,7 +57,7 @@
57
57
  <% end %>
58
58
 
59
59
  <div class="card plp-overlay-card">
60
- <div class="card-header text-uppercase <%= 'collapsed' if params[:price].blank? %> plp-overlay-card-header" id="headingFour" data-toggle="collapse" data-target="#collapseFour" aria-expanded="true" aria-controls="collapseFour" role="heading" aria-level="3">
60
+ <div class="card-header <%= 'collapsed' if params[:price].blank? %> plp-overlay-card-header" id="headingFour" data-toggle="collapse" data-target="#collapseFour" aria-expanded="true" aria-controls="collapseFour" role="heading" aria-level="3">
61
61
  <%= Spree.t('plp.price') %>
62
62
  <%= icon(name: 'arrow-right',
63
63
  classes: 'spree-icon-arrow spree-icon-arrow-right mt-1 float-right arrow plp-overlay-card-header-arrow',
@@ -1,5 +1,5 @@
1
1
  <div class="product-variants-variant" data-option-type-id="<%= option_type[:id] %>">
2
- <span class="d-block mb-2 text-center text-md-left text-uppercase product-variants-variant-title">
2
+ <span class="d-block mb-2 text-center text-md-left product-variants-variant-title">
3
3
  <%= option_type[:presentation] %>
4
4
  </span>
5
5
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  <% if promotions.any? %>
4
4
  <div id="promotions">
5
- <h3 class="pt-4 font-weight-bold text-uppercase product-details-subtitle"><%= Spree.t(:promotions) %></h3>
5
+ <h3 class="pt-4 font-weight-bold product-details-subtitle"><%= Spree.t(:promotions) %></h3>
6
6
  <% promotions.each do |promotion| %>
7
7
  <div class="row">
8
8
  <div class="col-12 col-md-7 col-lg-6 mb-3">
@@ -1,5 +1,5 @@
1
1
  <% unless @product_properties.blank? %>
2
- <h3 class="pt-4 font-weight-bold text-uppercase product-details-subtitle"><%= Spree.t(:details) %></h3>
2
+ <h3 class="pt-4 font-weight-bold product-details-subtitle"><%= Spree.t(:details) %></h3>
3
3
  <ul id="product-properties" class="m-0 list-unstyled product-properies" data-hook>
4
4
  <% @product_properties.each do |product_property| %>
5
5
  <% if product_property.show_property? %>
@@ -1,4 +1,4 @@
1
- <div class="container dropdown d-none d-lg-flex justify-content-end mt-5 pr-4 pb-3 plp-sort">
1
+ <div class="dropdown d-none d-lg-flex justify-content-end mt-5 pr-4 pb-3 plp-sort">
2
2
  <a data-toggle="dropdown" class="plp-sort-header" href="#" role="button" aria-haspopup="true" aria-expanded="false">
3
3
  <%= Spree.t("plp.#{ params[:sort_by].blank? ? 'sort_by': params[:sort_by].gsub('-', '_') }") %>
4
4
  <%= icon(name: 'arrow-right',
@@ -10,27 +10,12 @@
10
10
  width: 18,
11
11
  height: 18) %>
12
12
  </a>
13
- <div class="dropdown-menu text-right plp-sort-dropdown">
14
- <ul class="pt-1 plp-sort-dropdown-ul">
15
- <li class="p-3 plp-sort-dropdown-ul-li<%= '--active' if params[:sort_by].blank? %>">
16
- <%= link_to Spree.t('plp.default'), url_for(permitted_params.merge(sort_by: nil)), class: 'dropdown-item' %>
17
- </li>
18
- <li class="p-3 plp-sort-dropdown-ul-li<%= '--active' if params[:sort_by] == 'name-a-z' %>">
19
- <%= link_to Spree.t('plp.name_a_z'), url_for(permitted_params.merge(sort_by: 'name-a-z')), class: 'dropdown-item' %>
20
- </li>
21
- </li>
22
- <li class="p-3 plp-sort-dropdown-ul-li<%= '--active' if params[:sort_by] == 'name-z-a' %>">
23
- <%= link_to Spree.t('plp.name_z_a'), url_for(permitted_params.merge(sort_by: 'name-z-a')), class: 'dropdown-item' %>
24
- </li>
25
- <li class="p-3 plp-sort-dropdown-ul-li<%= '--active' if params[:sort_by] == 'newest-first' %>">
26
- <%= link_to Spree.t('plp.newest_first'), url_for(permitted_params.merge(sort_by: 'newest-first')), class: 'dropdown-item' %>
27
- </li>
28
- <li class="p-3 plp-sort-dropdown-ul-li<%= '--active' if params[:sort_by] == 'price-high-to-low' %>">
29
- <%= link_to Spree.t('plp.price_high_to_low'), url_for(permitted_params.merge(sort_by: 'price-high-to-low')), class: 'dropdown-item' %>
30
- </li>
31
- <li class="p-3 plp-sort-dropdown-ul-li<%= '--active' if params[:sort_by] == 'price-low-to-high' %>">
32
- <%= link_to Spree.t('plp.price_low_to_high'), url_for(permitted_params.merge(sort_by: 'price-low-to-high')), class: 'dropdown-item' %>
33
- </li>
34
- </ul>
35
- </div>
13
+ <div class="dropdown-menu text-right">
14
+ <%= active_link_to Spree.t('plp.default'), url_for(permitted_params.merge(sort_by: nil)), class: 'dropdown-item', active: { sort_by: nil } %>
15
+ <%= active_link_to Spree.t('plp.name_a_z'), url_for(permitted_params.merge(sort_by: 'name-a-z')), class: 'dropdown-item', active: { sort_by: 'name-a-z' } %>
16
+ <%= active_link_to Spree.t('plp.name_z_a'), url_for(permitted_params.merge(sort_by: 'name-z-a')), class: 'dropdown-item', active: { sort_by: 'name-z-a' } %>
17
+ <%= active_link_to Spree.t('plp.newest_first'), url_for(permitted_params.merge(sort_by: 'newest-first')), class: 'dropdown-item', active: { sort_by: 'newest-first' } %>
18
+ <%= active_link_to Spree.t('plp.price_high_to_low'), url_for(permitted_params.merge(sort_by: 'price-high-to-low')), class: 'dropdown-item', active: { sort_by: 'price-high-to-low' } %>
19
+ <%= active_link_to Spree.t('plp.price_low_to_high'), url_for(permitted_params.merge(sort_by: 'price-low-to-high')), class: 'dropdown-item', active: { sort_by: 'price-low-to-high' } %>
20
+ </div>
36
21
  </div>
@@ -11,7 +11,7 @@
11
11
  <% else %>
12
12
  <% if params[:keywords] %>
13
13
  <div class="container d-md-flex pt-md-5">
14
- <div class="plp-results-text text-uppercase mx-md-auto py-md-5">
14
+ <div class="plp-results-text mx-md-auto py-md-5">
15
15
  <%= "#{@products.total_count} #{Spree.t('plp.results_for')} '#{params[:keywords].upcase}'" %>
16
16
  </div>
17
17
  </div>
@@ -5,7 +5,7 @@
5
5
 
6
6
  <% if products.any? %>
7
7
  <div class="product-details-related" id="product-details-related-<%= relation_type.id %>">
8
- <p class="font-weight-bold text-center text-uppercase product-details-carousel-text"><%= relation_type.name %></p>
8
+ <p class="font-weight-bold text-center product-details-carousel-text"><%= relation_type.name %></p>
9
9
  <%= render 'spree/shared/carousel_4_products', id: "related-products-carousel-#{relation_type.id}", products: products %>
10
10
  </div>
11
11
  <% end %>
@@ -4,7 +4,7 @@
4
4
  <div class="row">
5
5
 
6
6
  <div class="col d-flex align-items-center truncate pr-0">
7
- <%= link_to spree.cart_path, class: "text-uppercase truncate checkout-header-link-text", method: :get do %>
7
+ <%= link_to spree.cart_path, class: "truncate checkout-header-link-text btn btn-link", method: :get do %>
8
8
  <%= icon(name: 'arrow-right',
9
9
  classes: 'spree-icon-arrow spree-icon-arrow-left',
10
10
  width: 14,
@@ -6,7 +6,7 @@
6
6
  </label>
7
7
  <%= select_tag(:switch_to_currency,
8
8
  options_for_select(supported_currency_options, current_currency),
9
- class: 'custom-select w-100') %>
9
+ class: 'custom-select custom-select-sm w-100') %>
10
10
  <noscript><%= submit_tag %></noscript>
11
11
  </div>
12
12
  <% end %>
@@ -12,10 +12,10 @@
12
12
  </p>
13
13
 
14
14
  <div class="d-flex delete-address-popup-buttons">
15
- <div class="btn bg-light-background text-primary border-2 border-primary text-uppercase font-weight-bold delete-address-popup-button js-delete-address-popup-close-button"><%= Spree.t(:cancel) %></div>
15
+ <div class="btn bg-light-background text-primary border-2 border-primary font-weight-bold delete-address-popup-button js-delete-address-popup-close-button"><%= Spree.t(:cancel) %></div>
16
16
  <a
17
17
  id="delete-address-popup-confirm"
18
- class="btn btn-primary text-uppercase font-weight-bold delete-address-popup-button"
18
+ class="btn btn-primary font-weight-bold delete-address-popup-button"
19
19
  data-method="delete"
20
20
  rel="nofollow"
21
21
  href="#">
@@ -47,7 +47,7 @@
47
47
  </div>
48
48
  </div>
49
49
  </div>
50
- <div class="row d-none d-xl-flex border-top pt-5 text-uppercase footer-spree-menu-links">
50
+ <div class="row d-none d-xl-flex border-top pt-5 footer-spree-menu-links">
51
51
 
52
52
  <% if spree_menu('footer').present? %>
53
53
  <% spree_menu('footer').children.each do |parent| %>
@@ -71,10 +71,10 @@
71
71
  <% if spree.respond_to?(:account_path) %>
72
72
  <div class="col-3 mb-5">
73
73
  <div class="footer-spree-label">
74
- <%= Spree.t('nav_bar.my_account') %>
74
+ <%= Spree.t(:my_account) %>
75
75
  </div>
76
76
  <div class="pt-2">
77
- <%= link_to Spree.t(:my_orders).upcase, spree.account_path(anchor: "account-my-orders") %>
77
+ <%= link_to Spree.t(:my_orders), spree.account_path(anchor: "account-my-orders") %>
78
78
  </div>
79
79
  </div>
80
80
  <% end %>
@@ -7,8 +7,9 @@
7
7
  <%= favicon_link_tag(spree_favicon_path) %>
8
8
  <%= stylesheet_link_tag 'spree/frontend/all', media: 'screen', data: { turbo_track: 'reload' } %>
9
9
  <%= csrf_meta_tags %>
10
+
11
+ <%= javascript_importmap_tags('application-spree-frontend') %>
10
12
  <%= render 'spree/shared/paths' %>
11
13
  <%= render 'spree/shared/locale_and_currency' %>
12
- <%= javascript_include_tag "application", defer: true, data: { turbo_track: 'reload' } %>
13
14
  <%= javascript_include_tag 'spree/frontend/all', defer: true, data: { turbo_track: 'reload' } %>
14
15
  <%= yield :head %>
@@ -4,8 +4,8 @@
4
4
  <button id="internationalization-button-desktop" type="button" data-toggle="dropdown" class="navbar-right-dropdown-toggle" aria-label="<%= Spree.t(:internationalization) %>">
5
5
  <%= icon(name: 'global',
6
6
  classes: 'd-none d-xl-inline-block',
7
- width: 41,
8
- height: 36) %>
7
+ width: 24,
8
+ height: 24) %>
9
9
  <%= icon(name: 'arrow-down',
10
10
  classes: 'd-inline-block d-xl-none',
11
11
  width: 15,
@@ -17,7 +17,7 @@
17
17
  <% stores.each do |store| %>
18
18
  <div class="pl-3 d-flex justify-content-between align-items-center stores-list">
19
19
  <%= country_flag_icon(store_country_iso(store)) %>
20
- <%= store_link(store, class: "dropdown-item text-uppercase #{'font-weight-bold' if current_store == store}") %>
20
+ <%= store_link(store, class: "dropdown-item #{'font-weight-bold' if current_store == store}") %>
21
21
  </div>
22
22
  <% end %>
23
23
  <% else %>
@@ -4,7 +4,7 @@
4
4
  <%= link_to product_image(line_item.variant), spree.product_path(line_item.product) %>
5
5
  <div class="d-flex flex-column mt-2 mt-lg-0">
6
6
  <div><%= link_to line_item.name, spree.product_path(line_item.product) %></div>
7
- <ul class="checkout-confirm-order-details-line-items-line-item-name-options text-uppercase list-unstyled mb-0">
7
+ <ul class="checkout-confirm-order-details-line-items-line-item-name-options list-unstyled mb-0">
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 %>
@@ -6,7 +6,7 @@
6
6
  </label>
7
7
  <%= select_tag(:switch_to_locale,
8
8
  options_for_select(supported_locales_options, I18n.locale),
9
- class: 'custom-select w-100') %>
9
+ class: 'custom-select custom-select-sm w-100') %>
10
10
  <noscript><%= submit_tag %></noscript>
11
11
  </div>
12
12
  <% end %>
@@ -4,12 +4,12 @@
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">
7
- <%= f.email_field :email, class: 'spree-flat-input', placeholder: Spree.t(:email), value: params.dig(:spree_user, :email) %>
7
+ <%= f.email_field :email, class: 'form-control', placeholder: Spree.t(:email), value: params.dig(:spree_user, :email) %>
8
8
  </p>
9
9
  </div>
10
10
  <div class="form-group mb-4">
11
11
  <p class="form-group checkout-content-inner-field">
12
- <%= f.password_field :password, class: 'spree-flat-input', placeholder: Spree.t(:password) %>
12
+ <%= f.password_field :password, class: 'form-control', placeholder: Spree.t(:password) %>
13
13
  </p>
14
14
  </div>
15
15
  </div>
@@ -22,14 +22,14 @@
22
22
  <!-- Categories -->
23
23
  <% if child.container? && child.code?('category') %>
24
24
  <div class="category-links my-4 mx-2">
25
- <div class="category-links-header text-uppercase">
25
+ <div class="category-links-header">
26
26
  <%= child.name %>
27
27
  </div>
28
28
  <% if child.children.present? %>
29
29
  <ul class="pl-0">
30
30
  <% child.children.each do |category_link| %>
31
31
  <li>
32
- <%= spree_nav_link_tag(category_link, { class: "text-uppercase main-nav-bar-category-links dropdown-item truncate" }) %>
32
+ <%= spree_nav_link_tag(category_link, { class: "main-nav-bar-category-links dropdown-item truncate" }) %>
33
33
  </li>
34
34
  <% end %>
35
35
  </ul>
@@ -22,7 +22,7 @@
22
22
  <% stores.each do |store| %>
23
23
  <li class="d-flex justify-content-between align-items-center mobile-navigation-list-item">
24
24
  <%= country_flag_icon(store_country_iso(store)) %>
25
- <%= store_link(store, class: "dropdown-item text-uppercase d-flex #{'font-weight-bold' if current_store == store}") %>
25
+ <%= store_link(store, class: "dropdown-item d-flex #{'font-weight-bold' if current_store == store}") %>
26
26
  </li>
27
27
  <% end %>
28
28
  <% else %>
@@ -1,5 +1,5 @@
1
1
  <% if spree_menu.present? %>
2
- <div class="position-fixed text-uppercase d-xl-none mobile-navigation" role="navigation" aria-label="<%= Spree.t('nav_bar.mobile') %>">
2
+ <div class="position-fixed d-xl-none mobile-navigation" role="navigation" aria-label="<%= Spree.t('nav_bar.mobile') %>">
3
3
  <div class="container d-flex align-items-center justify-content-between header-spree" data-hook>
4
4
  <button class="m-0 p-0" id="mobile-navigation-back-button" aria-label="<%= Spree.t('nav_bar.go_to_previous_menu') %>">
5
5
  <%= icon(name: 'arrow-right',
@@ -4,8 +4,8 @@
4
4
  <button type="button" class="navbar-right-dropdown-toggle search-icons" aria-label="<%= Spree.t('nav_bar.show_search') %>">
5
5
  <%= icon(name: 'magnifying-glass',
6
6
  classes: 'd-inline-block',
7
- width: 36,
8
- height: 36) %>
7
+ width: 24,
8
+ height: 24) %>
9
9
  </button>
10
10
 
11
11
  <div id="search-dropdown" class="p-0 px-md-4 py-md-2 w-100 shadow navbar-right-search-menu-dropdown hide-on-esc">
@@ -19,8 +19,8 @@
19
19
  <button id="account-button" type="button" data-toggle="dropdown" class="navbar-right-dropdown-toggle account-icon" aria-label="<%= Spree.t('nav_bar.show_user_menu') %>">
20
20
  <%= icon(name: 'person',
21
21
  classes: 'd-inline-block',
22
- width: 41.4,
23
- height: 36) %>
22
+ width: 24,
23
+ height: 24) %>
24
24
  </button>
25
25
 
26
26
  <div id="link-to-account" class="dropdown-menu dropdown-menu-right text-right">
@@ -29,7 +29,7 @@
29
29
  </li>
30
30
  <% end %>
31
31
  <li id="link-to-cart">
32
- <%= render 'spree/shared/cart', class: 'd-inline-block cart-icon', size: 36, item_count: 0 %>
32
+ <%= render 'spree/shared/cart', class: 'd-inline-block cart-icon', size: 24, item_count: 0 %>
33
33
  </li>
34
34
  <%= render partial: 'spree/shared/internationalization_options' %>
35
35
  </ul>
@@ -15,7 +15,7 @@
15
15
  <% end %>
16
16
  <p>
17
17
 
18
- <div class="btn btn-primary text-uppercase font-weight-bold d-flex no-product-available-button" id="no-product-available-hide-button">
18
+ <div class="btn btn-primary font-weight-bold d-flex no-product-available-button" id="no-product-available-hide-button">
19
19
  <p class="d-flex m-auto no-product-available-button-text">
20
20
  <%= Spree.t(:ok) %>
21
21
  </p>
@@ -56,7 +56,7 @@
56
56
  <%= Spree.t(:products) %>
57
57
  </div>
58
58
  <div class="d-table" data-hook="order_details">
59
- <div class="d-none d-lg-table-row text-secondary text-uppercase" data-hook="order_details_line_items_headers">
59
+ <div class="d-none d-lg-table-row text-secondary" data-hook="order_details_line_items_headers">
60
60
  <p class="d-table-cell pb-1">
61
61
  <%= Spree.t(:product) %>
62
62
  </p>
@@ -82,7 +82,7 @@
82
82
  <%= link_to item.name, spree.product_path(item.product), class: 'checkout-confirm-order-details-line-items-line-item-name-link' %>
83
83
  </div>
84
84
  <% unless item.variant.is_master? %>
85
- <ul class="checkout-confirm-order-details-line-items-line-item-name-options text-uppercase list-unstyled mb-0">
85
+ <ul class="checkout-confirm-order-details-line-items-line-item-name-options list-unstyled mb-0">
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 %>
@@ -120,7 +120,7 @@
120
120
  <% unless @order.uneditable? %>
121
121
  <div data-hook="buttons">
122
122
  <% submit_label_key = @order.confirm? ? :place_order : :save_and_continue %>
123
- <%= submit_tag Spree.t(submit_label_key), class: 'btn btn-primary text-uppercase font-weight-bold w-100 checkout-content-save-continue-button' %>
123
+ <%= submit_tag Spree.t(submit_label_key), class: 'btn btn-primary font-weight-bold w-100 checkout-content-save-continue-button' %>
124
124
  </div>
125
125
  <% end %>
126
126
  </div>
@@ -47,14 +47,14 @@
47
47
  <div class="container-fluid">
48
48
  <div class="row pb-4 justify-content-center">
49
49
  <div class="col-12 col-lg-8">
50
- <%= link_to spree.checkout_path, class: 'btn btn-primary w-100 font-weight-bold text-uppercase product-added-modal-button', method: :get do %>
50
+ <%= link_to spree.checkout_path, class: 'btn btn-primary w-100 font-weight-bold product-added-modal-button', method: :get do %>
51
51
  <%= Spree.t(:checkout) %>
52
52
  <% end %>
53
53
  </div>
54
54
  </div>
55
55
  <div class="row justify-content-center">
56
56
  <div class="col-12 col-lg-8">
57
- <%= link_to spree.cart_path, class: 'btn btn-outline-primary w-100 font-weight-bold text-uppercase product-added-modal-button' do %>
57
+ <%= link_to spree.cart_path, class: 'btn btn-outline-primary w-100 font-weight-bold product-added-modal-button' do %>
58
58
  <%= Spree.t('pdp.view_cart') %>
59
59
  <% end %>
60
60
  </div>
@@ -1,12 +1,12 @@
1
1
  <div class="form-group mb-5">
2
- <%= f.email_field :email, class: 'spree-flat-input', placeholder: Spree.t(:email) %>
2
+ <%= f.email_field :email, class: 'form-control', placeholder: Spree.t(:email) %>
3
3
  </div>
4
4
 
5
5
  <div class="form-group mb-4">
6
- <%= f.password_field :password, class: 'spree-flat-input', placeholder: Spree.t(:password) %>
6
+ <%= f.password_field :password, class: 'form-control', placeholder: Spree.t(:password) %>
7
7
  </div>
8
8
 
9
9
  <div class="form-group mb-5">
10
- <%= f.password_field :password_confirmation, class: 'spree-flat-input', placeholder: Spree.t(:confirm_password) %>
10
+ <%= f.password_field :password_confirmation, class: 'form-control', placeholder: Spree.t(:confirm_password) %>
11
11
  </div>
12
12
  <div data-hook="signup_below_password_fields"></div>
@@ -1,5 +1,5 @@
1
1
  <% cache [base_cache_key, taxon, 'header'] do %>
2
- <div class="py-md-3 text-uppercase taxon-title">
2
+ <div class="py-md-3 taxon-title">
3
3
  <%= @taxon.name %>
4
4
  </div>
5
5
  <% unless @taxon.description.blank? %>
@@ -7,7 +7,7 @@
7
7
  <% child_taxons = [current_taxon, *current_taxon.children.where(hide_from_nav: false)] %>
8
8
  <% if current_taxon.level > 0 && child_taxons.size > 1 %>
9
9
  <div class="d-flex justify-content-center position-sticky sticky-top-90px taxon-subcategories-wrapper">
10
- <div class="py-1 text-uppercase d-none d-xl-flex overflow-x taxon-subcategories">
10
+ <div class="py-1 d-none d-xl-flex overflow-x taxon-subcategories">
11
11
  <% child_taxons.each_with_index.map do |subcategory, index| %>
12
12
  <%=
13
13
  link_to_unless subcategory == taxon,
@@ -1,4 +1,4 @@
1
- <p class="font-weight-bold text-center homepage-carousel-text text-uppercase">
1
+ <p class="font-weight-bold text-center homepage-carousel-text">
2
2
  <%= @taxon.name %>
3
3
  </p>
4
4
 
@@ -5,7 +5,7 @@
5
5
  <%= form_for Spree.user_class.new, as: @user, url: spree.user_path(@user), method: :put do |f| %>
6
6
  <%= render partial: 'spree/shared/user_form', locals: { f: f, remember_me_field: false } %>
7
7
  <div>
8
- <%= f.submit Spree.t(:update), class: 'btn btn-lg btn-block btn-primary text-uppercase font-weight-bold' %>
8
+ <%= f.submit Spree.t(:update), class: 'btn btn-lg btn-block btn-primary font-weight-bold' %>
9
9
  </div>
10
10
  <% end %>
11
11
  </div>
@@ -12,7 +12,7 @@
12
12
  <dd class="account-page-user-info-item-definition"><%= @user.email %></dd>
13
13
 
14
14
  <div class="d-lg-inline-block account-page-user-info-item-store-credits">
15
- <p class="my-0 text-uppercase text-center">
15
+ <p class="my-0 text-center">
16
16
  <%= Spree.t(:store_credit_name) %>
17
17
  <% @user.available_store_credits(current_store).each do |value| %>
18
18
  <br><b class="account-page-user-info-item-store-credits-amount"><%= value %></b>
@@ -0,0 +1,2 @@
1
+ pin "application-spree-frontend", to: "spree/frontend/application.js", preload: true
2
+ pin "@hotwired/turbo-rails", to: "turbo.min.js", preload: true
@@ -0,0 +1,18 @@
1
+ Rails.application.config.after_initialize do
2
+ if Spree::Core::Engine.backend_available?
3
+ action = ::Spree::Admin::Actions::ActionBuilder.new('preview', ->(resource) { "/products/#{resource.slug}" }).
4
+ with_icon_key('view.svg').
5
+ with_label_translation_key('admin.utilities.preview').
6
+ with_id('adminPreviewProduct').
7
+ with_target(:blank).
8
+ with_data_attributes({ turbo: false }).
9
+ build
10
+
11
+ Rails.application.config.spree_backend.actions[:product].add(action)
12
+ Rails.application.config.spree_backend.actions[:images].add(action)
13
+ Rails.application.config.spree_backend.actions[:variants].add(action)
14
+ Rails.application.config.spree_backend.actions[:prices].add(action)
15
+ Rails.application.config.spree_backend.actions[:stock].add(action)
16
+ Rails.application.config.spree_backend.actions[:product_properties].add(action)
17
+ end
18
+ end
@@ -0,0 +1,37 @@
1
+ en:
2
+ spree:
3
+ pdp:
4
+ checkout: Checkout
5
+ description: Description
6
+ details: Details
7
+ products_included_in_promotion: Products included in the promotion
8
+ quantity: Quantity
9
+ view_cart: View cart
10
+ you_may_also_like: You may also like
11
+ plp:
12
+ best_selling: Best Selling
13
+ clear_all: Clear All
14
+ collection: Collection
15
+ color: Color
16
+ done: Done
17
+ default: Default
18
+ filter_by: Filter By
19
+ newest_first: Newest First
20
+ no_results: No results
21
+ no_results_found: No results found
22
+ not_found_filters1: We couldn’t find a match for these filters.
23
+ not_found_filters2: Please try another choose.
24
+ not_found_text1: We couldn’t find products for '%{keywords}'.
25
+ not_found_text2: Please try another search.
26
+ price: Price
27
+ price_high_to_low: Price (High - Low)
28
+ price_low_to_high: Price (Low - High)
29
+ name_a_z: Name (A-Z)
30
+ name_z_a: Name (Z-A)
31
+ result: Result
32
+ results_for: Results For
33
+ size: Size
34
+ sort_by: Sort By
35
+ top_sellers: Top Sellers
36
+ type: Type
37
+
@@ -23,8 +23,6 @@ module Spree
23
23
  directory 'homepage', './app/assets/images/homepage'
24
24
  # SCSS theming
25
25
  template 'variables.scss', './app/assets/stylesheets/spree/frontend/variables/variables.scss'
26
- # Sprockets 4 manifest
27
- template 'app/assets/config/manifest.js', force: Rails.env.test?
28
26
  # home page template
29
27
  directory 'home', './app/views/spree/home'
30
28
  end
@@ -4,7 +4,7 @@ module Spree
4
4
  preference :additional_filters_partials, :array, default: %w()
5
5
  preference :always_put_site_name_in_title, :boolean, default: true
6
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
7
+ preference :http_cache_enabled, :boolean, default: false
8
8
  preference :layout, :string, default: 'spree/layouts/spree_application'
9
9
  preference :locale, :string, default: nil
10
10
  preference :products_filters, :array, default: %w(keywords price sort_by)