spree_frontend 2.0.13 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/store/checkout.js.coffee +22 -12
- data/app/assets/javascripts/store/product.js.coffee +3 -3
- data/app/assets/stylesheets/store/screen.css.scss +4 -21
- data/app/controllers/spree/checkout_controller.rb +14 -19
- data/app/controllers/spree/content_controller.rb +0 -1
- data/app/controllers/spree/orders_controller.rb +23 -15
- data/app/controllers/spree/products_controller.rb +1 -7
- data/app/controllers/spree/store_controller.rb +3 -4
- data/app/views/spree/checkout/_confirm.html.erb +1 -1
- data/app/views/spree/checkout/_summary.html.erb +2 -2
- data/app/views/spree/checkout/edit.html.erb +0 -4
- data/app/views/spree/checkout/payment/_gateway.html.erb +4 -2
- data/app/views/spree/checkout/registration.html.erb +20 -0
- data/app/views/spree/layouts/spree_application.html.erb +3 -1
- data/app/views/spree/orders/_line_item.html.erb +3 -3
- data/app/views/spree/orders/new.html.erb +9 -0
- data/app/views/spree/products/_cart_form.html.erb +7 -3
- data/app/views/spree/products/_image.html.erb +2 -2
- data/app/views/spree/shared/_google_analytics.html.erb +27 -31
- data/app/views/spree/shared/_products.html.erb +0 -7
- data/app/views/spree/shared/_search.html.erb +1 -1
- data/config/routes.rb +9 -12
- data/lib/spree/frontend/preference_rescue.rb +25 -0
- metadata +26 -66
- data/app/assets/images/admin/bg/spree_50.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f2bda97082288faab57d08de2ab077233dd47c6
|
4
|
+
data.tar.gz: 923864456f4fb1cb0d7ccd8ed2bb7c78b478c5a7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39c227a8f797b5ec0e403fbede9cd317f5dad891def3ad480cca6dc49744cacb128c36cb8282c02aa4313163e042d0e7fafe45f24ef543648f65fb860e13cb18
|
7
|
+
data.tar.gz: a8cc031d6638a823550a7e573136643c8881542ac913c6fd61a6c160bf12e1064cc8d9e517ae9e580ecfc1f2c1337432a73d25c319feb40fdf57bcf1c87d62df
|
@@ -1,16 +1,25 @@
|
|
1
|
+
//= require jquery.payment
|
2
|
+
|
1
3
|
Spree.disableSaveOnClick = ->
|
2
4
|
($ 'form.edit_order').submit ->
|
3
5
|
($ this).find(':submit, :image').attr('disabled', true).removeClass('primary').addClass 'disabled'
|
4
6
|
|
5
7
|
Spree.ready ($) ->
|
6
8
|
Spree.Checkout = {}
|
9
|
+
$("#card_number").payment('formatCardNumber')
|
10
|
+
$("#card_expiry").payment('formatCardExpiry')
|
11
|
+
$("#card_code").payment('formatCardCVC')
|
12
|
+
|
13
|
+
$("#card_number").change ->
|
14
|
+
$("#cc_type").val($.payment.cardType(@value))
|
15
|
+
|
7
16
|
if ($ '#checkout_form_address').is('*')
|
8
17
|
($ '#checkout_form_address').validate()
|
9
18
|
|
10
19
|
getCountryId = (region) ->
|
11
|
-
$('#' + region + 'country select').val()
|
20
|
+
$('p#' + region + 'country select').val()
|
12
21
|
|
13
|
-
|
22
|
+
updateState = (region) ->
|
14
23
|
countryId = getCountryId(region)
|
15
24
|
if countryId?
|
16
25
|
unless Spree.Checkout[countryId]?
|
@@ -18,15 +27,15 @@ Spree.ready ($) ->
|
|
18
27
|
Spree.Checkout[countryId] =
|
19
28
|
states: data.states
|
20
29
|
states_required: data.states_required
|
21
|
-
|
30
|
+
fillStates(Spree.Checkout[countryId], region)
|
22
31
|
else
|
23
|
-
|
32
|
+
fillStates(Spree.Checkout[countryId], region)
|
24
33
|
|
25
|
-
|
34
|
+
fillStates = (data, region) ->
|
26
35
|
statesRequired = data.states_required
|
27
36
|
states = data.states
|
28
37
|
|
29
|
-
statePara = ($ '#' + region + 'state')
|
38
|
+
statePara = ($ 'p#' + region + 'state')
|
30
39
|
stateSelect = statePara.find('select')
|
31
40
|
stateInput = statePara.find('input')
|
32
41
|
stateSpanRequired = statePara.find('state-required')
|
@@ -44,6 +53,7 @@ Spree.ready ($) ->
|
|
44
53
|
statePara.show()
|
45
54
|
stateSpanRequired.show()
|
46
55
|
stateSelect.addClass('required') if statesRequired
|
56
|
+
stateSelect.removeClass('hidden')
|
47
57
|
stateInput.removeClass('required')
|
48
58
|
else
|
49
59
|
stateSelect.hide().prop 'disabled', true
|
@@ -60,13 +70,13 @@ Spree.ready ($) ->
|
|
60
70
|
stateInput.removeClass('hidden')
|
61
71
|
stateSelect.removeClass('required')
|
62
72
|
|
63
|
-
($ '#bcountry select').change ->
|
64
|
-
|
73
|
+
($ 'p#bcountry select').change ->
|
74
|
+
updateState 'b'
|
65
75
|
|
66
|
-
($ '#scountry select').change ->
|
67
|
-
|
76
|
+
($ 'p#scountry select').change ->
|
77
|
+
updateState 's'
|
68
78
|
|
69
|
-
|
79
|
+
updateState 'b'
|
70
80
|
|
71
81
|
order_use_billing = ($ 'input#order_use_billing')
|
72
82
|
order_use_billing.change ->
|
@@ -79,7 +89,7 @@ Spree.ready ($) ->
|
|
79
89
|
else
|
80
90
|
($ '#shipping .inner').show()
|
81
91
|
($ '#shipping .inner input, #shipping .inner select').prop 'disabled', false
|
82
|
-
|
92
|
+
updateState('s')
|
83
93
|
|
84
94
|
update_shipping_form_state order_use_billing
|
85
95
|
|
@@ -22,10 +22,10 @@ $ ->
|
|
22
22
|
($ 'li.tmb-' + variantId).show()
|
23
23
|
currentThumb = ($ '#' + ($ '#main-image').data('selectedThumbId'))
|
24
24
|
if not currentThumb.hasClass('vtmb-' + variantId)
|
25
|
-
thumb = ($ ($ '
|
26
|
-
thumb = ($ ($ '
|
25
|
+
thumb = ($ ($ 'ul.thumbnails li:visible.vtmb').eq(0))
|
26
|
+
thumb = ($ ($ 'ul.thumbnails li:visible').eq(0)) unless thumb.length > 0
|
27
27
|
newImg = thumb.find('a').attr('href')
|
28
|
-
($ '
|
28
|
+
($ 'ul.thumbnails li').removeClass 'selected'
|
29
29
|
thumb.addClass 'selected'
|
30
30
|
($ '#main-image img').attr 'src', newImg
|
31
31
|
($ '#main-image').data 'selectedThumb', newImg
|
@@ -1,4 +1,4 @@
|
|
1
|
-
@import '
|
1
|
+
@import 'variables';
|
2
2
|
|
3
3
|
/*--------------------------------------*/
|
4
4
|
/* Basic styles
|
@@ -113,16 +113,12 @@ input[type="password"], input[type="search"], input[type="tel"],
|
|
113
113
|
input[type="text"], input[type="time"], input[type="url"],
|
114
114
|
input[type="week"] {
|
115
115
|
border: $default_border;
|
116
|
-
padding: 5px;
|
116
|
+
padding: 5px 10px;
|
117
117
|
font-family: $ff_base;
|
118
118
|
font-size: $input_box_font_size;
|
119
119
|
|
120
|
-
-webkit-box-sizing: border-box;
|
121
|
-
-moz-box-sizing: border-box;
|
122
|
-
box-sizing: border-box;
|
123
|
-
|
124
120
|
&:active, &:focus {
|
125
|
-
border-color: $link_text_color
|
121
|
+
border-color: $link_text_color;;
|
126
122
|
outline: none;
|
127
123
|
-webkit-box-shadow: none;
|
128
124
|
-moz-box-shadow: none;
|
@@ -150,11 +146,6 @@ span.required {
|
|
150
146
|
|
151
147
|
fieldset {
|
152
148
|
margin: 0;
|
153
|
-
min-width: 100%;
|
154
|
-
|
155
|
-
-webkit-box-sizing: border-box;
|
156
|
-
-moz-box-sizing: border-box;
|
157
|
-
box-sizing: border-box;
|
158
149
|
}
|
159
150
|
|
160
151
|
input[type="submit"], input[type="button"],
|
@@ -309,7 +300,7 @@ nav #main-nav-bar {
|
|
309
300
|
&#link-to-cart {
|
310
301
|
float: right;
|
311
302
|
padding-left: 24px;
|
312
|
-
background:
|
303
|
+
background: url("cart.png") no-repeat left center;
|
313
304
|
|
314
305
|
&:hover {
|
315
306
|
border-color: $link_text_color;
|
@@ -736,14 +727,6 @@ ul#products {
|
|
736
727
|
}
|
737
728
|
}
|
738
729
|
|
739
|
-
#billing {
|
740
|
-
input[type="text"], input[type="email"],
|
741
|
-
input[type="tel"], input[type="number"],
|
742
|
-
select, textarea {
|
743
|
-
width: 100%;
|
744
|
-
}
|
745
|
-
}
|
746
|
-
|
747
730
|
#order_details, #order_summary {
|
748
731
|
padding: 0;
|
749
732
|
|
@@ -6,7 +6,7 @@ module Spree
|
|
6
6
|
class CheckoutController < Spree::StoreController
|
7
7
|
ssl_required
|
8
8
|
|
9
|
-
before_filter :
|
9
|
+
before_filter :load_order
|
10
10
|
|
11
11
|
before_filter :ensure_order_not_completed
|
12
12
|
before_filter :ensure_checkout_allowed
|
@@ -26,8 +26,6 @@ module Spree
|
|
26
26
|
# Updates the order and advances to the next state (when possible.)
|
27
27
|
def update
|
28
28
|
if @order.update_attributes(object_params)
|
29
|
-
fire_event('spree.checkout.update')
|
30
|
-
|
31
29
|
unless @order.next
|
32
30
|
flash[:error] = @order.errors.full_messages.join("\n")
|
33
31
|
redirect_to checkout_state_path(@order.state) and return
|
@@ -55,13 +53,6 @@ module Spree
|
|
55
53
|
redirect_to checkout_state_path(@order.checkout_steps.first)
|
56
54
|
end
|
57
55
|
end
|
58
|
-
|
59
|
-
# Fix for #4117
|
60
|
-
# If confirmation of payment fails, redirect back to payment screen
|
61
|
-
if params[:state] == "confirm" && @order.payments.valid.empty?
|
62
|
-
flash.keep
|
63
|
-
redirect_to checkout_state_path("payment")
|
64
|
-
end
|
65
56
|
end
|
66
57
|
|
67
58
|
# Should be overriden if you have areas of your checkout that don't match
|
@@ -70,8 +61,8 @@ module Spree
|
|
70
61
|
false
|
71
62
|
end
|
72
63
|
|
73
|
-
def
|
74
|
-
@order = current_order
|
64
|
+
def load_order
|
65
|
+
@order = current_order
|
75
66
|
redirect_to spree.cart_path and return unless @order
|
76
67
|
|
77
68
|
if params[:state]
|
@@ -106,7 +97,7 @@ module Spree
|
|
106
97
|
# attributes for a single payment and its source, discarding attributes
|
107
98
|
# for payment methods other than the one selected
|
108
99
|
def object_params
|
109
|
-
#
|
100
|
+
# respond_to check is necessary due to issue described in #2910
|
110
101
|
if @order.has_checkout_step?("payment") && @order.payment?
|
111
102
|
if params[:payment_source].present?
|
112
103
|
source_params = params.delete(:payment_source)[params[:order][:payments_attributes].first[:payment_method_id].underscore]
|
@@ -120,7 +111,12 @@ module Spree
|
|
120
111
|
params[:order][:payments_attributes].first[:amount] = @order.total
|
121
112
|
end
|
122
113
|
end
|
123
|
-
|
114
|
+
|
115
|
+
if params[:order]
|
116
|
+
params[:order].permit(permitted_checkout_attributes)
|
117
|
+
else
|
118
|
+
{}
|
119
|
+
end
|
124
120
|
end
|
125
121
|
|
126
122
|
def setup_for_current_state
|
@@ -155,9 +151,8 @@ module Spree
|
|
155
151
|
end
|
156
152
|
end
|
157
153
|
|
158
|
-
def rescue_from_spree_gateway_error
|
159
|
-
flash
|
160
|
-
@order.errors.add(:base, exception.message)
|
154
|
+
def rescue_from_spree_gateway_error
|
155
|
+
flash[:error] = Spree.t(:spree_gateway_error_flash_for_checkout)
|
161
156
|
render :edit
|
162
157
|
end
|
163
158
|
|
@@ -167,13 +162,13 @@ module Spree
|
|
167
162
|
|
168
163
|
def apply_coupon_code
|
169
164
|
if params[:order] && params[:order][:coupon_code]
|
170
|
-
@order.coupon_code = params[:order][:coupon_code]
|
165
|
+
@order.coupon_code = params[:order][:coupon_code]
|
171
166
|
|
172
167
|
coupon_result = Spree::Promo::CouponApplicator.new(@order).apply
|
173
168
|
if coupon_result[:coupon_applied?]
|
174
169
|
flash[:success] = coupon_result[:success] if coupon_result[:success].present?
|
175
170
|
else
|
176
|
-
flash
|
171
|
+
flash[:error] = coupon_result[:error]
|
177
172
|
respond_with(@order) { |format| format.html { render :edit } } and return
|
178
173
|
end
|
179
174
|
end
|
@@ -13,13 +13,13 @@ module Spree
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def update
|
16
|
-
@order = current_order
|
16
|
+
@order = current_order
|
17
17
|
unless @order
|
18
18
|
flash[:error] = Spree.t(:order_not_found)
|
19
19
|
redirect_to root_path and return
|
20
20
|
end
|
21
21
|
|
22
|
-
if @order.update_attributes(
|
22
|
+
if @order.update_attributes(order_params)
|
23
23
|
@order.line_items = @order.line_items.select {|li| li.quantity > 0 }
|
24
24
|
@order.ensure_updated_shipments
|
25
25
|
return if after_update_attributes
|
@@ -29,7 +29,7 @@ module Spree
|
|
29
29
|
respond_with(@order) do |format|
|
30
30
|
format.html do
|
31
31
|
if params.has_key?(:checkout)
|
32
|
-
@order.
|
32
|
+
@order.next_transition.run_callbacks if @order.cart?
|
33
33
|
redirect_to checkout_state_path(@order.checkout_steps.first)
|
34
34
|
else
|
35
35
|
redirect_to cart_path
|
@@ -43,13 +43,13 @@ module Spree
|
|
43
43
|
|
44
44
|
# Shows the current incomplete order from the session
|
45
45
|
def edit
|
46
|
-
@order = current_order(
|
46
|
+
@order = current_order(true)
|
47
47
|
associate_user
|
48
48
|
end
|
49
49
|
|
50
50
|
# Adds a new item to the order (creating a new order if none already exists)
|
51
51
|
def populate
|
52
|
-
populator = Spree::OrderPopulator.new(current_order(
|
52
|
+
populator = Spree::OrderPopulator.new(current_order(true), current_currency)
|
53
53
|
if populator.populate(params.slice(:products, :variants, :quantity))
|
54
54
|
current_order.ensure_updated_shipments
|
55
55
|
|
@@ -89,16 +89,24 @@ module Spree
|
|
89
89
|
|
90
90
|
private
|
91
91
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
92
|
+
def order_params
|
93
|
+
if params[:order]
|
94
|
+
params[:order].permit(*permitted_order_attributes)
|
95
|
+
else
|
96
|
+
{}
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def after_update_attributes
|
101
|
+
coupon_result = Spree::Promo::CouponApplicator.new(@order).apply
|
102
|
+
if coupon_result[:coupon_applied?]
|
103
|
+
flash[:success] = coupon_result[:success] if coupon_result[:success].present?
|
104
|
+
return false
|
105
|
+
else
|
106
|
+
flash[:error] = coupon_result[:error]
|
107
|
+
respond_with(@order) { |format| format.html { render :edit } }
|
108
|
+
return true
|
109
|
+
end
|
101
110
|
end
|
102
|
-
end
|
103
111
|
end
|
104
112
|
end
|
@@ -1,8 +1,6 @@
|
|
1
1
|
module Spree
|
2
2
|
class ProductsController < Spree::StoreController
|
3
3
|
before_filter :load_product, :only => :show
|
4
|
-
before_filter :load_taxon, :only => :index
|
5
|
-
|
6
4
|
rescue_from ActiveRecord::RecordNotFound, :with => :render_404
|
7
5
|
helper 'spree/taxons'
|
8
6
|
|
@@ -28,7 +26,7 @@ module Spree
|
|
28
26
|
# Do nothing
|
29
27
|
else
|
30
28
|
if referer_path && referer_path.match(/\/t\/(.*)/)
|
31
|
-
@taxon =
|
29
|
+
@taxon = Taxon.find_by_permalink($1)
|
32
30
|
end
|
33
31
|
end
|
34
32
|
end
|
@@ -46,9 +44,5 @@ module Spree
|
|
46
44
|
@product = Product.active(current_currency).find_by_permalink!(params[:id])
|
47
45
|
end
|
48
46
|
end
|
49
|
-
|
50
|
-
def load_taxon
|
51
|
-
@taxon = Spree::Taxon.find(params[:taxon]) if params[:taxon].present?
|
52
|
-
end
|
53
47
|
end
|
54
48
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<fieldset id="order_details" data-hook>
|
2
2
|
<div class="clear"></div>
|
3
|
-
<legend align="center"><%= Spree.t(:
|
3
|
+
<legend align="center"><%= Spree.t(@order.state, :scope => :order_state).titleize %></legend>
|
4
4
|
<%= render :partial => 'spree/shared/order_details', :locals => { :order => @order } %>
|
5
5
|
</fieldset>
|
6
6
|
|
@@ -17,11 +17,11 @@
|
|
17
17
|
</tbody>
|
18
18
|
<tr data-hook="order_total">
|
19
19
|
<td><strong><%= Spree.t(:order_total) %>:</strong></td>
|
20
|
-
<td><strong><span id='summary-order-total'><%= order.display_total.to_html %></span></strong></td>
|
20
|
+
<td><strong><span id='summary-order-total'><%= @order.display_total.to_html %></span></strong></td>
|
21
21
|
</tr>
|
22
22
|
<% if order.line_item_adjustment_totals.present? %>
|
23
23
|
<tbody id="price-adjustments" data-hook="order_details_price_adjustments">
|
24
|
-
<% order.line_item_adjustment_totals.each do |label, total| %>
|
24
|
+
<% @order.line_item_adjustment_totals.each do |label, total| %>
|
25
25
|
<tr class="total">
|
26
26
|
<td><strong><%= label %></strong></td>
|
27
27
|
<td><strong><span><%= total.to_html %></span></strong></td>
|
@@ -14,13 +14,15 @@
|
|
14
14
|
</p>
|
15
15
|
<p class="field" data-hook="card_expiration">
|
16
16
|
<%= label_tag "card_month", Spree.t(:expiration) %><span class="required">*</span><br />
|
17
|
-
<%=
|
18
|
-
<%= select_year(Date.today, { :prefix => param_prefix, :field_name => 'year', :start_year => Date.today.year, :end_year => Date.today.year + 15 }, :class => 'required', :id => "card_year") %>
|
17
|
+
<%= text_field_tag "#{param_prefix}[expiry]", '', :id => 'card_expiry', :class => "required", :placeholder => "MM / YY" %>
|
19
18
|
</p>
|
20
19
|
<p class="field" data-hook="card_code">
|
21
20
|
<%= label_tag "card_code", Spree.t(:card_code) %><span class="required">*</span><br />
|
22
21
|
<%= text_field_tag "#{param_prefix}[verification_value]", '', options_hash.merge(:id => 'card_code', :class => 'required', :size => 5) %>
|
23
22
|
<%= link_to "(#{Spree.t(:what_is_this)})", spree.content_path('cvv'), :target => '_blank', "data-hook" => "cvv_link", :id => "cvv_link" %>
|
24
23
|
</p>
|
24
|
+
|
25
|
+
<%= hidden_field_tag "#{param_prefix}[cc_type]", '', :id => "cc_type" %>
|
26
|
+
|
25
27
|
<%= hidden_field param_prefix, 'first_name', :value => @order.billing_firstname %>
|
26
28
|
<%= hidden_field param_prefix, 'last_name', :value => @order.billing_lastname %>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<%= render :partial => 'spree/shared/error_messages', :locals => { :target => @user } %>
|
2
|
+
<h1><%= Spree.t(:registration) %></h1>
|
3
|
+
<div id="registration" data-hook>
|
4
|
+
<div id="account" class="columns alpha eight">
|
5
|
+
<!-- TODO: add partial with registration form -->
|
6
|
+
</div>
|
7
|
+
<% if Spree::Config[:allow_guest_checkout] %>
|
8
|
+
<div id="guest_checkout" data-hook class="columns omega eight">
|
9
|
+
<%= render :partial => 'spree/shared/error_messages', :locals => { :target => @order } %>
|
10
|
+
<h6><%= Spree.t(:guest_user_account) %></h6>
|
11
|
+
<%= form_for @order, :url => update_checkout_registration_path, :method => :put, :html => { :id => 'checkout_form_registration' } do |f| %>
|
12
|
+
<p>
|
13
|
+
<%= f.label :email, Spree.t(:email) %><br />
|
14
|
+
<%= f.email_field :email, :class => 'title' %>
|
15
|
+
</p>
|
16
|
+
<p><%= f.submit Spree.t(:continue), :class => 'button primary' %></p>
|
17
|
+
<% end %>
|
18
|
+
</div>
|
19
|
+
<% end %>
|
20
|
+
</div>
|
@@ -19,11 +19,13 @@
|
|
19
19
|
|
20
20
|
<%= render :partial => 'spree/shared/sidebar' if content_for? :sidebar %>
|
21
21
|
|
22
|
-
<div id="content" class="columns <%= !content_for?(:sidebar) ? "sixteen" : "twelve
|
22
|
+
<div id="content" class="columns <%= !content_for?(:sidebar) ? "sixteen" : "twelve" %>" data-hook>
|
23
23
|
<%= flash_messages %>
|
24
24
|
<%= yield %>
|
25
25
|
</div>
|
26
26
|
|
27
|
+
<%= yield :templates %>
|
28
|
+
|
27
29
|
</div>
|
28
30
|
|
29
31
|
<%= render :partial => 'spree/shared/footer' %>
|
@@ -9,15 +9,15 @@
|
|
9
9
|
<% end %>
|
10
10
|
</td>
|
11
11
|
<td class="cart-item-description" data-hook="cart_item_description">
|
12
|
-
<h4><%= link_to
|
12
|
+
<h4><%= link_to variant.product.name, product_path(variant.product) %></h4>
|
13
13
|
<%= variant.options_text %>
|
14
|
-
<% if
|
14
|
+
<% if @order.insufficient_stock_lines.include? line_item %>
|
15
15
|
<span class="out-of-stock">
|
16
16
|
<%= Spree.t(:out_of_stock) %> <br />
|
17
17
|
</span>
|
18
18
|
<% end %>
|
19
19
|
<span class="line-item-description" data-hook="line_item_description">
|
20
|
-
<%=
|
20
|
+
<%= line_item_description(variant) %>
|
21
21
|
</span>
|
22
22
|
</td>
|
23
23
|
<td class="cart-item-price" data-hook="cart_item_price">
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<% @body_id = 'cart' %>
|
2
|
+
|
3
|
+
<h1><%= Spree.t(:shopping_cart) %></h1>
|
4
|
+
|
5
|
+
<%= form_for @order, :url =>'#', :method => :put do |order_form| %>
|
6
|
+
<%= render :partial => 'form', :locals => { :order_form => order_form } %>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<p><%= link_to Spree.t(:continue_shopping), products_path %></p>
|
@@ -7,7 +7,7 @@
|
|
7
7
|
<ul>
|
8
8
|
<% @product.variants_and_option_values(current_currency).each_with_index do |variant, index| %>
|
9
9
|
<li>
|
10
|
-
<%= radio_button_tag "products[#{@product.id}]", variant.id, index == 0, 'data-price' => variant.price_in(current_currency).
|
10
|
+
<%= radio_button_tag "products[#{@product.id}]", variant.id, index == 0, 'data-price' => variant.price_in(current_currency).display_price %>
|
11
11
|
<label for="<%= ['products', @product.id, variant.id].join('_') %>">
|
12
12
|
<span class="variant-description">
|
13
13
|
<%= variant_options variant %>
|
@@ -24,7 +24,7 @@
|
|
24
24
|
|
25
25
|
<% if @product.price_in(current_currency) and !@product.price.nil? %>
|
26
26
|
<div data-hook="product_price" class="columns five <% if !@product.has_variants? %> alpha <% else %> omega <% end %>">
|
27
|
-
|
27
|
+
|
28
28
|
<div id="product-price">
|
29
29
|
<h6 class="product-section-title"><%= Spree.t(:price) %></h6>
|
30
30
|
<div>
|
@@ -33,6 +33,10 @@
|
|
33
33
|
</span>
|
34
34
|
<span itemprop="priceCurrency" content="<%= @product.currency %>"></span>
|
35
35
|
</div>
|
36
|
+
|
37
|
+
<% if @product.master.in_stock? %>
|
38
|
+
<link itemprop="availability" href="http://schema.org/InStock" />
|
39
|
+
<% end %>
|
36
40
|
</div>
|
37
41
|
|
38
42
|
<div class="add-to-cart">
|
@@ -48,6 +52,6 @@
|
|
48
52
|
<br>
|
49
53
|
<div><span class="price selling" itemprop="price"><%= Spree.t('product_not_available_in_this_currency') %></span></div>
|
50
54
|
</div>
|
51
|
-
<% end %>
|
55
|
+
<% end %>
|
52
56
|
</div>
|
53
57
|
<% end %>
|
@@ -1,39 +1,35 @@
|
|
1
1
|
<% if tracker = Spree::Tracker.current %>
|
2
|
+
<script>
|
3
|
+
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
4
|
+
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
5
|
+
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
6
|
+
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
2
7
|
|
3
|
-
|
4
|
-
|
5
|
-
_gaq.push(['_setAccount', '<%= tracker.analytics_id %>']);
|
6
|
-
_gaq.push(['_trackPageview']);
|
8
|
+
ga('create', '<%= tracker.analytics_id %>');
|
9
|
+
ga('send', 'pageview');
|
7
10
|
|
8
11
|
<% if flash[:commerce_tracking] && @order.present? %>
|
9
|
-
<%# more info: https://developers.google.com/analytics/devguides/collection/
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
]);
|
12
|
+
<%# more info: https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce %>
|
13
|
+
ga('require', 'ecommerce', 'ecommerce.js');
|
14
|
+
ga('ecommerce:addTransaction', {
|
15
|
+
'id': '<%= j @order.number %>', // Transaction ID. Required.
|
16
|
+
'affiliation': '<%= Spree::Config[:site_name] %>', // Affiliation or store name.
|
17
|
+
'revenue': '<%= @order.total %>', // Grand Total.
|
18
|
+
'shipping': '<%= @order.adjustments.shipping.sum(:amount) %>', // Shipping.
|
19
|
+
'tax': '<%= @order.adjustments.tax.sum(:amount) %>', // Tax.
|
20
|
+
'currencyCode': '<%= current_currency %>' // local currency code.
|
21
|
+
});
|
20
22
|
<% @order.line_items.each do |line_item| %>
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
ga('ecommerce:addItem', {
|
24
|
+
'id': '<%= j @order.number %>', // Transaction ID. Required.
|
25
|
+
'name': '<%= j line_item.variant.product.name %>', // Product name. Required.
|
26
|
+
'sku': '<%= j line_item.variant.sku %>', // SKU/code.
|
27
|
+
'category': '', // Category or variation.
|
28
|
+
'price': '<%= line_item.price %>', // Unit price.
|
29
|
+
'quantity': '<%= line_item.quantity %>' // Quantity.
|
30
|
+
});
|
29
31
|
<% end %>
|
30
|
-
|
32
|
+
ga('ecommerce:send');
|
31
33
|
<% end %>
|
32
|
-
|
33
|
-
(function() {
|
34
|
-
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
35
|
-
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
36
|
-
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
37
|
-
})();
|
38
|
-
<% end %>
|
34
|
+
</script>
|
39
35
|
<% end %>
|
@@ -2,13 +2,6 @@
|
|
2
2
|
paginated_products = @searcher.retrieve_products if params.key?(:keywords)
|
3
3
|
paginated_products ||= products
|
4
4
|
%>
|
5
|
-
|
6
|
-
<% content_for :head do %>
|
7
|
-
<% if paginated_products.respond_to?(:num_pages) %>
|
8
|
-
<%= rel_next_prev_link_tags paginated_products %>
|
9
|
-
<% end %>
|
10
|
-
<% end %>
|
11
|
-
|
12
5
|
<% if products.empty? %>
|
13
6
|
<%= Spree.t(:no_products_found) %>
|
14
7
|
<% elsif params.key?(:keywords) %>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<%= select_tag :taxon,
|
4
4
|
options_for_select([[Spree.t(:all_departments), '']] +
|
5
5
|
@taxons.map {|t| [t.name, t.id]},
|
6
|
-
|
6
|
+
@taxon ? @taxon.id : params[:taxon]) %>
|
7
7
|
<%= search_field_tag :keywords, params[:keywords], :placeholder => Spree.t(:search) %>
|
8
8
|
<%= submit_tag Spree.t(:search), :name => nil %>
|
9
9
|
<% end %>
|
data/config/routes.rb
CHANGED
@@ -4,13 +4,10 @@ Spree::Core::Engine.routes.draw do
|
|
4
4
|
|
5
5
|
resources :products
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
resources :states, :only => :index
|
10
|
-
resources :countries, :only => :index
|
7
|
+
get '/locale/set', :to => 'locale#set'
|
11
8
|
|
12
9
|
# non-restful checkout stuff
|
13
|
-
|
10
|
+
patch '/checkout/update/:state', :to => 'checkout#update', :as => :update_checkout
|
14
11
|
get '/checkout/:state', :to => 'checkout#edit', :as => :checkout_state
|
15
12
|
get '/checkout', :to => 'checkout#edit' , :as => :checkout
|
16
13
|
|
@@ -20,20 +17,20 @@ Spree::Core::Engine.routes.draw do
|
|
20
17
|
end
|
21
18
|
|
22
19
|
get '/orders/populate', :via => :get, :to => populate_redirect
|
23
|
-
|
20
|
+
get '/orders/:id/token/:token' => 'orders#show', :as => :token_order
|
24
21
|
|
25
|
-
resources :orders
|
22
|
+
resources :orders do
|
26
23
|
post :populate, :on => :collection
|
27
24
|
end
|
28
25
|
|
29
26
|
get '/cart', :to => 'orders#edit', :as => :cart
|
30
|
-
|
27
|
+
patch '/cart', :to => 'orders#update', :as => :update_cart
|
31
28
|
put '/cart/empty', :to => 'orders#empty', :as => :empty_cart
|
32
29
|
|
33
30
|
# route globbing for pretty nested taxon and product paths
|
34
|
-
|
31
|
+
get '/t/*id', :to => 'taxons#show', :as => :nested_taxons
|
35
32
|
|
36
|
-
|
37
|
-
|
38
|
-
|
33
|
+
get '/unauthorized', :to => 'home#unauthorized', :as => :unauthorized
|
34
|
+
get '/content/cvv', :to => 'content#cvv', :as => :cvv
|
35
|
+
get '/content/*path', :to => 'content#show', :as => :content
|
39
36
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Spree
|
2
|
+
class OldPrefs < ActiveRecord::Base
|
3
|
+
self.table_name = "spree_preferences"
|
4
|
+
belongs_to :owner, :polymorphic => true
|
5
|
+
attr_accessor :owner_klass
|
6
|
+
end
|
7
|
+
|
8
|
+
class PreferenceRescue
|
9
|
+
def self.try
|
10
|
+
OldPrefs.where(:key => nil).each do |old_pref|
|
11
|
+
next unless owner = (old_pref.owner rescue nil)
|
12
|
+
unless old_pref.owner_type == "Spree::Activator" || old_pref.owner_type == "Spree::Configuration"
|
13
|
+
begin
|
14
|
+
old_pref.key = [owner.class.name, old_pref.name, owner.id].join('::').underscore
|
15
|
+
old_pref.value_type = owner.preference_type(old_pref.name)
|
16
|
+
puts "Migrating Preference: #{old_pref.key}"
|
17
|
+
old_pref.save
|
18
|
+
rescue NoMethodError => ex
|
19
|
+
puts ex.message
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
metadata
CHANGED
@@ -1,141 +1,99 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_frontend
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Schofield
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2013-09-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: spree_api
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.0
|
19
|
+
version: 2.1.0
|
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: 2.0
|
26
|
+
version: 2.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: spree_core
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2.0
|
33
|
+
version: 2.1.0
|
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: 2.0
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: jquery-rails
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 3.0.0
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 3.0.0
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rails
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 3.2.13
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 3.2.13
|
40
|
+
version: 2.1.0
|
69
41
|
- !ruby/object:Gem::Dependency
|
70
42
|
name: canonical-rails
|
71
43
|
requirement: !ruby/object:Gem::Requirement
|
72
44
|
requirements:
|
73
|
-
- -
|
45
|
+
- - '>='
|
74
46
|
- !ruby/object:Gem::Version
|
75
47
|
version: '0'
|
76
48
|
type: :runtime
|
77
49
|
prerelease: false
|
78
50
|
version_requirements: !ruby/object:Gem::Requirement
|
79
51
|
requirements:
|
80
|
-
- -
|
52
|
+
- - '>='
|
81
53
|
- !ruby/object:Gem::Version
|
82
54
|
version: '0'
|
83
55
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
56
|
+
name: jquery-rails
|
85
57
|
requirement: !ruby/object:Gem::Requirement
|
86
58
|
requirements:
|
87
|
-
- -
|
59
|
+
- - ~>
|
88
60
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.
|
61
|
+
version: 3.0.0
|
90
62
|
type: :runtime
|
91
63
|
prerelease: false
|
92
64
|
version_requirements: !ruby/object:Gem::Requirement
|
93
65
|
requirements:
|
94
|
-
- -
|
66
|
+
- - ~>
|
95
67
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.
|
68
|
+
version: 3.0.0
|
97
69
|
- !ruby/object:Gem::Dependency
|
98
70
|
name: stringex
|
99
71
|
requirement: !ruby/object:Gem::Requirement
|
100
72
|
requirements:
|
101
|
-
- -
|
73
|
+
- - ~>
|
102
74
|
- !ruby/object:Gem::Version
|
103
75
|
version: 1.5.1
|
104
76
|
type: :runtime
|
105
77
|
prerelease: false
|
106
78
|
version_requirements: !ruby/object:Gem::Requirement
|
107
79
|
requirements:
|
108
|
-
- -
|
80
|
+
- - ~>
|
109
81
|
- !ruby/object:Gem::Version
|
110
82
|
version: 1.5.1
|
111
83
|
- !ruby/object:Gem::Dependency
|
112
84
|
name: email_spec
|
113
85
|
requirement: !ruby/object:Gem::Requirement
|
114
86
|
requirements:
|
115
|
-
- -
|
87
|
+
- - ~>
|
116
88
|
- !ruby/object:Gem::Version
|
117
89
|
version: 1.2.1
|
118
90
|
type: :development
|
119
91
|
prerelease: false
|
120
92
|
version_requirements: !ruby/object:Gem::Requirement
|
121
93
|
requirements:
|
122
|
-
- -
|
94
|
+
- - ~>
|
123
95
|
- !ruby/object:Gem::Version
|
124
96
|
version: 1.2.1
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: capybara-accessible
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - '='
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: 0.2.0
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - '='
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: 0.2.0
|
139
97
|
description: Required dependency for Spree
|
140
98
|
email: sean@spreecommerce.com
|
141
99
|
executables: []
|
@@ -144,7 +102,6 @@ extra_rdoc_files: []
|
|
144
102
|
files:
|
145
103
|
- LICENSE
|
146
104
|
- README.md
|
147
|
-
- app/assets/images/admin/bg/spree_50.png
|
148
105
|
- app/assets/images/credit_cards/amex_cid.gif
|
149
106
|
- app/assets/images/credit_cards/credit_card.gif
|
150
107
|
- app/assets/images/credit_cards/discover_cid.gif
|
@@ -200,6 +157,7 @@ files:
|
|
200
157
|
- app/views/spree/checkout/edit.html.erb
|
201
158
|
- app/views/spree/checkout/payment/_check.html.erb
|
202
159
|
- app/views/spree/checkout/payment/_gateway.html.erb
|
160
|
+
- app/views/spree/checkout/registration.html.erb
|
203
161
|
- app/views/spree/content/cvv.html.erb
|
204
162
|
- app/views/spree/home/index.html.erb
|
205
163
|
- app/views/spree/layouts/spree_application.html.erb
|
@@ -207,6 +165,7 @@ files:
|
|
207
165
|
- app/views/spree/orders/_form.html.erb
|
208
166
|
- app/views/spree/orders/_line_item.html.erb
|
209
167
|
- app/views/spree/orders/edit.html.erb
|
168
|
+
- app/views/spree/orders/new.html.erb
|
210
169
|
- app/views/spree/orders/show.html.erb
|
211
170
|
- app/views/spree/products/_cart_form.html.erb
|
212
171
|
- app/views/spree/products/_image.html.erb
|
@@ -238,9 +197,10 @@ files:
|
|
238
197
|
- config/initializers/rails_5868.rb
|
239
198
|
- config/initializers/spree.rb
|
240
199
|
- config/routes.rb
|
241
|
-
- lib/spree/frontend.rb
|
242
200
|
- lib/spree/frontend/engine.rb
|
243
201
|
- lib/spree/frontend/middleware/seo_assist.rb
|
202
|
+
- lib/spree/frontend/preference_rescue.rb
|
203
|
+
- lib/spree/frontend.rb
|
244
204
|
- lib/spree/scopes/dynamic.rb
|
245
205
|
- lib/spree_frontend.rb
|
246
206
|
- lib/tasks/rake_util.rb
|
@@ -547,18 +507,18 @@ require_paths:
|
|
547
507
|
- lib
|
548
508
|
required_ruby_version: !ruby/object:Gem::Requirement
|
549
509
|
requirements:
|
550
|
-
- -
|
510
|
+
- - '>='
|
551
511
|
- !ruby/object:Gem::Version
|
552
512
|
version: 1.9.3
|
553
513
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
554
514
|
requirements:
|
555
|
-
- -
|
515
|
+
- - '>='
|
556
516
|
- !ruby/object:Gem::Version
|
557
517
|
version: '0'
|
558
518
|
requirements:
|
559
519
|
- none
|
560
520
|
rubyforge_project: spree_frontend
|
561
|
-
rubygems_version: 2.
|
521
|
+
rubygems_version: 2.1.0
|
562
522
|
signing_key:
|
563
523
|
specification_version: 4
|
564
524
|
summary: Frontend e-commerce functionality for the Spree project.
|
Binary file
|