spree_frontend 4.0.0.rc2 → 4.0.0.rc3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/spree/frontend/checkout/address.js +2 -2
- data/app/controllers/spree/store_controller.rb +1 -1
- data/app/helpers/spree/structured_data_helper.rb +44 -0
- data/app/views/spree/home/index.html.erb +1 -0
- data/app/views/spree/products/_product.html.erb +6 -7
- data/app/views/spree/products/index.html.erb +2 -0
- data/app/views/spree/products/show.html.erb +6 -4
- data/app/views/spree/taxons/show.html.erb +2 -0
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a7266f41e2fa6d573a0f4794494010db8a3ca8c63a7aa1b1c2e630bf9cb69d4
|
4
|
+
data.tar.gz: 8a66adc0c24cf0e480b87263b5b2708d922fc2d6cc092792bde6757d6e585994
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 279b4c93d0070a054c15815c95b1734f18dbcf2ede6067dd1058a2e759f2c86b9e91b6b231f7eb443c1820f6ad60de6e6c6df91993158a546fe8cca519b07aa3
|
7
|
+
data.tar.gz: c087a9e63763783145f05f7adc5d9dc67cda2d50b43da34659e2bb94f273ccec3416bf0ae27eca2f36df1118948981b5e9bdad029dd66a062f9c72c814e5aeec
|
@@ -6,7 +6,7 @@ Spree.ready(function ($) {
|
|
6
6
|
if (countryId != null) {
|
7
7
|
if (Spree.Checkout[countryId] == null) {
|
8
8
|
$.ajax({
|
9
|
-
async: false, method: 'GET', url: '/api/v2/storefront/countries/' + countryId + '?include=states', dataType: 'json'
|
9
|
+
async: false, method: 'GET', url: Spree.pathFor('/api/v2/storefront/countries/' + countryId + '?include=states'), dataType: 'json'
|
10
10
|
}).done(function (data) {
|
11
11
|
var json = data.included; var xStates = []
|
12
12
|
for (var i = 0; i < json.length; i++) {
|
@@ -62,7 +62,7 @@ Spree.ready(function ($) {
|
|
62
62
|
statesWithBlank = [{name: '', id: ''}].concat(states)
|
63
63
|
$.each(statesWithBlank, function (idx, state) {
|
64
64
|
var opt = $(document.createElement('option')).attr('value', state.id).html(state.name)
|
65
|
-
if (selected === state.id) {
|
65
|
+
if (selected.toString(10) === state.id.toString(10)) {
|
66
66
|
opt.prop('selected', true)
|
67
67
|
}
|
68
68
|
stateSelect.append(opt)
|
@@ -3,7 +3,7 @@ module Spree
|
|
3
3
|
include Spree::Core::ControllerHelpers::Order
|
4
4
|
|
5
5
|
skip_before_action :set_current_order, only: :cart_link
|
6
|
-
skip_before_action :verify_authenticity_token, only: :ensure_cart
|
6
|
+
skip_before_action :verify_authenticity_token, only: :ensure_cart, raise: false
|
7
7
|
|
8
8
|
def forbidden
|
9
9
|
render 'spree/shared/forbidden', layout: Spree::Config[:layout], status: 403
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Spree
|
2
|
+
module StructuredDataHelper
|
3
|
+
def products_structured_data(products)
|
4
|
+
content_tag :script, type: 'application/ld+json' do
|
5
|
+
raw(
|
6
|
+
products.map do |product|
|
7
|
+
structured_product_hash(product)
|
8
|
+
end.to_json
|
9
|
+
)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def structured_product_hash(product)
|
16
|
+
{
|
17
|
+
'@context': 'https://schema.org/',
|
18
|
+
'@type': 'Product',
|
19
|
+
'@id': "#{spree.root_url}product_#{product.id}",
|
20
|
+
url: spree.product_url(product),
|
21
|
+
name: product.name,
|
22
|
+
image: structured_images(product),
|
23
|
+
description: product.description,
|
24
|
+
sku: product.sku,
|
25
|
+
offers: {
|
26
|
+
'@type': 'Offer',
|
27
|
+
price: product.price,
|
28
|
+
priceCurrency: current_currency,
|
29
|
+
availability: product.in_stock? ? 'InStock' : 'OutOfStock',
|
30
|
+
url: spree.product_url(product),
|
31
|
+
availabilityEnds: product.discontinue_on ? product.discontinue_on.strftime('%F') : ''
|
32
|
+
}
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
def structured_images(product)
|
37
|
+
images = product.has_variants? ? product.variant_images : product.images
|
38
|
+
|
39
|
+
return '' unless images.any?
|
40
|
+
|
41
|
+
main_app.rails_blob_url(images.first.attachment)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -1,19 +1,18 @@
|
|
1
1
|
<% url = spree.product_path(product, taxon_id: taxon.try(:id)) %>
|
2
|
-
<div id="product_<%= product.id %>" class="d-flex w-100 col-12 col-sm-6 col-lg-4 col-xl-3 product-list-item mb-4" data-hook="products_list_item"
|
2
|
+
<div id="product_<%= product.id %>" class="d-flex w-100 col-12 col-sm-6 col-lg-4 col-xl-3 product-list-item mb-4" data-hook="products_list_item">
|
3
3
|
<div class="card w-100">
|
4
4
|
<% cache(taxon.present? ? [I18n.locale, current_currency, taxon, product] : cache_key_for_product(product)) do %>
|
5
5
|
<div class="card-body text-center product-body">
|
6
|
-
<%= link_to url,
|
7
|
-
<%= small_image(product,
|
8
|
-
<%= content_tag(:span, truncate(product.name, length: 50), class: 'info mt-3 d-block',
|
6
|
+
<%= link_to url, class: 'd-block text-center' do %>
|
7
|
+
<%= small_image(product, class: "d-block mx-auto") %>
|
8
|
+
<%= content_tag(:span, truncate(product.name, length: 50), class: 'info mt-3 d-block', title: product.name) %>
|
9
9
|
<% end %>
|
10
10
|
</div>
|
11
11
|
<div class="card-footer text-center">
|
12
|
-
<span
|
13
|
-
<span class="price selling lead"
|
12
|
+
<span>
|
13
|
+
<span class="price selling lead">
|
14
14
|
<%= display_price(product) %>
|
15
15
|
</span>
|
16
|
-
<span itemprop="priceCurrency" content="<%= current_currency %>"></span>
|
17
16
|
</span>
|
18
17
|
</div>
|
19
18
|
<% end %>
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<% @body_id = 'product-details' %>
|
2
2
|
|
3
3
|
<% cache cache_key_for_product do %>
|
4
|
-
<div data-hook="product_show" class="row"
|
4
|
+
<div data-hook="product_show" class="row">
|
5
5
|
<div class="col-lg-4 col-md-5" data-hook="product_left_part">
|
6
6
|
<div data-hook="product_left_part_wrap">
|
7
7
|
<div id="product-images" data-hook="product_images">
|
8
8
|
<div id="main-image" class="card " data-hook>
|
9
9
|
<div class="card-body text-center">
|
10
|
-
<%= product_image(@product
|
10
|
+
<%= product_image(@product) %>
|
11
11
|
</div>
|
12
12
|
</div>
|
13
13
|
<div id="thumbnails" data-hook>
|
@@ -28,9 +28,9 @@
|
|
28
28
|
<div class="col-lg-8 col-md-7" data-hook="product_right_part">
|
29
29
|
<div data-hook="product_right_part_wrap">
|
30
30
|
<div id="product-description" data-hook="product_description">
|
31
|
-
<h1 class="product-title mt-2"
|
31
|
+
<h1 class="product-title mt-2"><%= @product.name %></h1>
|
32
32
|
|
33
|
-
<div
|
33
|
+
<div data-hook="description">
|
34
34
|
<%= sanitize product_description(@product) %>
|
35
35
|
</div>
|
36
36
|
|
@@ -46,3 +46,5 @@
|
|
46
46
|
</div>
|
47
47
|
</div>
|
48
48
|
<% end %>
|
49
|
+
|
50
|
+
<%= products_structured_data([@product]) %>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_frontend
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.0.
|
4
|
+
version: 4.0.0.rc3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Schofield
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-09-
|
11
|
+
date: 2019-09-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: spree_api
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 4.0.0.
|
19
|
+
version: 4.0.0.rc3
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 4.0.0.
|
26
|
+
version: 4.0.0.rc3
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: spree_core
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 4.0.0.
|
33
|
+
version: 4.0.0.rc3
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 4.0.0.
|
40
|
+
version: 4.0.0.rc3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bootstrap
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -171,6 +171,7 @@ files:
|
|
171
171
|
- app/helpers/spree/addresses_helper.rb
|
172
172
|
- app/helpers/spree/frontend_helper.rb
|
173
173
|
- app/helpers/spree/orders_helper.rb
|
174
|
+
- app/helpers/spree/structured_data_helper.rb
|
174
175
|
- app/helpers/spree/taxons_helper.rb
|
175
176
|
- app/models/spree/frontend_configuration.rb
|
176
177
|
- app/views/kaminari/twitter-bootstrap-4/_first_page.html.erb
|