solidus_core 1.1.4 → 1.2.0.beta1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of solidus_core might be problematic. Click here for more details.

Files changed (296) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/logo/solidus_logo.png +0 -0
  3. data/app/helpers/spree/base_helper.rb +2 -3
  4. data/app/models/concerns/spree/adjustment_source.rb +1 -1
  5. data/app/models/concerns/spree/default_price.rb +3 -1
  6. data/app/models/concerns/spree/named_type.rb +1 -1
  7. data/app/models/concerns/spree/user_methods.rb +10 -0
  8. data/app/models/spree/adjustment.rb +1 -1
  9. data/app/models/spree/adjustment_reason.rb +2 -4
  10. data/app/models/spree/app_configuration.rb +36 -0
  11. data/app/models/spree/base.rb +10 -1
  12. data/app/models/spree/calculator/tiered_percent.rb +2 -1
  13. data/app/models/spree/classification.rb +1 -1
  14. data/app/models/spree/country.rb +3 -3
  15. data/app/models/spree/credit_card.rb +2 -2
  16. data/app/models/spree/customer_return.rb +3 -4
  17. data/app/models/spree/inventory_unit.rb +13 -24
  18. data/app/models/spree/item_adjustments.rb +5 -5
  19. data/app/models/spree/line_item.rb +6 -15
  20. data/app/models/spree/log_entry.rb +1 -1
  21. data/app/models/spree/option_type.rb +4 -2
  22. data/app/models/spree/option_type_prototype.rb +6 -0
  23. data/app/models/spree/option_value.rb +1 -1
  24. data/app/models/spree/order.rb +18 -63
  25. data/app/models/spree/order/checkout.rb +4 -2
  26. data/app/models/spree/order_cancellations.rb +52 -1
  27. data/app/models/spree/order_contents.rb +1 -1
  28. data/app/models/spree/order_merger.rb +143 -0
  29. data/app/models/spree/order_shipping.rb +3 -3
  30. data/app/models/spree/order_update_attributes.rb +42 -0
  31. data/app/models/spree/order_updater.rb +1 -1
  32. data/app/models/spree/payment.rb +16 -10
  33. data/app/models/spree/payment_create.rb +68 -0
  34. data/app/models/spree/payment_method.rb +0 -1
  35. data/app/models/spree/preference.rb +1 -1
  36. data/app/models/spree/price.rb +1 -8
  37. data/app/models/spree/product.rb +9 -44
  38. data/app/models/spree/product/scopes.rb +9 -7
  39. data/app/models/spree/promotion/rules/nth_order.rb +1 -1
  40. data/app/models/spree/promotion/rules/taxon.rb +2 -1
  41. data/app/models/spree/promotion_chooser.rb +1 -0
  42. data/app/models/spree/promotion_code.rb +1 -1
  43. data/app/models/spree/promotion_rule_taxon.rb +6 -0
  44. data/app/models/spree/property.rb +2 -1
  45. data/app/models/spree/property_prototype.rb +6 -0
  46. data/app/models/spree/prototype.rb +6 -2
  47. data/app/models/spree/reimbursement.rb +10 -0
  48. data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
  49. data/app/models/spree/return_reason.rb +1 -7
  50. data/app/models/spree/role_user.rb +3 -5
  51. data/app/models/spree/shipment.rb +6 -11
  52. data/app/models/spree/shipping_method.rb +1 -7
  53. data/app/models/spree/shipping_rate.rb +3 -14
  54. data/app/models/spree/stock/coordinator.rb +48 -4
  55. data/app/models/spree/stock/estimator.rb +3 -6
  56. data/app/models/spree/stock/packer.rb +18 -2
  57. data/app/models/spree/stock/shipping_rate_selector.rb +16 -0
  58. data/app/models/spree/stock/shipping_rate_sorter.rb +16 -0
  59. data/app/models/spree/stock_item.rb +19 -15
  60. data/app/models/spree/stock_location.rb +2 -12
  61. data/app/models/spree/stock_transfer.rb +3 -3
  62. data/app/models/spree/store_credit.rb +2 -2
  63. data/app/models/spree/tax_category.rb +3 -2
  64. data/app/models/spree/tax_rate.rb +7 -14
  65. data/app/models/spree/taxon.rb +4 -1
  66. data/app/models/spree/taxonomy.rb +1 -1
  67. data/app/models/spree/transfer_item.rb +2 -2
  68. data/app/models/spree/unit_cancel.rb +2 -0
  69. data/app/models/spree/variant.rb +9 -14
  70. data/app/models/spree/zone.rb +6 -0
  71. data/app/models/spree/zone_member.rb +1 -4
  72. data/app/views/spree/order_mailer/cancel_email.text.erb +0 -0
  73. data/config/locales/en.yml +7 -5
  74. data/db/default/spree/countries.rb +1 -1
  75. data/db/default/spree/zones.rb +5 -11
  76. data/db/migrate/20130213191427_create_default_stock.rb +1 -1
  77. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +1 -1
  78. data/db/migrate/20140309033438_create_store_from_preferences.rb +5 -2
  79. data/db/migrate/20141009204607_add_store_id_to_orders.rb +6 -2
  80. data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +5 -0
  81. data/db/migrate/20141217215630_update_product_slug_index.rb +6 -0
  82. data/db/migrate/20150225205344_move_promotion_code_to_promotion_code_value.rb +2 -2
  83. data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +10 -0
  84. data/db/migrate/20151117063249_convert_habtm_to_hmt_for_properties_prototypes.rb +17 -0
  85. data/db/migrate/20151124062500_convert_habtm_to_hmt_for_option_type_prototypes.rb +17 -0
  86. data/db/migrate/20151126063028_convert_habtm_to_hmt_for_taxons_promotion_rules.rb +15 -0
  87. data/db/migrate/20151219020209_add_stock_item_unique_index.rb +9 -0
  88. data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
  89. data/lib/generators/spree/dummy/templates/rails/database.yml +1 -1
  90. data/lib/generators/spree/install/templates/config/initializers/spree.rb +25 -1
  91. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +3 -0
  92. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +3 -0
  93. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +3 -0
  94. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +3 -0
  95. data/lib/spree/core/controller_helpers/common.rb +1 -1
  96. data/lib/spree/core/controller_helpers/order.rb +1 -1
  97. data/lib/spree/core/controller_helpers/payment_parameters.rb +104 -5
  98. data/lib/spree/core/engine.rb +3 -2
  99. data/lib/spree/core/stock_configuration.rb +11 -0
  100. data/lib/spree/core/unreturned_item_charger.rb +4 -4
  101. data/lib/spree/core/version.rb +9 -1
  102. data/lib/spree/permission_sets/restricted_stock_transfer_management.rb +15 -24
  103. data/lib/spree/permitted_attributes.rb +3 -1
  104. data/lib/spree/testing_support/capybara_ext.rb +14 -40
  105. data/lib/spree/testing_support/factories.rb +0 -15
  106. data/lib/spree/testing_support/factories/address_factory.rb +3 -0
  107. data/lib/spree/testing_support/factories/adjustment_factory.rb +9 -1
  108. data/lib/spree/testing_support/factories/carton_factory.rb +4 -1
  109. data/lib/spree/testing_support/factories/customer_return_factory.rb +4 -0
  110. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +5 -0
  111. data/lib/spree/testing_support/factories/line_item_factory.rb +3 -0
  112. data/lib/spree/testing_support/factories/option_type_factory.rb +6 -0
  113. data/lib/spree/testing_support/factories/{options_factory.rb → option_value_factory.rb} +0 -5
  114. data/lib/spree/testing_support/factories/order_factory.rb +13 -3
  115. data/lib/spree/testing_support/factories/order_promotion_factory.rb +3 -0
  116. data/lib/spree/testing_support/factories/payment_factory.rb +13 -5
  117. data/lib/spree/testing_support/factories/price_factory.rb +2 -0
  118. data/lib/spree/testing_support/factories/product_factory.rb +7 -1
  119. data/lib/spree/testing_support/factories/product_option_type_factory.rb +3 -0
  120. data/lib/spree/testing_support/factories/product_property_factory.rb +3 -0
  121. data/lib/spree/testing_support/factories/promotion_code_factory.rb +3 -0
  122. data/lib/spree/testing_support/factories/promotion_factory.rb +3 -0
  123. data/lib/spree/testing_support/factories/prototype_factory.rb +2 -0
  124. data/lib/spree/testing_support/factories/refund_factory.rb +10 -5
  125. data/lib/spree/testing_support/factories/refund_reason_factory.rb +5 -0
  126. data/lib/spree/testing_support/factories/reimbursement_factory.rb +2 -0
  127. data/lib/spree/testing_support/factories/return_authorization_factory.rb +4 -4
  128. data/lib/spree/testing_support/factories/return_item_factory.rb +4 -0
  129. data/lib/spree/testing_support/factories/return_reason_factory.rb +5 -0
  130. data/lib/spree/testing_support/factories/shipment_factory.rb +6 -1
  131. data/lib/spree/testing_support/factories/shipping_method_factory.rb +22 -10
  132. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +9 -0
  133. data/lib/spree/testing_support/factories/state_factory.rb +2 -0
  134. data/lib/spree/testing_support/factories/stock_item_factory.rb +4 -1
  135. data/lib/spree/testing_support/factories/stock_location_factory.rb +8 -0
  136. data/lib/spree/testing_support/factories/stock_movement_factory.rb +2 -0
  137. data/lib/spree/testing_support/factories/{stock_factory.rb → stock_package_factory.rb} +5 -10
  138. data/lib/spree/testing_support/factories/stock_packer_factory.rb +13 -0
  139. data/lib/spree/testing_support/factories/stock_transfer_factory.rb +2 -2
  140. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +4 -1
  141. data/lib/spree/testing_support/factories/store_credit_factory.rb +10 -6
  142. data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -0
  143. data/lib/spree/testing_support/factories/tax_rate_factory.rb +4 -0
  144. data/lib/spree/testing_support/factories/taxon_factory.rb +2 -0
  145. data/lib/spree/testing_support/factories/user_factory.rb +6 -2
  146. data/lib/spree/testing_support/factories/variant_factory.rb +5 -0
  147. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +3 -0
  148. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +4 -0
  149. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +3 -0
  150. data/lib/spree/testing_support/factories/zone_factory.rb +6 -0
  151. data/lib/spree/testing_support/sequences.rb +9 -0
  152. data/lib/tasks/exchanges.rake +4 -3
  153. data/lib/tasks/migrations/copy_shipped_shipments_to_cartons.rake +2 -2
  154. data/solidus_core.gemspec +4 -5
  155. data/spec/helpers/base_helper_spec.rb +6 -6
  156. data/spec/helpers/order_helper_spec.rb +1 -1
  157. data/spec/helpers/products_helper_spec.rb +2 -2
  158. data/spec/helpers/taxons_helper_spec.rb +1 -1
  159. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +107 -7
  160. data/spec/lib/spree/core/importer/order_spec.rb +1 -1
  161. data/spec/lib/spree/core/stock_configuration_spec.rb +16 -0
  162. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +24 -0
  163. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +18 -0
  164. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +12 -0
  165. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +42 -0
  166. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +12 -0
  167. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +12 -0
  168. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +12 -0
  169. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +28 -0
  170. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +12 -0
  171. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +12 -0
  172. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +12 -0
  173. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +12 -0
  174. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +12 -0
  175. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +49 -0
  176. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +12 -0
  177. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +24 -0
  178. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +30 -0
  179. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +12 -0
  180. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +30 -0
  181. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +12 -0
  182. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +12 -0
  183. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +12 -0
  184. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +12 -0
  185. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +30 -0
  186. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +12 -0
  187. data/spec/lib/spree/core/testing_support/factories/prototype_factory_spec.rb +12 -0
  188. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +12 -0
  189. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +12 -0
  190. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +12 -0
  191. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +12 -0
  192. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +12 -0
  193. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +18 -0
  194. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +12 -0
  195. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +18 -0
  196. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +12 -0
  197. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +12 -0
  198. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +28 -0
  199. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +12 -0
  200. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +12 -0
  201. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +12 -0
  202. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +24 -0
  203. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +12 -0
  204. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +26 -0
  205. data/spec/lib/spree/core/testing_support/factories/stock_packer_factory_spec.rb +16 -0
  206. data/spec/lib/spree/core/testing_support/factories/stock_transfer_factory_spec.rb +12 -0
  207. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +12 -0
  208. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +42 -0
  209. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +12 -0
  210. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +18 -0
  211. data/spec/lib/spree/core/testing_support/factories/store_credit_update_reason_factory_spec.rb +12 -0
  212. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +12 -0
  213. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +12 -0
  214. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +12 -0
  215. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +12 -0
  216. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +12 -0
  217. data/spec/lib/spree/core/testing_support/factories/tracker_factory_spec.rb +12 -0
  218. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +22 -0
  219. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +36 -0
  220. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +12 -0
  221. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +12 -0
  222. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +12 -0
  223. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +18 -0
  224. data/spec/lib/spree/core/unreturned_item_charger_spec.rb +1 -1
  225. data/spec/lib/spree/core/version_spec.rb +17 -0
  226. data/spec/lib/spree/money_spec.rb +1 -1
  227. data/spec/mailers/carton_mailer_spec.rb +1 -1
  228. data/spec/mailers/order_mailer_spec.rb +1 -1
  229. data/spec/mailers/reimbursement_mailer_spec.rb +1 -3
  230. data/spec/mailers/test_mailer_spec.rb +1 -3
  231. data/spec/models/spree/address_spec.rb +4 -4
  232. data/spec/models/spree/adjustment_reason_spec.rb +1 -3
  233. data/spec/models/spree/app_configuration_spec.rb +4 -0
  234. data/spec/models/spree/calculator/price_sack_spec.rb +3 -3
  235. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +3 -3
  236. data/spec/models/spree/calculator/tiered_percent_spec.rb +86 -10
  237. data/spec/models/spree/carton_spec.rb +3 -1
  238. data/spec/models/spree/classification_spec.rb +3 -3
  239. data/spec/models/spree/credit_card_spec.rb +16 -16
  240. data/spec/models/spree/customer_return_spec.rb +1 -1
  241. data/spec/models/spree/gateway/bogus_simple.rb +1 -1
  242. data/spec/models/spree/inventory_unit_spec.rb +3 -3
  243. data/spec/models/spree/item_adjustments_spec.rb +1 -1
  244. data/spec/models/spree/line_item_spec.rb +2 -2
  245. data/spec/models/spree/option_type_spec.rb +2 -2
  246. data/spec/models/spree/option_value_spec.rb +2 -2
  247. data/spec/models/spree/order/callbacks_spec.rb +1 -1
  248. data/spec/models/spree/order/checkout_spec.rb +16 -11
  249. data/spec/models/spree/order/payment_spec.rb +24 -22
  250. data/spec/models/spree/order/state_machine_spec.rb +1 -1
  251. data/spec/models/spree/order/validations_spec.rb +1 -1
  252. data/spec/models/spree/order_cancellations_spec.rb +63 -0
  253. data/spec/models/spree/order_contents_spec.rb +1 -1
  254. data/spec/models/spree/order_merger_spec.rb +133 -0
  255. data/spec/models/spree/order_spec.rb +39 -159
  256. data/spec/models/spree/order_update_attributes_spec.rb +82 -0
  257. data/spec/models/spree/order_updater_spec.rb +6 -4
  258. data/spec/models/spree/payment_create_spec.rb +131 -0
  259. data/spec/models/spree/payment_spec.rb +130 -48
  260. data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +91 -33
  261. data/spec/models/spree/product_filter_spec.rb +3 -3
  262. data/spec/models/spree/product_spec.rb +80 -26
  263. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +1 -1
  264. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +2 -2
  265. data/spec/models/spree/promotion/rules/nth_order_spec.rb +1 -1
  266. data/spec/models/spree/promotion/rules/user_spec.rb +2 -2
  267. data/spec/models/spree/promotion_handler/coupon_spec.rb +2 -2
  268. data/spec/models/spree/promotion_spec.rb +18 -18
  269. data/spec/models/spree/reimbursement_spec.rb +22 -0
  270. data/spec/models/spree/return_item_spec.rb +2 -2
  271. data/spec/models/spree/shipment_spec.rb +28 -12
  272. data/spec/models/spree/shipping_method_spec.rb +2 -2
  273. data/spec/models/spree/shipping_rate_spec.rb +3 -3
  274. data/spec/models/spree/stock/coordinator_spec.rb +5 -0
  275. data/spec/models/spree/stock/estimator_spec.rb +35 -1
  276. data/spec/models/spree/stock/package_spec.rb +1 -1
  277. data/spec/models/spree/stock/packer_spec.rb +2 -3
  278. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +16 -0
  279. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +16 -0
  280. data/spec/models/spree/stock_item_spec.rb +5 -7
  281. data/spec/models/spree/stock_location_spec.rb +5 -9
  282. data/spec/models/spree/stock_transfer_spec.rb +33 -13
  283. data/spec/models/spree/store_credit_event_spec.rb +1 -1
  284. data/spec/models/spree/store_credit_spec.rb +1 -1
  285. data/spec/models/spree/tax_rate_spec.rb +381 -120
  286. data/spec/models/spree/taxon_spec.rb +3 -3
  287. data/spec/models/spree/transfer_item_spec.rb +4 -4
  288. data/spec/models/spree/unit_cancel_spec.rb +1 -1
  289. data/spec/models/spree/variant_spec.rb +3 -3
  290. data/spec/models/spree/zone_spec.rb +35 -1
  291. data/spec/support/concerns/working_factories.rb +9 -0
  292. data/vendor/assets/javascripts/jquery-migrate-1.0.0.js +498 -0
  293. data/vendor/assets/javascripts/jquery.payment.js +231 -80
  294. metadata +103 -27
  295. data/app/models/spree/order/currency_updater.rb +0 -40
  296. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
