spree_frontend 2.0.13 → 2.1.0
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/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
|