spree_frontend 4.0.8 → 4.1.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (304) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/app/assets/images/arrow-right.svg +1 -0
  4. data/app/assets/images/arrow.svg +1 -0
  5. data/app/assets/images/bag.svg +1 -0
  6. data/app/assets/images/burger.svg +1 -0
  7. data/app/assets/images/check-mark-circle.png +0 -0
  8. data/app/assets/images/check-mark-circle.svg +1 -0
  9. data/app/assets/images/check-mark.svg +1 -0
  10. data/app/assets/images/circle-radio.svg +1 -0
  11. data/app/assets/images/circle.svg +1 -0
  12. data/app/assets/images/close.svg +1 -0
  13. data/app/assets/images/credit_cards/icons/american_express.svg +1 -0
  14. data/app/assets/images/credit_cards/icons/diners_club.svg +1 -0
  15. data/app/assets/images/credit_cards/icons/discover.svg +1 -0
  16. data/app/assets/images/credit_cards/icons/generic.svg +1 -0
  17. data/app/assets/images/credit_cards/icons/jcb.svg +1 -0
  18. data/app/assets/images/credit_cards/icons/maestro.svg +1 -0
  19. data/app/assets/images/credit_cards/icons/master.svg +1 -0
  20. data/app/assets/images/credit_cards/icons/visa.svg +1 -0
  21. data/app/assets/images/edit.svg +1 -0
  22. data/app/assets/images/empty-cart.svg +1 -0
  23. data/app/assets/images/error.svg +1 -0
  24. data/app/assets/images/facebook.svg +1 -0
  25. data/app/assets/images/full_circle-radio.svg +1 -0
  26. data/app/assets/images/full_circle.svg +1 -0
  27. data/app/assets/images/garbage.svg +1 -0
  28. data/app/assets/images/garbage_2.svg +1 -0
  29. data/app/assets/images/homepage/big_category_banner.jpg +0 -0
  30. data/app/assets/images/homepage/big_category_banner_mobile.jpg +0 -0
  31. data/app/assets/images/homepage/big_category_banner_tablet_landscape.jpg +0 -0
  32. data/app/assets/images/homepage/big_category_banner_tablet_portrait.jpg +0 -0
  33. data/app/assets/images/homepage/category_banner_lower.jpg +0 -0
  34. data/app/assets/images/homepage/category_banner_lower_mobile.jpg +0 -0
  35. data/app/assets/images/homepage/category_banner_lower_tablet_landscape.jpg +0 -0
  36. data/app/assets/images/homepage/category_banner_lower_tablet_portrait.jpg +0 -0
  37. data/app/assets/images/homepage/category_banner_upper.jpg +0 -0
  38. data/app/assets/images/homepage/category_banner_upper_mobile.jpg +0 -0
  39. data/app/assets/images/homepage/category_banner_upper_tablet_landscape.jpg +0 -0
  40. data/app/assets/images/homepage/category_banner_upper_tablet_portrait.jpg +0 -0
  41. data/app/assets/images/homepage/main_banner.jpg +0 -0
  42. data/app/assets/images/homepage/main_banner_mobile.jpg +0 -0
  43. data/app/assets/images/homepage/main_banner_tablet_landscape.jpg +0 -0
  44. data/app/assets/images/homepage/main_banner_tablet_portrait.jpg +0 -0
  45. data/app/assets/images/homepage/products.jpg +0 -0
  46. data/app/assets/images/homepage/promo_banner_left.jpg +0 -0
  47. data/app/assets/images/homepage/promo_banner_left_mobile.jpg +0 -0
  48. data/app/assets/images/homepage/promo_banner_left_tablet_landscape.jpg +0 -0
  49. data/app/assets/images/homepage/promo_banner_left_tablet_portrait.jpg +0 -0
  50. data/app/assets/images/homepage/promo_banner_right.jpg +0 -0
  51. data/app/assets/images/homepage/promo_banner_right_mobile.jpg +0 -0
  52. data/app/assets/images/homepage/promo_banner_right_tablet_landscape.jpg +0 -0
  53. data/app/assets/images/homepage/promo_banner_right_tablet_portrait.jpg +0 -0
  54. data/app/assets/images/instagram.svg +1 -0
  55. data/app/assets/images/logo-spree.png +0 -0
  56. data/app/assets/images/logo.png +0 -0
  57. data/app/assets/images/logo.svg +1 -0
  58. data/app/assets/images/logo@2x.png +0 -0
  59. data/app/assets/images/logo@3x.png +0 -0
  60. data/app/assets/images/magnifying-glass.svg +1 -0
  61. data/app/assets/images/meganav/promo_banner_left-first-category.jpg +0 -0
  62. data/app/assets/images/meganav/promo_banner_left-second-category.jpg +0 -0
  63. data/app/assets/images/meganav/promo_banner_left-third-category.jpg +0 -0
  64. data/app/assets/images/meganav/promo_banner_right-first-category.jpg +0 -0
  65. data/app/assets/images/meganav/promo_banner_right-second-category.jpg +0 -0
  66. data/app/assets/images/meganav/promo_banner_right-third-category.jpg +0 -0
  67. data/app/assets/images/minus.svg +1 -0
  68. data/app/assets/images/noimage/big_category_banner.jpg +0 -0
  69. data/app/assets/images/noimage/big_category_banner_mobile.jpg +0 -0
  70. data/app/assets/images/noimage/big_category_banner_tablet_landscape.jpg +0 -0
  71. data/app/assets/images/noimage/big_category_banner_tablet_portrait.jpg +0 -0
  72. data/app/assets/images/noimage/category_banner.jpg +0 -0
  73. data/app/assets/images/noimage/category_banner_mobile.jpg +0 -0
  74. data/app/assets/images/noimage/category_banner_plp.jpg +0 -0
  75. data/app/assets/images/noimage/category_banner_tablet_landscape.jpg +0 -0
  76. data/app/assets/images/noimage/category_banner_tablet_portrait.jpg +0 -0
  77. data/app/assets/images/noimage/main_banner.jpg +0 -0
  78. data/app/assets/images/noimage/main_banner_mobile.jpg +0 -0
  79. data/app/assets/images/noimage/main_banner_tablet_landscape.jpg +0 -0
  80. data/app/assets/images/noimage/main_banner_tablet_portrait.jpg +0 -0
  81. data/app/assets/images/noimage/plp.png +0 -0
  82. data/app/assets/images/noimage/product_photo.jpg +0 -0
  83. data/app/assets/images/noimage/promo_banner.jpg +0 -0
  84. data/app/assets/images/noimage/promo_banner_megamenu.jpg +0 -0
  85. data/app/assets/images/noimage/promo_banner_mobile.jpg +0 -0
  86. data/app/assets/images/noimage/promo_banner_tablet_landscape.jpg +0 -0
  87. data/app/assets/images/noimage/promo_banner_tablet_portrait.jpg +0 -0
  88. data/app/assets/images/pagination-arrow-right.svg +12 -0
  89. data/app/assets/images/pagination-double-arrow-right.svg +15 -0
  90. data/app/assets/images/person.svg +1 -0
  91. data/app/assets/images/picture-zoom.svg +31 -0
  92. data/app/assets/images/plus.svg +1 -0
  93. data/app/assets/images/radio-button.svg +1 -0
  94. data/app/assets/images/search-no-results.svg +1 -0
  95. data/app/assets/images/search.svg +1 -0
  96. data/app/assets/images/spark-logo@3x.png +0 -0
  97. data/app/assets/images/twitter.svg +1 -0
  98. data/app/assets/images/vimeo.svg +1 -0
  99. data/app/assets/javascripts/spree/frontend/account.js +12 -0
  100. data/app/assets/javascripts/spree/frontend/api_tokens.js +4 -1
  101. data/app/assets/javascripts/spree/frontend/carousel-noconflict.js +3 -0
  102. data/app/assets/javascripts/spree/frontend/cart.js +61 -3
  103. data/app/assets/javascripts/spree/frontend/checkout/payment.js +24 -6
  104. data/app/assets/javascripts/spree/frontend/checkout/shipment.js +1 -1
  105. data/app/assets/javascripts/spree/frontend/checkout.js +42 -0
  106. data/app/assets/javascripts/spree/frontend/components-bootstrap/.gitkeep +0 -0
  107. data/app/assets/javascripts/spree/frontend/components-custom/.gitkeep +0 -0
  108. data/app/assets/javascripts/spree/frontend/coupon_manager.js +49 -1
  109. data/app/assets/javascripts/spree/frontend/viewport.js +7 -0
  110. data/app/assets/javascripts/spree/frontend/views/spree/home/product_carousels.js +31 -0
  111. data/app/assets/javascripts/spree/frontend/views/spree/layouts/spree_application.js +35 -0
  112. data/app/assets/javascripts/spree/frontend/views/spree/product/related.js +30 -0
  113. data/app/assets/javascripts/spree/frontend/views/spree/products/cart_form.js +280 -0
  114. data/app/assets/javascripts/spree/frontend/views/spree/products/description.js +8 -0
  115. data/app/assets/javascripts/spree/frontend/views/spree/products/index.js +37 -0
  116. data/app/assets/javascripts/spree/frontend/views/spree/products/modal_carousel.js +35 -0
  117. data/app/assets/javascripts/spree/frontend/views/spree/shared/carousel/single.js +139 -0
  118. data/app/assets/javascripts/spree/frontend/views/spree/shared/carousel/swipes.js +53 -0
  119. data/app/assets/javascripts/spree/frontend/views/spree/shared/carousel/thumbnails.js +137 -0
  120. data/app/assets/javascripts/spree/frontend/views/spree/shared/carousel.js +129 -0
  121. data/app/assets/javascripts/spree/frontend/views/spree/shared/delete_address_popup.js +27 -0
  122. data/app/assets/javascripts/spree/frontend/views/spree/shared/mobile_navigation.js +123 -0
  123. data/app/assets/javascripts/spree/frontend/views/spree/shared/nav_bar.js +16 -0
  124. data/app/assets/javascripts/spree/frontend/views/spree/shared/product_added_modal.js +28 -0
  125. data/app/assets/javascripts/spree/frontend/views/spree/shared/quantity_select.js +58 -0
  126. data/app/assets/javascripts/spree/frontend.js +9 -7
  127. data/app/assets/javascripts/spree/lazysizes.config.js +8 -0
  128. data/app/assets/stylesheets/spree/frontend/application.scss +54 -0
  129. data/app/assets/stylesheets/spree/frontend/bootstrap-patches.scss +11 -0
  130. data/app/assets/stylesheets/spree/frontend/components-bootstrap/.gitkeep +0 -0
  131. data/app/assets/stylesheets/spree/frontend/components-bootstrap/alert.scss +3 -0
  132. data/app/assets/stylesheets/spree/frontend/components-bootstrap/button.scss +8 -0
  133. data/app/assets/stylesheets/spree/frontend/components-bootstrap/carousel.scss +85 -0
  134. data/app/assets/stylesheets/spree/frontend/components-bootstrap/modal.scss +3 -0
  135. data/app/assets/stylesheets/spree/frontend/components-custom/.gitkeep +0 -0
  136. data/app/assets/stylesheets/spree/frontend/components-custom/headers.scss +28 -0
  137. data/app/assets/stylesheets/spree/frontend/components-custom/inputs.scss +265 -0
  138. data/app/assets/stylesheets/spree/frontend/fonts.scss +137 -0
  139. data/app/assets/stylesheets/spree/frontend/functions.scss +104 -0
  140. data/app/assets/stylesheets/spree/frontend/helpers/spree/frontend_helper.scss +23 -0
  141. data/app/assets/stylesheets/spree/frontend/margins.scss +53 -0
  142. data/app/assets/stylesheets/spree/frontend/mixins.scss +20 -0
  143. data/app/assets/stylesheets/spree/frontend/variables/.gitkeep +0 -0
  144. data/app/assets/stylesheets/spree/frontend/variables/bootstrap-overrides.scss +40 -0
  145. data/app/assets/stylesheets/spree/frontend/variables/helper-variables.scss +10 -0
  146. data/app/assets/stylesheets/spree/frontend/variables/variables.scss +20 -0
  147. data/app/assets/stylesheets/spree/frontend/views/spree/.gitkeep +0 -0
  148. data/app/assets/stylesheets/spree/frontend/views/spree/checkout/confirm.scss +255 -0
  149. data/app/assets/stylesheets/spree/frontend/views/spree/checkout/edit.scss +505 -0
  150. data/app/assets/stylesheets/spree/frontend/views/spree/checkout/payment.scss +98 -0
  151. data/app/assets/stylesheets/spree/frontend/views/spree/checkout/registration.scss +26 -0
  152. data/app/assets/stylesheets/spree/frontend/views/spree/errors/not_found.scss +3 -0
  153. data/app/assets/stylesheets/spree/frontend/views/spree/home/index.scss +293 -0
  154. data/app/assets/stylesheets/spree/frontend/views/spree/icon.scss +13 -0
  155. data/app/assets/stylesheets/spree/frontend/views/spree/layouts/spree_application.scss +44 -0
  156. data/app/assets/stylesheets/spree/frontend/views/spree/orders/edit.scss +467 -0
  157. data/app/assets/stylesheets/spree/frontend/views/spree/orders/show.scss +273 -0
  158. data/app/assets/stylesheets/spree/frontend/views/spree/products/cart_form.scss +250 -0
  159. data/app/assets/stylesheets/spree/frontend/views/spree/products/index.scss +317 -0
  160. data/app/assets/stylesheets/spree/frontend/views/spree/products/show.scss +165 -0
  161. data/app/assets/stylesheets/spree/frontend/views/spree/shared/_color_select.scss +27 -0
  162. data/app/assets/stylesheets/spree/frontend/views/spree/shared/_images.scss +9 -0
  163. data/app/assets/stylesheets/spree/frontend/views/spree/shared/carousel/single.scss +142 -0
  164. data/app/assets/stylesheets/spree/frontend/views/spree/shared/carousel/thumbnails.scss +97 -0
  165. data/app/assets/stylesheets/spree/frontend/views/spree/shared/cart.scss +57 -0
  166. data/app/assets/stylesheets/spree/frontend/views/spree/shared/category_nav_bar.scss +86 -0
  167. data/app/assets/stylesheets/spree/frontend/views/spree/shared/delete_address_popup.scss +141 -0
  168. data/app/assets/stylesheets/spree/frontend/views/spree/shared/footer.scss +56 -0
  169. data/app/assets/stylesheets/spree/frontend/views/spree/shared/header.scss +82 -0
  170. data/app/assets/stylesheets/spree/frontend/views/spree/shared/login.scss +30 -0
  171. data/app/assets/stylesheets/spree/frontend/views/spree/shared/main_nav_bar.scss +103 -0
  172. data/app/assets/stylesheets/spree/frontend/views/spree/shared/mobile_navigation.scss +87 -0
  173. data/app/assets/stylesheets/spree/frontend/views/spree/shared/nav_bar.scss +78 -0
  174. data/app/assets/stylesheets/spree/frontend/views/spree/shared/no_product_available.scss +135 -0
  175. data/app/assets/stylesheets/spree/frontend/views/spree/shared/order_details.scss +37 -0
  176. data/app/assets/stylesheets/spree/frontend/views/spree/shared/product.scss +45 -0
  177. data/app/assets/stylesheets/spree/frontend/views/spree/shared/product_added_modal.scss +61 -0
  178. data/app/assets/stylesheets/spree/frontend/views/spree/shared/quantity_select.scss +55 -0
  179. data/app/assets/stylesheets/spree/frontend/views/spree/shared/registration.scss +7 -0
  180. data/app/assets/stylesheets/spree/frontend/views/spree/taxons/show.scss +47 -0
  181. data/app/assets/stylesheets/spree/frontend/views/spree/user_passwords/user_passwords.scss +12 -0
  182. data/app/assets/stylesheets/spree/frontend/views/spree/user_sessions/new.scss +3 -0
  183. data/app/assets/stylesheets/spree/frontend/views/spree/users/show.scss +325 -0
  184. data/app/assets/stylesheets/spree/frontend.css +1 -1
  185. data/app/controllers/concerns/spree/checkout/address_book.rb +7 -9
  186. data/app/controllers/spree/addresses_controller.rb +5 -6
  187. data/app/controllers/spree/checkout_controller.rb +3 -1
  188. data/app/controllers/spree/home_controller.rb +1 -5
  189. data/app/controllers/spree/orders_controller.rb +3 -1
  190. data/app/controllers/spree/products_controller.rb +45 -15
  191. data/app/controllers/spree/store_controller.rb +14 -2
  192. data/app/controllers/spree/taxons_controller.rb +20 -5
  193. data/app/helpers/spree/addresses_helper.rb +11 -12
  194. data/app/helpers/spree/frontend_helper.rb +168 -14
  195. data/app/helpers/spree/navigation_helper.rb +34 -0
  196. data/app/helpers/spree/structured_data_helper.rb +3 -3
  197. data/app/helpers/spree/taxons_helper.rb +4 -0
  198. data/app/models/spree/frontend_configuration.rb +1 -0
  199. data/app/views/kaminari/twitter-bootstrap-4/_first_page.html.erb +1 -1
  200. data/app/views/kaminari/twitter-bootstrap-4/_gap.html.erb +1 -1
  201. data/app/views/kaminari/twitter-bootstrap-4/_last_page.html.erb +1 -1
  202. data/app/views/kaminari/twitter-bootstrap-4/_next_page.html.erb +1 -1
  203. data/app/views/kaminari/twitter-bootstrap-4/_prev_page.html.erb +1 -1
  204. data/app/views/spree/address/_form.html.erb +24 -27
  205. data/app/views/spree/addresses/_form.html.erb +13 -8
  206. data/app/views/spree/addresses/edit.html.erb +11 -21
  207. data/app/views/spree/addresses/new.html.erb +11 -21
  208. data/app/views/spree/checkout/_address.html.erb +61 -54
  209. data/app/views/spree/checkout/_confirm.html.erb +112 -16
  210. data/app/views/spree/checkout/_credit_card.html.erb +9 -0
  211. data/app/views/spree/checkout/_delivery.html.erb +10 -86
  212. data/app/views/spree/checkout/_payment.html.erb +39 -64
  213. data/app/views/spree/checkout/_summary.html.erb +46 -73
  214. data/app/views/spree/checkout/edit.html.erb +22 -25
  215. data/app/views/spree/checkout/payment/_gateway.html.erb +14 -34
  216. data/app/views/spree/checkout/payment/_storecredit.html.erb +8 -8
  217. data/app/views/spree/checkout/registration.html.erb +30 -0
  218. data/app/views/spree/errors/not_found.html.erb +7 -0
  219. data/app/views/spree/home/index.html.erb +124 -10
  220. data/app/views/spree/layouts/checkout.html.erb +26 -0
  221. data/app/views/spree/layouts/spree_application.html.erb +10 -15
  222. data/app/views/spree/orders/_coupon_code.html.erb +24 -0
  223. data/app/views/spree/orders/_form.html.erb +25 -39
  224. data/app/views/spree/orders/_line_item.html.erb +19 -25
  225. data/app/views/spree/orders/_line_item_data.html.erb +31 -0
  226. data/app/views/spree/orders/edit.html.erb +50 -40
  227. data/app/views/spree/orders/show.html.erb +83 -17
  228. data/app/views/spree/products/_cart_form.html.erb +69 -73
  229. data/app/views/spree/products/_cart_form_availability_templates.html.erb +10 -0
  230. data/app/views/spree/products/_color_option_type.html.erb +36 -0
  231. data/app/views/spree/products/_description.html.erb +17 -0
  232. data/app/views/spree/products/_filter_and_sort_mobile_buttons.html.erb +16 -0
  233. data/app/views/spree/products/_filters_desktop.html.erb +58 -0
  234. data/app/views/spree/products/_filters_mobile.html.erb +62 -0
  235. data/app/views/spree/products/_gallery.html.erb +31 -0
  236. data/app/views/spree/products/_gallery_modal.html.erb +33 -0
  237. data/app/views/spree/products/_no_results.html.erb +14 -0
  238. data/app/views/spree/products/_no_results_with_filters.html.erb +13 -0
  239. data/app/views/spree/products/_option_type.html.erb +32 -0
  240. data/app/views/spree/products/_product.html.erb +5 -5
  241. data/app/views/spree/products/_promotions.html.erb +19 -12
  242. data/app/views/spree/products/_properties.html.erb +9 -20
  243. data/app/views/spree/products/_sort_desktop.html.erb +30 -0
  244. data/app/views/spree/products/_sort_mobile.html.erb +43 -0
  245. data/app/views/spree/products/_taxons.html.erb +1 -0
  246. data/app/views/spree/products/index.html.erb +40 -24
  247. data/app/views/spree/products/related.html.erb +8 -0
  248. data/app/views/spree/products/show.html.erb +39 -37
  249. data/app/views/spree/shared/_address.html.erb +0 -12
  250. data/app/views/spree/shared/_breadcrumbs.html.erb +23 -0
  251. data/app/views/spree/shared/_carousel_4_products.html.erb +99 -0
  252. data/app/views/spree/shared/_cart.html.erb +11 -0
  253. data/app/views/spree/shared/_checkout_header.html.erb +19 -0
  254. data/app/views/spree/shared/_color_select.html.erb +9 -0
  255. data/app/views/spree/shared/_copyright.html.erb +18 -0
  256. data/app/views/spree/shared/_delete_address_popup.html.erb +26 -0
  257. data/app/views/spree/shared/_error_messages.html.erb +2 -4
  258. data/app/views/spree/shared/_flashes.html.erb +9 -0
  259. data/app/views/spree/shared/_footer.html.erb +73 -0
  260. data/app/views/spree/shared/_head.html.erb +4 -9
  261. data/app/views/spree/shared/_header.html.erb +26 -13
  262. data/app/views/spree/shared/_link_to_account.html.erb +7 -0
  263. data/app/views/spree/shared/_link_to_cart.html.erb +2 -1
  264. data/app/views/spree/shared/_login.html.erb +34 -17
  265. data/app/views/spree/shared/_main_nav_bar.html.erb +41 -15
  266. data/app/views/spree/shared/_mobile_navigation.html.erb +68 -0
  267. data/app/views/spree/shared/_nav_bar.html.erb +52 -6
  268. data/app/views/spree/shared/_no_product_available.html.erb +23 -0
  269. data/app/views/spree/shared/_option_values.html.erb +24 -0
  270. data/app/views/spree/shared/_order_details.html.erb +5 -4
  271. data/app/views/spree/shared/_payment.html.erb +0 -3
  272. data/app/views/spree/shared/_payment_sources.html.erb +8 -0
  273. data/app/views/spree/shared/_product.html.erb +12 -0
  274. data/app/views/spree/shared/_product_added_modal.html.erb +66 -0
  275. data/app/views/spree/shared/_products.html.erb +22 -18
  276. data/app/views/spree/shared/_quantity_select.html.erb +6 -0
  277. data/app/views/spree/shared/_registration.html.erb +4 -0
  278. data/app/views/spree/shared/_search.html.erb +17 -20
  279. data/app/views/spree/shared/_translations.html.erb +9 -5
  280. data/app/views/spree/shared/_user_form.html.erb +12 -0
  281. data/app/views/spree/shared/carousel/_single.html.erb +83 -0
  282. data/app/views/spree/shared/carousel/_thumbnails.html.erb +68 -0
  283. data/app/views/spree/taxons/_header.html.erb +19 -0
  284. data/app/views/spree/taxons/_subcategories.html.erb +26 -0
  285. data/app/views/spree/taxons/product_carousel.html.erb +5 -0
  286. data/app/views/spree/taxons/show.html.erb +8 -20
  287. data/app/views/spree/users/_address.html.erb +25 -0
  288. data/app/views/spree/users/edit.html.erb +11 -0
  289. data/app/views/spree/users/show.html.erb +79 -0
  290. data/config/initializers/assets.rb +13 -1
  291. data/config/routes.rb +3 -0
  292. data/lib/generators/spree/frontend/copy_storefront/copy_storefront_generator.rb +24 -0
  293. data/lib/spree/frontend.rb +2 -0
  294. data/spree_frontend.gemspec +7 -11
  295. data/vendor/assets/javascripts/lazysizes.min.js +2 -0
  296. metadata +265 -25
  297. data/README.md +0 -50
  298. data/app/assets/javascripts/spree/frontend/product.js +0 -143
  299. data/app/assets/stylesheets/spree/frontend/_variables.scss +0 -4
  300. data/app/assets/stylesheets/spree/frontend/frontend_bootstrap.css.scss +0 -94
  301. data/app/views/spree/shared/_filters.html.erb +0 -48
  302. data/app/views/spree/shared/_login_bar.html.erb +0 -12
  303. data/app/views/spree/taxons/_taxon.html.erb +0 -4
  304. data/lib/generators/spree/frontend/copy_views/copy_views_generator.rb +0 -15