@@ -1,11 +1,11 @@
1
- // Generated by CoffeeScript 1.4.0
1
+ // jQuery.payment v1.3.2
2
+ // Generated by CoffeeScript 1.7.1
2
3
  (function() {
3
- var $, cardFromNumber, cardFromType, cards, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardNumber, formatExpiry, formatForwardExpiry, formatForwardSlash, hasTextSelected, luhnCheck, reFormatCardNumber, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric, setCardType,
4
+ var $, cardFromNumber, cardFromType, cards, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardNumber, formatExpiry, formatForwardExpiry, formatForwardSlashAndSpace, hasTextSelected, luhnCheck, reFormatCVC, reFormatCardNumber, reFormatExpiry, reFormatNumeric, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric, safeVal, setCardType,
4
5
  __slice = [].slice,
5
- __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
6
- _this = this;
6
+ __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
7
7
 
8
- $ = jQuery;
8
+ $ = window.jQuery || window.Zepto || window.$;
9
9
 
10
10
  $.payment = {};
11
11
 
@@ -19,80 +19,99 @@
19
19
 
20
20
  defaultFormat = /(\d{1,4})/g;
21
21
 
22
- cards = [
22
+ $.payment.cards = cards = [
23
23
  {
24
- type: 'maestro',
25
- pattern: /^(5018|5020|5038|6304|6759|676[1-3])/,
24
+ type: 'visaelectron',
25
+ patterns: [4026, 417500, 4405, 4508, 4844, 4913, 4917],
26
26
  format: defaultFormat,
27
- length: [12, 13, 14, 15, 16, 17, 18, 19],
27
+ length: [16],
28
28
  cvcLength: [3],
29
29
  luhn: true
30
30
  }, {
31
- type: 'dinersclub',
32
- pattern: /^(36|38|30[0-5])/,
31
+ type: 'maestro',
32
+ patterns: [5018, 502, 503, 56, 58, 639, 6220, 67],
33
33
  format: defaultFormat,
34
- length: [14],
34
+ length: [12, 13, 14, 15, 16, 17, 18, 19],
35
35
  cvcLength: [3],
36
36
  luhn: true
37
37
  }, {
38
- type: 'laser',
39
- pattern: /^(6706|6771|6709)/,
38
+ type: 'forbrugsforeningen',
39
+ patterns: [600],
40
40
  format: defaultFormat,
41
- length: [16, 17, 18, 19],
41
+ length: [16],
42
42
  cvcLength: [3],
43
43
  luhn: true
44
44
  }, {
45
- type: 'jcb',
46
- pattern: /^35/,
45
+ type: 'dankort',
46
+ patterns: [5019],
47
47
  format: defaultFormat,
48
48
  length: [16],
49
49
  cvcLength: [3],
50
50
  luhn: true
51
51
  }, {
52
- type: 'unionpay',
53
- pattern: /^62/,
54
- format: defaultFormat,
55
- length: [16, 17, 18, 19],
56
- cvcLength: [3],
57
- luhn: false
58
- }, {
59
- type: 'discover',
60
- pattern: /^(6011|65|64[4-9]|622)/,
52
+ type: 'visa',
53
+ patterns: [4],
61
54
  format: defaultFormat,
62
- length: [16],
55
+ length: [13, 16],
63
56
  cvcLength: [3],
64
57
  luhn: true
65
58
  }, {
66
59
  type: 'mastercard',
67
- pattern: /^5[1-5]/,
60
+ patterns: [51, 52, 53, 54, 55, 22, 23, 24, 25, 26, 27],
68
61
  format: defaultFormat,
69
62
  length: [16],
70
63
  cvcLength: [3],
71
64
  luhn: true
72
65
  }, {
73
66
  type: 'amex',
74
- pattern: /^3[47]/,
67
+ patterns: [34, 37],
75
68
  format: /(\d{1,4})(\d{1,6})?(\d{1,5})?/,
76
69
  length: [15],
77
70
  cvcLength: [3, 4],
78
71
  luhn: true
79
72
  }, {
80
- type: 'visa',
81
- pattern: /^4/,
73
+ type: 'dinersclub',
74
+ patterns: [30, 36, 38, 39],
75
+ format: /(\d{1,4})(\d{1,6})?(\d{1,4})?/,
76
+ length: [14],
77
+ cvcLength: [3],
78
+ luhn: true
79
+ }, {
80
+ type: 'discover',
81
+ patterns: [60, 64, 65, 622],
82
+ format: defaultFormat,
83
+ length: [16],
84
+ cvcLength: [3],
85
+ luhn: true
86
+ }, {
87
+ type: 'unionpay',
88
+ patterns: [62, 88],
89
+ format: defaultFormat,
90
+ length: [16, 17, 18, 19],
91
+ cvcLength: [3],
92
+ luhn: false
93
+ }, {
94
+ type: 'jcb',
95
+ patterns: [35],
82
96
  format: defaultFormat,
83
- length: [13, 14, 15, 16],
97
+ length: [16],
84
98
  cvcLength: [3],
85
99
  luhn: true
86
100
  }
87
101
  ];
88
102
 
89
103
  cardFromNumber = function(num) {
90
- var card, _i, _len;
104
+ var card, p, pattern, _i, _j, _len, _len1, _ref;
91
105
  num = (num + '').replace(/\D/g, '');
92
106
  for (_i = 0, _len = cards.length; _i < _len; _i++) {
93
107
  card = cards[_i];
94
- if (card.pattern.test(num)) {
95
- return card;
108
+ _ref = card.patterns;
109
+ for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
110
+ pattern = _ref[_j];
111
+ p = pattern + '';
112
+ if (num.substr(0, p.length) === p) {
113
+ return card;
114
+ }
96
115
  }
97
116
  }
98
117
  };
@@ -131,20 +150,72 @@
131
150
  if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== $target.prop('selectionEnd')) {
132
151
  return true;
133
152
  }
134
- if (typeof document !== "undefined" && document !== null ? (_ref = document.selection) != null ? typeof _ref.createRange === "function" ? _ref.createRange().text : void 0 : void 0 : void 0) {
135
- return true;
153
+ if ((typeof document !== "undefined" && document !== null ? (_ref = document.selection) != null ? _ref.createRange : void 0 : void 0) != null) {
154
+ if (document.selection.createRange().text) {
155
+ return true;
156
+ }
136
157
  }
137
158
  return false;
138
159
  };
139
160
 
161
+ safeVal = function(value, $target) {
162
+ var cursor, error, last;
163
+ try {
164
+ cursor = $target.prop('selectionStart');
165
+ } catch (_error) {
166
+ error = _error;
167
+ cursor = null;
168
+ }
169
+ last = $target.val();
170
+ $target.val(value);
171
+ if (cursor !== null && $target.is(":focus")) {
172
+ if (cursor === last.length) {
173
+ cursor = value.length;
174
+ }
175
+ $target.prop('selectionStart', cursor);
176
+ return $target.prop('selectionEnd', cursor);
177
+ }
178
+ };
179
+
180
+ replaceFullWidthChars = function(str) {
181
+ var chars, chr, fullWidth, halfWidth, idx, value, _i, _len;
182
+ if (str == null) {
183
+ str = '';
184
+ }
185
+ fullWidth = '\uff10\uff11\uff12\uff13\uff14\uff15\uff16\uff17\uff18\uff19';
186
+ halfWidth = '0123456789';
187
+ value = '';
188
+ chars = str.split('');
189
+ for (_i = 0, _len = chars.length; _i < _len; _i++) {
190
+ chr = chars[_i];
191
+ idx = fullWidth.indexOf(chr);
192
+ if (idx > -1) {
193
+ chr = halfWidth[idx];
194
+ }
195
+ value += chr;
196
+ }
197
+ return value;
198
+ };
199
+
200
+ reFormatNumeric = function(e) {
201
+ return setTimeout(function() {
202
+ var $target, value;
203
+ $target = $(e.currentTarget);
204
+ value = $target.val();
205
+ value = replaceFullWidthChars(value);
206
+ value = value.replace(/\D/g, '');
207
+ return safeVal(value, $target);
208
+ });
209
+ };
210
+
140
211
  reFormatCardNumber = function(e) {
141
- var _this = this;
142
212
  return setTimeout(function() {
143
213
  var $target, value;
144
214
  $target = $(e.currentTarget);
145
215
  value = $target.val();
216
+ value = replaceFullWidthChars(value);
146
217
  value = $.payment.formatCardNumber(value);
147
- return $target.val(value);
218
+ return safeVal(value, $target);
148
219
  });
149
220
  };
150
221
 
@@ -175,10 +246,14 @@
175
246
  }
176
247
  if (re.test(value)) {
177
248
  e.preventDefault();
178
- return $target.val(value + ' ' + digit);
249
+ return setTimeout(function() {
250
+ return $target.val(value + ' ' + digit);
251
+ });
179
252
  } else if (re.test(value + digit)) {
180
253
  e.preventDefault();
181
- return $target.val(value + digit + ' ');
254
+ return setTimeout(function() {
255
+ return $target.val(value + digit + ' ');
256
+ });
182
257
  }
183
258
  };
