spree_frontend 2.4.10 → 3.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1 -0
- data/Gemfile +6 -0
- data/LICENSE +1 -1
- data/README.md +39 -10
- data/Rakefile +29 -0
- data/{vendor → app}/assets/images/flags/ad.png +0 -0
- data/{vendor → app}/assets/images/flags/ae.png +0 -0
- data/{vendor → app}/assets/images/flags/af.png +0 -0
- data/{vendor → app}/assets/images/flags/ag.png +0 -0
- data/{vendor → app}/assets/images/flags/ai.png +0 -0
- data/{vendor → app}/assets/images/flags/al.png +0 -0
- data/{vendor → app}/assets/images/flags/am.png +0 -0
- data/{vendor → app}/assets/images/flags/an.png +0 -0
- data/{vendor → app}/assets/images/flags/ao.png +0 -0
- data/{vendor → app}/assets/images/flags/ar.png +0 -0
- data/{vendor → app}/assets/images/flags/as.png +0 -0
- data/{vendor → app}/assets/images/flags/at.png +0 -0
- data/{vendor → app}/assets/images/flags/au.png +0 -0
- data/{vendor → app}/assets/images/flags/aw.png +0 -0
- data/{vendor → app}/assets/images/flags/ax.png +0 -0
- data/{vendor → app}/assets/images/flags/az.png +0 -0
- data/{vendor → app}/assets/images/flags/ba.png +0 -0
- data/{vendor → app}/assets/images/flags/bb.png +0 -0
- data/{vendor → app}/assets/images/flags/bd.png +0 -0
- data/{vendor → app}/assets/images/flags/be.png +0 -0
- data/{vendor → app}/assets/images/flags/bf.png +0 -0
- data/{vendor → app}/assets/images/flags/bg.png +0 -0
- data/{vendor → app}/assets/images/flags/bh.png +0 -0
- data/{vendor → app}/assets/images/flags/bi.png +0 -0
- data/{vendor → app}/assets/images/flags/bj.png +0 -0
- data/{vendor → app}/assets/images/flags/bm.png +0 -0
- data/{vendor → app}/assets/images/flags/bn.png +0 -0
- data/{vendor → app}/assets/images/flags/bo.png +0 -0
- data/{vendor → app}/assets/images/flags/br.png +0 -0
- data/{vendor → app}/assets/images/flags/bs.png +0 -0
- data/{vendor → app}/assets/images/flags/bt.png +0 -0
- data/{vendor → app}/assets/images/flags/bv.png +0 -0
- data/{vendor → app}/assets/images/flags/bw.png +0 -0
- data/{vendor → app}/assets/images/flags/by.png +0 -0
- data/{vendor → app}/assets/images/flags/bz.png +0 -0
- data/{vendor → app}/assets/images/flags/ca.png +0 -0
- data/{vendor → app}/assets/images/flags/catalonia.png +0 -0
- data/{vendor → app}/assets/images/flags/cc.png +0 -0
- data/{vendor → app}/assets/images/flags/cd.png +0 -0
- data/{vendor → app}/assets/images/flags/cf.png +0 -0
- data/{vendor → app}/assets/images/flags/cg.png +0 -0
- data/{vendor → app}/assets/images/flags/ch.png +0 -0
- data/{vendor → app}/assets/images/flags/ci.png +0 -0
- data/{vendor → app}/assets/images/flags/ck.png +0 -0
- data/{vendor → app}/assets/images/flags/cl.png +0 -0
- data/{vendor → app}/assets/images/flags/cm.png +0 -0
- data/{vendor → app}/assets/images/flags/cn.png +0 -0
- data/{vendor → app}/assets/images/flags/co.png +0 -0
- data/{vendor → app}/assets/images/flags/cr.png +0 -0
- data/{vendor → app}/assets/images/flags/cs.png +0 -0
- data/{vendor → app}/assets/images/flags/cu.png +0 -0
- data/{vendor → app}/assets/images/flags/cv.png +0 -0
- data/{vendor → app}/assets/images/flags/cx.png +0 -0
- data/{vendor → app}/assets/images/flags/cy.png +0 -0
- data/{vendor → app}/assets/images/flags/cz.png +0 -0
- data/{vendor → app}/assets/images/flags/de.png +0 -0
- data/{vendor → app}/assets/images/flags/dj.png +0 -0
- data/{vendor → app}/assets/images/flags/dk.png +0 -0
- data/{vendor → app}/assets/images/flags/dm.png +0 -0
- data/{vendor → app}/assets/images/flags/do.png +0 -0
- data/{vendor → app}/assets/images/flags/dz.png +0 -0
- data/{vendor → app}/assets/images/flags/ec.png +0 -0
- data/{vendor → app}/assets/images/flags/ee.png +0 -0
- data/{vendor → app}/assets/images/flags/eg.png +0 -0
- data/{vendor → app}/assets/images/flags/eh.png +0 -0
- data/{vendor → app}/assets/images/flags/england.png +0 -0
- data/{vendor → app}/assets/images/flags/er.png +0 -0
- data/{vendor → app}/assets/images/flags/es.png +0 -0
- data/{vendor → app}/assets/images/flags/et.png +0 -0
- data/{vendor → app}/assets/images/flags/europeanunion.png +0 -0
- data/{vendor → app}/assets/images/flags/fam.png +0 -0
- data/{vendor → app}/assets/images/flags/fi.png +0 -0
- data/{vendor → app}/assets/images/flags/fj.png +0 -0
- data/{vendor → app}/assets/images/flags/fk.png +0 -0
- data/{vendor → app}/assets/images/flags/fm.png +0 -0
- data/{vendor → app}/assets/images/flags/fo.png +0 -0
- data/{vendor → app}/assets/images/flags/fr.png +0 -0
- data/{vendor → app}/assets/images/flags/ga.png +0 -0
- data/{vendor → app}/assets/images/flags/gb.png +0 -0
- data/{vendor → app}/assets/images/flags/gd.png +0 -0
- data/{vendor → app}/assets/images/flags/ge.png +0 -0
- data/{vendor → app}/assets/images/flags/gf.png +0 -0
- data/{vendor → app}/assets/images/flags/gh.png +0 -0
- data/{vendor → app}/assets/images/flags/gi.png +0 -0
- data/{vendor → app}/assets/images/flags/gl.png +0 -0
- data/{vendor → app}/assets/images/flags/gm.png +0 -0
- data/{vendor → app}/assets/images/flags/gn.png +0 -0
- data/{vendor → app}/assets/images/flags/gp.png +0 -0
- data/{vendor → app}/assets/images/flags/gq.png +0 -0
- data/{vendor → app}/assets/images/flags/gr.png +0 -0
- data/{vendor → app}/assets/images/flags/gs.png +0 -0
- data/{vendor → app}/assets/images/flags/gt.png +0 -0
- data/{vendor → app}/assets/images/flags/gu.png +0 -0
- data/{vendor → app}/assets/images/flags/gw.png +0 -0
- data/{vendor → app}/assets/images/flags/gy.png +0 -0
- data/{vendor → app}/assets/images/flags/hk.png +0 -0
- data/{vendor → app}/assets/images/flags/hm.png +0 -0
- data/{vendor → app}/assets/images/flags/hn.png +0 -0
- data/{vendor → app}/assets/images/flags/hr.png +0 -0
- data/{vendor → app}/assets/images/flags/ht.png +0 -0
- data/{vendor → app}/assets/images/flags/hu.png +0 -0
- data/{vendor → app}/assets/images/flags/id.png +0 -0
- data/{vendor → app}/assets/images/flags/ie.png +0 -0
- data/{vendor → app}/assets/images/flags/il.png +0 -0
- data/{vendor → app}/assets/images/flags/in.png +0 -0
- data/{vendor → app}/assets/images/flags/io.png +0 -0
- data/{vendor → app}/assets/images/flags/iq.png +0 -0
- data/{vendor → app}/assets/images/flags/ir.png +0 -0
- data/{vendor → app}/assets/images/flags/is.png +0 -0
- data/{vendor → app}/assets/images/flags/it.png +0 -0
- data/{vendor → app}/assets/images/flags/ja.png +0 -0
- data/{vendor → app}/assets/images/flags/jm.png +0 -0
- data/{vendor → app}/assets/images/flags/jo.png +0 -0
- data/{vendor → app}/assets/images/flags/ke.png +0 -0
- data/{vendor → app}/assets/images/flags/kg.png +0 -0
- data/{vendor → app}/assets/images/flags/kh.png +0 -0
- data/{vendor → app}/assets/images/flags/ki.png +0 -0
- data/{vendor → app}/assets/images/flags/km.png +0 -0
- data/{vendor → app}/assets/images/flags/kn.png +0 -0
- data/{vendor → app}/assets/images/flags/kp.png +0 -0
- data/{vendor → app}/assets/images/flags/kr.png +0 -0
- data/{vendor → app}/assets/images/flags/kw.png +0 -0
- data/{vendor → app}/assets/images/flags/ky.png +0 -0
- data/{vendor → app}/assets/images/flags/kz.png +0 -0
- data/{vendor → app}/assets/images/flags/la.png +0 -0
- data/{vendor → app}/assets/images/flags/lb.png +0 -0
- data/{vendor → app}/assets/images/flags/lc.png +0 -0
- data/{vendor → app}/assets/images/flags/li.png +0 -0
- data/{vendor → app}/assets/images/flags/lk.png +0 -0
- data/{vendor → app}/assets/images/flags/lr.png +0 -0
- data/{vendor → app}/assets/images/flags/ls.png +0 -0
- data/{vendor → app}/assets/images/flags/lt.png +0 -0
- data/{vendor → app}/assets/images/flags/lu.png +0 -0
- data/{vendor → app}/assets/images/flags/lv.png +0 -0
- data/{vendor → app}/assets/images/flags/ly.png +0 -0
- data/{vendor → app}/assets/images/flags/ma.png +0 -0
- data/{vendor → app}/assets/images/flags/mc.png +0 -0
- data/{vendor → app}/assets/images/flags/md.png +0 -0
- data/{vendor → app}/assets/images/flags/me.png +0 -0
- data/{vendor → app}/assets/images/flags/mg.png +0 -0
- data/{vendor → app}/assets/images/flags/mh.png +0 -0
- data/{vendor → app}/assets/images/flags/mk.png +0 -0
- data/{vendor → app}/assets/images/flags/ml.png +0 -0
- data/{vendor → app}/assets/images/flags/mm.png +0 -0
- data/{vendor → app}/assets/images/flags/mn.png +0 -0
- data/{vendor → app}/assets/images/flags/mo.png +0 -0
- data/{vendor → app}/assets/images/flags/mp.png +0 -0
- data/{vendor → app}/assets/images/flags/mq.png +0 -0
- data/{vendor → app}/assets/images/flags/mr.png +0 -0
- data/{vendor → app}/assets/images/flags/ms.png +0 -0
- data/{vendor → app}/assets/images/flags/mt.png +0 -0
- data/{vendor → app}/assets/images/flags/mu.png +0 -0
- data/{vendor → app}/assets/images/flags/mv.png +0 -0
- data/{vendor → app}/assets/images/flags/mw.png +0 -0
- data/{vendor → app}/assets/images/flags/mx.png +0 -0
- data/{vendor → app}/assets/images/flags/my.png +0 -0
- data/{vendor → app}/assets/images/flags/mz.png +0 -0
- data/{vendor → app}/assets/images/flags/na.png +0 -0
- data/{vendor → app}/assets/images/flags/nc.png +0 -0
- data/{vendor → app}/assets/images/flags/ne.png +0 -0
- data/{vendor → app}/assets/images/flags/nf.png +0 -0
- data/{vendor → app}/assets/images/flags/ng.png +0 -0
- data/{vendor → app}/assets/images/flags/ni.png +0 -0
- data/{vendor → app}/assets/images/flags/nl.png +0 -0
- data/{vendor → app}/assets/images/flags/no.png +0 -0
- data/{vendor → app}/assets/images/flags/np.png +0 -0
- data/{vendor → app}/assets/images/flags/nr.png +0 -0
- data/{vendor → app}/assets/images/flags/nu.png +0 -0
- data/{vendor → app}/assets/images/flags/nz.png +0 -0
- data/{vendor → app}/assets/images/flags/om.png +0 -0
- data/{vendor → app}/assets/images/flags/pa.png +0 -0
- data/{vendor → app}/assets/images/flags/pe.png +0 -0
- data/{vendor → app}/assets/images/flags/pf.png +0 -0
- data/{vendor → app}/assets/images/flags/pg.png +0 -0
- data/{vendor → app}/assets/images/flags/ph.png +0 -0
- data/{vendor → app}/assets/images/flags/pk.png +0 -0
- data/{vendor → app}/assets/images/flags/pl.png +0 -0
- data/{vendor → app}/assets/images/flags/pm.png +0 -0
- data/{vendor → app}/assets/images/flags/pn.png +0 -0
- data/{vendor → app}/assets/images/flags/pr.png +0 -0
- data/{vendor → app}/assets/images/flags/ps.png +0 -0
- data/{vendor → app}/assets/images/flags/pt.png +0 -0
- data/{vendor → app}/assets/images/flags/pw.png +0 -0
- data/{vendor → app}/assets/images/flags/py.png +0 -0
- data/{vendor → app}/assets/images/flags/qa.png +0 -0
- data/{vendor → app}/assets/images/flags/re.png +0 -0
- data/{vendor → app}/assets/images/flags/ro.png +0 -0
- data/{vendor → app}/assets/images/flags/rs.png +0 -0
- data/{vendor → app}/assets/images/flags/ru.png +0 -0
- data/{vendor → app}/assets/images/flags/rw.png +0 -0
- data/{vendor → app}/assets/images/flags/sa.png +0 -0
- data/{vendor → app}/assets/images/flags/sb.png +0 -0
- data/{vendor → app}/assets/images/flags/sc.png +0 -0
- data/{vendor → app}/assets/images/flags/scotland.png +0 -0
- data/{vendor → app}/assets/images/flags/sd.png +0 -0
- data/{vendor → app}/assets/images/flags/se.png +0 -0
- data/{vendor → app}/assets/images/flags/sg.png +0 -0
- data/{vendor → app}/assets/images/flags/sh.png +0 -0
- data/{vendor → app}/assets/images/flags/si.png +0 -0
- data/{vendor → app}/assets/images/flags/sj.png +0 -0
- data/{vendor → app}/assets/images/flags/sk.png +0 -0
- data/{vendor → app}/assets/images/flags/sl.png +0 -0
- data/{vendor → app}/assets/images/flags/sm.png +0 -0
- data/{vendor → app}/assets/images/flags/sn.png +0 -0
- data/{vendor → app}/assets/images/flags/so.png +0 -0
- data/{vendor → app}/assets/images/flags/sr.png +0 -0
- data/{vendor → app}/assets/images/flags/st.png +0 -0
- data/{vendor → app}/assets/images/flags/sv.png +0 -0
- data/{vendor → app}/assets/images/flags/sy.png +0 -0
- data/{vendor → app}/assets/images/flags/sz.png +0 -0
- data/{vendor → app}/assets/images/flags/tc.png +0 -0
- data/{vendor → app}/assets/images/flags/td.png +0 -0
- data/{vendor → app}/assets/images/flags/tf.png +0 -0
- data/{vendor → app}/assets/images/flags/tg.png +0 -0
- data/{vendor → app}/assets/images/flags/th.png +0 -0
- data/{vendor → app}/assets/images/flags/tj.png +0 -0
- data/{vendor → app}/assets/images/flags/tk.png +0 -0
- data/{vendor → app}/assets/images/flags/tl.png +0 -0
- data/{vendor → app}/assets/images/flags/tm.png +0 -0
- data/{vendor → app}/assets/images/flags/tn.png +0 -0
- data/{vendor → app}/assets/images/flags/to.png +0 -0
- data/{vendor → app}/assets/images/flags/tr.png +0 -0
- data/{vendor → app}/assets/images/flags/tt.png +0 -0
- data/{vendor → app}/assets/images/flags/tv.png +0 -0
- data/{vendor → app}/assets/images/flags/tw.png +0 -0
- data/{vendor → app}/assets/images/flags/tz.png +0 -0
- data/{vendor → app}/assets/images/flags/ua.png +0 -0
- data/{vendor → app}/assets/images/flags/ug.png +0 -0
- data/{vendor → app}/assets/images/flags/um.png +0 -0
- data/{vendor → app}/assets/images/flags/us.png +0 -0
- data/{vendor → app}/assets/images/flags/uy.png +0 -0
- data/{vendor → app}/assets/images/flags/uz.png +0 -0
- data/{vendor → app}/assets/images/flags/va.png +0 -0
- data/{vendor → app}/assets/images/flags/vc.png +0 -0
- data/{vendor → app}/assets/images/flags/ve.png +0 -0
- data/{vendor → app}/assets/images/flags/vg.png +0 -0
- data/{vendor → app}/assets/images/flags/vi.png +0 -0
- data/{vendor → app}/assets/images/flags/vn.png +0 -0
- data/{vendor → app}/assets/images/flags/vu.png +0 -0
- data/{vendor → app}/assets/images/flags/wales.png +0 -0
- data/{vendor → app}/assets/images/flags/wf.png +0 -0
- data/{vendor → app}/assets/images/flags/ws.png +0 -0
- data/{vendor → app}/assets/images/flags/ye.png +0 -0
- data/{vendor → app}/assets/images/flags/yt.png +0 -0
- data/{vendor → app}/assets/images/flags/za.png +0 -0
- data/{vendor → app}/assets/images/flags/zm.png +0 -0
- data/{vendor → app}/assets/images/flags/zw.png +0 -0
- data/app/assets/images/logo/spree_50.png +0 -0
- data/app/assets/images/spree_header.jpg +0 -0
- data/app/assets/javascripts/spree/frontend.js +1 -1
- data/app/assets/javascripts/spree/frontend/checkout/payment.js.coffee +2 -2
- data/app/assets/stylesheets/spree/frontend.css +4 -4
- data/app/assets/stylesheets/spree/frontend/_variables.scss +4 -61
- data/app/assets/stylesheets/spree/frontend/frontend_bootstrap.css.scss +102 -0
- data/app/controllers/spree/checkout_controller.rb +31 -27
- data/app/controllers/spree/orders_controller.rb +20 -8
- data/app/controllers/spree/store_controller.rb +2 -3
- data/app/controllers/spree/taxons_controller.rb +2 -2
- data/app/helpers/spree/frontend_helper.rb +93 -0
- data/app/helpers/spree/orders_helper.rb +16 -0
- data/app/helpers/spree/store_helper.rb +10 -0
- data/app/helpers/spree/taxons_helper.rb +19 -0
- data/app/models/spree/frontend_configuration.rb +1 -1
- data/app/views/kaminari/twitter-bootstrap-3/_first_page.html.erb +13 -0
- data/app/views/kaminari/twitter-bootstrap-3/_gap.html.erb +8 -0
- data/app/views/kaminari/twitter-bootstrap-3/_last_page.html.erb +13 -0
- data/app/views/kaminari/twitter-bootstrap-3/_next_page.html.erb +13 -0
- data/app/views/kaminari/twitter-bootstrap-3/_page.html.erb +12 -0
- data/app/views/kaminari/twitter-bootstrap-3/_paginator.html.erb +24 -0
- data/app/views/kaminari/twitter-bootstrap-3/_prev_page.html.erb +13 -0
- data/app/views/spree/address/_form.html.erb +24 -24
- data/app/views/spree/checkout/_address.html.erb +33 -22
- data/app/views/spree/checkout/_confirm.html.erb +10 -9
- data/app/views/spree/checkout/_delivery.html.erb +24 -20
- data/app/views/spree/checkout/_payment.html.erb +17 -18
- data/app/views/spree/checkout/_summary.html.erb +2 -2
- data/app/views/spree/checkout/edit.html.erb +23 -14
- data/app/views/spree/checkout/payment/_gateway.html.erb +31 -28
- data/app/views/spree/layouts/spree_application.html.erb +6 -12
- data/app/views/spree/orders/_adjustments.html.erb +5 -0
- data/app/views/spree/orders/_form.html.erb +8 -8
- data/app/views/spree/orders/_line_item.html.erb +6 -6
- data/app/views/spree/orders/edit.html.erb +14 -16
- data/app/views/spree/orders/show.html.erb +9 -4
- data/app/views/spree/products/_cart_form.html.erb +15 -11
- data/app/views/spree/products/_promotions.html.erb +1 -1
- data/app/views/spree/products/_properties.html.erb +2 -2
- data/app/views/spree/products/_taxons.html.erb +4 -4
- data/app/views/spree/products/_thumbnails.html.erb +3 -3
- data/app/views/spree/products/index.html.erb +13 -9
- data/app/views/spree/products/show.html.erb +11 -9
- data/app/views/spree/shared/_error_messages.html.erb +12 -0
- data/app/views/spree/shared/_filters.html.erb +4 -4
- data/app/views/spree/shared/_footer.html.erb +10 -6
- data/app/views/spree/shared/_google_add_items.js.erb +11 -0
- data/app/views/spree/shared/_google_analytics.js.erb +13 -0
- data/app/views/spree/shared/_google_checkout.js.erb +10 -0
- data/app/views/spree/shared/_google_purchase.js.erb +13 -0
- data/app/views/spree/shared/_head.html.erb +1 -1
- data/app/views/spree/shared/_header.html.erb +17 -5
- data/app/views/spree/shared/_login.html.erb +19 -0
- data/app/views/spree/shared/_login_bar.html.erb +6 -0
- data/app/views/spree/shared/_main_nav_bar.html.erb +15 -11
- data/app/views/spree/shared/_nav_bar.html.erb +3 -2
- data/app/views/spree/shared/_order_details.html.erb +30 -31
- data/app/views/spree/shared/_products.html.erb +19 -15
- data/app/views/spree/shared/_search.html.erb +8 -4
- data/app/views/spree/shared/_sidebar.html.erb +1 -1
- data/app/views/spree/shared/_taxonomies.html.erb +1 -1
- data/app/views/spree/taxons/show.html.erb +1 -1
- data/config/initializers/spree.rb +0 -2
- data/lib/spree/frontend.rb +5 -4
- data/lib/spree/frontend/engine.rb +2 -2
- data/script/rails +9 -0
- data/spec/controllers/controller_extension_spec.rb +115 -0
- data/spec/controllers/controller_helpers_spec.rb +26 -0
- data/spec/controllers/spree/checkout_controller_spec.rb +424 -0
- data/spec/controllers/spree/checkout_controller_with_views_spec.rb +36 -0
- data/spec/controllers/spree/content_controller_spec.rb +12 -0
- data/spec/controllers/spree/current_order_tracking_spec.rb +44 -0
- data/spec/controllers/spree/home_controller_spec.rb +27 -0
- data/spec/controllers/spree/orders_controller_ability_spec.rb +104 -0
- data/spec/controllers/spree/orders_controller_spec.rb +134 -0
- data/spec/controllers/spree/orders_controller_transitions_spec.rb +31 -0
- data/spec/controllers/spree/products_controller_spec.rb +36 -0
- data/spec/controllers/spree/taxons_controller_spec.rb +12 -0
- data/spec/features/address_spec.rb +93 -0
- data/spec/features/automatic_promotion_adjustments_spec.rb +47 -0
- data/spec/features/caching/products_spec.rb +55 -0
- data/spec/features/caching/taxons_spec.rb +22 -0
- data/spec/features/cart_spec.rb +84 -0
- data/spec/features/checkout_spec.rb +515 -0
- data/spec/features/checkout_unshippable_spec.rb +34 -0
- data/spec/features/coupon_code_spec.rb +87 -0
- data/spec/features/currency_spec.rb +18 -0
- data/spec/features/free_shipping_promotions_spec.rb +59 -0
- data/spec/features/locale_spec.rb +60 -0
- data/spec/features/order_spec.rb +74 -0
- data/spec/features/page_promotions_spec.rb +36 -0
- data/spec/features/products_spec.rb +262 -0
- data/spec/features/taxons_spec.rb +147 -0
- data/spec/features/template_rendering_spec.rb +19 -0
- data/spec/fixtures/thinking-cat.jpg +0 -0
- data/spec/helpers/frontend_helper_spec.rb +41 -0
- data/spec/helpers/order_helper_spec.rb +12 -0
- data/spec/helpers/taxons_helper_spec.rb +17 -0
- data/spec/spec_helper.rb +115 -0
- data/spec/support/shared_contexts/checkout_setup.rb +9 -0
- data/spec/support/shared_contexts/custom_products.rb +25 -0
- data/spec/support/shared_contexts/product_prototypes.rb +30 -0
- data/spec/views/spree/checkout/_summary_spec.rb +11 -0
- data/spree_frontend.gemspec +30 -0
- metadata +392 -282
- data/app/assets/images/icons/add-to-cart.png +0 -0
- data/app/assets/images/icons/checkout.png +0 -0
- data/app/assets/images/icons/delete.png +0 -0
- data/app/assets/images/icons/update.png +0 -0
- data/app/assets/images/spinner.gif +0 -0
- data/app/assets/images/spree/frontend/cart.png +0 -0
- data/app/assets/images/spree/frontend/select_arrow.gif +0 -0
- data/app/assets/stylesheets/spree/frontend/screen.css.scss +0 -1321
- data/app/views/spree/shared/_google_analytics.html.erb +0 -40
- data/config/initializers/assets.rb +0 -1
- data/config/initializers/check_for_orphaned_preferences.rb +0 -9
- data/config/initializers/deprecation_checker.rb +0 -7
- data/config/initializers/rails_5868.rb +0 -8
- data/lib/spree/frontend/preference_rescue.rb +0 -25
- data/vendor/assets/images/datepicker/cal.gif +0 -0
- data/vendor/assets/images/jquery.formalize/button.png +0 -0
- data/vendor/assets/images/jquery.formalize/select_arrow.gif +0 -0
- data/vendor/assets/javascripts/jquery.formalize.min.js +0 -1
- data/vendor/assets/stylesheets/jquery.formalize.css.erb +0 -363
@@ -1,7 +1,5 @@
|
|
1
1
|
module Spree
|
2
2
|
class OrdersController < Spree::StoreController
|
3
|
-
ssl_required :show
|
4
|
-
|
5
3
|
before_action :check_authorization
|
6
4
|
rescue_from ActiveRecord::RecordNotFound, :with => :render_404
|
7
5
|
helper 'spree/products', 'spree/orders'
|
@@ -9,7 +7,6 @@ module Spree
|
|
9
7
|
respond_to :html
|
10
8
|
|
11
9
|
before_action :assign_order_with_lock, only: :update
|
12
|
-
before_action :apply_coupon_code, only: :update
|
13
10
|
skip_before_action :verify_authenticity_token, only: [:populate]
|
14
11
|
|
15
12
|
def show
|
@@ -41,14 +38,29 @@ module Spree
|
|
41
38
|
|
42
39
|
# Adds a new item to the order (creating a new order if none already exists)
|
43
40
|
def populate
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
41
|
+
order = current_order(create_order_if_necessary: true)
|
42
|
+
variant = Spree::Variant.find(params[:variant_id])
|
43
|
+
quantity = params[:quantity].to_i
|
44
|
+
options = (params[:options] || {}).merge(currency: current_currency)
|
45
|
+
|
46
|
+
# 2,147,483,647 is crazy. See issue #2695.
|
47
|
+
if quantity.between?(1, 2_147_483_647)
|
48
|
+
begin
|
49
|
+
order.contents.add(variant, quantity, options)
|
50
|
+
rescue ActiveRecord::RecordInvalid => e
|
51
|
+
error = e.record.errors.full_messages.join(", ")
|
48
52
|
end
|
49
53
|
else
|
50
|
-
|
54
|
+
error = Spree.t(:please_enter_reasonable_quantity)
|
55
|
+
end
|
56
|
+
|
57
|
+
if error
|
58
|
+
flash[:error] = error
|
51
59
|
redirect_back_or_default(spree.root_path)
|
60
|
+
else
|
61
|
+
respond_with(order) do |format|
|
62
|
+
format.html { redirect_to cart_path }
|
63
|
+
end
|
52
64
|
end
|
53
65
|
end
|
54
66
|
|
@@ -5,11 +5,11 @@ module Spree
|
|
5
5
|
skip_before_action :set_current_order, only: :cart_link
|
6
6
|
|
7
7
|
def unauthorized
|
8
|
-
render 'spree/shared/unauthorized', :
|
8
|
+
render 'spree/shared/unauthorized', layout: Spree::Config[:layout], status: 401
|
9
9
|
end
|
10
10
|
|
11
11
|
def cart_link
|
12
|
-
render :
|
12
|
+
render partial: 'spree/shared/link_to_cart'
|
13
13
|
fresh_when(simple_current_order)
|
14
14
|
end
|
15
15
|
|
@@ -37,4 +37,3 @@ module Spree
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
40
|
-
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module Spree
|
2
2
|
class TaxonsController < Spree::StoreController
|
3
|
-
rescue_from ActiveRecord::RecordNotFound, :
|
3
|
+
rescue_from ActiveRecord::RecordNotFound, with: :render_404
|
4
4
|
helper 'spree/products'
|
5
5
|
|
6
6
|
respond_to :html
|
7
7
|
|
8
8
|
def show
|
9
|
-
@taxon = Taxon.
|
9
|
+
@taxon = Taxon.friendly.find(params[:id])
|
10
10
|
return unless @taxon
|
11
11
|
|
12
12
|
@searcher = build_searcher(params.merge(taxon: @taxon.id, include_images: true))
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module Spree
|
2
|
+
module FrontendHelper
|
3
|
+
def body_class
|
4
|
+
@body_class ||= content_for?(:sidebar) ? 'two-col' : 'one-col'
|
5
|
+
@body_class
|
6
|
+
end
|
7
|
+
|
8
|
+
def breadcrumbs(taxon, separator=" ")
|
9
|
+
return "" if current_page?("/") || taxon.nil?
|
10
|
+
separator = raw(separator)
|
11
|
+
crumbs = [content_tag(:li, content_tag(:span, link_to(Spree.t(:home), spree.root_path, itemprop: "url") + separator, itemprop: "title"), itemscope: "itemscope", itemtype: "http://data-vocabulary.org/Breadcrumb")]
|
12
|
+
if taxon
|
13
|
+
crumbs << content_tag(:li, content_tag(:span, link_to(Spree.t(:products), products_path, itemprop: "url") + separator, itemprop: "title"), itemscope: "itemscope", itemtype: "http://data-vocabulary.org/Breadcrumb")
|
14
|
+
crumbs << taxon.ancestors.collect { |ancestor| content_tag(:li, content_tag(:span, link_to(ancestor.name , seo_url(ancestor), itemprop: "url") + separator, itemprop: "title"), itemscope: "itemscope", itemtype: "http://data-vocabulary.org/Breadcrumb") } unless taxon.ancestors.empty?
|
15
|
+
crumbs << content_tag(:li, content_tag(:span, link_to(taxon.name , seo_url(taxon), itemprop: "url"), itemprop: "title"), class: 'active', itemscope: "itemscope", itemtype: "http://data-vocabulary.org/Breadcrumb")
|
16
|
+
else
|
17
|
+
crumbs << content_tag(:li, content_tag(:span, Spree.t(:products), itemprop: "title"), class: 'active', itemscope: "itemscope", itemtype: "http://data-vocabulary.org/Breadcrumb")
|
18
|
+
end
|
19
|
+
crumb_list = content_tag(:ol, raw(crumbs.flatten.map{|li| li.mb_chars}.join), class: 'breadcrumb')
|
20
|
+
content_tag(:nav, crumb_list, id: 'breadcrumbs', class: 'col-md-12')
|
21
|
+
end
|
22
|
+
|
23
|
+
def checkout_progress
|
24
|
+
states = @order.checkout_steps
|
25
|
+
items = states.map do |state|
|
26
|
+
text = Spree.t("order_state.#{state}").titleize
|
27
|
+
|
28
|
+
css_classes = []
|
29
|
+
current_index = states.index(@order.state)
|
30
|
+
state_index = states.index(state)
|
31
|
+
|
32
|
+
if state_index < current_index
|
33
|
+
css_classes << 'completed'
|
34
|
+
text = link_to text, checkout_state_path(state)
|
35
|
+
end
|
36
|
+
|
37
|
+
css_classes << 'next' if state_index == current_index + 1
|
38
|
+
css_classes << 'active' if state == @order.state
|
39
|
+
css_classes << 'first' if state_index == 0
|
40
|
+
css_classes << 'last' if state_index == states.length - 1
|
41
|
+
# No more joined classes. IE6 is not a target browser.
|
42
|
+
# Hack: Stops <a> being wrapped round previous items twice.
|
43
|
+
if state_index < current_index
|
44
|
+
content_tag('li', text, class: css_classes.join(' '))
|
45
|
+
else
|
46
|
+
content_tag('li', content_tag('a', text), class: css_classes.join(' '))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
content_tag('ul', raw(items.join("\n")), class: 'progress-steps nav nav-pills nav-justified', id: "checkout-step-#{@order.state}")
|
50
|
+
end
|
51
|
+
|
52
|
+
def flash_messages(opts = {})
|
53
|
+
ignore_types = ["order_completed"].concat(Array(opts[:ignore_types]).map(&:to_s) || [])
|
54
|
+
|
55
|
+
flash.each do |msg_type, text|
|
56
|
+
unless ignore_types.include?(msg_type)
|
57
|
+
concat(content_tag :div, text, class: "alert alert-#{msg_type}")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
nil
|
61
|
+
end
|
62
|
+
|
63
|
+
def link_to_cart(text = nil)
|
64
|
+
text = text ? h(text) : Spree.t('cart')
|
65
|
+
css_class = nil
|
66
|
+
|
67
|
+
if simple_current_order.nil? or simple_current_order.item_count.zero?
|
68
|
+
text = "<span class='glyphicon glyphicon-shopping-cart'></span> #{text}: (#{Spree.t('empty')})"
|
69
|
+
css_class = 'empty'
|
70
|
+
else
|
71
|
+
text = "<span class='glyphicon glyphicon-shopping-cart'></span> #{text}: (#{simple_current_order.item_count}) <span class='amount'>#{simple_current_order.display_total.to_html}</span>"
|
72
|
+
css_class = 'full'
|
73
|
+
end
|
74
|
+
|
75
|
+
link_to text.html_safe, spree.cart_path, :class => "cart-info #{css_class}"
|
76
|
+
end
|
77
|
+
|
78
|
+
# helper to determine if its appropriate to show the store menu
|
79
|
+
def store_menu?
|
80
|
+
%w{thank_you}.exclude? params[:action]
|
81
|
+
end
|
82
|
+
|
83
|
+
def taxons_tree(root_taxon, current_taxon, max_level = 1)
|
84
|
+
return '' if max_level < 1 || root_taxon.children.empty?
|
85
|
+
content_tag :div, class: 'list-group' do
|
86
|
+
root_taxon.children.map do |taxon|
|
87
|
+
css_class = (current_taxon && current_taxon.self_and_ancestors.include?(taxon)) ? 'list-group-item active' : 'list-group-item'
|
88
|
+
link_to(taxon.name, seo_url(taxon), class: css_class) + taxons_tree(taxon, current_taxon, max_level - 1)
|
89
|
+
end.join("\n").html_safe
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'truncate_html'
|
2
|
+
require 'app/helpers/truncate_html_helper'
|
3
|
+
|
4
|
+
module Spree
|
5
|
+
module OrdersHelper
|
6
|
+
include TruncateHtmlHelper
|
7
|
+
|
8
|
+
def truncated_product_description(product)
|
9
|
+
truncate_html(raw(product.description))
|
10
|
+
end
|
11
|
+
|
12
|
+
def order_just_completed?(order)
|
13
|
+
flash[:order_completed] && order.present?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# Methods added to this helper will be available to all templates in the frontend.
|
2
|
+
module Spree
|
3
|
+
module StoreHelper
|
4
|
+
def cache_key_for_taxons
|
5
|
+
max_updated_at = @taxons.maximum(:updated_at).to_i
|
6
|
+
parts = [@taxon.try(:id), max_updated_at].compact.join("-")
|
7
|
+
"#{I18n.locale}/taxons/#{parts}"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Spree
|
2
|
+
module TaxonsHelper
|
3
|
+
# Retrieves the collection of products to display when "previewing" a taxon. This is abstracted into a helper so
|
4
|
+
# that we can use configurations as well as make it easier for end users to override this determination. One idea is
|
5
|
+
# to show the most popular products for a particular taxon (that is an exercise left to the developer.)
|
6
|
+
def taxon_preview(taxon, max=4)
|
7
|
+
products = taxon.active_products.select("DISTINCT (spree_products.id), spree_products.*, spree_products_taxons.position").limit(max)
|
8
|
+
if (products.size < max)
|
9
|
+
products_arel = Spree::Product.arel_table
|
10
|
+
taxon.descendants.each do |taxon|
|
11
|
+
to_get = max - products.length
|
12
|
+
products += taxon.active_products.select("DISTINCT (spree_products.id), spree_products.*, spree_products_taxons.position").where(products_arel[:id].not_in(products.map(&:id))).limit(to_get)
|
13
|
+
break if products.size >= max
|
14
|
+
end
|
15
|
+
end
|
16
|
+
products
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%# Link to the "First" page
|
2
|
+
- available local variables
|
3
|
+
url: url to the first page
|
4
|
+
current_page: a page object for the currently displayed page
|
5
|
+
num_pages: total number of pages
|
6
|
+
per_page: number of items to fetch per page
|
7
|
+
remote: data-remote
|
8
|
+
-%>
|
9
|
+
<% unless current_page.first? %>
|
10
|
+
<li class="first">
|
11
|
+
<%= link_to_unless current_page.first?, raw(t 'views.pagination.first'), url, :remote => remote %>
|
12
|
+
</li>
|
13
|
+
<% end %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<%# Non-link tag that stands for skipped pages...
|
2
|
+
- available local variables
|
3
|
+
current_page: a page object for the currently displayed page
|
4
|
+
num_pages: total number of pages
|
5
|
+
per_page: number of items to fetch per page
|
6
|
+
remote: data-remote
|
7
|
+
-%>
|
8
|
+
<li class="page gap disabled"><a href="#" onclick="return false;"><%= raw(t 'views.pagination.truncate') %></a></li>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%# Link to the "Last" page
|
2
|
+
- available local variables
|
3
|
+
url: url to the last page
|
4
|
+
current_page: a page object for the currently displayed page
|
5
|
+
num_pages: total number of pages
|
6
|
+
per_page: number of items to fetch per page
|
7
|
+
remote: data-remote
|
8
|
+
-%>
|
9
|
+
<% unless current_page.last? %>
|
10
|
+
<li class="last next"><%# "next" class present for border styling in twitter bootstrap %>
|
11
|
+
<%= link_to_unless current_page.last?, raw(t 'views.pagination.last'), url, {:remote => remote} %>
|
12
|
+
</li>
|
13
|
+
<% end %>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%# Link to the "Next" page
|
2
|
+
- available local variables
|
3
|
+
url: url to the next page
|
4
|
+
current_page: a page object for the currently displayed page
|
5
|
+
num_pages: total number of pages
|
6
|
+
per_page: number of items to fetch per page
|
7
|
+
remote: data-remote
|
8
|
+
-%>
|
9
|
+
<% unless current_page.last? %>
|
10
|
+
<li class="next_page">
|
11
|
+
<%= link_to_unless current_page.last?, raw(t 'views.pagination.next'), url, :rel => 'next', :remote => remote %>
|
12
|
+
</li>
|
13
|
+
<% end %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%# Link showing page number
|
2
|
+
- available local variables
|
3
|
+
page: a page object for "this" page
|
4
|
+
url: url to this page
|
5
|
+
current_page: a page object for the currently displayed page
|
6
|
+
num_pages: total number of pages
|
7
|
+
per_page: number of items to fetch per page
|
8
|
+
remote: data-remote
|
9
|
+
-%>
|
10
|
+
<li class="page<%= ' active' if page.current? %>">
|
11
|
+
<%= link_to page, url, opts = {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil} %>
|
12
|
+
</li>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<%# The container tag
|
2
|
+
- available local variables
|
3
|
+
current_page: a page object for the currently displayed page
|
4
|
+
num_pages: total number of pages
|
5
|
+
per_page: number of items to fetch per page
|
6
|
+
remote: data-remote
|
7
|
+
paginator: the paginator that renders the pagination tags inside
|
8
|
+
-%>
|
9
|
+
<%- pagination_class ||= '' %>
|
10
|
+
<%= paginator.render do -%>
|
11
|
+
<ul class="pagination <%= pagination_class %>">
|
12
|
+
<%= first_page_tag unless current_page.first? %>
|
13
|
+
<%= prev_page_tag unless current_page.first? %>
|
14
|
+
<% each_page do |page| -%>
|
15
|
+
<% if page.left_outer? || page.right_outer? || page.inside_window? -%>
|
16
|
+
<%= page_tag page %>
|
17
|
+
<% elsif !page.was_truncated? -%>
|
18
|
+
<%= gap_tag %>
|
19
|
+
<% end -%>
|
20
|
+
<% end -%>
|
21
|
+
<%= next_page_tag unless current_page.last? %>
|
22
|
+
<%= last_page_tag unless current_page.last? %>
|
23
|
+
</ul>
|
24
|
+
<% end -%>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%# Link to the "Previous" page
|
2
|
+
- available local variables
|
3
|
+
url: url to the previous page
|
4
|
+
current_page: a page object for the currently displayed page
|
5
|
+
num_pages: total number of pages
|
6
|
+
per_page: number of items to fetch per page
|
7
|
+
remote: data-remote
|
8
|
+
-%>
|
9
|
+
<% unless current_page.first? %>
|
10
|
+
<li class="prev">
|
11
|
+
<%= link_to_unless current_page.first?, raw(t 'views.pagination.previous'), url, :rel => 'prev', :remote => remote %>
|
12
|
+
</li>
|
13
|
+
<% end %>
|
@@ -1,40 +1,40 @@
|
|
1
1
|
<% address_id = address_type.chars.first %>
|
2
2
|
<div class="inner" data-hook=<%="#{address_type}_inner" %>>
|
3
|
-
<p class="
|
3
|
+
<p class="form-group" id=<%="#{address_id}firstname" %>>
|
4
4
|
<%= form.label :firstname, Spree.t(:first_name) %><span class="required">*</span><br />
|
5
|
-
<%= form.text_field :firstname, :class => 'required' %>
|
5
|
+
<%= form.text_field :firstname, :class => 'form-control required' %>
|
6
6
|
</p>
|
7
|
-
<p class="
|
7
|
+
<p class="form-group" id=<%="#{address_id}lastname" %>>
|
8
8
|
<%= form.label :lastname, Spree.t(:last_name) %><span class="required">*</span><br />
|
9
|
-
<%= form.text_field :lastname, :class => 'required' %>
|
9
|
+
<%= form.text_field :lastname, :class => 'form-control required' %>
|
10
10
|
</p>
|
11
11
|
<% if Spree::Config[:company] %>
|
12
|
-
<p class="
|
12
|
+
<p class="form-group" id=<%="#{address_id}company" %>>
|
13
13
|
<%= form.label :company, Spree.t(:company) %><br />
|
14
|
-
<%= form.text_field :company %>
|
14
|
+
<%= form.text_field :company, :class => 'form-control' %>
|
15
15
|
</p>
|
16
16
|
<% end %>
|
17
|
-
<p class="
|
17
|
+
<p class="form-group" id=<%="#{address_id}address1" %>>
|
18
18
|
<%= form.label :address1, Spree.t(:street_address) %><span class="required">*</span><br />
|
19
|
-
<%= form.text_field :address1, :class => 'required' %>
|
19
|
+
<%= form.text_field :address1, :class => 'form-control required' %>
|
20
20
|
</p>
|
21
|
-
<p class="
|
21
|
+
<p class="form-group" id=<%="#{address_id}address2" %>>
|
22
22
|
<%= form.label :address2, Spree.t(:street_address_2) %><br />
|
23
|
-
<%= form.text_field :address2 %>
|
23
|
+
<%= form.text_field :address2, :class => 'form-control' %>
|
24
24
|
</p>
|
25
|
-
<p class="
|
25
|
+
<p class="form-group" id=<%="#{address_id}city" %>>
|
26
26
|
<%= form.label :city, Spree.t(:city) %><span class="required">*</span><br />
|
27
|
-
<%= form.text_field :city, :class => 'required' %>
|
27
|
+
<%= form.text_field :city, :class => 'form-control required' %>
|
28
28
|
</p>
|
29
|
-
<p class="
|
29
|
+
<p class="form-group" id=<%="#{address_id}country" %>>
|
30
30
|
<%= form.label :country_id, Spree.t(:country) %><span class="required">*</span><br />
|
31
31
|
<span id=<%="#{address_id}country-selection" %>>
|
32
|
-
<%= form.collection_select :country_id, available_countries, :id, :name, {}, {:class => 'required'} %>
|
32
|
+
<%= form.collection_select :country_id, available_countries, :id, :name, {}, {:class => 'form-control required'} %>
|
33
33
|
</span>
|
34
34
|
</p>
|
35
35
|
|
36
36
|
<% if Spree::Config[:address_requires_state] %>
|
37
|
-
<p class="
|
37
|
+
<p class="form-group" id=<%="#{address_id}state" %>>
|
38
38
|
<% have_states = !address.country.states.empty? %>
|
39
39
|
<%= form.label :state, Spree.t(:state) %><span class='required' id=<%="#{address_id}state-required"%>>*</span><br/>
|
40
40
|
|
@@ -42,10 +42,10 @@
|
|
42
42
|
form.collection_select(:state_id, address.country.states,
|
43
43
|
:id, :name,
|
44
44
|
{:include_blank => true},
|
45
|
-
{:class => have_states ? 'required' : 'hidden',
|
45
|
+
{:class => have_states ? 'form-control required' : 'form-control hidden',
|
46
46
|
:disabled => !have_states}) +
|
47
47
|
form.text_field(:state_name,
|
48
|
-
:class => !have_states ? 'required' : 'hidden',
|
48
|
+
:class => !have_states ? 'form-control required' : 'form-control hidden',
|
49
49
|
:disabled => have_states)
|
50
50
|
].join.gsub('"', "'").gsub("\n", "")
|
51
51
|
%>
|
@@ -54,22 +54,22 @@
|
|
54
54
|
<% end %>
|
55
55
|
</p>
|
56
56
|
<noscript>
|
57
|
-
<%= form.text_field :state_name, :class => 'required' %>
|
57
|
+
<%= form.text_field :state_name, :class => 'form-control required' %>
|
58
58
|
</noscript>
|
59
59
|
<% end %>
|
60
60
|
|
61
|
-
<p class="
|
61
|
+
<p class="form-group" id=<%="#{address_id}zipcode" %>>
|
62
62
|
<%= form.label :zipcode, Spree.t(:zip) %><% if address.require_zipcode? %><span class="required">*</span><br /><% end %>
|
63
|
-
<%= form.text_field :zipcode, :class => "#{'required' if address.require_zipcode?}" %>
|
63
|
+
<%= form.text_field :zipcode, :class => "form-control #{'required' if address.require_zipcode?}" %>
|
64
64
|
</p>
|
65
|
-
<p class="
|
65
|
+
<p class="form-group" id=<%="#{address_id}phone" %>>
|
66
66
|
<%= form.label :phone, Spree.t(:phone) %><% if address.require_phone? %><span class="required">*</span><br /><% end %>
|
67
|
-
<%= form.phone_field :phone, :class => "#{'required' if address.require_phone?}" %>
|
67
|
+
<%= form.phone_field :phone, :class => "form-control #{'required' if address.require_phone?}" %>
|
68
68
|
</p>
|
69
69
|
<% if Spree::Config[:alternative_shipping_phone] %>
|
70
|
-
<p class="
|
70
|
+
<p class="form-group" id=<%="#{address_id}altphone" %>>
|
71
71
|
<%= form.label :alternative_phone, Spree.t(:alternative_phone) %><br />
|
72
|
-
<%= form.phone_field :alternative_phone %>
|
72
|
+
<%= form.phone_field :alternative_phone, :class => 'form-control' %>
|
73
73
|
</p>
|
74
74
|
<% end %>
|
75
75
|
</div>
|
@@ -1,28 +1,39 @@
|
|
1
|
-
<div class="
|
2
|
-
<
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
<div class="row">
|
2
|
+
<div class="col-sm-6" data-hook="billing_fieldset_wrapper">
|
3
|
+
<div class="panel panel-default" id="billing" data-hook>
|
4
|
+
<%= form.fields_for :bill_address do |bill_form| %>
|
5
|
+
<div class="panel-heading">
|
6
|
+
<h3 class="panel-title"><%= Spree.t(:billing_address) %></h3>
|
7
|
+
</div>
|
8
|
+
<div class="panel-body">
|
9
|
+
<%= render :partial => 'spree/address/form', :locals => { :form => bill_form, :address_type => 'billing', :address => @order.bill_address } %>
|
10
|
+
</div>
|
11
|
+
<% end %>
|
12
|
+
</div>
|
13
|
+
</div>
|
9
14
|
|
10
|
-
<div class="
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
<div class="col-sm-6" data-hook="shipping_fieldset_wrapper">
|
16
|
+
<div class="panel panel-default" id="shipping" data-hook>
|
17
|
+
<%= form.fields_for :ship_address do |ship_form| %>
|
18
|
+
<div class="panel-heading">
|
19
|
+
<h3 class="panel-title"><%= Spree.t(:shipping_address) %></h3>
|
20
|
+
</div>
|
21
|
+
<div class="panel-body">
|
22
|
+
<p class="field checkbox" data-hook="use_billing">
|
23
|
+
<%= label_tag :order_use_billing, :id => 'use_billing' do %>
|
24
|
+
<%= check_box_tag 'order[use_billing]', '1', @order.shipping_eq_billing_address? %>
|
25
|
+
<%= Spree.t(:use_billing_address) %>
|
26
|
+
<% end %>
|
27
|
+
</p>
|
28
|
+
<%= render :partial => 'spree/address/form', :locals => { :form => ship_form, :address_type => 'shipping', :address => @order.ship_address } %>
|
29
|
+
</div>
|
30
|
+
<% end %>
|
31
|
+
</div>
|
32
|
+
</div>
|
21
33
|
</div>
|
22
|
-
<hr class="clear" />
|
23
34
|
|
24
|
-
<div class="form-buttons" data-hook="buttons">
|
25
|
-
<%= submit_tag Spree.t(:save_and_continue), :class => '
|
35
|
+
<div class="well text-right form-buttons" data-hook="buttons">
|
36
|
+
<%= submit_tag Spree.t(:save_and_continue), :class => 'btn btn-lg btn-success' %>
|
26
37
|
<% if try_spree_current_user %>
|
27
38
|
<span data-hook="save_user_address">
|
28
39
|
|