@@ -1,64 +1,74 @@
1
1
  <% @body_id = 'cart' %>
2
2
 
3
- <div data-hook="cart_container" class="col-12">
4
- <h1><%= Spree.t(:shopping_cart) %></h1>
3
+ <div data-hook="cart_container" class="container shopping-cart">
4
+ <%= render 'spree/shared/breadcrumbs', current_page_name: Spree.t('cart_page.title') %>
5
+
6
+ <h1 class="text-uppercase shopping-cart-header"><%= Spree.t('cart_page.header') %></h1>
5
7
 
6
8
  <% if @order.line_items.empty? %>
7
- <div data-hook="empty_cart">
8
- <div class="alert alert-info"><%= Spree.t(:your_cart_is_empty) %></div>
9
- <p>
10
- <%= link_to Spree.t(:continue_shopping), products_path, class: 'btn btn-outline-secondary' %>
11
- </p>
9
+ <div data-hook="empty_cart" class="shopping-cart-empty">
10
+ <div class="d-flex flex-column justify-content-between h-100">
11
+ <div class="d-flex flex-column align-items-center">
12
+ <%= icon(name: 'empty-cart',
13
+ classes: 'shopping-cart-empty-image',
14
+ width: 83,
15
+ height: 83) %>
16
+
17
+ <p class="text-center shopping-cart-empty-info"><%= Spree.t('cart_page.empty_info').html_safe %></p>
18
+ </div>
19
+ <%= link_to Spree.t(:continue_shopping), spree.products_path, class: 'btn btn-primary text-uppercase font-weight-bold shopping-cart-empty-continue-link' %>
20
+ </div>
12
21
  </div>