184
259
 
@@ -186,9 +261,6 @@
186
261
  var $target, value;
187
262
  $target = $(e.currentTarget);
188
263
  value = $target.val();
189
- if (e.meta) {
190
- return;
191
- }
192
264
  if (e.which !== 8) {
193
265
  return;
194
266
  }
@@ -197,13 +269,28 @@
197
269
  }
198
270
  if (/\d\s$/.test(value)) {
199
271
  e.preventDefault();
200
- return $target.val(value.replace(/\d\s$/, ''));
272
+ return setTimeout(function() {
273
+ return $target.val(value.replace(/\d\s$/, ''));
274
+ });
201
275
  } else if (/\s\d?$/.test(value)) {
202
276
  e.preventDefault();
203
- return $target.val(value.replace(/\s\d?$/, ''));
277
+ return setTimeout(function() {
278
+ return $target.val(value.replace(/\d$/, ''));
279
+ });
204
280
  }
205
281
  };
206
282
 
283
+ reFormatExpiry = function(e) {
284
+ return setTimeout(function() {
285
+ var $target, value;
286
+ $target = $(e.currentTarget);
287
+ value = $target.val();
288
+ value = replaceFullWidthChars(value);
289
+ value = $.payment.formatExpiry(value);
290
+ return safeVal(value, $target);
291
+ });
292
+ };
293
+
207
294
  formatExpiry = function(e) {
208
295
  var $target, digit, val;
209
296
  digit = String.fromCharCode(e.which);
@@ -214,10 +301,21 @@
214
301
  val = $target.val() + digit;
215
302
  if (/^\d$/.test(val) && (val !== '0' && val !== '1')) {
216
303
  e.preventDefault();
217
- return $target.val("0" + val + " / ");
304
+ return setTimeout(function() {
305
+ return $target.val("0" + val + " / ");
306
+ });
218
307
  } else if (/^\d\d$/.test(val)) {
219
308
  e.preventDefault();
220
- return $target.val("" + val + " / ");
309
+ return setTimeout(function() {
310
+ var m1, m2;
311
+ m1 = parseInt(val[0], 10);
312
+ m2 = parseInt(val[1], 10);
313
+ if (m2 > 2 && m1 !== 0) {
314
+ return $target.val("0" + m1 + " / " + m2);
315
+ } else {
316
+ return $target.val("" + val + " / ");
317
+ }
318
+ });
221
319
  }
222
320
  };
