solidus_frontend_devise_token_auth 2.8.0.alpha.2

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.
Files changed (163) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +26 -0
  3. data/README.md +42 -0
  4. data/Rakefile +17 -0
  5. data/app/assets/config/solidus_frontend_manifest.js +4 -0
  6. data/app/assets/images/credit_cards/amex_cid.gif +0 -0
  7. data/app/assets/images/credit_cards/credit_card.gif +0 -0
  8. data/app/assets/images/credit_cards/discover_cid.gif +0 -0
  9. data/app/assets/images/credit_cards/icons/american_express.png +0 -0
  10. data/app/assets/images/credit_cards/icons/cirrus.png +0 -0
  11. data/app/assets/images/credit_cards/icons/delta.png +0 -0
  12. data/app/assets/images/credit_cards/icons/diners_club.png +0 -0
  13. data/app/assets/images/credit_cards/icons/directdebit.png +0 -0
  14. data/app/assets/images/credit_cards/icons/discover.png +0 -0
  15. data/app/assets/images/credit_cards/icons/egold.png +0 -0
  16. data/app/assets/images/credit_cards/icons/maestro.png +0 -0
  17. data/app/assets/images/credit_cards/icons/master.png +0 -0
  18. data/app/assets/images/credit_cards/icons/paypal.png +0 -0
  19. data/app/assets/images/credit_cards/icons/solo.png +0 -0
  20. data/app/assets/images/credit_cards/icons/switch.png +0 -0
  21. data/app/assets/images/credit_cards/icons/visa.png +0 -0
  22. data/app/assets/images/credit_cards/icons/visaelectron.png +0 -0
  23. data/app/assets/images/credit_cards/icons/westernunion.png +0 -0
  24. data/app/assets/images/credit_cards/icons/wirecard.png +0 -0
  25. data/app/assets/images/credit_cards/icons/worldpay.png +0 -0
  26. data/app/assets/images/credit_cards/master_cid.jpg +0 -0
  27. data/app/assets/images/credit_cards/visa_cid.gif +0 -0
  28. data/app/assets/images/favicon.ico +0 -0
  29. data/app/assets/images/icons/add-to-cart.png +0 -0
  30. data/app/assets/images/icons/checkout.png +0 -0
  31. data/app/assets/images/icons/delete.png +0 -0
  32. data/app/assets/images/icons/update.png +0 -0
  33. data/app/assets/images/spinner.gif +0 -0
  34. data/app/assets/images/spree/frontend/cart.png +0 -0
  35. data/app/assets/javascripts/spree/frontend/cart.js +30 -0
  36. data/app/assets/javascripts/spree/frontend/checkout/address.js +127 -0
  37. data/app/assets/javascripts/spree/frontend/checkout/coupon-code.js +41 -0
  38. data/app/assets/javascripts/spree/frontend/checkout/payment.js +55 -0
  39. data/app/assets/javascripts/spree/frontend/checkout.js +24 -0
  40. data/app/assets/javascripts/spree/frontend/locale_selector.js +5 -0
  41. data/app/assets/javascripts/spree/frontend/product.js +81 -0
  42. data/app/assets/javascripts/spree/frontend.js +5 -0
  43. data/app/assets/stylesheets/spree/frontend/_skeleton.scss +242 -0
  44. data/app/assets/stylesheets/spree/frontend/_variables.scss +65 -0
  45. data/app/assets/stylesheets/spree/frontend/screen.css.scss +1387 -0
  46. data/app/assets/stylesheets/spree/frontend.css +5 -0
  47. data/app/controllers/spree/checkout_controller.rb +236 -0
  48. data/app/controllers/spree/content_controller.rb +11 -0
  49. data/app/controllers/spree/home_controller.rb +14 -0
  50. data/app/controllers/spree/locale_controller.rb +20 -0
  51. data/app/controllers/spree/orders_controller.rb +138 -0
  52. data/app/controllers/spree/products_controller.rb +52 -0
  53. data/app/controllers/spree/store_controller.rb +30 -0
  54. data/app/controllers/spree/taxons_controller.rb +31 -0
  55. data/app/helpers/spree/orders_helper.rb +18 -0
  56. data/app/helpers/spree/taxon_filters_helper.rb +13 -0
  57. data/app/models/spree/frontend_configuration.rb +10 -0
  58. data/app/views/spree/address/_form.html.erb +96 -0
  59. data/app/views/spree/address/_form_hidden.html.erb +12 -0
  60. data/app/views/spree/checkout/_address.html.erb +33 -0
  61. data/app/views/spree/checkout/_confirm.html.erb +25 -0
  62. data/app/views/spree/checkout/_coupon_code.html.erb +12 -0
  63. data/app/views/spree/checkout/_delivery.html.erb +108 -0
  64. data/app/views/spree/checkout/_payment.html.erb +67 -0
  65. data/app/views/spree/checkout/_summary.html.erb +76 -0
  66. data/app/views/spree/checkout/_terms_and_conditions.en.html.erb +1 -0
  67. data/app/views/spree/checkout/edit.html.erb +32 -0
  68. data/app/views/spree/checkout/existing_payment/_gateway.html.erb +9 -0
  69. data/app/views/spree/checkout/payment/_check.html.erb +0 -0
  70. data/app/views/spree/checkout/payment/_gateway.html.erb +36 -0
  71. data/app/views/spree/content/cvv.html.erb +13 -0
  72. data/app/views/spree/home/index.html.erb +12 -0
  73. data/app/views/spree/layouts/spree_application.html.erb +36 -0
  74. data/app/views/spree/orders/_adjustment_row.html.erb +8 -0
  75. data/app/views/spree/orders/_adjustments.html.erb +24 -0
  76. data/app/views/spree/orders/_form.html.erb +29 -0
  77. data/app/views/spree/orders/_line_item.html.erb +34 -0
  78. data/app/views/spree/orders/edit.html.erb +47 -0
  79. data/app/views/spree/orders/show.html.erb +22 -0
  80. data/app/views/spree/payments/_payment.html.erb +18 -0
  81. data/app/views/spree/products/_cart_form.html.erb +65 -0
  82. data/app/views/spree/products/_image.html.erb +8 -0
  83. data/app/views/spree/products/_promotions.html.erb +19 -0
  84. data/app/views/spree/products/_properties.html.erb +15 -0
  85. data/app/views/spree/products/_taxons.html.erb +14 -0
  86. data/app/views/spree/products/_thumbnails.html.erb +21 -0
  87. data/app/views/spree/products/index.html.erb +27 -0
  88. data/app/views/spree/products/show.html.erb +51 -0
  89. data/app/views/spree/shared/_address.html.erb +38 -0
  90. data/app/views/spree/shared/_filters.html.erb +27 -0
  91. data/app/views/spree/shared/_footer.html.erb +6 -0
  92. data/app/views/spree/shared/_head.html.erb +14 -0
  93. data/app/views/spree/shared/_header.html.erb +5 -0
  94. data/app/views/spree/shared/_image.html.erb +12 -0
  95. data/app/views/spree/shared/_link_to_cart.html.erb +1 -0
  96. data/app/views/spree/shared/_locale_selector.html.erb +25 -0
  97. data/app/views/spree/shared/_login_bar_items.html.erb +1 -0
  98. data/app/views/spree/shared/_main_nav_bar.html.erb +12 -0
  99. data/app/views/spree/shared/_nav_bar.html.erb +9 -0
  100. data/app/views/spree/shared/_order_details.html.erb +146 -0
  101. data/app/views/spree/shared/_products.html.erb +51 -0
  102. data/app/views/spree/shared/_search.html.erb +11 -0
  103. data/app/views/spree/shared/_shipment_tracking.html.erb +9 -0
  104. data/app/views/spree/shared/_sidebar.html.erb +3 -0
  105. data/app/views/spree/shared/_taxonomies.html.erb +9 -0
  106. data/app/views/spree/shared/unauthorized.html.erb +0 -0
  107. data/app/views/spree/store/cart_link.html.erb +1 -0
  108. data/app/views/spree/taxons/_taxon.html.erb +4 -0
  109. data/app/views/spree/taxons/show.html.erb +20 -0
  110. data/config/initializers/assets.rb +3 -0
  111. data/config/initializers/canonical_rails.rb +16 -0
  112. data/config/routes.rb +33 -0
  113. data/lib/generators/solidus/views/override_generator.rb +49 -0
  114. data/lib/solidus_frontend.rb +3 -0
  115. data/lib/spree/frontend/engine.rb +13 -0
  116. data/lib/spree/frontend/middleware/seo_assist.rb +52 -0
  117. data/lib/spree/frontend.rb +15 -0
  118. data/lib/spree_frontend.rb +3 -0
  119. data/lib/tasks/rake_util.rb +18 -0
  120. data/lib/tasks/taxon.rake +16 -0
  121. data/script/rails +10 -0
  122. data/solidus_frontend.gemspec +35 -0
  123. data/spec/controllers/controller_helpers_spec.rb +30 -0
  124. data/spec/controllers/locale_controller_spec.rb +57 -0
  125. data/spec/controllers/spree/checkout_controller_spec.rb +539 -0
  126. data/spec/controllers/spree/checkout_controller_with_views_spec.rb +37 -0
  127. data/spec/controllers/spree/content_controller_spec.rb +9 -0
  128. data/spec/controllers/spree/current_order_tracking_spec.rb +47 -0
  129. data/spec/controllers/spree/home_controller_spec.rb +29 -0
  130. data/spec/controllers/spree/orders_controller_ability_spec.rb +93 -0
  131. data/spec/controllers/spree/orders_controller_spec.rb +225 -0
  132. data/spec/controllers/spree/orders_controller_transitions_spec.rb +33 -0
  133. data/spec/controllers/spree/products_controller_spec.rb +38 -0
  134. data/spec/controllers/spree/taxons_controller_spec.rb +14 -0
  135. data/spec/features/address_spec.rb +78 -0
  136. data/spec/features/automatic_promotion_adjustments_spec.rb +49 -0
  137. data/spec/features/caching/products_spec.rb +48 -0
  138. data/spec/features/caching/taxons_spec.rb +21 -0
  139. data/spec/features/cart_spec.rb +85 -0
  140. data/spec/features/checkout_spec.rb +690 -0
  141. data/spec/features/checkout_unshippable_spec.rb +37 -0
  142. data/spec/features/coupon_code_spec.rb +266 -0
  143. data/spec/features/currency_spec.rb +20 -0
  144. data/spec/features/free_shipping_promotions_spec.rb +60 -0
  145. data/spec/features/locale_spec.rb +27 -0
  146. data/spec/features/order_spec.rb +73 -0
  147. data/spec/features/products_spec.rb +291 -0
  148. data/spec/features/promotion_code_invalidation_spec.rb +54 -0
  149. data/spec/features/quantity_promotions_spec.rb +130 -0
  150. data/spec/features/taxons_spec.rb +158 -0
  151. data/spec/features/template_rendering_spec.rb +20 -0
  152. data/spec/fixtures/thinking-cat.jpg +0 -0
  153. data/spec/generators/solidus/views/override_generator_spec.rb +50 -0
  154. data/spec/helpers/base_helper_spec.rb +13 -0
  155. data/spec/helpers/order_helper_spec.rb +14 -0
  156. data/spec/helpers/taxon_filters_helper_spec.rb +12 -0
  157. data/spec/spec_helper.rb +106 -0
  158. data/spec/support/features/fill_in_with_force.rb +12 -0
  159. data/spec/support/shared_contexts/checkout_setup.rb +12 -0
  160. data/spec/support/shared_contexts/custom_products.rb +28 -0
  161. data/spec/support/shared_contexts/locales.rb +16 -0
  162. data/spec/views/spree/checkout/_summary_spec.rb +11 -0
  163. metadata +337 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c643011044310b77ea816605d978591b759dcbe36598c08b73dde6c0709f3915