13
22
  <% else %>
14
23
  <div data-hook="outside_cart_form">
15
- <%= form_for @order, url: update_cart_path, html: { id: 'update-cart' } do |order_form| %>
24
+ <%= form_for @order, url: spree.update_cart_path, html: { id: 'update-cart' } do |order_form| %>
16
25
  <div data-hook="inside_cart_form">
17
-
18
- <div data-hook="cart_items" class="table-responsive">
26
+ <div data-hook="cart_items" class="shopping-cart-table">
19
27
  <%= render partial: 'form', locals: { order_form: order_form } %>
20
28
  </div>
21
29
 
22
- <div class="row">
30
+ <div class="d-lg-flex flex-wrap justify-content-between">
31
+ <div class="text-uppercase d-none d-lg-block mt-3">
32
+ <%= link_to Spree.t(:continue_shopping), spree.products_path, class: 'shopping-cart-buttons-continue' %>
33
+ </div>
34
+
35
+ <div class="text-right shopping-cart-total d-none d-lg-block">
36
+ <div class="text-uppercase d-lg-inline-block shopping-cart-total-text"><%= Spree.t(:total) %></div>
37
+ <div class="d-lg-inline-block shopping-cart-total-amount"><%= order_form.object.display_total %></div>
38
+ </div>
39
+
23
40
  <% if Spree::Frontend::Config[:coupon_codes_enabled] %>