223
321
 
@@ -234,10 +332,10 @@
234
332
  }
235
333
  };
236
334
 
237
- formatForwardSlash = function(e) {
238
- var $target, slash, val;
239
- slash = String.fromCharCode(e.which);
240
- if (slash !== '/') {
335
+ formatForwardSlashAndSpace = function(e) {
336
+ var $target, val, which;
337
+ which = String.fromCharCode(e.which);
338
+ if (!(which === '/' || which === ' ')) {
241
339
  return;
242
340
  }
243
341
  $target = $(e.currentTarget);
@@ -249,9 +347,6 @@
249
347
 
250
348
  formatBackExpiry = function(e) {
251
349
  var $target, value;
252
- if (e.meta) {
253
- return;
254
- }
255
350
  $target = $(e.currentTarget);
256
351
  value = $target.val();
257
352
  if (e.which !== 8) {
@@ -260,15 +355,25 @@
260
355
  if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {
261
356
  return;
262
357
  }
263
- if (/\d(\s|\/)+$/.test(value)) {
264
- e.preventDefault();
265
- return $target.val(value.replace(/\d(\s|\/)*$/, ''));
266
- } else if (/\s\/\s?\d?$/.test(value)) {
358
+ if (/\d\s\/\s$/.test(value)) {
267
359
  e.preventDefault();
268
- return $target.val(value.replace(/\s\/\s?\d?$/, ''));
360
+ return setTimeout(function() {
361
+ return $target.val(value.replace(/\d\s\/\s$/, ''));
362
+ });
269
363
  }
270
364
  };
271
365
 
366
+ reFormatCVC = function(e) {
367
+ return setTimeout(function() {
368
+ var $target, value;
369
+ $target = $(e.currentTarget);
370
+ value = $target.val();
371
+ value = replaceFullWidthChars(value);
372
+ value = value.replace(/\D/g, '').slice(0, 4);
373
+ return safeVal(value, $target);
374
+ });
375
+ };
376
+
272
377
  restrictNumeric = function(e) {
273
378
  var input;
274
379
  if (e.metaKey || e.ctrlKey) {
@@ -330,6 +435,9 @@
330
435
  if (!/^\d+$/.test(digit)) {
331
436
  return;
332
437
  }
438
+ if (hasTextSelected($target)) {
439
+ return;
440
+ }
333
441
  val = $target.val() + digit;
334
442
  return val.length <= 4;
335
443
  };
@@ -358,33 +466,44 @@
358
466
  };
359
467
 
360
468
  $.payment.fn.formatCardCVC = function() {
361
- this.payment('restrictNumeric');
469
+ this.on('keypress', restrictNumeric);
362
470
  this.on('keypress', restrictCVC);
471
+ this.on('paste', reFormatCVC);
472
+ this.on('change', reFormatCVC);
473
+ this.on('input', reFormatCVC);
363
474
  return this;
364
475
  };
365
476
 
366
477
  $.payment.fn.formatCardExpiry = function() {
367
- this.payment('restrictNumeric');
478
+ this.on('keypress', restrictNumeric);
368
479
  this.on('keypress', restrictExpiry);
369
480
  this.on('keypress', formatExpiry);
370
- this.on('keypress', formatForwardSlash);
481
+ this.on('keypress', formatForwardSlashAndSpace);
371
482
  this.on('keypress', formatForwardExpiry);
372
483
  this.on('keydown', formatBackExpiry);
484
+ this.on('change', reFormatExpiry);
485
+ this.on('input', reFormatExpiry);
373
486
  return this;
374
487
  };
375
488
 
376
489
  $.payment.fn.formatCardNumber = function() {
377
- this.payment('restrictNumeric');
490
+ this.on('keypress', restrictNumeric);
378
491
  this.on('keypress', restrictCardNumber);
379
492
  this.on('keypress', formatCardNumber);
380
493
  this.on('keydown', formatBackCardNumber);
381
494
  this.on('keyup', setCardType);
382
495
  this.on('paste', reFormatCardNumber);
496
+ this.on('change', reFormatCardNumber);
497
+ this.on('input', reFormatCardNumber);
498
+ this.on('input', setCardType);
383
499
  return this;
384
500
  };
385
501
 
386
502
  $.payment.fn.restrictNumeric = function() {
387
503
  this.on('keypress', restrictNumeric);
504
+ this.on('paste', reFormatNumeric);
505
+ this.on('change', reFormatNumeric);
506
+ this.on('input', reFormatNumeric);
388
507
  return this;
389
508
  };
390
509
 
@@ -394,8 +513,7 @@
394
513
 
395
514
  $.payment.cardExpiryVal = function(value) {
396
515
  var month, prefix, year, _ref;
397
- value = value.replace(/\s/g, '');
398
- _ref = value.split('/', 2), month = _ref[0], year = _ref[1];
516
+ _ref = value.split(/[\s\/]+/, 2), month = _ref[0], year = _ref[1];
399
517
  if ((year != null ? year.length : void 0) === 2 && /^\d+$/.test(year)) {
400
518
  prefix = (new Date).getFullYear();
401
519
  prefix = prefix.toString().slice(0, 2);
@@ -423,7 +541,7 @@
423
541
  };
424
542
 
425
543
  $.payment.validateCardExpiry = function(month, year) {
426
- var currentTime, expiry, prefix, _ref;
544
+ var currentTime, expiry, _ref;
427
545
  if (typeof month === 'object' && 'month' in month) {
428
546
  _ref = month, month = _ref.month, year = _ref.year;
429
547
  }
@@ -438,13 +556,18 @@
438
556
  if (!/^\d+$/.test(year)) {
439
557
  return false;
440
558
  }
441
- if (!(parseInt(month, 10) <= 12)) {
559
+ if (!((1 <= month && month <= 12))) {
442
560
  return false;
443
561
  }
444
562
  if (year.length === 2) {
445
- prefix = (new Date).getFullYear();
446
- prefix = prefix.toString().slice(0, 2);
447
- year = prefix + year;
563
+ if (year < 70) {
564
+ year = "20" + year;
565
+ } else {
566
+ year = "19" + year;
567
+ }
568
+ }
569
+ if (year.length !== 4) {
570
+ return false;
448
571
  }
449
572
  expiry = new Date(year, month);
450
573
  currentTime = new Date;
@@ -454,13 +577,14 @@
454
577
  };
455
578
 
456
579
  $.payment.validateCardCVC = function(cvc, type) {
457
- var _ref, _ref1;
580
+ var card, _ref;
458
581
  cvc = $.trim(cvc);
459
582
  if (!/^\d+$/.test(cvc)) {
460
583
  return false;
461
584
  }
462
- if (type) {
463
- return _ref = cvc.length, __indexOf.call((_ref1 = cardFromType(type)) != null ? _ref1.cvcLength : void 0, _ref) >= 0;
585
+ card = cardFromType(type);
586
+ if (card != null) {
587
+ return _ref = cvc.length, __indexOf.call(card.cvcLength, _ref) >= 0;
464
588
  } else {
465
589
  return cvc.length >= 3 && cvc.length <= 4;
466
590
  }
@@ -476,22 +600,49 @@
476
600
 
477
601
  $.payment.formatCardNumber = function(num) {
478
602
  var card, groups, upperLength, _ref;
603
+ num = num.replace(/\D/g, '');
479
604
  card = cardFromNumber(num);
480
605
  if (!card) {
481
606
  return num;
482
607
  }
483
608
  upperLength = card.length[card.length.length - 1];
484
- num = num.replace(/\D/g, '');
485
- num = num.slice(0, +upperLength + 1 || 9e9);
609
+ num = num.slice(0, upperLength);
486
610
  if (card.format.global) {
487
611
  return (_ref = num.match(card.format)) != null ? _ref.join(' ') : void 0;
488
612
  } else {
489
613
  groups = card.format.exec(num);
490
- if (groups != null) {
491
- groups.shift();
614
+ if (groups == null) {
615
+ return;
492
616
  }
493
- return groups != null ? groups.join(' ') : void 0;
617
+ groups.shift();
618
+ groups = $.grep(groups, function(n) {
619
+ return n;
620
+ });
621
+ return groups.join(' ');
494
622
  }
495
623
  };
496
624
 
497
- }).call(this);
625
+ $.payment.formatExpiry = function(expiry) {
626
+ var mon, parts, sep, year;
627
+ parts = expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);
628
+ if (!parts) {
629
+ return '';
630
+ }
631
+ mon = parts[1] || '';
632
+ sep = parts[2] || '';
633
+ year = parts[3] || '';
634
+ if (year.length > 0) {
635
+ sep = ' / ';
636
+ } else if (sep === ' /') {
637
+ mon = mon.substring(0, 1);
638
+ sep = '';
639
+ } else if (mon.length === 2 || sep.length > 0) {
640
+ sep = ' / ';
641
+ } else if (mon.length === 1 && (mon !== '0' && mon !== '1')) {
642
+ mon = "0" + mon;
643
+ sep = ' / ';
644
+ }
645
+ return mon + sep + year;
646
+ };
647
+
648
+ }).call(this);