4
+ data.tar.gz: 430d788235a829198973a8a912d005338d7525f04d97a684437932d424a050f5
5
+ SHA512:
6
+ metadata.gz: aa488980e9fa0ce736003dad7dc6796efd423e014de322af7fea80877e68dae66dafbbb88f0cd74fd6ed58c2b776102a27439accdaa4e5ee9f7a4c7f06c50c17
7
+ data.tar.gz: 88beffcbe773391970bb4ec82c5bf3c5b2e9169ecfde4f0e8ddea6a7d660fd4a3f3aa41f30314dbd88653a12cca00a11353c31f474afe635c4df0901d7fb34b0
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2007-2014, Spree Commerce, Inc. and other contributors
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name Spree nor the names of its contributors may be used to
13
+ endorse or promote products derived from this software without specific
14
+ prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,42 @@
1
+ # solidus\_frontend
2
+
3
+ Frontend contains controllers and views implementing a storefront and cart for Solidus.
4
+
5
+ ## Override views
6
+
7
+ In order to customize a view you should copy the file into your host app. Using Deface is not
8
+ recommended as it provides lots of headaches while debugging and degrades your shops performance.
9
+
10
+ Solidus provides a generator to help with copying the right view into your host app.
11
+
12
+ Simply call the generator to copy all views into your host app.
13
+
14
+ ```bash
15
+ $ bundle exec rails g solidus:views:override
16
+ ```
17
+
18
+ If you only want to copy certain views into your host app, you can provide the `--only` argument:
19
+
20
+ ```bash
21
+ $ bundle exec rails g solidus:views:override --only products/show
22
+ ```
23
+
24
+ The argument to `--only` can also be a substring of the name of the view from the `app/views/spree` folder:
25
+
26
+ ```bash
27
+ $ bundle exec rails g solidus:views:override --only product
28
+ ```
29
+
30
+ This will copy all views whose directory or filename contains the string "product".
31
+
32
+ ### Handle upgrades
33
+
34
+ After upgrading Solidus to a new version run the generator again and follow on screen instructions.
35
+
36
+ ## Testing
37
+
38
+ Run the tests
39
+
40
+ ```bash
41
+ bundle exec rspec
42
+ ```
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rubygems'
4
+ require 'rake'
5
+ require 'rake/testtask'
6
+ require 'rspec/core/rake_task'
7
+ require 'spree/testing_support/dummy_app/rake_tasks'
8
+
9
+ RSpec::Core::RakeTask.new
10
+ task default: :spec
11
+
12
+ DummyApp::RakeTasks.new(
13
+ gem_root: File.expand_path(__dir__),
14
+ lib_name: 'solidus_frontend'
15
+ )
16
+
17
+ task test_app: 'db:reset'
@@ -0,0 +1,4 @@
1
+ //= link_tree ../images
2
+ //
3
+ //= link spree/frontend/all.js
4
+ //= link spree/frontend/all.css
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,30 @@
1
+ Spree.ready(function($) {
2
+ if ($("form#update-cart").is("*")) {
3
+ $("form#update-cart a.delete")
4
+ .show()
5
+ .one("click", function() {
6
+ $(this)
7
+ .parents(".line-item")
8
+ .first()
9
+ .find("input.line_item_quantity")
10
+ .val(0);
11
+ $(this)
12
+ .parents("form")
13
+ .first()
14
+ .submit();
15
+ return false;
16
+ });
17
+ }
18
+ $("form#update-cart").submit(function() {
19
+ $("form#update-cart #update-button").attr("disabled", true);
20
+ });
21
+ });
22
+
23
+ Spree.fetch_cart = function(cartLinkUrl) {
24
+ Spree.ajax({
25
+ url: cartLinkUrl || Spree.pathFor("cart_link"),
26
+ success: function(data) {
27
+ $("#link-to-cart").html(data);
28
+ }
29
+ });
30
+ };
@@ -0,0 +1,127 @@
1
+ Spree.ready(function($) {
2
+ if ($("#checkout_form_address").is("*")) {
3
+ // Hidden by default to support browsers with javascript disabled
4
+ $(".js-address-fields").show();
5
+
6
+ var getCountryId = function(region) {
7
+ return $("#" + region + "country select").val();
8
+ };
9
+
10
+ var statesByCountry = {};
11
+
12
+ var updateState = function(region) {
13
+ var countryId = getCountryId(region);
14
+ if (countryId != null) {
15
+ if (statesByCountry[countryId] == null) {
16
+ $.get(
17
+ Spree.routes.states_search,
18
+ {
19
+ country_id: countryId
20
+ },
21
+ function(data) {
22
+ statesByCountry[countryId] = {
23
+ states: data.states,
24
+ states_required: data.states_required
25
+ };
26
+ fillStates(region);
27
+ }
28
+ );
29
+ } else {
30
+ fillStates(region);
31
+ }
32
+ }
33
+ };
34
+
35
+ var fillStates = function(region) {
36
+ var countryId = getCountryId(region);
37
+ var data = statesByCountry[countryId];
38
+ if (data == null) {
39
+ return;
40
+ }
41
+ var statesRequired = data.states_required;
42
+ var states = data.states;
43
+ var statePara = $("#" + region + "state");
44
+ var stateSelect = statePara.find("select");
45
+ var stateInput = statePara.find("input");
46
+ if (states.length > 0) {
47
+ var selected = parseInt(stateSelect.val());
48
+ stateSelect.html("");
49
+ var statesWithBlank = [
50
+ {
51
+ name: "",
52
+ id: ""
53
+ }
54
+ ].concat(states);
55
+ $.each(statesWithBlank, function(idx, state) {
56
+ var opt;
57
+ opt = $(document.createElement("option"))
58
+ .attr("value", state.id)
59
+ .html(state.name);
60
+ if (selected === state.id) {
61
+ opt.prop("selected", true);
62
+ }
63
+ stateSelect.append(opt);
64
+ });
65
+ stateSelect.prop("disabled", false).show();
66
+ stateInput.hide().prop("disabled", true);
67
+ statePara.show();
68
+ if (statesRequired) {
69
+ stateSelect.addClass("required");
70
+ statePara.addClass("field-required");
71
+ } else {
72
+ stateSelect.removeClass("required");
73
+ statePara.removeClass("field-required");
74
+ }
75
+ stateInput.removeClass("required");
76
+ } else {
77
+ stateSelect.hide().prop("disabled", true);
78
+ stateInput.show();
79
+ if (statesRequired) {
80
+ statePara.addClass("field-required");
81
+ stateInput.addClass("required");
82
+ } else {
83
+ stateInput.val("");
84
+ statePara.removeClass("field-required");
85
+ stateInput.removeClass("required");
86
+ }
87
+ statePara.toggle(!!statesRequired);
88
+ stateInput.prop("disabled", !statesRequired);
89
+ stateSelect.removeClass("required");
90
+ }
91
+ };
92
+
93
+ $("#bcountry select").change(function() {
94
+ updateState("b");
95
+ });
96
+
97
+ $("#scountry select").change(function() {
98
+ updateState("s");
99
+ });
100
+
101
+ updateState("b");
102
+
103
+ var order_use_billing = $("input#order_use_billing");
104
+ order_use_billing.change(function() {
105
+ update_shipping_form_state(order_use_billing);
106
+ });
107
+
108
+ var update_shipping_form_state = function(order_use_billing) {
109
+ if (order_use_billing.is(":checked")) {
110
+ $("#shipping .inner").hide();
111
+ $("#shipping .inner input, #shipping .inner select").prop(
112
+ "disabled",
113
+ true
114
+ );
115
+ } else {
116
+ $("#shipping .inner").show();
117
+ $("#shipping .inner input, #shipping .inner select").prop(
118
+ "disabled",
119
+ false
120
+ );
121
+ updateState("s");
122
+ }
123
+ };
124
+
125
+ update_shipping_form_state(order_use_billing);
126
+ }
127
+ });
@@ -0,0 +1,41 @@
1
+ Spree.onCouponCodeApply = function(e) {
2
+ e.preventDefault();
3
+ var couponCodeField = $("#order_coupon_code");
4
+ var couponCode = $.trim(couponCodeField.val());
5
+ if (couponCode === "") {
6
+ return;
7
+ }
8
+ var couponStatus = $("#coupon_status");
9
+ var successClass = "success";
10
+ var errorClass = "alert";
11
+ couponStatus.removeClass([successClass, errorClass].join(" "));
12
+ var data = {
13
+ order_token: Spree.current_order_token,
14
+ coupon_code: couponCode
15
+ };
16
+ var req = Spree.ajax({
17
+ method: "PUT",
18
+ url: Spree.routes.apply_coupon_code(Spree.current_order_id),
19
+ data: JSON.stringify(data),
20
+ contentType: "application/json"
21
+ });
22
+ req.done(function(data) {
23
+ window.location.reload();
24
+ couponCodeField.val("");
25
+ couponStatus
26
+ .addClass(successClass)
27
+ .html("Coupon code applied successfully.");
28
+ });
29
+ req.fail(function(xhr) {
30
+ var handler;
31
+ // handler = JSON.parse(xhr.responseText)
32
+ handler = xhr.responseJSON;
33
+ couponStatus.addClass(errorClass).html(handler["error"]);
34
+ });
35
+ };
36
+
37
+ Spree.ready(function($) {
38
+ $("#coupon-code-apply-button").click(function(e) {
39
+ Spree.onCouponCodeApply(e);
40
+ });
41
+ });
@@ -0,0 +1,55 @@
1
+ Spree.ready(function($) {
2
+ Spree.onPayment = function() {
3
+ if ($("#checkout_form_payment").is("*")) {
4
+ if ($("#existing_cards").is("*")) {
5
+ $("#payment-method-fields").hide();
6
+ $("#payment-methods").hide();
7
+
8
+ $("#use_existing_card_yes").click(function() {
9
+ $("#payment-method-fields").hide();
10
+ $("#payment-methods").hide();
11
+ $(".existing-cc-radio").prop("disabled", false);
12
+ });
13
+
14
+ $("#use_existing_card_no").click(function() {
15
+ $("#payment-method-fields").show();
16
+ $("#payment-methods").show();
17
+ $(".existing-cc-radio").prop("disabled", true);
18
+ });
19
+ }
20
+
21
+ $(".cardNumber").payment("formatCardNumber");
22
+ $(".cardExpiry").payment("formatCardExpiry");
23
+ $(".cardCode").payment("formatCardCVC");
24
+
25
+ $(".cardNumber").change(function() {
26
+ $(this)
27
+ .parent()
28
+ .siblings(".ccType")
29
+ .val($.payment.cardType(this.value));
30
+ });
31
+
32
+ $(
33
+ 'input[type="radio"][name="order[payments_attributes][][payment_method_id]"]'
34
+ ).click(function() {
35
+ $("#payment-methods li").hide();
36
+ if (this.checked) {
37
+ $("#payment_method_" + this.value).show();
38
+ }
39
+ });
40
+
41
+ $("#cvv_link").on("click", function(event) {
42
+ var windowName = "cvv_info";
43
+ var windowOptions =
44
+ "left=20,top=20,width=500,height=500,toolbar=0,resizable=0,scrollbars=1";
45
+ window.open($(this).attr("href"), windowName, windowOptions);
46
+ event.preventDefault();
47
+ });
48
+
49
+ // Activate already checked payment method if form is re-rendered
50
+ // i.e. if user enters invalid data
51
+ $('input[type="radio"]:checked').click();
52
+ }
53
+ };
54
+ Spree.onPayment();
55
+ });
@@ -0,0 +1,24 @@
1
+ //= require jquery.payment
2
+ //= require_self
3
+ //= require spree/frontend/checkout/address
4
+ //= require spree/frontend/checkout/payment
5
+ //= require spree/frontend/checkout/coupon-code
6
+
7
+ Spree.disableSaveOnClick = function() {
8
+ $("form.edit_order").submit(function() {
9
+ $(this)
10
+ .find(":submit, :image")
11
+ .attr("disabled", true)
12
+ .removeClass("primary")
13
+ .addClass("disabled");
14
+ });
15
+ };
16
+
17
+ Spree.ready(function($) {
18
+ var termsCheckbox = $("#accept_terms_and_conditions");
19
+ termsCheckbox.change(function() {
20
+ var submitBtn = $(this.closest("form")).find(":submit");
21
+ submitBtn.prop("disabled", !this.checked);
22
+ submitBtn.toggleClass("disabled", !this.checked);
23
+ });
24
+ });
@@ -0,0 +1,5 @@
1
+ $(function() {
2
+ $('#locale_selector select').change(function() {
3
+ this.form.submit();
4
+ });
5
+ });
@@ -0,0 +1,81 @@
1
+ Spree.ready(function($) {
2
+ Spree.addImageHandlers = function() {
3
+ var thumbnails = $("#product-images ul.thumbnails");
4
+ $("#main-image").data("selectedThumb", $("#main-image img").attr("src"));
5
+ if (!thumbnails.find("li.selected").length) {
6
+ thumbnails
7
+ .find("li")
8
+ .eq(0)
9
+ .addClass("selected");
10
+ }
11
+ thumbnails.find("a").on("click", function(event) {
12
+ $("#main-image").data(
13
+ "selectedThumb",
14
+ $(event.currentTarget).attr("href")
15
+ );
16
+ $("#main-image").data(
17
+ "selectedThumbId",
18
+ $(event.currentTarget)
19
+ .parent()
20
+ .attr("id")
21
+ );
22
+ thumbnails.find("li").removeClass("selected");
23
+ $(event.currentTarget)
24
+ .parent("li")
25
+ .addClass("selected");
26
+ return false;
27
+ });
28
+ thumbnails.find("li").on("mouseenter", function(event) {
29
+ $("#main-image img").attr(
30
+ "src",
31
+ $(event.currentTarget)
32
+ .find("a")
33
+ .attr("href")
34
+ );
35
+ });
36
+ thumbnails.find("li").on("mouseleave", function(event) {
37
+ $("#main-image img").attr("src", $("#main-image").data("selectedThumb"));
38
+ });
39
+ };
40
+
41
+ Spree.showVariantImages = function(variantId) {
42
+ $("li.vtmb").hide();
43
+ $("li.tmb-" + variantId).show();
44
+ var currentThumb = $("#" + $("#main-image").data("selectedThumbId"));
45
+ if (!currentThumb.hasClass("vtmb-" + variantId)) {
46
+ var thumb = $($("#product-images ul.thumbnails li:visible.vtmb").eq(0));
47
+ if (!(thumb.length > 0)) {
48
+ thumb = $($("#product-images ul.thumbnails li:visible").eq(0));
49
+ }
50
+ var newImg = thumb.find("a").attr("href");
51
+ $("#product-images ul.thumbnails li").removeClass("selected");
52
+ thumb.addClass("selected");
53
+ $("#main-image img").attr("src", newImg);
54
+ $("#main-image").data("selectedThumb", newImg);
55
+ $("#main-image").data("selectedThumbId", thumb.attr("id"));
56
+ }
57
+ };
58
+
59
+ Spree.updateVariantPrice = function(variant) {
60
+ var variantPrice = variant.data("price");
61
+ if (variantPrice) {
62
+ $(".price.selling").text(variantPrice);
63
+ }
64
+ };
65
+
66
+ var radios = $('#product-variants input[type="radio"]');
67
+ if (radios.length > 0) {
68
+ var selectedRadio = $(
69
+ '#product-variants input[type="radio"][checked="checked"]'
70
+ );
71
+ Spree.showVariantImages(selectedRadio.attr("value"));
72
+ Spree.updateVariantPrice(selectedRadio);
73
+ }
74
+
75
+ Spree.addImageHandlers();
76
+
77
+ radios.click(function(event) {
78
+ Spree.showVariantImages(this.value);
79
+ Spree.updateVariantPrice($(this));
80
+ });
81
+ });
@@ -0,0 +1,5 @@
1
+ //= require spree
2
+ //= require spree/frontend/checkout
3
+ //= require spree/frontend/product
4
+ //= require spree/frontend/cart
5
+ //= require spree/frontend/locale_selector