24
- <div class='col-md-6 form-inline' data-hook='coupon_code'>
25
- <%= order_form.label :coupon_code, class: 'mr-2' %>
26
- <div class="input-group">
27
- <%= order_form.text_field :coupon_code, size: '30', class: 'form-control' %>
28
- <div class="input-group-append">
29
- <%= button_tag Spree.t(:coupon_code_apply), class: 'btn btn-outline-secondary' %>
30
- </div>
31
- </div>
32
- </div>
41
+ <%= render 'coupon_code',
42
+ promotion: @order.valid_coupon_promotions.first,
43
+ order_form: order_form,
44
+ classes: ''
45
+ %>
33
46
  <% end %>
34
47
 
35
- <div class="links col-md-6 d-flex justify-content-end" data-hook="cart_buttons">
36
- <div class="form-group">
37
- <%= button_tag class: 'btn btn-primary', id: 'update-button' do %>
38
- <%= Spree.t(:update) %>
39
- <% end %>
40
- <%= button_tag class: 'btn btn-lg btn-success', id: 'checkout-link', name: 'checkout' do %>
41
- <%= Spree.t(:checkout) %>
42
- <% end %>
43
- </div>
48
+ <div class="text-right shopping-cart-total d-lg-none">
49
+ <div class="text-uppercase shopping-cart-total-text"><%= Spree.t(:total) %></div>
50
+ <div class="shopping-cart-total-amount"><%= order_form.object.display_total %></div>
51
+ </div>
52
+
53
+ <div class="d-flex flex-column text-center shopping-cart-buttons" data-hook="cart_buttons">
54
+ <%= link_to Spree.t('cart_page.checkout'), spree.checkout_path, class: 'btn btn-primary text-uppercase font-weight-bold cart-checkout-btn shopping-cart-buttons-checkout', id: 'checkout-link', method: :get %>
55
+ <span class="text-uppercase shopping-cart-buttons-or d-lg-none"><%= Spree.t(:or) %></span>
56
+ <%= link_to Spree.t(:continue_shopping), spree.products_path, class: 'btn btn-outline-primary text-uppercase font-weight-bold d-lg-none shopping-cart-buttons-continue' %>
44
57
  </div>
45
58
  </div>
46
59
  </div>
47
60
  <% end %>
48
61
  </div>
49
-
50
- <div id="empty-cart" class="mt-4" data-hook>
51
- <%= form_tag empty_cart_path, method: :put do %>
52
- <p id="clear_cart_link" data-hook>
53
- <%= submit_tag Spree.t(:empty_cart), class: 'btn btn-outline-secondary' %>
54
- <%= Spree.t(:or) %>
55
- <%= link_to Spree.t(:continue_shopping), products_path, class: 'continue' %>
56
- </p>
57
- <% end %>
58
- </div>
59
62
  <% end %>
60
63
  </div>
61
64
 
62
65
  <script>
63
- Spree.current_order_token = "<%= @order.token %>"
66
+ window.addEventListener('DOMContentLoaded', function() {
67
+ Spree.current_order_token = "<%= @order.token %>"
68
+ <% if flash.any? %>
69
+ document.getElementById('overlay').classList.add('shown');
70
+ document.getElementById('no-product-available').classList.add('shown');
71
+ window.scrollTo(0, 0);
72
+ <% end %>
73
+ })
64
74
  </script>
@@ -1,22 +1,88 @@
1
- <fieldset id="order_summary" data-hook>
2
- <h1><%= accurate_title %></h1>
3
-
1
+ <div class='order-show container d-flex flex-column align-items-center flex-lg-wrap flex-lg-row justify-content-center' id="order_summary" data-hook>
4
2
  <% if order_just_completed?(@order) %>
5
- <p><strong><%= Spree.t(:thank_you_for_your_order) %></strong></p>
3
+ <%= icon(name: 'check-mark-circle',
4
+ classes: 'd-block d-lg-none mx-auto order-show-check-mark',
5
+ width: 56,
6
+ height: 56) %>
7
+ <%= icon(name: 'check-mark-circle',
8
+ classes: 'd-none d-lg-block mx-auto order-show-check-mark',
9
+ width: 102,
10
+ height: 102) %>
11
+ <h5 class="w-100 text-center"><%= Spree.t(:order_success) %></h5>
12
+ <p class="order-show-explain w-100 text-center"><%= Spree.t(:order_success_explain) %></p>
6
13
  <% end %>
7
14
 
8
- <div id="order" data-hook>
9
- <%= render partial: 'spree/shared/order_details', locals: { order: @order } %>
10
-
11
- <br class="clear" />
12
-
13
- <p data-hook="links">
14
- <%= link_to Spree.t(:back_to_store), spree.root_path, class: "button" %>
15
- <% unless order_just_completed?(@order) %>
16
- <% if try_spree_current_user && respond_to?(:account_path) %>
17
- <%= link_to Spree.t(:my_account), account_path, class: "button" %>
15
+ <p class="order-show-number text-uppercase w-100 text-center">
16
+ <%= accurate_title %> / <%= @order.completed_at.to_date.to_s(:long) %>
17
+ </p>
18
+ <dl class="w-100 d-lg-flex justify-content-lg-between">
19
+ <div>
20
+ <dt class="text-uppercase text-center text-lg-left"><%= Spree.t(:shipping_address) %></dt>
21
+ <dd class="text-center text-lg-left">
22
+ <%= render 'spree/shared/address', address: @order.ship_address %>
23
+ </dd>
24
+ </div>
25
+ <div>
26
+ <dt class="text-uppercase text-center text-lg-left"><%= Spree.t(:billing_address) %></dt>
27
+ <dd class="text-center text-lg-left">
28
+ <%= render 'spree/shared/address', address: @order.bill_address %>
29
+ </dd>
30
+ </div>
31
+ <div>
32
+ <dt class="text-uppercase text-center text-lg-left"><%= Spree.t(:shipping) %></dt>
33
+ <dd class="text-center text-lg-left"><%= @order.shipments.first.shipping_method.name %></dd>
34
+ </div>
35
+ <div>
36
+ <dt class="text-uppercase text-center text-lg-left"><%= Spree.t(:payment) %></dt>
37
+ <dd class="text-center text-lg-left">
38
+ <%= render collection: @order.payments.valid, partial: 'spree/shared/payment' %>
39
+ </dd>
40
+ </div>
41
+ </dl>
42
+ <hr class="w-100 mt-0 mb-4 d-sm-none" />
43
+ <div class="order-show-line-items d-flex flex-column align-items-center">
44
+ <% @order.line_items.each do |item| %>
45
+ <div class="order-show-line-items-line-item d-flex w-100">
46
+ <% if item.variant.images.length == 0 %>
47
+ <%= link_to product_image(item.product), item.product %>
48
+ <% else %>
49
+ <%= link_to image_tag(main_app.url_for(item.variant.images.first.url(:product))), item.product %>
18
50
  <% end %>
19
- <% end %>
20
- </p>
51
+ <div class="order-show-line-items-line-item-desc w-100">
52
+ <span class="order-show-line-items-line-item-desc-name">
53
+ <%= item.name %>
54
+ </span>
55
+ <span class="order-show-line-items-line-item-desc-subtitle text-break text-uppercase">
56
+ <ul class="list-unstyled mb-0">
57
+ <% item.variant.option_values.sort { |ov| ov.option_type.position }.each do |ov| %>
58
+ <li><%= "#{ov.option_type.presentation}: #{ov.name.titleize}" %></li>
59
+ <% end %>
60
+ </ul>
61
+ </span>
62
+ <div class="order-show-line-items-line-item-desc-price">
63
+ <div class="order-show-line-items-line-item-desc-price-attr-name d-inline d-lg-block">
64
+ <span><%= Spree.t(:price) %></span>
65
+ </div>
66
+ <span class="font-weight-bold"><%= item.single_money.to_html %></span>
67
+ </div>
68
+ <div class="order-show-line-items-line-item-desc-quantity">
69
+ <div class="order-show-line-items-line-item-desc-quantity-attr-name d-inline d-lg-block">
70
+ <span><%= Spree.t(:quantity) %></span>
71
+ </div>
72
+ <span class="order-show-line-items-line-item-desc-quantity-val d-lg-block"><%= item.quantity %></span>
73
+ </div>
74
+ <div class="order-show-line-items-line-item-desc-total">
75
+ <div class="order-show-line-items-line-item-desc-total-attr-name d-inline d-lg-block">
76
+ <span><%= Spree.t(:total) %></span>
77
+ </div>
78
+ <span class="font-weight-bold d-lg-block"><%= item.display_total.to_s %></span>
79
+ </div>
80
+ </div>
81
+ </div>
82
+ <% end %>
83
+ </div>
84
+ <hr class="w-100 mt-4 mb-0 d-sm-none" />
85
+ <div id="checkout-summary" class="w-100" data-hook="checkout_summary_box">
86
+ <%= render partial: 'spree/checkout/summary', locals: { order: @order } %>
21
87
  </div>
22
- </fieldset>
88
+ </div>
@@ -1,84 +1,80 @@
1
- <%= form_for :order, html: { id: 'add-to-cart-form' } do |f| %>
2
- <div class="row" id="inside-product-cart-form" data-hook="inside_product_cart_form" itemprop="offers" itemscope itemtype="https://schema.org/Offer">
3
- <% if @product.variants_and_option_values(current_currency).any? %>
4
- <div id="product-variants" class="col-lg-6 mt-4">
5
- <h3 class="product-section-title"><%= Spree.t(:variants) %></h3>
6
- <ul class="list-group">
7
- <% @product.variants_and_option_values(current_currency).each_with_index do |variant, index| %>
8
- <li class="list-group-item <%= "active" if index == 0 %>">
9
- <div class="form-check">
10
- <%= radio_button_tag "variant_id", variant.id, index == 0,
11
- 'data-price' => variant.price_in(current_currency).money,
12
- 'data-in-stock' => variant.can_supply?,
13
- 'data-backordered' => variant.backordered?,
14
- class: 'form-check-input'
15
- %>
16
- <%= label_tag "variant_id_#{ variant.id }", class: "form-check-label" do %>
17
- <span class="variant-description">
18
- <%= variant.options_text %>
19
- </span>
20
- <% if variant_price variant %>
21
- <span class="price diff"><%= variant_price variant %></span>
22
- <% end %>
23
- <% unless variant.can_supply? %>
24
- <span class="out-of-stock"><%= Spree.t(:out_of_stock) %></span>
25
- <% end %>
26
- <% end %>
27
- </div>
28
- </li>
29
- <% end%>
30
- </ul>
1
+ <template class="availability-template availability-template-not-available-in-currency">
2
+ <%= render 'cart_form_availability_templates', type: 'not-available-in-currency' %>
3
+ </template>
4
+
5
+ <template class="availability-template availability-template-in-stock">
6
+ <%= render 'cart_form_availability_templates', type: 'in-stock' %>
7
+ </template>
8
+
9
+ <template class="availability-template availability-template-backorderable">
10
+ <%= render 'cart_form_availability_templates', type: 'backorderable' %>
11
+ </template>
12
+
13
+ <template class="availability-template availability-template-out-of-stock">
14
+ <%= render 'cart_form_availability_templates', type: 'out-of-stock' %>
15
+ </template>
16
+
17
+ <% is_product_available_in_currency = product_available_in_currency?(@product) %>
18
+ <% default_variant = default_variant(@variants) %>
19
+
20
+ <%= form_for :order, html: {
21
+ id: 'add-to-cart-form',
22
+ class: 'add-to-cart-form',
23
+ 'data-product-summary': @product_summary.to_json,
24
+ 'data-variants': product_variants_matrix(is_product_available_in_currency),
25
+ 'data-variant-change-trigger-identifier': variant_change_identifier
26
+ } do |f| %>
27
+ <div id="inside-product-cart-form" data-hook="inside_product_cart_form">
28
+ <% if is_product_available_in_currency %>
29
+ <div id="product-price" class="mb-2 text-center text-md-left add-to-cart-form-price" data-hook="product_price">
30
+ <span class="price selling" content="<%= @product.price_in(current_currency).amount.to_d %>">
31
+ <%= display_price(default_variant) %>
32
+ </span>
33
+ <span content="<%= current_currency %>"></span>
31
34
  </div>
32
- <% else %>
33
- <%= hidden_field_tag "variant_id", @product.master.id %>
34
35
  <% end %>
35
36
 
36
- <% if @product.price_in(current_currency) && !@product.price.nil? %>
37
- <div data-hook="product_price" class="col-lg-5 mt-4">
38
- <div id="product-price">
39
- <h3 class="product-section-title"><%= Spree.t(:price) %></h3>
40
- <div>
41
- <span class="lead price selling" itemprop="price" content="<%= @product.price_in(current_currency).amount.to_d %>">
42
- <%= display_price(@product) %>
43
- </span>
44
- <span itemprop="priceCurrency" content="<%= current_currency %>"></span>
45
- </div>
37
+ <div class="text-center text-md-left add-to-cart-form-general-availability text-uppercase">
38
+ <%= Spree.t(:availability) %>:
39
+ <% if !is_product_available_in_currency %>
40
+ <%= render 'cart_form_availability_templates', type: 'not-available-in-currency' %>
41
+ <% elsif default_variant.in_stock? %>
42
+ <%= render 'cart_form_availability_templates', type: 'in-stock' %>
43
+ <% elsif default_variant.backorderable? %>
44
+ <%= render 'cart_form_availability_templates', type: 'backorderable' %>
45
+ <% else %>
46
+ <%= render 'cart_form_availability_templates', type: 'out-of-stock' %>
47
+ <% end %>
48
+ </div>
46
49
 
47
- <% if @product.master.can_supply? %>
48
- <link itemprop="availability" href="https://schema.org/InStock" />
49
- <% elsif @product.variants.empty? %>
50
- <span class="out-of-stock d-block mt-2">
51
- <%= Spree.t(:out_of_stock) %>
52
- </span>
53
- <% end %>
54
- <% if @product.backordered? %>
55
- <div class="alert alert-warning" id="cart-backordered-info">
56
- <%= Spree.t(:backordered_info) %>
57
- </div>
58
- <% end %>
50
+ <% if @product.variants_and_option_values(current_currency).any? %>
51
+ <hr>
52
+ <ul id="product-variants" class="product-variants">
53
+ <% used_variants_options(@variants).each_with_index do |option_type, index| %>
54
+ <li>
55
+ <% if option_type[:name] == "color" %>
56
+ <%= render "color_option_type", option_type: option_type, index: index %>
57
+ <% else %>
58
+ <%= render "option_type", option_type: option_type, index: index %>
59
+ <% end %>
60
+ </li>
61
+ <% end %>
62
+ </ul>
63
+ <% end %>
64
+
65
+ <% if is_product_available_in_currency && @product.can_supply? %>
66
+ <%= hidden_field_tag "variant_id", default_variant.id %>
67
+
68
+ <hr>
69
+ <div>
70
+ <div class="mb-5 mt-4">
71
+ <%= render 'spree/shared/quantity_select', input_name: :quantity %>
59
72
  </div>
60
73
 
61
- <% if @product.can_supply? %>
62
- <div class="add-to-cart mt-2">
63
- <div class="input-group">
64
- <%= number_field_tag :quantity, 1, class: 'title form-control', min: 1 %>
65
- <div class="input-group-append">
66
- <%= button_tag class: 'btn btn-success', id: 'add-to-cart-button', type: :submit, disabled: true do %>
67
- <%= Spree.t(:add_to_cart) %>
68
- <% end %>
69
- </div>
70
- </div>
71
- </div>
74
+ <%= 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 %>
75
+ <%= Spree.t(:add_to_cart) %>
72
76
  <% end %>
73
77
  </div>
74
- <% else %>
75
- <div id="product-price">
76
- <div>
77
- <span class="price selling" itemprop="price">
78
- <%= Spree.t('product_not_available_in_this_currency') %>
79
- </span>
80
- </div>
81
- </div>
82
78
  <% end %>
83
79
  </div>
84
80
  <% end %>
@@ -0,0 +1,10 @@
1
+ <% case type %>
2
+ <% when "not-available-in-currency" %>
3
+ <span class="add-to-cart-form-general-availability-value add-to-cart-form-general-availability-value--danger"><%= Spree.t(:product_not_available_in_this_currency) %></span>
4
+ <% when "in-stock" %>
5
+ <span class="add-to-cart-form-general-availability-value"><%= Spree.t(:in_stock) %></span>
6
+ <% when "backorderable" %>
7
+ <span class="add-to-cart-form-general-availability-value add-to-cart-form-general-availability-value--warning"><%= Spree.t(:backordered_info) %></span>
8
+ <% when "out-of-stock" %>
9
+ <span class="add-to-cart-form-general-availability-value add-to-cart-form-general-availability-value--danger"><%= Spree.t(:out_of_stock) %></span>
10
+ <% end %>
@@ -0,0 +1,36 @@
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">
3
+ <%= option_type[:presentation] %>
4
+ </span>
5
+
6
+ <div class="d-flex flex-wrap justify-content-center justify-content-md-start">
7
+ <ol class="d-flex flex-wrap product-variants-variant-values">
8
+ <% option_type[:option_values].each do |option_value| %>
9
+ <li>
10
+ <%= radio_button_tag "variant_option_value_id_#{option_type[:id]}",
11
+ option_value[:id],
12
+ option_value[:is_default] && index == 0,
13
+ class: "product-variants-variant-values-radio",
14
+ data: {
15
+ "option-type-index" => index,
16
+ "presentation" => option_value[:presentation],
17
+ "variant-id" => option_value[:variant_id],
18
+ "is-color" => true
19
+ }
20
+ %>
21
+
22
+ <%= label_tag "variant_option_value_id_#{option_type[:id]}_#{option_value[:id]}",
23
+ class: "m-1 m-sm-2 m-md-1 color-select-label",
24
+ tabindex: 0,
25
+ "aria-label" => option_value[:presentation] do %>
26
+
27
+ <%= render partial: "spree/shared/color_select", locals: {
28
+ color: option_value[:presentation],
29
+ selected: false
30
+ } %>
31
+ <% end %>
32
+ </li>
33
+ <% end %>
34
+ </ol>
35
+ </div>
36
+ </div>
@@ -0,0 +1,17 @@
1
+ <h3 class="pt-4 font-weight-bold text-uppercase product-details-subtitle"><%= Spree.t(:description) %></h3>
2
+ <div id="product-description-short" class="m-0 text-break product-description" data-hook="description">
3
+ <%= sanitize product_description(@product).truncate(450) %>
4
+ </div>
5
+
6
+ <div id="product-description-long" class="m-0 text-break product-description d-none" data-hook="description">
7
+ <%= sanitize product_description(@product) %>
8
+ </div>
9
+
10
+ <% if product_description(@product).length > 450 %>
11
+ <span id="product-description-arrow" class="d-flex justify-content-center align-items-center mt-3 mx-auto product-description-arrow" aria-hidden="true">
12
+ <%= icon(name: 'arrow-right',
13
+ classes: 'spree-icon-arrow spree-icon-arrow-down',
14
+ width: 20,
15
+ height: 20) %>
16
+ </span>
17
+ <% end %>
@@ -0,0 +1,16 @@
1
+ <div class="container-fluid plp-filter-and-sort-horizontal-border d-lg-none mb-3">
2
+ <div class="row">
3
+ <div id="filter-by-overlay-show-button" class="col-6 plp-filter-and-sort-vertical-border">
4
+ <div class="plp-filter-and-sort-buttons">
5
+ <%= Spree.t('plp.filter_by') %>
6
+ <%= inline_svg_tag 'arrow-right.svg', class: "plp-icon" %>
7
+ </div>
8
+ </div>
9
+ <div id="sort-by-overlay-show-button" class="col-6">
10
+ <div class="plp-filter-and-sort-buttons">
11
+ <%= Spree.t("plp.#{ params[:sort_by].blank? ? 'sort_by': params[:sort_by].gsub('-', '_') }") %>
12
+ <%= inline_svg_tag 'arrow-right.svg', class: "plp-icon" %>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ </div>
@@ -0,0 +1,58 @@
1
+ <% cache base_cache_key + [available_option_types, permitted_params, @taxon] do %>
2
+ <div id="plp-filters-accordion" class="d-none d-lg-block col-lg-3 pr-5 position-sticky h-100 plp-filters" data-hook="taxon_sidebar_navigation">
3
+ <% @available_option_types.each do |option_type| %>
4
+ <div class="w-100 py-2 card plp-filters-card">
5
+ <% ot_downcase_name = option_type.filter_param %>
6
+ <% option_type_name = ot_downcase_name.titleize %>
7
+
8
+ <div class="card-header <%= 'collapsed' if params[ot_downcase_name].blank? %> px-1 plp-filters-card-header" id="filters<%= option_type_name %>" data-toggle="collapse" data-target="#collapseFilter<%= option_type_name %>" aria-expanded="false" aria-controls="collapseFilter<%= option_type_name %>" role="heading" aria-level="2">
9
+ <%= option_type.presentation %>
10
+ <%= icon(name: 'plus',
11
+ classes: 'mt-1 float-right arrow plp-filters-card-header-arrow--plus',
12
+ width: 16,
13
+ height: 16) %>
14
+ <%= icon(name: 'minus',
15
+ classes: 'mt-1 float-right arrow plp-filters-card-header-arrow--minus',
16
+ width: 16,
17
+ height: 16) %>
18
+ </div>
19
+ <div id="collapseFilter<%= option_type_name %>" class="collapse <%= 'show' unless params[ot_downcase_name].blank? %>" aria-labelledby="filters<%= option_type_name %>">
20
+ <div class="card-body px-0 pt-1">
21
+ <%= render 'spree/shared/option_values',
22
+ params_ot_downcase_name: params[ot_downcase_name],
23
+ option_type: option_type,
24
+ permitted_params: permitted_params,
25
+ ot_downcase_name: ot_downcase_name
26
+ %>
27
+ </div>
28
+ </div>
29
+ </div>
30
+ <% end %>
31
+
32
+ <div class="w-100 py-2 card plp-filters-card">
33
+ <div class="card-header <%= 'collapsed' if params[:price].blank? %> px-1 plp-filters-card-header" id="filtersPrice" data-toggle="collapse" data-target="#collapseFilterPrice" aria-expanded="false" aria-controls="collapseFilterPrice" role="heading" aria-level="2">
34
+ <%= Spree.t('plp.price') %>
35
+ <%= icon(name: 'plus',
36
+ classes: 'mt-1 float-right arrow plp-filters-card-header-arrow--plus',
37
+ width: 16,
38
+ height: 16) %>
39
+ <%= icon(name: 'minus',
40
+ classes: 'mt-1 float-right arrow plp-filters-card-header-arrow--minus',
41
+ width: 16,
42
+ height: 16) %>
43
+ </div>
44
+ <div id="collapseFilterPrice" class="collapse <%= 'show' unless params[:price].blank? %>" aria-labelledby="filtersPrice">
45
+ <div class="card-body px-0 pt-1">
46
+ <% price_filter_values.each do |name| %>
47
+ <% price_param = params[:price] == name ? '' : name %>
48
+ <%= link_to permitted_params.merge({ price: price_param }), class: "d-block" do %>
49
+ <div class="d-inline-block py-1 px-2 m-1 text-uppercase plp-filters-card-item <%= 'plp-filters-card-item--selected' if params[:price] == name %>">
50
+ <%= name %>
51
+ </div>
52
+ <% end %>
53
+ <% end %>
54
+ </div>
55
+ </div>
56
+ </div>
57
+ </div>
58
+ <% end %>
@@ -0,0 +1,62 @@
1
+ <% is_visible = params[:menu_open] ? 'block' : 'none' %>
2
+
3
+ <% cache base_cache_key + [available_option_types, permitted_params, @taxon, is_visible] do %>
4
+ <div id="filter-by-overlay" class="d-lg-none plp-overlay" style="display: <%= is_visible %>;">
5
+ <div class="plp-scroll">
6
+ <div class="container">
7
+ <div class="plp-overlay-header">
8
+ <%= Spree.t('plp.filter_by') %>
9
+ <%= inline_svg_tag 'close.svg', id: 'filter-by-overlay-hide-button' %>
10
+ </div>
11
+ </div>
12
+ <div id="filters-accordion">
13
+ <% available_option_types.each do |option_type| %>
14
+ <% option_type_name = option_type.presentation.titleize.gsub(' ', '') %>
15
+ <% ot_downcase_name = option_type_name.downcase %>
16
+
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" data-target="#collapseFilterMobile<%= option_type_name %>" aria-expanded="true" aria-controls="collapseFilterMobile<%= option_type_name %>" role="heading" aria-level="3">
19
+ <%= option_type_name %>
20
+ <%= icon(name: 'arrow-right',
21
+ classes: 'spree-icon-arrow spree-icon-arrow-right mt-1 float-right arrow plp-overlay-card-header-arrow',
22
+ width: 16,
23
+ height: 16) %>
24
+ </div>
25
+ <div id="collapseFilterMobile<%= option_type_name %>" class="collapse <%= 'show' unless params[ot_downcase_name].blank? %>" aria-labelledby="collapseFilterMobile<%= option_type_name %>" data-parent="#filters-accordion">
26
+ <div class="card-body pt-1">
27
+ <%= render 'spree/shared/option_values', params_ot_downcase_name: params[ot_downcase_name], option_type: option_type, permitted_params: permitted_params, ot_downcase_name: ot_downcase_name %>
28
+ </div>
29
+ </div>
30
+ </div>
31
+ <% end %>
32
+
33
+ <div class="card plp-overlay-card">
34
+ <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">
35
+ <%= Spree.t('plp.price') %>
36
+ <%= icon(name: 'arrow-right',
37
+ classes: 'spree-icon-arrow spree-icon-arrow-right mt-1 float-right arrow plp-overlay-card-header-arrow',
38
+ width: 16,
39
+ height: 16) %>
40
+ </div>
41
+ <div id="collapseFour" class="collapse <%= 'show' unless params[:price].blank? %>" aria-labelledby="headingFour" data-parent="#filters-accordion">
42
+ <div class="card-body pt-1">
43
+ <% price_filter_values.each do |name| %>
44
+ <% price_param = params[:price] == name ? '' : name %>
45
+ <%= link_to permitted_params.merge(price: price_param, menu_open: 1) do %>
46
+ <div class="d-inline-block py-1 px-2 m-1 text-uppercase plp-overlay-card-item <%= 'plp-overlay-card-item--selected' if params[:price] == name %>">
47
+ <%= name %>
48
+ </div>
49
+ <% end %>
50
+ <% end %>
51
+ </div>
52
+ </div>
53
+ </div>
54
+ </div>
55
+ </div>
56
+
57
+ <div class="container position-absolute text-center mb-2 plp-overlay-buttons pt-3">
58
+ <%= link_to Spree.t('plp.clear_all'), permitted_params.select { |key, value| key == "sort_by"}, class: 'btn spree-btn btn-outline-primary w-100 mb-4' %>
59
+ <%= link_to Spree.t('plp.done'), permitted_params, class: 'btn btn-primary spree-btn w-100' %>
60
+ </div>
61
+ </div>
62
+ <% end %>
@@ -0,0 +1,31 @@
1
+ <div class="col-12 col-md-7 col-lg-7" data-hook="product_left_part">
2
+ <div
3
+ class="w-100 d-flex align-self-start justify-content-between product-details-images"
4
+ data-hook="product_left_part_wrap"
5
+ >
6
+ <% if @product_images.size > 1 %>
7
+ <div class="d-none d-md-block product-details-thumbnails" data-hook="product_thumbnails">
8
+ <%= render 'spree/shared/carousel/thumbnails',
9
+ images: @product_images,
10
+ group_id: 'main-product-carousel',
11
+ id: 'productThumbnailsCarousel',
12
+ trigger_id: 'productCarousel',
13
+ per_page: 5
14
+ %>
15
+ </div>
16
+ <% end %>
17
+ <div class="product-details-single" data-hook="product_images">
18
+ <% if @product_images.size == 1 %>
19
+ <%= plp_and_carousel_image(@product) %>
20
+ <% else %>
21
+ <%= render 'spree/shared/carousel/single',
22
+ images: @product_images,
23
+ group_id: 'main-product-carousel',
24
+ id: 'productCarousel',
25
+ trigger_id: 'productCarousel',
26
+ zoomed: false
27
+ %>
28
+ <% end %>
29
+ </div>
30
+ </div>
31
+ </div>